diff options
| -rw-r--r-- | src/librustc/lint/builtin.rs | 12 | ||||
| -rw-r--r-- | src/librustc_lint/lib.rs | 7 | ||||
| -rw-r--r-- | src/librustc_resolve/lib.rs | 9 | ||||
| -rw-r--r-- | src/test/ui/imports/local-modularized-tricky-fail-3.rs | 2 | ||||
| -rw-r--r-- | src/test/ui/imports/local-modularized-tricky-fail-3.stderr | 7 |
5 files changed, 32 insertions, 5 deletions
diff --git a/src/librustc/lint/builtin.rs b/src/librustc/lint/builtin.rs index 015f755e97d..6783415619f 100644 --- a/src/librustc/lint/builtin.rs +++ b/src/librustc/lint/builtin.rs @@ -331,6 +331,13 @@ declare_lint! { via the module system" } +declare_lint! { + pub MACRO_EXPANDED_MACRO_EXPORTS_ACCESSED_BY_ABSOLUTE_PATHS, + Deny, + "macro-expanded `macro_export` macros from the current crate \ + cannot be referred to by absolute paths" +} + /// Some lints that are buffered from `libsyntax`. See `syntax::early_buffered_lints`. pub mod parser { declare_lint! { @@ -398,6 +405,7 @@ impl LintPass for HardwiredLints { WHERE_CLAUSES_OBJECT_SAFETY, PROC_MACRO_DERIVE_RESOLUTION_FALLBACK, MACRO_USE_EXTERN_CRATE, + MACRO_EXPANDED_MACRO_EXPORTS_ACCESSED_BY_ABSOLUTE_PATHS, parser::QUESTION_MARK_MACRO_SEP, ) } @@ -412,6 +420,7 @@ pub enum BuiltinLintDiagnostics { AbsPathWithModule(Span), DuplicatedMacroExports(ast::Ident, Span, Span), ProcMacroDeriveResolutionFallback(Span), + MacroExpandedMacroExportsAccessedByAbsolutePaths(Span), ElidedLifetimesInPaths(usize, Span, bool, Span, String), } @@ -453,6 +462,9 @@ impl BuiltinLintDiagnostics { db.span_label(span, "names from parent modules are not \ accessible without an explicit import"); } + BuiltinLintDiagnostics::MacroExpandedMacroExportsAccessedByAbsolutePaths(span_def) => { + db.span_note(span_def, "the macro is defined here"); + } BuiltinLintDiagnostics::ElidedLifetimesInPaths( n, path_span, incl_angl_brckt, insertion_span, anon_lts ) => { diff --git a/src/librustc_lint/lib.rs b/src/librustc_lint/lib.rs index 15eb4730c1d..7d802787105 100644 --- a/src/librustc_lint/lib.rs +++ b/src/librustc_lint/lib.rs @@ -334,7 +334,12 @@ pub fn register_builtins(store: &mut lint::LintStore, sess: Option<&Session>) { id: LintId::of(QUESTION_MARK_MACRO_SEP), reference: "issue #48075 <https://github.com/rust-lang/rust/issues/48075>", edition: Some(Edition::Edition2018), - } + }, + FutureIncompatibleInfo { + id: LintId::of(MACRO_EXPANDED_MACRO_EXPORTS_ACCESSED_BY_ABSOLUTE_PATHS), + reference: "issue #52234 <https://github.com/rust-lang/rust/issues/52234>", + edition: None, + }, ]); // Register renamed and removed lints diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index 3241459f64f..264f5c01135 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -4477,9 +4477,12 @@ impl<'a, 'crateloader: 'a> Resolver<'a, 'crateloader> { for &(span_use, span_def) in &self.macro_expanded_macro_export_errors { let msg = "macro-expanded `macro_export` macros from the current crate \ cannot be referred to by absolute paths"; - self.session.struct_span_err(span_use, msg) - .span_note(span_def, "the macro is defined here") - .emit(); + self.session.buffer_lint_with_diagnostic( + lint::builtin::MACRO_EXPANDED_MACRO_EXPORTS_ACCESSED_BY_ABSOLUTE_PATHS, + CRATE_NODE_ID, span_use, msg, + lint::builtin::BuiltinLintDiagnostics:: + MacroExpandedMacroExportsAccessedByAbsolutePaths(span_def), + ); } for &AmbiguityError { span, name, b1, b2, lexical } in &self.ambiguity_errors { diff --git a/src/test/ui/imports/local-modularized-tricky-fail-3.rs b/src/test/ui/imports/local-modularized-tricky-fail-3.rs index 6691d98c2b7..1cd7cc56a40 100644 --- a/src/test/ui/imports/local-modularized-tricky-fail-3.rs +++ b/src/test/ui/imports/local-modularized-tricky-fail-3.rs @@ -22,9 +22,11 @@ define_exported!(); mod m { use exported; //~^ ERROR macro-expanded `macro_export` macros from the current crate cannot + //~| WARN this was previously accepted } fn main() { ::exported!(); //~^ ERROR macro-expanded `macro_export` macros from the current crate cannot + //~| WARN this was previously accepted } diff --git a/src/test/ui/imports/local-modularized-tricky-fail-3.stderr b/src/test/ui/imports/local-modularized-tricky-fail-3.stderr index 34c50e04288..6c5c789e5ee 100644 --- a/src/test/ui/imports/local-modularized-tricky-fail-3.stderr +++ b/src/test/ui/imports/local-modularized-tricky-fail-3.stderr @@ -4,6 +4,9 @@ error: macro-expanded `macro_export` macros from the current crate cannot be ref LL | use exported; | ^^^^^^^^ | + = note: #[deny(macro_expanded_macro_exports_accessed_by_absolute_paths)] on by default + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: for more information, see issue #52234 <https://github.com/rust-lang/rust/issues/52234> note: the macro is defined here --> $DIR/local-modularized-tricky-fail-3.rs:15:5 | @@ -16,11 +19,13 @@ LL | define_exported!(); | ------------------- in this macro invocation error: macro-expanded `macro_export` macros from the current crate cannot be referred to by absolute paths - --> $DIR/local-modularized-tricky-fail-3.rs:28:5 + --> $DIR/local-modularized-tricky-fail-3.rs:29:5 | LL | ::exported!(); | ^^^^^^^^^^ | + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: for more information, see issue #52234 <https://github.com/rust-lang/rust/issues/52234> note: the macro is defined here --> $DIR/local-modularized-tricky-fail-3.rs:15:5 | |
