+2012-01-21 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR ada/46192
+ * gcc-interface/decl.c (gnat_to_gnu_entity) <object>: In the case of a
+ renaming, preserve the volatileness through the indirection, if any.
+
2012-01-09 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/trans.c (addressable_p) <COMPONENT_REF>: Fix thinko.
entity is always accessed indirectly through it. */
else
{
+ /* We need to preserve the volatileness of the renamed
+ object through the indirection. */
+ if (TREE_THIS_VOLATILE (gnu_expr)
+ && !TYPE_VOLATILE (gnu_type))
+ gnu_type
+ = build_qualified_type (gnu_type,
+ (TYPE_QUALS (gnu_type)
+ | TYPE_QUAL_VOLATILE));
gnu_type = build_reference_type (gnu_type);
inner_const_flag = TREE_READONLY (gnu_expr);
const_flag = true;
+2012-01-21 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/renaming5.ad[sb]: New test.
+
2012-01-20 Kai Tietz <ktietz@redhat.com>
* g++.dg/torture/pr51344.C: Fix typo.
--- /dev/null
+-- PR ada/46192
+-- Testcase by Rolf Ebert <rolf.ebert.gcc@gmx.de>
+
+-- { dg-do compile }
+-- { dg-options "-O2 -fdump-tree-optimized" }
+
+with System; use System;
+
+package body Renaming5 is
+
+ type Bits_In_Byte is array (0 .. 7) of Boolean;
+ pragma Pack (Bits_In_Byte);
+
+ A : Bits_In_Byte;
+ for A'Address use System'To_Address(16#c0#);
+ pragma Volatile (A);
+
+ B : Bits_In_Byte renames A;
+
+ procedure Proc is
+ begin
+ while B (0) = False loop
+ null;
+ end loop;
+ end;
+
+end Renaming5;
+
+-- { dg-final { scan-tree-dump-times "goto" 2 "optimized" } }
+-- { dg-final { cleanup-tree-dump "optimized" } }
--- /dev/null
+package Renaming5 is
+
+ procedure Proc;
+
+end Renaming5;