Skip to content

Commit

Permalink
fix cycle error for "use constructor" suggestion
Browse files Browse the repository at this point in the history
  • Loading branch information
Lukas Markeffsky committed Jan 5, 2024
1 parent 2746748 commit 339fa31
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 16 deletions.
7 changes: 2 additions & 5 deletions compiler/rustc_resolve/src/late/diagnostics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/resolve/suggest-constructor-cycle-error.rs
Original file line number Diff line number Diff line change
@@ -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() {}
20 changes: 10 additions & 10 deletions tests/ui/resolve/suggest-constructor-cycle-error.stderr
Original file line number Diff line number Diff line change
@@ -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`.

0 comments on commit 339fa31

Please sign in to comment.