Commit e2a71816 by Jakub Jelinek

attribs: Don't diagnose attribute exclusions during error recovery [PR94705]

On the following testcase GCC ICEs, because last_decl is error_mark_node,
and diag_attr_exclusions assumes that if it is not NULL, it must be a decl.

The following patch just doesn't diagnose attribute exclusions if the
other decl is erroneous (and thus we've already reported errors for it).

2020-04-23  Jakub Jelinek  <jakub@redhat.com>

	PR c/94705
	* attribs.c (decl_attribute): Don't diagnose attribute exclusions
	if last_decl is error_mark_node or has such a TREE_TYPE.

	* gcc.dg/pr94705.c: New test.
parent 49fc9f36
2020-04-23 Jakub Jelinek <jakub@redhat.com>
PR c/94705
* attribs.c (decl_attribute): Don't diagnose attribute exclusions
if last_decl is error_mark_node or has such a TREE_TYPE.
2020-04-22 Felix Yang <felix.yang@huawei.com> 2020-04-22 Felix Yang <felix.yang@huawei.com>
PR target/94678 PR target/94678
......
...@@ -677,7 +677,8 @@ decl_attributes (tree *node, tree attributes, int flags, ...@@ -677,7 +677,8 @@ decl_attributes (tree *node, tree attributes, int flags,
reject incompatible attributes. */ reject incompatible attributes. */
bool built_in = flags & ATTR_FLAG_BUILT_IN; bool built_in = flags & ATTR_FLAG_BUILT_IN;
if (spec->exclude if (spec->exclude
&& (flag_checking || !built_in)) && (flag_checking || !built_in)
&& !error_operand_p (last_decl))
{ {
/* Always check attributes on user-defined functions. /* Always check attributes on user-defined functions.
Check them on built-ins only when -fchecking is set. Check them on built-ins only when -fchecking is set.
......
2020-04-23 Jakub Jelinek <jakub@redhat.com>
PR c/94705
* gcc.dg/pr94705.c: New test.
2020-04-22 Patrick Palka <ppalka@redhat.com> 2020-04-22 Patrick Palka <ppalka@redhat.com>
PR c++/94719 PR c++/94719
......
/* PR c/94705 */
/* { dg-do compile } */
/* { dg-options "" } */
void foo ();
int
bar (void)
{
foo (baz); /* { dg-error "'baz' undeclared" } */
/* { dg-message "only once" "" { target *-*-* } .-1 } */
void __attribute__ ((noinline)) baz (void);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment