PATCH: do ?: lowering to selects less wrong

Richard Smith richard at metafoo.co.uk
Tue Nov 5 17:43:10 PST 2013


The corresponding C++ test fails without this change. In C, the
lvalue-to-rvalue conversion is inside the arms of the ?:, not outside, so
the optimization/miscompile never fires.

On Tue, Nov 5, 2013 at 5:30 PM, Rafael EspĂ­ndola <rafael.espindola at gmail.com
> wrote:

> The test passes even with the code change reverted.
>
> On 5 November 2013 16:54, Nick Lewycky <nlewycky at google.com> wrote:
> > When lowering "cond ? X : Y" we do some safety checks to see whether we
> can
> > instead emit both X and Y and use a llvm select instruction to choose
> > between them. This code is insufficiently safe, and introducing loads
> into a
> > program that didn't load is a bad idea. For example, it could be TLS. It
> > could be a non-volatile auto in another function that isn't the current
> > function (think lambdas).
> >
> > Don't do this here. LLVM knows how to do this properly.
> >
> > Patch attached, please review!
> >
> > Nick
> >
> >
> > _______________________________________________
> > cfe-commits mailing list
> > cfe-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> >
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20131105/186cf0e3/attachment.html>


More information about the cfe-commits mailing list