Rollup merge of #92001 - fee1-dead:dmbic-xcrate-fix, r=oli-obk

Fix default_method_body_is_const when used across crates

r? `@oli-obk`

unblocks #91439.
This commit is contained in:
Matthias Krüger 2021-12-16 17:23:13 +01:00 committed by GitHub
commit a97384d94c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 2 deletions

View File

@ -870,8 +870,9 @@ fn should_encode_mir(tcx: TyCtxt<'_>, def_id: LocalDefId) -> (bool, bool) {
let needs_inline = (generics.requires_monomorphization(tcx)
|| tcx.codegen_fn_attrs(def_id).requests_inline())
&& tcx.sess.opts.output_types.should_codegen();
// Only check the presence of the `const` modifier.
let is_const_fn = tcx.is_const_fn_raw(def_id.to_def_id());
// The function has a `const` modifier or is annotated with `default_method_body_is_const`.
let is_const_fn = tcx.is_const_fn_raw(def_id.to_def_id())
|| tcx.has_attr(def_id.to_def_id(), sym::default_method_body_is_const);
let always_encode_mir = tcx.sess.opts.debugging_opts.always_encode_mir;
(is_const_fn, needs_inline || always_encode_mir)
}

View File

@ -1,6 +1,9 @@
#![feature(const_fn_trait_bound)]
#![feature(const_trait_impl)]
pub trait MyTrait {
#[default_method_body_is_const]
fn defaulted_func(&self) {}
fn func(self);
}

View File

@ -0,0 +1,18 @@
// This tests that `default_method_body_is_const` methods can
// be called from a const context when used across crates.
//
// check-pass
#![feature(const_trait_impl)]
// aux-build: cross-crate.rs
extern crate cross_crate;
use cross_crate::*;
const _: () = {
Const.func();
Const.defaulted_func();
};
fn main() {}