File indexing completed on 2026-05-10 08:36:49
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #ifndef LLVM_CLANG_BASIC_EXCEPTIONSPECIFICATIONTYPE_H
0015 #define LLVM_CLANG_BASIC_EXCEPTIONSPECIFICATIONTYPE_H
0016
0017 namespace clang {
0018
0019
0020 enum ExceptionSpecificationType {
0021 EST_None,
0022 EST_DynamicNone,
0023 EST_Dynamic,
0024 EST_MSAny,
0025 EST_NoThrow,
0026 EST_BasicNoexcept,
0027 EST_DependentNoexcept,
0028 EST_NoexceptFalse,
0029 EST_NoexceptTrue,
0030 EST_Unevaluated,
0031 EST_Uninstantiated,
0032 EST_Unparsed
0033 };
0034
0035 inline bool isDynamicExceptionSpec(ExceptionSpecificationType ESpecType) {
0036 return ESpecType >= EST_DynamicNone && ESpecType <= EST_MSAny;
0037 }
0038
0039 inline bool isComputedNoexcept(ExceptionSpecificationType ESpecType) {
0040 return ESpecType >= EST_DependentNoexcept &&
0041 ESpecType <= EST_NoexceptTrue;
0042 }
0043
0044 inline bool isNoexceptExceptionSpec(ExceptionSpecificationType ESpecType) {
0045 return ESpecType == EST_BasicNoexcept || ESpecType == EST_NoThrow ||
0046 isComputedNoexcept(ESpecType);
0047 }
0048
0049 inline bool isUnresolvedExceptionSpec(ExceptionSpecificationType ESpecType) {
0050 return ESpecType == EST_Unevaluated || ESpecType == EST_Uninstantiated;
0051 }
0052
0053 inline bool isExplicitThrowExceptionSpec(ExceptionSpecificationType ESpecType) {
0054 return ESpecType == EST_Dynamic || ESpecType == EST_MSAny ||
0055 ESpecType == EST_NoexceptFalse;
0056 }
0057
0058
0059 enum CanThrowResult {
0060 CT_Cannot,
0061 CT_Dependent,
0062 CT_Can
0063 };
0064
0065 inline CanThrowResult mergeCanThrow(CanThrowResult CT1, CanThrowResult CT2) {
0066
0067
0068 return CT1 > CT2 ? CT1 : CT2;
0069 }
0070
0071 }
0072
0073 #endif