diff --git a/src/expr.rs b/src/expr.rs
index 69a3389..c4fe0b4 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -290,7 +290,7 @@
     /// A literal
     Lit(Box<Expr>),
     /// A range pattern, e.g. `1...2`
-    Range(Box<Expr>, Box<Expr>),
+    Range(Box<Expr>, Box<Expr>, RangeLimits),
     /// `[a, b, ..i, y, z]` is represented as:
     ///     `Pat::Slice(box [a, b], Some(i), box [y, z])`
     Slice(Vec<Pat>, Option<Box<Pat>>, Vec<Pat>),
@@ -1141,9 +1141,9 @@
 
     named!(pat_range -> Pat, do_parse!(
         lo: pat_lit_expr >>
-        punct!("...") >>
+        limits: range_limits >>
         hi: pat_lit_expr >>
-        (Pat::Range(Box::new(lo), Box::new(hi)))
+        (Pat::Range(Box::new(lo), Box::new(hi), limits))
     ));
 
     named!(pat_lit_expr -> Expr, do_parse!(
@@ -1393,10 +1393,7 @@
                 }
                 ExprKind::Range(ref from, ref to, limits) => {
                     from.to_tokens(tokens);
-                    match limits {
-                        RangeLimits::HalfOpen => tokens.append(".."),
-                        RangeLimits::Closed => tokens.append("..."),
-                    }
+                    limits.to_tokens(tokens);
                     to.to_tokens(tokens);
                 }
                 ExprKind::Path(None, ref path) => path.to_tokens(tokens),
@@ -1602,9 +1599,9 @@
                     target.to_tokens(tokens);
                 }
                 Pat::Lit(ref lit) => lit.to_tokens(tokens),
-                Pat::Range(ref lo, ref hi) => {
+                Pat::Range(ref lo, ref hi, ref limits) => {
                     lo.to_tokens(tokens);
-                    tokens.append("...");
+                    limits.to_tokens(tokens);
                     hi.to_tokens(tokens);
                 }
                 Pat::Slice(ref before, ref rest, ref after) => {
@@ -1630,6 +1627,15 @@
         }
     }
 
+    impl ToTokens for RangeLimits {
+        fn to_tokens(&self, tokens: &mut Tokens) {
+            match *self {
+                RangeLimits::HalfOpen => tokens.append(".."),
+                RangeLimits::Closed => tokens.append("..."),
+            }
+        }
+    }
+
     impl ToTokens for FieldPat {
         fn to_tokens(&self, tokens: &mut Tokens) {
             if !self.is_shorthand {
diff --git a/src/fold.rs b/src/fold.rs
index 2874118..b7187f2 100644
--- a/src/fold.rs
+++ b/src/fold.rs
@@ -802,9 +802,10 @@
         Box(b) => Box(b.lift(|p| folder.fold_pat(p))),
         Ref(b, mutability) => Ref(b.lift(|p| folder.fold_pat(p)), mutability),
         Lit(expr) => Lit(expr.lift(|e| folder.fold_expr(e))),
-        Range(l, r) => {
+        Range(l, r, limits) => {
             Range(l.lift(|e| folder.fold_expr(e)),
-                  r.lift(|e| folder.fold_expr(e)))
+                  r.lift(|e| folder.fold_expr(e)),
+                  limits)
         }
         Slice(lefts, pat, rights) => {
             Slice(lefts.lift(|p| folder.fold_pat(p)),
diff --git a/src/visit.rs b/src/visit.rs
index 8c8645d..45ad8b4 100644
--- a/src/visit.rs
+++ b/src/visit.rs
@@ -632,7 +632,7 @@
         Pat::Lit(ref expr) => {
             visitor.visit_expr(expr);
         }
-        Pat::Range(ref start, ref end) => {
+        Pat::Range(ref start, ref end, _) => {
             visitor.visit_expr(start);
             visitor.visit_expr(end);
         }
diff --git a/tests/test_round_trip.rs b/tests/test_round_trip.rs
index b1560db..f197f35 100644
--- a/tests/test_round_trip.rs
+++ b/tests/test_round_trip.rs
@@ -90,8 +90,6 @@
         "tests/rust/src/test/run-pass/issue-38987.rs" |
         // TODO better support for attributes
         "tests/rust/src/test/run-pass/item-attributes.rs" |
-        // TODO exclusive range syntax
-        "tests/rust/src/test/run-pass/match-range.rs" |
         // TODO precedence issue with binop vs poly trait ref
         "tests/rust/src/test/run-pass/try-macro.rs" |
         // TODO 128-bit integer literals
