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-}

Reply via email to