From: Richard Guenther Date: Wed, 25 Jun 2008 09:58:09 +0000 (+0000) Subject: tree-vn.c (vn_add): Handle TRUTH_*_EXPR. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8ef834ca4defdd75ad6b9bb329a95eb5cf55823b;p=gcc.git tree-vn.c (vn_add): Handle TRUTH_*_EXPR. 2008-06-25 Richard Guenther * tree-vn.c (vn_add): Handle TRUTH_*_EXPR. (vn_lookup): Likewise. * g++.dg/torture/20080625-1.C: New testcase. From-SVN: r137102 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 64423b1e8ad..c22cbe71804 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2008-06-25 Richard Guenther + + * tree-vn.c (vn_add): Handle TRUTH_*_EXPR. + (vn_lookup): Likewise. + 2008-06-25 Richard Guenther PR tree-optimization/35518 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2c45e39f42e..20c6345f6d1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2008-06-25 Richard Guenther + + * g++.dg/torture/20080625-1.C: New testcase. + 2008-06-24 Paul Thomas PR fortran/36371 diff --git a/gcc/testsuite/g++.dg/torture/20080625-1.C b/gcc/testsuite/g++.dg/torture/20080625-1.C new file mode 100644 index 00000000000..b18c28226b9 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/20080625-1.C @@ -0,0 +1,27 @@ +extern "C" { + typedef unsigned char sal_Bool; + typedef struct _rtl_uString { + } rtl_uString; + void rtl_uString_release( rtl_uString * str ) throw (); +} +class OUString { + rtl_uString * pData; +public: + OUString() {} + ~OUString() { + rtl_uString_release( pData ); + } + sal_Bool equalsIgnoreAsciiCase( const OUString & str ) const; +}; +bool findAndRemove(); +long getAttributeProps() +{ + long nAttrs = 0; + OUString aValue; + if (findAndRemove() + && aValue.equalsIgnoreAsciiCase(OUString())) + ; + else + nAttrs |= 1; + return nAttrs; +} diff --git a/gcc/tree-vn.c b/gcc/tree-vn.c index c3cc239b19f..7ec19cd4b39 100644 --- a/gcc/tree-vn.c +++ b/gcc/tree-vn.c @@ -196,12 +196,19 @@ vn_add (tree expr, tree val) SSA_NAME_VALUE (expr) = val; break; } - else if (TREE_CODE (expr) == ADDR_EXPR) + switch (TREE_CODE (expr)) { + case ADDR_EXPR: + case TRUTH_AND_EXPR: + case TRUTH_OR_EXPR: + case TRUTH_XOR_EXPR: + case TRUTH_NOT_EXPR: vn_nary_op_insert (expr, val); - break; + break; + default: + gcc_unreachable (); } - /* FALLTHROUGH */ + break; default: gcc_unreachable (); } @@ -263,9 +270,18 @@ vn_lookup (tree expr) return vn_reference_lookup (expr, NULL, false); else if (TREE_CODE (expr) == SSA_NAME) return SSA_NAME_VALUE (expr); - else if (TREE_CODE (expr) == ADDR_EXPR) - return vn_nary_op_lookup (expr); - /* FALLTHROUGH */ + switch (TREE_CODE (expr)) + { + case ADDR_EXPR: + case TRUTH_AND_EXPR: + case TRUTH_OR_EXPR: + case TRUTH_XOR_EXPR: + case TRUTH_NOT_EXPR: + return vn_nary_op_lookup (expr); + default: + gcc_unreachable (); + } + break; default: gcc_unreachable (); }