================ @@ -377,7 +377,7 @@ ExprDependence clang::computeDependence(PackExpansionExpr *E) { ExprDependence clang::computeDependence(PackIndexingExpr *E) { ExprDependence D = E->getIndexExpr()->getDependence(); if (D & ExprDependence::Value) - D |= ExprDependence::TypeInstantiation; + D |= E->getPackIdExpression()->getDependence() & ExprDependence::Type; ---------------- RungeCC wrote:
The change seems reasonable to me, however with it we need to alter the way `PackIndexingExpr` is handled inside the `getDecltypeForExpr`, since when 1) `E` is not type-dependent (`int...` case) and 2) `index` is instantiation-dependent we shall not directly call `getSelectedExpr`. https://github.com/llvm/llvm-project/blob/ad1a65fcacda8794e2f1fa3e1dec1c1b7813422c/clang/lib/Sema/SemaType.cpp#L9739-L9748 https://github.com/llvm/llvm-project/blob/ad1a65fcacda8794e2f1fa3e1dec1c1b7813422c/clang/include/clang/AST/ExprCXX.h#L4411-L4415 In short, crash on the following code: ```c++ template<int...args> // notice the "int..." here. void test(){ [&]<int idx>(){ using R = decltype( args...[idx] ) ; }.template operator()<0>(); } void f( ) { test<1>(); } ``` https://github.com/llvm/llvm-project/pull/91933 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits