1243791Sdim//= ObjCNoReturn.h - Handling of Cocoa APIs known not to return --*- C++ -*---// 2243791Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6243791Sdim// 7243791Sdim//===----------------------------------------------------------------------===// 8243791Sdim// 9243791Sdim// This file implements special handling of recognizing ObjC API hooks that 10243791Sdim// do not return but aren't marked as such in API headers. 11243791Sdim// 12243791Sdim//===----------------------------------------------------------------------===// 13243791Sdim 14280031Sdim#ifndef LLVM_CLANG_ANALYSIS_DOMAINSPECIFIC_OBJCNORETURN_H 15280031Sdim#define LLVM_CLANG_ANALYSIS_DOMAINSPECIFIC_OBJCNORETURN_H 16243791Sdim 17243791Sdim#include "clang/Basic/IdentifierTable.h" 18243791Sdim 19243791Sdimnamespace clang { 20243791Sdim 21243791Sdimclass ASTContext; 22243791Sdimclass ObjCMessageExpr; 23341825Sdim 24243791Sdimclass ObjCNoReturn { 25243791Sdim /// Cached "raise" selector. 26243791Sdim Selector RaiseSel; 27243791Sdim 28243791Sdim /// Cached identifier for "NSException". 29243791Sdim IdentifierInfo *NSExceptionII; 30243791Sdim 31243791Sdim enum { NUM_RAISE_SELECTORS = 2 }; 32243791Sdim 33243791Sdim /// Cached set of selectors in NSException that are 'noreturn'. 34243791Sdim Selector NSExceptionInstanceRaiseSelectors[NUM_RAISE_SELECTORS]; 35243791Sdim 36243791Sdimpublic: 37243791Sdim ObjCNoReturn(ASTContext &C); 38341825Sdim 39243791Sdim /// Return true if the given message expression is known to never 40243791Sdim /// return. 41243791Sdim bool isImplicitNoReturn(const ObjCMessageExpr *ME); 42243791Sdim}; 43243791Sdim} 44243791Sdim 45243791Sdim#endif 46