1 //= ObjCNoReturn.h - Handling of Cocoa APIs known not to return --*- C++ -*---// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file implements special handling of recognizing ObjC API hooks that 11 // do not return but aren't marked as such in API headers. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #ifndef LLVM_CLANG_ANALYSIS_DOMAINSPECIFIC_OBJCNORETURN_H 16 #define LLVM_CLANG_ANALYSIS_DOMAINSPECIFIC_OBJCNORETURN_H 17 18 #include "clang/Basic/IdentifierTable.h" 19 20 namespace clang { 21 22 class ASTContext; 23 class ObjCMessageExpr; 24 25 class ObjCNoReturn { 26 /// Cached "raise" selector. 27 Selector RaiseSel; 28 29 /// Cached identifier for "NSException". 30 IdentifierInfo *NSExceptionII; 31 32 enum { NUM_RAISE_SELECTORS = 2 }; 33 34 /// Cached set of selectors in NSException that are 'noreturn'. 35 Selector NSExceptionInstanceRaiseSelectors[NUM_RAISE_SELECTORS]; 36 37 public: 38 ObjCNoReturn(ASTContext &C); 39 40 /// Return true if the given message expression is known to never 41 /// return. 42 bool isImplicitNoReturn(const ObjCMessageExpr *ME); 43 }; 44 } 45 46 #endif 47