Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## next #461 +/- ##
==========================================
+ Coverage 89.23% 89.26% +0.02%
==========================================
Files 61 61
Lines 5074 5087 +13
Branches 949 951 +2
==========================================
+ Hits 4528 4541 +13
Misses 421 421
Partials 125 125 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
- Use the default value for compiler options that are passed as undefined
(e.g. `{ enforceLocktimeGuard: config.x }` with `x` unset), which disabled
the locktime guard or parameter type checks, and only record the known
options in the artifact (unknown keys and the `files` map were copied in).
- Make the old stack slot of a variable anonymous when it is reassigned
outside of a loop or branch, so a mismatch between where the symbol table
records a final use and where code generation reads the variable (like
the ones fixed in #464 and #466) is a compile error instead of reading an
outdated value. This does not change any bytecode, and makes console.log
show the current value of a reassigned variable after its final use.
- Declare new tuple destructuring targets after visiting the right-hand side,
so using one of them there is an UndefinedReferenceError instead of an
internal error.
Adds a test that no variable is read after its final use, for every valid
contract file and for a contract that reads the same variable in every
child of each expression node type.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
mr-zwets
force-pushed
the
fix/compiler-audit-remaining
branch
from
September 29, 2026 09:58
49bb0ef to
37f664f
Compare
Pull request stats
Reviewable churn: 211 lines (net +195), version bumps and generated files excluded. New files: 2
Package source changed without an update to |
This branch was successfully deployed
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.
Opened on behalf of Mathieu G. (mr-zwets), written by Claude Opus 5.5.
Replaces #459, which was opened from the wrong branch by mistake.
Follow-up to the 0.14 audit, meant to land after the 0.14.0 release: the important compiler findings are fixed in #463, #464, #465 and #466, and this PR holds the smaller ones that were left out to keep the release's scope small. Rebased on
next, without the parts those PRs cover.Changes
undefined:{ enforceLocktimeGuard: config.x }withxunset disabled the locktime guard (and the same forenforceFunctionParameterTypes), while the artifact recordedcompiler.options: {}, which reads as the defaults. Options now fall back to their defaults, and only the known options are recorded (unknown keys and thefilesmap were copied into the artifact).console.logshows the current value of a reassigned variable after its final use, instead of the old one.bytes a, bytes b = a.split(1);crashed with an internal error (no location); it is now anUndefinedReferenceError, likeint a = a + 1;.No release notes yet, since the 0.14 section will be closed by then. Suggested lines for the next release:
undefinedwere disabled instead of using their default value, and unknown compiler options were included in the artifact.UndefinedReferenceError.console.logshowed an outdated value for a reassigned variable after its final use.Tests
undefinedoptions still inject the guard, unknown keys are dropped) and a tuple error fixture.console.logof a reassigned variable after its final use.The option, tuple and
console.logtests fail on the currentnext. Recompiling the fixtures gives unchanged bytecode.yarn build,yarn test,yarn lintandyarn spellcheckpass.🤖 Generated with Claude Code