[clang] [Clang] Fix dependency computation for pack indexing expression (PR #91933)

2024-05-14 Thread via cfe-commits

https://github.com/cor3ntin closed 
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


[clang] [Clang] Fix dependency computation for pack indexing expression (PR #91933)

2024-05-14 Thread Erich Keane via cfe-commits

https://github.com/erichkeane approved this pull request.


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


[clang] [Clang] Fix dependency computation for pack indexing expression (PR #91933)

2024-05-14 Thread Younan Zhang via cfe-commits

https://github.com/zyn0217 approved this pull request.

Thanks for the prompt fix! I think this looks good now, but please wait for 
@erichkeane for the final stamp.

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


[clang] [Clang] Fix dependency computation for pack indexing expression (PR #91933)

2024-05-14 Thread via cfe-commits

https://github.com/cor3ntin updated 
https://github.com/llvm/llvm-project/pull/91933

>From 4cadff527e02ae03aa5850ee713fe57aee663a52 Mon Sep 17 00:00:00 2001
From: Corentin Jabot 
Date: Mon, 13 May 2024 10:00:19 +0200
Subject: [PATCH 1/6] [Clang] Fix dependency computation for pack indexing
 expression

Given `foo...[idx]` if idx is value dependent, the expression
is type dependent.

Fixes #91885
Fixes #91884
---
 clang/lib/AST/ComputeDependence.cpp|  3 +++
 clang/test/SemaCXX/cxx2c-pack-indexing.cpp | 14 ++
 2 files changed, 17 insertions(+)

diff --git a/clang/lib/AST/ComputeDependence.cpp 
b/clang/lib/AST/ComputeDependence.cpp
index bad8e75b2f878..ee56c50d76512 100644
--- a/clang/lib/AST/ComputeDependence.cpp
+++ b/clang/lib/AST/ComputeDependence.cpp
@@ -376,6 +376,9 @@ ExprDependence clang::computeDependence(PackExpansionExpr 
*E) {
 
 ExprDependence clang::computeDependence(PackIndexingExpr *E) {
   ExprDependence D = E->getIndexExpr()->getDependence();
+  if (D & ExprDependence::Value)
+D |= ExprDependence::TypeInstantiation;
+
   ArrayRef Exprs = E->getExpressions();
   if (Exprs.empty())
 D |= (E->getPackIdExpression()->getDependence() |
diff --git a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp 
b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
index a3e5a0931491b..764f6163710bd 100644
--- a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
+++ b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
@@ -194,3 +194,17 @@ void h() {
   // expected-note-re@-2 {{function template specialization '{{.*}}' requested 
here}}
 }
 }
+
+namespace GH91885 {
+
+void test(auto...args){
+[&](){
+using R = decltype( args...[idx] ) ;
+}.template operator()<0>();
+}
+
+void f( ) {
+test(1);
+}
+
+}

>From 7c9192cffe099fe4a35e8cb9a88ec56b4480daa1 Mon Sep 17 00:00:00 2001
From: Corentin Jabot 
Date: Mon, 13 May 2024 14:24:34 +0200
Subject: [PATCH 2/6] address review feedback

---
 clang/lib/AST/ComputeDependence.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/lib/AST/ComputeDependence.cpp 
b/clang/lib/AST/ComputeDependence.cpp
index ee56c50d76512..bd0519a1787cc 100644
--- a/clang/lib/AST/ComputeDependence.cpp
+++ b/clang/lib/AST/ComputeDependence.cpp
@@ -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;
 
   ArrayRef Exprs = E->getExpressions();
   if (Exprs.empty())

>From 320b9fe584d02e5f156ff012b3c0facf9cc06e7b Mon Sep 17 00:00:00 2001
From: Corentin Jabot 
Date: Mon, 13 May 2024 15:56:02 +0200
Subject: [PATCH 3/6] add additional test

---
 clang/test/SemaCXX/cxx2c-pack-indexing.cpp | 11 ++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp 
b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
index 764f6163710bd..ef35a49023952 100644
--- a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
+++ b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
@@ -203,8 +203,17 @@ void test(auto...args){
 }.template operator()<0>();
 }
 
+template
+void test2(){
+  [&](){
+using R = decltype( args...[idx] ) ;
+  }.template operator()<0>();
+}
+
 void f( ) {
-test(1);
+  test(1);
+  test2<1>();
 }
 
+
 }

>From bb6b680b8200e2cc7c6e8059be31959b2dfb4a51 Mon Sep 17 00:00:00 2001
From: Corentin Jabot 
Date: Mon, 13 May 2024 17:34:36 +0200
Subject: [PATCH 4/6] Fix tests?

---
 clang/test/SemaCXX/cxx2c-pack-indexing.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp 
b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
index ef35a49023952..0ac85b5bcc14b 100644
--- a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
+++ b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
@@ -203,7 +203,7 @@ void test(auto...args){
 }.template operator()<0>();
 }
 
-template
+template
 void test2(){
   [&](){
 using R = decltype( args...[idx] ) ;

>From fdd321f94f29e37648a956d2fff9a9e9e739f10c Mon Sep 17 00:00:00 2001
From: Corentin Jabot 
Date: Mon, 13 May 2024 19:20:32 +0200
Subject: [PATCH 5/6] Fix getDecltypeForExpr + cleanup

---
 clang/lib/AST/ComputeDependence.cpp | 14 +-
 clang/lib/Sema/SemaType.cpp |  2 +-
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/clang/lib/AST/ComputeDependence.cpp 
b/clang/lib/AST/ComputeDependence.cpp
index bd0519a1787cc..62ca15ea398f5 100644
--- a/clang/lib/AST/ComputeDependence.cpp
+++ b/clang/lib/AST/ComputeDependence.cpp
@@ -375,15 +375,19 @@ ExprDependence clang::computeDependence(PackExpansionExpr 
*E) {
 }
 
 ExprDependence clang::computeDependence(PackIndexingExpr *E) {
+
+  ExprDependence PatternDep = E->getPackIdExpression()->getDependence() &
+  ~ExprDependence::UnexpandedPack;
+
   

[clang] [Clang] Fix dependency computation for pack indexing expression (PR #91933)

2024-05-13 Thread Younan Zhang via cfe-commits


@@ -9806,7 +9806,7 @@ QualType Sema::BuildCountAttributedArrayType(QualType 
WrappedTy,
 /// that expression, according to the rules in C++11
 /// [dcl.type.simple]p4 and C++11 [expr.lambda.prim]p18.
 QualType Sema::getDecltypeForExpr(Expr *E) {
-  if (E->isTypeDependent())
+  if (E->isInstantiationDependent())

zyn0217 wrote:

Is it... right? I was assuming this would bring such regressions e.g.

```cpp
template 
const int val = sizeof(T);

template 
void foo() {
  decltype(val);  // <-- this is instantiation-dependent, but not 
type-dependent.
}
```

Perhaps we can move it to line 9816 where the `PackIndexingExpr` is handled?

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


[clang] [Clang] Fix dependency computation for pack indexing expression (PR #91933)

2024-05-13 Thread via cfe-commits

https://github.com/cor3ntin updated 
https://github.com/llvm/llvm-project/pull/91933

>From 4cadff527e02ae03aa5850ee713fe57aee663a52 Mon Sep 17 00:00:00 2001
From: Corentin Jabot 
Date: Mon, 13 May 2024 10:00:19 +0200
Subject: [PATCH 1/5] [Clang] Fix dependency computation for pack indexing
 expression

Given `foo...[idx]` if idx is value dependent, the expression
is type dependent.

Fixes #91885
Fixes #91884
---
 clang/lib/AST/ComputeDependence.cpp|  3 +++
 clang/test/SemaCXX/cxx2c-pack-indexing.cpp | 14 ++
 2 files changed, 17 insertions(+)

diff --git a/clang/lib/AST/ComputeDependence.cpp 
b/clang/lib/AST/ComputeDependence.cpp
index bad8e75b2f878..ee56c50d76512 100644
--- a/clang/lib/AST/ComputeDependence.cpp
+++ b/clang/lib/AST/ComputeDependence.cpp
@@ -376,6 +376,9 @@ ExprDependence clang::computeDependence(PackExpansionExpr 
*E) {
 
 ExprDependence clang::computeDependence(PackIndexingExpr *E) {
   ExprDependence D = E->getIndexExpr()->getDependence();
+  if (D & ExprDependence::Value)
+D |= ExprDependence::TypeInstantiation;
+
   ArrayRef Exprs = E->getExpressions();
   if (Exprs.empty())
 D |= (E->getPackIdExpression()->getDependence() |
diff --git a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp 
b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
index a3e5a0931491b..764f6163710bd 100644
--- a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
+++ b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
@@ -194,3 +194,17 @@ void h() {
   // expected-note-re@-2 {{function template specialization '{{.*}}' requested 
here}}
 }
 }
+
+namespace GH91885 {
+
+void test(auto...args){
+[&](){
+using R = decltype( args...[idx] ) ;
+}.template operator()<0>();
+}
+
+void f( ) {
+test(1);
+}
+
+}

>From 7c9192cffe099fe4a35e8cb9a88ec56b4480daa1 Mon Sep 17 00:00:00 2001
From: Corentin Jabot 
Date: Mon, 13 May 2024 14:24:34 +0200
Subject: [PATCH 2/5] address review feedback

---
 clang/lib/AST/ComputeDependence.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/lib/AST/ComputeDependence.cpp 
b/clang/lib/AST/ComputeDependence.cpp
index ee56c50d76512..bd0519a1787cc 100644
--- a/clang/lib/AST/ComputeDependence.cpp
+++ b/clang/lib/AST/ComputeDependence.cpp
@@ -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;
 
   ArrayRef Exprs = E->getExpressions();
   if (Exprs.empty())

>From 320b9fe584d02e5f156ff012b3c0facf9cc06e7b Mon Sep 17 00:00:00 2001
From: Corentin Jabot 
Date: Mon, 13 May 2024 15:56:02 +0200
Subject: [PATCH 3/5] add additional test

---
 clang/test/SemaCXX/cxx2c-pack-indexing.cpp | 11 ++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp 
b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
index 764f6163710bd..ef35a49023952 100644
--- a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
+++ b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
@@ -203,8 +203,17 @@ void test(auto...args){
 }.template operator()<0>();
 }
 
+template
+void test2(){
+  [&](){
+using R = decltype( args...[idx] ) ;
+  }.template operator()<0>();
+}
+
 void f( ) {
-test(1);
+  test(1);
+  test2<1>();
 }
 
+
 }

>From bb6b680b8200e2cc7c6e8059be31959b2dfb4a51 Mon Sep 17 00:00:00 2001
From: Corentin Jabot 
Date: Mon, 13 May 2024 17:34:36 +0200
Subject: [PATCH 4/5] Fix tests?

---
 clang/test/SemaCXX/cxx2c-pack-indexing.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp 
b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
index ef35a49023952..0ac85b5bcc14b 100644
--- a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
+++ b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
@@ -203,7 +203,7 @@ void test(auto...args){
 }.template operator()<0>();
 }
 
-template
+template
 void test2(){
   [&](){
 using R = decltype( args...[idx] ) ;

>From fdd321f94f29e37648a956d2fff9a9e9e739f10c Mon Sep 17 00:00:00 2001
From: Corentin Jabot 
Date: Mon, 13 May 2024 19:20:32 +0200
Subject: [PATCH 5/5] Fix getDecltypeForExpr + cleanup

---
 clang/lib/AST/ComputeDependence.cpp | 14 +-
 clang/lib/Sema/SemaType.cpp |  2 +-
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/clang/lib/AST/ComputeDependence.cpp 
b/clang/lib/AST/ComputeDependence.cpp
index bd0519a1787cc..62ca15ea398f5 100644
--- a/clang/lib/AST/ComputeDependence.cpp
+++ b/clang/lib/AST/ComputeDependence.cpp
@@ -375,15 +375,19 @@ ExprDependence clang::computeDependence(PackExpansionExpr 
*E) {
 }
 
 ExprDependence clang::computeDependence(PackIndexingExpr *E) {
+
+  ExprDependence PatternDep = E->getPackIdExpression()->getDependence() &
+  ~ExprDependence::UnexpandedPack;
+
   

[clang] [Clang] Fix dependency computation for pack indexing expression (PR #91933)

2024-05-13 Thread via cfe-commits

https://github.com/cor3ntin updated 
https://github.com/llvm/llvm-project/pull/91933

>From 4cadff527e02ae03aa5850ee713fe57aee663a52 Mon Sep 17 00:00:00 2001
From: Corentin Jabot 
Date: Mon, 13 May 2024 10:00:19 +0200
Subject: [PATCH 1/4] [Clang] Fix dependency computation for pack indexing
 expression

Given `foo...[idx]` if idx is value dependent, the expression
is type dependent.

Fixes #91885
Fixes #91884
---
 clang/lib/AST/ComputeDependence.cpp|  3 +++
 clang/test/SemaCXX/cxx2c-pack-indexing.cpp | 14 ++
 2 files changed, 17 insertions(+)

diff --git a/clang/lib/AST/ComputeDependence.cpp 
b/clang/lib/AST/ComputeDependence.cpp
index bad8e75b2f878..ee56c50d76512 100644
--- a/clang/lib/AST/ComputeDependence.cpp
+++ b/clang/lib/AST/ComputeDependence.cpp
@@ -376,6 +376,9 @@ ExprDependence clang::computeDependence(PackExpansionExpr 
*E) {
 
 ExprDependence clang::computeDependence(PackIndexingExpr *E) {
   ExprDependence D = E->getIndexExpr()->getDependence();
+  if (D & ExprDependence::Value)
+D |= ExprDependence::TypeInstantiation;
+
   ArrayRef Exprs = E->getExpressions();
   if (Exprs.empty())
 D |= (E->getPackIdExpression()->getDependence() |
diff --git a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp 
b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
index a3e5a0931491b..764f6163710bd 100644
--- a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
+++ b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
@@ -194,3 +194,17 @@ void h() {
   // expected-note-re@-2 {{function template specialization '{{.*}}' requested 
here}}
 }
 }
+
+namespace GH91885 {
+
+void test(auto...args){
+[&](){
+using R = decltype( args...[idx] ) ;
+}.template operator()<0>();
+}
+
+void f( ) {
+test(1);
+}
+
+}

>From 7c9192cffe099fe4a35e8cb9a88ec56b4480daa1 Mon Sep 17 00:00:00 2001
From: Corentin Jabot 
Date: Mon, 13 May 2024 14:24:34 +0200
Subject: [PATCH 2/4] address review feedback

---
 clang/lib/AST/ComputeDependence.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/lib/AST/ComputeDependence.cpp 
b/clang/lib/AST/ComputeDependence.cpp
index ee56c50d76512..bd0519a1787cc 100644
--- a/clang/lib/AST/ComputeDependence.cpp
+++ b/clang/lib/AST/ComputeDependence.cpp
@@ -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;
 
   ArrayRef Exprs = E->getExpressions();
   if (Exprs.empty())

>From 320b9fe584d02e5f156ff012b3c0facf9cc06e7b Mon Sep 17 00:00:00 2001
From: Corentin Jabot 
Date: Mon, 13 May 2024 15:56:02 +0200
Subject: [PATCH 3/4] add additional test

---
 clang/test/SemaCXX/cxx2c-pack-indexing.cpp | 11 ++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp 
b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
index 764f6163710bd..ef35a49023952 100644
--- a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
+++ b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
@@ -203,8 +203,17 @@ void test(auto...args){
 }.template operator()<0>();
 }
 
+template
+void test2(){
+  [&](){
+using R = decltype( args...[idx] ) ;
+  }.template operator()<0>();
+}
+
 void f( ) {
-test(1);
+  test(1);
+  test2<1>();
 }
 
+
 }

>From bb6b680b8200e2cc7c6e8059be31959b2dfb4a51 Mon Sep 17 00:00:00 2001
From: Corentin Jabot 
Date: Mon, 13 May 2024 17:34:36 +0200
Subject: [PATCH 4/4] Fix tests?

---
 clang/test/SemaCXX/cxx2c-pack-indexing.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp 
b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
index ef35a49023952..0ac85b5bcc14b 100644
--- a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
+++ b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
@@ -203,7 +203,7 @@ void test(auto...args){
 }.template operator()<0>();
 }
 
-template
+template
 void test2(){
   [&](){
 using R = decltype( args...[idx] ) ;

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang] Fix dependency computation for pack indexing expression (PR #91933)

2024-05-13 Thread via cfe-commits


@@ -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:

> In that case (no selected expression) the pack is always type dependent.

I don't get it, could you explain the reason? FWIW, new test failed in CI so we 
may need to reconsider this.

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


[clang] [Clang] Fix dependency computation for pack indexing expression (PR #91933)

2024-05-13 Thread via cfe-commits


@@ -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;

cor3ntin 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.

In that case (no selected expression) the pack is always type dependent. I did 
add a test though


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


[clang] [Clang] Fix dependency computation for pack indexing expression (PR #91933)

2024-05-13 Thread via cfe-commits

https://github.com/cor3ntin updated 
https://github.com/llvm/llvm-project/pull/91933

>From 4cadff527e02ae03aa5850ee713fe57aee663a52 Mon Sep 17 00:00:00 2001
From: Corentin Jabot 
Date: Mon, 13 May 2024 10:00:19 +0200
Subject: [PATCH 1/3] [Clang] Fix dependency computation for pack indexing
 expression

Given `foo...[idx]` if idx is value dependent, the expression
is type dependent.

Fixes #91885
Fixes #91884
---
 clang/lib/AST/ComputeDependence.cpp|  3 +++
 clang/test/SemaCXX/cxx2c-pack-indexing.cpp | 14 ++
 2 files changed, 17 insertions(+)

diff --git a/clang/lib/AST/ComputeDependence.cpp 
b/clang/lib/AST/ComputeDependence.cpp
index bad8e75b2f878..ee56c50d76512 100644
--- a/clang/lib/AST/ComputeDependence.cpp
+++ b/clang/lib/AST/ComputeDependence.cpp
@@ -376,6 +376,9 @@ ExprDependence clang::computeDependence(PackExpansionExpr 
*E) {
 
 ExprDependence clang::computeDependence(PackIndexingExpr *E) {
   ExprDependence D = E->getIndexExpr()->getDependence();
+  if (D & ExprDependence::Value)
+D |= ExprDependence::TypeInstantiation;
+
   ArrayRef Exprs = E->getExpressions();
   if (Exprs.empty())
 D |= (E->getPackIdExpression()->getDependence() |
diff --git a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp 
b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
index a3e5a0931491b..764f6163710bd 100644
--- a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
+++ b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
@@ -194,3 +194,17 @@ void h() {
   // expected-note-re@-2 {{function template specialization '{{.*}}' requested 
here}}
 }
 }
+
+namespace GH91885 {
+
+void test(auto...args){
+[&](){
+using R = decltype( args...[idx] ) ;
+}.template operator()<0>();
+}
+
+void f( ) {
+test(1);
+}
+
+}

>From 7c9192cffe099fe4a35e8cb9a88ec56b4480daa1 Mon Sep 17 00:00:00 2001
From: Corentin Jabot 
Date: Mon, 13 May 2024 14:24:34 +0200
Subject: [PATCH 2/3] address review feedback

---
 clang/lib/AST/ComputeDependence.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/lib/AST/ComputeDependence.cpp 
b/clang/lib/AST/ComputeDependence.cpp
index ee56c50d76512..bd0519a1787cc 100644
--- a/clang/lib/AST/ComputeDependence.cpp
+++ b/clang/lib/AST/ComputeDependence.cpp
@@ -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;
 
   ArrayRef Exprs = E->getExpressions();
   if (Exprs.empty())

>From 320b9fe584d02e5f156ff012b3c0facf9cc06e7b Mon Sep 17 00:00:00 2001
From: Corentin Jabot 
Date: Mon, 13 May 2024 15:56:02 +0200
Subject: [PATCH 3/3] add additional test

---
 clang/test/SemaCXX/cxx2c-pack-indexing.cpp | 11 ++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp 
b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
index 764f6163710bd..ef35a49023952 100644
--- a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
+++ b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
@@ -203,8 +203,17 @@ void test(auto...args){
 }.template operator()<0>();
 }
 
+template
+void test2(){
+  [&](){
+using R = decltype( args...[idx] ) ;
+  }.template operator()<0>();
+}
+
 void f( ) {
-test(1);
+  test(1);
+  test2<1>();
 }
 
+
 }

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang] Fix dependency computation for pack indexing expression (PR #91933)

2024-05-13 Thread via cfe-commits


@@ -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:

Possibly `PackExpr->getExpressions().front()` for the type-independent 
`PackExpr` with its `IndexExpr` instantiation-dependent? I'm not sure whether 
we need an empty-check here.

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


[clang] [Clang] Fix dependency computation for pack indexing expression (PR #91933)

2024-05-13 Thread via cfe-commits


@@ -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 // notice the "int..." here.
void test(){
  [&](){
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


[clang] [Clang] Fix dependency computation for pack indexing expression (PR #91933)

2024-05-13 Thread via cfe-commits

https://github.com/cor3ntin updated 
https://github.com/llvm/llvm-project/pull/91933

>From 4cadff527e02ae03aa5850ee713fe57aee663a52 Mon Sep 17 00:00:00 2001
From: Corentin Jabot 
Date: Mon, 13 May 2024 10:00:19 +0200
Subject: [PATCH 1/2] [Clang] Fix dependency computation for pack indexing
 expression

Given `foo...[idx]` if idx is value dependent, the expression
is type dependent.

Fixes #91885
Fixes #91884
---
 clang/lib/AST/ComputeDependence.cpp|  3 +++
 clang/test/SemaCXX/cxx2c-pack-indexing.cpp | 14 ++
 2 files changed, 17 insertions(+)

diff --git a/clang/lib/AST/ComputeDependence.cpp 
b/clang/lib/AST/ComputeDependence.cpp
index bad8e75b2f878..ee56c50d76512 100644
--- a/clang/lib/AST/ComputeDependence.cpp
+++ b/clang/lib/AST/ComputeDependence.cpp
@@ -376,6 +376,9 @@ ExprDependence clang::computeDependence(PackExpansionExpr 
*E) {
 
 ExprDependence clang::computeDependence(PackIndexingExpr *E) {
   ExprDependence D = E->getIndexExpr()->getDependence();
+  if (D & ExprDependence::Value)
+D |= ExprDependence::TypeInstantiation;
+
   ArrayRef Exprs = E->getExpressions();
   if (Exprs.empty())
 D |= (E->getPackIdExpression()->getDependence() |
diff --git a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp 
b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
index a3e5a0931491b..764f6163710bd 100644
--- a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
+++ b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
@@ -194,3 +194,17 @@ void h() {
   // expected-note-re@-2 {{function template specialization '{{.*}}' requested 
here}}
 }
 }
+
+namespace GH91885 {
+
+void test(auto...args){
+[&](){
+using R = decltype( args...[idx] ) ;
+}.template operator()<0>();
+}
+
+void f( ) {
+test(1);
+}
+
+}

>From 7c9192cffe099fe4a35e8cb9a88ec56b4480daa1 Mon Sep 17 00:00:00 2001
From: Corentin Jabot 
Date: Mon, 13 May 2024 14:24:34 +0200
Subject: [PATCH 2/2] address review feedback

---
 clang/lib/AST/ComputeDependence.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/lib/AST/ComputeDependence.cpp 
b/clang/lib/AST/ComputeDependence.cpp
index ee56c50d76512..bd0519a1787cc 100644
--- a/clang/lib/AST/ComputeDependence.cpp
+++ b/clang/lib/AST/ComputeDependence.cpp
@@ -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;
 
   ArrayRef Exprs = E->getExpressions();
   if (Exprs.empty())

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang] Fix dependency computation for pack indexing expression (PR #91933)

2024-05-13 Thread via cfe-commits


@@ -376,6 +376,9 @@ ExprDependence clang::computeDependence(PackExpansionExpr 
*E) {
 
 ExprDependence clang::computeDependence(PackIndexingExpr *E) {
   ExprDependence D = E->getIndexExpr()->getDependence();
+  if (D & ExprDependence::Value)
+D |= ExprDependence::TypeInstantiation;

cor3ntin wrote:

NVM, you are right, we can simplify this whole thing, I'll do that shortly

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


[clang] [Clang] Fix dependency computation for pack indexing expression (PR #91933)

2024-05-13 Thread via cfe-commits


@@ -376,6 +376,9 @@ ExprDependence clang::computeDependence(PackExpansionExpr 
*E) {
 
 ExprDependence clang::computeDependence(PackIndexingExpr *E) {
   ExprDependence D = E->getIndexExpr()->getDependence();
+  if (D & ExprDependence::Value)
+D |= ExprDependence::TypeInstantiation;

cor3ntin wrote:

> Should E...[N] be treated as type-dependent regardless of the result being 
> always an int?

Yes. (We don't do anything to look at whether all the expressions would have 
the same type)

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


[clang] [Clang] Fix dependency computation for pack indexing expression (PR #91933)

2024-05-13 Thread Younan Zhang via cfe-commits


@@ -376,6 +376,9 @@ ExprDependence clang::computeDependence(PackExpansionExpr 
*E) {
 
 ExprDependence clang::computeDependence(PackIndexingExpr *E) {
   ExprDependence D = E->getIndexExpr()->getDependence();
+  if (D & ExprDependence::Value)
+D |= ExprDependence::TypeInstantiation;

zyn0217 wrote:

Probably `E->getPackIdExpression()->getDependence() & 
ExprDependence::TypeInstantiation`?

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


[clang] [Clang] Fix dependency computation for pack indexing expression (PR #91933)

2024-05-13 Thread Younan Zhang via cfe-commits


@@ -376,6 +376,9 @@ ExprDependence clang::computeDependence(PackExpansionExpr 
*E) {
 
 ExprDependence clang::computeDependence(PackIndexingExpr *E) {
   ExprDependence D = E->getIndexExpr()->getDependence();
+  if (D & ExprDependence::Value)
+D |= ExprDependence::TypeInstantiation;

zyn0217 wrote:

Does it mean "if the index expression is value-dependent, then the whole 
`PackIndexingExpr` is type-dependent despite its expressions"? For example,
```cpp
template 
auto foo() {
  return E...[N];
}
```
Should `E...[N]` be treated as type-dependent regardless of the result being 
always an int?

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


[clang] [Clang] Fix dependency computation for pack indexing expression (PR #91933)

2024-05-13 Thread via cfe-commits

https://github.com/cor3ntin updated 
https://github.com/llvm/llvm-project/pull/91933

>From 4cadff527e02ae03aa5850ee713fe57aee663a52 Mon Sep 17 00:00:00 2001
From: Corentin Jabot 
Date: Mon, 13 May 2024 10:00:19 +0200
Subject: [PATCH] [Clang] Fix dependency computation for pack indexing
 expression

Given `foo...[idx]` if idx is value dependent, the expression
is type dependent.

Fixes #91885
Fixes #91884
---
 clang/lib/AST/ComputeDependence.cpp|  3 +++
 clang/test/SemaCXX/cxx2c-pack-indexing.cpp | 14 ++
 2 files changed, 17 insertions(+)

diff --git a/clang/lib/AST/ComputeDependence.cpp 
b/clang/lib/AST/ComputeDependence.cpp
index bad8e75b2f878..ee56c50d76512 100644
--- a/clang/lib/AST/ComputeDependence.cpp
+++ b/clang/lib/AST/ComputeDependence.cpp
@@ -376,6 +376,9 @@ ExprDependence clang::computeDependence(PackExpansionExpr 
*E) {
 
 ExprDependence clang::computeDependence(PackIndexingExpr *E) {
   ExprDependence D = E->getIndexExpr()->getDependence();
+  if (D & ExprDependence::Value)
+D |= ExprDependence::TypeInstantiation;
+
   ArrayRef Exprs = E->getExpressions();
   if (Exprs.empty())
 D |= (E->getPackIdExpression()->getDependence() |
diff --git a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp 
b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
index a3e5a0931491b..764f6163710bd 100644
--- a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
+++ b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
@@ -194,3 +194,17 @@ void h() {
   // expected-note-re@-2 {{function template specialization '{{.*}}' requested 
here}}
 }
 }
+
+namespace GH91885 {
+
+void test(auto...args){
+[&](){
+using R = decltype( args...[idx] ) ;
+}.template operator()<0>();
+}
+
+void f( ) {
+test(1);
+}
+
+}

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang] Fix dependency computation for pack indexing expression (PR #91933)

2024-05-13 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-clang

Author: cor3ntin (cor3ntin)


Changes

Given `foo...[idx]` if idx is value dependent, the expression is type dependent.

Fixes #91885
Fixes #91884

---
Full diff: https://github.com/llvm/llvm-project/pull/91933.diff


2 Files Affected:

- (modified) clang/lib/AST/ComputeDependence.cpp (+3) 
- (modified) clang/test/SemaCXX/cxx2c-pack-indexing.cpp (+14) 


``diff
diff --git a/clang/lib/AST/ComputeDependence.cpp 
b/clang/lib/AST/ComputeDependence.cpp
index bad8e75b2f878..ee56c50d76512 100644
--- a/clang/lib/AST/ComputeDependence.cpp
+++ b/clang/lib/AST/ComputeDependence.cpp
@@ -376,6 +376,9 @@ ExprDependence clang::computeDependence(PackExpansionExpr 
*E) {
 
 ExprDependence clang::computeDependence(PackIndexingExpr *E) {
   ExprDependence D = E->getIndexExpr()->getDependence();
+  if (D & ExprDependence::Value)
+D |= ExprDependence::TypeInstantiation;
+
   ArrayRef Exprs = E->getExpressions();
   if (Exprs.empty())
 D |= (E->getPackIdExpression()->getDependence() |
diff --git a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp 
b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
index a3e5a0931491b..764f6163710bd 100644
--- a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
+++ b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
@@ -194,3 +194,17 @@ void h() {
   // expected-note-re@-2 {{function template specialization '{{.*}}' requested 
here}}
 }
 }
+
+namespace GH91885 {
+
+void test(auto...args){
+[&](){
+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


[clang] [Clang] Fix dependency computation for pack indexing expression (PR #91933)

2024-05-13 Thread via cfe-commits

https://github.com/cor3ntin created 
https://github.com/llvm/llvm-project/pull/91933

Given `foo...[idx]` if idx is value dependent, the expression is type dependent.

Fixes #91885
Fixes #91884

>From 066e23de6ef0b3bb44513c1d239981e7d0f4453e Mon Sep 17 00:00:00 2001
From: Corentin Jabot 
Date: Mon, 13 May 2024 10:00:19 +0200
Subject: [PATCH] [Clang] Fix dependency computation for pack indexing
 expression

Given `foo...[idx]` if idx is value dependent, the expression
is type dependent.

Fixes #91885
Fixes #91884
---
 clang/lib/AST/ComputeDependence.cpp|  3 +++
 clang/test/SemaCXX/cxx2c-pack-indexing.cpp | 14 ++
 2 files changed, 17 insertions(+)

diff --git a/clang/lib/AST/ComputeDependence.cpp 
b/clang/lib/AST/ComputeDependence.cpp
index bad8e75b2f878..ee56c50d76512 100644
--- a/clang/lib/AST/ComputeDependence.cpp
+++ b/clang/lib/AST/ComputeDependence.cpp
@@ -376,6 +376,9 @@ ExprDependence clang::computeDependence(PackExpansionExpr 
*E) {
 
 ExprDependence clang::computeDependence(PackIndexingExpr *E) {
   ExprDependence D = E->getIndexExpr()->getDependence();
+  if (D & ExprDependence::Value)
+D |= ExprDependence::TypeInstantiation;
+
   ArrayRef Exprs = E->getExpressions();
   if (Exprs.empty())
 D |= (E->getPackIdExpression()->getDependence() |
diff --git a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp 
b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
index a3e5a0931491b..764f6163710bd 100644
--- a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
+++ b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
@@ -194,3 +194,17 @@ void h() {
   // expected-note-re@-2 {{function template specialization '{{.*}}' requested 
here}}
 }
 }
+
+namespace GH91885 {
+
+void test(auto...args){
+[&](){
+using R = decltype( args...[idx] ) ;
+}.template operator()<0>();
+}
+
+void f( ) {
+test(1);
+}
+
+}

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits