Skip to content

Commit ec7195f

Browse files
committed
rustc: T: 'empty always holds forall T.
1 parent c94a9ac commit ec7195f

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

Diff for: src/librustc/infer/region_inference/mod.rs

+7
Original file line numberDiff line numberDiff line change
@@ -1200,6 +1200,13 @@ impl<'a, 'gcx, 'tcx> RegionVarBindings<'a, 'gcx, 'tcx> {
12001200
for verify in self.verifys.borrow().iter() {
12011201
debug!("collect_errors: verify={:?}", verify);
12021202
let sub = normalize(self.tcx, var_data, verify.region);
1203+
1204+
// This was an inference variable which didn't get
1205+
// constrained, therefore it can be assume to hold.
1206+
if let ty::ReEmpty = *sub {
1207+
continue;
1208+
}
1209+
12031210
if verify.bound.is_met(region_rels, var_data, sub) {
12041211
continue;
12051212
}

Diff for: src/test/run-pass/issue-42467.rs

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
struct Foo<T>(T);
12+
13+
struct IntoIter<T>(T);
14+
15+
impl<'a, T: 'a> Iterator for IntoIter<T> {
16+
type Item = ();
17+
18+
fn next(&mut self) -> Option<()> {
19+
None
20+
}
21+
}
22+
23+
impl<T> IntoIterator for Foo<T> {
24+
type Item = ();
25+
type IntoIter = IntoIter<T>;
26+
27+
fn into_iter(self) -> IntoIter<T> {
28+
IntoIter(self.0)
29+
}
30+
}
31+
32+
fn main() {}

0 commit comments

Comments
 (0)