utils2.c (build_simple_component_ref): Do not look through an extension if the type contains a placeholder.
* gcc-interface/utils2.c (build_simple_component_ref): Do not look through an extension if the type contains a placeholder. From-SVN: r189202
This commit is contained in:
parent
28dd005525
commit
4a147e4e04
5 changed files with 46 additions and 1 deletions
|
@ -1,3 +1,8 @@
|
|||
2012-07-03 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gcc-interface/utils2.c (build_simple_component_ref): Do not look
|
||||
through an extension if the type contains a placeholder.
|
||||
|
||||
2012-07-03 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* exp_disp.adb (Expand_Dispatching_Call): Propagate the convention on
|
||||
|
|
|
@ -1912,10 +1912,12 @@ build_simple_component_ref (tree record_variable, tree component,
|
|||
break;
|
||||
|
||||
/* Next, see if we're looking for an inherited component in an extension.
|
||||
If so, look thru the extension directly. */
|
||||
If so, look thru the extension directly, but not if the type contains
|
||||
a placeholder, as it might be needed for a later substitution. */
|
||||
if (!new_field
|
||||
&& TREE_CODE (record_variable) == VIEW_CONVERT_EXPR
|
||||
&& TYPE_ALIGN_OK (record_type)
|
||||
&& !type_contains_placeholder_p (record_type)
|
||||
&& TREE_CODE (TREE_TYPE (TREE_OPERAND (record_variable, 0)))
|
||||
== RECORD_TYPE
|
||||
&& TYPE_ALIGN_OK (TREE_TYPE (TREE_OPERAND (record_variable, 0))))
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2012-07-03 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gnat.dg/discr37.ad[sb]: New test.
|
||||
|
||||
2012-07-03 Oleg Endo <olegendo@gcc.gnu.org>
|
||||
|
||||
* g++.dg/other/packed1.C: Remove SH from xfail list.
|
||||
|
|
12
gcc/testsuite/gnat.dg/discr37.adb
Normal file
12
gcc/testsuite/gnat.dg/discr37.adb
Normal file
|
@ -0,0 +1,12 @@
|
|||
-- { dg-do compile }
|
||||
|
||||
package body Discr37 is
|
||||
|
||||
procedure Proc (A : access Child) is
|
||||
B : Derived renames Derived (A.F(1).all);
|
||||
C : Derived renames Derived (B.S(1).all);
|
||||
begin
|
||||
null;
|
||||
end;
|
||||
|
||||
end Discr37;
|
22
gcc/testsuite/gnat.dg/discr37.ads
Normal file
22
gcc/testsuite/gnat.dg/discr37.ads
Normal file
|
@ -0,0 +1,22 @@
|
|||
package Discr37 is
|
||||
|
||||
subtype Index is Integer range 0 .. 100;
|
||||
|
||||
type Root;
|
||||
type Frame_Ptr is access all Root'Class;
|
||||
|
||||
type Arr is array (Index range <>) of Frame_Ptr;
|
||||
|
||||
type Root (Level : Index) is tagged record
|
||||
S : Arr (0 .. Level);
|
||||
end record;
|
||||
|
||||
type Derived (Level : Index) is new Root (Level) with null record;
|
||||
|
||||
type Child is new Derived (0) with record
|
||||
F : Arr (0 .. 100);
|
||||
end record;
|
||||
|
||||
procedure Proc (A : access Child);
|
||||
|
||||
end Discr37;
|
Loading…
Add table
Reference in a new issue