addressed review comments
diff --git a/src/expr.rs b/src/expr.rs
index 8214ef7..64e864d 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -337,6 +337,7 @@
 pub mod parsing {
     use super::*;
     use {Ident, Ty};
+    use generics::parsing::lifetime;
     use ident::parsing::ident;
     use lit::parsing::lit;
     use nom::multispace;
@@ -551,17 +552,12 @@
     ));
 
     named!(expr_loop -> Expr, do_parse!(
-        id: option!(
-            terminated!(
-                preceded!(
-                    punct!("'"),
-                    ident),
-                punct!(":"))) >>
-            punct!("loop") >>
+        lt: option!(terminated!(lifetime, punct!(":"))) >>
+        punct!("loop") >>
         loop_block: block >>
         (Expr::Loop(
             Box::new(loop_block),
-            id,
+            lt.map(|lt| lt.ident),
         ))
     ));
 
diff --git a/tests/test_expr.rs b/tests/test_expr.rs
index 0459da7..587102f 100644
--- a/tests/test_expr.rs
+++ b/tests/test_expr.rs
@@ -37,7 +37,7 @@
 
     let raw = "' test : loop{(1, 5, 9, 11)}";
 
-    let expected = Expr::Loop(block, Some("test".into()));
+    let expected = Expr::Loop(block, Some("'test".into()));
 
     assert_eq!(expected, parse_expr(raw).unwrap());
 }