summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2005-01-01 01:43:12 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2005-01-01 01:43:12 +0000
commit553acd9c35581da1fff1233a1fbe0788c362e842 (patch)
treeaf4745888545dece3278b75f28dd04b661c44e61
parent51a0525c68740a12d03f54dee4ccdd13ca1c6059 (diff)
downloadppe42-gcc-553acd9c35581da1fff1233a1fbe0788c362e842.tar.gz
ppe42-gcc-553acd9c35581da1fff1233a1fbe0788c362e842.zip
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@92781 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog13
-rw-r--r--gcc/c-decl.c1
-rw-r--r--gcc/cp/ChangeLog11
-rw-r--r--gcc/cp/call.c1
-rw-r--r--gcc/cp/class.c42
-rw-r--r--gcc/cp/decl2.c1
-rw-r--r--gcc/cp/init.c2
-rw-r--r--gcc/cp/rtti.c2
-rw-r--r--gcc/cp/tree.c1
-rw-r--r--gcc/dwarf2asm.c2
-rw-r--r--gcc/function.c6
-rw-r--r--gcc/gimplify.c1
-rw-r--r--gcc/tree-inline.c1
-rw-r--r--gcc/tree-outof-ssa.c1
-rw-r--r--gcc/var-tracking.c1
15 files changed, 62 insertions, 24 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 57c6b945df3..ebe2b7d7a29 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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>
PR target/19211
diff --git a/gcc/c-decl.c b/gcc/c-decl.c
index 975e281b5cf..2ff015ec7dc 100644
--- a/gcc/c-decl.c
+++ b/gcc/c-decl.c
@@ -3479,6 +3479,7 @@ build_compound_literal (tree type, tree init)
DECL_DEFER_OUTPUT (decl) = 1;
DECL_COMDAT (decl) = 1;
DECL_ARTIFICIAL (decl) = 1;
+ DECL_IGNORED_P (decl) = 1;
pushdecl (decl);
rest_of_decl_compilation (decl, 1, 0);
}
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index cad590d6afd..ccc975afa84 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -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>
* cp-tree.h (cp_declarator): Split "name" field into
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index f94526af85c..831d30b48a5 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -6373,6 +6373,7 @@ make_temporary_var_for_ref_to_temp (tree decl, tree type)
/* Create the variable. */
var = build_decl (VAR_DECL, NULL_TREE, type);
DECL_ARTIFICIAL (var) = 1;
+ DECL_IGNORED_P (var) = 1;
TREE_USED (var) = 1;
/* Register the variable. */
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index c7b0c687db6..597ec92e78f 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -659,28 +659,27 @@ build_vtable (tree class_type, tree name, tree vtable_type)
DECL_EXTERNAL (decl) = 1;
DECL_NOT_REALLY_EXTERN (decl) = 1;
- if (write_symbols == DWARF2_DEBUG)
- /* Mark the VAR_DECL node representing the vtable itself as a
- "gratuitous" one, thereby forcing dwarfout.c to ignore it. It
- is rather important that such things be ignored because any
- effort to actually generate DWARF for them will run into
- trouble when/if we encounter code like:
+ /* Mark the VAR_DECL node representing the vtable itself as a
+ "gratuitous" one, thereby forcing dwarfout.c to ignore it. It
+ is rather important that such things be ignored because any
+ effort to actually generate DWARF for them will run into
+ trouble when/if we encounter code like:
- #pragma interface
- struct S { virtual void member (); };
+ #pragma interface
+ struct S { virtual void member (); };
- because the artificial declaration of the vtable itself (as
- manufactured by the g++ front end) will say that the vtable is
- a static member of `S' but only *after* the debug output for
- the definition of `S' has already been output. This causes
- grief because the DWARF entry for the definition of the vtable
- will try to refer back to an earlier *declaration* of the
- vtable as a static member of `S' and there won't be one. We
- might be able to arrange to have the "vtable static member"
- attached to the member list for `S' before the debug info for
- `S' get written (which would solve the problem) but that would
- require more intrusive changes to the g++ front end. */
- DECL_IGNORED_P (decl) = 1;
+ because the artificial declaration of the vtable itself (as
+ manufactured by the g++ front end) will say that the vtable is
+ a static member of `S' but only *after* the debug output for
+ the definition of `S' has already been output. This causes
+ grief because the DWARF entry for the definition of the vtable
+ will try to refer back to an earlier *declaration* of the
+ vtable as a static member of `S' and there won't be one. We
+ might be able to arrange to have the "vtable static member"
+ attached to the member list for `S' before the debug info for
+ `S' get written (which would solve the problem) but that would
+ require more intrusive changes to the g++ front end. */
+ DECL_IGNORED_P (decl) = 1;
return decl;
}
@@ -3529,13 +3528,13 @@ build_base_field (record_layout_info rli, tree binfo,
/* Create the FIELD_DECL. */
decl = build_decl (FIELD_DECL, NULL_TREE, CLASSTYPE_AS_BASE (basetype));
DECL_ARTIFICIAL (decl) = 1;
+ DECL_IGNORED_P (decl) = 1;
DECL_FIELD_CONTEXT (decl) = t;
DECL_SIZE (decl) = CLASSTYPE_SIZE (basetype);
DECL_SIZE_UNIT (decl) = CLASSTYPE_SIZE_UNIT (basetype);
DECL_ALIGN (decl) = CLASSTYPE_ALIGN (basetype);
DECL_USER_ALIGN (decl) = CLASSTYPE_USER_ALIGN (basetype);
DECL_MODE (decl) = TYPE_MODE (basetype);
- DECL_IGNORED_P (decl) = 1;
DECL_FIELD_IS_BASE (decl) = 1;
/* 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_CONTEXT (padding_field) = t;
DECL_ARTIFICIAL (padding_field) = 1;
+ DECL_IGNORED_P (padding_field) = 1;
layout_nonempty_base_or_field (rli, padding_field,
NULL_TREE,
empty_base_offsets);
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index 0df5b25e117..9572a267a51 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -1998,6 +1998,7 @@ get_guard (tree decl)
DECL_WEAK (guard) = DECL_WEAK (decl);
DECL_ARTIFICIAL (guard) = 1;
+ DECL_IGNORED_P (guard) = 1;
TREE_USED (guard) = 1;
pushdecl_top_level_and_finish (guard, NULL_TREE);
}
diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index 2bff006d591..70a7802e6dd 100644
--- a/gcc/cp/init.c
+++ b/gcc/cp/init.c
@@ -2341,8 +2341,8 @@ create_temporary_var (tree type)
decl = build_decl (VAR_DECL, NULL_TREE, type);
TREE_USED (decl) = 1;
DECL_ARTIFICIAL (decl) = 1;
- DECL_SOURCE_LOCATION (decl) = input_location;
DECL_IGNORED_P (decl) = 1;
+ DECL_SOURCE_LOCATION (decl) = input_location;
DECL_CONTEXT (decl) = current_function_decl;
return decl;
diff --git a/gcc/cp/rtti.c b/gcc/cp/rtti.c
index 4740533a7b3..b683dad4d47 100644
--- a/gcc/cp/rtti.c
+++ b/gcc/cp/rtti.c
@@ -350,6 +350,7 @@ get_tinfo_decl (tree type)
TREE_TYPE (name) = type;
DECL_TINFO_P (d) = 1;
DECL_ARTIFICIAL (d) = 1;
+ DECL_IGNORED_P (d) = 1;
TREE_READONLY (d) = 1;
TREE_STATIC (d) = 1;
/* 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);
SET_DECL_ASSEMBLER_NAME (name_decl, name_name);
DECL_ARTIFICIAL (name_decl) = 1;
+ DECL_IGNORED_P (name_decl) = 1;
TREE_READONLY (name_decl) = 1;
TREE_STATIC (name_decl) = 1;
DECL_EXTERNAL (name_decl) = 0;
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index 2b6ef71b0fa..b9a7a250039 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -241,6 +241,7 @@ build_local_temp (tree type)
{
tree slot = build_decl (VAR_DECL, NULL_TREE, type);
DECL_ARTIFICIAL (slot) = 1;
+ DECL_IGNORED_P (slot) = 1;
DECL_CONTEXT (slot) = current_function_decl;
layout_decl (slot, 0);
return slot;
diff --git a/gcc/dwarf2asm.c b/gcc/dwarf2asm.c
index c963fbcdd1c..ae8af709ede 100644
--- a/gcc/dwarf2asm.c
+++ b/gcc/dwarf2asm.c
@@ -729,6 +729,7 @@ dw2_force_const_mem (rtx x)
id = get_identifier (ref_name);
decl = build_decl (VAR_DECL, id, ptr_type_node);
DECL_ARTIFICIAL (decl) = 1;
+ DECL_IGNORED_P (decl) = 1;
TREE_PUBLIC (decl) = 1;
DECL_INITIAL (decl) = decl;
make_decl_one_only (decl);
@@ -742,6 +743,7 @@ dw2_force_const_mem (rtx x)
id = get_identifier (label);
decl = build_decl (VAR_DECL, id, ptr_type_node);
DECL_ARTIFICIAL (decl) = 1;
+ DECL_IGNORED_P (decl) = 1;
TREE_STATIC (decl) = 1;
DECL_INITIAL (decl) = decl;
}
diff --git a/gcc/function.c b/gcc/function.c
index eb1e14e5d7e..e878dc13e1d 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -1922,8 +1922,9 @@ use_register_for_decl (tree decl)
if (flag_float_store && FLOAT_TYPE_P (TREE_TYPE (decl)))
return false;
- /* Compiler-generated temporaries can always go in registers. */
- if (DECL_ARTIFICIAL (decl))
+ /* If we're not interested in tracking debugging information for
+ this decl, then we can certainly put it in a register. */
+ if (DECL_IGNORED_P (decl))
return true;
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_ARG_TYPE (decl) = type;
DECL_ARTIFICIAL (decl) = 1;
+ DECL_IGNORED_P (decl) = 1;
TREE_CHAIN (decl) = fnargs;
fnargs = decl;
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index ca3759769b1..0c8cc95179b 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -293,6 +293,7 @@ create_artificial_label (void)
tree lab = build_decl (LABEL_DECL, NULL_TREE, void_type_node);
DECL_ARTIFICIAL (lab) = 1;
+ DECL_IGNORED_P (lab) = 1;
DECL_CONTEXT (lab) = current_function_decl;
return lab;
}
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index 3ba728b7a91..8f3e161d292 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -1569,6 +1569,7 @@ expand_call_inline (tree *tp, int *walk_subtrees, void *data)
to the RET_LABEL. */
id->ret_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
DECL_ARTIFICIAL (id->ret_label) = 1;
+ DECL_IGNORED_P (id->ret_label) = 1;
DECL_CONTEXT (id->ret_label) = VARRAY_TREE (id->fns, 0);
insert_decl_map (id, id->ret_label, id->ret_label);
diff --git a/gcc/tree-outof-ssa.c b/gcc/tree-outof-ssa.c
index ecd23ede219..7342a20523b 100644
--- a/gcc/tree-outof-ssa.c
+++ b/gcc/tree-outof-ssa.c
@@ -162,6 +162,7 @@ create_temp (tree t)
else if (!DECL_IGNORED_P (t))
DECL_DEBUG_ALIAS_OF (tmp) = t;
DECL_ARTIFICIAL (tmp) = DECL_ARTIFICIAL (t);
+ DECL_IGNORED_P (tmp) = DECL_IGNORED_P (t);
add_referenced_tmp_var (tmp);
/* add_referenced_tmp_var will create the annotation and set up some
diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c
index ef9f9dcc5d6..f1f36614509 100644
--- a/gcc/var-tracking.c
+++ b/gcc/var-tracking.c
@@ -2705,6 +2705,7 @@ vt_initialize (void)
DECL_NAME (frame_base_decl) = get_identifier ("___frame_base_decl");
TREE_TYPE (frame_base_decl) = char_type_node;
DECL_ARTIFICIAL (frame_base_decl) = 1;
+ DECL_IGNORED_P (frame_base_decl) = 1;
/* Set its initial "location". */
frame_stack_adjust = -prologue_stack_adjust ();
OpenPOWER on IntegriCloud