macro4.c, macro5.c: New tests.
authorNeil Booth <neilb@earthling.net>
Sun, 29 Oct 2000 11:49:09 +0000 (11:49 +0000)
committerNeil Booth <neil@gcc.gnu.org>
Sun, 29 Oct 2000 11:49:09 +0000 (11:49 +0000)
        * gcc.dg/cpp/macro4.c, macro5.c: New tests.
        * mi1.c, mi1c.h: Add null directives to multiple-include test.
        * mi5.c: Test multiple includes work with -C.
        * trigraphs.c: Test ^= version.

From-SVN: r37124

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/cpp/macro4.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/cpp/macro5.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/cpp/mi1.c
gcc/testsuite/gcc.dg/cpp/mi1c.h
gcc/testsuite/gcc.dg/cpp/mi5.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/cpp/trigraphs.c

index 3640a14aa0c65d5c694ab9e79ab9755a93bf38f7..f6838e88a5bae7109bcea47d7e53e96ae5ac3b39 100644 (file)
@@ -1,3 +1,10 @@
+2000-10-29  Neil Booth  <neilb@earthling.net>
+
+        * gcc.dg/cpp/macro4.c, macro5.c: New tests.
+       * mi1.c, mi1c.h: Add null directives to multiple-include test.
+       * mi5.c: Test multiple includes work with -C.
+       * trigraphs.c: Test ^= version.
+
 2000-10-28  Neil Booth  <neilb@earthling.net>
 
        New tests and test updates for new macro expander.
diff --git a/gcc/testsuite/gcc.dg/cpp/macro4.c b/gcc/testsuite/gcc.dg/cpp/macro4.c
new file mode 100644 (file)
index 0000000..c0dfe41
--- /dev/null
@@ -0,0 +1,24 @@
+/* Copyright (C) 2000 Free Software Foundation, Inc.  */
+
+/* { dg-do run } */
+
+/* Test source Neil Booth.  GCC <= 2.96 don't get this right.  */
+
+extern void abort (void);
+
+int glue (int x, int y)
+{
+  return x + y;
+}
+
+#define glue(x, y) x ## y
+#define xglue(x, y) glue (x, y)
+
+int main ()
+{
+  /* Should expand to glue (1, 2) as the second "glue" is nested.  */
+  if (glue (xgl, ue) (1, 2) != 3)
+    abort ();
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/cpp/macro5.c b/gcc/testsuite/gcc.dg/cpp/macro5.c
new file mode 100644 (file)
index 0000000..9e226b8
--- /dev/null
@@ -0,0 +1,24 @@
+/* { dg-do preprocess } */
+
+/* Test source Robert Lipe, with minor modifications for the testsuite
+   by Neil Booth.  29 Oct 2000.  */
+
+#define _VA_ARGS_0() 42
+#define _L_0()                      (
+#define _R_0()                      )
+
+#define __VA_ARGLIST(argc,list) \
+                _VA_ARGS_##argc list
+
+#define _CAT_LIST(argc,list1,list2) \
+                _L_##argc list1 _R_##argc list2
+
+#define _VA_ARGLIST(argc,list1,list2) \
+                __VA_ARGLIST(argc, \
+                        _CAT_LIST(argc, list1, list2))
+
+#define BLAH(a) _VA_ARGLIST(a, (), ())
+
+#if BLAH (0) != 42
+#error Simulated varargs macros
+#endif
index 0e15c477e297506305a84927420da664ff6bd9dc..4aa66d6aa9465f886b6eb6e07202725254bc9fd3 100644 (file)
@@ -1,9 +1,10 @@
 /* Test "ignore redundant include" facility.
-   We must test with C and C++ comments outside the guard conditional;
-   also, we test guarding with #ifndef and #if !defined.
-   -H is used because cpp mi1ght confuse the issue by optimizing out
-   #line markers.  This test only passes if each of the headers is
-   read exactly once.
+
+   We must test with C and C++ comments, and null directives, outside
+   the guard conditional; also, we test guarding with #ifndef and #if
+   !defined.  -H is used because cpp might confuse the issue by
+   optimizing out #line markers.  This test only passes if each of the
+   headers is read exactly once.
 
    The disgusting regexp in the dg-error line, when stuck into
    dg.exp's compiler-output regexp, matches the correct -H output and
index bae9d8b6db7e43ed9375f1c1988c575c07cf2586..2956286eb22275bbcae03c24a2b3c91fc8b1f8f6 100644 (file)
@@ -1,4 +1,5 @@
 /* Redundant header include test with C comments at top.  */
+# /* And a null directive at the top.  */
 
 #ifndef CPP_MIC_H
 #define CPP_MIC_H
@@ -7,4 +8,5 @@ int a;
 
 #endif
 
+# /* And at the end, too!  */
 /* And at the end too!  */
diff --git a/gcc/testsuite/gcc.dg/cpp/mi5.c b/gcc/testsuite/gcc.dg/cpp/mi5.c
new file mode 100644 (file)
index 0000000..a6fdee2
--- /dev/null
@@ -0,0 +1,13 @@
+/* Test "ignore redundant include" facility, with -C on.
+
+   The disgusting regexp in the dg-error line, when stuck into
+   dg.exp's compiler-output regexp, matches the correct -H output and
+   only the correct -H output.  It has to be all on one line because
+   otherwise it will not be interpreted all in one unit.  */
+
+/* { dg-do preprocess }
+   { dg-options "-H -C" }
+   { dg-error "mi1c\.h" "redundant include check with -C" { target *-*-* } 0 } */
+
+#include "mi1c.h"
+#include "mi1c.h"
index 5f60b632ee738ea379a16ee39af1cc92d187088a..3ec5ed7213567c80fca9246004e30e894e498cae 100644 (file)
@@ -17,10 +17,14 @@ static const char str??(??) = "0123456789??/n";
 int
 main(void)
 ??<
+  unsigned char x = 5;
+
   if (sizeof str != TWELVE)
     abort ();
 
-  if ((5 ??' 3) != 6)
+  /* Test ^=, the only multi-character token to come from trigraphs.  */
+  x ??'= 3;
+  if (x != 6)
     abort ();
 
   if ((5 ??! 3) != 7)