]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/19355 (ICE: tree check at c-common.c:2332)
authorRoger Sayle <roger@eyesopen.com>
Mon, 10 Jan 2005 23:55:33 +0000 (23:55 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Mon, 10 Jan 2005 23:55:33 +0000 (23:55 +0000)
PR c++/19355
* c-common.c (c_common_truthvalue_conversion): TRUTH_NOT_EXPR is a
unary operator and can't be treated as a binary/comparison operator.

* g++.dg/expr/pr19355-1.C: New test case.

From-SVN: r93159

gcc/ChangeLog
gcc/c-common.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/expr/pr19355-1.C [new file with mode: 0644]

index 3aac2730ba470a4ceda8809d2f013a410a89bf08..c4e50cbee379ac6cedd22c571da0cb9daa7b3829 100644 (file)
@@ -1,3 +1,9 @@
+2005-01-10  Roger Sayle  <roger@eyesopen.com>
+
+       PR c++/19355
+       * c-common.c (c_common_truthvalue_conversion): TRUTH_NOT_EXPR is a
+       unary operator and can't be treated as a binary/comparison operator.
+
 2005-01-10  Richard Henderson  <rth@redhat.com>
 
        * config/i386/i386.c (ix86_function_value): Use type_natural_mode.
index a699cbcdc63432b03487812be2d168bc92274f22..fd6df502ca92bb60cf09c7e4104da3683bceb782 100644 (file)
@@ -2326,12 +2326,17 @@ c_common_truthvalue_conversion (tree expr)
     case TRUTH_AND_EXPR:
     case TRUTH_OR_EXPR:
     case TRUTH_XOR_EXPR:
-    case TRUTH_NOT_EXPR:
       if (TREE_TYPE (expr) != truthvalue_type_node)
        return build2 (TREE_CODE (expr), truthvalue_type_node,
                       TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1));
       return expr;
 
+    case TRUTH_NOT_EXPR:
+      if (TREE_TYPE (expr) != truthvalue_type_node)
+       return build1 (TREE_CODE (expr), truthvalue_type_node,
+                      TREE_OPERAND (expr, 0));
+      return expr;
+
     case ERROR_MARK:
       return expr;
 
index 90b149d3025bdec2edca39b726ee491332604c10..1bfdfb84b1dc3bbbedc05e8bdcf276c745d53092 100644 (file)
@@ -1,3 +1,8 @@
+2005-01-10  Roger Sayle  <roger@eyesopen.com>
+
+       PR c++/19355
+       * g++.dg/expr/pr19355-1.C: New test case.
+
 2005-01-10  Laurent GUERBY <laurent@guerby.net>
 
        * ada/acats/tests/c4/c456001.a: New from ACATS 2.5L
diff --git a/gcc/testsuite/g++.dg/expr/pr19355-1.C b/gcc/testsuite/g++.dg/expr/pr19355-1.C
new file mode 100644 (file)
index 0000000..ce11b81
--- /dev/null
@@ -0,0 +1,11 @@
+// PR c++/19355
+// { dg-do compile }
+
+typedef bool Boolean;
+extern Boolean is_nil ();
+void f(void)
+{
+  unsigned int ilen;
+  if(!((ilen > 0 ? !is_nil () : 1))) {}
+}
+