diff options
| author | Aleksei Sidorin <a.sidorin@samsung.com> | 2016-09-01 12:25:16 +0000 |
|---|---|---|
| committer | Aleksei Sidorin <a.sidorin@samsung.com> | 2016-09-01 12:25:16 +0000 |
| commit | e1beaf1ee7fb57a6af5b555b5eb0462c0090b906 (patch) | |
| tree | 51c1358612972a1485e4cb4afc67f50e911709a7 /clang/test | |
| parent | 25df3b853bb6db0c2208f92c37863a3edc35d831 (diff) | |
| download | bcm5719-llvm-e1beaf1ee7fb57a6af5b555b5eb0462c0090b906.tar.gz bcm5719-llvm-e1beaf1ee7fb57a6af5b555b5eb0462c0090b906.zip | |
[analyzer] Add more FileIDs to PlistDiagnostic map to avoid assertion
Some FileIDs that may be used by PlistDiagnostics were not added while building
a list of pieces. This caused assertion violation in GetFID() function.
This patch adds some missing FileIDs to avoid the assertion. It also contains
small refactoring of PlistDiagnostics::FlushDiagnosticsImpl().
Patch by Aleksei Sidorin, Ilya Palachev.
Differential Revision: https://reviews.llvm.org/D22090
llvm-svn: 280360
Diffstat (limited to 'clang/test')
3 files changed, 150 insertions, 0 deletions
diff --git a/clang/test/Analysis/diagnostics/Inputs/include/plist-diagnostics-include-check-macro.def b/clang/test/Analysis/diagnostics/Inputs/include/plist-diagnostics-include-check-macro.def new file mode 100644 index 00000000000..9bbd9366906 --- /dev/null +++ b/clang/test/Analysis/diagnostics/Inputs/include/plist-diagnostics-include-check-macro.def @@ -0,0 +1 @@ +PLIST_DEF_MACRO diff --git a/clang/test/Analysis/diagnostics/Inputs/include/plist-diagnostics-include-check-macro.h b/clang/test/Analysis/diagnostics/Inputs/include/plist-diagnostics-include-check-macro.h new file mode 100644 index 00000000000..9ce68ed08d1 --- /dev/null +++ b/clang/test/Analysis/diagnostics/Inputs/include/plist-diagnostics-include-check-macro.h @@ -0,0 +1,9 @@ +void clang_analyzer_warnIfReached(); + +class PlistCheckMacro { +public: + PlistCheckMacro () { } + void run() { + clang_analyzer_warnIfReached(); + } +}; diff --git a/clang/test/Analysis/diagnostics/plist-diagnostics-include-check.cpp b/clang/test/Analysis/diagnostics/plist-diagnostics-include-check.cpp new file mode 100644 index 00000000000..6ed39451a8b --- /dev/null +++ b/clang/test/Analysis/diagnostics/plist-diagnostics-include-check.cpp @@ -0,0 +1,140 @@ +// RUN: %clang_cc1 -analyze -analyzer-checker=debug.ExprInspection -analyzer-output=plist-multi-file %s -o %t.plist +// RUN: FileCheck --input-file=%t.plist %s + +#include "Inputs/include/plist-diagnostics-include-check-macro.h" + +void foo() { + PlistCheckMacro() +#define PLIST_DEF_MACRO .run(); +#include "Inputs/include/plist-diagnostics-include-check-macro.def" +} + +// CHECK: <key>diagnostics</key> +// CHECK-NEXT: <array> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>path</key> +// CHECK-NEXT: <array> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>kind</key><string>event</string> +// CHECK-NEXT: <key>location</key> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>7</integer> +// CHECK-NEXT: <key>col</key><integer>3</integer> +// CHECK-NEXT: <key>file</key><integer>0</integer> +// CHECK-NEXT: </dict> +// CHECK-NEXT: <key>ranges</key> +// CHECK-NEXT: <array> +// CHECK-NEXT: <array> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>7</integer> +// CHECK-NEXT: <key>col</key><integer>3</integer> +// CHECK-NEXT: <key>file</key><integer>0</integer> +// CHECK-NEXT: </dict> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>1</integer> +// CHECK-NEXT: <key>col</key><integer>15</integer> +// CHECK-NEXT: <key>file</key><integer>2</integer> +// CHECK-NEXT: </dict> +// CHECK-NEXT: </array> +// CHECK-NEXT: </array> +// CHECK-NEXT: <key>depth</key><integer>0</integer> +// CHECK-NEXT: <key>extended_message</key> +// CHECK-NEXT: <string>Calling 'PlistCheckMacro::run'</string> +// CHECK-NEXT: <key>message</key> +// CHECK-NEXT: <string>Calling 'PlistCheckMacro::run'</string> +// CHECK-NEXT: </dict> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>kind</key><string>event</string> +// CHECK-NEXT: <key>location</key> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>6</integer> +// CHECK-NEXT: <key>col</key><integer>3</integer> +// CHECK-NEXT: <key>file</key><integer>1</integer> +// CHECK-NEXT: </dict> +// CHECK-NEXT: <key>depth</key><integer>1</integer> +// CHECK-NEXT: <key>extended_message</key> +// CHECK-NEXT: <string>Entered call from 'foo'</string> +// CHECK-NEXT: <key>message</key> +// CHECK-NEXT: <string>Entered call from 'foo'</string> +// CHECK-NEXT: </dict> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>kind</key><string>control</string> +// CHECK-NEXT: <key>edges</key> +// CHECK-NEXT: <array> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>start</key> +// CHECK-NEXT: <array> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>6</integer> +// CHECK-NEXT: <key>col</key><integer>3</integer> +// CHECK-NEXT: <key>file</key><integer>1</integer> +// CHECK-NEXT: </dict> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>6</integer> +// CHECK-NEXT: <key>col</key><integer>6</integer> +// CHECK-NEXT: <key>file</key><integer>1</integer> +// CHECK-NEXT: </dict> +// CHECK-NEXT: </array> +// CHECK-NEXT: <key>end</key> +// CHECK-NEXT: <array> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>7</integer> +// CHECK-NEXT: <key>col</key><integer>5</integer> +// CHECK-NEXT: <key>file</key><integer>1</integer> +// CHECK-NEXT: </dict> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>7</integer> +// CHECK-NEXT: <key>col</key><integer>32</integer> +// CHECK-NEXT: <key>file</key><integer>1</integer> +// CHECK-NEXT: </dict> +// CHECK-NEXT: </array> +// CHECK-NEXT: </dict> +// CHECK-NEXT: </array> +// CHECK-NEXT: </dict> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>kind</key><string>event</string> +// CHECK-NEXT: <key>location</key> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>7</integer> +// CHECK-NEXT: <key>col</key><integer>5</integer> +// CHECK-NEXT: <key>file</key><integer>1</integer> +// CHECK-NEXT: </dict> +// CHECK-NEXT: <key>ranges</key> +// CHECK-NEXT: <array> +// CHECK-NEXT: <array> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>7</integer> +// CHECK-NEXT: <key>col</key><integer>5</integer> +// CHECK-NEXT: <key>file</key><integer>1</integer> +// CHECK-NEXT: </dict> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>7</integer> +// CHECK-NEXT: <key>col</key><integer>34</integer> +// CHECK-NEXT: <key>file</key><integer>1</integer> +// CHECK-NEXT: </dict> +// CHECK-NEXT: </array> +// CHECK-NEXT: </array> +// CHECK-NEXT: <key>depth</key><integer>1</integer> +// CHECK-NEXT: <key>extended_message</key> +// CHECK-NEXT: <string>REACHABLE</string> +// CHECK-NEXT: <key>message</key> +// CHECK-NEXT: <string>REACHABLE</string> +// CHECK-NEXT: </dict> +// CHECK-NEXT: </array> +// CHECK-NEXT: <key>description</key><string>REACHABLE</string> +// CHECK-NEXT: <key>category</key><string>debug</string> +// CHECK-NEXT: <key>type</key><string>Checking analyzer assumptions</string> +// CHECK-NEXT: <key>check_name</key><string>debug.ExprInspection</string> +// CHECK-NEXT: <!-- This hash is experimental and going to change! --> +// CHECK-NEXT: <key>issue_hash_content_of_line_in_context</key><string>93b4eab05b21c892c8e31723e5af3f59</string> +// CHECK-NEXT: <key>issue_context_kind</key><string>C++ method</string> +// CHECK-NEXT: <key>issue_context</key><string>run</string> +// CHECK-NEXT: <key>issue_hash_function_offset</key><string>1</string> +// CHECK-NEXT: <key>location</key> +// CHECK-NEXT: <dict> +// CHECK-NEXT: <key>line</key><integer>7</integer> +// CHECK-NEXT: <key>col</key><integer>5</integer> +// CHECK-NEXT: <key>file</key><integer>1</integer> +// CHECK-NEXT: </dict> +// CHECK-NEXT: </dict> +// CHECK-NEXT: </array> |

