diff options
| author | Camille GILLOT <gillot.camille@gmail.com> | 2022-06-09 21:30:18 +0200 |
|---|---|---|
| committer | Camille GILLOT <gillot.camille@gmail.com> | 2022-06-09 21:49:14 +0200 |
| commit | 4d871a25bf96e577992218ac69b449e3648166be (patch) | |
| tree | e5162a0e7acd0f95586659e20ff40bc06781455e | |
| parent | 7fe2c4b00dfbc33643e1af4b293eb057306a8339 (diff) | |
| download | rust-4d871a25bf96e577992218ac69b449e3648166be.tar.gz rust-4d871a25bf96e577992218ac69b449e3648166be.zip | |
Do not introduce bindings for types and consts in HRTB.
| -rw-r--r-- | compiler/rustc_resolve/src/late.rs | 7 | ||||
| -rw-r--r-- | src/test/ui/higher-rank-trait-bounds/hrtb-wrong-kind.rs | 7 | ||||
| -rw-r--r-- | src/test/ui/higher-rank-trait-bounds/hrtb-wrong-kind.stderr | 14 |
3 files changed, 27 insertions, 1 deletions
diff --git a/compiler/rustc_resolve/src/late.rs b/compiler/rustc_resolve/src/late.rs index 771eeee965b..45a5adb90cf 100644 --- a/compiler/rustc_resolve/src/late.rs +++ b/compiler/rustc_resolve/src/late.rs @@ -1981,7 +1981,12 @@ impl<'a: 'ast, 'b, 'ast> LateResolutionVisitor<'a, 'b, 'ast> { continue; } }; - let res = Res::Def(def_kind, def_id.to_def_id()); + + let res = match kind { + ItemRibKind(..) | AssocItemRibKind => Res::Def(def_kind, def_id.to_def_id()), + NormalRibKind => Res::Err, + _ => bug!("Unexpected rib kind {:?}", kind), + }; self.r.record_partial_res(param.id, PartialRes::new(res)); rib.bindings.insert(ident, res); } diff --git a/src/test/ui/higher-rank-trait-bounds/hrtb-wrong-kind.rs b/src/test/ui/higher-rank-trait-bounds/hrtb-wrong-kind.rs new file mode 100644 index 00000000000..1a9bb252340 --- /dev/null +++ b/src/test/ui/higher-rank-trait-bounds/hrtb-wrong-kind.rs @@ -0,0 +1,7 @@ +fn a() where for<T> T: Copy {} +//~^ ERROR only lifetime parameters can be used in this context + +fn b() where for<const C: usize> [(); C]: Copy {} +//~^ ERROR only lifetime parameters can be used in this context + +fn main() {} diff --git a/src/test/ui/higher-rank-trait-bounds/hrtb-wrong-kind.stderr b/src/test/ui/higher-rank-trait-bounds/hrtb-wrong-kind.stderr new file mode 100644 index 00000000000..f31aa554634 --- /dev/null +++ b/src/test/ui/higher-rank-trait-bounds/hrtb-wrong-kind.stderr @@ -0,0 +1,14 @@ +error: only lifetime parameters can be used in this context + --> $DIR/hrtb-wrong-kind.rs:1:18 + | +LL | fn a() where for<T> T: Copy {} + | ^ + +error: only lifetime parameters can be used in this context + --> $DIR/hrtb-wrong-kind.rs:4:24 + | +LL | fn b() where for<const C: usize> [(); C]: Copy {} + | ^ + +error: aborting due to 2 previous errors + |
