about summary refs log tree commit diff
diff options
context:
space:
mode:
authortiif <pekyuan@gmail.com>2025-03-11 16:46:26 +0000
committertiif <pekyuan@gmail.com>2025-03-12 14:38:52 +0000
commitd463c5d07c4715f4ebd86b2093139784fa69bd2b (patch)
treec8f14046edea644b5deb38dd0b2fbbf9befc94c4
parent43c51e9ff33e0014c0e17712d01ae8dc44a57096 (diff)
downloadrust-d463c5d07c4715f4ebd86b2093139784fa69bd2b.tar.gz
rust-d463c5d07c4715f4ebd86b2093139784fa69bd2b.zip
Implement Display by mapping Conv to ExternAbi
-rw-r--r--compiler/rustc_target/src/callconv/mod.rs53
-rw-r--r--src/tools/miri/tests/fail/function_calls/check_arg_abi.rs2
-rw-r--r--src/tools/miri/tests/fail/function_calls/check_arg_abi.stderr4
3 files changed, 30 insertions, 29 deletions
diff --git a/compiler/rustc_target/src/callconv/mod.rs b/compiler/rustc_target/src/callconv/mod.rs
index 0ea0d2d0173..8d8270cd8cd 100644
--- a/compiler/rustc_target/src/callconv/mod.rs
+++ b/compiler/rustc_target/src/callconv/mod.rs
@@ -898,34 +898,35 @@ impl FromStr for Conv {
     }
 }
 
+fn conv_to_externabi(conv: &Conv) -> ExternAbi {
+    match conv {
+        Conv::Rust => ExternAbi::Rust,
+        Conv::PreserveMost => ExternAbi::RustCold,
+        Conv::X86Stdcall => ExternAbi::Stdcall{unwind: false},
+        Conv::X86Fastcall => ExternAbi::Fastcall{unwind: false},
+        Conv::X86VectorCall => ExternAbi::Vectorcall{unwind: false},
+        Conv::X86ThisCall => ExternAbi::Thiscall{unwind: false},
+        Conv::C => ExternAbi::C{unwind: false},
+        Conv::X86_64Win64 => ExternAbi::Win64{unwind: false},
+        Conv::X86_64SysV => ExternAbi::SysV64{unwind: false},
+        Conv::ArmAapcs => ExternAbi::Aapcs{unwind: false},
+        Conv::CCmseNonSecureCall => ExternAbi::CCmseNonSecureCall,
+        Conv::CCmseNonSecureEntry => ExternAbi::CCmseNonSecureEntry,
+        Conv::PtxKernel => ExternAbi::PtxKernel,
+        Conv::Msp430Intr => ExternAbi::Msp430Interrupt,
+        Conv::X86Intr => ExternAbi::X86Interrupt,
+        Conv::GpuKernel => ExternAbi::GpuKernel,
+        Conv::AvrInterrupt => ExternAbi::AvrInterrupt,
+        Conv::AvrNonBlockingInterrupt => ExternAbi::AvrNonBlockingInterrupt,
+        Conv::RiscvInterrupt { kind: RiscvInterruptKind::Machine } => ExternAbi::RiscvInterruptM,
+        Conv::RiscvInterrupt { kind: RiscvInterruptKind::Supervisor } => ExternAbi::RiscvInterruptS,
+        Conv::Cold | Conv::PreserveAll => panic!("This is deadcode"),
+    }
+}
+
 impl Display for Conv {
     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
-        f.write_str(match self {
-            Conv::C => "C",
-            Conv::Rust => "Rust",
-            Conv::Cold => "Cold",
-            Conv::PreserveMost => "PreserveMost",
-            Conv::PreserveAll => "PreserveAll",
-            Conv::ArmAapcs => "ArmAapcs",
-            Conv::CCmseNonSecureCall => "CCmseNonSecureCall",
-            Conv::CCmseNonSecureEntry => "CCmseNonSecureEntry",
-            Conv::Msp430Intr => "Msp430Intr",
-            Conv::PtxKernel => "PtxKernel",
-            Conv::GpuKernel => "GpuKernel",
-            Conv::X86Fastcall => "X86Fastcall",
-            Conv::X86Intr => "X86Intr",
-            Conv::X86Stdcall => "X86Stdcall",
-            Conv::X86ThisCall => "X86ThisCall",
-            Conv::X86VectorCall => "X86VectorCall",
-            Conv::X86_64SysV => "X86_64SysV",
-            Conv::X86_64Win64 => "X86_64Win64",
-            Conv::AvrInterrupt => "AvrInterrupt",
-            Conv::AvrNonBlockingInterrupt => "AvrNonBlockingInterrupt",
-            Conv::RiscvInterrupt { kind: RiscvInterruptKind::Machine } => "RiscvInterrupt(machine)",
-            Conv::RiscvInterrupt { kind: RiscvInterruptKind::Supervisor } => {
-                "RiscvInterrupt(supervisor)"
-            }
-        })
+        write!(f, "{}", conv_to_externabi(self))
     }
 }
 
diff --git a/src/tools/miri/tests/fail/function_calls/check_arg_abi.rs b/src/tools/miri/tests/fail/function_calls/check_arg_abi.rs
index ffa0443ce50..0e916364169 100644
--- a/src/tools/miri/tests/fail/function_calls/check_arg_abi.rs
+++ b/src/tools/miri/tests/fail/function_calls/check_arg_abi.rs
@@ -4,6 +4,6 @@ fn main() {
     }
 
     unsafe {
-        let _ = malloc(0); //~ ERROR: calling a function with ABI C using caller ABI Rust
+        let _ = malloc(0); //~ ERROR: calling a function with calling convention "C" using caller calling convention "Rust"
     };
 }
diff --git a/src/tools/miri/tests/fail/function_calls/check_arg_abi.stderr b/src/tools/miri/tests/fail/function_calls/check_arg_abi.stderr
index bf1fbb7721f..78730182923 100644
--- a/src/tools/miri/tests/fail/function_calls/check_arg_abi.stderr
+++ b/src/tools/miri/tests/fail/function_calls/check_arg_abi.stderr
@@ -1,8 +1,8 @@
-error: Undefined Behavior: calling a function with ABI C using caller ABI Rust
+error: Undefined Behavior: calling a function with calling convention "C" using caller calling convention "Rust"
   --> tests/fail/function_calls/check_arg_abi.rs:LL:CC
    |
 LL |         let _ = malloc(0);
-   |                 ^^^^^^^^^ calling a function with ABI C using caller ABI Rust
+   |                 ^^^^^^^^^ calling a function with calling convention "C" using caller calling convention "Rust"
    |
    = help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior
    = help: see https://doc.rust-lang.org/nightly/reference/behavior-considered-undefined.html for further information