From e45733048eb06da0976e736bb44fe906495d65e9 Mon Sep 17 00:00:00 2001 From: bjorn3 Date: Tue, 27 Nov 2018 18:35:35 +0100 Subject: [PATCH] Require Deref to CodegenCx for HasCodegen --- src/librustc_codegen_llvm/builder.rs | 9 ++++++++- src/librustc_codegen_ssa/traits/mod.rs | 4 +++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/librustc_codegen_llvm/builder.rs b/src/librustc_codegen_llvm/builder.rs index 06e52fbe76ce..907a5db143a9 100644 --- a/src/librustc_codegen_llvm/builder.rs +++ b/src/librustc_codegen_llvm/builder.rs @@ -29,7 +29,7 @@ use rustc_codegen_ssa::mir::operand::{OperandValue, OperandRef}; use rustc_codegen_ssa::mir::place::PlaceRef; use std::borrow::Cow; use std::ffi::CStr; -use std::ops::Range; +use std::ops::{Deref, Range}; use std::ptr; // All Builders must have an llfn associated with them @@ -84,6 +84,13 @@ impl ty::layout::LayoutOf for Builder<'_, '_, 'tcx> { } } +impl Deref for Builder<'_, 'll, 'tcx> { + type Target = CodegenCx<'ll, 'tcx>; + + fn deref(&self) -> &Self::Target { + self.cx + } +} impl HasCodegen<'tcx> for Builder<'_, 'll, 'tcx> { type CodegenCx = CodegenCx<'ll, 'tcx>; diff --git a/src/librustc_codegen_ssa/traits/mod.rs b/src/librustc_codegen_ssa/traits/mod.rs index 83ce28b6f8aa..5cf48be6cf54 100644 --- a/src/librustc_codegen_ssa/traits/mod.rs +++ b/src/librustc_codegen_ssa/traits/mod.rs @@ -85,7 +85,9 @@ impl<'tcx, T> CodegenMethods<'tcx> for T where { } -pub trait HasCodegen<'tcx>: Backend<'tcx> { +pub trait HasCodegen<'tcx>: + Backend<'tcx> + ::std::ops::Deref>::CodegenCx> +{ type CodegenCx: CodegenMethods<'tcx> + BackendTypes< Value = Self::Value,