Skip to content

Commit 8762fc3

Browse files
committed
Add tests for rust-lang#12808 and rust-lang#22684
1 parent 09af503 commit 8762fc3

File tree

2 files changed

+77
-0
lines changed

2 files changed

+77
-0
lines changed
+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
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+
// Check we do not select a private method or field when computing autoderefs
12+
13+
#![feature(rustc_attrs)]
14+
#![allow(unused)]
15+
16+
pub struct Bar2 { i: i32 }
17+
pub struct Baz2(i32);
18+
19+
impl Bar2 {
20+
fn f(&self) {}
21+
}
22+
23+
mod foo {
24+
pub struct Bar { i: i32 }
25+
pub struct Baz(i32);
26+
27+
impl Bar {
28+
fn f(&self) {}
29+
}
30+
31+
impl ::std::ops::Deref for Bar {
32+
type Target = ::Bar2;
33+
fn deref(&self) -> &::Bar2 { unimplemented!() }
34+
}
35+
36+
impl ::std::ops::Deref for Baz {
37+
type Target = ::Baz2;
38+
fn deref(&self) -> &::Baz2 { unimplemented!() }
39+
}
40+
}
41+
42+
fn f(bar: foo::Bar, baz: foo::Baz) {
43+
let _ = bar.i;
44+
let _ = baz.0;
45+
let _ = bar.f();
46+
}
47+
48+
#[rustc_error]
49+
fn main() {} //~ ERROR compilation successful

src/test/compile-fail/issue-22684.rs

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
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+
mod foo {
12+
pub struct Foo;
13+
impl Foo {
14+
fn bar(&self) {}
15+
}
16+
17+
pub trait Baz {
18+
fn bar(&self) -> bool {}
19+
}
20+
impl Baz for Foo {}
21+
}
22+
23+
fn main() {
24+
use foo::Baz;
25+
26+
// Check that `bar` resolves to the trait method, not the inherent impl method.
27+
let _: () = foo::Foo.bar(); //~ ERROR mismatched types
28+
}

0 commit comments

Comments
 (0)