]> andersk Git - splint.git/blobdiff - src/constraintExpr.c
Cahnged default LCLIMPORTDIR
[splint.git] / src / constraintExpr.c
index b35251b2f6a096d5cc6339b254a54b8073a33e29..0713302cac06971eacfd5160a0537a90958e867a 100644 (file)
@@ -1,8 +1,32 @@
+/*
+** LCLint - annotation-assisted static program checker
+** Copyright (C) 1994-2001 University of Virginia,
+**         Massachusetts Institute of Technology
+**
+** This program is free software; you can redistribute it and/or modify it
+** under the terms of the GNU General Public License as published by the
+** Free Software Foundation; either version 2 of the License, or (at your
+** option) any later version.
+** 
+** This program is distributed in the hope that it will be useful, but
+** WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+** General Public License for more details.
+** 
+** The GNU General Public License is available from http://www.gnu.org/ or
+** the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+** MA 02111-1307, USA.
+**
+** For information on lclint: lclint-request@cs.virginia.edu
+** To report a bug: lclint-bug@cs.virginia.edu
+** For more information: http://lclint.cs.virginia.edu
+*/
+
 /*
 ** constraintExpr.c
 */
 
-//#define DEBUGPRINT 1
+/* #define DEBUGPRINT 1 */
 
 # include "lclintMacros.nf"
 # include "basic.h"
@@ -12,9 +36,6 @@
 # include "exprChecks.h"
 # include "exprNodeSList.h"
 
-//# include "constraintExpr.h"
-
-
 /*@-czechfcns@*/
 
 
@@ -31,11 +52,10 @@ doSRefFixConstraintParamTerm (/*@only@*/ constraintExpr p_e, /*@temp@*/ /*@obser
 static /*@only@*/ constraintExpr 
 doFixResultTerm (/*@only@*/ constraintExpr p_e, /*@exposed@*/ exprNode p_fcnCall)
      /*@modifies p_e@*/;
-
-
-     /*@special@*/ static constraintExpr constraintExpr_makeBinaryOp (void) ; /// @allocates result->data @ @sets result->kind @;
-
-//constraintExpr constraintExpr_makeMaxSetConstraintExpr (constraintExpr c);
+     
+     
+/*@special@*/ static constraintExpr constraintExpr_makeBinaryOp (void) 
+     /* @allocates result->data @ @sets result->kind @ */ ;
 
 void constraintExpr_free (/*@only@*/ constraintExpr expr)
 {
@@ -145,14 +165,14 @@ static bool isZeroBinaryOp (constraintExpr expr)
 
   tempOp = constraintExprData_binaryExprGetOp (expr2->data);
 
-  if (op == PLUS)
+  if (op == BINARYOP_PLUS)
     op = tempOp;
-  else if (op == MINUS)
+  else if (op == BINARYOP_MINUS)
     {
-      if (tempOp == PLUS)
-       op = MINUS;
-      else if (tempOp == MINUS)
-       op = PLUS;
+      if (tempOp == BINARYOP_PLUS)
+       op = BINARYOP_MINUS;
+      else if (tempOp == BINARYOP_MINUS)
+       op = BINARYOP_PLUS;
       else
        BADEXIT;
     }
@@ -188,7 +208,7 @@ static bool isZeroBinaryOp (constraintExpr expr)
   
   llassert (expr != NULL);
   
-  // we simplify unaryExpr else where
+  /* we simplify unaryExpr elsewhere */
   if (expr->kind != binaryexpr)
     return expr;
 
@@ -213,9 +233,9 @@ static bool isZeroBinaryOp (constraintExpr expr)
   
   *propagate = propagate1 || propagate2;
 
-  if (op == PLUS)
+  if (op == BINARYOP_PLUS)
     *literal    = literal1 +  literal2;
-  else   if (op == MINUS)
+  else   if (op == BINARYOP_MINUS)
     *literal    = literal1 -  literal2;
   else
     BADEXIT;
@@ -232,9 +252,9 @@ static bool isZeroBinaryOp (constraintExpr expr)
       constraintExpr_free (expr1);
       constraintExpr_free (expr2);
 
-      if (op == PLUS )
+      if (op == BINARYOP_PLUS )
        return (constraintExpr_makeIntLiteral ( (t1+t2) ));
-      else if (op ==  MINUS)
+      else if (op ==  BINARYOP_MINUS)
        return (constraintExpr_makeIntLiteral ( (t1-t2) ));
       else
        BADEXIT;
@@ -247,13 +267,13 @@ static bool isZeroBinaryOp (constraintExpr expr)
 
       *literal += constraintExpr_getValue (expr1);
 
-      if (op == PLUS)
+      if (op == BINARYOP_PLUS)
        {
          constraintExpr_free(expr1);
          constraintExpr_free(expr);
          return expr2;
        }
-      else if (op == MINUS)
+      else if (op == BINARYOP_MINUS)
        {
          
          constraintExpr temp;
@@ -279,9 +299,9 @@ static bool isZeroBinaryOp (constraintExpr expr)
     {
       *propagate = TRUE;
           
-      if ( op == PLUS )
+      if ( op == BINARYOP_PLUS )
        *literal += constraintExpr_getValue (expr2);
-      else if (op ==  MINUS)
+      else if (op ==  BINARYOP_MINUS)
        *literal -= constraintExpr_getValue (expr2);
       else
        BADEXIT;
@@ -495,9 +515,9 @@ constraintExpr constraintExpr_makeExprNode (exprNode e)
   return ret;
 }
 
-/*@only@*/  constraintExpr constraintExpr_makeTermExprNode (/*@exposed@*/ exprNode e)
+/*@only@*/ constraintExpr constraintExpr_makeTermExprNode (/*@exposed@*/ exprNode e)
 {
-  return  oldconstraintExpr_makeTermExprNode(e); //constraintExpr_makeExprNode (e);
+  return  oldconstraintExpr_makeTermExprNode(e);
 }
 
 static constraintExpr constraintExpr_makeTerm (/*@only@*/  constraintTerm t)
@@ -542,11 +562,11 @@ constraintExpr constraintExpr_makeTermsRef (/*@temp@*/ sRef s)
 
   /*@-uniondef@*/ 
   /*@-compdef@*/
-    ret->data = constraintExprData_unaryExprSetExpr (ret->data, cexpr);
-    ret->data = constraintExprData_unaryExprSetOp (ret->data, UNARYOP_UNDEFINED);
-
+  ret->data = constraintExprData_unaryExprSetExpr (ret->data, cexpr);
+  ret->data = constraintExprData_unaryExprSetOp (ret->data, UNARYOP_UNDEFINED);
+  
   return ret;
-
+  
   /*@=compdef@*/
   /*@=uniondef@*/
 }
@@ -650,6 +670,7 @@ constraintExpr  constraintExpr_makeMaxReadExpr (exprNode expr)
   return ret; 
 }
 
+# if 0
 /*@only@*/
 /*@unused@*/ static constraintExpr  constraintExpr_makeMinSetExpr (/*@exposed@*/ exprNode expr)
 {
@@ -667,7 +688,7 @@ constraintExpr  constraintExpr_makeMaxReadExpr (exprNode expr)
   ret->data      = constraintExprData_unaryExprSetOp (ret->data, MINREAD);
   return ret;
 }
-
+# endif
 
 /*@only@*/
 constraintExpr constraintExpr_makeValueExpr (/*@exposed@*/ exprNode expr)
@@ -709,7 +730,6 @@ constraintExpr constraintExpr_makeValueInt (int i)
   ret->data->binaryOp.expr1 = constraintExpr_undefined;
   ret->data->binaryOp.expr2 = constraintExpr_undefined;
   
-  //  ret->data = constraintExprData_binaryExprSetOp (ret->data, BINARYOP_UNDEFINED);
   return ret;
 }
 
@@ -732,9 +752,9 @@ constraintExpr constraintExpr_parseMakeBinaryOp (/*@only@*/ constraintExpr expr1
   constraintExpr ret;
   ret = constraintExpr_makeBinaryOpConstraintExpr (expr1, expr2);
   if (op.tok == TPLUS)
-    ret->data = constraintExprData_binaryExprSetOp(ret->data, PLUS);
+    ret->data = constraintExprData_binaryExprSetOp(ret->data, BINARYOP_PLUS);
   else if (op.tok == TMINUS)
-    ret->data = constraintExprData_binaryExprSetOp(ret->data, MINUS);
+    ret->data = constraintExprData_binaryExprSetOp(ret->data, BINARYOP_MINUS);
     else
       {
        llassert(FALSE);
@@ -742,6 +762,7 @@ constraintExpr constraintExpr_parseMakeBinaryOp (/*@only@*/ constraintExpr expr1
   return ret;
 }
 
+# if 0
 /*@only@*/
 /*@unused@*/ static constraintExpr constraintExpr_makeBinaryOpExprNode (/*@exposed@*/ exprNode expr1, /*@exposed@*/ exprNode expr2)
 {
@@ -752,6 +773,7 @@ constraintExpr constraintExpr_parseMakeBinaryOp (/*@only@*/ constraintExpr expr1
   ret = constraintExpr_makeBinaryOpConstraintExpr(sub1, sub2);
   return ret;
 }
+# endif
 
 static /*@only@*/
 constraintExpr constraintExpr_makeBinaryOpConstraintExprIntLiteral (/*@only@*/ constraintExpr expr, int literal)
@@ -761,7 +783,7 @@ constraintExpr constraintExpr_makeBinaryOpConstraintExprIntLiteral (/*@only@*/ c
 
   constExpr = constraintExpr_makeIntLiteral (literal);
   ret = constraintExpr_makeBinaryOpConstraintExpr (expr, constExpr);
-  ret->data = constraintExprData_binaryExprSetOp(ret->data, PLUS);
+  ret->data = constraintExprData_binaryExprSetOp(ret->data, BINARYOP_PLUS);
   return ret;
 }
 
@@ -773,7 +795,7 @@ constraintExpr constraintExpr_makeDecConstraintExpr (/*@only@*/constraintExpr ex
 
   inc = constraintExpr_makeIntLiteral (1);
   ret = constraintExpr_makeBinaryOpConstraintExpr (expr, inc);
-  ret->data = constraintExprData_binaryExprSetOp(ret->data, MINUS);
+  ret->data = constraintExprData_binaryExprSetOp(ret->data, BINARYOP_MINUS);
   return ret;
 }
 
@@ -785,7 +807,7 @@ constraintExpr constraintExpr_makeDecConstraintExpr (/*@only@*/constraintExpr ex
   DPRINTF ( (message ("Making  subtract expression") ) );
 
   ret = constraintExpr_makeBinaryOpConstraintExpr (expr, addent);
-  ret->data = constraintExprData_binaryExprSetOp (ret->data, MINUS);
+  ret->data = constraintExprData_binaryExprSetOp (ret->data, BINARYOP_MINUS);
   return ret;
 }
 
@@ -799,7 +821,7 @@ constraintExpr addent)
   DPRINTF ( (message ("Doing addTerm simplification") ) );
 
   ret = constraintExpr_makeBinaryOpConstraintExpr (expr, addent);
-  ret->data = constraintExprData_binaryExprSetOp (ret->data, PLUS);
+  ret->data = constraintExprData_binaryExprSetOp (ret->data, BINARYOP_PLUS);
   return ret;
 }
 
@@ -812,7 +834,7 @@ constraintExpr constraintExpr_makeIncConstraintExpr (/*@only@*/ constraintExpr e
 
   inc = constraintExpr_makeIntLiteral (1);
   ret = constraintExpr_makeBinaryOpConstraintExpr (expr, inc);
-  ret->data = constraintExprData_binaryExprSetOp(ret->data, PLUS);
+  ret->data = constraintExprData_binaryExprSetOp(ret->data, BINARYOP_PLUS);
   return ret;
 }
 
@@ -842,9 +864,9 @@ static cstring constraintExprBinaryOpKind_print (constraintExprBinaryOpKind op)
   
   switch (op)
     {
-    case PLUS:
+    case BINARYOP_PLUS:
       return message("+");
-    case MINUS:
+    case BINARYOP_MINUS:
       return message("-");
 
     default:
@@ -1137,7 +1159,7 @@ static /*@only@*/ constraintExpr constraintExpr_simplifybinaryExpr (/*@only@*/co
   else
     {
       op = constraintExprData_binaryExprGetOp (c->data);      
-      if (op == MINUS)
+      if (op == BINARYOP_MINUS)
        if (constraintExpr_similar(e1, e2) )
          {
            constraintExpr_free(c);
@@ -1173,23 +1195,23 @@ static /*@only@*/ constraintExpr constraintExpr_simplifybinaryExpr (/*@only@*/co
   expr1 = constraintExpr_copy(expr1);
   expr2 = constraintExpr_copy(expr2);
 
-//drl possible problem : warning make sure this works
-    
-    lexpr->kind = expr1->kind;
-    free (lexpr->data);
-
-    lexpr->data = copyExprData (expr1->data, expr1->kind);
-    constraintExpr_free(expr1);
-    
-    if (op == PLUS)
-      expr = constraintExpr_makeSubtractExpr (expr, expr2);
-    else if (op == MINUS)
-      expr = constraintExpr_makeAddExpr (expr, expr2);
-    else
-      BADEXIT;
-
-    
-    return expr;
+  /* drl possible problem : warning make sure this works */
+  
+  lexpr->kind = expr1->kind;
+  sfree (lexpr->data);
+  
+  lexpr->data = copyExprData (expr1->data, expr1->kind);
+  constraintExpr_free(expr1);
+  
+  if (op == BINARYOP_PLUS)
+    expr = constraintExpr_makeSubtractExpr (expr, expr2);
+  else if (op == BINARYOP_MINUS)
+    expr = constraintExpr_makeAddExpr (expr, expr2);
+  else
+    BADEXIT;
+  
+  
+  return expr;
 
   /*
     #warning this needs to be checked
@@ -1213,7 +1235,6 @@ static /*@only@*/ constraintExpr constraintExpr_simplifyunaryExpr (/*@only@*/ co
     {
       return c;
     }
-  // pattern mxr ( var + const) = mxr(var) - const
   
   exp = constraintExprData_unaryExprGetExpr (c->data);
   exp = constraintExpr_copy(exp);
@@ -1254,10 +1275,11 @@ static /*@only@*/ constraintExpr constraintExpr_simplifyunaryExpr (/*@only@*/ co
          BADEXIT;
        }
 
-      // slight Kludge to hanlde var [] = { , , };
-      // type syntax  I don't think this is sounds but it should be good
-      // enough.  The C stanrad is very confusing about initialization
-      // -- DRL 7/25/01
+      /* slight Kludge to hanlde var [] = { , , };
+      ** type syntax  I don't think this is sounds but it should be good
+      ** enough.  The C stanrad is very confusing about initialization
+      ** -- DRL 7/25/01
+      */
       
       if (constraintTerm_isInitBlock(cterm) )
        {
@@ -1285,10 +1307,10 @@ static /*@only@*/ constraintExpr constraintExpr_simplifyunaryExpr (/*@only@*/ co
       return c;
     }
   
-  if (constraintExprData_binaryExprGetOp (exp->data) == PLUS  )
+  if (constraintExprData_binaryExprGetOp (exp->data) == BINARYOP_PLUS  )
     {
  
-      //      if (constraintExpr_canGetValue (constraintExprData_binaryExprGetExpr2 (exp->data) ) )
+      /* if (constraintExpr_canGetValue (constraintExprData_binaryExprGetExpr2 (exp->data) ) ) */
        {
        
          constraintExpr  temp, temp2;
This page took 2.412185 seconds and 4 git commands to generate.