This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Q: middle-end problem when variadic builtins promote float to double

On Sat, 7 Jul 2007, Kaveh R. GHAZI wrote:

> Ok, here's a patch which adds the attribute named as you suggest and
> applies it to the relevant builtins.  I'm stuck now on how and where we
> would intervene to honor it.  I think we need to do it in c-decl.c:
> grokdeclarator(), where it says "promoted_type = c_type_promotes_to(type)"
> around line 4757.  However I'm not sure if we have a handle on the

No, that's something else entirely (a "float" old-style parameter 
declaration corresponds to a "double" argument in a prototype).  It's 
convert_arguments that handles converting to prototype types and default 
argument promotions for arguments not covered by a prototype (including 
those in the ... of a variadic function).

      else if (TREE_CODE (TREE_TYPE (val)) == REAL_TYPE
               && (TYPE_PRECISION (TREE_TYPE (val))
                   < TYPE_PRECISION (double_type_node))
               && !DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (val))))
        /* Convert `float' to `double'.  */
        argarray[parmnum] = convert (double_type_node, val);

Joseph S. Myers

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]