]> andersk Git - splint.git/blobdiff - src/cppexp.c
Fixed /*@i@*/ warning in splintme
[splint.git] / src / cppexp.c
index 65a0a6949fc71c0a8f09a4067d93b435120187f7..8182205af963c9a4898e8c5daa4c6c8456d15e29 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
@@ -17,8 +17,8 @@
 ** 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 information on splint: info@splint.org
+** To report a bug: splint-bug@splint.org
 ** For more information: http://www.splint.org
 */
 /*
@@ -56,7 +56,7 @@ Written by Per Bothner 1994.  */
 /*@+matchanyintegral@*/
 
 # include <string.h> 
-# include "lclintMacros.nf"
+# include "splintMacros.nf"
 # include "llbasic.h"
 # include "cpplib.h"
 # include "cpphash.h"
@@ -153,7 +153,7 @@ Written by Per Bothner 1994.  */
 
 static struct operation cppexp_lex (cppReader *);
 static void integer_overflow (cppReader *);
-static long left_shift (cppReader *, long, bool p_unsignedp, size_t);
+static long left_shift (cppReader *, long, bool p_unsignedp, unsigned long);
 static long right_shift (long, bool p_unsignedp, unsigned long);
 
 /*@constant short CPPREADER_ERRORTOK@*/
@@ -238,7 +238,7 @@ struct operation {
 /* maybe needs to actually deal with floating point numbers */
 
 struct operation
-cppReader_parseNumber (cppReader *pfile, char *start, int olen)
+cppReader_parseNumber (cppReader *pfile, char *start, int olen) /*@requires maxRead(start) >= (olen - 1) @*/
 {
   struct operation op;
   char *p = start;
@@ -256,7 +256,7 @@ cppReader_parseNumber (cppReader *pfile, char *start, int olen)
 
   for (i = 0; i < len; i++)
     {
-      if (p[i] == '.') {
+       if (p[i] == '.') {
        /* It's a float since it contains a point.  */
        cppReader_errorLit
          (pfile,
@@ -330,7 +330,7 @@ cppReader_parseNumber (cppReader *pfile, char *start, int olen)
                /*@innerbreak@*/ break;
              }
 
-           c = *p++;
+            c = *p++;
          }
        /* Don't look for any more digits after the suffixes.  */
        break;
@@ -429,7 +429,14 @@ struct operation cppexp_lex (cppReader *pfile)
   ic = cpplib_bufPeek (cppReader_getBufferSafe (pfile));
 
   c = (char) ic;
-  llassert (c != '#');
+
+  if  (c == '#') 
+    {
+      /* was: llassert (c != '#'); - Solaris uses this, attempt to continue anyway... */
+      cppReader_pedwarn (pfile, 
+                        message ("non-standard pre-processor directive: %c", c));
+    }
+
   DPRINTF (("Read: %c", c));
 
   if (c == '\n')
@@ -504,7 +511,7 @@ struct operation cppexp_lex (cppReader *pfile)
          }
        
        ++ptr;
-       while (ptr < tok_end && ((c = *ptr++) != '\''))
+        while (ptr < tok_end && ((c = *ptr++) != '\''))
          {
            if (c == '\\')
              {
@@ -535,24 +542,24 @@ struct operation cppexp_lex (cppReader *pfile)
              }
          }
 
-       token_buffer[num_chars] = 0;
+        token_buffer[num_chars] = 0;
 
        if (c != '\'')
          cppReader_errorLit (pfile,
-                       cstring_makeLiteralTemp ("malformatted character constant"));
+                             cstring_makeLiteralTemp ("malformatted character constant"));
        else if (num_chars == 0)
          cppReader_errorLit (pfile, 
-                       cstring_makeLiteralTemp ("empty character constant"));
+                             cstring_makeLiteralTemp ("empty character constant"));
        else if (num_chars > max_chars)
          {
            num_chars = max_chars;
            cppReader_errorLit (pfile, 
-                         cstring_makeLiteralTemp ("character constant too long"));
+                               cstring_makeLiteralTemp ("character constant too long"));
          }
        else if (num_chars != 1 && ! cppReader_isTraditional (pfile))
          {
            cppReader_warningLit (pfile, 
-                           cstring_makeLiteralTemp ("multi-character character constant"));
+                                 cstring_makeLiteralTemp ("multi-character character constant"));
          }
        else
          {
@@ -617,8 +624,8 @@ struct operation cppexp_lex (cppReader *pfile)
         {
          for (toktab = tokentab2; toktab->operator != NULL; toktab++)
            {
-             if (tok_start[0] == toktab->operator[0]
-                 && tok_start[1] == toktab->operator[1])
+            if (tok_start[0] == toktab->operator[0]  &&
+                tok_start[1] == toktab->operator[1])
                {
                  /*@loopbreak@*/ break;
                }
@@ -626,7 +633,9 @@ struct operation cppexp_lex (cppReader *pfile)
 
          if (toktab->token == CPPREADER_ERRORTOK)
            {
-             cppReader_error (pfile, message ("`%s' not allowed in operand of `#if'", cstring_fromChars (tok_start)));
+             cppReader_error (pfile, 
+                              message ("`%s' not allowed in operand of `#if'",
+                                       cstring_fromChars (tok_start)));
            }
 
          op.op = toktab->token; 
@@ -660,7 +669,7 @@ struct operation cppexp_lex (cppReader *pfile)
 int
 cppReader_parseEscape (cppReader *pfile, char **string_ptr)
 {
-  char c = *(*string_ptr)++;
+   char c = *(*string_ptr)++;
 
   switch (c)
     {
@@ -673,7 +682,7 @@ cppReader_parseEscape (cppReader *pfile, char **string_ptr)
       if (cppReader_isPedantic (pfile))
        {
          cppReader_pedwarn (pfile, 
-                      message ("non-ANSI-standard escape sequence, `\\%c'", c));
+                      message ("non-standard escape sequence, `\\%c'", c));
        }
       return (char) 033;
     case 'f':
@@ -714,7 +723,7 @@ cppReader_parseEscape (cppReader *pfile, char **string_ptr)
 
            else
              {
-               (*string_ptr)--;
+               (*string_ptr)--;
                /*@loopbreak@*/ break;
              }
          }
@@ -784,7 +793,7 @@ integer_overflow (cppReader *pfile)
 }
 
 static long
-left_shift (cppReader *pfile, long a, bool unsignedp, size_t b)
+left_shift (cppReader *pfile, long a, bool unsignedp, unsigned long b)
 {
   if (b >= HOST_BITS_PER_LONG)
     {
@@ -802,7 +811,11 @@ left_shift (cppReader *pfile, long a, bool unsignedp, size_t b)
   else
     {
       long l = int_toNonNegative (a) << b;
-      
+
+# ifdef WIN32
+# pragma warning( disable : 4018 )
+# endif
+
       if (int_toNonNegative (l) >> b != a)
        {
          integer_overflow (pfile);
@@ -981,7 +994,7 @@ cppReader_parseExpression (cppReader *pfile)
       if ((top->flags & HAVE_VALUE) != 0)
        {
          cppReader_errorLit (pfile, 
-                       cstring_makeLiteralTemp ("syntax error in #if"));
+                             cstring_makeLiteralTemp ("syntax error in #if"));
          goto syntax_error;
        }
       top->flags |= HAVE_VALUE;
@@ -992,7 +1005,8 @@ cppReader_parseExpression (cppReader *pfile)
       while (top->rprio > lprio)
        {
          /*@-usedef@*/
-         long v1 = top[-1].value, v2 = top[0].value;
+         HOST_WIDE_INT v1 = top[-1].value;
+         HOST_WIDE_INT v2 = top[0].value;
          bool unsigned1 = top[-1].unsignedp;
          bool unsigned2 = top[0].unsignedp;
 
@@ -1002,14 +1016,14 @@ cppReader_parseExpression (cppReader *pfile)
              && ((top[0].flags & HAVE_VALUE) == 0))
            {
              cppReader_errorLit (pfile, 
-                           cstring_makeLiteralTemp ("syntax error - missing left operand"));
+                                 cstring_makeLiteralTemp ("syntax error - missing left operand"));
              goto syntax_error;
            }
          if (((top[1].flags & RIGHT_OPERAND_REQUIRED) != 0)
              && ((top[1].flags & HAVE_VALUE) == 0))
            {
              cppReader_errorLit (pfile, 
-                           cstring_makeLiteralTemp ("syntax error - missing right operand"));
+                                 cstring_makeLiteralTemp ("syntax error - missing right operand"));
              goto syntax_error;
            }
          /* top[0].value = (top[1].op)(v1, v2);*/
@@ -1081,7 +1095,7 @@ cppReader_parseExpression (cppReader *pfile)
              if (v2 == 0)
                {
                  cppReader_errorLit (pfile, 
-                               cstring_makeLiteralTemp ("Division by zero in #if"));
+                                     cstring_makeLiteralTemp ("Division by zero in #if"));
                  v2 = 1;
                }
              top->unsignedp = unsigned1 || unsigned2;
@@ -1100,7 +1114,7 @@ cppReader_parseExpression (cppReader *pfile)
              if (v2 == 0)
                {
                  cppReader_errorLit (pfile, 
-                               cstring_makeLiteralTemp ("Division by zero in #if"));
+                                     cstring_makeLiteralTemp ("Division by zero in #if"));
                  v2 = 1;
                }
              top->unsignedp = unsigned1 || unsigned2;
@@ -1125,7 +1139,7 @@ cppReader_parseExpression (cppReader *pfile)
              if ((top->flags & HAVE_VALUE) != 0)
                {
                  cppReader_errorLit (pfile, 
-                               cstring_makeLiteralTemp ("syntax error"));
+                                     cstring_makeLiteralTemp ("syntax error"));
                  goto syntax_error;
                }
              top->value = ~ v2;
@@ -1202,13 +1216,13 @@ cppReader_parseExpression (cppReader *pfile)
              /*@switchbreak@*/ break;
            case '(':  case '?':
              cppReader_errorLit (pfile, 
-                           cstring_makeLiteralTemp ("syntax error in #if"));
+                                 cstring_makeLiteralTemp ("syntax error in #if"));
              goto syntax_error;
            case ':':
              if (top[0].op != '?')
                {
                  cppReader_errorLit (pfile,
-                               cstring_makeLiteralTemp ("syntax error ':' without preceding '?'"));
+                                     cstring_makeLiteralTemp ("syntax error ':' without preceding '?'"));
                  goto syntax_error;
                }
              else if (((top[1].flags & HAVE_VALUE) == 0)
@@ -1216,7 +1230,7 @@ cppReader_parseExpression (cppReader *pfile)
                       || ((top[0].flags & HAVE_VALUE) == 0))
                {
                  cppReader_errorLit (pfile, 
-                               cstring_makeLiteralTemp ("bad syntax for ?: operator"));
+                                     cstring_makeLiteralTemp ("bad syntax for ?: operator"));
                  goto syntax_error;
                }
              else
@@ -1238,7 +1252,7 @@ cppReader_parseExpression (cppReader *pfile)
                  || ((top[-1].flags & HAVE_VALUE) != 0))
                {
                  cppReader_errorLit (pfile, 
-                               cstring_makeLiteralTemp ("mismatched parentheses in #if"));
+                                     cstring_makeLiteralTemp ("mismatched parentheses in #if"));
                  goto syntax_error;
                }
              else
@@ -1266,7 +1280,7 @@ cppReader_parseExpression (cppReader *pfile)
          if (top != stack)
            {
              cppReader_errorLit (pfile, 
-                           cstring_makeLiteralTemp ("internal error in #if expression"));
+                                 cstring_makeLiteralTemp ("internal error in #if expression"));
            }
 
          val = top->value;
@@ -1285,8 +1299,8 @@ cppReader_parseExpression (cppReader *pfile)
       if (top == limit)
        {
          struct operation *new_stack;
-         int old_size = (char *) limit - (char *) stack;
-         size_t new_size = size_fromInt (2 * old_size);
+         size_t old_size = size_fromInt ((char *) limit - (char *) stack);
+         size_t new_size = (size_t) (2 * old_size);
 
          if (stack != init_stack)
            {
This page took 0.28567 seconds and 4 git commands to generate.