Rollup merge of #106917 - compiler-errors:const-closure-foreign, r=tmiasko
Encode const mir for closures if they're const Fixes #106913
This commit is contained in:
commit
a637e2a950
@ -888,8 +888,8 @@ fn should_encode_mir(tcx: TyCtxt<'_>, def_id: LocalDefId) -> (bool, bool) {
|
||||
| DefKind::AssocConst
|
||||
| DefKind::Static(..)
|
||||
| DefKind::Const => (true, false),
|
||||
// Full-fledged functions
|
||||
DefKind::AssocFn | DefKind::Fn => {
|
||||
// Full-fledged functions + closures
|
||||
DefKind::AssocFn | DefKind::Fn | DefKind::Closure => {
|
||||
let generics = tcx.generics_of(def_id);
|
||||
let needs_inline = (generics.requires_monomorphization(tcx)
|
||||
|| tcx.codegen_fn_attrs(def_id).requests_inline())
|
||||
@ -900,15 +900,6 @@ fn should_encode_mir(tcx: TyCtxt<'_>, def_id: LocalDefId) -> (bool, bool) {
|
||||
let always_encode_mir = tcx.sess.opts.unstable_opts.always_encode_mir;
|
||||
(is_const_fn, needs_inline || always_encode_mir)
|
||||
}
|
||||
// Closures can't be const fn.
|
||||
DefKind::Closure => {
|
||||
let generics = tcx.generics_of(def_id);
|
||||
let needs_inline = (generics.requires_monomorphization(tcx)
|
||||
|| tcx.codegen_fn_attrs(def_id).requests_inline())
|
||||
&& tcx.sess.opts.output_types.should_codegen();
|
||||
let always_encode_mir = tcx.sess.opts.unstable_opts.always_encode_mir;
|
||||
(false, needs_inline || always_encode_mir)
|
||||
}
|
||||
// Generators require optimized MIR to compute layout.
|
||||
DefKind::Generator => (false, true),
|
||||
// The others don't have MIR.
|
||||
|
8
tests/ui/consts/auxiliary/closure-in-foreign-crate.rs
Normal file
8
tests/ui/consts/auxiliary/closure-in-foreign-crate.rs
Normal file
@ -0,0 +1,8 @@
|
||||
#![crate_type = "lib"]
|
||||
#![feature(const_closures, const_trait_impl)]
|
||||
#![allow(incomplete_features)]
|
||||
|
||||
pub const fn test() {
|
||||
let cl = const || {};
|
||||
cl();
|
||||
}
|
8
tests/ui/consts/closure-in-foreign-crate.rs
Normal file
8
tests/ui/consts/closure-in-foreign-crate.rs
Normal file
@ -0,0 +1,8 @@
|
||||
// aux-build:closure-in-foreign-crate.rs
|
||||
// build-pass
|
||||
|
||||
extern crate closure_in_foreign_crate;
|
||||
|
||||
const _: () = closure_in_foreign_crate::test();
|
||||
|
||||
fn main() {}
|
Loading…
x
Reference in New Issue
Block a user