]> andersk Git - splint.git/commitdiff
do..while control flow fix in exprNode.c
authorevans1629 <evans1629>
Sat, 6 Oct 2001 04:58:06 +0000 (04:58 +0000)
committerevans1629 <evans1629>
Sat, 6 Oct 2001 04:58:06 +0000 (04:58 +0000)
src/exprNode.c

index e6e08d2372053076691fc04f43fd00612f05a43c..c9c6cdc392b01c6618f3030c5c351fed51315587 100644 (file)
@@ -6356,6 +6356,7 @@ exprNode_mustBreak (exprNode e)
     {
       return e->mustBreak;
     }
+
   return FALSE;
 }
 
@@ -7254,7 +7255,10 @@ exprNode exprNode_while (/*@keep@*/ exprNode t, /*@keep@*/ exprNode b)
 exprNode exprNode_doWhile (/*@only@*/ exprNode b, /*@only@*/ exprNode t)
 {
   exprNode ret;
-  
+
+  DPRINTF (("Do while: %s / %s",
+           exprNode_unparse (b), exprNode_unparse (t)));
+
   if (exprNode_isError (t))
     {
       if (exprNode_isError (b))
@@ -7269,11 +7273,15 @@ exprNode exprNode_doWhile (/*@only@*/ exprNode b, /*@only@*/ exprNode t)
          exprNode_checkUse (ret, b->sref, b->loc);
          ret->exitCode = b->exitCode;
          ret->canBreak = b->canBreak;
-         ret->mustBreak = b->mustBreak;
+         ret->mustBreak = FALSE;
        }
     }
   else
     {
+      DPRINTF (("Do while: %s / %s",
+               exitkind_unparse (t->exitCode),
+               exitkind_unparse (b->exitCode)));
+
       ret = exprNode_createPartialCopy (t);
       exprNode_checkPred (cstring_makeLiteralTemp ("while"), t);
       
@@ -7294,9 +7302,16 @@ exprNode exprNode_doWhile (/*@only@*/ exprNode b, /*@only@*/ exprNode t)
          exprNode_mergeUSs (ret, t);
          exprNode_checkUse (ret, t->sref, t->loc);
 
-         ret->exitCode = b->exitCode;
+         /* evans 2001-10-05: while loop can break */
+         ret->exitCode = exitkind_makeConditional (b->exitCode);
+
+         DPRINTF (("Do while: %s",
+                   exitkind_unparse (ret->exitCode)));
+
          ret->canBreak = b->canBreak;
-         ret->mustBreak = b->mustBreak;
+
+         /* Always FALSE for doWhile loops - break's when test is false */
+         ret->mustBreak = FALSE; /* b->mustBreak; */
        }
     }
   
This page took 0.075998 seconds and 5 git commands to generate.