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 <ja...@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