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: r187666
This commit is contained in:
parent
b8b552d99b
commit
1d5bfe9720
5 changed files with 43 additions and 0 deletions
|
@ -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
|
||||
|
|
|
@ -760,6 +760,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-18 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/53346
|
||||
|
|
10
gcc/testsuite/gnat.dg/specs/lto12.ads
Normal file
10
gcc/testsuite/gnat.dg/specs/lto12.ads
Normal file
|
@ -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;
|
14
gcc/testsuite/gnat.dg/specs/lto12_pkg.ads
Normal file
14
gcc/testsuite/gnat.dg/specs/lto12_pkg.ads
Normal file
|
@ -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…
Add table
Reference in a new issue