[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