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 19namespace clang { 20 21class ASTContext; 22class ObjCMessageExpr; 23 24class 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 36public: 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