diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2012-01-04 01:32:19 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2012-01-04 01:32:19 +0000 |
commit | 4cd55b04e37d2c2c078be8d55c767213af8cc4ef (patch) | |
tree | 90c28dabf5b4d5acd62facc77a4785260bdcef57 /lib/CodeGen | |
parent | 1c87980ef18dbf4669c7194d60138ff9747d7ab7 (diff) |
Revert r147493. It broke test/CodeGenObjC/constant-strings.m.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@147511 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r-- | lib/CodeGen/CGObjCGNU.cpp | 38 |
1 files changed, 6 insertions, 32 deletions
diff --git a/lib/CodeGen/CGObjCGNU.cpp b/lib/CodeGen/CGObjCGNU.cpp index 49323c58b1..3a591e88dd 100644 --- a/lib/CodeGen/CGObjCGNU.cpp +++ b/lib/CodeGen/CGObjCGNU.cpp @@ -970,27 +970,12 @@ llvm::Constant *CGObjCGNU::GenerateConstantString(const StringLiteral *SL) { if (old != ObjCStrings.end()) return old->getValue(); - StringRef StringClass = CGM.getLangOptions().ObjCConstantStringClass; - - if (StringClass.empty()) StringClass = "NXConstantString"; - - std::string Sym = "_OBJC_CLASS_"; - Sym += StringClass; - - llvm::Constant *isa = TheModule.getNamedGlobal(Sym); - - if (!isa) - isa = new llvm::GlobalVariable(TheModule, IdTy, /* isConstant */false, - llvm::GlobalValue::ExternalWeakLinkage, 0, Sym); - else if (isa->getType() != PtrToIdTy) - isa = llvm::ConstantExpr::getBitCast(isa, PtrToIdTy); - std::vector<llvm::Constant*> Ivars; - Ivars.push_back(isa); + Ivars.push_back(NULLPtr); Ivars.push_back(MakeConstantString(Str)); Ivars.push_back(llvm::ConstantInt::get(IntTy, Str.size())); llvm::Constant *ObjCStr = MakeGlobal( - llvm::StructType::get(PtrToIdTy, PtrToInt8Ty, IntTy, NULL), + llvm::StructType::get(PtrToInt8Ty, PtrToInt8Ty, IntTy, NULL), Ivars, ".objc_str"); ObjCStr = llvm::ConstantExpr::getBitCast(ObjCStr, PtrToInt8Ty); ObjCStrings[Str] = ObjCStr; @@ -1383,7 +1368,7 @@ llvm::Constant *CGObjCGNU::GenerateClassStructure( // anyway; the classes will still work with the GNU runtime, they will just // be ignored. llvm::StructType *ClassTy = llvm::StructType::get( - PtrToInt8Ty, // isa + PtrToInt8Ty, // class_pointer PtrToInt8Ty, // super_class PtrToInt8Ty, // name LongTy, // version @@ -1434,20 +1419,9 @@ llvm::Constant *CGObjCGNU::GenerateClassStructure( Elements.push_back(WeakIvarBitmap); // Create an instance of the structure // This is now an externally visible symbol, so that we can speed up class - // messages in the next ABI. We may already have some weak references to - // this, so check and fix them properly. - std::string ClassSym((isMeta ? "_OBJC_METACLASS_": "_OBJC_CLASS_") + - std::string(Name)); - llvm::GlobalVariable *ClassRef = TheModule.getNamedGlobal(ClassSym); - llvm::Constant *Class = MakeGlobal(ClassTy, Elements, ClassSym, - llvm::GlobalValue::ExternalLinkage); - if (ClassRef) { - ClassRef->replaceAllUsesWith(llvm::ConstantExpr::getBitCast(Class, - ClassRef->getType())); - ClassRef->removeFromParent(); - Class->setName(ClassSym); - } - return Class; + // messages in the next ABI. + return MakeGlobal(ClassTy, Elements, (isMeta ? "_OBJC_METACLASS_": + "_OBJC_CLASS_") + std::string(Name), llvm::GlobalValue::ExternalLinkage); } llvm::Constant *CGObjCGNU::GenerateProtocolMethodList( |