public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] Don't emit -Wpadded for builtin structs
@ 2009-10-14 21:23 Jakub Jelinek
  2009-10-14 21:25 ` Richard Guenther
  0 siblings, 1 reply; 2+ messages in thread
From: Jakub Jelinek @ 2009-10-14 21:23 UTC (permalink / raw)
  To: gcc-patches

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.

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

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] Don't emit -Wpadded for builtin structs
  2009-10-14 21:23 [PATCH] Don't emit -Wpadded for builtin structs Jakub Jelinek
@ 2009-10-14 21:25 ` Richard Guenther
  0 siblings, 0 replies; 2+ messages in thread
From: Richard Guenther @ 2009-10-14 21:25 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: gcc-patches

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
>

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2009-10-14 21:24 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-10-14 21:23 [PATCH] Don't emit -Wpadded for builtin structs Jakub Jelinek
2009-10-14 21:25 ` Richard Guenther

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).