Skip to content

[NFC] Refactor GUFA's NullLocation and CaughtExnRefLocation into RootLocation#7822

Merged
kripken merged 7 commits intoWebAssembly:mainfrom
kripken:cont.gufa
Aug 13, 2025
Merged

[NFC] Refactor GUFA's NullLocation and CaughtExnRefLocation into RootLocation#7822
kripken merged 7 commits intoWebAssembly:mainfrom
kripken:cont.gufa

Conversation

@kripken
Copy link
Copy Markdown
Member

@kripken kripken commented Aug 13, 2025

Both locations are just roots in the graph: sources of info that we will only
ever know the type of, and nothing more precise. It is simpler to have a
single RootLocation for them both, and will simplify adding Continuations
later.

@kripken kripken requested a review from tlively August 13, 2025 17:24
Comment on lines +505 to +506
// exnref from a catch etc. - in all these cases, all we know is the type and
// nothing more, so these are simple typed roots in the graph.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For the default local value and default struct field value, we know the values (zero) in addition to the types. Why are they lumped in with things like caught exceptions, for which we really don't know the value?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They are both roots in the graph, hence the shared name for them. They are fixed points in the graph that we will never learn anything more about, with fixed values (one value is null, the other is "anything of this type", but that's the only difference).

Copy link
Copy Markdown
Member

@tlively tlively left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice simplification!

@kripken kripken merged commit 0f58d24 into WebAssembly:main Aug 13, 2025
16 checks passed
@kripken kripken deleted the cont.gufa branch August 13, 2025 20:54
kripken added a commit that referenced this pull request Aug 15, 2025
RootLocation, added in #7822, was overly-ambitious in how much it
simplified. It turns out that there are situations where we need the same
type for both a null and an "unknown" of that type, and a single RootLocation
is therefore not enough (the specific situation the fuzzer found involves
exnref, but perhaps others are possible too).

To fix this, refactor back to two locations, NullLocation and TypeLocation,
where the latter is at least shared by exn and cont as a place with an
unknown value of a type.
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.

2 participants