[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