From: ebotcazou Date: Sat, 8 May 2010 11:38:26 +0000 (+0000) Subject: * gcc-interface/decl.c (make_aligning_type): Declare the type. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4ce8ada59713e8a15d5082d98bf23d5f0e6ffbd4;p=thirdparty%2Fgcc.git * gcc-interface/decl.c (make_aligning_type): Declare the type. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159183 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 2a2805a49f02..3878ccd41493 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,7 @@ +2010-05-08 Eric Botcazou + + * gcc-interface/decl.c (make_aligning_type): Declare the type. + 2010-05-08 Eric Botcazou * gcc-interface/decl.c (gnat_to_gnu_entity): Create variables for size diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c index b0334f2c8eda..6df79fb878ed 100644 --- a/gcc/ada/gcc-interface/decl.c +++ b/gcc/ada/gcc-interface/decl.c @@ -5955,8 +5955,8 @@ make_aligning_type (tree type, unsigned int align, tree size, if (TREE_CODE (name) == TYPE_DECL) name = DECL_NAME (name); - - TYPE_NAME (record_type) = concat_name (name, "_ALIGN"); + name = concat_name (name, "ALIGN"); + TYPE_NAME (record_type) = name; /* Compute VOFFSET and then POS. The next byte position multiple of some alignment after some address is obtained by "and"ing the alignment minus @@ -6001,8 +6001,12 @@ make_aligning_type (tree type, unsigned int align, tree size, size_int (room + align / BITS_PER_UNIT)); SET_TYPE_MODE (record_type, BLKmode); - relate_alias_sets (record_type, type, ALIAS_SET_COPY); + + /* Declare it now since it will never be declared otherwise. This is + necessary to ensure that its subtrees are properly marked. */ + create_type_decl (name, record_type, NULL, true, false, Empty); + return record_type; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4a18a2b69dac..08266b1d434c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2010-05-08 Eric Botcazou + + * gnat.dg/lto4.ad[sb]: New test. + 2010-05-08 Eric Botcazou * gnat.dg/specs/lto3.ads: New test. diff --git a/gcc/testsuite/gnat.dg/lto4.adb b/gcc/testsuite/gnat.dg/lto4.adb new file mode 100644 index 000000000000..4e84b1d563d9 --- /dev/null +++ b/gcc/testsuite/gnat.dg/lto4.adb @@ -0,0 +1,12 @@ +-- { dg-do compile } +-- { dg-options "-flto" } + +package body Lto4 is + + procedure SS_Allocate (Stack : Stack_Ptr) is + Chunk : Chunk_Ptr := Stack.Current_Chunk; + begin + Chunk := new Chunk_Id (First => Chunk.Last, Last => Chunk.Last); + end; + +end Lto4; diff --git a/gcc/testsuite/gnat.dg/lto4.ads b/gcc/testsuite/gnat.dg/lto4.ads new file mode 100644 index 000000000000..36c9f9464e52 --- /dev/null +++ b/gcc/testsuite/gnat.dg/lto4.ads @@ -0,0 +1,26 @@ +with System.Storage_Elements; + +package Lto4 is + + package SSE renames System.Storage_Elements; + + type SS_Ptr is new SSE.Integer_Address; + + type Memory is array (SS_Ptr range <>) of SSE.Storage_Element; + for Memory'Alignment use Standard'Maximum_Alignment; + + type Chunk_Id (First, Last : SS_Ptr) is record + Mem : Memory (First .. Last); + end record; + + type Chunk_Ptr is access all Chunk_Id; + + type Stack_Id is record + Current_Chunk : Chunk_Ptr; + end record; + + type Stack_Ptr is access Stack_Id; + + procedure SS_Allocate (Stack : Stack_Ptr); + +end Lto4;