mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-25 21:34:18 +00:00
Add checks for expected macro output in restricted shadowing tests
This commit is contained in:
parent
ae2e5aa1c7
commit
9beb5c3ef3
@ -1274,6 +1274,8 @@ impl<'a> NameBinding<'a> {
|
|||||||
// expansion round `max(invoc_id, binding)` when they both emerged from macros.
|
// expansion round `max(invoc_id, binding)` when they both emerged from macros.
|
||||||
// Then this function returns `true` if `self` may emerge from a macro *after* that
|
// Then this function returns `true` if `self` may emerge from a macro *after* that
|
||||||
// in some later round and screw up our previously found resolution.
|
// in some later round and screw up our previously found resolution.
|
||||||
|
// See more detailed explanation in
|
||||||
|
// https://github.com/rust-lang/rust/pull/53778#issuecomment-419224049
|
||||||
fn may_appear_after(&self, invoc_id: Mark, binding: &NameBinding) -> bool {
|
fn may_appear_after(&self, invoc_id: Mark, binding: &NameBinding) -> bool {
|
||||||
// self > max(invoc_id, binding) => !(self <= invoc_id || self <= binding)
|
// self > max(invoc_id, binding) => !(self <= invoc_id || self <= binding)
|
||||||
// Expansions are partially ordered, so "may appear after" is an inversion of
|
// Expansions are partially ordered, so "may appear after" is an inversion of
|
||||||
|
@ -1,4 +1,9 @@
|
|||||||
// Legend:
|
// Legend:
|
||||||
|
// `N` - number of combination, from 0 to 4*4*4=64
|
||||||
|
// `Outer < Invoc` means that expansion that produced macro definition `Outer`
|
||||||
|
// is a strict ancestor of expansion that produced macro definition `Inner`.
|
||||||
|
// `>`, `=` and `Unordered` mean "strict descendant", "same" and
|
||||||
|
// "not in ordering relation" for parent expansions.
|
||||||
// `+` - possible configuration
|
// `+` - possible configuration
|
||||||
// `-` - configuration impossible due to properties of partial ordering
|
// `-` - configuration impossible due to properties of partial ordering
|
||||||
// `-?` - configuration impossible due to block/scope syntax
|
// `-?` - configuration impossible due to block/scope syntax
|
||||||
@ -72,12 +77,15 @@
|
|||||||
|
|
||||||
#![feature(decl_macro, rustc_attrs)]
|
#![feature(decl_macro, rustc_attrs)]
|
||||||
|
|
||||||
|
struct Right;
|
||||||
|
// struct Wrong; // not defined
|
||||||
|
|
||||||
macro_rules! include { () => {
|
macro_rules! include { () => {
|
||||||
macro_rules! gen_outer { () => {
|
macro_rules! gen_outer { () => {
|
||||||
macro_rules! m { () => {} }
|
macro_rules! m { () => { Wrong } }
|
||||||
}}
|
}}
|
||||||
macro_rules! gen_inner { () => {
|
macro_rules! gen_inner { () => {
|
||||||
macro_rules! m { () => {} }
|
macro_rules! m { () => { Right } }
|
||||||
}}
|
}}
|
||||||
macro_rules! gen_invoc { () => {
|
macro_rules! gen_invoc { () => {
|
||||||
m!()
|
m!()
|
||||||
@ -96,29 +104,29 @@ macro_rules! include { () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn check5() {
|
fn check5() {
|
||||||
macro_rules! m { () => {} }
|
macro_rules! m { () => { Wrong } }
|
||||||
|
|
||||||
macro_rules! gen_inner_invoc { () => {
|
macro_rules! gen_inner_invoc { () => {
|
||||||
macro_rules! m { () => {} }
|
macro_rules! m { () => { Right } }
|
||||||
m!(); // OK
|
m!(); // OK
|
||||||
}}
|
}}
|
||||||
gen_inner_invoc!();
|
gen_inner_invoc!();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn check9() {
|
fn check9() {
|
||||||
macro_rules! m { () => {} }
|
macro_rules! m { () => { Wrong } }
|
||||||
|
|
||||||
macro_rules! gen_inner_gen_invoc { () => {
|
macro_rules! gen_inner_gen_invoc { () => {
|
||||||
macro_rules! m { () => {} }
|
macro_rules! m { () => { Right } }
|
||||||
gen_invoc!(); // OK
|
gen_invoc!(); // OK
|
||||||
}}
|
}}
|
||||||
gen_inner_gen_invoc!();
|
gen_inner_gen_invoc!();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn check10() {
|
fn check10() {
|
||||||
macro_rules! m { () => {} }
|
macro_rules! m { () => { Wrong } }
|
||||||
|
|
||||||
macro_rules! m { () => {} }
|
macro_rules! m { () => { Right } }
|
||||||
|
|
||||||
gen_invoc!(); // OK
|
gen_invoc!(); // OK
|
||||||
}
|
}
|
||||||
@ -141,9 +149,9 @@ macro_rules! include { () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn check22() {
|
fn check22() {
|
||||||
macro_rules! m { () => {} }
|
macro_rules! m { () => { Wrong } }
|
||||||
|
|
||||||
macro_rules! m { () => {} }
|
macro_rules! m { () => { Right } }
|
||||||
|
|
||||||
m!(); // OK
|
m!(); // OK
|
||||||
}
|
}
|
||||||
@ -159,7 +167,7 @@ macro_rules! include { () => {
|
|||||||
fn check39() {
|
fn check39() {
|
||||||
gen_outer!();
|
gen_outer!();
|
||||||
|
|
||||||
macro_rules! m { () => {} }
|
macro_rules! m { () => { Right } }
|
||||||
|
|
||||||
m!(); // OK
|
m!(); // OK
|
||||||
}
|
}
|
||||||
@ -178,7 +186,7 @@ macro_rules! include { () => {
|
|||||||
gen_outer!();
|
gen_outer!();
|
||||||
|
|
||||||
macro_rules! gen_inner_invoc { () => {
|
macro_rules! gen_inner_invoc { () => {
|
||||||
macro_rules! m { () => {} }
|
macro_rules! m { () => { Right } }
|
||||||
m!(); // OK
|
m!(); // OK
|
||||||
}}
|
}}
|
||||||
gen_inner_invoc!();
|
gen_inner_invoc!();
|
||||||
@ -187,7 +195,7 @@ macro_rules! include { () => {
|
|||||||
fn check59() {
|
fn check59() {
|
||||||
gen_outer!();
|
gen_outer!();
|
||||||
|
|
||||||
macro_rules! m { () => {} }
|
macro_rules! m { () => { Right } }
|
||||||
|
|
||||||
gen_invoc!(); // OK
|
gen_invoc!(); // OK
|
||||||
}
|
}
|
||||||
@ -196,7 +204,7 @@ macro_rules! include { () => {
|
|||||||
gen_outer!();
|
gen_outer!();
|
||||||
|
|
||||||
macro_rules! gen_inner_gen_invoc { () => {
|
macro_rules! gen_inner_gen_invoc { () => {
|
||||||
macro_rules! m { () => {} }
|
macro_rules! m { () => { Right } }
|
||||||
gen_invoc!(); // OK
|
gen_invoc!(); // OK
|
||||||
}}
|
}}
|
||||||
gen_inner_gen_invoc!();
|
gen_inner_gen_invoc!();
|
||||||
@ -226,8 +234,8 @@ macro_rules! include { () => {
|
|||||||
|
|
||||||
fn check34() {
|
fn check34() {
|
||||||
macro_rules! gen_outer_inner { () => {
|
macro_rules! gen_outer_inner { () => {
|
||||||
macro_rules! m { () => {} }
|
macro_rules! m { () => { Wrong } }
|
||||||
macro_rules! m { () => {} }
|
macro_rules! m { () => { Right } }
|
||||||
}}
|
}}
|
||||||
gen_outer_inner!();
|
gen_outer_inner!();
|
||||||
|
|
||||||
@ -237,7 +245,7 @@ macro_rules! include { () => {
|
|||||||
fn check35() {
|
fn check35() {
|
||||||
macro_rules! gen_gen_outer_inner { () => {
|
macro_rules! gen_gen_outer_inner { () => {
|
||||||
gen_outer!();
|
gen_outer!();
|
||||||
macro_rules! m { () => {} }
|
macro_rules! m { () => { Right } }
|
||||||
}}
|
}}
|
||||||
gen_gen_outer_inner!();
|
gen_gen_outer_inner!();
|
||||||
|
|
||||||
@ -257,8 +265,8 @@ macro_rules! include { () => {
|
|||||||
|
|
||||||
fn check62() {
|
fn check62() {
|
||||||
macro_rules! gen_outer_inner { () => {
|
macro_rules! gen_outer_inner { () => {
|
||||||
macro_rules! m { () => {} }
|
macro_rules! m { () => { Wrong } }
|
||||||
macro_rules! m { () => {} }
|
macro_rules! m { () => { Right } }
|
||||||
}}
|
}}
|
||||||
gen_outer_inner!();
|
gen_outer_inner!();
|
||||||
|
|
||||||
@ -268,7 +276,7 @@ macro_rules! include { () => {
|
|||||||
fn check63() {
|
fn check63() {
|
||||||
macro_rules! gen_gen_outer_inner { () => {
|
macro_rules! gen_gen_outer_inner { () => {
|
||||||
gen_outer!();
|
gen_outer!();
|
||||||
macro_rules! m { () => {} }
|
macro_rules! m { () => { Right } }
|
||||||
}}
|
}}
|
||||||
gen_gen_outer_inner!();
|
gen_gen_outer_inner!();
|
||||||
|
|
||||||
|
@ -1,19 +1,19 @@
|
|||||||
error[E0659]: `m` is ambiguous
|
error[E0659]: `m` is ambiguous
|
||||||
--> $DIR/restricted-shadowing-legacy.rs:93:13
|
--> $DIR/restricted-shadowing-legacy.rs:101:13
|
||||||
|
|
|
|
||||||
LL | m!(); //~ ERROR `m` is ambiguous
|
LL | m!(); //~ ERROR `m` is ambiguous
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
note: `m` could refer to the name defined here
|
note: `m` could refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-legacy.rs:80:9
|
--> $DIR/restricted-shadowing-legacy.rs:88:9
|
||||||
|
|
|
|
||||||
LL | macro_rules! m { () => {} }
|
LL | macro_rules! m { () => { Right } }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
...
|
...
|
||||||
LL | include!();
|
LL | include!();
|
||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
note: `m` could also refer to the name defined here
|
note: `m` could also refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-legacy.rs:89:9
|
--> $DIR/restricted-shadowing-legacy.rs:97:9
|
||||||
|
|
|
|
||||||
LL | macro_rules! m { () => {} }
|
LL | macro_rules! m { () => {} }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
@ -23,21 +23,21 @@ LL | include!();
|
|||||||
= note: macro-expanded macros do not shadow
|
= note: macro-expanded macros do not shadow
|
||||||
|
|
||||||
error[E0659]: `m` is ambiguous
|
error[E0659]: `m` is ambiguous
|
||||||
--> $DIR/restricted-shadowing-legacy.rs:131:42
|
--> $DIR/restricted-shadowing-legacy.rs:139:42
|
||||||
|
|
|
|
||||||
LL | macro_rules! gen_invoc { () => { m!() } } //~ ERROR `m` is ambiguous
|
LL | macro_rules! gen_invoc { () => { m!() } } //~ ERROR `m` is ambiguous
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
note: `m` could refer to the name defined here
|
note: `m` could refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-legacy.rs:80:9
|
--> $DIR/restricted-shadowing-legacy.rs:88:9
|
||||||
|
|
|
|
||||||
LL | macro_rules! m { () => {} }
|
LL | macro_rules! m { () => { Right } }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
...
|
...
|
||||||
LL | include!();
|
LL | include!();
|
||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
note: `m` could also refer to the name defined here
|
note: `m` could also refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-legacy.rs:127:9
|
--> $DIR/restricted-shadowing-legacy.rs:135:9
|
||||||
|
|
|
|
||||||
LL | macro_rules! m { () => {} }
|
LL | macro_rules! m { () => {} }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
@ -47,21 +47,21 @@ LL | include!();
|
|||||||
= note: macro-expanded macros do not shadow
|
= note: macro-expanded macros do not shadow
|
||||||
|
|
||||||
error[E0659]: `m` is ambiguous
|
error[E0659]: `m` is ambiguous
|
||||||
--> $DIR/restricted-shadowing-legacy.rs:140:9
|
--> $DIR/restricted-shadowing-legacy.rs:148:9
|
||||||
|
|
|
|
||||||
LL | m!(); //~ ERROR `m` is ambiguous
|
LL | m!(); //~ ERROR `m` is ambiguous
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
note: `m` could refer to the name defined here
|
note: `m` could refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-legacy.rs:80:9
|
--> $DIR/restricted-shadowing-legacy.rs:88:9
|
||||||
|
|
|
|
||||||
LL | macro_rules! m { () => {} }
|
LL | macro_rules! m { () => { Right } }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
...
|
...
|
||||||
LL | include!();
|
LL | include!();
|
||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
note: `m` could also refer to the name defined here
|
note: `m` could also refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-legacy.rs:136:9
|
--> $DIR/restricted-shadowing-legacy.rs:144:9
|
||||||
|
|
|
|
||||||
LL | macro_rules! m { () => {} }
|
LL | macro_rules! m { () => {} }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
@ -71,93 +71,93 @@ LL | include!();
|
|||||||
= note: macro-expanded macros do not shadow
|
= note: macro-expanded macros do not shadow
|
||||||
|
|
||||||
error[E0659]: `m` is ambiguous
|
error[E0659]: `m` is ambiguous
|
||||||
--> $DIR/restricted-shadowing-legacy.rs:156:9
|
--> $DIR/restricted-shadowing-legacy.rs:164:9
|
||||||
|
|
|
|
||||||
LL | m!(); //~ ERROR `m` is ambiguous
|
LL | m!(); //~ ERROR `m` is ambiguous
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
note: `m` could refer to the name defined here
|
note: `m` could refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-legacy.rs:80:9
|
--> $DIR/restricted-shadowing-legacy.rs:88:9
|
||||||
|
|
|
|
||||||
LL | macro_rules! m { () => {} }
|
LL | macro_rules! m { () => { Right } }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
...
|
...
|
||||||
LL | include!();
|
LL | include!();
|
||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
note: `m` could also refer to the name defined here
|
note: `m` could also refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-legacy.rs:77:9
|
--> $DIR/restricted-shadowing-legacy.rs:85:9
|
||||||
|
|
|
|
||||||
LL | macro_rules! m { () => {} }
|
LL | macro_rules! m { () => { Wrong } }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
...
|
...
|
||||||
LL | include!();
|
LL | include!();
|
||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
= note: macro-expanded macros do not shadow
|
= note: macro-expanded macros do not shadow
|
||||||
|
|
||||||
error[E0659]: `m` is ambiguous
|
error[E0659]: `m` is ambiguous
|
||||||
--> $DIR/restricted-shadowing-legacy.rs:172:13
|
--> $DIR/restricted-shadowing-legacy.rs:180:13
|
||||||
|
|
|
|
||||||
LL | m!(); //~ ERROR `m` is ambiguous
|
LL | m!(); //~ ERROR `m` is ambiguous
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
note: `m` could refer to the name defined here
|
note: `m` could refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-legacy.rs:80:9
|
--> $DIR/restricted-shadowing-legacy.rs:88:9
|
||||||
|
|
|
|
||||||
LL | macro_rules! m { () => {} }
|
LL | macro_rules! m { () => { Right } }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
...
|
...
|
||||||
LL | include!();
|
LL | include!();
|
||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
note: `m` could also refer to the name defined here
|
note: `m` could also refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-legacy.rs:77:9
|
--> $DIR/restricted-shadowing-legacy.rs:85:9
|
||||||
|
|
|
|
||||||
LL | macro_rules! m { () => {} }
|
LL | macro_rules! m { () => { Wrong } }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
...
|
...
|
||||||
LL | include!();
|
LL | include!();
|
||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
= note: macro-expanded macros do not shadow
|
= note: macro-expanded macros do not shadow
|
||||||
|
|
||||||
error[E0659]: `m` is ambiguous
|
error[E0659]: `m` is ambiguous
|
||||||
--> $DIR/restricted-shadowing-legacy.rs:210:42
|
--> $DIR/restricted-shadowing-legacy.rs:218:42
|
||||||
|
|
|
|
||||||
LL | macro_rules! gen_invoc { () => { m!() } } //~ ERROR `m` is ambiguous
|
LL | macro_rules! gen_invoc { () => { m!() } } //~ ERROR `m` is ambiguous
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
note: `m` could refer to the name defined here
|
note: `m` could refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-legacy.rs:80:9
|
--> $DIR/restricted-shadowing-legacy.rs:88:9
|
||||||
|
|
|
|
||||||
LL | macro_rules! m { () => {} }
|
LL | macro_rules! m { () => { Right } }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
...
|
...
|
||||||
LL | include!();
|
LL | include!();
|
||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
note: `m` could also refer to the name defined here
|
note: `m` could also refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-legacy.rs:77:9
|
--> $DIR/restricted-shadowing-legacy.rs:85:9
|
||||||
|
|
|
|
||||||
LL | macro_rules! m { () => {} }
|
LL | macro_rules! m { () => { Wrong } }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
...
|
...
|
||||||
LL | include!();
|
LL | include!();
|
||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
= note: macro-expanded macros do not shadow
|
= note: macro-expanded macros do not shadow
|
||||||
|
|
||||||
error[E0659]: `m` is ambiguous
|
error[E0659]: `m` is ambiguous
|
||||||
--> $DIR/restricted-shadowing-legacy.rs:224:9
|
--> $DIR/restricted-shadowing-legacy.rs:232:9
|
||||||
|
|
|
|
||||||
LL | m!(); //~ ERROR `m` is ambiguous
|
LL | m!(); //~ ERROR `m` is ambiguous
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
note: `m` could refer to the name defined here
|
note: `m` could refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-legacy.rs:80:9
|
--> $DIR/restricted-shadowing-legacy.rs:88:9
|
||||||
|
|
|
|
||||||
LL | macro_rules! m { () => {} }
|
LL | macro_rules! m { () => { Right } }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
...
|
...
|
||||||
LL | include!();
|
LL | include!();
|
||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
note: `m` could also refer to the name defined here
|
note: `m` could also refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-legacy.rs:219:13
|
--> $DIR/restricted-shadowing-legacy.rs:227:13
|
||||||
|
|
|
|
||||||
LL | macro_rules! m { () => {} }
|
LL | macro_rules! m { () => {} }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
@ -167,21 +167,21 @@ LL | include!();
|
|||||||
= note: macro-expanded macros do not shadow
|
= note: macro-expanded macros do not shadow
|
||||||
|
|
||||||
error[E0659]: `m` is ambiguous
|
error[E0659]: `m` is ambiguous
|
||||||
--> $DIR/restricted-shadowing-legacy.rs:254:42
|
--> $DIR/restricted-shadowing-legacy.rs:262:42
|
||||||
|
|
|
|
||||||
LL | macro_rules! gen_invoc { () => { m!() } } //~ ERROR `m` is ambiguous
|
LL | macro_rules! gen_invoc { () => { m!() } } //~ ERROR `m` is ambiguous
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
note: `m` could refer to the name defined here
|
note: `m` could refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-legacy.rs:80:9
|
--> $DIR/restricted-shadowing-legacy.rs:88:9
|
||||||
|
|
|
|
||||||
LL | macro_rules! m { () => {} }
|
LL | macro_rules! m { () => { Right } }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
...
|
...
|
||||||
LL | include!();
|
LL | include!();
|
||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
note: `m` could also refer to the name defined here
|
note: `m` could also refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-legacy.rs:249:13
|
--> $DIR/restricted-shadowing-legacy.rs:257:13
|
||||||
|
|
|
|
||||||
LL | macro_rules! m { () => {} }
|
LL | macro_rules! m { () => {} }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -1,4 +1,9 @@
|
|||||||
// Legend:
|
// Legend:
|
||||||
|
// `N` - number of combination, from 0 to 4*4*4=64
|
||||||
|
// `Outer < Invoc` means that expansion that produced macro definition `Outer`
|
||||||
|
// is a strict ancestor of expansion that produced macro definition `Inner`.
|
||||||
|
// `>`, `=` and `Unordered` mean "strict descendant", "same" and
|
||||||
|
// "not in ordering relation" for parent expansions.
|
||||||
// `+` - possible configuration
|
// `+` - possible configuration
|
||||||
// `-` - configuration impossible due to properties of partial ordering
|
// `-` - configuration impossible due to properties of partial ordering
|
||||||
// `-?` - configuration impossible due to block/scope syntax
|
// `-?` - configuration impossible due to block/scope syntax
|
||||||
@ -72,15 +77,18 @@
|
|||||||
|
|
||||||
#![feature(decl_macro, rustc_attrs)]
|
#![feature(decl_macro, rustc_attrs)]
|
||||||
|
|
||||||
|
struct Right;
|
||||||
|
// struct Wrong; // not defined
|
||||||
|
|
||||||
#[rustc_transparent_macro]
|
#[rustc_transparent_macro]
|
||||||
macro include() {
|
macro include() {
|
||||||
#[rustc_transparent_macro]
|
#[rustc_transparent_macro]
|
||||||
macro gen_outer() {
|
macro gen_outer() {
|
||||||
macro m() {}
|
macro m() { Wrong }
|
||||||
}
|
}
|
||||||
#[rustc_transparent_macro]
|
#[rustc_transparent_macro]
|
||||||
macro gen_inner() {
|
macro gen_inner() {
|
||||||
macro m() {}
|
macro m() { Right }
|
||||||
}
|
}
|
||||||
#[rustc_transparent_macro]
|
#[rustc_transparent_macro]
|
||||||
macro gen_invoc() {
|
macro gen_invoc() {
|
||||||
@ -102,11 +110,11 @@ macro include() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn check5() {
|
fn check5() {
|
||||||
macro m() {}
|
macro m() { Wrong }
|
||||||
{
|
{
|
||||||
#[rustc_transparent_macro]
|
#[rustc_transparent_macro]
|
||||||
macro gen_inner_invoc() {
|
macro gen_inner_invoc() {
|
||||||
macro m() {}
|
macro m() { Right }
|
||||||
m!(); // OK
|
m!(); // OK
|
||||||
}
|
}
|
||||||
gen_inner_invoc!();
|
gen_inner_invoc!();
|
||||||
@ -114,11 +122,11 @@ macro include() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn check9() {
|
fn check9() {
|
||||||
macro m() {}
|
macro m() { Wrong }
|
||||||
{
|
{
|
||||||
#[rustc_transparent_macro]
|
#[rustc_transparent_macro]
|
||||||
macro gen_inner_gen_invoc() {
|
macro gen_inner_gen_invoc() {
|
||||||
macro m() {}
|
macro m() { Right }
|
||||||
gen_invoc!(); // OK
|
gen_invoc!(); // OK
|
||||||
}
|
}
|
||||||
gen_inner_gen_invoc!();
|
gen_inner_gen_invoc!();
|
||||||
@ -126,9 +134,9 @@ macro include() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn check10() {
|
fn check10() {
|
||||||
macro m() {}
|
macro m() { Wrong }
|
||||||
{
|
{
|
||||||
macro m() {}
|
macro m() { Right }
|
||||||
gen_invoc!(); // OK
|
gen_invoc!(); // OK
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -152,9 +160,9 @@ macro include() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn check22() {
|
fn check22() {
|
||||||
macro m() {}
|
macro m() { Wrong }
|
||||||
{
|
{
|
||||||
macro m() {}
|
macro m() { Right }
|
||||||
m!(); // OK
|
m!(); // OK
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -170,7 +178,7 @@ macro include() {
|
|||||||
fn check39() {
|
fn check39() {
|
||||||
gen_outer!();
|
gen_outer!();
|
||||||
{
|
{
|
||||||
macro m() {}
|
macro m() { Right }
|
||||||
m!(); // OK
|
m!(); // OK
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -192,7 +200,7 @@ macro include() {
|
|||||||
{
|
{
|
||||||
#[rustc_transparent_macro]
|
#[rustc_transparent_macro]
|
||||||
macro gen_inner_invoc() {
|
macro gen_inner_invoc() {
|
||||||
macro m() {}
|
macro m() { Right }
|
||||||
m!(); // OK
|
m!(); // OK
|
||||||
}
|
}
|
||||||
gen_inner_invoc!();
|
gen_inner_invoc!();
|
||||||
@ -202,7 +210,7 @@ macro include() {
|
|||||||
fn check59() {
|
fn check59() {
|
||||||
gen_outer!();
|
gen_outer!();
|
||||||
{
|
{
|
||||||
macro m() {}
|
macro m() { Right }
|
||||||
gen_invoc!(); // OK
|
gen_invoc!(); // OK
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -212,7 +220,7 @@ macro include() {
|
|||||||
{
|
{
|
||||||
#[rustc_transparent_macro]
|
#[rustc_transparent_macro]
|
||||||
macro gen_inner_gen_invoc() {
|
macro gen_inner_gen_invoc() {
|
||||||
macro m() {}
|
macro m() { Right }
|
||||||
gen_invoc!(); // OK
|
gen_invoc!(); // OK
|
||||||
}
|
}
|
||||||
gen_inner_gen_invoc!();
|
gen_inner_gen_invoc!();
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
error[E0659]: `m` is ambiguous
|
error[E0659]: `m` is ambiguous
|
||||||
--> $DIR/restricted-shadowing-modern.rs:98:17
|
--> $DIR/restricted-shadowing-modern.rs:106:17
|
||||||
|
|
|
|
||||||
LL | m!(); //~ ERROR `m` is ambiguous
|
LL | m!(); //~ ERROR `m` is ambiguous
|
||||||
| ^
|
| ^
|
||||||
@ -8,15 +8,15 @@ LL | include!();
|
|||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
|
|
|
|
||||||
note: `m` could refer to the name defined here
|
note: `m` could refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-modern.rs:83:9
|
--> $DIR/restricted-shadowing-modern.rs:91:9
|
||||||
|
|
|
|
||||||
LL | macro m() {}
|
LL | macro m() { Right }
|
||||||
| ^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^
|
||||||
...
|
...
|
||||||
LL | include!();
|
LL | include!();
|
||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
note: `m` could also refer to the name defined here
|
note: `m` could also refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-modern.rs:93:9
|
--> $DIR/restricted-shadowing-modern.rs:101:9
|
||||||
|
|
|
|
||||||
LL | macro m() {}
|
LL | macro m() {}
|
||||||
| ^^^^^^^^^^^^
|
| ^^^^^^^^^^^^
|
||||||
@ -26,7 +26,7 @@ LL | include!();
|
|||||||
= note: macro-expanded macros do not shadow
|
= note: macro-expanded macros do not shadow
|
||||||
|
|
||||||
error[E0659]: `m` is ambiguous
|
error[E0659]: `m` is ambiguous
|
||||||
--> $DIR/restricted-shadowing-modern.rs:141:33
|
--> $DIR/restricted-shadowing-modern.rs:149:33
|
||||||
|
|
|
|
||||||
LL | macro gen_invoc() { m!() } //~ ERROR `m` is ambiguous
|
LL | macro gen_invoc() { m!() } //~ ERROR `m` is ambiguous
|
||||||
| ^
|
| ^
|
||||||
@ -35,15 +35,15 @@ LL | include!();
|
|||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
|
|
|
|
||||||
note: `m` could refer to the name defined here
|
note: `m` could refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-modern.rs:83:9
|
--> $DIR/restricted-shadowing-modern.rs:91:9
|
||||||
|
|
|
|
||||||
LL | macro m() {}
|
LL | macro m() { Right }
|
||||||
| ^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^
|
||||||
...
|
...
|
||||||
LL | include!();
|
LL | include!();
|
||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
note: `m` could also refer to the name defined here
|
note: `m` could also refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-modern.rs:137:9
|
--> $DIR/restricted-shadowing-modern.rs:145:9
|
||||||
|
|
|
|
||||||
LL | macro m() {}
|
LL | macro m() {}
|
||||||
| ^^^^^^^^^^^^
|
| ^^^^^^^^^^^^
|
||||||
@ -53,7 +53,7 @@ LL | include!();
|
|||||||
= note: macro-expanded macros do not shadow
|
= note: macro-expanded macros do not shadow
|
||||||
|
|
||||||
error[E0659]: `m` is ambiguous
|
error[E0659]: `m` is ambiguous
|
||||||
--> $DIR/restricted-shadowing-modern.rs:150:13
|
--> $DIR/restricted-shadowing-modern.rs:158:13
|
||||||
|
|
|
|
||||||
LL | m!(); //~ ERROR `m` is ambiguous
|
LL | m!(); //~ ERROR `m` is ambiguous
|
||||||
| ^
|
| ^
|
||||||
@ -62,15 +62,15 @@ LL | include!();
|
|||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
|
|
|
|
||||||
note: `m` could refer to the name defined here
|
note: `m` could refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-modern.rs:83:9
|
--> $DIR/restricted-shadowing-modern.rs:91:9
|
||||||
|
|
|
|
||||||
LL | macro m() {}
|
LL | macro m() { Right }
|
||||||
| ^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^
|
||||||
...
|
...
|
||||||
LL | include!();
|
LL | include!();
|
||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
note: `m` could also refer to the name defined here
|
note: `m` could also refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-modern.rs:147:9
|
--> $DIR/restricted-shadowing-modern.rs:155:9
|
||||||
|
|
|
|
||||||
LL | macro m() {}
|
LL | macro m() {}
|
||||||
| ^^^^^^^^^^^^
|
| ^^^^^^^^^^^^
|
||||||
@ -80,7 +80,7 @@ LL | include!();
|
|||||||
= note: macro-expanded macros do not shadow
|
= note: macro-expanded macros do not shadow
|
||||||
|
|
||||||
error[E0659]: `m` is ambiguous
|
error[E0659]: `m` is ambiguous
|
||||||
--> $DIR/restricted-shadowing-modern.rs:166:13
|
--> $DIR/restricted-shadowing-modern.rs:174:13
|
||||||
|
|
|
|
||||||
LL | m!(); //~ ERROR `m` is ambiguous
|
LL | m!(); //~ ERROR `m` is ambiguous
|
||||||
| ^
|
| ^
|
||||||
@ -89,25 +89,25 @@ LL | include!();
|
|||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
|
|
|
|
||||||
note: `m` could refer to the name defined here
|
note: `m` could refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-modern.rs:83:9
|
--> $DIR/restricted-shadowing-modern.rs:91:9
|
||||||
|
|
|
|
||||||
LL | macro m() {}
|
LL | macro m() { Right }
|
||||||
| ^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^
|
||||||
...
|
...
|
||||||
LL | include!();
|
LL | include!();
|
||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
note: `m` could also refer to the name defined here
|
note: `m` could also refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-modern.rs:79:9
|
--> $DIR/restricted-shadowing-modern.rs:87:9
|
||||||
|
|
|
|
||||||
LL | macro m() {}
|
LL | macro m() { Wrong }
|
||||||
| ^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^
|
||||||
...
|
...
|
||||||
LL | include!();
|
LL | include!();
|
||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
= note: macro-expanded macros do not shadow
|
= note: macro-expanded macros do not shadow
|
||||||
|
|
||||||
error[E0659]: `m` is ambiguous
|
error[E0659]: `m` is ambiguous
|
||||||
--> $DIR/restricted-shadowing-modern.rs:184:17
|
--> $DIR/restricted-shadowing-modern.rs:192:17
|
||||||
|
|
|
|
||||||
LL | m!(); //~ ERROR `m` is ambiguous
|
LL | m!(); //~ ERROR `m` is ambiguous
|
||||||
| ^
|
| ^
|
||||||
@ -116,25 +116,25 @@ LL | include!();
|
|||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
|
|
|
|
||||||
note: `m` could refer to the name defined here
|
note: `m` could refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-modern.rs:83:9
|
--> $DIR/restricted-shadowing-modern.rs:91:9
|
||||||
|
|
|
|
||||||
LL | macro m() {}
|
LL | macro m() { Right }
|
||||||
| ^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^
|
||||||
...
|
...
|
||||||
LL | include!();
|
LL | include!();
|
||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
note: `m` could also refer to the name defined here
|
note: `m` could also refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-modern.rs:79:9
|
--> $DIR/restricted-shadowing-modern.rs:87:9
|
||||||
|
|
|
|
||||||
LL | macro m() {}
|
LL | macro m() { Wrong }
|
||||||
| ^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^
|
||||||
...
|
...
|
||||||
LL | include!();
|
LL | include!();
|
||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
= note: macro-expanded macros do not shadow
|
= note: macro-expanded macros do not shadow
|
||||||
|
|
||||||
error[E0659]: `m` is ambiguous
|
error[E0659]: `m` is ambiguous
|
||||||
--> $DIR/restricted-shadowing-modern.rs:227:33
|
--> $DIR/restricted-shadowing-modern.rs:235:33
|
||||||
|
|
|
|
||||||
LL | macro gen_invoc() { m!() } //~ ERROR `m` is ambiguous
|
LL | macro gen_invoc() { m!() } //~ ERROR `m` is ambiguous
|
||||||
| ^
|
| ^
|
||||||
@ -143,18 +143,18 @@ LL | include!();
|
|||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
|
|
|
|
||||||
note: `m` could refer to the name defined here
|
note: `m` could refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-modern.rs:83:9
|
--> $DIR/restricted-shadowing-modern.rs:91:9
|
||||||
|
|
|
|
||||||
LL | macro m() {}
|
LL | macro m() { Right }
|
||||||
| ^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^
|
||||||
...
|
...
|
||||||
LL | include!();
|
LL | include!();
|
||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
note: `m` could also refer to the name defined here
|
note: `m` could also refer to the name defined here
|
||||||
--> $DIR/restricted-shadowing-modern.rs:79:9
|
--> $DIR/restricted-shadowing-modern.rs:87:9
|
||||||
|
|
|
|
||||||
LL | macro m() {}
|
LL | macro m() { Wrong }
|
||||||
| ^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^
|
||||||
...
|
...
|
||||||
LL | include!();
|
LL | include!();
|
||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
|
Loading…
Reference in New Issue
Block a user