https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81897
--- Comment #19 from Aldy Hernandez <aldyh at gcc dot gnu.org> ---
(In reply to Arnd Bergmann from comment #17)
> Created attachment 43057 [details]
> linux/drivers/scsi/lpfc/lpfc_bsg.c, preprocessed and compressed
>
> A possibly related warning I just saw this week, with and without the gcc
> patch, and back to gcc-4.5+:
>
> x86_64-linux-gcc-8.0.0 -fno-strict-aliasing -Wall -O2 -Wno-pointer-sign -m32
> -c -xc lpfc_bsg.i
> /git/arm-soc/drivers/scsi/lpfc/lpfc_bsg.c: In function
> 'lpfc_bsg_rport_els_cmp':
> /git/arm-soc/drivers/scsi/lpfc/lpfc_bsg.c:632:22: warning: 'bsg_reply' may
> be used uninitialized in this function [-Wmaybe-uninitialized]
>
> reduced to
> 8<----
> long current_stack_pointer, lpfc_bsg_rport_els_cmp_rsp_0;
> long pv_irq_ops_1_0, pv_irq_ops_0_0;
> struct bsg_job {
> void *reply;
> };
> struct fc_bsg_reply {
> int reply_payload_rcv_len;
> struct bsg_job set_job;
> } * lpfc_bsg_rport_els_cmp_dd_data;
> static void check(long v)
> {
> if (v) {
> asm("");
> __builtin_unreachable();
> }
> }
> void lpfc_bsg_rport_els_cmp(void) {
> struct bsg_job *job;
> struct fc_bsg_reply *bsg_reply;
> job = &lpfc_bsg_rport_els_cmp_dd_data->set_job;
> if (job)
> bsg_reply = job->reply;
> check(pv_irq_ops_0_0);
> check(pv_irq_ops_1_0);
> asm("" : "+r"(current_stack_pointer));
> check(pv_irq_ops_0_0);
> check(pv_irq_ops_1_0);
> if (job) {
> if (lpfc_bsg_rport_els_cmp_rsp_0 == 0)
> bsg_reply->reply_payload_rcv_len = 0;
> else if (lpfc_bsg_rport_els_cmp_rsp_0 == 1)
> bsg_reply->reply_payload_rcv_len = 0;
> }
> }
> ---->8
> This looked similar to the originally reported symptom in the source code.
> The reduced version looks quite a bit different, so no idea if this is
> something else entirely or not.
This is actually not a regression to gcc 4.5 because we didn't have
-Wmaybe-uninitialized warnings then. You are testing gcc 4.5 with -Wall, which
is different to -Wall in recent GCC's, etc. What you want to use is
-Wmaybe-uninitialized instead of -Wall to test at which point it regresses. I
think this likely started happening when -Wmaybe-uninitialized was implemented.
However, I agree that this warning is annoying. Would you mind opening a new
PR with an enhancement request for this?