@@ -21,7 +21,7 @@ use rustc::middle::lang_items::StartFnLangItem;
21
21
use rustc:: middle:: weak_lang_items;
22
22
use rustc:: mir:: mono:: { Stats , CodegenUnitNameBuilder } ;
23
23
use rustc:: ty:: { self , Ty , TyCtxt } ;
24
- use rustc:: ty:: layout:: { self , Align , TyLayout , LayoutOf , VariantIdx , HasTyCtxt } ;
24
+ use rustc:: ty:: layout:: { self , Align , TyLayout , VariantIdx , HasTyCtxt } ;
25
25
use rustc:: ty:: query:: Providers ;
26
26
use rustc:: middle:: cstore:: { self , LinkagePreference } ;
27
27
use rustc:: util:: common:: { time, print_time_passes_entry} ;
@@ -162,16 +162,16 @@ pub fn compare_simd_types<'a, 'tcx: 'a, Bx: BuilderMethods<'a, 'tcx>>(
162
162
/// The `old_info` argument is a bit funny. It is intended for use
163
163
/// in an upcast, where the new vtable for an object will be derived
164
164
/// from the old one.
165
- pub fn unsized_info < ' tcx , Cx : CodegenMethods < ' tcx > > (
166
- cx : & Cx ,
165
+ pub fn unsized_info < ' a , ' tcx : ' a , Bx : BuilderMethods < ' a , ' tcx > > (
166
+ bx : & Bx ,
167
167
source : Ty < ' tcx > ,
168
168
target : Ty < ' tcx > ,
169
- old_info : Option < Cx :: Value > ,
170
- ) -> Cx :: Value {
171
- let ( source, target) = cx . tcx ( ) . struct_lockstep_tails ( source, target) ;
169
+ old_info : Option < Bx :: Value > ,
170
+ ) -> Bx :: Value {
171
+ let ( source, target) = bx . tcx ( ) . struct_lockstep_tails ( source, target) ;
172
172
match ( & source. sty , & target. sty ) {
173
173
( & ty:: Array ( _, len) , & ty:: Slice ( _) ) => {
174
- cx . const_usize ( len. unwrap_usize ( cx . tcx ( ) ) )
174
+ bx . const_usize ( len. unwrap_usize ( bx . tcx ( ) ) )
175
175
}
176
176
( & ty:: Dynamic ( ..) , & ty:: Dynamic ( ..) ) => {
177
177
// For now, upcasts are limited to changes in marker
@@ -180,10 +180,10 @@ pub fn unsized_info<'tcx, Cx: CodegenMethods<'tcx>>(
180
180
old_info. expect ( "unsized_info: missing old info for trait upcast" )
181
181
}
182
182
( _, & ty:: Dynamic ( ref data, ..) ) => {
183
- let vtable_ptr = cx . layout_of ( cx . tcx ( ) . mk_mut_ptr ( target) )
184
- . field ( cx , FAT_PTR_EXTRA ) ;
185
- cx . const_ptrcast ( meth:: get_vtable ( cx , source, data. principal ( ) ) ,
186
- cx . backend_type ( vtable_ptr) )
183
+ let vtable_ptr = bx . layout_of ( bx . tcx ( ) . mk_mut_ptr ( target) )
184
+ . field ( bx , FAT_PTR_EXTRA ) ;
185
+ bx . const_ptrcast ( meth:: get_vtable ( bx . cx ( ) , source, data. principal ( ) ) ,
186
+ bx . backend_type ( vtable_ptr) )
187
187
}
188
188
_ => bug ! ( "unsized_info: invalid unsizing {:?} -> {:?}" ,
189
189
source,
@@ -206,40 +206,40 @@ pub fn unsize_thin_ptr<'a, 'tcx: 'a, Bx: BuilderMethods<'a, 'tcx>>(
206
206
& ty:: RawPtr ( ty:: TypeAndMut { ty : b, .. } ) ) |
207
207
( & ty:: RawPtr ( ty:: TypeAndMut { ty : a, .. } ) ,
208
208
& ty:: RawPtr ( ty:: TypeAndMut { ty : b, .. } ) ) => {
209
- assert ! ( bx. cx ( ) . type_is_sized( a) ) ;
210
- let ptr_ty = bx. cx ( ) . type_ptr_to ( bx. cx ( ) . backend_type ( bx. cx ( ) . layout_of ( b) ) ) ;
211
- ( bx. pointercast ( src, ptr_ty) , unsized_info ( bx. cx ( ) , a, b, None ) )
209
+ assert ! ( bx. type_is_sized( a) ) ;
210
+ let ptr_ty = bx. type_ptr_to ( bx. backend_type ( bx. layout_of ( b) ) ) ;
211
+ ( bx. pointercast ( src, ptr_ty) , unsized_info ( bx, a, b, None ) )
212
212
}
213
213
( & ty:: Adt ( def_a, _) , & ty:: Adt ( def_b, _) ) if def_a. is_box ( ) && def_b. is_box ( ) => {
214
214
let ( a, b) = ( src_ty. boxed_ty ( ) , dst_ty. boxed_ty ( ) ) ;
215
- assert ! ( bx. cx ( ) . type_is_sized( a) ) ;
216
- let ptr_ty = bx. cx ( ) . type_ptr_to ( bx. cx ( ) . backend_type ( bx. cx ( ) . layout_of ( b) ) ) ;
217
- ( bx. pointercast ( src, ptr_ty) , unsized_info ( bx. cx ( ) , a, b, None ) )
215
+ assert ! ( bx. type_is_sized( a) ) ;
216
+ let ptr_ty = bx. type_ptr_to ( bx. backend_type ( bx. layout_of ( b) ) ) ;
217
+ ( bx. pointercast ( src, ptr_ty) , unsized_info ( bx, a, b, None ) )
218
218
}
219
219
( & ty:: Adt ( def_a, _) , & ty:: Adt ( def_b, _) ) => {
220
220
assert_eq ! ( def_a, def_b) ;
221
221
222
- let src_layout = bx. cx ( ) . layout_of ( src_ty) ;
223
- let dst_layout = bx. cx ( ) . layout_of ( dst_ty) ;
222
+ let src_layout = bx. layout_of ( src_ty) ;
223
+ let dst_layout = bx. layout_of ( dst_ty) ;
224
224
let mut result = None ;
225
225
for i in 0 ..src_layout. fields . count ( ) {
226
- let src_f = src_layout. field ( bx. cx ( ) , i) ;
226
+ let src_f = src_layout. field ( bx, i) ;
227
227
assert_eq ! ( src_layout. fields. offset( i) . bytes( ) , 0 ) ;
228
228
assert_eq ! ( dst_layout. fields. offset( i) . bytes( ) , 0 ) ;
229
229
if src_f. is_zst ( ) {
230
230
continue ;
231
231
}
232
232
assert_eq ! ( src_layout. size, src_f. size) ;
233
233
234
- let dst_f = dst_layout. field ( bx. cx ( ) , i) ;
234
+ let dst_f = dst_layout. field ( bx, i) ;
235
235
assert_ne ! ( src_f. ty, dst_f. ty) ;
236
236
assert_eq ! ( result, None ) ;
237
237
result = Some ( unsize_thin_ptr ( bx, src, src_f. ty , dst_f. ty ) ) ;
238
238
}
239
239
let ( lldata, llextra) = result. unwrap ( ) ;
240
240
// HACK(eddyb) have to bitcast pointers until LLVM removes pointee types.
241
- ( bx. bitcast ( lldata, bx. cx ( ) . scalar_pair_element_backend_type ( dst_layout, 0 , true ) ) ,
242
- bx. bitcast ( llextra, bx. cx ( ) . scalar_pair_element_backend_type ( dst_layout, 1 , true ) ) )
241
+ ( bx. bitcast ( lldata, bx. scalar_pair_element_backend_type ( dst_layout, 0 , true ) ) ,
242
+ bx. bitcast ( llextra, bx. scalar_pair_element_backend_type ( dst_layout, 1 , true ) ) )
243
243
}
244
244
_ => bug ! ( "unsize_thin_ptr: called on bad types" ) ,
245
245
}
@@ -261,8 +261,8 @@ pub fn coerce_unsized_into<'a, 'tcx: 'a, Bx: BuilderMethods<'a, 'tcx>>(
261
261
// i.e., &'a fmt::Debug+Send => &'a fmt::Debug
262
262
// So we need to pointercast the base to ensure
263
263
// the types match up.
264
- let thin_ptr = dst. layout . field ( bx. cx ( ) , FAT_PTR_ADDR ) ;
265
- ( bx. pointercast ( base, bx. cx ( ) . backend_type ( thin_ptr) ) , info)
264
+ let thin_ptr = dst. layout . field ( bx, FAT_PTR_ADDR ) ;
265
+ ( bx. pointercast ( base, bx. backend_type ( thin_ptr) ) , info)
266
266
}
267
267
OperandValue :: Immediate ( base) => {
268
268
unsize_thin_ptr ( bx, base, src_ty, dst_ty)
@@ -323,16 +323,16 @@ fn cast_shift_rhs<'a, 'tcx: 'a, Bx: BuilderMethods<'a, 'tcx>>(
323
323
) -> Bx :: Value {
324
324
// Shifts may have any size int on the rhs
325
325
if op. is_shift ( ) {
326
- let mut rhs_llty = bx. cx ( ) . val_ty ( rhs) ;
327
- let mut lhs_llty = bx. cx ( ) . val_ty ( lhs) ;
328
- if bx. cx ( ) . type_kind ( rhs_llty) == TypeKind :: Vector {
329
- rhs_llty = bx. cx ( ) . element_type ( rhs_llty)
326
+ let mut rhs_llty = bx. val_ty ( rhs) ;
327
+ let mut lhs_llty = bx. val_ty ( lhs) ;
328
+ if bx. type_kind ( rhs_llty) == TypeKind :: Vector {
329
+ rhs_llty = bx. element_type ( rhs_llty)
330
330
}
331
- if bx. cx ( ) . type_kind ( lhs_llty) == TypeKind :: Vector {
332
- lhs_llty = bx. cx ( ) . element_type ( lhs_llty)
331
+ if bx. type_kind ( lhs_llty) == TypeKind :: Vector {
332
+ lhs_llty = bx. element_type ( lhs_llty)
333
333
}
334
- let rhs_sz = bx. cx ( ) . int_width ( rhs_llty) ;
335
- let lhs_sz = bx. cx ( ) . int_width ( lhs_llty) ;
334
+ let rhs_sz = bx. int_width ( rhs_llty) ;
335
+ let lhs_sz = bx. int_width ( lhs_llty) ;
336
336
if lhs_sz < rhs_sz {
337
337
bx. trunc ( rhs, lhs_llty)
338
338
} else if lhs_sz > rhs_sz {
@@ -360,8 +360,8 @@ pub fn from_immediate<'a, 'tcx: 'a, Bx: BuilderMethods<'a, 'tcx>>(
360
360
bx : & mut Bx ,
361
361
val : Bx :: Value
362
362
) -> Bx :: Value {
363
- if bx. cx ( ) . val_ty ( val) == bx. cx ( ) . type_i1 ( ) {
364
- bx. zext ( val, bx. cx ( ) . type_i8 ( ) )
363
+ if bx. val_ty ( val) == bx. type_i1 ( ) {
364
+ bx. zext ( val, bx. type_i8 ( ) )
365
365
} else {
366
366
val
367
367
}
@@ -384,7 +384,7 @@ pub fn to_immediate_scalar<'a, 'tcx: 'a, Bx: BuilderMethods<'a, 'tcx>>(
384
384
scalar : & layout:: Scalar ,
385
385
) -> Bx :: Value {
386
386
if scalar. is_bool ( ) {
387
- return bx. trunc ( val, bx. cx ( ) . type_i1 ( ) ) ;
387
+ return bx. trunc ( val, bx. type_i1 ( ) ) ;
388
388
}
389
389
val
390
390
}
@@ -403,7 +403,7 @@ pub fn memcpy_ty<'a, 'tcx: 'a, Bx: BuilderMethods<'a, 'tcx>>(
403
403
return ;
404
404
}
405
405
406
- bx. memcpy ( dst, dst_align, src, src_align, bx. cx ( ) . const_usize ( size) , flags) ;
406
+ bx. memcpy ( dst, dst_align, src, src_align, bx. const_usize ( size) , flags) ;
407
407
}
408
408
409
409
pub fn codegen_instance < ' a , ' tcx : ' a , Bx : BuilderMethods < ' a , ' tcx > > (
0 commit comments