summaryrefslogtreecommitdiff
path: root/clang-r353983/include/clang/Analysis/Analyses/ReachableCode.h
diff options
context:
space:
mode:
Diffstat (limited to 'clang-r353983/include/clang/Analysis/Analyses/ReachableCode.h')
-rw-r--r--clang-r353983/include/clang/Analysis/Analyses/ReachableCode.h68
1 files changed, 68 insertions, 0 deletions
diff --git a/clang-r353983/include/clang/Analysis/Analyses/ReachableCode.h b/clang-r353983/include/clang/Analysis/Analyses/ReachableCode.h
new file mode 100644
index 00000000..514b9458
--- /dev/null
+++ b/clang-r353983/include/clang/Analysis/Analyses/ReachableCode.h
@@ -0,0 +1,68 @@
+//===- ReachableCode.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
+//
+//===----------------------------------------------------------------------===//
+//
+// A flow-sensitive, path-insensitive analysis of unreachable code.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_ANALYSIS_ANALYSES_REACHABLECODE_H
+#define LLVM_CLANG_ANALYSIS_ANALYSES_REACHABLECODE_H
+
+#include "clang/Basic/SourceLocation.h"
+
+//===----------------------------------------------------------------------===//
+// Forward declarations.
+//===----------------------------------------------------------------------===//
+
+namespace llvm {
+ class BitVector;
+}
+
+namespace clang {
+ class AnalysisDeclContext;
+ class CFGBlock;
+ class Preprocessor;
+}
+
+//===----------------------------------------------------------------------===//
+// API.
+//===----------------------------------------------------------------------===//
+
+namespace clang {
+namespace reachable_code {
+
+/// Classifications of unreachable code.
+enum UnreachableKind {
+ UK_Return,
+ UK_Break,
+ UK_Loop_Increment,
+ UK_Other
+};
+
+class Callback {
+ virtual void anchor();
+public:
+ virtual ~Callback() {}
+ virtual void HandleUnreachable(UnreachableKind UK,
+ SourceLocation L,
+ SourceRange ConditionVal,
+ SourceRange R1,
+ SourceRange R2) = 0;
+};
+
+/// ScanReachableFromBlock - Mark all blocks reachable from Start.
+/// Returns the total number of blocks that were marked reachable.
+unsigned ScanReachableFromBlock(const CFGBlock *Start,
+ llvm::BitVector &Reachable);
+
+void FindUnreachableCode(AnalysisDeclContext &AC, Preprocessor &PP,
+ Callback &CB);
+
+}} // end namespace clang::reachable_code
+
+#endif