Skip to content

Commit

Permalink
return const_error when ty has errors
Browse files Browse the repository at this point in the history
  • Loading branch information
TaKO8Ki committed Nov 2, 2022
1 parent 33b55ac commit b96ad1c
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 0 deletions.
3 changes: 3 additions & 0 deletions compiler/rustc_hir_analysis/src/astconv/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -501,6 +501,9 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
}
GenericParamDefKind::Const { has_default } => {
let ty = tcx.at(self.span).type_of(param.def_id);
if ty.references_error() {
return tcx.const_error(ty).into();
}
if !infer_args && has_default {
tcx.bound_const_param_default(param.def_id)
.subst(tcx, substs.unwrap())
Expand Down
10 changes: 10 additions & 0 deletions src/test/ui/consts/issue-103790.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#![feature(generic_const_exprs)]
#![allow(incomplete_features)]

struct S<const S: (), const S: S = { S }>;
//~^ ERROR the name `S` is already used for a generic parameter in this item's generic parameters
//~| ERROR missing generics for struct `S`
//~| ERROR cycle detected when computing type of `S::S`
//~| ERROR cycle detected when computing type of `S`

fn main() {}
65 changes: 65 additions & 0 deletions src/test/ui/consts/issue-103790.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
error[E0403]: the name `S` is already used for a generic parameter in this item's generic parameters
--> $DIR/issue-103790.rs:4:29
|
LL | struct S<const S: (), const S: S = { S }>;
| - ^ already used
| |
| first use of `S`

error[E0107]: missing generics for struct `S`
--> $DIR/issue-103790.rs:4:32
|
LL | struct S<const S: (), const S: S = { S }>;
| ^ expected at least 1 generic argument
|
note: struct defined here, with at least 1 generic parameter: `S`
--> $DIR/issue-103790.rs:4:8
|
LL | struct S<const S: (), const S: S = { S }>;
| ^ -----------
help: add missing generic argument
|
LL | struct S<const S: (), const S: S<S> = { S }>;
| ~~~~

error[E0391]: cycle detected when computing type of `S::S`
--> $DIR/issue-103790.rs:4:32
|
LL | struct S<const S: (), const S: S = { S }>;
| ^
|
= note: ...which immediately requires computing type of `S::S` again
note: cycle used when computing type of `S`
--> $DIR/issue-103790.rs:4:1
|
LL | struct S<const S: (), const S: S = { S }>;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error[E0391]: cycle detected when computing type of `S`
--> $DIR/issue-103790.rs:4:1
|
LL | struct S<const S: (), const S: S = { S }>;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
note: ...which requires computing type of `S::S`...
--> $DIR/issue-103790.rs:4:32
|
LL | struct S<const S: (), const S: S = { S }>;
| ^
= note: ...which again requires computing type of `S`, completing the cycle
note: cycle used when collecting item types in top-level module
--> $DIR/issue-103790.rs:1:1
|
LL | / #![feature(generic_const_exprs)]
LL | | #![allow(incomplete_features)]
LL | |
LL | | struct S<const S: (), const S: S = { S }>;
... |
LL | |
LL | | fn main() {}
| |____________^

error: aborting due to 4 previous errors

Some errors have detailed explanations: E0107, E0391, E0403.
For more information about an error, try `rustc --explain E0107`.

0 comments on commit b96ad1c

Please sign in to comment.