Skip to content

A static field's failed initializer is an error - #582

Merged
ASDAlexander77 merged 1 commit into
mainfrom
static-field-init-error
Oct 17, 2026
Merged

ASDAlexander77 merged 1 commit into
mainfrom
static-field-init-error

Conversation

@ASDAlexander77

Copy link
Copy Markdown
Owner

class A { static s: Ref<string> = null; } compiled with no diagnostic. The same initializer on an instance field, or on a let, is an error ("can't cast from 'null' to 'Reference' in 'strict null mode'").

Cause: registerVariable returns no type when the field's initializer fails, and mlirGenClassStaticFieldMember registered the field anyway. The cast error is postponed like every message and shown only when the module fails, so it was lost. The dynamic-import twin of this function already checked for a missing type; this adds the same check.

Repro:

class Args {
    static count = 1;
    static argv: Ref<string> = null;
}

Now: static_field_initializer.ts:6:32: error: can't cast from 'null' to 'Reference<string>' in 'strict null mode'. That is the null, which is where the instance-field and let cases report too.

Also now an error, as it already is for an instance field and a let: static s: string = null under strict null checks.

Test: test-compile-diagnostic-location-static-field-initializer (error text and position; fails on a stack dump, an assertion, or a 1:1 location).

ctest -C Release -j 8 --timeout 300: 100% passed, 0 failed out of 4089.

🤖 Generated with Claude Code

`class A { static s: Ref<string> = null; }` compiled with no diagnostic,
while the same initializer on an instance field or a `let` is an error.
registerVariable returned no type for the field, and the field was
registered anyway: the cast error, postponed like every message, was
never shown because the module did not fail. The dynamic-import twin
of this code already checked for it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ASDAlexander77
ASDAlexander77 merged commit 3a21f25 into main Oct 17, 2026
2 checks passed
@ASDAlexander77
ASDAlexander77 deleted the static-field-init-error branch October 17, 2026 14:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant