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
This commit is contained in:
Neil Booth 2000-10-29 11:49:09 +00:00 committed by Neil Booth
parent 44ed91a1d6
commit 00c83d4661
7 changed files with 81 additions and 6 deletions

View 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.

View File

@ -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;
}

View File

@ -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

View 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

View 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! */

View File

@ -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"

View 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)