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

Bill Wendling isanbard at gmail.com
Wed Dec 11 23:11:33 PST 2013


Okay. Done.

-bw

On Dec 11, 2013, at 11:55 AM, Alp Toker <alp at nuanti.com> wrote:

> Hi Bill,
> 
> I've tested and confirmed that Marshall's fix in r197061 resolves the libcxx issue in r196058.
> 
> Also confirmed that r196058 plus r197061 apply and work correctly against the 3.4 branch.
> 
> Please pull them in!
> 
> Thanks,
> Alp.
> 
> 
> 
> 
> On 11/12/2013 19:40, Marshall Clow wrote:
>> 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.
>> I believe that I’ve fixed this in r197061.
>> 
>> Alp is testing now.
>> Thanks for reporting this!
>> 
>> — Marshall
>> 
>> 
>>> 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>
> 
> -- 
> http://www.nuanti.com
> the browser experts
> 





More information about the cfe-commits mailing list