https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71625
Bernd Edlinger <bernd.edlinger at hotmail dot de> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |bernd.edlinger at hotmail dot
de
--- Comment #20 from Bernd Edlinger <bernd.edlinger at hotmail dot de> ---
it is possible that the poly type returns now a different type class
in __builtin_classify_type:
@defmac __builtin_classify_type (@var{object})
Since each machine has its own conventions for which data types are
passed in which kind of register, your implementation of @code{va_arg}
has to embody these conventions. The easiest way to categorize the
specified data type is to use @code{__builtin_classify_type} together
with @code{sizeof} and @code{__alignof__}.
@code{__builtin_classify_type} ignores the value of @var{object},
considering only its data type. It returns an integer describing what
kind of type that is---integer, floating, pointer, structure, and so on.
The file @file{typeclass.h} defines an enumeration that you can use to
interpret the values of @code{__builtin_classify_type}.
@end defmac
builtins.c-/* Used by expand_builtin_classify_type and
fold_builtin_classify_type. */
builtins.c-
builtins.c-static enum type_class
builtins.c-type_to_class (tree type)
builtins.c-{
builtins.c- switch (TREE_CODE (type))
builtins.c- {
builtins.c- case VOID_TYPE: return void_type_class;
builtins.c- case INTEGER_TYPE: return integer_type_class;
builtins.c- case ENUMERAL_TYPE: return enumeral_type_class;
builtins.c- case BOOLEAN_TYPE: return boolean_type_class;
builtins.c- case POINTER_TYPE: return pointer_type_class;
builtins.c- case REFERENCE_TYPE: return reference_type_class;
builtins.c- case OFFSET_TYPE: return offset_type_class;
builtins.c- case REAL_TYPE: return real_type_class;
builtins.c- case COMPLEX_TYPE: return complex_type_class;
builtins.c- case FUNCTION_TYPE: return function_type_class;
builtins.c- case METHOD_TYPE: return method_type_class;
builtins.c- case RECORD_TYPE: return record_type_class;
builtins.c- case UNION_TYPE:
builtins.c- case QUAL_UNION_TYPE: return union_type_class;
builtins.c: case ARRAY_TYPE: return (TYPE_STRING_FLAG (type)
builtins.c- ? string_type_class :
array_type_class);
builtins.c- case LANG_TYPE: return lang_type_class;
builtins.c- default: return no_type_class;
builtins.c- }
builtins.c-}
builtins.c-
builtins.c-/* Expand a call EXP to __builtin_classify_type. */
builtins.c-
builtins.c-static rtx
builtins.c-expand_builtin_classify_type (tree exp)
builtins.c-{
builtins.c- if (call_expr_nargs (exp))
builtins.c- return GEN_INT (type_to_class (TREE_TYPE (CALL_EXPR_ARG (exp,
0))));
builtins.c- return GEN_INT (no_type_class);
builtins.c-}