Chris Lattner via llvm-dev
2017-Oct-01 23:01 UTC
[llvm-dev] Is ArrayRef supposed to be immutable?
+1, totally a bug. That’s the domain of MutableArrayRef. -Chris> On Oct 1, 2017, at 6:52 AM, David Blaikie via llvm-dev <llvm-dev at lists.llvm.org> wrote: > > +1 seems like a bug > > On Sun, Oct 1, 2017 at 12:35 AM Reid Kleckner via llvm-dev <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote: > It wraps a constant T* and a size_t, so I'm surprised std::sort works. It shouldn't. > > On Sep 30, 2017 5:22 PM, "Daniel Berlin via llvm-dev" <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote: > It seems like ArrayRefs are supposed to be immutable ( > However, as far as i can tell, the iterators are defined wrong to make this true. > > While > ArrayRef<int> Foo(Something); > Foo[0] = 5; > > will give a compile time error. > > something like: > > ArrayRef<int> Foo(Something); > std::sort(Foo.begin(), Foo.end()); > > Will work fine. > > Is this expected? > > (FWIW: I expected this to only work with a MutableArrayRef) > > > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev> > > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev> > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171001/06f71bae/attachment.html>
Zachary Turner via llvm-dev
2017-Oct-02 16:37 UTC
[llvm-dev] Is ArrayRef supposed to be immutable?
It's possible I'm missing something, but I can't reproduce this: std::vector<int> A = { 4, 15, 42 , 16, 8, 23}; ArrayRef<int> B(A); std::sort(B.begin(), B.end()); fails to compile for me. ArrayRef<T>::iterator is specified as `const T *`, so I'm not seeing how this could happen? On Sun, Oct 1, 2017 at 4:01 PM Chris Lattner via llvm-dev < llvm-dev at lists.llvm.org> wrote:> +1, totally a bug. That’s the domain of MutableArrayRef. > > -Chris > > On Oct 1, 2017, at 6:52 AM, David Blaikie via llvm-dev < > llvm-dev at lists.llvm.org> wrote: > > +1 seems like a bug > > On Sun, Oct 1, 2017 at 12:35 AM Reid Kleckner via llvm-dev < > llvm-dev at lists.llvm.org> wrote: > >> It wraps a constant T* and a size_t, so I'm surprised std::sort works. It >> shouldn't. >> >> On Sep 30, 2017 5:22 PM, "Daniel Berlin via llvm-dev" < >> llvm-dev at lists.llvm.org> wrote: >> >> It seems like ArrayRefs are supposed to be immutable ( >> However, as far as i can tell, the iterators are defined wrong to make >> this true. >> >> While >> ArrayRef<int> Foo(Something); >> Foo[0] = 5; >> >> will give a compile time error. >> >> something like: >> >> ArrayRef<int> Foo(Something); >> std::sort(Foo.begin(), Foo.end()); >> >> Will work fine. >> >> Is this expected? >> >> (FWIW: I expected this to only work with a MutableArrayRef) >> >> >> >> _______________________________________________ >> LLVM Developers mailing list >> llvm-dev at lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >> >> >> _______________________________________________ >> LLVM Developers mailing list >> llvm-dev at lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >> > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev > > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171002/b46e87fc/attachment.html>
Daniel Berlin via llvm-dev
2017-Oct-02 17:31 UTC
[llvm-dev] Is ArrayRef supposed to be immutable?
On Mon, Oct 2, 2017 at 9:37 AM, Zachary Turner via llvm-dev < llvm-dev at lists.llvm.org> wrote:> It's possible I'm missing something, but I can't reproduce this: > > std::vector<int> A = { 4, 15, 42 , 16, 8, 23}; > ArrayRef<int> B(A); > std::sort(B.begin(), B.end()); > > fails to compile for me. > >As later mentioned, it was transient and appears to have only affected some version :) Because of that, i stopped looking into it after tracking it down to what appears to be a hilarious miscompile of clang.> ArrayRef<T>::iterator is specified as `const T *`, so I'm not seeing how > this could happen? > > On Sun, Oct 1, 2017 at 4:01 PM Chris Lattner via llvm-dev < > llvm-dev at lists.llvm.org> wrote: > >> +1, totally a bug. That’s the domain of MutableArrayRef. >> >> -Chris >> >> On Oct 1, 2017, at 6:52 AM, David Blaikie via llvm-dev < >> llvm-dev at lists.llvm.org> wrote: >> >> +1 seems like a bug >> >> On Sun, Oct 1, 2017 at 12:35 AM Reid Kleckner via llvm-dev < >> llvm-dev at lists.llvm.org> wrote: >> >>> It wraps a constant T* and a size_t, so I'm surprised std::sort works. >>> It shouldn't. >>> >>> On Sep 30, 2017 5:22 PM, "Daniel Berlin via llvm-dev" < >>> llvm-dev at lists.llvm.org> wrote: >>> >>> It seems like ArrayRefs are supposed to be immutable ( >>> However, as far as i can tell, the iterators are defined wrong to make >>> this true. >>> >>> While >>> ArrayRef<int> Foo(Something); >>> Foo[0] = 5; >>> >>> will give a compile time error. >>> >>> something like: >>> >>> ArrayRef<int> Foo(Something); >>> std::sort(Foo.begin(), Foo.end()); >>> >>> Will work fine. >>> >>> Is this expected? >>> >>> (FWIW: I expected this to only work with a MutableArrayRef) >>> >>> >>> >>> _______________________________________________ >>> LLVM Developers mailing list >>> llvm-dev at lists.llvm.org >>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >>> >>> >>> _______________________________________________ >>> LLVM Developers mailing list >>> llvm-dev at lists.llvm.org >>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >>> >> _______________________________________________ >> LLVM Developers mailing list >> llvm-dev at lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >> >> >> _______________________________________________ >> LLVM Developers mailing list >> llvm-dev at lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >> > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171002/0bb0c926/attachment.html>