[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:33:14 PDT 2018
http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-autoconf/builds/27733
http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux/builds/14670
On Thu, Aug 16, 2018 at 3:30 PM Vitaly Buka <vitalybuka at google.com> wrote:
> 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/c6106d7a/attachment-0001.html>
More information about the cfe-commits
mailing list