Omit missing spans from Debug output
diff --git a/src/fallback.rs b/src/fallback.rs
index baeed69..7f3cc4e 100644
--- a/src/fallback.rs
+++ b/src/fallback.rs
@@ -414,6 +414,12 @@
     }
 }
 
+pub fn debug_span_field_if_nontrivial(debug: &mut fmt::DebugStruct, span: Span) {
+    if cfg!(procmacro2_semver_exempt) {
+        debug.field("span", &span);
+    }
+}
+
 #[derive(Clone)]
 pub struct Group {
     delimiter: Delimiter,
diff --git a/src/lib.rs b/src/lib.rs
index 60ab060..fd49f01 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -495,8 +495,7 @@
             TokenTree::Ident(ref t) => {
                 let mut debug = f.debug_struct("Ident");
                 debug.field("sym", &format_args!("{}", t));
-                #[cfg(any(feature = "nightly", procmacro2_semver_exempt))]
-                debug.field("span", &t.span());
+                imp::debug_span_field_if_nontrivial(&mut debug, t.span().inner);
                 debug.finish()
             }
             TokenTree::Punct(ref t) => t.fmt(f),
@@ -705,8 +704,7 @@
         let mut debug = fmt.debug_struct("Punct");
         debug.field("op", &self.op);
         debug.field("spacing", &self.spacing);
-        #[cfg(procmacro2_semver_exempt)]
-        debug.field("span", &self.span);
+        imp::debug_span_field_if_nontrivial(&mut debug, self.span.inner);
         debug.finish()
     }
 }
diff --git a/src/wrapper.rs b/src/wrapper.rs
index b43c5de..8ead052 100644
--- a/src/wrapper.rs
+++ b/src/wrapper.rs
@@ -551,6 +551,15 @@
     }
 }
 
+pub fn debug_span_field_if_nontrivial(debug: &mut fmt::DebugStruct, span: Span) {
+    match span {
+        Span::Compiler(s) => {
+            debug.field("span", &s);
+        }
+        Span::Fallback(s) => fallback::debug_span_field_if_nontrivial(debug, s),
+    }
+}
+
 #[derive(Clone)]
 pub enum Group {
     Compiler(proc_macro::Group),