re PR ada/34098 (xgcc: Internal error: Segmentation fault (program gnat1))
PR ada/34098 ada/ * misc.c (gnat_adjust_rli): Delete. (gnat_init): Do not initialize the translation code here. Do not call set_lang_adjust_rli. * trans.c (init_code_table): Make static. (gnat_init_stmt_group): Delete. (gigi): Initialize the translation code entirely here. Emit debug info for the common types here instead of... * utils.c (gnat_init_decl_processing): ...here. * gigi.h (init_code_table): Delete. (gnat_init_stmt_group): Likewise. * stor-layout.c (lang_adjust_rli): Delete. (set_lang_adjust_rli): Likewise. (layout_type): Do not call lang_adjust_rli hook. * tree.h (set_lang_adjust_rli): Delete. From-SVN: r130294
This commit is contained in:
parent
921d313fd5
commit
7634135aec
@ -1,3 +1,17 @@
|
||||
2007-11-19 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
PR ada/34098
|
||||
* misc.c (gnat_adjust_rli): Delete.
|
||||
(gnat_init): Do not initialize the translation code here.
|
||||
Do not call set_lang_adjust_rli.
|
||||
* trans.c (init_code_table): Make static.
|
||||
(gnat_init_stmt_group): Delete.
|
||||
(gigi): Initialize the translation code entirely here.
|
||||
Emit debug info for the common types here instead of...
|
||||
* utils.c (gnat_init_decl_processing): ...here.
|
||||
* gigi.h (init_code_table): Delete.
|
||||
(gnat_init_stmt_group): Likewise.
|
||||
|
||||
2007-11-16 Olivier Hainque <hainque@adacore.com>
|
||||
|
||||
* utils2.c (build_call_alloc_dealloc) <if gnu_obj>: Move the code
|
||||
|
@ -271,10 +271,6 @@ extern void post_error_ne_tree_2 (const char *msg, Node_Id node, Entity_Id ent,
|
||||
/* Protect EXP from multiple evaluation. This may make a SAVE_EXPR. */
|
||||
extern tree protect_multiple_eval (tree exp);
|
||||
|
||||
/* Initialize the table that maps GNAT codes to GCC codes for simple
|
||||
binary and unary operations. */
|
||||
extern void init_code_table (void);
|
||||
|
||||
/* Return a label to branch to for the exception type in KIND or NULL_TREE
|
||||
if none. */
|
||||
extern tree get_exception_label (char);
|
||||
@ -455,7 +451,6 @@ extern void insert_block (tree block);
|
||||
and uses GNAT_NODE for location information. */
|
||||
extern void gnat_pushdecl (tree decl, Node_Id gnat_node);
|
||||
|
||||
extern void gnat_init_stmt_group (void);
|
||||
extern void gnat_init_decl_processing (void);
|
||||
extern void init_gigi_decls (tree long_long_float_type, tree exception_type);
|
||||
extern void gnat_init_gcc_eh (void);
|
||||
|
@ -101,7 +101,6 @@ static void gnat_parse_file (int);
|
||||
static rtx gnat_expand_expr (tree, rtx, enum machine_mode, int,
|
||||
rtx *);
|
||||
static void internal_error_function (const char *, va_list *);
|
||||
static void gnat_adjust_rli (record_layout_info);
|
||||
static tree gnat_type_max_size (const_tree);
|
||||
|
||||
/* Definitions for our language-specific hooks. */
|
||||
@ -433,9 +432,6 @@ internal_error_function (const char *msgid, va_list *ap)
|
||||
static bool
|
||||
gnat_init (void)
|
||||
{
|
||||
/* Initialize translations and the outer statement group. */
|
||||
gnat_init_stmt_group ();
|
||||
|
||||
/* Performs whatever initialization steps needed by the language-dependent
|
||||
lexical analyzer. */
|
||||
gnat_init_decl_processing ();
|
||||
@ -450,8 +446,6 @@ gnat_init (void)
|
||||
/* Show that REFERENCE_TYPEs are internal and should be Pmode. */
|
||||
internal_reference_types ();
|
||||
|
||||
set_lang_adjust_rli (gnat_adjust_rli);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -675,35 +669,6 @@ gnat_expand_expr (tree exp, rtx target, enum machine_mode tmode,
|
||||
return expand_expr_real (new, target, tmode, modifier, alt_rtl);
|
||||
}
|
||||
|
||||
/* Adjusts the RLI used to layout a record after all the fields have been
|
||||
added. We only handle the packed case and cause it to use the alignment
|
||||
that will pad the record at the end. */
|
||||
|
||||
static void
|
||||
gnat_adjust_rli (record_layout_info rli ATTRIBUTE_UNUSED)
|
||||
{
|
||||
#if 0
|
||||
/* ??? This code seems to have no actual effect; record_align should already
|
||||
reflect the largest alignment desired by a field. jason 2003-04-01 */
|
||||
unsigned int record_align = rli->unpadded_align;
|
||||
tree field;
|
||||
|
||||
/* If an alignment has been specified, don't use anything larger unless we
|
||||
have to. */
|
||||
if (TYPE_ALIGN (rli->t) != 0 && TYPE_ALIGN (rli->t) < record_align)
|
||||
record_align = MAX (rli->record_align, TYPE_ALIGN (rli->t));
|
||||
|
||||
/* If any fields have variable size, we need to force the record to be at
|
||||
least as aligned as the alignment of that type. */
|
||||
for (field = TYPE_FIELDS (rli->t); field; field = TREE_CHAIN (field))
|
||||
if (TREE_CODE (DECL_SIZE_UNIT (field)) != INTEGER_CST)
|
||||
record_align = MAX (record_align, DECL_ALIGN (field));
|
||||
|
||||
if (TYPE_PACKED (rli->t))
|
||||
rli->record_align = record_align;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Do nothing (return the tree node passed). */
|
||||
|
||||
static tree
|
||||
|
@ -181,6 +181,7 @@ static enum tree_code gnu_codes[Number_Node_Kinds];
|
||||
/* Current node being treated, in case abort called. */
|
||||
Node_Id error_gnat_node;
|
||||
|
||||
static void init_code_table (void);
|
||||
static void Compilation_Unit_to_gnu (Node_Id);
|
||||
static void record_code_position (Node_Id);
|
||||
static void insert_code_for (Node_Id);
|
||||
@ -269,6 +270,8 @@ gigi (Node_Id gnat_root, int max_gnat_node, int number_name,
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Initialize ourselves. */
|
||||
init_code_table ();
|
||||
init_gnat_to_gnu ();
|
||||
gnat_compute_largest_alignment ();
|
||||
init_dummy_type ();
|
||||
@ -281,6 +284,20 @@ gigi (Node_Id gnat_root, int max_gnat_node, int number_name,
|
||||
TYPE_SIZE_UNIT (void_type_node) = size_zero_node;
|
||||
}
|
||||
|
||||
/* Enable GNAT stack checking method if needed */
|
||||
if (!Stack_Check_Probes_On_Target)
|
||||
set_stack_check_libfunc (gen_rtx_SYMBOL_REF (Pmode, "_gnat_stack_check"));
|
||||
|
||||
/* Give names and make TYPE_DECLs for common types. */
|
||||
create_type_decl (get_identifier (SIZE_TYPE), sizetype,
|
||||
NULL, false, true, Empty);
|
||||
create_type_decl (get_identifier ("integer"), integer_type_node,
|
||||
NULL, false, true, Empty);
|
||||
create_type_decl (get_identifier ("unsigned char"), char_type_node,
|
||||
NULL, false, true, Empty);
|
||||
create_type_decl (get_identifier ("long integer"), long_integer_type_node,
|
||||
NULL, false, true, Empty);
|
||||
|
||||
/* Save the type we made for integer as the type for Standard.Integer.
|
||||
Then make the rest of the standard types. Note that some of these
|
||||
may be subtypes. */
|
||||
@ -313,6 +330,7 @@ gigi (Node_Id gnat_root, int max_gnat_node, int number_name,
|
||||
gnat_init_gcc_eh ();
|
||||
|
||||
gcc_assert (Nkind (gnat_root) == N_Compilation_Unit);
|
||||
start_stmt_group ();
|
||||
Compilation_Unit_to_gnu (gnat_root);
|
||||
|
||||
/* Now see if we have any elaboration procedures to deal with. */
|
||||
@ -361,20 +379,6 @@ gigi (Node_Id gnat_root, int max_gnat_node, int number_name,
|
||||
error_gnat_node = Empty;
|
||||
}
|
||||
|
||||
/* Perform initializations for this module. */
|
||||
|
||||
void
|
||||
gnat_init_stmt_group (void)
|
||||
{
|
||||
/* Initialize ourselves. */
|
||||
init_code_table ();
|
||||
start_stmt_group ();
|
||||
|
||||
/* Enable GNAT stack checking method if needed */
|
||||
if (!Stack_Check_Probes_On_Target)
|
||||
set_stack_check_libfunc (gen_rtx_SYMBOL_REF (Pmode, "_gnat_stack_check"));
|
||||
}
|
||||
|
||||
/* Returns a positive value if GNAT_NODE requires an lvalue for an
|
||||
operand of OPERAND_TYPE, whose aliasing is specified by ALIASED,
|
||||
zero otherwise. This is int instead of bool to facilitate usage
|
||||
@ -6763,7 +6767,7 @@ post_error_ne_tree_2 (const char *msg,
|
||||
/* Initialize the table that maps GNAT codes to GCC codes for simple
|
||||
binary and unary operations. */
|
||||
|
||||
void
|
||||
static void
|
||||
init_code_table (void)
|
||||
{
|
||||
gnu_codes[N_And_Then] = TRUTH_ANDIF_EXPR;
|
||||
|
@ -495,16 +495,6 @@ gnat_init_decl_processing (void)
|
||||
set_sizetype (size_type_node);
|
||||
build_common_tree_nodes_2 (0);
|
||||
|
||||
/* Give names and make TYPE_DECLs for common types. */
|
||||
create_type_decl (get_identifier (SIZE_TYPE), sizetype,
|
||||
NULL, false, true, Empty);
|
||||
create_type_decl (get_identifier ("integer"), integer_type_node,
|
||||
NULL, false, true, Empty);
|
||||
create_type_decl (get_identifier ("unsigned char"), char_type_node,
|
||||
NULL, false, true, Empty);
|
||||
create_type_decl (get_identifier ("long integer"), long_integer_type_node,
|
||||
NULL, false, true, Empty);
|
||||
|
||||
ptr_void_type_node = build_pointer_type (void_type_node);
|
||||
|
||||
gnat_install_builtins ();
|
||||
|
@ -496,17 +496,6 @@ relayout_decl (tree decl)
|
||||
layout_decl (decl, 0);
|
||||
}
|
||||
|
||||
/* Hook for a front-end function that can modify the record layout as needed
|
||||
immediately before it is finalized. */
|
||||
|
||||
static void (*lang_adjust_rli) (record_layout_info) = 0;
|
||||
|
||||
void
|
||||
set_lang_adjust_rli (void (*f) (record_layout_info))
|
||||
{
|
||||
lang_adjust_rli = f;
|
||||
}
|
||||
|
||||
/* Begin laying out type T, which may be a RECORD_TYPE, UNION_TYPE, or
|
||||
QUAL_UNION_TYPE. Return a pointer to a struct record_layout_info which
|
||||
is to be passed to all other layout functions for this record. It is the
|
||||
@ -1866,9 +1855,6 @@ layout_type (tree type)
|
||||
if (TREE_CODE (type) == QUAL_UNION_TYPE)
|
||||
TYPE_FIELDS (type) = nreverse (TYPE_FIELDS (type));
|
||||
|
||||
if (lang_adjust_rli)
|
||||
(*lang_adjust_rli) (rli);
|
||||
|
||||
/* Finish laying out the record. */
|
||||
finish_record_layout (rli, /*free_p=*/true);
|
||||
}
|
||||
|
@ -4274,7 +4274,6 @@ typedef struct record_layout_info_s
|
||||
int packed_maybe_necessary;
|
||||
} *record_layout_info;
|
||||
|
||||
extern void set_lang_adjust_rli (void (*) (record_layout_info));
|
||||
extern record_layout_info start_record_layout (tree);
|
||||
extern tree bit_from_pos (tree, tree);
|
||||
extern tree byte_from_pos (tree, tree);
|
||||
|
Loading…
x
Reference in New Issue
Block a user