| ! 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 |