Sorry, I used the wrong e-mail address for Joseph. On Thu, Jun 27, 2024 at 05:04:41PM -0400, Marek Polacek wrote: > Bootstrapped/regtested on x86_64-pc-linux-gnu, ok for trunk? > > -- >8 -- > I had this PR in my open tabs so why not go ahead and fix it. > > decl_attributes gets last_decl, the last already pushed declaration, > to be used in common_handle_aligned_attribute. In C++, we look up > the decl via find_last_decl, which returns NULL_TREE if it finds > a decl that had not been declared. In C, we look up the decl via > lookup_last_decl which returns error_mark_node rather than NULL_TREE > in that case. > > The error_mark_node causes a crash in common_handle_aligned_attribute. > We can fix this on the C FE side like in the patch below. > > PR c/115549 > > gcc/c/ChangeLog: > > * c-decl.cc (c_decl_attributes): If lookup_last_decl returns > error_mark_node, use NULL_TREE as last_decl. > > gcc/testsuite/ChangeLog: > > * c-c++-common/attr-aligned-2.c: New test. > --- > gcc/c/c-decl.cc | 5 ++++- > gcc/testsuite/c-c++-common/attr-aligned-2.c | 8 ++++++++ > 2 files changed, 12 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/c-c++-common/attr-aligned-2.c > > diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc > index 0eac266471f..97f1d346835 100644 > --- a/gcc/c/c-decl.cc > +++ b/gcc/c/c-decl.cc > @@ -5496,8 +5496,11 @@ c_decl_attributes (tree *node, tree attributes, int > flags) > /* Look up the current declaration with all the attributes merged > so far so that attributes on the current declaration that's > about to be pushed that conflict with the former can be detected, > - diagnosed, and rejected as appropriate. */ > + diagnosed, and rejected as appropriate. To match the C++ FE, do > + not pass an error_mark_node when we found an undeclared variable. */ > tree last_decl = lookup_last_decl (*node); > + if (last_decl == error_mark_node) > + last_decl = NULL_TREE; > return decl_attributes (node, attributes, flags, last_decl); > } > > diff --git a/gcc/testsuite/c-c++-common/attr-aligned-2.c > b/gcc/testsuite/c-c++-common/attr-aligned-2.c > new file mode 100644 > index 00000000000..991b3904540 > --- /dev/null > +++ b/gcc/testsuite/c-c++-common/attr-aligned-2.c > @@ -0,0 +1,8 @@ > +/* PR c/115549 */ > +/* { dg-do compile } */ > + > +__attribute__((aligned,optimize(s))) /* { dg-error "not declared|undeclared" > } */ > +int s() > +{ > + return 0; > +} > > base-commit: da7976a015a4388b8ed843412c3c1c840451cf0f > -- > 2.45.2 >
Marek