From a12ebd3027e9c2b63f3d94c122c9d95d2d3ac739 Mon Sep 17 00:00:00 2001 From: Matthew Jasper Date: Thu, 2 Apr 2020 20:31:51 +0100 Subject: [PATCH] unerase regions in `infer_placeholder_type` --- src/librustc_typeck/collect/type_of.rs | 6 +++++- src/test/ui/suggestions/const-no-type.rs | 5 +++++ src/test/ui/suggestions/const-no-type.stderr | 12 +++++++++--- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/librustc_typeck/collect/type_of.rs b/src/librustc_typeck/collect/type_of.rs index 1d34a58fabb31..e6099b98dc82b 100644 --- a/src/librustc_typeck/collect/type_of.rs +++ b/src/librustc_typeck/collect/type_of.rs @@ -655,7 +655,11 @@ fn infer_placeholder_type( } } - ty + // Typeck doesn't expect erased regions to be returned from `type_of`. + tcx.fold_regions(&ty, &mut false, |r, _| match r { + ty::ReErased => tcx.lifetimes.re_static, + _ => r, + }) } fn report_assoc_ty_on_inherent_impl(tcx: TyCtxt<'_>, span: Span) { diff --git a/src/test/ui/suggestions/const-no-type.rs b/src/test/ui/suggestions/const-no-type.rs index 6b79697e9839e..b931a04c2860c 100644 --- a/src/test/ui/suggestions/const-no-type.rs +++ b/src/test/ui/suggestions/const-no-type.rs @@ -35,6 +35,11 @@ const C = 42; //~| HELP provide a type for the item //~| SUGGESTION C: i32 +const D = &&42; +//~^ ERROR missing type for `const` item +//~| HELP provide a type for the item +//~| SUGGESTION D: &&i32 + static S = Vec::::new(); //~^ ERROR missing type for `static` item //~| HELP provide a type for the item diff --git a/src/test/ui/suggestions/const-no-type.stderr b/src/test/ui/suggestions/const-no-type.stderr index a7b5aa5e5b124..874c1bac10bd5 100644 --- a/src/test/ui/suggestions/const-no-type.stderr +++ b/src/test/ui/suggestions/const-no-type.stderr @@ -4,14 +4,20 @@ error: missing type for `const` item LL | const C = 42; | ^ help: provide a type for the item: `C: i32` +error: missing type for `const` item + --> $DIR/const-no-type.rs:38:7 + | +LL | const D = &&42; + | ^ help: provide a type for the item: `D: &&i32` + error: missing type for `static` item - --> $DIR/const-no-type.rs:38:8 + --> $DIR/const-no-type.rs:43:8 | LL | static S = Vec::::new(); | ^ help: provide a type for the item: `S: std::vec::Vec` error: missing type for `static mut` item - --> $DIR/const-no-type.rs:43:12 + --> $DIR/const-no-type.rs:48:12 | LL | static mut SM = "abc"; | ^^ help: provide a type for the item: `SM: &str` @@ -34,5 +40,5 @@ error: missing type for `static mut` item LL | static mut SM2 = "abc"; | ^^^ help: provide a type for the item: `SM2: ` -error: aborting due to 6 previous errors +error: aborting due to 7 previous errors