ubsan: Avoid -Wpadded warnings [PR94641]

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

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

	PR c/94641
	* stor-layout.c (place_field, finalize_record_size): Don't emit
	-Wpadded warning on TYPE_ARTIFICIAL rli->t.
	* ubsan.c (ubsan_get_type_descriptor_type,
	ubsan_get_source_location_type, ubsan_create_data): Set
	TYPE_ARTIFICIAL.
	* asan.c (asan_global_struct): Likewise.

	* c-c++-common/ubsan/pr94641.c: New test.
This commit is contained in:
Jakub Jelinek 2020-04-21 17:06:31 +02:00
parent 08d6ec14e6
commit 73f8e9dca5
6 changed files with 34 additions and 2 deletions

View File

@ -1,3 +1,13 @@
2020-04-21 Jakub Jelinek <jakub@redhat.com>
PR c/94641
* stor-layout.c (place_field, finalize_record_size): Don't emit
-Wpadded warning on TYPE_ARTIFICIAL rli->t.
* ubsan.c (ubsan_get_type_descriptor_type,
ubsan_get_source_location_type, ubsan_create_data): Set
TYPE_ARTIFICIAL.
* asan.c (asan_global_struct): Likewise.
2020-04-21 Duan bo <duanbo3@huawei.com>
PR target/94577

View File

@ -2661,6 +2661,7 @@ asan_global_struct (void)
TYPE_FIELDS (ret) = fields[0];
TYPE_NAME (ret) = type_decl;
TYPE_STUB_DECL (ret) = type_decl;
TYPE_ARTIFICIAL (ret) = 1;
layout_type (ret);
return ret;
}

View File

@ -1341,7 +1341,8 @@ place_field (record_layout_info rli, tree field)
Bump the cumulative size to multiple of field alignment. */
if (!targetm.ms_bitfield_layout_p (rli->t)
&& DECL_SOURCE_LOCATION (field) != BUILTINS_LOCATION)
&& DECL_SOURCE_LOCATION (field) != BUILTINS_LOCATION
&& !TYPE_ARTIFICIAL (rli->t))
warning (OPT_Wpadded, "padding struct to align %q+D", field);
/* If the alignment is still within offset_align, just align
@ -1775,7 +1776,8 @@ finalize_record_size (record_layout_info rli)
if (TREE_CONSTANT (unpadded_size)
&& simple_cst_equal (unpadded_size, TYPE_SIZE (rli->t)) == 0
&& input_location != BUILTINS_LOCATION)
&& input_location != BUILTINS_LOCATION
&& !TYPE_ARTIFICIAL (rli->t))
warning (OPT_Wpadded, "padding struct size to alignment boundary");
if (warn_packed && TREE_CODE (rli->t) == RECORD_TYPE

View File

@ -1,3 +1,8 @@
2020-04-21 Jakub Jelinek <jakub@redhat.com>
PR c/94641
* c-c++-common/ubsan/pr94641.c: New test.
2020-04-21 Patrick Palka <ppalka@redhat.com>
PR c++/94597

View File

@ -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);
}

View File

@ -229,6 +229,7 @@ ubsan_get_type_descriptor_type (void)
TYPE_FIELDS (ret) = fields[0];
TYPE_NAME (ret) = type_decl;
TYPE_STUB_DECL (ret) = type_decl;
TYPE_ARTIFICIAL (ret) = 1;
layout_type (ret);
ubsan_type_descriptor_type = ret;
return ret;
@ -277,6 +278,7 @@ ubsan_get_source_location_type (void)
TYPE_FIELDS (ret) = fields[0];
TYPE_NAME (ret) = type_decl;
TYPE_STUB_DECL (ret) = type_decl;
TYPE_ARTIFICIAL (ret) = 1;
layout_type (ret);
ubsan_source_location_type = ret;
return ret;
@ -593,6 +595,7 @@ ubsan_create_data (const char *name, int loccnt, const location_t *ploc, ...)
TYPE_FIELDS (ret) = fields[0];
TYPE_NAME (ret) = type_decl;
TYPE_STUB_DECL (ret) = type_decl;
TYPE_ARTIFICIAL (ret) = 1;
layout_type (ret);
/* Now, fill in the type. */