From 3a70ba74892db2bfdf273248171b541e588d0ee8 Mon Sep 17 00:00:00 2001 From: Robert Dewar Date: Sat, 25 Jan 2014 10:34:40 +0000 Subject: [PATCH] decl.c (gnat_to_gnu_param): Make sure an Out parameter with Default_Value aspect is passed in by copy. * gcc-interface/decl.c (gnat_to_gnu_param): Make sure an Out parameter with Default_Value aspect is passed in by copy. From-SVN: r207071 --- gcc/ada/ChangeLog | 5 +++++ gcc/ada/gcc-interface/decl.c | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index f0cb5ee91cac..dceaa9995db7 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2014-01-25 Robert Dewar + + * gcc-interface/decl.c (gnat_to_gnu_param): Make sure an Out parameter + with Default_Value aspect is passed in by copy. + 2014-01-24 Eric Botcazou * set_targ.adb: Set Short_Enums. diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c index c956d97a34ef..25e2e781cee0 100644 --- a/gcc/ada/gcc-interface/decl.c +++ b/gcc/ada/gcc-interface/decl.c @@ -5842,7 +5842,8 @@ gnat_to_gnu_param (Entity_Id gnat_param, Mechanism_Type mech, Out parameters with discriminants or implicit initial values to be handled like In Out parameters. These type are normally built as aggregates, hence passed by reference, except for some packed arrays - which end up encoded in special integer types. + which end up encoded in special integer types. Note that scalars can + be given implicit initial values using the Default_Value aspect. The exception we need to make is then for packed arrays of records with discriminants or implicit initial values. We have no light/easy @@ -5856,7 +5857,8 @@ gnat_to_gnu_param (Entity_Id gnat_param, Mechanism_Type mech, || (mech != By_Descriptor && mech != By_Short_Descriptor && !POINTER_TYPE_P (gnu_param_type) - && !AGGREGATE_TYPE_P (gnu_param_type))) + && !AGGREGATE_TYPE_P (gnu_param_type) + && !Has_Default_Aspect (Etype (gnat_param)))) && !(Is_Array_Type (Etype (gnat_param)) && Is_Packed (Etype (gnat_param)) && Is_Composite_Type (Component_Type (Etype (gnat_param))))) -- 2.47.3