Rollup merge of #69859 - contrun:fix-62456, r=matthewjasper
fix #62456 closes https://github.com/rust-lang/rust/issues/62456
This commit is contained in:
commit
62e3daee3f
5 changed files with 46 additions and 6 deletions
|
@ -18,6 +18,7 @@ use crate::type_error_struct;
|
|||
use crate::util::common::ErrorReported;
|
||||
|
||||
use rustc::middle::lang_items;
|
||||
use rustc::mir::interpret::ErrorHandled;
|
||||
use rustc::ty;
|
||||
use rustc::ty::adjustment::{Adjust, Adjustment, AllowTwoPhase, AutoBorrow, AutoBorrowMutability};
|
||||
use rustc::ty::Ty;
|
||||
|
@ -1039,11 +1040,18 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
};
|
||||
|
||||
if element_ty.references_error() {
|
||||
tcx.types.err
|
||||
} else if let Ok(count) = count {
|
||||
tcx.mk_ty(ty::Array(t, count))
|
||||
} else {
|
||||
tcx.types.err
|
||||
return tcx.types.err;
|
||||
}
|
||||
match count {
|
||||
Ok(count) => tcx.mk_ty(ty::Array(t, count)),
|
||||
Err(ErrorHandled::TooGeneric) => {
|
||||
self.tcx.sess.span_err(
|
||||
tcx.def_span(count_def_id),
|
||||
"array lengths can't depend on generic parameters",
|
||||
);
|
||||
tcx.types.err
|
||||
}
|
||||
Err(ErrorHandled::Reported) => tcx.types.err,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
9
src/test/ui/const-generics/issues/issue-62456.rs
Normal file
9
src/test/ui/const-generics/issues/issue-62456.rs
Normal file
|
@ -0,0 +1,9 @@
|
|||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete and may cause the compiler to crash
|
||||
|
||||
fn foo<const N: usize>() {
|
||||
let _ = [0u64; N + 1];
|
||||
//~^ ERROR array lengths can't depend on generic parameters
|
||||
}
|
||||
|
||||
fn main() {}
|
16
src/test/ui/const-generics/issues/issue-62456.stderr
Normal file
16
src/test/ui/const-generics/issues/issue-62456.stderr
Normal file
|
@ -0,0 +1,16 @@
|
|||
warning: the feature `const_generics` is incomplete and may cause the compiler to crash
|
||||
--> $DIR/issue-62456.rs:1:12
|
||||
|
|
||||
LL | #![feature(const_generics)]
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: `#[warn(incomplete_features)]` on by default
|
||||
|
||||
error: array lengths can't depend on generic parameters
|
||||
--> $DIR/issue-62456.rs:5:20
|
||||
|
|
||||
LL | let _ = [0u64; N + 1];
|
||||
| ^^^^^
|
||||
|
||||
error: aborting due to previous error
|
||||
|
|
@ -19,4 +19,5 @@ impl TraitB for B { //~ ERROR not all trait items implemented, missing: `MyA`
|
|||
|
||||
fn main() {
|
||||
let _ = [0; B::VALUE];
|
||||
//~^ ERROR array lengths can't depend on generic parameters
|
||||
}
|
||||
|
|
|
@ -13,7 +13,13 @@ LL | type MyA: TraitA;
|
|||
LL | impl TraitB for B {
|
||||
| ^^^^^^^^^^^^^^^^^ missing `MyA` in implementation
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
error: array lengths can't depend on generic parameters
|
||||
--> $DIR/issue-69602-type-err-during-codegen-ice.rs:21:17
|
||||
|
|
||||
LL | let _ = [0; B::VALUE];
|
||||
| ^^^^^^^^
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0046, E0437.
|
||||
For more information about an error, try `rustc --explain E0046`.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue