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]

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


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


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