More -fno-constant-cfstrings API work.

llvm-svn: 102219
This commit is contained in:
Fariborz Jahanian
2010-04-23 22:33:39 +00:00
parent 9759793855
commit d3fa70181d
2 changed files with 15 additions and 4 deletions

View File

@@ -1610,12 +1610,14 @@ CodeGenModule::GetAddrOfConstantNSString(const StringLiteral *Literal) {
llvm::Constant::getNullValue(llvm::Type::getInt32Ty(VMContext));
llvm::Constant *Zeros[] = { Zero, Zero };
// If we don't already have it, get __NSConstantStringClassReference.
// If we don't already have it, get _NSConstantStringClassReference.
if (!NSConstantStringClassRef) {
const llvm::Type *Ty = getTypes().ConvertType(getContext().IntTy);
Ty = llvm::ArrayType::get(Ty, 0);
llvm::Constant *GV = CreateRuntimeVariable(Ty,
"__NSConstantStringClassReference");
llvm::Constant *GV = CreateRuntimeVariable(Ty,
Features.ObjCNonFragileABI ?
"OBJC_CLASS_$_NSConstantString" :
"_NSConstantStringClassReference");
// Decay array -> ptr
NSConstantStringClassRef =
llvm::ConstantExpr::getGetElementPtr(GV, Zeros, 2);
@@ -1666,7 +1668,10 @@ CodeGenModule::GetAddrOfConstantNSString(const StringLiteral *Literal) {
llvm::GlobalVariable::PrivateLinkage, C,
"_unnamed_nsstring_");
// FIXME. Fix section.
if (const char *Sect = getContext().Target.getNSStringSection())
if (const char *Sect =
Features.ObjCNonFragileABI
? getContext().Target.getNSStringNonFragileABISection()
: getContext().Target.getNSStringSection())
GV->setSection(Sect);
Entry.setValue(GV);