]> git.lizzy.rs Git - rust.git/blobdiff - src/abi/mod.rs
Rustup to rustc 1.40.0-nightly (9e346646e 2019-11-08)
[rust.git] / src / abi / mod.rs
index 0bb422f8cc089fe7f0fc2283ba6d55abde5c12e0..881174646afe7bbd32c025ec650debee2fd020b8 100644 (file)
@@ -26,20 +26,20 @@ fn clif_sig_from_fn_sig<'tcx>(
         abi => abi,
     };
     let (call_conv, inputs, output): (CallConv, Vec<Ty>, Ty) = match abi {
-        Abi::Rust => (CallConv::SystemV, sig.inputs().to_vec(), sig.output()),
-        Abi::C => (CallConv::SystemV, sig.inputs().to_vec(), sig.output()),
+        Abi::Rust => (crate::default_call_conv(tcx.sess), sig.inputs().to_vec(), sig.output()),
+        Abi::C => (crate::default_call_conv(tcx.sess), sig.inputs().to_vec(), sig.output()),
         Abi::RustCall => {
             assert_eq!(sig.inputs().len(), 2);
-            let extra_args = match sig.inputs().last().unwrap().sty {
+            let extra_args = match sig.inputs().last().unwrap().kind {
                 ty::Tuple(ref tupled_arguments) => tupled_arguments,
                 _ => bug!("argument to function with \"rust-call\" ABI is not a tuple"),
             };
             let mut inputs: Vec<Ty> = vec![sig.inputs()[0]];
             inputs.extend(extra_args.types());
-            (CallConv::SystemV, inputs, sig.output())
+            (crate::default_call_conv(tcx.sess), inputs, sig.output())
         }
         Abi::System => unreachable!(),
-        Abi::RustIntrinsic => (CallConv::SystemV, sig.inputs().to_vec(), sig.output()),
+        Abi::RustIntrinsic => (crate::default_call_conv(tcx.sess), sig.inputs().to_vec(), sig.output()),
         _ => unimplemented!("unsupported abi {:?}", sig.abi),
     };
 
@@ -103,7 +103,7 @@ pub fn get_function_name_and_sig<'tcx>(
         unimpl!("Variadic function definitions are not yet supported");
     }
     let sig = clif_sig_from_fn_sig(tcx, fn_sig, false);
-    (tcx.symbol_name(inst).as_str().to_string(), sig)
+    (tcx.symbol_name(inst).name.as_str().to_string(), sig)
 }
 
 /// Instance must be monomorphized
@@ -142,7 +142,7 @@ fn lib_call(
         let sig = Signature {
             params: input_tys.iter().cloned().map(AbiParam::new).collect(),
             returns: output_tys.iter().cloned().map(AbiParam::new).collect(),
-            call_conv: CallConv::SystemV,
+            call_conv: crate::default_call_conv(self.tcx.sess),
         };
         let func_id = self
             .module
@@ -177,7 +177,7 @@ pub fn easy_call(
             })
             .unzip();
         let return_layout = self.layout_of(return_ty);
-        let return_tys = if let ty::Tuple(tup) = return_ty.sty {
+        let return_tys = if let ty::Tuple(tup) = return_ty.kind {
             tup.types().map(|ty| self.clif_type(ty).unwrap()).collect()
         } else {
             vec![self.clif_type(return_ty).unwrap()]
@@ -255,7 +255,7 @@ enum ArgKind<'tcx> {
                 // to reconstruct it into a tuple local variable, from multiple
                 // individual function arguments.
 
-                let tupled_arg_tys = match arg_ty.sty {
+                let tupled_arg_tys = match arg_ty.kind {
                     ty::Tuple(ref tys) => tys,
                     _ => bug!("spread argument isn't a tuple?! but {:?}", arg_ty),
                 };
@@ -282,10 +282,7 @@ enum ArgKind<'tcx> {
     for (local, arg_kind, ty) in func_params {
         let layout = fx.layout_of(ty);
 
-        let is_ssa = !ssa_analyzed
-            .get(&local)
-            .unwrap()
-            .contains(crate::analyze::Flags::NOT_SSA);
+        let is_ssa = *ssa_analyzed.get(&local).unwrap() == crate::analyze::SsaKind::Ssa;
 
         match arg_kind {
             ArgKind::Normal(Some(val)) => {
@@ -339,10 +336,7 @@ enum ArgKind<'tcx> {
         let ty = fx.mir.local_decls[local].ty;
         let layout = fx.layout_of(ty);
 
-        let is_ssa = !ssa_analyzed
-            .get(&local)
-            .unwrap()
-            .contains(crate::analyze::Flags::NOT_SSA);
+        let is_ssa = *ssa_analyzed.get(&local).unwrap() == crate::analyze::SsaKind::Ssa;
 
         local_place(fx, local, layout, is_ssa);
     }
@@ -357,6 +351,7 @@ pub fn codegen_terminator_call<'tcx>(
     func: &Operand<'tcx>,
     args: &[Operand<'tcx>],
     destination: &Option<(Place<'tcx>, BasicBlock)>,
+    span: Span,
 ) {
     let fn_ty = fx.monomorphize(&func.ty(fx.mir, fx.tcx));
     let sig = fx
@@ -367,14 +362,14 @@ pub fn codegen_terminator_call<'tcx>(
         .as_ref()
         .map(|&(ref place, bb)| (trans_place(fx, place), bb));
 
-    if let ty::FnDef(def_id, substs) = fn_ty.sty {
+    if let ty::FnDef(def_id, substs) = fn_ty.kind {
         let instance =
             ty::Instance::resolve(fx.tcx, ty::ParamEnv::reveal_all(), def_id, substs).unwrap();
 
-        if fx.tcx.symbol_name(instance).as_str().starts_with("llvm.") {
+        if fx.tcx.symbol_name(instance).name.as_str().starts_with("llvm.") {
             crate::llvm_intrinsics::codegen_llvm_intrinsic_call(
                 fx,
-                &fx.tcx.symbol_name(instance).as_str(),
+                &fx.tcx.symbol_name(instance).name.as_str(),
                 substs,
                 args,
                 destination,
@@ -384,7 +379,7 @@ pub fn codegen_terminator_call<'tcx>(
 
         match instance.def {
             InstanceDef::Intrinsic(_) => {
-                crate::intrinsics::codegen_intrinsic_call(fx, def_id, substs, args, destination);
+                crate::intrinsics::codegen_intrinsic_call(fx, instance, args, destination, span);
                 return;
             }
             InstanceDef::DropGlue(_, None) => {
@@ -405,7 +400,7 @@ pub fn codegen_terminator_call<'tcx>(
         let pack_arg = trans_operand(fx, &args[1]);
         let mut args = Vec::new();
         args.push(self_arg);
-        match pack_arg.layout().ty.sty {
+        match pack_arg.layout().ty.kind {
             ty::Tuple(ref tupled_arguments) => {
                 for (i, _) in tupled_arguments.iter().enumerate() {
                     args.push(pack_arg.value_field(fx, mir::Field::new(i)));
@@ -447,7 +442,7 @@ fn codegen_call_inner<'tcx>(
         .tcx
         .normalize_erasing_late_bound_regions(ParamEnv::reveal_all(), &fn_ty.fn_sig(fx.tcx));
 
-    let instance = match fn_ty.sty {
+    let instance = match fn_ty.kind {
         ty::FnDef(def_id, substs) => {
             Some(Instance::resolve(fx.tcx, ParamEnv::reveal_all(), def_id, substs).unwrap())
         }
@@ -562,7 +557,7 @@ pub fn codegen_drop<'tcx>(fx: &mut FunctionCx<'_, 'tcx, impl Backend>, drop_plac
         // we don't actually need to drop anything
     } else {
         let drop_fn_ty = drop_fn.ty(fx.tcx);
-        match ty.sty {
+        match ty.kind {
             ty::Dynamic(..) => {
                 let (ptr, vtable) = drop_place.to_addr_maybe_unsized(fx);
                 let drop_fn = crate::vtable::drop_fn_of_obj(fx, vtable.unwrap());