diff options
Diffstat (limited to 'clang/lib/AST/ComputeDependence.cpp')
-rw-r--r-- | clang/lib/AST/ComputeDependence.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/clang/lib/AST/ComputeDependence.cpp b/clang/lib/AST/ComputeDependence.cpp index 584b584..9d3856b 100644 --- a/clang/lib/AST/ComputeDependence.cpp +++ b/clang/lib/AST/ComputeDependence.cpp @@ -364,6 +364,21 @@ ExprDependence clang::computeDependence(PackExpansionExpr *E) { ExprDependence::TypeValueInstantiation; } +ExprDependence clang::computeDependence(PackIndexingExpr *E) { + ExprDependence D = E->getIndexExpr()->getDependence(); + ArrayRef<Expr *> Exprs = E->getExpressions(); + if (Exprs.empty()) + D |= (E->getPackIdExpression()->getDependence() | + ExprDependence::TypeValueInstantiation) & + ~ExprDependence::UnexpandedPack; + else if (!E->getIndexExpr()->isInstantiationDependent()) { + std::optional<unsigned> Index = E->getSelectedIndex(); + assert(Index && *Index < Exprs.size() && "pack index out of bound"); + D |= Exprs[*Index]->getDependence(); + } + return D; +} + ExprDependence clang::computeDependence(SubstNonTypeTemplateParmExpr *E) { return E->getReplacement()->getDependence(); } |