From patchwork Fri Jan 27 06:24:58 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandre Oliva X-Patchwork-Id: 720479 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3v8pkd3SV4z9t1Q for ; Fri, 27 Jan 2017 17:28:09 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="DK3XAtHL"; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:references:date:in-reply-to:message-id :mime-version:content-type; q=dns; s=default; b=fgxRj0rwbIXOvgLS +rFkPTcubLZHfYRN/r2wnjE6JccEuH0NTyCR3HcqbGMoMmyMQ05RfhBwG7sUX2m8 Cx18dmgMs5i8eTck+J6QffxByurodjvOyz+s4r7nwtr7eeUZ0rc45rgCRjHEC7Bf Nvg15rkXrPcb2/EVMOUBNPu08sc= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:references:date:in-reply-to:message-id :mime-version:content-type; s=default; bh=z8z9UedORsu3uYYeuajx2A /h62s=; b=DK3XAtHLCRoIDNWdCL2IdKkehIlmvqmv678+EZF1b9vpyZTQR3PepF SA+lcoLRFiVhfPvrw0XaJtFxNkVL+9OBYBQ2VS9iEFYQ33VDcfc6KtNuXPXQbGAm K/ayHwNdwyH0KL8+eXKiupqJlYmAqMCGJ279jgHSLmHH2U0+wUBUM= Received: (qmail 122398 invoked by alias); 27 Jan 2017 06:27:24 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 119860 invoked by uid 89); 27 Jan 2017 06:25:47 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-5.1 required=5.0 tests=BAYES_00, RP_MATCHES_RCVD, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=sk:base_ty, add_at_flag, sk:equate_, sk:dw_at_d X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 27 Jan 2017 06:25:24 +0000 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 40B23C04B95E; Fri, 27 Jan 2017 06:25:24 +0000 (UTC) Received: from freie.home (ovpn04.gateway.prod.ext.phx2.redhat.com [10.5.9.4]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v0R6PMUA030911 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Fri, 27 Jan 2017 01:25:23 -0500 Received: from livre (livre.home [172.31.160.2]) by freie.home (8.15.2/8.15.2) with ESMTP id v0R6OwB4027245; Fri, 27 Jan 2017 04:24:58 -0200 From: Alexandre Oliva To: gcc-patches@gcc.gnu.org Cc: jason@redhat.com, ccoutant@gmail.com Subject: Re: [PR63238] output alignment debug information References: Date: Fri, 27 Jan 2017 04:24:58 -0200 In-Reply-To: (Alexandre Oliva's message of "Wed, 19 Oct 2016 08:14:30 -0200") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) MIME-Version: 1.0 On Oct 19, 2016, Alexandre Oliva wrote: > On Sep 23, 2016, Alexandre Oliva wrote: >> 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) Ping? (refreshed, not sure there were conflicts to resolve) [PR63238] output alignment debug information From: Alexandre Oliva 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) { switch (fpt_info.scale_factor_kind) @@ -12269,6 +12273,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) @@ -12586,6 +12592,7 @@ modified_type_die (tree type, int cv_quals, bool reverse, add_AT_unsigned (mod_type_die, DW_AT_byte_size, simple_type_size_in_bits (type) / BITS_PER_UNIT); + add_alignment_attribute (mod_type_die, type); item_type = TREE_TYPE (type); addr_space_t as = TYPE_ADDR_SPACE (item_type); @@ -19946,6 +19953,37 @@ add_byte_size_attribute (dw_die_ref die, tree tree_node) add_AT_unsigned (die, DW_AT_byte_size, size); } +/* Add a DW_AT_alignment attribute to DIE with TREE_NODE's non-default + alignment. */ + +static void +add_alignment_attribute (dw_die_ref die, tree tree_node) +{ + if (dwarf_version < 5 && dwarf_strict) + return; + + unsigned align; + + if (DECL_P (tree_node)) + { + if (!DECL_USER_ALIGN (tree_node)) + return; + + align = DECL_ALIGN_UNIT (tree_node); + } + else if (TYPE_P (tree_node)) + { + if (!TYPE_USER_ALIGN (tree_node)) + return; + + align = TYPE_ALIGN_UNIT (tree_node); + } + else + gcc_unreachable (); + + add_AT_unsigned (die, DW_AT_alignment, align); +} + /* For a FIELD_DECL node which represents a bit-field, output an attribute which specifies the distance in bits from the highest order bit of the "containing object" for the bit-field to the highest order bit of the @@ -20765,6 +20803,8 @@ gen_array_type_die (tree type, dw_die_ref context_die) if (get_AT (array_die, DW_AT_name)) add_pubtype (type, array_die); + + add_alignment_attribute (array_die, type); } /* After all arguments are created, adjust any DW_TAG_string_type @@ -20904,6 +20944,8 @@ gen_descr_array_type_die (tree type, struct array_descr_info *info, if (get_AT (array_die, DW_AT_name)) add_pubtype (type, array_die); + + add_alignment_attribute (array_die, type); } #if 0 @@ -21013,6 +21055,7 @@ gen_enumeration_type_die (tree type, dw_die_ref context_die) TREE_ASM_WRITTEN (type) = 1; add_byte_size_attribute (type_die, type); + add_alignment_attribute (type_die, type); if (dwarf_version >= 3 || !dwarf_strict) { tree underlying = lang_hooks.types.enum_underlying_base_type (type); @@ -21071,6 +21114,8 @@ gen_enumeration_type_die (tree type, dw_die_ref context_die) else add_AT_flag (type_die, DW_AT_declaration, 1); + add_alignment_attribute (type_die, type); + add_pubtype (type, type_die); return type_die; @@ -21971,6 +22016,8 @@ gen_subprogram_die (tree decl, dw_die_ref context_die) if (TREE_THIS_VOLATILE (decl) && (dwarf_version >= 5 || !dwarf_strict)) add_AT_flag (subr_die, DW_AT_noreturn, 1); + add_alignment_attribute (subr_die, decl); + add_accessibility_attribute (subr_die, decl); } @@ -22695,6 +22742,7 @@ gen_variable_die (tree decl, tree origin, dw_die_ref context_die) add_type_attribute (var_die, TREE_TYPE (decl_or_origin), decl_quals (decl_or_origin), false, context_die); + add_alignment_attribute (var_die, decl); add_AT_flag (var_die, DW_AT_external, 1); if (loc) { @@ -22822,6 +22870,8 @@ 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); + add_alignment_attribute (var_die, decl); + add_accessibility_attribute (var_die, decl); } @@ -23186,6 +23236,8 @@ gen_field_die (tree decl, struct vlr_context *ctx, dw_die_ref context_die) add_bit_offset_attribute (decl_die, decl, ctx); } + add_alignment_attribute (decl_die, decl); + /* If we have a variant part offset, then we are supposed to process a member of a QUAL_UNION_TYPE, which is how we represent variant parts in trees. */ @@ -23261,6 +23313,7 @@ gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die) lookup_type_die (TYPE_OFFSET_BASETYPE (type))); add_type_attribute (ptr_die, TREE_TYPE (type), TYPE_UNQUALIFIED, false, context_die); + add_alignment_attribute (ptr_die, type); if (TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE && TREE_CODE (TREE_TYPE (type)) != METHOD_TYPE) @@ -24139,6 +24192,7 @@ gen_struct_or_union_type_die (tree type, dw_die_ref context_die, this type is expressed in terms of this type itself. */ TREE_ASM_WRITTEN (type) = 1; add_byte_size_attribute (type_die, type); + add_alignment_attribute (type_die, type); if (TYPE_STUB_DECL (type) != NULL_TREE) { add_src_coords_attributes (type_die, TYPE_STUB_DECL (type)); @@ -24196,6 +24250,7 @@ gen_subroutine_type_die (tree type, dw_die_ref context_die) add_prototyped_attribute (subr_die, type); add_type_attribute (subr_die, return_type, TYPE_UNQUALIFIED, false, context_die); + add_alignment_attribute (subr_die, type); gen_formal_types_die (type, subr_die); if (get_AT (subr_die, DW_AT_name)) @@ -24231,7 +24286,10 @@ gen_typedef_die (tree decl, dw_die_ref context_die) add_abstract_origin_attribute (type_die, origin); else { - tree type; + tree type = TREE_TYPE (decl); + + if (type == error_mark_node) + return; add_name_and_src_coords_attributes (type_die, decl); if (DECL_ORIGINAL_TYPE (decl)) @@ -24246,11 +24304,6 @@ gen_typedef_die (tree decl, dw_die_ref context_die) } else { - type = TREE_TYPE (decl); - - if (type == error_mark_node) - return; - if (is_naming_typedef_decl (TYPE_NAME (type))) { /* Here, we are in the case of decl being a typedef naming @@ -24289,6 +24342,10 @@ gen_typedef_die (tree decl, dw_die_ref context_die) created. */ equate_type_number_to_die (type, type_die); + type = TREE_TYPE (decl); + + add_alignment_attribute (type_die, type); + add_accessibility_attribute (type_die, decl); } @@ -27964,6 +28021,7 @@ base_type_cmp (const void *x, const void *y) dw_die_ref dy = *(const dw_die_ref *) y; unsigned int byte_size1, byte_size2; unsigned int encoding1, encoding2; + unsigned int align1, align2; if (dx->die_mark > dy->die_mark) return -1; if (dx->die_mark < dy->die_mark) @@ -27980,6 +28038,12 @@ base_type_cmp (const void *x, const void *y) return 1; if (encoding1 > encoding2) return -1; + align1 = get_AT_unsigned (dx, DW_AT_alignment); + align2 = get_AT_unsigned (dy, DW_AT_alignment); + if (align1 < align2) + return 1; + if (align1 > align2) + return -1; return 0; } diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/align-1.C b/gcc/testsuite/g++.dg/debug/dwarf2/align-1.C new file mode 100644 index 0000000..58b7731 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/align-1.C @@ -0,0 +1,5 @@ +// { dg-do compile } +// { dg-options "-O -g -dA" } +// { dg-final { scan-assembler-times " DW_AT_alignment" 1 { xfail { powerpc-ibm-aix* } } } } + +int __attribute__((__aligned__(64))) i; diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/align-2.C b/gcc/testsuite/g++.dg/debug/dwarf2/align-2.C new file mode 100644 index 0000000..31eed4a --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/align-2.C @@ -0,0 +1,6 @@ +// { dg-do compile } +// { dg-options "-O -g -dA" } +// { dg-final { scan-assembler-times " DW_AT_alignment" 1 { xfail { powerpc-ibm-aix* } } } } + +typedef int __attribute__((__aligned__(64))) i_t; +i_t i; diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/align-3.C b/gcc/testsuite/g++.dg/debug/dwarf2/align-3.C new file mode 100644 index 0000000..328ea0d --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/align-3.C @@ -0,0 +1,7 @@ +// { dg-do compile } +// { dg-options "-O -g -dA" } +// { dg-final { scan-assembler-times " DW_AT_alignment" 1 { xfail { powerpc-ibm-aix* } } } } + +typedef int int_t; +typedef int_t __attribute__((__aligned__(64))) i_t; +i_t i; diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/align-4.C b/gcc/testsuite/g++.dg/debug/dwarf2/align-4.C new file mode 100644 index 0000000..31e9e81 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/align-4.C @@ -0,0 +1,7 @@ +// { dg-do compile } +// { dg-options "-O -g -dA" } +// { dg-final { scan-assembler-times " DW_AT_alignment" 2 { xfail { powerpc-ibm-aix* } } } } + +struct tt { + int __attribute__((__aligned__(64))) i; +} t; diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/align-5.C b/gcc/testsuite/g++.dg/debug/dwarf2/align-5.C new file mode 100644 index 0000000..2116646 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/align-5.C @@ -0,0 +1,7 @@ +// { dg-do compile } +// { dg-options "-O -g -dA" } +// { dg-final { scan-assembler-times " DW_AT_alignment" 1 { xfail { powerpc-ibm-aix* } } } } + +struct tt { + int i; +} __attribute__((__aligned__(64))) t; diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/align-6.C b/gcc/testsuite/g++.dg/debug/dwarf2/align-6.C new file mode 100644 index 0000000..e8fc43f --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/align-6.C @@ -0,0 +1,9 @@ +// { dg-do compile } +// { dg-options "-O -g -dA" } +// { dg-final { scan-assembler-times " DW_AT_alignment" 1 { xfail { powerpc-ibm-aix* } } } } + +struct tt { + int i; +}; + +struct tt __attribute__((__aligned__(64))) t; diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/align-1.c b/gcc/testsuite/gcc.dg/debug/dwarf2/align-1.c new file mode 100644 index 0000000..58b7731 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/align-1.c @@ -0,0 +1,5 @@ +// { dg-do compile } +// { dg-options "-O -g -dA" } +// { dg-final { scan-assembler-times " DW_AT_alignment" 1 { xfail { powerpc-ibm-aix* } } } } + +int __attribute__((__aligned__(64))) i; diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/align-2.c b/gcc/testsuite/gcc.dg/debug/dwarf2/align-2.c new file mode 100644 index 0000000..31eed4a --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/align-2.c @@ -0,0 +1,6 @@ +// { dg-do compile } +// { dg-options "-O -g -dA" } +// { dg-final { scan-assembler-times " DW_AT_alignment" 1 { xfail { powerpc-ibm-aix* } } } } + +typedef int __attribute__((__aligned__(64))) i_t; +i_t i; diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/align-3.c b/gcc/testsuite/gcc.dg/debug/dwarf2/align-3.c new file mode 100644 index 0000000..328ea0d --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/align-3.c @@ -0,0 +1,7 @@ +// { dg-do compile } +// { dg-options "-O -g -dA" } +// { dg-final { scan-assembler-times " DW_AT_alignment" 1 { xfail { powerpc-ibm-aix* } } } } + +typedef int int_t; +typedef int_t __attribute__((__aligned__(64))) i_t; +i_t i; diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/align-4.c b/gcc/testsuite/gcc.dg/debug/dwarf2/align-4.c new file mode 100644 index 0000000..31e9e81 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/align-4.c @@ -0,0 +1,7 @@ +// { dg-do compile } +// { dg-options "-O -g -dA" } +// { dg-final { scan-assembler-times " DW_AT_alignment" 2 { xfail { powerpc-ibm-aix* } } } } + +struct tt { + int __attribute__((__aligned__(64))) i; +} t; diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/align-5.c b/gcc/testsuite/gcc.dg/debug/dwarf2/align-5.c new file mode 100644 index 0000000..2116646 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/align-5.c @@ -0,0 +1,7 @@ +// { dg-do compile } +// { dg-options "-O -g -dA" } +// { dg-final { scan-assembler-times " DW_AT_alignment" 1 { xfail { powerpc-ibm-aix* } } } } + +struct tt { + int i; +} __attribute__((__aligned__(64))) t; diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/align-6.c b/gcc/testsuite/gcc.dg/debug/dwarf2/align-6.c new file mode 100644 index 0000000..e8fc43f --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/align-6.c @@ -0,0 +1,9 @@ +// { dg-do compile } +// { dg-options "-O -g -dA" } +// { dg-final { scan-assembler-times " DW_AT_alignment" 1 { xfail { powerpc-ibm-aix* } } } } + +struct tt { + int i; +}; + +struct tt __attribute__((__aligned__(64))) t; diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/align-as-1.c b/gcc/testsuite/gcc.dg/debug/dwarf2/align-as-1.c new file mode 100644 index 0000000..6923257 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/align-as-1.c @@ -0,0 +1,5 @@ +// { dg-do compile } +// { dg-options "-O -g -dA" } +// { dg-final { scan-assembler-times " DW_AT_alignment" 1 { xfail { powerpc-ibm-aix* } } } } + +int _Alignas(64) i;