diff options
author | Andrew Pinski <pinskia@physics.uc.edu> | 2004-12-12 16:45:20 +0000 |
---|---|---|
committer | Andrew Pinski <pinskia@gcc.gnu.org> | 2004-12-12 08:45:20 -0800 |
commit | a5f712ff3f308c61bad9a71f075f304f367031bd (patch) | |
tree | 6b9af61f2a460eb0d5a22975239f5c95ddfd4b12 /gcc | |
parent | 902c2ed4ead835a619897aa11fe6cdee34106ae4 (diff) | |
download | gcc-a5f712ff3f308c61bad9a71f075f304f367031bd.zip gcc-a5f712ff3f308c61bad9a71f075f304f367031bd.tar.gz gcc-a5f712ff3f308c61bad9a71f075f304f367031bd.tar.bz2 |
re PR tree-optimization/18040 (ICE in for_each_index, at tree-ssa-loop-im.c:178)
2004-12-12 Andrew Pinski <pinskia@physics.uc.edu>
PR tree-opt/18040
* g++.dg/opt/ptrmem6.C: New test.
2004-12-12 Andrew Pinski <pinskia@physics.uc.edu>
PR tree-opt/18040
* expr.c (get_inner_reference): Remove NON_LVALUE_EXPR, NOP_EXPR,
CONVERT_EXPR cases.
(handled_component_p): Likewise.
From-SVN: r92051
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/expr.c | 19 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/opt/ptrmem6.C | 28 |
4 files changed, 40 insertions, 19 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 643de99..ba0229f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2004-12-12 Andrew Pinski <pinskia@physics.uc.edu> + + PR tree-opt/18040 + * expr.c (get_inner_reference): Remove NON_LVALUE_EXPR, NOP_EXPR, + CONVERT_EXPR cases. + (handled_component_p): Likewise. + 2004-12-12 Kazu Hirata <kazu@cs.umass.edu> * reg-stack.c (convert_regs_2): Free stack. @@ -5293,16 +5293,6 @@ get_inner_reference (tree exp, HOST_WIDE_INT *pbitsize, conversions that don't change the mode, and all view conversions except those that need to "step up" the alignment. */ - case NON_LVALUE_EXPR: - break; - - case NOP_EXPR: - case CONVERT_EXPR: - if (TYPE_MODE (TREE_TYPE (exp)) - != TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)))) - goto done; - break; - case VIEW_CONVERT_EXPR: if ((TYPE_ALIGN (TREE_TYPE (exp)) > TYPE_ALIGN (TREE_TYPE (TREE_OPERAND (exp, 0)))) @@ -5445,20 +5435,11 @@ handled_component_p (tree t) case COMPONENT_REF: case ARRAY_REF: case ARRAY_RANGE_REF: - case NON_LVALUE_EXPR: case VIEW_CONVERT_EXPR: case REALPART_EXPR: case IMAGPART_EXPR: return 1; - /* ??? Sure they are handled, but get_inner_reference may return - a different PBITSIZE, depending upon whether the expression is - wrapped up in a NOP_EXPR or not, e.g. for bitfields. */ - case NOP_EXPR: - case CONVERT_EXPR: - return (TYPE_MODE (TREE_TYPE (t)) - == TYPE_MODE (TREE_TYPE (TREE_OPERAND (t, 0)))); - default: return 0; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 50912ca9..96706b2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-12-12 Andrew Pinski <pinskia@physics.uc.edu> + + PR tree-opt/18040 + * g++.dg/opt/ptrmem6.C: New test. + 2004-12-11 Roger Sayle <roger@eyesopen.com> PR middle-end/18921 diff --git a/gcc/testsuite/g++.dg/opt/ptrmem6.C b/gcc/testsuite/g++.dg/opt/ptrmem6.C new file mode 100644 index 0000000..891c4ff --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/ptrmem6.C @@ -0,0 +1,28 @@ +// PR tree-opt/18040 +// { dg-do compile } +// { dg-options "-O3" } + +int PyObject_IsTrue(); +struct object_base +{ + void ptr() const; + void ptr1() const; +}; +struct object : public object_base +{ + typedef void (object::*bool_type)() const; + inline operator bool_type() const + { return PyObject_IsTrue() + ? &object_base::ptr : &object::ptr1; } +}; +void f(); +void g (void) +{ + for (unsigned n = 0; n < 100; ++n) + { + object kv; + if (kv) + f(); + } +} + |