about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDeadbeef <ent3rm4n@gmail.com>2024-06-30 17:08:10 +0000
committerDeadbeef <ent3rm4n@gmail.com>2024-06-30 17:08:10 +0000
commit34ae56de35d4c8b61f51758113debea2ec7c21e7 (patch)
treea3b0d32605076168fb5b87fd7f7ab3a378b4fe97
parent6c3485512fc95fa9c43cb831607bfec9d2153b6e (diff)
downloadrust-34ae56de35d4c8b61f51758113debea2ec7c21e7.tar.gz
rust-34ae56de35d4c8b61f51758113debea2ec7c21e7.zip
Make `feature(effects)` require `-Znext-solver`
-rw-r--r--compiler/rustc_hir_analysis/messages.ftl4
-rw-r--r--compiler/rustc_hir_analysis/src/errors.rs6
-rw-r--r--compiler/rustc_hir_analysis/src/lib.rs6
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/effects/with-without-next-solver.coherence.stderr7
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/effects/with-without-next-solver.rs10
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/effects/with-without-next-solver.stock.stderr7
6 files changed, 40 insertions, 0 deletions
diff --git a/compiler/rustc_hir_analysis/messages.ftl b/compiler/rustc_hir_analysis/messages.ftl
index 7ed32fb9d9f..064d9c077b0 100644
--- a/compiler/rustc_hir_analysis/messages.ftl
+++ b/compiler/rustc_hir_analysis/messages.ftl
@@ -120,6 +120,10 @@ hir_analysis_drop_impl_reservation = reservation `Drop` impls are not supported
 hir_analysis_duplicate_precise_capture = cannot capture parameter `{$name}` twice
     .label = parameter captured again here
 
+hir_analysis_effects_without_next_solver = using `#![feature(effects)]` without enabling next trait solver globally
+    .note = the next trait solver must be enabled globally for the effects feature to work correctly
+    .help = use `-Znext-solver` to enable
+
 hir_analysis_empty_specialization = specialization impl does not specialize any associated items
     .note = impl is a specialization of this impl
 
diff --git a/compiler/rustc_hir_analysis/src/errors.rs b/compiler/rustc_hir_analysis/src/errors.rs
index 44025c3cd61..3ffb51fa992 100644
--- a/compiler/rustc_hir_analysis/src/errors.rs
+++ b/compiler/rustc_hir_analysis/src/errors.rs
@@ -1699,3 +1699,9 @@ pub struct InvalidReceiverTy<'tcx> {
     pub span: Span,
     pub receiver_ty: Ty<'tcx>,
 }
+
+#[derive(Diagnostic)]
+#[diag(hir_analysis_effects_without_next_solver)]
+#[note]
+#[help]
+pub struct EffectsWithoutNextSolver;
diff --git a/compiler/rustc_hir_analysis/src/lib.rs b/compiler/rustc_hir_analysis/src/lib.rs
index 0428abcdf24..cf41f51f748 100644
--- a/compiler/rustc_hir_analysis/src/lib.rs
+++ b/compiler/rustc_hir_analysis/src/lib.rs
@@ -151,6 +151,12 @@ pub fn provide(providers: &mut Providers) {
 pub fn check_crate(tcx: TyCtxt<'_>) {
     let _prof_timer = tcx.sess.timer("type_check_crate");
 
+    // FIXME(effects): remove once effects is implemented in old trait solver
+    // or if the next solver is stabilized.
+    if tcx.features().effects && !tcx.next_trait_solver_globally() {
+        tcx.dcx().emit_err(errors::EffectsWithoutNextSolver);
+    }
+
     tcx.sess.time("coherence_checking", || {
         tcx.hir().par_for_each_module(|module| {
             let _ = tcx.ensure().check_mod_type_wf(module);
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/with-without-next-solver.coherence.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/with-without-next-solver.coherence.stderr
new file mode 100644
index 00000000000..20448f51de2
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/with-without-next-solver.coherence.stderr
@@ -0,0 +1,7 @@
+error: using `#![feature(effects)]` without enabling next trait solver globally
+   |
+   = note: the next trait solver must be enabled globally for the effects feature to work correctly
+   = help: use `-Znext-solver` to enable
+
+error: aborting due to 1 previous error
+
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/with-without-next-solver.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/with-without-next-solver.rs
new file mode 100644
index 00000000000..f022af05c50
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/with-without-next-solver.rs
@@ -0,0 +1,10 @@
+// test that we error correctly when effects is used without the next-solver flag.
+//@ revisions: stock coherence full
+//@[coherence] compile-flags: -Znext-solver=coherence
+//@[full] compile-flags: -Znext-solver
+//@[full] check-pass
+
+#![feature(effects)]
+#![allow(incomplete_features)]
+
+fn main() {}
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/with-without-next-solver.stock.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/with-without-next-solver.stock.stderr
new file mode 100644
index 00000000000..20448f51de2
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/with-without-next-solver.stock.stderr
@@ -0,0 +1,7 @@
+error: using `#![feature(effects)]` without enabling next trait solver globally
+   |
+   = note: the next trait solver must be enabled globally for the effects feature to work correctly
+   = help: use `-Znext-solver` to enable
+
+error: aborting due to 1 previous error
+