Skip to content

Commit dbb95c2

Browse files
committed
[clang][dataflow] Debug string for value kinds.
Differential Revision: https://reviews.llvm.org/D131891
1 parent bd5cc65 commit dbb95c2

File tree

2 files changed

+35
-4
lines changed

2 files changed

+35
-4
lines changed

clang/include/clang/Analysis/FlowSensitive/DebugSupport.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,19 @@
2020
#include "clang/Analysis/FlowSensitive/Solver.h"
2121
#include "clang/Analysis/FlowSensitive/Value.h"
2222
#include "llvm/ADT/DenseMap.h"
23+
#include "llvm/ADT/StringRef.h"
2324

2425
namespace clang {
2526
namespace dataflow {
2627

28+
/// Returns a string representation of a value kind.
29+
llvm::StringRef debugString(Value::Kind Kind);
30+
2731
/// Returns a string representation of a boolean assignment to true or false.
28-
std::string debugString(Solver::Result::Assignment Assignment);
32+
llvm::StringRef debugString(Solver::Result::Assignment Assignment);
2933

3034
/// Returns a string representation of the result status of a SAT check.
31-
std::string debugString(Solver::Result::Status Status);
35+
llvm::StringRef debugString(Solver::Result::Status Status);
3236

3337
/// Returns a string representation for the boolean value `B`.
3438
///

clang/lib/Analysis/FlowSensitive/DebugSupport.cpp

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "clang/Analysis/FlowSensitive/Value.h"
1919
#include "llvm/ADT/DenseMap.h"
2020
#include "llvm/ADT/STLExtras.h"
21+
#include "llvm/ADT/StringRef.h"
2122
#include "llvm/ADT/StringSet.h"
2223
#include "llvm/Support/ErrorHandling.h"
2324
#include "llvm/Support/FormatAdapters.h"
@@ -31,7 +32,33 @@ using llvm::AlignStyle;
3132
using llvm::fmt_pad;
3233
using llvm::formatv;
3334

34-
std::string debugString(Solver::Result::Assignment Assignment) {
35+
llvm::StringRef debugString(Value::Kind Kind) {
36+
switch (Kind) {
37+
case Value::Kind::Integer:
38+
return "Integer";
39+
case Value::Kind::Reference:
40+
return "Reference";
41+
case Value::Kind::Pointer:
42+
return "Pointer";
43+
case Value::Kind::Struct:
44+
return "Struct";
45+
case Value::Kind::AtomicBool:
46+
return "AtomicBool";
47+
case Value::Kind::Conjunction:
48+
return "Conjunction";
49+
case Value::Kind::Disjunction:
50+
return "Disjunction";
51+
case Value::Kind::Negation:
52+
return "Negation";
53+
case Value::Kind::Implication:
54+
return "Implication";
55+
case Value::Kind::Biconditional:
56+
return "Biconditional";
57+
}
58+
llvm_unreachable("Unhandled value kind");
59+
}
60+
61+
llvm::StringRef debugString(Solver::Result::Assignment Assignment) {
3562
switch (Assignment) {
3663
case Solver::Result::Assignment::AssignedFalse:
3764
return "False";
@@ -41,7 +68,7 @@ std::string debugString(Solver::Result::Assignment Assignment) {
4168
llvm_unreachable("Booleans can only be assigned true/false");
4269
}
4370

44-
std::string debugString(Solver::Result::Status Status) {
71+
llvm::StringRef debugString(Solver::Result::Status Status) {
4572
switch (Status) {
4673
case Solver::Result::Status::Satisfiable:
4774
return "Satisfiable";

0 commit comments

Comments
 (0)