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:
parent
08d6ec14e6
commit
73f8e9dca5
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
11
gcc/testsuite/c-c++-common/ubsan/pr94641.c
Normal file
11
gcc/testsuite/c-c++-common/ubsan/pr94641.c
Normal 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);
|
||||
}
|
@ -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. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user