1*07c0f04eSSerge Pavlov // RUN: %clang_cc1 -fsyntax-only -verify -pedantic %s 292c14bb2SNico Weber 359da7b8aSSerge Pavlov #define for 0 // expected-warning {{keyword is hidden by macro definition}} 4*07c0f04eSSerge Pavlov #define final 1 559da7b8aSSerge Pavlov #define __HAVE_X 0 659da7b8aSSerge Pavlov #define _HAVE_X 0 759da7b8aSSerge Pavlov #define X__Y 859da7b8aSSerge Pavlov 9*07c0f04eSSerge Pavlov #undef for 10*07c0f04eSSerge Pavlov #undef final 11*07c0f04eSSerge Pavlov #undef __HAVE_X 1259da7b8aSSerge Pavlov #undef _HAVE_X 1359da7b8aSSerge Pavlov #undef X__Y 1459da7b8aSSerge Pavlov 15*07c0f04eSSerge Pavlov #undef __cplusplus 16*07c0f04eSSerge Pavlov #define __cplusplus 17*07c0f04eSSerge Pavlov 18*07c0f04eSSerge Pavlov // whitelisted definitions 19*07c0f04eSSerge Pavlov #define while while 20*07c0f04eSSerge Pavlov #define const 21*07c0f04eSSerge Pavlov #define static 22*07c0f04eSSerge Pavlov #define extern 23*07c0f04eSSerge Pavlov #define inline 24*07c0f04eSSerge Pavlov 25*07c0f04eSSerge Pavlov #undef while 26*07c0f04eSSerge Pavlov #undef const 27*07c0f04eSSerge Pavlov #undef static 28*07c0f04eSSerge Pavlov #undef extern 29*07c0f04eSSerge Pavlov #undef inline 30*07c0f04eSSerge Pavlov 31*07c0f04eSSerge Pavlov #define inline __inline 32*07c0f04eSSerge Pavlov #undef inline 33*07c0f04eSSerge Pavlov #define inline __inline__ 34*07c0f04eSSerge Pavlov #undef inline 35*07c0f04eSSerge Pavlov 36*07c0f04eSSerge Pavlov #define inline inline__ // expected-warning {{keyword is hidden by macro definition}} 37*07c0f04eSSerge Pavlov #undef inline 38*07c0f04eSSerge Pavlov #define extern __inline // expected-warning {{keyword is hidden by macro definition}} 39*07c0f04eSSerge Pavlov #undef extern 40*07c0f04eSSerge Pavlov #define extern __extern // expected-warning {{keyword is hidden by macro definition}} 41*07c0f04eSSerge Pavlov #undef extern 42*07c0f04eSSerge Pavlov #define extern __extern__ // expected-warning {{keyword is hidden by macro definition}} 43*07c0f04eSSerge Pavlov #undef extern 44*07c0f04eSSerge Pavlov 45*07c0f04eSSerge Pavlov #define inline _inline // expected-warning {{keyword is hidden by macro definition}} 46*07c0f04eSSerge Pavlov #undef inline 47*07c0f04eSSerge Pavlov #define volatile // expected-warning {{keyword is hidden by macro definition}} 48*07c0f04eSSerge Pavlov #undef volatile 49*07c0f04eSSerge Pavlov 50*07c0f04eSSerge Pavlov 51*07c0f04eSSerge Pavlov #pragma clang diagnostic warning "-Wreserved-id-macro" 52*07c0f04eSSerge Pavlov 5359da7b8aSSerge Pavlov #define switch if // expected-warning {{keyword is hidden by macro definition}} 54*07c0f04eSSerge Pavlov #define final 1 55*07c0f04eSSerge Pavlov #define __HAVE_X 0 // expected-warning {{macro name is a reserved identifier}} 56*07c0f04eSSerge Pavlov #define _HAVE_X 0 // expected-warning {{macro name is a reserved identifier}} 57*07c0f04eSSerge Pavlov #define X__Y // expected-warning {{macro name is a reserved identifier}} 5859da7b8aSSerge Pavlov 59*07c0f04eSSerge Pavlov #undef __cplusplus // expected-warning {{macro name is a reserved identifier}} 60*07c0f04eSSerge Pavlov #undef _HAVE_X // expected-warning {{macro name is a reserved identifier}} 61*07c0f04eSSerge Pavlov #undef X__Y // expected-warning {{macro name is a reserved identifier}} 6259da7b8aSSerge Pavlov 6359da7b8aSSerge Pavlov int x; 64