111
|
1 /* Another test case for over-eager multiple include optimization,
|
|
2 where the leading "#if !defined" expression is obtained partially,
|
|
3 or wholly, from macros. Neil Booth, 30 Sep 2001. */
|
|
4
|
|
5 /* { dg-do compile } */
|
|
6 /* { dg-options "" } */
|
|
7
|
|
8 extern void abort (void);
|
|
9
|
|
10 /* Each include file should not be subject to MI optimisation, since
|
|
11 macro definitions can change. Each header increments the variable
|
|
12 VAR if it is defined.
|
|
13
|
|
14 The first set of inclusions gets the headers into CPP's cache, but
|
|
15 does nothing since VAR is not defined. The second set should each
|
|
16 increment VAR, since none of the initial set should have been
|
|
17 flagged as optimizable. */
|
|
18
|
|
19 #define EMPTYL
|
|
20 #define EMPTYR
|
|
21 #define NOT !
|
|
22 #define DEFINED defined (guard)
|
|
23 #define NOT_DEFINED ! defined (guard)
|
|
24
|
|
25 #include "mi6a.h"
|
|
26 #include "mi6b.h"
|
|
27 #include "mi6c.h"
|
|
28 #include "mi6d.h"
|
|
29 #include "mi6e.h"
|
|
30
|
|
31 /* Define the macro guard, and redefine the macros to something that
|
|
32 forces compilation of the conditional blocks. */
|
|
33 #define guard
|
|
34 #undef EMPTYL
|
|
35 #define EMPTYL 1 ||
|
|
36 #undef EMPTYR
|
|
37 #define EMPTYR || 1
|
|
38 #undef NOT
|
|
39 #define NOT
|
|
40 #undef DEFINED
|
|
41 #define DEFINED 0
|
|
42 #undef NOT_DEFINED
|
|
43 #define NOT_DEFINED 1
|
|
44
|
|
45 #define VAR five
|
|
46
|
|
47 int
|
|
48 main(void)
|
|
49 {
|
|
50 unsigned int five = 0;
|
|
51
|
|
52 #include "mi6a.h"
|
|
53 #include "mi6b.h"
|
|
54 #include "mi6c.h"
|
|
55 #include "mi6d.h"
|
|
56 #include "mi6e.h"
|
|
57
|
|
58 if (five != 5)
|
|
59 abort ();
|
|
60 return 0;
|
|
61 }
|