built for interfaces.
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Use
imported_p instead of Is_Imported when considering constants.
Do not promote alignment of exported objects.
<E_Record_Subtype>: Strip all suffixes for dispatch table entities.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159247
138bc75d-0d04-0410-961f-
82ee72b054a4
+2010-05-10 Eric Botcazou <ebotcazou@adacore.com>
+
+ * exp_disp.adb (Make_Tags): Mark the imported view of dispatch tables
+ built for interfaces.
+ * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Use
+ imported_p instead of Is_Imported when considering constants.
+ Do not promote alignment of exported objects.
+ <E_Record_Subtype>: Strip all suffixes for dispatch table entities.
+
2010-05-08 Eric Botcazou <ebotcazou@adacore.com>
* exp_disp.adb (Make_Tags): Mark the imported view of dispatch tables.
DT : Node_Id := Empty;
DT_Ptr : Node_Id;
Predef_Prims_Ptr : Node_Id;
- Iface_DT : Node_Id;
+ Iface_DT : Node_Id := Empty;
Iface_DT_Ptr : Node_Id;
New_Node : Node_Id;
Suffix_Index : Int;
Set_Is_Dispatch_Table_Entity (Etype (DT));
end if;
+ if Present (Iface_DT) then
+ Set_Is_Dispatch_Table_Entity (Iface_DT);
+ Set_Is_Dispatch_Table_Entity (Etype (Iface_DT));
+ end if;
+
Set_Ekind (DT_Ptr, E_Constant);
Set_Is_Tag (DT_Ptr);
Set_Related_Type (DT_Ptr, Typ);
== N_Object_Declaration)
&& Present (Expression (Declaration_Node (gnat_entity))))
|| Present (Renamed_Object (gnat_entity))
- || Is_Imported (gnat_entity)));
+ || imported_p));
bool inner_const_flag = const_flag;
bool static_p = Is_Statically_Allocated (gnat_entity);
bool mutable_p = false;
&& kind != E_Out_Parameter
&& Is_Composite_Type (Etype (gnat_entity))
&& !Is_Constr_Subt_For_UN_Aliased (Etype (gnat_entity))
+ && !Is_Exported (gnat_entity)
&& !imported_p
&& No (Renamed_Object (gnat_entity))
&& No (Address_Clause (gnat_entity))))
if ((Treat_As_Volatile (gnat_entity)
|| (!const_flag
&& (Is_Exported (gnat_entity)
- || Is_Imported (gnat_entity)
+ || imported_p
|| Present (Address_Clause (gnat_entity)))))
&& !TYPE_VOLATILE (gnu_type))
gnu_type = build_qualified_type (gnu_type,
{
char *p;
Get_Encoded_Name (gnat_entity);
- p = strrchr (Name_Buffer, '_');
+ p = strchr (Name_Buffer, '_');
gcc_assert (p);
- strcpy (p+1, "dtS");
+ strcpy (p+2, "dtS");
gnu_entity_name = get_identifier (Name_Buffer);
}
+2010-05-10 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/lto7.adb: New test.
+ * gnat.dg/lto7_pkg.ad[sb]: New helper.
+
2010-05-10 Jason Merrill <jason@redhat.com>
PR c++/44017
--- /dev/null
+-- { dg-do run }
+-- { dg-options "-flto" { target lto } }
+
+with Lto7_Pkg; use Lto7_Pkg;
+
+procedure Lto7 is
+ view2 : access Iface_2'Class;
+ obj : aliased DT := (m_name => "Abdu");
+begin
+ view2 := Iface_2'Class(obj)'Access;
+ view2.all.op2;
+end;
--- /dev/null
+package body Lto7_Pkg is
+
+ procedure op1 (this : Root) is begin null; end;
+ procedure op2 (this : DT) is begin null; end;
+
+end Lto7_Pkg;
--- /dev/null
+package Lto7_Pkg is
+ type Iface_1 is interface;
+ procedure op1(this : Iface_1) is abstract;
+
+ type Iface_2 is interface;
+ procedure op2 (this : Iface_2) is abstract;
+
+ type Root is new Iface_1 with record
+ m_name : String(1..4);
+ end record;
+
+ procedure op1 (this : Root);
+
+ type DT is new Root and Iface_2 with null record;
+ procedure op2 (this : DT);
+end Lto7_Pkg;