File tree Expand file tree Collapse file tree 2 files changed +52
-2
lines changed
lib/SILOptimizer/Transforms Expand file tree Collapse file tree 2 files changed +52
-2
lines changed Original file line number Diff line number Diff line change @@ -1293,9 +1293,9 @@ bool SimplifyCFG::simplifyBranchBlock(BranchInst *BI) {
1293
1293
if (auto *bfi = getBorrowedFromUser (arg)) {
1294
1294
bfi->replaceAllUsesWith (Val);
1295
1295
bfi->eraseFromParent ();
1296
- } else {
1297
- arg->replaceAllUsesWith (Val);
1298
1296
}
1297
+ arg->replaceAllUsesWith (Val);
1298
+
1299
1299
if (!isVeryLargeFunction) {
1300
1300
if (auto *I = dyn_cast<SingleValueInstruction>(Val)) {
1301
1301
// Replacing operands may trigger constant folding which then could
Original file line number Diff line number Diff line change @@ -59,6 +59,11 @@ struct NonTrivial {
59
59
var object: AnyObject
60
60
}
61
61
62
+ struct S {
63
+ var a: Int
64
+ var b: NonTrivial
65
+ }
66
+
62
67
///////////
63
68
// Tests //
64
69
///////////
@@ -1971,3 +1976,48 @@ bb6(%15: @guaranteed $E, %16 : @reborrow $B):
1971
1976
%r = tuple()
1972
1977
return %r
1973
1978
}
1979
+
1980
+ // CHECK-LABEL: sil [ossa] @dont_crash_when_merging_blocks_with_borrowed_from :
1981
+ // CHECK: } // end sil function 'dont_crash_when_merging_blocks_with_borrowed_from'
1982
+ sil [ossa] @dont_crash_when_merging_blocks_with_borrowed_from : $@convention(thin) (@owned Optional<S>) -> () {
1983
+ bb0(%0 : @owned $Optional<S>):
1984
+ cond_br undef, bb1, bb2
1985
+
1986
+ bb1:
1987
+ %2 = integer_literal $Builtin.Int1, -1
1988
+ br bb3(%2)
1989
+
1990
+ bb2:
1991
+ %4 = integer_literal $Builtin.Int1, 0
1992
+ br bb3(%4)
1993
+
1994
+ bb3(%6 : $Builtin.Int1):
1995
+ %7 = begin_borrow %0
1996
+ cond_br %6, bb4, bb5
1997
+
1998
+ bb4:
1999
+ switch_enum %7, case #Optional.some!enumelt: bb6, case #Optional.none!enumelt: bb7
2000
+
2001
+ bb5:
2002
+ br bb9
2003
+
2004
+ bb6(%11 : @guaranteed $S):
2005
+ (%12, %13) = destructure_struct %11
2006
+ %14 = enum $Optional<NonTrivial>, #Optional.some!enumelt, %13
2007
+ br bb8(%14)
2008
+
2009
+ bb7:
2010
+ %16 = enum $Optional<NonTrivial>, #Optional.none!enumelt
2011
+ br bb8(%16)
2012
+
2013
+ bb8(%18 : @guaranteed $Optional<NonTrivial>):
2014
+ %19 = borrowed %18 from (%7)
2015
+ br bb9
2016
+
2017
+ bb9:
2018
+ end_borrow %7
2019
+ destroy_value %0
2020
+ %23 = tuple ()
2021
+ return %23
2022
+ }
2023
+
You can’t perform that action at this time.
0 commit comments