blob: 841dfb6cd283770e2b757c5097e2c95e7141dfd1 [file] [log] [blame]
// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -emit-ir %s | %FileCheck %s
// REQUIRES: CPU=x86_64
// CHECK: [[U8_0:@.*]] = private unnamed_addr constant [8 x i8] c"help\09me\00"
// CHECK: [[U8_1:@.*]] = private unnamed_addr constant [5 x i8] c"\00x\C6\AB\00"
// CHECK: [[U16_0:@.*]] = private unnamed_addr constant [8 x i16] [i16 104, i16 101, i16 108, i16 112, i16 9, i16 109, i16 101, i16 0]
// CHECK: [[U16_1:@.*]] = private unnamed_addr constant [4 x i16] [i16 0, i16 120, i16 427, i16 0]
// CHECK: @"$Ss19_UTF16StringStorageCN" = external global %objc_class
// CHECK: [[UTF16_CSTR_0:@.*]] = private unnamed_addr constant { %swift.refcounted, i32, i32, i8, i8, [8 x i16] } { %swift.refcounted { %swift.type* bitcast (%objc_class* @"$Ss19_UTF16StringStorageCN" to %swift.type*), i64 8589934594 }, i32 7, i32 8, i8 0, i8 0, [8 x i16] [i16 104, i16 101, i16 108, i16 112, i16 9, i16 109, i16 101, i16 0] }
// CHECK: [[UTF16_CSTR_1:@.*]] = private unnamed_addr constant { %swift.refcounted, i32, i32, i8, i8, [9 x i16] } { %swift.refcounted { %swift.type* bitcast (%objc_class* @"$Ss19_UTF16StringStorageCN" to %swift.type*), i64 8589934594 }, i32 8, i32 9, i8 0, i8 0, [9 x i16] [i16 104, i16 101, i16 108, i16 112, i16 9, i16 109, i16 101, i16 0, i16 0] }
// CHECK: @"$Ss20_Latin1StringStorageCN" = external global %objc_class
// CHECK: [[CSTR_0:@.*]] = private unnamed_addr constant { %swift.refcounted, i32, i32, i8, [12 x i8] } { %swift.refcounted { %swift.type* bitcast (%objc_class* @"$Ss20_Latin1StringStorageCN" to %swift.type*), i64 8589934594 }, i32 11, i32 12, i8 0, [12 x i8] c"help\09me too\00" }
// CHECK: [[CSTR_1:@.*]] = private unnamed_addr constant { %swift.refcounted, i32, i32, i8, [13 x i8] } { %swift.refcounted { %swift.type* bitcast (%objc_class* @"$Ss20_Latin1StringStorageCN" to %swift.type*), i64 8589934594 }, i32 12, i32 13, i8 0, [13 x i8] c"help\09me too\00\00" }
sil_stage canonical
import Builtin
sil @utf8_literal : $@convention(thin) () -> Builtin.RawPointer {
bb0:
%0 = string_literal utf8 "help\tme"
return %0 : $Builtin.RawPointer
}
// CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc i8* @utf8_literal() {{.*}} {
// CHECK: ret i8* getelementptr inbounds ([8 x i8], [8 x i8]* [[U8_0]], i64 0, i64 0)
sil @utf8_literal_with_nul : $@convention(thin) () -> Builtin.RawPointer {
bb0:
%0 = string_literal utf8 "\u{00}x\u{01ab}"
return %0 : $Builtin.RawPointer
}
// CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc i8* @utf8_literal_with_nul() {{.*}} {
// CHECK: ret i8* getelementptr inbounds ([5 x i8], [5 x i8]* [[U8_1]], i64 0, i64 0)
sil @utf16_literal : $@convention(thin) () -> Builtin.RawPointer {
bb0:
%0 = string_literal utf16 "help\tme"
return %0 : $Builtin.RawPointer
}
// CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc i8* @utf16_literal() {{.*}} {
// CHECK: ret i8* bitcast ([8 x i16]* [[U16_0]] to i8*)
sil @utf16_literal_with_nul : $@convention(thin) () -> Builtin.RawPointer {
bb0:
%0 = string_literal utf16 "\u{00}x\u{01ab}"
return %0 : $Builtin.RawPointer
}
// CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc i8* @utf16_literal_with_nul() {{.*}} {
// CHECK: ret i8* bitcast ([4 x i16]* [[U16_1]] to i8*)
// CHECK-LABEL: define{{.*}} swiftcc i8* @constant_string_literals_utf16
// CHECK: ret i8* {{.*}}[[UTF16_CSTR_0]]
sil @constant_string_literals_utf16 : $@convention(thin) () -> Builtin.RawPointer {
bb0:
%0 = const_string_literal utf16 "help\tme"
%1 = const_string_literal utf16 "help\tme\0"
%2 = const_string_literal utf8 "help\tme too"
%3 = const_string_literal utf8 "help\tme too\0"
return %0 : $Builtin.RawPointer
}
// CHECK-LABEL: define{{.*}} swiftcc i8* @constant_string_literals_utf16_nul
// CHECK: ret i8* {{.*}}[[UTF16_CSTR_1]]
sil @constant_string_literals_utf16_nul : $@convention(thin) () -> Builtin.RawPointer {
bb0:
%0 = const_string_literal utf16 "help\tme\0"
return %0 : $Builtin.RawPointer
}
// CHECK-LABEL: define{{.*}} swiftcc i8* @constant_string_literals_utf8
// CHECK: ret i8* {{.*}}[[CSTR_0]]
sil @constant_string_literals_utf8 : $@convention(thin) () -> Builtin.RawPointer {
bb0:
%0 = const_string_literal utf8 "help\tme too"
return %0 : $Builtin.RawPointer
}
// CHECK-LABEL: define{{.*}} swiftcc i8* @constant_string_literals_utf8_nul
// CHECK: ret i8* {{.*}}[[CSTR_1]]
sil @constant_string_literals_utf8_nul : $@convention(thin) () -> Builtin.RawPointer {
bb0:
%0 = const_string_literal utf8 "help\tme too\0"
return %0 : $Builtin.RawPointer
}