Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix stringview subtyping #6440

Merged
merged 3 commits into from
Mar 26, 2024
Merged

Fix stringview subtyping #6440

merged 3 commits into from
Mar 26, 2024

Conversation

tlively
Copy link
Member

@tlively tlively commented Mar 26, 2024

The stringview types (stringview_wtf8, stringview_wtf16, and
stringview_iter) are not subtypes of any even though they are supertypes of
none. This breaks the type system invariant that types share a bottom type iff
they share a top type, but we can work around that.

@tlively tlively requested a review from kripken March 26, 2024 04:09
@tlively
Copy link
Member Author

tlively commented Mar 26, 2024

This stack of pull requests is managed by Graphite. Learn more about stacking.

Join @tlively and the rest of your teammates on Graphite Graphite

@@ -456,7 +456,7 @@ std::optional<HeapType> getBasicHeapTypeLUB(HeapType::BasicHeapType a,
if (a == b) {
return a;
}
if (HeapType(a).getBottom() != HeapType(b).getBottom()) {
if (HeapType(a).getTop() != HeapType(b).getTop()) {
Copy link
Member

Choose a reason for hiding this comment

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

Will we not have many other places like this? This worries me...

How bad are things if we don't do this? I may be missing that part.

Copy link
Member Author

Choose a reason for hiding this comment

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

Without this change, we would accept (or produce, in the case of TypeGeneralizing) modules that have stringviews flowing into anyref locations, which V8 would reject. GUFA could also produce casts to stringview types for such modules, which V8 would also reject.

Copy link
Member

Choose a reason for hiding this comment

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

Accepting such inputs worries me less as we can say that is user error (and we don't expect to actually see it, nor have we). For GUFA I think we have a fix, and for TypeGeneralizing it should be simple as well, I think? I guess I have a clearer idea of the downsides of those workarounds than such a fundamental change to the type system.

Copy link
Member Author

Choose a reason for hiding this comment

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

I'd rather fix the stringref spec, but since we can't, it seems best to at least implement stringref correctly. That seems much better to me than having to special case strings in various places because we haven't implemented their types correctly.

The stringview types (`stringview_wtf8`, `stringview_wtf16`, and
`stringview_iter`) are not subtypes of `any` even though they are supertypes of
`none`. This breaks the type system invariant that types share a bottom type iff
they share a top type, but we can work around that.
@tlively
Copy link
Member Author

tlively commented Mar 26, 2024

Oops, I have some stray changes in here.

Copy link
Member

@kripken kripken left a comment

Choose a reason for hiding this comment

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

lgtm with fuzzing. I suggest also filing a stringref issue for posterity.

@tlively
Copy link
Member Author

tlively commented Mar 26, 2024

Fuzzer is still going after 20k+ iterations, so I'm going to call it good enough.

@tlively tlively merged commit 165953e into main Mar 26, 2024
14 checks passed
@tlively tlively deleted the fix-stringview-typing branch March 26, 2024 20:38
@gkdn gkdn mentioned this pull request Aug 31, 2024
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