From 228cc352898c5c7ee7da9fbea2eaeb8228d94da0 Mon Sep 17 00:00:00 2001 From: Paul Brook Date: Mon, 23 Jul 2007 11:16:47 +0000 Subject: svn merge -r117055:117056 svn+ssh://gcc.gnu.org/svn/gcc/trunk/ git-svn-id: https://gcc.gnu.org/svn/gcc/branches/redhat/gcc-4_1-branch@126839 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/config/arm/arm.c | 9 +++++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/nested-func-5.c | 13 +++++++++++++ 4 files changed, 32 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/nested-func-5.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4607adc484b..af61ab634c6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2006-09-19 Paul Brook + + PR target/28516 + * config/arm/arm.c (arm_unwind_emit_set): Handle reg = sp + const. + 2007-07-16 Richard Guenther Uros Bizjak diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index a74d5139332..98f6d57f93f 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -15373,6 +15373,15 @@ arm_unwind_emit_set (FILE * asm_out_file, rtx p) /* Move from sp to reg. */ asm_fprintf (asm_out_file, "\t.movsp %r\n", REGNO (e0)); } + else if (GET_CODE (e1) == PLUS + && GET_CODE (XEXP (e1, 0)) == REG + && REGNO (XEXP (e1, 0)) == SP_REGNUM + && GET_CODE (XEXP (e1, 1)) == CONST_INT) + { + /* Set reg to offset from sp. */ + asm_fprintf (asm_out_file, "\t.movsp %r, #%d\n", + REGNO (e0), (int)INTVAL(XEXP (e1, 1))); + } else abort (); break; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7f24a04d29c..6142ec58baa 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-09-19 Paul Brook + + PR target/28516 + * gcc.dg/nested-func-5.c: New test. + 2007-07-21 Kaveh R. Ghazi * gcc.dg/c99-math-double-1.c: Mark test variables as volatile. diff --git a/gcc/testsuite/gcc.dg/nested-func-5.c b/gcc/testsuite/gcc.dg/nested-func-5.c new file mode 100644 index 00000000000..5076dbd5049 --- /dev/null +++ b/gcc/testsuite/gcc.dg/nested-func-5.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-fexceptions" } */ +/* PR28516: ICE generating ARM unwind directives for nested functions. */ + +void ex(int (*)(void)); +void foo(int i) +{ + int bar(void) + { + return i; + } + ex(bar); +} -- cgit v1.2.3