[cfe-commits] tgmath.h

Howard Hinnant hhinnant at apple.com
Tue Feb 17 15:30:05 PST 2009


On Feb 17, 2009, at 6:05 PM, Howard Hinnant wrote:

> On Feb 17, 2009, at 5:37 PM, Chris Lattner wrote:
>
>>
>> On Feb 17, 2009, at 2:29 PM, Howard Hinnant wrote:
>>
>>>>
>>>> Would it be possible to silence to tg_promote diagnostics by
>>>> adding a version that takes ...?
>>>
>>> I know how to solve this neatly in C++. ;-)
>>>
>>> Oh, well, I note that if I add:
>>>
>>> static void                 _TG_ATTRSp __tg_promote(void);
>>>
>>> the error message gets *a little* better.
>>>
>>> test.c:7:8: error: no matching function for call to '__tg_promote'
>>> x = acos(x);
>>>     ^~~~~~~
>>> ./tgmath.h:88:29: note: instantiated from:
>>> #define acos(__x) __tg_acos(__tg_promote1((__x))(__x))
>>>
>>>
>>> "..." doesn't work as I get:
>>>
>>> ./tgmath.h:40:53: error: ISO C requires a named argument before  
>>> '...'
>>> static void                 _TG_ATTRSp __tg_promote(...);
>>>
>>>
>>> I'll keep looking for a better solution...
>>
>> does () work?  () is roughly equivalent to (...) in C++.
>
>
> Using:
>
> #include "tgmath.h"
>
> int main()
> {
>    double* x = 0;
>    x = acos(x);
>    return 0;
> }
>
> (void) works better than () and () works better than (...).  Don't ask
> me to explain it... :-)
>
> -------------
> Using (...):
> -------------
> 153 lines of output starting with:
>
> In file included from test.c:1:
> ./tgmath.h:40:53: error: ISO C requires a named argument before '...'
> static void                 _TG_ATTRSp __tg_promote(...);
>                                                     ^
> ./tgmath.h:41:40: error: conflicting types for '__tg_promote'
> static double               _TG_ATTRSp __tg_promote(int);
>
> -------------
> Using ():
> -------------
> 150 lines of output starting with:
>
> In file included from test.c:1:
> ./tgmath.h:41:40: error: conflicting types for '__tg_promote'
> static double               _TG_ATTRSp __tg_promote(int);
>                                        ^
> ./tgmath.h:40:40: note: previous declaration is here
> static void                 _TG_ATTRSp __tg_promote();
>                                        ^
> -------------
> Using (void):
> -------------
> 84 lines of output starting with:
>
> test.c:7:8: error: no matching function for call to '__tg_promote'
>    x = acos(x);
>        ^~~~~~~
> ./tgmath.h:88:29: note: instantiated from:
> #define acos(__x) __tg_acos(__tg_promote1((__x))(__x))

Oh, and:

-------------
none of the above:
-------------
81 lines of output starting with:

test.c:7:8: error: no matching function for call to '__tg_promote'
    x = acos(x);
        ^~~~~~~
./tgmath.h:88:29: note: instantiated from:
#define acos(__x) __tg_acos(__tg_promote1((__x))(__x))

:-)

-Howard




More information about the cfe-commits mailing list