Make RawPtr take Ty and Mutbl separately

This commit is contained in:
Michael Goulet 2024-03-21 17:33:10 -04:00
parent 678e62405f
commit 83eaede000

View File

@ -796,16 +796,16 @@ fn gather<'a, 'gcc, 'tcx>(
// This counts how many pointers // This counts how many pointers
fn ptr_count(t: Ty<'_>) -> usize { fn ptr_count(t: Ty<'_>) -> usize {
match t.kind() { match *t.kind() {
ty::RawPtr(p) => 1 + ptr_count(p.ty), ty::RawPtr(p_ty, _) => 1 + ptr_count(p_ty),
_ => 0, _ => 0,
} }
} }
// Non-ptr type // Non-ptr type
fn non_ptr(t: Ty<'_>) -> Ty<'_> { fn non_ptr(t: Ty<'_>) -> Ty<'_> {
match t.kind() { match *t.kind() {
ty::RawPtr(p) => non_ptr(p.ty), ty::RawPtr(p_ty, _) => non_ptr(p_ty),
_ => t, _ => t,
} }
} }
@ -814,8 +814,8 @@ fn non_ptr(t: Ty<'_>) -> Ty<'_> {
// to the element type of the first argument // to the element type of the first argument
let (_, element_ty0) = arg_tys[0].simd_size_and_type(bx.tcx()); let (_, element_ty0) = arg_tys[0].simd_size_and_type(bx.tcx());
let (_, element_ty1) = arg_tys[1].simd_size_and_type(bx.tcx()); let (_, element_ty1) = arg_tys[1].simd_size_and_type(bx.tcx());
let (pointer_count, underlying_ty) = match element_ty1.kind() { let (pointer_count, underlying_ty) = match *element_ty1.kind() {
ty::RawPtr(p) if p.ty == in_elem => (ptr_count(element_ty1), non_ptr(element_ty1)), ty::RawPtr(p_ty, _) if p_ty == in_elem => (ptr_count(element_ty1), non_ptr(element_ty1)),
_ => { _ => {
require!( require!(
false, false,
@ -910,16 +910,16 @@ fn non_ptr(t: Ty<'_>) -> Ty<'_> {
// This counts how many pointers // This counts how many pointers
fn ptr_count(t: Ty<'_>) -> usize { fn ptr_count(t: Ty<'_>) -> usize {
match t.kind() { match *t.kind() {
ty::RawPtr(p) => 1 + ptr_count(p.ty), ty::RawPtr(p_ty, _) => 1 + ptr_count(p_ty),
_ => 0, _ => 0,
} }
} }
// Non-ptr type // Non-ptr type
fn non_ptr(t: Ty<'_>) -> Ty<'_> { fn non_ptr(t: Ty<'_>) -> Ty<'_> {
match t.kind() { match *t.kind() {
ty::RawPtr(p) => non_ptr(p.ty), ty::RawPtr(p_ty, _) => non_ptr(p_ty),
_ => t, _ => t,
} }
} }
@ -929,8 +929,8 @@ fn non_ptr(t: Ty<'_>) -> Ty<'_> {
let (_, element_ty0) = arg_tys[0].simd_size_and_type(bx.tcx()); let (_, element_ty0) = arg_tys[0].simd_size_and_type(bx.tcx());
let (_, element_ty1) = arg_tys[1].simd_size_and_type(bx.tcx()); let (_, element_ty1) = arg_tys[1].simd_size_and_type(bx.tcx());
let (_, element_ty2) = arg_tys[2].simd_size_and_type(bx.tcx()); let (_, element_ty2) = arg_tys[2].simd_size_and_type(bx.tcx());
let (pointer_count, underlying_ty) = match element_ty1.kind() { let (pointer_count, underlying_ty) = match *element_ty1.kind() {
ty::RawPtr(p) if p.ty == in_elem && p.mutbl == hir::Mutability::Mut => { ty::RawPtr(p_ty, mutbl) if p_ty == in_elem && mutbl == hir::Mutability::Mut => {
(ptr_count(element_ty1), non_ptr(element_ty1)) (ptr_count(element_ty1), non_ptr(element_ty1))
} }
_ => { _ => {