summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorJonas Schievink <jonas@schievink.net>2015-09-11 11:48:44 +0200
committerJonas Schievink <jonas@schievink.net>2015-09-11 11:48:44 +0200
commitf3308b9c9d9b0cd5ace3d1fa4d3b0194a78187d0 (patch)
tree90950775ab0946a82139ff03d9b11058c3f05655 /src/libsyntax
parent31fa44b18e6e8bd42630d6495823ade6a5adaeba (diff)
downloadrust-f3308b9c9d9b0cd5ace3d1fa4d3b0194a78187d0.tar.gz
rust-f3308b9c9d9b0cd5ace3d1fa4d3b0194a78187d0.zip
Don't print duplicate macro backtrace frames
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/diagnostic.rs18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/libsyntax/diagnostic.rs b/src/libsyntax/diagnostic.rs
index c383f26b4e3..c78086bda64 100644
--- a/src/libsyntax/diagnostic.rs
+++ b/src/libsyntax/diagnostic.rs
@@ -727,7 +727,9 @@ impl EmitterWriter {
                              cm: &codemap::CodeMap,
                              sp: Span)
                              -> io::Result<()> {
+        let mut last_span = codemap::DUMMY_SP;
         let mut sp_opt = Some(sp);
+
         while let Some(sp) = sp_opt {
             sp_opt = try!(cm.with_expn_info(sp.expn_id, |expn_info| -> io::Result<_> {
                 match expn_info {
@@ -737,12 +739,16 @@ impl EmitterWriter {
                             codemap::MacroBang(..) => ("", "!"),
                             codemap::CompilerExpansion(..) => ("", ""),
                         };
-                        try!(self.print_diagnostic(&cm.span_to_string(ei.call_site), Note,
-                                                   &format!("in this expansion of {}{}{}",
-                                                            pre,
-                                                            ei.callee.name(),
-                                                            post),
-                                                   None));
+                        // Don't print recursive invocations
+                        if ei.call_site != last_span {
+                            last_span = ei.call_site;
+                            try!(self.print_diagnostic(&cm.span_to_string(ei.call_site), Note,
+                                                       &format!("in this expansion of {}{}{}",
+                                                                pre,
+                                                                ei.callee.name(),
+                                                                post),
+                                                       None));
+                        }
                         Ok(Some(ei.call_site))
                     }
                     None => Ok(None)