diff options
author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-06-29 19:37:46 +0000 |
---|---|---|
committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-06-29 19:37:46 +0000 |
commit | 6a9f3fe9c5fc1ae2c12dfac96ec6eb6f792dd3bd (patch) | |
tree | 881865d1a095787053735ccc582c9c7752878c0a /gcc/dwarf2out.c | |
parent | e67b8324af5ff08a8c7567383d34b276d78e1ceb (diff) | |
download | gcc-6a9f3fe9c5fc1ae2c12dfac96ec6eb6f792dd3bd.tar.gz |
PR debug/44668
* dwarf2out.c (add_accessibility_attribute): New function.
(gen_subprogram_die, gen_variable_die, gen_field_die): Use it
instead of adding DW_AT_accessibility manually.
(gen_enumeration_type_die, gen_struct_or_union_type_die,
gen_typedef_die): Use it.
* g++.dg/debug/dwarf2/accessibility1.C: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@161563 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/dwarf2out.c')
-rw-r--r-- | gcc/dwarf2out.c | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 2dd8bccb41d..a72771df2f8 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -15771,6 +15771,17 @@ add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind, add_AT_loc_list (die, attr_kind, descr); } +/* Add DW_AT_accessibility attribute to DIE if needed. */ + +static void +add_accessibility_attribute (dw_die_ref die, tree decl) +{ + if (TREE_PROTECTED (decl)) + add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected); + else if (TREE_PRIVATE (decl)) + add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_private); +} + /* Attach the specialized form of location attribute used for data members of struct and union types. In the special case of a FIELD_DECL node which represents a bit-field, the "offset" part of this special location @@ -18075,7 +18086,10 @@ gen_enumeration_type_die (tree type, dw_die_ref context_die) TREE_ASM_WRITTEN (type) = 1; add_byte_size_attribute (type_die, type); if (TYPE_STUB_DECL (type) != NULL_TREE) - add_src_coords_attributes (type_die, TYPE_STUB_DECL (type)); + { + add_src_coords_attributes (type_die, TYPE_STUB_DECL (type)); + add_accessibility_attribute (type_die, TYPE_STUB_DECL (type)); + } /* If the first reference to this type was as the return type of an inline function, then it may not have a parent. Fix this now. */ @@ -18582,10 +18596,7 @@ gen_subprogram_die (tree decl, dw_die_ref context_die) if (DECL_ARTIFICIAL (decl)) add_AT_flag (subr_die, DW_AT_artificial, 1); - if (TREE_PROTECTED (decl)) - add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected); - else if (TREE_PRIVATE (decl)) - add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_private); + add_accessibility_attribute (subr_die, decl); } if (declaration) @@ -19083,10 +19094,7 @@ gen_variable_die (tree decl, tree origin, dw_die_ref context_die) if (DECL_ARTIFICIAL (decl)) add_AT_flag (var_die, DW_AT_artificial, 1); - if (TREE_PROTECTED (decl)) - add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected); - else if (TREE_PRIVATE (decl)) - add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private); + add_accessibility_attribute (var_die, decl); } if (declaration) @@ -19315,10 +19323,7 @@ gen_field_die (tree decl, dw_die_ref context_die) if (DECL_ARTIFICIAL (decl)) add_AT_flag (decl_die, DW_AT_artificial, 1); - if (TREE_PROTECTED (decl)) - add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected); - else if (TREE_PRIVATE (decl)) - add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private); + add_accessibility_attribute (decl_die, decl); /* Equate decl number to die, so that we can look up this decl later on. */ equate_decl_number_to_die (decl, decl_die); @@ -19592,7 +19597,10 @@ gen_struct_or_union_type_die (tree type, dw_die_ref context_die, TREE_ASM_WRITTEN (type) = 1; add_byte_size_attribute (type_die, type); if (TYPE_STUB_DECL (type) != NULL_TREE) - add_src_coords_attributes (type_die, TYPE_STUB_DECL (type)); + { + add_src_coords_attributes (type_die, TYPE_STUB_DECL (type)); + add_accessibility_attribute (type_die, TYPE_STUB_DECL (type)); + } /* If the first reference to this type was as the return type of an inline function, then it may not have a parent. Fix this now. */ @@ -19705,6 +19713,8 @@ gen_typedef_die (tree decl, dw_die_ref context_die) TYPE in argument yield the DW_TAG_typedef we have just created. */ equate_type_number_to_die (type, type_die); + + add_accessibility_attribute (type_die, decl); } if (DECL_ABSTRACT (decl)) |