On Tue, Mar 1, 2016 at 1:51 PM, David Malcolm <dmalc...@redhat.com> wrote:
> The wording of our output from -Wmisleading-indentation is rather
> confusing, as noted by Reddit user "sysop073" here:
>  
> https://www.reddit.com/r/programming/comments/47pejg/gcc_6_wmisleadingindentation_vs_goto_fail/d0eonwd
>
>> The way they split up the warning looks designed to trick you.
>> sslKeyExchange.c:631:8: warning: statement is indented as if it were guarded 
>> by... [-Wmisleading-indentation]
>>         goto fail;
>>         ^~~~
>> sslKeyExchange.c:629:4: note: ...this 'if' clause, but it is not
>>     if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
>>     ^~
>> You read the first half and it sounds like goto fail; is guarding something. 
>> Why would it not be:
>> sslKeyExchange.c:631:8: warning: statement is wrongly indented... 
>> [-Wmisleading-indentation]
>>         goto fail;
>>         ^~~~
>> sslKeyExchange.c:629:4: note: ...as if it were guarded by this 'if' clause
>>     if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
>>     ^~
>
> I agree that the current wording is suboptimal; certainly the wording
> would be much clearer if the wording of the "warning" only spoke about the
> statement in question, and the "note"/inform should then talk about the
> not-really-guarding guard.
>
> One rewording could be:
>
> sslKeyExchange.c:631:8: warning: statement is misleadingly indented... 
> [-Wmisleading-indentation]
>         goto fail;
>         ^~~~
> sslKeyExchange.c:629:4: note: ...as if it were guarded by this 'if' clause, 
> but it is not
>     if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
>     ^~

I prefer this one because it makes it clear that the problem is with
the misleadingly-indented goto and not with the if.

>
> However another Reddit user ("ksion") noted here:
>   
> https://www.reddit.com/r/programming/comments/47pejg/gcc_6_wmisleadingindentation_vs_goto_fail/d0eqyih
> that:
>> This is just passive voice, there is nothing tricky about it.
>> What I find more confusing -- and what your fix preserves -- is the
>> reversed order of offending lines of code in the source file and the message.
>>
>> I'd rather go with something like this:
>> sslKeyExchange.c:629:4: warning: indentation of a statement below this 'if' 
>> clause... [-Wmisleading-indentation]
>>     if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
>>     ^~
>> sslKeyExchange.c:631:8: note: ...suggests it is guarded by the 'if' clause, 
>> but it's not
>>         goto fail;
>>         ^~~~
>> You can even see how the indentation is wrong in the very error message.
>
> which suggests reversing the order of the messages, so that they appear
> in "source" order.
>
> I think this is a big improvement in the readability of the warning.

Using this wording order makes it seem that the problem is with the if
statement, because we emit a warning about it and then emit "only" a
note for the misleadingly-indented goto statement.

Reply via email to