1 // RUN: %clang_cc1 -fsyntax-only -verify -pedantic -std=c++98 %s 2 3 #define for 0 // expected-warning {{keyword is hidden by macro definition}} 4 #define final 1 5 #define __HAVE_X 0 6 #define _HAVE_X 0 7 #define X__Y 8 9 #undef for 10 #undef final 11 #undef __HAVE_X 12 #undef _HAVE_X 13 #undef X__Y 14 15 #undef __cplusplus 16 #define __cplusplus 17 18 // whitelisted definitions 19 #define while while 20 #define const 21 #define static 22 #define extern 23 #define inline 24 25 #undef while 26 #undef const 27 #undef static 28 #undef extern 29 #undef inline 30 31 #define inline __inline 32 #undef inline 33 #define inline __inline__ 34 #undef inline 35 36 #define inline inline__ // expected-warning {{keyword is hidden by macro definition}} 37 #undef inline 38 #define extern __inline // expected-warning {{keyword is hidden by macro definition}} 39 #undef extern 40 #define extern __extern // expected-warning {{keyword is hidden by macro definition}} 41 #undef extern 42 #define extern __extern__ // expected-warning {{keyword is hidden by macro definition}} 43 #undef extern 44 45 #define inline _inline // expected-warning {{keyword is hidden by macro definition}} 46 #undef inline 47 #define volatile // expected-warning {{keyword is hidden by macro definition}} 48 #undef volatile 49 50 51 #pragma clang diagnostic warning "-Wreserved-id-macro" 52 53 #define switch if // expected-warning {{keyword is hidden by macro definition}} 54 #define final 1 55 #define __HAVE_X 0 // expected-warning {{macro name is a reserved identifier}} 56 #define _HAVE_X 0 // expected-warning {{macro name is a reserved identifier}} 57 #define X__Y // expected-warning {{macro name is a reserved identifier}} 58 59 #undef __cplusplus // expected-warning {{macro name is a reserved identifier}} 60 #undef _HAVE_X // expected-warning {{macro name is a reserved identifier}} 61 #undef X__Y // expected-warning {{macro name is a reserved identifier}} 62 63 int x; 64