re PR middle-end/17799 (Non-optimizing compile loses 'this')

PR middle-end/17799
        * function.c (use_register_for_decl): Check DECL_IGNORED_P instead
        of DECL_ARTIFICIAL.
        (assign_parms_augmented_arg_list): Set DECL_IGNORED_P.
        * c-decl.c (build_compound_literal): Likewise.
        * dwarf2asm.c (dw2_force_const_mem): Likewise.
        * gimplify.c (create_artificial_label): Likewise.
        * tree-inline.c (expand_call_inline): Likewise.
        * var-tracking.c (vt_initialize): Likewise.
        * tree-outof-ssa.c (create_temp): Copy DECL_IGNORED_P.
cp/
        * call.c (make_temporary_var_for_ref_to_temp): Set DECL_IGNORED_P.
        * class.c (build_vtable): Don't conditionallize setting it
        based on DWARF2_DEBUG.
        (layout_class_type): Set DECL_IGNORED_P.
        * decl2.c (get_guard): Likewise.
        * rtti.c (get_tinfo_decl, build_lang_decl): Likewise.
        * tree.c (build_local_temp): Likewise.

From-SVN: r92781
This commit is contained in:
Richard Henderson 2004-12-31 17:43:12 -08:00 committed by Richard Henderson
parent 8bcccf30f1
commit 78e0d62b95
15 changed files with 62 additions and 24 deletions

View File

@ -1,3 +1,16 @@
2004-12-31 Richard Henderson <rth@redhat.com>
PR middle-end/17799
* function.c (use_register_for_decl): Check DECL_IGNORED_P instead
of DECL_ARTIFICIAL.
(assign_parms_augmented_arg_list): Set DECL_IGNORED_P.
* c-decl.c (build_compound_literal): Likewise.
* dwarf2asm.c (dw2_force_const_mem): Likewise.
* gimplify.c (create_artificial_label): Likewise.
* tree-inline.c (expand_call_inline): Likewise.
* var-tracking.c (vt_initialize): Likewise.
* tree-outof-ssa.c (create_temp): Copy DECL_IGNORED_P.
2004-12-31 Andrew Pinski <pinskia@physics.uc.edu> 2004-12-31 Andrew Pinski <pinskia@physics.uc.edu>
PR target/19211 PR target/19211

View File

@ -3479,6 +3479,7 @@ build_compound_literal (tree type, tree init)
DECL_DEFER_OUTPUT (decl) = 1; DECL_DEFER_OUTPUT (decl) = 1;
DECL_COMDAT (decl) = 1; DECL_COMDAT (decl) = 1;
DECL_ARTIFICIAL (decl) = 1; DECL_ARTIFICIAL (decl) = 1;
DECL_IGNORED_P (decl) = 1;
pushdecl (decl); pushdecl (decl);
rest_of_decl_compilation (decl, 1, 0); rest_of_decl_compilation (decl, 1, 0);
} }

View File

@ -1,3 +1,14 @@
2004-12-31 Richard Henderson <rth@redhat.com>
PR middle-end/17799
* call.c (make_temporary_var_for_ref_to_temp): Set DECL_IGNORED_P.
* class.c (build_vtable): Don't conditionallize setting it
based on DWARF2_DEBUG.
(layout_class_type): Set DECL_IGNORED_P.
* decl2.c (get_guard): Likewise.
* rtti.c (get_tinfo_decl, build_lang_decl): Likewise.
* tree.c (build_local_temp): Likewise.
2004-12-30 Mark Mitchell <mark@codesourcery.com> 2004-12-30 Mark Mitchell <mark@codesourcery.com>
* cp-tree.h (cp_declarator): Split "name" field into * cp-tree.h (cp_declarator): Split "name" field into

View File

@ -6373,6 +6373,7 @@ make_temporary_var_for_ref_to_temp (tree decl, tree type)
/* Create the variable. */ /* Create the variable. */
var = build_decl (VAR_DECL, NULL_TREE, type); var = build_decl (VAR_DECL, NULL_TREE, type);
DECL_ARTIFICIAL (var) = 1; DECL_ARTIFICIAL (var) = 1;
DECL_IGNORED_P (var) = 1;
TREE_USED (var) = 1; TREE_USED (var) = 1;
/* Register the variable. */ /* Register the variable. */

View File

@ -659,7 +659,6 @@ build_vtable (tree class_type, tree name, tree vtable_type)
DECL_EXTERNAL (decl) = 1; DECL_EXTERNAL (decl) = 1;
DECL_NOT_REALLY_EXTERN (decl) = 1; DECL_NOT_REALLY_EXTERN (decl) = 1;
if (write_symbols == DWARF2_DEBUG)
/* Mark the VAR_DECL node representing the vtable itself as a /* Mark the VAR_DECL node representing the vtable itself as a
"gratuitous" one, thereby forcing dwarfout.c to ignore it. It "gratuitous" one, thereby forcing dwarfout.c to ignore it. It
is rather important that such things be ignored because any is rather important that such things be ignored because any
@ -3529,13 +3528,13 @@ build_base_field (record_layout_info rli, tree binfo,
/* Create the FIELD_DECL. */ /* Create the FIELD_DECL. */
decl = build_decl (FIELD_DECL, NULL_TREE, CLASSTYPE_AS_BASE (basetype)); decl = build_decl (FIELD_DECL, NULL_TREE, CLASSTYPE_AS_BASE (basetype));
DECL_ARTIFICIAL (decl) = 1; DECL_ARTIFICIAL (decl) = 1;
DECL_IGNORED_P (decl) = 1;
DECL_FIELD_CONTEXT (decl) = t; DECL_FIELD_CONTEXT (decl) = t;
DECL_SIZE (decl) = CLASSTYPE_SIZE (basetype); DECL_SIZE (decl) = CLASSTYPE_SIZE (basetype);
DECL_SIZE_UNIT (decl) = CLASSTYPE_SIZE_UNIT (basetype); DECL_SIZE_UNIT (decl) = CLASSTYPE_SIZE_UNIT (basetype);
DECL_ALIGN (decl) = CLASSTYPE_ALIGN (basetype); DECL_ALIGN (decl) = CLASSTYPE_ALIGN (basetype);
DECL_USER_ALIGN (decl) = CLASSTYPE_USER_ALIGN (basetype); DECL_USER_ALIGN (decl) = CLASSTYPE_USER_ALIGN (basetype);
DECL_MODE (decl) = TYPE_MODE (basetype); DECL_MODE (decl) = TYPE_MODE (basetype);
DECL_IGNORED_P (decl) = 1;
DECL_FIELD_IS_BASE (decl) = 1; DECL_FIELD_IS_BASE (decl) = 1;
/* Try to place the field. It may take more than one try if we /* Try to place the field. It may take more than one try if we
@ -4697,6 +4696,7 @@ layout_class_type (tree t, tree *virtuals_p)
DECL_SIZE (padding_field) = padding; DECL_SIZE (padding_field) = padding;
DECL_CONTEXT (padding_field) = t; DECL_CONTEXT (padding_field) = t;
DECL_ARTIFICIAL (padding_field) = 1; DECL_ARTIFICIAL (padding_field) = 1;
DECL_IGNORED_P (padding_field) = 1;
layout_nonempty_base_or_field (rli, padding_field, layout_nonempty_base_or_field (rli, padding_field,
NULL_TREE, NULL_TREE,
empty_base_offsets); empty_base_offsets);

View File

@ -1998,6 +1998,7 @@ get_guard (tree decl)
DECL_WEAK (guard) = DECL_WEAK (decl); DECL_WEAK (guard) = DECL_WEAK (decl);
DECL_ARTIFICIAL (guard) = 1; DECL_ARTIFICIAL (guard) = 1;
DECL_IGNORED_P (guard) = 1;
TREE_USED (guard) = 1; TREE_USED (guard) = 1;
pushdecl_top_level_and_finish (guard, NULL_TREE); pushdecl_top_level_and_finish (guard, NULL_TREE);
} }

View File

@ -2341,8 +2341,8 @@ create_temporary_var (tree type)
decl = build_decl (VAR_DECL, NULL_TREE, type); decl = build_decl (VAR_DECL, NULL_TREE, type);
TREE_USED (decl) = 1; TREE_USED (decl) = 1;
DECL_ARTIFICIAL (decl) = 1; DECL_ARTIFICIAL (decl) = 1;
DECL_SOURCE_LOCATION (decl) = input_location;
DECL_IGNORED_P (decl) = 1; DECL_IGNORED_P (decl) = 1;
DECL_SOURCE_LOCATION (decl) = input_location;
DECL_CONTEXT (decl) = current_function_decl; DECL_CONTEXT (decl) = current_function_decl;
return decl; return decl;

View File

@ -350,6 +350,7 @@ get_tinfo_decl (tree type)
TREE_TYPE (name) = type; TREE_TYPE (name) = type;
DECL_TINFO_P (d) = 1; DECL_TINFO_P (d) = 1;
DECL_ARTIFICIAL (d) = 1; DECL_ARTIFICIAL (d) = 1;
DECL_IGNORED_P (d) = 1;
TREE_READONLY (d) = 1; TREE_READONLY (d) = 1;
TREE_STATIC (d) = 1; TREE_STATIC (d) = 1;
/* Mark the variable as undefined -- but remember that we can /* Mark the variable as undefined -- but remember that we can
@ -778,6 +779,7 @@ tinfo_base_init (tree desc, tree target)
name_decl = build_lang_decl (VAR_DECL, name_name, name_type); name_decl = build_lang_decl (VAR_DECL, name_name, name_type);
SET_DECL_ASSEMBLER_NAME (name_decl, name_name); SET_DECL_ASSEMBLER_NAME (name_decl, name_name);
DECL_ARTIFICIAL (name_decl) = 1; DECL_ARTIFICIAL (name_decl) = 1;
DECL_IGNORED_P (name_decl) = 1;
TREE_READONLY (name_decl) = 1; TREE_READONLY (name_decl) = 1;
TREE_STATIC (name_decl) = 1; TREE_STATIC (name_decl) = 1;
DECL_EXTERNAL (name_decl) = 0; DECL_EXTERNAL (name_decl) = 0;

View File

@ -241,6 +241,7 @@ build_local_temp (tree type)
{ {
tree slot = build_decl (VAR_DECL, NULL_TREE, type); tree slot = build_decl (VAR_DECL, NULL_TREE, type);
DECL_ARTIFICIAL (slot) = 1; DECL_ARTIFICIAL (slot) = 1;
DECL_IGNORED_P (slot) = 1;
DECL_CONTEXT (slot) = current_function_decl; DECL_CONTEXT (slot) = current_function_decl;
layout_decl (slot, 0); layout_decl (slot, 0);
return slot; return slot;

View File

@ -729,6 +729,7 @@ dw2_force_const_mem (rtx x)
id = get_identifier (ref_name); id = get_identifier (ref_name);
decl = build_decl (VAR_DECL, id, ptr_type_node); decl = build_decl (VAR_DECL, id, ptr_type_node);
DECL_ARTIFICIAL (decl) = 1; DECL_ARTIFICIAL (decl) = 1;
DECL_IGNORED_P (decl) = 1;
TREE_PUBLIC (decl) = 1; TREE_PUBLIC (decl) = 1;
DECL_INITIAL (decl) = decl; DECL_INITIAL (decl) = decl;
make_decl_one_only (decl); make_decl_one_only (decl);
@ -742,6 +743,7 @@ dw2_force_const_mem (rtx x)
id = get_identifier (label); id = get_identifier (label);
decl = build_decl (VAR_DECL, id, ptr_type_node); decl = build_decl (VAR_DECL, id, ptr_type_node);
DECL_ARTIFICIAL (decl) = 1; DECL_ARTIFICIAL (decl) = 1;
DECL_IGNORED_P (decl) = 1;
TREE_STATIC (decl) = 1; TREE_STATIC (decl) = 1;
DECL_INITIAL (decl) = decl; DECL_INITIAL (decl) = decl;
} }

View File

@ -1922,8 +1922,9 @@ use_register_for_decl (tree decl)
if (flag_float_store && FLOAT_TYPE_P (TREE_TYPE (decl))) if (flag_float_store && FLOAT_TYPE_P (TREE_TYPE (decl)))
return false; return false;
/* Compiler-generated temporaries can always go in registers. */ /* If we're not interested in tracking debugging information for
if (DECL_ARTIFICIAL (decl)) this decl, then we can certainly put it in a register. */
if (DECL_IGNORED_P (decl))
return true; return true;
return (optimize || DECL_REGISTER (decl)); return (optimize || DECL_REGISTER (decl));
@ -2105,6 +2106,7 @@ assign_parms_augmented_arg_list (struct assign_parm_data_all *all)
decl = build_decl (PARM_DECL, NULL_TREE, type); decl = build_decl (PARM_DECL, NULL_TREE, type);
DECL_ARG_TYPE (decl) = type; DECL_ARG_TYPE (decl) = type;
DECL_ARTIFICIAL (decl) = 1; DECL_ARTIFICIAL (decl) = 1;
DECL_IGNORED_P (decl) = 1;
TREE_CHAIN (decl) = fnargs; TREE_CHAIN (decl) = fnargs;
fnargs = decl; fnargs = decl;

View File

@ -293,6 +293,7 @@ create_artificial_label (void)
tree lab = build_decl (LABEL_DECL, NULL_TREE, void_type_node); tree lab = build_decl (LABEL_DECL, NULL_TREE, void_type_node);
DECL_ARTIFICIAL (lab) = 1; DECL_ARTIFICIAL (lab) = 1;
DECL_IGNORED_P (lab) = 1;
DECL_CONTEXT (lab) = current_function_decl; DECL_CONTEXT (lab) = current_function_decl;
return lab; return lab;
} }

View File

@ -1569,6 +1569,7 @@ expand_call_inline (tree *tp, int *walk_subtrees, void *data)
to the RET_LABEL. */ to the RET_LABEL. */
id->ret_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE); id->ret_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
DECL_ARTIFICIAL (id->ret_label) = 1; DECL_ARTIFICIAL (id->ret_label) = 1;
DECL_IGNORED_P (id->ret_label) = 1;
DECL_CONTEXT (id->ret_label) = VARRAY_TREE (id->fns, 0); DECL_CONTEXT (id->ret_label) = VARRAY_TREE (id->fns, 0);
insert_decl_map (id, id->ret_label, id->ret_label); insert_decl_map (id, id->ret_label, id->ret_label);

View File

@ -162,6 +162,7 @@ create_temp (tree t)
else if (!DECL_IGNORED_P (t)) else if (!DECL_IGNORED_P (t))
DECL_DEBUG_ALIAS_OF (tmp) = t; DECL_DEBUG_ALIAS_OF (tmp) = t;
DECL_ARTIFICIAL (tmp) = DECL_ARTIFICIAL (t); DECL_ARTIFICIAL (tmp) = DECL_ARTIFICIAL (t);
DECL_IGNORED_P (tmp) = DECL_IGNORED_P (t);
add_referenced_tmp_var (tmp); add_referenced_tmp_var (tmp);
/* add_referenced_tmp_var will create the annotation and set up some /* add_referenced_tmp_var will create the annotation and set up some

View File

@ -2705,6 +2705,7 @@ vt_initialize (void)
DECL_NAME (frame_base_decl) = get_identifier ("___frame_base_decl"); DECL_NAME (frame_base_decl) = get_identifier ("___frame_base_decl");
TREE_TYPE (frame_base_decl) = char_type_node; TREE_TYPE (frame_base_decl) = char_type_node;
DECL_ARTIFICIAL (frame_base_decl) = 1; DECL_ARTIFICIAL (frame_base_decl) = 1;
DECL_IGNORED_P (frame_base_decl) = 1;
/* Set its initial "location". */ /* Set its initial "location". */
frame_stack_adjust = -prologue_stack_adjust (); frame_stack_adjust = -prologue_stack_adjust ();