aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2011-01-04 22:44:04 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2011-01-04 22:44:04 +0000
commitd5d4d14e156d91fa4f5490eee269b6fc01b12160 (patch)
treed3f331d5e4da342751a22707e4ec2414cebc9f72 /gcc
parent5e208e74b37744d823fdf438ee0d0841dfdac055 (diff)
downloadgcc-d5d4d14e156d91fa4f5490eee269b6fc01b12160.zip
gcc-d5d4d14e156d91fa4f5490eee269b6fc01b12160.tar.gz
gcc-d5d4d14e156d91fa4f5490eee269b6fc01b12160.tar.bz2
dwarf2out.c (rtl_for_decl_init): Strip no-op conversions off the initializer.
* dwarf2out.c (rtl_for_decl_init): Strip no-op conversions off the initializer. Skip view conversions from aggregate types. From-SVN: r168488
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/dwarf2out.c7
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gnat.dg/unchecked_convert8.adb34
-rw-r--r--gcc/testsuite/gnat.dg/unchecked_convert8.ads5
5 files changed, 54 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 398410f..0b7a977 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2011-01-04 Eric Botcazou <ebotcazou@adacore.com>
+
+ * dwarf2out.c (rtl_for_decl_init): Strip no-op conversions off the
+ initializer. Skip view conversions from aggregate types.
+
2011-01-04 Kai Tietz <kai.tietz@onevision.com>
PR bootstrap/47055
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 9fe1e9c..22ee324 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -16526,6 +16526,8 @@ rtl_for_decl_init (tree init, tree type)
{
rtx rtl = NULL_RTX;
+ STRIP_NOPS (init);
+
/* If a variable is initialized with a string constant without embedded
zeros, build CONST_STRING. */
if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
@@ -16550,7 +16552,10 @@ rtl_for_decl_init (tree init, tree type)
}
/* Other aggregates, and complex values, could be represented using
CONCAT: FIXME! */
- else if (AGGREGATE_TYPE_P (type) || TREE_CODE (type) == COMPLEX_TYPE)
+ else if (AGGREGATE_TYPE_P (type)
+ || (TREE_CODE (init) == VIEW_CONVERT_EXPR
+ && AGGREGATE_TYPE_P (TREE_TYPE (TREE_OPERAND (init, 0))))
+ || TREE_CODE (type) == COMPLEX_TYPE)
;
/* Vectors only work if their mode is supported by the target.
FIXME: generic vectors ought to work too. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 824479b..7ee893e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2011-01-04 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/unchecked_convert8.ad[sb]: New test.
+
2011-01-04 Janus Weil <janus@gcc.gnu.org>
PR fortran/46448
diff --git a/gcc/testsuite/gnat.dg/unchecked_convert8.adb b/gcc/testsuite/gnat.dg/unchecked_convert8.adb
new file mode 100644
index 0000000..0b8f8d1
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/unchecked_convert8.adb
@@ -0,0 +1,34 @@
+-- { dg-do compile }
+-- { dg-options "-g -O" }
+
+with Ada.Unchecked_Conversion;
+
+package body Unchecked_Convert8 is
+
+ type T1 is range 0 .. 255;
+
+ type T2 is
+ record
+ A : T1;
+ B : T1;
+ end record;
+
+ for T2 use
+ record
+ A at 0 range 0 .. 7;
+ B at 1 range 0 .. 7;
+ end record;
+
+ for T2'Size use 16;
+
+ type T3 is range 0 .. (2**16 - 1);
+ for T3'Size use 16;
+
+ function T2_TO_T3 is
+ new Ada.Unchecked_Conversion (Source => T2, Target => T3);
+
+ C : constant T3 := T2_TO_T3 (S => (A => 0, B => 0));
+
+ procedure Dummy is begin null; end;
+
+end Unchecked_Convert8;
diff --git a/gcc/testsuite/gnat.dg/unchecked_convert8.ads b/gcc/testsuite/gnat.dg/unchecked_convert8.ads
new file mode 100644
index 0000000..3a2857c
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/unchecked_convert8.ads
@@ -0,0 +1,5 @@
+package Unchecked_Convert8 is
+
+ procedure Dummy;
+
+end Unchecked_Convert8;