diff mbox

disable -Walloc-size-larger-than and -Wstringop-overflow for non-C front ends (PR 80545)

Message ID b343e5fc-8c62-53f3-22ba-1d38c043c4f2@gmail.com
State New
Headers show

Commit Message

Martin Sebor April 28, 2017, 10:02 p.m. UTC
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

Comments

Jeff Law May 5, 2017, 4:13 a.m. UTC | #1
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
Martin Sebor May 8, 2017, 2:31 p.m. UTC | #2
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
Richard Biener May 9, 2017, 8:57 a.m. UTC | #3
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
Martin Sebor May 9, 2017, 2:12 p.m. UTC | #4
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
diff mbox

Patch

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.