Skip to content

Commit

Permalink
Use type_is_copy_modulo_regions check in intrisicck
Browse files Browse the repository at this point in the history
  • Loading branch information
compiler-errors committed May 28, 2022
1 parent 116201e commit fc29730
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 1 deletion.
3 changes: 2 additions & 1 deletion compiler/rustc_typeck/src/check/intrinsicck.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ use rustc_session::lint;
use rustc_span::{Span, Symbol, DUMMY_SP};
use rustc_target::abi::{Pointer, VariantIdx};
use rustc_target::asm::{InlineAsmReg, InlineAsmRegClass, InlineAsmRegOrRegClass, InlineAsmType};
use rustc_trait_selection::infer::InferCtxtExt;

use super::FnCtxt;

Expand Down Expand Up @@ -210,7 +211,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {

// Check that the type implements Copy. The only case where this can
// possibly fail is for SIMD types which don't #[derive(Copy)].
if !ty.is_copy_modulo_regions(self.tcx.at(DUMMY_SP), self.param_env) {
if !self.infcx.type_is_copy_modulo_regions(self.param_env, ty, DUMMY_SP) {
let msg = "arguments for inline assembly must be copyable";
let mut err = self.tcx.sess.struct_span_err(expr.span, msg);
err.note(&format!("`{ty}` does not implement the Copy trait"));
Expand Down
10 changes: 10 additions & 0 deletions src/test/ui/asm/issue-97490.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// check-pass

pub type Yes = extern "sysv64" fn(&'static u8) -> !;

fn main() {
unsafe {
let yes = &6 as *const _ as *const Yes;
core::arch::asm!("call {}", in(reg) yes, options(noreturn));
}
}

0 comments on commit fc29730

Please sign in to comment.