[PATCH] [libc++] Fix _SC_NPROCESSORS_ONLN detection

Howard Hinnant hhinnant at apple.com
Sat Jun 29 17:16:26 PDT 2013


On Jun 7, 2013, at 10:48 PM, Matthew Dempsky <matthew at dempsky.org> wrote:

> POSIX defines that the _POSIX_C_SOURCE macros are to be set by user
> code to specify what version of POSIX the system should provide.  If
> you want to check what version of POSIX is actually available, you're
> supposed to test _POSIX_VERSION.
> 
> However, since sysconf() has been in POSIX since 1995, it's probably
> safe to assume it's available on any system with a C++11 compiler,
> especially if _SC_NPROCESSORS_ONLN is defined too.  So no point in a
> complicated preprocessor rule if just we unconditionally include
> <unistd.h> (on non-Windows systems).
> 
> Also, I've added a #warning for to help porters detect when a suitable
> implementation isn't detected at compile-time.
> 
> 
> Index: src/thread.cpp
> ===================================================================
> --- src/thread.cpp	(revision 183583)
> +++ src/thread.cpp	(working copy)
> @@ -16,9 +16,8 @@
> #if !defined(_WIN32)
> #if !defined(__sun__) && !defined(__linux__)
> #include <sys/sysctl.h>
> -#else
> +#endif // !__sun__ && !__linux__
> #include <unistd.h>
> -#endif // !__sun__ && !__linux__
> #endif // !_WIN32
> 
> #if defined(__NetBSD__)
> @@ -71,7 +70,7 @@ thread::hardware_concurrency() _NOEXCEPT
>     std::size_t s = sizeof(n);
>     sysctl(mib, 2, &n, &s, 0, 0);
>     return n;
> -#elif (defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200112L) && defined(_SC_NPROCESSORS_ONLN)) || defined(EMSCRIPTEN)
> +#elif defined(_SC_NPROCESSORS_ONLN)
>     long result = sysconf(_SC_NPROCESSORS_ONLN);
>     // sysconf returns -1 if the name is invalid, the option does not exist or
>     // does not have a definite limit.
> @@ -83,6 +82,7 @@ thread::hardware_concurrency() _NOEXCEPT
> #else  // defined(CTL_HW) && defined(HW_NCPU)
>     // TODO: grovel through /proc or check cpuid on x86 and similar
>     // instructions on other architectures.
> +    #warning hardware_concurrency not yet implemented
>     return 0;  // Means not computable [thread.thread.static]
> #endif  // defined(CTL_HW) && defined(HW_NCPU)
> }
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits


Committed revision 185275.

Thanks,
Howard




More information about the cfe-commits mailing list