// RUN: %clang_cc1 -fsyntax-only %s -verify

#define for 0    // expected-warning {{keyword is hidden by macro definition}}
#define final 1  // expected-warning {{keyword is hidden by macro definition}}
#define __HAVE_X 0
#define _HAVE_X 0
#define X__Y

#undef __cplusplus
#undef _HAVE_X
#undef X__Y

#pragma clang diagnostic warning "-Wreserved-id-macro"

#define switch if  // expected-warning {{keyword is hidden by macro definition}}
#define final 1    // expected-warning {{keyword is hidden by macro definition}}
#define __HAVE_X 0 // expected-warning {{macro name is a reserved identifier}}
#define _HAVE_X 0  // expected-warning {{macro name is a reserved identifier}}
#define X__Y       // expected-warning {{macro name is a reserved identifier}}

#undef __cplusplus // expected-warning {{macro name is a reserved identifier}}
#undef _HAVE_X     // expected-warning {{macro name is a reserved identifier}}
#undef X__Y        // expected-warning {{macro name is a reserved identifier}}

int x;
