-
Notifications
You must be signed in to change notification settings - Fork 114
/
rustc-1.39.0-src.patch
96 lines (84 loc) · 3.95 KB
/
rustc-1.39.0-src.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# Add mrustc slice length intrinsics
--- src/libcore/intrinsics.rs
+++ src/libcore/intrinsics.rs
@@ -684,6 +684,10 @@ extern "rust-intrinsic" {
pub fn size_of_val<T: ?Sized>(_: &T) -> usize;
pub fn min_align_of_val<T: ?Sized>(_: &T) -> usize;
+ /// Obtain the length of a slice pointer
+ #[cfg(rust_compiler="mrustc")]
+ pub fn mrustc_slice_len<T>(pointer: *const [T]) -> usize;
+
/// Gets a static string slice containing the name of a type.
pub fn type_name<T: ?Sized>() -> &'static str;
--- src/libcore/slice/mod.rs
+++ src/libcore/slice/mod.rs
@@ -66,9 +66,12 @@ impl<T> [T] {
// SAFETY: const sound because we transmute out the length field as a usize (which it must be)
#[cfg_attr(not(bootstrap), allow_internal_unstable(const_fn_union))]
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<T>(s: &[T]) -> usize { unsafe { crate::ptr::Repr { rust: s }.raw.len } };
+ #[cfg(rust_compiler="mrustc")]
+ const fn len_inner<T>(s: &[T]) -> usize { unsafe { crate::intrinsics::mrustc_slice_len(s) } }
+ len_inner(self)
}
/// Returns `true` if the slice has a length of 0.
#
# 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
@@ -417,6 +417,8 @@ fn sysroot_candidates() -> Vec<PathBuf> {
}
pub fn get_codegen_sysroot(backend_name: &str) -> fn() -> Box<dyn CodegenBackend> {
+ #[cfg(rust_compiler="mrustc")]
+ { if(backend_name == "llvm") { extern "Rust" { fn __rustc_codegen_backend() -> Box<dyn CodegenBackend>; } return || unsafe { __rustc_codegen_backend() } } }
// For now we only allow this function to be called once as it'll dlopen a
// few things, which seems to work best if we only do that once. In
// general this assertion never trips due to the once guard in `get_codegen_backend`,
--- 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 <array>
+#include <cstdint>
+#include <string>
namespace llvm {
namespace itanium_demangle {
# Disable most architecture intrinsics
--- src/stdarch/crates/std_detect/src/detect/mod.rs
+++ src/stdarch/crates/std_detect/src/detect/mod.rs
@@ -72,6 +72,9 @@ cfg_if! {
// 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"))] {
// On x86/x86_64 no OS specific functionality is required.
#[path = "os/x86.rs"]
--- vendor/ppv-lite86/src/lib.rs
+++ vendor/ppv-lite86/src/lib.rs
@@ -9,14 +9,14 @@ mod soft;
mod types;
pub use self::types::*;
-#[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;
pub use self::arch::{vec128_storage, vec256_storage, vec512_storage};