about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLukas Markeffsky <@>2024-01-05 21:55:09 +0100
committerLukas Markeffsky <@>2024-01-05 21:56:32 +0100
commit339fa311ad8140cfb98a1c6080ea7e002b9ce3fa (patch)
treeb4a2a3c2a3fa122a8761bcc03be10ca79f52920b
parent274674819c3c37e09f5fe0e3276d3921068dbb95 (diff)
downloadrust-339fa311ad8140cfb98a1c6080ea7e002b9ce3fa.tar.gz
rust-339fa311ad8140cfb98a1c6080ea7e002b9ce3fa.zip
fix cycle error for "use constructor" suggestion
-rw-r--r--compiler/rustc_resolve/src/late/diagnostics.rs7
-rw-r--r--tests/ui/resolve/suggest-constructor-cycle-error.rs2
-rw-r--r--tests/ui/resolve/suggest-constructor-cycle-error.stderr20
3 files changed, 13 insertions, 16 deletions
diff --git a/compiler/rustc_resolve/src/late/diagnostics.rs b/compiler/rustc_resolve/src/late/diagnostics.rs
index 6c38ed62270..1ccb4820cdd 100644
--- a/compiler/rustc_resolve/src/late/diagnostics.rs
+++ b/compiler/rustc_resolve/src/late/diagnostics.rs
@@ -1755,11 +1755,8 @@ impl<'a: 'ast, 'ast, 'tcx> LateResolutionVisitor<'a, '_, 'ast, 'tcx> {
             .filter_map(|item| {
                 // Only assoc fns that return `Self`
                 let fn_sig = self.r.tcx.fn_sig(item.def_id).skip_binder();
-                let ret_ty = fn_sig.output();
-                let ret_ty = self
-                    .r
-                    .tcx
-                    .normalize_erasing_late_bound_regions(ty::ParamEnv::reveal_all(), ret_ty);
+                // Don't normalize the return type, because that can cause cycle errors.
+                let ret_ty = fn_sig.output().skip_binder();
                 let ty::Adt(def, _args) = ret_ty.kind() else {
                     return None;
                 };
diff --git a/tests/ui/resolve/suggest-constructor-cycle-error.rs b/tests/ui/resolve/suggest-constructor-cycle-error.rs
index 2336cd92f4d..e36fffd97d1 100644
--- a/tests/ui/resolve/suggest-constructor-cycle-error.rs
+++ b/tests/ui/resolve/suggest-constructor-cycle-error.rs
@@ -1,10 +1,10 @@
 // aux-build:suggest-constructor-cycle-error.rs
-//~^ cycle detected when getting the resolver for lowering [E0391]
 
 // Regression test for https://github.com/rust-lang/rust/issues/119625
 
 extern crate suggest_constructor_cycle_error as a;
 
 const CONST_NAME: a::Uuid = a::Uuid(());
+//~^ ERROR: cannot initialize a tuple struct which contains private fields [E0423]
 
 fn main() {}
diff --git a/tests/ui/resolve/suggest-constructor-cycle-error.stderr b/tests/ui/resolve/suggest-constructor-cycle-error.stderr
index ae139619c69..c6ec2465a43 100644
--- a/tests/ui/resolve/suggest-constructor-cycle-error.stderr
+++ b/tests/ui/resolve/suggest-constructor-cycle-error.stderr
@@ -1,15 +1,15 @@
-error[E0391]: cycle detected when getting the resolver for lowering
+error[E0423]: cannot initialize a tuple struct which contains private fields
+  --> $DIR/suggest-constructor-cycle-error.rs:7:29
    |
-   = note: ...which requires normalizing `[u8; suggest_constructor_cycle_error::::m::{impl#0}::encode_buffer::{constant#0}]`...
-note: ...which requires resolving instance `suggest_constructor_cycle_error::m::Uuid::encode_buffer::{constant#0}`...
-  --> $DIR/auxiliary/suggest-constructor-cycle-error.rs:5:40
+LL | const CONST_NAME: a::Uuid = a::Uuid(());
+   |                             ^^^^^^^
    |
-LL |         pub fn encode_buffer() -> [u8; LENGTH] {
-   |                                        ^^^^^^
-   = note: ...which requires calculating the lang items map...
-   = note: ...which again requires getting the resolver for lowering, completing the cycle
-   = note: see https://rustc-dev-guide.rust-lang.org/overview.html#queries and https://rustc-dev-guide.rust-lang.org/query.html for more information
+note: constructor is not visible here due to private fields
+  --> $DIR/auxiliary/suggest-constructor-cycle-error.rs:2:21
+   |
+LL |     pub struct Uuid(());
+   |                     ^^ private field
 
 error: aborting due to 1 previous error
 
-For more information about this error, try `rustc --explain E0391`.
+For more information about this error, try `rustc --explain E0423`.