1243791Sdim//= ObjCNoReturn.h - Handling of Cocoa APIs known not to return --*- C++ -*---//
2243791Sdim//
3243791Sdim//                     The LLVM Compiler Infrastructure
4243791Sdim//
5243791Sdim// This file is distributed under the University of Illinois Open Source
6243791Sdim// License. See LICENSE.TXT for details.
7243791Sdim//
8243791Sdim//===----------------------------------------------------------------------===//
9243791Sdim//
10243791Sdim// This file implements special handling of recognizing ObjC API hooks that
11243791Sdim// do not return but aren't marked as such in API headers.
12243791Sdim//
13243791Sdim//===----------------------------------------------------------------------===//
14243791Sdim
15243791Sdim#ifndef LLVM_CLANG_ANALYSIS_DS_OBJCNORETURN
16243791Sdim#define LLVM_CLANG_ANALYSIS_DS_OBJCNORETURN
17243791Sdim
18243791Sdim#include "clang/Basic/IdentifierTable.h"
19243791Sdim
20243791Sdimnamespace clang {
21243791Sdim
22243791Sdimclass ASTContext;
23243791Sdimclass ObjCMessageExpr;
24243791Sdim
25243791Sdimclass ObjCNoReturn {
26243791Sdim  /// Cached "raise" selector.
27243791Sdim  Selector RaiseSel;
28243791Sdim
29243791Sdim  /// Cached identifier for "NSException".
30243791Sdim  IdentifierInfo *NSExceptionII;
31243791Sdim
32243791Sdim  enum { NUM_RAISE_SELECTORS = 2 };
33243791Sdim
34243791Sdim  /// Cached set of selectors in NSException that are 'noreturn'.
35243791Sdim  Selector NSExceptionInstanceRaiseSelectors[NUM_RAISE_SELECTORS];
36243791Sdim
37243791Sdimpublic:
38243791Sdim  ObjCNoReturn(ASTContext &C);
39243791Sdim
40243791Sdim  /// Return true if the given message expression is known to never
41243791Sdim  /// return.
42243791Sdim  bool isImplicitNoReturn(const ObjCMessageExpr *ME);
43243791Sdim};
44243791Sdim}
45243791Sdim
46243791Sdim#endif
47