diff options
author | Richard Henderson <rth@redhat.com> | 2004-12-31 17:43:12 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2004-12-31 17:43:12 -0800 |
commit | 78e0d62b95e1706a1243f3067da2e487c2d4a7e9 (patch) | |
tree | af4745888545dece3278b75f28dd04b661c44e61 /gcc/cp | |
parent | 8bcccf30f11402a06d0a9abda915f97c0798ef4f (diff) | |
download | gcc-78e0d62b95e1706a1243f3067da2e487c2d4a7e9.zip gcc-78e0d62b95e1706a1243f3067da2e487c2d4a7e9.tar.gz gcc-78e0d62b95e1706a1243f3067da2e487c2d4a7e9.tar.bz2 |
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
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/cp/call.c | 1 | ||||
-rw-r--r-- | gcc/cp/class.c | 42 | ||||
-rw-r--r-- | gcc/cp/decl2.c | 1 | ||||
-rw-r--r-- | gcc/cp/init.c | 2 | ||||
-rw-r--r-- | gcc/cp/rtti.c | 2 | ||||
-rw-r--r-- | gcc/cp/tree.c | 1 |
7 files changed, 38 insertions, 22 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index cad590d..ccc975a 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 f94526a..831d30b 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 c7b0c68..597ec92 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 0df5b25..9572a26 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 2bff006..70a7802 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 4740533..b683dad 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 2b6ef71..b9a7a25 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; |