aaron.ballman accepted this revision.
aaron.ballman added a comment.
This revision is now accepted and ready to land.

In https://reviews.llvm.org/D52888#1256625, @aaronpuchert wrote:

> In https://reviews.llvm.org/D52888#1256395, @aaron.ballman wrote:
>
> > In https://reviews.llvm.org/D52888#1255862, @aaronpuchert wrote:
> >
> > > Additional changes (including some non-tail recursion unfortunately) 
> > > would allow the following to work:
> > >
> > >   void foo16() {
> > >     if (cond ? mu.TryLock() : false)
> > >       mu.Unlock();
> > >   }
> > >   
> > >   void foo17() {
> > >     if (cond ? true : !mu.TryLock())
> > >       return;
> > >     mu.Unlock();
> > >   }
> > >   
> > >
> > > Worth the effort, or is that too exotic?
> >
> >
> > `foo16()` looks like code I could plausibly see in the wild. Consider the 
> > case where the mutex is a pointer and you want to test it for null before 
> > calling `TryLock()` on it (`M ? M->TryLock() : false`). However, I don't 
> > have a good feeling for how much work it would be to support that case.
>
>
> It's relatively short, but not exactly straightforward, because we have to 
> check if both branches are "compatible". However, thinking about this again I 
> think most programmers would write `foo16` as
>
>   void foo16() {
>     if (cond && mu.TryLock())
>       mu.Unlock();
>   }
>
>
> which is functionally equivalent, and which we already support. So I'd 
> propose to add support for this only when someone asks for it, and leave it 
> as it is for now.


I think that's reasonable. LGTM!


Repository:
  rC Clang

https://reviews.llvm.org/D52888



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to