Message ID | AM0PR07MB387410E1D8D9EE8C47B1810BE49D0@AM0PR07MB3874.eurprd07.prod.outlook.com |
---|---|
State | New |
Headers | show |
Series | Fix -Wattribute-alias option | expand |
On Sat, Jan 19, 2019 at 11:06 AM Bernd Edlinger <bernd.edlinger@hotmail.de> wrote: > > Hi, > > the command line option -Wattribute-alias (w/o the "=1") is currently broken, > and only -Wno-attribute-alias is still working, but what is worse, is that > the #pragma GCC diagnostic fails to recognize the string "-Wattribute-alias", > as it used to do in gcc-8, which breaks the linux warning suppression macro > because it relies on a _Pragma to work. I'm surprised by this, since I have not seen the warning in a while. I am however still using gcc-8.1 locally. Did this change later during the gcc-8 branch? Arnd
On 1/21/19 4:42 PM, Arnd Bergmann wrote: > On Sat, Jan 19, 2019 at 11:06 AM Bernd Edlinger > <bernd.edlinger@hotmail.de> wrote: >> >> Hi, >> >> the command line option -Wattribute-alias (w/o the "=1") is currently broken, >> and only -Wno-attribute-alias is still working, but what is worse, is that >> the #pragma GCC diagnostic fails to recognize the string "-Wattribute-alias", >> as it used to do in gcc-8, which breaks the linux warning suppression macro >> because it relies on a _Pragma to work. > > I'm surprised by this, since I have not seen the warning in a while. I am > however still using gcc-8.1 locally. Did this change later during the > gcc-8 branch? > Yes. The -Wattribute-alias was split up in -Wattribute-alias=1 an -Wattribute-alias=2 and -Wmissing-attributes on gcc-trunk (but not in the gcc-8 branch as far as I know). The -Wmissing-attribute also triggers in include/linux/module.h but for that one, I will probably have to send a patch to the linux-kernel list. $ svn log -r265980 ------------------------------------------------------------------------ r265980 | msebor | 2018-11-09 18:32:52 +0100 (Fri, 09 Nov 2018) | 39 lines PR middle-end/81824 - Warn for missing attributes with function aliases gcc/c-family/ChangeLog: PR middle-end/81824 * c-attribs.c (handle_copy_attribute): New function. gcc/cp/ChangeLog: PR middle-end/81824 * pt.c (warn_spec_missing_attributes): Move code to attribs.c. Call decls_mismatched_attributes. gcc/ChangeLog: PR middle-end/81824 * attribs.c (has_attribute): New helper function. (decls_mismatched_attributes, maybe_diag_alias_attributes): Same. * attribs.h (decls_mismatched_attributes): Declare. * cgraphunit.c (handle_alias_pairs): Call maybe_diag_alias_attributes. (maybe_diag_incompatible_alias): Use OPT_Wattribute_alias_. * common.opt (-Wattribute-alias): Take an argument. (-Wno-attribute-alias): New option. * doc/extend.texi (Common Function Attributes): Document copy. (Common Variable Attributes): Same. * doc/invoke.texi (-Wmissing-attributes): Document enhancement. (-Wattribute-alias): Document new option argument. gcc/testsuite/ChangeLog: PR middle-end/81824 * gcc.dg/Wattribute-alias.c: New test. * gcc.dg/Wmissing-attributes.c: New test. * gcc.dg/attr-copy.c: New test. * gcc.dg/attr-copy-2.c: New test. * gcc.dg/attr-copy-3.c: New test. * gcc.dg/attr-copy-4.c: New test. Bernd.
On Mon, Jan 21, 2019 at 4:55 PM Bernd Edlinger <bernd.edlinger@hotmail.de> wrote: > On 1/21/19 4:42 PM, Arnd Bergmann wrote: > > On Sat, Jan 19, 2019 at 11:06 AM Bernd Edlinger > > <bernd.edlinger@hotmail.de> wrote: > >> > >> Hi, > >> > >> the command line option -Wattribute-alias (w/o the "=1") is currently broken, > >> and only -Wno-attribute-alias is still working, but what is worse, is that > >> the #pragma GCC diagnostic fails to recognize the string "-Wattribute-alias", > >> as it used to do in gcc-8, which breaks the linux warning suppression macro > >> because it relies on a _Pragma to work. > > > > I'm surprised by this, since I have not seen the warning in a while. I am > > however still using gcc-8.1 locally. Did this change later during the > > gcc-8 branch? > > > > Yes. > > The -Wattribute-alias was split up in -Wattribute-alias=1 an -Wattribute-alias=2 > and -Wmissing-attributes on gcc-trunk (but not in the gcc-8 branch as far as I know). > > The -Wmissing-attribute also triggers in include/linux/module.h but for that one, > I will probably have to send a patch to the linux-kernel list. I got it, I misread your earlier message as saying that it also happened on gcc-8. Arnd
On 1/21/19 8:55 AM, Bernd Edlinger wrote: > > > On 1/21/19 4:42 PM, Arnd Bergmann wrote: >> On Sat, Jan 19, 2019 at 11:06 AM Bernd Edlinger >> <bernd.edlinger@hotmail.de> wrote: >>> >>> Hi, >>> >>> the command line option -Wattribute-alias (w/o the "=1") is currently broken, >>> and only -Wno-attribute-alias is still working, but what is worse, is that >>> the #pragma GCC diagnostic fails to recognize the string "-Wattribute-alias", >>> as it used to do in gcc-8, which breaks the linux warning suppression macro >>> because it relies on a _Pragma to work. >> >> I'm surprised by this, since I have not seen the warning in a while. I am >> however still using gcc-8.1 locally. Did this change later during the >> gcc-8 branch? >> > > Yes. > > The -Wattribute-alias was split up in -Wattribute-alias=1 an -Wattribute-alias=2 > and -Wmissing-attributes on gcc-trunk (but not in the gcc-8 branch as far as I know). > > The -Wmissing-attribute also triggers in include/linux/module.h but for that one, > I will probably have to send a patch to the linux-kernel list. Miguel Ojeda has been working with me on the kernel changes. Martin > > > $ svn log -r265980 > ------------------------------------------------------------------------ > r265980 | msebor | 2018-11-09 18:32:52 +0100 (Fri, 09 Nov 2018) | 39 lines > > PR middle-end/81824 - Warn for missing attributes with function aliases > > gcc/c-family/ChangeLog: > > PR middle-end/81824 > * c-attribs.c (handle_copy_attribute): New function. > > gcc/cp/ChangeLog: > > PR middle-end/81824 > * pt.c (warn_spec_missing_attributes): Move code to attribs.c. > Call decls_mismatched_attributes. > > gcc/ChangeLog: > > PR middle-end/81824 > * attribs.c (has_attribute): New helper function. > (decls_mismatched_attributes, maybe_diag_alias_attributes): Same. > * attribs.h (decls_mismatched_attributes): Declare. > * cgraphunit.c (handle_alias_pairs): Call maybe_diag_alias_attributes. > (maybe_diag_incompatible_alias): Use OPT_Wattribute_alias_. > * common.opt (-Wattribute-alias): Take an argument. > (-Wno-attribute-alias): New option. > * doc/extend.texi (Common Function Attributes): Document copy. > (Common Variable Attributes): Same. > * doc/invoke.texi (-Wmissing-attributes): Document enhancement. > (-Wattribute-alias): Document new option argument. > > gcc/testsuite/ChangeLog: > > PR middle-end/81824 > * gcc.dg/Wattribute-alias.c: New test. > * gcc.dg/Wmissing-attributes.c: New test. > * gcc.dg/attr-copy.c: New test. > * gcc.dg/attr-copy-2.c: New test. > * gcc.dg/attr-copy-3.c: New test. > * gcc.dg/attr-copy-4.c: New test. > > > > Bernd. >
Hi, I'd like to ping for this patch: https://gcc.gnu.org/ml/gcc-patches/2019-01/msg01120.html This patch would be needed to avoid a rather ugly workaround for the the issue in the linux-tree. Thanks Bernd. On 1/19/19 11:06 AM, Bernd Edlinger wrote: > Hi, > > the command line option -Wattribute-alias (w/o the "=1") is currently broken, > and only -Wno-attribute-alias is still working, but what is worse, is that > the #pragma GCC diagnostic fails to recognize the string "-Wattribute-alias", > as it used to do in gcc-8, which breaks the linux warning suppression macro > because it relies on a _Pragma to work. > > Fixed by declaring -Wattribute-alias as an alias to -Wattribute-alias=1 > and the negated form as an alias to -Wattribute-alias=0. > > Bootstrapped and reg-tested on x86_64-pc-linux-gnu. > Is it OK for trunk? > > Additionally I looked into the linux 4.20 build, got a couple "-Wmissing-attributes" > which seem easy to fix (by adding the cold attribute) and quite a lot > "-Waddress-of-packed-member" warnings, which I don't know how to fix properly. > > > Thanks > Bernd. >
On Sat, Jan 19, 2019 at 10:06:29AM +0000, Bernd Edlinger wrote: > 2019-01-19 Bernd Edlinger <bernd.edlinger@hotmail.de> > > * common.opt (-Wattribute-alias): Remove "no-" from name. > Make -Wattribute-alias command line option and > #pragma GCC diagnostic ignore "-Wattribute-alias" work again. > > testsuite: > 2019-01-19 Bernd Edlinger <bernd.edlinger@hotmail.de> > > * gcc.dg/Wattribute-alias.c: Add test for #pragma GCC diagnostic ignore > "-Wattribute-alias". Ok, thanks. Jakub
2019-01-19 Bernd Edlinger <bernd.edlinger@hotmail.de> * common.opt (-Wattribute-alias): Remove "no-" from name. Make -Wattribute-alias command line option and #pragma GCC diagnostic ignore "-Wattribute-alias" work again. testsuite: 2019-01-19 Bernd Edlinger <bernd.edlinger@hotmail.de> * gcc.dg/Wattribute-alias.c: Add test for #pragma GCC diagnostic ignore "-Wattribute-alias". Index: gcc/common.opt =================================================================== --- gcc/common.opt (revision 268084) +++ gcc/common.opt (working copy) @@ -550,14 +550,14 @@ Wattributes Common Var(warn_attributes) Init(1) Warning Warn about inappropriate attribute usage. +Wattribute-alias +Common Alias(Wattribute_alias=, 1, 0) Warning +Warn about type safety and similar errors and mismatches in attribute alias and related. + Wattribute-alias= Common Joined RejectNegative UInteger Var(warn_attribute_alias) Init(1) Warning IntegerRange(0, 2) Warn about type safety and similar errors and mismatches in attribute alias and related. -Wno-attribute-alias -Common Alias(Wattribute_alias=, 0, 0) Warning -Disable -Wattribute-alias. - Wcannot-profile Common Var(warn_cannot_profile) Init(1) Warning Warn when profiling instrumentation was requested, but could not be applied to Index: gcc/testsuite/gcc.dg/Wattribute-alias.c =================================================================== --- gcc/testsuite/gcc.dg/Wattribute-alias.c (revision 268084) +++ gcc/testsuite/gcc.dg/Wattribute-alias.c (working copy) @@ -14,6 +14,13 @@ ATTR (alias ("target_no_nothrow"), nothrow) void alias_nothrow (void); /* { dg-warning ".alias_nothrow. specifies more restrictive attribute than its target .target_no_nothrow.: .nothrow." } */ +#pragma GCC diagnostic push "-Wattribute-alias" +#pragma GCC diagnostic ignored "-Wattribute-alias" +ATTR (alias ("target_no_nothrow"), nothrow) void +alias_nothrow_ignored (void); +#pragma GCC diagnostic pop "-Wattribute-alias" + + ATTR (pure) int alias_pure (void);