Skip to content

interpret: when passing an argument fails, point at that argument#154263

Merged
rust-bors[bot] merged 1 commit intorust-lang:mainfrom
RalfJung:interpret-arg-passing-spans
Mar 25, 2026
Merged

interpret: when passing an argument fails, point at that argument#154263
rust-bors[bot] merged 1 commit intorust-lang:mainfrom
RalfJung:interpret-arg-passing-spans

Conversation

@RalfJung
Copy link
Member

For a long time now, we did some contortions so that when something goes wrong while initializing the arguments for a function, we point at the call site rather than the callee. Historically, this had to be done because the "current location" in the callee pointed at the first instruction, which would obviously be nonsense. A while ago we gained the ability in the interpreter for the "current location" to be just a span that we point at for errors, but we never reevaluated the decision for how spans are handled during function calls. (We did use this "just a span" location for errors during the initial stack frame setup, but not for argument initialization.)

There's no always-great choice for pointing at the caller vs the callee: when they disagree about the type of an argument, either side could be wrong. If We do two typed copies in that case, one at the caller type and one at the callee type. Arguably we should point at the one that goes wrong, but we don't have a good way to expose that.

What ultimately pushed me over the edge towards pointing at the callee are two points:

  • This provides strictly more information. if we point at the callee, the caller is available in the stacktrace. But if we point at the caller, then it might be impossible to figure out the actual callee if a function pointer or dyn call is involved.
  • As part of resolving some long-standing questions around retags I am moving retagging to become part of validation, which means the retag and protector initialization of function arguments will happen during argument initialization. These currently point at the argument inside the callee, which I think is strictly preferable for these errors.

The diff will be much smaller with whitespace changes hidden.

@rustbot
Copy link
Collaborator

rustbot commented Mar 23, 2026

The Miri subtree was changed

cc @rust-lang/miri

Some changes occurred to the CTFE machinery

cc @oli-obk, @lcnr

Some changes occurred to the CTFE / Miri interpreter

cc @rust-lang/miri

@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 Mar 23, 2026
@rustbot
Copy link
Collaborator

rustbot commented Mar 23, 2026

r? @jieyouxu

rustbot has assigned @jieyouxu.
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: compiler, mir
  • compiler, mir expanded to 69 candidates
  • Random selection from 13 candidates

@rust-log-analyzer

This comment has been minimized.

Copy link
Contributor

@oli-obk oli-obk left a comment

Choose a reason for hiding this comment

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

@rust-bors
Copy link
Contributor

rust-bors bot commented Mar 25, 2026

📌 Commit c0e6c76 has been approved by oli-obk

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 Mar 25, 2026
@oli-obk oli-obk assigned oli-obk and unassigned jieyouxu Mar 25, 2026
rust-bors bot pushed a commit that referenced this pull request Mar 25, 2026
…uwer

Rollup of 22 pull requests

Successful merges:

 - #153049 (Add `-Zsanitize=kernel-hwaddress`)
 - #153702 (Add macro matcher for `guard` fragment specifier)
 - #154200 (debuginfo: emit DW_TAG_call_site entries)
 - #154263 (interpret: when passing an argument fails, point at that argument)
 - #154269 (miri recursive validation: only check one layer deep)
 - #154313 (Init `self_decl` with a correct visibility)
 - #154344 (Update LLVM to 22.1.2)
 - #154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
 - #154351 (Overhaul `Erasable` impls)
 - #154363 (delegation: fix zero-args nested delegation ICE)
 - #154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
 - #151148 (Add functions to `GrowableBitSet`)
 - #154090 (Move tests in the statics category)
 - #154112 (some `tests/ui/macros` cleanup)
 - #154131 (begin `tests/ui/structs-enums` cleanup)
 - #154216 (unstably mark `NonNull::with_exposed_provenance` as const)
 - #154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
 - #154233 (Move ui/issues tests to relevant subdirectories)
 - #154288 (Fix typo in doc comment for `char::to_titlecase`)
 - #154355 (delegation: add const type ICE test)
 - #154358 (install-template.sh: Optimize by using Bourne shell builtins.)
 - #154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
@rust-bors rust-bors bot merged commit 27f9b7c into rust-lang:main Mar 25, 2026
11 checks passed
@rustbot rustbot added this to the 1.96.0 milestone Mar 25, 2026
github-actions bot pushed a commit to rust-lang/miri that referenced this pull request Mar 26, 2026
…uwer

Rollup of 22 pull requests

Successful merges:

 - rust-lang/rust#153049 (Add `-Zsanitize=kernel-hwaddress`)
 - rust-lang/rust#153702 (Add macro matcher for `guard` fragment specifier)
 - rust-lang/rust#154200 (debuginfo: emit DW_TAG_call_site entries)
 - rust-lang/rust#154263 (interpret: when passing an argument fails, point at that argument)
 - rust-lang/rust#154269 (miri recursive validation: only check one layer deep)
 - rust-lang/rust#154313 (Init `self_decl` with a correct visibility)
 - rust-lang/rust#154344 (Update LLVM to 22.1.2)
 - rust-lang/rust#154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
 - rust-lang/rust#154351 (Overhaul `Erasable` impls)
 - rust-lang/rust#154363 (delegation: fix zero-args nested delegation ICE)
 - rust-lang/rust#154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
 - rust-lang/rust#151148 (Add functions to `GrowableBitSet`)
 - rust-lang/rust#154090 (Move tests in the statics category)
 - rust-lang/rust#154112 (some `tests/ui/macros` cleanup)
 - rust-lang/rust#154131 (begin `tests/ui/structs-enums` cleanup)
 - rust-lang/rust#154216 (unstably mark `NonNull::with_exposed_provenance` as const)
 - rust-lang/rust#154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
 - rust-lang/rust#154233 (Move ui/issues tests to relevant subdirectories)
 - rust-lang/rust#154288 (Fix typo in doc comment for `char::to_titlecase`)
 - rust-lang/rust#154355 (delegation: add const type ICE test)
 - rust-lang/rust#154358 (install-template.sh: Optimize by using Bourne shell builtins.)
 - rust-lang/rust#154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
@RalfJung RalfJung deleted the interpret-arg-passing-spans branch March 26, 2026 06:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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.

5 participants