]> git.sur5r.net Git - cc65/commitdiff
Check for and warn on statements that don't have an effect
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 5 Jun 2004 12:56:51 +0000 (12:56 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 5 Jun 2004 12:56:51 +0000 (12:56 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@3097 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/cc65/stmt.c

index ad9892707fbc520ad36d961dff69da47a7e445a5..44a98072d86c5ee1143323a168e6cec2d0283545 100644 (file)
@@ -519,6 +519,7 @@ int Statement (int* PendingToken)
 {
     ExprDesc Expr;
     int GotBreak;
+    CodeMark Start;
 
     /* Assume no pending token */
     if (PendingToken) {
@@ -590,6 +591,8 @@ int Statement (int* PendingToken)
                break;
 
            default:
+                /* Remember the current code position */
+                Start = GetCodePos ();
                /* Actual statement */
                 ExprWithCheck (hie0, &Expr);
                 /* Load the result only if it is an lvalue and the type is
@@ -598,6 +601,12 @@ int Statement (int* PendingToken)
                 if (ED_IsLVal (&Expr) && IsQualVolatile (Expr.Type)) {
                     ExprLoad (CF_NONE, &Expr);
                 }
+                /* If the statement didn't generate code, and is not of type
+                 * void, emit a warning 
+                 */
+                if (GetCodePos () == Start && !IsTypeVoid (Expr.Type)) {
+                    Warning ("Statement has no effect");
+                }
                CheckSemi (PendingToken);
        }
     }