mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-29 02:03:53 +00:00
Move ZST ABI handling to rustc_target
This commit is contained in:
parent
a886938671
commit
b1493ba519
@ -642,7 +642,7 @@ impl<'a, Ty> ArgAbi<'a, Ty> {
|
|||||||
pub fn make_indirect(&mut self) {
|
pub fn make_indirect(&mut self) {
|
||||||
match self.mode {
|
match self.mode {
|
||||||
PassMode::Direct(_) | PassMode::Pair(_, _) => {
|
PassMode::Direct(_) | PassMode::Pair(_, _) => {
|
||||||
self.mode = Self::indirect_pass_mode(&self.layout);
|
self.make_indirect_force();
|
||||||
}
|
}
|
||||||
PassMode::Indirect { attrs: _, meta_attrs: _, on_stack: false } => {
|
PassMode::Indirect { attrs: _, meta_attrs: _, on_stack: false } => {
|
||||||
// already indirect
|
// already indirect
|
||||||
@ -652,6 +652,11 @@ impl<'a, Ty> ArgAbi<'a, Ty> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Same as make_indirect, but doesn't check the current `PassMode`.
|
||||||
|
pub fn make_indirect_force(&mut self) {
|
||||||
|
self.mode = Self::indirect_pass_mode(&self.layout);
|
||||||
|
}
|
||||||
|
|
||||||
/// Pass this argument indirectly, by placing it at a fixed stack offset.
|
/// Pass this argument indirectly, by placing it at a fixed stack offset.
|
||||||
/// This corresponds to the `byval` LLVM argument attribute.
|
/// This corresponds to the `byval` LLVM argument attribute.
|
||||||
/// This is only valid for sized arguments.
|
/// This is only valid for sized arguments.
|
||||||
@ -871,10 +876,10 @@ impl<'a, Ty> FnAbi<'a, Ty> {
|
|||||||
}
|
}
|
||||||
"x86_64" => match abi {
|
"x86_64" => match abi {
|
||||||
spec::abi::Abi::SysV64 { .. } => x86_64::compute_abi_info(cx, self),
|
spec::abi::Abi::SysV64 { .. } => x86_64::compute_abi_info(cx, self),
|
||||||
spec::abi::Abi::Win64 { .. } => x86_win64::compute_abi_info(self),
|
spec::abi::Abi::Win64 { .. } => x86_win64::compute_abi_info(cx, self),
|
||||||
_ => {
|
_ => {
|
||||||
if cx.target_spec().is_like_windows {
|
if cx.target_spec().is_like_windows {
|
||||||
x86_win64::compute_abi_info(self)
|
x86_win64::compute_abi_info(cx, self)
|
||||||
} else {
|
} else {
|
||||||
x86_64::compute_abi_info(cx, self)
|
x86_64::compute_abi_info(cx, self)
|
||||||
}
|
}
|
||||||
@ -898,7 +903,7 @@ impl<'a, Ty> FnAbi<'a, Ty> {
|
|||||||
"csky" => csky::compute_abi_info(self),
|
"csky" => csky::compute_abi_info(self),
|
||||||
"mips" | "mips32r6" => mips::compute_abi_info(cx, self),
|
"mips" | "mips32r6" => mips::compute_abi_info(cx, self),
|
||||||
"mips64" | "mips64r6" => mips64::compute_abi_info(cx, self),
|
"mips64" | "mips64r6" => mips64::compute_abi_info(cx, self),
|
||||||
"powerpc" => powerpc::compute_abi_info(self),
|
"powerpc" => powerpc::compute_abi_info(cx, self),
|
||||||
"powerpc64" => powerpc64::compute_abi_info(cx, self),
|
"powerpc64" => powerpc64::compute_abi_info(cx, self),
|
||||||
"s390x" => s390x::compute_abi_info(cx, self),
|
"s390x" => s390x::compute_abi_info(cx, self),
|
||||||
"msp430" => msp430::compute_abi_info(self),
|
"msp430" => msp430::compute_abi_info(self),
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
use crate::abi::call::{ArgAbi, FnAbi};
|
use crate::abi::call::{ArgAbi, FnAbi};
|
||||||
|
use crate::spec::HasTargetSpec;
|
||||||
|
|
||||||
fn classify_ret<Ty>(ret: &mut ArgAbi<'_, Ty>) {
|
fn classify_ret<Ty>(ret: &mut ArgAbi<'_, Ty>) {
|
||||||
if ret.layout.is_aggregate() {
|
if ret.layout.is_aggregate() {
|
||||||
@ -8,7 +9,17 @@ fn classify_ret<Ty>(ret: &mut ArgAbi<'_, Ty>) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn classify_arg<Ty>(arg: &mut ArgAbi<'_, Ty>) {
|
fn classify_arg<Ty>(cx: &impl HasTargetSpec, arg: &mut ArgAbi<'_, Ty>) {
|
||||||
|
if arg.is_ignore() {
|
||||||
|
// powerpc-unknown-linux-{gnu,musl,uclibc} doesn't ignore ZSTs.
|
||||||
|
if cx.target_spec().os == "linux"
|
||||||
|
&& matches!(&*cx.target_spec().env, "gnu" | "musl" | "uclibc")
|
||||||
|
&& arg.layout.is_zst()
|
||||||
|
{
|
||||||
|
arg.make_indirect_force();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
if arg.layout.is_aggregate() {
|
if arg.layout.is_aggregate() {
|
||||||
arg.make_indirect();
|
arg.make_indirect();
|
||||||
} else {
|
} else {
|
||||||
@ -16,15 +27,12 @@ fn classify_arg<Ty>(arg: &mut ArgAbi<'_, Ty>) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn compute_abi_info<Ty>(fn_abi: &mut FnAbi<'_, Ty>) {
|
pub fn compute_abi_info<Ty>(cx: &impl HasTargetSpec, fn_abi: &mut FnAbi<'_, Ty>) {
|
||||||
if !fn_abi.ret.is_ignore() {
|
if !fn_abi.ret.is_ignore() {
|
||||||
classify_ret(&mut fn_abi.ret);
|
classify_ret(&mut fn_abi.ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
for arg in fn_abi.args.iter_mut() {
|
for arg in fn_abi.args.iter_mut() {
|
||||||
if arg.is_ignore() {
|
classify_arg(cx, arg);
|
||||||
continue;
|
|
||||||
}
|
|
||||||
classify_arg(arg);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
use crate::abi::call::{ArgAbi, FnAbi, Reg};
|
use crate::abi::call::{ArgAbi, FnAbi, Reg};
|
||||||
use crate::abi::{HasDataLayout, TyAbiInterface};
|
use crate::abi::{HasDataLayout, TyAbiInterface};
|
||||||
|
use crate::spec::HasTargetSpec;
|
||||||
|
|
||||||
fn classify_ret<Ty>(ret: &mut ArgAbi<'_, Ty>) {
|
fn classify_ret<Ty>(ret: &mut ArgAbi<'_, Ty>) {
|
||||||
if !ret.layout.is_aggregate() && ret.layout.size.bits() <= 64 {
|
if !ret.layout.is_aggregate() && ret.layout.size.bits() <= 64 {
|
||||||
@ -15,12 +16,22 @@ fn classify_ret<Ty>(ret: &mut ArgAbi<'_, Ty>) {
|
|||||||
fn classify_arg<'a, Ty, C>(cx: &C, arg: &mut ArgAbi<'a, Ty>)
|
fn classify_arg<'a, Ty, C>(cx: &C, arg: &mut ArgAbi<'a, Ty>)
|
||||||
where
|
where
|
||||||
Ty: TyAbiInterface<'a, C> + Copy,
|
Ty: TyAbiInterface<'a, C> + Copy,
|
||||||
C: HasDataLayout,
|
C: HasDataLayout + HasTargetSpec,
|
||||||
{
|
{
|
||||||
if !arg.layout.is_sized() {
|
if !arg.layout.is_sized() {
|
||||||
// Not touching this...
|
// Not touching this...
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if arg.is_ignore() {
|
||||||
|
// s390x-unknown-linux-{gnu,musl,uclibc} doesn't ignore ZSTs.
|
||||||
|
if cx.target_spec().os == "linux"
|
||||||
|
&& matches!(&*cx.target_spec().env, "gnu" | "musl" | "uclibc")
|
||||||
|
&& arg.layout.is_zst()
|
||||||
|
{
|
||||||
|
arg.make_indirect_force();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
if !arg.layout.is_aggregate() && arg.layout.size.bits() <= 64 {
|
if !arg.layout.is_aggregate() && arg.layout.size.bits() <= 64 {
|
||||||
arg.extend_integer_width_to(64);
|
arg.extend_integer_width_to(64);
|
||||||
return;
|
return;
|
||||||
@ -46,16 +57,13 @@ where
|
|||||||
pub fn compute_abi_info<'a, Ty, C>(cx: &C, fn_abi: &mut FnAbi<'a, Ty>)
|
pub fn compute_abi_info<'a, Ty, C>(cx: &C, fn_abi: &mut FnAbi<'a, Ty>)
|
||||||
where
|
where
|
||||||
Ty: TyAbiInterface<'a, C> + Copy,
|
Ty: TyAbiInterface<'a, C> + Copy,
|
||||||
C: HasDataLayout,
|
C: HasDataLayout + HasTargetSpec,
|
||||||
{
|
{
|
||||||
if !fn_abi.ret.is_ignore() {
|
if !fn_abi.ret.is_ignore() {
|
||||||
classify_ret(&mut fn_abi.ret);
|
classify_ret(&mut fn_abi.ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
for arg in fn_abi.args.iter_mut() {
|
for arg in fn_abi.args.iter_mut() {
|
||||||
if arg.is_ignore() {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
classify_arg(cx, arg);
|
classify_arg(cx, arg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ use crate::abi::call::{
|
|||||||
ArgAbi, ArgAttribute, ArgAttributes, ArgExtension, CastTarget, FnAbi, Reg, Uniform,
|
ArgAbi, ArgAttribute, ArgAttributes, ArgExtension, CastTarget, FnAbi, Reg, Uniform,
|
||||||
};
|
};
|
||||||
use crate::abi::{self, HasDataLayout, Scalar, Size, TyAbiInterface, TyAndLayout};
|
use crate::abi::{self, HasDataLayout, Scalar, Size, TyAbiInterface, TyAndLayout};
|
||||||
|
use crate::spec::HasTargetSpec;
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct Sdata {
|
pub struct Sdata {
|
||||||
@ -211,7 +212,7 @@ where
|
|||||||
pub fn compute_abi_info<'a, Ty, C>(cx: &C, fn_abi: &mut FnAbi<'a, Ty>)
|
pub fn compute_abi_info<'a, Ty, C>(cx: &C, fn_abi: &mut FnAbi<'a, Ty>)
|
||||||
where
|
where
|
||||||
Ty: TyAbiInterface<'a, C> + Copy,
|
Ty: TyAbiInterface<'a, C> + Copy,
|
||||||
C: HasDataLayout,
|
C: HasDataLayout + HasTargetSpec,
|
||||||
{
|
{
|
||||||
if !fn_abi.ret.is_ignore() {
|
if !fn_abi.ret.is_ignore() {
|
||||||
classify_arg(cx, &mut fn_abi.ret, Size::from_bytes(32));
|
classify_arg(cx, &mut fn_abi.ret, Size::from_bytes(32));
|
||||||
@ -219,7 +220,14 @@ where
|
|||||||
|
|
||||||
for arg in fn_abi.args.iter_mut() {
|
for arg in fn_abi.args.iter_mut() {
|
||||||
if arg.is_ignore() {
|
if arg.is_ignore() {
|
||||||
continue;
|
// sparc64-unknown-linux-{gnu,musl,uclibc} doesn't ignore ZSTs.
|
||||||
|
if cx.target_spec().os == "linux"
|
||||||
|
&& matches!(&*cx.target_spec().env, "gnu" | "musl" | "uclibc")
|
||||||
|
&& arg.layout.is_zst()
|
||||||
|
{
|
||||||
|
arg.make_indirect_force();
|
||||||
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
classify_arg(cx, arg, Size::from_bytes(16));
|
classify_arg(cx, arg, Size::from_bytes(16));
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
use crate::abi::call::{ArgAbi, FnAbi, Reg};
|
use crate::abi::call::{ArgAbi, FnAbi, Reg};
|
||||||
use crate::abi::{Abi, Float, Primitive};
|
use crate::abi::{Abi, Float, Primitive};
|
||||||
|
use crate::spec::HasTargetSpec;
|
||||||
|
|
||||||
// Win64 ABI: https://docs.microsoft.com/en-us/cpp/build/parameter-passing
|
// Win64 ABI: https://docs.microsoft.com/en-us/cpp/build/parameter-passing
|
||||||
|
|
||||||
pub fn compute_abi_info<Ty>(fn_abi: &mut FnAbi<'_, Ty>) {
|
pub fn compute_abi_info<Ty>(cx: &impl HasTargetSpec, fn_abi: &mut FnAbi<'_, Ty>) {
|
||||||
let fixup = |a: &mut ArgAbi<'_, Ty>| {
|
let fixup = |a: &mut ArgAbi<'_, Ty>| {
|
||||||
match a.layout.abi {
|
match a.layout.abi {
|
||||||
Abi::Uninhabited | Abi::Aggregate { sized: false } => {}
|
Abi::Uninhabited | Abi::Aggregate { sized: false } => {}
|
||||||
@ -37,6 +38,13 @@ pub fn compute_abi_info<Ty>(fn_abi: &mut FnAbi<'_, Ty>) {
|
|||||||
}
|
}
|
||||||
for arg in fn_abi.args.iter_mut() {
|
for arg in fn_abi.args.iter_mut() {
|
||||||
if arg.is_ignore() {
|
if arg.is_ignore() {
|
||||||
|
// x86_64-pc-windows-gnu doesn't ignore ZSTs.
|
||||||
|
if cx.target_spec().os == "windows"
|
||||||
|
&& cx.target_spec().env == "gnu"
|
||||||
|
&& arg.layout.is_zst()
|
||||||
|
{
|
||||||
|
arg.make_indirect_force();
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
fixup(arg);
|
fixup(arg);
|
||||||
|
@ -584,7 +584,7 @@ fn fn_abi_new_uncached<'tcx>(
|
|||||||
let conv = conv_from_spec_abi(cx.tcx(), sig.abi, sig.c_variadic);
|
let conv = conv_from_spec_abi(cx.tcx(), sig.abi, sig.c_variadic);
|
||||||
|
|
||||||
let mut inputs = sig.inputs();
|
let mut inputs = sig.inputs();
|
||||||
let extra_args = if sig.abi == RustCall {
|
let extra_args = if sig.abi == SpecAbi::RustCall {
|
||||||
assert!(!sig.c_variadic && extra_args.is_empty());
|
assert!(!sig.c_variadic && extra_args.is_empty());
|
||||||
|
|
||||||
if let Some(input) = sig.inputs().last() {
|
if let Some(input) = sig.inputs().last() {
|
||||||
@ -608,18 +608,6 @@ fn fn_abi_new_uncached<'tcx>(
|
|||||||
extra_args
|
extra_args
|
||||||
};
|
};
|
||||||
|
|
||||||
let target = &cx.tcx.sess.target;
|
|
||||||
let target_env_gnu_like = matches!(&target.env[..], "gnu" | "musl" | "uclibc");
|
|
||||||
let win_x64_gnu = target.os == "windows" && target.arch == "x86_64" && target.env == "gnu";
|
|
||||||
let linux_s390x_gnu_like =
|
|
||||||
target.os == "linux" && target.arch == "s390x" && target_env_gnu_like;
|
|
||||||
let linux_sparc64_gnu_like =
|
|
||||||
target.os == "linux" && target.arch == "sparc64" && target_env_gnu_like;
|
|
||||||
let linux_powerpc_gnu_like =
|
|
||||||
target.os == "linux" && target.arch == "powerpc" && target_env_gnu_like;
|
|
||||||
use SpecAbi::*;
|
|
||||||
let rust_abi = matches!(sig.abi, RustIntrinsic | Rust | RustCall);
|
|
||||||
|
|
||||||
let is_drop_in_place =
|
let is_drop_in_place =
|
||||||
fn_def_id.is_some() && fn_def_id == cx.tcx.lang_items().drop_in_place_fn();
|
fn_def_id.is_some() && fn_def_id == cx.tcx.lang_items().drop_in_place_fn();
|
||||||
|
|
||||||
@ -659,18 +647,7 @@ fn fn_abi_new_uncached<'tcx>(
|
|||||||
});
|
});
|
||||||
|
|
||||||
if arg.layout.is_zst() {
|
if arg.layout.is_zst() {
|
||||||
// For some forsaken reason, x86_64-pc-windows-gnu
|
arg.mode = PassMode::Ignore;
|
||||||
// doesn't ignore zero-sized struct arguments.
|
|
||||||
// The same is true for {s390x,sparc64,powerpc}-unknown-linux-{gnu,musl,uclibc}.
|
|
||||||
if is_return
|
|
||||||
|| rust_abi
|
|
||||||
|| (!win_x64_gnu
|
|
||||||
&& !linux_s390x_gnu_like
|
|
||||||
&& !linux_sparc64_gnu_like
|
|
||||||
&& !linux_powerpc_gnu_like)
|
|
||||||
{
|
|
||||||
arg.mode = PassMode::Ignore;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(arg)
|
Ok(arg)
|
||||||
|
@ -91,10 +91,12 @@ const KNOWN_DIRECTIVE_NAMES: &[&str] = &[
|
|||||||
"ignore-nvptx64-nvidia-cuda",
|
"ignore-nvptx64-nvidia-cuda",
|
||||||
"ignore-openbsd",
|
"ignore-openbsd",
|
||||||
"ignore-pass",
|
"ignore-pass",
|
||||||
|
"ignore-powerpc",
|
||||||
"ignore-remote",
|
"ignore-remote",
|
||||||
"ignore-riscv64",
|
"ignore-riscv64",
|
||||||
"ignore-s390x",
|
"ignore-s390x",
|
||||||
"ignore-sgx",
|
"ignore-sgx",
|
||||||
|
"ignore-sparc64",
|
||||||
"ignore-spirv",
|
"ignore-spirv",
|
||||||
"ignore-stable",
|
"ignore-stable",
|
||||||
"ignore-stage1",
|
"ignore-stage1",
|
||||||
@ -122,6 +124,7 @@ const KNOWN_DIRECTIVE_NAMES: &[&str] = &[
|
|||||||
"ignore-x86",
|
"ignore-x86",
|
||||||
"ignore-x86_64",
|
"ignore-x86_64",
|
||||||
"ignore-x86_64-apple-darwin",
|
"ignore-x86_64-apple-darwin",
|
||||||
|
"ignore-x86_64-pc-windows-gnu",
|
||||||
"ignore-x86_64-unknown-linux-gnu",
|
"ignore-x86_64-unknown-linux-gnu",
|
||||||
"incremental",
|
"incremental",
|
||||||
"known-bug",
|
"known-bug",
|
||||||
@ -189,7 +192,9 @@ const KNOWN_DIRECTIVE_NAMES: &[&str] = &[
|
|||||||
"only-msvc",
|
"only-msvc",
|
||||||
"only-nightly",
|
"only-nightly",
|
||||||
"only-nvptx64",
|
"only-nvptx64",
|
||||||
|
"only-powerpc",
|
||||||
"only-riscv64",
|
"only-riscv64",
|
||||||
|
"only-s390x",
|
||||||
"only-sparc",
|
"only-sparc",
|
||||||
"only-sparc64",
|
"only-sparc64",
|
||||||
"only-stable",
|
"only-stable",
|
||||||
|
67
tests/ui/abi/c-zst.other-linux.stderr
Normal file
67
tests/ui/abi/c-zst.other-linux.stderr
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
error: fn_abi_of(pass_zst) = FnAbi {
|
||||||
|
args: [
|
||||||
|
ArgAbi {
|
||||||
|
layout: TyAndLayout {
|
||||||
|
ty: (),
|
||||||
|
layout: Layout {
|
||||||
|
size: Size(0 bytes),
|
||||||
|
align: AbiAndPrefAlign {
|
||||||
|
abi: $SOME_ALIGN,
|
||||||
|
pref: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
abi: Aggregate {
|
||||||
|
sized: true,
|
||||||
|
},
|
||||||
|
fields: Arbitrary {
|
||||||
|
offsets: [],
|
||||||
|
memory_index: [],
|
||||||
|
},
|
||||||
|
largest_niche: None,
|
||||||
|
variants: Single {
|
||||||
|
index: 0,
|
||||||
|
},
|
||||||
|
max_repr_align: None,
|
||||||
|
unadjusted_abi_align: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mode: Ignore,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
ret: ArgAbi {
|
||||||
|
layout: TyAndLayout {
|
||||||
|
ty: (),
|
||||||
|
layout: Layout {
|
||||||
|
size: Size(0 bytes),
|
||||||
|
align: AbiAndPrefAlign {
|
||||||
|
abi: $SOME_ALIGN,
|
||||||
|
pref: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
abi: Aggregate {
|
||||||
|
sized: true,
|
||||||
|
},
|
||||||
|
fields: Arbitrary {
|
||||||
|
offsets: [],
|
||||||
|
memory_index: [],
|
||||||
|
},
|
||||||
|
largest_niche: None,
|
||||||
|
variants: Single {
|
||||||
|
index: 0,
|
||||||
|
},
|
||||||
|
max_repr_align: None,
|
||||||
|
unadjusted_abi_align: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mode: Ignore,
|
||||||
|
},
|
||||||
|
c_variadic: false,
|
||||||
|
fixed_count: 1,
|
||||||
|
conv: C,
|
||||||
|
can_unwind: false,
|
||||||
|
}
|
||||||
|
--> $DIR/c-zst.rs:27:1
|
||||||
|
|
|
||||||
|
LL | extern "C" fn pass_zst(_: ()) {}
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
67
tests/ui/abi/c-zst.other.stderr
Normal file
67
tests/ui/abi/c-zst.other.stderr
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
error: fn_abi_of(pass_zst) = FnAbi {
|
||||||
|
args: [
|
||||||
|
ArgAbi {
|
||||||
|
layout: TyAndLayout {
|
||||||
|
ty: (),
|
||||||
|
layout: Layout {
|
||||||
|
size: Size(0 bytes),
|
||||||
|
align: AbiAndPrefAlign {
|
||||||
|
abi: $SOME_ALIGN,
|
||||||
|
pref: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
abi: Aggregate {
|
||||||
|
sized: true,
|
||||||
|
},
|
||||||
|
fields: Arbitrary {
|
||||||
|
offsets: [],
|
||||||
|
memory_index: [],
|
||||||
|
},
|
||||||
|
largest_niche: None,
|
||||||
|
variants: Single {
|
||||||
|
index: 0,
|
||||||
|
},
|
||||||
|
max_repr_align: None,
|
||||||
|
unadjusted_abi_align: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mode: Ignore,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
ret: ArgAbi {
|
||||||
|
layout: TyAndLayout {
|
||||||
|
ty: (),
|
||||||
|
layout: Layout {
|
||||||
|
size: Size(0 bytes),
|
||||||
|
align: AbiAndPrefAlign {
|
||||||
|
abi: $SOME_ALIGN,
|
||||||
|
pref: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
abi: Aggregate {
|
||||||
|
sized: true,
|
||||||
|
},
|
||||||
|
fields: Arbitrary {
|
||||||
|
offsets: [],
|
||||||
|
memory_index: [],
|
||||||
|
},
|
||||||
|
largest_niche: None,
|
||||||
|
variants: Single {
|
||||||
|
index: 0,
|
||||||
|
},
|
||||||
|
max_repr_align: None,
|
||||||
|
unadjusted_abi_align: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mode: Ignore,
|
||||||
|
},
|
||||||
|
c_variadic: false,
|
||||||
|
fixed_count: 1,
|
||||||
|
conv: C,
|
||||||
|
can_unwind: false,
|
||||||
|
}
|
||||||
|
--> $DIR/c-zst.rs:27:1
|
||||||
|
|
|
||||||
|
LL | extern "C" fn pass_zst(_: ()) {}
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
78
tests/ui/abi/c-zst.powerpc-linux.stderr
Normal file
78
tests/ui/abi/c-zst.powerpc-linux.stderr
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
error: fn_abi_of(pass_zst) = FnAbi {
|
||||||
|
args: [
|
||||||
|
ArgAbi {
|
||||||
|
layout: TyAndLayout {
|
||||||
|
ty: (),
|
||||||
|
layout: Layout {
|
||||||
|
size: Size(0 bytes),
|
||||||
|
align: AbiAndPrefAlign {
|
||||||
|
abi: $SOME_ALIGN,
|
||||||
|
pref: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
abi: Aggregate {
|
||||||
|
sized: true,
|
||||||
|
},
|
||||||
|
fields: Arbitrary {
|
||||||
|
offsets: [],
|
||||||
|
memory_index: [],
|
||||||
|
},
|
||||||
|
largest_niche: None,
|
||||||
|
variants: Single {
|
||||||
|
index: 0,
|
||||||
|
},
|
||||||
|
max_repr_align: None,
|
||||||
|
unadjusted_abi_align: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mode: Indirect {
|
||||||
|
attrs: ArgAttributes {
|
||||||
|
regular: NoAlias | NoCapture | NonNull | NoUndef,
|
||||||
|
arg_ext: None,
|
||||||
|
pointee_size: Size(0 bytes),
|
||||||
|
pointee_align: Some(
|
||||||
|
Align(1 bytes),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
meta_attrs: None,
|
||||||
|
on_stack: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
ret: ArgAbi {
|
||||||
|
layout: TyAndLayout {
|
||||||
|
ty: (),
|
||||||
|
layout: Layout {
|
||||||
|
size: Size(0 bytes),
|
||||||
|
align: AbiAndPrefAlign {
|
||||||
|
abi: $SOME_ALIGN,
|
||||||
|
pref: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
abi: Aggregate {
|
||||||
|
sized: true,
|
||||||
|
},
|
||||||
|
fields: Arbitrary {
|
||||||
|
offsets: [],
|
||||||
|
memory_index: [],
|
||||||
|
},
|
||||||
|
largest_niche: None,
|
||||||
|
variants: Single {
|
||||||
|
index: 0,
|
||||||
|
},
|
||||||
|
max_repr_align: None,
|
||||||
|
unadjusted_abi_align: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mode: Ignore,
|
||||||
|
},
|
||||||
|
c_variadic: false,
|
||||||
|
fixed_count: 1,
|
||||||
|
conv: C,
|
||||||
|
can_unwind: false,
|
||||||
|
}
|
||||||
|
--> $DIR/c-zst.rs:27:1
|
||||||
|
|
|
||||||
|
LL | extern "C" fn pass_zst(_: ()) {}
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
27
tests/ui/abi/c-zst.rs
Normal file
27
tests/ui/abi/c-zst.rs
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
//@ revisions: other other-linux x86_64-pc-windows-gnu s390x-linux sparc64-linux powerpc-linux
|
||||||
|
//@ normalize-stderr-test: "(abi|pref|unadjusted_abi_align): Align\([1-8] bytes\)" -> "$1: $$SOME_ALIGN"
|
||||||
|
// ZSTs are only not ignored when the target_env is "gnu", "musl" or "uclibc". However, Rust does
|
||||||
|
// not currently support any other target_env on these architectures.
|
||||||
|
|
||||||
|
// Ignore the ZST revisions
|
||||||
|
//@[other] ignore-x86_64-pc-windows-gnu
|
||||||
|
//@[other] ignore-linux
|
||||||
|
//@[other-linux] only-linux
|
||||||
|
//@[other-linux] ignore-s390x
|
||||||
|
//@[other-linux] ignore-sparc64
|
||||||
|
//@[other-linux] ignore-powerpc
|
||||||
|
|
||||||
|
// Pass the ZST indirectly revisions
|
||||||
|
//@[x86_64-pc-windows-gnu] only-x86_64-pc-windows-gnu
|
||||||
|
//@[s390x-linux] only-s390x
|
||||||
|
//@[s390x-linux] only-linux
|
||||||
|
//@[sparc64-linux] only-sparc64
|
||||||
|
//@[sparc64-linux] only-linux
|
||||||
|
//@[powerpc-linux] only-powerpc
|
||||||
|
//@[powerpc-linux] only-linux
|
||||||
|
|
||||||
|
#![feature(rustc_attrs)]
|
||||||
|
#![crate_type = "lib"]
|
||||||
|
|
||||||
|
#[rustc_abi(debug)]
|
||||||
|
extern "C" fn pass_zst(_: ()) {} //~ ERROR: fn_abi
|
78
tests/ui/abi/c-zst.s390x-linux.stderr
Normal file
78
tests/ui/abi/c-zst.s390x-linux.stderr
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
error: fn_abi_of(pass_zst) = FnAbi {
|
||||||
|
args: [
|
||||||
|
ArgAbi {
|
||||||
|
layout: TyAndLayout {
|
||||||
|
ty: (),
|
||||||
|
layout: Layout {
|
||||||
|
size: Size(0 bytes),
|
||||||
|
align: AbiAndPrefAlign {
|
||||||
|
abi: $SOME_ALIGN,
|
||||||
|
pref: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
abi: Aggregate {
|
||||||
|
sized: true,
|
||||||
|
},
|
||||||
|
fields: Arbitrary {
|
||||||
|
offsets: [],
|
||||||
|
memory_index: [],
|
||||||
|
},
|
||||||
|
largest_niche: None,
|
||||||
|
variants: Single {
|
||||||
|
index: 0,
|
||||||
|
},
|
||||||
|
max_repr_align: None,
|
||||||
|
unadjusted_abi_align: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mode: Indirect {
|
||||||
|
attrs: ArgAttributes {
|
||||||
|
regular: NoAlias | NoCapture | NonNull | NoUndef,
|
||||||
|
arg_ext: None,
|
||||||
|
pointee_size: Size(0 bytes),
|
||||||
|
pointee_align: Some(
|
||||||
|
Align(1 bytes),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
meta_attrs: None,
|
||||||
|
on_stack: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
ret: ArgAbi {
|
||||||
|
layout: TyAndLayout {
|
||||||
|
ty: (),
|
||||||
|
layout: Layout {
|
||||||
|
size: Size(0 bytes),
|
||||||
|
align: AbiAndPrefAlign {
|
||||||
|
abi: $SOME_ALIGN,
|
||||||
|
pref: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
abi: Aggregate {
|
||||||
|
sized: true,
|
||||||
|
},
|
||||||
|
fields: Arbitrary {
|
||||||
|
offsets: [],
|
||||||
|
memory_index: [],
|
||||||
|
},
|
||||||
|
largest_niche: None,
|
||||||
|
variants: Single {
|
||||||
|
index: 0,
|
||||||
|
},
|
||||||
|
max_repr_align: None,
|
||||||
|
unadjusted_abi_align: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mode: Ignore,
|
||||||
|
},
|
||||||
|
c_variadic: false,
|
||||||
|
fixed_count: 1,
|
||||||
|
conv: C,
|
||||||
|
can_unwind: false,
|
||||||
|
}
|
||||||
|
--> $DIR/c-zst.rs:27:1
|
||||||
|
|
|
||||||
|
LL | extern "C" fn pass_zst(_: ()) {}
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
78
tests/ui/abi/c-zst.sparc64-linux.stderr
Normal file
78
tests/ui/abi/c-zst.sparc64-linux.stderr
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
error: fn_abi_of(pass_zst) = FnAbi {
|
||||||
|
args: [
|
||||||
|
ArgAbi {
|
||||||
|
layout: TyAndLayout {
|
||||||
|
ty: (),
|
||||||
|
layout: Layout {
|
||||||
|
size: Size(0 bytes),
|
||||||
|
align: AbiAndPrefAlign {
|
||||||
|
abi: $SOME_ALIGN,
|
||||||
|
pref: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
abi: Aggregate {
|
||||||
|
sized: true,
|
||||||
|
},
|
||||||
|
fields: Arbitrary {
|
||||||
|
offsets: [],
|
||||||
|
memory_index: [],
|
||||||
|
},
|
||||||
|
largest_niche: None,
|
||||||
|
variants: Single {
|
||||||
|
index: 0,
|
||||||
|
},
|
||||||
|
max_repr_align: None,
|
||||||
|
unadjusted_abi_align: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mode: Indirect {
|
||||||
|
attrs: ArgAttributes {
|
||||||
|
regular: NoAlias | NoCapture | NonNull | NoUndef,
|
||||||
|
arg_ext: None,
|
||||||
|
pointee_size: Size(0 bytes),
|
||||||
|
pointee_align: Some(
|
||||||
|
Align(1 bytes),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
meta_attrs: None,
|
||||||
|
on_stack: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
ret: ArgAbi {
|
||||||
|
layout: TyAndLayout {
|
||||||
|
ty: (),
|
||||||
|
layout: Layout {
|
||||||
|
size: Size(0 bytes),
|
||||||
|
align: AbiAndPrefAlign {
|
||||||
|
abi: $SOME_ALIGN,
|
||||||
|
pref: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
abi: Aggregate {
|
||||||
|
sized: true,
|
||||||
|
},
|
||||||
|
fields: Arbitrary {
|
||||||
|
offsets: [],
|
||||||
|
memory_index: [],
|
||||||
|
},
|
||||||
|
largest_niche: None,
|
||||||
|
variants: Single {
|
||||||
|
index: 0,
|
||||||
|
},
|
||||||
|
max_repr_align: None,
|
||||||
|
unadjusted_abi_align: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mode: Ignore,
|
||||||
|
},
|
||||||
|
c_variadic: false,
|
||||||
|
fixed_count: 1,
|
||||||
|
conv: C,
|
||||||
|
can_unwind: false,
|
||||||
|
}
|
||||||
|
--> $DIR/c-zst.rs:27:1
|
||||||
|
|
|
||||||
|
LL | extern "C" fn pass_zst(_: ()) {}
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
78
tests/ui/abi/c-zst.x86_64-pc-windows-gnu.stderr
Normal file
78
tests/ui/abi/c-zst.x86_64-pc-windows-gnu.stderr
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
error: fn_abi_of(pass_zst) = FnAbi {
|
||||||
|
args: [
|
||||||
|
ArgAbi {
|
||||||
|
layout: TyAndLayout {
|
||||||
|
ty: (),
|
||||||
|
layout: Layout {
|
||||||
|
size: Size(0 bytes),
|
||||||
|
align: AbiAndPrefAlign {
|
||||||
|
abi: $SOME_ALIGN,
|
||||||
|
pref: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
abi: Aggregate {
|
||||||
|
sized: true,
|
||||||
|
},
|
||||||
|
fields: Arbitrary {
|
||||||
|
offsets: [],
|
||||||
|
memory_index: [],
|
||||||
|
},
|
||||||
|
largest_niche: None,
|
||||||
|
variants: Single {
|
||||||
|
index: 0,
|
||||||
|
},
|
||||||
|
max_repr_align: None,
|
||||||
|
unadjusted_abi_align: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mode: Indirect {
|
||||||
|
attrs: ArgAttributes {
|
||||||
|
regular: NoAlias | NoCapture | NonNull | NoUndef,
|
||||||
|
arg_ext: None,
|
||||||
|
pointee_size: Size(0 bytes),
|
||||||
|
pointee_align: Some(
|
||||||
|
Align(1 bytes),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
meta_attrs: None,
|
||||||
|
on_stack: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
ret: ArgAbi {
|
||||||
|
layout: TyAndLayout {
|
||||||
|
ty: (),
|
||||||
|
layout: Layout {
|
||||||
|
size: Size(0 bytes),
|
||||||
|
align: AbiAndPrefAlign {
|
||||||
|
abi: $SOME_ALIGN,
|
||||||
|
pref: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
abi: Aggregate {
|
||||||
|
sized: true,
|
||||||
|
},
|
||||||
|
fields: Arbitrary {
|
||||||
|
offsets: [],
|
||||||
|
memory_index: [],
|
||||||
|
},
|
||||||
|
largest_niche: None,
|
||||||
|
variants: Single {
|
||||||
|
index: 0,
|
||||||
|
},
|
||||||
|
max_repr_align: None,
|
||||||
|
unadjusted_abi_align: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mode: Ignore,
|
||||||
|
},
|
||||||
|
c_variadic: false,
|
||||||
|
fixed_count: 1,
|
||||||
|
conv: C,
|
||||||
|
can_unwind: false,
|
||||||
|
}
|
||||||
|
--> $DIR/c-zst.rs:27:1
|
||||||
|
|
|
||||||
|
LL | extern "C" fn pass_zst(_: ()) {}
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
8
tests/ui/abi/sysv64-zst.rs
Normal file
8
tests/ui/abi/sysv64-zst.rs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
//@ only-x86_64
|
||||||
|
//@ normalize-stderr-test: "(abi|pref|unadjusted_abi_align): Align\([1-8] bytes\)" -> "$1: $$SOME_ALIGN"
|
||||||
|
|
||||||
|
#![feature(rustc_attrs)]
|
||||||
|
#![crate_type = "lib"]
|
||||||
|
|
||||||
|
#[rustc_abi(debug)]
|
||||||
|
extern "sysv64" fn pass_zst(_: ()) {} //~ ERROR: fn_abi
|
67
tests/ui/abi/sysv64-zst.stderr
Normal file
67
tests/ui/abi/sysv64-zst.stderr
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
error: fn_abi_of(pass_zst) = FnAbi {
|
||||||
|
args: [
|
||||||
|
ArgAbi {
|
||||||
|
layout: TyAndLayout {
|
||||||
|
ty: (),
|
||||||
|
layout: Layout {
|
||||||
|
size: Size(0 bytes),
|
||||||
|
align: AbiAndPrefAlign {
|
||||||
|
abi: $SOME_ALIGN,
|
||||||
|
pref: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
abi: Aggregate {
|
||||||
|
sized: true,
|
||||||
|
},
|
||||||
|
fields: Arbitrary {
|
||||||
|
offsets: [],
|
||||||
|
memory_index: [],
|
||||||
|
},
|
||||||
|
largest_niche: None,
|
||||||
|
variants: Single {
|
||||||
|
index: 0,
|
||||||
|
},
|
||||||
|
max_repr_align: None,
|
||||||
|
unadjusted_abi_align: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mode: Ignore,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
ret: ArgAbi {
|
||||||
|
layout: TyAndLayout {
|
||||||
|
ty: (),
|
||||||
|
layout: Layout {
|
||||||
|
size: Size(0 bytes),
|
||||||
|
align: AbiAndPrefAlign {
|
||||||
|
abi: $SOME_ALIGN,
|
||||||
|
pref: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
abi: Aggregate {
|
||||||
|
sized: true,
|
||||||
|
},
|
||||||
|
fields: Arbitrary {
|
||||||
|
offsets: [],
|
||||||
|
memory_index: [],
|
||||||
|
},
|
||||||
|
largest_niche: None,
|
||||||
|
variants: Single {
|
||||||
|
index: 0,
|
||||||
|
},
|
||||||
|
max_repr_align: None,
|
||||||
|
unadjusted_abi_align: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mode: Ignore,
|
||||||
|
},
|
||||||
|
c_variadic: false,
|
||||||
|
fixed_count: 1,
|
||||||
|
conv: X86_64SysV,
|
||||||
|
can_unwind: false,
|
||||||
|
}
|
||||||
|
--> $DIR/sysv64-zst.rs:8:1
|
||||||
|
|
|
||||||
|
LL | extern "sysv64" fn pass_zst(_: ()) {}
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
67
tests/ui/abi/win64-zst.other.stderr
Normal file
67
tests/ui/abi/win64-zst.other.stderr
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
error: fn_abi_of(pass_zst) = FnAbi {
|
||||||
|
args: [
|
||||||
|
ArgAbi {
|
||||||
|
layout: TyAndLayout {
|
||||||
|
ty: (),
|
||||||
|
layout: Layout {
|
||||||
|
size: Size(0 bytes),
|
||||||
|
align: AbiAndPrefAlign {
|
||||||
|
abi: $SOME_ALIGN,
|
||||||
|
pref: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
abi: Aggregate {
|
||||||
|
sized: true,
|
||||||
|
},
|
||||||
|
fields: Arbitrary {
|
||||||
|
offsets: [],
|
||||||
|
memory_index: [],
|
||||||
|
},
|
||||||
|
largest_niche: None,
|
||||||
|
variants: Single {
|
||||||
|
index: 0,
|
||||||
|
},
|
||||||
|
max_repr_align: None,
|
||||||
|
unadjusted_abi_align: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mode: Ignore,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
ret: ArgAbi {
|
||||||
|
layout: TyAndLayout {
|
||||||
|
ty: (),
|
||||||
|
layout: Layout {
|
||||||
|
size: Size(0 bytes),
|
||||||
|
align: AbiAndPrefAlign {
|
||||||
|
abi: $SOME_ALIGN,
|
||||||
|
pref: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
abi: Aggregate {
|
||||||
|
sized: true,
|
||||||
|
},
|
||||||
|
fields: Arbitrary {
|
||||||
|
offsets: [],
|
||||||
|
memory_index: [],
|
||||||
|
},
|
||||||
|
largest_niche: None,
|
||||||
|
variants: Single {
|
||||||
|
index: 0,
|
||||||
|
},
|
||||||
|
max_repr_align: None,
|
||||||
|
unadjusted_abi_align: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mode: Ignore,
|
||||||
|
},
|
||||||
|
c_variadic: false,
|
||||||
|
fixed_count: 1,
|
||||||
|
conv: X86_64Win64,
|
||||||
|
can_unwind: false,
|
||||||
|
}
|
||||||
|
--> $DIR/win64-zst.rs:11:1
|
||||||
|
|
|
||||||
|
LL | extern "win64" fn pass_zst(_: ()) {}
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
11
tests/ui/abi/win64-zst.rs
Normal file
11
tests/ui/abi/win64-zst.rs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
//@ only-x86_64
|
||||||
|
//@ revisions: other windows-gnu
|
||||||
|
//@ normalize-stderr-test: "(abi|pref|unadjusted_abi_align): Align\([1-8] bytes\)" -> "$1: $$SOME_ALIGN"
|
||||||
|
//@[other] ignore-windows-gnu
|
||||||
|
//@[windows-gnu] only-windows-gnu
|
||||||
|
|
||||||
|
#![feature(rustc_attrs)]
|
||||||
|
#![crate_type = "lib"]
|
||||||
|
|
||||||
|
#[rustc_abi(debug)]
|
||||||
|
extern "win64" fn pass_zst(_: ()) {} //~ ERROR: fn_abi
|
78
tests/ui/abi/win64-zst.windows-gnu.stderr
Normal file
78
tests/ui/abi/win64-zst.windows-gnu.stderr
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
error: fn_abi_of(pass_zst) = FnAbi {
|
||||||
|
args: [
|
||||||
|
ArgAbi {
|
||||||
|
layout: TyAndLayout {
|
||||||
|
ty: (),
|
||||||
|
layout: Layout {
|
||||||
|
size: Size(0 bytes),
|
||||||
|
align: AbiAndPrefAlign {
|
||||||
|
abi: $SOME_ALIGN,
|
||||||
|
pref: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
abi: Aggregate {
|
||||||
|
sized: true,
|
||||||
|
},
|
||||||
|
fields: Arbitrary {
|
||||||
|
offsets: [],
|
||||||
|
memory_index: [],
|
||||||
|
},
|
||||||
|
largest_niche: None,
|
||||||
|
variants: Single {
|
||||||
|
index: 0,
|
||||||
|
},
|
||||||
|
max_repr_align: None,
|
||||||
|
unadjusted_abi_align: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mode: Indirect {
|
||||||
|
attrs: ArgAttributes {
|
||||||
|
regular: NoAlias | NoCapture | NonNull | NoUndef,
|
||||||
|
arg_ext: None,
|
||||||
|
pointee_size: Size(0 bytes),
|
||||||
|
pointee_align: Some(
|
||||||
|
Align(1 bytes),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
meta_attrs: None,
|
||||||
|
on_stack: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
ret: ArgAbi {
|
||||||
|
layout: TyAndLayout {
|
||||||
|
ty: (),
|
||||||
|
layout: Layout {
|
||||||
|
size: Size(0 bytes),
|
||||||
|
align: AbiAndPrefAlign {
|
||||||
|
abi: $SOME_ALIGN,
|
||||||
|
pref: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
abi: Aggregate {
|
||||||
|
sized: true,
|
||||||
|
},
|
||||||
|
fields: Arbitrary {
|
||||||
|
offsets: [],
|
||||||
|
memory_index: [],
|
||||||
|
},
|
||||||
|
largest_niche: None,
|
||||||
|
variants: Single {
|
||||||
|
index: 0,
|
||||||
|
},
|
||||||
|
max_repr_align: None,
|
||||||
|
unadjusted_abi_align: $SOME_ALIGN,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mode: Ignore,
|
||||||
|
},
|
||||||
|
c_variadic: false,
|
||||||
|
fixed_count: 1,
|
||||||
|
conv: X86_64Win64,
|
||||||
|
can_unwind: false,
|
||||||
|
}
|
||||||
|
--> $DIR/win64-zst.rs:11:1
|
||||||
|
|
|
||||||
|
LL | extern "win64" fn pass_zst(_: ()) {}
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
Loading…
Reference in New Issue
Block a user