57 lines
1.5 KiB
Rust
57 lines
1.5 KiB
Rust
// edition:2018
|
|
// aux-build:test-macros.rs
|
|
// aux-build:derive-helper-shadowing.rs
|
|
|
|
#[macro_use]
|
|
extern crate test_macros;
|
|
#[macro_use]
|
|
extern crate derive_helper_shadowing;
|
|
|
|
use test_macros::empty_attr as empty_helper;
|
|
|
|
macro_rules! gen_helper_use {
|
|
() => {
|
|
#[empty_helper] //~ ERROR cannot find attribute `empty_helper` in this scope
|
|
struct W;
|
|
}
|
|
}
|
|
|
|
#[empty_helper] //~ ERROR `empty_helper` is ambiguous
|
|
//~| WARN derive helper attribute is used before it is introduced
|
|
//~| WARN this was previously accepted
|
|
#[derive(Empty)]
|
|
struct S {
|
|
#[empty_helper] // OK, no ambiguity, derive helpers have highest priority
|
|
field: [u8; {
|
|
use empty_helper; //~ ERROR `empty_helper` is ambiguous
|
|
|
|
#[empty_helper] // OK, no ambiguity, derive helpers have highest priority
|
|
struct U;
|
|
|
|
mod inner {
|
|
// OK, no ambiguity, the non-helper attribute is not in scope here, only the helper.
|
|
#[empty_helper]
|
|
struct V;
|
|
|
|
gen_helper_use!();
|
|
|
|
#[derive(GenHelperUse)] //~ ERROR cannot find attribute `empty_helper` in this scope
|
|
struct Owo;
|
|
|
|
use empty_helper as renamed;
|
|
#[renamed] //~ ERROR cannot use a derive helper attribute through an import
|
|
struct Wow;
|
|
}
|
|
|
|
0
|
|
}]
|
|
}
|
|
|
|
// OK, no ambiguity, only the non-helper attribute is in scope.
|
|
#[empty_helper]
|
|
struct Z;
|
|
|
|
fn main() {
|
|
let s = S { field: [] };
|
|
}
|