diff --git a/compiler/rustc_mir/src/monomorphize/collector.rs b/compiler/rustc_mir/src/monomorphize/collector.rs index e4ad92eb1b1a1..8f455ba436227 100644 --- a/compiler/rustc_mir/src/monomorphize/collector.rs +++ b/compiler/rustc_mir/src/monomorphize/collector.rs @@ -919,7 +919,7 @@ fn should_codegen_locally<'tcx>(tcx: TyCtxt<'tcx>, instance: &Instance<'tcx>) -> return false; } - if !tcx.is_mir_available(def_id) { + if !tcx.is_mir_available(def_id) && !tcx.is_ctfe_mir_available(def_id) { bug!("no MIR available for {:?}", def_id); } diff --git a/src/test/ui/rmeta/auxiliary/rmeta-mir-static.rs b/src/test/ui/rmeta/auxiliary/rmeta-mir-static.rs new file mode 100644 index 0000000000000..886b16e3b3ed2 --- /dev/null +++ b/src/test/ui/rmeta/auxiliary/rmeta-mir-static.rs @@ -0,0 +1,6 @@ +// no-prefer-dynamic +// compile-flags: --emit=metadata -Zalways-encode-mir=yes +#![crate_type="rlib"] + +pub static FOO: &str = "foo"; +pub const BAR: i32 = 123; diff --git a/src/test/ui/rmeta/rlib-lib-pass-static.rs b/src/test/ui/rmeta/rlib-lib-pass-static.rs new file mode 100644 index 0000000000000..3c79deaca30d2 --- /dev/null +++ b/src/test/ui/rmeta/rlib-lib-pass-static.rs @@ -0,0 +1,15 @@ +// aux-build:rmeta-mir-static.rs +// no-prefer-dynamic +// build-pass (FIXME(62277): could be check-pass?) + +// Check that building a an rlib crate dependent on a rmeta crate can +// use statics, consts and type aliases. + +#![crate_type="rlib"] + +extern crate rmeta_mir_static; +use rmeta_mir_static::{FOO, BAR}; + +pub fn main() { + println!("foo {} bar {}", FOO, BAR); +}