diff --git a/compiler/rustc_ast/src/expand/typetree.rs b/compiler/rustc_ast/src/expand/typetree.rs index dfb9372f92f9c..fa04ed253ac21 100644 --- a/compiler/rustc_ast/src/expand/typetree.rs +++ b/compiler/rustc_ast/src/expand/typetree.rs @@ -18,6 +18,16 @@ impl TypeTree { pub fn new() -> Self { Self(Vec::new()) } + pub fn all_ints() -> Self { + Self(vec![Type { offset: -1, size: 1, kind: Kind::Integer, child: TypeTree::new() }]) + } + pub fn int(size: usize) -> Self { + let mut ints = Vec::with_capacity(size); + for i in 0..size { + ints.push(Type { offset: i as isize, size: 1, kind: Kind::Integer, child: TypeTree::new() }); + } + Self(ints) + } } #[derive(Clone, Eq, PartialEq, Encodable, Decodable, Debug, HashStable_Generic)] diff --git a/compiler/rustc_codegen_ssa/src/mir/intrinsic.rs b/compiler/rustc_codegen_ssa/src/mir/intrinsic.rs index e8364ca0545cd..d2b82a3949e46 100644 --- a/compiler/rustc_codegen_ssa/src/mir/intrinsic.rs +++ b/compiler/rustc_codegen_ssa/src/mir/intrinsic.rs @@ -30,9 +30,9 @@ fn copy_intrinsic<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>( count: Bx::Value, ) { let tcx: TyCtxt<'_> = bx.cx().tcx(); - let fnc_tree: TypeTree = typetree_from(tcx, ty); + let tt: TypeTree = typetree_from(tcx, ty); let fnc_tree: FncTree = FncTree { - args: vec![fnc_tree.clone(), fnc_tree.clone()], + args: vec![tt.clone(), tt.clone(), TypeTree::all_ints()], ret: TypeTree::new(), }; @@ -58,9 +58,9 @@ fn memset_intrinsic<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>( count: Bx::Value, ) { let tcx: TyCtxt<'_> = bx.cx().tcx(); - let fnc_tree: TypeTree = typetree_from(tcx, ty); + let tt: TypeTree = typetree_from(tcx, ty); let fnc_tree: FncTree = FncTree { - args: vec![fnc_tree.clone(), fnc_tree.clone()], + args: vec![tt.clone(), tt.clone(), TypeTree::all_ints()], ret: TypeTree::new(), };