On Wed, 30 Apr 2014, Richard Biener wrote: > > With no longer recording alias subsets using BINFOs we now emit > bogus alias warnings for accessing empty bases. The following > avoids this, accessing those with an incompatible alias-set is > harmless. > > Bootstrapped and tested on x86_64-unknown-linux-gnu, ok?
Ping. > Thanks, > Richard. > > 2014-04-30 Richard Biener <rguent...@suse.de> > > PR c++/61004 > * typeck.c (cp_build_indirect_ref): Do not emit strict-aliasing > warnings for accessing empty classes. > > * g++.dg/diagnostic/pr61004.C: New testcase. > > Index: gcc/cp/typeck.c > =================================================================== > --- gcc/cp/typeck.c (revision 209928) > +++ gcc/cp/typeck.c (working copy) > @@ -2921,8 +2921,9 @@ cp_build_indirect_ref (tree ptr, ref_ope > of the result is "T." */ > tree t = TREE_TYPE (type); > > - if (CONVERT_EXPR_P (ptr) > - || TREE_CODE (ptr) == VIEW_CONVERT_EXPR) > + if ((CONVERT_EXPR_P (ptr) > + || TREE_CODE (ptr) == VIEW_CONVERT_EXPR) > + && (!CLASS_TYPE_P (t) || !CLASSTYPE_EMPTY_P (t))) > { > /* If a warning is issued, mark it to avoid duplicates from > the backend. This only needs to be done at > Index: gcc/testsuite/g++.dg/diagnostic/pr61004.C > =================================================================== > --- gcc/testsuite/g++.dg/diagnostic/pr61004.C (revision 0) > +++ gcc/testsuite/g++.dg/diagnostic/pr61004.C (working copy) > @@ -0,0 +1,11 @@ > +// { dg-do compile } > +// { dg-options "-O2 -Wall" } > + > +struct A{ }; > +struct B:A{}; > +void f(A const&); > +int main() > +{ > + B b; > + f(b); // { dg-bogus "strict-aliasing" } > +} >