This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH][C++] Fix PR61004
- From: Richard Biener <rguenther at suse dot de>
- To: gcc-patches at gcc dot gnu dot org
- Date: Wed, 30 Apr 2014 13:57:37 +0200 (CEST)
- Subject: [PATCH][C++] Fix PR61004
- Authentication-results: sourceware.org; auth=none
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?
Thanks,
Richard.
2014-04-30 Richard Biener <rguenther@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" }
+}