Skip to content

Commit 3b377eb

Browse files
committed
Address comments from Joe Shajrawi.
1 parent 068ec2a commit 3b377eb

File tree

2 files changed

+33
-15
lines changed

2 files changed

+33
-15
lines changed

lib/IRGen/LoadableByAddress.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -300,9 +300,7 @@ bool LargeSILTypeMapper::shouldTransformResults(GenericEnvironment *genEnv,
300300
if (loweredTy->getNumResults() != 1) {
301301
auto resultType = loweredTy->getAllResultsType();
302302
auto newResultType = getNewSILType(genEnv, resultType, Mod);
303-
bool hasFuncSig = containsFunctionSignature(genEnv, Mod,
304-
resultType, newResultType);
305-
return hasFuncSig;
303+
return resultType != newResultType;
306304
}
307305

308306
auto singleResult = loweredTy->getSingleResult();

test/IRGen/big_types_corner_cases.swift

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -275,52 +275,72 @@ class ClassWithLoadableStructWithBiggerString {
275275
//===----------------------------------------------------------------------===//
276276
// SR-8076
277277
//===----------------------------------------------------------------------===//
278-
public struct sr8076_BigStruct {
279-
public var m1: String
280-
public var m2: String
281-
public var m3: String
282-
}
283-
284-
public typealias sr8076_Filter = (sr8076_BigStruct) -> Bool
278+
public typealias sr8076_Filter = (BigStruct) -> Bool
285279

286280
public protocol sr8076_Query {
287281
associatedtype Returned
288282
}
289283

290284
public protocol sr8076_ProtoQueryHandler {
291285
func forceHandle_1<Q: sr8076_Query>(query: Q) -> Void
292-
func forceHandle_2<Q: sr8076_Query>(query: Q) -> (Q.Returned, sr8076_BigStruct?)
286+
func forceHandle_2<Q: sr8076_Query>(query: Q) -> (Q.Returned, BigStruct?)
293287
func forceHandle_3<Q: sr8076_Query>(query: Q) -> (Q.Returned, sr8076_Filter?)
294288
func forceHandle_4<Q: sr8076_Query>(query: Q) throws -> (Q.Returned, sr8076_Filter?)
295289
}
296290

297291
public protocol sr8076_QueryHandler: sr8076_ProtoQueryHandler {
298292
associatedtype Handled: sr8076_Query
299293
func handle_1(query: Handled) -> Void
300-
func handle_2(query: Handled) -> (Handled.Returned, sr8076_BigStruct?)
294+
func handle_2(query: Handled) -> (Handled.Returned, BigStruct?)
301295
func handle_3(query: Handled) -> (Handled.Returned, sr8076_Filter?)
302296
func handle_4(query: Handled) throws -> (Handled.Returned, sr8076_Filter?)
303297
}
304298

299+
305300
public extension sr8076_QueryHandler {
306-
func forceHandle_4<Q: sr8076_Query>(query: Q) -> Void {
301+
302+
// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$S22big_types_corner_cases19sr8076_QueryHandlerPAAE13forceHandle_15queryyqd___tAA0e1_F0Rd__lF"(%swift.opaque* noalias nocapture, %swift.type*{{.*}}, %swift.type*{{.*}}, i8** {{.*}}.sr8076_QueryHandler, i8** {{.*}}.sr8076_Query, %swift.opaque* noalias nocapture swiftself)
303+
// CHECK: call swiftcc void {{.*}}(%swift.opaque* noalias nocapture {{.*}}, %swift.refcounted* swiftself {{.*}})
304+
// CHECK: ret void
305+
func forceHandle_1<Q: sr8076_Query>(query: Q) -> Void {
307306
guard let body = handle_1 as? (Q) -> Void else {
308307
fatalError("handler \(self) is expected to handle query \(query)")
309308
}
310309
body(query)
311310
}
312-
func forceHandle_4<Q: sr8076_Query>(query: Q) -> (Q.Returned, sr8076_BigStruct?) {
313-
guard let body = handle_2 as? (Q) -> (Q.Returned, sr8076_BigStruct?) else {
311+
312+
// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$S22big_types_corner_cases19sr8076_QueryHandlerPAAE13forceHandle_25query8ReturnedQyd___AA9BigStructVSgtqd___tAA0e1_F0Rd__lF"(%T22big_types_corner_cases9BigStructVSg* noalias nocapture sret, %swift.opaque* noalias nocapture, %swift.opaque* noalias nocapture, %swift.type*{{.*}}, %swift.type*{{.*}}, i8** {{.*}}.sr8076_QueryHandler, i8** {{.*}}.sr8076_Query, %swift.opaque* noalias nocapture swiftself)
313+
// CHECK: [[ALLOC:%.*]] = alloca %T22big_types_corner_cases9BigStructVSg
314+
// CHECK: call swiftcc void {{.*}}(%T22big_types_corner_cases9BigStructVSg* noalias nocapture sret [[ALLOC]], %swift.opaque* noalias nocapture {{.*}}, %swift.opaque* noalias nocapture {{.*}}, %swift.refcounted* swiftself {{.*}})
315+
// CHECK: ret void
316+
func forceHandle_2<Q: sr8076_Query>(query: Q) -> (Q.Returned, BigStruct?) {
317+
guard let body = handle_2 as? (Q) -> (Q.Returned, BigStruct?) else {
314318
fatalError("handler \(self) is expected to handle query \(query)")
315319
}
316320
return body(query)
317321
}
322+
323+
// CHECK-LABEL-64: define{{( dllexport)?}}{{( protected)?}} swiftcc { i64, i64 } @"$S22big_types_corner_cases19sr8076_QueryHandlerPAAE13forceHandle_35query8ReturnedQyd___SbAA9BigStructVcSgtqd___tAA0e1_F0Rd__lF"(%swift.opaque* noalias nocapture, %swift.opaque* noalias nocapture, %swift.type*{{.*}}, %swift.type*{{.*}}, i8** {{.*}}.sr8076_QueryHandler, i8** {{.*}}.sr8076_Query, %swift.opaque* noalias nocapture swiftself)
324+
// CHECK-64: {{.*}} = call swiftcc { i64, i64 } {{.*}}(%swift.opaque* noalias nocapture {{.*}}, %swift.opaque* noalias nocapture {{.*}}, %swift.refcounted* swiftself {{.*}})
325+
// CHECK-64: ret { i64, i64 }
326+
327+
// CHECK-LABEL-32: define{{( dllexport)?}}{{( protected)?}} swiftcc { i32, i32} @"$S22big_types_corner_cases19sr8076_QueryHandlerPAAE13forceHandle_35query8ReturnedQyd___SbAA9BigStructVcSgtqd___tAA0e1_F0Rd__lF"(%swift.opaque* noalias nocapture, %swift.opaque* noalias nocapture, %swift.type*{{.*}}, %swift.type*{{.*}}, i8** {{.*}}.sr8076_QueryHandler, i8** {{.*}}.sr8076_Query, %swift.opaque* noalias nocapture swiftself)
328+
// CHECK-32: {{.*}} = call swiftcc { i32, i32 } {{.*}}(%swift.opaque* noalias nocapture {{.*}}, %swift.opaque* noalias nocapture {{.*}}, %swift.refcounted* swiftself {{.*}})
329+
// CHECK-32: ret { i32, i32 }
318330
func forceHandle_3<Q: sr8076_Query>(query: Q) -> (Q.Returned, sr8076_Filter?) {
319331
guard let body = handle_3 as? (Q) -> (Q.Returned, sr8076_Filter?) else {
320332
fatalError("handler \(self) is expected to handle query \(query)")
321333
}
322334
return body(query)
323335
}
336+
337+
// CHECK-LABEL-64: define{{( dllexport)?}}{{( protected)?}} swiftcc { i64, i64 } @"$S22big_types_corner_cases19sr8076_QueryHandlerPAAE13forceHandle_45query8ReturnedQyd___SbAA9BigStructVcSgtqd___tKAA0e1_F0Rd__lF"(%swift.opaque* noalias nocapture, %swift.opaque* noalias nocapture, %swift.type*{{.*}}, %swift.type*{{.*}}, i8** {{.*}}.sr8076_QueryHandler, i8** {{.*}}.sr8076_Query, %swift.opaque* noalias nocapture swiftself, %swift.error** swifterror)
338+
// CHECK-64: {{.*}} = call swiftcc { i64, i64 } {{.*}}(%swift.opaque* noalias nocapture {{.*}}, %swift.opaque* noalias nocapture {{.*}}, %swift.refcounted* swiftself {{.*}}, %swift.error** nocapture swifterror {{.*}})
339+
// CHECK-64: ret { i64, i64 }
340+
341+
// CHECK-LABEL-32: define{{( dllexport)?}}{{( protected)?}} swiftcc { i32, i32} @"$S22big_types_corner_cases19sr8076_QueryHandlerPAAE13forceHandle_45query8ReturnedQyd___SbAA9BigStructVcSgtqd___tKAA0e1_F0Rd__lF"(%swift.opaque* noalias nocapture, %swift.opaque* noalias nocapture, %swift.type*{{.*}}, %swift.type*{{.*}}, i8** {{.*}}.sr8076_QueryHandler, i8** {{.*}}.sr8076_Query, %swift.opaque* noalias nocapture swiftself, %swift.error** swifterror)
342+
// CHECK-32: {{.*}} = call swiftcc { i32, i32 } {{.*}}(%swift.opaque* noalias nocapture {{.*}}, %swift.opaque* noalias nocapture {{.*}}, %swift.refcounted* swiftself {{.*}}, %swift.error** nocapture {{.*}})
343+
// CHECK-32: ret { i32, i32 }
324344
func forceHandle_4<Q: sr8076_Query>(query: Q) throws -> (Q.Returned, sr8076_Filter?) {
325345
guard let body = handle_4 as? (Q) throws -> (Q.Returned, sr8076_Filter?) else {
326346
fatalError("handler \(self) is expected to handle query \(query)")

0 commit comments

Comments
 (0)