Skip to content

volatile: allow accesses to non-AM memory to trap - #160564

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
RalfJung:volatile-with-trap
Sep 3, 2026
Merged

volatile: allow accesses to non-AM memory to trap#160564
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
RalfJung:volatile-with-trap

Conversation

@RalfJung

@RalfJung RalfJung commented Aug 5, 2026

Copy link
Copy Markdown
Member

View all comments

Fixes rust-lang/unsafe-code-guidelines#610 by saying that yes, volatile accesses may trap. This also fixes what I believe to be the last case of "time-traveling UB" we have in Rust: with this change, UB always fully sequenced wrt observable events (I/O and volatile accesses). UB can still travel around unobservable events such as non-volatile memory accesses.

For writes, LLVM has already implemented the new semantics for a long time. For reads, LLVM only recently implemented the "may trap" semantics with LLVM 23. We still allow compiling rustc with older versions of LLVM. To (hopefully) prevent old LLVM from screwing this up with optimizations, this PR makes the backend emit an inline asm block without willreturn, which should prevent optimizations that break programs where a volatile load traps.

Cc @rust-lang/opsem @rust-lang/wg-llvm

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-libs Relevant to the library team, which will review and decide on the PR/issue. labels Aug 5, 2026
@rustbot

rustbot commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

r? @jhpratt

rustbot has assigned @jhpratt.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: libs
  • libs expanded to 12 candidates
  • Random selection from JohnTitor, Mark-Simulacrum, clarfonthey, jhpratt, nia-e

@cuviper

cuviper commented Aug 5, 2026

Copy link
Copy Markdown
Member

For reads, LLVM only recently implemented the "may trap" semantics with LLVM 23.

However, fixes for miscompilations often do not get backported to past LLVM versions, so using rustc with older versions of LLVM comes with an increased risk of soundness bugs.

I think the intent here is mainly to acknowledge the existence of bugs in LLVM which independent packagers might want to patch for Rust's sake. It seems quite different to use this for actual UB semantics, because now you're talking about safety guarantees that cannot be upheld (IIUC).

@RalfJung

RalfJung commented Aug 5, 2026

Copy link
Copy Markdown
Member Author

We do sometimes have soundness bugs that are fixed by an LLVM update (so you still have the bug if you use an older LLVM).

But yeah this is different since we'd basically be introducing a new way for rustc+LLVM22 to be wrong rather than just failing to fix an old way. I just don't like having to wait another 6 months for this. :/

I wonder if there's something we can do by using more creative codegen when we are running with LLVM22, like an inline asm block after the volatile read, with that asm not being willreturn. That should prevent LLVM from reordering stuff?

@robofinch

Copy link
Copy Markdown

The access is allowed to trap. It can also cause other side-effects, but those must not affect Rust-allocated memory in any way.

What if the access results in running a signal handler that affects Rust-allocated memory? It seems very desirable for such signal handlers to be sound.

@jhpratt

jhpratt commented Aug 6, 2026

Copy link
Copy Markdown
Member

As a doc-only change, there's no concerns regarding implementation. This solely needs approval from the relevant team (whether that's lang or opsem, not my call).

@RalfJung

RalfJung commented Aug 6, 2026

Copy link
Copy Markdown
Member Author

What if the access results in running a signal handler that affects Rust-allocated memory? It seems very desirable for such signal handlers to be sound.

That's UB. The compiler is allowed to reorder non-volatile accesses around the volatile access.
This PR is specifically about traps (as in, aborting execution). Please take discussion of other effects elsewhere, e.g. a new Zulip thread.

@rustbot rustbot added the A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. label Aug 7, 2026
@RalfJung

RalfJung commented Aug 7, 2026

Copy link
Copy Markdown
Member Author

I have added a little hack for LLVM22 and older that inserts a black_box after the volatile read. That should prevent LLVM from moving later UB to before the volatile read, and it makes the intrinsic as a whole non-willreturn. At least I think that's the case, would be good to have a review by an LLVM expert. :)

r? @nikic
(I know you are on vacation, no rush, this can wait)

@rustbot rustbot assigned nikic and unassigned jhpratt Aug 7, 2026
@RalfJung
RalfJung force-pushed the volatile-with-trap branch from 88113e1 to fabe226 Compare August 7, 2026 09:53
@rust-log-analyzer

This comment has been minimized.

@RalfJung
RalfJung force-pushed the volatile-with-trap branch from fabe226 to 93f262f Compare August 7, 2026 10:29
@rust-log-analyzer

This comment has been minimized.

@RalfJung
RalfJung force-pushed the volatile-with-trap branch from 93f262f to de8aff5 Compare August 7, 2026 13:03
@rust-log-analyzer

This comment has been minimized.

@RalfJung
RalfJung force-pushed the volatile-with-trap branch from de8aff5 to 2f2dead Compare August 7, 2026 13:45
@RalfJung

RalfJung commented Aug 7, 2026

Copy link
Copy Markdown
Member Author

Odd, that test doesn't include any volatile, not sure why it would be affected here... is the stack protector logic itself written in Rust and somehow in the same translation unit so the black_box can affect analyses?

Anyway, it seems like that just means some heuristics will work less well with LLVM 22.

@rust-log-analyzer

This comment has been minimized.

@RalfJung

RalfJung commented Aug 8, 2026

Copy link
Copy Markdown
Member Author

With the inline asm "black box" implementation strategy I think this is good to go also for LLVM22 and older.

@rfcbot merge opsem

Cc @rust-lang/lang -- I think this is a sufficiently low-level point that we only need opsem FCP here, but please speak up if you disagree.

@rust-rfcbot

rust-rfcbot commented Aug 8, 2026

Copy link
Copy Markdown
Collaborator

@RalfJung has proposed to merge this. The next step is review by the rest of the tagged team members:

No concerns currently listed.

Once a majority of reviewers approve (and at most 2 approvals are outstanding), this will enter its final comment period. If you spot a major issue that hasn't been raised at any point in this process, please speak up!

See this document for info about what commands tagged team members can give me.

@rust-rfcbot rust-rfcbot added proposed-final-comment-period Proposed to merge/close by relevant subteam, see T-<team> label. Will enter FCP once signed off. disposition-merge This issue / PR is in PFCP or FCP with a disposition to merge it. labels Aug 8, 2026
@RalfJung RalfJung removed the proposed-final-comment-period Proposed to merge/close by relevant subteam, see T-<team> label. Will enter FCP once signed off. label Aug 8, 2026
@RalfJung

RalfJung commented Sep 2, 2026

Copy link
Copy Markdown
Member Author

Just another test that needs LLVM 23 now due to the black box we insert on LLVM 22. Odd that it did not show up in PR CI.
I added the min-llvm-version annotation. But the test also says

// On LLVM 17 and earlier LLVM's own data layout specifies that i128 has 8 byte alignment,
// while rustc wants it to have 16 byte alignment. This test checks that we handle this
// correctly.

That's all ancient history. Is that test even worth keeping around @nikic?

@bors try jobs=x86_64-gnu-llvm-21-3

@rust-bors

This comment has been minimized.

rust-bors Bot pushed a commit that referenced this pull request Sep 2, 2026
volatile: allow accesses to non-AM memory to trap


try-job: x86_64-gnu-llvm-21-3
@Zalathar

Zalathar commented Sep 2, 2026

Copy link
Copy Markdown
Member

Odd that it did not show up in PR CI.

It looks like the x86_64-gnu-llvm-21 job in PR CI only runs a small subset of tests, and instead relies on the aarch64 jobs to do the real work.

But this particular test (tests/codegen-llvm/i128-x86-align.rs) is //@ only-x86_64, so perhaps it doesn't run against LLVM 21 in PR CI at all.

@rust-bors

rust-bors Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

☀️ Try build successful (CI)
Build commit: cf8cad7 (cf8cad762733051b2dee52cea92eaf3be6f92ebb)
Base parent: 3a43cb6 (3a43cb66f97d08ccde87a00599fac2d3c50eb177)

@RalfJung

RalfJung commented Sep 2, 2026

Copy link
Copy Markdown
Member Author

@bors r=nikic

@rust-bors

rust-bors Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

📌 Commit ece2980 has been approved by nikic

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-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Sep 2, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Sep 2, 2026
volatile: allow accesses to non-AM memory to trap

Fixes rust-lang/unsafe-code-guidelines#610 by saying that yes, volatile accesses may trap. This also fixes what I believe to be the last case of "time-traveling UB" we have in Rust: with this change, UB always fully sequenced wrt observable events (I/O and volatile accesses). UB can still travel around unobservable events such as non-volatile memory accesses.

For writes, LLVM has already implemented the new semantics for a long time. For reads, LLVM only recently implemented the "may trap" semantics with LLVM 23. We still allow compiling rustc with older versions of LLVM. To (hopefully) prevent old LLVM from screwing this up with optimizations, this PR makes the backend emit an inline asm block *without* `willreturn`, which should prevent optimizations that break programs where a volatile load traps.

Cc @rust-lang/opsem @rust-lang/wg-llvm
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Sep 2, 2026
volatile: allow accesses to non-AM memory to trap

Fixes rust-lang/unsafe-code-guidelines#610 by saying that yes, volatile accesses may trap. This also fixes what I believe to be the last case of "time-traveling UB" we have in Rust: with this change, UB always fully sequenced wrt observable events (I/O and volatile accesses). UB can still travel around unobservable events such as non-volatile memory accesses.

For writes, LLVM has already implemented the new semantics for a long time. For reads, LLVM only recently implemented the "may trap" semantics with LLVM 23. We still allow compiling rustc with older versions of LLVM. To (hopefully) prevent old LLVM from screwing this up with optimizations, this PR makes the backend emit an inline asm block *without* `willreturn`, which should prevent optimizations that break programs where a volatile load traps.

Cc @rust-lang/opsem @rust-lang/wg-llvm
rust-bors Bot pushed a commit that referenced this pull request Sep 2, 2026
…uwer

Rollup of 23 pull requests

Successful merges:

 - #162164 (Revert "Implement Debug for C-like enums with a concatenated string")
 - #160564 (volatile: allow accesses to non-AM memory to trap)
 - #161579 (suggest calling a fn item used as the iterator of a `for` loop)
 - #162044 (coverage: Resolve spans to file-coordinates in a separate step)
 - #162120 (Introduce `PerOwnerLoweringState`)
 - #162151 (Test itanium mangling of `f16` and `f128`)
 - #162162 (Don't special-case `!` in stability checks anymore)
 - #162181 (Remove wrong UnusedBraces lint for iterator loop in edition 2024 )
 - #162187 (Rename `thir::ExprKind::Use` to `ValueExpr`)
 - #158401 (mgca: Don't ICE when evaluating ValTrees that contain error constants)
 - #159873 (fuchsia: Add safestack as a supported sanitizer for x86_64 fuchsia)
 - #161847 (Preserve visibility in nested macro import suggestions)
 - #161972 (Improve tests for `#[track_caller]` in async)
 - #162008 (Render the `box` pattern removal diagnostic more actionable & remove `box` expression recovery)
 - #162065 (std: don't reference `libc::O_NOFOLLOW` on VxWorks in `set_perm_nofollow`)
 - #162076 (docs(num): clarify conditions under which error occurs in `impl TryFrom<int> for int`)
 - #162152 (Revert "retrieve supported GCC targets from the sysroot")
 - #162153 (Prefer `LLVMGetVersion` for runtime info)
 - #162168 (fix ICE in project_goals/inherent)
 - #162171 (Explain LoongArch f16 NaN-boxing in inline asm)
 - #162173 (fix supposedly unreachable `bug!` being reachable)
 - #162191 (core: mark float `ClampBounds` methods as `#[inline]`)
 - #162199 (docs(time): clarify exact seconds for hour and minute)
GuillaumeGomez added a commit to GuillaumeGomez/rust that referenced this pull request Sep 2, 2026
volatile: allow accesses to non-AM memory to trap

Fixes rust-lang/unsafe-code-guidelines#610 by saying that yes, volatile accesses may trap. This also fixes what I believe to be the last case of "time-traveling UB" we have in Rust: with this change, UB always fully sequenced wrt observable events (I/O and volatile accesses). UB can still travel around unobservable events such as non-volatile memory accesses.

For writes, LLVM has already implemented the new semantics for a long time. For reads, LLVM only recently implemented the "may trap" semantics with LLVM 23. We still allow compiling rustc with older versions of LLVM. To (hopefully) prevent old LLVM from screwing this up with optimizations, this PR makes the backend emit an inline asm block *without* `willreturn`, which should prevent optimizations that break programs where a volatile load traps.

Cc @rust-lang/opsem @rust-lang/wg-llvm
rust-bors Bot pushed a commit that referenced this pull request Sep 3, 2026
Rollup of 23 pull requests

Successful merges:

 - #157808 (sanitizers: Implement support for the sanitize ignorelist)
 - #160564 (volatile: allow accesses to non-AM memory to trap)
 - #161579 (suggest calling a fn item used as the iterator of a `for` loop)
 - #162044 (coverage: Resolve spans to file-coordinates in a separate step)
 - #162120 (Introduce `PerOwnerLoweringState`)
 - #162151 (Test itanium mangling of `f16` and `f128`)
 - #162162 (Don't special-case `!` in stability checks anymore)
 - #162181 (Remove wrong UnusedBraces lint for iterator loop in edition 2024 )
 - #162187 (Rename `thir::ExprKind::Use` to `ValueExpr`)
 - #158401 (mgca: Don't ICE when evaluating ValTrees that contain error constants)
 - #159873 (fuchsia: Add safestack as a supported sanitizer for x86_64 fuchsia)
 - #161847 (Preserve visibility in nested macro import suggestions)
 - #161972 (Improve tests for `#[track_caller]` in async)
 - #162008 (Render the `box` pattern removal diagnostic more actionable & remove `box` expression recovery)
 - #162065 (std: don't reference `libc::O_NOFOLLOW` on VxWorks in `set_perm_nofollow`)
 - #162076 (docs(num): clarify conditions under which error occurs in `impl TryFrom<int> for int`)
 - #162152 (Revert "retrieve supported GCC targets from the sysroot")
 - #162153 (Prefer `LLVMGetVersion` for runtime info)
 - #162168 (fix ICE in project_goals/inherent)
 - #162171 (Explain LoongArch f16 NaN-boxing in inline asm)
 - #162173 (fix supposedly unreachable `bug!` being reachable)
 - #162191 (core: mark float `ClampBounds` methods as `#[inline]`)
 - #162199 (docs(time): clarify exact seconds for hour and minute)
Zalathar added a commit to Zalathar/rust that referenced this pull request Sep 3, 2026
volatile: allow accesses to non-AM memory to trap

Fixes rust-lang/unsafe-code-guidelines#610 by saying that yes, volatile accesses may trap. This also fixes what I believe to be the last case of "time-traveling UB" we have in Rust: with this change, UB always fully sequenced wrt observable events (I/O and volatile accesses). UB can still travel around unobservable events such as non-volatile memory accesses.

For writes, LLVM has already implemented the new semantics for a long time. For reads, LLVM only recently implemented the "may trap" semantics with LLVM 23. We still allow compiling rustc with older versions of LLVM. To (hopefully) prevent old LLVM from screwing this up with optimizations, this PR makes the backend emit an inline asm block *without* `willreturn`, which should prevent optimizations that break programs where a volatile load traps.

Cc @rust-lang/opsem @rust-lang/wg-llvm
rust-bors Bot pushed a commit that referenced this pull request Sep 3, 2026
Rollup of 29 pull requests

Successful merges:

 - #161694 (add `Complex` ABI run-make test)
 - #162014 (Move more `rustdoc-html` tests using `--test` into the right folder)
 - #162164 (Revert "Implement Debug for C-like enums with a concatenated string")
 - #160564 (volatile: allow accesses to non-AM memory to trap)
 - #161579 (suggest calling a fn item used as the iterator of a `for` loop)
 - #162044 (coverage: Resolve spans to file-coordinates in a separate step)
 - #162120 (Introduce `PerOwnerLoweringState`)
 - #162132 (std: improve safety documentation in UNIX stack overflow code)
 - #162151 (Test itanium mangling of `f16` and `f128`)
 - #162162 (Don't special-case `!` in stability checks anymore)
 - #162181 (Remove wrong UnusedBraces lint for iterator loop in edition 2024 )
 - #162187 (Rename `thir::ExprKind::Use` to `ValueExpr`)
 - #158401 (mgca: Don't ICE when evaluating ValTrees that contain error constants)
 - #159873 (fuchsia: Add safestack as a supported sanitizer for x86_64 fuchsia)
 - #161847 (Preserve visibility in nested macro import suggestions)
 - #161951 (Windows: add fallback if `canonicalize` fails)
 - #161972 (Improve tests for `#[track_caller]` in async)
 - #162008 (Render the `box` pattern removal diagnostic more actionable & remove `box` expression recovery)
 - #162065 (std: don't reference `libc::O_NOFOLLOW` on VxWorks in `set_perm_nofollow`)
 - #162076 (docs(num): clarify conditions under which error occurs in `impl TryFrom<int> for int`)
 - #162152 (Revert "retrieve supported GCC targets from the sysroot")
 - #162153 (Prefer `LLVMGetVersion` for runtime info)
 - #162168 (fix ICE in project_goals/inherent)
 - #162171 (Explain LoongArch f16 NaN-boxing in inline asm)
 - #162173 (fix supposedly unreachable `bug!` being reachable)
 - #162180 (remove outdated next-solver FIXMEs)
 - #162191 (core: mark float `ClampBounds` methods as `#[inline]`)
 - #162195 (docs(time): clarify exact seconds for week and day)
 - #162199 (docs(time): clarify exact seconds for hour and minute)
rust-bors Bot pushed a commit that referenced this pull request Sep 3, 2026
…uwer

Rollup of 25 pull requests

Successful merges:

 - #161694 (add `Complex` ABI run-make test)
 - #162014 (Move more `rustdoc-html` tests using `--test` into the right folder)
 - #162164 (Revert "Implement Debug for C-like enums with a concatenated string")
 - #160564 (volatile: allow accesses to non-AM memory to trap)
 - #161579 (suggest calling a fn item used as the iterator of a `for` loop)
 - #162044 (coverage: Resolve spans to file-coordinates in a separate step)
 - #162120 (Introduce `PerOwnerLoweringState`)
 - #162132 (std: improve safety documentation in UNIX stack overflow code)
 - #162151 (Test itanium mangling of `f16` and `f128`)
 - #162162 (Don't special-case `!` in stability checks anymore)
 - #162181 (Remove wrong UnusedBraces lint for iterator loop in edition 2024 )
 - #162187 (Rename `thir::ExprKind::Use` to `ValueExpr`)
 - #158401 (mgca: Don't ICE when evaluating ValTrees that contain error constants)
 - #159873 (fuchsia: Add safestack as a supported sanitizer for x86_64 fuchsia)
 - #161135 (Add `f16` and `f128` inline ASM support for PowerPC)
 - #161847 (Preserve visibility in nested macro import suggestions)
 - #161972 (Improve tests for `#[track_caller]` in async)
 - #162008 (Render the `box` pattern removal diagnostic more actionable & remove `box` expression recovery)
 - #162065 (std: don't reference `libc::O_NOFOLLOW` on VxWorks in `set_perm_nofollow`)
 - #162076 (docs(num): clarify conditions under which error occurs in `impl TryFrom<int> for int`)
 - #162111 (Update mailmap for Will Crichton and Petr Hosek)
 - #162152 (Revert "retrieve supported GCC targets from the sysroot")
 - #162153 (Prefer `LLVMGetVersion` for runtime info)
 - #162168 (fix ICE in project_goals/inherent)
 - #162171 (Explain LoongArch f16 NaN-boxing in inline asm)
@rust-bors
rust-bors Bot merged commit e48a722 into rust-lang:main Sep 3, 2026
14 checks passed
@rustbot rustbot added this to the 1.100.0 milestone Sep 3, 2026
rust-bors Bot pushed a commit that referenced this pull request Sep 3, 2026
Rollup merge of #160564 - RalfJung:volatile-with-trap, r=nikic

volatile: allow accesses to non-AM memory to trap

Fixes rust-lang/unsafe-code-guidelines#610 by saying that yes, volatile accesses may trap. This also fixes what I believe to be the last case of "time-traveling UB" we have in Rust: with this change, UB always fully sequenced wrt observable events (I/O and volatile accesses). UB can still travel around unobservable events such as non-volatile memory accesses.

For writes, LLVM has already implemented the new semantics for a long time. For reads, LLVM only recently implemented the "may trap" semantics with LLVM 23. We still allow compiling rustc with older versions of LLVM. To (hopefully) prevent old LLVM from screwing this up with optimizations, this PR makes the backend emit an inline asm block *without* `willreturn`, which should prevent optimizations that break programs where a volatile load traps.

Cc @rust-lang/opsem @rust-lang/wg-llvm
@rust-timer

Copy link
Copy Markdown
Collaborator

Note

This PR was benchmarked as part of triage of its containing rollup: triage URL.

Finished benchmarking commit (0181ab7): comparison URL.

Overall result: no relevant changes - no action needed

@rustbot label: -perf-regression

Instruction count

This perf run didn't have relevant results for this metric.

Max RSS (memory usage)

This perf run didn't have relevant results for this metric.

Cycles

This perf run didn't have relevant results for this metric.

Binary size

This perf run didn't have relevant results for this metric.

Bootstrap: missing data
Artifact size: 401.86 MiB -> 401.00 MiB (-0.21%)

pull Bot pushed a commit to LeeeeeeM/miri that referenced this pull request Sep 4, 2026
…uwer

Rollup of 25 pull requests

Successful merges:

 - rust-lang/rust#161694 (add `Complex` ABI run-make test)
 - rust-lang/rust#162014 (Move more `rustdoc-html` tests using `--test` into the right folder)
 - rust-lang/rust#162164 (Revert "Implement Debug for C-like enums with a concatenated string")
 - rust-lang/rust#160564 (volatile: allow accesses to non-AM memory to trap)
 - rust-lang/rust#161579 (suggest calling a fn item used as the iterator of a `for` loop)
 - rust-lang/rust#162044 (coverage: Resolve spans to file-coordinates in a separate step)
 - rust-lang/rust#162120 (Introduce `PerOwnerLoweringState`)
 - rust-lang/rust#162132 (std: improve safety documentation in UNIX stack overflow code)
 - rust-lang/rust#162151 (Test itanium mangling of `f16` and `f128`)
 - rust-lang/rust#162162 (Don't special-case `!` in stability checks anymore)
 - rust-lang/rust#162181 (Remove wrong UnusedBraces lint for iterator loop in edition 2024 )
 - rust-lang/rust#162187 (Rename `thir::ExprKind::Use` to `ValueExpr`)
 - rust-lang/rust#158401 (mgca: Don't ICE when evaluating ValTrees that contain error constants)
 - rust-lang/rust#159873 (fuchsia: Add safestack as a supported sanitizer for x86_64 fuchsia)
 - rust-lang/rust#161135 (Add `f16` and `f128` inline ASM support for PowerPC)
 - rust-lang/rust#161847 (Preserve visibility in nested macro import suggestions)
 - rust-lang/rust#161972 (Improve tests for `#[track_caller]` in async)
 - rust-lang/rust#162008 (Render the `box` pattern removal diagnostic more actionable & remove `box` expression recovery)
 - rust-lang/rust#162065 (std: don't reference `libc::O_NOFOLLOW` on VxWorks in `set_perm_nofollow`)
 - rust-lang/rust#162076 (docs(num): clarify conditions under which error occurs in `impl TryFrom<int> for int`)
 - rust-lang/rust#162111 (Update mailmap for Will Crichton and Petr Hosek)
 - rust-lang/rust#162152 (Revert "retrieve supported GCC targets from the sysroot")
 - rust-lang/rust#162153 (Prefer `LLVMGetVersion` for runtime info)
 - rust-lang/rust#162168 (fix ICE in project_goals/inherent)
 - rust-lang/rust#162171 (Explain LoongArch f16 NaN-boxing in inline asm)
@RalfJung
RalfJung deleted the volatile-with-trap branch September 4, 2026 11:56
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. finished-final-comment-period The final comment period is finished for this PR / Issue. I-lang-radar Items that are on lang's radar and will need eventual work or consideration. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-libs Relevant to the library team, which will review and decide on the PR/issue. T-opsem Relevant to the opsem team to-announce Announce this issue on triage meeting

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Allow volatile accesses to trap