Skip to content

Commit

Permalink
Don't trim path for unsafe_op_in_unsafe_fn lints
Browse files Browse the repository at this point in the history
  • Loading branch information
LeSeulArtichaut committed Jan 2, 2023
1 parent 731e0bf commit 2a7d559
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 10 deletions.
23 changes: 13 additions & 10 deletions compiler/rustc_mir_build/src/check_unsafety.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ use rustc_middle::thir::visit::{self, Visitor};
use rustc_hir as hir;
use rustc_middle::mir::BorrowKind;
use rustc_middle::thir::*;
use rustc_middle::ty::print::with_no_trimmed_paths;
use rustc_middle::ty::{self, ParamEnv, Ty, TyCtxt};
use rustc_session::lint::builtin::{UNSAFE_OP_IN_UNSAFE_FN, UNUSED_UNSAFE};
use rustc_session::lint::Level;
Expand Down Expand Up @@ -524,17 +525,19 @@ impl UnsafeOpKind {
hir_id: hir::HirId,
span: Span,
) {
// FIXME: ideally we would want to trim the def paths, but this is not
// feasible with the current lint emission API (see issue #106126).
match self {
CallToUnsafeFunction(did) if did.is_some() => tcx.emit_spanned_lint(
CallToUnsafeFunction(Some(did)) => tcx.emit_spanned_lint(
UNSAFE_OP_IN_UNSAFE_FN,
hir_id,
span,
UnsafeOpInUnsafeFnCallToUnsafeFunctionRequiresUnsafe {
span,
function: &tcx.def_path_str(did.unwrap()),
function: &with_no_trimmed_paths!(tcx.def_path_str(*did)),
},
),
CallToUnsafeFunction(..) => tcx.emit_spanned_lint(
CallToUnsafeFunction(None) => tcx.emit_spanned_lint(
UNSAFE_OP_IN_UNSAFE_FN,
hir_id,
span,
Expand Down Expand Up @@ -594,7 +597,7 @@ impl UnsafeOpKind {
span,
UnsafeOpInUnsafeFnCallToFunctionWithRequiresUnsafe {
span,
function: &tcx.def_path_str(*did),
function: &with_no_trimmed_paths!(tcx.def_path_str(*did)),
},
),
}
Expand All @@ -607,24 +610,24 @@ impl UnsafeOpKind {
unsafe_op_in_unsafe_fn_allowed: bool,
) {
match self {
CallToUnsafeFunction(did) if did.is_some() && unsafe_op_in_unsafe_fn_allowed => {
CallToUnsafeFunction(Some(did)) if unsafe_op_in_unsafe_fn_allowed => {
tcx.sess.emit_err(CallToUnsafeFunctionRequiresUnsafeUnsafeOpInUnsafeFnAllowed {
span,
function: &tcx.def_path_str(did.unwrap()),
function: &tcx.def_path_str(*did),
});
}
CallToUnsafeFunction(did) if did.is_some() => {
CallToUnsafeFunction(Some(did)) => {
tcx.sess.emit_err(CallToUnsafeFunctionRequiresUnsafe {
span,
function: &tcx.def_path_str(did.unwrap()),
function: &tcx.def_path_str(*did),
});
}
CallToUnsafeFunction(..) if unsafe_op_in_unsafe_fn_allowed => {
CallToUnsafeFunction(None) if unsafe_op_in_unsafe_fn_allowed => {
tcx.sess.emit_err(
CallToUnsafeFunctionRequiresUnsafeNamelessUnsafeOpInUnsafeFnAllowed { span },
);
}
CallToUnsafeFunction(..) => {
CallToUnsafeFunction(None) => {
tcx.sess.emit_err(CallToUnsafeFunctionRequiresUnsafeNameless { span });
}
UseOfInlineAssembly if unsafe_op_in_unsafe_fn_allowed => {
Expand Down
9 changes: 9 additions & 0 deletions src/test/ui/unsafe/auxiliary/issue-106126.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#[macro_export]
macro_rules! foo {
() => {
unsafe fn __unsf() {}
unsafe fn __foo() {
__unsf();
}
};
}
12 changes: 12 additions & 0 deletions src/test/ui/unsafe/issue-106126-good-path-bug.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// Regression test for #106126.
// check-pass
// aux-build:issue-106126.rs

#![deny(unsafe_op_in_unsafe_fn)]

#[macro_use]
extern crate issue_106126;

foo!();

fn main() {}

0 comments on commit 2a7d559

Please sign in to comment.