X-Git-Url: http://andersk.mit.edu/gitweb/splint.git/blobdiff_plain/6970c11be2c0e175abf98c906a87115836e4f55f..2e4caa51b7f68083f8e80e59475eb5d045ffd91e:/src/stateClauseList.c?ds=sidebyside diff --git a/src/stateClauseList.c b/src/stateClauseList.c index 0afa765..1c01941 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; } @@ -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 annotation %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), @@ -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