Skip to content

Commit 10b6a1b

Browse files
committed
fix missing propagation of async-ness through try? and try!
1 parent 0c352be commit 10b6a1b

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

lib/Sema/TypeCheckEffects.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1504,6 +1504,10 @@ class CheckEffectsCoverage : public EffectsHandlingWalker<CheckEffectsCoverage>
15041504
OldMaxThrowingKind = std::max(OldMaxThrowingKind, Self.MaxThrowingKind);
15051505
}
15061506

1507+
void preserveCoverageFromOptionalOrForcedTryOperand() {
1508+
OldFlags.mergeFrom(ContextFlags::asyncAwaitFlags(), Self.Flags);
1509+
}
1510+
15071511
void preserveCoverageFromInterpolatedString() {
15081512
OldFlags.mergeFrom(ContextFlags::HasAnyThrowSite, Self.Flags);
15091513
OldFlags.mergeFrom(ContextFlags::HasTryThrowSite, Self.Flags);
@@ -1848,6 +1852,8 @@ class CheckEffectsCoverage : public EffectsHandlingWalker<CheckEffectsCoverage>
18481852
if (!Flags.has(ContextFlags::HasTryThrowSite)) {
18491853
Ctx.Diags.diagnose(E->getLoc(), diag::no_throw_in_try);
18501854
}
1855+
1856+
scope.preserveCoverageFromOptionalOrForcedTryOperand();
18511857
return ShouldNotRecurse;
18521858
}
18531859

@@ -1862,6 +1868,8 @@ class CheckEffectsCoverage : public EffectsHandlingWalker<CheckEffectsCoverage>
18621868
if (!Flags.has(ContextFlags::HasTryThrowSite)) {
18631869
Ctx.Diags.diagnose(E->getLoc(), diag::no_throw_in_try);
18641870
}
1871+
1872+
scope.preserveCoverageFromOptionalOrForcedTryOperand();
18651873
return ShouldNotRecurse;
18661874
}
18671875
};

0 commit comments

Comments
 (0)