Skip to content

Commit

Permalink
Don't call tcx.fn_sig on closures
Browse files Browse the repository at this point in the history
Fixes #68542
  • Loading branch information
Aaron1011 committed Jan 27, 2020
1 parent c3681d6 commit 9ad1a8c
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/librustc_mir/const_eval/fn_queries.rs
Expand Up @@ -86,6 +86,10 @@ pub fn provide(providers: &mut Providers<'_>) {
/// Const evaluability whitelist is here to check evaluability at the
/// top level beforehand.
fn is_const_intrinsic(tcx: TyCtxt<'_>, def_id: DefId) -> Option<bool> {
if tcx.is_closure(def_id) {
return None;
}

match tcx.fn_sig(def_id).abi() {
Abi::RustIntrinsic | Abi::PlatformIntrinsic => {
Some(tcx.lookup_const_stability(def_id).is_some())
Expand Down
10 changes: 10 additions & 0 deletions src/test/ui/consts/issue-68542-closure-in-array-len.rs
@@ -0,0 +1,10 @@
// Regression test for issue #68542
// Tests that we don't ICE when a closure appears
// in the length part of an array.

struct Bug {
a: [(); (|| { 0 })()] //~ ERROR calls in constants are limited to
//~^ ERROR evaluation of constant value failed
}

fn main() {}
16 changes: 16 additions & 0 deletions src/test/ui/consts/issue-68542-closure-in-array-len.stderr
@@ -0,0 +1,16 @@
error[E0015]: calls in constants are limited to constant functions, tuple structs and tuple variants
--> $DIR/issue-68542-closure-in-array-len.rs:6:13
|
LL | a: [(); (|| { 0 })()]
| ^^^^^^^^^^^^

error[E0080]: evaluation of constant value failed
--> $DIR/issue-68542-closure-in-array-len.rs:6:13
|
LL | a: [(); (|| { 0 })()]
| ^^^^^^^^^^^^ calling non-const function `Bug::a::{{constant}}#0::{{closure}}#0`

error: aborting due to 2 previous errors

Some errors have detailed explanations: E0015, E0080.
For more information about an error, try `rustc --explain E0015`.

0 comments on commit 9ad1a8c

Please sign in to comment.