- //===- 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 
-