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