From: Richard Biener Date: Wed, 26 Nov 2014 15:16:24 +0000 (+0000) Subject: re PR tree-optimization/63738 (ssa corruption when compiled with -O3) X-Git-Tag: releases/gcc-5.1.0~2802 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5721768d285b6b474a2b73e42dcec156e52ef13d;p=thirdparty%2Fgcc.git re PR tree-optimization/63738 (ssa corruption when compiled with -O3) 2014-11-26 Richard Biener PR middle-end/63738 * tree-data-ref.c (split_constant_offset_1): Do not follow SSA edges for SSA names with SSA_NAME_OCCURS_IN_ABNORMAL_PHI. * gcc.dg/torture/pr63738.c: New testcase. From-SVN: r218088 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 34f66f95b2b4..79c5411c3247 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-11-26 Richard Biener + + PR middle-end/63738 + * tree-data-ref.c (split_constant_offset_1): Do not follow + SSA edges for SSA names with SSA_NAME_OCCURS_IN_ABNORMAL_PHI. + 2014-11-26 Richard Biener * fold-const.h (const_unop): Declare. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 19e7aa17c6a9..5c0ecd7cddb8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-11-26 Richard Biener + + PR middle-end/63738 + * gcc.dg/torture/pr63738.c: New testcase. + 2014-11-26 Ilya Enkovich PR bootstrap/63995 diff --git a/gcc/testsuite/gcc.dg/torture/pr63738.c b/gcc/testsuite/gcc.dg/torture/pr63738.c new file mode 100644 index 000000000000..de40a9c673d5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr63738.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ + +#include + +struct longjmp_buffer { + jmp_buf buf; +}; + +void plouf(); + +extern long interprete() +{ + long * sp; + int i; + long *args; + int n; + + struct longjmp_buffer raise_buf; + _setjmp (raise_buf.buf); + + plouf(); + sp -= 4; + for (i = 0; i < n; i++) + args[i] = sp[10-i]; + plouf(); + return 0; +} diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c index 909751c8ff3a..387da6cb40ec 100644 --- a/gcc/tree-data-ref.c +++ b/gcc/tree-data-ref.c @@ -674,6 +674,9 @@ split_constant_offset_1 (tree type, tree op0, enum tree_code code, tree op1, case SSA_NAME: { + if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (op0)) + return false; + gimple def_stmt = SSA_NAME_DEF_STMT (op0); enum tree_code subcode;