Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add several resolution test cases #120195

Merged
merged 1 commit into from
Jan 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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.
petrochenkov marked this conversation as resolved.
Show resolved Hide resolved
//^ 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;
bvanjoi marked this conversation as resolved.
Show resolved Hide resolved
//^ 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;
}
Loading