+/*
+** 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"
# include "exprChecks.h"
# include "exprNodeSList.h"
-//# include "constraintExpr.h"
-
-
/*@-czechfcns@*/
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)
{
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;
}
llassert (expr != NULL);
- // we simplify unaryExpr else where
+ /* we simplify unaryExpr elsewhere */
if (expr->kind != binaryexpr)
return 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;
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;
*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;
{
*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;
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)
/*@-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@*/
}
return ret;
}
+# if 0
/*@only@*/
/*@unused@*/ static constraintExpr constraintExpr_makeMinSetExpr (/*@exposed@*/ exprNode expr)
{
ret->data = constraintExprData_unaryExprSetOp (ret->data, MINREAD);
return ret;
}
-
+# endif
/*@only@*/
constraintExpr constraintExpr_makeValueExpr (/*@exposed@*/ exprNode expr)
ret->data->binaryOp.expr1 = constraintExpr_undefined;
ret->data->binaryOp.expr2 = constraintExpr_undefined;
- // ret->data = constraintExprData_binaryExprSetOp (ret->data, BINARYOP_UNDEFINED);
return ret;
}
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);
return ret;
}
+# if 0
/*@only@*/
/*@unused@*/ static constraintExpr constraintExpr_makeBinaryOpExprNode (/*@exposed@*/ exprNode expr1, /*@exposed@*/ exprNode expr2)
{
ret = constraintExpr_makeBinaryOpConstraintExpr(sub1, sub2);
return ret;
}
+# endif
static /*@only@*/
constraintExpr constraintExpr_makeBinaryOpConstraintExprIntLiteral (/*@only@*/ constraintExpr expr, int literal)
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;
}
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;
}
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;
}
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;
}
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;
}
switch (op)
{
- case PLUS:
+ case BINARYOP_PLUS:
return message("+");
- case MINUS:
+ case BINARYOP_MINUS:
return message("-");
default:
else
{
op = constraintExprData_binaryExprGetOp (c->data);
- if (op == MINUS)
+ if (op == BINARYOP_MINUS)
if (constraintExpr_similar(e1, e2) )
{
constraintExpr_free(c);
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
{
return c;
}
- // pattern mxr ( var + const) = mxr(var) - const
exp = constraintExprData_unaryExprGetExpr (c->data);
exp = constraintExpr_copy(exp);
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) )
{
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;