Skip to content

Commit 0efecd9

Browse files
authored
Merge pull request #4164 from jckarter/unowned-irgen-crash-3.0
[3.0] IRGen: Add missing bitcasts to emitNativeUnowned* operations.
2 parents dc80e80 + 691d478 commit 0efecd9

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

lib/IRGen/GenHeap.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1138,13 +1138,15 @@ void IRGenFunction::emitNativeSetDeallocating(llvm::Value *value) {
11381138

11391139
void IRGenFunction::emitNativeUnownedInit(llvm::Value *value,
11401140
Address dest) {
1141+
value = Builder.CreateBitCast(value, IGM.RefCountedPtrTy);
11411142
dest = Builder.CreateStructGEP(dest, 0, Size(0));
11421143
Builder.CreateStore(value, dest);
11431144
emitNativeUnownedRetain(value);
11441145
}
11451146

11461147
void IRGenFunction::emitNativeUnownedAssign(llvm::Value *value,
11471148
Address dest) {
1149+
value = Builder.CreateBitCast(value, IGM.RefCountedPtrTy);
11481150
dest = Builder.CreateStructGEP(dest, 0, Size(0));
11491151
auto oldValue = Builder.CreateLoad(dest);
11501152
Builder.CreateStore(value, dest);

test/IRGen/unowned_store.sil

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// RUN: %target-swift-frontend -emit-ir -verify %s
2+
3+
import Swift
4+
5+
class C {}
6+
7+
sil @foo : $@convention(thin) (@inout @sil_unowned C, @owned C) -> () {
8+
entry(%0 : $*@sil_unowned C, %1 : $C):
9+
store_unowned %1 to [initialization] %0 : $*@sil_unowned C
10+
store_unowned %1 to %0 : $*@sil_unowned C
11+
return undef : $()
12+
}
13+
14+
sil_vtable C {}

0 commit comments

Comments
 (0)