From 9f6ef6bcaf5716524e0b97c9ae07cdb885858cf3 Mon Sep 17 00:00:00 2001 From: Neil Booth Date: Sun, 29 Oct 2000 17:43:57 +0000 Subject: [PATCH] defined.c, [...]: New tests. * gcc.dg/cpp/defined.c, include1.c, paste11.c, skipping.c: New tests. * gcc.dg/cpp/macsyntx.c: Move test to defined.c. * gcc.dg/cpp/mi3.c, mi3.h: New test for over-enthusiastic optimisation. From-SVN: r37126 --- gcc/testsuite/ChangeLog | 8 ++++++++ gcc/testsuite/gcc.dg/cpp/defined.c | 27 +++++++++++++++++++++++++++ gcc/testsuite/gcc.dg/cpp/include1.c | 13 +++++++++++++ gcc/testsuite/gcc.dg/cpp/macsyntx.c | 1 - gcc/testsuite/gcc.dg/cpp/mi3.c | 5 ++++- gcc/testsuite/gcc.dg/cpp/mi3.h | 7 +++++++ gcc/testsuite/gcc.dg/cpp/paste11.c | 15 +++++++++++++++ gcc/testsuite/gcc.dg/cpp/skipping.c | 20 ++++++++++++++++++++ 8 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/cpp/defined.c create mode 100644 gcc/testsuite/gcc.dg/cpp/include1.c create mode 100644 gcc/testsuite/gcc.dg/cpp/mi3.h create mode 100644 gcc/testsuite/gcc.dg/cpp/paste11.c create mode 100644 gcc/testsuite/gcc.dg/cpp/skipping.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f6838e88a5b..f8bad74d9bc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2000-10-29 Neil Booth + + * gcc.dg/cpp/defined.c, include1.c, paste11.c, skipping.c: + New tests. + * gcc.dg/cpp/macsyntx.c: Move test to defined.c. + * gcc.dg/cpp/mi3.c, mi3.h: New test for over-enthusiastic + optimisation. + 2000-10-29 Neil Booth * gcc.dg/cpp/macro4.c, macro5.c: New tests. diff --git a/gcc/testsuite/gcc.dg/cpp/defined.c b/gcc/testsuite/gcc.dg/cpp/defined.c new file mode 100644 index 00000000000..0e82f7e1f50 --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp/defined.c @@ -0,0 +1,27 @@ +/* Copyright (C) 2000 Free Software Foundation, Inc. */ + +/* { dg-do preprocess } */ + +/* Tests behaviour of the defined operator. */ + +/* Source: Neil Booth, 29 Oct 2000. */ + +/* No diagnostics, though you could argue there should be. */ +#if defined defined +#error defined is defined! +#endif + +#define defined /* { dg-error "defined" } */ + +#define is_Z_defined defined Z + +/* The behaviour of "defined" when it comes from a macro expansion is + now documented. */ +#if is_Z_defined /* { dg-warning "macro expansion" } */ +#error Macro expanding into defined operator test 1 +#endif + +#define Z +#if !is_Z_defined /* { dg-warning "macro expansion" } */ +#error Macro expanding into defined operator test 2 +#endif diff --git a/gcc/testsuite/gcc.dg/cpp/include1.c b/gcc/testsuite/gcc.dg/cpp/include1.c new file mode 100644 index 00000000000..a0a54e00598 --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp/include1.c @@ -0,0 +1,13 @@ +/* Copyright (C) 2000 Free Software Foundation, Inc. */ + +/* { dg-do preprocess } */ + +/* Tests that "#include MACRO" works. */ + +/* Source: Neil Booth, 29 Oct 2000. */ + +#define MACRO "mi1c.h" +#include MACRO +#ifndef CPP_MIC_H +#error #include MACRO does not work +#endif diff --git a/gcc/testsuite/gcc.dg/cpp/macsyntx.c b/gcc/testsuite/gcc.dg/cpp/macsyntx.c index e7f3528b49f..ee5fd365a9c 100644 --- a/gcc/testsuite/gcc.dg/cpp/macsyntx.c +++ b/gcc/testsuite/gcc.dg/cpp/macsyntx.c @@ -21,7 +21,6 @@ #define ; /* { dg-error "identifier" } */ #define SEMI; /* { dg-warning "space" } */ -#define defined /* { dg-error "defined" } */ #define foo(X /* { dg-error "missing" } */ #define foo\ (X,) /* { dg-error "parameter name" } */ diff --git a/gcc/testsuite/gcc.dg/cpp/mi3.c b/gcc/testsuite/gcc.dg/cpp/mi3.c index 533b509f1e7..f33fd7887e9 100644 --- a/gcc/testsuite/gcc.dg/cpp/mi3.c +++ b/gcc/testsuite/gcc.dg/cpp/mi3.c @@ -10,8 +10,11 @@ #include "mi3.def" #undef X +#include "mi3.h" +#include "mi3.h" /* The second include declares variable c. */ + int main(void) { - return a + b; + return a + b + c; } diff --git a/gcc/testsuite/gcc.dg/cpp/mi3.h b/gcc/testsuite/gcc.dg/cpp/mi3.h new file mode 100644 index 00000000000..8774fcf486a --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp/mi3.h @@ -0,0 +1,7 @@ +/* Another test case for over-eager multiple include optimization. */ + +#ifndef GUARD +#define GUARD +#elif 1 /* #elif kills optimisation */ +int c; +#endif diff --git a/gcc/testsuite/gcc.dg/cpp/paste11.c b/gcc/testsuite/gcc.dg/cpp/paste11.c new file mode 100644 index 00000000000..18530b3448a --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp/paste11.c @@ -0,0 +1,15 @@ +/* Copyright (C) 2000 Free Software Foundation, Inc. */ + +/* { dg-do preprocess } */ + +/* Test correct pasting of identifiers and numbers. We can paste any + number, as long as no '.', '-' or '+' appears in its spelling. */ + +#define glue(x, y) x ## y + +glue (ident, 12) /* OK. */ +glue (ident, 12e3) /* OK. */ +glue (ident, 12e+3) /* { dg-warning "valid preprocessing tok" } */ +glue (ident, 12e-3) /* { dg-warning "valid preprocessing tok" } */ +glue (ident, 1.2) /* { dg-warning "valid preprocessing tok" } */ +glue (ident, .12) /* { dg-warning "valid preprocessing tok" } */ diff --git a/gcc/testsuite/gcc.dg/cpp/skipping.c b/gcc/testsuite/gcc.dg/cpp/skipping.c new file mode 100644 index 00000000000..d87ea70591c --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp/skipping.c @@ -0,0 +1,20 @@ +/* Copyright (C) 2000 Free Software Foundation, Inc. */ + +/* { dg-do preprocess } */ + +/* Tests expansion of macros whilst skipping false conditionals. */ + +/* Source: Neil Booth, 29 Oct 2000. */ + +#define F() +#define TRUE 1 + +#if 0 +F( /* No diagnostic: don't even try to expand it. */ +#endif + +#if 0 +#elif TRUE /* Expand this, even though we were skipping. */ +#else +#error Macros not expanded in #elif +#endif