* varasm.c (output_constant): Do not abort on VIEW_CONVERT_EXPRs
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 17 Sep 2005 08:30:23 +0000 (08:30 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 17 Sep 2005 08:30:23 +0000 (08:30 +0000)
between different sizes.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@104368 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/varasm.c

index 1ba3fac..9115041 100644 (file)
@@ -1,3 +1,8 @@
+2005-09-17  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * varasm.c (output_constant): Do not abort on VIEW_CONVERT_EXPRs
+       between different sizes.
+
 2005-09-16  Paolo Bonzini  <bonzini@gnu.org>
 
        PR 23903
index d0f7afc..a258c9e 100644 (file)
@@ -3880,8 +3880,9 @@ output_constant (tree exp, unsigned HOST_WIDE_INT size, unsigned int align)
       HOST_WIDE_INT type_size = int_size_in_bytes (TREE_TYPE (exp));
       HOST_WIDE_INT op_size = int_size_in_bytes (TREE_TYPE (TREE_OPERAND (exp, 0)));
 
-      /* Make sure eliminating the conversion is really a no-op.  */
-      if (type_size != op_size)
+      /* Make sure eliminating the conversion is really a no-op, except with
+        VIEW_CONVERT_EXPR to allow for wild Ada unchecked conversions.  */
+      if (type_size != op_size && TREE_CODE (exp) != VIEW_CONVERT_EXPR)
        internal_error ("no-op convert from %wd to %wd bytes in initializer",
                        op_size, type_size);