//===--- ComputeDependence.h -------------------------------------- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // Calculate various template dependency flags for the AST. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_AST_COMPUTEDEPENDENCE_H #define LLVM_CLANG_AST_COMPUTEDEPENDENCE_H #include "clang/AST/DependenceFlags.h" #include "clang/Basic/ExceptionSpecificationType.h" #include "llvm/ADT/ArrayRef.h" namespace clang { class ASTContext; class Expr; class FullExpr; class OpaqueValueExpr; class ParenExpr; class UnaryOperator; class UnaryExprOrTypeTraitExpr; class ArraySubscriptExpr; class MatrixSubscriptExpr; class CompoundLiteralExpr; class ImplicitCastExpr; class ExplicitCastExpr; class BinaryOperator; class ConditionalOperator; class BinaryConditionalOperator; class StmtExpr; class ConvertVectorExpr; class VAArgExpr; class ChooseExpr; class NoInitExpr; class ArrayInitLoopExpr; class ImplicitValueInitExpr; class InitListExpr; class ExtVectorElementExpr; class BlockExpr; class AsTypeExpr; class DeclRefExpr; class RecoveryExpr; class CXXRewrittenBinaryOperator; class CXXStdInitializerListExpr; class CXXTypeidExpr; class MSPropertyRefExpr; class MSPropertySubscriptExpr; class CXXUuidofExpr; class CXXThisExpr; class CXXThrowExpr; class CXXBindTemporaryExpr; class CXXScalarValueInitExpr; class CXXDeleteExpr; class ArrayTypeTraitExpr; class ExpressionTraitExpr; class CXXNoexceptExpr; class PackExpansionExpr; class SubstNonTypeTemplateParmExpr; class CoroutineSuspendExpr; class DependentCoawaitExpr; class CXXNewExpr; class CXXPseudoDestructorExpr; class OverloadExpr; class DependentScopeDeclRefExpr; class CXXConstructExpr; class CXXTemporaryObjectExpr; class CXXDefaultInitExpr; class CXXDefaultArgExpr; class LambdaExpr; class CXXUnresolvedConstructExpr; class CXXDependentScopeMemberExpr; class MaterializeTemporaryExpr; class CXXFoldExpr; class CXXParenListInitExpr; class TypeTraitExpr; class ConceptSpecializationExpr; class SYCLUniqueStableNameExpr; class PredefinedExpr; class CallExpr; class OffsetOfExpr; class MemberExpr; class ShuffleVectorExpr; class GenericSelectionExpr; class DesignatedInitExpr; class ParenListExpr; class PseudoObjectExpr; class AtomicExpr; class OMPArraySectionExpr; class OMPArrayShapingExpr; class OMPIteratorExpr; class ObjCArrayLiteral; class ObjCDictionaryLiteral; class ObjCBoxedExpr; class ObjCEncodeExpr; class ObjCIvarRefExpr; class ObjCPropertyRefExpr; class ObjCSubscriptRefExpr; class ObjCIsaExpr; class ObjCIndirectCopyRestoreExpr; class ObjCMessageExpr; // The following functions are called from constructors of `Expr`, so they // should not access anything beyond basic ExprDependence computeDependence(FullExpr *E); ExprDependence computeDependence(OpaqueValueExpr *E); ExprDependence computeDependence(ParenExpr *E); ExprDependence computeDependence(UnaryOperator *E, const ASTContext &Ctx); ExprDependence computeDependence(UnaryExprOrTypeTraitExpr *E); ExprDependence computeDependence(ArraySubscriptExpr *E); ExprDependence computeDependence(MatrixSubscriptExpr *E); ExprDependence computeDependence(CompoundLiteralExpr *E); ExprDependence computeDependence(ImplicitCastExpr *E); ExprDependence computeDependence(ExplicitCastExpr *E); ExprDependence computeDependence(BinaryOperator *E); ExprDependence computeDependence(ConditionalOperator *E); ExprDependence computeDependence(BinaryConditionalOperator *E); ExprDependence computeDependence(StmtExpr *E, unsigned TemplateDepth); ExprDependence computeDependence(ConvertVectorExpr *E); ExprDependence computeDependence(VAArgExpr *E); ExprDependence computeDependence(ChooseExpr *E); ExprDependence computeDependence(NoInitExpr *E); ExprDependence computeDependence(ArrayInitLoopExpr *E); ExprDependence computeDependence(ImplicitValueInitExpr *E); ExprDependence computeDependence(InitListExpr *E); ExprDependence computeDependence(ExtVectorElementExpr *E); ExprDependence computeDependence(BlockExpr *E); ExprDependence computeDependence(AsTypeExpr *E); ExprDependence computeDependence(DeclRefExpr *E, const ASTContext &Ctx); ExprDependence computeDependence(RecoveryExpr *E); ExprDependence computeDependence(CXXRewrittenBinaryOperator *E); ExprDependence computeDependence(CXXStdInitializerListExpr *E); ExprDependence computeDependence(CXXTypeidExpr *E); ExprDependence computeDependence(MSPropertyRefExpr *E); ExprDependence computeDependence(MSPropertySubscriptExpr *E); ExprDependence computeDependence(CXXUuidofExpr *E); ExprDependence computeDependence(CXXThisExpr *E); ExprDependence computeDependence(CXXThrowExpr *E); ExprDependence computeDependence(CXXBindTemporaryExpr *E); ExprDependence computeDependence(CXXScalarValueInitExpr *E); ExprDependence computeDependence(CXXDeleteExpr *E); ExprDependence computeDependence(ArrayTypeTraitExpr *E); ExprDependence computeDependence(ExpressionTraitExpr *E); ExprDependence computeDependence(CXXNoexceptExpr *E, CanThrowResult CT); ExprDependence computeDependence(PackExpansionExpr *E); ExprDependence computeDependence(SubstNonTypeTemplateParmExpr *E); ExprDependence computeDependence(CoroutineSuspendExpr *E); ExprDependence computeDependence(DependentCoawaitExpr *E); ExprDependence computeDependence(CXXNewExpr *E); ExprDependence computeDependence(CXXPseudoDestructorExpr *E); ExprDependence computeDependence(OverloadExpr *E, bool KnownDependent, bool KnownInstantiationDependent, bool KnownContainsUnexpandedParameterPack); ExprDependence computeDependence(DependentScopeDeclRefExpr *E); ExprDependence computeDependence(CXXConstructExpr *E); ExprDependence computeDependence(CXXTemporaryObjectExpr *E); ExprDependence computeDependence(CXXDefaultInitExpr *E); ExprDependence computeDependence(CXXDefaultArgExpr *E); ExprDependence computeDependence(LambdaExpr *E, bool ContainsUnexpandedParameterPack); ExprDependence computeDependence(CXXUnresolvedConstructExpr *E); ExprDependence computeDependence(CXXDependentScopeMemberExpr *E); ExprDependence computeDependence(MaterializeTemporaryExpr *E); ExprDependence computeDependence(CXXFoldExpr *E); ExprDependence computeDependence(CXXParenListInitExpr *E); ExprDependence computeDependence(TypeTraitExpr *E); ExprDependence computeDependence(ConceptSpecializationExpr *E, bool ValueDependent); ExprDependence computeDependence(SYCLUniqueStableNameExpr *E); ExprDependence computeDependence(PredefinedExpr *E); ExprDependence computeDependence(CallExpr *E, llvm::ArrayRef PreArgs); ExprDependence computeDependence(OffsetOfExpr *E); ExprDependence computeDependence(MemberExpr *E); ExprDependence computeDependence(ShuffleVectorExpr *E); ExprDependence computeDependence(GenericSelectionExpr *E, bool ContainsUnexpandedPack); ExprDependence computeDependence(DesignatedInitExpr *E); ExprDependence computeDependence(ParenListExpr *E); ExprDependence computeDependence(PseudoObjectExpr *E); ExprDependence computeDependence(AtomicExpr *E); ExprDependence computeDependence(OMPArraySectionExpr *E); ExprDependence computeDependence(OMPArrayShapingExpr *E); ExprDependence computeDependence(OMPIteratorExpr *E); ExprDependence computeDependence(ObjCArrayLiteral *E); ExprDependence computeDependence(ObjCDictionaryLiteral *E); ExprDependence computeDependence(ObjCBoxedExpr *E); ExprDependence computeDependence(ObjCEncodeExpr *E); ExprDependence computeDependence(ObjCIvarRefExpr *E); ExprDependence computeDependence(ObjCPropertyRefExpr *E); ExprDependence computeDependence(ObjCSubscriptRefExpr *E); ExprDependence computeDependence(ObjCIsaExpr *E); ExprDependence computeDependence(ObjCIndirectCopyRestoreExpr *E); ExprDependence computeDependence(ObjCMessageExpr *E); } // namespace clang #endif