From a0e32fc8b68dfa63d50d13a342a9b7faf5650489 Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Fri, 11 Nov 2011 00:46:43 +0000 Subject: [PATCH] [serialized diagnostics]: add test cases for serialized diagnostics, including a test case for no issues, multiple issues, and a single issue. Along the way, tweak c-index-test -read-diagnostics output so it is easier to tell what diagnostics are child diagnostics. llvm-svn: 144349 --- clang/test/Misc/serialized-diags-no-issue.c | 10 ++++++++ .../test/Misc/serialized-diags-single-issue.c | 16 +++++++++++++ clang/test/Misc/serialized-diags.c | 23 +++++++++++++++++++ clang/tools/c-index-test/c-index-test.c | 10 +++++--- 4 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 clang/test/Misc/serialized-diags-no-issue.c create mode 100644 clang/test/Misc/serialized-diags-single-issue.c create mode 100644 clang/test/Misc/serialized-diags.c diff --git a/clang/test/Misc/serialized-diags-no-issue.c b/clang/test/Misc/serialized-diags-no-issue.c new file mode 100644 index 000000000000..5c7da8267db9 --- /dev/null +++ b/clang/test/Misc/serialized-diags-no-issue.c @@ -0,0 +1,10 @@ +void foo(); + +// RUN: %clang -Wall -fsyntax-only %s --serialize-diagnostics %t +// RUN: c-index-test -read-diagnostics %t 2>&1 | FileCheck %s +// RUN: rm -f %t + +// NOTE: it is important that this test case contains no issues. It tests +// that serialize diagnostics work in the absence of any issues. + +// CHECK: Number of diagnostics: 0 diff --git a/clang/test/Misc/serialized-diags-single-issue.c b/clang/test/Misc/serialized-diags-single-issue.c new file mode 100644 index 000000000000..c24531617e9b --- /dev/null +++ b/clang/test/Misc/serialized-diags-single-issue.c @@ -0,0 +1,16 @@ +void foo() { + int voodoo; + voodoo = voodoo + 1; +} + +// RUN: %clang -Wall -fsyntax-only %s --serialize-diagnostics %t +// RUN: c-index-test -read-diagnostics %t 2>&1 | FileCheck %s +// RUN: rm -f %t + +// NOTE: it is important that this test case only contain a single issue. This test case checks +// if we can handle serialized diagnostics that contain only one diagnostic. + +// CHECK: {{.*}}serialized-diags-single-issue.c:3:12: warning: variable 'voodoo' is uninitialized when used here [-Wuninitialized] +// CHECK: Range: {{.*}}serialized-diags-single-issue.c:3:12 {{.*}}serialized-diags-single-issue.c:3:18 +// CHECK: +-{{.*}}serialized-diags-single-issue.c:2:13: note: initialize the variable 'voodoo' to silence this warning [] +// CHECK: +-FIXIT: {{.*}}serialized-diags-single-issue.c:2:13 - {{.*}}serialized-diags-single-issue.c:2:13): " = 0" \ No newline at end of file diff --git a/clang/test/Misc/serialized-diags.c b/clang/test/Misc/serialized-diags.c new file mode 100644 index 000000000000..31f279180f9c --- /dev/null +++ b/clang/test/Misc/serialized-diags.c @@ -0,0 +1,23 @@ +void foo() { + int voodoo; + voodoo = voodoo + 1; +} + +void bar() { + int dragon; + dragon = dragon + 1 +} + +// RUN: %clang -Wall -fsyntax-only %s --serialize-diagnostics %t 2>&1 /dev/null || true +// RUN: c-index-test -read-diagnostics %t 2>&1 | FileCheck %s +// RUN: rm -f %t + +// This test case tests that we can handle multiple diagnostics which contain +// FIXITs at different levels (one at the note, another at the main diagnostic). + +// CHECK: {{.*}}/serialized-diags.c:3:12: warning: variable 'voodoo' is uninitialized when used here [-Wuninitialized] +// CHECK: Range: {{.*}}/serialized-diags.c:3:12 {{.*}}/serialized-diags.c:3:18 +// CHECK: +-{{.*}}/serialized-diags.c:2:13: note: initialize the variable 'voodoo' to silence this warning [] +// CHECK: +-FIXIT: ({{.*}}/serialized-diags.c:2:13 - {{.*}}/serialized-diags.c:2:13): " = 0Parse Issueexpected ';' after expression" +// CHECK: {{.*}}/serialized-diags.c:8:22: error: expected ';' after expression [] +// CHECK: FIXIT: ({{.*}}/serialized-diags.c:8:22 - {{.*}}/serialized-diags.c:8:22): ";" \ No newline at end of file diff --git a/clang/tools/c-index-test/c-index-test.c b/clang/tools/c-index-test/c-index-test.c index eb992395f2b7..0860f1891e22 100644 --- a/clang/tools/c-index-test/c-index-test.c +++ b/clang/tools/c-index-test/c-index-test.c @@ -2307,8 +2307,12 @@ static const char *getSeverityString(enum CXDiagnosticSeverity severity) { } static void printIndent(unsigned indent) { + if (indent == 0) + return; + fprintf(stderr, "+"); + --indent; while (indent > 0) { - fprintf(stderr, " "); + fprintf(stderr, "-"); --indent; } } @@ -2366,8 +2370,6 @@ static void printDiagnosticSet(CXDiagnosticSet Diags, unsigned indent) { if (!Diags) return; - fprintf(stderr, "\n"); - n = clang_getNumDiagnosticsInSet(Diags); for (i = 0; i < n; ++i) { CXSourceLocation DiagLoc; @@ -2427,6 +2429,8 @@ static int read_diagnostics(const char *filename) { } printDiagnosticSet(Diags, 0); + fprintf(stderr, "Number of diagnostics: %d\n", + clang_getNumDiagnosticsInSet(Diags)); clang_disposeDiagnosticSet(Diags); return 0; }