diff options
author | Greta Yorsh <greta.yorsh@arm.com> | 2013-05-24 16:15:44 +0100 |
---|---|---|
committer | Greta Yorsh <gretay@gcc.gnu.org> | 2013-05-24 16:15:44 +0100 |
commit | 2c4d73e7859d07f8f33e0d261dcd05488cafe22b (patch) | |
tree | d48eed00c353a8a9d1532e5e6625886730e578af | |
parent | be37dae99acd5f8212f7bf008a85582f32ff4ce7 (diff) | |
download | gcc-2c4d73e7859d07f8f33e0d261dcd05488cafe22b.zip gcc-2c4d73e7859d07f8f33e0d261dcd05488cafe22b.tar.gz gcc-2c4d73e7859d07f8f33e0d261dcd05488cafe22b.tar.bz2 |
backport: re PR rtl-optimization/56732 (ICE in advance_target_bb)
Backported from mainline
2013-05-02 Greta Yorsh <Greta.Yorsh@arm.com>
gcc/ChangeLog
PR target/56732
* config/arm/arm.c (arm_expand_epilogue): Check really_return before
generating simple_return for naked functions.
gcc/testsuite/ChangeLog
PR target/56732
* gcc.target/arm/pr56732-1.c: New test.
From-SVN: r199296
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/arm/arm.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/arm/pr56732-1.c | 20 |
4 files changed, 39 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2f39b05..f2f63f2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2013-05-24 Greta Yorsh <Greta.Yorsh@arm.com> + + Backport from mainline + 2013-05-02 Greta Yorsh <Greta.Yorsh@arm.com> + + PR target/56732 + * config/arm/arm.c (arm_expand_epilogue): Check really_return before + generating simple_return for naked functions. + 2013-05-24 Alexander Ivchenko <alexander.ivchenko@intel.com> PR tree-ssa/57385 diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 38cb584..460d333 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -23591,7 +23591,8 @@ arm_expand_epilogue (bool really_return) if (IS_NAKED (func_type) || (IS_VOLATILE (func_type) && TARGET_ABORT_NORETURN)) { - emit_jump_insn (simple_return_rtx); + if (really_return) + emit_jump_insn (simple_return_rtx); return; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 259e88e..35ec49a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2013-05-24 Greta Yorsh <Greta.Yorsh@arm.com> + + Backport from mainline + 2013-05-02 Greta Yorsh <Greta.Yorsh@arm.com> + + PR target/56732 + * gcc.target/arm/pr56732-1.c: New test. + 2013-05-24 Alexander Ivchenko <alexander.ivchenko@intel.com> PR tree-ssa/57385 diff --git a/gcc/testsuite/gcc.target/arm/pr56732-1.c b/gcc/testsuite/gcc.target/arm/pr56732-1.c new file mode 100644 index 0000000..ac8b8cf --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/pr56732-1.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target naked_functions } */ +/* { dg-options "-O2 -Wall" } */ +extern void bar(); + +void __attribute__((__naked__)) +foo(void) +{ + bar (); +} + +int __attribute__((naked)) +zoo (int a, int b, int c, int d, int e, int f) +{ + bar (); + return e; +} +/* Verify that __attribute__((naked)) produces a naked function that + does not use bx to return. */ +/* { dg-final { scan-assembler-not "\tbx\tlr" } } */ |