aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2016-03-11 13:05:58 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2016-03-11 13:05:58 +0100
commit02d472a2cb30a5692a57b2fc021b2fa043c84213 (patch)
tree65d78c3207bb985720bd097355723a2b16c5dc5f /gcc
parent0f9befa1413555608a7f1d1c6bb1982101314a7c (diff)
downloadgcc-02d472a2cb30a5692a57b2fc021b2fa043c84213.zip
gcc-02d472a2cb30a5692a57b2fc021b2fa043c84213.tar.gz
gcc-02d472a2cb30a5692a57b2fc021b2fa043c84213.tar.bz2
re PR tree-optimization/70169 (ICE at -O1 and above on x86_64-linux-gnu in gen_lsm_tmp_name, at tree-ssa-loop.c:791)
PR tree-optimization/70169 * tree-ssa-loop.c (gen_lsm_tmp_name): Handle FUNCTION_DECL and LABEL_DECL like VAR_DECL. Emit nothing instead of gcc_unreachable for unknown codes. * gcc.dg/pr70169.c: New test. From-SVN: r234136
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr70169.c40
-rw-r--r--gcc/tree-ssa-loop.c6
4 files changed, 55 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9c92d9b..171a52d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2016-03-11 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/70169
+ * tree-ssa-loop.c (gen_lsm_tmp_name): Handle FUNCTION_DECL and
+ LABEL_DECL like VAR_DECL. Emit nothing instead of gcc_unreachable
+ for unknown codes.
+
2016-03-11 Ilya Enkovich <enkovich.gnu@gmail.com>
Jakub Jelinek <jakub@redhat.com>
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f850e46..75fe4ac 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-03-11 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/70169
+ * gcc.dg/pr70169.c: New test.
+
2016-03-11 Ilya Enkovich <enkovich.gnu@gmail.com>
PR target/70160
diff --git a/gcc/testsuite/gcc.dg/pr70169.c b/gcc/testsuite/gcc.dg/pr70169.c
new file mode 100644
index 0000000..8d08f5c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr70169.c
@@ -0,0 +1,40 @@
+/* PR tree-optimization/70169 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-strict-aliasing -fno-tree-dce" } */
+
+int printf (const char *, ...);
+
+void
+foo ()
+{
+ unsigned char *p = (unsigned char *) &printf;
+ for (;;)
+ (*p)++;
+}
+
+void
+bar (int x)
+{
+ unsigned char *p = (unsigned char *) &printf;
+ int i;
+ for (i = 0; i < x; i++)
+ (*p)++;
+}
+
+void
+baz (int x, int y)
+{
+ unsigned char *p = (unsigned char *) &&lab;
+ int i;
+ if (y)
+ {
+ for (i = 0; i < x; i++)
+ (*p)++;
+ }
+ else
+ {
+ lab:
+ asm volatile ("");
+ foo ();
+ }
+}
diff --git a/gcc/tree-ssa-loop.c b/gcc/tree-ssa-loop.c
index 4c39fbc..06354e3 100644
--- a/gcc/tree-ssa-loop.c
+++ b/gcc/tree-ssa-loop.c
@@ -769,6 +769,8 @@ gen_lsm_tmp_name (tree ref)
case SSA_NAME:
case VAR_DECL:
case PARM_DECL:
+ case FUNCTION_DECL:
+ case LABEL_DECL:
name = get_name (ref);
if (!name)
name = "D";
@@ -784,11 +786,9 @@ gen_lsm_tmp_name (tree ref)
break;
case INTEGER_CST:
+ default:
/* Nothing. */
break;
-
- default:
- gcc_unreachable ();
}
}