From 471a58a941e6930f77843670271ad2cf6c68d7a0 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Tue, 14 Dec 2004 02:21:56 +0000 Subject: [PATCH] re PR c++/18968 (ICE: tree check: expected ssa_name, have addr_expr in vrp_hash) 2004-12-13 Andrew Pinski PR c++/18968 * g++.dg/opt/pr18968.C: New test. 2004-12-13 Andrew Pinski PR c++/18968 * class.c (build_base_path): Convert the zero constant to the correct type when comparing. From-SVN: r92121 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/class.c | 7 +++++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/opt/pr18968.C | 18 ++++++++++++++++++ 4 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/opt/pr18968.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 71cce5f6411..a90ffecede8 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2004-12-13 Andrew Pinski + + PR c++/18968 + * class.c (build_base_path): Convert the zero constant to the correct + type when comparing. + 2004-12-13 Mark Mitchell PR c++/18925 diff --git a/gcc/cp/class.c b/gcc/cp/class.c index f7e5c7b9083..9625acca7ce 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -295,8 +295,11 @@ build_base_path (enum tree_code code, /* Now that we've saved expr, build the real null test. */ if (null_test) - null_test = fold (build2 (NE_EXPR, boolean_type_node, - expr, integer_zero_node)); + { + tree zero = cp_convert (TREE_TYPE (expr), integer_zero_node); + null_test = fold (build2 (NE_EXPR, boolean_type_node, + expr, zero)); + } /* If this is a simple base reference, express it as a COMPONENT_REF. */ if (code == PLUS_EXPR && !virtual_access diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 957c5eb4cee..6b23ef11a18 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-12-13 Andrew Pinski + + PR c++/18968 + * g++.dg/opt/pr18968.C: New test. + 2004-12-13 Mark Mitchell PR c++/18925 diff --git a/gcc/testsuite/g++.dg/opt/pr18968.C b/gcc/testsuite/g++.dg/opt/pr18968.C new file mode 100644 index 00000000000..cce73b57971 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr18968.C @@ -0,0 +1,18 @@ +// { dg-do compile } +// { dg-options "-O1" } +struct X +{ + int i; +}; +struct Y : virtual X {}; +struct Z : Y {}; +struct A +{ + Z* p; + A(); +}; +A::A() : p(0) +{ + ((X*)(Y*)p)->i++; +} + -- 2.30.2