mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-05-14 01:46:41 +00:00

Currently we warn when MI->isBuiltinMacro, but this is only true for builtin macros that require processing when expanding. Checking SourceMgr.isWrittenInBuiltinFile in addition to this will mean that we catch all builtin macros, though we shouldn't warn on feature test macros. As part of doing this I've also moved the handling of undefining from CheckMacroName to HandleUndefDirective, as it doesn't really make sense to handle undefining in CheckMacroName but defining in HandleDefineDirective. It would be nice to instead handle both in CheckMacroName, but that isn't possible as the handling of defines requires looking at what the name is being defined to. Differential Revision: https://reviews.llvm.org/D144654
63 lines
1.8 KiB
C++
63 lines
1.8 KiB
C++
// RUN: %clang_cc1 -fsyntax-only -verify -pedantic -std=c++98 %s
|
|
|
|
#define for 0 // expected-warning {{keyword is hidden by macro definition}}
|
|
#define final 1
|
|
#define __HAVE_X 0
|
|
#define _HAVE_X 0
|
|
#define X__Y
|
|
|
|
#undef for
|
|
#undef final
|
|
#undef __HAVE_X
|
|
#undef _HAVE_X
|
|
#undef X__Y
|
|
|
|
#undef __cplusplus // expected-warning {{undefining builtin macro}}
|
|
#define __cplusplus
|
|
|
|
// allowlisted definitions
|
|
#define while while
|
|
#define const
|
|
#define static
|
|
#define extern
|
|
#define inline
|
|
|
|
#undef while
|
|
#undef const
|
|
#undef static
|
|
#undef extern
|
|
#undef inline
|
|
|
|
#define inline __inline
|
|
#undef inline
|
|
#define inline __inline__
|
|
#undef inline
|
|
|
|
#define inline inline__ // expected-warning {{keyword is hidden by macro definition}}
|
|
#undef inline
|
|
#define extern __inline // expected-warning {{keyword is hidden by macro definition}}
|
|
#undef extern
|
|
#define extern __extern // expected-warning {{keyword is hidden by macro definition}}
|
|
#undef extern
|
|
#define extern __extern__ // expected-warning {{keyword is hidden by macro definition}}
|
|
#undef extern
|
|
|
|
#define inline _inline // expected-warning {{keyword is hidden by macro definition}}
|
|
#undef inline
|
|
#define volatile // expected-warning {{keyword is hidden by macro definition}}
|
|
#undef volatile
|
|
|
|
#pragma clang diagnostic warning "-Wreserved-macro-identifier"
|
|
|
|
#define switch if // expected-warning {{keyword is hidden by macro definition}}
|
|
#define final 1
|
|
#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;
|