mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-22 02:00:00 +03:00
Rollup merge of #102567 - compiler-errors:issue-102561, r=davidtwco
Delay evaluating lint primary message until after it would be suppressed Fixes #102561 Fixes #102572
This commit is contained in:
@@ -350,7 +350,6 @@ fn struct_lint_level_impl(
|
||||
(Level::Deny | Level::Forbid, None) => sess.diagnostic().struct_err_lint(""),
|
||||
};
|
||||
|
||||
err.set_primary_message(msg);
|
||||
err.set_is_lint();
|
||||
|
||||
// If this code originates in a foreign macro, aka something that this crate
|
||||
@@ -375,6 +374,10 @@ fn struct_lint_level_impl(
|
||||
}
|
||||
}
|
||||
|
||||
// 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
|
||||
// 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
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
#[macro_export]
|
||||
macro_rules! foo {
|
||||
() => {
|
||||
let x: &Option<i32> = &Some(1);
|
||||
let _y = x as *const Option<i32>;
|
||||
}
|
||||
}
|
||||
@@ -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!();
|
||||
}
|
||||
Reference in New Issue
Block a user