From 3a7b4327e97488ee07c487b635e5a1bc42bf58ab Mon Sep 17 00:00:00 2001 From: Nate Biggs Date: Tue, 10 Feb 2026 10:15:36 -0800 Subject: [PATCH] [tfa] Ignore missing optional parameters after global optimizations. TFA currently sets parameter defaults to null when the parameter is unused. The kernel verifier tries to verify that no parameter initializers are null. This causes assertions to fail in dart2wasm when we run the verifier after TFA. Change-Id: I4e44eca2398b7266f6cb3bbf200009e73e64cbf4 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/479321 Reviewed-by: Alexander Markov Commit-Queue: Nate Biggs Reviewed-by: Johnni Winther --- pkg/kernel/lib/verifier.dart | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/pkg/kernel/lib/verifier.dart b/pkg/kernel/lib/verifier.dart index c53f424d89a..5c8bf932f26 100644 --- a/pkg/kernel/lib/verifier.dart +++ b/pkg/kernel/lib/verifier.dart @@ -911,7 +911,10 @@ class VerifyingVisitor extends RecursiveResultVisitor { if (positionalIndex >= node.requiredParameterCount) { VariableDeclaration positionalParameter = node.positionalParameters[positionalIndex]; - if (positionalParameter.initializer == null) { + if (positionalParameter.initializer == null && + // Global transformations like TFA may not maintain this + // invariant. + stage != VerificationStage.afterGlobalTransformations) { problem( positionalParameter, "An optional positional parameter is expected to have a " @@ -921,7 +924,10 @@ class VerifyingVisitor extends RecursiveResultVisitor { } for (VariableDeclaration namedParameter in node.namedParameters) { if (!namedParameter.isRequired && - namedParameter.initializer == null) { + namedParameter.initializer == null && + // Global transformations like TFA may not maintain this + // invariant. + stage != VerificationStage.afterGlobalTransformations) { problem( namedParameter, "An optional named parameter is expected to have a default "