Skip to content

Commit 9a85277

Browse files
committed
don't let const_fn feature flag affect impl-block-level trait bounds
1 parent ada1024 commit 9a85277

File tree

11 files changed

+9
-21
lines changed

11 files changed

+9
-21
lines changed

compiler/rustc_mir/src/transform/check_consts/validation.rs

+2-11
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,7 @@ impl Validator<'mir, 'tcx> {
426426
ty::PredicateKind::Subtype(_) => {
427427
bug!("subtype predicate on function: {:#?}", predicate)
428428
}
429-
ty::PredicateKind::Trait(pred, constness) => {
429+
ty::PredicateKind::Trait(pred, _constness) => {
430430
if Some(pred.def_id()) == tcx.lang_items().sized_trait() {
431431
continue;
432432
}
@@ -440,16 +440,7 @@ impl Validator<'mir, 'tcx> {
440440
// arguments when determining importance.
441441
let kind = LocalKind::Arg;
442442

443-
if constness == hir::Constness::Const {
444-
self.check_op_spanned(ops::ty::TraitBound(kind), span);
445-
} else if !tcx.features().const_fn
446-
|| self.ccx.is_const_stable_const_fn()
447-
{
448-
// HACK: We shouldn't need the conditional above, but trait
449-
// bounds on containing impl blocks are wrongly being marked as
450-
// "not-const".
451-
self.check_op_spanned(ops::ty::TraitBound(kind), span);
452-
}
443+
self.check_op_spanned(ops::ty::TraitBound(kind), span);
453444
}
454445
// other kinds of bounds are either tautologies
455446
// or cause errors in other passes

library/proc_macro/src/lib.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
#![feature(rustc_allow_const_fn_unstable)]
2222
#![feature(nll)]
2323
#![feature(staged_api)]
24-
#![feature(const_fn)]
24+
#![cfg_attr(bootstrap, feature(const_fn))]
25+
#![cfg_attr(not(bootstrap), feature(const_fn_trait_bound))]
2526
#![feature(const_fn_fn_ptr_basics)]
2627
#![feature(allow_internal_unstable)]
2728
#![feature(decl_macro)]

src/test/ui/rfc-2632-const-trait-impl/assoc-type.rs

-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
#![allow(incomplete_features)]
77
#![feature(const_trait_impl)]
8-
#![feature(const_fn)]
98

109
struct NonConstAdd(i32);
1110

src/test/ui/rfc-2632-const-trait-impl/call-const-trait-method-fail.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#![allow(incomplete_features)]
22
#![feature(const_trait_impl)]
3-
#![feature(const_fn)]
43

54
pub trait Plus {
65
fn plus(self, rhs: Self) -> Self;

src/test/ui/rfc-2632-const-trait-impl/call-const-trait-method-fail.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
error[E0015]: calls in constant functions are limited to constant functions, tuple structs and tuple variants
2-
--> $DIR/call-const-trait-method-fail.rs:26:5
2+
--> $DIR/call-const-trait-method-fail.rs:25:5
33
|
44
LL | a.plus(b)
55
| ^^^^^^^^^

src/test/ui/rfc-2632-const-trait-impl/call-const-trait-method-pass.rs

-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
#![allow(incomplete_features)]
44
#![feature(const_trait_impl)]
5-
#![feature(const_fn)]
65

76
struct Int(i32);
87

src/test/ui/rfc-2632-const-trait-impl/call-generic-method-fail.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#![feature(const_fn)]
1+
#![feature(const_fn_trait_bound)]
22
#![feature(const_trait_impl)]
33
#![feature(const_trait_bound_opt_out)]
44
#![allow(incomplete_features)]

src/test/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst-opt-out.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// check-pass
22

3-
#![feature(const_fn)]
3+
#![feature(const_fn_trait_bound)]
44
#![feature(const_trait_impl)]
55
#![feature(const_trait_bound_opt_out)]
66
#![allow(incomplete_features)]

src/test/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
// FIXME(jschievink): this is not rejected correctly (only when the non-const impl is actually used)
22
// ignore-test
33

4-
#![feature(const_fn)]
54
#![feature(const_trait_impl)]
65
#![allow(incomplete_features)]
76

src/test/ui/rfc-2632-const-trait-impl/const-trait-bound-opt-out/feature-gate.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#![cfg_attr(gated, feature(const_trait_bound_opt_out))]
55
#![allow(incomplete_features)]
66
#![feature(rustc_attrs)]
7-
#![feature(const_fn)]
7+
#![feature(const_fn_trait_bound)]
88

99
trait T {
1010
const CONST: i32;

src/test/ui/rfc-2632-const-trait-impl/hir-const-check.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Regression test for #69615.
22

3-
#![feature(const_trait_impl, const_fn)]
3+
#![feature(const_trait_impl)]
44
#![allow(incomplete_features)]
55

66
pub trait MyTrait {

0 commit comments

Comments
 (0)