Re: [PR63238] output alignment debug information
>> This is OK so far, but the DW_AT_alignment attribute also needs to be >> added to the checksum computation in die_checksum and >> die_checksum_ordered. > > Thanks. I see what to do in die_checksum_ordered, but die_checksum? It > seems to handle attributes by value class, and AFAICT the classes that > DW_AT_alignment could use are already covered. What am I missing? > > Here's a patch I'm about to start testing. Does it look ok? Sorry, I read this while I wasn't in a position to reply, then totally forgot about it. Yes, you're right about die_checksum, sorry. And, for the record, it looks OK. -cary
Re: [PR63238] output alignment debug information
On Fri, Jan 27, 2017 at 04:24:58AM -0200, Alexandre Oliva wrote: > Output DWARFv5+ DW_AT_alignment for non-default alignment of > variables, fields and types. The new tests all fail on targets that default to -gstrict-dwarf because they have buggy or prehistoric linkers/debug info consumers like Darwin. Fixed thusly, tested on x86_64-linux vanilla and with common.opt hack to turn -gstrict-dwarf and -fno-merge-debug-strings by default, committed to trunk as obvious: 2017-02-01 Jakub JelinekPR testsuite/79324 * gcc.dg/debug/dwarf2/align-1.c: Add -gno-strict-dwarf to dg-options. * gcc.dg/debug/dwarf2/align-2.c: Likewise. * gcc.dg/debug/dwarf2/align-3.c: Likewise. * gcc.dg/debug/dwarf2/align-4.c: Likewise. * gcc.dg/debug/dwarf2/align-5.c: Likewise. * gcc.dg/debug/dwarf2/align-6.c: Likewise. * gcc.dg/debug/dwarf2/align-as-1.c: Likewise. * g++.dg/debug/dwarf2/align-1.C: Likewise. * g++.dg/debug/dwarf2/align-2.C: Likewise. * g++.dg/debug/dwarf2/align-3.C: Likewise. * g++.dg/debug/dwarf2/align-4.C: Likewise. * g++.dg/debug/dwarf2/align-5.C: Likewise. * g++.dg/debug/dwarf2/align-6.C: Likewise. --- gcc/testsuite/gcc.dg/debug/dwarf2/align-1.c.jj 2017-01-31 09:26:00.0 +0100 +++ gcc/testsuite/gcc.dg/debug/dwarf2/align-1.c 2017-02-01 16:39:24.852112430 +0100 @@ -1,5 +1,5 @@ // { dg-do compile } -// { dg-options "-O -g -dA" } +// { dg-options "-O -g -dA -gno-strict-dwarf" } // { dg-final { scan-assembler-times " DW_AT_alignment" 1 { xfail { powerpc-ibm-aix* } } } } int __attribute__((__aligned__(64))) i; --- gcc/testsuite/gcc.dg/debug/dwarf2/align-2.c.jj 2017-01-31 09:26:00.0 +0100 +++ gcc/testsuite/gcc.dg/debug/dwarf2/align-2.c 2017-02-01 16:39:34.260991165 +0100 @@ -1,5 +1,5 @@ // { dg-do compile } -// { dg-options "-O -g -dA" } +// { dg-options "-O -g -dA -gno-strict-dwarf" } // { dg-final { scan-assembler-times " DW_AT_alignment" 1 { xfail { powerpc-ibm-aix* } } } } typedef int __attribute__((__aligned__(64))) i_t; --- gcc/testsuite/gcc.dg/debug/dwarf2/align-3.c.jj 2017-01-31 09:26:00.0 +0100 +++ gcc/testsuite/gcc.dg/debug/dwarf2/align-3.c 2017-02-01 16:39:37.841945013 +0100 @@ -1,5 +1,5 @@ // { dg-do compile } -// { dg-options "-O -g -dA" } +// { dg-options "-O -g -dA -gno-strict-dwarf" } // { dg-final { scan-assembler-times " DW_AT_alignment" 1 { xfail { powerpc-ibm-aix* } } } } typedef int int_t; --- gcc/testsuite/gcc.dg/debug/dwarf2/align-4.c.jj 2017-01-31 09:26:00.0 +0100 +++ gcc/testsuite/gcc.dg/debug/dwarf2/align-4.c 2017-02-01 16:39:41.889892842 +0100 @@ -1,5 +1,5 @@ // { dg-do compile } -// { dg-options "-O -g -dA" } +// { dg-options "-O -g -dA -gno-strict-dwarf" } // { dg-final { scan-assembler-times " DW_AT_alignment" 2 { xfail { powerpc-ibm-aix* } } } } struct tt { --- gcc/testsuite/gcc.dg/debug/dwarf2/align-5.c.jj 2017-01-31 09:26:00.0 +0100 +++ gcc/testsuite/gcc.dg/debug/dwarf2/align-5.c 2017-02-01 16:39:46.117838350 +0100 @@ -1,5 +1,5 @@ // { dg-do compile } -// { dg-options "-O -g -dA" } +// { dg-options "-O -g -dA -gno-strict-dwarf" } // { dg-final { scan-assembler-times " DW_AT_alignment" 1 { xfail { powerpc-ibm-aix* } } } } struct tt { --- gcc/testsuite/gcc.dg/debug/dwarf2/align-6.c.jj 2017-01-31 09:26:00.0 +0100 +++ gcc/testsuite/gcc.dg/debug/dwarf2/align-6.c 2017-02-01 16:39:50.884776913 +0100 @@ -1,5 +1,5 @@ // { dg-do compile } -// { dg-options "-O -g -dA" } +// { dg-options "-O -g -dA -gno-strict-dwarf" } // { dg-final { scan-assembler-times " DW_AT_alignment" 1 { xfail { powerpc-ibm-aix* } } } } struct tt { --- gcc/testsuite/gcc.dg/debug/dwarf2/align-as-1.c.jj 2017-01-31 09:26:00.0 +0100 +++ gcc/testsuite/gcc.dg/debug/dwarf2/align-as-1.c 2017-02-01 16:39:55.554716725 +0100 @@ -1,5 +1,5 @@ // { dg-do compile } -// { dg-options "-O -g -dA" } +// { dg-options "-O -g -dA -gno-strict-dwarf" } // { dg-final { scan-assembler-times " DW_AT_alignment" 1 { xfail { powerpc-ibm-aix* } } } } int _Alignas(64) i; --- gcc/testsuite/g++.dg/debug/dwarf2/align-1.C.jj 2017-01-31 09:26:00.0 +0100 +++ gcc/testsuite/g++.dg/debug/dwarf2/align-1.C 2017-02-01 16:40:58.421906472 +0100 @@ -1,5 +1,5 @@ // { dg-do compile } -// { dg-options "-O -g -dA" } +// { dg-options "-O -g -dA -gno-strict-dwarf" } // { dg-final { scan-assembler-times " DW_AT_alignment" 1 { xfail { powerpc-ibm-aix* } } } } int __attribute__((__aligned__(64))) i; --- gcc/testsuite/g++.dg/debug/dwarf2/align-2.C.jj 2017-01-31 09:26:00.0 +0100 +++ gcc/testsuite/g++.dg/debug/dwarf2/align-2.C 2017-02-01 16:41:01.340868851 +0100 @@ -1,5 +1,5 @@ // { dg-do compile } -// { dg-options "-O -g -dA" } +// { dg-options "-O -g -dA -gno-strict-dwarf" } // { dg-final { scan-assembler-times " DW_AT_alignment" 1 { xfail { powerpc-ibm-aix* } } } }
Re: [PR63238] output alignment debug information
On Jan 29, 2017, Cary Coutantwrote: >> for gcc/ChangeLog >> >> PR debug/63238 > This is OK so far, but the DW_AT_alignment attribute also needs to be > added to the checksum computation in die_checksum and > die_checksum_ordered. Thanks. I see what to do in die_checksum_ordered, but die_checksum? It seems to handle attributes by value class, and AFAICT the classes that DW_AT_alignment could use are already covered. What am I missing? Here's a patch I'm about to start testing. Does it look ok? [PR63238] include alignment debug information in DIE checksum Add DW_AT_alignment to the DIE checksum. for gcc/ChangeLog PR debug/63238 * dwarf2out.c (struct checksum_attributes): Add at_alignment. (collect_checksum_attributes): Set it. (die_checksum_ordered): Use it. --- gcc/dwarf2out.c |5 + 1 file changed, 5 insertions(+) diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index f8fe4c1..15b7a66 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -6600,6 +6600,7 @@ struct checksum_attributes dw_attr_node *at_friend; dw_attr_node *at_accessibility; dw_attr_node *at_address_class; + dw_attr_node *at_alignment; dw_attr_node *at_allocated; dw_attr_node *at_artificial; dw_attr_node *at_associated; @@ -6673,6 +6674,9 @@ collect_checksum_attributes (struct checksum_attributes *attrs, dw_die_ref die) case DW_AT_address_class: attrs->at_address_class = a; break; + case DW_AT_alignment: + attrs->at_alignment = a; + break; case DW_AT_allocated: attrs->at_allocated = a; break; @@ -6879,6 +6883,7 @@ die_checksum_ordered (dw_die_ref die, struct md5_ctx *ctx, int *mark) CHECKSUM_ATTR (attrs.at_vtable_elem_location); CHECKSUM_ATTR (attrs.at_type); CHECKSUM_ATTR (attrs.at_friend); + CHECKSUM_ATTR (attrs.at_alignment); /* Checksum the child DIEs. */ c = die->die_child; -- Alexandre Oliva, freedom fighterhttp://FSFLA.org/~lxoliva/ You must be the change you wish to see in the world. -- Gandhi Be Free! -- http://FSFLA.org/ FSF Latin America board member Free Software Evangelist|Red Hat Brasil GNU Toolchain Engineer
Re: [PR63238] output alignment debug information
> for gcc/ChangeLog > > PR debug/63238 > * dwarf2out.c (clone_as_declaration): Drop DW_AT_alignment. > (add_alignment_attribute): New. > (base_type_die): Add alignment attribute. > (subrange_type_die): Likewise. > (modified_type_die): Likewise. > (gen_array_type_die): Likewise. > (gen_descr_array_type_die: Likewise. > (gen_enumeration_type_die): Likewise. > (gen_subprogram_die): Likewise. > (gen_variable_die): Likewise. > (gen_field_die): Likewise. > (gen_ptr_to_mbr_type_die): Likewise. > (gen_struct_or_union_type_die): Likewise. > (gen_subroutine_type_die): Likewise. > (gen_typedef_die): Likewise. > (base_type_cmp): Compare alignment attribute. This is OK so far, but the DW_AT_alignment attribute also needs to be added to the checksum computation in die_checksum and die_checksum_ordered. -cary
Re: [PR63238] output alignment debug information
On Oct 19, 2016, Alexandre Oliva <aol...@redhat.com> wrote: > On Sep 23, 2016, Alexandre Oliva <aol...@redhat.com> wrote: >> On Aug 27, 2016, Alexandre Oliva <aol...@redhat.com> wrote: >>> Output DWARFv5+ DW_AT_alignment for non-default alignment of >>> variables, fields and types. >>> Regstrapped on x86_64-linux-gnu and i686-linux-gnu. Ok to install? >> Ping? > Ping? (conflicts resolved, patch refreshed and retested) Ping? (refreshed, not sure there were conflicts to resolve) [PR63238] output alignment debug information From: Alexandre Oliva <aol...@redhat.com> Output DWARFv5+ DW_AT_alignment for non-default alignment of variables, fields and types. for gcc/ChangeLog PR debug/63238 * dwarf2out.c (clone_as_declaration): Drop DW_AT_alignment. (add_alignment_attribute): New. (base_type_die): Add alignment attribute. (subrange_type_die): Likewise. (modified_type_die): Likewise. (gen_array_type_die): Likewise. (gen_descr_array_type_die: Likewise. (gen_enumeration_type_die): Likewise. (gen_subprogram_die): Likewise. (gen_variable_die): Likewise. (gen_field_die): Likewise. (gen_ptr_to_mbr_type_die): Likewise. (gen_struct_or_union_type_die): Likewise. (gen_subroutine_type_die): Likewise. (gen_typedef_die): Likewise. (base_type_cmp): Compare alignment attribute. for gcc/testsuite/ChangeLog PR debug/63238 * gcc.dg/debug/dwarf2/align-1.c: New. * gcc.dg/debug/dwarf2/align-2.c: New. * gcc.dg/debug/dwarf2/align-3.c: New. * gcc.dg/debug/dwarf2/align-4.c: New. * gcc.dg/debug/dwarf2/align-5.c: New. * gcc.dg/debug/dwarf2/align-6.c: New. * gcc.dg/debug/dwarf2/align-as-1.c: New. * g++.dg/debug/dwarf2/align-1.C: New. * g++.dg/debug/dwarf2/align-2.C: New. * g++.dg/debug/dwarf2/align-3.C: New. * g++.dg/debug/dwarf2/align-4.C: New. * g++.dg/debug/dwarf2/align-5.C: New. * g++.dg/debug/dwarf2/align-6.C: New. --- gcc/dwarf2out.c| 76 ++-- gcc/testsuite/g++.dg/debug/dwarf2/align-1.C|5 ++ gcc/testsuite/g++.dg/debug/dwarf2/align-2.C|6 ++ gcc/testsuite/g++.dg/debug/dwarf2/align-3.C|7 ++ gcc/testsuite/g++.dg/debug/dwarf2/align-4.C|7 ++ gcc/testsuite/g++.dg/debug/dwarf2/align-5.C|7 ++ gcc/testsuite/g++.dg/debug/dwarf2/align-6.C|9 +++ gcc/testsuite/gcc.dg/debug/dwarf2/align-1.c|5 ++ gcc/testsuite/gcc.dg/debug/dwarf2/align-2.c|6 ++ gcc/testsuite/gcc.dg/debug/dwarf2/align-3.c|7 ++ gcc/testsuite/gcc.dg/debug/dwarf2/align-4.c|7 ++ gcc/testsuite/gcc.dg/debug/dwarf2/align-5.c|7 ++ gcc/testsuite/gcc.dg/debug/dwarf2/align-6.c|9 +++ gcc/testsuite/gcc.dg/debug/dwarf2/align-as-1.c |5 ++ 14 files changed, 157 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/align-1.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/align-2.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/align-3.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/align-4.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/align-5.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/align-6.C create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/align-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/align-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/align-3.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/align-4.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/align-5.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/align-6.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/align-as-1.c diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 1b2c04c..f8fe4c1 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -3510,6 +3510,7 @@ static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree, struct loc_descr_context *); static void add_subscript_info (dw_die_ref, tree, bool); static void add_byte_size_attribute (dw_die_ref, tree); +static void add_alignment_attribute (dw_die_ref, tree); static inline void add_bit_offset_attribute (dw_die_ref, tree, struct vlr_context *); static void add_bit_size_attribute (dw_die_ref, tree); @@ -7706,6 +7707,7 @@ clone_as_declaration (dw_die_ref die) add_dwarf_attr (clone, a); break; case DW_AT_byte_size: + case DW_AT_alignment: default: break; } @@ -12106,6 +12108,8 @@ base_type_die (tree type, bool reverse) add_AT_unsigned (base_type_result, DW_AT_endianity, BYTES_BIG_ENDIAN ? DW_END_little : DW_END_big); + add_alignment_attribute (base_type_result, type); + if (fpt_used)
Re: [PR63238] output alignment debug information
On Sep 23, 2016, Alexandre Olivawrote: > On Aug 27, 2016, Alexandre Oliva wrote: >> Output DWARFv5+ DW_AT_alignment for non-default alignment of >> variables, fields and types. >> Regstrapped on x86_64-linux-gnu and i686-linux-gnu. Ok to install? > Ping? Ping? (conflicts resolved, patch refreshed and retested) Output DWARFv5+ DW_AT_alignment for non-default alignment of variables, fields and types. for gcc/ChangeLog PR debug/63238 * dwarf2out.c (clone_as_declaration): Drop DW_AT_alignment. (add_alignment_attribute): New. (base_type_die): Add alignment attribute. (subrange_type_die): Likewise. (modified_type_die): Likewise. (gen_array_type_die): Likewise. (gen_descr_array_type_die: Likewise. (gen_enumeration_type_die): Likewise. (gen_subprogram_die): Likewise. (gen_variable_die): Likewise. (gen_field_die): Likewise. (gen_ptr_to_mbr_type_die): Likewise. (gen_struct_or_union_type_die): Likewise. (gen_subroutine_type_die): Likewise. (gen_typedef_die): Likewise. (base_type_cmp): Compare alignment attribute. for gcc/testsuite/ChangeLog PR debug/63238 * gcc.dg/debug/dwarf2/align-1.c: New. * gcc.dg/debug/dwarf2/align-2.c: New. * gcc.dg/debug/dwarf2/align-3.c: New. * gcc.dg/debug/dwarf2/align-4.c: New. * gcc.dg/debug/dwarf2/align-5.c: New. * gcc.dg/debug/dwarf2/align-6.c: New. * gcc.dg/debug/dwarf2/align-as-1.c: New. * g++.dg/debug/dwarf2/align-1.C: New. * g++.dg/debug/dwarf2/align-2.C: New. * g++.dg/debug/dwarf2/align-3.C: New. * g++.dg/debug/dwarf2/align-4.C: New. * g++.dg/debug/dwarf2/align-5.C: New. * g++.dg/debug/dwarf2/align-6.C: New. --- gcc/dwarf2out.c| 76 ++-- gcc/testsuite/g++.dg/debug/dwarf2/align-1.C|5 ++ gcc/testsuite/g++.dg/debug/dwarf2/align-2.C|6 ++ gcc/testsuite/g++.dg/debug/dwarf2/align-3.C|7 ++ gcc/testsuite/g++.dg/debug/dwarf2/align-4.C|7 ++ gcc/testsuite/g++.dg/debug/dwarf2/align-5.C|7 ++ gcc/testsuite/g++.dg/debug/dwarf2/align-6.C|9 +++ gcc/testsuite/gcc.dg/debug/dwarf2/align-1.c|5 ++ gcc/testsuite/gcc.dg/debug/dwarf2/align-2.c|6 ++ gcc/testsuite/gcc.dg/debug/dwarf2/align-3.c|7 ++ gcc/testsuite/gcc.dg/debug/dwarf2/align-4.c|7 ++ gcc/testsuite/gcc.dg/debug/dwarf2/align-5.c|7 ++ gcc/testsuite/gcc.dg/debug/dwarf2/align-6.c|9 +++ gcc/testsuite/gcc.dg/debug/dwarf2/align-as-1.c |5 ++ 14 files changed, 157 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/align-1.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/align-2.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/align-3.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/align-4.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/align-5.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/align-6.C create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/align-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/align-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/align-3.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/align-4.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/align-5.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/align-6.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/align-as-1.c diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index ba36310..afe7bfd 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -3342,6 +3342,7 @@ static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree, const struct loc_descr_context *); static void add_subscript_info (dw_die_ref, tree, bool); static void add_byte_size_attribute (dw_die_ref, tree); +static void add_alignment_attribute (dw_die_ref, tree); static inline void add_bit_offset_attribute (dw_die_ref, tree, struct vlr_context *); static void add_bit_size_attribute (dw_die_ref, tree); @@ -7461,6 +7462,7 @@ clone_as_declaration (dw_die_ref die) add_dwarf_attr (clone, a); break; case DW_AT_byte_size: + case DW_AT_alignment: default: break; } @@ -10986,6 +10988,8 @@ base_type_die (tree type, bool reverse) add_AT_unsigned (base_type_result, DW_AT_endianity, BYTES_BIG_ENDIAN ? DW_END_little : DW_END_big); + add_alignment_attribute (base_type_result, type); + if (fpt_used) { switch (fpt_info.scale_factor_kind) @@ -11149,6 +11153,8 @@ subrange_type_die (tree type, tree low, tree high, tree bias, add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes); } + add_alignment_attribute (subrange_die, type); + if (low)
Re: [PR63238] output alignment debug information
On Aug 27, 2016, Alexandre Olivawrote: > Output DWARFv5+ DW_AT_alignment for non-default alignment of > variables, fields and types. > Regstrapped on x86_64-linux-gnu and i686-linux-gnu. Ok to install? Ping? https://gcc.gnu.org/ml/gcc-patches/2016-08/msg01911.html -- Alexandre Oliva, freedom fighterhttp://FSFLA.org/~lxoliva/ You must be the change you wish to see in the world. -- Gandhi Be Free! -- http://FSFLA.org/ FSF Latin America board member Free Software Evangelist|Red Hat Brasil GNU Toolchain Engineer
[PR63238] output alignment debug information
Output DWARFv5+ DW_AT_alignment for non-default alignment of variables, fields and types. Regstrapped on x86_64-linux-gnu and i686-linux-gnu. Ok to install? for include/ChangeLog PR debug/63238 * dwarf2.def (DW_AT_alignment): New. for gcc/ChangeLog PR debug/63238 * dwarf2out.c (clone_as_declaration): Drop DW_AT_alignment. (add_alignment_attribute): New. (base_type_die): Add alignment attribute. (subrange_type_die): Likewise. (modified_type_die): Likewise. (gen_array_type_die): Likewise. (gen_descr_array_type_die: Likewise. (gen_enumeration_type_die): Likewise. (gen_subprogram_die): Likewise. (gen_variable_die): Likewise. (gen_field_die): Likewise. (gen_ptr_to_mbr_type_die): Likewise. (gen_struct_or_union_type_die): Likewise. (gen_subroutine_type_die): Likewise. (gen_typedef_die): Likewise. (base_type_cmp): Compare alignment attribute. for gcc/testsuite/ChangeLog PR debug/63238 * gcc.dg/debug/dwarf2/align-1.c: New. * gcc.dg/debug/dwarf2/align-2.c: New. * gcc.dg/debug/dwarf2/align-3.c: New. * gcc.dg/debug/dwarf2/align-4.c: New. * gcc.dg/debug/dwarf2/align-5.c: New. * gcc.dg/debug/dwarf2/align-6.c: New. * gcc.dg/debug/dwarf2/align-as-1.c: New. * g++.dg/debug/dwarf2/align-1.C: New. * g++.dg/debug/dwarf2/align-2.C: New. * g++.dg/debug/dwarf2/align-3.C: New. * g++.dg/debug/dwarf2/align-4.C: New. * g++.dg/debug/dwarf2/align-5.C: New. * g++.dg/debug/dwarf2/align-6.C: New. --- gcc/dwarf2out.c| 76 ++-- gcc/testsuite/g++.dg/debug/dwarf2/align-1.C|5 ++ gcc/testsuite/g++.dg/debug/dwarf2/align-2.C|6 ++ gcc/testsuite/g++.dg/debug/dwarf2/align-3.C|7 ++ gcc/testsuite/g++.dg/debug/dwarf2/align-4.C|7 ++ gcc/testsuite/g++.dg/debug/dwarf2/align-5.C|7 ++ gcc/testsuite/g++.dg/debug/dwarf2/align-6.C|9 +++ gcc/testsuite/gcc.dg/debug/dwarf2/align-1.c|5 ++ gcc/testsuite/gcc.dg/debug/dwarf2/align-2.c|6 ++ gcc/testsuite/gcc.dg/debug/dwarf2/align-3.c|7 ++ gcc/testsuite/gcc.dg/debug/dwarf2/align-4.c|7 ++ gcc/testsuite/gcc.dg/debug/dwarf2/align-5.c|7 ++ gcc/testsuite/gcc.dg/debug/dwarf2/align-6.c|9 +++ gcc/testsuite/gcc.dg/debug/dwarf2/align-as-1.c |5 ++ include/dwarf2.def |1 15 files changed, 158 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/align-1.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/align-2.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/align-3.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/align-4.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/align-5.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/align-6.C create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/align-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/align-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/align-3.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/align-4.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/align-5.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/align-6.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/align-as-1.c diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index f40f759..f3928e0 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -3342,6 +3342,7 @@ static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree, const struct loc_descr_context *); static void add_subscript_info (dw_die_ref, tree, bool); static void add_byte_size_attribute (dw_die_ref, tree); +static void add_alignment_attribute (dw_die_ref, tree); static inline void add_bit_offset_attribute (dw_die_ref, tree, struct vlr_context *); static void add_bit_size_attribute (dw_die_ref, tree); @@ -7415,6 +7416,7 @@ clone_as_declaration (dw_die_ref die) add_dwarf_attr (clone, a); break; case DW_AT_byte_size: + case DW_AT_alignment: default: break; } @@ -10941,6 +10943,8 @@ base_type_die (tree type, bool reverse) add_AT_unsigned (base_type_result, DW_AT_endianity, BYTES_BIG_ENDIAN ? DW_END_little : DW_END_big); + add_alignment_attribute (base_type_result, type); + if (fpt_used) { switch (fpt_info.scale_factor_kind) @@ -11104,6 +11108,8 @@ subrange_type_die (tree type, tree low, tree high, tree bias, add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes); } + add_alignment_attribute (subrange_die, type); + if (low) add_bound_info (subrange_die, DW_AT_lower_bound, low, NULL); if (high) @@ -11421,6 +11427,7 @@ modified_type_die (tree type, int cv_quals, bool