1243791Sdim//= ObjCNoReturn.h - Handling of Cocoa APIs known not to return --*- C++ -*---// 2243791Sdim// 3243791Sdim// The LLVM Compiler Infrastructure 4243791Sdim// 5243791Sdim// This file is distributed under the University of Illinois Open Source 6243791Sdim// License. See LICENSE.TXT for details. 7243791Sdim// 8243791Sdim//===----------------------------------------------------------------------===// 9243791Sdim// 10243791Sdim// This file implements special handling of recognizing ObjC API hooks that 11243791Sdim// do not return but aren't marked as such in API headers. 12243791Sdim// 13243791Sdim//===----------------------------------------------------------------------===// 14243791Sdim 15243791Sdim#ifndef LLVM_CLANG_ANALYSIS_DS_OBJCNORETURN 16243791Sdim#define LLVM_CLANG_ANALYSIS_DS_OBJCNORETURN 17243791Sdim 18243791Sdim#include "clang/Basic/IdentifierTable.h" 19243791Sdim 20243791Sdimnamespace clang { 21243791Sdim 22243791Sdimclass ASTContext; 23243791Sdimclass ObjCMessageExpr; 24243791Sdim 25243791Sdimclass ObjCNoReturn { 26243791Sdim /// Cached "raise" selector. 27243791Sdim Selector RaiseSel; 28243791Sdim 29243791Sdim /// Cached identifier for "NSException". 30243791Sdim IdentifierInfo *NSExceptionII; 31243791Sdim 32243791Sdim enum { NUM_RAISE_SELECTORS = 2 }; 33243791Sdim 34243791Sdim /// Cached set of selectors in NSException that are 'noreturn'. 35243791Sdim Selector NSExceptionInstanceRaiseSelectors[NUM_RAISE_SELECTORS]; 36243791Sdim 37243791Sdimpublic: 38243791Sdim ObjCNoReturn(ASTContext &C); 39243791Sdim 40243791Sdim /// Return true if the given message expression is known to never 41243791Sdim /// return. 42243791Sdim bool isImplicitNoReturn(const ObjCMessageExpr *ME); 43243791Sdim}; 44243791Sdim} 45243791Sdim 46243791Sdim#endif 47