diff options
-rw-r--r-- | lib/Frontend/DiagnosticRenderer.cpp | 3 | ||||
-rw-r--r-- | test/Misc/diag-macro-backtrace.c | 53 |
2 files changed, 55 insertions, 1 deletions
diff --git a/lib/Frontend/DiagnosticRenderer.cpp b/lib/Frontend/DiagnosticRenderer.cpp index 9c4976c210..062b8a9d12 100644 --- a/lib/Frontend/DiagnosticRenderer.cpp +++ b/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/test/Misc/diag-macro-backtrace.c b/test/Misc/diag-macro-backtrace.c new file mode 100644 index 0000000000..ea40cbec57 --- /dev/null +++ b/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. |