decl.c (gnat_to_gnu_entity): For an object at global level with unconstrained nominal subtype and a...
* gcc-interface/decl.c (gnat_to_gnu_entity) <object>: For an object at global level with unconstrained nominal subtype and a non-fixed size, make a variable for the size. From-SVN: r187668
This commit is contained in:
parent
ca5c09c553
commit
37b2deff0d
|
@ -1,3 +1,9 @@
|
|||
2012-05-18 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gcc-interface/decl.c (gnat_to_gnu_entity) <object>: For an object at
|
||||
global level with unconstrained nominal subtype and a non-fixed size,
|
||||
make a variable for the size.
|
||||
|
||||
2012-05-15 Andris Pavenis <andris.pavenis@iki.fi>
|
||||
|
||||
PR ada/52494
|
||||
|
|
|
@ -778,6 +778,14 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
|
|||
gnu_size = max_size (TYPE_SIZE (gnu_type), true);
|
||||
mutable_p = true;
|
||||
}
|
||||
|
||||
/* If we are at global level and the size isn't constant, call
|
||||
elaborate_expression_1 to make a variable for it rather than
|
||||
calculating it each time. */
|
||||
if (global_bindings_p () && !TREE_CONSTANT (gnu_size))
|
||||
gnu_size = elaborate_expression_1 (gnu_size, gnat_entity,
|
||||
get_identifier ("SIZE"),
|
||||
definition, false);
|
||||
}
|
||||
|
||||
/* If the size is zero byte, make it one byte since some linkers have
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2012-05-18 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gnat.dg/specs/lto12.ads: New test.
|
||||
* gnat.dg/specs/lto12_pkg.ads: New helper.
|
||||
|
||||
2012-05-17 David S. Miller <davem@davemloft.net>
|
||||
|
||||
* gfortran.dg/bessel_7.f90: Bump allowed precision to avoid
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
-- { dg-do compile }
|
||||
-- { dg-options "-flto" { target lto } }
|
||||
|
||||
with Lto12_Pkg; use Lto12_Pkg;
|
||||
|
||||
package Lto12 is
|
||||
|
||||
C : constant R := F;
|
||||
|
||||
end Lto12;
|
|
@ -0,0 +1,14 @@
|
|||
-- { dg-excess-errors "cannot generate code" }
|
||||
|
||||
package Lto12_Pkg is
|
||||
|
||||
type R (Kind : Boolean := False) is record
|
||||
case Kind is
|
||||
when True => I : Integer;
|
||||
when others => null;
|
||||
end case;
|
||||
end record;
|
||||
|
||||
function F return R;
|
||||
|
||||
end Lto12_Pkg;
|
Loading…
Reference in New Issue