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