diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2018-08-11 16:58:28 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2018-08-11 17:02:47 +0300 |
| commit | e7ee6fb2a25c9e3dbb6c7db07f4e339111d265ec (patch) | |
| tree | 6d01f6d40a7d13c532534c1ae427d6f38974962c /src | |
| parent | d2f56378da7f722145d54f7c9c54deed43e2a12b (diff) | |
| download | rust-e7ee6fb2a25c9e3dbb6c7db07f4e339111d265ec.tar.gz rust-e7ee6fb2a25c9e3dbb6c7db07f4e339111d265ec.zip | |
Do not consider built-in attributes as candidates when resolving non-attribute macro invocations
This is needed to avoid regressions on stable channel
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_resolve/macros.rs | 5 | ||||
| -rw-r--r-- | src/test/ui/issue-11692-2.rs | 2 | ||||
| -rw-r--r-- | src/test/ui/issue-11692-2.stderr | 2 | ||||
| -rw-r--r-- | src/test/ui/macro-path-prelude-fail-3.rs | 4 | ||||
| -rw-r--r-- | src/test/ui/macro-path-prelude-fail-3.stderr | 10 | ||||
| -rw-r--r-- | src/test/ui/macro-path-prelude-shadowing.rs | 4 | ||||
| -rw-r--r-- | src/test/ui/macro-path-prelude-shadowing.stderr | 29 |
7 files changed, 20 insertions, 36 deletions
diff --git a/src/librustc_resolve/macros.rs b/src/librustc_resolve/macros.rs index 2054b7a351f..f111a44efe0 100644 --- a/src/librustc_resolve/macros.rs +++ b/src/librustc_resolve/macros.rs @@ -669,7 +669,10 @@ impl<'a, 'cl> Resolver<'a, 'cl> { } } WhereToResolve::BuiltinAttrs => { - if is_builtin_attr_name(ident.name) { + // FIXME: Only built-in attributes are not considered as candidates for + // non-attributes to fight off regressions on stable channel (#53205). + // We need to come up with some more principled approach instead. + if is_attr && is_builtin_attr_name(ident.name) { let binding = (Def::NonMacroAttr(NonMacroAttrKind::Builtin), ty::Visibility::Public, ident.span, Mark::root()) .to_name_binding(self.arenas); diff --git a/src/test/ui/issue-11692-2.rs b/src/test/ui/issue-11692-2.rs index 50525e03acf..acac2d151fe 100644 --- a/src/test/ui/issue-11692-2.rs +++ b/src/test/ui/issue-11692-2.rs @@ -10,5 +10,5 @@ fn main() { concat!(test!()); - //~^ ERROR expected a macro, found built-in attribute + //~^ ERROR cannot find macro `test!` in this scope } diff --git a/src/test/ui/issue-11692-2.stderr b/src/test/ui/issue-11692-2.stderr index 0c130943fd8..51d6041e922 100644 --- a/src/test/ui/issue-11692-2.stderr +++ b/src/test/ui/issue-11692-2.stderr @@ -1,4 +1,4 @@ -error: expected a macro, found built-in attribute +error: cannot find macro `test!` in this scope --> $DIR/issue-11692-2.rs:12:13 | LL | concat!(test!()); diff --git a/src/test/ui/macro-path-prelude-fail-3.rs b/src/test/ui/macro-path-prelude-fail-3.rs index bdbc7bd660f..d325b046001 100644 --- a/src/test/ui/macro-path-prelude-fail-3.rs +++ b/src/test/ui/macro-path-prelude-fail-3.rs @@ -10,9 +10,9 @@ #![feature(use_extern_macros)] -#[derive(inline)] //~ ERROR expected a macro, found built-in attribute +#[derive(inline)] //~ ERROR cannot find derive macro `inline` in this scope struct S; fn main() { - inline!(); //~ ERROR expected a macro, found built-in attribute + inline!(); //~ ERROR cannot find macro `inline!` in this scope } diff --git a/src/test/ui/macro-path-prelude-fail-3.stderr b/src/test/ui/macro-path-prelude-fail-3.stderr index 396bba2408f..c9af4b66427 100644 --- a/src/test/ui/macro-path-prelude-fail-3.stderr +++ b/src/test/ui/macro-path-prelude-fail-3.stderr @@ -1,14 +1,14 @@ -error: expected a macro, found built-in attribute +error: cannot find derive macro `inline` in this scope --> $DIR/macro-path-prelude-fail-3.rs:13:10 | -LL | #[derive(inline)] //~ ERROR expected a macro, found built-in attribute +LL | #[derive(inline)] //~ ERROR cannot find derive macro `inline` in this scope | ^^^^^^ -error: expected a macro, found built-in attribute +error: cannot find macro `inline!` in this scope --> $DIR/macro-path-prelude-fail-3.rs:17:5 | -LL | inline!(); //~ ERROR expected a macro, found built-in attribute - | ^^^^^^ +LL | inline!(); //~ ERROR cannot find macro `inline!` in this scope + | ^^^^^^ help: you could try the macro: `line` error: aborting due to 2 previous errors diff --git a/src/test/ui/macro-path-prelude-shadowing.rs b/src/test/ui/macro-path-prelude-shadowing.rs index 1aff7777ef7..6831cd81d7d 100644 --- a/src/test/ui/macro-path-prelude-shadowing.rs +++ b/src/test/ui/macro-path-prelude-shadowing.rs @@ -21,7 +21,9 @@ add_macro_expanded_things_to_macro_prelude!(); mod m1 { fn check() { - inline!(); //~ ERROR `inline` is ambiguous + inline!(); // OK. Theoretically ambiguous, but we do not consider built-in attributes + // as candidates for non-attribute macro invocations to avoid regressions + // on stable channel } } diff --git a/src/test/ui/macro-path-prelude-shadowing.stderr b/src/test/ui/macro-path-prelude-shadowing.stderr index 0e1b9a985a3..c0892f97376 100644 --- a/src/test/ui/macro-path-prelude-shadowing.stderr +++ b/src/test/ui/macro-path-prelude-shadowing.stderr @@ -1,42 +1,21 @@ -error[E0659]: `inline` is ambiguous - --> $DIR/macro-path-prelude-shadowing.rs:24:9 - | -LL | inline!(); //~ ERROR `inline` is ambiguous - | ^^^^^^ - | -note: `inline` could refer to the name imported here - --> $DIR/macro-path-prelude-shadowing.rs:16:5 - | -LL | #[macro_use] - | ^^^^^^^^^^^^ -... -LL | add_macro_expanded_things_to_macro_prelude!(); - | ---------------------------------------------- in this macro invocation -note: `inline` could also refer to the name defined here - --> $DIR/macro-path-prelude-shadowing.rs:24:9 - | -LL | inline!(); //~ ERROR `inline` is ambiguous - | ^^^^^^ - = note: macro-expanded macro imports do not shadow - error[E0659]: `std` is ambiguous - --> $DIR/macro-path-prelude-shadowing.rs:37:9 + --> $DIR/macro-path-prelude-shadowing.rs:39:9 | LL | std::panic!(); //~ ERROR `std` is ambiguous | ^^^^^^^^^^ | note: `std` could refer to the name imported here - --> $DIR/macro-path-prelude-shadowing.rs:35:9 + --> $DIR/macro-path-prelude-shadowing.rs:37:9 | LL | use m2::*; // glob-import user-defined `std` | ^^^^^ note: `std` could also refer to the name defined here - --> $DIR/macro-path-prelude-shadowing.rs:37:9 + --> $DIR/macro-path-prelude-shadowing.rs:39:9 | LL | std::panic!(); //~ ERROR `std` is ambiguous | ^^^ = note: consider adding an explicit import of `std` to disambiguate -error: aborting due to 2 previous errors +error: aborting due to previous error For more information about this error, try `rustc --explain E0659`. |
