Merge pull request #464 from rust-lang/sync_from_rust_2024_03_04
Sync from rust 2024/03/04
This commit is contained in:
commit
b385428e3d
6
build.rs
Normal file
6
build.rs
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
// TODO: remove this file and deps/libLLVM-18-rust-1.78.0-nightly.so when
|
||||||
|
// https://github.com/rust-lang/rust/pull/121967 is merged.
|
||||||
|
fn main() {
|
||||||
|
println!("cargo:rerun-if-changed=deps/libLLVM-18-rust-1.78.0-nightly.so");
|
||||||
|
println!("cargo:rustc-link-search=deps");
|
||||||
|
}
|
@ -131,6 +131,30 @@ fn prepare_libcore(
|
|||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
println!("Successfully prepared libcore for building");
|
println!("Successfully prepared libcore for building");
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: remove when we can ignore warnings in rustdoc tests.
|
||||||
|
fn prepare_rand() -> Result<(), String> {
|
||||||
|
// Apply patch for the rand crate.
|
||||||
|
let file_path = "patches/crates/0001-Remove-deny-warnings.patch";
|
||||||
|
let rand_dir = Path::new("build/rand");
|
||||||
|
println!("[GIT] apply `{}`", file_path);
|
||||||
|
let path = Path::new("../..").join(file_path);
|
||||||
|
run_command_with_output(&[&"git", &"apply", &path], Some(rand_dir))?;
|
||||||
|
run_command_with_output(&[&"git", &"add", &"-A"], Some(rand_dir))?;
|
||||||
|
run_command_with_output(
|
||||||
|
&[
|
||||||
|
&"git",
|
||||||
|
&"commit",
|
||||||
|
&"--no-gpg-sign",
|
||||||
|
&"-m",
|
||||||
|
&format!("Patch {}", path.display()),
|
||||||
|
],
|
||||||
|
Some(rand_dir),
|
||||||
|
)?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -241,6 +265,8 @@ pub fn run() -> Result<(), String> {
|
|||||||
for (repo_url, checkout_commit, cb) in to_clone {
|
for (repo_url, checkout_commit, cb) in to_clone {
|
||||||
clone_and_setup(repo_url, checkout_commit, *cb)?;
|
clone_and_setup(repo_url, checkout_commit, *cb)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prepare_rand()?;
|
||||||
}
|
}
|
||||||
|
|
||||||
println!("Successfully ran `prepare`");
|
println!("Successfully ran `prepare`");
|
||||||
|
@ -771,11 +771,19 @@ fn extended_rand_tests(env: &Env, args: &TestArg) -> Result<(), String> {
|
|||||||
println!("Not using GCC master branch. Skipping `extended_rand_tests`.");
|
println!("Not using GCC master branch. Skipping `extended_rand_tests`.");
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
let mut env = env.clone();
|
||||||
|
// newer aho_corasick versions throw a deprecation warning
|
||||||
|
let rustflags = format!(
|
||||||
|
"{} --cap-lints warn",
|
||||||
|
env.get("RUSTFLAGS").cloned().unwrap_or_default()
|
||||||
|
);
|
||||||
|
env.insert("RUSTFLAGS".to_string(), rustflags);
|
||||||
|
|
||||||
let path = Path::new(crate::BUILD_DIR).join("rand");
|
let path = Path::new(crate::BUILD_DIR).join("rand");
|
||||||
run_cargo_command(&[&"clean"], Some(&path), env, args)?;
|
run_cargo_command(&[&"clean"], Some(&path), &env, args)?;
|
||||||
// FIXME: create a function "display_if_not_quiet" or something along the line.
|
// FIXME: create a function "display_if_not_quiet" or something along the line.
|
||||||
println!("[TEST] rust-random/rand");
|
println!("[TEST] rust-random/rand");
|
||||||
run_cargo_command(&[&"test", &"--workspace"], Some(&path), env, args)?;
|
run_cargo_command(&[&"test", &"--workspace"], Some(&path), &env, args)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -911,9 +919,9 @@ fn should_remove_test(file_path: &Path) -> Result<bool, String> {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if [
|
if [
|
||||||
"// error-pattern:",
|
"//@ error-pattern:",
|
||||||
"// build-fail",
|
"//@ build-fail",
|
||||||
"// run-fail",
|
"//@ run-fail",
|
||||||
"-Cllvm-args",
|
"-Cllvm-args",
|
||||||
"//~",
|
"//~",
|
||||||
"thread",
|
"thread",
|
||||||
@ -1007,6 +1015,8 @@ where
|
|||||||
// Tests generating errors.
|
// Tests generating errors.
|
||||||
remove_file(&rust_path.join("tests/ui/consts/issue-94675.rs"))?;
|
remove_file(&rust_path.join("tests/ui/consts/issue-94675.rs"))?;
|
||||||
remove_file(&rust_path.join("tests/ui/mir/mir_heavy_promoted.rs"))?;
|
remove_file(&rust_path.join("tests/ui/mir/mir_heavy_promoted.rs"))?;
|
||||||
|
remove_file(&rust_path.join("tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail.rs"))?;
|
||||||
|
remove_file(&rust_path.join("tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop.rs"))?;
|
||||||
|
|
||||||
walk_dir(rust_path.join("tests/ui"), dir_handling, file_handling)?;
|
walk_dir(rust_path.join("tests/ui"), dir_handling, file_handling)?;
|
||||||
|
|
||||||
|
1
deps/libLLVM-18-rust-1.78.0-nightly.so
vendored
Normal file
1
deps/libLLVM-18-rust-1.78.0-nightly.so
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
INPUT(libLLVM.so.18.1-rust-1.78.0-nightly)
|
24
patches/crates/0001-Remove-deny-warnings.patch
Normal file
24
patches/crates/0001-Remove-deny-warnings.patch
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
From f4a31d2c57cdbd578b778ab70eb2a0cfb248652c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Antoni Boucher <bouanto@zoho.com>
|
||||||
|
Date: Tue, 5 Mar 2024 12:39:44 -0500
|
||||||
|
Subject: [PATCH] Remove #[deny(warnings)]
|
||||||
|
|
||||||
|
---
|
||||||
|
src/lib.rs | 1 -
|
||||||
|
1 file changed, 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/lib.rs b/src/lib.rs
|
||||||
|
index 8ade2881d5..e26c595e38 100644
|
||||||
|
--- a/src/lib.rs
|
||||||
|
+++ b/src/lib.rs
|
||||||
|
@@ -47,7 +47,6 @@
|
||||||
|
)]
|
||||||
|
#![deny(missing_docs)]
|
||||||
|
#![deny(missing_debug_implementations)]
|
||||||
|
-#![doc(test(attr(allow(unused_variables), deny(warnings))))]
|
||||||
|
#![no_std]
|
||||||
|
#![cfg_attr(feature = "simd_support", feature(stdsimd, portable_simd))]
|
||||||
|
#![cfg_attr(doc_cfg, feature(doc_cfg))]
|
||||||
|
--
|
||||||
|
2.44.0
|
||||||
|
|
@ -1,3 +1,3 @@
|
|||||||
[toolchain]
|
[toolchain]
|
||||||
channel = "nightly-2024-02-20"
|
channel = "nightly-2024-03-05"
|
||||||
components = ["rust-src", "rustc-dev", "llvm-tools-preview"]
|
components = ["rust-src", "rustc-dev", "llvm-tools-preview"]
|
||||||
|
@ -10,7 +10,7 @@ use rustc_session::cstore::DllImport;
|
|||||||
pub(crate) struct ArArchiveBuilderBuilder;
|
pub(crate) struct ArArchiveBuilderBuilder;
|
||||||
|
|
||||||
impl ArchiveBuilderBuilder for ArArchiveBuilderBuilder {
|
impl ArchiveBuilderBuilder for ArArchiveBuilderBuilder {
|
||||||
fn new_archive_builder<'a>(&self, sess: &'a Session) -> Box<dyn ArchiveBuilder<'a> + 'a> {
|
fn new_archive_builder<'a>(&self, sess: &'a Session) -> Box<dyn ArchiveBuilder + 'a> {
|
||||||
Box::new(ArArchiveBuilder::new(sess, get_native_object_symbols))
|
Box::new(ArArchiveBuilder::new(sess, get_native_object_symbols))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -862,6 +862,31 @@ impl<'a, 'gcc, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'gcc, 'tcx> {
|
|||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn fadd_algebraic(&mut self, lhs: RValue<'gcc>, rhs: RValue<'gcc>) -> RValue<'gcc> {
|
||||||
|
// NOTE: it seems like we cannot enable fast-mode for a single operation in GCC.
|
||||||
|
lhs + rhs
|
||||||
|
}
|
||||||
|
|
||||||
|
fn fsub_algebraic(&mut self, lhs: RValue<'gcc>, rhs: RValue<'gcc>) -> RValue<'gcc> {
|
||||||
|
// NOTE: it seems like we cannot enable fast-mode for a single operation in GCC.
|
||||||
|
lhs - rhs
|
||||||
|
}
|
||||||
|
|
||||||
|
fn fmul_algebraic(&mut self, lhs: RValue<'gcc>, rhs: RValue<'gcc>) -> RValue<'gcc> {
|
||||||
|
// NOTE: it seems like we cannot enable fast-mode for a single operation in GCC.
|
||||||
|
lhs * rhs
|
||||||
|
}
|
||||||
|
|
||||||
|
fn fdiv_algebraic(&mut self, lhs: RValue<'gcc>, rhs: RValue<'gcc>) -> RValue<'gcc> {
|
||||||
|
// NOTE: it seems like we cannot enable fast-mode for a single operation in GCC.
|
||||||
|
lhs / rhs
|
||||||
|
}
|
||||||
|
|
||||||
|
fn frem_algebraic(&mut self, lhs: RValue<'gcc>, rhs: RValue<'gcc>) -> RValue<'gcc> {
|
||||||
|
// NOTE: it seems like we cannot enable fast-mode for a single operation in GCC.
|
||||||
|
self.frem(lhs, rhs)
|
||||||
|
}
|
||||||
|
|
||||||
fn checked_binop(
|
fn checked_binop(
|
||||||
&mut self,
|
&mut self,
|
||||||
oop: OverflowOp,
|
oop: OverflowOp,
|
||||||
@ -983,10 +1008,13 @@ impl<'a, 'gcc, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'gcc, 'tcx> {
|
|||||||
OperandValue::Immediate(self.to_immediate(load, place.layout))
|
OperandValue::Immediate(self.to_immediate(load, place.layout))
|
||||||
} else if let abi::Abi::ScalarPair(ref a, ref b) = place.layout.abi {
|
} else if let abi::Abi::ScalarPair(ref a, ref b) = place.layout.abi {
|
||||||
let b_offset = a.size(self).align_to(b.align(self).abi);
|
let b_offset = a.size(self).align_to(b.align(self).abi);
|
||||||
let pair_type = place.layout.gcc_type(self);
|
|
||||||
|
|
||||||
let mut load = |i, scalar: &abi::Scalar, align| {
|
let mut load = |i, scalar: &abi::Scalar, align| {
|
||||||
let llptr = self.struct_gep(pair_type, place.llval, i as u64);
|
let llptr = if i == 0 {
|
||||||
|
place.llval
|
||||||
|
} else {
|
||||||
|
self.inbounds_ptradd(place.llval, self.const_usize(b_offset.bytes()))
|
||||||
|
};
|
||||||
let llty = place.layout.scalar_pair_element_gcc_type(self, i);
|
let llty = place.layout.scalar_pair_element_gcc_type(self, i);
|
||||||
let load = self.load(llty, llptr, align);
|
let load = self.load(llty, llptr, align);
|
||||||
scalar_load_metadata(self, load, scalar);
|
scalar_load_metadata(self, load, scalar);
|
||||||
@ -1157,35 +1185,6 @@ impl<'a, 'gcc, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'gcc, 'tcx> {
|
|||||||
result.get_address(self.location)
|
result.get_address(self.location)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn struct_gep(&mut self, value_type: Type<'gcc>, ptr: RValue<'gcc>, idx: u64) -> RValue<'gcc> {
|
|
||||||
// FIXME(antoyo): it would be better if the API only called this on struct, not on arrays.
|
|
||||||
assert_eq!(idx as usize as u64, idx);
|
|
||||||
let value = ptr.dereference(self.location).to_rvalue();
|
|
||||||
|
|
||||||
if value_type.dyncast_array().is_some() {
|
|
||||||
let index = self
|
|
||||||
.context
|
|
||||||
.new_rvalue_from_long(self.u64_type, i64::try_from(idx).expect("i64::try_from"));
|
|
||||||
let element = self.context.new_array_access(self.location, value, index);
|
|
||||||
element.get_address(self.location)
|
|
||||||
} else if let Some(vector_type) = value_type.dyncast_vector() {
|
|
||||||
let array_type = vector_type.get_element_type().make_pointer();
|
|
||||||
let array = self.bitcast(ptr, array_type);
|
|
||||||
let index = self
|
|
||||||
.context
|
|
||||||
.new_rvalue_from_long(self.u64_type, i64::try_from(idx).expect("i64::try_from"));
|
|
||||||
let element = self.context.new_array_access(self.location, array, index);
|
|
||||||
element.get_address(self.location)
|
|
||||||
} else if let Some(struct_type) = value_type.is_struct() {
|
|
||||||
// NOTE: due to opaque pointers now being used, we need to bitcast here.
|
|
||||||
let ptr = self.bitcast_if_needed(ptr, value_type.make_pointer());
|
|
||||||
ptr.dereference_field(self.location, struct_type.get_field(idx as i32))
|
|
||||||
.get_address(self.location)
|
|
||||||
} else {
|
|
||||||
panic!("Unexpected type {:?}", value_type);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Casts */
|
/* Casts */
|
||||||
fn trunc(&mut self, value: RValue<'gcc>, dest_ty: Type<'gcc>) -> RValue<'gcc> {
|
fn trunc(&mut self, value: RValue<'gcc>, dest_ty: Type<'gcc>) -> RValue<'gcc> {
|
||||||
// TODO(antoyo): check that it indeed truncate the value.
|
// TODO(antoyo): check that it indeed truncate the value.
|
||||||
@ -2078,7 +2077,7 @@ impl<'a, 'gcc, 'tcx> Builder<'a, 'gcc, 'tcx> {
|
|||||||
self.vector_reduce(src, |a, b, context| context.new_binary_op(loc, op, a.get_type(), a, b))
|
self.vector_reduce(src, |a, b, context| context.new_binary_op(loc, op, a.get_type(), a, b))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn vector_reduce_fadd_fast(
|
pub fn vector_reduce_fadd_reassoc(
|
||||||
&mut self,
|
&mut self,
|
||||||
_acc: RValue<'gcc>,
|
_acc: RValue<'gcc>,
|
||||||
_src: RValue<'gcc>,
|
_src: RValue<'gcc>,
|
||||||
@ -2109,7 +2108,7 @@ impl<'a, 'gcc, 'tcx> Builder<'a, 'gcc, 'tcx> {
|
|||||||
unimplemented!();
|
unimplemented!();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn vector_reduce_fmul_fast(
|
pub fn vector_reduce_fmul_reassoc(
|
||||||
&mut self,
|
&mut self,
|
||||||
_acc: RValue<'gcc>,
|
_acc: RValue<'gcc>,
|
||||||
_src: RValue<'gcc>,
|
_src: RValue<'gcc>,
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use rustc_errors::{DiagCtxt, DiagnosticBuilder, EmissionGuarantee, IntoDiagnostic, Level};
|
use rustc_errors::{Diag, DiagCtxt, EmissionGuarantee, IntoDiagnostic, Level};
|
||||||
use rustc_macros::{Diagnostic, Subdiagnostic};
|
use rustc_macros::{Diagnostic, Subdiagnostic};
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
|
|
||||||
@ -90,12 +90,8 @@ pub(crate) struct TargetFeatureDisableOrEnable<'a> {
|
|||||||
pub(crate) struct MissingFeatures;
|
pub(crate) struct MissingFeatures;
|
||||||
|
|
||||||
impl<G: EmissionGuarantee> IntoDiagnostic<'_, G> for TargetFeatureDisableOrEnable<'_> {
|
impl<G: EmissionGuarantee> IntoDiagnostic<'_, G> for TargetFeatureDisableOrEnable<'_> {
|
||||||
fn into_diagnostic(self, dcx: &'_ DiagCtxt, level: Level) -> DiagnosticBuilder<'_, G> {
|
fn into_diagnostic(self, dcx: &'_ DiagCtxt, level: Level) -> Diag<'_, G> {
|
||||||
let mut diag = DiagnosticBuilder::new(
|
let mut diag = Diag::new(dcx, level, fluent::codegen_gcc_target_feature_disable_or_enable);
|
||||||
dcx,
|
|
||||||
level,
|
|
||||||
fluent::codegen_gcc_target_feature_disable_or_enable,
|
|
||||||
);
|
|
||||||
if let Some(span) = self.span {
|
if let Some(span) = self.span {
|
||||||
diag.span(span);
|
diag.span(span);
|
||||||
};
|
};
|
||||||
|
@ -23,7 +23,7 @@ use rustc_middle::ty::layout::LayoutOf;
|
|||||||
#[cfg(feature = "master")]
|
#[cfg(feature = "master")]
|
||||||
use rustc_middle::ty::layout::{FnAbiOf, HasTyCtxt};
|
use rustc_middle::ty::layout::{FnAbiOf, HasTyCtxt};
|
||||||
use rustc_middle::ty::{self, Instance, Ty};
|
use rustc_middle::ty::{self, Instance, Ty};
|
||||||
use rustc_span::{sym, symbol::kw, Span, Symbol};
|
use rustc_span::{sym, Span, Symbol};
|
||||||
use rustc_target::abi::call::{ArgAbi, FnAbi, PassMode};
|
use rustc_target::abi::call::{ArgAbi, FnAbi, PassMode};
|
||||||
use rustc_target::abi::HasDataLayout;
|
use rustc_target::abi::HasDataLayout;
|
||||||
#[cfg(feature = "master")]
|
#[cfg(feature = "master")]
|
||||||
@ -143,7 +143,7 @@ impl<'a, 'gcc, 'tcx> IntrinsicCallMethods<'tcx> for Builder<'a, 'gcc, 'tcx> {
|
|||||||
let res = self.context.new_call(None, builtin, &[a]);
|
let res = self.context.new_call(None, builtin, &[a]);
|
||||||
self.icmp(IntPredicate::IntEQ, res, self.const_i32(0))
|
self.icmp(IntPredicate::IntEQ, res, self.const_i32(0))
|
||||||
}
|
}
|
||||||
kw::Try => {
|
sym::catch_unwind => {
|
||||||
try_intrinsic(
|
try_intrinsic(
|
||||||
self,
|
self,
|
||||||
args[0].immediate(),
|
args[0].immediate(),
|
||||||
|
@ -1171,14 +1171,14 @@ pub fn generic_simd_intrinsic<'a, 'gcc, 'tcx>(
|
|||||||
|
|
||||||
arith_red!(
|
arith_red!(
|
||||||
simd_reduce_add_unordered: BinaryOp::Plus,
|
simd_reduce_add_unordered: BinaryOp::Plus,
|
||||||
vector_reduce_fadd_fast,
|
vector_reduce_fadd_reassoc,
|
||||||
false,
|
false,
|
||||||
add,
|
add,
|
||||||
0.0 // TODO: Use this argument.
|
0.0 // TODO: Use this argument.
|
||||||
);
|
);
|
||||||
arith_red!(
|
arith_red!(
|
||||||
simd_reduce_mul_unordered: BinaryOp::Mult,
|
simd_reduce_mul_unordered: BinaryOp::Mult,
|
||||||
vector_reduce_fmul_fast,
|
vector_reduce_fmul_reassoc,
|
||||||
false,
|
false,
|
||||||
mul,
|
mul,
|
||||||
1.0
|
1.0
|
||||||
@ -1223,9 +1223,6 @@ pub fn generic_simd_intrinsic<'a, 'gcc, 'tcx>(
|
|||||||
|
|
||||||
minmax_red!(simd_reduce_min: vector_reduce_min, vector_reduce_fmin);
|
minmax_red!(simd_reduce_min: vector_reduce_min, vector_reduce_fmin);
|
||||||
minmax_red!(simd_reduce_max: vector_reduce_max, vector_reduce_fmax);
|
minmax_red!(simd_reduce_max: vector_reduce_max, vector_reduce_fmax);
|
||||||
// TODO(sadlerap): revisit these intrinsics to generate more optimal reductions
|
|
||||||
minmax_red!(simd_reduce_min_nanless: vector_reduce_min, vector_reduce_fmin);
|
|
||||||
minmax_red!(simd_reduce_max_nanless: vector_reduce_max, vector_reduce_fmax);
|
|
||||||
|
|
||||||
macro_rules! bitwise_red {
|
macro_rules! bitwise_red {
|
||||||
($name:ident : $op:expr, $boolean:expr) => {
|
($name:ident : $op:expr, $boolean:expr) => {
|
||||||
|
10
src/type_.rs
10
src/type_.rs
@ -83,8 +83,10 @@ impl<'gcc, 'tcx> CodegenCx<'gcc, 'tcx> {
|
|||||||
|
|
||||||
pub fn type_float_from_ty(&self, t: ty::FloatTy) -> Type<'gcc> {
|
pub fn type_float_from_ty(&self, t: ty::FloatTy) -> Type<'gcc> {
|
||||||
match t {
|
match t {
|
||||||
|
ty::FloatTy::F16 => self.type_f16(),
|
||||||
ty::FloatTy::F32 => self.type_f32(),
|
ty::FloatTy::F32 => self.type_f32(),
|
||||||
ty::FloatTy::F64 => self.type_f64(),
|
ty::FloatTy::F64 => self.type_f64(),
|
||||||
|
ty::FloatTy::F128 => self.type_f128(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -118,6 +120,10 @@ impl<'gcc, 'tcx> BaseTypeMethods<'tcx> for CodegenCx<'gcc, 'tcx> {
|
|||||||
self.isize_type
|
self.isize_type
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn type_f16(&self) -> Type<'gcc> {
|
||||||
|
unimplemented!("f16_f128")
|
||||||
|
}
|
||||||
|
|
||||||
fn type_f32(&self) -> Type<'gcc> {
|
fn type_f32(&self) -> Type<'gcc> {
|
||||||
self.float_type
|
self.float_type
|
||||||
}
|
}
|
||||||
@ -126,6 +132,10 @@ impl<'gcc, 'tcx> BaseTypeMethods<'tcx> for CodegenCx<'gcc, 'tcx> {
|
|||||||
self.double_type
|
self.double_type
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn type_f128(&self) -> Type<'gcc> {
|
||||||
|
unimplemented!("f16_f128")
|
||||||
|
}
|
||||||
|
|
||||||
fn type_func(&self, params: &[Type<'gcc>], return_type: Type<'gcc>) -> Type<'gcc> {
|
fn type_func(&self, params: &[Type<'gcc>], return_type: Type<'gcc>) -> Type<'gcc> {
|
||||||
self.context.new_function_pointer_type(None, return_type, params, false)
|
self.context.new_function_pointer_type(None, return_type, params, false)
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@ use rustc_middle::ty::{self, Ty, TypeVisitableExt};
|
|||||||
use rustc_target::abi::call::{CastTarget, FnAbi, Reg};
|
use rustc_target::abi::call::{CastTarget, FnAbi, Reg};
|
||||||
use rustc_target::abi::{
|
use rustc_target::abi::{
|
||||||
self, Abi, Align, FieldsShape, Int, Integer, PointeeInfo, Pointer, Size, TyAbiInterface,
|
self, Abi, Align, FieldsShape, Int, Integer, PointeeInfo, Pointer, Size, TyAbiInterface,
|
||||||
Variants, F32, F64,
|
Variants, F128, F16, F32, F64,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::abi::{FnAbiGcc, FnAbiGccExt, GccType};
|
use crate::abi::{FnAbiGcc, FnAbiGccExt, GccType};
|
||||||
@ -171,7 +171,6 @@ pub trait LayoutGccExt<'tcx> {
|
|||||||
cx: &CodegenCx<'gcc, 'tcx>,
|
cx: &CodegenCx<'gcc, 'tcx>,
|
||||||
index: usize,
|
index: usize,
|
||||||
) -> Type<'gcc>;
|
) -> Type<'gcc>;
|
||||||
fn gcc_field_index(&self, index: usize) -> u64;
|
|
||||||
fn pointee_info_at<'gcc>(
|
fn pointee_info_at<'gcc>(
|
||||||
&self,
|
&self,
|
||||||
cx: &CodegenCx<'gcc, 'tcx>,
|
cx: &CodegenCx<'gcc, 'tcx>,
|
||||||
@ -284,8 +283,10 @@ impl<'tcx> LayoutGccExt<'tcx> for TyAndLayout<'tcx> {
|
|||||||
match scalar.primitive() {
|
match scalar.primitive() {
|
||||||
Int(i, true) => cx.type_from_integer(i),
|
Int(i, true) => cx.type_from_integer(i),
|
||||||
Int(i, false) => cx.type_from_unsigned_integer(i),
|
Int(i, false) => cx.type_from_unsigned_integer(i),
|
||||||
|
F16 => cx.type_f16(),
|
||||||
F32 => cx.type_f32(),
|
F32 => cx.type_f32(),
|
||||||
F64 => cx.type_f64(),
|
F64 => cx.type_f64(),
|
||||||
|
F128 => cx.type_f128(),
|
||||||
Pointer(address_space) => {
|
Pointer(address_space) => {
|
||||||
// If we know the alignment, pick something better than i8.
|
// If we know the alignment, pick something better than i8.
|
||||||
let pointee = if let Some(pointee) = self.pointee_info_at(cx, offset) {
|
let pointee = if let Some(pointee) = self.pointee_info_at(cx, offset) {
|
||||||
@ -327,24 +328,6 @@ impl<'tcx> LayoutGccExt<'tcx> for TyAndLayout<'tcx> {
|
|||||||
self.scalar_gcc_type_at(cx, scalar, offset)
|
self.scalar_gcc_type_at(cx, scalar, offset)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn gcc_field_index(&self, index: usize) -> u64 {
|
|
||||||
match self.abi {
|
|
||||||
Abi::Scalar(_) | Abi::ScalarPair(..) => {
|
|
||||||
bug!("TyAndLayout::gcc_field_index({:?}): not applicable", self)
|
|
||||||
}
|
|
||||||
_ => {}
|
|
||||||
}
|
|
||||||
match self.fields {
|
|
||||||
FieldsShape::Primitive | FieldsShape::Union(_) => {
|
|
||||||
bug!("TyAndLayout::gcc_field_index({:?}): not applicable", self)
|
|
||||||
}
|
|
||||||
|
|
||||||
FieldsShape::Array { .. } => index as u64,
|
|
||||||
|
|
||||||
FieldsShape::Arbitrary { .. } => 1 + (self.fields.memory_index(index) as u64) * 2,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn pointee_info_at<'a>(&self, cx: &CodegenCx<'a, 'tcx>, offset: Size) -> Option<PointeeInfo> {
|
fn pointee_info_at<'a>(&self, cx: &CodegenCx<'a, 'tcx>, offset: Size) -> Option<PointeeInfo> {
|
||||||
if let Some(&pointee) = cx.pointee_infos.borrow().get(&(self.ty, offset)) {
|
if let Some(&pointee) = cx.pointee_infos.borrow().get(&(self.ty, offset)) {
|
||||||
return pointee;
|
return pointee;
|
||||||
@ -374,10 +357,6 @@ impl<'gcc, 'tcx> LayoutTypeMethods<'tcx> for CodegenCx<'gcc, 'tcx> {
|
|||||||
layout.is_gcc_scalar_pair()
|
layout.is_gcc_scalar_pair()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn backend_field_index(&self, layout: TyAndLayout<'tcx>, index: usize) -> u64 {
|
|
||||||
layout.gcc_field_index(index)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn scalar_pair_element_backend_type(
|
fn scalar_pair_element_backend_type(
|
||||||
&self,
|
&self,
|
||||||
layout: TyAndLayout<'tcx>,
|
layout: TyAndLayout<'tcx>,
|
||||||
|
@ -21,7 +21,6 @@ tests/ui/fmt/format-args-capture-issue-106408.rs
|
|||||||
tests/ui/fmt/indoc-issue-106408.rs
|
tests/ui/fmt/indoc-issue-106408.rs
|
||||||
tests/ui/hygiene/issue-77523-def-site-async-await.rs
|
tests/ui/hygiene/issue-77523-def-site-async-await.rs
|
||||||
tests/ui/inherent-impls-overlap-check/no-overlap.rs
|
tests/ui/inherent-impls-overlap-check/no-overlap.rs
|
||||||
tests/ui/annotate-snippet/multispan.rs
|
|
||||||
tests/ui/enum-discriminant/issue-46519.rs
|
tests/ui/enum-discriminant/issue-46519.rs
|
||||||
tests/ui/issues/issue-45731.rs
|
tests/ui/issues/issue-45731.rs
|
||||||
tests/ui/lint/test-allow-dead-extern-static-no-warning.rs
|
tests/ui/lint/test-allow-dead-extern-static-no-warning.rs
|
||||||
@ -29,9 +28,5 @@ tests/ui/macros/macro-comma-behavior-rpass.rs
|
|||||||
tests/ui/macros/rfc-2011-nicer-assert-messages/assert-with-custom-errors-does-not-create-unnecessary-code.rs
|
tests/ui/macros/rfc-2011-nicer-assert-messages/assert-with-custom-errors-does-not-create-unnecessary-code.rs
|
||||||
tests/ui/macros/rfc-2011-nicer-assert-messages/feature-gate-generic_assert.rs
|
tests/ui/macros/rfc-2011-nicer-assert-messages/feature-gate-generic_assert.rs
|
||||||
tests/ui/macros/stringify.rs
|
tests/ui/macros/stringify.rs
|
||||||
tests/ui/panics/test-panic.rs
|
|
||||||
tests/ui/panics/test-should-fail-bad-message.rs
|
|
||||||
tests/ui/panics/test-should-panic-bad-message.rs
|
|
||||||
tests/ui/panics/test-should-panic-no-message.rs
|
|
||||||
tests/ui/reexport-test-harness-main.rs
|
tests/ui/reexport-test-harness-main.rs
|
||||||
tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-in-test.rs
|
tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-in-test.rs
|
||||||
|
@ -5,7 +5,7 @@ tests/ui/lto/lto-many-codegen-units.rs
|
|||||||
tests/ui/lto/issue-100772.rs
|
tests/ui/lto/issue-100772.rs
|
||||||
tests/ui/lto/lto-rustc-loads-linker-plugin.rs
|
tests/ui/lto/lto-rustc-loads-linker-plugin.rs
|
||||||
tests/ui/panic-runtime/lto-unwind.rs
|
tests/ui/panic-runtime/lto-unwind.rs
|
||||||
tests/ui/sanitize/issue-111184-coroutine-witness.rs
|
tests/ui/sanitizer/issue-111184-cfi-coroutine-witness.rs
|
||||||
tests/ui/sepcomp/sepcomp-lib-lto.rs
|
tests/ui/sepcomp/sepcomp-lib-lto.rs
|
||||||
tests/ui/lto/lto-opt-level-s.rs
|
tests/ui/lto/lto-opt-level-s.rs
|
||||||
tests/ui/lto/lto-opt-level-z.rs
|
tests/ui/lto/lto-opt-level-z.rs
|
||||||
|
@ -69,42 +69,8 @@ tests/ui/async-await/deep-futures-are-freeze.rs
|
|||||||
tests/ui/closures/capture-unsized-by-ref.rs
|
tests/ui/closures/capture-unsized-by-ref.rs
|
||||||
tests/ui/coroutine/resume-after-return.rs
|
tests/ui/coroutine/resume-after-return.rs
|
||||||
tests/ui/macros/rfc-2011-nicer-assert-messages/all-expr-kinds.rs
|
tests/ui/macros/rfc-2011-nicer-assert-messages/all-expr-kinds.rs
|
||||||
tests/ui/limits/issue-17913.rs
|
|
||||||
tests/ui/limits/issue-55878.rs
|
|
||||||
tests/ui/linkage-attr/common-linkage-non-zero-init.rs
|
|
||||||
tests/ui/linkage-attr/linkage-detect-extern-generated-name-collision.rs
|
|
||||||
tests/ui/numbers-arithmetic/divide-by-zero.rs
|
|
||||||
tests/ui/numbers-arithmetic/mod-zero.rs
|
|
||||||
tests/ui/numbers-arithmetic/overflowing-neg-nonzero.rs
|
|
||||||
tests/ui/numbers-arithmetic/overflowing-neg.rs
|
|
||||||
tests/ui/optimization-remark.rs
|
|
||||||
tests/ui/panic-handler/panic-handler-std.rs
|
|
||||||
tests/ui/panic-runtime/abort-link-to-unwind-dylib.rs
|
|
||||||
tests/ui/panic-runtime/need-unwind-got-abort.rs
|
|
||||||
tests/ui/panics/issue-47429-short-backtraces.rs
|
|
||||||
tests/ui/panics/panic-in-cleanup.rs
|
|
||||||
tests/ui/panics/panic-in-ffi.rs
|
|
||||||
tests/ui/panics/runtime-switch.rs
|
|
||||||
tests/ui/panics/short-ice-remove-middle-frames-2.rs
|
|
||||||
tests/ui/panics/short-ice-remove-middle-frames.rs
|
|
||||||
tests/ui/precondition-checks/out-of-bounds-get-unchecked.rs
|
|
||||||
tests/ui/simd/masked-load-store.rs
|
tests/ui/simd/masked-load-store.rs
|
||||||
tests/ui/simd/repr_packed.rs
|
tests/ui/simd/repr_packed.rs
|
||||||
tests/ui/type_length_limit.rs
|
|
||||||
tests/ui/async-await/in-trait/dont-project-to-specializable-projection.rs
|
tests/ui/async-await/in-trait/dont-project-to-specializable-projection.rs
|
||||||
tests/ui/async-await/issues/issue-65419/issue-65419-coroutine-resume-after-completion.rs
|
|
||||||
tests/ui/c-variadic/issue-86053-1.rs
|
|
||||||
tests/ui/const-ptr/out_of_bounds_read.rs
|
|
||||||
tests/ui/consts/const_unsafe_unreachable_ub.rs
|
|
||||||
tests/ui/consts/miri_unleashed/drop.rs
|
|
||||||
tests/ui/consts/timeout.rs
|
|
||||||
tests/ui/consts/try-operator.rs
|
tests/ui/consts/try-operator.rs
|
||||||
tests/ui/coroutine/coroutine-resume-after-panic.rs
|
|
||||||
tests/ui/coroutine/unwind-abort-mix.rs
|
tests/ui/coroutine/unwind-abort-mix.rs
|
||||||
tests/ui/duplicate/dupe-symbols-7.rs
|
|
||||||
tests/ui/duplicate/dupe-symbols-8.rs
|
|
||||||
tests/ui/hygiene/panic-location.rs
|
|
||||||
tests/ui/invalid/issue-114435-layout-type-err.rs
|
|
||||||
tests/ui/invalid-compile-flags/invalid-llvm-passes.rs
|
|
||||||
tests/ui/lto/issue-105637.rs
|
|
||||||
tests/ui/lto/lto-duplicate-symbols.rs
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user