! RUN: %flang -E %s 2>&1 | FileCheck %s ! CHECK: print *, 'pass 1' #define IS_DEFINED #define M1 defined(IS_DEFINED) #if M1 print *, 'pass 1' #else print *, 'fail 1' #endif ! CHECK: print *, 'pass 2' #define M2 defined IS_DEFINED #if M2 print *, 'pass 2' #else print *, 'fail 2' #endif ! CHECK: print *, 'pass 3' #define M3 defined(IS_UNDEFINED) #if M3 print *, 'fail 3' #else print *, 'pass 3' #endif ! CHECK: print *, 'pass 4' #define M4 defined IS_UNDEFINED #if M4 print *, 'fail 4' #else print *, 'pass 4' #endif ! CHECK: print *, 'pass 5' #define DEFINED_KEYWORD defined #define M5(x) DEFINED_KEYWORD(x) #define KWM1 1 #if M5(KWM1) print *, 'pass 5' #else print *, 'fail 5' #endif ! CHECK: print *, 'pass 6' #define KWM2 KWM1 #if M5(KWM2) print *, 'pass 6' #else print *, 'fail 6' #endif ! CHECK: print *, 'pass 7' #if M5(IS_UNDEFINED) print *, 'fail 7' #else print *, 'pass 7' #endif ! CHECK: print *, 'pass 8' #define KWM3 IS_UNDEFINED #if M5(KWM3) print *, 'pass 8' #else print *, 'fail 8' #endif ! CHECK: print *, 'pass 9' #define M6(x) defined(x) #if M6(KWM1) print *, 'pass 9' #else print *, 'fail 9' #endif ! CHECK: print *, 'pass 10' #if M6(KWM2) print *, 'pass 10' #else print *, 'fail 10' #endif ! CHECK: print *, 'pass 11' #if M6(IS_UNDEFINED) print *, 'fail 11' #else print *, 'pass 11' #endif ! CHECK: print *, 'pass 12' #if M6(KWM3) print *, 'pass 12' #else print *, 'fail 12' #endif ! CHECK: print *, 'pass 13' #define M7(A, B) ((A) * 10000 + (B) * 100) #define M8(A, B, C, AA, BB) ( \ (defined(AA) && defined(BB)) && \ (M7(A, B) C M7(AA, BB))) #if M8(9, 5, >, BAZ, FUX) print *, 'fail 13' #else print *, 'pass 13' #endif ! CHECK: print *, 'pass 14' #define M9() (defined(IS_UNDEFINED)) #if M9() print *, 'fail 14' #else print *, 'pass 14' #endif end