public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] Mitigate -Wmaybe-uninitialized in expmed.cc.
@ 2022-05-16  8:37 Martin Liška
  2022-05-16  8:56 ` Richard Sandiford
  0 siblings, 1 reply; 5+ messages in thread
From: Martin Liška @ 2022-05-16  8:37 UTC (permalink / raw)
  To: gcc-patches

It's the warning I see every time I build GCC:

In file included from /home/marxin/Programming/gcc/gcc/coretypes.h:478,
                 from /home/marxin/Programming/gcc/gcc/expmed.cc:26:
In function ‘poly_uint16 mode_to_bytes(machine_mode)’,
    inlined from ‘typename if_nonpoly<typename T::measurement_type>::type GET_MODE_SIZE(const T&) [with T = scalar_int_mode]’ at /home/marxin/Programming/gcc/gcc/machmode.h:647:24,
    inlined from ‘rtx_def* emit_store_flag_1(rtx, rtx_code, rtx, rtx, machine_mode, int, int, machine_mode)’ at /home/marxin/Programming/gcc/gcc/expmed.cc:5728:56:
/home/marxin/Programming/gcc/gcc/machmode.h:550:49: warning: ‘*(unsigned int*)((char*)&int_mode + offsetof(scalar_int_mode, scalar_int_mode::m_mode))’ may be used uninitialized [-Wmaybe-uninitialized]
  550 |           ? mode_size_inline (mode) : mode_size[mode]);
      |                                                 ^~~~
/home/marxin/Programming/gcc/gcc/expmed.cc: In function ‘rtx_def* emit_store_flag_1(rtx, rtx_code, rtx, rtx, machine_mode, int, int, machine_mode)’:
/home/marxin/Programming/gcc/gcc/expmed.cc:5657:19: note: ‘*(unsigned int*)((char*)&int_mode + offsetof(scalar_int_mode, scalar_int_mode::m_mode))’ was declared here
 5657 |   scalar_int_mode int_mode;
      |                   ^~~~~~~~

Can we please mitigate it?

gcc/ChangeLog:

	* expmed.cc (emit_store_flag_1): Mitigate -Wmaybe-uninitialized
	warning.
---
 gcc/expmed.cc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gcc/expmed.cc b/gcc/expmed.cc
index 41738c1efe9..f23d63471ea 100644
--- a/gcc/expmed.cc
+++ b/gcc/expmed.cc
@@ -5654,7 +5654,7 @@ emit_store_flag_1 (rtx target, enum rtx_code code, rtx op0, rtx op1,
 
   /* If we are comparing a double-word integer with zero or -1, we can
      convert the comparison into one involving a single word.  */
-  scalar_int_mode int_mode;
+  scalar_int_mode int_mode = {};
   if (is_int_mode (mode, &int_mode)
       && GET_MODE_BITSIZE (int_mode) == BITS_PER_WORD * 2
       && (!MEM_P (op0) || ! MEM_VOLATILE_P (op0)))
-- 
2.36.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] Mitigate -Wmaybe-uninitialized in expmed.cc.
  2022-05-16  8:37 [PATCH] Mitigate -Wmaybe-uninitialized in expmed.cc Martin Liška
@ 2022-05-16  8:56 ` Richard Sandiford
  2022-05-16 10:32   ` Richard Biener
  2022-05-19 14:17   ` Martin Liška
  0 siblings, 2 replies; 5+ messages in thread
From: Richard Sandiford @ 2022-05-16  8:56 UTC (permalink / raw)
  To: Martin Liška; +Cc: gcc-patches

Martin Liška <mliska@suse.cz> writes:
> It's the warning I see every time I build GCC:
>
> In file included from /home/marxin/Programming/gcc/gcc/coretypes.h:478,
>                  from /home/marxin/Programming/gcc/gcc/expmed.cc:26:
> In function ‘poly_uint16 mode_to_bytes(machine_mode)’,
>     inlined from ‘typename if_nonpoly<typename T::measurement_type>::type GET_MODE_SIZE(const T&) [with T = scalar_int_mode]’ at /home/marxin/Programming/gcc/gcc/machmode.h:647:24,
>     inlined from ‘rtx_def* emit_store_flag_1(rtx, rtx_code, rtx, rtx, machine_mode, int, int, machine_mode)’ at /home/marxin/Programming/gcc/gcc/expmed.cc:5728:56:
> /home/marxin/Programming/gcc/gcc/machmode.h:550:49: warning: ‘*(unsigned int*)((char*)&int_mode + offsetof(scalar_int_mode, scalar_int_mode::m_mode))’ may be used uninitialized [-Wmaybe-uninitialized]
>   550 |           ? mode_size_inline (mode) : mode_size[mode]);
>       |                                                 ^~~~
> /home/marxin/Programming/gcc/gcc/expmed.cc: In function ‘rtx_def* emit_store_flag_1(rtx, rtx_code, rtx, rtx, machine_mode, int, int, machine_mode)’:
> /home/marxin/Programming/gcc/gcc/expmed.cc:5657:19: note: ‘*(unsigned int*)((char*)&int_mode + offsetof(scalar_int_mode, scalar_int_mode::m_mode))’ was declared here
>  5657 |   scalar_int_mode int_mode;
>       |                   ^~~~~~~~
>
> Can we please mitigate it?
>
> gcc/ChangeLog:
>
> 	* expmed.cc (emit_store_flag_1): Mitigate -Wmaybe-uninitialized
> 	warning.

Not a strong objection, but TBH I'd rather we didn't work around false
positives like this.

Richard

> ---
>  gcc/expmed.cc | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/gcc/expmed.cc b/gcc/expmed.cc
> index 41738c1efe9..f23d63471ea 100644
> --- a/gcc/expmed.cc
> +++ b/gcc/expmed.cc
> @@ -5654,7 +5654,7 @@ emit_store_flag_1 (rtx target, enum rtx_code code, rtx op0, rtx op1,
>  
>    /* If we are comparing a double-word integer with zero or -1, we can
>       convert the comparison into one involving a single word.  */
> -  scalar_int_mode int_mode;
> +  scalar_int_mode int_mode = {};
>    if (is_int_mode (mode, &int_mode)
>        && GET_MODE_BITSIZE (int_mode) == BITS_PER_WORD * 2
>        && (!MEM_P (op0) || ! MEM_VOLATILE_P (op0)))

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] Mitigate -Wmaybe-uninitialized in expmed.cc.
  2022-05-16  8:56 ` Richard Sandiford
@ 2022-05-16 10:32   ` Richard Biener
  2022-05-17 14:35     ` Martin Liška
  2022-05-19 14:17   ` Martin Liška
  1 sibling, 1 reply; 5+ messages in thread
From: Richard Biener @ 2022-05-16 10:32 UTC (permalink / raw)
  To: Richard Sandiford, Martin Liška, GCC Patches

On Mon, May 16, 2022 at 11:18 AM Richard Sandiford via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> Martin Liška <mliska@suse.cz> writes:
> > It's the warning I see every time I build GCC:
> >
> > In file included from /home/marxin/Programming/gcc/gcc/coretypes.h:478,
> >                  from /home/marxin/Programming/gcc/gcc/expmed.cc:26:
> > In function ‘poly_uint16 mode_to_bytes(machine_mode)’,
> >     inlined from ‘typename if_nonpoly<typename T::measurement_type>::type GET_MODE_SIZE(const T&) [with T = scalar_int_mode]’ at /home/marxin/Programming/gcc/gcc/machmode.h:647:24,
> >     inlined from ‘rtx_def* emit_store_flag_1(rtx, rtx_code, rtx, rtx, machine_mode, int, int, machine_mode)’ at /home/marxin/Programming/gcc/gcc/expmed.cc:5728:56:
> > /home/marxin/Programming/gcc/gcc/machmode.h:550:49: warning: ‘*(unsigned int*)((char*)&int_mode + offsetof(scalar_int_mode, scalar_int_mode::m_mode))’ may be used uninitialized [-Wmaybe-uninitialized]
> >   550 |           ? mode_size_inline (mode) : mode_size[mode]);
> >       |                                                 ^~~~
> > /home/marxin/Programming/gcc/gcc/expmed.cc: In function ‘rtx_def* emit_store_flag_1(rtx, rtx_code, rtx, rtx, machine_mode, int, int, machine_mode)’:
> > /home/marxin/Programming/gcc/gcc/expmed.cc:5657:19: note: ‘*(unsigned int*)((char*)&int_mode + offsetof(scalar_int_mode, scalar_int_mode::m_mode))’ was declared here
> >  5657 |   scalar_int_mode int_mode;
> >       |                   ^~~~~~~~
> >
> > Can we please mitigate it?
> >
> > gcc/ChangeLog:
> >
> >       * expmed.cc (emit_store_flag_1): Mitigate -Wmaybe-uninitialized
> >       warning.
>
> Not a strong objection, but TBH I'd rather we didn't work around false
> positives like this.

It only seems to happen with your host compiler though?  The set of

# These files are to have specific diagnostics suppressed, or are not to
# be subject to -Werror:
# flex output may yield harmless "no previous prototype" warnings
build/gengtype-lex.o-warn = -Wno-error
gengtype-lex.o-warn = -Wno-error
libgcov-util.o-warn = -Wno-error
libgcov-driver-tool.o-warn = -Wno-error
libgcov-merge-tool.o-warn = -Wno-error
gimple-match.o-warn = -Wno-unused
generic-match.o-warn = -Wno-unused
dfp.o-warn = -Wno-strict-aliasing

doesn't include expmed.o at least.

> Richard
>
> > ---
> >  gcc/expmed.cc | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/gcc/expmed.cc b/gcc/expmed.cc
> > index 41738c1efe9..f23d63471ea 100644
> > --- a/gcc/expmed.cc
> > +++ b/gcc/expmed.cc
> > @@ -5654,7 +5654,7 @@ emit_store_flag_1 (rtx target, enum rtx_code code, rtx op0, rtx op1,
> >
> >    /* If we are comparing a double-word integer with zero or -1, we can
> >       convert the comparison into one involving a single word.  */
> > -  scalar_int_mode int_mode;
> > +  scalar_int_mode int_mode = {};
> >    if (is_int_mode (mode, &int_mode)
> >        && GET_MODE_BITSIZE (int_mode) == BITS_PER_WORD * 2
> >        && (!MEM_P (op0) || ! MEM_VOLATILE_P (op0)))

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] Mitigate -Wmaybe-uninitialized in expmed.cc.
  2022-05-16 10:32   ` Richard Biener
@ 2022-05-17 14:35     ` Martin Liška
  0 siblings, 0 replies; 5+ messages in thread
From: Martin Liška @ 2022-05-17 14:35 UTC (permalink / raw)
  To: Richard Biener, Richard Sandiford, GCC Patches

On 5/16/22 12:32, Richard Biener wrote:
> It only seems to happen with your host compiler though?  The set of

Yes, happens with just released 12.1 as host compiler:

g++ -fcf-protection -fno-PIE -c   -g -O2     -DIN_GCC -fPIC    -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings -fno-common  -DHAVE_CONFIG_H -I. -I. -I/home/marxin/Programming/gcc/gcc -I/home/marxin/Programming/gcc/gcc/. -I/home/marxin/Programming/gcc/gcc/../include -I/home/marxin/Programming/gcc/gcc/../libcpp/include -I/home/marxin/Programming/gcc/gcc/../libcody  -I/home/marxin/Programming/gcc/gcc/../libdecnumber -I/home/marxin/Programming/gcc/gcc/../libdecnumber/bid -I../libdecnumber -I/home/marxin/Programming/gcc/gcc/../libbacktrace   -o expmed.o -MT expmed.o -MMD -MP -MF ./.deps/expmed.TPo /home/marxin/Programming/gcc/gcc/expmed.cc
In file included from /home/marxin/Programming/gcc/gcc/coretypes.h:478,
                 from /home/marxin/Programming/gcc/gcc/expmed.cc:26:
In function ‘poly_uint16 mode_to_bytes(machine_mode)’,
    inlined from ‘typename if_nonpoly<typename T::measurement_type>::type GET_MODE_SIZE(const T&) [with T = scalar_int_mode]’ at /home/marxin/Programming/gcc/gcc/machmode.h:647:24,
    inlined from ‘rtx_def* emit_store_flag_1(rtx, rtx_code, rtx, rtx, machine_mode, int, int, machine_mode)’ at /home/marxin/Programming/gcc/gcc/expmed.cc:5728:56:
/home/marxin/Programming/gcc/gcc/machmode.h:550:49: warning: ‘*(unsigned int*)((char*)&int_mode + offsetof(scalar_int_mode, scalar_int_mode::m_mode))’ may be used uninitialized [-Wmaybe-uninitialized]
  550 |           ? mode_size_inline (mode) : mode_size[mode]);
      |                                                 ^~~~
/home/marxin/Programming/gcc/gcc/expmed.cc: In function ‘rtx_def* emit_store_flag_1(rtx, rtx_code, rtx, rtx, machine_mode, int, int, machine_mode)’:
/home/marxin/Programming/gcc/gcc/expmed.cc:5657:19: note: ‘*(unsigned int*)((char*)&int_mode + offsetof(scalar_int_mode, scalar_int_mode::m_mode))’ was declared here
 5657 |   scalar_int_mode int_mode;
      |                   ^~~~~~~~

Cheers,
Martin

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] Mitigate -Wmaybe-uninitialized in expmed.cc.
  2022-05-16  8:56 ` Richard Sandiford
  2022-05-16 10:32   ` Richard Biener
@ 2022-05-19 14:17   ` Martin Liška
  1 sibling, 0 replies; 5+ messages in thread
From: Martin Liška @ 2022-05-19 14:17 UTC (permalink / raw)
  To: gcc-patches, richard.sandiford

On 5/16/22 10:56, Richard Sandiford wrote:
> Martin Liška <mliska@suse.cz> writes:
>> It's the warning I see every time I build GCC:
>>
>> In file included from /home/marxin/Programming/gcc/gcc/coretypes.h:478,
>>                  from /home/marxin/Programming/gcc/gcc/expmed.cc:26:
>> In function ‘poly_uint16 mode_to_bytes(machine_mode)’,
>>     inlined from ‘typename if_nonpoly<typename T::measurement_type>::type GET_MODE_SIZE(const T&) [with T = scalar_int_mode]’ at /home/marxin/Programming/gcc/gcc/machmode.h:647:24,
>>     inlined from ‘rtx_def* emit_store_flag_1(rtx, rtx_code, rtx, rtx, machine_mode, int, int, machine_mode)’ at /home/marxin/Programming/gcc/gcc/expmed.cc:5728:56:
>> /home/marxin/Programming/gcc/gcc/machmode.h:550:49: warning: ‘*(unsigned int*)((char*)&int_mode + offsetof(scalar_int_mode, scalar_int_mode::m_mode))’ may be used uninitialized [-Wmaybe-uninitialized]
>>   550 |           ? mode_size_inline (mode) : mode_size[mode]);
>>       |                                                 ^~~~
>> /home/marxin/Programming/gcc/gcc/expmed.cc: In function ‘rtx_def* emit_store_flag_1(rtx, rtx_code, rtx, rtx, machine_mode, int, int, machine_mode)’:
>> /home/marxin/Programming/gcc/gcc/expmed.cc:5657:19: note: ‘*(unsigned int*)((char*)&int_mode + offsetof(scalar_int_mode, scalar_int_mode::m_mode))’ was declared here
>>  5657 |   scalar_int_mode int_mode;
>>       |                   ^~~~~~~~
>>
>> Can we please mitigate it?
>>
>> gcc/ChangeLog:
>>
>> 	* expmed.cc (emit_store_flag_1): Mitigate -Wmaybe-uninitialized
>> 	warning.
> 
> Not a strong objection, but TBH I'd rather we didn't work around false
> positives like this.

Sure, but as you know, -Wmaybe-uninitialized has pretty high rate
of false positivity :/

Martin

> 
> Richard
> 
>> ---
>>  gcc/expmed.cc | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/gcc/expmed.cc b/gcc/expmed.cc
>> index 41738c1efe9..f23d63471ea 100644
>> --- a/gcc/expmed.cc
>> +++ b/gcc/expmed.cc
>> @@ -5654,7 +5654,7 @@ emit_store_flag_1 (rtx target, enum rtx_code code, rtx op0, rtx op1,
>>  
>>    /* If we are comparing a double-word integer with zero or -1, we can
>>       convert the comparison into one involving a single word.  */
>> -  scalar_int_mode int_mode;
>> +  scalar_int_mode int_mode = {};
>>    if (is_int_mode (mode, &int_mode)
>>        && GET_MODE_BITSIZE (int_mode) == BITS_PER_WORD * 2
>>        && (!MEM_P (op0) || ! MEM_VOLATILE_P (op0)))


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-05-19 14:17 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-16  8:37 [PATCH] Mitigate -Wmaybe-uninitialized in expmed.cc Martin Liška
2022-05-16  8:56 ` Richard Sandiford
2022-05-16 10:32   ` Richard Biener
2022-05-17 14:35     ` Martin Liška
2022-05-19 14:17   ` Martin Liška

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).