about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2022-06-07 08:12:45 +0000
committerbors <bors@rust-lang.org>2022-06-07 08:12:45 +0000
commit91cacb3faf987805675e39aca41859ec1fcabef3 (patch)
tree8abbf8d38127f75c7a19f5564b0a6db0b65e29a1 /src
parentbb55bd449e65e611da928560d948982d73e50027 (diff)
parentbe4e0898ccf4f6514a94c3b89ab48bd3a8268ce3 (diff)
Auto merge of #97512 - scottmcm:add-coldcc, r=nagisa,lcnr
Add support for emitting functions with `coldcc` to LLVM

The eventual goal is to try using this for things like the internal panicking stuff, to see whether it helps.
Diffstat (limited to 'src')
-rw-r--r--src/test/codegen/cold-call-declare-and-call.rs18
-rw-r--r--src/test/ui/codemap_tests/unicode.stderr2
-rw-r--r--src/test/ui/feature-gates/feature-gate-rust_cold_cc.rs21
-rw-r--r--src/test/ui/feature-gates/feature-gate-rust_cold_cc.stderr66
-rw-r--r--src/test/ui/parser/issues/issue-8537.stderr2
5 files changed, 107 insertions, 2 deletions
diff --git a/src/test/codegen/cold-call-declare-and-call.rs b/src/test/codegen/cold-call-declare-and-call.rs
new file mode 100644
index 00000000000..71d49478bfc
--- /dev/null
+++ b/src/test/codegen/cold-call-declare-and-call.rs
@@ -0,0 +1,18 @@
+// compile-flags: -C no-prepopulate-passes
+
+#![crate_type = "lib"]
+#![feature(rust_cold_cc)]
+
+// wasm marks the definition as `dso_local`, so allow that as optional.
+
+// CHECK: define{{( dso_local)?}} coldcc void @this_should_never_happen(i16
+// CHECK: call coldcc void @this_should_never_happen(i16
+
+#[no_mangle]
+pub extern "rust-cold" fn this_should_never_happen(x: u16) {}
+
+pub fn do_things(x: u16) {
+    if x == 12345 {
+        this_should_never_happen(54321);
+    }
+}
diff --git a/src/test/ui/codemap_tests/unicode.stderr b/src/test/ui/codemap_tests/unicode.stderr
index e5aef04b689..bf7aaa5f0eb 100644
--- a/src/test/ui/codemap_tests/unicode.stderr
+++ b/src/test/ui/codemap_tests/unicode.stderr
@@ -4,7 +4,7 @@ error[E0703]: invalid ABI: found `路濫狼á́́`
 LL | extern "路濫狼á́́" fn foo() {}
    |        ^^^^^^^^^ invalid ABI
    |
-   = help: valid ABIs: Rust, C, C-unwind, cdecl, cdecl-unwind, stdcall, stdcall-unwind, fastcall, fastcall-unwind, vectorcall, vectorcall-unwind, thiscall, thiscall-unwind, aapcs, aapcs-unwind, win64, win64-unwind, sysv64, sysv64-unwind, ptx-kernel, msp430-interrupt, x86-interrupt, amdgpu-kernel, efiapi, avr-interrupt, avr-non-blocking-interrupt, C-cmse-nonsecure-call, wasm, system, system-unwind, rust-intrinsic, rust-call, platform-intrinsic, unadjusted
+   = help: valid ABIs: Rust, C, C-unwind, cdecl, cdecl-unwind, stdcall, stdcall-unwind, fastcall, fastcall-unwind, vectorcall, vectorcall-unwind, thiscall, thiscall-unwind, aapcs, aapcs-unwind, win64, win64-unwind, sysv64, sysv64-unwind, ptx-kernel, msp430-interrupt, x86-interrupt, amdgpu-kernel, efiapi, avr-interrupt, avr-non-blocking-interrupt, C-cmse-nonsecure-call, wasm, system, system-unwind, rust-intrinsic, rust-call, platform-intrinsic, unadjusted, rust-cold
 
 error: aborting due to previous error
 
diff --git a/src/test/ui/feature-gates/feature-gate-rust_cold_cc.rs b/src/test/ui/feature-gates/feature-gate-rust_cold_cc.rs
new file mode 100644
index 00000000000..9ba8e32ac07
--- /dev/null
+++ b/src/test/ui/feature-gates/feature-gate-rust_cold_cc.rs
@@ -0,0 +1,21 @@
+#![crate_type = "lib"]
+
+extern "rust-cold" fn fu() {} //~ ERROR rust-cold is experimental
+
+trait T {
+    extern "rust-cold" fn mu(); //~ ERROR rust-cold is experimental
+    extern "rust-cold" fn dmu() {} //~ ERROR rust-cold is experimental
+}
+
+struct S;
+impl T for S {
+    extern "rust-cold" fn mu() {} //~ ERROR rust-cold is experimental
+}
+
+impl S {
+    extern "rust-cold" fn imu() {} //~ ERROR rust-cold is experimental
+}
+
+type TAU = extern "rust-cold" fn(); //~ ERROR rust-cold is experimental
+
+extern "rust-cold" {} //~ ERROR rust-cold is experimental
diff --git a/src/test/ui/feature-gates/feature-gate-rust_cold_cc.stderr b/src/test/ui/feature-gates/feature-gate-rust_cold_cc.stderr
new file mode 100644
index 00000000000..ab7e5f0366d
--- /dev/null
+++ b/src/test/ui/feature-gates/feature-gate-rust_cold_cc.stderr
@@ -0,0 +1,66 @@
+error[E0658]: rust-cold is experimental and subject to change
+  --> $DIR/feature-gate-rust_cold_cc.rs:3:8
+   |
+LL | extern "rust-cold" fn fu() {}
+   |        ^^^^^^^^^^^
+   |
+   = note: see issue #97544 <https://github.com/rust-lang/rust/issues/97544> for more information
+   = help: add `#![feature(rust_cold_cc)]` to the crate attributes to enable
+
+error[E0658]: rust-cold is experimental and subject to change
+  --> $DIR/feature-gate-rust_cold_cc.rs:6:12
+   |
+LL |     extern "rust-cold" fn mu();
+   |            ^^^^^^^^^^^
+   |
+   = note: see issue #97544 <https://github.com/rust-lang/rust/issues/97544> for more information
+   = help: add `#![feature(rust_cold_cc)]` to the crate attributes to enable
+
+error[E0658]: rust-cold is experimental and subject to change
+  --> $DIR/feature-gate-rust_cold_cc.rs:7:12
+   |
+LL |     extern "rust-cold" fn dmu() {}
+   |            ^^^^^^^^^^^
+   |
+   = note: see issue #97544 <https://github.com/rust-lang/rust/issues/97544> for more information
+   = help: add `#![feature(rust_cold_cc)]` to the crate attributes to enable
+
+error[E0658]: rust-cold is experimental and subject to change
+  --> $DIR/feature-gate-rust_cold_cc.rs:12:12
+   |
+LL |     extern "rust-cold" fn mu() {}
+   |            ^^^^^^^^^^^
+   |
+   = note: see issue #97544 <https://github.com/rust-lang/rust/issues/97544> for more information
+   = help: add `#![feature(rust_cold_cc)]` to the crate attributes to enable
+
+error[E0658]: rust-cold is experimental and subject to change
+  --> $DIR/feature-gate-rust_cold_cc.rs:16:12
+   |
+LL |     extern "rust-cold" fn imu() {}
+   |            ^^^^^^^^^^^
+   |
+   = note: see issue #97544 <https://github.com/rust-lang/rust/issues/97544> for more information
+   = help: add `#![feature(rust_cold_cc)]` to the crate attributes to enable
+
+error[E0658]: rust-cold is experimental and subject to change
+  --> $DIR/feature-gate-rust_cold_cc.rs:19:19
+   |
+LL | type TAU = extern "rust-cold" fn();
+   |                   ^^^^^^^^^^^
+   |
+   = note: see issue #97544 <https://github.com/rust-lang/rust/issues/97544> for more information
+   = help: add `#![feature(rust_cold_cc)]` to the crate attributes to enable
+
+error[E0658]: rust-cold is experimental and subject to change
+  --> $DIR/feature-gate-rust_cold_cc.rs:21:8
+   |
+LL | extern "rust-cold" {}
+   |        ^^^^^^^^^^^
+   |
+   = note: see issue #97544 <https://github.com/rust-lang/rust/issues/97544> for more information
+   = help: add `#![feature(rust_cold_cc)]` to the crate attributes to enable
+
+error: aborting due to 7 previous errors
+
+For more information about this error, try `rustc --explain E0658`.
diff --git a/src/test/ui/parser/issues/issue-8537.stderr b/src/test/ui/parser/issues/issue-8537.stderr
index 5f8d4315de8..505d830ef3e 100644
--- a/src/test/ui/parser/issues/issue-8537.stderr
+++ b/src/test/ui/parser/issues/issue-8537.stderr
@@ -4,7 +4,7 @@ error[E0703]: invalid ABI: found `invalid-ab_isize`
 LL |   "invalid-ab_isize"
    |   ^^^^^^^^^^^^^^^^^^ invalid ABI
    |
-   = help: valid ABIs: Rust, C, C-unwind, cdecl, cdecl-unwind, stdcall, stdcall-unwind, fastcall, fastcall-unwind, vectorcall, vectorcall-unwind, thiscall, thiscall-unwind, aapcs, aapcs-unwind, win64, win64-unwind, sysv64, sysv64-unwind, ptx-kernel, msp430-interrupt, x86-interrupt, amdgpu-kernel, efiapi, avr-interrupt, avr-non-blocking-interrupt, C-cmse-nonsecure-call, wasm, system, system-unwind, rust-intrinsic, rust-call, platform-intrinsic, unadjusted
+   = help: valid ABIs: Rust, C, C-unwind, cdecl, cdecl-unwind, stdcall, stdcall-unwind, fastcall, fastcall-unwind, vectorcall, vectorcall-unwind, thiscall, thiscall-unwind, aapcs, aapcs-unwind, win64, win64-unwind, sysv64, sysv64-unwind, ptx-kernel, msp430-interrupt, x86-interrupt, amdgpu-kernel, efiapi, avr-interrupt, avr-non-blocking-interrupt, C-cmse-nonsecure-call, wasm, system, system-unwind, rust-intrinsic, rust-call, platform-intrinsic, unadjusted, rust-cold
 
 error: aborting due to previous error