(parent_name_id): New macro.
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Record_Type>: Use it.
* gcc-interface/trans.c (gigi): Initialize it.
(lvalue_required_p) <N_Type_Conversion>: New case.
<N_Qualified_Expression>: Likewise.
<N_Allocator>: Likewise.
* gcc-interface/utils.c (convert): Try to properly upcast tagged types.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@158255
138bc75d-0d04-0410-961f-
82ee72b054a4
2010-04-13 Eric Botcazou <ebotcazou@adacore.com>
+ * gcc-interface/gigi.h (standard_datatypes): Add ADT_parent_name_id.
+ (parent_name_id): New macro.
+ * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Record_Type>: Use it.
+ * gcc-interface/trans.c (gigi): Initialize it.
+ (lvalue_required_p) <N_Type_Conversion>: New case.
+ <N_Qualified_Expression>: Likewise.
+ <N_Allocator>: Likewise.
+ * gcc-interface/utils.c (convert): Try to properly upcast tagged types.
+
+2010-04-13 Eric Botcazou <ebotcazou@adacore.com>
+
* gcc-interface/ada-tree.h (TYPE_BY_REFERENCE_P): Delete.
(DECL_CONST_ADDRESS_P): New macro.
(SET_DECL_ORIGINAL_FIELD_TO_FIELD): Likewise.
/* ...and reference the _Parent field of this record. */
gnu_field
= create_field_decl (parent_name_id,
- gnu_parent, gnu_type,
+ gnu_parent, gnu_type, 0,
has_rep
? TYPE_SIZE (gnu_parent) : NULL_TREE,
has_rep
/* Identifier for the name of the _Parent field in tagged record types. */
ADT_parent_name_id,
- /* Identifier for the name of the Exception_Data type. */
- ADT_exception_data_name_id,
-
/* Types and decls used by our temporary exception mechanism. See
init_gigi_decls for details. */
ADT_jmpbuf_type,
#define free_decl gnat_std_decls[(int) ADT_free_decl]
#define mulv64_decl gnat_std_decls[(int) ADT_mulv64_decl]
#define parent_name_id gnat_std_decls[(int) ADT_parent_name_id]
-#define exception_data_name_id gnat_std_decls[(int) ADT_exception_data_name_id]
#define jmpbuf_type gnat_std_decls[(int) ADT_jmpbuf_type]
#define jmpbuf_ptr_type gnat_std_decls[(int) ADT_jmpbuf_ptr_type]
#define get_jmpbuf_decl gnat_std_decls[(int) ADT_get_jmpbuf_decl]
/* Name of the _Parent field in tagged record types. */
parent_name_id = get_identifier (Get_Name_String (Name_uParent));
- /* Name of the Exception_Data type defined in System.Standard_Library. */
- exception_data_name_id
- = get_identifier ("system__standard_library__exception_data");
-
/* Make the types and functions used for exception processing. */
jmpbuf_type
= build_array_type (gnat_type_for_mode (Pmode, 0),
/* ... fall through ... */
case N_Unchecked_Type_Conversion:
- /* Returning 0 is very likely correct but we get better code if we
- go through the conversion. */
return lvalue_required_p (gnat_parent,
get_unpadded_type (Etype (gnat_parent)),
constant, address_of_constant, aliased);
+ case N_Allocator:
+ /* We should only reach here through the N_Qualified_Expression case
+ and, therefore, only for composite types. Force an lvalue since
+ a block-copy to the newly allocated area of memory is made. */
+ return 1;
+
case N_Explicit_Dereference:
/* We look through dereferences for address of constant because we need
to handle the special cases listed above. */
+2010-04-13 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/derived_type1.adb: New test.
+
2010-04-13 Matthias Klose <doko@ubuntu.com>
* gcc.dg/plugindir1.c: New testcase.