* gcc.dg/cpp/tr-warn3.c: New test.
authorKaveh R. Ghazi <ghazi@caip.rutgers.edu>
Tue, 25 Jul 2000 20:43:05 +0000 (20:43 +0000)
committerKaveh Ghazi <ghazi@gcc.gnu.org>
Tue, 25 Jul 2000 20:43:05 +0000 (20:43 +0000)
From-SVN: r35255

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/cpp/tr-warn3.c [new file with mode: 0644]

index 49fd868618e206dd1007d6e791fb6041d36be211..e1c0fda0482fdd0b669dde698b3932d6cb908675 100644 (file)
@@ -1,3 +1,7 @@
+2000-07-25  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * gcc.dg/cpp/tr-warn3.c: New test.
+
 2000-07-25  Nathan Sidwell  <nathan@codesourcery.com>
 
        * g++.old-deja/g++.ext/implicit1.C: Remove.
diff --git a/gcc/testsuite/gcc.dg/cpp/tr-warn3.c b/gcc/testsuite/gcc.dg/cpp/tr-warn3.c
new file mode 100644 (file)
index 0000000..4819d2f
--- /dev/null
@@ -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 } */