rustc: Fix data-layout for AArch64 targets
Also relax the assertion whenever we have a custom LLVM root as LLVM may disagree about exact specifics.
This commit is contained in:
parent
d851428cc3
commit
e8f76661f1
src
@ -20,7 +20,7 @@ pub fn target() -> Target {
|
||||
llvm_target: "aarch64-linux-android".to_string(),
|
||||
target_endian: "little".to_string(),
|
||||
target_pointer_width: "64".to_string(),
|
||||
data_layout: "e-m:e-i64:64-i128:128-n32:64-S128".to_string(),
|
||||
data_layout: "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".to_string(),
|
||||
arch: "aarch64".to_string(),
|
||||
target_os: "android".to_string(),
|
||||
target_env: "".to_string(),
|
||||
|
@ -18,7 +18,7 @@ pub fn target() -> Target {
|
||||
target_endian: "little".to_string(),
|
||||
target_pointer_width: "64".to_string(),
|
||||
target_env: "gnu".to_string(),
|
||||
data_layout: "e-m:e-i64:64-i128:128-n32:64-S128".to_string(),
|
||||
data_layout: "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".to_string(),
|
||||
arch: "aarch64".to_string(),
|
||||
target_os: "linux".to_string(),
|
||||
target_vendor: "unknown".to_string(),
|
||||
|
@ -370,7 +370,25 @@ unsafe fn create_context_and_module(sess: &Session, mod_name: &str) -> (ContextR
|
||||
let data_layout = str::from_utf8(CStr::from_ptr(data_layout).to_bytes())
|
||||
.ok().expect("got a non-UTF8 data-layout from LLVM");
|
||||
|
||||
if sess.target.target.data_layout != data_layout {
|
||||
// Unfortunately LLVM target specs change over time, and right now we
|
||||
// don't have proper support to work with any more than one
|
||||
// `data_layout` than the one that is in the rust-lang/rust repo. If
|
||||
// this compiler is configured against a custom LLVM, we may have a
|
||||
// differing data layout, even though we should update our own to use
|
||||
// that one.
|
||||
//
|
||||
// As an interim hack, if CFG_LLVM_ROOT is not an empty string then we
|
||||
// disable this check entirely as we may be configured with something
|
||||
// that has a different target layout.
|
||||
//
|
||||
// Unsure if this will actually cause breakage when rustc is configured
|
||||
// as such.
|
||||
//
|
||||
// FIXME(#34960)
|
||||
let cfg_llvm_root = option_env!("CFG_LLVM_ROOT").unwrap_or("");
|
||||
let custom_llvm_used = cfg_llvm_root.trim() != "";
|
||||
|
||||
if !custom_llvm_used && sess.target.target.data_layout != data_layout {
|
||||
bug!("data-layout for builtin `{}` target, `{}`, \
|
||||
differs from LLVM default, `{}`",
|
||||
sess.target.target.llvm_target,
|
||||
|
Loading…
x
Reference in New Issue
Block a user