Add a -Wc++0x-compat warning for C++11 keywords used as identifiers when in
C++98 mode. Only the first occurrence of each keyword will produce a warning. llvm-svn: 141700
This commit is contained in:
@@ -32,6 +32,7 @@ IdentifierInfo::IdentifierInfo() {
|
||||
ObjCOrBuiltinID = 0;
|
||||
HasMacro = false;
|
||||
IsExtension = false;
|
||||
IsCXX11CompatKeyword = false;
|
||||
IsPoisoned = false;
|
||||
IsCPPOperatorKeyword = false;
|
||||
NeedsHandleIdentifier = false;
|
||||
@@ -102,10 +103,10 @@ namespace {
|
||||
/// identifiers because they are language keywords. This causes the lexer to
|
||||
/// automatically map matching identifiers to specialized token codes.
|
||||
///
|
||||
/// The C90/C99/CPP/CPP0x flags are set to 2 if the token should be
|
||||
/// enabled in the specified langauge, set to 1 if it is an extension
|
||||
/// in the specified language, and set to 0 if disabled in the
|
||||
/// specified language.
|
||||
/// The C90/C99/CPP/CPP0x flags are set to 3 if the token is a keyword in a
|
||||
/// future language standard, set to 2 if the token should be enabled in the
|
||||
/// specified langauge, set to 1 if it is an extension in the specified
|
||||
/// language, and set to 0 if disabled in the specified language.
|
||||
static void AddKeyword(StringRef Keyword,
|
||||
tok::TokenKind TokenCode, unsigned Flags,
|
||||
const LangOptions &LangOpts, IdentifierTable &Table) {
|
||||
@@ -123,12 +124,15 @@ static void AddKeyword(StringRef Keyword,
|
||||
else if (!LangOpts.CPlusPlus && (Flags & KEYNOCXX)) AddResult = 2;
|
||||
else if (LangOpts.C1X && (Flags & KEYC1X)) AddResult = 2;
|
||||
else if (LangOpts.ObjCAutoRefCount && (Flags & KEYARC)) AddResult = 2;
|
||||
|
||||
else if (LangOpts.CPlusPlus && (Flags & KEYCXX0X)) AddResult = 3;
|
||||
|
||||
// Don't add this keyword if disabled in this language.
|
||||
if (AddResult == 0) return;
|
||||
|
||||
IdentifierInfo &Info = Table.get(Keyword, TokenCode);
|
||||
IdentifierInfo &Info =
|
||||
Table.get(Keyword, AddResult == 3 ? tok::identifier : TokenCode);
|
||||
Info.setIsExtensionToken(AddResult == 1);
|
||||
Info.setIsCXX11CompatKeyword(AddResult == 3);
|
||||
}
|
||||
|
||||
/// AddCXXOperatorKeyword - Register a C++ operator keyword alternative
|
||||
@@ -493,4 +497,3 @@ const char *clang::getOperatorSpelling(OverloadedOperatorKind Operator) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user