diff options
-rw-r--r-- | clang/lib/ARCMigrate/ObjCMT.cpp | 12 | ||||
-rw-r--r-- | clang/test/ARCMT/objcmt-property.m | 4 | ||||
-rw-r--r-- | clang/test/ARCMT/objcmt-property.m.result | 4 |
3 files changed, 19 insertions, 1 deletions
diff --git a/clang/lib/ARCMigrate/ObjCMT.cpp b/clang/lib/ARCMigrate/ObjCMT.cpp index ca1d189ca33..71ad48f58bd 100644 --- a/clang/lib/ARCMigrate/ObjCMT.cpp +++ b/clang/lib/ARCMigrate/ObjCMT.cpp @@ -761,6 +761,16 @@ static bool AttributesMatch(const Decl *Decl1, const Decl *Decl2) { return true; } +static bool IsValidIdentifier(ASTContext &Ctx, + const char *Name) { + if (!isIdentifierHead(Name[0])) + return false; + std::string NameString = Name; + NameString[0] = toLowercase(NameString[0]); + IdentifierInfo *II = &Ctx.Idents.get(NameString); + return II->getTokenID() == tok::identifier; +} + bool ObjCMigrateASTConsumer::migrateProperty(ASTContext &Ctx, ObjCContainerDecl *D, ObjCMethodDecl *Method) { @@ -799,7 +809,7 @@ bool ObjCMigrateASTConsumer::migrateProperty(ASTContext &Ctx, const char *CGetterName = getterNameString.data() + LengthOfPrefix; // Make sure that first character after "is" or "get" prefix can // start an identifier. - if (!isIdentifierHead(CGetterName[0])) + if (!IsValidIdentifier(Ctx, CGetterName)) return false; if (CGetterName[0] && isUppercase(CGetterName[0])) { getterName = &Ctx.Idents.get(CGetterName); diff --git a/clang/test/ARCMT/objcmt-property.m b/clang/test/ARCMT/objcmt-property.m index e8f4acc8e63..3de23526095 100644 --- a/clang/test/ARCMT/objcmt-property.m +++ b/clang/test/ARCMT/objcmt-property.m @@ -210,4 +210,8 @@ DEPRECATED - (NSURL *)init; // No Change + (id)alloc; // No Change +- (BOOL)is1stClass; // Not a valid property +- (BOOL)isClass; // This is a valid property 'class' is not a keyword in ObjC +- (BOOL)isDouble; // Not a valid property + @end diff --git a/clang/test/ARCMT/objcmt-property.m.result b/clang/test/ARCMT/objcmt-property.m.result index 7c674447231..a27e02ac6e5 100644 --- a/clang/test/ARCMT/objcmt-property.m.result +++ b/clang/test/ARCMT/objcmt-property.m.result @@ -210,4 +210,8 @@ DEPRECATED - (NSURL *)init; // No Change + (id)alloc; // No Change +- (BOOL)is1stClass; // Not a valid property +@property (nonatomic, getter=isClass, readonly) BOOL class; // This is a valid property 'class' is not a keyword in ObjC +- (BOOL)isDouble; // Not a valid property + @end |