aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2008-06-06 15:23:04 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2008-06-06 15:23:04 +0200
commit673390625d47454c13f53fdf229bb3565ee6b2fc (patch)
tree2965765652d726e67bf65292d51694cbda2c191d
parenta68ab3517348178c71d9adcdefbc81de2d8c7390 (diff)
downloadgcc-673390625d47454c13f53fdf229bb3565ee6b2fc.zip
gcc-673390625d47454c13f53fdf229bb3565ee6b2fc.tar.gz
gcc-673390625d47454c13f53fdf229bb3565ee6b2fc.tar.bz2
re PR target/36362 (ICE in simplify_subreg)
PR target/36362 * gimplify.c (gimplify_expr) <case TRUTH_NOT_EXPR>: If *expr_p type is not bool, boolify the whole *expr_p and convert to the desired type. * gcc.c-torture/execute/20080529-1.c: New test. From-SVN: r136434
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/gimplify.c10
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20080529-1.c17
4 files changed, 36 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ce1eae6..c7da7dd 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2008-06-06 Jakub Jelinek <jakub@redhat.com>
+ PR target/36362
+ * gimplify.c (gimplify_expr) <case TRUTH_NOT_EXPR>: If *expr_p type
+ is not bool, boolify the whole *expr_p and convert to the desired type.
+
+2008-06-06 Jakub Jelinek <jakub@redhat.com>
+
* c-cppbuiltin.c (c_cpp_builtins): Change _OPENMP value to
200805.
* langhooks.h (struct lang_hooks_for_decls): Add omp_finish_clause.
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 0c2e5e2..47a2fe7 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -5890,8 +5890,14 @@ gimplify_expr (tree *expr_p, tree *pre_p, tree *post_p,
break;
case TRUTH_NOT_EXPR:
- TREE_OPERAND (*expr_p, 0)
- = gimple_boolify (TREE_OPERAND (*expr_p, 0));
+ if (TREE_CODE (TREE_TYPE (*expr_p)) != BOOLEAN_TYPE)
+ {
+ tree type = TREE_TYPE (*expr_p);
+ *expr_p = fold_convert (type, gimple_boolify (*expr_p));
+ ret = GS_OK;
+ break;
+ }
+
ret = gimplify_expr (&TREE_OPERAND (*expr_p, 0), pre_p, post_p,
is_gimple_val, fb_rvalue);
recalculate_side_effects (*expr_p);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 73e4a5e..a1ce73c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2008-06-06 Jakub Jelinek <jakub@redhat.com>
+ PR target/36362
+ * gcc.c-torture/execute/20080529-1.c: New test.
+
+2008-06-06 Jakub Jelinek <jakub@redhat.com>
+
* gcc.dg/gomp/collapse-1.c: New test.
* gcc.dg/gomp/nesting-1.c: New test.
* g++.dg/gomp/task-1.C: New test.
diff --git a/gcc/testsuite/gcc.c-torture/execute/20080529-1.c b/gcc/testsuite/gcc.c-torture/execute/20080529-1.c
new file mode 100644
index 0000000..cd429808
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/20080529-1.c
@@ -0,0 +1,17 @@
+/* PR target/36362 */
+
+extern void abort (void);
+
+int
+test (float c)
+{
+ return !!c * 7LL == 0;
+}
+
+int
+main (void)
+{
+ if (test (1.0f) != 0)
+ abort ();
+ return 0;
+}