aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMarek Polacek <polacek@redhat.com>2025-03-07 11:26:46 -0500
committerMarek Polacek <polacek@redhat.com>2025-03-12 13:35:49 -0400
commit0e47062ce70d147091f1a97ec94bd6efad92bc5e (patch)
treea0977b15fa4b8bc464d43f003de70efd124dec07 /gcc
parent256060380c30e2d8ced63c2f04a0856d46b77343 (diff)
downloadgcc-0e47062ce70d147091f1a97ec94bd6efad92bc5e.zip
gcc-0e47062ce70d147091f1a97ec94bd6efad92bc5e.tar.gz
gcc-0e47062ce70d147091f1a97ec94bd6efad92bc5e.tar.bz2
c++: ICE with lambda in fold expression in requires [PR119134]
The r12-8258 fix assumes that DECL_CONTEXT of 'pack' in check_for_bare_parameter_packs is going to be an operator() but as this test shows, it can be empty. PR c++/119134 gcc/cp/ChangeLog: * pt.cc (check_for_bare_parameter_packs): Check DECL_CONTEXT. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/lambda-uneval24.C: New test. Reviewed-by: Jason Merrill <jason@redhat.com>
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/pt.cc1
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/lambda-uneval24.C4
2 files changed, 5 insertions, 0 deletions
diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc
index 6ac9e6f..8aaae44 100644
--- a/gcc/cp/pt.cc
+++ b/gcc/cp/pt.cc
@@ -4375,6 +4375,7 @@ check_for_bare_parameter_packs (tree t, location_t loc /* = UNKNOWN_LOCATION */)
tree pack = TREE_VALUE (parameter_packs);
if (is_capture_proxy (pack)
|| (TREE_CODE (pack) == PARM_DECL
+ && DECL_CONTEXT (pack)
&& DECL_CONTEXT (DECL_CONTEXT (pack)) == lam))
break;
}
diff --git a/gcc/testsuite/g++.dg/cpp2a/lambda-uneval24.C b/gcc/testsuite/g++.dg/cpp2a/lambda-uneval24.C
new file mode 100644
index 0000000..a2b4559
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/lambda-uneval24.C
@@ -0,0 +1,4 @@
+// PR c++/119134
+// { dg-do compile { target c++20 } }
+
+void f(auto... args) requires(([args] {}, ..., true)) {}