X-Git-Url: http://andersk.mit.edu/gitweb/splint.git/blobdiff_plain/81fc136a16f0b0ebac14e7f339dfbcd6c639d79d..517a2db3da924ba77ae313404da5e12fda798947:/src/context.c diff --git a/src/context.c b/src/context.c index 0b45538..b7fcc97 100644 --- a/src/context.c +++ b/src/context.c @@ -1,6 +1,6 @@ /* ** Splint - annotation-assisted static program checker -** Copyright (C) 1994-2002 University of Virginia, +** Copyright (C) 1994-2003 University of Virginia, ** Massachusetts Institute of Technology ** ** This program is free software; you can redistribute it and/or modify it @@ -34,7 +34,7 @@ */ # include "splintMacros.nf" -# include "llbasic.h" +# include "basic.h" # include "usymtab_interface.h" # include "exprChecks.h" @@ -42,7 +42,6 @@ # include "llmain.h" # include "intSet.h" # include "osd.h" -# include "portab.h" extern /*@external@*/ int yydebug; extern /*@external@*/ int mtdebug; @@ -143,7 +142,7 @@ static struct int counters[NUMVALUEFLAGS]; o_cstring strings[NUMSTRINGFLAGS]; - sRefSetList modrecs; /*@i32 ???? what is this for? */ + sRefSetList modrecs; /* Keep track of file static symbols modified. */ metaStateTable stateTable; /* User-defined state information. */ annotationTable annotTable; /* User-defined annotations table. */ @@ -340,7 +339,7 @@ context_suppressFlagMsg (flagcode flag, fileloc fl) return (!context_getFlag (flag) || context_inSuppressRegion () || context_inSuppressZone (fl) - || (/*@!@@#@ gc.inDerivedFile && */ context_inSuppressFlagZone (fl, flag))); + || (context_inSuppressFlagZone (fl, flag))); /* removed gc.inDerivedFile from this */ } else { @@ -726,6 +725,8 @@ context_resetAllFlags (void) val = DEFAULT_LINELEN; break; case FLG_INDENTSPACES: val = DEFAULT_INDENTSPACES; break; + case FLG_LOCINDENTSPACES: + val = DEFAULT_LOCINDENTSPACES; break; case FLG_EXTERNALNAMELEN: val = ISO99_EXTERNALNAMELEN; break; case FLG_INTERNALNAMELEN: @@ -806,9 +807,9 @@ context_resetAllFlags (void) case FLG_BOOLTYPE: val = cstring_makeLiteral (DEFAULT_BOOLTYPE); break; case FLG_BOOLFALSE: - val = cstring_makeLiteral ("FALSE"); break; + val = cstring_makeLiteral ("false"); break; case FLG_BOOLTRUE: - val = cstring_makeLiteral ("TRUE"); break; + val = cstring_makeLiteral ("true"); break; case FLG_MACROVARPREFIX: val = cstring_makeLiteral ("m_"); break; case FLG_SYSTEMDIRS: @@ -829,10 +830,9 @@ context_resetAllFlags (void) ** These flags are true by default. */ - /*@i34 move this into flags.def */ + /* eventually, move this into flags.def */ gc.flags[FLG_STREAMOVERWRITE] = TRUE; - gc.flags[FLG_OBVIOUSLOOPEXEC] = TRUE; gc.flags[FLG_MODIFIES] = TRUE; gc.flags[FLG_NESTCOMMENT] = TRUE; @@ -840,6 +840,7 @@ context_resetAllFlags (void) gc.flags[FLG_FULLINITBLOCK] = TRUE; gc.flags[FLG_INITSIZE] = TRUE; gc.flags[FLG_INITALLELEMENTS] = TRUE; + gc.flags[FLG_NULLINIT] = TRUE; gc.flags[FLG_STRINGLITTOOLONG] = TRUE; @@ -882,9 +883,10 @@ context_resetAllFlags (void) gc.flags[FLG_WARNFLAGS] = TRUE; gc.flags[FLG_WARNRC] = TRUE; gc.flags[FLG_FILEEXTENSIONS] = TRUE; - gc.flags[FLG_WARNUNIXLIB] = TRUE; + gc.flags[FLG_WARNUNIXLIB] = FALSE; gc.flags[FLG_WARNPOSIX] = TRUE; gc.flags[FLG_SHOWCOL] = TRUE; + gc.flags[FLG_SHOWDEEPHISTORY] = FALSE; /* TRUE; */ gc.flags[FLG_SHOWFUNC] = TRUE; gc.flags[FLG_SUPCOUNTS] = TRUE; gc.flags[FLG_HINTS] = TRUE; @@ -892,6 +894,7 @@ context_resetAllFlags (void) gc.flags[FLG_TYPE] = TRUE; gc.flags[FLG_INCOMPLETETYPE] = TRUE; gc.flags[FLG_ABSTRACT] = TRUE; + gc.flags[FLG_NUMABSTRACT] = TRUE; gc.flags[FLG_ITERBALANCE] = TRUE; gc.flags[FLG_ITERYIELD] = TRUE; gc.flags[FLG_DUPLICATECASES] = TRUE; @@ -1027,7 +1030,7 @@ context_setModeAux (cstring s, bool warn) flagcode modeflags[] = { FLG_ENUMINT, FLG_MACROMATCHNAME, - FLG_STRINGLITNOROOM, + FLG_STRINGLITNOROOM, FLG_STRINGLITNOROOMFINALNULL, FLG_MACROUNDEF, FLG_RELAXQUALS, FLG_USEALLGLOBS, FLG_CHECKSTRICTGLOBALS, @@ -1038,6 +1041,7 @@ context_setModeAux (cstring s, bool warn) FLG_UNSIGNEDCOMPARE, FLG_PARAMUNUSED, FLG_VARUNUSED, FLG_FUNCUNUSED, FLG_TYPEUNUSED, + FLG_ABSTRACTCOMPARE, FLG_CONSTUNUSED, FLG_ENUMMEMUNUSED, FLG_FIELDUNUSED, FLG_PTRNUMCOMPARE, FLG_BOOLCOMPARE, FLG_UNSIGNEDCOMPARE, FLG_MUTREP, FLG_NOEFFECT, FLG_IMPTYPE, @@ -1079,7 +1083,7 @@ context_setModeAux (cstring s, bool warn) FLG_UNKNOWNTRANS, FLG_KEEPTRANS, FLG_IMMEDIATETRANS, - + FLG_NUMABSTRACTCAST, FLG_EXPORTLOCAL, FLG_USERELEASED, FLG_ALIASUNIQUE, FLG_MAYALIASUNIQUE, @@ -1111,9 +1115,10 @@ context_setModeAux (cstring s, bool warn) { FLG_BOOLINT, FLG_CHARINT, FLG_FLOATDOUBLE, FLG_LONGINT, FLG_SHORTINT, FLG_ENUMINT, FLG_RELAXQUALS, FLG_FORWARDDECL, - FLG_CHARINDEX, FLG_ABSTVOIDP, FLG_USEALLGLOBS, + FLG_CHARINDEX, FLG_NUMABSTRACTINDEX, FLG_ABSTVOIDP, FLG_USEALLGLOBS, FLG_CHARUNSIGNEDCHAR, FLG_PREDBOOLOTHERS, + FLG_NUMABSTRACTLIT, FLG_VARUNUSED, FLG_FUNCUNUSED, FLG_TYPEUNUSED, FLG_CHECKSTRICTGLOBALS, FLG_MACROMATCHNAME, @@ -1139,7 +1144,9 @@ context_setModeAux (cstring s, bool warn) { flagcode modeflags[] = { - FLG_EXPORTLOCAL, FLG_IMPTYPE, + FLG_EXPORTLOCAL, FLG_IMPTYPE, + FLG_NUMABSTRACTCAST, + FLG_ABSTRACTCOMPARE, FLG_STATETRANSFER, FLG_STATEMERGE, FLG_CHECKSTRICTGLOBALIAS, FLG_CHECKEDGLOBALIAS, @@ -1163,6 +1170,7 @@ context_setModeAux (cstring s, bool warn) FLG_SPECUNDEF, FLG_IMPCHECKMODINTERNALS, FLG_DECLUNDEF, FLG_INCONDEFS, FLG_INCONDEFSLIB, FLG_MISPLACEDSHAREQUAL, FLG_REDUNDANTSHAREQUAL, + FLG_NUMABSTRACTPRINT, FLG_MATCHFIELDS, FLG_MACROPARAMS, FLG_MACROASSIGN, @@ -1235,13 +1243,16 @@ context_setModeAux (cstring s, bool warn) { flagcode modeflags[] = { - FLG_CHECKSTRICTGLOBALIAS, + FLG_ABSTRACTCOMPARE, + FLG_CHECKSTRICTGLOBALIAS, + FLG_NUMABSTRACTCAST, FLG_CHECKEDGLOBALIAS, FLG_CHECKMODGLOBALIAS, FLG_UNCHECKEDGLOBALIAS, FLG_MODFILESYSTEM, FLG_MACROMATCHNAME, FLG_FORMATCONST, + FLG_NUMABSTRACTPRINT, FLG_STRINGLITNOROOM, FLG_STRINGLITNOROOMFINALNULL, FLG_STRINGLITSMALLER, @@ -2288,8 +2299,7 @@ static void context_exitClauseAux (exprNode pred, exprNode tbranch) { context_setJustPopped (); - /*@i32 was makeAlt */ - usymtab_popTrueBranch (pred, tbranch, gc.inclause); + usymtab_popTrueBranch (pred, tbranch, gc.inclause); /* evans 2003-02-02?: was makeAlt */ clauseStack_pop (gc.clauses); gc.inclause = topClause (gc.clauses); } @@ -2887,20 +2897,6 @@ context_setString (flagcode flag, cstring val) switch (flag) { - /* - case FLG_BOOLTRUE: - usymtab_supGlobalEntry - (uentry_makeConstantValue (val, ctype_bool, - fileloc_getBuiltin (), TRUE, - multiVal_makeInt (1))); - break; - case FLG_BOOLFALSE: - usymtab_supGlobalEntry - (uentry_makeConstantValue (val, ctype_bool, - fileloc_getBuiltin (), FALSE, - multiVal_makeInt (0))); - break; - */ case FLG_MESSAGESTREAM: case FLG_WARNINGSTREAM: case FLG_ERRORSTREAM: @@ -2962,7 +2958,7 @@ context_setString (flagcode flag, cstring val) if (cstring_lastChar (tval) != '\"') { - int n = cstring_length (tval) - 1; + int n = size_toInt (cstring_length (tval) - 1); while (isspace ((int) cstring_getChar (tval, size_fromInt (n)))) { @@ -3013,8 +3009,10 @@ context_setString (flagcode flag, cstring val) { ; /* Okay not handle everything in this switch */ } - /*@i523@*/ } /* evans 2002-03-24: splintme reports a spurious (I think) warning here...need to look into it */ - + /*@-branchstate@*/ + } /* evans 2002-03-24: splintme reports a spurious (I think) warning here...need to look into it */ + /*@=branchstate@*/ + if (cstring_length (val) >= 1 && cstring_firstChar (val) == '\"') { @@ -3774,8 +3772,8 @@ context_userSetFlag (flagcode f, bool b) llerror_flagWarning (cstring_makeLiteral ("Selecting unix library. Unix library is " - "ad hoc addition to POSIX library. Recommend " - "use +posixlib to select POSIX library instead. " + "based on the Single Unix Specification, Version 2. Not all " + "Unix implementations are consistend with this specification. " "Use -warnunixlib to suppress this message.")); } } @@ -4130,11 +4128,24 @@ context_setFlagAux (flagcode f, bool b, bool inFile, DOSET (FLG_ALLMACROS, b); DOSET (FLG_FCNMACROS, b); DOSET (FLG_CONSTMACROS, b); - break; + break; case FLG_BOUNDS: DOSET (FLG_BOUNDSREAD, b); DOSET (FLG_BOUNDSWRITE, b); + DOSET (FLG_LIKELYBOUNDSREAD, b); + DOSET (FLG_LIKELYBOUNDSWRITE, b); + break; + case FLG_BOUNDSREAD: + DOSET (FLG_LIKELYBOUNDSREAD, b); break; + case FLG_BOUNDSWRITE: + DOSET (FLG_LIKELYBOUNDSWRITE, b); + break; + case FLG_LIKELYBOUNDS: + DOSET (FLG_LIKELYBOUNDSREAD, b); + DOSET (FLG_LIKELYBOUNDSWRITE, b); + break; + case FLG_CZECH: if (b) { DOSET (FLG_ACCESSCZECH, b); } DOSET (FLG_CZECHFUNCTIONS, b); @@ -4363,8 +4374,6 @@ context_destroyMod (void) globSet_free (gc.globs_used); metaStateTable_free (gc.stateTable); annotationTable_free (gc.annotTable); - - } /* @@ -4579,6 +4588,29 @@ bool context_inLCLLib (void) return (gc.kind == CX_LCLLIB); } + +/*drl add these 3/5/2003*/ +static bool inSizeof = FALSE; + +bool context_inSizeof (void) +{ + return (inSizeof); +} + +void context_enterSizeof (void) +{ + DPRINTF((message("context_enterSizeof ") ) ); + inSizeof = TRUE; +} + +void context_leaveSizeof (void) +{ + DPRINTF((message("context_leaveSizeof ") )); + inSizeof = FALSE; +} +/*end function added 3/5/2003*/ + + bool context_inImport (void) { return (gc.inimport); @@ -4810,7 +4842,7 @@ valueTable context_createValueTable (sRef s, stateInfo sinfo) if (metaStateTable_size (gc.stateTable) > 0) { valueTable res = valueTable_create (metaStateTable_size (gc.stateTable)); - /*@i32 should use smaller value... */ + /* should use smaller value... */ DPRINTF (("Value table for: %s", sRef_unparse (s))); metaStateTable_elements (gc.stateTable, msname, msi) @@ -4851,11 +4883,11 @@ valueTable context_createGlobalMarkerValueTable (stateInfo sinfo) if (metaStateTable_size (gc.stateTable) > 0) { valueTable res = valueTable_create (metaStateTable_size (gc.stateTable)); - /*@i32 should use smaller value... */ + /* should use smaller value... */ metaStateTable_elements (gc.stateTable, msname, msi) { - /*@i23 only add global...*/ + /* only add global...*/ DPRINTF (("Create: %s", metaStateInfo_unparse (msi))); llassert (cstring_equal (msname, metaStateInfo_getName (msi))); @@ -4925,7 +4957,7 @@ struct sInfo { /*@-paramuse@*/ -void context_setGlobalStructInfo(ctype ct, constraintList list) +void context_setGlobalStructInfo (ctype ct, constraintList list) { # if 0 /* int i;