[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