mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 00:34:06 +00:00
resolve: Relax macro resolution consistency check to account for any errors
This commit is contained in:
parent
2e8a54af60
commit
ef09ed2002
@ -19,7 +19,7 @@ use rustc_feature::is_builtin_attr_name;
|
|||||||
use rustc_hir::def::{self, DefKind, NonMacroAttrKind};
|
use rustc_hir::def::{self, DefKind, NonMacroAttrKind};
|
||||||
use rustc_hir::def_id;
|
use rustc_hir::def_id;
|
||||||
use rustc_middle::middle::stability;
|
use rustc_middle::middle::stability;
|
||||||
use rustc_middle::{span_bug, ty};
|
use rustc_middle::ty;
|
||||||
use rustc_session::lint::builtin::UNUSED_MACROS;
|
use rustc_session::lint::builtin::UNUSED_MACROS;
|
||||||
use rustc_session::Session;
|
use rustc_session::Session;
|
||||||
use rustc_span::edition::Edition;
|
use rustc_span::edition::Edition;
|
||||||
@ -885,11 +885,11 @@ impl<'a> Resolver<'a> {
|
|||||||
initial_res: Option<Res>,
|
initial_res: Option<Res>,
|
||||||
res: Res| {
|
res: Res| {
|
||||||
if let Some(initial_res) = initial_res {
|
if let Some(initial_res) = initial_res {
|
||||||
if res != initial_res && res != Res::Err && this.ambiguity_errors.is_empty() {
|
if res != initial_res {
|
||||||
// Make sure compilation does not succeed if preferred macro resolution
|
// Make sure compilation does not succeed if preferred macro resolution
|
||||||
// has changed after the macro had been expanded. In theory all such
|
// has changed after the macro had been expanded. In theory all such
|
||||||
// situations should be reported as ambiguity errors, so this is a bug.
|
// situations should be reported as errors, so this is a bug.
|
||||||
span_bug!(span, "inconsistent resolution for a macro");
|
this.session.delay_span_bug(span, "inconsistent resolution for a macro");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// It's possible that the macro was unresolved (indeterminate) and silently
|
// It's possible that the macro was unresolved (indeterminate) and silently
|
||||||
|
12
src/test/ui/macros/issue-78325-inconsistent-resolution.rs
Normal file
12
src/test/ui/macros/issue-78325-inconsistent-resolution.rs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
macro_rules! define_other_core {
|
||||||
|
( ) => {
|
||||||
|
extern crate std as core;
|
||||||
|
//~^ ERROR macro-expanded `extern crate` items cannot shadow names passed with `--extern`
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
core::panic!();
|
||||||
|
}
|
||||||
|
|
||||||
|
define_other_core!();
|
@ -0,0 +1,13 @@
|
|||||||
|
error: macro-expanded `extern crate` items cannot shadow names passed with `--extern`
|
||||||
|
--> $DIR/issue-78325-inconsistent-resolution.rs:3:9
|
||||||
|
|
|
||||||
|
LL | extern crate std as core;
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
...
|
||||||
|
LL | define_other_core!();
|
||||||
|
| --------------------- in this macro invocation
|
||||||
|
|
|
||||||
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
Loading…
Reference in New Issue
Block a user