Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
//===- ReachableCode.h -----------------------------------------*- C++ --*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// A flow-sensitive, path-insensitive analysis of unreachable code.
10
//
11
//===----------------------------------------------------------------------===//
12
 
13
#ifndef LLVM_CLANG_ANALYSIS_ANALYSES_REACHABLECODE_H
14
#define LLVM_CLANG_ANALYSIS_ANALYSES_REACHABLECODE_H
15
 
16
#include "clang/Basic/SourceLocation.h"
17
 
18
//===----------------------------------------------------------------------===//
19
// Forward declarations.
20
//===----------------------------------------------------------------------===//
21
 
22
namespace llvm {
23
  class BitVector;
24
}
25
 
26
namespace clang {
27
  class AnalysisDeclContext;
28
  class CFGBlock;
29
  class Preprocessor;
30
}
31
 
32
//===----------------------------------------------------------------------===//
33
// API.
34
//===----------------------------------------------------------------------===//
35
 
36
namespace clang {
37
namespace reachable_code {
38
 
39
/// Classifications of unreachable code.
40
enum UnreachableKind {
41
  UK_Return,
42
  UK_Break,
43
  UK_Loop_Increment,
44
  UK_Other
45
};
46
 
47
class Callback {
48
  virtual void anchor();
49
public:
50
  virtual ~Callback() {}
51
  virtual void HandleUnreachable(UnreachableKind UK,
52
                                 SourceLocation L,
53
                                 SourceRange ConditionVal,
54
                                 SourceRange R1,
55
                                 SourceRange R2) = 0;
56
};
57
 
58
/// ScanReachableFromBlock - Mark all blocks reachable from Start.
59
/// Returns the total number of blocks that were marked reachable.
60
unsigned ScanReachableFromBlock(const CFGBlock *Start,
61
                                llvm::BitVector &Reachable);
62
 
63
void FindUnreachableCode(AnalysisDeclContext &AC, Preprocessor &PP,
64
                         Callback &CB);
65
 
66
}} // end namespace clang::reachable_code
67
 
68
#endif