add several resolution test cases
This commit is contained in:
parent
0e4243538b
commit
851d4c4e24
@ -6,4 +6,5 @@
|
||||
|
||||
fn main() {
|
||||
ambiguous_1::id();
|
||||
//^ FIXME: `id` should be identified as an ambiguous item.
|
||||
}
|
||||
|
@ -5,5 +5,5 @@
|
||||
|
||||
fn main() {
|
||||
ambiguous_4_extern::id();
|
||||
// `warning_ambiguous` had been lost at metadata.
|
||||
//^ FIXME: `id` should be identified as an ambiguous item.
|
||||
}
|
||||
|
@ -0,0 +1,10 @@
|
||||
mod a {
|
||||
pub type C = i8;
|
||||
}
|
||||
|
||||
mod b {
|
||||
pub type C = i16;
|
||||
}
|
||||
|
||||
pub use a::*;
|
||||
pub use b::*;
|
17
tests/ui/imports/auxiliary/issue-114682-2-extern.rs
Normal file
17
tests/ui/imports/auxiliary/issue-114682-2-extern.rs
Normal file
@ -0,0 +1,17 @@
|
||||
macro_rules! m {
|
||||
() => {
|
||||
pub fn max() {}
|
||||
pub(crate) mod max {}
|
||||
};
|
||||
}
|
||||
|
||||
mod d {
|
||||
m! {}
|
||||
}
|
||||
|
||||
mod e {
|
||||
pub type max = i32;
|
||||
}
|
||||
|
||||
pub use self::d::*;
|
||||
pub use self::e::*;
|
16
tests/ui/imports/auxiliary/issue-114682-3-extern.rs
Normal file
16
tests/ui/imports/auxiliary/issue-114682-3-extern.rs
Normal file
@ -0,0 +1,16 @@
|
||||
mod gio {
|
||||
pub trait SettingsExt {
|
||||
fn abc(&self) {}
|
||||
}
|
||||
impl<T> SettingsExt for T {}
|
||||
}
|
||||
|
||||
mod gtk {
|
||||
pub trait SettingsExt {
|
||||
fn efg(&self) {}
|
||||
}
|
||||
impl<T> SettingsExt for T {}
|
||||
}
|
||||
|
||||
pub use gtk::*;
|
||||
pub use gio::*;
|
10
tests/ui/imports/auxiliary/issue-114682-4-extern.rs
Normal file
10
tests/ui/imports/auxiliary/issue-114682-4-extern.rs
Normal file
@ -0,0 +1,10 @@
|
||||
mod a {
|
||||
pub type Result<T> = std::result::Result<T, ()>;
|
||||
}
|
||||
|
||||
mod b {
|
||||
pub type Result<T> = std::result::Result<T, ()>;
|
||||
}
|
||||
|
||||
pub use a::*;
|
||||
pub use b::*;
|
1
tests/ui/imports/auxiliary/issue-114682-5-extern-1.rs
Normal file
1
tests/ui/imports/auxiliary/issue-114682-5-extern-1.rs
Normal file
@ -0,0 +1 @@
|
||||
pub struct Url;
|
13
tests/ui/imports/auxiliary/issue-114682-5-extern-2.rs
Normal file
13
tests/ui/imports/auxiliary/issue-114682-5-extern-2.rs
Normal file
@ -0,0 +1,13 @@
|
||||
// edition: 2018
|
||||
// aux-build: issue-114682-5-extern-1.rs
|
||||
// compile-flags: --extern issue_114682_5_extern_1
|
||||
|
||||
pub mod p {
|
||||
pub use crate::types::*;
|
||||
pub use crate::*;
|
||||
}
|
||||
mod types {
|
||||
pub mod issue_114682_5_extern_1 {}
|
||||
}
|
||||
|
||||
pub use issue_114682_5_extern_1;
|
9
tests/ui/imports/auxiliary/issue-114682-6-extern.rs
Normal file
9
tests/ui/imports/auxiliary/issue-114682-6-extern.rs
Normal file
@ -0,0 +1,9 @@
|
||||
mod a {
|
||||
pub fn log() {}
|
||||
}
|
||||
mod b {
|
||||
pub fn log() {}
|
||||
}
|
||||
|
||||
pub use self::a::*;
|
||||
pub use self::b::*;
|
@ -12,5 +12,7 @@ pub mod error {
|
||||
use s::*;
|
||||
use extern_with_ambiguous_2_extern::*;
|
||||
use error::*;
|
||||
//^ FIXME: An ambiguity error should be thrown for `error`,
|
||||
// as there is ambiguity present within `extern-with-ambiguous-2-extern.rs`.
|
||||
|
||||
fn main() {}
|
||||
|
@ -13,5 +13,7 @@ pub mod error {
|
||||
use s::*;
|
||||
use extern_with_ambiguous_3_extern::*;
|
||||
use error::*;
|
||||
//^ FIXME: An ambiguity error should be thrown for `error`,
|
||||
// as there is ambiguity present within `extern-with-ambiguous-3-extern.rs`.
|
||||
|
||||
fn main() {}
|
||||
|
@ -4,5 +4,9 @@
|
||||
|
||||
fn main() {
|
||||
glob_conflict::f(); //~ ERROR cannot find function `f` in crate `glob_conflict`
|
||||
//^ FIXME: `glob_conflict::f` should raise an
|
||||
// ambiguity error instead of a not found error.
|
||||
glob_conflict::glob::f(); //~ ERROR cannot find function `f` in module `glob_conflict::glob`
|
||||
//^ FIXME: `glob_conflict::glob::f` should raise an
|
||||
// ambiguity error instead of a not found error.
|
||||
}
|
@ -1,11 +1,11 @@
|
||||
error[E0425]: cannot find function `f` in crate `glob_conflict`
|
||||
--> $DIR/glob-conflict-cross-crate.rs:6:20
|
||||
--> $DIR/glob-conflict-cross-crate-1.rs:6:20
|
||||
|
|
||||
LL | glob_conflict::f();
|
||||
| ^ not found in `glob_conflict`
|
||||
|
||||
error[E0425]: cannot find function `f` in module `glob_conflict::glob`
|
||||
--> $DIR/glob-conflict-cross-crate.rs:7:26
|
||||
--> $DIR/glob-conflict-cross-crate-1.rs:9:26
|
||||
|
|
||||
LL | glob_conflict::glob::f();
|
||||
| ^ not found in `glob_conflict::glob`
|
10
tests/ui/imports/glob-conflict-cross-crate-2.rs
Normal file
10
tests/ui/imports/glob-conflict-cross-crate-2.rs
Normal file
@ -0,0 +1,10 @@
|
||||
// aux-build:glob-conflict-cross-crate-2-extern.rs
|
||||
|
||||
extern crate glob_conflict_cross_crate_2_extern;
|
||||
|
||||
use glob_conflict_cross_crate_2_extern::*;
|
||||
|
||||
fn main() {
|
||||
let _a: C = 1; //~ ERROR cannot find type `C` in this scope
|
||||
//^ FIXME: `C` should be identified as an ambiguous item.
|
||||
}
|
9
tests/ui/imports/glob-conflict-cross-crate-2.stderr
Normal file
9
tests/ui/imports/glob-conflict-cross-crate-2.stderr
Normal file
@ -0,0 +1,9 @@
|
||||
error[E0412]: cannot find type `C` in this scope
|
||||
--> $DIR/glob-conflict-cross-crate-2.rs:8:13
|
||||
|
|
||||
LL | let _a: C = 1;
|
||||
| ^ not found in this scope
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0412`.
|
16
tests/ui/imports/glob-conflict-cross-crate-3.rs
Normal file
16
tests/ui/imports/glob-conflict-cross-crate-3.rs
Normal file
@ -0,0 +1,16 @@
|
||||
// check-pass
|
||||
// aux-build:glob-conflict-cross-crate-2-extern.rs
|
||||
|
||||
extern crate glob_conflict_cross_crate_2_extern;
|
||||
|
||||
mod a {
|
||||
pub type C = i32;
|
||||
}
|
||||
|
||||
use glob_conflict_cross_crate_2_extern::*;
|
||||
use a::*;
|
||||
|
||||
fn main() {
|
||||
let _a: C = 1;
|
||||
//^ FIXME: `C` should be identified as an ambiguous item.
|
||||
}
|
25
tests/ui/imports/issue-114682-1.rs
Normal file
25
tests/ui/imports/issue-114682-1.rs
Normal file
@ -0,0 +1,25 @@
|
||||
// https://github.com/rust-lang/rust/pull/114682#discussion_r1420534109
|
||||
|
||||
#![feature(decl_macro)]
|
||||
|
||||
macro_rules! mac {
|
||||
() => {
|
||||
pub macro A() {
|
||||
println!("non import")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mod m {
|
||||
pub macro A() {
|
||||
println!("import")
|
||||
}
|
||||
}
|
||||
|
||||
pub use m::*;
|
||||
mac!();
|
||||
|
||||
fn main() {
|
||||
A!();
|
||||
//~^ ERROR `A` is ambiguous
|
||||
}
|
28
tests/ui/imports/issue-114682-1.stderr
Normal file
28
tests/ui/imports/issue-114682-1.stderr
Normal file
@ -0,0 +1,28 @@
|
||||
error[E0659]: `A` is ambiguous
|
||||
--> $DIR/issue-114682-1.rs:23:5
|
||||
|
|
||||
LL | A!();
|
||||
| ^ ambiguous name
|
||||
|
|
||||
= note: ambiguous because of a conflict between a name from a glob import and a macro-expanded name in the same module during import or macro resolution
|
||||
note: `A` could refer to the macro defined here
|
||||
--> $DIR/issue-114682-1.rs:7:9
|
||||
|
|
||||
LL | / pub macro A() {
|
||||
LL | | println!("non import")
|
||||
LL | | }
|
||||
| |_________^
|
||||
...
|
||||
LL | mac!();
|
||||
| ------ in this macro invocation
|
||||
note: `A` could also refer to the macro imported here
|
||||
--> $DIR/issue-114682-1.rs:19:9
|
||||
|
|
||||
LL | pub use m::*;
|
||||
| ^^^^
|
||||
= help: consider adding an explicit import of `A` to disambiguate
|
||||
= note: this error originates in the macro `mac` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0659`.
|
19
tests/ui/imports/issue-114682-2.rs
Normal file
19
tests/ui/imports/issue-114682-2.rs
Normal file
@ -0,0 +1,19 @@
|
||||
// aux-build: issue-114682-2-extern.rs
|
||||
// https://github.com/rust-lang/rust/pull/114682#issuecomment-1879998900
|
||||
|
||||
extern crate issue_114682_2_extern;
|
||||
|
||||
use issue_114682_2_extern::max;
|
||||
|
||||
type A = issue_114682_2_extern::max;
|
||||
//~^ ERROR: expected type, found function `issue_114682_2_extern::max`
|
||||
// FIXME:
|
||||
// The above error was emitted due to `(Mod(issue_114682_2_extern), Namespace(Type), Ident(max))`
|
||||
// being identified as an ambiguous item.
|
||||
// However, there are two points worth discussing:
|
||||
// First, should this ambiguous item be omitted considering the maximum visibility
|
||||
// of `issue_114682_2_extern::m::max` in the type namespace is only within the extern crate.
|
||||
// Second, if we retain the ambiguous item of the extern crate, should it be treated
|
||||
// as an ambiguous item within the local crate for the same reasoning?
|
||||
|
||||
fn main() {}
|
9
tests/ui/imports/issue-114682-2.stderr
Normal file
9
tests/ui/imports/issue-114682-2.stderr
Normal file
@ -0,0 +1,9 @@
|
||||
error[E0573]: expected type, found function `issue_114682_2_extern::max`
|
||||
--> $DIR/issue-114682-2.rs:8:10
|
||||
|
|
||||
LL | type A = issue_114682_2_extern::max;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ not a type
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0573`.
|
24
tests/ui/imports/issue-114682-3.rs
Normal file
24
tests/ui/imports/issue-114682-3.rs
Normal file
@ -0,0 +1,24 @@
|
||||
// check-pass
|
||||
// aux-build: issue-114682-3-extern.rs
|
||||
// https://github.com/rust-lang/rust/pull/114682#issuecomment-1880625909
|
||||
|
||||
extern crate issue_114682_3_extern;
|
||||
|
||||
use issue_114682_3_extern::*;
|
||||
|
||||
mod auto {
|
||||
pub trait SettingsExt {
|
||||
fn ext(&self) {}
|
||||
}
|
||||
|
||||
impl<T> SettingsExt for T {}
|
||||
}
|
||||
|
||||
pub use self::auto::*;
|
||||
|
||||
fn main() {
|
||||
let a: u8 = 1;
|
||||
a.ext();
|
||||
//^ FIXME: it should report `ext` not found because `SettingsExt`
|
||||
// is an ambiguous item in `issue-114682-3-extern.rs`.
|
||||
}
|
13
tests/ui/imports/issue-114682-4.rs
Normal file
13
tests/ui/imports/issue-114682-4.rs
Normal file
@ -0,0 +1,13 @@
|
||||
// check-pass
|
||||
// aux-build: issue-114682-4-extern.rs
|
||||
// https://github.com/rust-lang/rust/pull/114682#issuecomment-1880755441
|
||||
|
||||
extern crate issue_114682_4_extern;
|
||||
|
||||
use issue_114682_4_extern::*;
|
||||
|
||||
fn a() -> Result<i32, ()> { // FIXME: `Result` should be identified as an ambiguous item.
|
||||
Ok(1)
|
||||
}
|
||||
|
||||
fn main() {}
|
15
tests/ui/imports/issue-114682-5.rs
Normal file
15
tests/ui/imports/issue-114682-5.rs
Normal file
@ -0,0 +1,15 @@
|
||||
// check-pass
|
||||
// edition: 2018
|
||||
// aux-build: issue-114682-5-extern-1.rs
|
||||
// aux-build: issue-114682-5-extern-2.rs
|
||||
// compile-flags: --extern issue_114682_5_extern_1
|
||||
// https://github.com/rust-lang/rust/pull/114682#issuecomment-1880755441
|
||||
|
||||
extern crate issue_114682_5_extern_2;
|
||||
|
||||
use issue_114682_5_extern_2::p::*;
|
||||
use issue_114682_5_extern_1::Url;
|
||||
// FIXME: The `issue_114682_5_extern_1` should be considered an ambiguous item,
|
||||
// as it has already been recognized as ambiguous in `issue_114682_5_extern_2`.
|
||||
|
||||
fn main() {}
|
13
tests/ui/imports/issue-114682-6.rs
Normal file
13
tests/ui/imports/issue-114682-6.rs
Normal file
@ -0,0 +1,13 @@
|
||||
// check-pass
|
||||
// aux-build: issue-114682-6-extern.rs
|
||||
// https://github.com/rust-lang/rust/pull/114682#issuecomment-1880755441
|
||||
|
||||
extern crate issue_114682_6_extern;
|
||||
|
||||
use issue_114682_6_extern::*;
|
||||
|
||||
fn main() {
|
||||
let log = 2;
|
||||
//^ `log` should be identified as an ambiguous item.
|
||||
let _ = log;
|
||||
}
|
Loading…
Reference in New Issue
Block a user