diff mbox series

ubsan: Avoid -Wpadded warnings [PR94641]

Message ID 20200420225456.GS2424@tucnak
State New
Headers show
Series ubsan: Avoid -Wpadded warnings [PR94641] | expand

Commit Message

Jakub Jelinek April 20, 2020, 10:54 p.m. UTC
Hi!

-Wpadded warnings aren't really useful for the artificial types that GCC
lays out for ubsan.

Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux, ok for
trunk?

2020-04-20  Jakub Jelinek  <jakub@redhat.com>

	PR c/94641
	* ubsan.c (ubsan_get_type_descriptor_type,
	ubsan_get_source_location_type, ubsan_create_data): Temporarily
	disable warn_padded for the layout_type calls.

	* c-c++-common/ubsan/pr94641.c: New test.


	Jakub

Comments

Richard Biener April 21, 2020, 6:21 a.m. UTC | #1
On Tue, 21 Apr 2020, Jakub Jelinek wrote:

> Hi!
> 
> -Wpadded warnings aren't really useful for the artificial types that GCC
> lays out for ubsan.
> 
> Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux, ok for
> trunk?

I believe most of those warnings should simply not look at
TYPE_ARTIFICIAL types.  So why the above kludge certainly
works a better fix is on the -Wpadded side IMHO.

Thanks,
Richard.

> 2020-04-20  Jakub Jelinek  <jakub@redhat.com>
> 
> 	PR c/94641
> 	* ubsan.c (ubsan_get_type_descriptor_type,
> 	ubsan_get_source_location_type, ubsan_create_data): Temporarily
> 	disable warn_padded for the layout_type calls.
> 
> 	* c-c++-common/ubsan/pr94641.c: New test.
> 
> --- gcc/ubsan.c.jj	2020-01-12 11:54:38.529381484 +0100
> +++ gcc/ubsan.c	2020-04-20 09:51:16.805090228 +0200
> @@ -229,7 +229,10 @@ ubsan_get_type_descriptor_type (void)
>    TYPE_FIELDS (ret) = fields[0];
>    TYPE_NAME (ret) = type_decl;
>    TYPE_STUB_DECL (ret) = type_decl;
> +  int saved_warn_padded = warn_padded;
> +  warn_padded = 0;
>    layout_type (ret);
> +  warn_padded = saved_warn_padded;
>    ubsan_type_descriptor_type = ret;
>    return ret;
>  }
> @@ -277,7 +280,10 @@ ubsan_get_source_location_type (void)
>    TYPE_FIELDS (ret) = fields[0];
>    TYPE_NAME (ret) = type_decl;
>    TYPE_STUB_DECL (ret) = type_decl;
> +  int saved_warn_padded = warn_padded;
> +  warn_padded = 0;
>    layout_type (ret);
> +  warn_padded = saved_warn_padded;
>    ubsan_source_location_type = ret;
>    return ret;
>  }
> @@ -593,7 +599,10 @@ ubsan_create_data (const char *name, int
>    TYPE_FIELDS (ret) = fields[0];
>    TYPE_NAME (ret) = type_decl;
>    TYPE_STUB_DECL (ret) = type_decl;
> +  int saved_warn_padded = warn_padded;
> +  warn_padded = 0;
>    layout_type (ret);
> +  warn_padded = saved_warn_padded;
>  
>    /* Now, fill in the type.  */
>    char tmp_name[32];
> --- gcc/testsuite/c-c++-common/ubsan/pr94641.c.jj	2020-04-20 09:54:02.036564064 +0200
> +++ gcc/testsuite/c-c++-common/ubsan/pr94641.c	2020-04-20 09:53:01.101495679 +0200
> @@ -0,0 +1,11 @@
> +/* PR c/94641 */
> +/* { dg-do compile } */
> +/* { dg-options "-fsanitize=undefined -Wpadded" } */
> +
> +void foo (void *) __attribute__((nonnull));
> +
> +void
> +bar (void *p)
> +{
> +  foo (p);
> +}
> 
> 	Jakub
> 
>
diff mbox series

Patch

--- gcc/ubsan.c.jj	2020-01-12 11:54:38.529381484 +0100
+++ gcc/ubsan.c	2020-04-20 09:51:16.805090228 +0200
@@ -229,7 +229,10 @@  ubsan_get_type_descriptor_type (void)
   TYPE_FIELDS (ret) = fields[0];
   TYPE_NAME (ret) = type_decl;
   TYPE_STUB_DECL (ret) = type_decl;
+  int saved_warn_padded = warn_padded;
+  warn_padded = 0;
   layout_type (ret);
+  warn_padded = saved_warn_padded;
   ubsan_type_descriptor_type = ret;
   return ret;
 }
@@ -277,7 +280,10 @@  ubsan_get_source_location_type (void)
   TYPE_FIELDS (ret) = fields[0];
   TYPE_NAME (ret) = type_decl;
   TYPE_STUB_DECL (ret) = type_decl;
+  int saved_warn_padded = warn_padded;
+  warn_padded = 0;
   layout_type (ret);
+  warn_padded = saved_warn_padded;
   ubsan_source_location_type = ret;
   return ret;
 }
@@ -593,7 +599,10 @@  ubsan_create_data (const char *name, int
   TYPE_FIELDS (ret) = fields[0];
   TYPE_NAME (ret) = type_decl;
   TYPE_STUB_DECL (ret) = type_decl;
+  int saved_warn_padded = warn_padded;
+  warn_padded = 0;
   layout_type (ret);
+  warn_padded = saved_warn_padded;
 
   /* Now, fill in the type.  */
   char tmp_name[32];
--- gcc/testsuite/c-c++-common/ubsan/pr94641.c.jj	2020-04-20 09:54:02.036564064 +0200
+++ gcc/testsuite/c-c++-common/ubsan/pr94641.c	2020-04-20 09:53:01.101495679 +0200
@@ -0,0 +1,11 @@ 
+/* PR c/94641 */
+/* { dg-do compile } */
+/* { dg-options "-fsanitize=undefined -Wpadded" } */
+
+void foo (void *) __attribute__((nonnull));
+
+void
+bar (void *p)
+{
+  foo (p);
+}