auto merge of #13261 : pnkfelix/rust/fsk-fix-12856, r=nikomatsakis
Fix #12856. I wanted to put this up first because I wanted to get feedback about the second commit in the series, commit 8599236. Its the more invasive part of the patch and is largely just belt-and-suspenders assertion checking; in the commit message I mentioned at least one other approach we could take here. Or we could drop the belt-and-suspenders and just rely on the guard added in the first patch, commit 8d6a005 (which is really quite trivial on its own). So any feedback on what would be better is appreciated. r? @nikomatsakis
This commit is contained in:
commit
99c258cd74
6 changed files with 219 additions and 35 deletions
45
src/test/run-pass/regions-no-variance-from-fn-generics.rs
Normal file
45
src/test/run-pass/regions-no-variance-from-fn-generics.rs
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
// Copyright 2014 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.
|
||||
|
||||
// Issue #12856: a lifetime formal binding introduced by a generic fn
|
||||
// should not upset the variance inference for actual occurrences of
|
||||
// that lifetime in type expressions.
|
||||
|
||||
trait HasLife<'a> { }
|
||||
|
||||
trait UseLife01 {
|
||||
fn refs<'a, H: HasLife<'a>>(&'a self) -> H;
|
||||
}
|
||||
|
||||
trait UseLife02 {
|
||||
fn refs<'a, T, H: HasType<&'a T>>(&'a self) -> H;
|
||||
}
|
||||
|
||||
|
||||
trait HasType<T> { }
|
||||
|
||||
trait UseLife03<T> {
|
||||
fn refs<'a, H: HasType<&'a T>>(&'a self) -> H;
|
||||
}
|
||||
|
||||
|
||||
// (The functions below were not actually a problem observed during
|
||||
// fixing of #12856; they just seem like natural tests to put in to
|
||||
// cover a couple more points in the testing space)
|
||||
|
||||
pub fn top_refs_1<'a, H: HasLife<'a>>(_s: &'a ()) -> H {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
pub fn top_refs_2<'a, T, H: HasType<&'a T>>(_s: &'a ()) -> H {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
pub fn main() {}
|
||||
Loading…
Add table
Add a link
Reference in a new issue