[libcxx] r339943 - Establish the <bit> header. NFC yet. Reviewed as https://reviews.llvm.org/D50815
Vitaly Buka via cfe-commits
cfe-commits at lists.llvm.org
Thu Aug 16 15:30:53 PDT 2018
This brakes some bots
http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/22441
/b/sanitizer-x86_64-linux-fast/build/libcxx_build_msan/include/c++/v1/algorithm:648:10:
fatal error: 'bit' file not found
#include <bit>
^~~~~
1 error generated.
On Thu, Aug 16, 2018 at 2:36 PM Marshall Clow via cfe-commits <
cfe-commits at lists.llvm.org> wrote:
> Author: marshall
> Date: Thu Aug 16 14:35:38 2018
> New Revision: 339943
>
> URL: http://llvm.org/viewvc/llvm-project?rev=339943&view=rev
> Log:
> Establish the <bit> header. NFC yet. Reviewed as
> https://reviews.llvm.org/D50815
>
> Added:
> libcxx/trunk/include/bit
> Modified:
> libcxx/trunk/include/algorithm
> libcxx/trunk/include/module.modulemap
> libcxx/trunk/test/libcxx/double_include.sh.cpp
>
> Modified: libcxx/trunk/include/algorithm
> URL:
> http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/algorithm?rev=339943&r1=339942&r2=339943&view=diff
>
> ==============================================================================
> --- libcxx/trunk/include/algorithm (original)
> +++ libcxx/trunk/include/algorithm Thu Aug 16 14:35:38 2018
> @@ -645,13 +645,7 @@ template <class BidirectionalIterator, c
> #include <functional>
> #include <iterator>
> #include <cstddef>
> -
> -#if defined(__IBMCPP__)
> -#include "support/ibm/support.h"
> -#endif
> -#if defined(_LIBCPP_COMPILER_MSVC)
> -#include <intrin.h>
> -#endif
> +#include <bit>
>
> #include <__debug>
>
> @@ -788,135 +782,6 @@ struct __debug_less
>
> #endif // _LIBCPP_DEBUG
>
> -// Precondition: __x != 0
> -inline _LIBCPP_INLINE_VISIBILITY
> -unsigned __ctz(unsigned __x) {
> -#ifndef _LIBCPP_COMPILER_MSVC
> - return static_cast<unsigned>(__builtin_ctz(__x));
> -#else
> - static_assert(sizeof(unsigned) == sizeof(unsigned long), "");
> - static_assert(sizeof(unsigned long) == 4, "");
> - unsigned long where;
> - // Search from LSB to MSB for first set bit.
> - // Returns zero if no set bit is found.
> - if (_BitScanForward(&where, __x))
> - return where;
> - return 32;
> -#endif
> -}
> -
> -inline _LIBCPP_INLINE_VISIBILITY
> -unsigned long __ctz(unsigned long __x) {
> -#ifndef _LIBCPP_COMPILER_MSVC
> - return static_cast<unsigned long>(__builtin_ctzl(__x));
> -#else
> - static_assert(sizeof(unsigned long) == sizeof(unsigned), "");
> - return __ctz(static_cast<unsigned>(__x));
> -#endif
> -}
> -
> -inline _LIBCPP_INLINE_VISIBILITY
> -unsigned long long __ctz(unsigned long long __x) {
> -#ifndef _LIBCPP_COMPILER_MSVC
> - return static_cast<unsigned long long>(__builtin_ctzll(__x));
> -#else
> - unsigned long where;
> -// Search from LSB to MSB for first set bit.
> -// Returns zero if no set bit is found.
> -#if defined(_LIBCPP_HAS_BITSCAN64)
> - (defined(_M_AMD64) || defined(__x86_64__))
> - if (_BitScanForward64(&where, __x))
> - return static_cast<int>(where);
> -#else
> - // Win32 doesn't have _BitScanForward64 so emulate it with two 32 bit
> calls.
> - // Scan the Low Word.
> - if (_BitScanForward(&where, static_cast<unsigned long>(__x)))
> - return where;
> - // Scan the High Word.
> - if (_BitScanForward(&where, static_cast<unsigned long>(__x >> 32)))
> - return where + 32; // Create a bit offset from the LSB.
> -#endif
> - return 64;
> -#endif // _LIBCPP_COMPILER_MSVC
> -}
> -
> -// Precondition: __x != 0
> -inline _LIBCPP_INLINE_VISIBILITY
> -unsigned __clz(unsigned __x) {
> -#ifndef _LIBCPP_COMPILER_MSVC
> - return static_cast<unsigned>(__builtin_clz(__x));
> -#else
> - static_assert(sizeof(unsigned) == sizeof(unsigned long), "");
> - static_assert(sizeof(unsigned long) == 4, "");
> - unsigned long where;
> - // Search from LSB to MSB for first set bit.
> - // Returns zero if no set bit is found.
> - if (_BitScanReverse(&where, __x))
> - return 31 - where;
> - return 32; // Undefined Behavior.
> -#endif
> -}
> -
> -inline _LIBCPP_INLINE_VISIBILITY
> -unsigned long __clz(unsigned long __x) {
> -#ifndef _LIBCPP_COMPILER_MSVC
> - return static_cast<unsigned long>(__builtin_clzl (__x));
> -#else
> - static_assert(sizeof(unsigned) == sizeof(unsigned long), "");
> - return __clz(static_cast<unsigned>(__x));
> -#endif
> -}
> -
> -inline _LIBCPP_INLINE_VISIBILITY
> -unsigned long long __clz(unsigned long long __x) {
> -#ifndef _LIBCPP_COMPILER_MSVC
> - return static_cast<unsigned long long>(__builtin_clzll(__x));
> -#else
> - unsigned long where;
> -// BitScanReverse scans from MSB to LSB for first set bit.
> -// Returns 0 if no set bit is found.
> -#if defined(_LIBCPP_HAS_BITSCAN64)
> - if (_BitScanReverse64(&where, __x))
> - return static_cast<int>(63 - where);
> -#else
> - // Scan the high 32 bits.
> - if (_BitScanReverse(&where, static_cast<unsigned long>(__x >> 32)))
> - return 63 - (where + 32); // Create a bit offset from the MSB.
> - // Scan the low 32 bits.
> - if (_BitScanReverse(&where, static_cast<unsigned long>(__x)))
> - return 63 - where;
> -#endif
> - return 64; // Undefined Behavior.
> -#endif // _LIBCPP_COMPILER_MSVC
> -}
> -
> -inline _LIBCPP_INLINE_VISIBILITY int __pop_count(unsigned __x) {
> -#ifndef _LIBCPP_COMPILER_MSVC
> - return __builtin_popcount (__x);
> -#else
> - static_assert(sizeof(unsigned) == 4, "");
> - return __popcnt(__x);
> -#endif
> -}
> -
> -inline _LIBCPP_INLINE_VISIBILITY int __pop_count(unsigned long __x) {
> -#ifndef _LIBCPP_COMPILER_MSVC
> - return __builtin_popcountl (__x);
> -#else
> - static_assert(sizeof(unsigned long) == 4, "");
> - return __popcnt(__x);
> -#endif
> -}
> -
> -inline _LIBCPP_INLINE_VISIBILITY int __pop_count(unsigned long long __x) {
> -#ifndef _LIBCPP_COMPILER_MSVC
> - return __builtin_popcountll(__x);
> -#else
> - static_assert(sizeof(unsigned long long) == 8, "");
> - return __popcnt64(__x);
> -#endif
> -}
> -
> // all_of
>
> template <class _InputIterator, class _Predicate>
>
> Added: libcxx/trunk/include/bit
> URL:
> http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/bit?rev=339943&view=auto
>
> ==============================================================================
> --- libcxx/trunk/include/bit (added)
> +++ libcxx/trunk/include/bit Thu Aug 16 14:35:38 2018
> @@ -0,0 +1,169 @@
> +// -*- C++ -*-
> +//===------------------------------ bit
> ----------------------------------===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is dual licensed under the MIT and the University of
> Illinois Open
> +// Source Licenses. See LICENSE.TXT for details.
> +//
>
> +//===---------------------------------------------------------------------===//
> +
> +#ifndef _LIBCPP_BIT
> +#define _LIBCPP_BIT
> +
> +/*
> + bit synopsis
> +
> +namespace std {
> +
> +} // namespace std
> +
> +*/
> +
> +#include <__config>
> +
> +#if defined(__IBMCPP__)
> +#include "support/ibm/support.h"
> +#endif
> +#if defined(_LIBCPP_COMPILER_MSVC)
> +#include <intrin.h>
> +#endif
> +
> +#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
> +#pragma GCC system_header
> +#endif
> +
> +_LIBCPP_BEGIN_NAMESPACE_STD
> +
> +// Precondition: __x != 0
> +inline _LIBCPP_INLINE_VISIBILITY
> +unsigned __ctz(unsigned __x) {
> +#ifndef _LIBCPP_COMPILER_MSVC
> + return static_cast<unsigned>(__builtin_ctz(__x));
> +#else
> + static_assert(sizeof(unsigned) == sizeof(unsigned long), "");
> + static_assert(sizeof(unsigned long) == 4, "");
> + unsigned long where;
> + // Search from LSB to MSB for first set bit.
> + // Returns zero if no set bit is found.
> + if (_BitScanForward(&where, __x))
> + return where;
> + return 32;
> +#endif
> +}
> +
> +inline _LIBCPP_INLINE_VISIBILITY
> +unsigned long __ctz(unsigned long __x) {
> +#ifndef _LIBCPP_COMPILER_MSVC
> + return static_cast<unsigned long>(__builtin_ctzl(__x));
> +#else
> + static_assert(sizeof(unsigned long) == sizeof(unsigned), "");
> + return __ctz(static_cast<unsigned>(__x));
> +#endif
> +}
> +
> +inline _LIBCPP_INLINE_VISIBILITY
> +unsigned long long __ctz(unsigned long long __x) {
> +#ifndef _LIBCPP_COMPILER_MSVC
> + return static_cast<unsigned long long>(__builtin_ctzll(__x));
> +#else
> + unsigned long where;
> +// Search from LSB to MSB for first set bit.
> +// Returns zero if no set bit is found.
> +#if defined(_LIBCPP_HAS_BITSCAN64)
> + (defined(_M_AMD64) || defined(__x86_64__))
> + if (_BitScanForward64(&where, __x))
> + return static_cast<int>(where);
> +#else
> + // Win32 doesn't have _BitScanForward64 so emulate it with two 32 bit
> calls.
> + // Scan the Low Word.
> + if (_BitScanForward(&where, static_cast<unsigned long>(__x)))
> + return where;
> + // Scan the High Word.
> + if (_BitScanForward(&where, static_cast<unsigned long>(__x >> 32)))
> + return where + 32; // Create a bit offset from the LSB.
> +#endif
> + return 64;
> +#endif // _LIBCPP_COMPILER_MSVC
> +}
> +
> +// Precondition: __x != 0
> +inline _LIBCPP_INLINE_VISIBILITY
> +unsigned __clz(unsigned __x) {
> +#ifndef _LIBCPP_COMPILER_MSVC
> + return static_cast<unsigned>(__builtin_clz(__x));
> +#else
> + static_assert(sizeof(unsigned) == sizeof(unsigned long), "");
> + static_assert(sizeof(unsigned long) == 4, "");
> + unsigned long where;
> + // Search from LSB to MSB for first set bit.
> + // Returns zero if no set bit is found.
> + if (_BitScanReverse(&where, __x))
> + return 31 - where;
> + return 32; // Undefined Behavior.
> +#endif
> +}
> +
> +inline _LIBCPP_INLINE_VISIBILITY
> +unsigned long __clz(unsigned long __x) {
> +#ifndef _LIBCPP_COMPILER_MSVC
> + return static_cast<unsigned long>(__builtin_clzl (__x));
> +#else
> + static_assert(sizeof(unsigned) == sizeof(unsigned long), "");
> + return __clz(static_cast<unsigned>(__x));
> +#endif
> +}
> +
> +inline _LIBCPP_INLINE_VISIBILITY
> +unsigned long long __clz(unsigned long long __x) {
> +#ifndef _LIBCPP_COMPILER_MSVC
> + return static_cast<unsigned long long>(__builtin_clzll(__x));
> +#else
> + unsigned long where;
> +// BitScanReverse scans from MSB to LSB for first set bit.
> +// Returns 0 if no set bit is found.
> +#if defined(_LIBCPP_HAS_BITSCAN64)
> + if (_BitScanReverse64(&where, __x))
> + return static_cast<int>(63 - where);
> +#else
> + // Scan the high 32 bits.
> + if (_BitScanReverse(&where, static_cast<unsigned long>(__x >> 32)))
> + return 63 - (where + 32); // Create a bit offset from the MSB.
> + // Scan the low 32 bits.
> + if (_BitScanReverse(&where, static_cast<unsigned long>(__x)))
> + return 63 - where;
> +#endif
> + return 64; // Undefined Behavior.
> +#endif // _LIBCPP_COMPILER_MSVC
> +}
> +
> +inline _LIBCPP_INLINE_VISIBILITY int __pop_count(unsigned __x) {
> +#ifndef _LIBCPP_COMPILER_MSVC
> + return __builtin_popcount (__x);
> +#else
> + static_assert(sizeof(unsigned) == 4, "");
> + return __popcnt(__x);
> +#endif
> +}
> +
> +inline _LIBCPP_INLINE_VISIBILITY int __pop_count(unsigned long __x) {
> +#ifndef _LIBCPP_COMPILER_MSVC
> + return __builtin_popcountl (__x);
> +#else
> + static_assert(sizeof(unsigned long) == 4, "");
> + return __popcnt(__x);
> +#endif
> +}
> +
> +inline _LIBCPP_INLINE_VISIBILITY int __pop_count(unsigned long long __x) {
> +#ifndef _LIBCPP_COMPILER_MSVC
> + return __builtin_popcountll(__x);
> +#else
> + static_assert(sizeof(unsigned long long) == 8, "");
> + return __popcnt64(__x);
> +#endif
> +}
> +
> +_LIBCPP_END_NAMESPACE_STD
> +
> +#endif // _LIBCPP_BIT
>
> Modified: libcxx/trunk/include/module.modulemap
> URL:
> http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/module.modulemap?rev=339943&r1=339942&r2=339943&view=diff
>
> ==============================================================================
> --- libcxx/trunk/include/module.modulemap (original)
> +++ libcxx/trunk/include/module.modulemap Thu Aug 16 14:35:38 2018
> @@ -228,6 +228,10 @@ module std [system] {
> header "atomic"
> export *
> }
> + module bit {
> + header "bit"
> + export *
> + }
> module bitset {
> header "bitset"
> export string
>
> Modified: libcxx/trunk/test/libcxx/double_include.sh.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/double_include.sh.cpp?rev=339943&r1=339942&r2=339943&view=diff
>
> ==============================================================================
> --- libcxx/trunk/test/libcxx/double_include.sh.cpp (original)
> +++ libcxx/trunk/test/libcxx/double_include.sh.cpp Thu Aug 16 14:35:38 2018
> @@ -27,6 +27,7 @@
> #ifndef _LIBCPP_HAS_NO_THREADS
> #include <atomic>
> #endif
> +#include <bit>
> #include <bitset>
> #include <cassert>
> #include <ccomplex>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180816/140d4183/attachment-0001.html>
More information about the cfe-commits
mailing list