From: Uros Bizjak Date: Mon, 21 Sep 2015 19:08:38 +0000 (+0200) Subject: re PR middle-end/67619 (ICE at -O1 and above on x86_64-linux-gnu in int_mode_for_mode... X-Git-Tag: releases/gcc-4.9.4~592 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d6043a753edcdc33cc6ab35bbe848906608142a3;p=thirdparty%2Fgcc.git re PR middle-end/67619 (ICE at -O1 and above on x86_64-linux-gnu in int_mode_for_mode, at stor-layout.c:425) PR middle-end/67619 * except.c (expand_builtin_eh_return): Use copy_addr_to_reg to copy the address to a register. testsuite/ChangeLog: PR middle-end/67619 * gcc.dg/torture/pr67619.c: New test. * lib/target-supports.exp (check_effective_target_builtin_eh_return): New procedure. From-SVN: r227984 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c9caa9f94c07..69c3bce6394c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-09-21 Uros Bizjak + + PR middle-end/67619 + * except.c (expand_builtin_eh_return): Use copy_addr_to_reg to copy + the address to a register. + 2015-09-19 John David Anglin * config/pa/pa.c (pa_function_ok_for_sibcall): Remove special treatment diff --git a/gcc/except.c b/gcc/except.c index 908954cbbbf0..010e7dfb339f 100644 --- a/gcc/except.c +++ b/gcc/except.c @@ -2223,7 +2223,7 @@ expand_builtin_eh_return (tree stackadj_tree ATTRIBUTE_UNUSED, VOIDmode, EXPAND_NORMAL); tmp = convert_memory_address (Pmode, tmp); if (!crtl->eh.ehr_stackadj) - crtl->eh.ehr_stackadj = copy_to_reg (tmp); + crtl->eh.ehr_stackadj = copy_addr_to_reg (tmp); else if (tmp != crtl->eh.ehr_stackadj) emit_move_insn (crtl->eh.ehr_stackadj, tmp); #endif @@ -2232,7 +2232,7 @@ expand_builtin_eh_return (tree stackadj_tree ATTRIBUTE_UNUSED, VOIDmode, EXPAND_NORMAL); tmp = convert_memory_address (Pmode, tmp); if (!crtl->eh.ehr_handler) - crtl->eh.ehr_handler = copy_to_reg (tmp); + crtl->eh.ehr_handler = copy_addr_to_reg (tmp); else if (tmp != crtl->eh.ehr_handler) emit_move_insn (crtl->eh.ehr_handler, tmp); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b5a53a305b94..25175e4c6c07 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2015-09-21 Uros Bizjak + + PR middle-end/67619 + * gcc.dg/torture/pr67619.c: New test. + * lib/target-supports.exp (check_effective_target_builtin_eh_return): + New procedure. + 2015-08-27 Pat Haugen Backport from mainline: diff --git a/gcc/testsuite/gcc.dg/torture/pr67619.c b/gcc/testsuite/gcc.dg/torture/pr67619.c new file mode 100644 index 000000000000..9c6bb6e31715 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr67619.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target builtin_eh_return } */ + +void +foo () +{ + unsigned long l; + void *p = 0; + + __builtin_unwind_init (); + l = 0; + __builtin_eh_return (l, p); +} diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 1bb6a4784b5a..47de9943f0d1 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -5852,3 +5852,12 @@ proc force_conventional_output_for { test } { } } +# Return 1 if target supports __builtin_eh_return +proc check_effective_target_builtin_eh_return { } { + return [check_no_compiler_messages builtin_eh_return object { + void test (long l, void *p) + { + __builtin_eh_return (l, p); + } + } "" ] +}