gce: don't ICE on non-local const
This commit is contained in:
@@ -421,7 +421,9 @@ fn const_evaluatable_predicates_of<'tcx>(
|
|||||||
impl<'tcx> TypeVisitor<TyCtxt<'tcx>> for ConstCollector<'tcx> {
|
impl<'tcx> TypeVisitor<TyCtxt<'tcx>> for ConstCollector<'tcx> {
|
||||||
fn visit_const(&mut self, c: ty::Const<'tcx>) {
|
fn visit_const(&mut self, c: ty::Const<'tcx>) {
|
||||||
if let ty::ConstKind::Unevaluated(uv) = c.kind() {
|
if let ty::ConstKind::Unevaluated(uv) = c.kind() {
|
||||||
if is_const_param_default(self.tcx, uv.def.expect_local()) {
|
if let Some(local) = uv.def.as_local()
|
||||||
|
&& is_const_param_default(self.tcx, local)
|
||||||
|
{
|
||||||
// Do not look into const param defaults,
|
// Do not look into const param defaults,
|
||||||
// these get checked when they are actually instantiated.
|
// these get checked when they are actually instantiated.
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -1,15 +0,0 @@
|
|||||||
//@ known-bug: #133808
|
|
||||||
|
|
||||||
#![feature(generic_const_exprs, transmutability)]
|
|
||||||
|
|
||||||
mod assert {
|
|
||||||
use std::mem::TransmuteFrom;
|
|
||||||
|
|
||||||
pub fn is_transmutable<Src, Dst>()
|
|
||||||
where
|
|
||||||
Dst: TransmuteFrom<Src>,
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn main() {}
|
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
// regression test for #133808.
|
||||||
|
|
||||||
|
#![feature(generic_const_exprs)]
|
||||||
|
#![feature(min_generic_const_args)]
|
||||||
|
#![allow(incomplete_features)]
|
||||||
|
#![crate_type = "lib"]
|
||||||
|
|
||||||
|
pub trait Foo {}
|
||||||
|
impl Foo for [u8; std::path::MAIN_SEPARATOR] {}
|
||||||
|
//~^ ERROR the constant `MAIN_SEPARATOR` is not of type `usize`
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
error: the constant `MAIN_SEPARATOR` is not of type `usize`
|
||||||
|
--> $DIR/non-local-const.rs:9:14
|
||||||
|
|
|
||||||
|
LL | impl Foo for [u8; std::path::MAIN_SEPARATOR] {}
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `usize`, found `char`
|
||||||
|
|
|
||||||
|
= note: the length of array `[u8; MAIN_SEPARATOR]` must be type `usize`
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
||||||
Reference in New Issue
Block a user