# This modified patch is to disable the hunk applying to LLVM, unbundled in Guix. # Add mrustc slice length intrinsics --- src/libcore/intrinsics.rs +++ src/libcore/intrinsics.rs @@ -685,4 +685,8 @@ pub fn min_align_of_val(_: &T) -> usize; + /// Obtain the length of a slice pointer + #[cfg(rust_compiler="mrustc")] + pub fn mrustc_slice_len(pointer: *const [T]) -> usize; + /// Gets a static string slice containing the name of a type. pub fn type_name() -> &'static str; --- src/libcore/slice/mod.rs +++ src/libcore/slice/mod.rs @@ -68,5 +68,8 @@ pub const fn len(&self) -> usize { - unsafe { - crate::ptr::Repr { rust: self }.raw.len - } + #[cfg(not(rust_compiler="mrustc"))] + #[cfg_attr(not(bootstrap), allow_internal_unstable(const_fn_union))] + const fn len_inner(s: &[T]) -> usize { unsafe { crate::ptr::Repr { rust: s }.raw.len } }; + #[cfg(rust_compiler="mrustc")] + const fn len_inner(s: &[T]) -> usize { unsafe { crate::intrinsics::mrustc_slice_len(s) } } + len_inner(self) } # # Static-link rustc_codegen_llvm so the generated rustc is standalone # > Note: Interacts with `rustc-1.39.0-overrides.toml` # --- src/librustc_interface/util.rs +++ src/librustc_interface/util.rs @@ -421,2 +421,4 @@ pub fn get_codegen_sysroot(backend_name: &str) -> fn() -> Box { + #[cfg(rust_compiler="mrustc")] + { if(backend_name == "llvm") { extern "Rust" { fn __rustc_codegen_backend() -> Box; } return || unsafe { __rustc_codegen_backend() } } } // For now we only allow this function to be called once as it'll dlopen a # Disable most architecture intrinsics --- src/stdarch/crates/std_detect/src/detect/mod.rs +++ src/stdarch/crates/std_detect/src/detect/mod.rs @@ -74,4 +74,7 @@ // this run-time detection logic is never called. #[path = "os/other.rs"] mod os; + } else if #[cfg(rust_compiler="mrustc")] { + #[path = "os/other.rs"] + mod os; } else if #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] { --- vendor/ppv-lite86/src/lib.rs +++ vendor/ppv-lite86/src/lib.rs @@ -12,10 +12,10 @@ -#[cfg(all(feature = "simd", target_arch = "x86_64", not(miri)))] +#[cfg(all(feature = "simd", target_arch = "x86_64", not(miri), not(rust_compiler="mrustc")))] pub mod x86_64; -#[cfg(all(feature = "simd", target_arch = "x86_64", not(miri)))] +#[cfg(all(feature = "simd", target_arch = "x86_64", not(miri), not(rust_compiler="mrustc")))] use self::x86_64 as arch; -#[cfg(any(miri, not(all(feature = "simd", any(target_arch = "x86_64")))))] +#[cfg(any(miri, rust_compiler="mrustc", not(all(feature = "simd", any(target_arch = "x86_64")))))] pub mod generic; -#[cfg(any(miri, not(all(feature = "simd", any(target_arch = "x86_64")))))] +#[cfg(any(miri, rust_compiler="mrustc", not(all(feature = "simd", any(target_arch = "x86_64")))))] use self::generic as arch; # diff --git a/llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h b/llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h # index da9d9d5bfdc0..3d47471f0ef0 100644 # --- src/llvm-project/llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h # +++ src/llvm-project/llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h # @@ -16,6 +16,8 @@ # #include "llvm/Demangle/DemangleConfig.h" # #include "llvm/Demangle/StringView.h" # #include # +#include # +#include # namespace llvm { # namespace itanium_demangle { ## ## gcc (used by mrustc) has 16-byte uint128_t alignment, while rustc uses 8 ## #--- src/libsyntax/ast.rs #+++ src/libsyntax/ast.rs #@@ -986,2 +986,2 @@ #-#[cfg(target_arch = "x86_64")] #-static_assert_size!(Expr, 96); #+//#[cfg(target_arch = "x86_64")] #+//static_assert_size!(Expr, 96); #--- src/librustc/ty/sty.rs #+++ src/librustc/ty/sty.rs #@@ -2258,2 +2258,2 @@ #-#[cfg(target_arch = "x86_64")] #-static_assert_size!(Const<'_>, 40); #+//#[cfg(target_arch = "x86_64")] #+//static_assert_size!(Const<'_>, 40);