File tree Expand file tree Collapse file tree 2 files changed +81
-0
lines changed
src/test/run-pass/issue-37291 Expand file tree Collapse file tree 2 files changed +81
-0
lines changed Original file line number Diff line number Diff line change 1+ // Copyright 2016 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+ #![ crate_type = "lib" ]
12+
13+ use std:: ops:: Mul ;
14+
15+ pub trait A { }
16+ pub trait B {
17+ type AT : A ;
18+ }
19+ pub trait C {
20+ type BT : B ;
21+ }
22+
23+ pub struct AV ;
24+ impl A for AV { }
25+
26+ pub struct BV ;
27+ impl B for BV {
28+ type AT = AV ;
29+ }
30+
31+ pub struct CV ;
32+ impl C for CV {
33+ type BT = BV ;
34+ }
35+
36+ pub struct WrapperB < T > ( pub T ) ;
37+ pub struct WrapperC < T > ( pub T ) ;
38+
39+ impl < C1 > Mul < WrapperB < <C1 :: BT as B >:: AT > > for WrapperC < C1 >
40+ where C1 : C
41+ {
42+ type Output = u8 ;
43+ fn mul ( self , _: WrapperB < <C1 :: BT as B >:: AT > ) -> Self :: Output {
44+ loop { }
45+ }
46+ }
47+ impl < C1 > Mul < WrapperC < C1 > > for WrapperC < C1 > {
48+ type Output = u8 ;
49+ fn mul ( self , _: WrapperC < C1 > ) -> Self :: Output {
50+ loop { }
51+ }
52+ }
Original file line number Diff line number Diff line change 1+ // Copyright 2016 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+ // aux-build:lib.rs
12+
13+ // Regression test for #37291. The problem was that the starting
14+ // environment for a specialization check was not including the
15+ // where-clauses from the impl when attempting to normalize the impl's
16+ // trait-ref, so things like `<C as Foo>::Item` could not resolve,
17+ // since the `C: Foo` trait bound was not included in the environment.
18+
19+ extern crate lib;
20+
21+ use lib:: { CV , WrapperB , WrapperC } ;
22+
23+ fn main ( ) {
24+ let a = WrapperC ( CV ) ;
25+ let b = WrapperC ( CV ) ;
26+ if false {
27+ let _ = a * b;
28+ }
29+ }
You can’t perform that action at this time.
0 commit comments