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