diff options
author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-09-24 09:21:39 +0000 |
---|---|---|
committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-09-24 09:21:39 +0000 |
commit | 3bb63aebd8060e2baf8baf687c1a320e81ebba91 (patch) | |
tree | 0c79112ec645e731d0045fca38a62354054c2798 /gcc/ada | |
parent | 912233a5454db1d58f9a06478bf987ddf4d7ec79 (diff) | |
download | gcc-3bb63aebd8060e2baf8baf687c1a320e81ebba91.tar.gz |
* cgraphunit.c (cgraph_lower_function): Revert last change.
* targhooks.c (default_static_chain): Use !DECL_STATIC_CHAIN
instead of DECL_NO_STATIC_CHAIN.
* tree-cfg.c (verify_gimple_call): Likewise.
* tree-nested.c (get_chain_decl, get_chain_field,
convert_tramp_reference_op, convert_gimple_call): Likewise.
(convert_all_function_calls): Likewise. Always set or clear
DECL_STATIC_CHAIN initially, for !n->outer clear it.
(lower_nested_functions): Remove DECL_NO_STATIC_CHAIN checking code.
* c-parser.c (c_parser_declaration_or_fndef): Set DECL_STATIC_CHAIN
if nested.
* print-tree.c (print_node): Handle DECL_STATIC_CHAIN instead of
DECL_NO_STATIC_CHAIN.
* config/i386/i386.c (ix86_static_chain): Use !DECL_STATIC_CHAIN
instead of DECL_NO_STATIC_CHAIN.
(ix86_function_regparm, find_drap_reg): Likewise. Don't test
decl_function_context.
* varasm.c (initializer_constant_valid_p): Likewise.
* tree.h (DECL_NO_STATIC_CHAIN): Renamed to ...
(DECL_STATIC_CHAIN): ... this.
* config/moxie/moxie.c (moxie_static_chain): Use !DECL_STATIC_CHAIN
instead of DECL_NO_STATIC_CHAIN.
* method.c (make_thunk, make_alias_for): Don't set
DECL_NO_STATIC_CHAIN.
* decl.c (builtin_function_1, grokfndecl): Likewise.
* lex.c (build_lang_decl): Likewise.
* gcc-interface/utils.c (gnat_pushdecl): Don't set
DECL_NO_STATIC_CHAIN, set DECL_STATIC_CHAIN for
nested functions.
* testsuite/gcc.target/i386/pr12329.c: Adjust.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@152114 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada')
-rw-r--r-- | gcc/ada/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ada/gcc-interface/utils.c | 9 |
2 files changed, 12 insertions, 3 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index dddef52d6f4..0cbd4db4bf2 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2009-09-24 Jakub Jelinek <jakub@redhat.com> + + * gcc-interface/utils.c (gnat_pushdecl): Don't set + DECL_NO_STATIC_CHAIN, set DECL_STATIC_CHAIN for + nested functions. + 2009-09-21 Joel Sherrill <joel.sherrill@oarcorp.com> * s-osinte-rtems.ad[bs]: Get_Page_Size cannot return 0. diff --git a/gcc/ada/gcc-interface/utils.c b/gcc/ada/gcc-interface/utils.c index 31f24ce0340..1559cf14490 100644 --- a/gcc/ada/gcc-interface/utils.c +++ b/gcc/ada/gcc-interface/utils.c @@ -439,9 +439,12 @@ gnat_pushdecl (tree decl, Node_Id gnat_node) { DECL_CONTEXT (decl) = current_function_decl; - /* Functions imported in another function are not really nested. */ - if (TREE_CODE (decl) == FUNCTION_DECL && TREE_PUBLIC (decl)) - DECL_NO_STATIC_CHAIN (decl) = 1; + /* Functions imported in another function are not really nested. + For really nested functions mark them initially as needing + a static chain for uses of that flag before unnesting; + lower_nested_functions will then recompute it. */ + if (TREE_CODE (decl) == FUNCTION_DECL && !TREE_PUBLIC (decl)) + DECL_STATIC_CHAIN (decl) = 1; } TREE_NO_WARNING (decl) = (gnat_node == Empty || Warnings_Off (gnat_node)); |