X-Git-Url: http://andersk.mit.edu/gitweb/splint.git/blobdiff_plain/ccf0a4a84a5a030c02e90d914b3f152b29826737..ed62d3fbeda6bb085991cdd683ceacfc57f7afbe:/src/stateClauseList.c diff --git a/src/stateClauseList.c b/src/stateClauseList.c index a703837..fe5bf2e 100644 --- a/src/stateClauseList.c +++ b/src/stateClauseList.c @@ -1,6 +1,6 @@ /* -** LCLint - annotation-assisted static program checker -** Copyright (C) 1994-2001 University of Virginia, +** Splint - annotation-assisted static program checker +** Copyright (C) 1994-2003 University of Virginia, ** Massachusetts Institute of Technology ** ** This program is free software; you can redistribute it and/or modify it @@ -17,15 +17,15 @@ ** 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) @@ -213,7 +213,7 @@ int stateClauseList_compare (stateClauseList s1, stateClauseList s2) } else { - if ((int) s1 > (int) s2) + if (s1 - s2 > 0) /* evans 2001-08-21: was (int) s1 > (int) s2) */ { return 1; } @@ -252,7 +252,7 @@ void stateClauseList_checkAll (uentry ue) if (stateClause_isGlobal (cl)) { - /*@i232@*/ + ; } else { @@ -263,6 +263,22 @@ void stateClauseList_checkAll (uentry ue) 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)) { @@ -273,7 +289,7 @@ void stateClauseList_checkAll (uentry ue) { 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), @@ -281,7 +297,7 @@ void stateClauseList_checkAll (uentry ue) stateClause_unparse (cl)), uentry_whereLast (ue))) { - /*@i! annotationInfo_showContextError (ainfo, ue); */ + /* annotationInfo_showContextError (ainfo, ue); */ } } } @@ -343,6 +359,10 @@ void stateClauseList_checkAll (uentry ue) { ; /* Okay to override in .xh files */ } + else if (stateClause_isQual (cl)) + { + ; /* qual clauses don't interfere with definition state */ + } else { voptgenerror @@ -376,7 +396,7 @@ void stateClauseList_checkAll (uentry ue) { voptgenerror (FLG_ANNOTATIONERROR, - /*@-sefparams@*/ /* This is okay because its fresh storage. */ /*@i32@*/ + /*@-sefparams@*/ /* This is okay because its fresh storage. */ message ("%q clauses includes %q of " "non-dynamically allocated type %s", @@ -431,7 +451,7 @@ void stateClauseList_checkEqual (uentry old, uentry unew) { if (stateClause_isGlobal (cl)) { - ; /*@i32@*/ + ; /* Don't handle globals for now */ } else {