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