From d71613420142afefe8c0e57630c4ca75f66c3211 Mon Sep 17 00:00:00 2001 From: Hamish Knight Date: Fri, 14 Nov 2025 14:13:23 +0000 Subject: [PATCH] [CS] Fix a couple of missing error paths Make sure we set `hadError` other we'll fail to invalidate the target. --- lib/Sema/CSSyntacticElement.cpp | 7 ++++++- .../DiagnoseWalker-walkToExprPre-50b7d0.swift | 2 +- ...hecker-isClosureRequiringSelfQualification-ef6fa0.swift | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) rename validation-test/{compiler_crashers => compiler_crashers_fixed}/DiagnoseWalker-walkToExprPre-50b7d0.swift (88%) rename validation-test/{compiler_crashers => compiler_crashers_fixed}/ImplicitSelfUsageChecker-isClosureRequiringSelfQualification-ef6fa0.swift (86%) diff --git a/lib/Sema/CSSyntacticElement.cpp b/lib/Sema/CSSyntacticElement.cpp index 9fb95156411d9..4f63b4afcf910 100644 --- a/lib/Sema/CSSyntacticElement.cpp +++ b/lib/Sema/CSSyntacticElement.cpp @@ -2212,6 +2212,8 @@ class SyntacticElementSolutionApplication if (auto newResultTarget = rewriter.rewriteTarget(target)) { resultExpr = newResultTarget->getAsExpr(); + } else { + hadError = true; } switch (mode) { @@ -2259,8 +2261,11 @@ class SyntacticElementSolutionApplication } auto *resultExpr = thenStmt->getResult(); - if (auto newResultTarget = rewriter.rewriteTarget(*target)) + if (auto newResultTarget = rewriter.rewriteTarget(*target)) { resultExpr = newResultTarget->getAsExpr(); + } else { + hadError = true; + } thenStmt->setResult(resultExpr); diff --git a/validation-test/compiler_crashers/DiagnoseWalker-walkToExprPre-50b7d0.swift b/validation-test/compiler_crashers_fixed/DiagnoseWalker-walkToExprPre-50b7d0.swift similarity index 88% rename from validation-test/compiler_crashers/DiagnoseWalker-walkToExprPre-50b7d0.swift rename to validation-test/compiler_crashers_fixed/DiagnoseWalker-walkToExprPre-50b7d0.swift index 5c0b3fe59fc2f..b4fcb7e65bbee 100644 --- a/validation-test/compiler_crashers/DiagnoseWalker-walkToExprPre-50b7d0.swift +++ b/validation-test/compiler_crashers_fixed/DiagnoseWalker-walkToExprPre-50b7d0.swift @@ -1,5 +1,5 @@ // {"kind":"typecheck","original":"7f0c85e8","signature":"diagSyntacticUseRestrictions(swift::Expr const*, swift::DeclContext const*, bool)::DiagnoseWalker::walkToExprPre(swift::Expr*)","signatureAssert":"Assertion failed: (Ptr && \"Cannot dereference a null Type!\"), function operator->"} -// RUN: not --crash %target-swift-frontend -typecheck %s +// RUN: not %target-swift-frontend -typecheck %s class a: ExpressibleByDictionaryLiteral { typealias Key = b typealias Value = c diff --git a/validation-test/compiler_crashers/ImplicitSelfUsageChecker-isClosureRequiringSelfQualification-ef6fa0.swift b/validation-test/compiler_crashers_fixed/ImplicitSelfUsageChecker-isClosureRequiringSelfQualification-ef6fa0.swift similarity index 86% rename from validation-test/compiler_crashers/ImplicitSelfUsageChecker-isClosureRequiringSelfQualification-ef6fa0.swift rename to validation-test/compiler_crashers_fixed/ImplicitSelfUsageChecker-isClosureRequiringSelfQualification-ef6fa0.swift index f92182c436a0b..421f541f57805 100644 --- a/validation-test/compiler_crashers/ImplicitSelfUsageChecker-isClosureRequiringSelfQualification-ef6fa0.swift +++ b/validation-test/compiler_crashers_fixed/ImplicitSelfUsageChecker-isClosureRequiringSelfQualification-ef6fa0.swift @@ -1,5 +1,5 @@ // {"kind":"typecheck","signature":"(anonymous namespace)::ImplicitSelfUsageChecker::isClosureRequiringSelfQualification(swift::AbstractClosureExpr const*, bool)","signatureAssert":"Assertion failed: (Ptr && \"Cannot dereference a null Type!\"), function operator->"} -// RUN: not --crash %target-swift-frontend -typecheck %s +// RUN: not %target-swift-frontend -typecheck %s struct a : ExpressibleByBooleanLiteral { c(d : Bool -> ( }