[Mesa-dev] [PATCH] nv50/ra: `isinf()` is in namespace `std` since C++11

Pierre Moreau pierre.morrow at free.fr
Fri Mar 25 10:56:27 UTC 2016


I'll resend a patch following Jose's suggestion, probably on Sunday. There are just too many things happening before that. 

Pierre

> On 25 Mar 2016, at 00:36, Jose Fonseca <jfonseca at vmware.com> wrote:
> 
>> On 24/03/16 22:07, Ilia Mirkin wrote:
>>> On Sat, Mar 19, 2016 at 6:30 PM, Jose Fonseca <jfonseca at vmware.com> wrote:
>>>> On 19/03/16 22:25, Ilia Mirkin wrote:
>>>> 
>>>>> On Sat, Mar 19, 2016 at 6:23 PM, Jose Fonseca <jfonseca at vmware.com> wrote:
>>>>> 
>>>>>> On 18/03/16 04:00, Ilia Mirkin wrote:
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> On Mar 17, 2016 8:27 PM, "Matt Turner" <mattst88 at gmail.com
>>>>>> <mailto:mattst88 at gmail.com>> wrote:
>>>>>>   >
>>>>>>   > On Thu, Mar 17, 2016 at 5:17 PM, Pierre Moreau
>>>>>> <pierre.morrow at free.fr
>>>>>> <mailto:pierre.morrow at free.fr>> wrote:
>>>>>>   > > This fixes a compile error while building Nouveau with C++11
>>>>>> enabled (and
>>>>>>   > > glibc >= 2.23). This happens if SWR is enabled, as it forces
>>>>>> C++11.
>>>>>>   >
>>>>>>   > That seems bad, right?
>>>>>>   >
>>>>>>   > Enabling OpenSWR should affect how any other drivers are built. Why
>>>>>>   > does this happen?
>>>>>> 
>>>>>> Yeah, the fix here is to fix the build not to add random unrelated
>>>>>> options from one driver when building another.
>>>>> 
>>>>> 
>>>>> 
>>>>> Although I agree in principle, that drivers should not interfere with
>>>>> others
>>>>> build,  C++14 will soon be the default [1].
>>>>> 
>>>>> So, in this particular case, it seems a missed opportunity not to try to
>>>>> fix
>>>>> this generically.
>>>>> 
>>>>> 
>>>>> What about adding to include/c99_math.h something like
>>>>> 
>>>>> #if __cplusplus >= 201103L
>>>>>     using std::isinf;
>>>>> #endif
>>>> 
>>>> 
>>>> Why is isinf() becoming unavailable by the way? I don't think anyone's
>>>> given a clear answer on that. At least I haven't heard one.
>>> 
>>> 
>>> It's unavoidable.
>>> 
>>> On C99 isinf is a macro.
>>> 
>>> On C++11 isinf is an function inside std namespace.
>>> 
>>> You can't have a macro inside a C++ namespace -- macros have no namespaces.
>>> 
>>> So, even if you `#include <math.h>` instead of `#include <cmath>`, the
>>> math.h must not `#define isinf` so that C-prepposeccor doesn't expan
>>> `std::isinf` to invalid code.
>> 
>> OK, so then we should drop this logic in whereever we define isinf
>> (iirc there's a definition for some platform that doesn't have it) or
>> in c99_math.h as Matt suggests.
> 
> No, there's no isinf definition anywhere anymore.
> 
> But as I said c99_math.h sounds a good place for it.
> 
> Jose
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev



More information about the mesa-dev mailing list