diff options
Diffstat (limited to 'gcc/testsuite/gcc.dg/cpp/mi6.c')
-rw-r--r-- | gcc/testsuite/gcc.dg/cpp/mi6.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/cpp/mi6.c b/gcc/testsuite/gcc.dg/cpp/mi6.c new file mode 100644 index 000000000..c3af2d3f2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp/mi6.c @@ -0,0 +1,61 @@ +/* Another test case for over-eager multiple include optimization, + where the leading "#if !defined" expression is obtained partially, + or wholly, from macros. Neil Booth, 30 Sep 2001. */ + +/* { dg-do compile } */ +/* { dg-options "" } */ + +extern void abort (void); + +/* Each include file should not be subject to MI optimisation, since + macro definitions can change. Each header increments the variable + VAR if it is defined. + + The first set of inclusions gets the headers into CPP's cache, but + does nothing since VAR is not defined. The second set should each + increment VAR, since none of the initial set should have been + flagged as optimizable. */ + +#define EMPTYL +#define EMPTYR +#define NOT ! +#define DEFINED defined (guard) +#define NOT_DEFINED ! defined (guard) + +#include "mi6a.h" +#include "mi6b.h" +#include "mi6c.h" +#include "mi6d.h" +#include "mi6e.h" + +/* Define the macro guard, and redefine the macros to something that + forces compilation of the conditional blocks. */ +#define guard +#undef EMPTYL +#define EMPTYL 1 || +#undef EMPTYR +#define EMPTYR || 1 +#undef NOT +#define NOT +#undef DEFINED +#define DEFINED 0 +#undef NOT_DEFINED +#define NOT_DEFINED 1 + +#define VAR five + +int +main(void) +{ + unsigned int five = 0; + +#include "mi6a.h" +#include "mi6b.h" +#include "mi6c.h" +#include "mi6d.h" +#include "mi6e.h" + + if (five != 5) + abort (); + return 0; +} |