diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/g++.dg/cpp/elifdef-1.C | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp/elifdef-2.C | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp/elifdef-3.C | 62 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp/elifdef-4.C | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp/elifdef-5.C | 63 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp/elifdef-6.C | 65 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp/elifdef-7.C | 65 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-1.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-2.c | 63 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-3.c | 65 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-4.c | 65 |
11 files changed, 465 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/cpp/elifdef-1.C b/gcc/testsuite/g++.dg/cpp/elifdef-1.C new file mode 100644 index 0000000..f7965e3 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp/elifdef-1.C @@ -0,0 +1,3 @@ +// { dg-do preprocess { target { ! c++23 } } } + +#include "../../gcc.dg/cpp/c11-elifdef-1.c" diff --git a/gcc/testsuite/g++.dg/cpp/elifdef-2.C b/gcc/testsuite/g++.dg/cpp/elifdef-2.C new file mode 100644 index 0000000..6408271 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp/elifdef-2.C @@ -0,0 +1,4 @@ +// P2334R1 +// { dg-do preprocess { target c++23 } } + +#include "../../gcc.dg/cpp/c2x-elifdef-1.c" diff --git a/gcc/testsuite/g++.dg/cpp/elifdef-3.C b/gcc/testsuite/g++.dg/cpp/elifdef-3.C new file mode 100644 index 0000000..d9acce0 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp/elifdef-3.C @@ -0,0 +1,62 @@ +// P2334R1 +// { dg-do preprocess { target c++23 } } + +#define A +#undef B + +#elifdef A // { dg-error "#elifdef without #if" } +#elifdef B // { dg-error "#elifdef without #if" } +#elifndef A // { dg-error "#elifndef without #if" } +#elifndef B // { dg-error "#elifndef without #if" } + +#if 1 // { dg-error "-:began here" } +#else +#elifdef A // { dg-error "#elifdef after #else" } +#endif + +#if 1 // { dg-error "-:began here" } +#else +#elifdef B // { dg-error "#elifdef after #else" } +#endif + +#if 1 // { dg-error "-:began here" } +#else +#elifndef A // { dg-error "#elifndef after #else" } +#endif + +#if 1 // { dg-error "-:began here" } +#else +#elifndef B // { dg-error "#elifndef after #else" } +#endif + +#if 0 +#elifdef A = // { dg-error "extra tokens at end of #elifdef directive" } +#endif + +#if 0 +#elifdef B = // { dg-error "extra tokens at end of #elifdef directive" } +#endif + +#if 0 +#elifndef A = // { dg-error "extra tokens at end of #elifndef directive" } +#endif + +#if 0 +#elifndef B = // { dg-error "extra tokens at end of #elifndef directive" } +#endif + +#if 0 +#elifdef // { dg-error "no macro name given in #elifdef directive" } +#endif + +#if 0 +#elifndef // { dg-error "no macro name given in #elifndef directive" } +#endif + +#if 0 +#elifdef , // { dg-error "macro names must be identifiers" } +#endif + +#if 0 +#elifndef , // { dg-error "macro names must be identifiers" } +#endif diff --git a/gcc/testsuite/g++.dg/cpp/elifdef-4.C b/gcc/testsuite/g++.dg/cpp/elifdef-4.C new file mode 100644 index 0000000..08edf58 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp/elifdef-4.C @@ -0,0 +1,5 @@ +// P2334R1 +// { dg-do preprocess } +// { dg-options "" } + +#include "../../gcc.dg/cpp/c2x-elifdef-1.c" diff --git a/gcc/testsuite/g++.dg/cpp/elifdef-5.C b/gcc/testsuite/g++.dg/cpp/elifdef-5.C new file mode 100644 index 0000000..f7d4007 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp/elifdef-5.C @@ -0,0 +1,63 @@ +// P2334R1 +// { dg-do preprocess } +// { dg-options "" } + +#define A +#undef B + +#elifdef A // { dg-error "#elifdef without #if" } +#elifdef B // { dg-error "#elifdef without #if" } +#elifndef A // { dg-error "#elifndef without #if" } +#elifndef B // { dg-error "#elifndef without #if" } + +#if 1 // { dg-error "-:began here" } +#else +#elifdef A // { dg-error "#elifdef after #else" } +#endif + +#if 1 // { dg-error "-:began here" } +#else +#elifdef B // { dg-error "#elifdef after #else" } +#endif + +#if 1 // { dg-error "-:began here" } +#else +#elifndef A // { dg-error "#elifndef after #else" } +#endif + +#if 1 // { dg-error "-:began here" } +#else +#elifndef B // { dg-error "#elifndef after #else" } +#endif + +#if 0 +#elifdef A = // { dg-warning "extra tokens at end of #elifdef directive" } +#endif + +#if 0 +#elifdef B = // { dg-warning "extra tokens at end of #elifdef directive" } +#endif + +#if 0 +#elifndef A = // { dg-warning "extra tokens at end of #elifndef directive" } +#endif + +#if 0 +#elifndef B = // { dg-warning "extra tokens at end of #elifndef directive" } +#endif + +#if 0 +#elifdef // { dg-error "no macro name given in #elifdef directive" } +#endif + +#if 0 +#elifndef // { dg-error "no macro name given in #elifndef directive" } +#endif + +#if 0 +#elifdef , // { dg-error "macro names must be identifiers" } +#endif + +#if 0 +#elifndef , // { dg-error "macro names must be identifiers" } +#endif diff --git a/gcc/testsuite/g++.dg/cpp/elifdef-6.C b/gcc/testsuite/g++.dg/cpp/elifdef-6.C new file mode 100644 index 0000000..94d2118 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp/elifdef-6.C @@ -0,0 +1,65 @@ +// P2334R1 +// { dg-do preprocess } +// { dg-options "-pedantic" } + +#define A +#undef B + +#if 0 +#elifdef A // { dg-warning "#elifdef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } } +#define M1 1 +#endif + +#if M1 != 1 +#error "#elifdef A did not apply" +#endif + +#if 0 +#elifdef B +#error "#elifdef B applied" +#endif + +#if 0 +#elifndef A +#error "#elifndef A applied" +#endif + +#if 0 +#elifndef B // { dg-warning "#elifndef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } } +#define M2 2 +#endif + +#if M2 != 2 +#error "#elifndef B did not apply" +#endif + +#if 0 +#elifdef A // { dg-warning "#elifdef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } } +#else +#error "#elifdef A did not apply" +#endif + +#if 0 +#elifndef B // { dg-warning "#elifndef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } } +#else +#error "#elifndef B did not apply" +#endif + +#if 1 +#elifdef A // { dg-warning "#elifdef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } } +#endif + +#if 1 +#elifndef B // { dg-warning "#elifndef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } } +#endif + +// As with #elif, the syntax of the new directives is relaxed after a + non-skipped group. + +#if 1 +#elifdef x * y // { dg-warning "#elifdef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } } +#endif + +#if 1 +#elifndef ! // { dg-warning "#elifndef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } } +#endif diff --git a/gcc/testsuite/g++.dg/cpp/elifdef-7.C b/gcc/testsuite/g++.dg/cpp/elifdef-7.C new file mode 100644 index 0000000..bb9b8ef --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp/elifdef-7.C @@ -0,0 +1,65 @@ +// P2334R1 +// { dg-do preprocess } +// { dg-options "-pedantic-errors" } + +#define A +#undef B + +#if 0 +#elifdef A // { dg-error "#elifdef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } } +#define M1 1 +#endif + +#if M1 != 1 +#error "#elifdef A did not apply" +#endif + +#if 0 +#elifdef B +#error "#elifdef B applied" +#endif + +#if 0 +#elifndef A +#error "#elifndef A applied" +#endif + +#if 0 +#elifndef B // { dg-error "#elifndef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } } +#define M2 2 +#endif + +#if M2 != 2 +#error "#elifndef B did not apply" +#endif + +#if 0 +#elifdef A // { dg-error "#elifdef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } } +#else +#error "#elifdef A did not apply" +#endif + +#if 0 +#elifndef B // { dg-error "#elifndef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } } +#else +#error "#elifndef B did not apply" +#endif + +#if 1 +#elifdef A // { dg-error "#elifdef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } } +#endif + +#if 1 +#elifndef B // { dg-error "#elifndef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } } +#endif + +// As with #elif, the syntax of the new directives is relaxed after a + non-skipped group. + +#if 1 +#elifdef x * y // { dg-error "#elifdef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } } +#endif + +#if 1 +#elifndef ! // { dg-error "#elifndef before C\\\+\\\+23 is a GCC extension" "" { target c++20_down } } +#endif diff --git a/gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-1.c b/gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-1.c new file mode 100644 index 0000000..efcfbc9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-1.c @@ -0,0 +1,5 @@ +/* Test #elifdef and #elifndef in GNU11. */ +/* { dg-do preprocess } */ +/* { dg-options "-std=gnu11" } */ + +#include "c2x-elifdef-1.c" diff --git a/gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-2.c b/gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-2.c new file mode 100644 index 0000000..e5bd705 --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-2.c @@ -0,0 +1,63 @@ +/* Test #elifdef and #elifndef in GNU11: erroneous usages. */ +/* { dg-do preprocess } */ +/* { dg-options "-std=gnu11" } */ + +#define A +#undef B + +#elifdef A /* { dg-error "#elifdef without #if" } */ +#elifdef B /* { dg-error "#elifdef without #if" } */ +#elifndef A /* { dg-error "#elifndef without #if" } */ +#elifndef B /* { dg-error "#elifndef without #if" } */ + +#if 1 /* { dg-error "-:began here" } */ +#else +#elifdef A /* { dg-error "#elifdef after #else" } */ +#endif + +#if 1 /* { dg-error "-:began here" } */ +#else +#elifdef B /* { dg-error "#elifdef after #else" } */ +#endif + +#if 1 /* { dg-error "-:began here" } */ +#else +#elifndef A /* { dg-error "#elifndef after #else" } */ +#endif + +#if 1 /* { dg-error "-:began here" } */ +#else +#elifndef B /* { dg-error "#elifndef after #else" } */ +#endif + +#if 0 +#elifdef A = /* { dg-warning "extra tokens at end of #elifdef directive" } */ +#endif + +#if 0 +#elifdef B = /* { dg-warning "extra tokens at end of #elifdef directive" } */ +#endif + +#if 0 +#elifndef A = /* { dg-warning "extra tokens at end of #elifndef directive" } */ +#endif + +#if 0 +#elifndef B = /* { dg-warning "extra tokens at end of #elifndef directive" } */ +#endif + +#if 0 +#elifdef /* { dg-error "no macro name given in #elifdef directive" } */ +#endif + +#if 0 +#elifndef /* { dg-error "no macro name given in #elifndef directive" } */ +#endif + +#if 0 +#elifdef , /* { dg-error "macro names must be identifiers" } */ +#endif + +#if 0 +#elifndef , /* { dg-error "macro names must be identifiers" } */ +#endif diff --git a/gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-3.c b/gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-3.c new file mode 100644 index 0000000..0b769a7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-3.c @@ -0,0 +1,65 @@ +/* Test #elifdef and #elifndef in GNU11. */ +/* { dg-do preprocess } */ +/* { dg-options "-std=gnu11 -pedantic" } */ + +#define A +#undef B + +#if 0 +#elifdef A /* { dg-warning "#elifdef before C2X is a GCC extension" } */ +#define M1 1 +#endif + +#if M1 != 1 +#error "#elifdef A did not apply" +#endif + +#if 0 +#elifdef B +#error "#elifdef B applied" +#endif + +#if 0 +#elifndef A +#error "#elifndef A applied" +#endif + +#if 0 +#elifndef B /* { dg-warning "#elifndef before C2X is a GCC extension" } */ +#define M2 2 +#endif + +#if M2 != 2 +#error "#elifndef B did not apply" +#endif + +#if 0 +#elifdef A /* { dg-warning "#elifdef before C2X is a GCC extension" } */ +#else +#error "#elifdef A did not apply" +#endif + +#if 0 +#elifndef B /* { dg-warning "#elifndef before C2X is a GCC extension" } */ +#else +#error "#elifndef B did not apply" +#endif + +#if 1 +#elifdef A /* { dg-warning "#elifdef before C2X is a GCC extension" } */ +#endif + +#if 1 +#elifndef B /* { dg-warning "#elifndef before C2X is a GCC extension" } */ +#endif + +/* As with #elif, the syntax of the new directives is relaxed after a + non-skipped group. */ + +#if 1 +#elifdef x * y /* { dg-warning "#elifdef before C2X is a GCC extension" } */ +#endif + +#if 1 +#elifndef ! /* { dg-warning "#elifndef before C2X is a GCC extension" } */ +#endif diff --git a/gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-4.c b/gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-4.c new file mode 100644 index 0000000..aba3467 --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-4.c @@ -0,0 +1,65 @@ +/* Test #elifdef and #elifndef in GNU11. */ +/* { dg-do preprocess } */ +/* { dg-options "-std=gnu11 -pedantic-errors" } */ + +#define A +#undef B + +#if 0 +#elifdef A /* { dg-error "#elifdef before C2X is a GCC extension" } */ +#define M1 1 +#endif + +#if M1 != 1 +#error "#elifdef A did not apply" +#endif + +#if 0 +#elifdef B +#error "#elifdef B applied" +#endif + +#if 0 +#elifndef A +#error "#elifndef A applied" +#endif + +#if 0 +#elifndef B /* { dg-error "#elifndef before C2X is a GCC extension" } */ +#define M2 2 +#endif + +#if M2 != 2 +#error "#elifndef B did not apply" +#endif + +#if 0 +#elifdef A /* { dg-error "#elifdef before C2X is a GCC extension" } */ +#else +#error "#elifdef A did not apply" +#endif + +#if 0 +#elifndef B /* { dg-error "#elifndef before C2X is a GCC extension" } */ +#else +#error "#elifndef B did not apply" +#endif + +#if 1 +#elifdef A /* { dg-error "#elifdef before C2X is a GCC extension" } */ +#endif + +#if 1 +#elifndef B /* { dg-error "#elifndef before C2X is a GCC extension" } */ +#endif + +/* As with #elif, the syntax of the new directives is relaxed after a + non-skipped group. */ + +#if 1 +#elifdef x * y /* { dg-error "#elifdef before C2X is a GCC extension" } */ +#endif + +#if 1 +#elifndef ! /* { dg-error "#elifndef before C2X is a GCC extension" } */ +#endif |