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