Do not visit attributes in LateResolutionVisitor.
This commit is contained in:
@@ -431,6 +431,10 @@ struct LateResolutionVisitor<'a, 'b, 'ast> {
|
|||||||
|
|
||||||
/// Walks the whole crate in DFS order, visiting each item, resolving names as it goes.
|
/// Walks the whole crate in DFS order, visiting each item, resolving names as it goes.
|
||||||
impl<'a: 'ast, 'ast> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast> {
|
impl<'a: 'ast, 'ast> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast> {
|
||||||
|
fn visit_attribute(&mut self, _: &'ast Attribute) {
|
||||||
|
// We do not want to resolve expressions that appear in attributes,
|
||||||
|
// as they do not correspond to actual code.
|
||||||
|
}
|
||||||
fn visit_item(&mut self, item: &'ast Item) {
|
fn visit_item(&mut self, item: &'ast Item) {
|
||||||
let prev = replace(&mut self.diagnostic_metadata.current_item, Some(item));
|
let prev = replace(&mut self.diagnostic_metadata.current_item, Some(item));
|
||||||
// Always report errors in items we just entered.
|
// Always report errors in items we just entered.
|
||||||
|
|||||||
@@ -3,3 +3,7 @@
|
|||||||
//~| cannot find attribute `u` in this scope
|
//~| cannot find attribute `u` in this scope
|
||||||
//~| `main` function not found in crate `issue_90873`
|
//~| `main` function not found in crate `issue_90873`
|
||||||
//~| missing type for `static` item
|
//~| missing type for `static` item
|
||||||
|
|
||||||
|
#![a={impl std::ops::Neg for i8 {}}]
|
||||||
|
//~^ ERROR unexpected token
|
||||||
|
//~| ERROR cannot find attribute `a` in this scope
|
||||||
|
|||||||
@@ -7,17 +7,37 @@ error: unexpected token: `||
|
|||||||
LL | #![u=||{static d=||1;}]
|
LL | #![u=||{static d=||1;}]
|
||||||
| ^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: unexpected token: `{
|
||||||
|
impl std::ops::Neg for i8 { }
|
||||||
|
}`
|
||||||
|
--> $DIR/issue-90873.rs:7:6
|
||||||
|
|
|
||||||
|
LL | #![a={impl std::ops::Neg for i8 {}}]
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: cannot find attribute `u` in this scope
|
error: cannot find attribute `u` in this scope
|
||||||
--> $DIR/issue-90873.rs:1:4
|
--> $DIR/issue-90873.rs:1:4
|
||||||
|
|
|
|
||||||
LL | #![u=||{static d=||1;}]
|
LL | #![u=||{static d=||1;}]
|
||||||
| ^
|
| ^
|
||||||
|
|
||||||
|
error: cannot find attribute `a` in this scope
|
||||||
|
--> $DIR/issue-90873.rs:7:4
|
||||||
|
|
|
||||||
|
LL | #![a={impl std::ops::Neg for i8 {}}]
|
||||||
|
| ^
|
||||||
|
|
||||||
error[E0601]: `main` function not found in crate `issue_90873`
|
error[E0601]: `main` function not found in crate `issue_90873`
|
||||||
--> $DIR/issue-90873.rs:1:1
|
--> $DIR/issue-90873.rs:1:1
|
||||||
|
|
|
|
||||||
LL | #![u=||{static d=||1;}]
|
LL | / #![u=||{static d=||1;}]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^ consider adding a `main` function to `$DIR/issue-90873.rs`
|
LL | |
|
||||||
|
LL | |
|
||||||
|
LL | |
|
||||||
|
LL | |
|
||||||
|
LL | |
|
||||||
|
LL | | #![a={impl std::ops::Neg for i8 {}}]
|
||||||
|
| |____________________________________^ consider adding a `main` function to `$DIR/issue-90873.rs`
|
||||||
|
|
||||||
error: missing type for `static` item
|
error: missing type for `static` item
|
||||||
--> $DIR/issue-90873.rs:1:16
|
--> $DIR/issue-90873.rs:1:16
|
||||||
@@ -25,6 +45,6 @@ error: missing type for `static` item
|
|||||||
LL | #![u=||{static d=||1;}]
|
LL | #![u=||{static d=||1;}]
|
||||||
| ^ help: provide a type for the item: `d: <type>`
|
| ^ help: provide a type for the item: `d: <type>`
|
||||||
|
|
||||||
error: aborting due to 4 previous errors
|
error: aborting due to 6 previous errors
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0601`.
|
For more information about this error, try `rustc --explain E0601`.
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
#![l=|x|[b;x ]] //~ ERROR unexpected token: `|x| [b; x]`
|
#![l=|x|[b;x ]] //~ ERROR unexpected token: `|x| [b; x]`
|
||||||
//~^ ERROR cannot find attribute `l` in this scope
|
//~^ ERROR cannot find attribute `l` in this scope
|
||||||
//~^^ ERROR attempt to use a non-constant value in a constant [E0435]
|
|
||||||
//~^^^ ERROR cannot find value `b` in this scope [E0425]
|
|
||||||
|
|
||||||
// notice the space at the start,
|
// notice the space at the start,
|
||||||
// we can't attach any attributes to this file because it needs to be at the start
|
// we can't attach any attributes to this file because it needs to be at the start
|
||||||
|
|||||||
@@ -10,21 +10,5 @@ error: cannot find attribute `l` in this scope
|
|||||||
LL | #![l=|x|[b;x ]]
|
LL | #![l=|x|[b;x ]]
|
||||||
| ^
|
| ^
|
||||||
|
|
||||||
error[E0435]: attempt to use a non-constant value in a constant
|
error: aborting due to 2 previous errors
|
||||||
--> $DIR/issue-90878-2.rs:1:13
|
|
||||||
|
|
|
||||||
LL | #![l=|x|[b;x ]]
|
|
||||||
| - ^
|
|
||||||
| |
|
|
||||||
| this would need to be a `const`
|
|
||||||
|
|
||||||
error[E0425]: cannot find value `b` in this scope
|
|
||||||
--> $DIR/issue-90878-2.rs:1:11
|
|
||||||
|
|
|
||||||
LL | #![l=|x|[b;x ]]
|
|
||||||
| ^ help: a local variable with a similar name exists: `x`
|
|
||||||
|
|
||||||
error: aborting due to 4 previous errors
|
|
||||||
|
|
||||||
Some errors have detailed explanations: E0425, E0435.
|
|
||||||
For more information about an error, try `rustc --explain E0425`.
|
|
||||||
|
|||||||
Reference in New Issue
Block a user