X-Git-Url: http://andersk.mit.edu/gitweb/splint.git/blobdiff_plain/ef2aa32aebac950c1784a2dd25f0fa299b8840da..a9ec328054b628447830161535f4915f715f49cd:/src/Headers/constraint.h diff --git a/src/Headers/constraint.h b/src/Headers/constraint.h index a50051a..57676f4 100644 --- a/src/Headers/constraint.h +++ b/src/Headers/constraint.h @@ -4,111 +4,168 @@ typedef enum { - LT, LTE, GT, GTE, EQ, NONNEGATIVE, POSITIVE + LT, LTE, GT, GTE, EQ, NONNEGATIVE, POSITIVE, } arithType; -//abst_typedef struct constr_ * constr; - - -struct _constraint { - constraint orig; +struct s_constraint { + arithType ar; + constraint orig; + constraint or; + bool fcnPre; constraintExpr lexpr; - arithType ar; - constraintExpr expr; + constraintExpr expr; bool post; + /*@exposed@*/ /*@dependent@*/ exprNode generatingExpr; } ; -abst_typedef struct _constraintTerm * constraintTerm; +/*@constant null constraint constraint_undefined; @*/ -//constraint constraint_create (exprNode e1, exprNode e2, arithType restriction, constraintType kind); +# define constraint_undefined ((constraint)NULL) +extern /*@falsewhennull@*/ bool constraint_isDefined (constraint p_e) /*@*/ ; +extern /*@unused@*/ /*@nullwhentrue@*/ bool constraint_isUndefined (constraint p_e) /*@*/ ; +extern /*@nullwhentrue@*/ /*@unused@*/ bool constraint_isError (constraint p_e) /*@*/ ; -constraint makeConstraintParse (sRef x, lltok relOp, exprNode cconstant); +# define constraint_isDefined(e) ((e) != constraint_undefined) +# define constraint_isUndefined(e) ((e) == constraint_undefined) +# define constraint_isError(e) ((e) == constraint_undefined) +extern void constraint_free (/*@only@*/ constraint p_c); -constraint constraint_createReadSafe (exprNode p_e1, exprNode p_e2); +/* constraint makeConstraintParse (sRef x, lltok relOp, exprNode cconstant); */ -constraint constraint_makeInc_Op (exprNode p_e1); - -/*@i22*/ /*@-czechfcns*/ -bool constraint_resolve (/*@unused@*/ constraint c); - -/*@out@*/ constraintTerm new_constraintTermExpr (void); -/*@special@*/ constraintExpr makeConstraintExpr (/*@only@*/ /*@notnull@*/ constraintTerm term) - /*@post:isnull result->expr@*/ - /*@post:notnull result->t1@*/ - /*@defines result->expr, result->t1, result->c1@, result->op*/; - -constraintExpr makeConstraintExprIntlit (int p_i); +extern constraint +constraint_makeReadSafeExprNode (/*@observer@*/ exprNode p_po, + /*@observer@*/ exprNode p_ind); -/*@relnull@*/ constraint constraint_makeReadSafeExprNode ( exprNode p_po, exprNode p_ind); +extern /*@only@*/ constraint constraint_makeWriteSafeExprNode (/*@observer@*/ exprNode p_po, + /*@observer@*/ exprNode p_ind); -constraint constraint_makeWriteSafeExprNode (exprNode p_po, exprNode p_ind); +extern /*@only@*/ constraint constraint_makeReadSafeInt (/*@observer@*/ exprNode p_t1, int p_index); -constraint constraint_makeReadSafeInt (exprNode p_t1, int p_index); +extern /*@only@*/ constraint +constraint_makeEnsureMaxReadAtLeast (/*@observer@*/ exprNode p_t1, + /*@observer@*/ exprNode p_t2, fileloc p_sequencePoint); -constraint constraint_makeEnsureMaxReadAtLeast (exprNode p_t1, exprNode p_t2, fileloc p_sequencePoint); +extern void constraint_overWrite (constraint p_c1, /*@observer@*/ constraint p_c2) + /*@modifies p_c1 @*/; -constraint constraint_makeEnsureMinReadAtMost (exprNode po, exprNode ind, fileloc sequencePoint); +extern /*@only@*/ constraint constraint_copy (/*@temp@*/ constraint p_c); -constraint constraint_makeSideEffectPostIncrement (exprNode t1, fileloc p_sequencePoint); -void constraint_overWrite (constraint c1, constraint c2); -constraint constraint_copy (constraint c); +extern bool fileloc_closer (/*@observer@*/ fileloc p_loc1, + /*@observer@*/ fileloc p_loc2, + /*@observer@*/ fileloc p_loc3) /*@*/; -constraintExpr makePostOpInc (exprNode t1); +extern /*@only@*/ cstring arithType_print (arithType p_ar) /*@*/; +extern /*@only@*/ fileloc constraint_getFileloc (constraint p_c); -bool fileloc_closer (fileloc loc1, fileloc loc2, fileloc loc3); +extern /*@only@*/ cstring constraint_unparse (/*@temp@*/ constraint p_c) /*@*/; +extern /*@only@*/ cstring constraint_unparseOr (/*@temp@*/ constraint p_c) /*@*/ ; +extern /*@only@*/ cstring constraint_unparseDetailed (constraint p_c) /*@*/ ; +extern /*@only@*/ constraint +constraint_makeWriteSafeInt (/*@dependent@*/ /*@observer@*/ exprNode p_po, int p_ind); -cstring arithType_print (arithType ar) /*@*/; +extern exprNode exprNode_copyConstraints (/*@returned@*/ exprNode p_dst, exprNode p_src) /*@modifies p_dst @*/; +extern /*@only@*/ constraint constraint_makeEnsureEqual (/*@dependent@*/ /*@observer@*/ exprNode p_e1, /*@dependent@*/ /*@observer@*/ exprNode p_e2, fileloc p_sequencePoint); -fileloc constraint_getFileloc (constraint c); -cstring constraint_print (constraint c) /*@*/; -constraint constraint_makeWriteSafeInt (exprNode po, int ind); +extern /*@only@*/ constraint constraint_makeMaxSetSideEffectPostIncrement (/*@dependent@*/ /*@observer@*/ exprNode p_e, fileloc p_sequencePoint); -exprNode exprNode_copyConstraints (exprNode dst, exprNode src); +extern constraint constraint_preserveOrig (/*@returned@*/ constraint p_c) /*@modifies p_c @*/; +extern /*@only@*/ constraint constraint_doSRefFixBaseParam (/*@returned@*/ /*@only@*/ constraint p_precondition, + exprNodeList p_arglist); +extern /*@only@*/ constraint constraint_makeEnsureLessThan (/*@dependent@*/ /*@observer@*/ exprNode p_e1, /*@dependent@*/ /*@observer@*/ exprNode p_e2, fileloc p_sequencePoint); +extern /*@only@*/ constraint constraint_makeEnsureLessThanEqual (/*@dependent@*/ /*@observer@*/ exprNode p_e1, /*@dependent@*/ /*@observer@*/ exprNode p_e2, fileloc p_sequencePoint); -constraint constraint_makeEnsureEqual (exprNode e1, exprNode e2, fileloc sequencePoint); +extern /*@only@*/ constraint constraint_makeEnsureGreaterThan (/*@dependent@*/ /*@observer@*/ exprNode p_e1, /*@dependent@*/ /*@observer@*/ exprNode p_e2, fileloc p_sequencePoint); +extern /*@only@*/ constraint constraint_makeEnsureGreaterThanEqual (/*@dependent@*/ /*@observer@*/ exprNode p_e1, /*@dependent@*/ /*@observer@*/ exprNode p_e2, fileloc p_sequencePoint); -constraint constraint_makeMaxSetSideEffectPostIncrement (exprNode e, fileloc sequencePoint); +/*drl add 11/28/2000 */ +extern /*@only@*/ constraint constraint_makeSRefWriteSafeInt (sRef p_s, int p_ind); +extern /*@unused@*/ /*@only@*/ constraint constraint_makeSRefReadSafeInt (sRef p_s, int p_ind); +/*drl add 11/26/2000 */ +extern void constraint_printError (/*@observer@*/ /*@temp@*/ constraint p_c, /*@temp@*/ /*@observer@*/ fileloc p_loc); -constraint constraint_preserveOrig (constraint c); -constraint constraint_doSRefFixBaseParam (constraint precondition, - exprNodeList arglist); +extern /*@only@*/ constraint constraint_doSRefFixConstraintParam (constraint p_precondition, + /*@temp@*/ /*@observer@*/ exprNodeList p_arglist); -cstring constraint_printDetailed (constraint c); +extern /*@only@*/ constraint constraint_makeSRefSetBufferSize (sRef p_s, long int p_size); -constraint constraint_makeEnsureLessThan (exprNode e1, exprNode e2, fileloc sequencePoint); +extern /*@only@*/ constraint constraint_doFixResult (constraint p_postcondition, /*@dependent@*/ /*@observer@*/ exprNode p_fcnCall); -constraint constraint_makeEnsureLessThanEqual (exprNode e1, exprNode e2, fileloc sequencePoint); -constraint constraint_makeEnsureGreaterThan (exprNode e1, exprNode e2, fileloc sequencePoint); -constraint constraint_makeEnsureGreaterThanEqual (exprNode e1, exprNode e2, fileloc sequencePoint); +extern /*@only@*/ constraint constraint_makeEnsureLteMaxRead(/*@dependent@*/ /*@observer@*/ exprNode p_index, /*@dependent@*/ /*@observer@*/ exprNode p_buffer); -/*drl add 11/28/2000 */ -constraint constraint_makeSRefWriteSafeInt (sRef s, int ind); +extern /*@only@*/ constraint constraint_makeMaxSetSideEffectPostDecrement (/*@dependent@*/ /*@observer@*/ exprNode p_e, fileloc p_sequencePoint); -/*drl add 11/26/2000 */ -void constraint_printError (constraint c, fileloc loc); -constraint constraint_doSRefFixConstraintParam (constraint precondition, - exprNodeList arglist); +extern bool constraint_search (constraint p_c, constraintExpr p_old); + +extern /*@only@*/ constraint makeConstraintParse3 (constraintExpr p_l, lltok p_relOp, constraintExpr p_r); + +extern constraint constraint_addGeneratingExpr (/*@returned@*/ constraint p_c, /*@dependent@*/ /*@exposed@*/ exprNode p_e); + +extern bool constraint_hasMaxSet(constraint p_c); + +/*from constraintGenreation.c*/ +extern void exprNode_exprTraverse (exprNode p_e, bool p_definatelv, bool p_definaterv, /*@temp@*/ /*@observer@*/ fileloc p_sequencePoint); + +extern /*@only@*/ constraintList +exprNode_traverseRequiresConstraints (exprNode p_e); + +extern /*@only@*/ constraintList +exprNode_traverseEnsuresConstraints (exprNode p_e); + +extern constraint constraint_togglePost (/*@returned@*/ constraint p_c); +extern bool constraint_same (constraint p_c1, constraint p_c2) ; +extern void constraint_printErrorPostCondition (constraint p_c, fileloc p_loc) ; -constraint constraint_makeSRefSetBufferSize (sRef s, int size); +extern cstring constraint_printLocation (/*@observer@*/ /*@temp@*/ constraint p_c) /*@*/; /*drl add 8-11-001*/ -constraint constraint_doFixResult (constraint postcondition, exprNode fcnCall); +extern constraint constraint_setFcnPre (/*@returned@*/ constraint p_c) ; +extern constraint constraint_origAddGeneratingExpr (/*@returned@*/ constraint p_c, /*@dependent@*/ /*@observer@*/ exprNode p_e) ; -constraint constraint_makeEnsureLteMaxRead(exprNode index, exprNode buffer); +extern bool /*@alt void@*/ exprNode_generateConstraints (/*@temp@*/ exprNode p_e) ; +constraint constraint_togglePostOrig (/*@returned@*/ constraint p_c); +bool constraint_hasOrig( /*@observer@*/ /*@temp@*/ constraint p_c); + +constraint constraint_makeAddAssign (/*@dependent@*/ /*@observer@*/ exprNode p_e, /*@dependent@*/ /*@observer@*/ exprNode p_f, fileloc p_sequencePoint); + +constraint constraint_makeSubtractAssign (/*@dependent@*/ /*@observer@*/ exprNode p_e, /*@dependent@*/ /*@observer@*/ exprNode p_f, fileloc p_sequencePoint); + +/*@only@*/ constraint constraint_undump (FILE * p_f); + +void constraint_dump (/*@observer@*/ constraint p_c, FILE * p_f); + +extern void exprNode_forLoopHeuristics( /*@dependent@*/ exprNode p_e, /*@dependent@*/ exprNode p_forPred, /*@dependent@*/ exprNode p_forBody); + +int constraint_compare (/*@observer@*/ /*@temp@*/ const constraint * p_c1, /*@observer@*/ /*@temp@*/ const constraint * p_c2) /*@*/; + +bool constraint_isPost (/*@observer@*/ /*@temp@*/ constraint p_c); + +bool constraint_tooDeep (/*@observer@*/ /*@temp@*/ constraint p_c); + +void exprNode_findValue( exprNode p_e); + +/*drl 1/6/2001: I didn't think these functions were solid enough to include in the stable release of splint.*/ +/*drl added 12/30/01 */ +/* extern / *@only@* / constraint constraint_doSRefFixInvarConstraint(constraint p_invar, sRef p_s, ctype p_ct ); */ + +/*drl added 12/19 */ +bool constraint_isConstantOnly (constraint p_c); /*@=czechfcns*/ -//#warning take this out -#include "constraintList.h" +/* drl possible problem : warning take this out */ -#include "constraintExpr.h" -#include "constraintTerm.h" #include "constraintResolve.h" +#include "constraintOutput.h" + +#else + +#error Multiple include + #endif