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