about summary refs log tree commit diff
diff options
context:
space:
mode:
authorcsmoe <csmoe@msn.com>2020-05-16 18:29:46 +0800
committercsmoe <csmoe@msn.com>2020-05-16 18:29:46 +0800
commit2e1c2a6d0a0d3785802c73d13039a0f0eea36b7c (patch)
tree712d90e1a4a17b254de7b1fb4e88e23bc568ff12
parent84539360498cab3c70a7c9114c0b8106c8e1b06b (diff)
downloadrust-2e1c2a6d0a0d3785802c73d13039a0f0eea36b7c.tar.gz
rust-2e1c2a6d0a0d3785802c73d13039a0f0eea36b7c.zip
break out earlier on empty snippet
-rw-r--r--src/librustc_span/source_map.rs25
1 files changed, 17 insertions, 8 deletions
diff --git a/src/librustc_span/source_map.rs b/src/librustc_span/source_map.rs
index d27aae0d6ed..51f55417663 100644
--- a/src/librustc_span/source_map.rs
+++ b/src/librustc_span/source_map.rs
@@ -910,14 +910,23 @@ impl SourceMap {
 
     pub fn generate_fn_name_span(&self, span: Span) -> Option<Span> {
         let prev_span = self.span_extend_to_prev_str(span, "fn", true);
-        self.span_to_snippet(prev_span)
-            .map(|snippet| {
-                let len = snippet
-                    .find(|c: char| !c.is_alphanumeric() && c != '_')
-                    .expect("no label after fn");
-                prev_span.with_hi(BytePos(prev_span.lo().0 + len as u32))
-            })
-            .ok()
+        if let Ok(snippet) = self.span_to_snippet(prev_span) {
+            debug!(
+                "generate_fn_name_span: span={:?}, prev_span={:?}, snippet={:?}",
+                span, prev_span, snippet
+            );
+
+            if snippet.is_empty() {
+                return None;
+            };
+
+            let len = snippet
+                .find(|c: char| !c.is_alphanumeric() && c != '_')
+                .expect("no label after fn");
+            Some(prev_span.with_hi(BytePos(prev_span.lo().0 + len as u32)))
+        } else {
+            None
+        }
     }
 
     /// Takes the span of a type parameter in a function signature and try to generate a span for