r375281 - [analyzer] Fix FieldRegion dumps.

Artem Dergachev via cfe-commits cfe-commits at lists.llvm.org
Fri Oct 18 13:15:39 PDT 2019


Author: dergachev
Date: Fri Oct 18 13:15:39 2019
New Revision: 375281

URL: http://llvm.org/viewvc/llvm-project?rev=375281&view=rev
Log:
[analyzer] Fix FieldRegion dumps.

The '->' thing has always been confusing; the actual operation '->'
translates to a pointer dereference together with adding a FieldRegion,
but FieldRegion on its own doesn't imply an additional pointer
dereference.

Modified:
    cfe/trunk/lib/StaticAnalyzer/Core/MemRegion.cpp
    cfe/trunk/test/Analysis/dump_egraph.cpp
    cfe/trunk/test/Analysis/exploded-graph-rewriter/initializers_under_construction.cpp
    cfe/trunk/test/Analysis/expr-inspection.c

Modified: cfe/trunk/lib/StaticAnalyzer/Core/MemRegion.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/MemRegion.cpp?rev=375281&r1=375280&r2=375281&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/MemRegion.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/MemRegion.cpp Fri Oct 18 13:15:39 2019
@@ -506,7 +506,7 @@ void ElementRegion::dumpToStream(raw_ost
 }
 
 void FieldRegion::dumpToStream(raw_ostream &os) const {
-  os << superRegion << "->" << *getDecl();
+  os << superRegion << "." << *getDecl();
 }
 
 void ObjCIvarRegion::dumpToStream(raw_ostream &os) const {

Modified: cfe/trunk/test/Analysis/dump_egraph.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/dump_egraph.cpp?rev=375281&r1=375280&r2=375281&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/dump_egraph.cpp (original)
+++ cfe/trunk/test/Analysis/dump_egraph.cpp Fri Oct 18 13:15:39 2019
@@ -20,7 +20,7 @@ void foo() {
 
 // CHECK: \"location_context\": \"#0 Call\", \"calling\": \"foo\", \"location\": null, \"items\": [\l        \{ \"stmt_id\": {{[0-9]+}}, \"kind\": \"construct into local variable\", \"argument_index\": null, \"pretty\": \"T t;\", \"value\": \"&t\"
 
-// CHECK: \"location_context\": \"#0 Call\", \"calling\": \"T::T\", \"location\": \{ \"line\": 16, \"column\": 5, \"file\": \"{{.*}}dump_egraph.cpp\" \}, \"items\": [\l        \{ \"init_id\": {{[0-9]+}}, \"kind\": \"construct into member variable\", \"argument_index\": null, \"pretty\": \"s\", \"value\": \"&t-\>s\"
+// CHECK: \"location_context\": \"#0 Call\", \"calling\": \"T::T\", \"location\": \{ \"line\": 16, \"column\": 5, \"file\": \"{{.*}}dump_egraph.cpp\" \}, \"items\": [\l        \{ \"init_id\": {{[0-9]+}}, \"kind\": \"construct into member variable\", \"argument_index\": null, \"pretty\": \"s\", \"value\": \"&t.s\"
 
 // CHECK: \"cluster\": \"t\", \"pointer\": \"{{0x[0-9a-f]+}}\", \"items\": [\l        \{ \"kind\": \"Default\", \"offset\": 0, \"value\": \"conj_$2\{int, LC5, no stmt, #1\}\"
 

Modified: cfe/trunk/test/Analysis/exploded-graph-rewriter/initializers_under_construction.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/exploded-graph-rewriter/initializers_under_construction.cpp?rev=375281&r1=375280&r2=375281&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/exploded-graph-rewriter/initializers_under_construction.cpp (original)
+++ cfe/trunk/test/Analysis/exploded-graph-rewriter/initializers_under_construction.cpp Fri Oct 18 13:15:39 2019
@@ -20,6 +20,6 @@ struct B {
 void test() {
   // CHECK: (construct into member variable)
   // CHECK-SAME: <td align="left">a</td>
-  // CHECK-SAME: <td align="left">&b->a</td>
+  // CHECK-SAME: <td align="left">&b.a</td>
   B b;
 }

Modified: cfe/trunk/test/Analysis/expr-inspection.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/expr-inspection.c?rev=375281&r1=375280&r2=375281&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/expr-inspection.c (original)
+++ cfe/trunk/test/Analysis/expr-inspection.c Fri Oct 18 13:15:39 2019
@@ -5,6 +5,7 @@
 // Self-tests for the debug.ExprInspection checker.
 
 void clang_analyzer_dump(int x);
+void clang_analyzer_dump_pointer(int *p);
 void clang_analyzer_printState();
 void clang_analyzer_numTimesReached();
 
@@ -30,7 +31,7 @@ void foo(int x) {
 // CHECK-NEXT:     ]}
 // CHECK-NEXT:   ]},
 // CHECK-NEXT:   "environment": { "pointer": "{{0x[0-9a-f]+}}", "items": [
-// CHECK-NEXT:     { "lctx_id": 1, "location_context": "#0 Call", "calling": "foo", "location": null, "items": [
+// CHECK-NEXT:     { "lctx_id": {{[0-9]+}}, "location_context": "#0 Call", "calling": "foo", "location": null, "items": [
 // CHECK-NEXT:       { "stmt_id": {{[0-9]+}}, "pretty": "clang_analyzer_printState", "value": "&code{clang_analyzer_printState}" }
 // CHECK-NEXT:     ]}
 // CHECK-NEXT:   ]},
@@ -43,3 +44,11 @@ void foo(int x) {
 // CHECK-NEXT:   "checker_messages": null
 // CHECK-NEXT: }
 
+struct S {
+  int x, y;
+};
+
+void test_field_dumps(struct S s, struct S *p) {
+  clang_analyzer_dump_pointer(&s.x); // expected-warning{{&s.x}}
+  clang_analyzer_dump_pointer(&p->x); // expected-warning{{&SymRegion{reg_$0<struct S * p>}.x}}
+}




More information about the cfe-commits mailing list