diff options
author | Andrew Pinski <pinskia@physics.uc.edu> | 2004-12-14 02:21:56 +0000 |
---|---|---|
committer | Andrew Pinski <pinskia@gcc.gnu.org> | 2004-12-13 18:21:56 -0800 |
commit | 471a58a941e6930f77843670271ad2cf6c68d7a0 (patch) | |
tree | 9f43bd84b3b5dedaae0dc6e2e8dd95c7949e244b /gcc | |
parent | 532b37d9b8042da2c173b24403412e355e05b5a8 (diff) | |
download | gcc-471a58a941e6930f77843670271ad2cf6c68d7a0.zip gcc-471a58a941e6930f77843670271ad2cf6c68d7a0.tar.gz gcc-471a58a941e6930f77843670271ad2cf6c68d7a0.tar.bz2 |
re PR c++/18968 (ICE: tree check: expected ssa_name, have addr_expr in vrp_hash)
2004-12-13 Andrew Pinski <pinskia@physics.uc.edu>
PR c++/18968
* g++.dg/opt/pr18968.C: New test.
2004-12-13 Andrew Pinski <pinskia@physics.uc.edu>
PR c++/18968
* class.c (build_base_path): Convert the zero constant to the correct
type when comparing.
From-SVN: r92121
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/class.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/opt/pr18968.C | 18 |
4 files changed, 34 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 71cce5f..a90ffec 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2004-12-13 Andrew Pinski <pinskia@physics.uc.edu> + + PR c++/18968 + * class.c (build_base_path): Convert the zero constant to the correct + type when comparing. + 2004-12-13 Mark Mitchell <mark@codesourcery.com> PR c++/18925 diff --git a/gcc/cp/class.c b/gcc/cp/class.c index f7e5c7b..9625acc 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 957c5eb..6b23ef1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-12-13 Andrew Pinski <pinskia@physics.uc.edu> + + PR c++/18968 + * g++.dg/opt/pr18968.C: New test. + 2004-12-13 Mark Mitchell <mark@codesourcery.com> 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 0000000..cce73b5 --- /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++; +} + |