[PATCH] D103967: [Analyzer][solver] Add dump methods for (dis)equality classes.

Gabor Marton via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Jun 9 08:09:56 PDT 2021


martong updated this revision to Diff 350905.
martong added a comment.

- Change comment


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D103967/new/

https://reviews.llvm.org/D103967

Files:
  clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp


Index: clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp
===================================================================
--- clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp
+++ clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp
@@ -584,6 +584,11 @@
   LLVM_NODISCARD static inline Optional<bool>
   areEqual(ProgramStateRef State, SymbolRef First, SymbolRef Second);
 
+  void dumpToStream(ProgramStateRef State, raw_ostream &os) const;
+  LLVM_DUMP_METHOD void dump(ProgramStateRef State) const {
+    dumpToStream(State, llvm::errs());
+  }
+
   /// Check equivalence data for consistency.
   LLVM_NODISCARD LLVM_ATTRIBUTE_UNUSED static bool
   isClassDataConsistent(ProgramStateRef State);
@@ -640,6 +645,46 @@
   uintptr_t ID;
 };
 
+//===----------------------------------------------------------------------===//
+//                             Dump functions
+//===----------------------------------------------------------------------===//
+
+/// Dump all equivalence classes.
+LLVM_DUMP_METHOD static void dumpEqToStream(ProgramStateRef State,
+                                            raw_ostream &os) {
+  ClassMembersTy Members = State->get<ClassMembers>();
+  for (std::pair<EquivalenceClass, SymbolSet> ClassToSymbolSet : Members) {
+    EquivalenceClass Class = ClassToSymbolSet.first;
+    Class.dumpToStream(State, os);
+    os << "\n";
+  }
+}
+LLVM_DUMP_METHOD static void dumpEq(ProgramStateRef State) {
+  dumpEqToStream(State, llvm::errs());
+}
+
+/// Dump all equivalence classes along with their disequivalent classes if they
+/// have any.
+LLVM_DUMP_METHOD static void dumpDisEqToStream(ProgramStateRef State,
+                                               raw_ostream &os) {
+  DisequalityMapTy Disequalities = State->get<DisequalityMap>();
+  for (std::pair<EquivalenceClass, ClassSet> ClassToDisEqSet : Disequalities) {
+    EquivalenceClass Class = ClassToDisEqSet.first;
+    Class.dumpToStream(State, os);
+    ClassSet DisequalClasses = ClassToDisEqSet.second;
+    if (!DisequalClasses.isEmpty()) {
+      for (EquivalenceClass DisEqClass : DisequalClasses) {
+        os << "DisequalTo:\n";
+        DisEqClass.dumpToStream(State, os);
+      }
+    }
+    os << "\n";
+  }
+}
+LLVM_DUMP_METHOD static void dumpDisEq(ProgramStateRef State) {
+  dumpDisEqToStream(State, llvm::errs());
+}
+
 //===----------------------------------------------------------------------===//
 //                             Constraint functions
 //===----------------------------------------------------------------------===//
@@ -1589,6 +1634,15 @@
 //                     EqualityClass implementation details
 //===----------------------------------------------------------------------===//
 
+LLVM_DUMP_METHOD void EquivalenceClass::dumpToStream(ProgramStateRef State,
+                                                     raw_ostream &os) const {
+  SymbolSet ClassMembers = getClassMembers(State);
+  for (const SymbolRef &MemberSym : ClassMembers) {
+    MemberSym->dump();
+    os << "\n";
+  }
+}
+
 inline EquivalenceClass EquivalenceClass::find(ProgramStateRef State,
                                                SymbolRef Sym) {
   // We store far from all Symbol -> Class mappings


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D103967.350905.patch
Type: text/x-patch
Size: 3241 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210609/0f4e92bd/attachment.bin>


More information about the cfe-commits mailing list