14ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek//= ObjCNoReturn.h - Handling of Cocoa APIs known not to return --*- C++ -*---//
24ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek//
34ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek//                     The LLVM Compiler Infrastructure
44ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek//
54ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek// This file is distributed under the University of Illinois Open Source
64ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek// License. See LICENSE.TXT for details.
74ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek//
84ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek//===----------------------------------------------------------------------===//
94ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek//
104ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek// This file implements special handling of recognizing ObjC API hooks that
114ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek// do not return but aren't marked as such in API headers.
124ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek//
134ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek//===----------------------------------------------------------------------===//
144ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek
154ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek#ifndef LLVM_CLANG_ANALYSIS_DS_OBJCNORETURN
164ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek#define LLVM_CLANG_ANALYSIS_DS_OBJCNORETURN
174ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek
184ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek#include "clang/Basic/IdentifierTable.h"
194ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek
204ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremeneknamespace clang {
214ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek
224ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenekclass ASTContext;
234ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenekclass ObjCMessageExpr;
244ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek
254ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenekclass ObjCNoReturn {
264ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek  /// Cached "raise" selector.
274ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek  Selector RaiseSel;
284ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek
294ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek  /// Cached identifier for "NSException".
304ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek  IdentifierInfo *NSExceptionII;
314ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek
324ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek  enum { NUM_RAISE_SELECTORS = 2 };
334ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek
344ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek  /// Cached set of selectors in NSException that are 'noreturn'.
354ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek  Selector NSExceptionInstanceRaiseSelectors[NUM_RAISE_SELECTORS];
364ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek
374ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenekpublic:
384ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek  ObjCNoReturn(ASTContext &C);
394ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek
404ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek  /// Return true if the given message expression is known to never
414ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek  /// return.
424ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek  bool isImplicitNoReturn(const ObjCMessageExpr *ME);
434ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek};
444ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek}
454ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek
464ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek#endif
47