Reid Kleckner via llvm-dev
2017-Oct-01 00:35 UTC
[llvm-dev] Is ArrayRef supposed to be immutable?
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 -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170930/3a050967/attachment.html>
David Blaikie via llvm-dev
2017-Oct-01 13:52 UTC
[llvm-dev] Is ArrayRef supposed to be immutable?
+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 >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171001/2cb71ad7/attachment.html>
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>