I would support merging this change. /Eric
On Wed, Aug 10, 2016 at 3:20 PM, Hans Wennborg via cfe-commits < cfe-commits@lists.llvm.org> wrote: > Should we merge this to 3.9? Looks like a straight-forward fix for > something that was hit by real code. > > Thanks, > Hans > > On Wed, Aug 10, 2016 at 1:04 PM, Marshall Clow via cfe-commits > <cfe-commits@lists.llvm.org> wrote: > > Author: marshall > > Date: Wed Aug 10 15:04:46 2016 > > New Revision: 278282 > > > > URL: http://llvm.org/viewvc/llvm-project?rev=278282&view=rev > > Log: > > std:: quailfy the calls for cend/crend/cbegin/cend. Fixes bug 28927. > > > > Added: > > libcxx/trunk/test/std/iterators/iterator.range/begin-end.fail.cpp > > Modified: > > libcxx/trunk/include/iterator > > > > Modified: libcxx/trunk/include/iterator > > URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/ > iterator?rev=278282&r1=278281&r2=278282&view=diff > > ============================================================ > ================== > > --- libcxx/trunk/include/iterator (original) > > +++ libcxx/trunk/include/iterator Wed Aug 10 15:04:46 2016 > > @@ -1632,16 +1632,16 @@ reverse_iterator<const _Ep*> rend(initia > > > > template <class _Cp> > > inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 > > -auto cbegin(const _Cp& __c) -> decltype(begin(__c)) > > +auto cbegin(const _Cp& __c) -> decltype(_VSTD::begin(__c)) > > { > > - return begin(__c); > > + return _VSTD::begin(__c); > > } > > > > template <class _Cp> > > inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 > > -auto cend(const _Cp& __c) -> decltype(end(__c)) > > +auto cend(const _Cp& __c) -> decltype(_VSTD::end(__c)) > > { > > - return end(__c); > > + return _VSTD::end(__c); > > } > > > > template <class _Cp> > > @@ -1674,16 +1674,16 @@ auto rend(const _Cp& __c) -> decltype(__ > > > > template <class _Cp> > > inline _LIBCPP_INLINE_VISIBILITY > > -auto crbegin(const _Cp& __c) -> decltype(rbegin(__c)) > > +auto crbegin(const _Cp& __c) -> decltype(_VSTD::rbegin(__c)) > > { > > - return rbegin(__c); > > + return _VSTD::rbegin(__c); > > } > > > > template <class _Cp> > > inline _LIBCPP_INLINE_VISIBILITY > > -auto crend(const _Cp& __c) -> decltype(rend(__c)) > > +auto crend(const _Cp& __c) -> decltype(_VSTD::rend(__c)) > > { > > - return rend(__c); > > + return _VSTD::rend(__c); > > } > > > > #endif > > > > Added: libcxx/trunk/test/std/iterators/iterator.range/begin-end.fail.cpp > > URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/ > iterators/iterator.range/begin-end.fail.cpp?rev=278282&view=auto > > ============================================================ > ================== > > --- libcxx/trunk/test/std/iterators/iterator.range/begin-end.fail.cpp > (added) > > +++ libcxx/trunk/test/std/iterators/iterator.range/begin-end.fail.cpp > Wed Aug 10 15:04:46 2016 > > @@ -0,0 +1,51 @@ > > +//===------------------------------------------------------ > ----------------===// > > +// > > +// 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. > > +// > > +//===------------------------------------------------------ > ----------------===// > > + > > +#include "test_macros.h" > > + > > +#if TEST_STD_VER < 11 > > +#error > > +#else > > + > > +// <iterator> > > +// template <class C> auto begin(C& c) -> decltype(c.begin()); > > +// template <class C> auto begin(const C& c) -> decltype(c.begin()); > > +// template <class C> auto end(C& c) -> decltype(c.end()); > > +// template <class C> auto end(const C& c) -> decltype(c.end()); > > +// template <class E> reverse_iterator<const E*> > rbegin(initializer_list<E> il); > > +// template <class E> reverse_iterator<const E*> > rend(initializer_list<E> il); > > + > > + > > +#include <iterator> > > +#include <cassert> > > + > > +namespace Foo { > > + struct FakeContainer {}; > > + typedef int FakeIter; > > + > > + FakeIter begin(const FakeContainer &) { return 1; } > > + FakeIter end (const FakeContainer &) { return 2; } > > + FakeIter rbegin(const FakeContainer &) { return 3; } > > + FakeIter rend (const FakeContainer &) { return 4; } > > + > > + FakeIter cbegin(const FakeContainer &) { return 11; } > > + FakeIter cend (const FakeContainer &) { return 12; } > > + FakeIter crbegin(const FakeContainer &) { return 13; } > > + FakeIter crend (const FakeContainer &) { return 14; } > > +} > > + > > + > > +int main(){ > > +// Bug #28927 - shouldn't find these via ADL > > + (void) std::cbegin (Foo::FakeContainer()); > > + (void) std::cend (Foo::FakeContainer()); > > + (void) std::crbegin(Foo::FakeContainer()); > > + (void) std::crend (Foo::FakeContainer()); > > +} > > +#endif > > > > > > _______________________________________________ > > cfe-commits mailing list > > cfe-commits@lists.llvm.org > > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits