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