* 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
+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.
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* { 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
/* 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
/* Redundant header include test with C comments at top. */
+# /* And a null directive at the top. */
#ifndef CPP_MIC_H
#define CPP_MIC_H
#endif
+# /* And at the end, too! */
/* And at the end too! */
--- /dev/null
+/* 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"
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)