//= ObjCNoReturn.h - Handling of Cocoa APIs known not to return --*- C++ -*---//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file implements special handling of recognizing ObjC API hooks that
// do not return but aren't marked as such in API headers.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_CLANG_ANALYSIS_DS_OBJCNORETURN
#define LLVM_CLANG_ANALYSIS_DS_OBJCNORETURN

#include "clang/Basic/IdentifierTable.h"

namespace clang {

class ASTContext;
class ObjCMessageExpr;
  
class ObjCNoReturn {
  /// Cached "raise" selector.
  Selector RaiseSel;

  /// Cached identifier for "NSException".
  IdentifierInfo *NSExceptionII;

  enum { NUM_RAISE_SELECTORS = 2 };

  /// Cached set of selectors in NSException that are 'noreturn'.
  Selector NSExceptionInstanceRaiseSelectors[NUM_RAISE_SELECTORS];

public:
  ObjCNoReturn(ASTContext &C);
  
  /// Return true if the given message expression is known to never
  /// return.
  bool isImplicitNoReturn(const ObjCMessageExpr *ME);
};
}

#endif
