Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===--- ExceptionSpecificationType.h ---------------------------*- C++ -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. ///
  9. /// \file
  10. /// Defines the ExceptionSpecificationType enumeration and various
  11. /// utility functions.
  12. ///
  13. //===----------------------------------------------------------------------===//
  14. #ifndef LLVM_CLANG_BASIC_EXCEPTIONSPECIFICATIONTYPE_H
  15. #define LLVM_CLANG_BASIC_EXCEPTIONSPECIFICATIONTYPE_H
  16.  
  17. namespace clang {
  18.  
  19. /// The various types of exception specifications that exist in C++11.
  20. enum ExceptionSpecificationType {
  21.   EST_None,             ///< no exception specification
  22.   EST_DynamicNone,      ///< throw()
  23.   EST_Dynamic,          ///< throw(T1, T2)
  24.   EST_MSAny,            ///< Microsoft throw(...) extension
  25.   EST_NoThrow,          ///< Microsoft __declspec(nothrow) extension
  26.   EST_BasicNoexcept,    ///< noexcept
  27.   EST_DependentNoexcept,///< noexcept(expression), value-dependent
  28.   EST_NoexceptFalse,    ///< noexcept(expression), evals to 'false'
  29.   EST_NoexceptTrue,     ///< noexcept(expression), evals to 'true'
  30.   EST_Unevaluated,      ///< not evaluated yet, for special member function
  31.   EST_Uninstantiated,   ///< not instantiated yet
  32.   EST_Unparsed          ///< not parsed yet
  33. };
  34.  
  35. inline bool isDynamicExceptionSpec(ExceptionSpecificationType ESpecType) {
  36.   return ESpecType >= EST_DynamicNone && ESpecType <= EST_MSAny;
  37. }
  38.  
  39. inline bool isComputedNoexcept(ExceptionSpecificationType ESpecType) {
  40.   return ESpecType >= EST_DependentNoexcept &&
  41.          ESpecType <= EST_NoexceptTrue;
  42. }
  43.  
  44. inline bool isNoexceptExceptionSpec(ExceptionSpecificationType ESpecType) {
  45.   return ESpecType == EST_BasicNoexcept || ESpecType == EST_NoThrow ||
  46.          isComputedNoexcept(ESpecType);
  47. }
  48.  
  49. inline bool isUnresolvedExceptionSpec(ExceptionSpecificationType ESpecType) {
  50.   return ESpecType == EST_Unevaluated || ESpecType == EST_Uninstantiated;
  51. }
  52.  
  53. /// Possible results from evaluation of a noexcept expression.
  54. enum CanThrowResult {
  55.   CT_Cannot,
  56.   CT_Dependent,
  57.   CT_Can
  58. };
  59.  
  60. inline CanThrowResult mergeCanThrow(CanThrowResult CT1, CanThrowResult CT2) {
  61.   // CanThrowResult constants are ordered so that the maximum is the correct
  62.   // merge result.
  63.   return CT1 > CT2 ? CT1 : CT2;
  64. }
  65.  
  66. } // end namespace clang
  67.  
  68. #endif // LLVM_CLANG_BASIC_EXCEPTIONSPECIFICATIONTYPE_H
  69.