clang: include/clang/Analysis/Analyses/PostOrderCFGView.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13#ifndef LLVM_CLANG_ANALYSIS_ANALYSES_POSTORDERCFGVIEW_H

14#define LLVM_CLANG_ANALYSIS_ANALYSES_POSTORDERCFGVIEW_H

15

19#include "llvm/ADT/BitVector.h"

20#include "llvm/ADT/DenseMap.h"

21#include "llvm/ADT/PostOrderIterator.h"

22#include

23#include

24

26

28 virtual void anchor();

29

30public:

31

32

33

34

35

36

38 llvm::BitVector VisitedBlockIDs;

39

40 public:

41

42

44

47

48

49

51

52

53

54

56 return std::make_pair(std::nullopt,

57 false);

58 if (VisitedBlockIDs.test(Block->getBlockID()))

59 return std::make_pair(std::nullopt, false);

60 VisitedBlockIDs.set(Block->getBlockID());

61 return std::make_pair(std::nullopt, true);

62 }

63

64

65

66

68 return VisitedBlockIDs.test(Block->getBlockID());

69 }

70 };

71

72private:

73

74

75

76

77

78

79

80

81

82

83 struct CFGLoopBodyFirstTraits {

84 using NodeRef = const ::clang::CFGBlock *;

86

87 static ChildIteratorType child_begin(NodeRef N) { return N->succ_rbegin(); }

88 static ChildIteratorType child_end(NodeRef N) { return N->succ_rend(); }

89

91

92 static NodeRef getEntryNode(const ::clang::CFG *F) {

93 return &F->getEntry();

94 }

95

96 static nodes_iterator nodes_begin(const ::clang::CFG *F) {

97 return F->nodes_begin();

98 }

99

100 static nodes_iterator nodes_end(const ::clang::CFG *F) {

101 return F->nodes_end();

102 }

103

104 static unsigned size(const ::clang::CFG *F) { return F->size(); }

105 };

106 using po_iterator =

107 llvm::po_iterator<const CFG *, CFGBlockSet, true, CFGLoopBodyFirstTraits>;

108 std::vector<const CFGBlock *> Blocks;

109

110 using BlockOrderTy = llvm::DenseMap<const CFGBlock *, unsigned>;

111 BlockOrderTy BlockOrder;

112

113public:

115

116 using iterator = std::vector<const CFGBlock *>::reverse_iterator;

117 using const_iterator = std::vector<const CFGBlock *>::const_reverse_iterator;

118

120

123

126

128

131

132 public:

134

136 };

137

141

142

143 static const void *getTag();

144

145 static std::unique_ptr

147};

148

149}

150

151#endif

This file defines AnalysisDeclContext, a class that manages the analysis context data for context sen...

Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.

AnalysisDeclContext contains the context data for the function, method or block under analysis.

Represents a single basic block in a source-level CFG.

AdjacentBlocks::const_reverse_iterator const_succ_reverse_iterator

Represents a source-level, intra-procedural CFG that represents the control-flow of a Stmt.

CFGBlockListTy::const_iterator const_iterator

ManagedAnalysis()=default

CFGBlockSet(const CFG *G)

Definition PostOrderCFGView.h:46

std::pair< std::nullopt_t, bool > insert(const CFGBlock *Block)

Set the bit associated with a particular CFGBlock.

Definition PostOrderCFGView.h:50

bool alreadySet(const CFGBlock *Block)

Check if the bit for a CFGBlock has been already set.

Definition PostOrderCFGView.h:67

BlockOrderCompare getComparator() const

Definition PostOrderCFGView.h:138

iterator begin()

Definition PostOrderCFGView.h:121

const_iterator begin() const

Definition PostOrderCFGView.h:124

PostOrderCFGView(const CFG *cfg)

bool empty() const

Definition PostOrderCFGView.h:127

std::vector< const CFGBlock * >::reverse_iterator iterator

Definition PostOrderCFGView.h:116

static std::unique_ptr< PostOrderCFGView > create(AnalysisDeclContext &analysisContext)

friend struct BlockOrderCompare

Definition PostOrderCFGView.h:114

iterator end()

Definition PostOrderCFGView.h:122

std::vector< const CFGBlock * >::const_reverse_iterator const_iterator

Definition PostOrderCFGView.h:117

const_iterator end() const

Definition PostOrderCFGView.h:125

static const void * getTag()

The JSON file list parser is used to communicate input to InstallAPI.

Definition PostOrderCFGView.h:129

BlockOrderCompare(const PostOrderCFGView &pov)

Definition PostOrderCFGView.h:133

bool operator()(const CFGBlock *b1, const CFGBlock *b2) const

const PostOrderCFGView & POV

Definition PostOrderCFGView.h:130

Definition PostOrderCFGView.h:43

const CFGBlock * value_type

Definition PostOrderCFGView.h:43