diff options
| author | bors <bors@rust-lang.org> | 2021-04-28 05:52:47 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-04-28 05:52:47 +0000 |
| commit | 855c2d130fb70da1643cf8f696c7aad7537aef34 (patch) | |
| tree | 41829a9612ab210fc11b74691bd783c44190db85 | |
| parent | 537544b1061467ee4b74ef7f552fab3d513e5caf (diff) | |
| parent | 83767d97f0ac4e644340792dd7209bbcd9306647 (diff) | |
| download | rust-855c2d130fb70da1643cf8f696c7aad7537aef34.tar.gz rust-855c2d130fb70da1643cf8f696c7aad7537aef34.zip | |
Auto merge of #83713 - spastorino:revert-pub-macro-rules, r=nikomatsakis
Revert "Rollup merge of #82296 - spastorino:pubrules, r=nikomatsakis" This reverts commit e2561c58a41023a14e0e583113dcf55e1ecb236a, reversing changes made to 2982ba50fc4bb629b8fe4108a81cb2f9b053510b. As discussed in #83641 this feature is not complete and in particular doesn't work cross macros and given that this is not going to be included in edition 2021 nobody seems to be trying to fix the underlying problem. When can add this again I guess, whenever somebody has the time to make it work cross crates. r? `@nikomatsakis`
| -rw-r--r-- | compiler/rustc_ast_passes/src/feature_gate.rs | 1 | ||||
| -rw-r--r-- | compiler/rustc_feature/src/active.rs | 3 | ||||
| -rw-r--r-- | compiler/rustc_feature/src/removed.rs | 2 | ||||
| -rw-r--r-- | compiler/rustc_parse/src/parser/item.rs | 10 | ||||
| -rw-r--r-- | compiler/rustc_resolve/src/build_reduced_graph.rs | 9 | ||||
| -rw-r--r-- | src/test/ui/did_you_mean/pub-macro-rules.rs | 16 | ||||
| -rw-r--r-- | src/test/ui/did_you_mean/pub-macro-rules.stderr | 8 | ||||
| -rw-r--r-- | src/test/ui/feature-gates/feature-gate-pub_macro_rules.rs | 10 | ||||
| -rw-r--r-- | src/test/ui/feature-gates/feature-gate-pub_macro_rules.stderr | 39 | ||||
| -rw-r--r-- | src/test/ui/macros/macro-export-on-modularized-macros.rs | 11 | ||||
| -rw-r--r-- | src/test/ui/macros/macro-export-on-modularized-macros.stderr | 14 | ||||
| -rw-r--r-- | src/test/ui/macros/pub-macro-rules-fail.rs | 28 | ||||
| -rw-r--r-- | src/test/ui/macros/pub-macro-rules-fail.stderr | 48 | ||||
| -rw-r--r-- | src/test/ui/macros/pub-macro-rules.rs | 20 |
14 files changed, 37 insertions, 182 deletions
diff --git a/compiler/rustc_ast_passes/src/feature_gate.rs b/compiler/rustc_ast_passes/src/feature_gate.rs index 077ab06d82d..da516f5cb41 100644 --- a/compiler/rustc_ast_passes/src/feature_gate.rs +++ b/compiler/rustc_ast_passes/src/feature_gate.rs @@ -686,7 +686,6 @@ pub fn check_crate(krate: &ast::Crate, sess: &Session) { // involved, so we only emit errors where there are no other parsing errors. gate_all!(destructuring_assignment, "destructuring assignments are unstable"); } - gate_all!(pub_macro_rules, "`pub` on `macro_rules` items is unstable"); // All uses of `gate_all!` below this point were added in #65742, // and subsequently disabled (with the non-early gating readded). diff --git a/compiler/rustc_feature/src/active.rs b/compiler/rustc_feature/src/active.rs index 7ae7e0094c6..304d7ede625 100644 --- a/compiler/rustc_feature/src/active.rs +++ b/compiler/rustc_feature/src/active.rs @@ -628,9 +628,6 @@ declare_features! ( /// Allows macro attributes to observe output of `#[derive]`. (active, macro_attributes_in_derive_output, "1.51.0", Some(81119), None), - /// Allows `pub` on `macro_rules` items. - (active, pub_macro_rules, "1.52.0", Some(78855), None), - /// Allows the use of type alias impl trait in function return positions (active, min_type_alias_impl_trait, "1.52.0", Some(63063), None), diff --git a/compiler/rustc_feature/src/removed.rs b/compiler/rustc_feature/src/removed.rs index c2ad339ed41..fa8ef182aed 100644 --- a/compiler/rustc_feature/src/removed.rs +++ b/compiler/rustc_feature/src/removed.rs @@ -134,6 +134,8 @@ declare_features! ( which is available from cargo build scripts with `cargo:rustc-link-arg` now")), /// Allows using `#[main]` to replace the entrypoint `#[lang = "start"]` calls. (removed, main, "1.53.0", Some(29634), None, None), + (removed, pub_macro_rules, "1.53.0", Some(78855), None, + Some("removed due to being incomplete, in particular it does not work across crates")), // ------------------------------------------------------------------------- // feature-group-end: removed features diff --git a/compiler/rustc_parse/src/parser/item.rs b/compiler/rustc_parse/src/parser/item.rs index 299b9a959c5..acf3867cf89 100644 --- a/compiler/rustc_parse/src/parser/item.rs +++ b/compiler/rustc_parse/src/parser/item.rs @@ -1478,7 +1478,15 @@ impl<'a> Parser<'a> { let vstr = pprust::vis_to_string(vis); let vstr = vstr.trim_end(); if macro_rules { - self.sess.gated_spans.gate(sym::pub_macro_rules, vis.span); + let msg = format!("can't qualify macro_rules invocation with `{}`", vstr); + self.struct_span_err(vis.span, &msg) + .span_suggestion( + vis.span, + "try exporting the macro", + "#[macro_export]".to_owned(), + Applicability::MaybeIncorrect, // speculative + ) + .emit(); } else { self.struct_span_err(vis.span, "can't qualify macro invocation with `pub`") .span_suggestion( diff --git a/compiler/rustc_resolve/src/build_reduced_graph.rs b/compiler/rustc_resolve/src/build_reduced_graph.rs index d77022a65e4..b5c95cfcb29 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 && matches!(item.vis.kind, ast::VisibilityKind::Inherited) { + if macro_rules { 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,11 +1261,6 @@ 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 diff --git a/src/test/ui/did_you_mean/pub-macro-rules.rs b/src/test/ui/did_you_mean/pub-macro-rules.rs new file mode 100644 index 00000000000..c5393703f70 --- /dev/null +++ b/src/test/ui/did_you_mean/pub-macro-rules.rs @@ -0,0 +1,16 @@ +#[macro_use] mod bleh { + pub macro_rules! foo { //~ ERROR can't qualify macro_rules invocation + ($n:ident) => ( + fn $n () -> i32 { + 1 + } + ) + } + +} + +foo!(meh); + +fn main() { + println!("{}", meh()); +} diff --git a/src/test/ui/did_you_mean/pub-macro-rules.stderr b/src/test/ui/did_you_mean/pub-macro-rules.stderr new file mode 100644 index 00000000000..0bde5783b8c --- /dev/null +++ b/src/test/ui/did_you_mean/pub-macro-rules.stderr @@ -0,0 +1,8 @@ +error: can't qualify macro_rules invocation with `pub` + --> $DIR/pub-macro-rules.rs:2:5 + | +LL | pub macro_rules! foo { + | ^^^ help: try exporting the macro: `#[macro_export]` + +error: aborting due to previous error + diff --git a/src/test/ui/feature-gates/feature-gate-pub_macro_rules.rs b/src/test/ui/feature-gates/feature-gate-pub_macro_rules.rs deleted file mode 100644 index 5504ec317ae..00000000000 --- a/src/test/ui/feature-gates/feature-gate-pub_macro_rules.rs +++ /dev/null @@ -1,10 +0,0 @@ -pub macro_rules! m1 { () => {} } //~ ERROR `pub` on `macro_rules` items is unstable - -#[cfg(FALSE)] -pub macro_rules! m2 { () => {} } //~ ERROR `pub` on `macro_rules` items is unstable - -pub(crate) macro_rules! m3 { () => {} } //~ ERROR `pub` on `macro_rules` items is unstable - -pub(in self) macro_rules! m4 { () => {} } //~ ERROR `pub` on `macro_rules` items is unstable - -fn main() {} diff --git a/src/test/ui/feature-gates/feature-gate-pub_macro_rules.stderr b/src/test/ui/feature-gates/feature-gate-pub_macro_rules.stderr deleted file mode 100644 index bfaec398d9a..00000000000 --- a/src/test/ui/feature-gates/feature-gate-pub_macro_rules.stderr +++ /dev/null @@ -1,39 +0,0 @@ -error[E0658]: `pub` on `macro_rules` items is unstable - --> $DIR/feature-gate-pub_macro_rules.rs:1:1 - | -LL | pub macro_rules! m1 { () => {} } - | ^^^ - | - = note: see issue #78855 <https://github.com/rust-lang/rust/issues/78855> for more information - = help: add `#![feature(pub_macro_rules)]` to the crate attributes to enable - -error[E0658]: `pub` on `macro_rules` items is unstable - --> $DIR/feature-gate-pub_macro_rules.rs:4:1 - | -LL | pub macro_rules! m2 { () => {} } - | ^^^ - | - = note: see issue #78855 <https://github.com/rust-lang/rust/issues/78855> for more information - = help: add `#![feature(pub_macro_rules)]` to the crate attributes to enable - -error[E0658]: `pub` on `macro_rules` items is unstable - --> $DIR/feature-gate-pub_macro_rules.rs:6:1 - | -LL | pub(crate) macro_rules! m3 { () => {} } - | ^^^^^^^^^^ - | - = note: see issue #78855 <https://github.com/rust-lang/rust/issues/78855> for more information - = help: add `#![feature(pub_macro_rules)]` to the crate attributes to enable - -error[E0658]: `pub` on `macro_rules` items is unstable - --> $DIR/feature-gate-pub_macro_rules.rs:8:1 - | -LL | pub(in self) macro_rules! m4 { () => {} } - | ^^^^^^^^^^^^ - | - = note: see issue #78855 <https://github.com/rust-lang/rust/issues/78855> for more information - = help: add `#![feature(pub_macro_rules)]` to the crate attributes to enable - -error: aborting due to 4 previous errors - -For more information about this error, try `rustc --explain E0658`. diff --git a/src/test/ui/macros/macro-export-on-modularized-macros.rs b/src/test/ui/macros/macro-export-on-modularized-macros.rs deleted file mode 100644 index 467c6ba7b78..00000000000 --- a/src/test/ui/macros/macro-export-on-modularized-macros.rs +++ /dev/null @@ -1,11 +0,0 @@ -#![feature(decl_macro)] -#![feature(pub_macro_rules)] - -#[macro_export] -macro m1() {} //~ ERROR `#[macro_export]` cannot be used on `macro` items - -#[macro_export] -pub macro_rules! m2 { () => {} } -//~^ ERROR `#[macro_export]` cannot be used on `macro_rules` with `pub` - -fn main() {} diff --git a/src/test/ui/macros/macro-export-on-modularized-macros.stderr b/src/test/ui/macros/macro-export-on-modularized-macros.stderr deleted file mode 100644 index 8bb031e12cb..00000000000 --- a/src/test/ui/macros/macro-export-on-modularized-macros.stderr +++ /dev/null @@ -1,14 +0,0 @@ -error: `#[macro_export]` cannot be used on `macro` items - --> $DIR/macro-export-on-modularized-macros.rs:5:1 - | -LL | macro m1() {} - | ^^^^^^^^^^^^^ - -error: `#[macro_export]` cannot be used on `macro_rules` with `pub` - --> $DIR/macro-export-on-modularized-macros.rs:8:1 - | -LL | pub macro_rules! m2 { () => {} } - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -error: aborting due to 2 previous errors - diff --git a/src/test/ui/macros/pub-macro-rules-fail.rs b/src/test/ui/macros/pub-macro-rules-fail.rs deleted file mode 100644 index bdb4c73f18b..00000000000 --- a/src/test/ui/macros/pub-macro-rules-fail.rs +++ /dev/null @@ -1,28 +0,0 @@ -#![feature(pub_macro_rules)] - -#[macro_use] -mod m { - pub macro_rules! mac { () => {} } - - // `pub` `macro_rules` cannot be redefined in the same module. - pub macro_rules! mac { () => {} } //~ ERROR the name `mac` is defined multiple times - - pub(self) macro_rules! private_mac { () => {} } -} - -const _: () = { - pub macro_rules! block_mac { () => {} } -}; - -mod n { - // Scope of `pub` `macro_rules` is not extended by `#[macro_use]`. - mac!(); //~ ERROR cannot find macro `mac` in this scope - - // `pub` `macro_rules` doesn't put the macro into the root module, unlike `#[macro_export]`. - crate::mac!(); //~ ERROR failed to resolve: maybe a missing crate `mac` - crate::block_mac!(); //~ ERROR failed to resolve: maybe a missing crate `block_mac` - - crate::m::private_mac!(); //~ ERROR macro `private_mac` is private -} - -fn main() {} diff --git a/src/test/ui/macros/pub-macro-rules-fail.stderr b/src/test/ui/macros/pub-macro-rules-fail.stderr deleted file mode 100644 index 588d79dd76a..00000000000 --- a/src/test/ui/macros/pub-macro-rules-fail.stderr +++ /dev/null @@ -1,48 +0,0 @@ -error[E0428]: the name `mac` is defined multiple times - --> $DIR/pub-macro-rules-fail.rs:8:5 - | -LL | pub macro_rules! mac { () => {} } - | -------------------- previous definition of the macro `mac` here -... -LL | pub macro_rules! mac { () => {} } - | ^^^^^^^^^^^^^^^^^^^^ `mac` redefined here - | - = note: `mac` must be defined only once in the macro namespace of this module - -error[E0433]: failed to resolve: maybe a missing crate `mac`? - --> $DIR/pub-macro-rules-fail.rs:22:12 - | -LL | crate::mac!(); - | ^^^ maybe a missing crate `mac`? - -error[E0433]: failed to resolve: maybe a missing crate `block_mac`? - --> $DIR/pub-macro-rules-fail.rs:23:12 - | -LL | crate::block_mac!(); - | ^^^^^^^^^ maybe a missing crate `block_mac`? - -error: cannot find macro `mac` in this scope - --> $DIR/pub-macro-rules-fail.rs:19:5 - | -LL | mac!(); - | ^^^ - | - = note: consider importing this macro: - m::mac - -error[E0603]: macro `private_mac` is private - --> $DIR/pub-macro-rules-fail.rs:25:15 - | -LL | crate::m::private_mac!(); - | ^^^^^^^^^^^ private macro - | -note: the macro `private_mac` is defined here - --> $DIR/pub-macro-rules-fail.rs:10:5 - | -LL | pub(self) macro_rules! private_mac { () => {} } - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -error: aborting due to 5 previous errors - -Some errors have detailed explanations: E0428, E0433, E0603. -For more information about an error, try `rustc --explain E0428`. diff --git a/src/test/ui/macros/pub-macro-rules.rs b/src/test/ui/macros/pub-macro-rules.rs deleted file mode 100644 index cd4a845f7c0..00000000000 --- a/src/test/ui/macros/pub-macro-rules.rs +++ /dev/null @@ -1,20 +0,0 @@ -// check-pass - -#![feature(pub_macro_rules)] - -mod m { - // `pub` `macro_rules` can be used earlier in item order than they are defined. - foo!(); - - pub macro_rules! foo { () => {} } - - // `pub(...)` works too. - pub(super) macro_rules! bar { () => {} } -} - -// `pub` `macro_rules` are available by module path. -m::foo!(); - -m::bar!(); - -fn main() {} |
