diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-12-08 11:47:46 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-12-08 11:47:46 +0000 |
commit | 6acdb3bf68e7e29a2b9e33d3d8f19c97f741d87f (patch) | |
tree | 7b83673455bc8ce24ce19e2a48a13fe8acf141db /gcc/ada/trans.c | |
parent | 78566360844d586484e16021afc4fa3bfd600538 (diff) | |
download | gcc-6acdb3bf68e7e29a2b9e33d3d8f19c97f741d87f.tar.gz |
* misc.c (gnat_types_compatible_p, LANG_HOOKS_TYPES_COMPATIBLE_P):
Remove.
(LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS): New.
* adaint.h: (__gnat_dup, __gnat_dup2): Add missing decls.
* trans.c (Exception_Handler_to_gnu_sjlj): Also handle renamed
exception.
(call_to_gnu): Convert to actual DECL_ARG_TYPE, not variant of it.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@91890 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/trans.c')
-rw-r--r-- | gcc/ada/trans.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/gcc/ada/trans.c b/gcc/ada/trans.c index 162e6acc198..2acf8323849 100644 --- a/gcc/ada/trans.c +++ b/gcc/ada/trans.c @@ -1621,7 +1621,9 @@ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target) gnat_formal = Next_Formal_With_Extras (gnat_formal), gnat_actual = Next_Actual (gnat_actual)) { - tree gnu_formal_type = gnat_to_gnu_type (Etype (gnat_formal)); + tree gnu_formal + = (present_gnu_tree (gnat_formal) + ? get_gnu_tree (gnat_formal) : NULL_TREE); /* We treat a conversion between aggregate types as if it is an unchecked conversion. */ bool unchecked_convert_p @@ -1632,10 +1634,8 @@ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target) ? Expression (gnat_actual) : gnat_actual); tree gnu_name = gnat_to_gnu (gnat_name); tree gnu_name_type = gnat_to_gnu_type (Etype (gnat_name)); - tree gnu_formal - = (present_gnu_tree (gnat_formal) - ? get_gnu_tree (gnat_formal) : NULL_TREE); tree gnu_actual; + tree gnu_formal_type; /* If it's possible we may need to use this expression twice, make sure than any side-effects are handled via SAVE_EXPRs. Likewise if we need @@ -1739,9 +1739,6 @@ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target) gnu_actual = convert (gnat_to_gnu_type (Etype (gnat_actual)), gnu_actual); - if (TREE_CODE (gnu_actual) != SAVE_EXPR) - gnu_actual = convert (gnu_formal_type, gnu_actual); - /* If we have not saved a GCC object for the formal, it means it is an OUT parameter not passed by reference and that does not need to be copied in. Otherwise, look at the PARM_DECL to see if it is passed by @@ -1856,9 +1853,7 @@ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target) integer_zero_node), false); else - gnu_actual - = convert (TYPE_MAIN_VARIANT (DECL_ARG_TYPE (gnu_formal)), - gnu_actual); + gnu_actual = convert (DECL_ARG_TYPE (gnu_formal), gnu_actual); } gnu_actual_list = tree_cons (NULL_TREE, gnu_actual, gnu_actual_list); @@ -2244,8 +2239,15 @@ Exception_Handler_to_gnu_sjlj (Node_Id gnat_node) else if (Nkind (gnat_temp) == N_Identifier || Nkind (gnat_temp) == N_Expanded_Name) { - tree gnu_expr - = gnat_to_gnu_entity (Entity (gnat_temp), NULL_TREE, 0); + Entity_Id gnat_ex_id = Entity (gnat_temp); + tree gnu_expr; + + /* Exception may be a renaming. Recover original exception which is + the one elaborated and registered. */ + if (Present (Renamed_Object (gnat_ex_id))) + gnat_ex_id = Renamed_Object (gnat_ex_id); + + gnu_expr = gnat_to_gnu_entity (gnat_ex_id, NULL_TREE, 0); this_choice = build_binary_op |