On 6/5/19 10:17 AM, Richard Sandiford wrote:
Thanks for the patch and sorry that there was no response.
I've added the C++ maintainers to cc:
Thanks. In the future, mentioning C++ in the subject line will help me
see it.
On 2019-04-08 7:20 p.m., Nicholas Krause wrote:
This fixes the caller in tsubst_requires_expr to
tsubst_constraint_variables to wrap their respective
trees in PARM_CONSTR_PARMS. This is to get the correct
parmeter constraints from the tree before calling
tsubst_constraint_variables like other callers
in constraint.cc and to fix the bug id, 88395 on
the gcc bugzilla. OK for merge?
Signed-off-by: Nicholas Krause <xerofo...@gmail.com>
---
gcc/cp/constraint.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gcc/cp/constraint.cc b/gcc/cp/constraint.cc
index 9884eb0db50..a78d0a9a49b 100644
--- a/gcc/cp/constraint.cc
+++ b/gcc/cp/constraint.cc
@@ -1882,7 +1882,7 @@ tsubst_requires_expr (tree t, tree args,
tree parms = TREE_OPERAND (t, 0);
if (parms)
{
- parms = tsubst_constraint_variables (parms, args, complain, in_decl);
+ parms = tsubst_constraint_variables (PARM_CONSTR_PARMS (parms), args,
complain, in_decl);
This change makes the testcase crash immediately because "parms" is a
PARM_DECL, not a PARM_CONSTR.
As I just wrote on the PR, the problem in this testcase is that there's
a recursive dependency of concepts: operator+= requires Concept, but
checking Concept involves calling +=. And so the compiler recurses
infinitely and runs out of stack. It would be good to catch this and
give a more helpful error, but I don't think it's valid C++.
Jason