# include "splintMacros.nf"
# include "llbasic.h"
# include "cgrammar.h"
-
-# ifndef NOLCL
# include "usymtab_interface.h"
-# endif
# include "structNames.h"
# include "nameChecks.h"
/*drl added 3-28-2002*/
/* this function takes a list of paramentar and generates a list
of constraints.
- Currently the only constraints gnerated are MaxSet(p) >= 0 for all pointers
+*/
+
+/* drl modified 10/23/2002
+
+The current semantics are generated constraints of the form MaxSet(p) >= 0 and MaxRead(p) >= 0 for all pointers
+unless the @out@ annotation has been applied to a parameter, then we only want to generate maxSet(p) > = 0
*/
void setImplictfcnConstraints (void)
DPRINTF((message ("%s is NOT a pointer", sRef_unparse(s) ) ));
}
/*drl 4/26/01
- chagned this is MaxSet(s) == 0 to MaxSet(s) >= 0 */
-
+ chagned this from MaxSet(s) == 0 to MaxSet(s) >= 0 */
c = constraint_makeSRefWriteSafeInt (s, 0);
- /* constraint_makeSRefSetBufferSize (s, 0); */
+
implicitFcnConstraints = constraintList_add(implicitFcnConstraints , c);
+
+ /*drl 10/23/2002 added support for out*/
+ if (!uentry_isOut(el) )
+ {
+ c = constraint_makeSRefReadSafeInt (s, 0);
+
+ implicitFcnConstraints = constraintList_add(implicitFcnConstraints , c);
+ }
+
+
}
end_uentryList_elements;
+ DPRINTF((message("implicitFcnConstraints has been set to %s\n",
+ constraintList_print(implicitFcnConstraints) ) ));
}
resetGlobals ();
}
-
+
resetStorageClass ();
- idDecl_free (tid);
}
+
+ idDecl_free (tid);
}
void declareStaticFunction (idDecl tid) /*@globals undef saveFunction; @*/
uentry ue = usymtab_lookupSafe (ye);
llassert (uentry_isEitherConstant (ue));
- llassertprint (ctype_match (uentry_getType (ue), rrep),
- ("Bad enum: %s / %s",
- uentry_unparse (ue),
- ctype_unparse (rrep)));
-
- uentry_setType (ue, at);
+
+ /* evans 2002-04-22 */
+ if (ctype_isBool (uentry_getType (ue)))
+ {
+ /*
+ ** If set using -booltrue or -boolfalse, don't change the type.
+ */
+ }
+ else
+ {
+ llassertprint (ctype_match (uentry_getType (ue), rrep),
+ ("Bad enum: %s / %s",
+ uentry_unparse (ue),
+ ctype_unparse (rrep)));
+
+ uentry_setType (ue, at);
+ }
}
} end_enumNameList_elements;
}
}
else
{
- return (declareEnum (id, enumNameList_new ()));
+ return (ctype_createForwardEnum (id));
}
}
sRef checkbufferConstraintClausesId (uentry ue)
{
+ sRef sr;
cstring s = uentry_rawName (ue);
if (cstring_equalLit (s, "result"))
}
}
- DPRINTF (("constrant id: %s", uentry_unparseFull (ue)));
- return sRef_saveCopy (uentry_getSref (ue)); /*@i523 why the saveCopy? */
+ DPRINTF (("constraint id: %s", uentry_unparseFull (ue)));
+ sr = uentry_getSref (ue);
+
+ if (sRef_isInvalid (sr) )
+ {
+ llfatalerrorLoc (cstring_makeLiteral("Macro defined constants can not be used in function constraints unless they are specifed with the constant annotation. To use a macro defined constant include an annotation of the form /*@constant <type> <name>=<value>@*/ somewhere before the function constraint. This restriction may be removed in future releases if it is determined to be excessively burdensome." ));
+ }
+ return sRef_saveCopy (sr); /*@i523 why the saveCopy? */
}
void checkModifiesId (uentry ue)