diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2009-11-25 21:57:02 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2009-11-25 21:57:02 +0000 |
commit | 4f8a6678fb815e575d6ffacebe9cbedc3141c974 (patch) | |
tree | 375bf91e96e795f424ecbe85eb103a51a888acb0 /gcc/ada/gcc-interface/trans.c | |
parent | ca37373a97985aed8cdba95af4c4e27484c19444 (diff) | |
download | gcc-4f8a6678fb815e575d6ffacebe9cbedc3141c974.zip gcc-4f8a6678fb815e575d6ffacebe9cbedc3141c974.tar.gz gcc-4f8a6678fb815e575d6ffacebe9cbedc3141c974.tar.bz2 |
trans.c (unchecked_conversion_lhs_nop): Rename into...
* gcc-interface/trans.c (unchecked_conversion_lhs_nop): Rename into...
(unchecked_conversion_nop): ...this. Handle actual parameters.
(gnat_to_gnu): Adjust for above renaming.
From-SVN: r154659
Diffstat (limited to 'gcc/ada/gcc-interface/trans.c')
-rw-r--r-- | gcc/ada/gcc-interface/trans.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c index afdc20a..5e568a2 100644 --- a/gcc/ada/gcc-interface/trans.c +++ b/gcc/ada/gcc-interface/trans.c @@ -3432,19 +3432,21 @@ Compilation_Unit_to_gnu (Node_Id gnat_node) invalidate_global_renaming_pointers (); } -/* Return whether GNAT_NODE, an unchecked type conversion, is on the LHS - of an assignment and a no-op as far as gigi is concerned. */ +/* Return true if GNAT_NODE, an unchecked type conversion, is a no-op as far + as gigi is concerned. This is used to avoid conversions on the LHS. */ static bool -unchecked_conversion_lhs_nop (Node_Id gnat_node) +unchecked_conversion_nop (Node_Id gnat_node) { Entity_Id from_type, to_type; - /* The conversion must be on the LHS of an assignment. Otherwise, even - if the conversion was essentially a no-op, it could de facto ensure - type consistency and this should be preserved. */ + /* The conversion must be on the LHS of an assignment or an actual parameter + of a call. Otherwise, even if the conversion was essentially a no-op, it + could de facto ensure type consistency and this should be preserved. */ if (!(Nkind (Parent (gnat_node)) == N_Assignment_Statement - && Name (Parent (gnat_node)) == gnat_node)) + && Name (Parent (gnat_node)) == gnat_node) + && !(Nkind (Parent (gnat_node)) == N_Procedure_Call_Statement + && Name (Parent (gnat_node)) != gnat_node)) return false; from_type = Etype (Expression (gnat_node)); @@ -4156,7 +4158,7 @@ gnat_to_gnu (Node_Id gnat_node) gnu_result = gnat_to_gnu (Expression (gnat_node)); /* Skip further processing if the conversion is deemed a no-op. */ - if (unchecked_conversion_lhs_nop (gnat_node)) + if (unchecked_conversion_nop (gnat_node)) { gnu_result_type = TREE_TYPE (gnu_result); break; @@ -5409,7 +5411,7 @@ gnat_to_gnu (Node_Id gnat_node) && ((Nkind (Parent (gnat_node)) == N_Assignment_Statement && Name (Parent (gnat_node)) == gnat_node) || (Nkind (Parent (gnat_node)) == N_Unchecked_Type_Conversion - && unchecked_conversion_lhs_nop (Parent (gnat_node))) + && unchecked_conversion_nop (Parent (gnat_node))) || (Nkind (Parent (gnat_node)) == N_Procedure_Call_Statement && Name (Parent (gnat_node)) != gnat_node) || Nkind (Parent (gnat_node)) == N_Parameter_Association |