Commit 00c83d46 by Neil Booth Committed by Neil Booth

macro4.c, macro5.c: New tests.

        * 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
parent 44ed91a1
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> 2000-10-28 Neil Booth <neilb@earthling.net>
New tests and test updates for new macro expander. New tests and test updates for new macro expander.
......
/* 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;
}
/* { 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. /* 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. We must test with C and C++ comments, and null directives, outside
-H is used because cpp mi1ght confuse the issue by optimizing out the guard conditional; also, we test guarding with #ifndef and #if
#line markers. This test only passes if each of the headers is !defined. -H is used because cpp might confuse the issue by
read exactly once. 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 The disgusting regexp in the dg-error line, when stuck into
dg.exp's compiler-output regexp, matches the correct -H output and dg.exp's compiler-output regexp, matches the correct -H output and
......
/* Redundant header include test with C comments at top. */ /* Redundant header include test with C comments at top. */
# /* And a null directive at the top. */
#ifndef CPP_MIC_H #ifndef CPP_MIC_H
#define CPP_MIC_H #define CPP_MIC_H
...@@ -7,4 +8,5 @@ int a; ...@@ -7,4 +8,5 @@ int a;
#endif #endif
# /* And at the end, too! */
/* And at the end too! */ /* And at the end too! */
/* 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"
...@@ -17,10 +17,14 @@ static const char str??(??) = "0123456789??/n"; ...@@ -17,10 +17,14 @@ static const char str??(??) = "0123456789??/n";
int int
main(void) main(void)
??< ??<
unsigned char x = 5;
if (sizeof str != TWELVE) if (sizeof str != TWELVE)
abort (); abort ();
if ((5 ??' 3) != 6) /* Test ^=, the only multi-character token to come from trigraphs. */
x ??'= 3;
if (x != 6)
abort (); abort ();
if ((5 ??! 3) != 7) if ((5 ??! 3) != 7)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment