use crate::attributes;
use libc::c_uint;
+use rustc::bug;
use rustc::ty::TyCtxt;
use syntax::expand::allocator::{AllocatorKind, AllocatorTy, ALLOCATOR_METHODS};
-use rustc::bug;
-use crate::ModuleLlvm;
use crate::llvm::{self, False, True};
+use crate::ModuleLlvm;
pub(crate) unsafe fn codegen(tcx: TyCtxt<'_>, mods: &mut ModuleLlvm, kind: AllocatorKind) {
let llcx = &*mods.llcx;
AllocatorTy::Ptr => args.push(i8p),
AllocatorTy::Usize => args.push(usize),
- AllocatorTy::ResultPtr |
- AllocatorTy::Unit => panic!("invalid allocator arg"),
+ AllocatorTy::ResultPtr | AllocatorTy::Unit => panic!("invalid allocator arg"),
}
}
let output = match method.output {
AllocatorTy::ResultPtr => Some(i8p),
AllocatorTy::Unit => None,
- AllocatorTy::Layout |
- AllocatorTy::Usize |
- AllocatorTy::Ptr => panic!("invalid allocator output"),
+ AllocatorTy::Layout | AllocatorTy::Usize | AllocatorTy::Ptr => {
+ panic!("invalid allocator output")
+ }
};
- let ty = llvm::LLVMFunctionType(output.unwrap_or(void),
- args.as_ptr(),
- args.len() as c_uint,
- False);
+ let ty = llvm::LLVMFunctionType(
+ output.unwrap_or(void),
+ args.as_ptr(),
+ args.len() as c_uint,
+ False,
+ );
let name = CString::new(format!("__rust_{}", method.name)).unwrap();
- let llfn = llvm::LLVMRustGetOrInsertFunction(llmod,
- name.as_ptr(),
- ty);
+ let llfn = llvm::LLVMRustGetOrInsertFunction(llmod, name.as_ptr(), ty);
if tcx.sess.target.target.options.default_hidden_visibility {
llvm::LLVMRustSetVisibility(llfn, llvm::Visibility::Hidden);
}
let callee = CString::new(kind.fn_name(method.name)).unwrap();
- let callee = llvm::LLVMRustGetOrInsertFunction(llmod,
- callee.as_ptr(),
- ty);
+ let callee = llvm::LLVMRustGetOrInsertFunction(llmod, callee.as_ptr(), ty);
llvm::LLVMRustSetVisibility(callee, llvm::Visibility::Hidden);
- let llbb = llvm::LLVMAppendBasicBlockInContext(llcx,
- llfn,
- "entry\0".as_ptr().cast());
+ let llbb = llvm::LLVMAppendBasicBlockInContext(llcx, llfn, "entry\0".as_ptr().cast());
let llbuilder = llvm::LLVMCreateBuilderInContext(llcx);
llvm::LLVMPositionBuilderAtEnd(llbuilder, llbb);
- let args = args.iter().enumerate().map(|(i, _)| {
- llvm::LLVMGetParam(llfn, i as c_uint)
- }).collect::<Vec<_>>();
- let ret = llvm::LLVMRustBuildCall(llbuilder,
- callee,
- args.as_ptr(),
- args.len() as c_uint,
- None,
- "\0".as_ptr().cast());
+ let args = args
+ .iter()
+ .enumerate()
+ .map(|(i, _)| llvm::LLVMGetParam(llfn, i as c_uint))
+ .collect::<Vec<_>>();
+ let ret = llvm::LLVMRustBuildCall(
+ llbuilder,
+ callee,
+ args.as_ptr(),
+ args.len() as c_uint,
+ None,
+ "\0".as_ptr().cast(),
+ );
llvm::LLVMSetTailCall(ret, True);
if output.is_some() {
llvm::LLVMBuildRet(llbuilder, ret);