1*13fbcb42Sjoerg //===--- ComputeDependence.h -------------------------------------- C++ -*-===// 2*13fbcb42Sjoerg // 3*13fbcb42Sjoerg // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*13fbcb42Sjoerg // See https://llvm.org/LICENSE.txt for license information. 5*13fbcb42Sjoerg // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*13fbcb42Sjoerg // 7*13fbcb42Sjoerg //===----------------------------------------------------------------------===// 8*13fbcb42Sjoerg // 9*13fbcb42Sjoerg // Calculate various template dependency flags for the AST. 10*13fbcb42Sjoerg // 11*13fbcb42Sjoerg //===----------------------------------------------------------------------===// 12*13fbcb42Sjoerg 13*13fbcb42Sjoerg #ifndef LLVM_CLANG_AST_COMPUTE_DEPENDENCE_H 14*13fbcb42Sjoerg #define LLVM_CLANG_AST_COMPUTE_DEPENDENCE_H 15*13fbcb42Sjoerg 16*13fbcb42Sjoerg #include "clang/AST/DependenceFlags.h" 17*13fbcb42Sjoerg #include "clang/Basic/ExceptionSpecificationType.h" 18*13fbcb42Sjoerg #include "llvm/ADT/ArrayRef.h" 19*13fbcb42Sjoerg 20*13fbcb42Sjoerg namespace clang { 21*13fbcb42Sjoerg 22*13fbcb42Sjoerg class ASTContext; 23*13fbcb42Sjoerg 24*13fbcb42Sjoerg class Expr; 25*13fbcb42Sjoerg class FullExpr; 26*13fbcb42Sjoerg class OpaqueValueExpr; 27*13fbcb42Sjoerg class ParenExpr; 28*13fbcb42Sjoerg class UnaryOperator; 29*13fbcb42Sjoerg class UnaryExprOrTypeTraitExpr; 30*13fbcb42Sjoerg class ArraySubscriptExpr; 31*13fbcb42Sjoerg class MatrixSubscriptExpr; 32*13fbcb42Sjoerg class CompoundLiteralExpr; 33*13fbcb42Sjoerg class CastExpr; 34*13fbcb42Sjoerg class BinaryOperator; 35*13fbcb42Sjoerg class ConditionalOperator; 36*13fbcb42Sjoerg class BinaryConditionalOperator; 37*13fbcb42Sjoerg class StmtExpr; 38*13fbcb42Sjoerg class ConvertVectorExpr; 39*13fbcb42Sjoerg class VAArgExpr; 40*13fbcb42Sjoerg class ChooseExpr; 41*13fbcb42Sjoerg class NoInitExpr; 42*13fbcb42Sjoerg class ArrayInitLoopExpr; 43*13fbcb42Sjoerg class ImplicitValueInitExpr; 44*13fbcb42Sjoerg class InitListExpr; 45*13fbcb42Sjoerg class ExtVectorElementExpr; 46*13fbcb42Sjoerg class BlockExpr; 47*13fbcb42Sjoerg class AsTypeExpr; 48*13fbcb42Sjoerg class DeclRefExpr; 49*13fbcb42Sjoerg class RecoveryExpr; 50*13fbcb42Sjoerg class CXXRewrittenBinaryOperator; 51*13fbcb42Sjoerg class CXXStdInitializerListExpr; 52*13fbcb42Sjoerg class CXXTypeidExpr; 53*13fbcb42Sjoerg class MSPropertyRefExpr; 54*13fbcb42Sjoerg class MSPropertySubscriptExpr; 55*13fbcb42Sjoerg class CXXUuidofExpr; 56*13fbcb42Sjoerg class CXXThisExpr; 57*13fbcb42Sjoerg class CXXThrowExpr; 58*13fbcb42Sjoerg class CXXBindTemporaryExpr; 59*13fbcb42Sjoerg class CXXScalarValueInitExpr; 60*13fbcb42Sjoerg class CXXDeleteExpr; 61*13fbcb42Sjoerg class ArrayTypeTraitExpr; 62*13fbcb42Sjoerg class ExpressionTraitExpr; 63*13fbcb42Sjoerg class CXXNoexceptExpr; 64*13fbcb42Sjoerg class PackExpansionExpr; 65*13fbcb42Sjoerg class SubstNonTypeTemplateParmExpr; 66*13fbcb42Sjoerg class CoroutineSuspendExpr; 67*13fbcb42Sjoerg class DependentCoawaitExpr; 68*13fbcb42Sjoerg class CXXNewExpr; 69*13fbcb42Sjoerg class CXXPseudoDestructorExpr; 70*13fbcb42Sjoerg class OverloadExpr; 71*13fbcb42Sjoerg class DependentScopeDeclRefExpr; 72*13fbcb42Sjoerg class CXXConstructExpr; 73*13fbcb42Sjoerg class CXXDefaultInitExpr; 74*13fbcb42Sjoerg class LambdaExpr; 75*13fbcb42Sjoerg class CXXUnresolvedConstructExpr; 76*13fbcb42Sjoerg class CXXDependentScopeMemberExpr; 77*13fbcb42Sjoerg class MaterializeTemporaryExpr; 78*13fbcb42Sjoerg class CXXFoldExpr; 79*13fbcb42Sjoerg class TypeTraitExpr; 80*13fbcb42Sjoerg class ConceptSpecializationExpr; 81*13fbcb42Sjoerg class PredefinedExpr; 82*13fbcb42Sjoerg class CallExpr; 83*13fbcb42Sjoerg class OffsetOfExpr; 84*13fbcb42Sjoerg class MemberExpr; 85*13fbcb42Sjoerg class ShuffleVectorExpr; 86*13fbcb42Sjoerg class GenericSelectionExpr; 87*13fbcb42Sjoerg class DesignatedInitExpr; 88*13fbcb42Sjoerg class ParenListExpr; 89*13fbcb42Sjoerg class PseudoObjectExpr; 90*13fbcb42Sjoerg class AtomicExpr; 91*13fbcb42Sjoerg class OMPArraySectionExpr; 92*13fbcb42Sjoerg class OMPArrayShapingExpr; 93*13fbcb42Sjoerg class OMPIteratorExpr; 94*13fbcb42Sjoerg class ObjCArrayLiteral; 95*13fbcb42Sjoerg class ObjCDictionaryLiteral; 96*13fbcb42Sjoerg class ObjCBoxedExpr; 97*13fbcb42Sjoerg class ObjCEncodeExpr; 98*13fbcb42Sjoerg class ObjCIvarRefExpr; 99*13fbcb42Sjoerg class ObjCPropertyRefExpr; 100*13fbcb42Sjoerg class ObjCSubscriptRefExpr; 101*13fbcb42Sjoerg class ObjCIsaExpr; 102*13fbcb42Sjoerg class ObjCIndirectCopyRestoreExpr; 103*13fbcb42Sjoerg class ObjCMessageExpr; 104*13fbcb42Sjoerg 105*13fbcb42Sjoerg // The following functions are called from constructors of `Expr`, so they 106*13fbcb42Sjoerg // should not access anything beyond basic 107*13fbcb42Sjoerg ExprDependence computeDependence(FullExpr *E); 108*13fbcb42Sjoerg ExprDependence computeDependence(OpaqueValueExpr *E); 109*13fbcb42Sjoerg ExprDependence computeDependence(ParenExpr *E); 110*13fbcb42Sjoerg ExprDependence computeDependence(UnaryOperator *E, const ASTContext &Ctx); 111*13fbcb42Sjoerg ExprDependence computeDependence(UnaryExprOrTypeTraitExpr *E); 112*13fbcb42Sjoerg ExprDependence computeDependence(ArraySubscriptExpr *E); 113*13fbcb42Sjoerg ExprDependence computeDependence(MatrixSubscriptExpr *E); 114*13fbcb42Sjoerg ExprDependence computeDependence(CompoundLiteralExpr *E); 115*13fbcb42Sjoerg ExprDependence computeDependence(CastExpr *E); 116*13fbcb42Sjoerg ExprDependence computeDependence(BinaryOperator *E); 117*13fbcb42Sjoerg ExprDependence computeDependence(ConditionalOperator *E); 118*13fbcb42Sjoerg ExprDependence computeDependence(BinaryConditionalOperator *E); 119*13fbcb42Sjoerg ExprDependence computeDependence(StmtExpr *E, unsigned TemplateDepth); 120*13fbcb42Sjoerg ExprDependence computeDependence(ConvertVectorExpr *E); 121*13fbcb42Sjoerg ExprDependence computeDependence(VAArgExpr *E); 122*13fbcb42Sjoerg ExprDependence computeDependence(ChooseExpr *E); 123*13fbcb42Sjoerg ExprDependence computeDependence(NoInitExpr *E); 124*13fbcb42Sjoerg ExprDependence computeDependence(ArrayInitLoopExpr *E); 125*13fbcb42Sjoerg ExprDependence computeDependence(ImplicitValueInitExpr *E); 126*13fbcb42Sjoerg ExprDependence computeDependence(InitListExpr *E); 127*13fbcb42Sjoerg ExprDependence computeDependence(ExtVectorElementExpr *E); 128*13fbcb42Sjoerg ExprDependence computeDependence(BlockExpr *E); 129*13fbcb42Sjoerg ExprDependence computeDependence(AsTypeExpr *E); 130*13fbcb42Sjoerg ExprDependence computeDependence(DeclRefExpr *E, const ASTContext &Ctx); 131*13fbcb42Sjoerg ExprDependence computeDependence(RecoveryExpr *E); 132*13fbcb42Sjoerg ExprDependence computeDependence(CXXRewrittenBinaryOperator *E); 133*13fbcb42Sjoerg ExprDependence computeDependence(CXXStdInitializerListExpr *E); 134*13fbcb42Sjoerg ExprDependence computeDependence(CXXTypeidExpr *E); 135*13fbcb42Sjoerg ExprDependence computeDependence(MSPropertyRefExpr *E); 136*13fbcb42Sjoerg ExprDependence computeDependence(MSPropertySubscriptExpr *E); 137*13fbcb42Sjoerg ExprDependence computeDependence(CXXUuidofExpr *E); 138*13fbcb42Sjoerg ExprDependence computeDependence(CXXThisExpr *E); 139*13fbcb42Sjoerg ExprDependence computeDependence(CXXThrowExpr *E); 140*13fbcb42Sjoerg ExprDependence computeDependence(CXXBindTemporaryExpr *E); 141*13fbcb42Sjoerg ExprDependence computeDependence(CXXScalarValueInitExpr *E); 142*13fbcb42Sjoerg ExprDependence computeDependence(CXXDeleteExpr *E); 143*13fbcb42Sjoerg ExprDependence computeDependence(ArrayTypeTraitExpr *E); 144*13fbcb42Sjoerg ExprDependence computeDependence(ExpressionTraitExpr *E); 145*13fbcb42Sjoerg ExprDependence computeDependence(CXXNoexceptExpr *E, CanThrowResult CT); 146*13fbcb42Sjoerg ExprDependence computeDependence(PackExpansionExpr *E); 147*13fbcb42Sjoerg ExprDependence computeDependence(SubstNonTypeTemplateParmExpr *E); 148*13fbcb42Sjoerg ExprDependence computeDependence(CoroutineSuspendExpr *E); 149*13fbcb42Sjoerg ExprDependence computeDependence(DependentCoawaitExpr *E); 150*13fbcb42Sjoerg ExprDependence computeDependence(CXXNewExpr *E); 151*13fbcb42Sjoerg ExprDependence computeDependence(CXXPseudoDestructorExpr *E); 152*13fbcb42Sjoerg ExprDependence computeDependence(OverloadExpr *E, bool KnownDependent, 153*13fbcb42Sjoerg bool KnownInstantiationDependent, 154*13fbcb42Sjoerg bool KnownContainsUnexpandedParameterPack); 155*13fbcb42Sjoerg ExprDependence computeDependence(DependentScopeDeclRefExpr *E); 156*13fbcb42Sjoerg ExprDependence computeDependence(CXXConstructExpr *E); 157*13fbcb42Sjoerg ExprDependence computeDependence(CXXDefaultInitExpr *E); 158*13fbcb42Sjoerg ExprDependence computeDependence(LambdaExpr *E, 159*13fbcb42Sjoerg bool ContainsUnexpandedParameterPack); 160*13fbcb42Sjoerg ExprDependence computeDependence(CXXUnresolvedConstructExpr *E); 161*13fbcb42Sjoerg ExprDependence computeDependence(CXXDependentScopeMemberExpr *E); 162*13fbcb42Sjoerg ExprDependence computeDependence(MaterializeTemporaryExpr *E); 163*13fbcb42Sjoerg ExprDependence computeDependence(CXXFoldExpr *E); 164*13fbcb42Sjoerg ExprDependence computeDependence(TypeTraitExpr *E); 165*13fbcb42Sjoerg ExprDependence computeDependence(ConceptSpecializationExpr *E, 166*13fbcb42Sjoerg bool ValueDependent); 167*13fbcb42Sjoerg 168*13fbcb42Sjoerg ExprDependence computeDependence(PredefinedExpr *E); 169*13fbcb42Sjoerg ExprDependence computeDependence(CallExpr *E, llvm::ArrayRef<Expr *> PreArgs); 170*13fbcb42Sjoerg ExprDependence computeDependence(OffsetOfExpr *E); 171*13fbcb42Sjoerg ExprDependence computeDependence(MemberExpr *E); 172*13fbcb42Sjoerg ExprDependence computeDependence(ShuffleVectorExpr *E); 173*13fbcb42Sjoerg ExprDependence computeDependence(GenericSelectionExpr *E, 174*13fbcb42Sjoerg bool ContainsUnexpandedPack); 175*13fbcb42Sjoerg ExprDependence computeDependence(DesignatedInitExpr *E); 176*13fbcb42Sjoerg ExprDependence computeDependence(ParenListExpr *E); 177*13fbcb42Sjoerg ExprDependence computeDependence(PseudoObjectExpr *E); 178*13fbcb42Sjoerg ExprDependence computeDependence(AtomicExpr *E); 179*13fbcb42Sjoerg 180*13fbcb42Sjoerg ExprDependence computeDependence(OMPArraySectionExpr *E); 181*13fbcb42Sjoerg ExprDependence computeDependence(OMPArrayShapingExpr *E); 182*13fbcb42Sjoerg ExprDependence computeDependence(OMPIteratorExpr *E); 183*13fbcb42Sjoerg 184*13fbcb42Sjoerg ExprDependence computeDependence(ObjCArrayLiteral *E); 185*13fbcb42Sjoerg ExprDependence computeDependence(ObjCDictionaryLiteral *E); 186*13fbcb42Sjoerg ExprDependence computeDependence(ObjCBoxedExpr *E); 187*13fbcb42Sjoerg ExprDependence computeDependence(ObjCEncodeExpr *E); 188*13fbcb42Sjoerg ExprDependence computeDependence(ObjCIvarRefExpr *E); 189*13fbcb42Sjoerg ExprDependence computeDependence(ObjCPropertyRefExpr *E); 190*13fbcb42Sjoerg ExprDependence computeDependence(ObjCSubscriptRefExpr *E); 191*13fbcb42Sjoerg ExprDependence computeDependence(ObjCIsaExpr *E); 192*13fbcb42Sjoerg ExprDependence computeDependence(ObjCIndirectCopyRestoreExpr *E); 193*13fbcb42Sjoerg ExprDependence computeDependence(ObjCMessageExpr *E); 194*13fbcb42Sjoerg 195*13fbcb42Sjoerg } // namespace clang 196*13fbcb42Sjoerg #endif 197