File tree 3 files changed +38
-3
lines changed
compiler/rustc_const_eval/src/transform/check_consts
src/test/ui/rfc-2632-const-trait-impl
3 files changed +38
-3
lines changed Original file line number Diff line number Diff line change @@ -909,8 +909,6 @@ impl<'tcx> Visitor<'tcx> for Checker<'_, 'tcx> {
909
909
return ;
910
910
}
911
911
912
- let is_intrinsic = tcx. is_intrinsic ( callee) ;
913
-
914
912
if !tcx. is_const_fn_raw ( callee) {
915
913
if !tcx. is_const_default_method ( callee) {
916
914
// To get to here we must have already found a const impl for the
@@ -970,7 +968,7 @@ impl<'tcx> Visitor<'tcx> for Checker<'_, 'tcx> {
970
968
// We do not use `const` modifiers for intrinsic "functions", as intrinsics are
971
969
// `extern` functions, and these have no way to get marked `const`. So instead we
972
970
// use `rustc_const_(un)stable` attributes to mean that the intrinsic is `const`
973
- if self . ccx . is_const_stable_const_fn ( ) || is_intrinsic {
971
+ if self . ccx . is_const_stable_const_fn ( ) || tcx . is_intrinsic ( callee ) {
974
972
self . check_op ( ops:: FnCallUnstable ( callee, None ) ) ;
975
973
return ;
976
974
}
Original file line number Diff line number Diff line change
1
+ #![ feature( const_trait_impl) ]
2
+
3
+ struct Bug {
4
+ inner : [ ( ) ; match || 1 {
5
+ n => n ( ) ,
6
+ //~^ ERROR the trait bound
7
+ //~| ERROR cannot call non-const fn `Bug::inner::{constant#0}::{closure#0}` in constants
8
+ } ] ,
9
+ }
10
+
11
+ fn main ( ) { }
Original file line number Diff line number Diff line change
1
+ error[E0277]: the trait bound `[closure@$DIR/issue-102985.rs:4:23: 4:25]: ~const Fn<()>` is not satisfied
2
+ --> $DIR/issue-102985.rs:5:14
3
+ |
4
+ LL | n => n(),
5
+ | ^^^ expected an `Fn<()>` closure, found `[closure@$DIR/issue-102985.rs:4:23: 4:25]`
6
+ |
7
+ = help: the trait `~const Fn<()>` is not implemented for closure `[closure@$DIR/issue-102985.rs:4:23: 4:25]`
8
+ note: the trait `Fn<()>` is implemented for `[closure@$DIR/issue-102985.rs:4:23: 4:25]`, but that implementation is not `const`
9
+ --> $DIR/issue-102985.rs:5:14
10
+ |
11
+ LL | n => n(),
12
+ | ^^^
13
+ = note: wrap the `[closure@$DIR/issue-102985.rs:4:23: 4:25]` in a closure with no arguments: `|| { /* code */ }`
14
+
15
+ error[E0015]: cannot call non-const fn `Bug::inner::{constant#0}::{closure#0}` in constants
16
+ --> $DIR/issue-102985.rs:5:14
17
+ |
18
+ LL | n => n(),
19
+ | ^^^
20
+ |
21
+ = note: calls in constants are limited to constant functions, tuple structs and tuple variants
22
+
23
+ error: aborting due to 2 previous errors
24
+
25
+ Some errors have detailed explanations: E0015, E0277.
26
+ For more information about an error, try `rustc --explain E0015`.
You can’t perform that action at this time.
0 commit comments