mirror of https://github.com/microsoft/clang.git
[Lexer] Ensure that the token is not an annotation token when
retrieving the identifer info for an Objective-C keyword This commit fixes an assertion that's triggered in getIdentifier when the token is an annotation token. rdar://32225463 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@303246 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
bb0d458629
commit
bd77dc6b8f
|
@ -43,6 +43,8 @@ using namespace clang;
|
||||||
|
|
||||||
/// isObjCAtKeyword - Return true if we have an ObjC keyword identifier.
|
/// isObjCAtKeyword - Return true if we have an ObjC keyword identifier.
|
||||||
bool Token::isObjCAtKeyword(tok::ObjCKeywordKind objcKey) const {
|
bool Token::isObjCAtKeyword(tok::ObjCKeywordKind objcKey) const {
|
||||||
|
if (isAnnotation())
|
||||||
|
return false;
|
||||||
if (IdentifierInfo *II = getIdentifierInfo())
|
if (IdentifierInfo *II = getIdentifierInfo())
|
||||||
return II->getObjCKeywordID() == objcKey;
|
return II->getObjCKeywordID() == objcKey;
|
||||||
return false;
|
return false;
|
||||||
|
@ -50,6 +52,8 @@ bool Token::isObjCAtKeyword(tok::ObjCKeywordKind objcKey) const {
|
||||||
|
|
||||||
/// getObjCKeywordID - Return the ObjC keyword kind.
|
/// getObjCKeywordID - Return the ObjC keyword kind.
|
||||||
tok::ObjCKeywordKind Token::getObjCKeywordID() const {
|
tok::ObjCKeywordKind Token::getObjCKeywordID() const {
|
||||||
|
if (isAnnotation())
|
||||||
|
return tok::objc_not_keyword;
|
||||||
IdentifierInfo *specId = getIdentifierInfo();
|
IdentifierInfo *specId = getIdentifierInfo();
|
||||||
return specId ? specId->getObjCKeywordID() : tok::objc_not_keyword;
|
return specId ? specId->getObjCKeywordID() : tok::objc_not_keyword;
|
||||||
}
|
}
|
||||||
|
|
|
@ -441,3 +441,7 @@ module DebugNestedB {
|
||||||
header "DebugNestedB.h"
|
header "DebugNestedB.h"
|
||||||
export *
|
export *
|
||||||
}
|
}
|
||||||
|
|
||||||
|
module objcAtKeywordMissingEnd {
|
||||||
|
header "objcAtKeywordMissingEnd.h"
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
@interface MissingEnd // expected-note {{class started here}}
|
||||||
|
|
||||||
|
@ // expected-error {{expected an Objective-C directive after '@'}} expected-error {{missing '@end'}}
|
|
@ -0,0 +1,7 @@
|
||||||
|
// RUN: rm -rf %t
|
||||||
|
// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -verify -x objective-c -fmodule-name=objcAtKeywordMissingEnd -emit-module %S/Inputs/module.map
|
||||||
|
// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -x objective-c -fmodule-name=Empty -emit-module %S/Inputs/module.map
|
||||||
|
// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -verify -I %S/Inputs %s
|
||||||
|
|
||||||
|
@interface X // expected-note {{class started here}}
|
||||||
|
#pragma clang module import Empty // expected-error {{missing '@end'}}
|
Loading…
Reference in New Issue