-
Notifications
You must be signed in to change notification settings - Fork 14k
rustc_symbol_mangling: support structural constants and &str in v0. #87194
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
Conversation
|
Nice! Thanks for moving on that so quickly, @eddyb! For reference, here is a link to the current grammar: https://github.com/rust-lang/rfcs/blob/master/text/2603-rust-symbol-name-mangling-v0.md#syntax-of-mangled-names |
|
And here is the relevant part of the grammar that this PR will supersede: |
|
This looks great! So now we just need support for this to land in |
This comment has been minimized.
This comment has been minimized.
|
I extended LLVM Rust demangler with support for proposed grammar. Apart from issue with Since you are also updating the test cases here. I remember having to change the |
This comment has been minimized.
This comment has been minimized.
Great catch, @tmiasko! |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
f169162 to
af68db1
Compare
This comment has been minimized.
This comment has been minimized.
|
What remains to be done here? Can I help move this along somehow? |
|
If I understand correctly the sequence for making progress here is:
Does that sound right, @eddyb & @tmiasko? EDIT: Only the first three steps are needed to merge this PR. |
|
Apologies for not leaving a comment with the status, I've had an in-progress |
|
Demangling PR up at rust-lang/rustc-demangle#55 - next step is submitting the RFC amendment, I'll try to get to that later today. |
af68db1 to
2c1d655
Compare
|
I've opened the RFC amendment PR (rust-lang/rfcs#3161 - should someone FCP it?) and just pushed a few commits with We've already done a crater run through #85530, so I think we're only blocked on the RFC amendment (and reviews, I guess? if any are left). |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
michaelwoerister
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
From my point of view this looks good to go! Maybe @oli-obk wants to have a closer look at the interactions with const-eval?
|
@bors r=michaelwoerister,oli-obk |
|
📌 Commit b4fcf1b has been approved by |
|
@bors rollup=never |
|
⌛ Testing commit b4fcf1b with merge 707a1c4d93cbf4ad2886d4327d8d9be3bae4a76a... |
This comment has been minimized.
This comment has been minimized.
|
💔 Test failed - checks-actions |
|
Hopefully #87194 (comment) is fixed by the new commit to @bors r=michaelwoerister,oli-obk |
|
📌 Commit 24526bb has been approved by |
|
☀️ Test successful - checks-actions |
…ngling-scheme, r=wesleywiser sess: default to v0 symbol mangling on nightly cc #60705 rust-lang/compiler-team#938 Rust's current mangling scheme depends on compiler internals; loses information about generic parameters (and other things) which makes for a worse experience when using external tools that need to interact with Rust symbol names; is inconsistent; and can contain `.` characters which aren't universally supported. Therefore, Rust has defined its own symbol mangling scheme which is defined in terms of the Rust language, not the compiler implementation; encodes information about generic parameters in a reversible way; has a consistent definition; and generates symbols that only use the characters `A-Z`, `a-z`, `0-9`, and `_`. Support for the new Rust symbol mangling scheme has been added to upstream tools that will need to interact with Rust symbols (e.g. debuggers). This pull request changes the default symbol mangling scheme from the legacy scheme to the new Rust mangling scheme on nightly. The following pull requests implemented v0 mangling in rustc (if I'm missing any, let me know): - #57967 - #63559 - #75675 - #77452 - #77554 - #83767 - #87194 - #87789 Rust's symbol mangling scheme has support in the following external tools: - `binutils`/`gdb` (GNU `libiberty`) - [[PATCH] Move rust_{is_mangled,demangle_sym} to a private libiberty header. ](https://gcc.gnu.org/pipermail/gcc-patches/2019-June/523011.html) committed as gcc-mirror/gcc@979526c - [[PATCH] Simplify and generalize rust-demangle's unescaping logic. ](https://gcc.gnu.org/pipermail/gcc-patches/2019-August/527835.html) committed as gcc-mirror/gcc@42bf58b - [[PATCH] Remove some restrictions from rust-demangle. ](https://gcc.gnu.org/pipermail/gcc-patches/2019-September/530445.html) committed as gcc-mirror/gcc@e1cb00d - [[PATCH] Refactor rust-demangle to be independent of C++ demangling. ](https://gcc.gnu.org/pipermail/gcc-patches/2019-November/533719.html) ([original submission](https://gcc.gnu.org/pipermail/gcc-patches/2019-October/532388.html)) committed as gcc-mirror/gcc@32fc371 - [[PATCH] Support the new ("v0") mangling scheme in rust-demangle. ](https://gcc.gnu.org/pipermail/gcc-patches/2020-November/558905.html) ([original submission](https://gcc.gnu.org/pipermail/gcc-patches/2020-March/542012.html)) committed as gcc-mirror/gcc@8409649 - `lldb`/`llvm-objdump`/`llvm-nm`/`llvm-symbolizer`/`llvm-cxxfilt`/etc - llvm/llvm-project@7310403 - llvm/llvm-project@c8c2b46 - llvm/llvm-project@0a2d4f3 - Linux `perf` - `valgrind` - [Update demangler to support Rust v0 name mangling.](https://bugs.kde.org/show_bug.cgi?id=431306) #85530 (comment) contains a summary of the most recent crater run of the v0 mangling, and the remaining issues from that were fixed by #87194 (confirmed by follow-up crater run, #85530 (comment)). `@rustbot` label +T-compiler r? `@michaelwoerister`
This PR should unblock #85530 (except for float
constgenerics, which AFAIK should've never worked).(cc @tmiasko could the #85530 (comment) failures be retried with a quick crater "subset" run of this PR + changing the default to
v0? Just to make sure I didn't miss anything other than the floats)The encoding is the one suggested before in e.g. #61486 (comment), tho this PR won't by itself finish #61486, before closing that we'd likely want to move to @oli-obk's "valtrees" (i.e. #83234 and other associated work).
EDITs:
switched unit/tuple/braced-with-named-fields
<const-fields>prefixes from"u"/"T"/""to"U"/"T"/"S"to avoid the ambiguity reported by @tmiasko in rustc_symbol_mangling: support structural constants and &str in v0. #87194 (comment).rustc-demanglePR: v0: demangle structural constants and &str. rustc-demangle#55RFC amendment PR: [RFC2603] Extend
<const>to includestrand structural constants. rfcs#3161added tests (temporarily using my fork of
rustc-demangle)r? @michaelwoerister