r303246 - [Lexer] Ensure that the token is not an annotation token when
Alex Lorenz via cfe-commits
cfe-commits at lists.llvm.org
Wed May 17 04:08:37 PDT 2017
Author: arphaman
Date: Wed May 17 06:08:36 2017
New Revision: 303246
URL: http://llvm.org/viewvc/llvm-project?rev=303246&view=rev
Log:
[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
Added:
cfe/trunk/test/Modules/Inputs/objcAtKeywordMissingEnd.h
cfe/trunk/test/Modules/objc-at-keyword.m
Modified:
cfe/trunk/lib/Lex/Lexer.cpp
cfe/trunk/test/Modules/Inputs/module.map
Modified: cfe/trunk/lib/Lex/Lexer.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/Lexer.cpp?rev=303246&r1=303245&r2=303246&view=diff
==============================================================================
--- cfe/trunk/lib/Lex/Lexer.cpp (original)
+++ cfe/trunk/lib/Lex/Lexer.cpp Wed May 17 06:08:36 2017
@@ -43,6 +43,8 @@ using namespace clang;
/// isObjCAtKeyword - Return true if we have an ObjC keyword identifier.
bool Token::isObjCAtKeyword(tok::ObjCKeywordKind objcKey) const {
+ if (isAnnotation())
+ return false;
if (IdentifierInfo *II = getIdentifierInfo())
return II->getObjCKeywordID() == objcKey;
return false;
@@ -50,6 +52,8 @@ bool Token::isObjCAtKeyword(tok::ObjCKey
/// getObjCKeywordID - Return the ObjC keyword kind.
tok::ObjCKeywordKind Token::getObjCKeywordID() const {
+ if (isAnnotation())
+ return tok::objc_not_keyword;
IdentifierInfo *specId = getIdentifierInfo();
return specId ? specId->getObjCKeywordID() : tok::objc_not_keyword;
}
Modified: cfe/trunk/test/Modules/Inputs/module.map
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/module.map?rev=303246&r1=303245&r2=303246&view=diff
==============================================================================
--- cfe/trunk/test/Modules/Inputs/module.map (original)
+++ cfe/trunk/test/Modules/Inputs/module.map Wed May 17 06:08:36 2017
@@ -441,3 +441,7 @@ module DebugNestedB {
header "DebugNestedB.h"
export *
}
+
+module objcAtKeywordMissingEnd {
+ header "objcAtKeywordMissingEnd.h"
+}
Added: cfe/trunk/test/Modules/Inputs/objcAtKeywordMissingEnd.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/objcAtKeywordMissingEnd.h?rev=303246&view=auto
==============================================================================
--- cfe/trunk/test/Modules/Inputs/objcAtKeywordMissingEnd.h (added)
+++ cfe/trunk/test/Modules/Inputs/objcAtKeywordMissingEnd.h Wed May 17 06:08:36 2017
@@ -0,0 +1,3 @@
+ at interface MissingEnd // expected-note {{class started here}}
+
+@ // expected-error {{expected an Objective-C directive after '@'}} expected-error {{missing '@end'}}
Added: cfe/trunk/test/Modules/objc-at-keyword.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/objc-at-keyword.m?rev=303246&view=auto
==============================================================================
--- cfe/trunk/test/Modules/objc-at-keyword.m (added)
+++ cfe/trunk/test/Modules/objc-at-keyword.m Wed May 17 06:08:36 2017
@@ -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
+
+ at interface X // expected-note {{class started here}}
+#pragma clang module import Empty // expected-error {{missing '@end'}}
More information about the cfe-commits
mailing list