From: Jakub Jelinek Date: Thu, 7 Jul 2016 21:49:12 +0000 (+0200) Subject: backport: re PR tree-optimization/70169 (ICE at -O1 and above on x86_64-linux-gnu... X-Git-Tag: releases/gcc-4.9.4~91 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f3790390a97fffc4627e4dfef0284f485b441d6c;p=thirdparty%2Fgcc.git backport: 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) Backported from mainline 2016-03-11 Jakub Jelinek 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: r238139 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f05665ea44c8..1abaf860f55b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,13 @@ 2016-07-07 Jakub Jelinek Backported from mainline + 2016-03-11 Jakub Jelinek + + 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-09 Jakub Jelinek PR tree-optimization/70152 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index aec652448f32..9a70102ba3e4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2016-07-07 Jakub Jelinek Backported from mainline + 2016-03-11 Jakub Jelinek + + PR tree-optimization/70169 + * gcc.dg/pr70169.c: New test. + 2016-03-09 Jakub Jelinek PR tree-optimization/70152 diff --git a/gcc/testsuite/gcc.dg/pr70169.c b/gcc/testsuite/gcc.dg/pr70169.c new file mode 100644 index 000000000000..8d08f5c64722 --- /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 e71519acf7b9..aabca0f67e32 100644 --- a/gcc/tree-ssa-loop.c +++ b/gcc/tree-ssa-loop.c @@ -621,6 +621,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"; @@ -636,11 +638,9 @@ gen_lsm_tmp_name (tree ref) break; case INTEGER_CST: + default: /* Nothing. */ break; - - default: - gcc_unreachable (); } }