[Ada] Spurious warning on uninitialized entity during code generation
authorEd Schonberg <schonberg@adacore.com>
Tue, 9 Oct 2018 15:04:53 +0000 (15:04 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Tue, 9 Oct 2018 15:04:53 +0000 (15:04 +0000)
This patch suppresses a spurious warning coming from the GCC backend, on
an aggregate that cannot be built in place and for which a temporary
variable must be created. If the type of the aggregate is a packed
boolean array, the generated code may appear to use an uninitialized
value for a component of the array, when in fact the code simply sets a
single bit of that array.

2018-10-09  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* exp_aggr.adb (Expand_Array_Aggregate): If it is not possible
to build in place an aggregate with component associations, set
the Warnings_Off flag on the generated temporary, to prevent
spurious warnings from the backend when compiling with the
-Wuninitialized gcc flag.

gcc/testsuite/

* gnat.dg/warn18.adb: New testcase.

From-SVN: r264960

gcc/ada/ChangeLog
gcc/ada/exp_aggr.adb
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/warn18.adb [new file with mode: 0644]

index d63cc5a927e92e637df348e381962ce533317e95..f6925bc9b501b6787fdb4c96f6346095c05d23ed 100644 (file)
@@ -1,3 +1,11 @@
+2018-10-09  Ed Schonberg  <schonberg@adacore.com>
+
+       * exp_aggr.adb (Expand_Array_Aggregate): If it is not possible
+       to build in place an aggregate with component associations, set
+       the Warnings_Off flag on the generated temporary, to prevent
+       spurious warnings from the backend when compiling with the
+       -Wuninitialized gcc flag.
+
 2018-09-30  Alexandre Oliva <oliva@adacore.com>
 
        * gcc-interface/lang-specs.h (default_compilers): When given
index f65230f5a72f78119c6777813ed5d24df974c393..1928cb9be3cdf22c356dcec41b498003ea545617 100644 (file)
@@ -6354,6 +6354,7 @@ package body Exp_Aggr is
              Defining_Identifier => Tmp,
              Object_Definition   => New_Occurrence_Of (Typ, Loc));
          Set_No_Initialization (Tmp_Decl, True);
+         Set_Warnings_Off (Tmp);
 
          --  If we are within a loop, the temporary will be pushed on the
          --  stack at each iteration. If the aggregate is the expression
index eed63b2431662d9485d4731e19d414de7d43181d..8f84ace89c0bf5e8bd3370ee24076b83249d8d49 100644 (file)
@@ -1,3 +1,7 @@
+2018-10-09  Ed Schonberg  <schonberg@adacore.com>
+
+       * gnat.dg/warn18.adb: New testcase.
+
 2018-10-09  Martin Liska  <mliska@suse.cz>
 
        * c-c++-common/asan/pr64820.c: Add line number to scanned
diff --git a/gcc/testsuite/gnat.dg/warn18.adb b/gcc/testsuite/gnat.dg/warn18.adb
new file mode 100644 (file)
index 0000000..c990575
--- /dev/null
@@ -0,0 +1,13 @@
+--  { dg-do compile }
+--  { dg-options "-Wuninitialized" }
+
+with Ada.Text_IO; use Ada.Text_IO;
+
+procedure Warn18 is
+   type Set is array (Natural range <>) of Boolean;
+   pragma Pack (Set);
+
+   O : constant Set (0 .. 255) := (28 => True, others => False);
+begin
+   Put_Line (O (1)'Img);
+end Warn18;