Fix PassMode::Indirect with params
This commit is contained in:
parent
ab7d138d16
commit
f9a0c3fb0f
15
src/abi.rs
15
src/abi.rs
@ -4,6 +4,7 @@
|
|||||||
use rustc_codegen_ssa::traits::{AbiBuilderMethods, BaseTypeMethods};
|
use rustc_codegen_ssa::traits::{AbiBuilderMethods, BaseTypeMethods};
|
||||||
use rustc_data_structures::fx::FxHashSet;
|
use rustc_data_structures::fx::FxHashSet;
|
||||||
use rustc_middle::bug;
|
use rustc_middle::bug;
|
||||||
|
use rustc_middle::ty::layout::LayoutOf;
|
||||||
use rustc_middle::ty::Ty;
|
use rustc_middle::ty::Ty;
|
||||||
#[cfg(feature = "master")]
|
#[cfg(feature = "master")]
|
||||||
use rustc_session::config;
|
use rustc_session::config;
|
||||||
@ -184,9 +185,17 @@ fn gcc_type(&self, cx: &CodegenCx<'gcc, 'tcx>) -> FnAbiGcc<'gcc> {
|
|||||||
}
|
}
|
||||||
PassMode::Indirect { attrs, meta_attrs: Some(meta_attrs), on_stack } => {
|
PassMode::Indirect { attrs, meta_attrs: Some(meta_attrs), on_stack } => {
|
||||||
assert!(!on_stack);
|
assert!(!on_stack);
|
||||||
let ty =
|
// Construct the type of a (wide) pointer to `ty`, and pass its two fields.
|
||||||
apply_attrs(cx.type_ptr_to(arg.memory_ty(cx)), &attrs, argument_tys.len());
|
// Any two ABI-compatible unsized types have the same metadata type and
|
||||||
apply_attrs(ty, &meta_attrs, argument_tys.len())
|
// moreover the same metadata value leads to the same dynamic size and
|
||||||
|
// alignment, so this respects ABI compatibility.
|
||||||
|
let ptr_ty = Ty::new_mut_ptr(cx.tcx, arg.layout.ty);
|
||||||
|
let ptr_layout = cx.layout_of(ptr_ty);
|
||||||
|
let typ1 = ptr_layout.scalar_pair_element_gcc_type(cx, 0);
|
||||||
|
let typ2 = ptr_layout.scalar_pair_element_gcc_type(cx, 1);
|
||||||
|
argument_tys.push(apply_attrs(typ1, &attrs, argument_tys.len()));
|
||||||
|
argument_tys.push(apply_attrs(typ2, &meta_attrs, argument_tys.len()));
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
argument_tys.push(arg_ty);
|
argument_tys.push(arg_ty);
|
||||||
|
@ -50,7 +50,6 @@ tests/ui/coroutine/panic-safe.rs
|
|||||||
tests/ui/issues/issue-14875.rs
|
tests/ui/issues/issue-14875.rs
|
||||||
tests/ui/issues/issue-29948.rs
|
tests/ui/issues/issue-29948.rs
|
||||||
tests/ui/panics/nested_panic_caught.rs
|
tests/ui/panics/nested_panic_caught.rs
|
||||||
tests/ui/const_prop/ice-issue-111353.rs
|
|
||||||
tests/ui/process/println-with-broken-pipe.rs
|
tests/ui/process/println-with-broken-pipe.rs
|
||||||
tests/ui/lto/thin-lto-inlines2.rs
|
tests/ui/lto/thin-lto-inlines2.rs
|
||||||
tests/ui/lto/weak-works.rs
|
tests/ui/lto/weak-works.rs
|
||||||
@ -61,7 +60,6 @@ tests/ui/lto/msvc-imp-present.rs
|
|||||||
tests/ui/lto/lto-thin-rustc-loads-linker-plugin.rs
|
tests/ui/lto/lto-thin-rustc-loads-linker-plugin.rs
|
||||||
tests/ui/lto/all-crates.rs
|
tests/ui/lto/all-crates.rs
|
||||||
tests/ui/async-await/deep-futures-are-freeze.rs
|
tests/ui/async-await/deep-futures-are-freeze.rs
|
||||||
tests/ui/closures/capture-unsized-by-ref.rs
|
|
||||||
tests/ui/coroutine/resume-after-return.rs
|
tests/ui/coroutine/resume-after-return.rs
|
||||||
tests/ui/simd/masked-load-store.rs
|
tests/ui/simd/masked-load-store.rs
|
||||||
tests/ui/simd/repr_packed.rs
|
tests/ui/simd/repr_packed.rs
|
||||||
|
Loading…
Reference in New Issue
Block a user