//===- 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 { … }; class Callback { … }; /// 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