This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Don't emit -Wpadded for builtin structs
- From: Richard Guenther <richard dot guenther at gmail dot com>
- To: Jakub Jelinek <jakub at redhat dot com>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Wed, 14 Oct 2009 23:24:15 +0200
- Subject: Re: [PATCH] Don't emit -Wpadded for builtin structs
- References: <20091014205833.GH14664@tyan-ft48-01.lab.bos.redhat.com>
On Wed, Oct 14, 2009 at 10:58 PM, Jakub Jelinek <jakub@redhat.com> wrote:
> Hi!
>
> The 3 tests below started FAILing after my recent BUILTINS_LOCATION
> patch, the warnings are now reported at <built-in>:0:0. ?Instead of
> adjusting the testcase, I think it is better not to warn about builtin
> structs at all. ?After all, what is it good for to let the user know?
> The warning is meant to allow the user to better repack structs, but
> obviously he can't do that with builtin structs, unless gcc sources are
> changed.
>
> We then have ugly hacks like:
> ?/* Give the two bytes of padding a name, so that -Wpadded won't warn on
> ? ? every user file. ?*/
> ?f_res = build_decl (BUILTINS_LOCATION, FIELD_DECL,
> ? ? ? ? ? ? ? ? ? ? ?get_identifier ("reserved"), short_unsigned_type_node);
> but it still doesn't cover many other cases, e.g. C++ RTTI, several
> backends, etc.
>
> I've bootstrapped/regtested this on x86_64-linux and i686-linux.
Ok.
Thanks,
Richard.
> 2009-10-14 ?Jakub Jelinek ?<jakub@redhat.com>
>
> ? ? ? ?* stor-layout.c (place_field): Don't emit -Wpadded warnings for
> ? ? ? ?fields in builtin structs.
> ? ? ? ?(finalize_record_size): Likewise.
>
> ? ? ? ?* obj-c++.dg/layout-1.mm: Don't xfail dg-bogus on lp64, change
> ? ? ? ?line from 1 to 0.
> ? ? ? ?* obj-c++.dg/bitfield-1.mm: Likewise.
> ? ? ? ?* obj-c++.dg/bitfield-4.mm: Likewise.
>
> --- gcc/stor-layout.c.jj ? ? ? ?2009-10-05 11:49:35.000000000 +0200
> +++ gcc/stor-layout.c ? 2009-10-14 20:55:16.000000000 +0200
> @@ -1118,7 +1118,8 @@ place_field (record_layout_info rli, tre
> ? ? ? /* No, we need to skip space before this field.
> ? ? ? ? Bump the cumulative size to multiple of field alignment. ?*/
>
> - ? ? ?warning (OPT_Wpadded, "padding struct to align %q+D", field);
> + ? ? ?if (DECL_SOURCE_LOCATION (field) != BUILTINS_LOCATION)
> + ? ? ? warning (OPT_Wpadded, "padding struct to align %q+D", field);
>
> ? ? ? /* If the alignment is still within offset_align, just align
> ? ? ? ? the bit position. ?*/
> @@ -1483,7 +1484,8 @@ finalize_record_size (record_layout_info
> ? ? = round_up_loc (input_location, unpadded_size_unit, TYPE_ALIGN_UNIT (rli->t));
>
> ? if (TREE_CONSTANT (unpadded_size)
> - ? ? ?&& simple_cst_equal (unpadded_size, TYPE_SIZE (rli->t)) == 0)
> + ? ? ?&& simple_cst_equal (unpadded_size, TYPE_SIZE (rli->t)) == 0
> + ? ? ?&& input_location != BUILTINS_LOCATION)
> ? ? warning (OPT_Wpadded, "padding struct size to alignment boundary");
>
> ? if (warn_packed && TREE_CODE (rli->t) == RECORD_TYPE
> --- gcc/testsuite/obj-c++.dg/layout-1.mm.jj ? ? 2008-09-30 16:55:41.000000000 +0200
> +++ gcc/testsuite/obj-c++.dg/layout-1.mm ? ? ? ?2009-10-14 22:50:42.000000000 +0200
> @@ -14,4 +14,4 @@
> ?@end
>
> ?/* { dg-prune-output "In output included from" } ? Ignore this message. ?*/
> -/* { dg-bogus "padding struct to align" "PR23610" { xfail lp64 } 1 } */
> +/* { dg-bogus "padding struct to align" "PR23610" { target *-*-* } 0 } */
> --- gcc/testsuite/obj-c++.dg/bitfield-1.mm.jj ? 2008-12-15 11:10:36.000000000 +0100
> +++ gcc/testsuite/obj-c++.dg/bitfield-1.mm ? ? ?2009-10-14 22:50:13.000000000 +0200
> @@ -115,7 +115,7 @@ int main(void)
> ?}
>
> ?/* { dg-prune-output "In file included from" } ?Ignore this message. ?*/
> -/* { dg-bogus "padding struct to align" "PR23610" { xfail lp64 } 1 } */
> +/* { dg-bogus "padding struct to align" "PR23610" { target *-*-* } 0 } */
> ?/* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 42 } */
> ?/* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 45 } */
> ?/* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 59 } */
> --- gcc/testsuite/obj-c++.dg/bitfield-4.mm.jj ? 2008-09-30 16:55:41.000000000 +0200
> +++ gcc/testsuite/obj-c++.dg/bitfield-4.mm ? ? ?2009-10-14 22:50:31.000000000 +0200
> @@ -50,7 +50,7 @@ int main(void)
> ?}
>
> ?/* { dg-prune-output "In file included from" } ?Ignore this message. ?*/
> -/* { dg-bogus "padding struct to align" "PR23610" { xfail lp64 } 1 } */
> +/* { dg-bogus "padding struct to align" "PR23610" { target *-*-* } 0 } */
>
> ?/* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 28 } */
> ?/* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 34 } */
>
>
> ? ? ? ?Jakub
>