1*59da7b8aSSerge Pavlov // RUN: %clang_cc1 -fsyntax-only %s -verify
2*59da7b8aSSerge Pavlov 
3*59da7b8aSSerge Pavlov #define for 0    // expected-warning {{keyword is hidden by macro definition}}
4*59da7b8aSSerge Pavlov #define final 1  // expected-warning {{keyword is hidden by macro definition}}
5*59da7b8aSSerge Pavlov #define __HAVE_X 0
6*59da7b8aSSerge Pavlov #define _HAVE_X 0
7*59da7b8aSSerge Pavlov #define X__Y
8*59da7b8aSSerge Pavlov 
9*59da7b8aSSerge Pavlov #undef __cplusplus
10*59da7b8aSSerge Pavlov #undef _HAVE_X
11*59da7b8aSSerge Pavlov #undef X__Y
12*59da7b8aSSerge Pavlov 
13*59da7b8aSSerge Pavlov #pragma clang diagnostic warning "-Wreserved-id-macro"
14*59da7b8aSSerge Pavlov 
15*59da7b8aSSerge Pavlov #define switch if  // expected-warning {{keyword is hidden by macro definition}}
16*59da7b8aSSerge Pavlov #define final 1    // expected-warning {{keyword is hidden by macro definition}}
17*59da7b8aSSerge Pavlov #define __HAVE_X 0 // expected-warning {{macro name is a reserved identifier}}
18*59da7b8aSSerge Pavlov #define _HAVE_X 0  // expected-warning {{macro name is a reserved identifier}}
19*59da7b8aSSerge Pavlov #define X__Y       // expected-warning {{macro name is a reserved identifier}}
20*59da7b8aSSerge Pavlov 
21*59da7b8aSSerge Pavlov #undef __cplusplus // expected-warning {{macro name is a reserved identifier}}
22*59da7b8aSSerge Pavlov #undef _HAVE_X     // expected-warning {{macro name is a reserved identifier}}
23*59da7b8aSSerge Pavlov #undef X__Y        // expected-warning {{macro name is a reserved identifier}}
24*59da7b8aSSerge Pavlov 
25*59da7b8aSSerge Pavlov int x;
26