Skip to content

Commit

Permalink
Fix ICE on invalid const param types
Browse files Browse the repository at this point in the history
  • Loading branch information
gurry committed Apr 27, 2024
1 parent 3a36386 commit c62bc31
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 6 deletions.
2 changes: 2 additions & 0 deletions compiler/rustc_hir_analysis/src/collect.rs
Original file line number Diff line number Diff line change
Expand Up @@ -386,6 +386,8 @@ impl<'tcx> HirTyLowerer<'tcx> for ItemCtxt<'tcx> {

fn ct_infer(&self, ty: Ty<'tcx>, _: Option<&ty::GenericParamDef>, span: Span) -> Const<'tcx> {
let ty = self.tcx.fold_regions(ty, |r, _| match *r {
rustc_type_ir::RegionKind::ReStatic => r,

// This is never reached in practice. If it ever is reached,
// `ReErased` should be changed to `ReStatic`, and any other region
// left alone.
Expand Down
6 changes: 0 additions & 6 deletions tests/crashes/123863.rs

This file was deleted.

9 changes: 9 additions & 0 deletions tests/ui/typeck/ice-unexpected-region-123863.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
const fn concat_strs<const A: &'static str>() -> &'static str {
//~^ ERROR &'static str` is forbidden as the type of a const generic parameter
struct Inner<const A: &'static str>;
//~^ ERROR &'static str` is forbidden as the type of a const generic parameter
Inner::concat_strs::<"a">::A
//~^ ERROR ambiguous associated type
}

pub fn main() {}
38 changes: 38 additions & 0 deletions tests/ui/typeck/ice-unexpected-region-123863.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
error: `&'static str` is forbidden as the type of a const generic parameter
--> $DIR/ice-unexpected-region-123863.rs:1:31
|
LL | const fn concat_strs<const A: &'static str>() -> &'static str {
| ^^^^^^^^^^^^
|
= note: the only supported types are integers, `bool` and `char`
help: add `#![feature(adt_const_params)]` to the crate attributes to enable more complex and user defined types
|
LL + #![feature(adt_const_params)]
|

error: `&'static str` is forbidden as the type of a const generic parameter
--> $DIR/ice-unexpected-region-123863.rs:3:27
|
LL | struct Inner<const A: &'static str>;
| ^^^^^^^^^^^^
|
= note: the only supported types are integers, `bool` and `char`
help: add `#![feature(adt_const_params)]` to the crate attributes to enable more complex and user defined types
|
LL + #![feature(adt_const_params)]
|

error[E0223]: ambiguous associated type
--> $DIR/ice-unexpected-region-123863.rs:5:5
|
LL | Inner::concat_strs::<"a">::A
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
help: if there were a trait named `Example` with associated type `concat_strs` implemented for `Inner<_>`, you could use the fully-qualified path
|
LL | <Inner<_> as Example>::concat_strs::A
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

error: aborting due to 3 previous errors

For more information about this error, try `rustc --explain E0223`.

0 comments on commit c62bc31

Please sign in to comment.