/*
-** LCLint - annotation-assisted static program checker
-** Copyright (C) 1994-2000 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
** 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
*/
/*
** aliasTable.c
*/
-# include "lclintMacros.nf"
+# include "splintMacros.nf"
# include "basic.h"
/*@constant int ATINVALID; @*/
s->nelements = 0;
s->nspace = aliasTableBASESIZE;
- s->keys = (sRef *) dmalloc (sizeof (*s->keys) * aliasTableBASESIZE);
- s->values = (sRefSet *) dmalloc (sizeof (*s->values) * aliasTableBASESIZE);
+ s->keys = (sRef *) dmalloc (sizeof (*s->keys) * aliasTableBASESIZE);
+ s->values = (sRefSet *) dmalloc (sizeof (*s->values) * aliasTableBASESIZE);
return (s);
}
{
if (sRef_same (sr, s->keys[i]))
{
+ DPRINTF (("sRef match: %s / %s",
+ sRef_unparseFull (sr),
+ sRef_unparseFull (s->keys[i])));
return i;
}
}
aliasTable
aliasTable_addMustAlias (/*@returned@*/ aliasTable s,
/*@exposed@*/ sRef sr,
- sRef al)
+ /*@exposed@*/ sRef al)
{
int ind;
sRefSet ss;
llassert (NOALIAS (sr, al));
+
+ DPRINTF (("Adding alias: %s / %s", sRef_unparseFull (sr),
+ sRef_unparseFull (al)));
if (aliasTable_isUndefined (s))
{
}
ss = aliasTable_canAlias (s, al);
-
+ DPRINTF (("Previous aliases: %s", sRefSet_unparse (ss)));
if (ind == ATINVALID)
{
}
s->values[ind] = sRefSet_unionExcept (s->values[ind], ss, s->keys[ind]);
+ DPRINTF (("New aliases: %s", sRefSet_unparse (s->values[ind])));
sRefSet_free (ss);
return s;
llquietbug
(message ("Alias search limit exceeded, checking %q. "
"This either means there is a variable with at least "
- "%d indirections, or there is a bug in LCLint.",
+ "%d indirections, or there is a bug in Splint.",
sRef_unparse (sr),
ALIASSEARCHLIMIT));
llquietbug
(message ("Alias search limit exceeded, checking %q. "
"This either means there is a variable with at least "
- "%d indirections, or there is a bug in LCLint.",
+ "%d indirections, or there is a bug in Splint.",
sRef_unparse (sr),
ALIASSEARCHLIMIT));
{
ret = sRefSet_union (ret, s->values[ind]);
}
-
+
sRefSet_free (tmp);
- return ret;
+ return ret;
}
if (ind == ATINVALID) return sRefSet_undefined;
aliasTable_elements (s, key, value)
{
- st = message ("%q\t%q -> %q\n", st, sRef_unparse (key),
- sRefSet_unparse (value));
+ st = message ("%q\t%q -> %q\n", st, sRef_unparseFull (key),
+ sRefSet_unparseFull (value));
} end_aliasTable_elements;
return st;
} end_aliasTable_elements;
}
+# ifdef DEBUGSPLINT
+
+/*
+** For debugging only
+*/
+void aliasTable_checkValid (aliasTable t)
+{
+ aliasTable_elements (t, key, value)
+ {
+ sRef_checkCompletelyReasonable (key);
+ sRefSet_elements (value, sr)
+ {
+ sRef_checkCompletelyReasonable (sr);
+ } end_sRefSet_elements ;
+ } end_aliasTable_elements ;
+}
+# endif