mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-01 13:20:25 +00:00
[analyzer] Remove forbidden characters from a filename for a graph dump on Windows
Summary: Windows forbidden file path characters are used in a field `file`, while creating a dump `dot` file using an argument -analyzer-dump-egraph. It specifically relates to angle brackets when using `<scratch space>`, `<built-in>`, `<command line>` values in filenames. It causes that script exploded-graph-rewriter.py incorrectly parses the dump. Fix: Remove forbidden characters from filename for Windows platform, when creating graph dump file. Differential Revision: https://reviews.llvm.org/D82103
This commit is contained in:
parent
02022ff2e3
commit
be9c581835
@ -13,7 +13,7 @@
|
||||
#include "clang/Basic/SourceManager.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
|
||||
#include <iterator>
|
||||
|
||||
namespace clang {
|
||||
|
||||
@ -98,7 +98,16 @@ inline void printSourceLocationAsJson(raw_ostream &Out, SourceLocation Loc,
|
||||
if (AddBraces)
|
||||
Out << "{ ";
|
||||
std::string filename(PLoc.getFilename());
|
||||
#ifdef _WIN32 // Handle windows-specific path delimiters.
|
||||
#ifdef _WIN32
|
||||
// Remove forbidden Windows path characters
|
||||
auto RemoveIt =
|
||||
std::remove_if(filename.begin(), filename.end(), [](auto Char) {
|
||||
static const char ForbiddenChars[] = "<>*?\"|";
|
||||
return std::find(std::begin(ForbiddenChars), std::end(ForbiddenChars),
|
||||
Char) != std::end(ForbiddenChars);
|
||||
});
|
||||
filename.erase(RemoveIt, filename.end());
|
||||
// Handle windows-specific path delimiters.
|
||||
std::replace(filename.begin(), filename.end(), '\\', '/');
|
||||
#endif
|
||||
Out << "\"line\": " << PLoc.getLine()
|
||||
|
@ -0,0 +1,20 @@
|
||||
// FIXME: Figure out how to use %clang_analyze_cc1 with our lit.local.cfg.
|
||||
// RUN: %clang_cc1 -analyze -triple x86_64-unknown-linux-gnu \
|
||||
// RUN: -analyzer-checker=core \
|
||||
// RUN: -analyzer-dump-egraph=%t.dot %s
|
||||
// RUN: %exploded_graph_rewriter --verbose %t.dot 2>&1 | FileCheck %s
|
||||
// REQUIRES: asserts
|
||||
// UNSUPPORTED: !windows
|
||||
|
||||
// Angle brackets shall not be presented in the field `file`,
|
||||
// because exploded_graph_rewriter handles it as a file path
|
||||
// and such symbols are forbidden on Windows platform.
|
||||
|
||||
void test() {
|
||||
// This produces angle brackets.
|
||||
char text[] = __FILE__;
|
||||
}
|
||||
|
||||
// This test is passed if exploded_graph_rewriter handles dot file without errors.
|
||||
// CHECK: DEBUG:root:Line: digraph "Exploded Graph"
|
||||
// CHECK: \"file\": \"scratch space\"
|
Loading…
Reference in New Issue
Block a user