Index: lib/Index/CodegenNameGenerator.cpp =================================================================== --- lib/Index/CodegenNameGenerator.cpp +++ lib/Index/CodegenNameGenerator.cpp @@ -68,7 +68,31 @@ return Name; } + std::vector getAllManglings(const ObjCContainerDecl *OCD) { + StringRef ClassName; + if (const auto *OID = dyn_cast(OCD)) + ClassName = OID->getObjCRuntimeNameAsString(); + else if (const auto *OID = dyn_cast(OCD)) + ClassName = OID->getObjCRuntimeNameAsString(); + else + return {}; + + auto Mangle = [](Twine Symbol, const llvm::DataLayout &DL) -> StringRef { + SmallString<40> Mangled; + llvm::Mangler::getNameWithPrefix(Mangled, Symbol, DL); + return Mangled; + }; + + return { + Mangle("OBJC_CLASS_$_" + ClassName, DL), + Mangle("OBJC_METACLASS_$_" + ClassName, DL), + }; + } + std::vector getAllManglings(const Decl *D) { + if (const auto *OCD = dyn_cast(D)) + return getAllManglings(OCD); + if (!(isa(D) || isa(D))) return {};