#pragma once #ifdef __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-parameter" #endif //===-- DebugSupport.h ------------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines functions which generate more readable forms of data // structures used in the dataflow analyses, for debugging purposes. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_ANALYSIS_FLOWSENSITIVE_DEBUGSUPPORT_H_ #define LLVM_CLANG_ANALYSIS_FLOWSENSITIVE_DEBUGSUPPORT_H_ #include #include #include "clang/Analysis/FlowSensitive/Solver.h" #include "clang/Analysis/FlowSensitive/Value.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/StringRef.h" namespace clang { namespace dataflow { /// Returns a string representation of a value kind. llvm::StringRef debugString(Value::Kind Kind); /// Returns a string representation of a boolean assignment to true or false. llvm::StringRef debugString(Solver::Result::Assignment Assignment); /// Returns a string representation of the result status of a SAT check. llvm::StringRef debugString(Solver::Result::Status Status); /// Returns a string representation for the boolean value `B`. /// /// Atomic booleans appearing in the boolean value `B` are assigned to labels /// either specified in `AtomNames` or created by default rules as B0, B1, ... /// /// Requirements: /// /// Names assigned to atoms should not be repeated in `AtomNames`. std::string debugString( const BoolValue &B, llvm::DenseMap AtomNames = {{}}); /// Returns a string representation for `Constraints` - a collection of boolean /// formulas. /// /// Atomic booleans appearing in the boolean value `Constraints` are assigned to /// labels either specified in `AtomNames` or created by default rules as B0, /// B1, ... /// /// Requirements: /// /// Names assigned to atoms should not be repeated in `AtomNames`. std::string debugString( const llvm::DenseSet &Constraints, llvm::DenseMap AtomNames = {{}}); /// Returns a string representation for `Constraints` - a collection of boolean /// formulas and the `Result` of satisfiability checking. /// /// Atomic booleans appearing in `Constraints` and `Result` are assigned to /// labels either specified in `AtomNames` or created by default rules as B0, /// B1, ... /// /// Requirements: /// /// Names assigned to atoms should not be repeated in `AtomNames`. std::string debugString( ArrayRef Constraints, const Solver::Result &Result, llvm::DenseMap AtomNames = {{}}); inline std::string debugString( const llvm::DenseSet &Constraints, const Solver::Result &Result, llvm::DenseMap AtomNames = {{}}) { std::vector ConstraintsVec(Constraints.begin(), Constraints.end()); return debugString(ConstraintsVec, Result, std::move(AtomNames)); } } // namespace dataflow } // namespace clang #endif // LLVM_CLANG_ANALYSIS_FLOWSENSITIVE_DEBUGSUPPORT_H_ #ifdef __GNUC__ #pragma GCC diagnostic pop #endif