1204643Srdivacky//===- ReachableCode.h -----------------------------------------*- C++ --*-===// 2204643Srdivacky// 3204643Srdivacky// The LLVM Compiler Infrastructure 4204643Srdivacky// 5204643Srdivacky// This file is distributed under the University of Illinois Open Source 6204643Srdivacky// License. See LICENSE.TXT for details. 7204643Srdivacky// 8204643Srdivacky//===----------------------------------------------------------------------===// 9204643Srdivacky// 10204643Srdivacky// A flow-sensitive, path-insensitive analysis of unreachable code. 11204643Srdivacky// 12204643Srdivacky//===----------------------------------------------------------------------===// 13204643Srdivacky 14204643Srdivacky#ifndef LLVM_CLANG_REACHABLECODE_H 15204643Srdivacky#define LLVM_CLANG_REACHABLECODE_H 16204643Srdivacky 17204643Srdivacky#include "clang/Basic/SourceLocation.h" 18204643Srdivacky 19204643Srdivacky//===----------------------------------------------------------------------===// 20204643Srdivacky// Forward declarations. 21204643Srdivacky//===----------------------------------------------------------------------===// 22204643Srdivacky 23204643Srdivackynamespace llvm { 24204643Srdivacky class BitVector; 25204643Srdivacky} 26204643Srdivacky 27204643Srdivackynamespace clang { 28235633Sdim class AnalysisDeclContext; 29204643Srdivacky class CFGBlock; 30204643Srdivacky} 31204643Srdivacky 32204643Srdivacky//===----------------------------------------------------------------------===// 33204643Srdivacky// API. 34204643Srdivacky//===----------------------------------------------------------------------===// 35204643Srdivacky 36204643Srdivackynamespace clang { 37204643Srdivackynamespace reachable_code { 38204643Srdivacky 39204643Srdivackyclass Callback { 40235633Sdim virtual void anchor(); 41204643Srdivackypublic: 42204643Srdivacky virtual ~Callback() {} 43204643Srdivacky virtual void HandleUnreachable(SourceLocation L, SourceRange R1, 44204643Srdivacky SourceRange R2) = 0; 45204643Srdivacky}; 46204643Srdivacky 47204643Srdivacky/// ScanReachableFromBlock - Mark all blocks reachable from Start. 48204643Srdivacky/// Returns the total number of blocks that were marked reachable. 49226890Sdimunsigned ScanReachableFromBlock(const CFGBlock *Start, 50204643Srdivacky llvm::BitVector &Reachable); 51204643Srdivacky 52235633Sdimvoid FindUnreachableCode(AnalysisDeclContext &AC, Callback &CB); 53204643Srdivacky 54204643Srdivacky}} // end namespace clang::reachable_code 55204643Srdivacky 56204643Srdivacky#endif 57