/*
-** LCLint - annotation-assisted static program checker
-** Copyright (C) 1994-2001 University of Virginia,
+** Splint - annotation-assisted static program checker
+** Copyright (C) 1994-2002 University of Virginia,
** Massachusetts Institute of Technology
**
** This program is free software; you can redistribute it and/or modify it
** 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
+** For information on splint: info@splint.org
+** To report a bug: splint-bug@splint.org
+** For more information: http://www.splint.org
*/
/*
** stateClauseList.c
*/
-# include "lclintMacros.nf"
+# include "splintMacros.nf"
# include "basic.h"
static /*@notnull@*/ stateClauseList stateClauseList_new (void)
}
else
{
- if ((int) s1 > (int) s2)
+ if (s1 - s2 > 0) /* evans 2001-08-21: was (int) s1 > (int) s2) */
{
return 1;
}
sRef rb = sRef_getRootBase (el);
DPRINTF (("Check: %s", sRef_unparse (el)));
+
+ if (sRef_isResult (rb))
+ {
+ /*
+ ** The result type is now know, need to set it:
+ */
+
+ if (ctype_isUnknown (sRef_getType (rb)))
+ {
+ ctype utype = uentry_getType (ue);
+ llassert (ctype_isFunction (utype));
+
+ sRef_setTypeFull (rb, ctype_getReturnType (utype));
+ DPRINTF (("el: %s", sRef_unparseFull (el)));
+ }
+ }
if (stateClause_setsMetaState (cl))
{
{
if (optgenerror
(FLG_ANNOTATIONERROR,
- message ("Meta state anntation %s used on inappropriate reference %q in %q clause of %q: %q",
+ message ("Attribute annotation %s used on inappropriate reference %q in %q clause of %q: %q",
qual_unparse (q),
sRef_unparse (el),
stateClause_unparseKind (cl),
{
; /* Okay to override in .xh files */
}
+ else if (stateClause_isQual (cl))
+ {
+ ; /* qual clauses don't interfere with definition state */
+ }
else
{
voptgenerror