From b3a79832c0898969c322e262f2fddf4bf60be894 Mon Sep 17 00:00:00 2001 From: Deadbeef Date: Thu, 1 Jul 2021 17:24:45 +0800 Subject: [PATCH 1/2] Use revisions for cross-crate test --- .../cross-crate-feature-disabled.rs | 18 ------------------ ...enabled.stderr => cross-crate.gated.stderr} | 2 +- ...crate-feature-enabled.rs => cross-crate.rs} | 4 +++- ...isabled.stderr => cross-crate.stock.stderr} | 4 ++-- 4 files changed, 6 insertions(+), 22 deletions(-) delete mode 100644 src/test/ui/rfc-2632-const-trait-impl/cross-crate-feature-disabled.rs rename src/test/ui/rfc-2632-const-trait-impl/{cross-crate-feature-enabled.stderr => cross-crate.gated.stderr} (85%) rename src/test/ui/rfc-2632-const-trait-impl/{cross-crate-feature-enabled.rs => cross-crate.rs} (65%) rename src/test/ui/rfc-2632-const-trait-impl/{cross-crate-feature-disabled.stderr => cross-crate.stock.stderr} (82%) diff --git a/src/test/ui/rfc-2632-const-trait-impl/cross-crate-feature-disabled.rs b/src/test/ui/rfc-2632-const-trait-impl/cross-crate-feature-disabled.rs deleted file mode 100644 index abd11d8b0e923..0000000000000 --- a/src/test/ui/rfc-2632-const-trait-impl/cross-crate-feature-disabled.rs +++ /dev/null @@ -1,18 +0,0 @@ -// aux-build: cross-crate.rs -extern crate cross_crate; - -use cross_crate::*; - -fn non_const_context() { - NonConst.func(); - Const.func(); -} - -const fn const_context() { - NonConst.func(); - //~^ ERROR: calls in constant functions are limited to constant functions, tuple structs and tuple variants - Const.func(); - //~^ ERROR: calls in constant functions are limited to constant functions, tuple structs and tuple variants -} - -fn main() {} diff --git a/src/test/ui/rfc-2632-const-trait-impl/cross-crate-feature-enabled.stderr b/src/test/ui/rfc-2632-const-trait-impl/cross-crate.gated.stderr similarity index 85% rename from src/test/ui/rfc-2632-const-trait-impl/cross-crate-feature-enabled.stderr rename to src/test/ui/rfc-2632-const-trait-impl/cross-crate.gated.stderr index a544c0dd285fc..30baa38547580 100644 --- a/src/test/ui/rfc-2632-const-trait-impl/cross-crate-feature-enabled.stderr +++ b/src/test/ui/rfc-2632-const-trait-impl/cross-crate.gated.stderr @@ -1,5 +1,5 @@ error[E0015]: calls in constant functions are limited to constant functions, tuple structs and tuple variants - --> $DIR/cross-crate-feature-enabled.rs:15:5 + --> $DIR/cross-crate.rs:16:5 | LL | NonConst.func(); | ^^^^^^^^^^^^^^^ diff --git a/src/test/ui/rfc-2632-const-trait-impl/cross-crate-feature-enabled.rs b/src/test/ui/rfc-2632-const-trait-impl/cross-crate.rs similarity index 65% rename from src/test/ui/rfc-2632-const-trait-impl/cross-crate-feature-enabled.rs rename to src/test/ui/rfc-2632-const-trait-impl/cross-crate.rs index b79ccc7712ff2..c28ff63895841 100644 --- a/src/test/ui/rfc-2632-const-trait-impl/cross-crate-feature-enabled.rs +++ b/src/test/ui/rfc-2632-const-trait-impl/cross-crate.rs @@ -1,4 +1,5 @@ -#![feature(const_trait_impl)] +// revisions: stock gated +#![cfg_attr(gated, feature(const_trait_impl))] #![allow(incomplete_features)] // aux-build: cross-crate.rs @@ -15,6 +16,7 @@ const fn const_context() { NonConst.func(); //~^ ERROR: calls in constant functions are limited to constant functions, tuple structs and tuple variants Const.func(); + //[stock]~^ ERROR: calls in constant functions are limited to constant functions, tuple structs and tuple variants } fn main() {} diff --git a/src/test/ui/rfc-2632-const-trait-impl/cross-crate-feature-disabled.stderr b/src/test/ui/rfc-2632-const-trait-impl/cross-crate.stock.stderr similarity index 82% rename from src/test/ui/rfc-2632-const-trait-impl/cross-crate-feature-disabled.stderr rename to src/test/ui/rfc-2632-const-trait-impl/cross-crate.stock.stderr index b86583b9e079f..e6a86f251ca3c 100644 --- a/src/test/ui/rfc-2632-const-trait-impl/cross-crate-feature-disabled.stderr +++ b/src/test/ui/rfc-2632-const-trait-impl/cross-crate.stock.stderr @@ -1,11 +1,11 @@ error[E0015]: calls in constant functions are limited to constant functions, tuple structs and tuple variants - --> $DIR/cross-crate-feature-disabled.rs:12:5 + --> $DIR/cross-crate.rs:16:5 | LL | NonConst.func(); | ^^^^^^^^^^^^^^^ error[E0015]: calls in constant functions are limited to constant functions, tuple structs and tuple variants - --> $DIR/cross-crate-feature-disabled.rs:14:5 + --> $DIR/cross-crate.rs:18:5 | LL | Const.func(); | ^^^^^^^^^^^^ From ee9c614ecee7f6388cc2c694b2228bf0226585a9 Mon Sep 17 00:00:00 2001 From: Deadbeef Date: Thu, 1 Jul 2021 18:43:08 +0800 Subject: [PATCH 2/2] Test for const trait impls behind feature gates --- .../auxiliary/staged-api.rs | 22 +++++++++++ .../rfc-2632-const-trait-impl/staged-api.rs | 39 +++++++++++++++++++ .../staged-api.staged.stderr | 10 +++++ .../staged-api.stock.stderr | 18 +++++++++ 4 files changed, 89 insertions(+) create mode 100644 src/test/ui/rfc-2632-const-trait-impl/auxiliary/staged-api.rs create mode 100644 src/test/ui/rfc-2632-const-trait-impl/staged-api.rs create mode 100644 src/test/ui/rfc-2632-const-trait-impl/staged-api.staged.stderr create mode 100644 src/test/ui/rfc-2632-const-trait-impl/staged-api.stock.stderr diff --git a/src/test/ui/rfc-2632-const-trait-impl/auxiliary/staged-api.rs b/src/test/ui/rfc-2632-const-trait-impl/auxiliary/staged-api.rs new file mode 100644 index 0000000000000..734ce17001edd --- /dev/null +++ b/src/test/ui/rfc-2632-const-trait-impl/auxiliary/staged-api.rs @@ -0,0 +1,22 @@ +#![feature(const_trait_impl)] +#![allow(incomplete_features)] + +#![feature(staged_api)] +#![stable(feature = "rust1", since = "1.0.0")] + +#[stable(feature = "rust1", since = "1.0.0")] +pub trait MyTrait { + #[stable(feature = "rust1", since = "1.0.0")] + fn func(); +} + +#[stable(feature = "rust1", since = "1.0.0")] +pub struct Unstable; + +#[stable(feature = "rust1", since = "1.0.0")] +#[rustc_const_unstable(feature = "staged", issue = "none")] +impl const MyTrait for Unstable { + fn func() { + + } +} diff --git a/src/test/ui/rfc-2632-const-trait-impl/staged-api.rs b/src/test/ui/rfc-2632-const-trait-impl/staged-api.rs new file mode 100644 index 0000000000000..39a1b6066dea3 --- /dev/null +++ b/src/test/ui/rfc-2632-const-trait-impl/staged-api.rs @@ -0,0 +1,39 @@ +// revisions: stock staged +#![cfg_attr(staged, feature(staged))] + +#![feature(const_trait_impl)] +#![allow(incomplete_features)] + +#![feature(staged_api)] +#![stable(feature = "rust1", since = "1.0.0")] + +// aux-build: staged-api.rs +extern crate staged_api; + +use staged_api::*; + +#[stable(feature = "rust1", since = "1.0.0")] +pub struct Stable; + +#[stable(feature = "rust1", since = "1.0.0")] +#[cfg_attr(staged, rustc_const_stable(feature = "rust1", since = "1.0.0"))] +// ^ should trigger error with or without the attribute +impl const MyTrait for Stable { + fn func() { //~ ERROR trait methods cannot be stable const fn + + } +} + +fn non_const_context() { + Unstable::func(); + Stable::func(); +} + +#[unstable(feature = "none", issue = "none")] +const fn const_context() { + Unstable::func(); + //[stock]~^ ERROR `::func` is not yet stable as a const fn + Stable::func(); +} + +fn main() {} diff --git a/src/test/ui/rfc-2632-const-trait-impl/staged-api.staged.stderr b/src/test/ui/rfc-2632-const-trait-impl/staged-api.staged.stderr new file mode 100644 index 0000000000000..d2ff4ce200130 --- /dev/null +++ b/src/test/ui/rfc-2632-const-trait-impl/staged-api.staged.stderr @@ -0,0 +1,10 @@ +error: trait methods cannot be stable const fn + --> $DIR/staged-api.rs:22:5 + | +LL | / fn func() { +LL | | +LL | | } + | |_____^ + +error: aborting due to previous error + diff --git a/src/test/ui/rfc-2632-const-trait-impl/staged-api.stock.stderr b/src/test/ui/rfc-2632-const-trait-impl/staged-api.stock.stderr new file mode 100644 index 0000000000000..91c5469bd90a5 --- /dev/null +++ b/src/test/ui/rfc-2632-const-trait-impl/staged-api.stock.stderr @@ -0,0 +1,18 @@ +error: trait methods cannot be stable const fn + --> $DIR/staged-api.rs:22:5 + | +LL | / fn func() { +LL | | +LL | | } + | |_____^ + +error: `::func` is not yet stable as a const fn + --> $DIR/staged-api.rs:34:5 + | +LL | Unstable::func(); + | ^^^^^^^^^^^^^^^^ + | + = help: add `#![feature(staged)]` to the crate attributes to enable + +error: aborting due to 2 previous errors +