Commit 34facf20 by David Malcolm Committed by David Malcolm

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
parent fe7c4fa9
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> 2019-04-05 Marek Polacek <polacek@redhat.com>
PR c++/89973 - -Waddress-of-packed-member ICE with invalid conversion. 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) ...@@ -2783,18 +2783,21 @@ check_address_or_pointer_of_packed_member (tree type, tree rhs)
unsigned int rhs_align = min_align_of_type (rhstype); unsigned int rhs_align = min_align_of_type (rhstype);
if (rhs_align < type_align) if (rhs_align < type_align)
{ {
auto_diagnostic_group d;
location_t location = EXPR_LOC_OR_LOC (rhs, input_location); location_t location = EXPR_LOC_OR_LOC (rhs, input_location);
warning_at (location, OPT_Waddress_of_packed_member, if (warning_at (location, OPT_Waddress_of_packed_member,
"converting a packed %qT pointer (alignment %d) " "converting a packed %qT pointer (alignment %d) "
"to a %qT pointer (alignment %d) may result in an " "to a %qT pointer (alignment %d) may result in "
"unaligned pointer value", "an unaligned pointer value",
rhstype, rhs_align, type, type_align); rhstype, rhs_align, type, type_align))
tree decl = TYPE_STUB_DECL (rhstype); {
if (decl) tree decl = TYPE_STUB_DECL (rhstype);
inform (DECL_SOURCE_LOCATION (decl), "defined here"); if (decl)
decl = TYPE_STUB_DECL (type); inform (DECL_SOURCE_LOCATION (decl), "defined here");
if (decl) decl = TYPE_STUB_DECL (type);
inform (DECL_SOURCE_LOCATION (decl), "defined here"); if (decl)
inform (DECL_SOURCE_LOCATION (decl), "defined here");
}
} }
} }
return NULL_TREE; return NULL_TREE;
......
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> 2019-04-05 Christophe Lyon <christophe.lyon@linaro.org>
PR c/71598 PR c/71598
......
/* 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;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment