[clang] 29dff0d - [analyzer] Allow CFG dumps in release builds

Balazs Benics via cfe-commits cfe-commits at lists.llvm.org
Mon May 2 02:49:18 PDT 2022


Author: Balazs Benics
Date: 2022-05-02T11:48:52+02:00
New Revision: 29dff0d4fb46fe8f1e9774fd5e64d3e07937ff35

URL: https://github.com/llvm/llvm-project/commit/29dff0d4fb46fe8f1e9774fd5e64d3e07937ff35
DIFF: https://github.com/llvm/llvm-project/commit/29dff0d4fb46fe8f1e9774fd5e64d3e07937ff35.diff

LOG: [analyzer] Allow CFG dumps in release builds

This is a similar commit to D124442, but for CFG dumps.
The binary size diff remained the same demonstrated in that patch.

This time I'm adding tests for demonstrating that all the dump debug
checkers work - even in regular builds without asserts.

Reviewed By: martong

Differential Revision: https://reviews.llvm.org/D124443

Added: 
    clang/test/Analysis/debug-checkers.cpp

Modified: 
    clang/lib/Analysis/CFG.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/Analysis/CFG.cpp b/clang/lib/Analysis/CFG.cpp
index c80e4bcd7e89d..53d43bfa07b45 100644
--- a/clang/lib/Analysis/CFG.cpp
+++ b/clang/lib/Analysis/CFG.cpp
@@ -6127,17 +6127,13 @@ Stmt *CFGBlock::getTerminatorCondition(bool StripParens) {
 // CFG Graphviz Visualization
 //===----------------------------------------------------------------------===//
 
-#ifndef NDEBUG
-static StmtPrinterHelper* GraphHelper;
-#endif
+static StmtPrinterHelper *GraphHelper;
 
 void CFG::viewCFG(const LangOptions &LO) const {
-#ifndef NDEBUG
   StmtPrinterHelper H(this, LO);
   GraphHelper = &H;
   llvm::ViewGraph(this,"CFG");
   GraphHelper = nullptr;
-#endif
 }
 
 namespace llvm {
@@ -6146,8 +6142,7 @@ template<>
 struct DOTGraphTraits<const CFG*> : public DefaultDOTGraphTraits {
   DOTGraphTraits(bool isSimple = false) : DefaultDOTGraphTraits(isSimple) {}
 
-  static std::string getNodeLabel(const CFGBlock *Node, const CFG* Graph) {
-#ifndef NDEBUG
+  static std::string getNodeLabel(const CFGBlock *Node, const CFG *Graph) {
     std::string OutSStr;
     llvm::raw_string_ostream Out(OutSStr);
     print_block(Out,Graph, *Node, *GraphHelper, false, false);
@@ -6163,9 +6158,6 @@ struct DOTGraphTraits<const CFG*> : public DefaultDOTGraphTraits {
       }
 
     return OutStr;
-#else
-    return {};
-#endif
   }
 };
 

diff  --git a/clang/test/Analysis/debug-checkers.cpp b/clang/test/Analysis/debug-checkers.cpp
new file mode 100644
index 0000000000000..234edd762503a
--- /dev/null
+++ b/clang/test/Analysis/debug-checkers.cpp
@@ -0,0 +1,51 @@
+// RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.DumpDominators %s > %t 2>&1
+// RUN: FileCheck --input-file=%t %s -check-prefix=DOM-CHECK
+// DOM-CHECK: Immediate dominance tree (Node#,IDom#)
+
+// RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.DumpPostDominators %s > %t 2>&1
+// RUN: FileCheck --input-file=%t %s -check-prefix=POSTDOM-CHECK
+// POSTDOM-CHECK: Immediate post dominance tree (Node#,IDom#)
+
+// RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.DumpControlDependencies %s > %t 2>&1
+// RUN: FileCheck --input-file=%t %s -check-prefix=CTRLDEPS-CHECK
+// CTRLDEPS-CHECK: Control dependencies (Node#,Dependency#)
+
+// RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.DumpLiveVars %s > %t 2>&1
+// RUN: FileCheck --input-file=%t %s -check-prefix=LIVE-VARS-CHECK
+// LIVE-VARS-CHECK: live variables at block exit
+
+// RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.DumpLiveExprs %s > %t 2>&1
+// RUN: FileCheck --input-file=%t %s -check-prefix=LIVE-EXPRS-CHECK
+// LIVE-EXPRS-CHECK: live expressions at block exit
+
+// Skip testing CFGViewer.
+
+// RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.DumpCFG %s > %t 2>&1
+// RUN: FileCheck --input-file=%t %s -check-prefix=CFG-CHECK
+// CFG-CHECK: ENTRY
+
+// Skip testing CallGraphViewer.
+
+// RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.DumpCallGraph %s > %t 2>&1
+// RUN: FileCheck --input-file=%t %s -check-prefix=CALL-GRAPH-CHECK
+// CALL-GRAPH-CHECK: --- Call graph Dump ---
+
+// RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ConfigDumper %s > %t 2>&1
+// RUN: FileCheck --input-file=%t %s -check-prefix=CONFIG-CHECK
+// CONFIG-CHECK: [config]
+
+// Skip testing ExplodedGraphViewer.
+
+// RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ReportStmts %s > %t 2>&1
+// RUN: FileCheck --input-file=%t %s -check-prefix=REPORT-STMTS-CHECK
+// REPORT-STMTS-CHECK: warning: Statement
+
+void foo(int *p) {
+  *p = 3;
+}
+
+int bar() {
+  int x;
+  foo(&x);
+  return x;
+}


        


More information about the cfe-commits mailing list