[LLVMdev] Addressing const reference in ArrayRef

Andreas Weber andreas.c.weber at gmail.com
Thu Aug 21 05:09:34 PDT 2014


I think David is referring this thread:
http://lists.cs.uiuc.edu/pipermail/llvmdev/2014-July/074909.html

I also tried building with the suggested patch (replacing/modifying the
existing ctor (to take non-const ref) ) and this indeed results in plenty
of build errors. I tried fixing them for a few hours but haven't seen light
at the end of the tunnel.

Best regards,
Andy


2014-08-21 9:38 GMT+02:00 Justin Bogner <mail at justinbogner.com>:

> David Blaikie <dblaikie at gmail.com> writes:
> > I seem to recall discussing this before - is there an existing llvm
> > bug filed, another email thread or something (or perhaps it was just
> > an IRC conversation)? It would be good to keep all the discussion
> > together or at least reference the prior (llvm community) discussion.
>
> I'm not sure if it's been discussed before, but it's led to issues as
> recently as a couple of weeks ago:
>
>
> http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20140804/229557.html
>
> I certainly think it's worthwhile to make this API safer, or at least to
> document the caveats in how it can safely be used.
>
> > Have you tried applying your suggested patch? I assume you meant to
> suggest
> > replacing/modifying the existing ctor (to take non-const ref) rather than
> > adding another?
> >
> > I'd assume that causes a lot of build failures as we probably rely on
> binding
> > temporaries to ArrayRef's in many places correctly (most ArrayRef's are
> > temporaries, not local variables).
> >
> > I think in the previous discussion I suggested we might just want to
> make a
> > practice of treating named/local (not parameter) ArrayRef's with greater
> > suspicion, the same way we do for twine, but I'm not sure.
> >
> > We could move this ctor into a factory function (and/or just make the
> CTor
> > private and friend the makeArrayRef helper for this case) to make it more
> > obvious/easier to find bad call sites. But it would be helpful to have
> the
> > context of the prior discussion to continue from there.
> >
> > On Aug 19, 2014 11:18 PM, "Joey Ye" <joey.ye.cc at gmail.com> wrote:
> >
> >     Analyzing why GCC failed to build LLVM recently, one root cause lies
> >     in definition of ArrayRef:
> >     // ArrayRef.h:
> >     ArrayRef(const T &OneElt) : Data(&OneElt), Length(1) {}
> >
> >     Here address of const reference is taken and stored to an object. It
> >     is believed that live range of const reference is only at the
> function
> >     call site, escaping of its address to an object with a longer live
> >     range is invalid. Referring to the case and discussion here:
> >     https://gcc.gnu.org/ml/gcc/2014-08/msg00173.html
> >
> >     So I would suggest to fix ArrayRef. Adding a non-const version of
> >     constructor should work, but it still leaves the vulnerability in
> >     const version, which I'd expect on people in the community to work
> out
> >     a solution.
> >     ArrayRef(T &OneElt) : Data(&OneElt), Length(1) {}
> >
> >     Thanks,
> >     Joey
> >     _______________________________________________
> >     LLVM Developers mailing list
> >     LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> >     http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> >
> > _______________________________________________
> > LLVM Developers mailing list
> > LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.eduhttp://
> lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140821/5f56cec7/attachment.html>


More information about the llvm-dev mailing list