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