diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a4dcdb2773ed..fd5194075831 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2014-06-05 Richard Biener + + PR c++/61004 + * typeck.c (cp_build_indirect_ref): Do not emit strict-aliasing + warnings for accessing empty classes. + 2014-06-05 Marek Polacek PR c/49706 diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 4a876f948888..fa9047513258 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -2935,8 +2935,9 @@ cp_build_indirect_ref (tree ptr, ref_operator errorstring, 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 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c43536ff977b..5073054e4aa5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-06-05 Richard Biener + + PR c++/61004 + * g++.dg/diagnostic/pr61004.C: New testcase. + 2014-06-05 Yuri Rumyantsev * gcc.dg/torture/pr61319.c: New test. diff --git a/gcc/testsuite/g++.dg/diagnostic/pr61004.C b/gcc/testsuite/g++.dg/diagnostic/pr61004.C new file mode 100644 index 000000000000..3bf66bed7a46 --- /dev/null +++ b/gcc/testsuite/g++.dg/diagnostic/pr61004.C @@ -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" } +}