diff options
| author | Dylan DPC <dylan.dpc@gmail.com> | 2021-02-23 16:10:23 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-02-23 16:10:23 +0100 |
| commit | e2561c58a41023a14e0e583113dcf55e1ecb236a (patch) | |
| tree | b4f78b67c2cf8052c90b91d734ed4b02e1a1edd7 /compiler/rustc_resolve/src | |
| parent | 2982ba50fc4bb629b8fe4108a81cb2f9b053510b (diff) | |
| parent | b3000ec0cdb35b305bfe954db4b14ce32cbc255b (diff) | |
| download | rust-e2561c58a41023a14e0e583113dcf55e1ecb236a.tar.gz rust-e2561c58a41023a14e0e583113dcf55e1ecb236a.zip | |
Rollup merge of #82296 - spastorino:pubrules, r=nikomatsakis
Support `pub` on `macro_rules` This rebases and updates `since` version of #78166 from ``@petrochenkov`` r? ``@nikomatsakis``
Diffstat (limited to 'compiler/rustc_resolve/src')
| -rw-r--r-- | compiler/rustc_resolve/src/build_reduced_graph.rs | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/compiler/rustc_resolve/src/build_reduced_graph.rs b/compiler/rustc_resolve/src/build_reduced_graph.rs index 79ed0b5308d..65e5b0dddea 100644 --- a/compiler/rustc_resolve/src/build_reduced_graph.rs +++ b/compiler/rustc_resolve/src/build_reduced_graph.rs @@ -1230,13 +1230,13 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> { }; let res = Res::Def(DefKind::Macro(ext.macro_kind()), def_id.to_def_id()); + let is_macro_export = self.r.session.contains_name(&item.attrs, sym::macro_export); self.r.macro_map.insert(def_id.to_def_id(), ext); self.r.local_macro_def_scopes.insert(def_id, parent_scope.module); - if macro_rules { + if macro_rules && matches!(item.vis.kind, ast::VisibilityKind::Inherited) { let ident = ident.normalize_to_macros_2_0(); self.r.macro_names.insert(ident); - let is_macro_export = self.r.session.contains_name(&item.attrs, sym::macro_export); let vis = if is_macro_export { ty::Visibility::Public } else { @@ -1261,6 +1261,11 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> { }), )) } else { + if is_macro_export { + let what = if macro_rules { "`macro_rules` with `pub`" } else { "`macro` items" }; + let msg = format!("`#[macro_export]` cannot be used on {what}"); + self.r.session.span_err(item.span, &msg); + } let module = parent_scope.module; let vis = match item.kind { // Visibilities must not be resolved non-speculatively twice |
