[PATCH] D82092: [analyzer] Handle `\l` symbol in Windows specific file paths in exploded-graph-rewriter
Denys Petrov via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Jun 19 02:39:20 PDT 2020
ASDenysPetrov updated this revision to Diff 271968.
ASDenysPetrov added a comment.
Fixed clang-format.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D82092/new/
https://reviews.llvm.org/D82092
Files:
clang/test/Analysis/exploded-graph-rewriter/l_directory_from_l/win_file_macros.cpp
clang/utils/analyzer/exploded-graph-rewriter.py
Index: clang/utils/analyzer/exploded-graph-rewriter.py
===================================================================
--- clang/utils/analyzer/exploded-graph-rewriter.py
+++ clang/utils/analyzer/exploded-graph-rewriter.py
@@ -368,8 +368,7 @@
self.root_id = node_id
# Note: when writing tests you don't need to escape everything,
# even though in a valid dot file everything is escaped.
- node_label = result.group(2).replace('\\l', '') \
- .replace(' ', '') \
+ node_label = result.group(2).replace(' ', '') \
.replace('\\"', '"') \
.replace('\\{', '{') \
.replace('\\}', '}') \
@@ -378,6 +377,15 @@
.replace('\\<', '\\\\<') \
.replace('\\>', '\\\\>') \
.rstrip(',')
+ # Handle `\l` separately for Windows, because macros __FILE__ produces
+ # Windows specific delimiters `\` and sometimes it happens
+ # when directory name starts with the letter `l`.
+ if sys.platform == 'win32':
+ # Find all `\l` (like `,\l`, `}\l`, `[\l`) except `\\l`,
+ # because __FILE__ containes multiple `\` before `\l`.
+ node_label = re.sub(r'(?<!\\)\\l', '', node_label)
+ else:
+ node_label = node_label.replace('\\l', '')
logging.debug(node_label)
json_node = json.loads(node_label)
self.nodes[node_id].construct(node_id, json_node)
Index: clang/test/Analysis/exploded-graph-rewriter/l_directory_from_l/win_file_macros.cpp
===================================================================
--- /dev/null
+++ clang/test/Analysis/exploded-graph-rewriter/l_directory_from_l/win_file_macros.cpp
@@ -0,0 +1,26 @@
+// 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 %t.dot | FileCheck %s
+// REQUIRES: asserts
+// UNSUPPORTED: !windows
+
+// This test checks a special case when `\l` can be not only as a new-line symbol,
+// but as a start of the directory name on Windows platform.
+// This occures when using __FILE__ macros.
+
+extern void __assert_fail(__const char *__assertion, __const char *__file,
+ unsigned int __line, __const char *__function)
+ __attribute__((__noreturn__));
+#define assert(expr) \
+ ((expr) ? (void)(0) : __assert_fail(#expr, __FILE__, __LINE__, __func__))
+
+int test1(int i) {
+ //Here `assert` produces angle brackets and uses __FILE__ macros.
+ assert(i);
+ return i;
+}
+
+// This test is passed if exploded_graph_rewriter handles dot file without errors.
+// CHECK: digraph "ExplodedGraph"
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D82092.271968.patch
Type: text/x-patch
Size: 3094 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200619/f1132689/attachment-0001.bin>
More information about the cfe-commits
mailing list