Skip to content

Commit 8d9fc03

Browse files
authored
Rollup merge of #141884 - bvanjoi:issue-140255, r=petrochenkov
allow macro_use as first segment Fixes #140255 This issue may raise a question: It's reasonable an external crate name or import target be legally named `macro_use`?
2 parents 52882f6 + 9b94cae commit 8d9fc03

File tree

6 files changed

+63
-4
lines changed

6 files changed

+63
-4
lines changed

compiler/rustc_passes/src/check_attr.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2312,7 +2312,9 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
23122312
}
23132313

23142314
fn check_macro_use(&self, hir_id: HirId, attr: &Attribute, target: Target) {
2315-
let name = attr.name().unwrap();
2315+
let Some(name) = attr.name() else {
2316+
return;
2317+
};
23162318
match target {
23172319
Target::ExternCrate | Target::Mod => {}
23182320
_ => {

tests/crashes/140255.rs

Lines changed: 0 additions & 3 deletions
This file was deleted.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
extern crate proc_macro;
2+
use proc_macro::*;
3+
4+
#[proc_macro_attribute]
5+
pub fn a(_: TokenStream, input: TokenStream) -> TokenStream {
6+
input
7+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// issue#140255
2+
3+
#[macro_use::a] //~ ERROR failed to resolve: use of unresolved module or unlinked crate `macro_use`
4+
fn f0() {}
5+
6+
#[macro_use::a::b] //~ ERROR failed to resolve: use of unresolved module or unlinked crate `macro_use`
7+
fn f1() {}
8+
9+
#[macro_escape::a] //~ ERROR failed to resolve: use of unresolved module or unlinked crate `macro_escape`
10+
fn f2() {}
11+
12+
#[macro_escape::a::b] //~ ERROR failed to resolve: use of unresolved module or unlinked crate `macro_escape`
13+
fn f3() {}
14+
15+
fn main() {}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
error[E0433]: failed to resolve: use of unresolved module or unlinked crate `macro_escape`
2+
--> $DIR/illegal-macro-use.rs:12:3
3+
|
4+
LL | #[macro_escape::a::b]
5+
| ^^^^^^^^^^^^ use of unresolved module or unlinked crate `macro_escape`
6+
7+
error[E0433]: failed to resolve: use of unresolved module or unlinked crate `macro_escape`
8+
--> $DIR/illegal-macro-use.rs:9:3
9+
|
10+
LL | #[macro_escape::a]
11+
| ^^^^^^^^^^^^ use of unresolved module or unlinked crate `macro_escape`
12+
13+
error[E0433]: failed to resolve: use of unresolved module or unlinked crate `macro_use`
14+
--> $DIR/illegal-macro-use.rs:6:3
15+
|
16+
LL | #[macro_use::a::b]
17+
| ^^^^^^^^^ use of unresolved module or unlinked crate `macro_use`
18+
19+
error[E0433]: failed to resolve: use of unresolved module or unlinked crate `macro_use`
20+
--> $DIR/illegal-macro-use.rs:3:3
21+
|
22+
LL | #[macro_use::a]
23+
| ^^^^^^^^^ use of unresolved module or unlinked crate `macro_use`
24+
25+
error: aborting due to 4 previous errors
26+
27+
For more information about this error, try `rustc --explain E0433`.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
//@ check-pass
2+
//@ proc-macro: external-macro-use.rs
3+
4+
// issue#140255
5+
6+
extern crate external_macro_use as macro_use;
7+
8+
#[macro_use::a]
9+
fn f() {}
10+
11+
fn main() {}

0 commit comments

Comments
 (0)