Rollup merge of #131424 - workingjubilee:stem-the-tyde-of-glob-imports, r=jieyouxu

compiler: Stop reexporting enum-globs from `rustc_target::abi`

Three enums had **all** their variants glob-exported into a distressingly large amount of the tree. Cease to do that, and also cease to glob import the contents of the module that contained them. Redirect relevant imports to their actual source, the `rustc_abi` crate.

No functional changes.
This commit is contained in:
Matthias Krüger 2024-10-09 20:27:24 +02:00 committed by GitHub
commit e642442f12
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
25 changed files with 91 additions and 47 deletions

View File

@ -3416,6 +3416,7 @@ dependencies = [
"measureme", "measureme",
"object 0.36.4", "object 0.36.4",
"rustc-demangle", "rustc-demangle",
"rustc_abi",
"rustc_ast", "rustc_ast",
"rustc_attr", "rustc_attr",
"rustc_codegen_ssa", "rustc_codegen_ssa",
@ -3456,6 +3457,7 @@ dependencies = [
"object 0.36.4", "object 0.36.4",
"pathdiff", "pathdiff",
"regex", "regex",
"rustc_abi",
"rustc_arena", "rustc_arena",
"rustc_ast", "rustc_ast",
"rustc_attr", "rustc_attr",
@ -3493,6 +3495,7 @@ name = "rustc_const_eval"
version = "0.0.0" version = "0.0.0"
dependencies = [ dependencies = [
"either", "either",
"rustc_abi",
"rustc_apfloat", "rustc_apfloat",
"rustc_ast", "rustc_ast",
"rustc_attr", "rustc_attr",
@ -3772,6 +3775,7 @@ name = "rustc_hir_typeck"
version = "0.0.0" version = "0.0.0"
dependencies = [ dependencies = [
"itertools", "itertools",
"rustc_abi",
"rustc_ast", "rustc_ast",
"rustc_ast_ir", "rustc_ast_ir",
"rustc_attr", "rustc_attr",
@ -4027,6 +4031,7 @@ dependencies = [
"gsgdt", "gsgdt",
"polonius-engine", "polonius-engine",
"rustc-rayon-core", "rustc-rayon-core",
"rustc_abi",
"rustc_apfloat", "rustc_apfloat",
"rustc_arena", "rustc_arena",
"rustc_ast", "rustc_ast",
@ -4522,6 +4527,7 @@ name = "rustc_ty_utils"
version = "0.0.0" version = "0.0.0"
dependencies = [ dependencies = [
"itertools", "itertools",
"rustc_abi",
"rustc_ast_ir", "rustc_ast_ir",
"rustc_data_structures", "rustc_data_structures",
"rustc_errors", "rustc_errors",

View File

@ -3,7 +3,8 @@
//! Adapted from <https://github.com/rust-lang/rust/blob/31c0645b9d2539f47eecb096142474b29dc542f7/compiler/rustc_codegen_ssa/src/mir/place.rs> //! Adapted from <https://github.com/rust-lang/rust/blob/31c0645b9d2539f47eecb096142474b29dc542f7/compiler/rustc_codegen_ssa/src/mir/place.rs>
//! (<https://github.com/rust-lang/rust/pull/104535>) //! (<https://github.com/rust-lang/rust/pull/104535>)
use rustc_target::abi::{Int, TagEncoding, Variants}; use rustc_abi::Primitive::Int;
use rustc_abi::{TagEncoding, Variants};
use crate::prelude::*; use crate::prelude::*;

View File

@ -15,6 +15,7 @@
extern crate jobserver; extern crate jobserver;
#[macro_use] #[macro_use]
extern crate rustc_middle; extern crate rustc_middle;
extern crate rustc_abi;
extern crate rustc_ast; extern crate rustc_ast;
extern crate rustc_codegen_ssa; extern crate rustc_codegen_ssa;
extern crate rustc_data_structures; extern crate rustc_data_structures;

View File

@ -7,6 +7,8 @@
BinaryOp, Block, ComparisonOp, Context, Function, LValue, Location, RValue, ToRValue, Type, BinaryOp, Block, ComparisonOp, Context, Function, LValue, Location, RValue, ToRValue, Type,
UnaryOp, UnaryOp,
}; };
use rustc_abi as abi;
use rustc_abi::{Align, HasDataLayout, Size, TargetDataLayout, WrappingRange};
use rustc_apfloat::{Float, Round, Status, ieee}; use rustc_apfloat::{Float, Round, Status, ieee};
use rustc_codegen_ssa::MemFlags; use rustc_codegen_ssa::MemFlags;
use rustc_codegen_ssa::common::{ use rustc_codegen_ssa::common::{
@ -28,7 +30,6 @@
use rustc_span::Span; use rustc_span::Span;
use rustc_span::def_id::DefId; use rustc_span::def_id::DefId;
use rustc_target::abi::call::FnAbi; use rustc_target::abi::call::FnAbi;
use rustc_target::abi::{self, Align, HasDataLayout, Size, TargetDataLayout, WrappingRange};
use rustc_target::spec::{HasTargetSpec, HasWasmCAbiOpt, Target, WasmCAbi}; use rustc_target::spec::{HasTargetSpec, HasWasmCAbiOpt, Target, WasmCAbi};
use crate::common::{SignType, TypeReflection, type_is_pointer}; use crate::common::{SignType, TypeReflection, type_is_pointer};
@ -998,12 +999,12 @@ fn scalar_load_metadata<'a, 'gcc, 'tcx>(
) { ) {
let vr = scalar.valid_range(bx); let vr = scalar.valid_range(bx);
match scalar.primitive() { match scalar.primitive() {
abi::Int(..) => { abi::Primitive::Int(..) => {
if !scalar.is_always_valid(bx) { if !scalar.is_always_valid(bx) {
bx.range_metadata(load, vr); bx.range_metadata(load, vr);
} }
} }
abi::Pointer(_) if vr.start < vr.end && !vr.contains(0) => { abi::Primitive::Pointer(_) if vr.start < vr.end && !vr.contains(0) => {
bx.nonnull_metadata(load); bx.nonnull_metadata(load);
} }
_ => {} _ => {}

View File

@ -1,11 +1,13 @@
use gccjit::{LValue, RValue, ToRValue, Type}; use gccjit::{LValue, RValue, ToRValue, Type};
use rustc_abi as abi;
use rustc_abi::HasDataLayout;
use rustc_abi::Primitive::Pointer;
use rustc_codegen_ssa::traits::{ use rustc_codegen_ssa::traits::{
BaseTypeCodegenMethods, ConstCodegenMethods, MiscCodegenMethods, StaticCodegenMethods, BaseTypeCodegenMethods, ConstCodegenMethods, MiscCodegenMethods, StaticCodegenMethods,
}; };
use rustc_middle::mir::Mutability; use rustc_middle::mir::Mutability;
use rustc_middle::mir::interpret::{ConstAllocation, GlobalAlloc, Scalar}; use rustc_middle::mir::interpret::{ConstAllocation, GlobalAlloc, Scalar};
use rustc_middle::ty::layout::LayoutOf; use rustc_middle::ty::layout::LayoutOf;
use rustc_target::abi::{self, HasDataLayout, Pointer};
use crate::consts::const_alloc_to_gcc; use crate::consts::const_alloc_to_gcc;
use crate::context::CodegenCx; use crate::context::CodegenCx;

View File

@ -32,6 +32,7 @@
extern crate tracing; extern crate tracing;
// The rustc crates we need // The rustc crates we need
extern crate rustc_abi;
extern crate rustc_apfloat; extern crate rustc_apfloat;
extern crate rustc_ast; extern crate rustc_ast;
extern crate rustc_attr; extern crate rustc_attr;

View File

@ -1,6 +1,9 @@
use std::fmt::Write; use std::fmt::Write;
use gccjit::{Struct, Type}; use gccjit::{Struct, Type};
use rustc_abi as abi;
use rustc_abi::Primitive::*;
use rustc_abi::{Abi, FieldsShape, Integer, PointeeInfo, Size, Variants};
use rustc_codegen_ssa::traits::{ use rustc_codegen_ssa::traits::{
BaseTypeCodegenMethods, DerivedTypeCodegenMethods, LayoutTypeCodegenMethods, BaseTypeCodegenMethods, DerivedTypeCodegenMethods, LayoutTypeCodegenMethods,
}; };
@ -8,11 +11,8 @@
use rustc_middle::ty::layout::{LayoutOf, TyAndLayout}; use rustc_middle::ty::layout::{LayoutOf, TyAndLayout};
use rustc_middle::ty::print::with_no_trimmed_paths; use rustc_middle::ty::print::with_no_trimmed_paths;
use rustc_middle::ty::{self, CoroutineArgsExt, Ty, TypeVisitableExt}; use rustc_middle::ty::{self, CoroutineArgsExt, Ty, TypeVisitableExt};
use rustc_target::abi::TyAbiInterface;
use rustc_target::abi::call::{CastTarget, FnAbi, Reg}; use rustc_target::abi::call::{CastTarget, FnAbi, Reg};
use rustc_target::abi::{
self, Abi, FieldsShape, Float, Int, Integer, PointeeInfo, Pointer, Size, TyAbiInterface,
Variants,
};
use crate::abi::{FnAbiGcc, FnAbiGccExt, GccType}; use crate::abi::{FnAbiGcc, FnAbiGccExt, GccType};
use crate::context::CodegenCx; use crate::context::CodegenCx;

View File

@ -14,6 +14,7 @@ libc = "0.2"
measureme = "11" measureme = "11"
object = { version = "0.36.3", default-features = false, features = ["std", "read"] } object = { version = "0.36.3", default-features = false, features = ["std", "read"] }
rustc-demangle = "0.1.21" rustc-demangle = "0.1.21"
rustc_abi = { path = "../rustc_abi" }
rustc_ast = { path = "../rustc_ast" } rustc_ast = { path = "../rustc_ast" }
rustc_attr = { path = "../rustc_attr" } rustc_attr = { path = "../rustc_attr" }
rustc_codegen_ssa = { path = "../rustc_codegen_ssa" } rustc_codegen_ssa = { path = "../rustc_codegen_ssa" }

View File

@ -1,6 +1,9 @@
use std::cmp; use std::cmp;
use libc::c_uint; use libc::c_uint;
use rustc_abi as abi;
use rustc_abi::Primitive::Int;
use rustc_abi::{HasDataLayout, Size};
use rustc_codegen_ssa::MemFlags; use rustc_codegen_ssa::MemFlags;
use rustc_codegen_ssa::mir::operand::{OperandRef, OperandValue}; use rustc_codegen_ssa::mir::operand::{OperandRef, OperandValue};
use rustc_codegen_ssa::mir::place::{PlaceRef, PlaceValue}; use rustc_codegen_ssa::mir::place::{PlaceRef, PlaceValue};
@ -11,7 +14,6 @@
use rustc_middle::{bug, ty}; use rustc_middle::{bug, ty};
use rustc_session::config; use rustc_session::config;
pub(crate) use rustc_target::abi::call::*; pub(crate) use rustc_target::abi::call::*;
use rustc_target::abi::{self, HasDataLayout, Int, Size};
use rustc_target::spec::SanitizerSet; use rustc_target::spec::SanitizerSet;
pub(crate) use rustc_target::spec::abi::Abi; pub(crate) use rustc_target::spec::abi::Abi;
use smallvec::SmallVec; use smallvec::SmallVec;

View File

@ -3,6 +3,8 @@
use std::{iter, ptr}; use std::{iter, ptr};
use libc::{c_char, c_uint}; use libc::{c_char, c_uint};
use rustc_abi as abi;
use rustc_abi::{Align, Size, WrappingRange};
use rustc_codegen_ssa::MemFlags; use rustc_codegen_ssa::MemFlags;
use rustc_codegen_ssa::common::{IntPredicate, RealPredicate, SynchronizationScope, TypeKind}; use rustc_codegen_ssa::common::{IntPredicate, RealPredicate, SynchronizationScope, TypeKind};
use rustc_codegen_ssa::mir::operand::{OperandRef, OperandValue}; use rustc_codegen_ssa::mir::operand::{OperandRef, OperandValue};
@ -20,7 +22,6 @@
use rustc_session::config::OptLevel; use rustc_session::config::OptLevel;
use rustc_span::Span; use rustc_span::Span;
use rustc_target::abi::call::FnAbi; use rustc_target::abi::call::FnAbi;
use rustc_target::abi::{self, Align, Size, WrappingRange};
use rustc_target::spec::{HasTargetSpec, SanitizerSet, Target}; use rustc_target::spec::{HasTargetSpec, SanitizerSet, Target};
use smallvec::SmallVec; use smallvec::SmallVec;
use tracing::{debug, instrument}; use tracing::{debug, instrument};
@ -505,12 +506,12 @@ fn scalar_load_metadata<'a, 'll, 'tcx>(
} }
match scalar.primitive() { match scalar.primitive() {
abi::Int(..) => { abi::Primitive::Int(..) => {
if !scalar.is_always_valid(bx) { if !scalar.is_always_valid(bx) {
bx.range_metadata(load, scalar.valid_range(bx)); bx.range_metadata(load, scalar.valid_range(bx));
} }
} }
abi::Pointer(_) => { abi::Primitive::Pointer(_) => {
if !scalar.valid_range(bx).contains(0) { if !scalar.valid_range(bx).contains(0) {
bx.nonnull_metadata(load); bx.nonnull_metadata(load);
} }
@ -521,7 +522,7 @@ fn scalar_load_metadata<'a, 'll, 'tcx>(
} }
} }
} }
abi::Float(_) => {} abi::Primitive::Float(_) => {}
} }
} }

View File

@ -1,6 +1,9 @@
//! Code that is useful in various codegen modules. //! Code that is useful in various codegen modules.
use libc::{c_char, c_uint}; use libc::{c_char, c_uint};
use rustc_abi as abi;
use rustc_abi::Primitive::Pointer;
use rustc_abi::{AddressSpace, HasDataLayout};
use rustc_ast::Mutability; use rustc_ast::Mutability;
use rustc_codegen_ssa::traits::*; use rustc_codegen_ssa::traits::*;
use rustc_data_structures::stable_hasher::{Hash128, HashStable, StableHasher}; use rustc_data_structures::stable_hasher::{Hash128, HashStable, StableHasher};
@ -9,7 +12,6 @@
use rustc_middle::mir::interpret::{ConstAllocation, GlobalAlloc, Scalar}; use rustc_middle::mir::interpret::{ConstAllocation, GlobalAlloc, Scalar};
use rustc_middle::ty::TyCtxt; use rustc_middle::ty::TyCtxt;
use rustc_session::cstore::DllImport; use rustc_session::cstore::DllImport;
use rustc_target::abi::{self, AddressSpace, HasDataLayout, Pointer};
use tracing::debug; use tracing::debug;
use crate::consts::const_alloc_to_llvm; use crate::consts::const_alloc_to_llvm;

View File

@ -1,11 +1,12 @@
use std::fmt::Write; use std::fmt::Write;
use rustc_abi::Primitive::{Float, Int, Pointer};
use rustc_abi::{Abi, Align, FieldsShape, Scalar, Size, Variants};
use rustc_codegen_ssa::traits::*; use rustc_codegen_ssa::traits::*;
use rustc_middle::bug; use rustc_middle::bug;
use rustc_middle::ty::layout::{LayoutOf, TyAndLayout}; use rustc_middle::ty::layout::{LayoutOf, TyAndLayout};
use rustc_middle::ty::print::{with_no_trimmed_paths, with_no_visible_paths}; use rustc_middle::ty::print::{with_no_trimmed_paths, with_no_visible_paths};
use rustc_middle::ty::{self, CoroutineArgsExt, Ty, TypeVisitableExt}; use rustc_middle::ty::{self, CoroutineArgsExt, Ty, TypeVisitableExt};
use rustc_target::abi::{Abi, Align, FieldsShape, Float, Int, Pointer, Scalar, Size, Variants};
use tracing::debug; use tracing::debug;
use crate::common::*; use crate::common::*;

View File

@ -14,6 +14,7 @@ itertools = "0.12"
jobserver = "0.1.28" jobserver = "0.1.28"
pathdiff = "0.2.0" pathdiff = "0.2.0"
regex = "1.4" regex = "1.4"
rustc_abi = { path = "../rustc_abi" }
rustc_arena = { path = "../rustc_arena" } rustc_arena = { path = "../rustc_arena" }
rustc_ast = { path = "../rustc_ast" } rustc_ast = { path = "../rustc_ast" }
rustc_attr = { path = "../rustc_attr" } rustc_attr = { path = "../rustc_attr" }

View File

@ -3,12 +3,13 @@
use arrayvec::ArrayVec; use arrayvec::ArrayVec;
use either::Either; use either::Either;
use rustc_abi as abi;
use rustc_abi::{Abi, Align, Size};
use rustc_middle::bug; use rustc_middle::bug;
use rustc_middle::mir::interpret::{Pointer, Scalar, alloc_range}; use rustc_middle::mir::interpret::{Pointer, Scalar, alloc_range};
use rustc_middle::mir::{self, ConstValue}; use rustc_middle::mir::{self, ConstValue};
use rustc_middle::ty::Ty; use rustc_middle::ty::Ty;
use rustc_middle::ty::layout::{LayoutOf, TyAndLayout}; use rustc_middle::ty::layout::{LayoutOf, TyAndLayout};
use rustc_target::abi::{self, Abi, Align, Size};
use tracing::debug; use tracing::debug;
use super::place::{PlaceRef, PlaceValue}; use super::place::{PlaceRef, PlaceValue};
@ -207,7 +208,7 @@ fn from_const_alloc<Bx: BuilderMethods<'a, 'tcx, Value = V>>(
match alloc.0.read_scalar( match alloc.0.read_scalar(
bx, bx,
alloc_range(start, size), alloc_range(start, size),
/*read_provenance*/ matches!(s.primitive(), abi::Pointer(_)), /*read_provenance*/ matches!(s.primitive(), abi::Primitive::Pointer(_)),
) { ) {
Ok(val) => bx.scalar_to_backend(val, s, ty), Ok(val) => bx.scalar_to_backend(val, s, ty),
Err(_) => bx.const_poison(ty), Err(_) => bx.const_poison(ty),

View File

@ -1,10 +1,10 @@
use rustc_abi::Primitive::{Int, Pointer};
use rustc_abi::{Align, FieldsShape, Size, TagEncoding, Variants};
use rustc_middle::mir::tcx::PlaceTy; use rustc_middle::mir::tcx::PlaceTy;
use rustc_middle::ty::layout::{HasTyCtxt, LayoutOf, TyAndLayout}; use rustc_middle::ty::layout::{HasTyCtxt, LayoutOf, TyAndLayout};
use rustc_middle::ty::{self, Ty}; use rustc_middle::ty::{self, Ty};
use rustc_middle::{bug, mir}; use rustc_middle::{bug, mir};
use rustc_target::abi::{ use rustc_target::abi::VariantIdx;
Align, FieldsShape, Int, Pointer, Size, TagEncoding, VariantIdx, Variants,
};
use tracing::{debug, instrument}; use tracing::{debug, instrument};
use super::operand::OperandValue; use super::operand::OperandValue;

View File

@ -6,6 +6,7 @@ edition = "2021"
[dependencies] [dependencies]
# tidy-alphabetical-start # tidy-alphabetical-start
either = "1" either = "1"
rustc_abi = { path = "../rustc_abi" }
rustc_apfloat = "0.2.0" rustc_apfloat = "0.2.0"
rustc_ast = { path = "../rustc_ast" } rustc_ast = { path = "../rustc_ast" }
rustc_attr = { path = "../rustc_attr" } rustc_attr = { path = "../rustc_attr" }

View File

@ -4,13 +4,14 @@
use std::assert_matches::assert_matches; use std::assert_matches::assert_matches;
use either::{Either, Left, Right}; use either::{Either, Left, Right};
use rustc_abi as abi;
use rustc_abi::{Abi, HasDataLayout, Size};
use rustc_hir::def::Namespace; use rustc_hir::def::Namespace;
use rustc_middle::mir::interpret::ScalarSizeMismatch; use rustc_middle::mir::interpret::ScalarSizeMismatch;
use rustc_middle::ty::layout::{HasParamEnv, HasTyCtxt, LayoutOf, TyAndLayout}; use rustc_middle::ty::layout::{HasParamEnv, HasTyCtxt, LayoutOf, TyAndLayout};
use rustc_middle::ty::print::{FmtPrinter, PrettyPrinter}; use rustc_middle::ty::print::{FmtPrinter, PrettyPrinter};
use rustc_middle::ty::{ConstInt, ScalarInt, Ty, TyCtxt}; use rustc_middle::ty::{ConstInt, ScalarInt, Ty, TyCtxt};
use rustc_middle::{bug, mir, span_bug, ty}; use rustc_middle::{bug, mir, span_bug, ty};
use rustc_target::abi::{self, Abi, HasDataLayout, Size};
use tracing::trace; use tracing::trace;
use super::{ use super::{
@ -117,7 +118,7 @@ pub fn assert_matches_abi(self, abi: Abi, msg: &str, cx: &impl HasDataLayout) {
match (self, abi) { match (self, abi) {
(Immediate::Scalar(scalar), Abi::Scalar(s)) => { (Immediate::Scalar(scalar), Abi::Scalar(s)) => {
assert_eq!(scalar.size(), s.size(cx), "{msg}: scalar value has wrong size"); assert_eq!(scalar.size(), s.size(cx), "{msg}: scalar value has wrong size");
if !matches!(s.primitive(), abi::Pointer(..)) { if !matches!(s.primitive(), abi::Primitive::Pointer(..)) {
// This is not a pointer, it should not carry provenance. // This is not a pointer, it should not carry provenance.
assert!( assert!(
matches!(scalar, Scalar::Int(..)), matches!(scalar, Scalar::Int(..)),
@ -131,7 +132,7 @@ pub fn assert_matches_abi(self, abi: Abi, msg: &str, cx: &impl HasDataLayout) {
a.size(cx), a.size(cx),
"{msg}: first component of scalar pair has wrong size" "{msg}: first component of scalar pair has wrong size"
); );
if !matches!(a.primitive(), abi::Pointer(..)) { if !matches!(a.primitive(), abi::Primitive::Pointer(..)) {
assert!( assert!(
matches!(a_val, Scalar::Int(..)), matches!(a_val, Scalar::Int(..)),
"{msg}: first component of scalar pair should be an integer, but has provenance" "{msg}: first component of scalar pair should be an integer, but has provenance"
@ -142,7 +143,7 @@ pub fn assert_matches_abi(self, abi: Abi, msg: &str, cx: &impl HasDataLayout) {
b.size(cx), b.size(cx),
"{msg}: second component of scalar pair has wrong size" "{msg}: second component of scalar pair has wrong size"
); );
if !matches!(b.primitive(), abi::Pointer(..)) { if !matches!(b.primitive(), abi::Primitive::Pointer(..)) {
assert!( assert!(
matches!(b_val, Scalar::Int(..)), matches!(b_val, Scalar::Int(..)),
"{msg}: second component of scalar pair should be an integer, but has provenance" "{msg}: second component of scalar pair should be an integer, but has provenance"
@ -572,7 +573,7 @@ fn read_immediate_from_mplace_raw(
assert_eq!(size, mplace.layout.size, "abi::Scalar size does not match layout size"); assert_eq!(size, mplace.layout.size, "abi::Scalar size does not match layout size");
let scalar = alloc.read_scalar( let scalar = alloc.read_scalar(
alloc_range(Size::ZERO, size), alloc_range(Size::ZERO, size),
/*read_provenance*/ matches!(s, abi::Pointer(_)), /*read_provenance*/ matches!(s, abi::Primitive::Pointer(_)),
)?; )?;
Some(ImmTy::from_scalar(scalar, mplace.layout)) Some(ImmTy::from_scalar(scalar, mplace.layout))
} }
@ -588,11 +589,11 @@ fn read_immediate_from_mplace_raw(
assert!(b_offset.bytes() > 0); // in `operand_field` we use the offset to tell apart the fields assert!(b_offset.bytes() > 0); // in `operand_field` we use the offset to tell apart the fields
let a_val = alloc.read_scalar( let a_val = alloc.read_scalar(
alloc_range(Size::ZERO, a_size), alloc_range(Size::ZERO, a_size),
/*read_provenance*/ matches!(a, abi::Pointer(_)), /*read_provenance*/ matches!(a, abi::Primitive::Pointer(_)),
)?; )?;
let b_val = alloc.read_scalar( let b_val = alloc.read_scalar(
alloc_range(b_offset, b_size), alloc_range(b_offset, b_size),
/*read_provenance*/ matches!(b, abi::Pointer(_)), /*read_provenance*/ matches!(b, abi::Primitive::Pointer(_)),
)?; )?;
Some(ImmTy::from_immediate(Immediate::ScalarPair(a_val, b_val), mplace.layout)) Some(ImmTy::from_immediate(Immediate::ScalarPair(a_val, b_val), mplace.layout))
} }

View File

@ -6,6 +6,7 @@ edition = "2021"
[dependencies] [dependencies]
# tidy-alphabetical-start # tidy-alphabetical-start
itertools = "0.12" itertools = "0.12"
rustc_abi = { path = "../rustc_abi" }
rustc_ast = { path = "../rustc_ast" } rustc_ast = { path = "../rustc_ast" }
rustc_ast_ir = { path = "../rustc_ast_ir" } rustc_ast_ir = { path = "../rustc_ast_ir" }
rustc_attr = { path = "../rustc_attr" } rustc_attr = { path = "../rustc_attr" }

View File

@ -1,4 +1,5 @@
use hir::HirId; use hir::HirId;
use rustc_abi::Primitive::Pointer;
use rustc_errors::codes::*; use rustc_errors::codes::*;
use rustc_errors::struct_span_code_err; use rustc_errors::struct_span_code_err;
use rustc_hir as hir; use rustc_hir as hir;
@ -6,7 +7,7 @@
use rustc_middle::bug; use rustc_middle::bug;
use rustc_middle::ty::layout::{LayoutError, SizeSkeleton}; use rustc_middle::ty::layout::{LayoutError, SizeSkeleton};
use rustc_middle::ty::{self, Ty, TyCtxt, TypeVisitableExt}; use rustc_middle::ty::{self, Ty, TyCtxt, TypeVisitableExt};
use rustc_target::abi::{Pointer, VariantIdx}; use rustc_target::abi::VariantIdx;
use tracing::trace; use tracing::trace;
use super::FnCtxt; use super::FnCtxt;

View File

@ -12,6 +12,7 @@ field-offset = "0.3.5"
gsgdt = "0.1.2" gsgdt = "0.1.2"
polonius-engine = "0.13.0" polonius-engine = "0.13.0"
rustc-rayon-core = { version = "0.5.0", optional = true } rustc-rayon-core = { version = "0.5.0", optional = true }
rustc_abi = { path = "../rustc_abi" }
rustc_apfloat = "0.2.0" rustc_apfloat = "0.2.0"
rustc_arena = { path = "../rustc_arena" } rustc_arena = { path = "../rustc_arena" }
rustc_ast = { path = "../rustc_ast" } rustc_ast = { path = "../rustc_ast" }

View File

@ -2,11 +2,15 @@
use std::ops::Bound; use std::ops::Bound;
use std::{cmp, fmt}; use std::{cmp, fmt};
use rustc_abi::Primitive::{self, Float, Int, Pointer};
use rustc_abi::{
Abi, AddressSpace, Align, FieldsShape, HasDataLayout, Integer, LayoutCalculator, LayoutS,
PointeeInfo, PointerKind, ReprOptions, Scalar, Size, TagEncoding, TargetDataLayout, Variants,
};
use rustc_error_messages::DiagMessage; use rustc_error_messages::DiagMessage;
use rustc_errors::{ use rustc_errors::{
Diag, DiagArgValue, DiagCtxtHandle, Diagnostic, EmissionGuarantee, IntoDiagArg, Level, Diag, DiagArgValue, DiagCtxtHandle, Diagnostic, EmissionGuarantee, IntoDiagArg, Level,
}; };
use rustc_hir as hir;
use rustc_hir::LangItem; use rustc_hir::LangItem;
use rustc_hir::def_id::DefId; use rustc_hir::def_id::DefId;
use rustc_index::IndexVec; use rustc_index::IndexVec;
@ -15,10 +19,11 @@
use rustc_span::symbol::{Symbol, sym}; use rustc_span::symbol::{Symbol, sym};
use rustc_span::{DUMMY_SP, ErrorGuaranteed, Span}; use rustc_span::{DUMMY_SP, ErrorGuaranteed, Span};
use rustc_target::abi::call::FnAbi; use rustc_target::abi::call::FnAbi;
use rustc_target::abi::*; use rustc_target::abi::{FieldIdx, TyAbiInterface, VariantIdx, call};
use rustc_target::spec::abi::Abi as SpecAbi; use rustc_target::spec::abi::Abi as SpecAbi;
use rustc_target::spec::{HasTargetSpec, HasWasmCAbiOpt, PanicStrategy, Target, WasmCAbi}; use rustc_target::spec::{HasTargetSpec, HasWasmCAbiOpt, PanicStrategy, Target, WasmCAbi};
use tracing::debug; use tracing::debug;
use {rustc_abi as abi, rustc_hir as hir};
use crate::error::UnsupportedFnAbi; use crate::error::UnsupportedFnAbi;
use crate::middle::codegen_fn_attrs::CodegenFnAttrFlags; use crate::middle::codegen_fn_attrs::CodegenFnAttrFlags;
@ -27,9 +32,10 @@
use crate::ty::{self, CoroutineArgsExt, Ty, TyCtxt, TypeVisitableExt}; use crate::ty::{self, CoroutineArgsExt, Ty, TyCtxt, TypeVisitableExt};
#[extension(pub trait IntegerExt)] #[extension(pub trait IntegerExt)]
impl Integer { impl abi::Integer {
#[inline] #[inline]
fn to_ty<'tcx>(&self, tcx: TyCtxt<'tcx>, signed: bool) -> Ty<'tcx> { fn to_ty<'tcx>(&self, tcx: TyCtxt<'tcx>, signed: bool) -> Ty<'tcx> {
use abi::Integer::{I8, I16, I32, I64, I128};
match (*self, signed) { match (*self, signed) {
(I8, false) => tcx.types.u8, (I8, false) => tcx.types.u8,
(I16, false) => tcx.types.u16, (I16, false) => tcx.types.u16,
@ -44,7 +50,8 @@ fn to_ty<'tcx>(&self, tcx: TyCtxt<'tcx>, signed: bool) -> Ty<'tcx> {
} }
} }
fn from_int_ty<C: HasDataLayout>(cx: &C, ity: ty::IntTy) -> Integer { fn from_int_ty<C: HasDataLayout>(cx: &C, ity: ty::IntTy) -> abi::Integer {
use abi::Integer::{I8, I16, I32, I64, I128};
match ity { match ity {
ty::IntTy::I8 => I8, ty::IntTy::I8 => I8,
ty::IntTy::I16 => I16, ty::IntTy::I16 => I16,
@ -54,7 +61,8 @@ fn from_int_ty<C: HasDataLayout>(cx: &C, ity: ty::IntTy) -> Integer {
ty::IntTy::Isize => cx.data_layout().ptr_sized_integer(), ty::IntTy::Isize => cx.data_layout().ptr_sized_integer(),
} }
} }
fn from_uint_ty<C: HasDataLayout>(cx: &C, ity: ty::UintTy) -> Integer { fn from_uint_ty<C: HasDataLayout>(cx: &C, ity: ty::UintTy) -> abi::Integer {
use abi::Integer::{I8, I16, I32, I64, I128};
match ity { match ity {
ty::UintTy::U8 => I8, ty::UintTy::U8 => I8,
ty::UintTy::U16 => I16, ty::UintTy::U16 => I16,
@ -102,7 +110,7 @@ fn repr_discr<'tcx>(
tcx.data_layout().c_enum_min_size tcx.data_layout().c_enum_min_size
} else { } else {
// repr(Rust) enums try to be as small as possible // repr(Rust) enums try to be as small as possible
I8 Integer::I8
}; };
// If there are no negative values, we can use the unsigned fit. // If there are no negative values, we can use the unsigned fit.
@ -115,9 +123,10 @@ fn repr_discr<'tcx>(
} }
#[extension(pub trait FloatExt)] #[extension(pub trait FloatExt)]
impl Float { impl abi::Float {
#[inline] #[inline]
fn to_ty<'tcx>(&self, tcx: TyCtxt<'tcx>) -> Ty<'tcx> { fn to_ty<'tcx>(&self, tcx: TyCtxt<'tcx>) -> Ty<'tcx> {
use abi::Float::*;
match *self { match *self {
F16 => tcx.types.f16, F16 => tcx.types.f16,
F32 => tcx.types.f32, F32 => tcx.types.f32,
@ -127,6 +136,7 @@ fn to_ty<'tcx>(&self, tcx: TyCtxt<'tcx>) -> Ty<'tcx> {
} }
fn from_float_ty(fty: ty::FloatTy) -> Self { fn from_float_ty(fty: ty::FloatTy) -> Self {
use abi::Float::*;
match fty { match fty {
ty::FloatTy::F16 => F16, ty::FloatTy::F16 => F16,
ty::FloatTy::F32 => F32, ty::FloatTy::F32 => F32,

View File

@ -1,9 +1,8 @@
use std::fmt; use std::fmt;
use std::ops::Deref; use std::ops::Deref;
pub use Float::*; use Float::*;
pub use Integer::*; use Primitive::*;
pub use Primitive::*;
use rustc_data_structures::intern::Interned; use rustc_data_structures::intern::Interned;
use rustc_macros::HashStable_Generic; use rustc_macros::HashStable_Generic;

View File

@ -6,6 +6,7 @@ edition = "2021"
[dependencies] [dependencies]
# tidy-alphabetical-start # tidy-alphabetical-start
itertools = "0.12" itertools = "0.12"
rustc_abi = { path = "../rustc_abi" }
rustc_ast_ir = { path = "../rustc_ast_ir" } rustc_ast_ir = { path = "../rustc_ast_ir" }
rustc_data_structures = { path = "../rustc_data_structures" } rustc_data_structures = { path = "../rustc_data_structures" }
rustc_errors = { path = "../rustc_errors" } rustc_errors = { path = "../rustc_errors" }

View File

@ -1,5 +1,8 @@
use std::iter; use std::iter;
use rustc_abi::Float::*;
use rustc_abi::Primitive::{Float, Pointer};
use rustc_abi::{Abi, AddressSpace, PointerKind, Scalar, Size};
use rustc_hir as hir; use rustc_hir as hir;
use rustc_hir::lang_items::LangItem; use rustc_hir::lang_items::LangItem;
use rustc_middle::bug; use rustc_middle::bug;
@ -14,7 +17,6 @@
ArgAbi, ArgAttribute, ArgAttributes, ArgExtension, Conv, FnAbi, PassMode, Reg, RegKind, ArgAbi, ArgAttribute, ArgAttributes, ArgExtension, Conv, FnAbi, PassMode, Reg, RegKind,
RiscvInterruptKind, RiscvInterruptKind,
}; };
use rustc_target::abi::*;
use rustc_target::spec::abi::Abi as SpecAbi; use rustc_target::spec::abi::Abi as SpecAbi;
use tracing::debug; use tracing::debug;

View File

@ -2,7 +2,12 @@
use std::iter; use std::iter;
use hir::def_id::DefId; use hir::def_id::DefId;
use rustc_hir as hir; use rustc_abi::Integer::{I8, I32};
use rustc_abi::Primitive::{self, Float, Int, Pointer};
use rustc_abi::{
Abi, AbiAndPrefAlign, AddressSpace, Align, FieldsShape, HasDataLayout, LayoutCalculatorError,
LayoutS, Niche, ReprOptions, Scalar, Size, StructKind, TagEncoding, Variants, WrappingRange,
};
use rustc_index::bit_set::BitSet; use rustc_index::bit_set::BitSet;
use rustc_index::{IndexSlice, IndexVec}; use rustc_index::{IndexSlice, IndexVec};
use rustc_middle::bug; use rustc_middle::bug;
@ -18,8 +23,9 @@
use rustc_session::{DataTypeKind, FieldInfo, FieldKind, SizeKind, VariantInfo}; use rustc_session::{DataTypeKind, FieldInfo, FieldKind, SizeKind, VariantInfo};
use rustc_span::sym; use rustc_span::sym;
use rustc_span::symbol::Symbol; use rustc_span::symbol::Symbol;
use rustc_target::abi::*; use rustc_target::abi::{FIRST_VARIANT, FieldIdx, Layout, VariantIdx};
use tracing::{debug, instrument, trace}; use tracing::{debug, instrument, trace};
use {rustc_abi as abi, rustc_hir as hir};
use crate::errors::{ use crate::errors::{
MultipleArrayFieldsSimdType, NonPrimitiveSimdType, OversizedSimdType, ZeroLengthSimdType, MultipleArrayFieldsSimdType, NonPrimitiveSimdType, OversizedSimdType, ZeroLengthSimdType,
@ -202,9 +208,9 @@ fn layout_of_uncached<'tcx>(
value: Int(I32, false), value: Int(I32, false),
valid_range: WrappingRange { start: 0, end: 0x10FFFF }, valid_range: WrappingRange { start: 0, end: 0x10FFFF },
})), })),
ty::Int(ity) => scalar(Int(Integer::from_int_ty(dl, ity), true)), ty::Int(ity) => scalar(Int(abi::Integer::from_int_ty(dl, ity), true)),
ty::Uint(ity) => scalar(Int(Integer::from_uint_ty(dl, ity), false)), ty::Uint(ity) => scalar(Int(abi::Integer::from_uint_ty(dl, ity), false)),
ty::Float(fty) => scalar(Float(Float::from_float_ty(fty))), ty::Float(fty) => scalar(Float(abi::Float::from_float_ty(fty))),
ty::FnPtr(..) => { ty::FnPtr(..) => {
let mut ptr = scalar_unit(Pointer(dl.instruction_address_space)); let mut ptr = scalar_unit(Pointer(dl.instruction_address_space));
ptr.valid_range_mut().start = 1; ptr.valid_range_mut().start = 1;
@ -563,7 +569,7 @@ fn layout_of_uncached<'tcx>(
} }
let get_discriminant_type = let get_discriminant_type =
|min, max| Integer::repr_discr(tcx, ty, &def.repr(), min, max); |min, max| abi::Integer::repr_discr(tcx, ty, &def.repr(), min, max);
let discriminants_iter = || { let discriminants_iter = || {
def.is_enum() def.is_enum()
@ -816,7 +822,7 @@ fn coroutine_layout<'tcx>(
// `info.variant_fields` already accounts for the reserved variants, so no need to add them. // `info.variant_fields` already accounts for the reserved variants, so no need to add them.
let max_discr = (info.variant_fields.len() - 1) as u128; let max_discr = (info.variant_fields.len() - 1) as u128;
let discr_int = Integer::fit_unsigned(max_discr); let discr_int = abi::Integer::fit_unsigned(max_discr);
let tag = Scalar::Initialized { let tag = Scalar::Initialized {
value: Primitive::Int(discr_int, /* signed = */ false), value: Primitive::Int(discr_int, /* signed = */ false),
valid_range: WrappingRange { start: 0, end: max_discr }, valid_range: WrappingRange { start: 0, end: max_discr },