[Bug c++/100596] [12 Regression] error: attribute appertains to a friend declaration that is not a definition since r12-786-g149061188c7c6ddf
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
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
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
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
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
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
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