]> andersk Git - splint.git/blobdiff - src/cprim.c
Fixed scanf %x problem.
[splint.git] / src / cprim.c
index 6dd1be1038346a9203657a76d78865fcffc14249..b77db8c0758d21537a1093bc4b26d9f19fd1c7d7 100644 (file)
@@ -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
@@ -81,7 +81,7 @@ static bool
 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)
@@ -108,8 +108,13 @@ cprim_closeEnoughAux (cprim c1, cprim c2, bool deep)
 
   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)) 
            {
@@ -134,8 +139,13 @@ cprim_closeEnoughAux (cprim c1, cprim c2, bool deep)
 
   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 ()));
@@ -469,6 +479,48 @@ bool cprim_isInt (cprim c)
          || (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;
+    }
+}
This page took 0.092277 seconds and 4 git commands to generate.