diff --git a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp index 2cef99157c7f..38422eb1b1be 100644 --- a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp +++ b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp @@ -3009,7 +3009,7 @@ struct DOTGraphTraits : public DefaultDOTGraphTraits { for (const auto &EQ : EQClasses) { for (const BugReport &Report : EQ) { - if (Report.getErrorNode() == N) + if (Report.getErrorNode()->getState() == N->getState()) return true; } } @@ -3109,11 +3109,7 @@ struct DOTGraphTraits : public DefaultDOTGraphTraits { Indent(Out, Space, IsDot) << "\"program_state\": null"; } - Out << "\\l}"; - if (!N->succ_empty()) - Out << ','; - Out << "\\l"; - + Out << "\\l}\\l"; return Out.str(); } }; diff --git a/clang/test/Analysis/dump_egraph.c b/clang/test/Analysis/dump_egraph.c index f1ac03b10cc9..701e98507983 100644 --- a/clang/test/Analysis/dump_egraph.c +++ b/clang/test/Analysis/dump_egraph.c @@ -1,6 +1,12 @@ -// RUN: %clang_analyze_cc1 -analyzer-checker=core -analyzer-dump-egraph=%t.dot %s +// RUN: %clang_analyze_cc1 -analyzer-checker=core \ +// RUN: -analyzer-dump-egraph=%t.dot %s // RUN: cat %t.dot | FileCheck %s -// RUN: %clang_analyze_cc1 -analyzer-checker=core -analyzer-dump-egraph=%t.dot -trim-egraph %s + +// RUN: %clang_analyze_cc1 -analyzer-checker=core \ +// RUN: -analyzer-dump-egraph=%t.dot \ +// RUN: -trim-egraph %s +// RUN: cat %t.dot | FileCheck %s + // REQUIRES: asserts int getJ(); @@ -10,8 +16,6 @@ int foo() { return *x + *y; } -// CHECK: digraph "Exploded Graph" { - // CHECK: \"program_points\": [\l    \{ \"kind\": \"Edge\", \"src_id\": 2, \"dst_id\": 1, \"terminator\": null, \"term_kind\": null, \"tag\": null \}\l  ],\l  \"program_state\": null // CHECK: \"program_points\": [\l    \{ \"kind\": \"BlockEntrance\", \"block_id\": 1