[Bug c++/95192] [11 Regression] ICE: tree check: expected tree_list, have error_mark in handle_assume_aligned_attribute, at c-family/c-attribs.c:2996
marxin at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Dec 4 14:17:15 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95192
Martin Liška <marxin at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |marxin at gcc dot gnu.org
--- Comment #3 from Martin Liška <marxin at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #2)
> 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...
Are you planning Jakub to send the patch candidate to the mailing list?
More information about the Gcc-bugs
mailing list