mirror of git://gcc.gnu.org/git/gcc.git
varasm.c (initializer_constant_valid_for_bitfield_p): Return true for REAL_CST as well.
* varasm.c (initializer_constant_valid_for_bitfield_p): Return true for REAL_CST as well. (output_constructor): Use RECORD_OR_UNION_TYPE_P predicate. In the bitfield case, if the value is a REAL_CST, convert it first to an INTEGER_CST. From-SVN: r186100
This commit is contained in:
parent
0465e49e7e
commit
1d3aa46650
|
|
@ -1,3 +1,11 @@
|
||||||
|
2012-04-03 Eric Botcazou <ebotcazou@adacore.com>
|
||||||
|
|
||||||
|
* varasm.c (initializer_constant_valid_for_bitfield_p): Return true
|
||||||
|
for REAL_CST as well.
|
||||||
|
(output_constructor): Use RECORD_OR_UNION_TYPE_P predicate.
|
||||||
|
In the bitfield case, if the value is a REAL_CST, convert it first to
|
||||||
|
an INTEGER_CST.
|
||||||
|
|
||||||
2012-04-02 H.J. Lu <hongjiu.lu@intel.com>
|
2012-04-02 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* config.gcc: Use i386/biarchx32.h instead of i386/biarch64.h
|
* config.gcc: Use i386/biarchx32.h instead of i386/biarch64.h
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,7 @@
|
||||||
|
2012-04-03 Eric Botcazou <ebotcazou@adacore.com>
|
||||||
|
|
||||||
|
* gnat.dg/specs/aggr5.ads: New test.
|
||||||
|
|
||||||
2012-04-02 Richard Guenther <rguenther@suse.de>
|
2012-04-02 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
PR tree-optimization/52756
|
PR tree-optimization/52756
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
-- { dg-do compile }
|
||||||
|
|
||||||
|
pragma Restrictions (No_Elaboration_Code);
|
||||||
|
|
||||||
|
package Aggr5 is
|
||||||
|
|
||||||
|
type R is record
|
||||||
|
C : Character;
|
||||||
|
F : Float;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
for R use record
|
||||||
|
C at 0 range 0 .. 7;
|
||||||
|
F at 1 range 0 .. 31;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
My_R : R := (C => 'A', F => 1.0);
|
||||||
|
|
||||||
|
end Aggr5;
|
||||||
19
gcc/varasm.c
19
gcc/varasm.c
|
|
@ -4420,6 +4420,7 @@ initializer_constant_valid_for_bitfield_p (tree value)
|
||||||
}
|
}
|
||||||
|
|
||||||
case INTEGER_CST:
|
case INTEGER_CST:
|
||||||
|
case REAL_CST:
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case VIEW_CONVERT_EXPR:
|
case VIEW_CONVERT_EXPR:
|
||||||
|
|
@ -5075,10 +5076,7 @@ output_constructor (tree exp, unsigned HOST_WIDE_INT size,
|
||||||
|
|
||||||
/* The element in a union constructor specifies the proper field
|
/* The element in a union constructor specifies the proper field
|
||||||
or index. */
|
or index. */
|
||||||
if ((TREE_CODE (local.type) == RECORD_TYPE
|
if (RECORD_OR_UNION_TYPE_P (local.type) && ce->index != NULL_TREE)
|
||||||
|| TREE_CODE (local.type) == UNION_TYPE
|
|
||||||
|| TREE_CODE (local.type) == QUAL_UNION_TYPE)
|
|
||||||
&& ce->index != NULL_TREE)
|
|
||||||
local.field = ce->index;
|
local.field = ce->index;
|
||||||
|
|
||||||
else if (TREE_CODE (local.type) == ARRAY_TYPE)
|
else if (TREE_CODE (local.type) == ARRAY_TYPE)
|
||||||
|
|
@ -5110,9 +5108,18 @@ output_constructor (tree exp, unsigned HOST_WIDE_INT size,
|
||||||
|| !CONSTRUCTOR_BITFIELD_P (local.field)))
|
|| !CONSTRUCTOR_BITFIELD_P (local.field)))
|
||||||
output_constructor_regular_field (&local);
|
output_constructor_regular_field (&local);
|
||||||
|
|
||||||
/* For a true bitfield or part of an outer one. */
|
/* For a true bitfield or part of an outer one. Only INTEGER_CSTs are
|
||||||
|
supported for scalar fields, so we may need to convert first. */
|
||||||
else
|
else
|
||||||
output_constructor_bitfield (&local, outer);
|
{
|
||||||
|
if (TREE_CODE (local.val) == REAL_CST)
|
||||||
|
local.val
|
||||||
|
= fold_unary (VIEW_CONVERT_EXPR,
|
||||||
|
build_nonstandard_integer_type
|
||||||
|
(TYPE_PRECISION (TREE_TYPE (local.val)), 0),
|
||||||
|
local.val);
|
||||||
|
output_constructor_bitfield (&local, outer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we are not at toplevel, save the pending data for our caller.
|
/* If we are not at toplevel, save the pending data for our caller.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue