diff options
author | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-08-03 19:34:31 +0000 |
---|---|---|
committer | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-08-03 19:34:31 +0000 |
commit | f27f157541e108b22fd92ac2bed36bbfb72be9e8 (patch) | |
tree | a36a9bce7ffcf52891f3053b06bef0050c844f81 /gcc/cfgexpand.c | |
parent | e6d1c8b1cd00189b4643ec548aabc471ee68d7cf (diff) | |
download | gcc-f27f157541e108b22fd92ac2bed36bbfb72be9e8.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@226528 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cfgexpand.c')
-rw-r--r-- | gcc/cfgexpand.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index 8ff79abf691..7df9d06fab3 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -1335,7 +1335,16 @@ expand_one_var (tree var, bool toplevel, bool really_expand) else { if (really_expand) - expand_one_stack_var (origvar); + { + if (lookup_attribute ("naked", + DECL_ATTRIBUTES (current_function_decl))) + error ("cannot allocate stack for variable %q+D, naked function.", + var); + + expand_one_stack_var (origvar); + } + + return tree_to_uhwi (DECL_SIZE_UNIT (var)); } return 0; |