aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDJ Delorie <dj@gcc.gnu.org>2003-06-01 14:55:15 -0400
committerDJ Delorie <dj@gcc.gnu.org>2003-06-01 14:55:15 -0400
commita7f36da37989019104e199ab78826bd929142818 (patch)
tree96669031e3b9ecf83c0e0e0b4fabc2f49db66e77 /gcc
parent8e2b6930e1d797225311e8774079519ae0043fb8 (diff)
downloadgcc-a7f36da37989019104e199ab78826bd929142818.zip
gcc-a7f36da37989019104e199ab78826bd929142818.tar.gz
gcc-a7f36da37989019104e199ab78826bd929142818.tar.bz2
cppmacro.c (warn_of_redefinition): Handle cases where the two definitions have different numbers of tokens.
* cppmacro.c (warn_of_redefinition): Handle cases where the two definitions have different numbers of tokens. * gcc.dg/cpp/redef3.c: New file. From-SVN: r67307
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/cppmacro.c10
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/cpp/redef3.c21
4 files changed, 36 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 290ee80..654e36d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/cppmacro.c b/gcc/cppmacro.c
index f77f6b3..eba8c00 100644
--- a/gcc/cppmacro.c
+++ b/gcc/cppmacro.c
@@ -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;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7b6632c..ee9f802 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..78ee71e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/cpp/redef3.c
@@ -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 }
+*/