Auto merge of #60717 - varkor:impl-const-generic, r=matthewjasper
Fix a bug preventing const parameters from being used in const generic impls Fixes https://github.com/rust-lang/rust/issues/60712.
This commit is contained in:
commit
af39a1fd73
@ -1902,7 +1902,18 @@ impl<'o, 'gcx: 'tcx, 'tcx> dyn AstConv<'gcx, 'tcx> + 'o {
|
||||
ty,
|
||||
};
|
||||
|
||||
let expr = &tcx.hir().body(ast_const.body).value;
|
||||
let mut expr = &tcx.hir().body(ast_const.body).value;
|
||||
|
||||
// Unwrap a block, so that e.g. `{ P }` is recognised as a parameter. Const arguments
|
||||
// currently have to be wrapped in curly brackets, so it's necessary to special-case.
|
||||
if let ExprKind::Block(block, _) = &expr.node {
|
||||
if block.stmts.is_empty() {
|
||||
if let Some(trailing) = &block.expr {
|
||||
expr = &trailing;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if let ExprKind::Path(ref qpath) = expr.node {
|
||||
if let hir::QPath::Resolved(_, ref path) = qpath {
|
||||
if let Res::Def(DefKind::ConstParam, def_id) = path.res {
|
||||
|
16
src/test/ui/const-generics/impl-const-generic-struct.rs
Normal file
16
src/test/ui/const-generics/impl-const-generic-struct.rs
Normal file
@ -0,0 +1,16 @@
|
||||
// run-pass
|
||||
|
||||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete and may cause the compiler to crash
|
||||
|
||||
struct S<const X: u32>;
|
||||
|
||||
impl<const X: u32> S<{X}> {
|
||||
fn x() -> u32 {
|
||||
X
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
assert_eq!(S::<19>::x(), 19);
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
warning: the feature `const_generics` is incomplete and may cause the compiler to crash
|
||||
--> $DIR/impl-const-generic-struct.rs:3:12
|
||||
|
|
||||
LL | #![feature(const_generics)]
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
Loading…
Reference in New Issue
Block a user