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