Skip to content

Commit

Permalink
Rollup merge of #92001 - fee1-dead:dmbic-xcrate-fix, r=oli-obk
Browse files Browse the repository at this point in the history
Fix default_method_body_is_const when used across crates

r? `@oli-obk`

unblocks #91439.
  • Loading branch information
matthiaskrgr authored Dec 16, 2021
2 parents 176fb18 + 4bb65e1 commit a97384d
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 2 deletions.
5 changes: 3 additions & 2 deletions compiler/rustc_metadata/src/rmeta/encoder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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() {}

0 comments on commit a97384d

Please sign in to comment.