Since r141534 (PR37542), the following testcase segfaults during fre at -O1 and higher: template <typename To, typename From> static inline To bitwise_cast (From from) { union { From f; To t; } u; u.f = from; return u.t; } extern void foo (unsigned char *); double bar () { unsigned char b[sizeof (unsigned long long)]; foo (b); return bitwise_cast<double> (*(unsigned long long *) b); }
I will have a looksee.
I am testing the following Index: tree-ssa-sccvn.c =================================================================== --- tree-ssa-sccvn.c (revision 145876) +++ tree-ssa-sccvn.c (working copy) @@ -257,9 +257,10 @@ vn_get_expr_for (tree name) switch (TREE_CODE_CLASS (gimple_assign_rhs_code (def_stmt))) { case tcc_reference: - if (gimple_assign_rhs_code (def_stmt) == VIEW_CONVERT_EXPR - || gimple_assign_rhs_code (def_stmt) == REALPART_EXPR - || gimple_assign_rhs_code (def_stmt) == IMAGPART_EXPR) + if ((gimple_assign_rhs_code (def_stmt) == VIEW_CONVERT_EXPR + || gimple_assign_rhs_code (def_stmt) == REALPART_EXPR + || gimple_assign_rhs_code (def_stmt) == IMAGPART_EXPR) + && TREE_CODE (gimple_assign_rhs1 (def_stmt)) == SSA_NAME) expr = fold_build1 (gimple_assign_rhs_code (def_stmt), gimple_expr_type (def_stmt), TREE_OPERAND (gimple_assign_rhs1 (def_stmt), 0));
Subject: Bug 39713 Author: rguenth Date: Sat Apr 11 07:34:09 2009 New Revision: 145951 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=145951 Log: 2009-04-11 Richard Guenther <rguenther@suse.de> PR tree-optimization/39713 * tree-ssa-sccvn.c (vn_get_expr_for): Make sure built reference trees have SSA_NAME operands. * g++.dg/torture/pr39713.C: New testcase. Added: trunk/gcc/testsuite/g++.dg/torture/pr39713.C Modified: trunk/gcc/ChangeLog trunk/gcc/testsuite/ChangeLog trunk/gcc/tree-ssa-sccvn.c
Subject: Bug 39713 Author: rguenth Date: Sat Apr 11 07:42:52 2009 New Revision: 145952 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=145952 Log: 2009-04-11 Richard Guenther <rguenther@suse.de> PR tree-optimization/39713 * tree-ssa-sccvn.c (vn_get_expr_for): Make sure built reference trees have SSA_NAME operands. * g++.dg/torture/pr39713.C: New testcase. Added: branches/gcc-4_4-branch/gcc/testsuite/g++.dg/torture/pr39713.C Modified: branches/gcc-4_4-branch/gcc/ChangeLog branches/gcc-4_4-branch/gcc/testsuite/ChangeLog branches/gcc-4_4-branch/gcc/tree-ssa-sccvn.c
Fixe.d