[Bug c++/81145] New: bogus "dereferencing type-punned pointer will break strict-aliasing rules" diagnostic with incomplete class type
richard-gccbugzilla at metafoo dot co.uk
gcc-bugzilla@gcc.gnu.org
Tue Jun 20 20:25:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81145
Bug ID: 81145
Summary: bogus "dereferencing type-punned pointer will break
strict-aliasing rules" diagnostic with incomplete
class type
Product: gcc
Version: 7.0.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: richard-gccbugzilla at metafoo dot co.uk
Target Milestone: ---
Testcase:
struct B { int n; };
struct A
#ifndef BUG
{ B b; }
#endif
;
extern A a;
int n = reinterpret_cast<B*>(&a)->n;
This produces a bogus "dereferencing type-punned pointer will break
strict-aliasing rules" diagnostic with -DBUG, but correctly suppresses the
warning when the definition of A is visible.
Note that under C++ P0137R1 / DR1776, the A object is pointer-interconvertible
with its b member, so the reinterpret_cast produces a usable pointer to a.b,
regardless of whether the definition of A is visible.
Perhaps GCC's TBAA should be less aggressive when comparing an incomplete type
against (at least) a standard-layout type?
More information about the Gcc-bugs
mailing list