}
}
+# ifdef DEBUGSPLINT
+extern void sRef_checkCompletelyReasonable (sRef s) /*@*/
+{
+ DPRINTF (("Check sRef: [%p] %s / %s", s, sRef_unparse (s),
+ sRefSet_unparse (sRef_derivedFields (s))));
+
+ if (sRef_isReasonable (s))
+ {
+ sRefSet_elements (s->deriv, el)
+ {
+ llassert (el != s);
+ sRef_checkCompletelyReasonable (el);
+ } end_sRefSet_elements ;
+ }
+}
+# endif
+
+/*@falsewhennull@*/ bool sRef_isReasonable (sRef s) /*@*/
+{
+ if (sRef_isValid (s))
+ {
+# ifdef DEBUGSPLINT
+ if (!bool_isReasonable (s->safe)
+ || !bool_isReasonable (s->modified)
+ || !bool_isReasonable (s->immut))
+ {
+ llcontbug (message ("Unreasonable sRef [%p]", s));
+ return FALSE;
+ }
+
+ if (!sstate_isValid (s->defstate))
+ {
+ llcontbug (message ("Unreasonable sRef [%p]", s));
+ return FALSE;
+ }
+
+ if (!nstate_isValid (s->nullstate))
+ {
+ llcontbug (message ("Unreasonable sRef [%p]", s));
+ return FALSE;
+ }
+
+ if (!alkind_isValid (s->aliaskind)
+ || !alkind_isValid (s->oaliaskind))
+ {
+ llcontbug (message ("Unreasonable sRef [%p]", s));
+ return FALSE;
+ }
+
+ if (!exkind_isValid (s->expkind)
+ || !exkind_isValid (s->oexpkind))
+ {
+ llcontbug (message ("Unreasonable sRef [%p]", s));
+ return FALSE;
+ }
+# endif
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static /*@nullwhentrue@*/ bool sRef_isUnreasonable (sRef s) /*@*/
+{
+ return (!sRef_isReasonable (s));
+}
+
static void sRef_checkMutable (/*@unused@*/ sRef s)
{
/*@i235@*/
- if (sRef_isValid (s) && s->immut)
+ if (sRef_isReasonable (s) && s->immut)
{
llcontbug (message ("Modification to sRef marked immutable: %q",
sRef_unparseFull (s)));
{
llassert (FALSE);
- if (!sRef_isValid (s)) return;
+ if (!sRef_isReasonable (s)) return;
if (sRefSet_containsSameObject (checkedsofar, s))
{
fieldname = sRef_getField (s);
base = sRef_getBase (s);
- while (sRef_isValid (base))
+ while (sRef_isReasonable (base))
{
if (sRef_isField (base))
{
{
if (!context_inProtectVars ()
&& !protectDerivs
- && sRef_isValid (s)
- && sRef_isValid (t)
+ && sRef_isReasonable (s)
+ && sRef_isReasonable (t)
&& !sRef_isConst (s))
{
int sd = sRef_depth (s);
}
else
{
+ DPRINTF (("Add deriv: [%p] %s / [%p] %s",
+ s, sRef_unparse (s),
+ t, sRef_unparse (t)));
+
s->deriv = sRefSet_insert (s->deriv, t);
}
}
bool
sRef_deepPred (bool (predf) (sRef), sRef s)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
if ((*predf)(s)) return TRUE;
void sRef_setStateFromType (sRef s, ctype ct)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
if (ctype_isUser (ct))
{
static void sRef_setTypeState (sRef s)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
sRef_setStateFromType (s, s->type);
}
static bool
sRef_hasAliasInfoLoc (sRef s)
{
- return (sRef_isValid (s) && (s->aliasinfo != NULL)
+ return (sRef_isReasonable (s) && (s->aliasinfo != NULL)
&& (fileloc_isDefined (s->aliasinfo->loc)));
}
static /*@falsewhennull@*/ bool
sRef_hasStateInfoLoc (sRef s)
{
- return (sRef_isValid (s) && (s->definfo != NULL)
+ return (sRef_isReasonable (s) && (s->definfo != NULL)
&& (fileloc_isDefined (s->definfo->loc)));
}
static /*@falsewhennull@*/ bool
sRef_hasExpInfoLoc (sRef s)
{
- return (sRef_isValid (s)
+ return (sRef_isReasonable (s)
&& (s->expinfo != NULL) && (fileloc_isDefined (s->expinfo->loc)));
}
{
stateValue sv;
- if (!sRef_isValid (s)) {
+ if (!sRef_isReasonable (s)) {
return stateInfo_undefined;
}
static bool
sRef_hasNullInfoLoc (sRef s)
{
- return (sRef_isValid (s) && s->nullinfo != NULL
+ return (sRef_isReasonable (s) && s->nullinfo != NULL
&& (fileloc_isDefined (s->nullinfo->loc)));
}
bool
sRef_hasAliasInfoRef (sRef s)
{
- return (sRef_isValid (s) && (s->aliasinfo != NULL)
- && (sRef_isValid (s->aliasinfo->ref)));
+ return (sRef_isReasonable (s) && (s->aliasinfo != NULL)
+ && (sRef_isReasonable (s->aliasinfo->ref)));
}
static /*@observer@*/ fileloc
sRef_getAliasInfoLoc (/*@exposed@*/ sRef s)
{
- llassert (sRef_isValid (s) && s->aliasinfo != NULL
+ llassert (sRef_isReasonable (s) && s->aliasinfo != NULL
&& (fileloc_isDefined (s->aliasinfo->loc)));
return (s->aliasinfo->loc);
}
static /*@observer@*/ fileloc
sRef_getStateInfoLoc (/*@exposed@*/ sRef s)
{
- llassert (sRef_isValid (s) && s->definfo != NULL
+ llassert (sRef_isReasonable (s) && s->definfo != NULL
&& (fileloc_isDefined (s->definfo->loc)));
return (s->definfo->loc);
}
static /*@observer@*/ fileloc
sRef_getExpInfoLoc (/*@exposed@*/ sRef s)
{
- llassert (sRef_isValid (s) && s->expinfo != NULL
+ llassert (sRef_isReasonable (s) && s->expinfo != NULL
&& (fileloc_isDefined (s->expinfo->loc)));
return (s->expinfo->loc);
}
static /*@observer@*/ fileloc
sRef_getNullInfoLoc (/*@exposed@*/ sRef s)
{
- llassert (sRef_isValid (s) && s->nullinfo != NULL
+ llassert (sRef_isReasonable (s) && s->nullinfo != NULL
&& (fileloc_isDefined (s->nullinfo->loc)));
return (s->nullinfo->loc);
}
/*@observer@*/ sRef
sRef_getAliasInfoRef (/*@temp@*/ sRef s)
{
- llassert (sRef_isValid (s) && s->aliasinfo != NULL);
+ llassert (sRef_isReasonable (s) && s->aliasinfo != NULL);
return (s->aliasinfo->ref);
}
{
DPRINTF (("Exit function scope."));
sRefTable_clear (allRefs);
+ DPRINTF (("Exit function scope done."));
inFunction = FALSE;
}
else
s = sRef_getConjA (s);
} while (sRef_isConj (s));
- llassert (sRef_isValid (s));
+ llassert (sRef_isReasonable (s));
return s; /* don't need to ref */
}
else
bool res = FALSE;
sRef base = sRef_getRootBase (s);
- if (sRef_isValid (base))
+ if (sRef_isReasonable (base))
{
res = sRef_isParam (base) || sRef_isFileOrGlobalScope (base) || sRef_isExternal (base);
}
sRef base = sRef_getRootBase (s);
uentry res = uentry_undefined;
- if (sRef_isValid (base))
+ if (sRef_isReasonable (base))
{
switch (base->kind)
{
sRef ret;
sRef res;
- if (!sRef_isValid (s)) return sRef_undefined;
+ if (!sRef_isReasonable (s)) return sRef_undefined;
switch (s->kind)
{
uentry
sRef_getUentry (sRef s)
{
- llassert (sRef_isValid (s));
+ llassert (sRef_isReasonable (s));
switch (s->kind)
{
int
sRef_getParam (sRef s)
{
- llassert (sRef_isValid (s));
+ llassert (sRef_isReasonable (s));
llassert (s->kind == SK_PARAM);
return s->info->paramno;
bool
sRef_isModified (sRef s)
{
- return (!sRef_isValid (s) || s->modified);
+ return (!sRef_isReasonable (s) || s->modified);
}
void sRef_setModified (sRef s)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
s->modified = TRUE;
static bool sRef_checkModify (sRef s, sRefSet sl)
{
- llassert (sRef_isValid (s));
+ llassert (sRef_isReasonable (s));
switch (s->kind)
{
static
bool sRef_doModifyVal (sRef s, sRefSet sl)
{
- llassert (sRef_isValid (s));
+ llassert (sRef_isReasonable (s));
switch (s->kind)
static
bool sRef_doModify (sRef s, sRefSet sl)
{
- llassert (sRef_isValid (s));
+ llassert (sRef_isReasonable (s));
switch (s->kind)
{
{
llassert (sRef_similar (s1, s2));
- if (!sRef_isValid (s1)) return s1;
- if (!sRef_isValid (s2)) return s1;
+ if (!sRef_isReasonable (s1)) return s1;
+ if (!sRef_isReasonable (s2)) return s1;
sRef_combineDefState (s1, s2);
sRef_combineNullState (s1, s2);
bool
sRef_realSame (sRef s1, sRef s2)
{
- if (s1 == s2) return TRUE;
- if (sRef_isInvalid (s1) || sRef_isInvalid (s2)) return FALSE;
+ if (s1 == s2) return TRUE;
+
+ if (sRef_isUnreasonable (s1)
+ || sRef_isUnreasonable (s2))
+ {
+ return FALSE;
+ }
switch (s1->kind)
{
bool sRef_isUnconstrained (sRef s)
{
- return (sRef_isValid(s) && s->kind == SK_UNCONSTRAINED);
+ return (sRef_isReasonable(s) && s->kind == SK_UNCONSTRAINED);
}
static /*@dependent@*/ /*@notnull@*/ sRef
int sRef_lexLevel (sRef s)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
sRef conj;
conj = sRef_fixConj (s);
s = sRef_getRootBase (conj);
- if (sRef_isValid (s) && s->kind == SK_CVAR)
+ if (sRef_isReasonable (s) && s->kind == SK_CVAR)
{
return (s->info->cvar->lexlevel);
}
void
sRef_setParamNo (sRef s, int l)
{
- llassert (sRef_isValid (s) && s->kind == SK_PARAM);
+ llassert (sRef_isReasonable (s) && s->kind == SK_PARAM);
s->info->paramno = l;
llassert (l >= -1);
}
{
bool res;
- llassert (sRef_isValid (arr));
+ llassert (sRef_isReasonable (arr));
arr = sRef_fixConj (arr);
llassert (arr->kind == SK_ARRAYFETCH);
{
int result;
- llassert (sRef_isValid (arr));
+ llassert (sRef_isReasonable (arr));
arr = sRef_fixConj (arr);
llassert (arr->kind == SK_ARRAYFETCH);
{
cstring res;
- llassert (sRef_isValid (s));
+ llassert (sRef_isReasonable (s));
s = sRef_fixConj (s);
- llassertprint (sRef_isValid (s) && (s->kind == SK_FIELD),
+ llassertprint (sRef_isReasonable (s) && (s->kind == SK_FIELD),
("s = %s", sRef_unparseDebug (s)));
res = s->info->field->field;
{
sRef s = sRef_newRef ();
- llassert (sRef_isValid (t));
+ llassert (sRef_isReasonable (t));
s->kind = SK_EXTERNAL;
s->info = (sinfo) dmalloc (sizeof (*s->info));
/*@dependent@*/ sRef sRef_makeDerived (/*@exposed@*/ sRef t)
{
- if (sRef_isValid (t))
+ if (sRef_isReasonable (t))
{
sRef s = sRef_newRef ();
void
sRef_mergeStateQuiet (sRef res, sRef other)
{
- llassert (sRef_isValid (res));
- llassert (sRef_isValid (other));
+ llassert (sRef_isReasonable (res));
+ llassert (sRef_isReasonable (other));
res->modified = res->modified || other->modified;
res->safe = res->safe && other->safe;
{
bool changed = FALSE;
- llassert (sRef_isValid (res));
- llassert (sRef_isValid (other));
+ llassert (sRef_isReasonable (res));
+ llassert (sRef_isReasonable (other));
sRef_checkMutable (res);
if (res->kind != other->kind)
void
sRef_mergeState (sRef res, sRef other, clause cl, fileloc loc)
{
- if (sRef_isValid (res) && sRef_isValid (other))
+ if (sRef_isReasonable (res) && sRef_isReasonable (other))
{
sRef_mergeStateAux (res, other, cl, FALSE, loc, TRUE);
}
void
sRef_mergeOptState (sRef res, sRef other, clause cl, fileloc loc)
{
- if (sRef_isValid (res) && sRef_isValid (other))
+ if (sRef_isReasonable (res) && sRef_isReasonable (other))
{
sRef_mergeStateAux (res, other, cl, TRUE, loc, TRUE);
}
bool doDerivs)
/*@modifies res@*/
{
- llassertfatal (sRef_isValid (res));
- llassertfatal (sRef_isValid (other));
+ llassertfatal (sRef_isReasonable (res));
+ llassertfatal (sRef_isReasonable (other));
DPRINTF (("Merge aux: %s / %s",
sRef_unparseFull (res),
{
sRef nother = sRef_buildPointer (sRef_getBase (other));
- if (sRef_isValid (nother))
+ if (sRef_isReasonable (nother))
{
sRef_copyState (nother, other);
sRef_mergeStateAux (res, nother, cl, opt, loc, doDerivs);
{
sRefSet_allElements (other, el)
{
- if (sRef_isValid (el))
+ if (sRef_isReasonable (el))
{
sRef e2 = sRefSet_lookupMember (other, el);
- if (sRef_isValid (e2))
+ if (sRef_isReasonable (e2))
{
sRef_mergeStateAux (el, e2, cl, opt, loc, FALSE);
}
sRefSet_allElements (res, el)
{
- if (sRef_isValid (el))
+ if (sRef_isReasonable (el))
{
sRef e2 = sRefSet_lookupMember (other, el);
- if (sRef_isValid (e2))
+ if (sRef_isReasonable (e2))
{
if (el->defstate == SS_ALLOCATED &&
e2->defstate == SS_PDEFINED)
{
sRef sr = sRef_leastCommon (el, e2);
- if (sRef_isValid (sr))
+ if (sRef_isReasonable (sr))
{
ret = sRefSet_insert (ret, sr);
}
sRefSet_allElements (other, el)
{
- if (sRef_isValid (el))
+ if (sRef_isReasonable (el))
{
(void) checkDeadState (el, FALSE, loc);
}
{
sRefSet_allElements (el->deriv, t)
{
- if (sRef_isValid (t))
+ if (sRef_isReasonable (t))
{
checkDerivDeadState (t, tbranch, loc);
}
sRefSet_allElements (res, el)
{
- if (sRef_isValid (el))
+ if (sRef_isReasonable (el))
{
sRef e2 = sRefSet_lookupMember (other, el);
- if (sRef_isValid (e2))
+ if (sRef_isReasonable (e2))
{
if (sRef_isAllocated (el) && !sRef_isAllocated (e2))
{
sRefSet_allElements (other, el)
{
- if (sRef_isValid (el))
+ if (sRef_isReasonable (el))
{
if (!sRefSet_member (ret, el))
{
sRef sRef_makeConj (/*@exposed@*/ /*@returned@*/ sRef a, /*@exposed@*/ sRef b)
{
- llassert (sRef_isValid (a));
- llassert (sRef_isValid (b));
+ llassert (sRef_isReasonable (a));
+ llassert (sRef_isReasonable (b));
if (!sRef_equivalent (a, b))
{
bool
sRef_isResult (sRef s)
{
- return (sRef_isValid (s) && s->kind == SK_RESULT);
+ return (sRef_isReasonable (s) && s->kind == SK_RESULT);
}
bool
usymId
sRef_getScopeIndex (sRef s)
{
- llassert (sRef_isValid (s));
+ llassert (sRef_isReasonable (s));
llassert (sRef_isCvar (s));
return (s->info->cvar->index);
void
sRef_makeSafe (sRef s)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
s->safe = TRUE;
}
void
sRef_makeUnsafe (sRef s)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
s->safe = FALSE;
}
st = message ("%q:", sRef_unparseFull (s));
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
sRefSet_allElements (s->deriv, el)
{
{
sRef wdef = whatUndefined (fldref, depth + 1);
- if (sRef_isValid (wdef))
+ if (sRef_isReasonable (wdef))
{
return wdef;
}
bool sRef_isReallyDefined (sRef s)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
if (sRef_isAnyDefined (s))
{
void sRef_showNotReallyDefined (sRef s)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
if (sRef_isAnyDefined (s))
{
/*@-temptrans@*/ /* the result of whatUndefined is lost */
sRef ref = whatUndefined (s, 0);
- llassert (sRef_isValid (ref));
+ llassert (sRef_isReasonable (ref));
if (ref != s)
{
{
sRef_checkMutable (s);
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
sRef_clearDerived (s);
{
sRef_checkMutable (s);
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
s->oaliaskind = kind;
}
exkind sRef_getExKind (sRef s)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
return (s->expkind);
}
exkind sRef_getOrigExKind (sRef s)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
return (s->oexpkind);
}
{
sRef_checkMutable (s);
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
if (s->expkind != exp)
{
DPRINTF (("Copy real: %s / %s", sRef_unparse (s1), sRef_unparse (s2)));
sRef_checkMutable (s1);
- if (sRef_isValid (s1) && sRef_isValid (s2))
+ if (sRef_isReasonable (s1) && sRef_isReasonable (s2))
{
sRef sb = sRef_getRootBase (s1);
sRefSet_allElements (s2->deriv, el)
{
- if (sRef_isValid (el))
+ if (sRef_isReasonable (el))
{
sRef rb = sRef_getRootBase (el);
{
sRef fb = sRef_fixDirectBase (el, s1);
- if (sRef_isValid (fb))
+ if (sRef_isReasonable (fb))
{
sRef_copyRealDerived (fb, el);
sRef_addDeriv (s1, fb);
{
sRef_checkMutable (s);
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
s->defstate = SS_UNDEFINED;
arr = sRef_findDerivedArrayFetch (p, FALSE, 0, FALSE);
- if (sRef_isValid (arr))
+ if (sRef_isReasonable (arr))
{
sRef_setDefinedAux (arr, loc, clear);
}
sRef p = s->info->arrayfetch->arr;
sRef ptr = sRef_constructPointer (p);
- if (sRef_isValid (ptr))
+ if (sRef_isReasonable (ptr))
{
if (ptr->defstate == SS_ALLOCATED
|| ptr->defstate == SS_UNDEFINED
{
sRef parent = s->info->field->rec;
- if (sRef_isValid (parent))
+ if (sRef_isReasonable (parent))
{
if (ctype_isUnion (ctype_realType (parent->type)))
{
/* evans 2001-07-12: need to define the derived references */
sRefSet_elements (s->deriv, el)
{
- llassert (sRef_isValid (el));
+ llassert (sRef_isReasonable (el));
el->defstate = SS_DEFINED;
} end_sRefSet_elements ;
}
sRefSet_realElements (aliases, current)
{
- if (sRef_isValid (current))
+ if (sRef_isReasonable (current))
{
current = sRef_updateSref (current);
sRef_setDefined (current, loc);
bool sRef_isUnionField (sRef s)
{
- if (sRef_isValid (s) && s->kind == SK_FIELD)
+ if (sRef_isReasonable (s) && s->kind == SK_FIELD)
{
/*
** defining one field of a union defines the union
sRef base = s->info->field->rec;
- if (sRef_isValid (base))
+ if (sRef_isReasonable (base))
{
return (ctype_isUnion (ctype_realType (base->type)));
}
void sRef_setPdefined (sRef s, fileloc loc)
{
sRef_checkMutable (s);
- if (sRef_isValid (s) && !sRef_isPartial (s))
+ if (sRef_isReasonable (s) && !sRef_isPartial (s))
{
sRef base = sRef_getBaseSafe (s);
/* e.g., if x is allocated, *x = 3 defines x */
- while (sRef_isValid (base) && sRef_isKnown (base))
+ while (sRef_isReasonable (base) && sRef_isKnown (base))
{
if (base->defstate == SS_DEFINED)
{
{
sRef_checkMutable (s);
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
/* if (s->defstate == SS_RELDEF) return; */
{
sRef base = sRef_getBaseSafe (s);
- while (sRef_isValid (base) && sRef_isKnown (base))
+ while (sRef_isReasonable (base) && sRef_isKnown (base))
{
if (base->defstate == SS_DEFINED)
{
{
sRef_checkMutable (s);
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
if (s->defstate == SS_DEAD || s->defstate == SS_UNDEFINED)
{
{
sRef_checkMutable (s);
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
if (s->aliaskind != AK_SHARED && fileloc_isDefined (loc))
{
{
sRef_checkMutable (s);
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
s->aliaskind = sRef_getAliasKind (ref);
s->aliasinfo = stateInfo_updateRefLoc (s->aliasinfo, ref, loc);
void sRef_setNotNull (sRef s, fileloc loc)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
sRef_setNullStateAux (s, NS_NOTNULL, loc);
}
void sRef_setNullStateN (sRef s, nstate n)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
sRef_checkMutable (s);
s->nullstate = n;
void sRef_setNullState (sRef s, nstate n, fileloc loc)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
sRef_setNullStateAux (s, n, loc);
}
void sRef_setPosNull (sRef s, fileloc loc)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
sRef_setNullStateAux (s, NS_POSNULL, loc);
}
void sRef_setDefNull (sRef s, fileloc loc)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
sRef_setNullStateAux (s, NS_DEFNULL, loc);
}
void sRef_setNullUnknown (sRef s, fileloc loc)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
sRef_setNullStateAux (s, NS_UNKNOWN, loc);
}
void sRef_setNullError (sRef s)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
sRef_setNullStateAux (s, NS_UNKNOWN, fileloc_undefined);
}
{
sRef_checkMutable (s);
- if (sRef_isValid (s) && s->aliaskind != AK_ONLY)
+ if (sRef_isReasonable (s) && s->aliaskind != AK_ONLY)
{
s->aliaskind = AK_ONLY;
s->aliasinfo = stateInfo_updateLoc (s->aliasinfo, loc);
{
sRef_checkMutable (s);
- if (sRef_isValid (s) && !sRef_isConst (s) && (s->aliaskind != AK_DEPENDENT))
+ if (sRef_isReasonable (s) && !sRef_isConst (s) && (s->aliaskind != AK_DEPENDENT))
{
DPRINTF (("Setting dependent: %s", sRef_unparseFull (s)));
s->aliaskind = AK_DEPENDENT;
{
sRef_checkMutable (s);
- if (sRef_isValid (s) && !sRef_isConst (s) && (s->aliaskind != AK_OWNED))
+ if (sRef_isReasonable (s) && !sRef_isConst (s) && (s->aliaskind != AK_OWNED))
{
s->aliaskind = AK_OWNED;
s->aliasinfo = stateInfo_updateLoc (s->aliasinfo, loc);
{
sRef_checkMutable (s);
- if (sRef_isValid (s) && !sRef_isConst (s) && (s->aliaskind != AK_KEPT))
+ if (sRef_isReasonable (s) && !sRef_isConst (s) && (s->aliaskind != AK_KEPT))
{
sRef base = sRef_getBaseSafe (s);
- while (sRef_isValid (base) && sRef_isKnown (base))
+ while (sRef_isReasonable (base) && sRef_isKnown (base))
{
if (base->defstate == SS_DEFINED)
{
{
sRef_checkMutable (s);
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
s->aliaskind = AK_FRESH;
s->aliasinfo = stateInfo_updateLoc (s->aliasinfo, loc);
DPRINTF (("Kill: %s", sRef_unparseFull (s)));
sRef_checkMutable (s);
- if (sRef_isValid (s) && !sRef_isShared (s) && !sRef_isConst (s))
+ if (sRef_isReasonable (s) && !sRef_isShared (s) && !sRef_isConst (s))
{
sRef base = sRef_getBaseSafe (s);
- while (sRef_isValid (base) && sRef_isKnown (base))
+ while (sRef_isReasonable (base) && sRef_isKnown (base))
{
if (base->defstate == SS_DEFINED)
{
{
sRef_checkMutable (s);
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
sRef base = sRef_getBaseSafe (s);
- while (sRef_isValid (base) && sRef_isKnown (base))
+ while (sRef_isReasonable (base) && sRef_isKnown (base))
{
if (base->defstate == SS_DEFINED || base->defstate == SS_RELDEF)
{
static void sRef_killAux (sRef s, fileloc loc)
{
- if (sRef_isValid (s) && !sRef_isShared (s))
+ if (sRef_isReasonable (s) && !sRef_isShared (s))
{
if (sRef_isUnknownArrayFetch (s))
{
{
sRef ret;
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
bool old = inFunction;
/*@=retalias@*/
}
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
sRef t = sRef_alloc ();
bool sRef_isThroughArrayFetch (sRef s)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
sRef tref = s;
lt = sRef_getBase (tref);
tref = lt;
- } while (sRef_isValid (tref));
+ } while (sRef_isReasonable (tref));
}
return FALSE;
{
sRef_checkMutable (s);
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
s->type = t;
}
{
sRef_checkMutable (s);
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
s->type = t;
static /*@exposed@*/ sRef
sRef_findDerivedField (/*@notnull@*/ sRef rec, cstring f)
{
- sRefSet_allElements (rec->deriv, sr)
+ sRefSet_allElements (sRef_derivedFields (rec), sr)
{
- if (sRef_isValid (sr))
+ if (sRef_isReasonable (sr))
{
- if (sr->info != NULL)
+ if (sRef_isReasonable (sr))
{
- if (sr->kind == SK_FIELD && cstring_equal (sr->info->field->field, f))
+ if (sr->info != NULL)
{
- return sr;
+ if (sr->kind == SK_FIELD && cstring_equal (sr->info->field->field, f))
+ {
+ return sr;
+ }
}
}
+ else
+ {
+ llcontbug (message ("Invalid sRef as derived field of %s", sRef_unparse (rec)));
+ }
}
} end_sRefSet_allElements;
/*@dependent@*/ /*@observer@*/ sRefSet sRef_derivedFields (/*@temp@*/ sRef rec)
{
- if (sRef_isValid (rec))
+ if (sRef_isReasonable (rec))
{
sRefSet ret;
ret = rec->deriv;
static /*@exposed@*/ sRef
sRef_findDerivedPointer (sRef s)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
sRefSet_realElements (s->deriv, sr)
{
- if (sRef_isValid (sr) && sr->kind == SK_PTR)
+ if (sRef_isReasonable (sr) && sr->kind == SK_PTR)
{
return sr;
}
bool
sRef_isUnknownArrayFetch (sRef s)
{
- return (sRef_isValid (s)
+ return (sRef_isReasonable (s)
&& s->kind == SK_ARRAYFETCH
&& !s->info->arrayfetch->indknown);
}
{
sRefSet_realElements (s->deriv, sr)
{
- if (sRef_isValid (sr)
+ if (sRef_isReasonable (sr)
&& sr->kind == SK_ARRAYFETCH
&& sr->info->arrayfetch->indknown
&& (sr->info->arrayfetch->ind == idx))
{
sRefSet_realElements (s->deriv, sr)
{
- if (sRef_isValid (sr)
+ if (sRef_isReasonable (sr)
&& sr->kind == SK_ARRAYFETCH
&& (!sr->info->arrayfetch->indknown
|| (sr->info->arrayfetch->indknown &&
s = sRef_findDerivedField (rec, f);
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
return s;
}
bool
sRef_isStackAllocated (sRef s)
{
- return (sRef_isValid(s)
+ return (sRef_isReasonable(s)
&& s->defstate == SS_ALLOCATED && ctype_isStackAllocated (s->type));
}
{
sRef sp = sRef_findDerivedPointer (arr);
- if (sRef_isValid (sp))
+ if (sRef_isReasonable (sp))
{
if (ctype_isMutable (s->type))
sRefSet_allElements (arr->deriv, sr)
{
- if (sRef_isValid (sr))
+ if (sRef_isReasonable (sr))
{
- if (sr->defstate == SS_ALLOCATED)
- {
- s->defstate = SS_ALLOCATED;
- }
- else
+ if (sRef_isReasonable (sr))
{
- if (sr->defstate == SS_DEFINED)
+ if (sr->defstate == SS_ALLOCATED)
{
- if (context_getFlag (FLG_STRICTDESTROY))
- {
- s->defstate = SS_DEFINED;
- }
- else
+ s->defstate = SS_ALLOCATED;
+ }
+ else
+ {
+ if (sr->defstate == SS_DEFINED)
{
- s->defstate = SS_PARTIAL;
+ if (context_getFlag (FLG_STRICTDESTROY))
+ {
+ s->defstate = SS_DEFINED;
+ }
+ else
+ {
+ s->defstate = SS_PARTIAL;
+ }
+
+ break;
}
-
- break;
}
}
+ else
+ {
+ llcontbug (message ("Invalid sRef as derived element of %s", sRef_unparse (arr)));
+ }
}
} end_sRefSet_allElements;
-
- }
+ }
else
{
s->defstate = SS_UNDEFINED;
{
sRef s;
- if (!sRef_isValid (arr)) {
+ if (!sRef_isReasonable (arr)) {
/*@-nullret@*/ return arr /*@=nullret@*/;
}
s = sRef_findDerivedArrayFetch (arr, FALSE, 0, FALSE);
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
/* evans 2001-07-12: this is bogus, clean-up hack */
if (s->info->arrayfetch->arr != arr)
{
sRef s;
- if (!sRef_isValid (arr)) {
+ if (!sRef_isReasonable (arr)) {
/*@-nullret@*/ return arr /*@=nullret@*/;
}
s = sRef_findDerivedArrayFetch (arr, TRUE, i, FALSE);
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
/* evans 2001-07-12: this is bogus, clean-up hack */
if (s->info->arrayfetch->arr != arr)
{
sRef uref = uentry_getSref (ue);
- llassert (sRef_isValid (s));
+ llassert (sRef_isReasonable (s));
s->aliaskind = alkind_derive (s->aliaskind, uentry_getAliasKind (ue));
s->oaliaskind = s->aliaskind;
s->oaliaskind = s->aliaskind = AK_IMPDEPENDENT;
}
- if (sRef_isValid (uref))
+ if (sRef_isReasonable (uref))
{
valueTable utable = uref->state;
valueTable_free (s->state);
static void
sRef_setStateFromAbstractUentry (sRef s, uentry ue)
{
- llassert (sRef_isValid (s));
+ llassert (sRef_isReasonable (s));
sRef_checkMutable (s);
sRef_setPartsFromUentry (s, ue);
sstate defstate;
sRef_checkMutable (s);
- llassert (sRef_isValid (s));
+ llassert (sRef_isReasonable (s));
sRef_setPartsFromUentry (s, ue);
DPRINTF (("find derived: %s", sRef_unparse (s)));
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
sRef_setExKind (s, sRef_getExKind (t), g_currentloc);
DPRINTF (("construct: %s", sRef_unparse (s)));
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
sRef_addDeriv (t, s);
static /*@exposed@*/ sRef sRef_constructDerefAux (sRef t, bool isdead)
{
- if (sRef_isValid (t))
+ if (sRef_isReasonable (t))
{
sRef s;
s = sRef_findDerivedArrayFetch (t, FALSE, 0, isdead);
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
DPRINTF (("Found array fetch: %s", sRef_unparseFull (s)));
return s;
bool sRef_hasDerived (sRef s)
{
- return (sRef_isValid (s) && !sRefSet_isEmpty (s->deriv));
+ return (sRef_isReasonable (s) && !sRefSet_isEmpty (s->deriv));
}
void
sRef_clearDerived (sRef s)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
+ DPRINTF (("Clear derived: [%p] %s", s, sRef_unparseDebug (s)));
sRefSet_clear (s->deriv);
}
}
void
sRef_clearDerivedComplete (sRef s)
{
-
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
sRef base = sRef_getBaseSafe (s);
-
- while (sRef_isValid (base))
+
+ while (sRef_isReasonable (base))
{
+ DPRINTF (("Clear derived: [%p] %s", base, sRef_unparse (base)));
sRefSet_clear (base->deriv);
base = sRef_getBaseSafe (base);
}
+ DPRINTF (("Clear derived: [%p] %s", s, sRef_unparse (s)));
sRefSet_clear (s->deriv);
}
}
void
sRef_copyState (sRef s1, sRef s2)
{
- if (sRef_isValid (s1) && sRef_isValid (s2))
+ if (sRef_isReasonable (s1) && sRef_isReasonable (s2))
{
s1->defstate = s2->defstate;
s->kind = SK_NEW;
s->type = ct;
- llassert (sRef_isValid (t));
+ llassert (sRef_isReasonable (t));
s->defstate = t->defstate;
s->aliaskind = t->aliaskind;
stateValue val;
metaStateInfo minfo = context_lookupMetaStateInfo (key);
- llassert (sRef_isValid (s));
+ llassert (sRef_isReasonable (s));
llassert (valueTable_isDefined (s->state));
llassert (metaStateInfo_isDefined (minfo));
void
sRef_mergeNullState (sRef s, nstate n)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
nstate old;
bool
sRef_possiblyNull (sRef s)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
if (sRef_getNullState (s) == NS_ABSNULL)
{
int
sRef_getScope (sRef s)
{
- llassert (sRef_isValid (s));
+ llassert (sRef_isReasonable (s));
if (sRef_isCvar (s))
{
bool
sRef_isDead (sRef s)
{
- return (sRef_isValid (s) && (s)->defstate == SS_DEAD);
+ return (sRef_isReasonable (s) && (s)->defstate == SS_DEAD);
}
bool
sRef_isDeadStorage (sRef s)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
if (s->defstate == SS_DEAD
|| s->defstate == SS_UNUSEABLE
bool
sRef_isPossiblyDead (sRef s)
{
- return (sRef_isValid (s) && s->defstate == SS_HOFFA);
+ return (sRef_isReasonable (s) && s->defstate == SS_HOFFA);
}
bool sRef_isStateLive (sRef s)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
sstate ds = s->defstate;
bool sRef_isStateUndefined (sRef s)
{
- return ((sRef_isValid(s)) && ((s)->defstate == SS_UNDEFINED));
+ return ((sRef_isReasonable(s)) && ((s)->defstate == SS_UNDEFINED));
}
bool sRef_isJustAllocated (sRef s)
static bool
sRef_isAllocatedStorage (sRef s)
{
- if (sRef_isValid (s) && ynm_toBoolStrict (sRef_isValidLvalue (s)))
+ if (sRef_isReasonable (s) && ynm_toBoolStrict (sRef_isValidLvalue (s)))
{
return (ctype_isVisiblySharable (sRef_getType (s)));
}
bool
sRef_perhapsNull (sRef s)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
if (sRef_getNullState (s) == NS_ABSNULL)
{
bool
sRef_definitelyNull (sRef s)
{
- return (sRef_isValid (s)
+ return (sRef_isReasonable (s)
&& (sRef_getNullState (s) == NS_DEFNULL || sRef_getNullState (s) == NS_CONSTNULL));
}
void
sRef_setDerivNullState (sRef set, sRef guide, nstate ns)
{
- if (sRef_isValid (set))
+ if (sRef_isReasonable (set))
{
sRef deriv = sRef_getDeriv (set, guide);
- if (sRef_isValid (deriv))
+ if (sRef_isReasonable (deriv))
{
sRef_setNullStateN (deriv, ns);
}
static /*@exposed@*/ sRef
sRef_getDeriv (/*@returned@*/ /*@notnull@*/ sRef set, sRef guide)
{
- llassert (sRef_isValid (set));
- llassert (sRef_isValid (guide));
+ llassert (sRef_isReasonable (set));
+ llassert (sRef_isReasonable (guide));
switch (guide->kind)
{
case SK_CVAR:
- llassert (set->kind == SK_CVAR);
-
+ llassert (set->kind == SK_CVAR);
return set;
case SK_PARAM:
llassert (set->kind == guide->kind);
llassert (set->info->paramno == guide->info->paramno);
-
return set;
case SK_ARRAYFETCH:
sRefSet_realElements (aliases, current)
{
- if (sRef_isValid (current))
+ if (sRef_isReasonable (current))
{
- if (!sRef_similar (current, s)
- || (error && sRef_sameName (current, s)))
+ if (sRef_isReasonable (current))
{
- (void) (*predf)(current, e, s, err);
+ if (!sRef_similar (current, s)
+ || (error && sRef_sameName (current, s)))
+ {
+ (void) (*predf)(current, e, s, err);
+ }
}
- }
+ else
+ {
+ llcontbug (message ("Invalid sRef as alias field of %s", sRef_unparse (s)));
+ }
+ }
} end_sRefSet_realElements;
sRefSet_free (aliases);
sRefSet_realElements (aliases, current)
{
- if (sRef_isValid (current))
+ if (sRef_isReasonable (current))
{
sRef cref = sRef_updateSref (current);
sRefSet_realElements (aliases, current)
{
- if (sRef_isValid (current))
+ if (sRef_isReasonable (current))
{
current = sRef_updateSref (current);
if ((*predf)(current)) result = TRUE;
sRefSet_realElements (aliases, current)
{
- if (sRef_isValid (current))
+ if (sRef_isReasonable (current))
{
current = sRef_updateSref (current);
((*predf)(current, loc));
sRefSet_realElements (aliases, current)
{
- if (sRef_isValid (current))
+ if (sRef_isReasonable (current))
{
current = sRef_updateSref (current);
((*predf)(current, kind, loc));
sRefSet_realElements (aliases, current)
{
- if (sRef_isValid (current))
+ if (sRef_isReasonable (current))
{
current = sRef_updateSref (current);
((*predf)(current, kind, loc));
sRefSet aliases;
ctype ct;
- if (!sRef_isValid (s)) return;
+ if (!sRef_isReasonable (s)) return;
/*
** Type equivalence checking is necessary --- there might be casting.
sRefSet_realElements (aliases, current)
{
- if (sRef_isValid (current))
+ if (sRef_isReasonable (current))
{
current = sRef_updateSref (current);
sRefSet_realElements (aliases, current)
{
- if (sRef_isValid (current))
+ if (sRef_isReasonable (current))
{
current = sRef_updateSref (current);
DPRINTF (("Current: %s", sRef_unparseFull (current)));
sRefSet_realElements (aliases, current)
{
- if (sRef_isValid (current))
+ if (sRef_isReasonable (current))
{
current = sRef_updateSref (current);
sRefSet aliases;
ctype ct;
- if (!sRef_isValid (s)) return;
+ if (!sRef_isReasonable (s)) return;
/*
** Type equivalence checking is necessary --- there might be casting.
sRefSet_realElements (aliases, current)
{
- if (sRef_isValid (current))
+ if (sRef_isReasonable (current))
{
current = sRef_updateSref (current);
sRefSet_realElements (aliases, current)
{
- if (sRef_isValid (current))
+ if (sRef_isReasonable (current))
{
current = sRef_updateSref (current);
sRefSet_realElements (aliases, current)
{
- if (sRef_isValid (current))
+ if (sRef_isReasonable (current))
{
current = sRef_updateSref (current);
cstring sRef_nullMessage (sRef s)
{
- llassert (sRef_isValid (s));
+ llassert (sRef_isReasonable (s));
switch (sRef_getNullState (s))
{
/*@observer@*/ cstring sRef_ntMessage (sRef s)
{
- llassert (sRef_isValid (s));
+ llassert (sRef_isReasonable (s));
switch (s->nullstate)
{
sRef tmp = sRef_undefined;
sRef ret;
- llassert (sRef_isValid (s));
+ llassert (sRef_isReasonable (s));
switch (s->kind)
{
bool sRef_isOwned (sRef s)
{
- return (sRef_isValid (s) && (s->aliaskind == AK_OWNED));
+ return (sRef_isReasonable (s) && (s->aliaskind == AK_OWNED));
}
bool sRef_isKeep (sRef s)
{
- return (sRef_isValid (s) && (s->aliaskind == AK_KEEP));
+ return (sRef_isReasonable (s) && (s->aliaskind == AK_KEEP));
}
bool sRef_isTemp (sRef s)
{
- return (sRef_isValid (s) && alkind_isTemp (s->aliaskind));
+ return (sRef_isReasonable (s) && alkind_isTemp (s->aliaskind));
}
bool sRef_isLocalState (sRef s)
{
- return (sRef_isValid (s) && (s->aliaskind == AK_LOCAL));
+ return (sRef_isReasonable (s) && (s->aliaskind == AK_LOCAL));
}
bool sRef_isUnique (sRef s)
{
- return (sRef_isValid (s) && (s->aliaskind == AK_UNIQUE));
+ return (sRef_isReasonable (s) && (s->aliaskind == AK_UNIQUE));
}
bool sRef_isShared (sRef s)
{
- return (sRef_isValid (s) && (s->aliaskind == AK_SHARED));
+ return (sRef_isReasonable (s) && (s->aliaskind == AK_SHARED));
}
bool sRef_isExposed (sRef s)
{
- return (sRef_isValid (s) && (s->expkind == XO_EXPOSED));
+ return (sRef_isReasonable (s) && (s->expkind == XO_EXPOSED));
}
bool sRef_isObserver (sRef s)
{
- return (sRef_isValid (s) && (s->expkind == XO_OBSERVER));
+ return (sRef_isReasonable (s) && (s->expkind == XO_OBSERVER));
}
bool sRef_isFresh (sRef s)
{
- return (sRef_isValid (s) && (s->aliaskind == AK_FRESH));
+ return (sRef_isReasonable (s) && (s->aliaskind == AK_FRESH));
}
bool sRef_isDefinitelyNull (sRef s)
{
- return (sRef_isValid (s) && (sRef_getNullState (s) == NS_DEFNULL
+ return (sRef_isReasonable (s) && (sRef_getNullState (s) == NS_DEFNULL
|| sRef_getNullState (s) == NS_CONSTNULL));
}
bool sRef_isAllocated (sRef s)
{
- return (sRef_isValid (s) && (s->defstate == SS_ALLOCATED));
+ return (sRef_isReasonable (s) && (s->defstate == SS_ALLOCATED));
}
bool sRef_isStack (sRef s)
{
- return (sRef_isValid (s) && (s->aliaskind == AK_STACK));
+ return (sRef_isReasonable (s) && (s->aliaskind == AK_STACK));
}
bool sRef_isNotNull (sRef s)
nstate sRef_getNullState (sRef s)
{
- if (sRef_isValid (s)) {
+ if (sRef_isReasonable (s)) {
llassert (nstate_isValid (s->nullstate));
return s->nullstate;
}
void sRef_reflectAnnotation (sRef s, annotationInfo a, fileloc loc)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
if (!valueTable_isDefined (s->state))
{
sRefSet_realElements (aliases, current)
{
- if (sRef_isValid (current))
+ if (sRef_isReasonable (current))
{
current = sRef_updateSref (current);
sRef_setMetaStateValue (current, key, value, loc);
{
sRef_checkMutable (s);
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
if (!valueTable_isDefined (s->state))
{
bool sRef_checkMetaStateValue (sRef s, cstring key, int value)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
if (valueTable_isDefined (s->state))
{
/*@observer@*/ stateValue sRef_getMetaStateValue (sRef s, cstring key)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
if (valueTable_isDefined (s->state))
{
{
DPRINTF (("Get value table: %s", sRef_unparse (s)));
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
- llassert (sRef_isValid (s));
+ llassert (sRef_isReasonable (s));
DPRINTF (("Value table: %s", valueTable_unparse (s->state)));
return s->state;
}
** Default defined state can be made special.
*/
- llassert (sRef_isValid (s)); /*@i523 why doesn't null-checking work!??? */
+ llassert (sRef_isReasonable (s)); /*@i523 why doesn't null-checking work!??? */
if (s->defstate == SS_UNKNOWN || s->defstate == SS_DEFINED || s->defstate == SS_SPECIAL)
{
void sRef_markImmutable (sRef s)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
DPRINTF (("Mark immutable: %s", sRef_unparseFull (s)));
s->immut = TRUE;
}
void sRef_setNullTerminatedState(sRef p_s) {
- if(sRef_isValid (p_s)) {
+ if(sRef_isReasonable (p_s)) {
p_s->bufinfo.bufstate = BB_NULLTERMINATED;
} else {
llfatalbug( message("sRef_setNT passed a invalid sRef\n"));
void sRef_setPossiblyNullTerminatedState(sRef p_s) {
- if( sRef_isValid (p_s)) {
+ if( sRef_isReasonable (p_s)) {
p_s->bufinfo.bufstate = BB_POSSIBLYNULLTERMINATED;
} else {
llfatalbug( message("sRef_setPossNT passed a invalid sRef\n"));
}
void sRef_setNotNullTerminatedState(sRef p_s) {
- if( sRef_isValid (p_s)) {
+ if( sRef_isReasonable (p_s)) {
p_s->bufinfo.bufstate = BB_NOTNULLTERMINATED;
} else {
llfatalbug( message("sRef_unsetNT passed a invalid sRef\n"));
}
void sRef_setLen(sRef p_s, int len) {
- if( sRef_isValid (p_s) && sRef_isNullTerminated(p_s)) {
+ if( sRef_isReasonable (p_s) && sRef_isNullTerminated(p_s)) {
p_s->bufinfo.len = len;
} else {
llfatalbug( message("sRef_setLen passed a invalid sRef\n"));
}
void sRef_resetLen(sRef p_s) {
- if (sRef_isValid (p_s)) {
+ if (sRef_isReasonable (p_s)) {
p_s->bufinfo.len = 0;
} else {
llfatalbug (message ("sRef_setLen passed an invalid sRef\n"));
void sRef_setValue (sRef s, multiVal val)
{
- llassert (sRef_isValid (s));
+ llassert (sRef_isReasonable (s));
multiVal_free (s->val);
s->val = val;
}
bool sRef_hasValue (sRef s)
{
- return (sRef_isValid (s)
+ return (sRef_isReasonable (s)
&& multiVal_isDefined (s->val));
}
multiVal sRef_getValue (sRef s)
{
- if (sRef_isValid (s))
+ if (sRef_isReasonable (s))
{
return s->val;
}