Delay evaluating lint primary message until after it would be suppressed
This commit is contained in:
parent
edadc7ccdd
commit
f088e543cb
@ -354,7 +354,6 @@ pub fn struct_lint_level<'s, 'd>(
|
|||||||
(Level::Deny | Level::Forbid, None) => sess.diagnostic().struct_err_lint(""),
|
(Level::Deny | Level::Forbid, None) => sess.diagnostic().struct_err_lint(""),
|
||||||
};
|
};
|
||||||
|
|
||||||
err.set_primary_message(msg);
|
|
||||||
err.set_is_lint();
|
err.set_is_lint();
|
||||||
|
|
||||||
// If this code originates in a foreign macro, aka something that this crate
|
// If this code originates in a foreign macro, aka something that this crate
|
||||||
@ -379,6 +378,10 @@ pub fn struct_lint_level<'s, 'd>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Delay evaluating and setting the primary message until after we've
|
||||||
|
// suppressed the lint due to macros.
|
||||||
|
err.set_primary_message(msg);
|
||||||
|
|
||||||
// Lint diagnostics that are covered by the expect level will not be emitted outside
|
// Lint diagnostics that are covered by the expect level will not be emitted outside
|
||||||
// the compiler. It is therefore not necessary to add any information for the user.
|
// the compiler. It is therefore not necessary to add any information for the user.
|
||||||
// This will therefore directly call the decorate function which will in turn emit
|
// This will therefore directly call the decorate function which will in turn emit
|
||||||
|
7
src/test/ui/lint/auxiliary/trivial-cast-ice.rs
Normal file
7
src/test/ui/lint/auxiliary/trivial-cast-ice.rs
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#[macro_export]
|
||||||
|
macro_rules! foo {
|
||||||
|
() => {
|
||||||
|
let x: &Option<i32> = &Some(1);
|
||||||
|
let _y = x as *const Option<i32>;
|
||||||
|
}
|
||||||
|
}
|
12
src/test/ui/lint/trivial-cast-ice.rs
Normal file
12
src/test/ui/lint/trivial-cast-ice.rs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
// aux-build:trivial-cast-ice.rs
|
||||||
|
// check-pass
|
||||||
|
|
||||||
|
// Demonstrates the ICE in #102561
|
||||||
|
|
||||||
|
#![deny(trivial_casts)]
|
||||||
|
|
||||||
|
extern crate trivial_cast_ice;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
trivial_cast_ice::foo!();
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user