[libgfortran] Initailize some variable to get rid of nuisance warnings.

Message ID 17e31d5c-1579-8899-70b3-57e3115b2153@gmail.com
State Committed
Commit c1375d975d9b14c65255e17fdfe0f2908936f312
Headers
Series [libgfortran] Initailize some variable to get rid of nuisance warnings. |

Commit Message

Jerry D Feb. 26, 2023, 7:52 p.m. UTC
  The attached patch is minor and self explanatory.  I assume this should 
wait for gfortran 14 since no regression involved.  Please advise otherwise.

Regression tested on x86-64.

OK for trunk when the time is right?

Regards,

Jerry

Author: Jerry DeLisle <jvdelisle@gcc.gnu.org>
Date:   Sat Feb 25 20:30:35 2023 -0800

     Fortran: Eliminate nuisance warnings by initializing.

     Set sstride[0] and mstide[0] to zero, eliminating some warnings.

     libgfortran/ChangeLog:

             * generated/pack_c10.c (pack_c10): Regenerated.
             * generated/pack_c16.c (pack_c16): Regenerated.
             * generated/pack_c17.c (pack_c17): Regenerated.
             * generated/pack_c4.c (pack_c4): Regenerated.
             * generated/pack_c8.c (pack_c8): Regenerated.
             * generated/pack_i1.c (pack_i1): Regenerated.
             * generated/pack_i16.c (pack_i16): Regenerated.
             * generated/pack_i2.c (pack_i2): Regenerated.
             * generated/pack_i4.c (pack_i4): Regenerated.
             * generated/pack_i8.c (pack_i8): Regenerated.
             * generated/pack_r10.c (pack_r10): Regenerated.
             * generated/pack_r16.c (pack_r16): Regenerated.
             * generated/pack_r17.c (pack_r17): Regenerated.
             * generated/pack_r4.c (pack_r4): Regenerated.
             * generated/pack_r8.c (pack_r8): Regenerated.
             * generated/spread_c10.c (spread_c10): Regenerated.
             * generated/spread_c16.c (spread_c16): Regenerated.
             * generated/spread_c17.c (spread_c17): Regenerated.
             * generated/spread_c4.c (spread_c4): Regenerated.
             * generated/spread_c8.c (spread_c8): Regenerated.
             * generated/spread_i1.c (spread_i1): Regenerated.
             * generated/spread_i16.c (spread_i16): Regenerated.
             * generated/spread_i2.c (spread_i2): Regenerated.
             * generated/spread_i4.c (spread_i4): Regenerated.
             * generated/spread_i8.c (spread_i8): Regenerated.
             * generated/spread_r10.c (spread_r10): Regenerated.
             * generated/spread_r16.c (spread_r16): Regenerated.
             * generated/spread_r17.c (spread_r17): Regenerated.
             * generated/spread_r4.c (spread_r4): Regenerated.
             * generated/spread_r8.c (spread_r8): Regenerated.
             * intrinsics/execute_command_line.c (execute_command_line_i4),
             (execute_command_line_i8): Set estat_initial to zero.
             * intrinsics/pack_generic.c (pack_internal): Set sstride[0] and
             mstride[0] to zero.
             * intrinsics/spread_generic.c (spread_internal): Set 
sstride[0].
             * m4/pack.m4: Set sstride[0] and mstride[0].
             * m4/spread.m4: Set sstride[0].
  

Comments

Harald Anlauf Feb. 26, 2023, 8:59 p.m. UTC | #1
Hi Jerry,

regarding PACK: since this is a bogus warning as the compiler does
not realize that dim >= 1, wouldn't a

gcc_assert (dim >= 1);

in the right place achieve the same effect, since the first argument
must be an array?

(It's different for SPREAD, though, where SOURCE may be scalar).

Cheers,
Harald

Am 26.02.23 um 20:52 schrieb Jerry D via Gcc-patches:
> The attached patch is minor and self explanatory.  I assume this should 
> wait for gfortran 14 since no regression involved.  Please advise 
> otherwise.
> 
> Regression tested on x86-64.
> 
> OK for trunk when the time is right?
> 
> Regards,
> 
> Jerry
> 
> Author: Jerry DeLisle <jvdelisle@gcc.gnu.org>
> Date:   Sat Feb 25 20:30:35 2023 -0800
> 
>      Fortran: Eliminate nuisance warnings by initializing.
> 
>      Set sstride[0] and mstide[0] to zero, eliminating some warnings.
> 
>      libgfortran/ChangeLog:
> 
>              * generated/pack_c10.c (pack_c10): Regenerated.
>              * generated/pack_c16.c (pack_c16): Regenerated.
>              * generated/pack_c17.c (pack_c17): Regenerated.
>              * generated/pack_c4.c (pack_c4): Regenerated.
>              * generated/pack_c8.c (pack_c8): Regenerated.
>              * generated/pack_i1.c (pack_i1): Regenerated.
>              * generated/pack_i16.c (pack_i16): Regenerated.
>              * generated/pack_i2.c (pack_i2): Regenerated.
>              * generated/pack_i4.c (pack_i4): Regenerated.
>              * generated/pack_i8.c (pack_i8): Regenerated.
>              * generated/pack_r10.c (pack_r10): Regenerated.
>              * generated/pack_r16.c (pack_r16): Regenerated.
>              * generated/pack_r17.c (pack_r17): Regenerated.
>              * generated/pack_r4.c (pack_r4): Regenerated.
>              * generated/pack_r8.c (pack_r8): Regenerated.
>              * generated/spread_c10.c (spread_c10): Regenerated.
>              * generated/spread_c16.c (spread_c16): Regenerated.
>              * generated/spread_c17.c (spread_c17): Regenerated.
>              * generated/spread_c4.c (spread_c4): Regenerated.
>              * generated/spread_c8.c (spread_c8): Regenerated.
>              * generated/spread_i1.c (spread_i1): Regenerated.
>              * generated/spread_i16.c (spread_i16): Regenerated.
>              * generated/spread_i2.c (spread_i2): Regenerated.
>              * generated/spread_i4.c (spread_i4): Regenerated.
>              * generated/spread_i8.c (spread_i8): Regenerated.
>              * generated/spread_r10.c (spread_r10): Regenerated.
>              * generated/spread_r16.c (spread_r16): Regenerated.
>              * generated/spread_r17.c (spread_r17): Regenerated.
>              * generated/spread_r4.c (spread_r4): Regenerated.
>              * generated/spread_r8.c (spread_r8): Regenerated.
>              * intrinsics/execute_command_line.c (execute_command_line_i4),
>              (execute_command_line_i8): Set estat_initial to zero.
>              * intrinsics/pack_generic.c (pack_internal): Set sstride[0] 
> and
>              mstride[0] to zero.
>              * intrinsics/spread_generic.c (spread_internal): Set 
> sstride[0].
>              * m4/pack.m4: Set sstride[0] and mstride[0].
>              * m4/spread.m4: Set sstride[0].
  
Jerry D Feb. 27, 2023, 2:53 a.m. UTC | #2
On 2/26/23 12:59 PM, Harald Anlauf wrote:
> Hi Jerry,
> 
> regarding PACK: since this is a bogus warning as the compiler does
> not realize that dim >= 1, wouldn't a
> 
> gcc_assert (dim >= 1);
> 
> in the right place achieve the same effect, since the first argument
> must be an array?
> 
> (It's different for SPREAD, though, where SOURCE may be scalar).
> 

I should have clarified in my posts that the warnings are on the use of 
sstride[0], mstride[0] or both. For example.

../../../trunk/libgfortran/generated/pack_i2.c: In function ‘pack_i2’:
../../../trunk/libgfortran/generated/pack_i2.c:129:14: warning: 
‘sstride’ may be used uninitialized [-Wmaybe-uninitialized]
   129 |   if (sstride[0] == 0)
       |       ~~~~~~~^~~
../../../trunk/libgfortran/generated/pack_i2.c:80:14: note: ‘sstride’ 
declared here
    80 |   index_type sstride[GFC_MAX_DIMENSIONS];
       |              ^~~~~~~
../../../trunk/libgfortran/generated/pack_i2.c:131:14: warning: 
‘mstride’ may be used uninitialized [-Wmaybe-uninitialized]
   131 |   if (mstride[0] == 0)
       |       ~~~~~~~^~~
../../../trunk/libgfortran/generated/pack_i2.c:84:14: note: ‘mstride’ 
declared here
    84 |   index_type mstride[GFC_MAX_DIMENSIONS];
       |              ^~~~~~~
../../../trunk/libgfortran/generated/pack_i2.c:131:14: warning: 
‘mstride’ may be used uninitialized [-Wmaybe-uninitialized]
   131 |   if (mstride[0] == 0)
       |       ~~~~~~~^~~
../../../trunk/libgfortran/generated/pack_i2.c:84:14: note: ‘mstride’ 
declared here
    84 |   index_type mstride[GFC_MAX_DIMENSIONS];
       |              ^~~~~~~

In a sense it is a regression. It showed up when builds started to use 
-Wmaybe-unitialized.

> Cheers,
> Harald
> 
> Am 26.02.23 um 20:52 schrieb Jerry D via Gcc-patches:
>> The attached patch is minor and self explanatory.  I assume this 
>> should wait for gfortran 14 since no regression involved.  Please 
>> advise otherwise.
>>
>> Regression tested on x86-64.
>>
>> OK for trunk when the time is right?
>>
>> Regards,
>>
>> Jerry
>>
>> Author: Jerry DeLisle <jvdelisle@gcc.gnu.org>
>> Date:   Sat Feb 25 20:30:35 2023 -0800
>>
>>      Fortran: Eliminate nuisance warnings by initializing.
>>
>>      Set sstride[0] and mstide[0] to zero, eliminating some warnings.
>>
>>      libgfortran/ChangeLog:
>>
>>              * generated/pack_c10.c (pack_c10): Regenerated.
>>              * generated/pack_c16.c (pack_c16): Regenerated.
>>              * generated/pack_c17.c (pack_c17): Regenerated.
>>              * generated/pack_c4.c (pack_c4): Regenerated.
>>              * generated/pack_c8.c (pack_c8): Regenerated.
>>              * generated/pack_i1.c (pack_i1): Regenerated.
>>              * generated/pack_i16.c (pack_i16): Regenerated.
>>              * generated/pack_i2.c (pack_i2): Regenerated.
>>              * generated/pack_i4.c (pack_i4): Regenerated.
>>              * generated/pack_i8.c (pack_i8): Regenerated.
>>              * generated/pack_r10.c (pack_r10): Regenerated.
>>              * generated/pack_r16.c (pack_r16): Regenerated.
>>              * generated/pack_r17.c (pack_r17): Regenerated.
>>              * generated/pack_r4.c (pack_r4): Regenerated.
>>              * generated/pack_r8.c (pack_r8): Regenerated.
>>              * generated/spread_c10.c (spread_c10): Regenerated.
>>              * generated/spread_c16.c (spread_c16): Regenerated.
>>              * generated/spread_c17.c (spread_c17): Regenerated.
>>              * generated/spread_c4.c (spread_c4): Regenerated.
>>              * generated/spread_c8.c (spread_c8): Regenerated.
>>              * generated/spread_i1.c (spread_i1): Regenerated.
>>              * generated/spread_i16.c (spread_i16): Regenerated.
>>              * generated/spread_i2.c (spread_i2): Regenerated.
>>              * generated/spread_i4.c (spread_i4): Regenerated.
>>              * generated/spread_i8.c (spread_i8): Regenerated.
>>              * generated/spread_r10.c (spread_r10): Regenerated.
>>              * generated/spread_r16.c (spread_r16): Regenerated.
>>              * generated/spread_r17.c (spread_r17): Regenerated.
>>              * generated/spread_r4.c (spread_r4): Regenerated.
>>              * generated/spread_r8.c (spread_r8): Regenerated.
>>              * intrinsics/execute_command_line.c 
>> (execute_command_line_i4),
>>              (execute_command_line_i8): Set estat_initial to zero.
>>              * intrinsics/pack_generic.c (pack_internal): Set 
>> sstride[0] and
>>              mstride[0] to zero.
>>              * intrinsics/spread_generic.c (spread_internal): Set 
>> sstride[0].
>>              * m4/pack.m4: Set sstride[0] and mstride[0].
>>              * m4/spread.m4: Set sstride[0].
>
  
Thomas Koenig Feb. 27, 2023, 6:30 a.m. UTC | #3
Hi Jerry,


> I should have clarified in my posts that the warnings are on the use of 
> sstride[0], mstride[0] or both.


> In a sense it is a 
> regression. It showed up when builds started to use -Wmaybe-unitialized.

I think this is OK for trunk now, and backport for up to whenever
-Wmaybe-uninitialized was introduced into the build.

The "regression-only" rule is mostly motivated by not introducing
new bugs (and for Fortran, we have a bit of leeway), and I would
be hard to pressed to think of a patch less likely to introduce
regressions.

Thanks for the patch!

Best regards

	Thomas
  
Tobias Burnus Feb. 27, 2023, 7:54 a.m. UTC | #4
Just side remarks, the 0 init in the patch is fine.

On 27.02.23 03:53, Jerry D via Gcc-patches wrote:

>> regarding PACK: since this is a bogus warning as the compiler does
>> not realize that dim >= 1, wouldn't a
>>
>> gcc_assert (dim >= 1);

Note: gcc_assert only exists in the compiler itself; in libgfortran, we
use GFC_ASSERT or directly 'assert'.

You could also use 'if (dim < 1) __builtin_unreachable();' – or since
GCC 13:

__attribute__((assume (dim >= 1)));

Tobias

PS: In Fortran, '-fopenmp-simd' plus '!$omp assume holds(dim>=0) ...
!$omp end assume' (or !$omp ... + block/end block) can be used to denote
such assumptions. '-fopenmp-simd' enables only those bits of OpenMP that
do not require any library support (no libgomp, no pthreads), contrary
to '-fopenmp'.

-----------------
Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955
  
Jerry D Feb. 28, 2023, 2:16 a.m. UTC | #5
Pushed, thanks for feedback

On 2/26/23 11:54 PM, Tobias Burnus wrote:
> Just side remarks, the 0 init in the patch is fine.
> 
> On 27.02.23 03:53, Jerry D via Gcc-patches wrote:
> 
>>> regarding PACK: since this is a bogus warning as the compiler does
>>> not realize that dim >= 1, wouldn't a
>>>
>>> gcc_assert (dim >= 1);
> 
> Note: gcc_assert only exists in the compiler itself; in libgfortran, we
> use GFC_ASSERT or directly 'assert'.
> 
> You could also use 'if (dim < 1) __builtin_unreachable();' – or since
> GCC 13:
> 
> __attribute__((assume (dim >= 1)));
> 
> Tobias
> 
> PS: In Fortran, '-fopenmp-simd' plus '!$omp assume holds(dim>=0) ...
> !$omp end assume' (or !$omp ... + block/end block) can be used to denote
> such assumptions. '-fopenmp-simd' enables only those bits of OpenMP that
> do not require any library support (no libgomp, no pthreads), contrary
> to '-fopenmp'.
> 
> -----------------
> Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 
> 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: 
> Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; 
> Registergericht München, HRB 106955
  

Patch

diff --git a/libgfortran/generated/pack_c10.c b/libgfortran/generated/pack_c10.c
index a961057a8a6..c01efd11cf8 100644
--- a/libgfortran/generated/pack_c10.c
+++ b/libgfortran/generated/pack_c10.c
@@ -96,6 +96,9 @@  pack_c10 (gfc_array_c10 *ret, const gfc_array_c10 *array,
 
   dim = GFC_DESCRIPTOR_RANK (array);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  mstride[0] = 0;
+
   mptr = mask->base_addr;
 
   /* Use the same loop for all logical types, by using GFC_LOGICAL_1
diff --git a/libgfortran/generated/pack_c16.c b/libgfortran/generated/pack_c16.c
index 37c062798bb..8ee6b25cbe6 100644
--- a/libgfortran/generated/pack_c16.c
+++ b/libgfortran/generated/pack_c16.c
@@ -96,6 +96,9 @@  pack_c16 (gfc_array_c16 *ret, const gfc_array_c16 *array,
 
   dim = GFC_DESCRIPTOR_RANK (array);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  mstride[0] = 0;
+
   mptr = mask->base_addr;
 
   /* Use the same loop for all logical types, by using GFC_LOGICAL_1
diff --git a/libgfortran/generated/pack_c17.c b/libgfortran/generated/pack_c17.c
index f9638d640ad..7a1cf5e17e8 100644
--- a/libgfortran/generated/pack_c17.c
+++ b/libgfortran/generated/pack_c17.c
@@ -96,6 +96,9 @@  pack_c17 (gfc_array_c17 *ret, const gfc_array_c17 *array,
 
   dim = GFC_DESCRIPTOR_RANK (array);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  mstride[0] = 0;
+
   mptr = mask->base_addr;
 
   /* Use the same loop for all logical types, by using GFC_LOGICAL_1
diff --git a/libgfortran/generated/pack_c4.c b/libgfortran/generated/pack_c4.c
index d72717041a1..76c8a853fac 100644
--- a/libgfortran/generated/pack_c4.c
+++ b/libgfortran/generated/pack_c4.c
@@ -96,6 +96,9 @@  pack_c4 (gfc_array_c4 *ret, const gfc_array_c4 *array,
 
   dim = GFC_DESCRIPTOR_RANK (array);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  mstride[0] = 0;
+
   mptr = mask->base_addr;
 
   /* Use the same loop for all logical types, by using GFC_LOGICAL_1
diff --git a/libgfortran/generated/pack_c8.c b/libgfortran/generated/pack_c8.c
index 9f8e97e4bc8..365c26ed0e8 100644
--- a/libgfortran/generated/pack_c8.c
+++ b/libgfortran/generated/pack_c8.c
@@ -96,6 +96,9 @@  pack_c8 (gfc_array_c8 *ret, const gfc_array_c8 *array,
 
   dim = GFC_DESCRIPTOR_RANK (array);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  mstride[0] = 0;
+
   mptr = mask->base_addr;
 
   /* Use the same loop for all logical types, by using GFC_LOGICAL_1
diff --git a/libgfortran/generated/pack_i1.c b/libgfortran/generated/pack_i1.c
index 0f4fe72b3f5..97a82281a5c 100644
--- a/libgfortran/generated/pack_i1.c
+++ b/libgfortran/generated/pack_i1.c
@@ -96,6 +96,9 @@  pack_i1 (gfc_array_i1 *ret, const gfc_array_i1 *array,
 
   dim = GFC_DESCRIPTOR_RANK (array);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  mstride[0] = 0;
+
   mptr = mask->base_addr;
 
   /* Use the same loop for all logical types, by using GFC_LOGICAL_1
diff --git a/libgfortran/generated/pack_i16.c b/libgfortran/generated/pack_i16.c
index 3c4169b88ca..a0aa6db29d8 100644
--- a/libgfortran/generated/pack_i16.c
+++ b/libgfortran/generated/pack_i16.c
@@ -96,6 +96,9 @@  pack_i16 (gfc_array_i16 *ret, const gfc_array_i16 *array,
 
   dim = GFC_DESCRIPTOR_RANK (array);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  mstride[0] = 0;
+
   mptr = mask->base_addr;
 
   /* Use the same loop for all logical types, by using GFC_LOGICAL_1
diff --git a/libgfortran/generated/pack_i2.c b/libgfortran/generated/pack_i2.c
index c5878afc163..24efcaae17e 100644
--- a/libgfortran/generated/pack_i2.c
+++ b/libgfortran/generated/pack_i2.c
@@ -96,6 +96,9 @@  pack_i2 (gfc_array_i2 *ret, const gfc_array_i2 *array,
 
   dim = GFC_DESCRIPTOR_RANK (array);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  mstride[0] = 0;
+
   mptr = mask->base_addr;
 
   /* Use the same loop for all logical types, by using GFC_LOGICAL_1
diff --git a/libgfortran/generated/pack_i4.c b/libgfortran/generated/pack_i4.c
index 45f5d05918b..6642f2b0bc1 100644
--- a/libgfortran/generated/pack_i4.c
+++ b/libgfortran/generated/pack_i4.c
@@ -96,6 +96,9 @@  pack_i4 (gfc_array_i4 *ret, const gfc_array_i4 *array,
 
   dim = GFC_DESCRIPTOR_RANK (array);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  mstride[0] = 0;
+
   mptr = mask->base_addr;
 
   /* Use the same loop for all logical types, by using GFC_LOGICAL_1
diff --git a/libgfortran/generated/pack_i8.c b/libgfortran/generated/pack_i8.c
index c45fc27c04a..0f6ce94f036 100644
--- a/libgfortran/generated/pack_i8.c
+++ b/libgfortran/generated/pack_i8.c
@@ -96,6 +96,9 @@  pack_i8 (gfc_array_i8 *ret, const gfc_array_i8 *array,
 
   dim = GFC_DESCRIPTOR_RANK (array);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  mstride[0] = 0;
+
   mptr = mask->base_addr;
 
   /* Use the same loop for all logical types, by using GFC_LOGICAL_1
diff --git a/libgfortran/generated/pack_r10.c b/libgfortran/generated/pack_r10.c
index 1211fc492af..7dd232853b4 100644
--- a/libgfortran/generated/pack_r10.c
+++ b/libgfortran/generated/pack_r10.c
@@ -96,6 +96,9 @@  pack_r10 (gfc_array_r10 *ret, const gfc_array_r10 *array,
 
   dim = GFC_DESCRIPTOR_RANK (array);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  mstride[0] = 0;
+
   mptr = mask->base_addr;
 
   /* Use the same loop for all logical types, by using GFC_LOGICAL_1
diff --git a/libgfortran/generated/pack_r16.c b/libgfortran/generated/pack_r16.c
index e6d6c7cfb8e..6db5e65e16f 100644
--- a/libgfortran/generated/pack_r16.c
+++ b/libgfortran/generated/pack_r16.c
@@ -96,6 +96,9 @@  pack_r16 (gfc_array_r16 *ret, const gfc_array_r16 *array,
 
   dim = GFC_DESCRIPTOR_RANK (array);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  mstride[0] = 0;
+
   mptr = mask->base_addr;
 
   /* Use the same loop for all logical types, by using GFC_LOGICAL_1
diff --git a/libgfortran/generated/pack_r17.c b/libgfortran/generated/pack_r17.c
index 02e0b9622cb..6f9ff439559 100644
--- a/libgfortran/generated/pack_r17.c
+++ b/libgfortran/generated/pack_r17.c
@@ -96,6 +96,9 @@  pack_r17 (gfc_array_r17 *ret, const gfc_array_r17 *array,
 
   dim = GFC_DESCRIPTOR_RANK (array);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  mstride[0] = 0;
+
   mptr = mask->base_addr;
 
   /* Use the same loop for all logical types, by using GFC_LOGICAL_1
diff --git a/libgfortran/generated/pack_r4.c b/libgfortran/generated/pack_r4.c
index 630d2a0e730..09132539ce9 100644
--- a/libgfortran/generated/pack_r4.c
+++ b/libgfortran/generated/pack_r4.c
@@ -96,6 +96,9 @@  pack_r4 (gfc_array_r4 *ret, const gfc_array_r4 *array,
 
   dim = GFC_DESCRIPTOR_RANK (array);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  mstride[0] = 0;
+
   mptr = mask->base_addr;
 
   /* Use the same loop for all logical types, by using GFC_LOGICAL_1
diff --git a/libgfortran/generated/pack_r8.c b/libgfortran/generated/pack_r8.c
index 90d66bbc04b..96b648aca4e 100644
--- a/libgfortran/generated/pack_r8.c
+++ b/libgfortran/generated/pack_r8.c
@@ -96,6 +96,9 @@  pack_r8 (gfc_array_r8 *ret, const gfc_array_r8 *array,
 
   dim = GFC_DESCRIPTOR_RANK (array);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  mstride[0] = 0;
+
   mptr = mask->base_addr;
 
   /* Use the same loop for all logical types, by using GFC_LOGICAL_1
diff --git a/libgfortran/generated/spread_c10.c b/libgfortran/generated/spread_c10.c
index 485f4ad1431..987a81c0d7b 100644
--- a/libgfortran/generated/spread_c10.c
+++ b/libgfortran/generated/spread_c10.c
@@ -56,6 +56,8 @@  spread_c10 (gfc_array_c10 *ret, const gfc_array_c10 *source,
 
   srank = GFC_DESCRIPTOR_RANK(source);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  
   rrank = srank + 1;
   if (rrank > GFC_MAX_DIMENSIONS)
     runtime_error ("return rank too large in spread()");
diff --git a/libgfortran/generated/spread_c16.c b/libgfortran/generated/spread_c16.c
index 23ed7a6684f..d7969a14a6a 100644
--- a/libgfortran/generated/spread_c16.c
+++ b/libgfortran/generated/spread_c16.c
@@ -56,6 +56,8 @@  spread_c16 (gfc_array_c16 *ret, const gfc_array_c16 *source,
 
   srank = GFC_DESCRIPTOR_RANK(source);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  
   rrank = srank + 1;
   if (rrank > GFC_MAX_DIMENSIONS)
     runtime_error ("return rank too large in spread()");
diff --git a/libgfortran/generated/spread_c17.c b/libgfortran/generated/spread_c17.c
index f6d13e97e21..3011c365c14 100644
--- a/libgfortran/generated/spread_c17.c
+++ b/libgfortran/generated/spread_c17.c
@@ -56,6 +56,8 @@  spread_c17 (gfc_array_c17 *ret, const gfc_array_c17 *source,
 
   srank = GFC_DESCRIPTOR_RANK(source);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  
   rrank = srank + 1;
   if (rrank > GFC_MAX_DIMENSIONS)
     runtime_error ("return rank too large in spread()");
diff --git a/libgfortran/generated/spread_c4.c b/libgfortran/generated/spread_c4.c
index 322c86061be..f0550d36e2b 100644
--- a/libgfortran/generated/spread_c4.c
+++ b/libgfortran/generated/spread_c4.c
@@ -56,6 +56,8 @@  spread_c4 (gfc_array_c4 *ret, const gfc_array_c4 *source,
 
   srank = GFC_DESCRIPTOR_RANK(source);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  
   rrank = srank + 1;
   if (rrank > GFC_MAX_DIMENSIONS)
     runtime_error ("return rank too large in spread()");
diff --git a/libgfortran/generated/spread_c8.c b/libgfortran/generated/spread_c8.c
index 9a06ee29718..b93518fb900 100644
--- a/libgfortran/generated/spread_c8.c
+++ b/libgfortran/generated/spread_c8.c
@@ -56,6 +56,8 @@  spread_c8 (gfc_array_c8 *ret, const gfc_array_c8 *source,
 
   srank = GFC_DESCRIPTOR_RANK(source);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  
   rrank = srank + 1;
   if (rrank > GFC_MAX_DIMENSIONS)
     runtime_error ("return rank too large in spread()");
diff --git a/libgfortran/generated/spread_i1.c b/libgfortran/generated/spread_i1.c
index fc140e25f68..3c913a30397 100644
--- a/libgfortran/generated/spread_i1.c
+++ b/libgfortran/generated/spread_i1.c
@@ -56,6 +56,8 @@  spread_i1 (gfc_array_i1 *ret, const gfc_array_i1 *source,
 
   srank = GFC_DESCRIPTOR_RANK(source);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  
   rrank = srank + 1;
   if (rrank > GFC_MAX_DIMENSIONS)
     runtime_error ("return rank too large in spread()");
diff --git a/libgfortran/generated/spread_i16.c b/libgfortran/generated/spread_i16.c
index 80ace87ae87..61dc5c49ad9 100644
--- a/libgfortran/generated/spread_i16.c
+++ b/libgfortran/generated/spread_i16.c
@@ -56,6 +56,8 @@  spread_i16 (gfc_array_i16 *ret, const gfc_array_i16 *source,
 
   srank = GFC_DESCRIPTOR_RANK(source);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  
   rrank = srank + 1;
   if (rrank > GFC_MAX_DIMENSIONS)
     runtime_error ("return rank too large in spread()");
diff --git a/libgfortran/generated/spread_i2.c b/libgfortran/generated/spread_i2.c
index 0815de1e2f2..28a4f8b1a7c 100644
--- a/libgfortran/generated/spread_i2.c
+++ b/libgfortran/generated/spread_i2.c
@@ -56,6 +56,8 @@  spread_i2 (gfc_array_i2 *ret, const gfc_array_i2 *source,
 
   srank = GFC_DESCRIPTOR_RANK(source);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  
   rrank = srank + 1;
   if (rrank > GFC_MAX_DIMENSIONS)
     runtime_error ("return rank too large in spread()");
diff --git a/libgfortran/generated/spread_i4.c b/libgfortran/generated/spread_i4.c
index 4873c59c659..a0a53322d16 100644
--- a/libgfortran/generated/spread_i4.c
+++ b/libgfortran/generated/spread_i4.c
@@ -56,6 +56,8 @@  spread_i4 (gfc_array_i4 *ret, const gfc_array_i4 *source,
 
   srank = GFC_DESCRIPTOR_RANK(source);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  
   rrank = srank + 1;
   if (rrank > GFC_MAX_DIMENSIONS)
     runtime_error ("return rank too large in spread()");
diff --git a/libgfortran/generated/spread_i8.c b/libgfortran/generated/spread_i8.c
index f212bc63639..206bbbbb367 100644
--- a/libgfortran/generated/spread_i8.c
+++ b/libgfortran/generated/spread_i8.c
@@ -56,6 +56,8 @@  spread_i8 (gfc_array_i8 *ret, const gfc_array_i8 *source,
 
   srank = GFC_DESCRIPTOR_RANK(source);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  
   rrank = srank + 1;
   if (rrank > GFC_MAX_DIMENSIONS)
     runtime_error ("return rank too large in spread()");
diff --git a/libgfortran/generated/spread_r10.c b/libgfortran/generated/spread_r10.c
index 95816263aee..07608385984 100644
--- a/libgfortran/generated/spread_r10.c
+++ b/libgfortran/generated/spread_r10.c
@@ -56,6 +56,8 @@  spread_r10 (gfc_array_r10 *ret, const gfc_array_r10 *source,
 
   srank = GFC_DESCRIPTOR_RANK(source);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  
   rrank = srank + 1;
   if (rrank > GFC_MAX_DIMENSIONS)
     runtime_error ("return rank too large in spread()");
diff --git a/libgfortran/generated/spread_r16.c b/libgfortran/generated/spread_r16.c
index 6856f70122a..af6075e6b3d 100644
--- a/libgfortran/generated/spread_r16.c
+++ b/libgfortran/generated/spread_r16.c
@@ -56,6 +56,8 @@  spread_r16 (gfc_array_r16 *ret, const gfc_array_r16 *source,
 
   srank = GFC_DESCRIPTOR_RANK(source);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  
   rrank = srank + 1;
   if (rrank > GFC_MAX_DIMENSIONS)
     runtime_error ("return rank too large in spread()");
diff --git a/libgfortran/generated/spread_r17.c b/libgfortran/generated/spread_r17.c
index f2a459528dd..cb765d3212e 100644
--- a/libgfortran/generated/spread_r17.c
+++ b/libgfortran/generated/spread_r17.c
@@ -56,6 +56,8 @@  spread_r17 (gfc_array_r17 *ret, const gfc_array_r17 *source,
 
   srank = GFC_DESCRIPTOR_RANK(source);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  
   rrank = srank + 1;
   if (rrank > GFC_MAX_DIMENSIONS)
     runtime_error ("return rank too large in spread()");
diff --git a/libgfortran/generated/spread_r4.c b/libgfortran/generated/spread_r4.c
index 5a52870c537..8fdb722e523 100644
--- a/libgfortran/generated/spread_r4.c
+++ b/libgfortran/generated/spread_r4.c
@@ -56,6 +56,8 @@  spread_r4 (gfc_array_r4 *ret, const gfc_array_r4 *source,
 
   srank = GFC_DESCRIPTOR_RANK(source);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  
   rrank = srank + 1;
   if (rrank > GFC_MAX_DIMENSIONS)
     runtime_error ("return rank too large in spread()");
diff --git a/libgfortran/generated/spread_r8.c b/libgfortran/generated/spread_r8.c
index 3bc847f000e..ecfe9ad4e8b 100644
--- a/libgfortran/generated/spread_r8.c
+++ b/libgfortran/generated/spread_r8.c
@@ -56,6 +56,8 @@  spread_r8 (gfc_array_r8 *ret, const gfc_array_r8 *source,
 
   srank = GFC_DESCRIPTOR_RANK(source);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  
   rrank = srank + 1;
   if (rrank > GFC_MAX_DIMENSIONS)
     runtime_error ("return rank too large in spread()");
diff --git a/libgfortran/intrinsics/execute_command_line.c b/libgfortran/intrinsics/execute_command_line.c
index 0d1688400c2..c2bcaf05f0b 100644
--- a/libgfortran/intrinsics/execute_command_line.c
+++ b/libgfortran/intrinsics/execute_command_line.c
@@ -192,6 +192,8 @@  execute_command_line_i4 (const char *command, GFC_LOGICAL_4 *wait,
   bool w = wait ? *wait : true;
   int estat, estat_initial, cstat;
 
+  estat_initial = 0; /* Avoid nuisance warning if not initialized.  */
+
   if (exitstat)
     estat_initial = estat = *exitstat;
 
@@ -221,6 +223,8 @@  execute_command_line_i8 (const char *command, GFC_LOGICAL_8 *wait,
   bool w = wait ? *wait : true;
   int estat, estat_initial, cstat;
 
+  estat_initial = 0; /* Avoid nuisance warning if not initialized.  */
+
   if (exitstat)
     estat_initial = estat = *exitstat;
 
diff --git a/libgfortran/intrinsics/pack_generic.c b/libgfortran/intrinsics/pack_generic.c
index 5bc7f1c254b..cc7c8497ba1 100644
--- a/libgfortran/intrinsics/pack_generic.c
+++ b/libgfortran/intrinsics/pack_generic.c
@@ -94,6 +94,9 @@  pack_internal (gfc_array_char *ret, const gfc_array_char *array,
 
   dim = GFC_DESCRIPTOR_RANK (array);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  mstride[0] = 0;
+
   sptr = array->base_addr;
   mptr = mask->base_addr;
 
diff --git a/libgfortran/intrinsics/spread_generic.c b/libgfortran/intrinsics/spread_generic.c
index 7e3c8d5b04d..5b6df95447e 100644
--- a/libgfortran/intrinsics/spread_generic.c
+++ b/libgfortran/intrinsics/spread_generic.c
@@ -55,6 +55,8 @@  spread_internal (gfc_array_char *ret, const gfc_array_char *source,
 
   srank = GFC_DESCRIPTOR_RANK(source);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+
   rrank = srank + 1;
   if (rrank > GFC_MAX_DIMENSIONS)
     runtime_error ("return rank too large in spread()");
diff --git a/libgfortran/m4/pack.m4 b/libgfortran/m4/pack.m4
index 3003355c2c9..8bb8c250ceb 100644
--- a/libgfortran/m4/pack.m4
+++ b/libgfortran/m4/pack.m4
@@ -97,6 +97,9 @@  pack_'rtype_code` ('rtype` *ret, const 'rtype` *array,
 
   dim = GFC_DESCRIPTOR_RANK (array);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  mstride[0] = 0;
+
   mptr = mask->base_addr;
 
   /* Use the same loop for all logical types, by using GFC_LOGICAL_1
diff --git a/libgfortran/m4/spread.m4 b/libgfortran/m4/spread.m4
index 0d70345f8e0..edb46ef1b85 100644
--- a/libgfortran/m4/spread.m4
+++ b/libgfortran/m4/spread.m4
@@ -57,6 +57,8 @@  spread_'rtype_code` ('rtype` *ret, const 'rtype` *source,
 
   srank = GFC_DESCRIPTOR_RANK(source);
 
+  sstride[0] = 0; /* Avoid warnings if not initialized.  */
+  
   rrank = srank + 1;
   if (rrank > GFC_MAX_DIMENSIONS)
     runtime_error ("return rank too large in spread()");