rust/tests/ui/rust-2018/uniform-paths/macro-rules.rs
2023-01-11 09:32:08 +00:00

44 lines
1.0 KiB
Rust

// edition:2018
#![feature(decl_macro)]
mod m1 {
// Non-exported legacy macros are treated as `pub(crate)`.
macro_rules! legacy_macro { () => () }
use legacy_macro as _; // OK
pub(crate) use legacy_macro as _; // OK
pub use legacy_macro as _; //~ ERROR `legacy_macro` is only public within the crate, and cannot be re-exported outside
}
mod m2 {
macro_rules! legacy_macro { () => () }
#[allow(non_camel_case_types)]
type legacy_macro = u8;
// Legacy macro imports don't prevent names from other namespaces from being imported.
use legacy_macro as _; // OK
}
mod m3 {
macro legacy_macro() {}
fn f() {
macro_rules! legacy_macro { () => () }
// Legacy macro imports create ambiguities with other names in the same namespace.
use legacy_macro as _; //~ ERROR `legacy_macro` is ambiguous
}
}
mod exported {
// Exported legacy macros are treated as `pub`.
#[macro_export]
macro_rules! legacy_macro { () => () }
pub use legacy_macro as _; // OK
}
fn main() {}