/*
** 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
cprim_closeEnoughAux (cprim c1, cprim c2, bool deep)
{
if (c1 == c2) return TRUE;
-
+
DPRINTF (("cprim close: %s / %s", cprim_unparse (c1), cprim_unparse (c2)));
if (c1 == CTX_ANYINTEGRAL)
if (c1 == CTX_UNSIGNEDINTEGRAL)
{
- if (context_getFlag (FLG_MATCHANYINTEGRAL)
- || context_getFlag (FLG_IGNOREQUALS))
+ /* We allow signed ints to match any integral if matchanyintegral is set */
+ if (context_getFlag (FLG_MATCHANYINTEGRAL)) {
+ return (cprim_isAnyInt (c2)
+ || (cprim_isAnyChar (c2) && context_msgCharInt ()));
+ }
+
+ if (context_getFlag (FLG_IGNOREQUALS))
{
if (context_getFlag (FLG_IGNORESIGNS))
{
if (c1 == CTX_SIGNEDINTEGRAL)
{
- if (context_getFlag (FLG_MATCHANYINTEGRAL)
- || context_getFlag (FLG_IGNOREQUALS))
+ /* We allow signed ints to match any integral if matchanyintegral is set */
+ if (context_getFlag (FLG_MATCHANYINTEGRAL)) {
+ return (cprim_isAnyInt (c2)
+ || (cprim_isAnyChar (c2) && context_msgCharInt ()));
+ }
+
+ if (context_getFlag (FLG_IGNOREQUALS))
{
return (cprim_isAnyInt (c2)
|| (cprim_isAnyChar (c2) && context_msgCharInt ()));
|| (cprim_isAnyChar (c) && context_msgCharInt ()));
}
-
-
-
+int cprim_getExpectedBits (cprim c)
+{
+ /* Any basis to these numbers? Just guesses for now..., check ISO spec */
+ switch (c)
+ {
+ case CTX_UNKNOWN:
+ return 0;
+ case CTX_VOID:
+ return 0;
+ case CTX_CHAR:
+ return 8;
+ case CTX_UCHAR:
+ return 8;
+ case CTX_DOUBLE:
+ return 64;
+ case CTX_LDOUBLE:
+ return 128;
+ case CTX_FLOAT:
+ return 32;
+ case CTX_INT:
+ return 32;
+ case CTX_LINT:
+ return 64;
+ case CTX_LLINT:
+ return 128;
+ case CTX_ULLINT:
+ return 128;
+ case CTX_SINT:
+ return 8;
+ case CTX_UINT:
+ return 32;
+ case CTX_ULINT:
+ return 64;
+ case CTX_USINT:
+ return 8;
+ case CTX_UNSIGNEDINTEGRAL:
+ return 64;
+ case CTX_SIGNEDINTEGRAL:
+ return 64;
+ case CTX_ANYINTEGRAL:
+ return 64;
+ default:
+ return 0;
+ }
+}