I've gone ahead and merged it in r278426.
On Wed, Aug 10, 2016 at 5:19 PM, Eric Fiselier <e...@efcs.ca> wrote: > 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