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