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
+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
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
+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
--- /dev/null
+-- { 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;