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