Skip to content

Conversation

folkertdev
Copy link
Contributor

tracking issue: #81391
fixes #131639

Some background: the cmse-nonsecure-call calling convention is used for a call from "secure" to "non-secure" code. To make sure that "non-secure" cannot read any secrets, restrictions are put on the signatures of functions with this calling convention: they can only use 4 arguments for passing arguments, and one register for passing a result. No arguments are passed via the stack, and all other registers are cleared before the call.

We check during hir_ty_lowering that the signature follows these rules. We do that by determining and then inspecting the layout of the type. That works well overall, but can run into asserts when the type itself is ill-formed. This PR fixes one such case.

I believe that the fix here, just erasing the regions, is the right shape, but there may be some nuance that I'm missing.

r? types

@folkertdev folkertdev added the F-abi_c_cmse_nonsecure_call `#![feature(abi_c_cmse_nonsecure_call)]` label Sep 16, 2025
@rustbot
Copy link
Collaborator

rustbot commented Sep 16, 2025

HIR ty lowering was modified

cc @fmease

@rustbot rustbot added 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 Sep 16, 2025
@lcnr
Copy link
Contributor

lcnr commented Sep 30, 2025

r? lcnr

@bors r+ rollup

@bors
Copy link
Collaborator

bors commented Sep 30, 2025

📌 Commit 401857a has been approved by lcnr

It is now in the queue for this repository.

@rustbot rustbot assigned lcnr and unassigned jackh726 Sep 30, 2025
@bors bors 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 Sep 30, 2025
bors added a commit that referenced this pull request Sep 30, 2025
Rollup of 5 pull requests

Successful merges:

 - #140916 (Fix unuseful span in type error in some format_args!() invocations)
 - #146011 (Point at fn bound that introduced lifetime obligation)
 - #146649 (cmse: fix 'region variables should not be hashed')
 - #147109 (Rename various "concrete opaque type" things to say "hidden type")
 - #147167 (Don't condition RUSTDOC_LIBDIR on `--no-doc`)

r? `@ghost`
`@rustbot` modify labels: rollup
@bors bors merged commit 5a6ac8c into rust-lang:master Sep 30, 2025
10 checks passed
@rustbot rustbot added this to the 1.92.0 milestone Sep 30, 2025
rust-timer added a commit that referenced this pull request Sep 30, 2025
Rollup merge of #146649 - folkertdev:cmse-call-erase-regions, r=lcnr

cmse: fix 'region variables should not be hashed'

tracking issue: #81391
fixes #131639

Some background: the `cmse-nonsecure-call` calling convention is used for a call from "secure" to "non-secure" code. To make sure that "non-secure" cannot read any secrets, restrictions are put on the signatures of functions with this calling convention: they can only use 4 arguments for passing arguments, and one register for passing a result. No arguments are passed via the stack, and all other registers are cleared before the call.

We check during `hir_ty_lowering` that the signature follows these rules. We do that by determining and then inspecting the layout of the type. That works well overall, but can run into asserts when the type itself is ill-formed. This PR fixes one such case.

I believe that the fix here, just erasing the regions, is the right shape, but there may be some nuance that I'm missing.

r? types
Zalathar added a commit to Zalathar/rust that referenced this pull request Oct 1, 2025
Don't create a top-level `true` directory when running UI tests

The funny thing about writing `-Cincremental=true` is that it *does* enable incremental compilation ... using an incremental compilation dir of `./true`.

And for UI tests, that ends up creating a `true` directory in the repository root, which is annoying.

Fortunately, compiletest has an existing `//@ incremental` directive that takes care of creating an empty incremental directory, and passing it to `-Cincremental`.

---

I have manually checked that reverting rust-lang#146649 still causes the updated test to fail.
rust-timer added a commit that referenced this pull request Oct 1, 2025
Rollup merge of #147217 - Zalathar:true, r=petrochenkov

Don't create a top-level `true` directory when running UI tests

The funny thing about writing `-Cincremental=true` is that it *does* enable incremental compilation ... using an incremental compilation dir of `./true`.

And for UI tests, that ends up creating a `true` directory in the repository root, which is annoying.

Fortunately, compiletest has an existing `//@ incremental` directive that takes care of creating an empty incremental directory, and passing it to `-Cincremental`.

---

I have manually checked that reverting #146649 still causes the updated test to fail.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
F-abi_c_cmse_nonsecure_call `#![feature(abi_c_cmse_nonsecure_call)]` S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. 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.

ICE: region variables should not be hashed
5 participants