Skip to content

asm const ptr: move name generation to asm-specific logic - #164808

Open
folkertdev wants to merge 2 commits into
rust-lang:mainfrom
folkertdev:asm-const-ptr-move-name
Open

folkertdev wants to merge 2 commits into
rust-lang:mainfrom
folkertdev:asm-const-ptr-move-name

Conversation

@folkertdev

@folkertdev folkertdev commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

tracking issue: #128464

I'm trying to make a fix for #164774, and this name generation gets in the way.

So, move the logic needed to give constants that are passed to global assembly a globally unique name out of the generic helper, and into asm-specific logic instead.

LLVM Values are deduplicated so we need to prevent generating a globally unique name for the same value multiple times. So, I added a small cache. A benefit is that we also deduplicate LLVM constants now, compare the added test versus https://godbolt.org/z/1ajW19hdT.

r? codegen
cc @nbdd0121

@rustbot rustbot added A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Oct 23, 2026
@folkertdev

Copy link
Copy Markdown
Contributor Author

r? @Amanieu

@Amanieu

Amanieu commented Nov 13, 2026

Copy link
Copy Markdown
Member

@bors r+

@rust-bors

rust-bors Bot commented Nov 13, 2026

Copy link
Copy Markdown
Contributor

📌 Commit c3318cb has been approved by Amanieu

It is now in the queue for this repository.

@rust-bors rust-bors Bot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Nov 13, 2026
Zalathar added a commit to Zalathar/rust that referenced this pull request Nov 13, 2026
…, r=Amanieu

asm const ptr: move name generation to asm-specific logic

tracking issue: rust-lang#128464

I'm trying to make a fix for rust-lang#164774, and this name generation gets in the way.

So, move the logic needed to give constants that are passed to global assembly a globally unique name out of the generic helper, and into asm-specific logic instead.

LLVM `Value`s are deduplicated so we need to prevent generating a globally unique name for the same value multiple times. So, I added a small cache. A benefit is that we also deduplicate LLVM constants now, compare the added test versus https://godbolt.org/z/1ajW19hdT.

r? codegen
cc @nbdd0121
Zalathar added a commit to Zalathar/rust that referenced this pull request Nov 13, 2026
Add a `!type` annotation to a vtable for every supertrait that is a prefix of the vtable

tracking issue: rust-lang#68262

This fixes a miscompilation where a vtable was incorrectly eliminated because it was only used by a supertrait.

In https://godbolt.org/z/8TE1WMvac, `call_super` could be applied to both `A` and `B`, but it incorrectly just always calls the `B` method. The vtable for A has been eliminated.

The fix here only works for the first supertrait in the list, or later ones if they have no methods. So in `trait Foo: A + B`, there is still a bug when B actually has methods (and its vtable is not a prefix of `Foo`s vtable).

In that case the vtable for `B` does not get any `!type` annotations, which provides incomplete information to VFE and it may therefore miscompile. That needs some further refactoring, which is blocked on rust-lang#164808.

Best reviewed commit-by-commit.
rust-bors Bot pushed a commit that referenced this pull request Nov 13, 2026
Rollup of 17 pull requests

Successful merges:

 - #160618 (require a consistent codegen backend when -Zllvm-target-feature is present)
 - #164043 (alloc: Unstably add `Vec::repeat` and `Vec::repeat_in`)
 - #164808 (asm const ptr: move name generation to asm-specific logic)
 - #164823 (Use `DerefMut` and `IndexMut` before `&raw mut` autoborrow)
 - #165475 (Add a `!type` annotation to a vtable for every supertrait that is a prefix of the vtable)
 - #165568 (rustdoc: Suggest corrections for reference label typos)
 - #165924 (rustc_codegen_gcc subtree update 2026-11-13)
 - #165927 (Remove `const_struct` from `rustc_codegen_ssa`)
 - #164362 (Emit note for `non_exhaustive` within defining crate for `unreachable_patterns`)
 - #164997 (Fix as str suggestion in subpattern)
 - #165825 (make `Complex<x87_f80>` ABI-compatible with C)
 - #165868 (Small changes to dyn compatibility)
 - #165879 (Add `#[rustc_test_entrypoint_marker]` back !)
 - #165903 (Fix borrowck ICE when a borrow outlives a local in a const block)
 - #165914 (Use `trim_prefix` in bootstrap)
 - #165919 (tests: accept better behavior on underaligned accesses)
 - #165936 (Enhance documentation for try_clone File implementation)
@Zalathar

Copy link
Copy Markdown
Member

@bors r-

@rust-bors rust-bors Bot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Nov 14, 2026
@rust-bors

rust-bors Bot commented Nov 14, 2026

Copy link
Copy Markdown
Contributor

This pull request was unapproved.

This PR was contained in a rollup (#165944), which was unapproved.

View changes since this unapproval

Zalathar added a commit to Zalathar/rust that referenced this pull request Nov 14, 2026
Add a `!type` annotation to a vtable for every supertrait that is a prefix of the vtable

tracking issue: rust-lang#68262

This fixes a miscompilation where a vtable was incorrectly eliminated because it was only used by a supertrait.

In https://godbolt.org/z/8TE1WMvac, `call_super` could be applied to both `A` and `B`, but it incorrectly just always calls the `B` method. The vtable for A has been eliminated.

The fix here only works for the first supertrait in the list, or later ones if they have no methods. So in `trait Foo: A + B`, there is still a bug when B actually has methods (and its vtable is not a prefix of `Foo`s vtable).

In that case the vtable for `B` does not get any `!type` annotations, which provides incomplete information to VFE and it may therefore miscompile. That needs some further refactoring, which is blocked on rust-lang#164808.

Best reviewed commit-by-commit.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants