diff --git a/src/item.rs b/src/item.rs
index 78709bb..7e92b3f 100644
--- a/src/item.rs
+++ b/src/item.rs
@@ -1092,6 +1092,14 @@
             let content;
             let paren_token = parenthesized!(content in input);
             let inputs = content.parse_terminated(FnArg::parse)?;
+            let variadic: Option<Token![...]> = match inputs.last() {
+                Some(punctuated::Pair::End(&FnArg::Captured(ArgCaptured {
+                    ty: Type::Verbatim(TypeVerbatim { ref tts }), ..
+                }))) => {
+                    parse2(tts.clone()).ok()
+                }
+                _ => None
+            };
 
             let output: ReturnType = input.parse()?;
             let where_clause: Option<WhereClause> = input.parse()?;
@@ -1114,7 +1122,7 @@
                     paren_token: paren_token,
                     inputs: inputs,
                     output: output,
-                    variadic: None,
+                    variadic: variadic,
                     generics: Generics {
                         where_clause: where_clause,
                         ..generics
@@ -1179,7 +1187,27 @@
         Ok(ArgCaptured {
             pat: input.parse()?,
             colon_token: input.parse()?,
-            ty: input.parse()?,
+            ty: match input.parse::<Token![...]>() {
+                Ok(dot3) => {
+                    let mut args = vec![
+                        TokenTree::Punct(Punct::new('.', Spacing::Joint)),
+                        TokenTree::Punct(Punct::new('.', Spacing::Joint)),
+                        TokenTree::Punct(Punct::new('.', Spacing::Alone)),
+                    ];
+                    let tokens = TokenStream::from_iter(
+                        args.into_iter().zip(&dot3.spans).map(|(mut arg, span)| {
+                            arg.set_span(*span);
+                            arg
+                        }
+                    ));
+                    Type::Verbatim(TypeVerbatim {
+                        tts: tokens
+                    })
+                }
+                Err(_) => {
+                   input.parse()?
+                }
+            },
         })
     }
 
@@ -2593,8 +2621,7 @@
 
     impl ToTokens for ForeignItemVerbatim {
         fn to_tokens(&self, tokens: &mut TokenStream) {
-            self.tts.to_tokens(tokens);
-        }
+            self.tts.to_tokens(tokens); }
     }
 
     impl ToTokens for MethodSig {
diff --git a/tests/clone.sh b/tests/clone.sh
index eb0df7d..063fec6 100755
--- a/tests/clone.sh
+++ b/tests/clone.sh
@@ -1,6 +1,6 @@
 #!/bin/bash
 
-REV=e2f221c75932de7a29845c8d6f1f73536ad00c41
+REV=1999a2288123173b2e487865c9a04386173025f7
 
 set -euo pipefail
 cd "$(dirname "${BASH_SOURCE[0]}")"
diff --git a/tests/common/eq.rs b/tests/common/eq.rs
index 90f93f8..99a1447 100644
--- a/tests/common/eq.rs
+++ b/tests/common/eq.rs
@@ -275,7 +275,7 @@
 spanless_eq_struct!(Expr; id node span attrs);
 spanless_eq_struct!(Field; ident expr span is_shorthand attrs);
 spanless_eq_struct!(FieldPat; ident pat is_shorthand attrs);
-spanless_eq_struct!(FnDecl; inputs output variadic);
+spanless_eq_struct!(FnDecl; inputs output c_variadic);
 spanless_eq_struct!(FnHeader; unsafety asyncness constness abi);
 spanless_eq_struct!(ForeignItem; ident attrs node id span vis);
 spanless_eq_struct!(ForeignMod; abi items);
@@ -373,7 +373,7 @@
     Paren(0) Mac(0));
 spanless_eq_enum!(TyKind; Slice(0) Array(0 1) Ptr(0) Rptr(0 1) BareFn(0) Never
     Tup(0) Path(0 1) TraitObject(0 1) ImplTrait(0 1) Paren(0) Typeof(0) Infer
-    ImplicitSelf Mac(0) Err);
+    ImplicitSelf Mac(0) Err CVarArgs);
 
 impl SpanlessEq for Ident {
     fn eq(&self, other: &Self) -> bool {
