cpp -Wtraditional doesn't see left justified #error in unchosen path
Kaveh R. Ghazi
ghazi@caip.rutgers.edu
Tue Jul 25 05:22:00 GMT 2000
> From: Zack Weinberg <zack@wolery.cumb.org>
>
> Oops. The checks were being done in the wrong order. Here is a
> completely untested patch, which I will be testing along with some
> unrelated changes later tonight.
>
> If you would write and check in a test case for this behavior, I'd
> appreciate it.
>
> zw
Thanks!
I wrote the testcase below by copying and extending tr-warn1.c. It
seemed pretty clear from the patch that you intended to continue
hiding pedantic warnings inside unused clauses, but just please
confirm that.
I'll check this in after some testing.
--Kaveh
diff -rup orig/egcs-CVS20000724/gcc/testsuite/gcc.dg/cpp/tr-warn3.c egcs-CVS20000724/gcc/testsuite/gcc.dg/cpp/tr-warn3.c
--- orig/egcs-CVS20000724/gcc/testsuite/gcc.dg/cpp/tr-warn3.c Tue Jul 25 07:34:31 2000
+++ egcs-CVS20000724/gcc/testsuite/gcc.dg/cpp/tr-warn3.c Tue Jul 25 07:31:47 2000
@@ -0,0 +1,61 @@
+/* Test for warnings about nontraditional directives inside the unused
+ clauses of #if statements. Extensions do _not_ receive pedantic
+ warnings inside unused clauses because they are often hidden this
+ way on purpose. However they do still require indentation for K&R. */
+/* { dg-do preprocess } */
+/* { dg-options "-pedantic -Wtraditional -fno-show-column" } */
+
+#if 1
+
+/* Block 1: K+R directives should have the # indented to warn. */
+
+#define foo bar /* { dg-bogus "indented" "^#kandr" } */
+# define foo bar /* { dg-bogus "indented" "^# kandr" } */
+ #define foo bar /* { dg-warning "indented" "^ #kandr" } */
+ # define foo bar /* { dg-warning "indented" "^ # kandr" } */
+
+/* Block 2: C89 directives should not have the # indented to warn. */
+
+#pragma whatever /* { dg-warning "indented" "^#c89" } */
+# pragma whatever /* { dg-warning "indented" "^# c89" } */
+ #pragma whatever /* { dg-bogus "indented" "^ #c89" } */
+ # pragma whatever /* { dg-bogus "indented" "^ # c89" } */
+
+/* Block 3: Extensions should not have the # indented to warn, _and_
+ they should get a -pedantic warning. */
+
+#assert foo(bar) /* { dg-warning "indented" "^#ext" } */
+# assert bar(baz) /* { dg-warning "indented" "^# ext" } */
+ #assert baz(quux) /* { dg-bogus "indented" "^ #ext" } */
+ # assert quux(weeble) /* { dg-bogus "indented" "^ # ext" } */
+
+#else
+
+/* Block 1: K+R directives should have the # indented to warn. */
+
+#undef foo bar /* { dg-bogus "indented" "^#kandr" } */
+# undef foo bar /* { dg-bogus "indented" "^# kandr" } */
+ #undef foo bar /* { dg-warning "indented" "^ #kandr" } */
+ # undef foo bar /* { dg-warning "indented" "^ # kandr" } */
+
+/* Block 2: C89 directives should not have the # indented to warn. */
+
+#error whatever /* { dg-warning "indented" "^#c89" } */
+# error whatever /* { dg-warning "indented" "^# c89" } */
+ #error whatever /* { dg-bogus "indented" "^ #c89" } */
+ # error whatever /* { dg-bogus "indented" "^ # c89" } */
+
+/* Block 3: Extensions should not have the # indented to warn, and
+ they should _not_ get a -pedantic warning. */
+
+#unassert foo(bar) /* { dg-warning "indented" "^#ext" } */
+# unassert bar(baz) /* { dg-warning "indented" "^# ext" } */
+ #unassert baz(quux) /* { dg-bogus "indented" "^ #ext" } */
+ # unassert quux(weeble) /* { dg-bogus "indented" "^ # ext" } */
+
+#endif
+
+/* { dg-warning "ISO C does not" "extension warning" { target *-*-* } 27 } */
+/* { dg-warning "ISO C does not" "extension warning" { target *-*-* } 28 } */
+/* { dg-warning "ISO C does not" "extension warning" { target *-*-* } 29 } */
+/* { dg-warning "ISO C does not" "extension warning" { target *-*-* } 30 } */
More information about the Gcc-bugs
mailing list