tree-vn.c (vn_add): Handle TRUTH_*_EXPR.
authorRichard Guenther <rguenther@suse.de>
Wed, 25 Jun 2008 09:58:09 +0000 (09:58 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 25 Jun 2008 09:58:09 +0000 (09:58 +0000)
2008-06-25  Richard Guenther  <rguenther@suse.de>

* tree-vn.c (vn_add): Handle TRUTH_*_EXPR.
(vn_lookup): Likewise.

* g++.dg/torture/20080625-1.C: New testcase.

From-SVN: r137102

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/torture/20080625-1.C [new file with mode: 0644]
gcc/tree-vn.c

index 64423b1e8ad05fa1557b003203756b17a0d4ca0d..c22cbe718040b75b9cdbe9b41c421e33fc976cd1 100644 (file)
@@ -1,3 +1,8 @@
+2008-06-25  Richard Guenther  <rguenther@suse.de>
+
+       * tree-vn.c (vn_add): Handle TRUTH_*_EXPR.
+       (vn_lookup): Likewise.
+
 2008-06-25  Richard Guenther  <rguenther@suse.de>
 
        PR tree-optimization/35518
index 2c45e39f42eddc754f68f180ffb05891abac2159..20c6345f6d1118d673f3a2c3869efd015bed4aaf 100644 (file)
@@ -1,3 +1,7 @@
+2008-06-25  Richard Guenther  <rguenther@suse.de>
+
+       * g++.dg/torture/20080625-1.C: New testcase.
+
 2008-06-24  Paul Thomas  <pault@gcc.gnu.org>
 
        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 (file)
index 0000000..b18c282
--- /dev/null
@@ -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;
+}
index c3cc239b19ff4195b4c86b63900e48875651abda..7ec19cd4b39d5737177d22eed1b0f7066aa2afaa 100644 (file)
@@ -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 ();
     }