/*
-** 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
*/
/*
** clabstract.c
**
*/
-# include "lclintMacros.nf"
+# include "splintMacros.nf"
# include "llbasic.h"
# include "cgrammar.h"
static /*@dependent@*/ uentryList currentParamList;
-/*drl added 3-28-2001*/
+/*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
** Microsoft VC++. It is not supported by the ANSI standard.
**
** The inner fields are added to the outer structure. This is meaningful
-** for nesting structs inside unions, but lclint does no related
+** for nesting structs inside unions, but Splint does no related
** checking.
*/
return (uentryList_copy (res));
}
+ else if (ctype_isEnum (ct))
+ {
+ /* evans 2002-02-05: nothing to do for unnamed enum lists */
+ return uentryList_undefined;
+ }
else
{
BADBRANCHCONT;
{
llassert (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 checkConstant (qtype t, idDecl id)
{
uentry e;
-
+
id = idDecl_fixBase (id, t);
e = uentry_makeIdConstant (id);
-
+
reflectStorageClass (e);
resetStorageClass ();
}
else
{
- if (ctype_isAbstract (ct))
+ if (ctype_isAbstract (rt))
{
voptgenerror
(FLG_ABSTRACT,
message
- ("Modifies clause in header file arrow accesses abstract "
+ ("Modifies clause arrow accesses inaccessible abstract "
"type %s (interface modifies clause should not depend "
"on or expose type representation): %q",
- ctype_unparse (ct),
+ ctype_unparse (rt),
sRef_unparse (s)),
g_currentloc);
}
{
voptgenerror
(FLG_COMMENTERROR,
- message ("Global variable %s used special clause. (Global variables "
- "are not recognized in special clauses. If there is "
+ message ("Global variable %s used state clause. (Global variables "
+ "are not recognized in state clauses. If there is "
"sufficient interest in support for this, it may be "
"added to a future release. Send mail to "
- "lclint@cs.virginia.edu.)",
+ "info@splint.org.)",
s),
g_currentloc);
}
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
"are not recognized in function clauses. If there is "
"sufficient interest in support for this, it may be "
"added to a future release. Send mail to "
- "lclint@cs.virginia.edu.)",
+ "info@splint.org.)",
s),
g_currentloc);
}
else
{
- fileloc loc = fileloc_decColumn (g_currentloc, cstring_length (s));
+ /*@i222@*/
+ /*drl handle structure invariant */
+
+ /*@i222@*/
+ /*check that we're in a structure */
+# if 0\r
+ /*@unused@*/ uentryList ueL;
+ /*@unused@*/ uentry ue2;
+ /*@unused@*/ ctype ct;\r
+# endif
+ fileloc loc = fileloc_decColumn (g_currentloc, size_toInt (cstring_length (s)));
ret = sRef_undefined;
-
+# if 0
+ /*drl commenting this out for now
+ ct = context_getLastStruct ( ct );
+
+ llassert( ctype_isStruct(ct) );
+
+ ueL = ctype_getFields (ct);
+
+ ue2 = uentryList_lookupField (ueL, s);
+
+ if (!uentry_isUndefined(ue2) )
+ {
+ ret = uentry_getSref(ue2);
+
+ DPRINTF((
+ message("Got field in structure in the annotation constraint: %s (or sref: %s)", s, sRef_unparse(ret) )
+ ));
+
+ return ret;
+ }
+ */\r
+# endif\r
+
voptgenerror
(FLG_UNRECOG,
message ("Unrecognized identifier in function clause: %s", s),
exprNode_free (e);
return sRef_copy (s);
}
-
-
-
-
-
-
-
-