Skip to content

Error compiling to WASM switch statement with case null: #62022

@gmpassos

Description

@gmpassos

The compilation error:

$> dart compile wasm web/main.dart -o build/main.wasm --verbose
Running dart compile wasm...
  - input file name   = file:///xxxx/web/main.dart
  - output file name  = build/main.wasm
  - librariesSpecPath = null
  - packagesPath file = null
  - platformPath file = file:///usr/local/Cellar/dart/3.10.1/libexec/lib/_internal/dart2wasm_platform.dill

Translator options:
  - enable asserts = false
  - import shared memory = false
  - inlining = true
  - js compatibility = false
  - omit implicit type checks = false
  - omit explicit type checks = false
  - omit bounds checks = false
  - polymorphic specialization = false
  - print kernel = false
  - print wasm = false
  - minify = false
  - verity type checks = false
  - enable experimental ffi = false
  - enable experimental wasm interop = false
  - generate source maps = true
  - enable deferred loading = false
  - enable multi module stress test mode = false
  - inlining limit = 0
  - shared memory max pages = null
  - watch points = []
Exception in SwitchStatement at file:///xxxx/web/lib/ui_company.dart:340:5
Unhandled exception:
type 'NullConstant' is not a subtype of type 'IntConstant' in type cast
#0      new SwitchInfo (package:dart2wasm/code_generator.dart:4543)
#1      AstCodeGenerator.visitSwitchStatement (package:dart2wasm/code_generator.dart:1368)
#2      StateMachineCodeGenerator.visitSwitchStatement (package:dart2wasm/state_machine.dart:885)
#3      SwitchStatement.accept (package:kernel/src/ast/statements.dart:813)
#4      AstCodeGenerator.translateStatement (package:dart2wasm/code_generator.dart:666)
#5      StateMachineCodeGenerator.visitLabeledStatement (package:dart2wasm/state_machine.dart:865)
#6      LabeledStatement.accept (package:kernel/src/ast/statements.dart:306)
#7      AstCodeGenerator.translateStatement (package:dart2wasm/code_generator.dart:666)
#8      AstCodeGenerator.visitBlock (package:dart2wasm/code_generator.dart:770)
#9      Block.accept (package:kernel/src/ast/statements.dart:103)
#10     AstCodeGenerator.translateStatement (package:dart2wasm/code_generator.dart:666)
#11     AsyncStateMachineCodeGenerator.generateInner (package:dart2wasm/async.dart:251)
#12     StateMachineCodeGenerator.generateInternal (package:dart2wasm/state_machine.dart:746)
#13     AstCodeGenerator.generate (package:dart2wasm/code_generator.dart:217)
#14     CompilationTask.run (package:dart2wasm/translator.dart:1930)
#15     Translator.drainCompletionQueue (package:dart2wasm/translator.dart:542)
#16     Translator.translate (package:dart2wasm/translator.dart:567)
#17     compileToModule (package:dart2wasm/compile.dart:359)
<asynchronous suspension>
#18     generateWasm (package:dart2wasm/generate_wasm.dart:81)
<asynchronous suspension>
#19     main (file:///x/w/sdk/pkg/dart2wasm/bin/dart2wasm.dart:10)
<asynchronous suspension>

Dart version:

$> dart --version
Dart SDK version: 3.10.1 (stable) (Tue Nov 18 11:02:31 2025 -0800) on "macos_x64"

The switch statement:

// ...

int? get countryCode => int.tryParse(property['countryCode'];

// ...

build() {
 switch (countryCode) {
      case 55:
        return '...' ;
      case 352:
        return '...' ;
      case null:
        {
          if (regulatory != null) {
            return '...' ;
          }

          return '...' ;
        }
    }
}

It seems that the case null is no compatible with the expected int type, but countryCode is a int?.


This is the line in the compiled that is triggering the error:

: ((e as ConstantExpression).constant as IntConstant).value;

Metadata

Metadata

Assignees

Labels

area-dart2wasmIssues for the dart2wasm compiler.type-bugIncorrect behavior (everything from a crash to more subtle misbehavior)

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions