add #32791 test case
This commit is contained in:
parent
35a1fefa88
commit
797e0420e3
2 changed files with 81 additions and 0 deletions
52
src/test/run-pass/issue-37291/auxiliary/lib.rs
Normal file
52
src/test/run-pass/issue-37291/auxiliary/lib.rs
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
// 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.
|
||||
|
||||
#![crate_type = "lib"]
|
||||
|
||||
use std::ops::Mul;
|
||||
|
||||
pub trait A {}
|
||||
pub trait B {
|
||||
type AT: A;
|
||||
}
|
||||
pub trait C {
|
||||
type BT: B;
|
||||
}
|
||||
|
||||
pub struct AV;
|
||||
impl A for AV {}
|
||||
|
||||
pub struct BV;
|
||||
impl B for BV {
|
||||
type AT = AV;
|
||||
}
|
||||
|
||||
pub struct CV;
|
||||
impl C for CV {
|
||||
type BT = BV;
|
||||
}
|
||||
|
||||
pub struct WrapperB<T>(pub T);
|
||||
pub struct WrapperC<T>(pub T);
|
||||
|
||||
impl<C1> Mul<WrapperB<<C1::BT as B>::AT>> for WrapperC<C1>
|
||||
where C1: C
|
||||
{
|
||||
type Output = u8;
|
||||
fn mul(self, _: WrapperB<<C1::BT as B>::AT>) -> Self::Output {
|
||||
loop {}
|
||||
}
|
||||
}
|
||||
impl<C1> Mul<WrapperC<C1>> for WrapperC<C1> {
|
||||
type Output = u8;
|
||||
fn mul(self, _: WrapperC<C1>) -> Self::Output {
|
||||
loop {}
|
||||
}
|
||||
}
|
||||
29
src/test/run-pass/issue-37291/main.rs
Normal file
29
src/test/run-pass/issue-37291/main.rs
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
// 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.
|
||||
|
||||
// aux-build:lib.rs
|
||||
|
||||
// Regression test for #37291. The problem was that the starting
|
||||
// environment for a specialization check was not including the
|
||||
// where-clauses from the impl when attempting to normalize the impl's
|
||||
// trait-ref, so things like `<C as Foo>::Item` could not resolve,
|
||||
// since the `C: Foo` trait bound was not included in the environment.
|
||||
|
||||
extern crate lib;
|
||||
|
||||
use lib::{CV, WrapperB, WrapperC};
|
||||
|
||||
fn main() {
|
||||
let a = WrapperC(CV);
|
||||
let b = WrapperC(CV);
|
||||
if false {
|
||||
let _ = a * b;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue