From d5d4d14e156d91fa4f5490eee269b6fc01b12160 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Tue, 4 Jan 2011 22:44:04 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 +++ gcc/dwarf2out.c | 7 +++- gcc/testsuite/ChangeLog | 4 +++ gcc/testsuite/gnat.dg/unchecked_convert8.adb | 34 ++++++++++++++++++++ gcc/testsuite/gnat.dg/unchecked_convert8.ads | 5 +++ 5 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gnat.dg/unchecked_convert8.adb create mode 100644 gcc/testsuite/gnat.dg/unchecked_convert8.ads diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 398410f1952..0b7a977a357 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2011-01-04 Eric Botcazou + + * dwarf2out.c (rtl_for_decl_init): Strip no-op conversions off the + initializer. Skip view conversions from aggregate types. + 2011-01-04 Kai Tietz PR bootstrap/47055 diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 9fe1e9c4369..22ee3240a36 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 824479bad8b..7ee893eee2d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2011-01-04 Eric Botcazou + + * gnat.dg/unchecked_convert8.ad[sb]: New test. + 2011-01-04 Janus Weil 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 00000000000..0b8f8d12d20 --- /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 00000000000..3a2857ccb09 --- /dev/null +++ b/gcc/testsuite/gnat.dg/unchecked_convert8.ads @@ -0,0 +1,5 @@ +package Unchecked_Convert8 is + + procedure Dummy; + +end Unchecked_Convert8; -- 2.30.2