From a163d0b5de9e268411f51ad28d6ea34bf6e9a88c Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Wed, 25 Jan 2012 06:07:15 +0000 Subject: [PATCH] Fix -fmacro-backtrace-limit=0 to show the entire macro backtrace. llvm-svn: 148930 --- clang/lib/Frontend/DiagnosticRenderer.cpp | 3 +- clang/test/Misc/diag-macro-backtrace.c | 53 +++++++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 clang/test/Misc/diag-macro-backtrace.c diff --git a/clang/lib/Frontend/DiagnosticRenderer.cpp b/clang/lib/Frontend/DiagnosticRenderer.cpp index 9c4976c2103a..062b8a9d127e 100644 --- a/clang/lib/Frontend/DiagnosticRenderer.cpp +++ b/clang/lib/Frontend/DiagnosticRenderer.cpp @@ -260,7 +260,8 @@ void DiagnosticRenderer::emitMacroExpansionsAndCarets( Loc = getImmediateMacroCalleeLoc(SM, Loc); unsigned MacroSkipStart = 0, MacroSkipEnd = 0; - if (MacroDepth > DiagOpts.MacroBacktraceLimit) { + if (MacroDepth > DiagOpts.MacroBacktraceLimit && + DiagOpts.MacroBacktraceLimit != 0) { MacroSkipStart = DiagOpts.MacroBacktraceLimit / 2 + DiagOpts.MacroBacktraceLimit % 2; MacroSkipEnd = MacroDepth - DiagOpts.MacroBacktraceLimit / 2; diff --git a/clang/test/Misc/diag-macro-backtrace.c b/clang/test/Misc/diag-macro-backtrace.c new file mode 100644 index 000000000000..ea40cbec57ed --- /dev/null +++ b/clang/test/Misc/diag-macro-backtrace.c @@ -0,0 +1,53 @@ +// RUN: %clang -fsyntax-only -fmacro-backtrace-limit=0 %s 2>&1 | FileCheck %s + +#define FOO 1+"hi" +#define BAR FOO +#define BAZ BAR +#define QUZ BAZ +#define TAZ QUZ +#define ABA TAZ +#define BAB ABA +#define ZAZ BAB +#define WAZ ZAZ +#define DROOL WAZ +#define FOOL DROOL + +FOOL + +// CHECK: :15:1: error: expected identifier or '(' +// CHECK: FOOL +// CHECK: ^ +// CHECK: :13:14: note: expanded from macro 'FOOL' +// CHECK: #define FOOL DROOL +// CHECK: ^ +// CHECK: :12:15: note: expanded from macro 'DROOL' +// CHECK: #define DROOL WAZ +// CHECK: ^ +// CHECK: :11:13: note: expanded from macro 'WAZ' +// CHECK: #define WAZ ZAZ +// CHECK: ^ +// CHECK: :10:13: note: expanded from macro 'ZAZ' +// CHECK: #define ZAZ BAB +// CHECK: ^ +// CHECK: :9:13: note: expanded from macro 'BAB' +// CHECK: #define BAB ABA +// CHECK: ^ +// CHECK: :8:13: note: expanded from macro 'ABA' +// CHECK: #define ABA TAZ +// CHECK: ^ +// CHECK: :7:13: note: expanded from macro 'TAZ' +// CHECK: #define TAZ QUZ +// CHECK: ^ +// CHECK: :6:13: note: expanded from macro 'QUZ' +// CHECK: #define QUZ BAZ +// CHECK: ^ +// CHECK: :5:13: note: expanded from macro 'BAZ' +// CHECK: #define BAZ BAR +// CHECK: ^ +// CHECK: :4:13: note: expanded from macro 'BAR' +// CHECK: #define BAR FOO +// CHECK: ^ +// CHECK: :3:13: note: expanded from macro 'FOO' +// CHECK: #define FOO 1+"hi" +// CHECK: ^ +// CHECK: 1 error generated.