From 7c09cc67aa6c05230c8faa97a656519018dd9db9 Mon Sep 17 00:00:00 2001 From: Hans Wennborg Date: Fri, 3 Jun 2016 16:59:13 +0000 Subject: [PATCH] Obj-C: Fix assert-on-invalid (PR27822) Clang would assert when isObjCInstancetype() was called on a tok::annot_cxxscope token. llvm-svn: 271688 --- clang/include/clang/Parse/Parser.h | 2 ++ clang/test/SemaObjCXX/instancetype.mm | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/clang/include/clang/Parse/Parser.h b/clang/include/clang/Parse/Parser.h index f46887980557..9cbad6b634da 100644 --- a/clang/include/clang/Parse/Parser.h +++ b/clang/include/clang/Parse/Parser.h @@ -647,6 +647,8 @@ private: /// Should only be used in Objective-C language modes. bool isObjCInstancetype() { assert(getLangOpts().ObjC1); + if (Tok.isAnnotation()) + return false; if (!Ident_instancetype) Ident_instancetype = PP.getIdentifierInfo("instancetype"); return Tok.getIdentifierInfo() == Ident_instancetype; diff --git a/clang/test/SemaObjCXX/instancetype.mm b/clang/test/SemaObjCXX/instancetype.mm index 89ff2b4b0326..f61d6bf4cfc8 100644 --- a/clang/test/SemaObjCXX/instancetype.mm +++ b/clang/test/SemaObjCXX/instancetype.mm @@ -214,3 +214,10 @@ void test_instancetype_inherited() { return 0; } @end + +// PR27822 +@class NSString; +namespace pr27822 { } +@interface AXPlatformNodeCocoa ++ (NSString*)nativeRoleFromAXRole:(pr27822::UndeclaredIdentifier)role; // expected-error {{expected a type}} +@end