Skip to content

Commit 4a60357

Browse files
authored
[CIR][CodeGen] Fix the default linkage of string literals (#1067)
In OG CodeGen, string literals has `private` linkage as default (marked by `cir_private` in CIR assembly). But CIR uses `internal`, which is probably an ancient typo. This PR keeps align with it and thus modifies the existing test files.
1 parent 925cf47 commit 4a60357

File tree

6 files changed

+13
-13
lines changed

6 files changed

+13
-13
lines changed

clang/lib/CIR/CodeGen/CIRGenModule.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1551,7 +1551,7 @@ CIRGenModule::getAddrOfConstantStringFromLiteral(const StringLiteral *S,
15511551
!getLangOpts().WritableStrings) {
15521552
assert(0 && "not implemented");
15531553
} else {
1554-
LT = mlir::cir::GlobalLinkageKind::InternalLinkage;
1554+
LT = mlir::cir::GlobalLinkageKind::PrivateLinkage;
15551555
GlobalVariableName = Name;
15561556
}
15571557

clang/test/CIR/CodeGen/array.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ void local_stringlit() {
4040
const char *s = "whatnow";
4141
}
4242

43-
// CHECK: cir.global "private" constant internal dsolocal @".str" = #cir.const_array<"whatnow\00" : !cir.array<!s8i x 8>> : !cir.array<!s8i x 8> {alignment = 1 : i64}
43+
// CHECK: cir.global "private" constant cir_private dsolocal @".str" = #cir.const_array<"whatnow\00" : !cir.array<!s8i x 8>> : !cir.array<!s8i x 8> {alignment = 1 : i64}
4444
// CHECK: cir.func @_Z15local_stringlitv()
4545
// CHECK-NEXT: %0 = cir.alloca !cir.ptr<!s8i>, !cir.ptr<!cir.ptr<!s8i>>, ["s", init] {alignment = 8 : i64}
4646
// CHECK-NEXT: %1 = cir.get_global @".str" : !cir.ptr<!cir.array<!s8i x 8>>

clang/test/CIR/CodeGen/globals.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,10 @@ int use_func() { return func<int>(); }
4949
// CHECK-NEXT: cir.global external @rgb = #cir.const_array<[#cir.int<0> : !u8i, #cir.int<233> : !u8i, #cir.int<33> : !u8i]> : !cir.array<!u8i x 3>
5050
// CHECK-NEXT: cir.global external @alpha = #cir.const_array<"abc\00" : !cir.array<!s8i x 4>> : !cir.array<!s8i x 4>
5151

52-
// CHECK-NEXT: cir.global "private" constant internal dsolocal @".str" = #cir.const_array<"example\00" : !cir.array<!s8i x 8>> : !cir.array<!s8i x 8> {alignment = 1 : i64}
52+
// CHECK-NEXT: cir.global "private" constant cir_private dsolocal @".str" = #cir.const_array<"example\00" : !cir.array<!s8i x 8>> : !cir.array<!s8i x 8> {alignment = 1 : i64}
5353
// CHECK-NEXT: cir.global external @s = #cir.global_view<@".str"> : !cir.ptr<!s8i>
5454

55-
// CHECK-NEXT: cir.global "private" constant internal dsolocal @".str1" = #cir.const_array<"example1\00" : !cir.array<!s8i x 9>> : !cir.array<!s8i x 9> {alignment = 1 : i64}
55+
// CHECK-NEXT: cir.global "private" constant cir_private dsolocal @".str1" = #cir.const_array<"example1\00" : !cir.array<!s8i x 9>> : !cir.array<!s8i x 9> {alignment = 1 : i64}
5656
// CHECK-NEXT: cir.global external @s1 = #cir.global_view<@".str1"> : !cir.ptr<!s8i>
5757

5858
// CHECK-NEXT: cir.global external @s2 = #cir.global_view<@".str"> : !cir.ptr<!s8i>

clang/test/CIR/CodeGen/hello.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ int main (void) {
88
}
99

1010
// CHECK: cir.func private @printf(!cir.ptr<!s8i>, ...) -> !s32i
11-
// CHECK: cir.global "private" constant internal dsolocal @".str" = #cir.const_array<"Hello, world!\0A\00" : !cir.array<!s8i x 15>> : !cir.array<!s8i x 15> {alignment = 1 : i64}
11+
// CHECK: cir.global "private" constant cir_private dsolocal @".str" = #cir.const_array<"Hello, world!\0A\00" : !cir.array<!s8i x 15>> : !cir.array<!s8i x 15> {alignment = 1 : i64}
1212
// CHECK: cir.func @main() -> !s32i
1313
// CHECK: %0 = cir.alloca !s32i, !cir.ptr<!s32i>, ["__retval"] {alignment = 4 : i64}
1414
// CHECK: %1 = cir.get_global @printf : !cir.ptr<!cir.func<!s32i (!cir.ptr<!s8i>, ...)>>

clang/test/CIR/CodeGen/initlist-ptr-ptr.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ void test() {
2121
// CIR: cir.store %arg0, [[LOCAL]] : [[INITLIST_TYPE]], !cir.ptr<[[INITLIST_TYPE]]>
2222
// CIR: cir.return
2323

24-
// CIR: cir.global "private" constant internal dsolocal [[STR_XY:@.*]] = #cir.const_array<"xy\00" : !cir.array<!s8i x 3>> : !cir.array<!s8i x 3>
25-
// CIR: cir.global "private" constant internal dsolocal [[STR_UV:@.*]] = #cir.const_array<"uv\00" : !cir.array<!s8i x 3>> : !cir.array<!s8i x 3>
24+
// CIR: cir.global "private" constant cir_private dsolocal [[STR_XY:@.*]] = #cir.const_array<"xy\00" : !cir.array<!s8i x 3>> : !cir.array<!s8i x 3>
25+
// CIR: cir.global "private" constant cir_private dsolocal [[STR_UV:@.*]] = #cir.const_array<"uv\00" : !cir.array<!s8i x 3>> : !cir.array<!s8i x 3>
2626

2727
// CIR: cir.func @_ZSt4testv()
2828
// CIR: cir.scope {
@@ -53,8 +53,8 @@ void test() {
5353

5454
// LLVM: %"class.std::initializer_list<const char *>" = type { ptr, ptr }
5555

56-
// LLVM: @.str = internal constant [3 x i8] c"xy\00"
57-
// LLVM: @.str1 = internal constant [3 x i8] c"uv\00"
56+
// LLVM: @.str = private constant [3 x i8] c"xy\00"
57+
// LLVM: @.str1 = private constant [3 x i8] c"uv\00"
5858

5959
// LLVM: define linkonce_odr void @_ZSt1fIPKcEvSt16initializer_listIT_E(%"class.std::initializer_list<const char *>" [[ARG0:%.*]])
6060
// LLVM: [[LOCAL_PTR:%.*]] = alloca %"class.std::initializer_list<const char *>", i64 1, align 8,

clang/test/CIR/CodeGen/wide-string.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,22 @@ const char16_t *test_utf16() {
55
return u"你好世界";
66
}
77

8-
// CHECK: cir.global "private" constant internal dsolocal @{{.+}} = #cir.const_array<[#cir.int<20320> : !u16i, #cir.int<22909> : !u16i, #cir.int<19990> : !u16i, #cir.int<30028> : !u16i, #cir.int<0> : !u16i]> : !cir.array<!u16i x 5>
8+
// CHECK: cir.global "private" constant cir_private dsolocal @{{.+}} = #cir.const_array<[#cir.int<20320> : !u16i, #cir.int<22909> : !u16i, #cir.int<19990> : !u16i, #cir.int<30028> : !u16i, #cir.int<0> : !u16i]> : !cir.array<!u16i x 5>
99

1010
const char32_t *test_utf32() {
1111
return U"你好世界";
1212
}
1313

14-
// CHECK: cir.global "private" constant internal dsolocal @{{.+}} = #cir.const_array<[#cir.int<20320> : !u32i, #cir.int<22909> : !u32i, #cir.int<19990> : !u32i, #cir.int<30028> : !u32i, #cir.int<0> : !u32i]> : !cir.array<!u32i x 5>
14+
// CHECK: cir.global "private" constant cir_private dsolocal @{{.+}} = #cir.const_array<[#cir.int<20320> : !u32i, #cir.int<22909> : !u32i, #cir.int<19990> : !u32i, #cir.int<30028> : !u32i, #cir.int<0> : !u32i]> : !cir.array<!u32i x 5>
1515

1616
const char16_t *test_zero16() {
1717
return u"\0\0\0\0";
1818
}
1919

20-
// CHECK: cir.global "private" constant internal dsolocal @{{.+}} = #cir.zero : !cir.array<!u16i x 5>
20+
// CHECK: cir.global "private" constant cir_private dsolocal @{{.+}} = #cir.zero : !cir.array<!u16i x 5>
2121

2222
const char32_t *test_zero32() {
2323
return U"\0\0\0\0";
2424
}
2525

26-
// CHECK: cir.global "private" constant internal dsolocal @{{.+}} = #cir.zero : !cir.array<!u32i x 5>
26+
// CHECK: cir.global "private" constant cir_private dsolocal @{{.+}} = #cir.zero : !cir.array<!u32i x 5>

0 commit comments

Comments
 (0)