On Jan 23, 2013, at 4:28 PM, Daniel Dunbar <[email protected]> wrote:
> On Wed, Jan 23, 2013 at 4:22 PM, John McCall <[email protected]> wrote:
> On Jan 23, 2013, at 4:08 PM, Daniel Dunbar <[email protected]> wrote:
>> On Wed, Jan 23, 2013 at 2:17 PM, John McCall <[email protected]> wrote:
>> On Jan 23, 2013, at 12:42 PM, Daniel Dunbar <[email protected]> wrote:
>>> On Wed, Jan 23, 2013 at 12:08 PM, John McCall <[email protected]> wrote:
>>> On Jan 23, 2013, at 11:57 AM, Daniel Dunbar <[email protected]> wrote:
>>>> On Wed, Jan 23, 2013 at 11:44 AM, Chandler Carruth <[email protected]> 
>>>> wrote:
>>>> 
>>>> On Wed, Jan 23, 2013 at 11:07 AM, John McCall <[email protected]> wrote:
>>>> A significant part of the problem, I believe, is that there's a lot of 
>>>> mostly-externally-maintained C code which, at Apple, happens to need to be 
>>>> compiled as C++.
>>>> 
>>>> FWIW, this makes perfect sense, and also makes perfect sense out of a flag 
>>>> to essentially get C's return semantics in a C++ compilation in order to 
>>>> support such code.
>>>> 
>>>> This is still the wrong direction of the flag. I just haven't seen good 
>>>> justification for changing the compiler in this way to merit the 
>>>> possibility of breaking working code.
>>> 
>>> Every change can break working code.  Warning changes can break working 
>>> code if it's compiled with -Werror.  "Show me a whole-percentage speedup or 
>>> take the optimization out" is not really a reasonable response to every 
>>> last proposal.
>>> 
>>> Yes, but that doesn't mean such changes should be made without 
>>> consideration either. My argument is that I do not think there is 
>>> sufficient user benefit to motivate this change.
>>> 
>>>  In LLVM and clang, we have a lot of places where we use unreachable 
>>> annotations;  I think Chandler's argument is quite correct that these 
>>> situations come up all the time for many users and that it's ultimately not 
>>> reasonable to expect non-compiler people to use those annotations 
>>> pervasively.
>>> 
>>> Our specific internal problem that makes this seem like a non-starter is 
>>> that we have a pool of known code that's very awkward to fix.  We do 
>>> control the build environment for that code, though.  For purposes of 
>>> investigation, we can reasonably assume that any project that turns off 
>>> -Wreturn-value should probably also disable the optimization.  Any 
>>> stragglers can be tracked down and fixed just like we would with any other 
>>> compiler change.
>>> 
>>> You are hijacking my argument. My opinion doesn't have anything to do with 
>>> an internal problem, I just happen to think this is the wrong choice for 
>>> users.
>>> 
>>> In my opinion, for *most* users and most code it is more important that the 
>>> code work than that it be optimal. I think this is the kind of optimization 
>>> that compiler hackers and low-level optimization people might find very 
>>> desirable, but anyone writing code that depended on it should still be 
>>> using an attribute or other marker.
>>> 
>>> Again in my opinion, for most users, the compiler is just a tool they use 
>>> to get work done. They like it to optimize, and they like it to give nice 
>>> warnings, but overall they want it to help them get work done and not force 
>>> them to change their code.
>> 
>> I do not think that this is a reasonable standard by which we can judge 
>> optimizations.  The compiler is a tool.  Like most tools, it can do good 
>> things but is capable of mischief.  Like most tools, users come to take the 
>> good things for granted, but they notice the mischief immediately.  It's 
>> wrong to forsake the good just because it's less visible;  you have to 
>> actually make a thoughtful decision to balance these things, and that means 
>> not immediately throwing out all the good the first time you see the bad.
>> 
>> By these standards, what is the good that this change is making?
>> 
>> I stand by what I said before -- I still have not seen justification for 
>> changing the compiler in this way to merit the possibility of breaking 
>> working code.
>> 
>> The only justification that has been offered so far is that this change can 
>> help the compiler optimize somewhat better ***only in the case of code that 
>> would emit a compiler warning***.
> 
> A user can audit their code, decide that the end of a function is in practice 
> unreachable, and take appropriate measures — they might disable that warning, 
> either file-wide or with a #pragma, or they might simply choose to ignore it, 
> knowing that it's a false positive.
> 
> Are you seriously proposing this is the "good thing"? I feel this is just 
> arguing to win not arguing for what is good for the user.

No.  The good thing is that the compiler can optimize somewhat better.  You 
argued in response (if I understood you) that the supposed optimization 
opportunities are actually harmful because you believe they only occur 
simultaneously with a compiler warning, and so it seems likely that we'd only 
be optimizing buggy code.  I'm saying that the nominal existence of a warning 
doesn't actually mean that the code is buggy, because the warning might very 
reasonably be suppressed or ignored as a false positive even by responsible 
developers.

I would add that there are common situations where the warning is suppressed — 
for example, a switch statement that appears to "cover" an enum and where every 
case returns — that we'd like to be able to optimize a lack of return after.  
It's not clear to me whether you favor us being able to do that.

John.
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to