]> granicus.if.org Git - clang/commitdiff
CodeGen: mark ObjC cstring literals as unnamed_addr
authorSaleem Abdulrasool <compnerd@compnerd.org>
Sun, 18 Sep 2016 16:12:14 +0000 (16:12 +0000)
committerSaleem Abdulrasool <compnerd@compnerd.org>
Sun, 18 Sep 2016 16:12:14 +0000 (16:12 +0000)
These are all emitted into a section with a cstring_literal attribute.  The
attribute permits the linker to coalesce the string contents.  The address of
the strings are not important.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@281855 91177308-0d34-0410-b5e6-96231b3b80d8

19 files changed:
lib/CodeGen/CGObjCMac.cpp
test/CodeGenObjC/boxing.m
test/CodeGenObjC/complex-property.m
test/CodeGenObjC/encode-cstyle-method.m
test/CodeGenObjC/encode-test-6.m
test/CodeGenObjC/encode-test.m
test/CodeGenObjC/fragile-arc.m
test/CodeGenObjC/ivar-layout-64.m
test/CodeGenObjC/metadata-symbols-32.m
test/CodeGenObjC/metadata-symbols-64.m
test/CodeGenObjC/nsvalue-objc-boxable-ios-arc.m
test/CodeGenObjC/nsvalue-objc-boxable-ios.m
test/CodeGenObjC/nsvalue-objc-boxable-mac-arc.m
test/CodeGenObjC/nsvalue-objc-boxable-mac.m
test/CodeGenObjC/objc-asm-attribute-test.m
test/CodeGenObjC/property-list-in-extension.m
test/CodeGenObjC/reorder-synthesized-ivars.m
test/CodeGenObjCXX/encode.mm
test/CodeGenObjCXX/lambda-expressions.mm

index e3320e9d9a8fefee193e754fab4960cb002b5145..1b435d33acc463145d86f0eed9e43fe989b15bd4 100644 (file)
@@ -3694,7 +3694,9 @@ CGObjCCommonMac::CreateCStringLiteral(StringRef Name, ObjCLabelType Type) {
       new llvm::GlobalVariable(CGM.getModule(), Value->getType(),
                                /*isConstant=*/true,
                                llvm::GlobalValue::PrivateLinkage, Value, Label);
-  GV->setSection(Section);
+  if (CGM.getTriple().isOSBinFormatMachO())
+    GV->setSection(Section);
+  GV->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global);
   GV->setAlignment(CharUnits::One().getQuantity());
   CGM.addCompilerUsedGlobal(GV);
 
index d1c7e3d57aa607a033789353c0782492b5090aa1..42dd33337f1e75d94dd86cfee57680eac8ce1194 100644 (file)
@@ -53,17 +53,17 @@ typedef signed char BOOL;
 + (id)stringWithUTF8String:(const char *)nullTerminatedCString;
 @end
 
-// CHECK: [[WithIntMeth:@.*]] = private constant [15 x i8] c"numberWithInt:\00"
+// CHECK: [[WithIntMeth:@.*]] = private unnamed_addr constant [15 x i8] c"numberWithInt:\00"
 // CHECK: [[WithIntSEL:@.*]] = private externally_initialized global i8* getelementptr inbounds ([15 x i8], [15 x i8]* [[WithIntMeth]]
-// CHECK: [[WithCharMeth:@.*]] = private constant [16 x i8] c"numberWithChar:\00"
+// CHECK: [[WithCharMeth:@.*]] = private unnamed_addr constant [16 x i8] c"numberWithChar:\00"
 // CHECK: [[WithCharSEL:@.*]] = private externally_initialized global i8* getelementptr inbounds ([16 x i8], [16 x i8]* [[WithCharMeth]]
-// CHECK: [[WithBoolMeth:@.*]] = private constant [16 x i8] c"numberWithBool:\00"
+// CHECK: [[WithBoolMeth:@.*]] = private unnamed_addr constant [16 x i8] c"numberWithBool:\00"
 // CHECK: [[WithBoolSEL:@.*]] = private externally_initialized global i8* getelementptr inbounds ([16 x i8], [16 x i8]* [[WithBoolMeth]]
-// CHECK: [[WithIntegerMeth:@.*]] = private constant [19 x i8] c"numberWithInteger:\00"
+// CHECK: [[WithIntegerMeth:@.*]] = private unnamed_addr constant [19 x i8] c"numberWithInteger:\00"
 // CHECK: [[WithIntegerSEL:@.*]] = private externally_initialized global i8* getelementptr inbounds ([19 x i8], [19 x i8]* [[WithIntegerMeth]]
-// CHECK: [[WithUnsignedIntegerMeth:@.*]] = private constant [27 x i8] c"numberWithUnsignedInteger:\00"
+// CHECK: [[WithUnsignedIntegerMeth:@.*]] = private unnamed_addr constant [27 x i8] c"numberWithUnsignedInteger:\00"
 // CHECK: [[WithUnsignedIntegerSEL:@.*]] = private externally_initialized global i8* getelementptr inbounds ([27 x i8], [27 x i8]* [[WithUnsignedIntegerMeth]]
-// CHECK: [[stringWithUTF8StringMeth:@.*]] = private constant [22 x i8] c"stringWithUTF8String:\00"
+// CHECK: [[stringWithUTF8StringMeth:@.*]] = private unnamed_addr constant [22 x i8] c"stringWithUTF8String:\00"
 // CHECK: [[stringWithUTF8StringSEL:@.*]] = private externally_initialized global i8* getelementptr inbounds ([22 x i8], [22 x i8]* [[stringWithUTF8StringMeth]]
 
 int main() {
index dd65ca78216c60e00cd06db51280a3156e86b589..a5572958a643ea1f16c7173328f7f72ddcb49187 100644 (file)
@@ -13,8 +13,8 @@ void f0(A *a) {
   a.y += a1;
 }
 
-// CHECK-LP64: private constant [13 x i8] c"COMPLEX_PROP
-// CHECK-LP64: private constant [17 x i8] c"setCOMPLEX_PROP
+// CHECK-LP64: private unnamed_addr constant [13 x i8] c"COMPLEX_PROP
+// CHECK-LP64: private unnamed_addr constant [17 x i8] c"setCOMPLEX_PROP
 
 // rdar: // 7351147
 @interface B
index 0fcbf6298e8f6c8e64ea31d53d43c5f5ec975cad..cb1e6773fd56c3b45c207effe99dacb84f210017 100644 (file)
@@ -8,4 +8,4 @@
 @implementation Foo
 - (id)test:(id )one, id two {return two; } @end
 
-// CHECK-LP64: private constant [11 x i8] c"@24@0:8@16
+// CHECK-LP64: private unnamed_addr constant [11 x i8] c"@24@0:8@16
index 7e820b402ebf5f62763e1d1c5c73bd36c985e505..bbd29cbdc943840c17fe1510b64cec7cae734da5 100644 (file)
@@ -14,8 +14,8 @@ typedef struct {} Z;
 -(void)foo:(Z)a: (char*)b : (Z)c : (double) d {}
 @end
 
-// CHECK: private constant [14 x i8] c"v16@0:8{?=}16
-// CHECK: private constant [26 x i8] c"v32@0:8{?=}16*16{?=}24d24
+// CHECK: private unnamed_addr constant [14 x i8] c"v16@0:8{?=}16
+// CHECK: private unnamed_addr constant [26 x i8] c"v32@0:8{?=}16*16{?=}24d24
 
 
 // rdar://13190095
@@ -34,7 +34,7 @@ typedef BABugExample BABugExampleRedefinition;
 @synthesize property = _property;
 @end
 
-// CHECK: private constant [24 x i8] c"^{BABugExample=@}16
+// CHECK: private unnamed_addr constant [24 x i8] c"^{BABugExample=@}16
 
 // rdar://14408244
 @class SCNCamera;
@@ -52,7 +52,7 @@ typedef struct
     C3DCameraStorage _storage;
 }
 @end
-// CHECK: private constant [39 x i8] c"{?=\22presentationInstance\22^{SCNCamera}}\00"
+// CHECK: private unnamed_addr constant [39 x i8] c"{?=\22presentationInstance\22^{SCNCamera}}\00"
 
 // rdar://16655340
 int i;
index c3ed6de4fd8e6d5f1e1315c203837924157bf340..f7d15a9eb7aa6845b3e5ea4070b67b3341a110e4 100644 (file)
@@ -1,7 +1,7 @@
 // RUN: %clang_cc1 -triple i686-apple-darwin9 -fobjc-runtime=macosx-fragile-10.5 -emit-llvm -o %t %s
 // RUN: FileCheck < %t %s
 //
-// CHECK: @OBJC_METH_VAR_TYPE_.34 = private constant [16 x i8] c"v12@0:4[3[4@]]8\00"
+// CHECK: @OBJC_METH_VAR_TYPE_.34 = private unnamed_addr constant [16 x i8] c"v12@0:4[3[4@]]8\00"
 
 @class Int1;
 
index e9a022ca57680ec88af7aee9d861dc169a6673a8..2bf813d4615b3aec84b61005f3dfb650fb1fd76b 100644 (file)
@@ -16,9 +16,9 @@
 
 // GLOBALS-LABEL @OBJC_METACLASS_A
 //  Strong layout: scan the first word.
-// GLOBALS: @OBJC_CLASS_NAME_{{.*}} = private constant [2 x i8] c"\01\00"
+// GLOBALS: @OBJC_CLASS_NAME_{{.*}} = private unnamed_addr constant [2 x i8] c"\01\00"
 //  Weak layout: skip the first word, scan the second word.
-// GLOBALS: @OBJC_CLASS_NAME_{{.*}} = private constant [2 x i8] c"\11\00"
+// GLOBALS: @OBJC_CLASS_NAME_{{.*}} = private unnamed_addr constant [2 x i8] c"\11\00"
 
 //  0x04002001
 //     ^ is compiled by ARC (controls interpretation of layouts)
 // GLOBALS-LABEL: @OBJC_METACLASS_C
 //  Strong layout: skip five, scan four, skip three, scan seven
 //    'T' == 0x54, '7' == 0x37
-// GLOBALS: @OBJC_CLASS_NAME_{{.*}} = private constant [3 x i8] c"T7\00"
+// GLOBALS: @OBJC_CLASS_NAME_{{.*}} = private unnamed_addr constant [3 x i8] c"T7\00"
 //  Weak layout: skip nine, scan three
-// GLOBALS: @OBJC_CLASS_NAME_{{.*}} = private constant [2 x i8] c"\93\00"
+// GLOBALS: @OBJC_CLASS_NAME_{{.*}} = private unnamed_addr constant [2 x i8] c"\93\00"
 
 extern void useBlock(void (^block)(void));
 
index 4952c3ab0c4082d93116a06970e0e33ed17b11cc..d3ffdfe444c8bc2fe67adc3a9e60ad78135e7999 100644 (file)
@@ -33,9 +33,9 @@ __weak B *f2;
 @property int p3;
 @end
 
-// CHECK: @OBJC_CLASS_NAME_{{.*}} = private constant {{.*}} c"C\00"
-// CHECK: @OBJC_CLASS_NAME_{{.*}} = private constant {{.*}} c"\11p\00"
-// CHECK: @OBJC_CLASS_NAME_{{.*}} = private constant {{.*}} c"!`\00"
+// CHECK: @OBJC_CLASS_NAME_{{.*}} = private unnamed_addr constant {{.*}} c"C\00"
+// CHECK: @OBJC_CLASS_NAME_{{.*}} = private unnamed_addr constant {{.*}} c"\11p\00"
+// CHECK: @OBJC_CLASS_NAME_{{.*}} = private unnamed_addr constant {{.*}} c"!`\00"
 
 
 @implementation C
@@ -48,9 +48,9 @@ __weak B *f2;
 @property (assign) __weak id p2;
 @end
 
-// CHECK: @OBJC_CLASS_NAME_{{.*}} = private constant {{.*}} c"A\00"
-// CHECK: @OBJC_CLASS_NAME_{{.*}} = private constant {{.*}} c"\11q\10\00"
-// CHECK: @OBJC_CLASS_NAME_{{.*}} = private constant {{.*}} c"!q\00"
+// CHECK: @OBJC_CLASS_NAME_{{.*}} = private unnamed_addr constant {{.*}} c"A\00"
+// CHECK: @OBJC_CLASS_NAME_{{.*}} = private unnamed_addr constant {{.*}} c"\11q\10\00"
+// CHECK: @OBJC_CLASS_NAME_{{.*}} = private unnamed_addr constant {{.*}} c"!q\00"
 
 @implementation A
 @synthesize p0 = _p0;
@@ -62,9 +62,9 @@ __weak B *f2;
 @property int p3;
 @end
 
-// CHECK: @OBJC_CLASS_NAME_{{.*}} = private constant {{.*}} c"D\00"
-// CHECK: @OBJC_CLASS_NAME_{{.*}} = private constant {{.*}} c"\11p\00"
-// CHECK: @OBJC_CLASS_NAME_{{.*}} = private constant {{.*}} c"!`\00"
+// CHECK: @OBJC_CLASS_NAME_{{.*}} = private unnamed_addr constant {{.*}} c"D\00"
+// CHECK: @OBJC_CLASS_NAME_{{.*}} = private unnamed_addr constant {{.*}} c"\11p\00"
+// CHECK: @OBJC_CLASS_NAME_{{.*}} = private unnamed_addr constant {{.*}} c"!`\00"
 
 @implementation D
 @synthesize p3 = _p3;
@@ -89,8 +89,8 @@ typedef unsigned int FSCatalogInfoBitmap;
 }
 @end
 
-// CHECK: @OBJC_CLASS_NAME_{{.*}} = private constant {{.*}} c"NSFileLocationComponent\00"
-// CHECK: @OBJC_CLASS_NAME_{{.*}} = private constant {{.*}} c"\01\14\00"
+// CHECK: @OBJC_CLASS_NAME_{{.*}} = private unnamed_addr constant {{.*}} c"NSFileLocationComponent\00"
+// CHECK: @OBJC_CLASS_NAME_{{.*}} = private unnamed_addr constant {{.*}} c"\01\14\00"
 
 @implementation NSFileLocationComponent @end
 
@@ -108,8 +108,8 @@ typedef unsigned int FSCatalogInfoBitmap;
 }
 @end
 
-// CHECK: @OBJC_CLASS_NAME_{{.*}} = private constant {{.*}} c"Foo\00"
-// CHECK: @OBJC_CLASS_NAME_{{.*}} = private constant {{.*}} c"\02\10\00"
+// CHECK: @OBJC_CLASS_NAME_{{.*}} = private unnamed_addr constant {{.*}} c"Foo\00"
+// CHECK: @OBJC_CLASS_NAME_{{.*}} = private unnamed_addr constant {{.*}} c"\02\10\00"
 
 @implementation Foo @end
 
@@ -124,8 +124,8 @@ struct __attribute__((packed)) PackedStruct {
 }
 @end
 @implementation Packed @end
-// CHECK: @OBJC_CLASS_NAME_{{.*}} = private constant {{.*}} c"Packed\00"
-// CHECK: @OBJC_CLASS_NAME_{{.*}} = private constant {{.*}} c"\01 \00"
+// CHECK: @OBJC_CLASS_NAME_{{.*}} = private unnamed_addr constant {{.*}} c"Packed\00"
+// CHECK: @OBJC_CLASS_NAME_{{.*}} = private unnamed_addr constant {{.*}} c"\01 \00"
 //  ' ' == 0x20
 
 // Ensure that layout descends into anonymous unions and structs.
@@ -142,8 +142,8 @@ struct __attribute__((packed)) PackedStruct {
 }
 @end
 @implementation AnonymousUnion @end
-// CHECK: @OBJC_CLASS_NAME_{{.*}} = private constant {{.*}} c"AnonymousUnion\00"
-// CHECK: @OBJC_CLASS_NAME_{{.*}} = private constant {{.*}} c"\02\00"
+// CHECK: @OBJC_CLASS_NAME_{{.*}} = private unnamed_addr constant {{.*}} c"AnonymousUnion\00"
+// CHECK: @OBJC_CLASS_NAME_{{.*}} = private unnamed_addr constant {{.*}} c"\02\00"
 
 @interface AnonymousStruct : NSObject {
   struct {
@@ -155,7 +155,7 @@ struct __attribute__((packed)) PackedStruct {
 }
 @end
 @implementation AnonymousStruct @end
-// CHECK: @OBJC_CLASS_NAME_{{.*}} = private constant {{.*}} c"AnonymousStruct\00"
-// CHECK: @OBJC_CLASS_NAME_{{.*}} = private constant {{.*}} c"\02\10\00"
-// CHECK: @OBJC_CLASS_NAME_{{.*}} = private constant {{.*}} c"!\00"
+// CHECK: @OBJC_CLASS_NAME_{{.*}} = private unnamed_addr constant {{.*}} c"AnonymousStruct\00"
+// CHECK: @OBJC_CLASS_NAME_{{.*}} = private unnamed_addr constant {{.*}} c"\02\10\00"
+// CHECK: @OBJC_CLASS_NAME_{{.*}} = private unnamed_addr constant {{.*}} c"!\00"
 //  '!' == 0x21
index 3951c29d20b61323b27b71a302cbe276f0369fbf..0dea5419977ec045e1e86eb3895461f33b07625e 100644 (file)
@@ -2,11 +2,11 @@
 
 // CHECK: .lazy_reference .objc_class_name_J0
 
-// CHECK: @OBJC_METH_VAR_NAME_{{[0-9]*}} = private constant {{.*}}section "__TEXT,__cstring,cstring_literals", align 1
-// CHECK: @OBJC_METH_VAR_TYPE_{{[0-9]*}} = private constant {{.*}}section "__TEXT,__cstring,cstring_literals", align 1
+// CHECK: @OBJC_METH_VAR_NAME_{{[0-9]*}} = private unnamed_addr constant {{.*}}section "__TEXT,__cstring,cstring_literals", align 1
+// CHECK: @OBJC_METH_VAR_TYPE_{{[0-9]*}} = private unnamed_addr constant {{.*}}section "__TEXT,__cstring,cstring_literals", align 1
 // CHECK: @"\01l_OBJC_PROTOCOLEXT_P" = private global
 // CHECK-NOT: section
-// CHECK: @OBJC_CLASS_NAME_{{[0-9]*}} = private constant {{.*}}section "__TEXT,__cstring,cstring_literals", align 1
+// CHECK: @OBJC_CLASS_NAME_{{[0-9]*}} = private unnamed_addr constant {{.*}}section "__TEXT,__cstring,cstring_literals", align 1
 // CHECK: @OBJC_PROTOCOL_INSTANCE_METHODS_P = private global {{.*}}section "__OBJC,__cat_inst_meth,regular,no_dead_strip", align 4
 // CHECK: @OBJC_PROTOCOL_CLASS_METHODS_P = private global {{.*}}section "__OBJC,__cat_cls_meth,regular,no_dead_strip", align 4
 // CHECK: @OBJC_PROTOCOL_P = private global {{.*}}section "__OBJC,__protocol,regular,no_dead_strip", align 4
@@ -15,7 +15,7 @@
 // CHECK: @OBJC_METACLASS_A = private global {{.*}}section "__OBJC,__meta_class,regular,no_dead_strip", align 4
 // CHECK: @OBJC_INSTANCE_VARIABLES_A = private global {{.*}}section "__OBJC,__instance_vars,regular,no_dead_strip", align 4
 // CHECK: @OBJC_INSTANCE_METHODS_A = private global {{.*}}section "__OBJC,__inst_meth,regular,no_dead_strip", align 4
-// CHECK: @OBJC_PROP_NAME_ATTR_{{[0-9]*}} = private constant {{.*}}section "__TEXT,__cstring,cstring_literals", align 1
+// CHECK: @OBJC_PROP_NAME_ATTR_{{[0-9]*}} = private unnamed_addr constant {{.*}}section "__TEXT,__cstring,cstring_literals", align 1
 // CHECK: @"\01l_OBJC_$_PROP_LIST_A" = private global {{.*}}section "__OBJC,__property,regular,no_dead_strip", align 4
 // CHECK: @OBJC_CLASSEXT_A = private global {{.*}}section "__OBJC,__class_ext,regular,no_dead_strip", align 4
 // CHECK: @OBJC_CLASS_A = private global {{.*}}section "__OBJC,__class,regular,no_dead_strip", align 4
index a60dc389bd3b0706355d1b4c4a56658d2cac0300..5139cd8fdedf69d23162e7ac8c91581da167c858 100644 (file)
@@ -5,9 +5,9 @@
 // CHECK: @_objc_empty_vtable = external global
 // CHECK: @"OBJC_CLASS_$_A" = global
 // CHECK: @"OBJC_METACLASS_$_A" = global {{.*}} section "__DATA, __objc_data", align 8
-// CHECK: @OBJC_CLASS_NAME_{{[0-9]*}} = private constant {{.*}} section "__TEXT,__objc_classname,cstring_literals", align 1
-// CHECK: @OBJC_METH_VAR_NAME_{{[0-9]*}} = private constant {{.*}} section "__TEXT,__objc_methname,cstring_literals", align 1
-// CHECK: @OBJC_METH_VAR_TYPE_{{[0-9]*}} = private constant {{.*}} section "__TEXT,__objc_methtype,cstring_literals", align 1
+// CHECK: @OBJC_CLASS_NAME_{{[0-9]*}} = private unnamed_addr constant {{.*}} section "__TEXT,__objc_classname,cstring_literals", align 1
+// CHECK: @OBJC_METH_VAR_NAME_{{[0-9]*}} = private unnamed_addr constant {{.*}} section "__TEXT,__objc_methname,cstring_literals", align 1
+// CHECK: @OBJC_METH_VAR_TYPE_{{[0-9]*}} = private unnamed_addr constant {{.*}} section "__TEXT,__objc_methtype,cstring_literals", align 1
 // CHECK: @"\01l_OBJC_$_CLASS_METHODS_A" = private global {{.*}} section "__DATA, __objc_const", align 8
 // CHECK: @"\01l_OBJC_$_PROTOCOL_INSTANCE_METHODS_P" = private global {{.*}} section "__DATA, __objc_const", align 8
 // CHECK: @"\01l_OBJC_$_PROTOCOL_CLASS_METHODS_P" = private global {{.*}} section "__DATA, __objc_const", align 8
@@ -17,7 +17,7 @@
 // CHECK: @"\01l_OBJC_METACLASS_RO_$_A" = private global {{.*}} section "__DATA, __objc_const", align 8
 // CHECK: @"\01l_OBJC_$_INSTANCE_METHODS_A" = private global {{.*}} section "__DATA, __objc_const", align 8
 // CHECK: @"\01l_OBJC_$_INSTANCE_VARIABLES_A" = private global {{.*}} section "__DATA, __objc_const", align 8
-// CHECK: @OBJC_PROP_NAME_ATTR_{{[0-9]*}} = private constant {{.*}} section "__TEXT,__cstring,cstring_literals", align 1
+// CHECK: @OBJC_PROP_NAME_ATTR_{{[0-9]*}} = private unnamed_addr constant {{.*}} section "__TEXT,__cstring,cstring_literals", align 1
 // CHECK: @"\01l_OBJC_$_PROP_LIST_A" = private global {{.*}} section "__DATA, __objc_const", align 8
 // CHECK: @"\01l_OBJC_CLASS_RO_$_A" = private global {{.*}} section "__DATA, __objc_const", align 8
 // CHECK: @"\01l_OBJC_$_CATEGORY_INSTANCE_METHODS_A_$_Cat" = private global {{.*}} section "__DATA, __objc_const", align 8
index f0f757b89ef4922362027f7643af32273dcdd637..51e7bd68fe1e298ddd8c7906227eb3d7257d4ca8 100644 (file)
@@ -5,7 +5,7 @@
 // CHECK:      [[CLASS:@.*]]        = external global %struct._class_t
 // CHECK:      [[NSVALUE:@.*]]      = {{.*}}[[CLASS]]{{.*}}
 // CHECK:      [[RANGE_STR:.*]]     = {{.*}}_NSRange=II{{.*}}
-// CHECK:      [[METH:@.*]]         = private constant {{.*}}valueWithBytes:objCType:{{.*}}
+// CHECK:      [[METH:@.*]]         = private unnamed_addr constant {{.*}}valueWithBytes:objCType:{{.*}}
 // CHECK:      [[VALUE_SEL:@.*]]    = {{.*}}[[METH]]{{.*}}
 // CHECK:      [[POINT_STR:.*]]     = {{.*}}CGPoint=dd{{.*}}
 // CHECK:      [[SIZE_STR:.*]]      = {{.*}}CGSize=dd{{.*}}
index b4f69b59307caba4540073d0c65cf4acd37b842d..583f409cd32e7c898101227c891e9879ebf86420 100644 (file)
@@ -5,7 +5,7 @@
 // CHECK:      [[CLASS:@.*]]        = external global %struct._class_t
 // CHECK:      [[NSVALUE:@.*]]      = {{.*}}[[CLASS]]{{.*}}
 // CHECK:      [[RANGE_STR:.*]]     = {{.*}}_NSRange=II{{.*}}
-// CHECK:      [[METH:@.*]]         = private constant {{.*}}valueWithBytes:objCType:{{.*}}
+// CHECK:      [[METH:@.*]]         = private unnamed_addr constant {{.*}}valueWithBytes:objCType:{{.*}}
 // CHECK:      [[VALUE_SEL:@.*]]    = {{.*}}[[METH]]{{.*}}
 // CHECK:      [[POINT_STR:.*]]     = {{.*}}CGPoint=dd{{.*}}
 // CHECK:      [[SIZE_STR:.*]]      = {{.*}}CGSize=dd{{.*}}
index 4c1f53f31666d9bfacfc9792a9d3a127dffe4fc1..7a37535a7ede3d89e1c7b0ba4a30c43e2936aa9c 100644 (file)
@@ -5,7 +5,7 @@
 // CHECK:      [[CLASS:@.*]]        = external global %struct._class_t
 // CHECK:      [[NSVALUE:@.*]]      = {{.*}}[[CLASS]]{{.*}}
 // CHECK:      [[RANGE_STR:.*]]     = {{.*}}_NSRange=QQ{{.*}}
-// CHECK:      [[METH:@.*]]         = private constant {{.*}}valueWithBytes:objCType:{{.*}}
+// CHECK:      [[METH:@.*]]         = private unnamed_addr constant {{.*}}valueWithBytes:objCType:{{.*}}
 // CHECK:      [[VALUE_SEL:@.*]]    = {{.*}}[[METH]]{{.*}}
 // CHECK:      [[POINT_STR:.*]]     = {{.*}}_NSPoint=dd{{.*}}
 // CHECK:      [[SIZE_STR:.*]]      = {{.*}}_NSSize=dd{{.*}}
index 0f7c37db18c0404e5de9ec05c79f8d3f9d59cee1..749dc0ec267448ca29332b2fff69a5bf837681d2 100644 (file)
@@ -5,7 +5,7 @@
 // CHECK:      [[CLASS:@.*]]        = external global %struct._class_t
 // CHECK:      [[NSVALUE:@.*]]      = {{.*}}[[CLASS]]{{.*}}
 // CHECK:      [[RANGE_STR:.*]]     = {{.*}}_NSRange=QQ{{.*}}
-// CHECK:      [[METH:@.*]]         = private constant {{.*}}valueWithBytes:objCType:{{.*}}
+// CHECK:      [[METH:@.*]]         = private unnamed_addr constant {{.*}}valueWithBytes:objCType:{{.*}}
 // CHECK:      [[VALUE_SEL:@.*]]    = {{.*}}[[METH]]{{.*}}
 // CHECK:      [[POINT_STR:.*]]     = {{.*}}_NSPoint=dd{{.*}}
 // CHECK:      [[SIZE_STR:.*]]      = {{.*}}_NSSize=dd{{.*}}
index a427e57c65ed36d1f30f6026b9d19280ad433d0f..c988eae654e6bf0e46cdc70f065113db6197732a 100644 (file)
@@ -59,9 +59,9 @@ id Test16877359() {
 // CHECK: @"OBJC_CLASS_$_MySecretNamespace.Message" = global %struct._class_t
 // CHECK: @"OBJC_METACLASS_$_MySecretNamespace.Message" = global %struct._class_t
 
-// CHECK: private constant [42 x i8] c"T@\22MySecretNamespace.Message\22,&,V_msgProp\00"
-// CHECK: private constant [76 x i8] c"T@\22MySecretNamespace.Message<MySecretNamespace.Protocol3>\22,&,V_msgProtoProp\00"
-// CHECK: private constant [50 x i8] c"T@\22<MySecretNamespace.Protocol3>\22,&,V_idProtoProp\00"
+// CHECK: private unnamed_addr constant [42 x i8] c"T@\22MySecretNamespace.Message\22,&,V_msgProp\00"
+// CHECK: private unnamed_addr constant [76 x i8] c"T@\22MySecretNamespace.Message<MySecretNamespace.Protocol3>\22,&,V_msgProtoProp\00"
+// CHECK: private unnamed_addr constant [50 x i8] c"T@\22<MySecretNamespace.Protocol3>\22,&,V_idProtoProp\00"
 
 // CHECK: @"OBJC_CLASS_$_foo" = external global %struct._class_t
 // CHECK: define internal i8* @"\01-[Message MyMethod]"
index fbdb78673dd87dcde431dd6ae17b0bd62dd45ccf..0c930c22820a217f136c25bf1b76954a0fb729b3 100644 (file)
@@ -17,7 +17,7 @@ __attribute__((objc_root_class))
 @end
 // Metadata for _myprop should be present, and PROP_LIST for Foo should have
 // only one entry.
-// CHECK: = private constant [12 x i8] c"Ti,V_myprop\00",
+// CHECK: = private unnamed_addr constant [12 x i8] c"Ti,V_myprop\00",
 // CHECK: @"\01l_OBJC_$_PROP_LIST_Foo" = private global { i32, i32, [1 x %struct._prop_t] }
 
 // Readonly property in interface made readwrite in a category:
@@ -40,8 +40,8 @@ __attribute__((objc_root_class))
 // Metadata for _evolvingprop should be present, and PROP_LIST for FooRO should
 // still have only one entry, and the one entry should point to the version of
 // the property with a getter and setter.
-// CHECK: [[evolvinggetter:@OBJC_PROP_NAME_ATTR[^ ]+]] = private constant [13 x i8] c"evolvingprop\00"
-// CHECK: [[evolvingsetter:@OBJC_PROP_NAME_ATTR[^ ]+]] = private constant [18 x i8] c"Ti,V_evolvingprop\00",
-// CHECK: [[booleanmetadata:@OBJC_PROP_NAME_ATTR[^ ]+]] = private constant [34 x i8] c"Ti,N,GisBooleanProp,V_booleanProp\00"
-// CHECK: [[weakmetadata:@OBJC_PROP_NAME_ATTR[^ ]+]] = private constant [23 x i8] c"T@\22Foo\22,W,N,V_weakProp\00"
+// CHECK: [[evolvinggetter:@OBJC_PROP_NAME_ATTR[^ ]+]] = private unnamed_addr constant [13 x i8] c"evolvingprop\00"
+// CHECK: [[evolvingsetter:@OBJC_PROP_NAME_ATTR[^ ]+]] = private unnamed_addr constant [18 x i8] c"Ti,V_evolvingprop\00",
+// CHECK: [[booleanmetadata:@OBJC_PROP_NAME_ATTR[^ ]+]] = private unnamed_addr constant [34 x i8] c"Ti,N,GisBooleanProp,V_booleanProp\00"
+// CHECK: [[weakmetadata:@OBJC_PROP_NAME_ATTR[^ ]+]] = private unnamed_addr constant [23 x i8] c"T@\22Foo\22,W,N,V_weakProp\00"
 // CHECK: @"\01l_OBJC_$_PROP_LIST_FooRO" = private global { i32, i32, [3 x %struct._prop_t] }{{.*}}[[evolvinggetter]]{{.*}}[[evolvingsetter]]{{.*}}[[booleanmetadata]]
index 84f65ea042da43ea604c0c395e631d33e955fb91..ef1bb79bcccb57d80d3b8de922c55e1a6281b369 100644 (file)
@@ -38,21 +38,21 @@ typedef signed char BOOL;
 }
 @end
 
-// CHECK: @{{.*}} = private constant [10 x i8] c"_boolean1
-// CHECK-NEXT: @{{.*}} = private constant [10 x i8] c"_boolean2
-// CHECK-NEXT: @{{.*}} = private constant [10 x i8] c"_boolean3
-// CHECK-NEXT: @{{.*}} = private constant [10 x i8] c"_boolean4
-// CHECK-NEXT: @{{.*}} = private constant [10 x i8] c"_boolean5
-// CHECK-NEXT: @{{.*}} = private constant [10 x i8] c"_boolean6
-// CHECK-NEXT: @{{.*}} = private constant [10 x i8] c"_boolean7
-// CHECK-NEXT: @{{.*}} = private constant [10 x i8] c"_boolean8
-// CHECK-NEXT: @{{.*}} = private constant [10 x i8] c"_boolean9
-// CHECK-NEXT: @{{.*}} = private constant [9 x i8] c"_object1
-// CHECK-NEXT: @{{.*}} = private constant [9 x i8] c"_object2
-// CHECK-NEXT: @{{.*}} = private constant [9 x i8] c"_object3
-// CHECK-NEXT: @{{.*}} = private constant [9 x i8] c"_object4
-// CHECK-NEXT: @{{.*}} = private constant [9 x i8] c"_object5
-// CHECK-NEXT: @{{.*}} = private constant [9 x i8] c"_object6
-// CHECK-NEXT: @{{.*}} = private constant [9 x i8] c"_object7
-// CHECK-NEXT: @{{.*}} = private constant [9 x i8] c"_object8
-// CHECK-NEXT: @{{.*}} = private constant [9 x i8] c"_object9
+// CHECK: @{{.*}} = private unnamed_addr constant [10 x i8] c"_boolean1
+// CHECK-NEXT: @{{.*}} = private unnamed_addr constant [10 x i8] c"_boolean2
+// CHECK-NEXT: @{{.*}} = private unnamed_addr constant [10 x i8] c"_boolean3
+// CHECK-NEXT: @{{.*}} = private unnamed_addr constant [10 x i8] c"_boolean4
+// CHECK-NEXT: @{{.*}} = private unnamed_addr constant [10 x i8] c"_boolean5
+// CHECK-NEXT: @{{.*}} = private unnamed_addr constant [10 x i8] c"_boolean6
+// CHECK-NEXT: @{{.*}} = private unnamed_addr constant [10 x i8] c"_boolean7
+// CHECK-NEXT: @{{.*}} = private unnamed_addr constant [10 x i8] c"_boolean8
+// CHECK-NEXT: @{{.*}} = private unnamed_addr constant [10 x i8] c"_boolean9
+// CHECK-NEXT: @{{.*}} = private unnamed_addr constant [9 x i8] c"_object1
+// CHECK-NEXT: @{{.*}} = private unnamed_addr constant [9 x i8] c"_object2
+// CHECK-NEXT: @{{.*}} = private unnamed_addr constant [9 x i8] c"_object3
+// CHECK-NEXT: @{{.*}} = private unnamed_addr constant [9 x i8] c"_object4
+// CHECK-NEXT: @{{.*}} = private unnamed_addr constant [9 x i8] c"_object5
+// CHECK-NEXT: @{{.*}} = private unnamed_addr constant [9 x i8] c"_object6
+// CHECK-NEXT: @{{.*}} = private unnamed_addr constant [9 x i8] c"_object7
+// CHECK-NEXT: @{{.*}} = private unnamed_addr constant [9 x i8] c"_object8
+// CHECK-NEXT: @{{.*}} = private unnamed_addr constant [9 x i8] c"_object9
index 26d682d39cdbc57d1f3e6873c31ca14344b7c5a7..5bb4a1ecfa9b27417a580bfa0e0ce09684f7691c 100644 (file)
@@ -213,7 +213,7 @@ public:
   dynamic_class dynamic_class_ivar;
 }
 @end
-// CHECK: private constant [41 x i8] c"{dynamic_class=\22_vptr$dynamic_class\22^^?}\00"
+// CHECK: private unnamed_addr constant [41 x i8] c"{dynamic_class=\22_vptr$dynamic_class\22^^?}\00"
 
 namespace PR17142 {
   struct A { virtual ~A(); };
index 31e84737226f5c48f6573b12358871a353b2b024..35c747c71dd7b25fd6054185f31f06dd766a6d7b 100644 (file)
@@ -6,8 +6,8 @@ fp f() { auto x = []{ return 3; }; return x; }
 
 // ARC: %[[LAMBDACLASS:.*]] = type { i32 }
 
-// MRC: @OBJC_METH_VAR_NAME{{.*}} = private constant [5 x i8] c"copy\00"
-// MRC: @OBJC_METH_VAR_NAME{{.*}} = private constant [12 x i8] c"autorelease\00"
+// MRC: @OBJC_METH_VAR_NAME{{.*}} = private unnamed_addr constant [5 x i8] c"copy\00"
+// MRC: @OBJC_METH_VAR_NAME{{.*}} = private unnamed_addr constant [12 x i8] c"autorelease\00"
 // MRC-LABEL: define i32 ()* @_Z1fv(
 // MRC-LABEL: define internal i32 ()* @"_ZZ1fvENK3$_0cvU13block_pointerFivEEv"
 // MRC: store i8* bitcast (i8** @_NSConcreteStackBlock to i8*)