Skip to content

Commit c951497

Browse files
committed
Fall-back assignment of closure discriminators in ill-formed code
There are some cases of severely malformed code where we cannot compute closure discriminators appropriate. Introduce a fallback to use the unstable global numbering of discriminators in this case.
1 parent 2b79371 commit c951497

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

lib/AST/Expr.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1864,6 +1864,16 @@ unsigned AbstractClosureExpr::getDiscriminator() const {
18641864

18651865
evaluateOrDefault(
18661866
getASTContext().evaluator, LocalDiscriminatorsRequest{getParent()}, 0);
1867+
1868+
// Ill-formed code might not be able to assign discriminators, so assign
1869+
// a new one now.
1870+
if (getRawDiscriminator() == InvalidDiscriminator &&
1871+
getASTContext().Diags.hadAnyError()) {
1872+
const_cast<AbstractClosureExpr *>(this)->
1873+
Bits.AbstractClosureExpr.Discriminator =
1874+
getASTContext().NextAutoClosureDiscriminator++;
1875+
}
1876+
18671877
assert(getRawDiscriminator() != InvalidDiscriminator);
18681878
return getRawDiscriminator();
18691879
}

0 commit comments

Comments
 (0)