OSDN Git Service

(cpp_lex) New arg skip_evaluation.
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 13 Apr 1997 16:50:58 +0000 (16:50 +0000)
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 13 Apr 1997 16:50:58 +0000 (16:50 +0000)
(cpp_parse_expr): Pass skip_evaluation to cpp_lex.
Abort if cpp_lex returns NAME.
(cpp_lex): Optionally warn about undefined identifiers that evaluate to 0.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@13880 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cppexp.c

index 471818a..e4a0dcd 100644 (file)
@@ -278,8 +278,9 @@ static struct token tokentab2[] = {
 /* Read one token.  */
 
 struct operation
-cpp_lex (pfile)
+cpp_lex (pfile, skip_evaluation)
      cpp_reader *pfile;
+     int skip_evaluation;
 {
   register int c;
   register int namelen;
@@ -443,6 +444,9 @@ cpp_lex (pfile)
       return op;
 
     case CPP_NAME:
+      if (CPP_WARN_UNDEF (pfile) && !skip_evaluation)
+       cpp_warning (pfile, "`%.*s' is not defined",
+                    (int) (tok_end - tok_start), tok_start);
       return parse_number (pfile, "0", 0);
 
     case CPP_OTHER:
@@ -684,7 +688,7 @@ cpp_parse_expr (pfile)
       char flags = 0;
 
       /* Read a token */
-      op =  cpp_lex (pfile);
+      op =  cpp_lex (pfile, skip_evaluation);
 
       /* See if the token is an operand, in which case go to set_value.
         If the token is an operator, figure out its left and right
@@ -693,8 +697,7 @@ cpp_parse_expr (pfile)
       switch (op.op)
        {
        case NAME:
-         top->value = 0, top->unsignedp = 0;
-         goto set_value;
+         abort ();
        case INT:  case CHAR:
          top->value = op.value;
          top->unsignedp = op.unsignedp;