diff options
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/ARCMigrate/ObjCMT.cpp | 9 | ||||
-rw-r--r-- | clang/lib/Basic/IdentifierTable.cpp | 2 |
2 files changed, 6 insertions, 5 deletions
diff --git a/clang/lib/ARCMigrate/ObjCMT.cpp b/clang/lib/ARCMigrate/ObjCMT.cpp index 08444442c76..cffa625d3bd 100644 --- a/clang/lib/ARCMigrate/ObjCMT.cpp +++ b/clang/lib/ARCMigrate/ObjCMT.cpp @@ -657,11 +657,6 @@ static void ReplaceWithInstancetype(const ObjCMigrateASTConsumer &ASTC, void ObjCMigrateASTConsumer::migrateMethodInstanceType(ASTContext &Ctx, ObjCContainerDecl *CDecl, ObjCMethodDecl *OM) { - // bail out early and do not suggest 'instancetype' when the method already - // has a related result type, - if (OM->hasRelatedResultType()) - return; - ObjCInstanceTypeFamily OIT_Family = Selector::getInstTypeMethodFamily(OM->getSelector()); @@ -679,6 +674,10 @@ void ObjCMigrateASTConsumer::migrateMethodInstanceType(ASTContext &Ctx, case OIT_Singleton: migrateFactoryMethod(Ctx, CDecl, OM, OIT_Singleton); return; + case OIT_Init: + if (OM->getResultType()->isObjCIdType()) + ReplaceWithInstancetype(*this, OM); + return; } if (!OM->getResultType()->isObjCIdType()) return; diff --git a/clang/lib/Basic/IdentifierTable.cpp b/clang/lib/Basic/IdentifierTable.cpp index 5102f7cfd33..a3eafe2b59b 100644 --- a/clang/lib/Basic/IdentifierTable.cpp +++ b/clang/lib/Basic/IdentifierTable.cpp @@ -471,6 +471,8 @@ ObjCInstanceTypeFamily Selector::getInstTypeMethodFamily(Selector sel) { if (startsWithWord(name, "shared") || startsWithWord(name, "standard")) return OIT_Singleton; + case 'i': + if (startsWithWord(name, "init")) return OIT_Init; default: break; } |