https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95192
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jakub at gcc dot gnu.org
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
In cp/parser.c, we have code that avoids building attributes with
error_mark_node values (instead just use error_mark_node as the attributes).
So, I wonder if we shouldn't do that in tsubst_attributes too, like:
--- gcc/cp/pt.c.jj 2020-11-18 09:40:09.618663053 +0100
+++ gcc/cp/pt.c 2020-11-18 15:47:26.584181671 +0100
@@ -11502,6 +11502,8 @@ tsubst_attribute (tree t, tree *decl_p,
tree chain
= tsubst_expr (TREE_CHAIN (val), args, complain, in_decl,
/*integral_constant_expression_p=*/false);
+ if (chain == error_mark_node)
+ return error_mark_node;
if (chain != TREE_CHAIN (val))
val = tree_cons (NULL_TREE, TREE_VALUE (val), chain);
}
@@ -11524,8 +11526,12 @@ tsubst_attribute (tree t, tree *decl_p,
return list;
}
else
- val = tsubst_expr (val, args, complain, in_decl,
- /*integral_constant_expression_p=*/false);
+ {
+ val = tsubst_expr (val, args, complain, in_decl,
+ /*integral_constant_expression_p=*/false);
+ if (val == error_mark_node)
+ return val;
+ }
if (val != TREE_VALUE (t))
return build_tree_list (TREE_PURPOSE (t), val);
Except that we accept the testcase then rather than reject - the unification is
done with complain == 0...