aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Sayle <roger@eyesopen.com>2005-01-10 23:55:33 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2005-01-10 23:55:33 +0000
commit18d002058ed0df083dc7cfa05dd3edd4849467f9 (patch)
tree869cc91b1972ffac3cf80eb5fab7a17adaa61084
parent316e72f2dd7293b52b55ac420529480538f07cf6 (diff)
downloadgcc-18d002058ed0df083dc7cfa05dd3edd4849467f9.zip
gcc-18d002058ed0df083dc7cfa05dd3edd4849467f9.tar.gz
gcc-18d002058ed0df083dc7cfa05dd3edd4849467f9.tar.bz2
re PR c++/19355 (ICE: tree check at c-common.c:2332)
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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/c-common.c7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/expr/pr19355-1.C11
4 files changed, 28 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3aac273..c4e50cb 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/c-common.c b/gcc/c-common.c
index a699cbc..fd6df50 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -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;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 90b149d..1bfdfb8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..ce11b81
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/pr19355-1.C
@@ -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))) {}
+}
+