diff --git a/rr_frontend/.cargo/config.toml b/rr_frontend/.cargo/config.toml
index 05a9e34546e1bcf1365a3f45c174d384b753b784..fe85ef68aa823997101dbdb5cc249f433efc3b11 100644
--- a/rr_frontend/.cargo/config.toml
+++ b/rr_frontend/.cargo/config.toml
@@ -14,7 +14,7 @@ rustflags = [
     # === REASONABLE LINTS ===
 
     # Rust warnings
-    "-Adead_code",
+    "-Ddead_code",
     "-Adeprecated",
     "-Aunused_imports",
     "-Aunused_mut",
diff --git a/rr_frontend/attribute_parse/src/parse.rs b/rr_frontend/attribute_parse/src/parse.rs
index 2f182e9807721693bff77e700ceb0330ef52191b..de262be52b8551f6aca2c6f54fa2cfb8c4225ba8 100644
--- a/rr_frontend/attribute_parse/src/parse.rs
+++ b/rr_frontend/attribute_parse/src/parse.rs
@@ -445,7 +445,6 @@ macro_rules! MToken {
 pub(crate) use MToken;
 
 pub struct LitStr {
-    span: Span,
     sym: Symbol,
 }
 
@@ -462,17 +461,13 @@ where
     fn parse(input: ParseStream, _: &U) -> ParseResult<Self> {
         let lit = input.expect_literal()?;
         match lit.0.kind {
-            LitKind::Str => Ok(Self {
-                span: lit.1,
-                sym: lit.0.symbol,
-            }),
+            LitKind::Str => Ok(Self { sym: lit.0.symbol }),
             _ => Err(ParseError::UnexpectedLitKind(LitKind::Str, lit.0.kind)),
         }
     }
 }
 
 pub struct Ident {
-    span: Span,
     sym: Symbol,
 }
 
@@ -481,8 +476,8 @@ where
     U: ?Sized,
 {
     fn parse(input: ParseStream, _: &U) -> ParseResult<Self> {
-        let (sym, span) = input.expect_ident()?;
-        Ok(Self { span, sym })
+        let (sym, _) = input.expect_ident()?;
+        Ok(Self { sym })
     }
 }
 
@@ -494,15 +489,10 @@ impl Ident {
 
 pub struct LitInt {
     span: Span,
-    sym: Symbol,
     digits: Box<str>,
-    suffix: Box<str>,
 }
 
 impl LitInt {
-    //pub fn value(&self) -> String {
-    //self.sym.to_string()
-    //}
     pub fn base10_parse<N>(&self) -> ParseResult<N>
     where
         N: FromStr,
@@ -522,15 +512,13 @@ where
             LitKind::Integer => {
                 let sym = lit.0.symbol;
 
-                let Some((digits, suffix)) = value::parse_lit_int(&sym.to_string()) else {
+                let Some((digits, _)) = value::parse_lit_int(&sym.to_string()) else {
                     panic!("Not an integer literal: {}", sym);
                 };
 
                 Ok(Self {
                     span: lit.1,
-                    sym: lit.0.symbol,
                     digits,
-                    suffix,
                 })
             },
             _ => Err(ParseError::UnexpectedLitKind(LitKind::Integer, lit.0.kind)),
diff --git a/rr_frontend/translation/src/base.rs b/rr_frontend/translation/src/base.rs
index 41d19f04a81c2e3a017f15df1216e515c4258720..514d78c473a48d38531ad5a64fe6e61b59d8a373 100644
--- a/rr_frontend/translation/src/base.rs
+++ b/rr_frontend/translation/src/base.rs
@@ -9,10 +9,7 @@ use rustc_borrowck::consumers::RustcFacts;
 use rustc_middle::mir::Location;
 
 pub type Region = <RustcFacts as FactTypes>::Origin;
-pub type Loan = <RustcFacts as FactTypes>::Loan;
 pub type PointIndex = <RustcFacts as FactTypes>::Point;
-pub type Variable = <RustcFacts as FactTypes>::Variable;
-pub type Path = <RustcFacts as FactTypes>::Path;
 
 /// Error type used for the MIR to Caesium translation.
 //TODO: add location info based on Span
@@ -25,7 +22,6 @@ pub enum TranslationError {
     UnknownVar(String),
     UnknownError(String),
     FatalError(String),
-    LoanNotFound(Location),
     AttributeError(String),
     UnknownAttributeParser(String),
     UnknownProcedure(String),
diff --git a/rr_frontend/translation/src/data.rs b/rr_frontend/translation/src/data.rs
index 6dc198fb02416196393a6c189db9cf5da48e260b..d8ee1419aa20e75947ffc633d5461db5e2559d31 100644
--- a/rr_frontend/translation/src/data.rs
+++ b/rr_frontend/translation/src/data.rs
@@ -18,13 +18,3 @@ pub struct VerificationTask {
     /// A list of procedures to verify.
     pub procedures: Vec<DefId>,
 }
-
-/// Verification result returned by a verifier.
-#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
-pub enum VerificationResult {
-    /// Verification was successful.
-    Success,
-    /// Verification failed. Errors should have been already emitted by
-    /// the verifier.
-    Failure,
-}
diff --git a/rr_frontend/translation/src/environment/collect_closure_defs_visitor.rs b/rr_frontend/translation/src/environment/collect_closure_defs_visitor.rs
index a6e092b08cec1880a2e7a6dfed8a3cd1937468c7..b6053556ec393c599d39de97efe4ae1e0feaa358 100644
--- a/rr_frontend/translation/src/environment/collect_closure_defs_visitor.rs
+++ b/rr_frontend/translation/src/environment/collect_closure_defs_visitor.rs
@@ -24,8 +24,6 @@ impl<'env, 'tcx> CollectClosureDefsVisitor<'env, 'tcx> {
     pub fn get_closure_defs(self) -> Vec<LocalDefId> {
         self.result
     }
-
-    pub fn run(&mut self) {}
 }
 
 impl<'env, 'tcx> Visitor<'tcx> for CollectClosureDefsVisitor<'env, 'tcx> {
diff --git a/rr_frontend/translation/src/environment/dump_borrowck_info.rs b/rr_frontend/translation/src/environment/dump_borrowck_info.rs
index e8b18779074f8ead05014c6d605fb3be87cb24ce..08c356cf391e19236e47b1a69c89141e712f2444 100644
--- a/rr_frontend/translation/src/environment/dump_borrowck_info.rs
+++ b/rr_frontend/translation/src/environment/dump_borrowck_info.rs
@@ -226,7 +226,6 @@ impl<'a, 'tcx: 'a> InfoPrinter<'a, 'tcx> {
         // print graph.dot
         let mir_info_printer = MirInfoPrinter {
             def_path,
-            tcx: self.tcx,
             mir,
             graph: cell::RefCell::new(graph),
             loops: loop_info,
@@ -242,7 +241,6 @@ impl<'a, 'tcx: 'a> InfoPrinter<'a, 'tcx> {
 struct MirInfoPrinter<'a, 'tcx: 'a> {
     #[allow(dead_code)]
     pub def_path: hir::definitions::DefPath,
-    pub tcx: TyCtxt<'tcx>,
     pub mir: &'a mir::Body<'tcx>,
     pub graph: cell::RefCell<BufWriter<File>>,
     pub loops: loops::ProcedureLoops,
diff --git a/rr_frontend/translation/src/environment/polonius_info.rs b/rr_frontend/translation/src/environment/polonius_info.rs
index bc5d9edf7adfd3a46c73af0da001c8ea8e9a70d3..22fee69fe857029df150ebe9389905974c3b086a 100644
--- a/rr_frontend/translation/src/environment/polonius_info.rs
+++ b/rr_frontend/translation/src/environment/polonius_info.rs
@@ -308,8 +308,6 @@ pub struct PoloniusInfo<'a, 'tcx: 'a> {
     pub(crate) additional_facts: AdditionalFacts,
     /// Loans that are created inside loops. Loan → loop head.
     pub(crate) loops: loops::ProcedureLoops,
-    /// Facts without back edges.
-    pub(crate) additional_facts_no_back: AdditionalFacts,
     /// Two loans are conflicting if they borrow overlapping places and
     /// are alive at overlapping regions.
     pub(crate) loan_conflict_sets: HashMap<facts::Loan, HashSet<facts::Loan>>,
@@ -507,8 +505,7 @@ impl<'a, 'tcx: 'a> PoloniusInfo<'a, 'tcx> {
             .collect();
 
         let additional_facts = AdditionalFacts::new(&all_facts, &output);
-        let additional_facts_without_back_edges =
-            AdditionalFacts::new(&all_facts_without_back_edges, &output_without_back_edges);
+
         // FIXME: Check whether the new info in Polonius could be used for computing initialization.
         let loan_conflict_sets = compute_loan_conflict_sets(procedure, &loan_position, &all_facts, &output)?;
 
@@ -524,7 +521,6 @@ impl<'a, 'tcx: 'a> PoloniusInfo<'a, 'tcx> {
             loan_at_position,
             place_regions,
             additional_facts,
-            additional_facts_no_back: additional_facts_without_back_edges,
             loops: loop_info,
             loan_conflict_sets,
             superset,
@@ -1204,21 +1200,6 @@ impl<'a, 'tcx: 'a> PoloniusInfo<'a, 'tcx> {
         }
     }
 
-    /// Find minimal elements that are the (reborrow) tree roots.
-    fn find_loan_roots(&self, loans: &[facts::Loan]) -> Vec<facts::Loan> {
-        let mut roots = Vec::new();
-        for &loan in loans {
-            let is_smallest = !loans
-                .iter()
-                .any(|&other_loan| self.additional_facts.reborrows.contains(&(other_loan, loan)));
-            debug!("loan={:?} is_smallest={}", loan, is_smallest);
-            if is_smallest {
-                roots.push(loan);
-            }
-        }
-        roots
-    }
-
     /// Find a variable that has the given region in its type.
     pub const fn find_variable(&self, _region: facts::Region) -> Option<mir::Local> {
         // TODO
@@ -1316,15 +1297,6 @@ impl<'a, 'tcx: 'a> PoloniusInfo<'a, 'tcx> {
     //     }
 }
 
-/// Check if the statement is assignment.
-fn is_assignment(mir: &mir::Body<'_>, location: mir::Location) -> bool {
-    let mir::BasicBlockData { ref statements, .. } = mir[location.block];
-    if statements.len() == location.statement_index {
-        return false;
-    }
-    matches!(statements[location.statement_index].kind, mir::StatementKind::Assign { .. })
-}
-
 /// Check if the terminator is return.
 fn is_return(mir: &mir::Body<'_>, location: mir::Location) -> bool {
     let mir::BasicBlockData {
@@ -1338,67 +1310,6 @@ fn is_return(mir: &mir::Body<'_>, location: mir::Location) -> bool {
     matches!(terminator.as_ref().unwrap().kind, mir::TerminatorKind::Return)
 }
 
-fn is_call(mir: &mir::Body<'_>, location: mir::Location) -> bool {
-    let mir::BasicBlockData {
-        ref statements,
-        ref terminator,
-        ..
-    } = mir[location.block];
-    if statements.len() != location.statement_index {
-        return false;
-    }
-    matches!(terminator.as_ref().unwrap().kind, mir::TerminatorKind::Call { .. })
-}
-
-/// Extract the call terminator at the location. Otherwise return None.
-fn get_call_destination<'tcx>(mir: &mir::Body<'tcx>, location: mir::Location) -> Option<mir::Place<'tcx>> {
-    let mir::BasicBlockData {
-        ref statements,
-        ref terminator,
-        ..
-    } = mir[location.block];
-    if statements.len() != location.statement_index {
-        return None;
-    }
-    match terminator.as_ref().unwrap().kind {
-        mir::TerminatorKind::Call {
-            ref destination, ..
-        } => Some(*destination),
-        ref x => {
-            panic!("Expected call, got {:?} at {:?}", x, location);
-        },
-    }
-}
-
-/// Extract reference-typed arguments of the call at the given location.
-fn get_call_arguments(mir: &mir::Body<'_>, location: mir::Location) -> Vec<mir::Local> {
-    let mir::BasicBlockData {
-        ref statements,
-        ref terminator,
-        ..
-    } = mir[location.block];
-    assert!(statements.len() == location.statement_index);
-    match terminator.as_ref().unwrap().kind {
-        mir::TerminatorKind::Call { ref args, .. } => {
-            let mut reference_args = Vec::new();
-            for arg in args {
-                match arg {
-                    mir::Operand::Copy(place) | mir::Operand::Move(place) => {
-                        if place.projection.len() == 0 {
-                            reference_args.push(place.local);
-                        }
-                    },
-                    mir::Operand::Constant(_) => {},
-                }
-            }
-            reference_args
-        },
-        ref x => {
-            panic!("Expected call, got {:?} at {:?}", x, location);
-        },
-    }
-}
-
 /// Additional facts derived from the borrow checker facts.
 pub struct AdditionalFacts {
     /// A list of loans sorted by id.
diff --git a/rr_frontend/translation/src/environment/procedure.rs b/rr_frontend/translation/src/environment/procedure.rs
index 3ab9916aaa7e69c35214849c44f3a6aab7e7c240..deae9fe796e619165853b578b0a620db633aaaa4 100644
--- a/rr_frontend/translation/src/environment/procedure.rs
+++ b/rr_frontend/translation/src/environment/procedure.rs
@@ -234,6 +234,7 @@ fn build_reachable_basic_blocks(mir: &Mir, real_edges: &RealEdges) -> HashSet<Ba
 }
 
 #[derive(Debug)]
+#[allow(dead_code)]
 struct BasicBlockNode {
     successors: HashSet<BasicBlock>,
     predecessors: HashSet<BasicBlock>,
@@ -255,6 +256,7 @@ fn _blocks_definitely_leading_to<'a>(
     blocks
 }
 
+#[allow(dead_code)]
 fn blocks_definitely_leading_to(
     bb_graph: &HashMap<BasicBlock, BasicBlockNode>,
     target: BasicBlock,
diff --git a/rr_frontend/translation/src/function_body.rs b/rr_frontend/translation/src/function_body.rs
index 02b99c78ef7f4ab71b1c8b2f5a4e08ce2169882a..4a33583a4b0ca086367b1adbf26fe6f8f974fc9e 100644
--- a/rr_frontend/translation/src/function_body.rs
+++ b/rr_frontend/translation/src/function_body.rs
@@ -50,18 +50,10 @@ pub enum ProcedureMode {
     Ignore,
 }
 impl ProcedureMode {
-    pub fn is_prove(&self) -> bool {
-        *self == Self::Prove
-    }
-
     pub fn is_only_spec(&self) -> bool {
         *self == Self::OnlySpec
     }
 
-    pub fn is_trust_me(&self) -> bool {
-        *self == Self::TrustMe
-    }
-
     pub fn is_shim(&self) -> bool {
         *self == Self::Shim
     }
@@ -1011,8 +1003,6 @@ impl<'a, 'def: 'a, 'tcx: 'def> FunctionTranslator<'a, 'def, 'tcx> {
             inclusion_tracker: self.inclusion_tracker,
             collected_procedures: HashMap::new(),
             procedure_registry: self.procedure_registry,
-            attrs: self.attrs,
-            local_lifetimes: Vec::new(),
             bb_queue: Vec::new(),
             processed_bbs: HashSet::new(),
             ty_translator: self.ty_translator,
@@ -1075,19 +1065,6 @@ impl<'a, 'def: 'a, 'tcx: 'def> FunctionTranslator<'a, 'def, 'tcx> {
         }
         initial_arg_mapping
     }
-
-    fn get_initial_universal_arg_constraints2(
-        &mut self,
-        sig_args: &[Ty<'tcx>],
-        local_args: &[Ty<'tcx>],
-    ) -> Vec<(info::AtomicRegion, info::AtomicRegion)> {
-        // Polonius generates a base subset constraint uregion ⊑ pregion.
-        // We turn that into pregion = uregion, as we do strong updates at the top-level.
-        assert!(sig_args.len() == local_args.len());
-
-        // TODO: implement a bitypefolder to solve this issue.
-        Vec::new()
-    }
 }
 
 /**
@@ -1122,12 +1099,8 @@ struct BodyTranslator<'a, 'def, 'tcx> {
     procedure_registry: &'a ProcedureScope<'def>,
     /// scope of used consts
     const_registry: &'a ConstScope<'def>,
-    /// attributes on this function
-    attrs: &'a [&'a rustc_ast::ast::AttrItem],
     /// polonius info for this function
     info: &'a PoloniusInfo<'a, 'tcx>,
-    /// local lifetimes: the LHS is the lifetime name, the RHS are the super lifetimes
-    local_lifetimes: Vec<(radium::specs::Lft, Vec<radium::specs::Lft>)>,
     /// data structures for tracking which basic blocks still need to be translated
     /// (we only translate the basic blocks which are actually reachable, in particular when
     /// skipping unwinding)
@@ -2307,26 +2280,6 @@ impl<'a, 'def: 'a, 'tcx: 'def> BodyTranslator<'a, 'def, 'tcx> {
         }
     }
 
-    /// Generate an annotation to adapt the type of `expr` to `target_ty` from type `current_ty` by
-    /// means of shortening lifetimes.
-    fn generate_shortenlft_annot(
-        &self,
-        target_ty: Ty<'tcx>,
-        _current_ty: Ty<'tcx>,
-        mut expr: radium::Expr,
-    ) -> radium::Expr {
-        // this is not so different from the strong update annotation
-        let (interesting, tree) = self.generate_strong_update_annot_rec(target_ty);
-        if interesting {
-            expr = radium::Expr::Annot {
-                a: radium::Annotation::ShortenLft(tree),
-                e: Box::new(expr),
-                why: None,
-            };
-        }
-        expr
-    }
-
     /// Find all regions that need to outlive a loan region at its point of creation, and
     /// add the corresponding constraints to the inclusion tracker.
     fn get_outliving_regions_on_loan(&mut self, r: Region, loan_point: PointIndex) -> Vec<Region> {
@@ -3735,15 +3688,6 @@ impl<'a, 'def: 'a, 'tcx: 'def> BodyTranslator<'a, 'def, 'tcx> {
         Ok(pl.ty(&self.proc.get_mir().local_decls, self.env.tcx()))
     }
 
-    /// Get the type of a const.
-    fn get_type_of_const(&self, cst: &Constant<'tcx>) -> Result<Ty<'tcx>, TranslationError> {
-        match cst.literal {
-            ConstantKind::Ty(cst) => Ok(cst.ty()),
-            ConstantKind::Val(_, ty) => Ok(ty),
-            ConstantKind::Unevaluated(_, ty) => Ok(ty),
-        }
-    }
-
     /// Get the type of an operand.
     fn get_type_of_operand(&self, op: &Operand<'tcx>) -> Result<Ty<'tcx>, TranslationError> {
         Ok(op.ty(&self.proc.get_mir().local_decls, self.env.tcx()))
diff --git a/rr_frontend/translation/src/shim_registry.rs b/rr_frontend/translation/src/shim_registry.rs
index aa59dd553ffa219addb4d8f6825df02e36cdd774..ca4a985787612e32ecbc8e8f6faa0fa19305bd86 100644
--- a/rr_frontend/translation/src/shim_registry.rs
+++ b/rr_frontend/translation/src/shim_registry.rs
@@ -133,13 +133,6 @@ impl<'a> From<AdtShim<'a>> for ShimAdtEntry {
     }
 }
 
-pub struct ModuleSummary<'a> {
-    /// function/method shims
-    function_shims: Vec<FunctionShim<'a>>,
-    /// adt shims
-    adt_shims: Vec<AdtShim<'a>>,
-}
-
 /// Registry of function shims loaded by the user. Substitutes path to the function/method with a
 /// code definition name and a spec name.
 pub struct ShimRegistry<'a> {
@@ -190,20 +183,6 @@ impl<'a> ShimRegistry<'a> {
         }
     }
 
-    pub fn new(arena: &'a Arena<String>) -> std::result::Result<ShimRegistry<'a>, String> {
-        let mut reg = Self::empty(arena);
-
-        match rrconfig::shim_file() {
-            None => (),
-            Some(file) => {
-                let f = File::open(file).map_err(|a| a.to_string())?;
-                reg.add_source(f)?;
-            },
-        }
-
-        Ok(reg)
-    }
-
     pub fn add_source(&mut self, f: File) -> Result<(), String> {
         let reader = BufReader::new(f);
         let deser: serde_json::Value = serde_json::from_reader(reader).unwrap();
diff --git a/rr_frontend/translation/src/traits.rs b/rr_frontend/translation/src/traits.rs
index a7899ed63264198b2b1626138f332a53ed52455f..4c472d8533080e2f313a93e3851aa055f91ad63f 100644
--- a/rr_frontend/translation/src/traits.rs
+++ b/rr_frontend/translation/src/traits.rs
@@ -9,10 +9,6 @@ use rustc_middle::ty::{
 };
 use rustc_trait_selection::traits::{ImplSource, NormalizeExt};
 
-pub fn associated_items(tcx: TyCtxt, def_id: DefId) -> impl Iterator<Item = &AssocItem> {
-    tcx.associated_items(def_id).in_definition_order()
-}
-
 /// Normalize a type in the given environment.
 pub fn normalize_type<'tcx, T>(
     tcx: TyCtxt<'tcx>,
@@ -69,42 +65,6 @@ pub fn resolve_impl_source<'tcx>(
     source.map_or_else(|_| None, |x| Some(x))
 }
 
-pub fn resolve_trait_or_item<'tcx>(
-    tcx: TyCtxt<'tcx>,
-    param_env: ParamEnv<'tcx>,
-    def_id: DefId,
-    substs: GenericArgsRef<'tcx>,
-) -> Option<(DefId, GenericArgsRef<'tcx>, TraitResolutionKind)> {
-    if tcx.is_trait(def_id) {
-        resolve_trait(tcx, param_env, def_id, substs)
-    } else {
-        resolve_assoc_item(tcx, param_env, def_id, substs)
-    }
-}
-
-/// Resolve a reference to a trait using codegen trait selection.
-/// `did` should be the id of a trait.
-pub fn resolve_trait<'tcx>(
-    tcx: TyCtxt<'tcx>,
-    param_env: ParamEnv<'tcx>,
-    did: DefId,
-    substs: GenericArgsRef<'tcx>,
-) -> Option<(DefId, GenericArgsRef<'tcx>, TraitResolutionKind)> {
-    if tcx.is_trait(did) {
-        let impl_source = resolve_impl_source(tcx, param_env, did, substs);
-        info!("trait impl_source for {:?}: {:?}", did, impl_source);
-        match impl_source? {
-            ImplSource::UserDefined(impl_data) => {
-                Some((impl_data.impl_def_id, impl_data.args, TraitResolutionKind::UserDefined))
-            },
-            ImplSource::Param(_) => Some((did, substs, TraitResolutionKind::Param)),
-            ImplSource::Builtin(_, _) => None,
-        }
-    } else {
-        None
-    }
-}
-
 #[derive(Copy, Clone, Eq, PartialEq, Debug)]
 pub enum TraitResolutionKind {
     Param,
diff --git a/rr_frontend/translation/src/type_translator.rs b/rr_frontend/translation/src/type_translator.rs
index 30fa384f61cc23387062b2043c17fb5200f8638e..7c38e19bede748e94aa8922a6a991dcaabc2ac89 100644
--- a/rr_frontend/translation/src/type_translator.rs
+++ b/rr_frontend/translation/src/type_translator.rs
@@ -83,17 +83,6 @@ impl<'def> TypeTranslationScope<'def> {
         self.universal_lifetimes.get(&lft).map(|s| s.to_string())
     }
 
-    /// Create a new empty scope for a function.
-    pub fn empty(did: DefId) -> Self {
-        Self {
-            did,
-            tuple_uses: Vec::new(),
-            shim_uses: HashMap::new(),
-            generic_scope: Vec::new(),
-            universal_lifetimes: HashMap::new(),
-        }
-    }
-
     /// Create a new scope for a function translation with the given generic parameters.
     pub fn new(
         did: DefId,
@@ -186,16 +175,6 @@ pub type TranslationState<'a, 'b, 'def> = &'a mut TranslationStateInner<'b, 'def
 pub type InFunctionState<'a, 'def> = &'a mut TypeTranslationScope<'def>;
 pub type TranslateAdtState<'a> = &'a mut HashSet<DefId>;
 
-impl<'a, 'def> TranslationStateInner<'a, 'def> {
-    const fn in_function(&self) -> bool {
-        matches!(*self, Self::InFunction(_))
-    }
-
-    const fn translate_adt(&self) -> bool {
-        matches!(*self, Self::TranslateAdt(_))
-    }
-}
-
 pub struct TypeTranslator<'def, 'tcx> {
     env: &'def Environment<'tcx>,
 
@@ -1450,28 +1429,6 @@ impl<'def, 'tcx: 'def> TypeTranslator<'def, 'tcx> {
         }
     }
 
-    /// Translate a rustc_attr::IntType (this is different from the rustc_ty IntType).
-    const fn translate_int_type(&self, it: rustc_attr::IntType) -> Result<radium::IntType, TranslationError> {
-        match it {
-            rustc_attr::IntType::SignedInt(it) => Ok(match it {
-                rustc_ast::IntTy::I8 => radium::IntType::I8,
-                rustc_ast::IntTy::I16 => radium::IntType::I16,
-                rustc_ast::IntTy::I32 => radium::IntType::I32,
-                rustc_ast::IntTy::I64 => radium::IntType::I64,
-                rustc_ast::IntTy::I128 => radium::IntType::I128,
-                rustc_ast::IntTy::Isize => radium::IntType::ISize,
-            }),
-            rustc_attr::IntType::UnsignedInt(it) => Ok(match it {
-                rustc_ast::UintTy::U8 => radium::IntType::U8,
-                rustc_ast::UintTy::U16 => radium::IntType::U16,
-                rustc_ast::UintTy::U32 => radium::IntType::U32,
-                rustc_ast::UintTy::U64 => radium::IntType::U64,
-                rustc_ast::UintTy::U128 => radium::IntType::U128,
-                rustc_ast::UintTy::Usize => radium::IntType::USize,
-            }),
-        }
-    }
-
     /// Translate a rustc_attr::IntType (this is different from the rustc_ty IntType).
     const fn translate_integer_type(
         &self,
diff --git a/rr_frontend/translation/src/tyvars.rs b/rr_frontend/translation/src/tyvars.rs
index 658ef14680b1c3116a3e741d44ddc7532f00f20a..6a375e4d956b776030e3439e503c38df8733191d 100644
--- a/rr_frontend/translation/src/tyvars.rs
+++ b/rr_frontend/translation/src/tyvars.rs
@@ -63,21 +63,6 @@ struct TyVarRenameFolder<'tcx> {
     name_map: HashMap<ty::ParamTy, ty::ParamTy>,
 }
 
-impl<'tcx> TyVarRenameFolder<'tcx> {
-    fn new(tcx: TyCtxt<'tcx>) -> Self {
-        TyVarRenameFolder {
-            tcx,
-            new_subst: Vec::new(),
-            name_map: HashMap::new(),
-        }
-    }
-
-    /// Obtain the substitution for getting back the old type.
-    fn get_subst(self) -> Vec<ty::ParamTy> {
-        self.new_subst
-    }
-}
-
 impl<'tcx> ty::TypeFolder<TyCtxt<'tcx>> for TyVarRenameFolder<'tcx> {
     fn interner(&self) -> TyCtxt<'tcx> {
         self.tcx
diff --git a/rr_frontend/translation/src/utils.rs b/rr_frontend/translation/src/utils.rs
index d72f19a19c8fe8cb12f9b6660d8bb301de365403..db509f7f9c6d7b9e4559718f9d7b139e6692ebbe 100644
--- a/rr_frontend/translation/src/utils.rs
+++ b/rr_frontend/translation/src/utils.rs
@@ -161,18 +161,6 @@ pub fn get_cleaned_def_path(tcx: TyCtxt<'_>, did: DefId) -> Vec<String> {
     components
 }
 
-// Alternative implementation of `get_cleaned_def_path`, but this doesn't always yield a rooted
-// path (but only a suffix of the full path)
-fn extract_def_path(path: rustc_hir::definitions::DefPath) -> Vec<String> {
-    let mut components = Vec::new();
-    for p in &path.data {
-        if let Some(name) = p.data.get_opt_name() {
-            components.push(name.as_str().to_string());
-        }
-    }
-    components
-}
-
 /// Get the path we should export an item at.
 pub fn get_export_path_for_did(env: &Environment, did: DefId) -> Vec<String> {
     let attrs = env.get_attributes(did);
@@ -548,29 +536,6 @@ pub fn expand_one_level<'tcx>(
     }
 }
 
-/// Pop the last projection from the place and return the new place with the popped element.
-pub fn try_pop_one_level<'tcx>(
-    tcx: TyCtxt<'tcx>,
-    place: mir::Place<'tcx>,
-) -> Option<(mir::PlaceElem<'tcx>, mir::Place<'tcx>)> {
-    if place.projection.len() > 0 {
-        let last_index = place.projection.len() - 1;
-        let new_place = mir::Place {
-            local: place.local,
-            projection: tcx.mk_place_elems(&place.projection[..last_index]),
-        };
-        Some((place.projection[last_index], new_place))
-    } else {
-        None
-    }
-}
-
-/// Pop the last element from the place if it is a dereference.
-pub fn try_pop_deref<'tcx>(tcx: TyCtxt<'tcx>, place: mir::Place<'tcx>) -> Option<mir::Place<'tcx>> {
-    try_pop_one_level(tcx, place)
-        .and_then(|(elem, base)| if elem == mir::ProjectionElem::Deref { Some(base) } else { None })
-}
-
 /// Subtract the `subtrahend` place from the `minuend` place. The
 /// subtraction is defined as set minus between `minuend` place replaced
 /// with a set of places that are unrolled up to the same level as
@@ -630,48 +595,6 @@ pub fn collapse<'tcx>(
     recurse(mir, tcx, places, guide_place.local.into(), guide_place);
 }
 
-#[derive(Debug)]
-pub struct VecPlaceComponent<'tcx> {
-    place: mir::Place<'tcx>,
-}
-
-impl<'tcx> VecPlaceComponent<'tcx> {
-    pub const fn get_mir_place(&self) -> &mir::Place<'tcx> {
-        &self.place
-    }
-}
-
-/// A different way to represent a place that is more similar to the one
-/// mentioned in the issue <https://github.com/rust-lang/rust/issues/52708>.
-#[derive(Debug)]
-pub struct VecPlace<'tcx> {
-    components: Vec<VecPlaceComponent<'tcx>>,
-}
-
-impl<'tcx> VecPlace<'tcx> {
-    pub fn new(mir: &mir::Body<'tcx>, tcx: TyCtxt<'tcx>, place: &mir::Place<'tcx>) -> VecPlace<'tcx> {
-        let mut vec_place = Self {
-            components: Vec::new(),
-        };
-        let mut prefix: mir::Place = place.local.into();
-        vec_place.components.push(VecPlaceComponent { place: prefix });
-        while prefix.projection.len() < place.projection.len() {
-            let (new_prefix, _) = expand_one_level(mir, tcx, prefix, *place);
-            prefix = new_prefix;
-            vec_place.components.push(VecPlaceComponent { place: prefix });
-        }
-        vec_place
-    }
-
-    pub fn iter<'a>(&'a self) -> impl DoubleEndedIterator<Item = &'a VecPlaceComponent<'tcx>> {
-        self.components.iter()
-    }
-
-    pub fn component_count(&self) -> usize {
-        self.components.len()
-    }
-}
-
 /// Check if `<tool>::<name>` is among the attributes, where `tool` is determined by the
 /// `spec_hotword` config.
 /// Any arguments of the attribute are ignored.