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.
This commit is contained in:
parent
49fc9f36a3
commit
e2a71816b4
4 changed files with 26 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
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>
|
||||
|
||||
PR target/94678
|
||||
|
|
|
@ -677,7 +677,8 @@ decl_attributes (tree *node, tree attributes, int flags,
|
|||
reject incompatible attributes. */
|
||||
bool built_in = flags & ATTR_FLAG_BUILT_IN;
|
||||
if (spec->exclude
|
||||
&& (flag_checking || !built_in))
|
||||
&& (flag_checking || !built_in)
|
||||
&& !error_operand_p (last_decl))
|
||||
{
|
||||
/* Always check attributes on user-defined functions.
|
||||
Check them on built-ins only when -fchecking is set.
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
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>
|
||||
|
||||
PR c++/94719
|
||||
|
|
13
gcc/testsuite/gcc.dg/pr94705.c
Normal file
13
gcc/testsuite/gcc.dg/pr94705.c
Normal file
|
@ -0,0 +1,13 @@
|
|||
/* 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);
|
||||
}
|
Loading…
Add table
Reference in a new issue