diff --git a/hercules_ir/src/parse.rs b/hercules_ir/src/parse.rs
index 3a47f8ea698196e8740af3d440c4d8239cd6893d..5e4b12178d1782df47d2e5d36abffdb568311799 100644
--- a/hercules_ir/src/parse.rs
+++ b/hercules_ir/src/parse.rs
@@ -978,20 +978,17 @@ fn parse_constant<'a>(
         Type::UnsignedInteger64 => parse_unsigned_integer64(ir_text)?,
         Type::Float32 => parse_float32(ir_text)?,
         Type::Float64 => parse_float64(ir_text)?,
-        Type::Product(ref tys) => parse_product_constant(
-            ir_text,
-            context.borrow_mut().get_type_id(ty.clone()),
-            tys,
-            context,
-        )?,
-        Type::Summation(ref tys) => parse_summation_constant(
-            ir_text,
-            context.borrow_mut().get_type_id(ty.clone()),
-            tys,
-            context,
-        )?,
+        Type::Product(ref tys) => {
+            let prod_ty = context.borrow_mut().get_type_id(ty.clone());
+            parse_product_constant(ir_text, prod_ty, tys, context)?
+        }
+        Type::Summation(ref tys) => {
+            let sum_ty = context.borrow_mut().get_type_id(ty.clone());
+            parse_summation_constant(ir_text, sum_ty, tys, context)?
+        }
         Type::Array(_, _) => {
-            parse_array_constant(ir_text, context.borrow_mut().get_type_id(ty.clone()))?
+            let array_ty = context.borrow_mut().get_type_id(ty.clone());
+            parse_array_constant(ir_text, array_ty)?
         }
     };
     Ok((ir_text, constant))
@@ -1094,11 +1091,8 @@ fn parse_product_constant<'a>(
             ir_text = nom::character::complete::char(',')(ir_text)?.0;
         }
         ir_text = nom::character::complete::multispace0(ir_text)?.0;
-        let (ir_text_tmp, id) = parse_constant_id(
-            ir_text,
-            context.borrow().reverse_type_map.get(ty).unwrap().clone(),
-            context,
-        )?;
+        let ty = context.borrow().reverse_type_map.get(ty).unwrap().clone();
+        let (ir_text_tmp, id) = parse_constant_id(ir_text, ty, context)?;
         subconstants.push(id);
         ir_text = ir_text_tmp;
     }
@@ -1127,16 +1121,13 @@ fn parse_summation_constant<'a>(
     let ir_text = nom::character::complete::multispace0(ir_text)?.0;
     let ir_text = nom::character::complete::char(',')(ir_text)?.0;
     let ir_text = nom::character::complete::multispace0(ir_text)?.0;
-    let (ir_text, id) = parse_constant_id(
-        ir_text,
-        context
-            .borrow()
-            .reverse_type_map
-            .get(&tys[variant as usize])
-            .unwrap()
-            .clone(),
-        context,
-    )?;
+    let ty = context
+        .borrow()
+        .reverse_type_map
+        .get(&tys[variant as usize])
+        .unwrap()
+        .clone();
+    let (ir_text, id) = parse_constant_id(ir_text, ty, context)?;
     let ir_text = nom::character::complete::multispace0(ir_text)?.0;
     let ir_text = nom::character::complete::char(')')(ir_text)?.0;
     Ok((ir_text, Constant::Summation(sum_ty, variant, id)))
diff --git a/hercules_samples/ccp/src/ccp.hir b/hercules_samples/ccp/src/ccp.hir
index 25b7379e19f488c2d5ecf8cb377161758c62bb98..b8e939942be05f75d85411f05016ed3484ed1bf0 100644
--- a/hercules_samples/ccp/src/ccp.hir
+++ b/hercules_samples/ccp/src/ccp.hir
@@ -1,4 +1,5 @@
 fn tricky(x: i32) -> i32
+  not_used = constant(prod(u64, u64), prod(0, 0))
   one = constant(i32, 1)
   two = constant(i32, 2)
   loop = region(start, if2_true)