]> git.lizzy.rs Git - rust.git/commit - src/tools/miri
Auto merge of #81360 - Aaron1011:trait-caller-loc, r=nagisa
authorbors <bors@rust-lang.org>
Sat, 10 Jul 2021 14:11:39 +0000 (14:11 +0000)
committerbors <bors@rust-lang.org>
Sat, 10 Jul 2021 14:11:39 +0000 (14:11 +0000)
commit3982eb35cabe3a99194d768d34a92347967c3fa2
treeabbf5c8c7ae1393c4ffd8f6bec12e02a14682ccd
parenta84d1b21aea9863f0fc5f436b4982d145dade646
parent6fd6624045d88bec706514a45257f9d0a4586923
Auto merge of #81360 - Aaron1011:trait-caller-loc, r=nagisa

Support forwarding caller location through trait object method call

Since PR #69251, the `#[track_caller]` attribute has been supported on
traits. However, it only has an effect on direct (monomorphized) method
calls. Calling a `#[track_caller]` method on a trait object will *not*
propagate caller location information - instead, `Location::caller()` will
return the location of the method definition.

This PR forwards caller location information when `#[track_caller]` is
present on the method definition in the trait. This is possible because
`#[track_caller]` in this position is 'inherited' by any impls of that
trait, so all implementations will have the same ABI.

This PR does *not* change the behavior in the case where
`#[track_caller]` is present only on the impl of a trait.
While all implementations of the method might have an explicit
`#[track_caller]`, we cannot know this at codegen time, since other
crates may have impls of the trait. Therefore, we keep the current
behavior of not forwarding the caller location, ensuring that all
implementations of the trait will have the correct ABI.

See the modified test for examples of how this works
compiler/rustc_middle/src/query/mod.rs
compiler/rustc_typeck/src/collect.rs