Skip to content

Commit 72ba632

Browse files
authored
Merge pull request #22769 from compnerd/i-am-determined
IRGen: eliminate some nondeterminism due to UB
2 parents 7522ada + 5f881de commit 72ba632

File tree

1 file changed

+16
-13
lines changed

1 file changed

+16
-13
lines changed

lib/IRGen/GenExistential.cpp

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2360,9 +2360,9 @@ static llvm::Constant *getAssignBoxedOpaqueExistentialBufferFunction(
23602360
Builder.emitBlock(matchInlineBB);
23612361
{
23622362
ConditionalDominanceScope inlineCondition(IGF);
2363-
emitAssignWithCopyCall(IGF, metadata,
2364-
castToOpaquePtr(IGF, destBuffer),
2365-
castToOpaquePtr(IGF, srcBuffer));
2363+
auto dstAddress = castToOpaquePtr(IGF, destBuffer);
2364+
auto srcAddress = castToOpaquePtr(IGF, srcBuffer);
2365+
emitAssignWithCopyCall(IGF, metadata, dstAddress, srcAddress);
23662366
Builder.CreateBr(doneBB);
23672367
}
23682368

@@ -2425,10 +2425,11 @@ static llvm::Constant *getAssignBoxedOpaqueExistentialBufferFunction(
24252425
Builder.emitBlock(destInlineBB);
24262426
{
24272427
ConditionalDominanceScope destInlineCondition(IGF);
2428-
// Move asside so that we can destroy later.
2429-
emitInitializeWithTakeCall(IGF, destMetadata,
2430-
castToOpaquePtr(IGF, tmpBuffer),
2431-
castToOpaquePtr(IGF, destBuffer));
2428+
// Move aside so that we can destroy later.
2429+
auto tmpAddress = castToOpaquePtr(IGF, tmpBuffer);
2430+
auto destAddress = castToOpaquePtr(IGF, destBuffer);
2431+
emitInitializeWithTakeCall(IGF, destMetadata, tmpAddress,
2432+
destAddress);
24322433
auto *srcInlineBB = IGF.createBasicBlock("dest-inline-src-inline");
24332434
auto *srcOutlineBB =
24342435
IGF.createBasicBlock("dest-inline-src-outline");
@@ -2440,9 +2441,10 @@ static llvm::Constant *getAssignBoxedOpaqueExistentialBufferFunction(
24402441
{
24412442
// initializeWithCopy(dest, src)
24422443
ConditionalDominanceScope domScope(IGF);
2443-
emitInitializeWithCopyCall(IGF, srcMetadata,
2444-
castToOpaquePtr(IGF, destBuffer),
2445-
castToOpaquePtr(IGF, srcBuffer));
2444+
auto destAddress = castToOpaquePtr(IGF, destBuffer);
2445+
auto srcAddress = castToOpaquePtr(IGF, srcBuffer);
2446+
emitInitializeWithCopyCall(IGF, srcMetadata, destAddress,
2447+
srcAddress);
24462448
Builder.CreateBr(contBB2);
24472449
}
24482450

@@ -2484,9 +2486,10 @@ static llvm::Constant *getAssignBoxedOpaqueExistentialBufferFunction(
24842486
{
24852487
// initializeWithCopy(dest, src)
24862488
ConditionalDominanceScope domScope(IGF);
2487-
emitInitializeWithCopyCall(IGF, srcMetadata,
2488-
castToOpaquePtr(IGF, destBuffer),
2489-
castToOpaquePtr(IGF, srcBuffer));
2489+
auto destAddress = castToOpaquePtr(IGF, destBuffer);
2490+
auto srcAddress = castToOpaquePtr(IGF, srcBuffer);
2491+
emitInitializeWithCopyCall(IGF, srcMetadata, destAddress,
2492+
srcAddress);
24902493
Builder.CreateBr(contBB2);
24912494
}
24922495

0 commit comments

Comments
 (0)