Store original Attribute of the variants_from_header for spans
diff --git a/syntax/attrs.rs b/syntax/attrs.rs
index a1ad03c..539cfd7 100644
--- a/syntax/attrs.rs
+++ b/syntax/attrs.rs
@@ -33,7 +33,7 @@
     pub namespace: Option<&'a mut Namespace>,
     pub cxx_name: Option<&'a mut Option<ForeignName>>,
     pub rust_name: Option<&'a mut Option<Ident>>,
-    pub variants_from_header: Option<&'a mut bool>,
+    pub variants_from_header: Option<&'a mut Option<Attribute>>,
 
     // Suppress clippy needless_update lint ("struct update has no effect, all
     // the fields in the struct have already been specified") when preemptively
@@ -130,7 +130,7 @@
                 cx.push(err);
             }
             if let Some(variants_from_header) = &mut parser.variants_from_header {
-                **variants_from_header = true;
+                **variants_from_header = Some(attr);
                 continue;
             }
         } else if attr.path.is_ident("allow")
diff --git a/syntax/mod.rs b/syntax/mod.rs
index 1eae19e..dd5de52 100644
--- a/syntax/mod.rs
+++ b/syntax/mod.rs
@@ -37,7 +37,7 @@
 use proc_macro2::{Ident, Span};
 use syn::punctuated::Punctuated;
 use syn::token::{Brace, Bracket, Paren};
-use syn::{Expr, Generics, Lifetime, LitInt, Token, Type as RustType};
+use syn::{Attribute, Expr, Generics, Lifetime, LitInt, Token, Type as RustType};
 
 pub use self::atom::Atom;
 pub use self::derive::{Derive, Trait};
@@ -112,6 +112,7 @@
     pub brace_token: Brace,
     pub variants: Vec<Variant>,
     pub variants_from_header: bool,
+    pub variants_from_header_attr: Option<Attribute>,
     pub repr: Atom,
     pub repr_type: Type,
     pub explicit_repr: bool,
diff --git a/syntax/parse.rs b/syntax/parse.rs
index c17cd6e..bcf75ef 100644
--- a/syntax/parse.rs
+++ b/syntax/parse.rs
@@ -187,7 +187,7 @@
     let mut namespace = namespace.clone();
     let mut cxx_name = None;
     let mut rust_name = None;
-    let mut variants_from_header = false;
+    let mut variants_from_header = None;
     let attrs = attrs::parse(
         cx,
         item.attrs,
@@ -246,6 +246,8 @@
         lifetimes: Punctuated::new(),
         gt_token: None,
     };
+    let variants_from_header_attr = variants_from_header;
+    let variants_from_header = variants_from_header_attr.is_some();
 
     Api::Enum(Enum {
         doc,
@@ -258,6 +260,7 @@
         brace_token,
         variants,
         variants_from_header,
+        variants_from_header_attr,
         repr,
         repr_type,
         explicit_repr,