[Bug c++/100596] [12 Regression] error: attribute appertains to a friend declaration that is not a definition since r12-786-g149061188c7c6ddf

2021-05-19 Thread mpolacek at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100596

Marek Polacek  changed:

   What|Removed |Added

 Resolution|--- |FIXED
 Status|ASSIGNED|RESOLVED

--- Comment #6 from Marek Polacek  ---
Should be fixed, sorry.

[Bug c++/100596] [12 Regression] error: attribute appertains to a friend declaration that is not a definition since r12-786-g149061188c7c6ddf

2021-05-19 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100596

--- Comment #5 from CVS Commits  ---
The master branch has been updated by Marek Polacek :

https://gcc.gnu.org/g:adcb497bdba499d161d2e5e8de782bdd6f75d62c

commit r12-925-gadcb497bdba499d161d2e5e8de782bdd6f75d62c
Author: Marek Polacek 
Date:   Tue May 18 16:11:16 2021 -0400

c++: Relax attribute on friend declaration checking [PR100596]

It turned out that there are codebases that profusely use GNU attributes
on friend declarations, so we have to dial back our checking and allow
them.  And for C++11 attributes let's just warn instead of giving
errors.

PR c++/100596

gcc/cp/ChangeLog:

* cp-tree.h (any_non_type_attribute_p): Remove.
* decl.c (grokdeclarator): Turn an error into a warning and only
warn for standard attributes.
* decl2.c (any_non_type_attribute_p): Remove.
* parser.c (cp_parser_elaborated_type_specifier): Turn an error
into a warning and only warn for standard attributes.
(cp_parser_member_declaration): Likewise.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/friend7.C: Turn a few dg-warnings into dg-errors.
Remove dg-errors for GNU attributes.
* g++.dg/ext/attrib63.C: Remove dg-error.
* g++.dg/cpp0x/friend8.C: New test.

[Bug c++/100596] [12 Regression] error: attribute appertains to a friend declaration that is not a definition since r12-786-g149061188c7c6ddf

2021-05-14 Thread mpolacek at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100596

Marek Polacek  changed:

   What|Removed |Added

 Status|NEW |ASSIGNED
   Assignee|unassigned at gcc dot gnu.org  |mpolacek at gcc dot 
gnu.org

--- Comment #4 from Marek Polacek  ---
On it.

[Bug c++/100596] [12 Regression] error: attribute appertains to a friend declaration that is not a definition since r12-786-g149061188c7c6ddf

2021-05-14 Thread jason at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100596

--- Comment #3 from Jason Merrill  ---
(In reply to Marek Polacek from comment #1)
> Rejecting such code was the point of the patch.  I guess we'll have to
> either downgrade to a warning or just not complain about GNU attributes at
> all.

Let's do both.

It occurs to me that attributes on non-definition friends can be useful when
there is no other reachable declaration of the function, as

struct A
{
  __attribute((deprecated)) friend void f(A); // part of A API, definition in
.C
};

int main()
{
  A a;
  f(a); // warning desired
}

[Bug c++/100596] [12 Regression] error: attribute appertains to a friend declaration that is not a definition since r12-786-g149061188c7c6ddf

2021-05-14 Thread marxin at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100596

--- Comment #2 from Martin Liška  ---
I noticed that in a couple of packages that I have in my testing playground:
https://build.opensuse.org/project/monitor/home:marxin:home:marxin:gcc-periodic-testing-v2

[ 1268s]
/home/abuild/rpmbuild/BUILD/libreoffice-7.1.3.2/workdir/UnpackedTarball/skia/include/core/SkMatrix.h:1579:24:
error: attribute appertains to a friend declaration that is not a definition
[ 1268s]  1579 | friend SK_API bool operator==(const SkMatrix& a, const
SkMatrix& b);
[ 1268s]   |^~~~


[   98s] /usr/include/boost/thread/detail/thread.hpp:641:37: error: attribute
appertains to a friend declaration that is not a definition
[   98s]   641 | friend id BOOST_THREAD_DECL this_thread::get_id()
BOOST_NOEXCEPT;
[   98s]   | ^~~


[  279s] /usr/include/qt5/QtCore/qbytearray.h:486:37: error: attribute
appertains to a friend declaration that is not a definition
[  279s]   486 | friend Q_CORE_EXPORT QByteArray qUncompress(const uchar
*data, int nbytes);
[  279s]   | ^~~

[Bug c++/100596] [12 Regression] error: attribute appertains to a friend declaration that is not a definition since r12-786-g149061188c7c6ddf

2021-05-14 Thread mpolacek at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100596

--- Comment #1 from Marek Polacek  ---
Rejecting such code was the point of the patch.  I guess we'll have to either
downgrade to a warning or just not complain about GNU attributes at all.

[Bug c++/100596] [12 Regression] error: attribute appertains to a friend declaration that is not a definition since r12-786-g149061188c7c6ddf

2021-05-14 Thread marxin at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100596

Martin Liška  changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Target Milestone|--- |12.0
   Priority|P3  |P1
   Last reconfirmed||2021-05-14
 Ever confirmed|0   |1