# include "splintMacros.nf"
# include "llbasic.h"
# include "cgrammar.h"
-
-# ifndef NOLCL
# include "usymtab_interface.h"
-# endif
# include "structNames.h"
# include "nameChecks.h"
static void clabstract_prepareFunction (uentry p_e) /*@modifies p_e@*/ ;
static bool fcnNoGlobals = FALSE;
-static bool ProcessingVars = FALSE;
-static bool ProcessingParams = FALSE;
-static bool ProcessingGlobals = FALSE;
-static bool ProcessingTypedef = FALSE;
-static bool ProcessingIterVars = FALSE;
+static void processVariable (/*@temp@*/ idDecl p_t) /*@modifies internalState@*/ ;
+
+static bool s_processingVars = FALSE;
+static bool s_processingParams = FALSE;
+static bool s_processingGlobals = FALSE;
+static bool s_processingTypedef = FALSE;
+static bool s_processingIterVars = FALSE;
static /*@only@*/ qtype processingType = qtype_undefined;
static uentry currentIter = uentry_undefined;
static /*@dependent@*/ uentryList saveParamList; /* for old style functions */
extern void nextIterParam (void)
{
- llassert (ProcessingIterVars);
+ llassert (s_processingIterVars);
saveIterParamNo++;
}
extern int iterParamNo (void)
{
- llassert (ProcessingIterVars);
+ llassert (s_processingIterVars);
return saveIterParamNo;
}
/*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) ) ));
}
ue = uentry_makeIdFunction (tid);
reflectSpecialCode (ue);
reflectArgsUsed (ue);
+ reflectStorageClass (ue);
+ uentry_checkParams (ue);
+
+ DPRINTF (("Supercede function: %s", uentry_unparseFull (ue)));
+
+ ue = usymtab_supGlobalEntryReturn (ue);
+ DPRINTF (("After supercede function: %s", uentry_unparseFull (ue)));
+
+ DPRINTF (("Enter function: %s", uentry_unparseFull (ue)));
+ context_enterFunction (ue);
+ enterFunctionParams (uentry_getParams (ue));
+
+ resetStorageClass ();
+ DPRINTF (("Function: %s", uentry_unparseFull (ue)));
+ return (ue);
}
else
{
- llparseerror (message ("Inconsistent function declaration: %q",
+ llparseerror (message ("Non-function declaration: %q",
idDecl_unparse (tid)));
-
- tid = idDecl_replaceCtype
- (tid, ctype_makeFunction (ctype_unknown, uentryList_undefined));
- ue = uentry_makeIdFunction (tid);
+ return (uentry_undefined);
}
-
- reflectStorageClass (ue);
- uentry_checkParams (ue);
-
- DPRINTF (("Supercede function: %s", uentry_unparseFull (ue)));
-
- ue = usymtab_supGlobalEntryReturn (ue);
- DPRINTF (("After supercede function: %s", uentry_unparseFull (ue)));
-
- DPRINTF (("Enter function: %s", uentry_unparseFull (ue)));
- context_enterFunction (ue);
- enterFunctionParams (uentry_getParams (ue));
-
- resetStorageClass ();
- DPRINTF (("Function: %s", uentry_unparseFull (ue)));
- return (ue);
}
/*
DPRINTF (("Declare function: %s", idDecl_unparse (tid)));
- if (ProcessingParams)
+ if (ctype_isUnknown (idDecl_getCtype (tid)))
{
- ue = globalDeclareOldStyleFunction (tid);
- saveFunction = ue;
- DPRINTF (("Set save function: %s", uentry_unparseFull (ue)));
+ /*
+ ** No type, its really a plain name (int) declaration
+ */
+
+ voptgenerror (FLG_IMPTYPE,
+ message ("No type before declaration name (implicit int type): %q",
+ idDecl_unparse (tid)),
+ g_currentloc);
+ tid = idDecl_replaceCtype (tid, ctype_int);
+ processVariable (tid);
+ saveFunction = uentry_undefined;
}
else
{
- saveFunction = uentry_undefined;
-
- if (context_inRealFunction ())
+ if (s_processingParams)
{
- ue = uentry_makeVariableLoc (idDecl_observeId (tid), ctype_unknown);
-
- llparseerror (message ("Function declared inside function: %q",
- idDecl_unparse (tid)));
-
- context_quietExitFunction ();
- ue = usymtab_supEntryReturn (ue);
+ ue = globalDeclareOldStyleFunction (tid);
+ saveFunction = ue;
+ DPRINTF (("Set save function: %s", uentry_unparseFull (ue)));
}
else
{
- if (context_inInnerScope ())
+ saveFunction = uentry_undefined;
+
+ if (context_inRealFunction ())
{
- llparseerror (message ("Declaration in inner context: %q",
+ ue = uentry_makeVariableLoc (idDecl_observeId (tid), ctype_unknown);
+
+ llparseerror (message ("Function declared inside function: %q",
idDecl_unparse (tid)));
- sRef_setGlobalScope ();
- ue = uentry_makeVariableLoc (idDecl_observeId (tid),
- ctype_unknown);
- ue = usymtab_supGlobalEntryReturn (ue);
- sRef_clearGlobalScope ();
+ context_quietExitFunction ();
+ ue = usymtab_supEntryReturn (ue);
}
else
{
- ue = clabstract_globalDeclareFunction (tid);
+ if (context_inInnerScope ())
+ {
+ llparseerror (message ("Declaration in inner context: %q",
+ idDecl_unparse (tid)));
+
+ sRef_setGlobalScope ();
+ ue = uentry_makeVariableLoc (idDecl_observeId (tid),
+ ctype_unknown);
+ ue = usymtab_supGlobalEntryReturn (ue);
+ sRef_clearGlobalScope ();
+ }
+ else
+ {
+ ue = clabstract_globalDeclareFunction (tid);
+ }
}
+
+ resetGlobals ();
}
-
- resetGlobals ();
+
+ resetStorageClass ();
}
- resetStorageClass ();
idDecl_free (tid);
}
DPRINTF (("Declare static funciton: %s", idDecl_unparse (tid)));
- if (ProcessingParams)
+ if (s_processingParams)
{
ue = globalDeclareOldStyleFunction (tid);
saveFunction = ue;
}
else
{
+ DPRINTF (("Here we are!"));
llparseerror (message ("Inconsistent function declaration: %q",
idDecl_unparse (tid)));
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;
}
if (ctype_isStruct (ct) || ctype_isUnion (ct))
{
- uentryList res = ctype_getFields (ct);
-
- return (uentryList_copy (res));
+ return uentryList_single (uentry_makeUnnamedVariable (ct));
}
else if (ctype_isEnum (ct))
{
return uentryList_undefined;
}
else
- {
- BADBRANCHCONT;
+ {
+ voptgenerror
+ (FLG_SYNTAX,
+ message ("Type name in field declarations: %s", qtype_unparse (q)),
+ g_currentloc);
}
return uentryList_undefined;
void
setProcessingIterVars (uentry iter)
{
- ProcessingIterVars = TRUE;
+ s_processingIterVars = TRUE;
currentIter = iter;
saveIterParamNo = 0;
}
void
setProcessingGlobalsList ()
{
- ProcessingGlobals = TRUE;
+ s_processingGlobals = TRUE;
fcnNoGlobals = FALSE;
}
static void resetGlobals (void)
{
- ProcessingGlobals = FALSE;
+ s_processingGlobals = FALSE;
fcnNoGlobals = FALSE;
}
void
unsetProcessingGlobals ()
{
- ProcessingGlobals = FALSE;
+ s_processingGlobals = FALSE;
}
void
setProcessingVars (/*@only@*/ qtype q)
{
- ProcessingVars = TRUE;
+ s_processingVars = TRUE;
qtype_free (processingType);
processingType = q;
}
static void
setGenericParamList (/*@dependent@*/ uentryList pm)
{
- ProcessingParams = TRUE;
+ s_processingParams = TRUE;
saveParamList = pm;
}
void
setProcessingTypedef (qtype q)
{
- ProcessingTypedef = TRUE;
+ s_processingTypedef = TRUE;
qtype_free (processingType);
processingType = q;
unsetProcessingVars ()
{
resetStorageClass ();
- ProcessingVars = FALSE;
+ s_processingVars = FALSE;
}
void
oldStyleDoneParams ()
{
- if (ProcessingParams)
+ if (s_processingParams)
{
if (uentry_isInvalid (saveFunction))
{
ctype ct2 = ctype_makeFunction (ct, params);
uentry_setType (saveFunction, ct2);
- ProcessingParams = FALSE;
+ s_processingParams = FALSE;
oldStyleCompleteFunction (saveFunction);
saveFunction = uentry_undefined;
ct2 = ctype_makeParamsFunction (ct, uentryList_copy (saveParamList));
uentry_setType (saveFunction, ct2);
- ProcessingParams = FALSE;
+ s_processingParams = FALSE;
oldStyleDeclareFunction (saveFunction);
saveFunction = uentry_undefined;
void clabstract_declareType (/*@only@*/ exprNodeList decls, /*@only@*/ warnClause warn)
{
- llassert (ProcessingTypedef);
+ llassert (s_processingTypedef);
+
+ DPRINTF (("Declare type: %s", exprNodeList_unparse (decls)));
if (warnClause_isDefined (warn))
{
+ DPRINTF (("Has a warn clause!"));
+ DPRINTF (("Warn: %s", warnClause_unparse (warn)));
+
exprNodeList_elements (decls, el)
{
uentry ue = exprNode_getUentry (el);
uentry_unparse (ue), warnClause_unparse (warn)));
uentry_addWarning (ue, warnClause_copy (warn));
+ DPRINTF (("After add warning: %s", uentry_unparseFull (ue)));
cstring_free (uname);
} end_exprNodeList_elements;
}
void
unsetProcessingTypedef ()
{
- ProcessingTypedef = FALSE;
+ s_processingTypedef = FALSE;
}
void checkConstant (qtype t, idDecl id)
usymtab_supGlobalEntry (ue);
}
-void processNamedDecl (idDecl t)
+static void processVariable (idDecl t)
{
- if (qtype_isUndefined (processingType))
- {
- llparseerror (message ("No type before declaration name: %q", idDecl_unparse (t)));
-
- processingType = qtype_create (ctype_unknown);
- }
-
- t = idDecl_fixBase (t, processingType);
-
- DPRINTF (("Declare: %s", idDecl_unparse (t)));
+ uentry e;
+ ctype ct;
- if (ProcessingGlobals)
+ ct = ctype_realType (idDecl_getCtype (t));
+
+ if (s_processingParams)
{
cstring id = idDecl_getName (t);
- uentry ue = usymtab_lookupSafe (id);
+ int paramno = uentryList_lookupRealName (saveParamList, id);
- if (!uentry_isValid (ue))
+ if (paramno >= 0)
{
- llerror (FLG_UNRECOG,
- message ("Variable used in globals list is undeclared: %s", id));
+ uentry cparam = uentryList_getN (saveParamList, paramno);
+
+ DPRINTF (("Processing param: %s", uentry_unparseFull (cparam)));
+ uentry_setType (cparam, idDecl_getCtype (t));
+ uentry_reflectQualifiers (cparam, idDecl_getQuals (t));
+ uentry_setDeclaredOnly (cparam, context_getSaveLocation ());
+ DPRINTF (("Processing param: %s", uentry_unparseFull (cparam)));
}
else
{
- if (!ctype_match (uentry_getType (ue), idDecl_getCtype (t)))
- {
- voptgenerror
- (FLG_INCONDEFS,
- message ("Variable %s used in globals list declared %s, "
- "but listed as %s",
- id, ctype_unparse (uentry_getType (ue)),
- ctype_unparse (idDecl_getCtype (t))),
- g_currentloc);
- }
- else
- {
- sRef sr = sRef_copy (uentry_getSref (ue));
- reflectGlobalQualifiers (sr, idDecl_getQuals (t));
- }
+ llfatalerrorLoc
+ (message ("Old style declaration uses unlisted parameter: %s",
+ id));
}
}
- else if (ProcessingVars)
+ else
{
- uentry e;
- ctype ct;
+ fileloc loc;
- ct = ctype_realType (idDecl_getCtype (t));
-
- if (ProcessingParams)
+ if (context_inIterDef ())
{
- cstring id = idDecl_getName (t);
- int paramno = uentryList_lookupRealName (saveParamList, id);
-
- if (paramno >= 0)
- {
- uentry cparam = uentryList_getN (saveParamList, paramno);
-
- DPRINTF (("Processing param: %s", uentry_unparseFull (cparam)));
- uentry_setType (cparam, idDecl_getCtype (t));
- uentry_reflectQualifiers (cparam, idDecl_getQuals (t));
- uentry_setDeclaredOnly (cparam, context_getSaveLocation ());
- DPRINTF (("Processing param: %s", uentry_unparseFull (cparam)));
- }
- else
+ cstring pname = makeParam (idDecl_observeId (t));
+ uentry p = usymtab_lookupSafe (pname);
+
+ cstring_free (pname);
+
+ if (uentry_isYield (p))
{
- llfatalerrorLoc
- (message ("Old style declaration uses unlisted parameter: %s",
- id));
+ e = uentry_makeParam (t, sRef_getParam (uentry_getSref (p)));
+ uentry_checkYieldParam (p, e);
+ usymtab_supEntrySref (e);
+ return;
}
}
+
+ if ((hasSpecialCode () || argsUsed)
+ && ctype_isFunction (idDecl_getCtype (t)))
+ {
+ e = uentry_makeIdFunction (t);
+ reflectSpecialCode (e);
+ reflectArgsUsed (e);
+ }
else
{
- fileloc loc;
-
- if (context_inIterDef ())
- {
- cstring pname = makeParam (idDecl_observeId (t));
- uentry p = usymtab_lookupSafe (pname);
-
- cstring_free (pname);
-
- if (uentry_isYield (p))
- {
- e = uentry_makeParam (t, sRef_getParam (uentry_getSref (p)));
- uentry_checkYieldParam (p, e);
- usymtab_supEntrySref (e);
- return;
- }
- }
-
- if ((hasSpecialCode () || argsUsed)
- && ctype_isFunction (idDecl_getCtype (t)))
- {
- e = uentry_makeIdFunction (t);
- reflectSpecialCode (e);
- reflectArgsUsed (e);
- }
- else
- {
- e = uentry_makeIdVariable (t);
- }
-
- loc = uentry_whereDeclared (e);
-
- /*
- if (context_inGlobalScope ())
- {
- uentry_checkParams was here!
- }
- */
+ e = uentry_makeIdVariable (t);
+ }
+
+ loc = uentry_whereDeclared (e);
+
+ /*
+ if (context_inGlobalScope ())
+ {
+ uentry_checkParams was here!
+ }
+ */
+
+ if (ctype_isFunction (uentry_getType (e)))
+ {
+ clabstract_prepareFunction (e);
+ }
+
+ DPRINTF (("Superceding... %s", uentry_unparseFull (e)));
+ e = usymtab_supEntrySrefReturn (e);
+ DPRINTF (("After superceding... %s", uentry_unparseFull (e)));
+
+ if (uentry_isExtern (e) && !context_inGlobalScope ())
+ {
+ voptgenerror
+ (FLG_NESTEDEXTERN,
+ message ("Declaration using extern inside function scope: %q",
+ uentry_unparse (e)),
+ g_currentloc);
- if (ctype_isFunction (uentry_getType (e)))
+ uentry_setDefined (e, fileloc_getExternal ());
+ sRef_setDefined (uentry_getSref (e), fileloc_getExternal ());
+ }
+
+ if (uentry_isFunction (e))
+ {
+ if (!context_inXHFile ())
{
- clabstract_prepareFunction (e);
+ checkParamNames (e);
}
+ }
+
+ if (uentry_isVar (e) && uentry_isCheckedUnknown (e))
+ {
+ sRef sr = uentry_getSref (e);
- DPRINTF (("Superceding... %s", uentry_unparseFull (e)));
- e = usymtab_supEntrySrefReturn (e);
- DPRINTF (("After superceding... %s", uentry_unparseFull (e)));
-
- if (uentry_isExtern (e) && !context_inGlobalScope ())
+ if (sRef_isLocalVar (sr))
{
- voptgenerror
- (FLG_NESTEDEXTERN,
- message ("Declaration using extern inside function scope: %q",
- uentry_unparse (e)),
- g_currentloc);
-
- uentry_setDefined (e, fileloc_getExternal ());
- sRef_setDefined (uentry_getSref (e), fileloc_getExternal ());
+ if (context_getFlag (FLG_IMPCHECKMODINTERNALS))
+ {
+ uentry_setCheckMod (e);
+ }
+ else
+ {
+ uentry_setUnchecked (e);
+ }
}
-
- if (uentry_isFunction (e))
+ else if (sRef_isFileStatic (sr))
{
- if (!context_inXHFile ())
+ if (context_getFlag (FLG_IMPCHECKEDSTRICTSTATICS))
{
- checkParamNames (e);
+ uentry_setCheckedStrict (e);
+ }
+ else if (context_getFlag (FLG_IMPCHECKEDSTATICS))
+ {
+ uentry_setChecked (e);
+ }
+ else if (context_getFlag (FLG_IMPCHECKMODSTATICS))
+ {
+ uentry_setCheckMod (e);
+ }
+ else
+ {
+ ;
}
}
-
- if (uentry_isVar (e) && uentry_isCheckedUnknown (e))
+ else /* real global */
{
- sRef sr = uentry_getSref (e);
+ llassert (sRef_isRealGlobal (sr));
- if (sRef_isLocalVar (sr))
+ if (context_getFlag (FLG_IMPCHECKEDSTRICTGLOBALS))
{
- if (context_getFlag (FLG_IMPCHECKMODINTERNALS))
- {
- uentry_setCheckMod (e);
- }
- else
- {
- uentry_setUnchecked (e);
- }
+ uentry_setCheckedStrict (e);
}
- else if (sRef_isFileStatic (sr))
+ else if (context_getFlag (FLG_IMPCHECKEDGLOBALS))
{
- if (context_getFlag (FLG_IMPCHECKEDSTRICTSTATICS))
- {
- uentry_setCheckedStrict (e);
- }
- else if (context_getFlag (FLG_IMPCHECKEDSTATICS))
- {
- uentry_setChecked (e);
- }
- else if (context_getFlag (FLG_IMPCHECKMODSTATICS))
- {
- uentry_setCheckMod (e);
- }
- else
- {
- ;
- }
+ uentry_setChecked (e);
}
- else /* real global */
+ else if (context_getFlag (FLG_IMPCHECKMODGLOBALS))
{
- llassert (sRef_isRealGlobal (sr));
-
- if (context_getFlag (FLG_IMPCHECKEDSTRICTGLOBALS))
- {
- uentry_setCheckedStrict (e);
- }
- else if (context_getFlag (FLG_IMPCHECKEDGLOBALS))
- {
- uentry_setChecked (e);
- }
- else if (context_getFlag (FLG_IMPCHECKMODGLOBALS))
- {
- uentry_setCheckMod (e);
- }
- else
- {
- ;
- }
+ uentry_setCheckMod (e);
+ }
+ else
+ {
+ ;
}
}
}
}
- else if (ProcessingTypedef)
+}
+
+void processNamedDecl (idDecl t)
+{
+ if (qtype_isUndefined (processingType))
+ {
+ processingType = qtype_create (ctype_int);
+ t = idDecl_fixBase (t, processingType);
+
+ voptgenerror (FLG_IMPTYPE,
+ message ("No type before declaration name (implicit int type): %q",
+ idDecl_unparse (t)),
+ g_currentloc);
+ }
+ else
+ {
+ t = idDecl_fixBase (t, processingType);
+ }
+
+ DPRINTF (("Declare: %s", idDecl_unparse (t)));
+
+ if (s_processingGlobals)
+ {
+ cstring id = idDecl_getName (t);
+ uentry ue = usymtab_lookupSafe (id);
+
+ if (!uentry_isValid (ue))
+ {
+ llerror (FLG_UNRECOG,
+ message ("Variable used in globals list is undeclared: %s", id));
+ }
+ else
+ {
+ if (!ctype_match (uentry_getType (ue), idDecl_getCtype (t)))
+ {
+ voptgenerror
+ (FLG_INCONDEFS,
+ message ("Variable %s used in globals list declared %s, "
+ "but listed as %s",
+ id, ctype_unparse (uentry_getType (ue)),
+ ctype_unparse (idDecl_getCtype (t))),
+ g_currentloc);
+ }
+ else
+ {
+ sRef sr = sRef_copy (uentry_getSref (ue));
+ reflectGlobalQualifiers (sr, idDecl_getQuals (t));
+ }
+ }
+ }
+ else if (s_processingVars)
+ {
+ processVariable (t);
+ }
+ else if (s_processingTypedef)
{
ctype ct = idDecl_getCtype (t);
uentry e;
ctype
declareUnnamedUnion (/*@only@*/ uentryList f)
{
+ DPRINTF (("Unnamed union: %s", uentryList_unparse (f)));
+
if (context_maybeSet (FLG_NUMSTRUCTFIELDS))
{
int num = uentryList_size (f);
uentry ue;
int num = uentryList_size (f);
- DPRINTF (("Declare struct: %s / %s", id, uentryList_unparse (f)));
+ DPRINTF (("Declare struct: %s / %s [%d]", id, uentryList_unparse (f),
+ uentryList_size (f)));
ct = ctype_createStruct (cstring_copy (id), f);
}
else
{
- return (declareEnum (id, enumNameList_new ()));
+ return (ctype_createForwardEnum (id));
}
}
bool processingIterVars (void)
{
- return ProcessingIterVars;
+ return s_processingIterVars;
}
uentry getCurrentIter (void)
uentryList_elements (params, current)
{
uentry_setParam (current);
- uentry_setSref (current, sRef_makeParam (paramno, ctype_unknown, stateInfo_makeLoc (uentry_whereLast (current))));
+ uentry_setSref (current, sRef_makeParam
+ (paramno, ctype_unknown,
+ stateInfo_makeLoc (uentry_whereLast (current), SA_DECLARED)));
paramno++;
} end_uentryList_elements;
setGenericParamList (params);
- g_expectingTypeName = TRUE;
+ cscannerHelp_setExpectingTypeName ();
return params;
}
setGenericParamList (params);
flipOldStyle = FALSE;
- g_expectingTypeName = TRUE;
+ cscannerHelp_setExpectingTypeName ();
}
return (params);
cstring id = cstring_makeLiteral ("va_alist");
uentry e;
- if (ProcessingParams)
+ if (s_processingParams)
{
int i = uentryList_lookupRealName (saveParamList, id);
if (i >= 0)
{
fileloc loc = context_getSaveLocation ();
- e = uentry_makeVariableSrefParam (id, c, loc, sRef_makeParam (i, c, stateInfo_makeLoc (loc)));
+ e = uentry_makeVariableSrefParam
+ (id, c, loc,
+ sRef_makeParam (i, c, stateInfo_makeLoc (loc, SA_DECLARED)));
}
else
{
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)
}
else
{
- fileloc loc = fileloc_decColumn (g_currentloc, cstring_length (s));
+ fileloc loc = fileloc_decColumn (g_currentloc, size_toInt (cstring_length (s)));
ret = sRef_undefined;
voptgenerror
/*@unused@*/ uentry ue2;
/*@unused@*/ ctype ct;\r
# endif
- fileloc loc = fileloc_decColumn (g_currentloc, cstring_length (s));
+ fileloc loc = fileloc_decColumn (g_currentloc, size_toInt (cstring_length (s)));
ret = sRef_undefined;
# if 0
/*drl commenting this out for now