remove bogus assertion and comments
The code (incorrectly) assumed that constants could not have generics in scope, but it's not really a problem if they do.
This commit is contained in:
parent
da569fa9dd
commit
3b390e5420
2 changed files with 31 additions and 9 deletions
|
@ -584,13 +584,9 @@ impl<'cx, 'gcx, 'tcx> UniversalRegionsBuilder<'cx, 'gcx, 'tcx> {
|
||||||
|
|
||||||
DefiningTy::FnDef(_, substs) => substs,
|
DefiningTy::FnDef(_, substs) => substs,
|
||||||
|
|
||||||
// When we encounter other sorts of constant
|
// When we encounter a constant body, just return whatever
|
||||||
// expressions, such as the `22` in `[foo; 22]`, we can
|
// substitutions are in scope for that constant.
|
||||||
// get the type `usize` here. For now, just return an
|
|
||||||
// empty vector of substs in this case, since there are no
|
|
||||||
// generics in scope in such expressions right now.
|
|
||||||
DefiningTy::Const(_) => {
|
DefiningTy::Const(_) => {
|
||||||
assert!(identity_substs.is_empty());
|
|
||||||
identity_substs
|
identity_substs
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -654,9 +650,8 @@ impl<'cx, 'gcx, 'tcx> UniversalRegionsBuilder<'cx, 'gcx, 'tcx> {
|
||||||
sig.inputs_and_output()
|
sig.inputs_and_output()
|
||||||
}
|
}
|
||||||
|
|
||||||
// This happens on things like `[foo; 22]`. Hence, no
|
// For a constant body, there are no inputs, and one
|
||||||
// inputs, one output, but it seems like we need a more
|
// "output" (the type of the constant).
|
||||||
// general way to handle this category of MIR.
|
|
||||||
DefiningTy::Const(ty) => ty::Binder::dummy(tcx.mk_type_list(iter::once(ty))),
|
DefiningTy::Const(ty) => ty::Binder::dummy(tcx.mk_type_list(iter::once(ty))),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
27
src/test/run-pass/nll/issue-47153-generic-const.rs
Normal file
27
src/test/run-pass/nll/issue-47153-generic-const.rs
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
|
||||||
|
// file at the top-level directory of this distribution and at
|
||||||
|
// http://rust-lang.org/COPYRIGHT.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
// option. This file may not be copied, modified, or distributed
|
||||||
|
// except according to those terms.
|
||||||
|
|
||||||
|
// Regression test for #47153: constants in a generic context (such as
|
||||||
|
// a trait) used to ICE.
|
||||||
|
|
||||||
|
#![feature(nll)]
|
||||||
|
#![allow(warnings)]
|
||||||
|
|
||||||
|
trait Foo {
|
||||||
|
const B: bool = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Bar<T> { x: T }
|
||||||
|
|
||||||
|
impl<T> Bar<T> {
|
||||||
|
const B: bool = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() { }
|
Loading…
Add table
Add a link
Reference in a new issue