xref: /llvm-project/flang/test/Preprocessing/defined-in-macro.F90 (revision 850d42fb145c636a3b56a7616c3e3c5c188c1916)
1*850d42fbSPeter Klausler! RUN: %flang -E %s 2>&1 | FileCheck %s
2*850d42fbSPeter Klausler
3*850d42fbSPeter Klausler! CHECK: print *, 'pass 1'
4*850d42fbSPeter Klausler#define IS_DEFINED
5*850d42fbSPeter Klausler#define M1 defined(IS_DEFINED)
6*850d42fbSPeter Klausler#if M1
7*850d42fbSPeter Klauslerprint *, 'pass 1'
8*850d42fbSPeter Klausler#else
9*850d42fbSPeter Klauslerprint *, 'fail 1'
10*850d42fbSPeter Klausler#endif
11*850d42fbSPeter Klausler
12*850d42fbSPeter Klausler! CHECK: print *, 'pass 2'
13*850d42fbSPeter Klausler#define M2 defined IS_DEFINED
14*850d42fbSPeter Klausler#if M2
15*850d42fbSPeter Klauslerprint *, 'pass 2'
16*850d42fbSPeter Klausler#else
17*850d42fbSPeter Klauslerprint *, 'fail 2'
18*850d42fbSPeter Klausler#endif
19*850d42fbSPeter Klausler
20*850d42fbSPeter Klausler! CHECK: print *, 'pass 3'
21*850d42fbSPeter Klausler#define M3 defined(IS_UNDEFINED)
22*850d42fbSPeter Klausler#if M3
23*850d42fbSPeter Klauslerprint *, 'fail 3'
24*850d42fbSPeter Klausler#else
25*850d42fbSPeter Klauslerprint *, 'pass 3'
26*850d42fbSPeter Klausler#endif
27*850d42fbSPeter Klausler
28*850d42fbSPeter Klausler! CHECK: print *, 'pass 4'
29*850d42fbSPeter Klausler#define M4 defined IS_UNDEFINED
30*850d42fbSPeter Klausler#if M4
31*850d42fbSPeter Klauslerprint *, 'fail 4'
32*850d42fbSPeter Klausler#else
33*850d42fbSPeter Klauslerprint *, 'pass 4'
34*850d42fbSPeter Klausler#endif
35*850d42fbSPeter Klausler
36*850d42fbSPeter Klausler! CHECK: print *, 'pass 5'
37*850d42fbSPeter Klausler#define DEFINED_KEYWORD defined
38*850d42fbSPeter Klausler#define M5(x) DEFINED_KEYWORD(x)
39*850d42fbSPeter Klausler#define KWM1 1
40*850d42fbSPeter Klausler#if M5(KWM1)
41*850d42fbSPeter Klauslerprint *, 'pass 5'
42*850d42fbSPeter Klausler#else
43*850d42fbSPeter Klauslerprint *, 'fail 5'
44*850d42fbSPeter Klausler#endif
45*850d42fbSPeter Klausler
46*850d42fbSPeter Klausler! CHECK: print *, 'pass 6'
47*850d42fbSPeter Klausler#define KWM2 KWM1
48*850d42fbSPeter Klausler#if M5(KWM2)
49*850d42fbSPeter Klauslerprint *, 'pass 6'
50*850d42fbSPeter Klausler#else
51*850d42fbSPeter Klauslerprint *, 'fail 6'
52*850d42fbSPeter Klausler#endif
53*850d42fbSPeter Klausler
54*850d42fbSPeter Klausler! CHECK: print *, 'pass 7'
55*850d42fbSPeter Klausler#if M5(IS_UNDEFINED)
56*850d42fbSPeter Klauslerprint *, 'fail 7'
57*850d42fbSPeter Klausler#else
58*850d42fbSPeter Klauslerprint *, 'pass 7'
59*850d42fbSPeter Klausler#endif
60*850d42fbSPeter Klausler
61*850d42fbSPeter Klausler! CHECK: print *, 'pass 8'
62*850d42fbSPeter Klausler#define KWM3 IS_UNDEFINED
63*850d42fbSPeter Klausler#if M5(KWM3)
64*850d42fbSPeter Klauslerprint *, 'pass 8'
65*850d42fbSPeter Klausler#else
66*850d42fbSPeter Klauslerprint *, 'fail 8'
67*850d42fbSPeter Klausler#endif
68*850d42fbSPeter Klausler
69*850d42fbSPeter Klausler! CHECK: print *, 'pass 9'
70*850d42fbSPeter Klausler#define M6(x) defined(x)
71*850d42fbSPeter Klausler#if M6(KWM1)
72*850d42fbSPeter Klauslerprint *, 'pass 9'
73*850d42fbSPeter Klausler#else
74*850d42fbSPeter Klauslerprint *, 'fail 9'
75*850d42fbSPeter Klausler#endif
76*850d42fbSPeter Klausler
77*850d42fbSPeter Klausler! CHECK: print *, 'pass 10'
78*850d42fbSPeter Klausler#if M6(KWM2)
79*850d42fbSPeter Klauslerprint *, 'pass 10'
80*850d42fbSPeter Klausler#else
81*850d42fbSPeter Klauslerprint *, 'fail 10'
82*850d42fbSPeter Klausler#endif
83*850d42fbSPeter Klausler
84*850d42fbSPeter Klausler! CHECK: print *, 'pass 11'
85*850d42fbSPeter Klausler#if M6(IS_UNDEFINED)
86*850d42fbSPeter Klauslerprint *, 'fail 11'
87*850d42fbSPeter Klausler#else
88*850d42fbSPeter Klauslerprint *, 'pass 11'
89*850d42fbSPeter Klausler#endif
90*850d42fbSPeter Klausler
91*850d42fbSPeter Klausler! CHECK: print *, 'pass 12'
92*850d42fbSPeter Klausler#if M6(KWM3)
93*850d42fbSPeter Klauslerprint *, 'pass 12'
94*850d42fbSPeter Klausler#else
95*850d42fbSPeter Klauslerprint *, 'fail 12'
96*850d42fbSPeter Klausler#endif
97*850d42fbSPeter Klausler
98*850d42fbSPeter Klausler! CHECK: print *, 'pass 13'
99*850d42fbSPeter Klausler#define M7(A, B) ((A) * 10000 + (B) * 100)
100*850d42fbSPeter Klausler#define M8(A, B, C, AA, BB) ( \
101*850d42fbSPeter Klausler  (defined(AA) && defined(BB)) && \
102*850d42fbSPeter Klausler  (M7(A, B) C M7(AA, BB)))
103*850d42fbSPeter Klausler#if M8(9, 5, >, BAZ, FUX)
104*850d42fbSPeter Klauslerprint *, 'fail 13'
105*850d42fbSPeter Klausler#else
106*850d42fbSPeter Klauslerprint *, 'pass 13'
107*850d42fbSPeter Klausler#endif
108*850d42fbSPeter Klausler
109*850d42fbSPeter Klausler! CHECK: print *, 'pass 14'
110*850d42fbSPeter Klausler#define M9() (defined(IS_UNDEFINED))
111*850d42fbSPeter Klausler#if M9()
112*850d42fbSPeter Klauslerprint *, 'fail 14'
113*850d42fbSPeter Klausler#else
114*850d42fbSPeter Klauslerprint *, 'pass 14'
115*850d42fbSPeter Klausler#endif
116*850d42fbSPeter Klausler
117*850d42fbSPeter Klauslerend
118