Skip to content

Commit

Permalink
Auto merge of rust-lang#119369 - bvanjoi:fix-119301, r=<try>
Browse files Browse the repository at this point in the history
exclude unexported macro bindings from extern crate

Fixes rust-lang#119301

Macros that aren't exported from an external crate should not be defined.

r? `@petrochenkov`
  • Loading branch information
bors committed Dec 28, 2023
2 parents f4d794e + 6b62275 commit 3832a95
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 2 deletions.
3 changes: 2 additions & 1 deletion compiler/rustc_resolve/src/build_reduced_graph.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1071,7 +1071,8 @@ impl<'a, 'b, 'tcx> BuildReducedGraphVisitor<'a, 'b, 'tcx> {
let import = macro_use_import(self, span);
self.r.potentially_unused_imports.push(import);
module.for_each_child(self, |this, ident, ns, binding| {
if ns == MacroNS {
if ns == MacroNS && this.r.is_accessible_from(binding.vis, this.parent_scope.module)
{
let imported_binding = this.r.import(binding, import);
this.add_macro_use_binding(ident.name, imported_binding, span, allow_shadowing);
}
Expand Down
3 changes: 3 additions & 0 deletions tests/ui/extern/auxiliary/issue-80074-macro-2.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
// edition:2018

macro_rules! boo { () => {}; }
2 changes: 2 additions & 0 deletions tests/ui/extern/auxiliary/issue-80074-macro.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@

macro_rules! foo_ { () => {}; }
use foo_ as foo;

macro_rules! bar { () => {}; }
11 changes: 10 additions & 1 deletion tests/ui/extern/issue-80074.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
// edition:2018
// build-pass
// aux-crate:issue_80074=issue-80074-macro.rs
// aux-crate:issue_80074_2=issue-80074-macro-2.rs

#[macro_use]
extern crate issue_80074;

#[macro_use(boo)]
extern crate issue_80074_2;
//~^^ ERROR: imported macro not found

fn main() {
foo!();
//~^ ERROR: cannot find macro `foo` in this scope
bar!();
//~^ ERROR: cannot find macro `bar` in this scope
boo!();
//~^ ERROR: cannot find macro `boo` in this scope
}
27 changes: 27 additions & 0 deletions tests/ui/extern/issue-80074.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
error[E0469]: imported macro not found
--> $DIR/issue-80074.rs:8:13
|
LL | #[macro_use(boo)]
| ^^^

error: cannot find macro `boo` in this scope
--> $DIR/issue-80074.rs:17:5
|
LL | boo!();
| ^^^

error: cannot find macro `bar` in this scope
--> $DIR/issue-80074.rs:15:5
|
LL | bar!();
| ^^^

error: cannot find macro `foo` in this scope
--> $DIR/issue-80074.rs:13:5
|
LL | foo!();
| ^^^

error: aborting due to 4 previous errors

For more information about this error, try `rustc --explain E0469`.

0 comments on commit 3832a95

Please sign in to comment.