Skip to content

Commit c3a6bfb

Browse files
committed
SIL: Implement SILTypeSubstituter::hasSameShape()
1 parent 783d998 commit c3a6bfb

File tree

5 files changed

+25
-2
lines changed

5 files changed

+25
-2
lines changed

lib/SIL/IR/SILFunctionType.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4650,8 +4650,14 @@ class SILTypeSubstituter :
46504650
}
46514651

46524652
bool hasSameShape(CanType lhs, CanType rhs) {
4653-
// FIXME
4654-
return lhs == rhs;
4653+
if (lhs->isTypeParameter() && rhs->isTypeParameter()) {
4654+
assert(Sig);
4655+
return Sig->haveSameShape(lhs, rhs);
4656+
}
4657+
4658+
auto lhsArchetype = cast<PackArchetypeType>(lhs);
4659+
auto rhsArchetype = cast<PackArchetypeType>(rhs);
4660+
return lhsArchetype->getReducedShape() == rhsArchetype->getReducedShape();
46554661
}
46564662
};
46574663

test/SILGen/variadic-generic-arguments.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
// RUN: %target-swift-emit-silgen -enable-experimental-feature VariadicGenerics %s | %FileCheck %s
2+
3+
// Because of -enable-experimental-feature VariadicGenerics
24
// REQUIRES: asserts
35

46
// CHECK-LABEL: @$s4main14receive_simpleyyxxQpRvzlF : $@convention(thin) <each T> (@pack_guaranteed Pack{repeat each T}) -> () {
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// RUN: %target-swift-emit-silgen -enable-experimental-feature VariadicGenerics %s | %FileCheck %s
2+
3+
// Because of -enable-experimental-feature VariadicGenerics
4+
// REQUIRES: asserts
5+
6+
public struct G<T> {}
7+
8+
// CHECK-LABEL: sil [ossa] @$s4main6caller2fnyyAA1GVyxGxQpXE_tRvzlF : $@convention(thin) <each T> (@guaranteed @noescape @callee_guaranteed @substituted <each τ_0_0, each τ_0_1 where (repeat (each τ_0_0, each τ_0_1)) : Any> (@pack_guaranteed Pack{repeat G<each τ_0_0>}) -> () for <Pack{repeat each T}, Pack{repeat each T}>) -> () {
9+
public func caller<each T>(fn: (repeat G<each T>) -> ()) {
10+
fn(repeat G<each T>())
11+
}

test/SILGen/variadic-generic-results.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
// RUN: %target-swift-emit-silgen -enable-experimental-feature VariadicGenerics %s | %FileCheck %s
2+
3+
// Because of -enable-experimental-feature VariadicGenerics
24
// REQUIRES: asserts
35

46
func sequence() {}

test/SILGen/variadic-generic-tuples.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
// RUN: %target-swift-emit-silgen -enable-experimental-feature VariadicGenerics %s | %FileCheck %s
2+
3+
// Because of -enable-experimental-feature VariadicGenerics
24
// REQUIRES: asserts
35

46
func takeAny(_ arg: Any) {}

0 commit comments

Comments
 (0)