From a95938d6730386eec063f6432b4935c500c0f381 Mon Sep 17 00:00:00 2001
From: Gary Guo <gary@garyguo.net>
Date: Fri, 25 Aug 2023 13:45:35 +0100
Subject: [PATCH 1/2] Stabilise c_unwind

---
 alloc/src/lib.rs        | 2 +-
 core/src/lib.rs         | 2 +-
 panic_abort/src/lib.rs  | 2 +-
 panic_unwind/src/lib.rs | 2 +-
 std/src/lib.rs          | 2 +-
 unwind/src/lib.rs       | 2 +-
 6 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/alloc/src/lib.rs b/alloc/src/lib.rs
index 895d1b8d59f2c..022a14b931a3c 100644
--- a/alloc/src/lib.rs
+++ b/alloc/src/lib.rs
@@ -165,12 +165,12 @@
 //
 // Language features:
 // tidy-alphabetical-start
+#![cfg_attr(bootstrap, feature(c_unwind))]
 #![cfg_attr(not(test), feature(coroutine_trait))]
 #![cfg_attr(test, feature(panic_update_hook))]
 #![cfg_attr(test, feature(test))]
 #![feature(allocator_internals)]
 #![feature(allow_internal_unstable)]
-#![feature(c_unwind)]
 #![feature(cfg_sanitize)]
 #![feature(const_mut_refs)]
 #![feature(const_precise_live_drops)]
diff --git a/core/src/lib.rs b/core/src/lib.rs
index ef28bc99c4fc8..a533a7938f13b 100644
--- a/core/src/lib.rs
+++ b/core/src/lib.rs
@@ -199,13 +199,13 @@
 //
 // Language features:
 // tidy-alphabetical-start
+#![cfg_attr(bootstrap, feature(c_unwind))]
 #![feature(abi_unadjusted)]
 #![feature(adt_const_params)]
 #![feature(allow_internal_unsafe)]
 #![feature(allow_internal_unstable)]
 #![feature(asm_const)]
 #![feature(auto_traits)]
-#![feature(c_unwind)]
 #![feature(cfg_sanitize)]
 #![feature(cfg_target_has_atomic)]
 #![feature(cfg_target_has_atomic_equal_alignment)]
diff --git a/panic_abort/src/lib.rs b/panic_abort/src/lib.rs
index 353de8c5c5743..14ba4af2bb575 100644
--- a/panic_abort/src/lib.rs
+++ b/panic_abort/src/lib.rs
@@ -14,7 +14,7 @@
 #![feature(std_internals)]
 #![feature(staged_api)]
 #![feature(rustc_attrs)]
-#![feature(c_unwind)]
+#![cfg_attr(bootstrap, feature(c_unwind))]
 #![allow(internal_features)]
 
 #[cfg(target_os = "android")]
diff --git a/panic_unwind/src/lib.rs b/panic_unwind/src/lib.rs
index b0245de501e7e..4dc3612060848 100644
--- a/panic_unwind/src/lib.rs
+++ b/panic_unwind/src/lib.rs
@@ -24,7 +24,7 @@
 #![feature(rustc_attrs)]
 #![panic_runtime]
 #![feature(panic_runtime)]
-#![feature(c_unwind)]
+#![cfg_attr(bootstrap, feature(c_unwind))]
 // `real_imp` is unused with Miri, so silence warnings.
 #![cfg_attr(miri, allow(dead_code))]
 #![allow(internal_features)]
diff --git a/std/src/lib.rs b/std/src/lib.rs
index 1c226f9f08f10..80f67838ac002 100644
--- a/std/src/lib.rs
+++ b/std/src/lib.rs
@@ -273,12 +273,12 @@
 //
 // Language features:
 // tidy-alphabetical-start
+#![cfg_attr(bootstrap, feature(c_unwind))]
 #![feature(alloc_error_handler)]
 #![feature(allocator_internals)]
 #![feature(allow_internal_unsafe)]
 #![feature(allow_internal_unstable)]
 #![feature(asm_experimental_arch)]
-#![feature(c_unwind)]
 #![feature(cfg_sanitizer_cfi)]
 #![feature(cfg_target_thread_local)]
 #![feature(cfi_encoding)]
diff --git a/unwind/src/lib.rs b/unwind/src/lib.rs
index 544d9fbf1ae0f..45a1c334a44dd 100644
--- a/unwind/src/lib.rs
+++ b/unwind/src/lib.rs
@@ -2,7 +2,7 @@
 #![unstable(feature = "panic_unwind", issue = "32837")]
 #![feature(link_cfg)]
 #![feature(staged_api)]
-#![feature(c_unwind)]
+#![cfg_attr(bootstrap, feature(c_unwind))]
 #![feature(strict_provenance)]
 #![cfg_attr(target_arch = "wasm64", feature(simd_wasm64))]
 #![cfg_attr(not(target_env = "msvc"), feature(libc))]

From 3fc18d0b40c125d05e9123d3ce4f71348430774e Mon Sep 17 00:00:00 2001
From: Gary Guo <gary@garyguo.net>
Date: Wed, 6 Dec 2023 20:59:23 +0000
Subject: [PATCH 2/2] Add a hack to prevent proc_macro misopt in CI

---
 proc_macro/src/bridge/buffer.rs | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/proc_macro/src/bridge/buffer.rs b/proc_macro/src/bridge/buffer.rs
index 48030f8d82dca..149767bf70521 100644
--- a/proc_macro/src/bridge/buffer.rs
+++ b/proc_macro/src/bridge/buffer.rs
@@ -119,7 +119,9 @@ impl Write for Buffer {
 }
 
 impl Drop for Buffer {
-    #[inline]
+    // HACK(nbdd0121): Hack to prevent LLVM < 17.0.4 from misoptimising,
+    // change to `#[inline]` if fixed.
+    #[inline(never)]
     fn drop(&mut self) {
         let b = self.take();
         (b.drop)(b);