[PATCH] pass C++ decimal classes same as scalars

H.J. Lu hjl.tools@gmail.com
Thu Jan 28 08:28:00 GMT 2010


On Mon, Nov 23, 2009 at 3:34 PM, Janis Johnson <janis187@us.ibm.com> wrote:
> This patch causes G++ to pass std::decimal::decimal32/64/128 the same
> as their corresponding scalar types; a longer rationale is in:
>
>  http://gcc.gnu.org/ml/gcc-patches/2009-10/msg00866.html
>
> Jason said here:
>
>  http://gcc.gnu.org/ml/gcc-patches/2009-11/msg00110.html
>
> that the original patch looks good except for a change that I've made
> to the new one, to use a single macro for both the old
> TYPE_TRANSPARENT_UNION and the new use for record types that are
> passed the same as the single scalar member.  I call the new macro
> TYPE_PASS_AS_TRANSPARENT but am certainly open to suggestions.  Jason
> also said he'd like this change in 4.5.
>
> Tested on powerpc64-linux for -m32/-m64.  OK for trunk after the
> C++ ABI patch is accepted?  I pinged that last week but so far Jason
> is the only one who has commented on it.
>
> 2009-11-23  Janis Johnson  <janis187@us.ibm.com>
>
>        * tree.h (TYPE_TRANSPARENT_UNION): Replace with ...
>        (TYPE_PASS_AS_TRANSPARENT): this, for union and record.
>        * calls.c (initialize argument_information): Handle it.
>        * c-common.c (handle_transparent_union_attribute): Use new name.
>        * c-decl.c (finish_struct): Ditto.
>        * c-typeck.c (type_lists_compatible_p): Ditto.
>        (convert_for_assignment): Use new name and also handle record.
>        * function.c (aggregate_value_p): Handle it.
>        (pass_by_reference): Ditto.
>        (assign_parm_data_types): Ditto.
>        * print-tree.c (print_node): Ditto.
>        * lto-streamer-in.c (unpack_ts_type_value_fields): Ditto.
>        * lto-streamer-out.c (pack_ts_type_value_fields): Ditto.
>
> gcc/cp/
>        * mangle.c (write_type): Mangle transparent record as member type.
>        * semantics.c (begin_class_definition): Recognize decimal classes
>        and set TYPE__ASS_AS_TRANSPARENT.
>
> gcc/testsuite/
>        * g++.dg/compat/decimal/compat-common.h: New file.
>        * g++.dg/compat/decimal/decimal-dummy.h: New file.
>        * g++.dg/compat/decimal/pass_x.h: New file.
>        * g++.dg/compat/decimal/pass_y.h: New file.
>        * g++.dg/compat/decimal/pass-1_main.C: New file.
>        * g++.dg/compat/decimal/pass-1_x.C: New file.
>        * g++.dg/compat/decimal/pass-1_y.C: New file.
>        * g++.dg/compat/decimal/pass-2_main.C: New file.
>        * g++.dg/compat/decimal/pass-2_x.C: New file.
>        * g++.dg/compat/decimal/pass-2_y.C: New file.
>        * g++.dg/compat/decimal/pass-3_main.C: New file.
>        * g++.dg/compat/decimal/pass-3_x.C: New file.
>        * g++.dg/compat/decimal/pass-3_y.C: New file.
>        * g++.dg/compat/decimal/pass-4_main.C: New file.
>        * g++.dg/compat/decimal/pass-4_x.C: New file.
>        * g++.dg/compat/decimal/pass-4_y.C: New file.
>        * g++.dg/compat/decimal/pass-5_main.C: New file.
>        * g++.dg/compat/decimal/pass-5_x.C: New file.
>        * g++.dg/compat/decimal/pass-5_y.C: New file.
>        * g++.dg/compat/decimal/pass-6_main.C: New file.
>        * g++.dg/compat/decimal/pass-6_x.C: New file.
>        * g++.dg/compat/decimal/pass-6_y.C: New file.
>        * g++.dg/compat/decimal/return_x.h: New file.
>        * g++.dg/compat/decimal/return_y.h: New file.
>        * g++.dg/compat/decimal/return-1_main.C: New file.
>        * g++.dg/compat/decimal/return-1_x.C: New file.
>        * g++.dg/compat/decimal/return-1_y.C: New file.
>        * g++.dg/compat/decimal/return-2_main.C: New file.
>        * g++.dg/compat/decimal/return-2_x.C: New file.
>        * g++.dg/compat/decimal/return-2_y.C: New file.
>        * g++.dg/compat/decimal/return-3_main.C: New file.
>        * g++.dg/compat/decimal/return-3_x.C: New file.
>        * g++.dg/compat/decimal/return-3_y.C: New file.
>        * g++.dg/compat/decimal/return-4_main.C: New file.
>        * g++.dg/compat/decimal/return-4_x.C: New file.
>        * g++.dg/compat/decimal/return-4_y.C: New file.
>        * g++.dg/compat/decimal/return-5_main.C: New file.
>        * g++.dg/compat/decimal/return-5_x.C: New file.
>        * g++.dg/compat/decimal/return-5_y.C: New file.
>        * g++.dg/compat/decimal/return-6_main.C: New file.
>        * g++.dg/compat/decimal/return-6_x.C: New file.
>        * g++.dg/compat/decimal/return-6_y.C: New file.
>

This caused:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42880

-- 
H.J.



More information about the Gcc-patches mailing list