[libcxx] r196058 - Fix for PRPR17934; based on a fix suggested by Peter Sommerlad

Bill Wendling isanbard at gmail.com
Tue Dec 10 23:31:25 PST 2013


Thanks. I reverted it.


On Dec 9, 2013, at 7:04 AM, Alp Toker <alp at nuanti.com> wrote:

> Hi Marshall,
> 
> This commit broke the build on Fedora 19 g++ (GCC) 4.8.2 20131017 (Red Hat 4.8.2-1)
> 
> I've attached the build failure log. Reverting it fixes the LLVM ToT build with libcxx.
> 
> CC'ing in Bill since this has been merged into the 3.4 branch.
> 
> Alp.
> 
> 
> On 02/12/2013 03:24, Marshall Clow wrote:
>> Author: marshall
>> Date: Sun Dec  1 21:24:33 2013
>> New Revision: 196058
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=196058&view=rev
>> Log:
>> Fix for PRPR17934; based on a fix suggested by Peter Sommerlad
>> 
>> Modified:
>>     libcxx/trunk/include/iterator
>>     libcxx/trunk/test/containers/sequences/array/iterators.pass.cpp
>>     libcxx/trunk/test/iterators/iterator.range/begin-end.pass.cpp
>> 
>> Modified: libcxx/trunk/include/iterator
>> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/iterator?rev=196058&r1=196057&r2=196058&view=diff
>> ==============================================================================
>> --- libcxx/trunk/include/iterator (original)
>> +++ libcxx/trunk/include/iterator Sun Dec  1 21:24:33 2013
>> @@ -1387,6 +1387,22 @@ operator+(typename __wrap_iter<_Iter>::d
>>    #if !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_TRAILING_RETURN)
>>  +template <class _Tp, size_t _Np>
>> +inline _LIBCPP_INLINE_VISIBILITY
>> +_Tp*
>> +begin(_Tp (&__array)[_Np])
>> +{
>> +    return __array;
>> +}
>> +
>> +template <class _Tp, size_t _Np>
>> +inline _LIBCPP_INLINE_VISIBILITY
>> +_Tp*
>> +end(_Tp (&__array)[_Np])
>> +{
>> +    return __array + _Np;
>> +}
>> +
>>  template <class _Cp>
>>  inline _LIBCPP_INLINE_VISIBILITY
>>  auto
>> @@ -1421,18 +1437,46 @@ end(const _Cp& __c) -> decltype(__c.end(
>>    #if _LIBCPP_STD_VER > 11
>>  +template <class _Tp, size_t _Np>
>> +inline _LIBCPP_INLINE_VISIBILITY
>> +reverse_iterator<_Tp*> rbegin(_Tp (&__array)[_Np])
>> +{
>> +    return reverse_iterator<_Tp*>(__array + _Np);
>> +}
>> +
>> +template <class _Tp, size_t _Np>
>> +inline _LIBCPP_INLINE_VISIBILITY
>> +reverse_iterator<_Tp*> rend(_Tp (&__array)[_Np])
>> +{
>> +    return reverse_iterator<_Tp*>(__array);
>> +}
>> +
>> +template <class _Ep>
>> +inline _LIBCPP_INLINE_VISIBILITY
>> +reverse_iterator<const _Ep*> rbegin(initializer_list<_Ep> __il)
>> +{
>> +    return reverse_iterator<const _Ep*>(__il.end());
>> +}
>> +
>> +template <class _Ep>
>> +inline _LIBCPP_INLINE_VISIBILITY
>> +reverse_iterator<const _Ep*> rend(initializer_list<_Ep> __il)
>> +{
>> +    return reverse_iterator<const _Ep*>(__il.begin());
>> +}
>> +
>>  template <class _Cp>
>>  inline _LIBCPP_INLINE_VISIBILITY
>>  auto cbegin(const _Cp& __c) -> decltype(begin(__c))
>>  {
>> -    return __c.begin();
>> +    return _VSTD::begin(__c);
>>  }
>>    template <class _Cp>
>>  inline _LIBCPP_INLINE_VISIBILITY
>>  auto cend(const _Cp& __c) -> decltype(end(__c))
>>  {
>> -    return __c.end();
>> +    return _VSTD::end(__c);
>>  }
>>    template <class _Cp>
>> @@ -1516,53 +1560,6 @@ end(const _Cp& __c)
>>    #endif  // !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_TRAILING_RETURN)
>>  -template <class _Tp, size_t _Np>
>> -inline _LIBCPP_INLINE_VISIBILITY
>> -_Tp*
>> -begin(_Tp (&__array)[_Np])
>> -{
>> -    return __array;
>> -}
>> -
>> -template <class _Tp, size_t _Np>
>> -inline _LIBCPP_INLINE_VISIBILITY
>> -_Tp*
>> -end(_Tp (&__array)[_Np])
>> -{
>> -    return __array + _Np;
>> -}
>> -
>> -#if _LIBCPP_STD_VER > 11
>> -template <class _Tp, size_t _Np>
>> -inline _LIBCPP_INLINE_VISIBILITY
>> -reverse_iterator<_Tp*> rbegin(_Tp (&__array)[_Np])
>> -{
>> -    return reverse_iterator<_Tp*>(__array + _Np);
>> -}
>> -
>> -template <class _Tp, size_t _Np>
>> -inline _LIBCPP_INLINE_VISIBILITY
>> -reverse_iterator<_Tp*> rend(_Tp (&__array)[_Np])
>> -{
>> -    return reverse_iterator<_Tp*>(__array);
>> -}
>> -
>> -template <class _Ep>
>> -inline _LIBCPP_INLINE_VISIBILITY
>> -reverse_iterator<const _Ep*> rbegin(initializer_list<_Ep> __il)
>> -{
>> -    return reverse_iterator<const _Ep*>(__il.end());
>> -}
>> -
>> -template <class _Ep>
>> -inline _LIBCPP_INLINE_VISIBILITY
>> -reverse_iterator<const _Ep*> rend(initializer_list<_Ep> __il)
>> -{
>> -    return reverse_iterator<const _Ep*>(__il.begin());
>> -}
>> -
>> -#endif
>> -
>>  _LIBCPP_END_NAMESPACE_STD
>>    #endif  // _LIBCPP_ITERATOR
>> 
>> Modified: libcxx/trunk/test/containers/sequences/array/iterators.pass.cpp
>> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/containers/sequences/array/iterators.pass.cpp?rev=196058&r1=196057&r2=196058&view=diff
>> ==============================================================================
>> --- libcxx/trunk/test/containers/sequences/array/iterators.pass.cpp (original)
>> +++ libcxx/trunk/test/containers/sequences/array/iterators.pass.cpp Sun Dec  1 21:24:33 2013
>> @@ -50,11 +50,20 @@ int main()
>>          assert ( !(ii1 != ii2 ));
>>          assert ( !(ii1 != cii ));
>>  -//         C c;
>> -//         assert ( ii1 != c.cbegin());
>> -//         assert ( cii != c.begin());
>> -//         assert ( cii != c.cend());
>> -//         assert ( ii1 != c.end());
>> +        C c;
>> +        assert ( c.begin()   == std::begin(c));
>> +        assert ( c.cbegin()  == std::cbegin(c));
>> +        assert ( c.rbegin()  == std::rbegin(c));
>> +        assert ( c.crbegin() == std::crbegin(c));
>> +        assert ( c.end()     == std::end(c));
>> +        assert ( c.cend()    == std::cend(c));
>> +        assert ( c.rend()    == std::rend(c));
>> +        assert ( c.crend()   == std::crend(c));
>> +
>> +        assert ( std::begin(c)   != std::end(c));
>> +        assert ( std::rbegin(c)  != std::rend(c));
>> +        assert ( std::cbegin(c)  != std::cend(c));
>> +        assert ( std::crbegin(c) != std::crend(c));
>>          }
>>          {
>>          typedef std::array<int, 0> C;
>> @@ -68,11 +77,20 @@ int main()
>>          assert ( !(ii1 != ii2 ));
>>          assert ( !(ii1 != cii ));
>>  -//         C c;
>> -//         assert ( ii1 != c.cbegin());
>> -//         assert ( cii != c.begin());
>> -//         assert ( cii != c.cend());
>> -//         assert ( ii1 != c.end());
>> +        C c;
>> +        assert ( c.begin()   == std::begin(c));
>> +        assert ( c.cbegin()  == std::cbegin(c));
>> +        assert ( c.rbegin()  == std::rbegin(c));
>> +        assert ( c.crbegin() == std::crbegin(c));
>> +        assert ( c.end()     == std::end(c));
>> +        assert ( c.cend()    == std::cend(c));
>> +        assert ( c.rend()    == std::rend(c));
>> +        assert ( c.crend()   == std::crend(c));
>> +
>> +        assert ( std::begin(c)   == std::end(c));
>> +        assert ( std::rbegin(c)  == std::rend(c));
>> +        assert ( std::cbegin(c)  == std::cend(c));
>> +        assert ( std::crbegin(c) == std::crend(c));
>>          }
>>      }
>>  #endif
>> 
>> Modified: libcxx/trunk/test/iterators/iterator.range/begin-end.pass.cpp
>> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/iterators/iterator.range/begin-end.pass.cpp?rev=196058&r1=196057&r2=196058&view=diff
>> ==============================================================================
>> --- libcxx/trunk/test/iterators/iterator.range/begin-end.pass.cpp (original)
>> +++ libcxx/trunk/test/iterators/iterator.range/begin-end.pass.cpp Sun Dec  1 21:24:33 2013
>> @@ -52,6 +52,7 @@ void test_const_container( const std::in
>>      assert ( std::end(c)     == c.end());
>>  #if _LIBCPP_STD_VER > 11
>>  //  initializer_list doesn't have cbegin/cend/rbegin/rend
>> +//	but std::cbegin(),etc work (b/c they're general fn templates)
>>  //     assert ( std::cbegin(c)  == c.cbegin());
>>  //     assert ( std::cbegin(c)  != c.cend());
>>  //     assert ( std::cend(c)    == c.cend());
>> 
>> 
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> 
> -- 
> http://www.nuanti.com
> the browser experts
> 
> <libcxx-fedora19.txt>





More information about the cfe-commits mailing list