[ModuleInterface] Print names for @usableFromInline struct properties (#19465)

Because they weren't 'public' we were treating them as layout-only
properties and printing `var _`, but they get referenced in inlinable
functions. We need the actual name!
This commit is contained in:
Jordan Rose
2018-09-26 14:57:44 -07:00
committed by GitHub
parent b29f010510
commit 61057b88db
3 changed files with 29 additions and 9 deletions

View File

@@ -17,10 +17,10 @@
// These two appear out-of-order between run lines
// CHECK-DAG: [[MYCLASS:%T20PrivateStoredMembers7MyClassC]] = type opaque
// CHECK-DAG: [[MYSTRUCT:%T20PrivateStoredMembers8MyStructV]] = type <{ %Ts5Int64V, %TSb, [7 x i8], %Ts5Int64V, %TSb, [7 x i8], %Ts5Int64V, %TSb, [7 x i8], %Ts5Int64V }>
// CHECK-DAG: [[MYSTRUCT:%T20PrivateStoredMembers8MyStructV]] = type <{ %Ts5Int64V, %TSb, [7 x i8], %Ts5Int64V, %TSb, [7 x i8], %Ts5Int64V, %TSb, [7 x i8], %Ts5Int64V, %TSb, [7 x i8], %Ts5Int64V }>
// CHECK-MAIN-DAG: [[MYCLASS:%T4main7MyClassC]] = type <{ %swift.refcounted, %Ts5Int64V, %TSb, [7 x i8], %Ts5Int64V, %TSb, [7 x i8], %Ts5Int64V, %TSb, [7 x i8], %Ts5Int64V }>
// CHECK-MAIN-DAG: [[MYSTRUCT:%T4main8MyStructV]] = type <{ %Ts5Int64V, %TSb, [7 x i8], %Ts5Int64V, %TSb, [7 x i8], %Ts5Int64V, %TSb, [7 x i8], %Ts5Int64V }>
// CHECK-MAIN-DAG: [[MYCLASS:%T4main7MyClassC]] = type <{ %swift.refcounted, %Ts5Int64V, %TSb, [7 x i8], %Ts5Int64V, %TSb, [7 x i8], %Ts5Int64V, %TSb, [7 x i8], %Ts5Int64V, %TSb, [7 x i8], %Ts5Int64V }>
// CHECK-MAIN-DAG: [[MYSTRUCT:%T4main8MyStructV]] = type <{ %Ts5Int64V, %TSb, [7 x i8], %Ts5Int64V, %TSb, [7 x i8], %Ts5Int64V, %TSb, [7 x i8], %Ts5Int64V, %TSb, [7 x i8], %Ts5Int64V }>
#if SHOULD_IMPORT
import PrivateStoredMembers
@@ -29,7 +29,7 @@ import PrivateStoredMembers
// CHECK-EXEC: swiftcc void @"$s{{[^ ]+}}8makeUseryyF"() #0 {
public func makeUser() {
let ptr = UnsafeMutablePointer<MyStruct>.allocate(capacity: 1)
// CHECK-EXEC: %.publicEndVar = getelementptr inbounds [[MYSTRUCT]], [[MYSTRUCT]]* %{{[0-9]+}}, i32 0, i32 [[PUBLIC_END_VAR_IDX:9]]
// CHECK-EXEC: %.publicEndVar = getelementptr inbounds [[MYSTRUCT]], [[MYSTRUCT]]* %{{[0-9]+}}, i32 0, i32 [[PUBLIC_END_VAR_IDX:12]]
// CHECK-EXEC: %.publicEndVar._value = getelementptr inbounds %Ts5Int64V, %Ts5Int64V* %.publicEndVar, i32 0, i32 0
// CHECK-EXEC: store i64 4, i64* %.publicEndVar._value
ptr.pointee.publicEndVar = 4

View File

@@ -29,6 +29,14 @@ public struct MyStruct {
// RESILIENT-NOT: internal let _: [[BOOL]]{{$}}
let internalLet: Bool
// COMMON-NEXT: @usableFromInline
// COMMON-NEXT: internal var ufiVar: [[INT64]]{{$}}
@usableFromInline var ufiVar: Int64
// COMMON-NEXT: @usableFromInline
// COMMON-NEXT: internal let ufiLet: [[BOOL]]{{$}}
@usableFromInline let ufiLet: Bool
// CHECK-NEXT: private var _: [[INT64]]{{$}}
// RESILIENT-NOT: private var _: [[INT64]]{{$}}
private var privateVar: Int64
@@ -69,6 +77,14 @@ public class MyClass {
// RESILIENT-NOT: internal let _: [[BOOL]]{{$}}
let internalLet: Bool = true
// COMMON-NEXT: @usableFromInline
// COMMON-NEXT: internal var ufiVar: [[INT64]]{{$}}
@usableFromInline var ufiVar: Int64 = 0
// COMMON-NEXT: @usableFromInline
// COMMON-NEXT: internal let ufiLet: [[BOOL]]{{$}}
@usableFromInline let ufiLet: Bool = true
// CHECK-NEXT: private var _: [[INT64]]{{$}}
// RESILIENT-NOT: private var _: [[INT64]]{{$}}
private var privateVar: Int64 = 0