Message ID | b343e5fc-8c62-53f3-22ba-1d38c043c4f2@gmail.com |
---|---|
State | New |
Headers | show |
On 04/28/2017 04:02 PM, Martin Sebor wrote: > The two options were included in -Wall and enabled for all front > ends but only made to be recognized by the driver for the C family > of compilers. That made it impossible to suppress those warnings > when compiling code for those other front ends (like Fortran). > > The attached patch adjusts the warnings so that they are only > enabled for the C family of front ends and not for any others, > as per Richard's suggestion. (The other solution would have > been to make the warnings available to all front ends. Since > non-C languages don't have a way of calling the affected > functions -- or do they? -- this is probably not necessary.) > > Martin > > gcc-80545.diff > > > PR driver/80545 - option -Wstringop-overflow not recognized by Fortran > > gcc/c-family/ChangeLog: > > PR driver/80545 > * c.opt (-Walloc-size-larger-than, -Wstringop-overflow): Enable > and make available for the C family only. OK. jeff
On 05/04/2017 10:13 PM, Jeff Law wrote: > On 04/28/2017 04:02 PM, Martin Sebor wrote: >> The two options were included in -Wall and enabled for all front >> ends but only made to be recognized by the driver for the C family >> of compilers. That made it impossible to suppress those warnings >> when compiling code for those other front ends (like Fortran). >> >> The attached patch adjusts the warnings so that they are only >> enabled for the C family of front ends and not for any others, >> as per Richard's suggestion. (The other solution would have >> been to make the warnings available to all front ends. Since >> non-C languages don't have a way of calling the affected >> functions -- or do they? -- this is probably not necessary.) >> >> Martin >> >> gcc-80545.diff >> >> >> PR driver/80545 - option -Wstringop-overflow not recognized by Fortran >> >> gcc/c-family/ChangeLog: >> >> PR driver/80545 >> * c.opt (-Walloc-size-larger-than, -Wstringop-overflow): Enable >> and make available for the C family only. > OK. > jeff It turns out that this is not the right fix. I overlooked that -Wstringop-overflow is meant to be enabled by default and while removing the Init(2) bit and replacing it with LangEnabledBy (C ObjC C++ ObjC++, Wall, 2, 0) suppresses the warning in Fortran it also disables it by default in C/C++ unless -Wall is used. By my reading of the Option properties part of the GCC Internals manual there is no way to initialize a warning to on by default while making it available only in a subset of languages. The only way I can think of is to initialize it in the .opt file to something like -1 and then change it at some point to 2 somewhere in the C/C++ front ends. That seems pretty cumbersome. Am I missing some trick? Martin
On Mon, May 8, 2017 at 4:31 PM, Martin Sebor <msebor@gmail.com> wrote: > On 05/04/2017 10:13 PM, Jeff Law wrote: >> >> On 04/28/2017 04:02 PM, Martin Sebor wrote: >>> >>> The two options were included in -Wall and enabled for all front >>> ends but only made to be recognized by the driver for the C family >>> of compilers. That made it impossible to suppress those warnings >>> when compiling code for those other front ends (like Fortran). >>> >>> The attached patch adjusts the warnings so that they are only >>> enabled for the C family of front ends and not for any others, >>> as per Richard's suggestion. (The other solution would have >>> been to make the warnings available to all front ends. Since >>> non-C languages don't have a way of calling the affected >>> functions -- or do they? -- this is probably not necessary.) >>> >>> Martin >>> >>> gcc-80545.diff >>> >>> >>> PR driver/80545 - option -Wstringop-overflow not recognized by Fortran >>> >>> gcc/c-family/ChangeLog: >>> >>> PR driver/80545 >>> * c.opt (-Walloc-size-larger-than, -Wstringop-overflow): Enable >>> and make available for the C family only. >> >> OK. >> jeff > > > It turns out that this is not the right fix. I overlooked that > -Wstringop-overflow is meant to be enabled by default and while > removing the Init(2) bit and replacing it with LangEnabledBy (C > ObjC C++ ObjC++, Wall, 2, 0) suppresses the warning in Fortran > it also disables it by default in C/C++ unless -Wall is used. > > By my reading of the Option properties part of the GCC Internals > manual there is no way to initialize a warning to on by default > while making it available only in a subset of languages. The > only way I can think of is to initialize it in the .opt file to > something like -1 and then change it at some point to 2 somewhere > in the C/C++ front ends. That seems pretty cumbersome. Am I > missing some trick? Maybe just enhance the machinery to allow LangEnabledBy (C ObjC C++ ObjC++, , 2, 0) (note empty "by") ? > Martin
On 05/09/2017 02:57 AM, Richard Biener wrote: > On Mon, May 8, 2017 at 4:31 PM, Martin Sebor <msebor@gmail.com> wrote: >> On 05/04/2017 10:13 PM, Jeff Law wrote: >>> >>> On 04/28/2017 04:02 PM, Martin Sebor wrote: >>>> >>>> The two options were included in -Wall and enabled for all front >>>> ends but only made to be recognized by the driver for the C family >>>> of compilers. That made it impossible to suppress those warnings >>>> when compiling code for those other front ends (like Fortran). >>>> >>>> The attached patch adjusts the warnings so that they are only >>>> enabled for the C family of front ends and not for any others, >>>> as per Richard's suggestion. (The other solution would have >>>> been to make the warnings available to all front ends. Since >>>> non-C languages don't have a way of calling the affected >>>> functions -- or do they? -- this is probably not necessary.) >>>> >>>> Martin >>>> >>>> gcc-80545.diff >>>> >>>> >>>> PR driver/80545 - option -Wstringop-overflow not recognized by Fortran >>>> >>>> gcc/c-family/ChangeLog: >>>> >>>> PR driver/80545 >>>> * c.opt (-Walloc-size-larger-than, -Wstringop-overflow): Enable >>>> and make available for the C family only. >>> >>> OK. >>> jeff >> >> >> It turns out that this is not the right fix. I overlooked that >> -Wstringop-overflow is meant to be enabled by default and while >> removing the Init(2) bit and replacing it with LangEnabledBy (C >> ObjC C++ ObjC++, Wall, 2, 0) suppresses the warning in Fortran >> it also disables it by default in C/C++ unless -Wall is used. >> >> By my reading of the Option properties part of the GCC Internals >> manual there is no way to initialize a warning to on by default >> while making it available only in a subset of languages. The >> only way I can think of is to initialize it in the .opt file to >> something like -1 and then change it at some point to 2 somewhere >> in the C/C++ front ends. That seems pretty cumbersome. Am I >> missing some trick? > > Maybe just enhance the machinery to allow > > LangEnabledBy (C ObjC C++ ObjC++, , 2, 0) > > (note empty "by") > > ? Yes, I was thinking of something along these lines as well. Generalizing it for all options sounds like the right approach. Thanks! Martin
PR driver/80545 - option -Wstringop-overflow not recognized by Fortran gcc/c-family/ChangeLog: PR driver/80545 * c.opt (-Walloc-size-larger-than, -Wstringop-overflow): Enable and make available for the C family only. diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index 6ecbfca..9ad2f6e 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -304,7 +304,7 @@ C ObjC C++ ObjC++ Var(warn_alloca) Warning Warn on any use of alloca. Walloc-size-larger-than= -C ObjC C++ ObjC++ Var(warn_alloc_size_limit) Warning Joined +C ObjC C++ ObjC++ Var(warn_alloc_size_limit) Warning Joined LangEnabledBy(C ObjC C++ ObjC++, Wall) -Walloc-size-larger-than=<bytes> Warn for calls to allocation functions that attempt to allocate objects larger than the specified number of bytes. @@ -716,7 +716,7 @@ Warn about buffer overflow in string manipulation functions like memcpy and strcpy. Wstringop-overflow= -C ObjC C++ ObjC++ Joined RejectNegative UInteger Var(warn_stringop_overflow) Init(2) Warning +C ObjC C++ ObjC++ Joined RejectNegative UInteger Var(warn_stringop_overflow) Warning LangEnabledBy(C ObjC C++ ObjC++, Wall, 2, 0) Under the control of Object Size type, warn about buffer overflow in string manipulation functions like memcpy and strcpy.