Guard notes for -Waddress-of-packed-member on warning emission (PR c/89985)
gcc/c-family/ChangeLog: PR c/89985 * c-warn.c (check_address_or_pointer_of_packed_member): Add auto_diagnostic_group. Guard inform calls by result of warning_at call. gcc/testsuite/ChangeLog: PR c/89985 * c-c++-common/pr89985.c: New test. From-SVN: r270169
This commit is contained in:
parent
fe7c4fa981
commit
34facf20ab
|
@ -1,3 +1,10 @@
|
|||
2019-04-05 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
PR c/89985
|
||||
* c-warn.c (check_address_or_pointer_of_packed_member): Add
|
||||
auto_diagnostic_group. Guard inform calls by result of
|
||||
warning_at call.
|
||||
|
||||
2019-04-05 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c++/89973 - -Waddress-of-packed-member ICE with invalid conversion.
|
||||
|
|
|
@ -2783,18 +2783,21 @@ check_address_or_pointer_of_packed_member (tree type, tree rhs)
|
|||
unsigned int rhs_align = min_align_of_type (rhstype);
|
||||
if (rhs_align < type_align)
|
||||
{
|
||||
auto_diagnostic_group d;
|
||||
location_t location = EXPR_LOC_OR_LOC (rhs, input_location);
|
||||
warning_at (location, OPT_Waddress_of_packed_member,
|
||||
"converting a packed %qT pointer (alignment %d) "
|
||||
"to a %qT pointer (alignment %d) may result in an "
|
||||
"unaligned pointer value",
|
||||
rhstype, rhs_align, type, type_align);
|
||||
tree decl = TYPE_STUB_DECL (rhstype);
|
||||
if (decl)
|
||||
inform (DECL_SOURCE_LOCATION (decl), "defined here");
|
||||
decl = TYPE_STUB_DECL (type);
|
||||
if (decl)
|
||||
inform (DECL_SOURCE_LOCATION (decl), "defined here");
|
||||
if (warning_at (location, OPT_Waddress_of_packed_member,
|
||||
"converting a packed %qT pointer (alignment %d) "
|
||||
"to a %qT pointer (alignment %d) may result in "
|
||||
"an unaligned pointer value",
|
||||
rhstype, rhs_align, type, type_align))
|
||||
{
|
||||
tree decl = TYPE_STUB_DECL (rhstype);
|
||||
if (decl)
|
||||
inform (DECL_SOURCE_LOCATION (decl), "defined here");
|
||||
decl = TYPE_STUB_DECL (type);
|
||||
if (decl)
|
||||
inform (DECL_SOURCE_LOCATION (decl), "defined here");
|
||||
}
|
||||
}
|
||||
}
|
||||
return NULL_TREE;
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2019-04-05 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
PR c/89985
|
||||
* c-c++-common/pr89985.c: New test.
|
||||
|
||||
2019-04-05 Christophe Lyon <christophe.lyon@linaro.org>
|
||||
|
||||
PR c/71598
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
/* Ensure that -Waddress-of-packed-member doesn't emit notes when
|
||||
suppressed via -w, rather than -Wno-address-of-packed-member. */
|
||||
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-w" } */
|
||||
|
||||
struct a { /* { dg-bogus "defined here" } */
|
||||
void *ptr;
|
||||
} __attribute__((packed));
|
||||
|
||||
struct b { /* { dg-bogus "defined here" } */
|
||||
void *ptr;
|
||||
};
|
||||
|
||||
void
|
||||
test (struct a *p)
|
||||
{
|
||||
struct b *q = (struct b *)p;
|
||||
}
|
Loading…
Reference in New Issue