Skip to content

Commit

Permalink
add several resolution test cases
Browse files Browse the repository at this point in the history
  • Loading branch information
bvanjoi committed Jan 23, 2024
1 parent 0e42435 commit 851d4c4
Show file tree
Hide file tree
Showing 24 changed files with 269 additions and 3 deletions.
1 change: 1 addition & 0 deletions tests/ui/imports/ambiguous-2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@ extern crate ambiguous_1;

fn main() {
ambiguous_1::id();
//^ FIXME: `id` should be identified as an ambiguous item.
}
2 changes: 1 addition & 1 deletion tests/ui/imports/ambiguous-4.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ extern crate ambiguous_4_extern;

fn main() {
ambiguous_4_extern::id();
// `warning_ambiguous` had been lost at metadata.
//^ FIXME: `id` should be identified as an ambiguous item.
}
10 changes: 10 additions & 0 deletions tests/ui/imports/auxiliary/glob-conflict-cross-crate-2-extern.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
mod a {
pub type C = i8;
}

mod b {
pub type C = i16;
}

pub use a::*;
pub use b::*;
17 changes: 17 additions & 0 deletions tests/ui/imports/auxiliary/issue-114682-2-extern.rs
Original file line number Diff line number Diff line change
@@ -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 changes: 16 additions & 0 deletions tests/ui/imports/auxiliary/issue-114682-3-extern.rs
Original file line number Diff line number Diff line change
@@ -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 changes: 10 additions & 0 deletions tests/ui/imports/auxiliary/issue-114682-4-extern.rs
Original file line number Diff line number Diff line change
@@ -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 change: 1 addition & 0 deletions tests/ui/imports/auxiliary/issue-114682-5-extern-1.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
pub struct Url;
13 changes: 13 additions & 0 deletions tests/ui/imports/auxiliary/issue-114682-5-extern-2.rs
Original file line number Diff line number Diff line change
@@ -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 changes: 9 additions & 0 deletions tests/ui/imports/auxiliary/issue-114682-6-extern.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
mod a {
pub fn log() {}
}
mod b {
pub fn log() {}
}

pub use self::a::*;
pub use self::b::*;
2 changes: 2 additions & 0 deletions tests/ui/imports/extern-with-ambiguous-2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,7 @@ mod s {
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() {}
2 changes: 2 additions & 0 deletions tests/ui/imports/extern-with-ambiguous-3.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,7 @@ mod s {
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() {}
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,9 @@ extern crate glob_conflict;

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.
}
Original file line number Diff line number Diff line change
@@ -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`
Expand Down
10 changes: 10 additions & 0 deletions tests/ui/imports/glob-conflict-cross-crate-2.rs
Original file line number Diff line number Diff line change
@@ -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 changes: 9 additions & 0 deletions tests/ui/imports/glob-conflict-cross-crate-2.stderr
Original file line number Diff line number Diff line change
@@ -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 changes: 16 additions & 0 deletions tests/ui/imports/glob-conflict-cross-crate-3.rs
Original file line number Diff line number Diff line change
@@ -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 changes: 25 additions & 0 deletions tests/ui/imports/issue-114682-1.rs
Original file line number Diff line number Diff line change
@@ -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 changes: 28 additions & 0 deletions tests/ui/imports/issue-114682-1.stderr
Original file line number Diff line number Diff line change
@@ -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 changes: 19 additions & 0 deletions tests/ui/imports/issue-114682-2.rs
Original file line number Diff line number Diff line change
@@ -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 changes: 9 additions & 0 deletions tests/ui/imports/issue-114682-2.stderr
Original file line number Diff line number Diff line change
@@ -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 changes: 24 additions & 0 deletions tests/ui/imports/issue-114682-3.rs
Original file line number Diff line number Diff line change
@@ -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 changes: 13 additions & 0 deletions tests/ui/imports/issue-114682-4.rs
Original file line number Diff line number Diff line change
@@ -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 changes: 15 additions & 0 deletions tests/ui/imports/issue-114682-5.rs
Original file line number Diff line number Diff line change
@@ -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 changes: 13 additions & 0 deletions tests/ui/imports/issue-114682-6.rs
Original file line number Diff line number Diff line change
@@ -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;
}

0 comments on commit 851d4c4

Please sign in to comment.