Repository navigation
Conversation
SetupParams left ignoreAllAutogatesEnv, useRealTimers and
flushActorStorage without initializers. Aggregate initialization
(`{...}`) zeroes them, but uncaught-exception-test's "reports an
internal exception to the isolate's observer" case declares
`TestFixture::SetupParams params;`, which leaves them indeterminate.
buildConfig() then reads ignoreAllAutogatesEnv, and UBSan stops the
test:
test-fixture.c++:287:57: runtime error: load of value 226, which
is not a valid value for type 'bool'
That fails uncaught-exception-test in every edgeworker master
pipeline's ubsan job.
Give the bools `= false`. Clang rejects member initializers that the
enclosing class's own default argument depends on before the class is
complete, so replace TestFixture's `= {.useRealTimers = false}`
default argument with a parameterless constructor that delegates.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
✅ Approved — This is a small, correct fix for reading uninitialized bools in a test fixture. The constructor change is needed for the new initializers and keeps every existing call site working.
The decision is advisory: this review is a comment and never approves, blocks or requests changes on the pull request.
✅ All checks passed
📋 Code Quality: ✅ LGTM
The default member initializers fix the indeterminate bools in a default-initialized SetupParams. The delegating parameterless constructor keeps the old default-argument behaviour and avoids Clang's error about an incomplete enclosing class.
📝 Documentation: ✅ LGTM
The new comment above the constructors accurately describes why they are written this way.
Reviewed commit: ab282f1a
fhanau
approved these changes
Nov 12, 2026
jasnell
approved these changes
Nov 12, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
TestFixture::SetupParamshad no initializers onignoreAllAutogatesEnv,useRealTimersandflushActorStorage. Aggregate initialization ({...}) zeroes them, so the existing callers were fine. The new "reports an internal exception to the isolate's observer and the request's, once" case inuncaught-exception-test.c++declaresTestFixture::SetupParams params;, which leaves them indeterminate.buildConfig()then readsignoreAllAutogatesEnv, and UBSan aborts:This fails
@workerd//src/workerd/io:uncaught-exception-test(both variants) in the ubsan job of every edgeworker master pipeline since the test landed: 16 of 16 that reached the job on 2026-11-12.Change
= false.TestFixture(SetupParams&& params = {.useRealTimers = false})becomes a parameterless constructor that delegates, plusTestFixture(SetupParams&&).Testing
bazel test --config=ubsan --runs_per_test=5 @workerd//src/workerd/io:uncaught-exception-test@ @workerd//src/workerd/io:uncaught-exception-test@all-autogates: 5/5 pass. Without the change, the same command fails with the error above.//src/workerd/tests:test-fixturebuilds.bench-pumptoandbench-stream-pipingfail at this base too: they still use the removedjsg::BackingStore.🤖 Generated with Claude Code