зеркало из https://github.com/microsoft/clang.git
Don't explicitly force utf strings into the __TEXT,__ustring
by setting the section of the generated global. This is an optimization done by the code generator, and the code being removed didn't handle the case when the string contained an embedded nul (which the code generator does correctly handle). This is rdar://7589850 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@95003 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
31310a21fb
Коммит
b9f709665a
|
@ -320,12 +320,6 @@ public:
|
|||
|
||||
virtual bool useGlobalsForAutomaticVariables() const { return false; }
|
||||
|
||||
/// getUnicodeStringSection - Return the section to use for unicode
|
||||
/// string literals, or 0 if no special section is used.
|
||||
virtual const char *getUnicodeStringSection() const {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// getCFStringSection - Return the section to use for CFString
|
||||
/// literals, or 0 if no special section is used.
|
||||
virtual const char *getCFStringSection() const {
|
||||
|
|
|
@ -153,10 +153,6 @@ public:
|
|||
this->TLSSupported = false;
|
||||
}
|
||||
|
||||
virtual const char *getUnicodeStringSection() const {
|
||||
return "__TEXT,__ustring";
|
||||
}
|
||||
|
||||
virtual std::string isValidSectionSpecifier(llvm::StringRef SR) const {
|
||||
// Let MCSectionMachO validate this.
|
||||
llvm::StringRef Segment, Section;
|
||||
|
|
|
@ -1480,11 +1480,9 @@ CodeGenModule::GetAddrOfConstantCFString(const StringLiteral *Literal) {
|
|||
// String pointer.
|
||||
llvm::Constant *C = llvm::ConstantArray::get(VMContext, Entry.getKey().str());
|
||||
|
||||
const char *Sect = 0;
|
||||
llvm::GlobalValue::LinkageTypes Linkage;
|
||||
bool isConstant;
|
||||
if (isUTF16) {
|
||||
Sect = getContext().Target.getUnicodeStringSection();
|
||||
// FIXME: why do utf strings get "_" labels instead of "L" labels?
|
||||
Linkage = llvm::GlobalValue::InternalLinkage;
|
||||
// Note: -fwritable-strings doesn't make unicode CFStrings writable, but
|
||||
|
@ -1498,8 +1496,6 @@ CodeGenModule::GetAddrOfConstantCFString(const StringLiteral *Literal) {
|
|||
llvm::GlobalVariable *GV =
|
||||
new llvm::GlobalVariable(getModule(), C->getType(), isConstant, Linkage, C,
|
||||
".str");
|
||||
if (Sect)
|
||||
GV->setSection(Sect);
|
||||
if (isUTF16) {
|
||||
CharUnits Align = getContext().getTypeAlignInChars(getContext().ShortTy);
|
||||
GV->setAlignment(Align.getQuantity());
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
// CHECK-LSB: @.str = private constant [8 x i8] c"string0\00"
|
||||
// CHECK-LSB: @.str1 = private constant [8 x i8] c"string1\00"
|
||||
// CHECK-LSB: @.str2 = internal constant [36 x i8] c"h\00e\00l\00l\00o\00 \00\92! \00\03& \00\90! \00w\00o\00r\00l\00d\00\00\00", section "__TEXT,__ustring", align 2
|
||||
// CHECK-LSB: @.str2 = internal constant [36 x i8] c"h\00e\00l\00l\00o\00 \00\92! \00\03& \00\90! \00w\00o\00r\00l\00d\00\00\00", align 2
|
||||
|
||||
// RUN: %clang_cc1 -triple powerpc-apple-darwin9 -emit-llvm %s -o - | FileCheck -check-prefix MSB %s
|
||||
|
||||
// CHECK-MSB: @.str = private constant [8 x i8] c"string0\00"
|
||||
// CHECK-MSB: @.str1 = private constant [8 x i8] c"string1\00"
|
||||
// CHECK-MSB: @.str2 = internal constant [36 x i8] c"\00h\00e\00l\00l\00o\00 !\92\00 &\03\00 !\90\00 \00w\00o\00r\00l\00d\00\00", section "__TEXT,__ustring", align 2
|
||||
// CHECK-MSB: @.str2 = internal constant [36 x i8] c"\00h\00e\00l\00l\00o\00 !\92\00 &\03\00 !\90\00 \00w\00o\00r\00l\00d\00\00", align 2
|
||||
|
||||
const char *g0 = "string0";
|
||||
const void *g1 = __builtin___CFStringMakeConstantString("string1");
|
||||
|
|
Загрузка…
Ссылка в новой задаче