diff options
author | Alexander Basov <coohpt@gmail.com> | 2015-08-03 19:34:31 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2015-08-03 13:34:31 -0600 |
commit | de0fb9055c0928960ecc8e3a5fe990728611c3ca (patch) | |
tree | a36a9bce7ffcf52891f3053b06bef0050c844f81 /gcc/testsuite | |
parent | f2fef1c8a3a93f320e9842d09a0ad44d0157281b (diff) | |
download | gcc-de0fb9055c0928960ecc8e3a5fe990728611c3ca.zip gcc-de0fb9055c0928960ecc8e3a5fe990728611c3ca.tar.gz gcc-de0fb9055c0928960ecc8e3a5fe990728611c3ca.tar.bz2 |
re PR middle-end/64744 (ARM: gcc internal compiler error: in store_field, at expr.c:6659)
PR middle-end/64744
PR middle-end/48470
PR middle-end/43404
* cfgexpand.c (expand_one_var): Add check if stack is going to
be used in naked function.
* expr.c (expand_expr_addr_expr_1): Remove excess checking
whether expression should not reside in MEM.
* function.c (use_register_for_decl): Do not use registers for
non-register things (volatile, float, BLKMode) in naked functions.
PR middle-end/64744
PR middle-end/48470
PR middle-end/43404
* gcc.target/arm/pr43404.c : New testcase.
* gcc.target/arm/pr48470.c : New testcase.
* gcc.target/arm/pr64744-1.c : New testcase.
* gcc.target/arm/pr64744-2.c : New testcase.
From-SVN: r226528
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/arm/pr43404.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/arm/pr48470.c | 11 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/arm/pr64744-1.c | 40 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/arm/pr64744-2.c | 13 |
5 files changed, 84 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 44d7eb9..1fe025b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2015-08-03 Alexander Basov <coohpt@gmail.com> + + PR middle-end/64744 + PR middle-end/48470 + PR middle-end/43404 + * gcc.target/arm/pr43404.c : New testcase. + * gcc.target/arm/pr48470.c : New testcase. + * gcc.target/arm/pr64744-1.c : New testcase. + * gcc.target/arm/pr64744-2.c : New testcase. + 2015-08-03 H.J. Lu <hongjiu.lu@intel.com> PR tree-optimization/67077 diff --git a/gcc/testsuite/gcc.target/arm/pr43404.c b/gcc/testsuite/gcc.target/arm/pr43404.c new file mode 100644 index 0000000..4f2291d --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/pr43404.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target naked_functions } */ +/* { dg-options "-O0" } */ + +__attribute__ ((naked)) +void __data_abort(void) +{ + long foo; /* { dg-error "cannot allocate stack for variable" } */ + long* bar = &foo; +} diff --git a/gcc/testsuite/gcc.target/arm/pr48470.c b/gcc/testsuite/gcc.target/arm/pr48470.c new file mode 100644 index 0000000..20343e7 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/pr48470.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target naked_functions } */ +/* { dg-options "-O0" } */ + +extern void g(int *x); + +void __attribute__((naked)) f(void) +{ + int x = 0; /* { dg-error "cannot allocate stack for variable" } */ + g(&x); +} diff --git a/gcc/testsuite/gcc.target/arm/pr64744-1.c b/gcc/testsuite/gcc.target/arm/pr64744-1.c new file mode 100644 index 0000000..4029303 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/pr64744-1.c @@ -0,0 +1,40 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target naked_functions } */ +/* { dg-options "-O0" } */ + +__attribute__((naked)) +void foo1 () +{ + int aa = 0; + int ab = {0}; +} + +__attribute__((naked)) +void foo2() { + char aa [ ] = {}; /* { dg-error "cannot allocate stack for variable" } */ + char ab [1] = {}; + char ac [2] = {}; /* { dg-error "cannot allocate stack for variable" } */ + char ad [3] = {}; /* { dg-error "cannot allocate stack for variable" } */ +} + +__attribute__((naked)) +void foo3() { + char aa [1] = {0}; + char ab [2] = {0}; /* { dg-error "cannot allocate stack for variable" } */ + char ac [3] = {0}; /* { dg-error "cannot allocate stack for variable" } */ + char ad [4] = {0}; /* { dg-error "cannot allocate stack for variable" } */ +} + +__attribute__((naked)) +void foo4() { + char aa [2] = {0,0}; /* { dg-error "cannot allocate stack for variable" } */ +} +__attribute__((naked)) +void foo5() { + char aa [3] = {0,0,0}; /* { dg-error "cannot allocate stack for variable" } */ +} + +__attribute__((naked)) +void foo6() { + char aa [4] = {0,0,0,0}; /* { dg-error "cannot allocate stack for variable" } */ +} diff --git a/gcc/testsuite/gcc.target/arm/pr64744-2.c b/gcc/testsuite/gcc.target/arm/pr64744-2.c new file mode 100644 index 0000000..d33ea7b --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/pr64744-2.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target naked_functions } */ +/* { dg-options "-O0" } */ + +struct s { + char a; + int b; +}; + +__attribute__((naked)) +void foo () { + struct s x = {}; /* { dg-error "cannot allocate stack for variable" } */ +} |