Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-10 08:36:24

0001 //= ObjCNoReturn.h - Handling of Cocoa APIs known not to return --*- C++ -*---//
0002 //
0003 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0004 // See https://llvm.org/LICENSE.txt for license information.
0005 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0006 //
0007 //===----------------------------------------------------------------------===//
0008 //
0009 // This file implements special handling of recognizing ObjC API hooks that
0010 // do not return but aren't marked as such in API headers.
0011 //
0012 //===----------------------------------------------------------------------===//
0013 
0014 #ifndef LLVM_CLANG_ANALYSIS_DOMAINSPECIFIC_OBJCNORETURN_H
0015 #define LLVM_CLANG_ANALYSIS_DOMAINSPECIFIC_OBJCNORETURN_H
0016 
0017 #include "clang/Basic/IdentifierTable.h"
0018 
0019 namespace clang {
0020 
0021 class ASTContext;
0022 class ObjCMessageExpr;
0023 
0024 class ObjCNoReturn {
0025   /// Cached "raise" selector.
0026   Selector RaiseSel;
0027 
0028   /// Cached identifier for "NSException".
0029   IdentifierInfo *NSExceptionII;
0030 
0031   enum { NUM_RAISE_SELECTORS = 2 };
0032 
0033   /// Cached set of selectors in NSException that are 'noreturn'.
0034   Selector NSExceptionInstanceRaiseSelectors[NUM_RAISE_SELECTORS];
0035 
0036 public:
0037   ObjCNoReturn(ASTContext &C);
0038 
0039   /// Return true if the given message expression is known to never
0040   /// return.
0041   bool isImplicitNoReturn(const ObjCMessageExpr *ME);
0042 };
0043 }
0044 
0045 #endif