@@ -3,7 +3,7 @@ use std::fmt::Write;
3
3
use gccjit:: { Struct , Type } ;
4
4
use rustc_abi as abi;
5
5
use rustc_abi:: Primitive :: * ;
6
- use rustc_abi:: { Abi , FieldsShape , Integer , PointeeInfo , Size , Variants } ;
6
+ use rustc_abi:: { BackendRepr , FieldsShape , Integer , PointeeInfo , Size , Variants } ;
7
7
use rustc_codegen_ssa:: traits:: {
8
8
BaseTypeCodegenMethods , DerivedTypeCodegenMethods , LayoutTypeCodegenMethods ,
9
9
} ;
@@ -60,9 +60,9 @@ fn uncached_gcc_type<'gcc, 'tcx>(
60
60
layout : TyAndLayout < ' tcx > ,
61
61
defer : & mut Option < ( Struct < ' gcc > , TyAndLayout < ' tcx > ) > ,
62
62
) -> Type < ' gcc > {
63
- match layout. abi {
64
- Abi :: Scalar ( _) => bug ! ( "handled elsewhere" ) ,
65
- Abi :: Vector { ref element, count } => {
63
+ match layout. backend_repr {
64
+ BackendRepr :: Scalar ( _) => bug ! ( "handled elsewhere" ) ,
65
+ BackendRepr :: Vector { ref element, count } => {
66
66
let element = layout. scalar_gcc_type_at ( cx, element, Size :: ZERO ) ;
67
67
let element =
68
68
// NOTE: gcc doesn't allow pointer types in vectors.
@@ -74,7 +74,7 @@ fn uncached_gcc_type<'gcc, 'tcx>(
74
74
} ;
75
75
return cx. context . new_vector_type ( element, count) ;
76
76
}
77
- Abi :: ScalarPair ( ..) => {
77
+ BackendRepr :: ScalarPair ( ..) => {
78
78
return cx. type_struct (
79
79
& [
80
80
layout. scalar_pair_element_gcc_type ( cx, 0 ) ,
@@ -83,7 +83,7 @@ fn uncached_gcc_type<'gcc, 'tcx>(
83
83
false ,
84
84
) ;
85
85
}
86
- Abi :: Uninhabited | Abi :: Aggregate { .. } => { }
86
+ BackendRepr :: Uninhabited | BackendRepr :: Memory { .. } => { }
87
87
}
88
88
89
89
let name = match * layout. ty . kind ( ) {
@@ -176,16 +176,21 @@ pub trait LayoutGccExt<'tcx> {
176
176
177
177
impl < ' tcx > LayoutGccExt < ' tcx > for TyAndLayout < ' tcx > {
178
178
fn is_gcc_immediate ( & self ) -> bool {
179
- match self . abi {
180
- Abi :: Scalar ( _) | Abi :: Vector { .. } => true ,
181
- Abi :: ScalarPair ( ..) | Abi :: Uninhabited | Abi :: Aggregate { .. } => false ,
179
+ match self . backend_repr {
180
+ BackendRepr :: Scalar ( _) | BackendRepr :: Vector { .. } => true ,
181
+ BackendRepr :: ScalarPair ( ..) | BackendRepr :: Uninhabited | BackendRepr :: Memory { .. } => {
182
+ false
183
+ }
182
184
}
183
185
}
184
186
185
187
fn is_gcc_scalar_pair ( & self ) -> bool {
186
- match self . abi {
187
- Abi :: ScalarPair ( ..) => true ,
188
- Abi :: Uninhabited | Abi :: Scalar ( _) | Abi :: Vector { .. } | Abi :: Aggregate { .. } => false ,
188
+ match self . backend_repr {
189
+ BackendRepr :: ScalarPair ( ..) => true ,
190
+ BackendRepr :: Uninhabited
191
+ | BackendRepr :: Scalar ( _)
192
+ | BackendRepr :: Vector { .. }
193
+ | BackendRepr :: Memory { .. } => false ,
189
194
}
190
195
}
191
196
@@ -205,7 +210,7 @@ impl<'tcx> LayoutGccExt<'tcx> for TyAndLayout<'tcx> {
205
210
// This must produce the same result for `repr(transparent)` wrappers as for the inner type!
206
211
// In other words, this should generally not look at the type at all, but only at the
207
212
// layout.
208
- if let Abi :: Scalar ( ref scalar) = self . abi {
213
+ if let BackendRepr :: Scalar ( ref scalar) = self . backend_repr {
209
214
// Use a different cache for scalars because pointers to DSTs
210
215
// can be either wide or thin (data pointers of wide pointers).
211
216
if let Some ( & ty) = cx. scalar_types . borrow ( ) . get ( & self . ty ) {
@@ -261,7 +266,7 @@ impl<'tcx> LayoutGccExt<'tcx> for TyAndLayout<'tcx> {
261
266
}
262
267
263
268
fn immediate_gcc_type < ' gcc > ( & self , cx : & CodegenCx < ' gcc , ' tcx > ) -> Type < ' gcc > {
264
- if let Abi :: Scalar ( ref scalar) = self . abi {
269
+ if let BackendRepr :: Scalar ( ref scalar) = self . backend_repr {
265
270
if scalar. is_bool ( ) {
266
271
return cx. type_i1 ( ) ;
267
272
}
@@ -299,8 +304,8 @@ impl<'tcx> LayoutGccExt<'tcx> for TyAndLayout<'tcx> {
299
304
// This must produce the same result for `repr(transparent)` wrappers as for the inner type!
300
305
// In other words, this should generally not look at the type at all, but only at the
301
306
// layout.
302
- let ( a, b) = match self . abi {
303
- Abi :: ScalarPair ( ref a, ref b) => ( a, b) ,
307
+ let ( a, b) = match self . backend_repr {
308
+ BackendRepr :: ScalarPair ( ref a, ref b) => ( a, b) ,
304
309
_ => bug ! ( "TyAndLayout::scalar_pair_element_llty({:?}): not applicable" , self ) ,
305
310
} ;
306
311
let scalar = [ a, b] [ index] ;
0 commit comments