OSDN Git Service

* cppmacro.c (warn_of_redefinition): Handle cases where the two
authordj <dj@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 1 Jun 2003 18:55:15 +0000 (18:55 +0000)
committerdj <dj@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 1 Jun 2003 18:55:15 +0000 (18:55 +0000)
definitions have different numbers of tokens.

* gcc.dg/cpp/redef3.c: New file.

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

gcc/ChangeLog
gcc/cppmacro.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/cpp/redef3.c [new file with mode: 0644]

index 290ee80..654e36d 100644 (file)
@@ -1,3 +1,8 @@
+2003-05-29  DJ Delorie  <dj@redhat.com>
+
+       * cppmacro.c (warn_of_redefinition): Handle cases where the two
+       definitions have different numbers of tokens.
+
 2003-06-01  Andreas Jaeger  <aj@suse.de>
 
        * gen-protos.c (main): Readd unused attribute for argc.
index f77f6b3..eba8c00 100644 (file)
@@ -1275,10 +1275,12 @@ warn_of_redefinition (pfile, node, macro2)
   if (CPP_OPTION (pfile, traditional))
     return _cpp_expansions_different_trad (macro1, macro2);
 
-  if (macro1->count == macro2->count)
-    for (i = 0; i < macro1->count; i++)
-      if (!_cpp_equiv_tokens (&macro1->exp.tokens[i], &macro2->exp.tokens[i]))
-       return true;
+  if (macro1->count != macro2->count)
+    return true;
+
+  for (i = 0; i < macro1->count; i++)
+    if (!_cpp_equiv_tokens (&macro1->exp.tokens[i], &macro2->exp.tokens[i]))
+      return true;
 
   return false;
 }
index 7b6632c..ee9f802 100644 (file)
@@ -1,3 +1,7 @@
+2003-06-01  Loren James Rittle  <ljrittle@acm.org>
+       
+       * gcc.dg/cpp/redef3.c: New file.
+
 2003-06-01  Eric Botcazou  <ebotcazou@libertysurf.fr>
 
        * gcc.dg/i386-loop-3.c: New test.
diff --git a/gcc/testsuite/gcc.dg/cpp/redef3.c b/gcc/testsuite/gcc.dg/cpp/redef3.c
new file mode 100644 (file)
index 0000000..78ee71e
--- /dev/null
@@ -0,0 +1,21 @@
+/* Test for redefining macros with mismatch token count (and the oddity). */
+
+/* { dg-do preprocess } */
+/* { dg-options "-DC -DD=1 -DE" } */
+
+#define A
+#define A 1
+#define B 2 3
+#define B 2
+#define C 1
+#define D 1 2
+#define E
+
+/* { dg-warning "redefined" "redef A"      { target *-*-* } 7  }
+   { dg-warning "redefined" "redef B"      { target *-*-* } 9  }
+   { dg-warning "redefined" "redef D"      { target *-*-* } 11 }
+   { dg-warning "redefined" "redef E"      { target *-*-* } 12 }
+   { dg-warning "previous"  "prev def A"   { target *-*-* } 6  }
+   { dg-warning "previous"  "prev def B"   { target *-*-* } 8  }
+   { dg-warning "previous"  "prev def D/E" { target *-*-* } 0  }
+*/