diff options
author | cor3ntin <corentinjabot@gmail.com> | 2024-01-27 10:23:38 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-27 10:23:38 +0100 |
commit | ad1a65fcacda8794e2f1fa3e1dec1c1b7813422c (patch) | |
tree | ee68f0f3f24c7dfaa09a2b75dc5427d7f11b6a15 /clang/lib/AST/ComputeDependence.cpp | |
parent | 1f13203029333ac99cc9844b8b6915aae3fc0902 (diff) | |
download | llvm-ad1a65fcacda8794e2f1fa3e1dec1c1b7813422c.zip llvm-ad1a65fcacda8794e2f1fa3e1dec1c1b7813422c.tar.gz llvm-ad1a65fcacda8794e2f1fa3e1dec1c1b7813422c.tar.bz2 |
[Clang][C++26] Implement Pack Indexing (P2662R3). (#72644)
Implements https://isocpp.org/files/papers/P2662R3.pdf
The feature is exposed as an extension in older language modes.
Mangling is not yet supported and that is something we will have to do before release.
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(); } |