diff options
Diffstat (limited to 'clang/lib/Analysis/FlowSensitive/DebugSupport.cpp')
-rw-r--r-- | clang/lib/Analysis/FlowSensitive/DebugSupport.cpp | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/clang/lib/Analysis/FlowSensitive/DebugSupport.cpp b/clang/lib/Analysis/FlowSensitive/DebugSupport.cpp index 714ad08643ed..d4886f154b33 100644 --- a/clang/lib/Analysis/FlowSensitive/DebugSupport.cpp +++ b/clang/lib/Analysis/FlowSensitive/DebugSupport.cpp @@ -18,6 +18,7 @@ #include "clang/Analysis/FlowSensitive/Value.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/STLExtras.h" +#include "llvm/ADT/StringRef.h" #include "llvm/ADT/StringSet.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/FormatAdapters.h" @@ -31,7 +32,35 @@ using llvm::AlignStyle; using llvm::fmt_pad; using llvm::formatv; -std::string debugString(Solver::Result::Assignment Assignment) { +llvm::StringRef debugString(Value::Kind Kind) { + switch (Kind) { + case Value::Kind::Integer: + return "Integer"; + case Value::Kind::Reference: + return "Reference"; + case Value::Kind::Pointer: + return "Pointer"; + case Value::Kind::Struct: + return "Struct"; + case Value::Kind::AtomicBool: + return "AtomicBool"; + case Value::Kind::TopBool: + return "TopBool"; + case Value::Kind::Conjunction: + return "Conjunction"; + case Value::Kind::Disjunction: + return "Disjunction"; + case Value::Kind::Negation: + return "Negation"; + case Value::Kind::Implication: + return "Implication"; + case Value::Kind::Biconditional: + return "Biconditional"; + } + llvm_unreachable("Unhandled value kind"); +} + +llvm::StringRef debugString(Solver::Result::Assignment Assignment) { switch (Assignment) { case Solver::Result::Assignment::AssignedFalse: return "False"; @@ -41,7 +70,7 @@ std::string debugString(Solver::Result::Assignment Assignment) { llvm_unreachable("Booleans can only be assigned true/false"); } -std::string debugString(Solver::Result::Status Status) { +llvm::StringRef debugString(Solver::Result::Status Status) { switch (Status) { case Solver::Result::Status::Satisfiable: return "Satisfiable"; @@ -156,7 +185,7 @@ Constraints auto StatusString = clang::dataflow::debugString(Result.getStatus()); auto Solution = Result.getSolution(); - auto SolutionString = Solution ? "\n" + debugString(Solution.value()) : ""; + auto SolutionString = Solution ? "\n" + debugString(*Solution) : ""; return formatv( Template, |