This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Don't emit -Wpadded for builtin structs


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
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]