From patchwork Tue Mar 22 14:28:29 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: David Malcolm X-Patchwork-Id: 600826 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3qTw706jdgz9s9W for ; Wed, 23 Mar 2016 01:29:00 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=FUVIsuR4; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :message-id:subject:from:to:date:in-reply-to:references :content-type:mime-version; q=dns; s=default; b=bbJxF2lnM/SabBbg piCnmn+TslJB0QI0VLI1pWcZjVSMKBOqzXFaPkoHUBFnmSeR74UC7e5sSkxGXl8U fKD+78o8YcXwLBm2T+AXTdx1hvOyamYHJRBsw/J442RLlQZqn5YjDHcly0dzrC5c 4FlWgYZNE1eAm6vAmkgNktwg5pE= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :message-id:subject:from:to:date:in-reply-to:references :content-type:mime-version; s=default; bh=HyuTftVoMnNWmq0DnwIT2t VPikM=; b=FUVIsuR4/hBV1s4nrcwM44LUzWmTZGC9MOjIuR0hO7E8Ge0V294slB SQiC9jhk3na4qndfbakbBLj/6FCLjVXI8Tz/fQUsSKX/mfsNp/khRjupX3beWSAV juZy5eY3I/qR0GrTsirjznz6RfsTnVhBQO84PgeQOzXjPJmNK/Ea8= Received: (qmail 111110 invoked by alias); 22 Mar 2016 14:28:47 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 110995 invoked by uid 89); 22 Mar 2016 14:28:46 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.1 required=5.0 tests=BAYES_00, KAM_ASCII_DIVIDERS, SPF_HELO_PASS, T_RP_MATCHES_RCVD autolearn=no version=3.3.2 spammy=voice, if, liberty, locked X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Tue, 22 Mar 2016 14:28:32 +0000 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id 975CDC802; Tue, 22 Mar 2016 14:28:31 +0000 (UTC) Received: from vpn-230-20.phx2.redhat.com (vpn-230-20.phx2.redhat.com [10.3.230.20]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u2MESUrX025175; Tue, 22 Mar 2016 10:28:30 -0400 Message-ID: <1458656909.9902.87.camel@redhat.com> Subject: Re: [PATCH] PR c/69993: improvements to wording of -Wmisleading-indentation From: David Malcolm To: Richard Biener , gcc-patches@gcc.gnu.org Date: Tue, 22 Mar 2016 10:28:29 -0400 In-Reply-To: <599761CD-03E1-4F65-BB7B-1B392A2476FD@gmail.com> References: <1456858261-61438-1-git-send-email-dmalcolm@redhat.com> <599761CD-03E1-4F65-BB7B-1B392A2476FD@gmail.com> Mime-Version: 1.0 X-IsSubscribed: yes On Tue, 2016-03-01 at 20:18 +0100, Richard Biener wrote: > On March 1, 2016 7:51:01 PM GMT+01:00, David Malcolm < > dmalcolm@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_wmislead > > ingindentation_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) > > ^~ > > > > However another Reddit user ("ksion") noted here: > > https://www.reddit.com/r/programming/comments/47pejg/gcc_6_wmislead > > ingindentation_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. > > > > The attached patch implements such a change, so that the warning is > > issued on the supposed guard clause, followed by the note on the > > statement that isn't really guarded. > > > > Some examples: > > > > Wmisleading-indentation-3.c:18:3: warning: this 'for' clause does > > not > > guard... [-Wmisleading-indentation] > > for (i = 0; i < 10; i++) > > ^~~ > > Wmisleading-indentation-3.c:20:5: note: ...this statement, but the > > latter is indented as if it does > > prod[i] = a[i] * b[i]; > > ^~~~ > > Wmisleading-indentation-3.c: In function 'fn_6': > > Wmisleading-indentation-3.c:39:2: warning: this 'if' clause does > > not > > guard... [-Wmisleading-indentation] > > if ((err = foo (b)) != 0) > > ^~ > > Wmisleading-indentation-3.c:41:3: note: ...this statement, but the > > latter is indented as if it does > > goto fail; > > ^~~~ > > > > I'm not totally convinced by my new wording; maybe the note could > > also mention the kind of clause ('if'/'while'/'else'/'for') for > > clarity, maybe something like: > > > > Wmisleading-indentation-3.c: In function 'fn_6': > > Wmisleading-indentation-3.c:39:2: warning: this 'if' clause does > > not > > guard... [-Wmisleading-indentation] > > if ((err = foo (b)) != 0) > > ^~ > > Wmisleading-indentation-3.c:41:3: note: ...this statement, but the > > latter is misleadingly indented > > as if it is guarded by the 'if' > > goto fail; > > ^~~~ > > > > Also, it's slightly clunkier when it comes to macros, e.g.: > > > > Wmisleading-indentation-3.c: In function 'fn_14': > > Wmisleading-indentation-3.c:60:3: warning: this 'for' clause does > > not > > guard... [-Wmisleading-indentation] > > for ((VAR) = (START); (VAR) < (STOP); (VAR++)) > > ^ > > Wmisleading-indentation-3.c:65:3: note: in expansion of macro > > 'FOR_EACH' > > FOR_EACH (i, 0, 10) > > ^~~~~~~~ > > Wmisleading-indentation-3.c:67:5: note: ...this statement, but the > > latter is indented as if it does > > bar (i, i); > > ^~~ > > > > That said, the reordering idea is something I'd like to do for GCC > > 6. > > Failing that, there's the tweak to the wording suggested at the > > top. > > > > OK for trunk? (assuming we can agree on the wording, and that the > > latest > > version passes testing) > > OK if others don't disagree. Thanks. I took the liberty of tweaking the wording to the longer one given above, which repeats the type of the clause (for clarity), refreshed it to cover new tests for -Wmisleading-indentation, verified bootstrap and regrtest, and committed it as r234403 (attached, for reference). Here's what the new wording looks like on CVE-2014-1266: sslKeyExchange.c: In function ‘SSLVerifySignedServerKeyExchange’: sslKeyExchange.c:629:3: warning: this ‘if’ clause does not guard... [ -Wmisleading-indentation] if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0) ^~ sslKeyExchange.c:631:5: note: ...this statement, but the latter is misleadingly indented as if it is guarded by the ‘if’ goto fail; ^~~~ I plan to update the website accordingly. Dave Index: gcc/c-family/c-indentation.c =================================================================== --- gcc/c-family/c-indentation.c (revision 234402) +++ gcc/c-family/c-indentation.c (revision 234403) @@ -602,10 +602,12 @@ body_tinfo, next_tinfo)) { - if (warning_at (next_tinfo.location, OPT_Wmisleading_indentation, - "statement is indented as if it were guarded by...")) - inform (guard_tinfo.location, - "...this %qs clause, but it is not", + if (warning_at (guard_tinfo.location, OPT_Wmisleading_indentation, + "this %qs clause does not guard...", + guard_tinfo_to_string (guard_tinfo))) + inform (next_tinfo.location, + ("...this statement, but the latter is misleadingly indented" + " as if it is guarded by the %qs"), guard_tinfo_to_string (guard_tinfo)); } } Index: gcc/c-family/ChangeLog =================================================================== --- gcc/c-family/ChangeLog (revision 234402) +++ gcc/c-family/ChangeLog (revision 234403) @@ -1,3 +1,10 @@ +2016-03-22 David Malcolm + + PR c/69993 + * c-indentation.c (warn_for_misleading_indentation): Rewrite the + diagnostic text, reversing the order of the warning and note so + that they appear in source order. + 2016-03-17 Marek Polacek PR c/69407 Index: gcc/testsuite/gcc.dg/plugin/location-overflow-test-2.c =================================================================== --- gcc/testsuite/gcc.dg/plugin/location-overflow-test-2.c (revision 234402) +++ gcc/testsuite/gcc.dg/plugin/location-overflow-test-2.c (revision 234403) @@ -20,7 +20,7 @@ fn_1 (int flag) { int foo = 4, bar = 5; - if (flag) foo = 3; bar = 2; /* { dg-warning "indented" } */ + if (flag) foo = 3; bar = 2; /* { dg-warning "this .if." } */ return foo * bar; } Index: gcc/testsuite/ChangeLog =================================================================== --- gcc/testsuite/ChangeLog (revision 234402) +++ gcc/testsuite/ChangeLog (revision 234403) @@ -1,3 +1,12 @@ +2016-03-22 David Malcolm + + PR c/69993 + * c-c++-common/Wmisleading-indentation-3.c: New test, based on + Wmisleading-indentation.c. + * c-c++-common/Wmisleading-indentation.c: Update thoughout to + reflect change to diagnostic text and order of messages. + * gcc.dg/plugin/location-overflow-test-2.c: Likewise. + 2016-03-22 David Edelsohn * g++.dg/ext/java-3.C: Don't compile on AIX. Index: gcc/testsuite/c-c++-common/Wmisleading-indentation-3.c =================================================================== --- gcc/testsuite/c-c++-common/Wmisleading-indentation-3.c (revision 0) +++ gcc/testsuite/c-c++-common/Wmisleading-indentation-3.c (revision 234403) @@ -0,0 +1,82 @@ +/* Verify -Wmisleading-indentation with source-printing. + This is a subset of Wmisleading-indentation.c. */ + +/* { dg-options "-Wmisleading-indentation -fdiagnostics-show-caret" } */ +/* { dg-do compile } */ + +extern int foo (int); +extern int bar (int, int); +extern int flagA; +extern int flagB; +extern int flagC; +extern int flagD; + +void +fn_5 (double *a, double *b, double *sum, double *prod) +{ + int i = 0; + for (i = 0; i < 10; i++) /* { dg-warning "3: this 'for' clause does not guard..." } */ + sum[i] = a[i] * b[i]; + prod[i] = a[i] * b[i]; /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'for'" } */ +/* { dg-begin-multiline-output "" } + for (i = 0; i < 10; i++) + ^~~ + { dg-end-multiline-output "" } */ +/* { dg-begin-multiline-output "" } + prod[i] = a[i] * b[i]; + ^~~~ + { dg-end-multiline-output "" } */ +} + +/* Based on CVE-2014-1266 aka "goto fail" */ +int fn_6 (int a, int b, int c) +{ + int err; + + /* ... */ + if ((err = foo (a)) != 0) + goto fail; + if ((err = foo (b)) != 0) /* { dg-message "2: this 'if' clause does not guard..." } */ + goto fail; + goto fail; /* { dg-message "3: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */ + if ((err = foo (c)) != 0) + goto fail; + /* ... */ + +/* { dg-begin-multiline-output "" } + if ((err = foo (b)) != 0) + ^~ + { dg-end-multiline-output "" } */ +/* { dg-begin-multiline-output "" } + goto fail; + ^~~~ + { dg-end-multiline-output "" } */ + +fail: + return err; +} + +#define FOR_EACH(VAR, START, STOP) \ + for ((VAR) = (START); (VAR) < (STOP); (VAR++)) /* { dg-warning "3: this 'for' clause does not guard..." } */ + +void fn_14 (void) +{ + int i; + FOR_EACH (i, 0, 10) /* { dg-message "in expansion of macro .FOR_EACH." } */ + foo (i); + bar (i, i); /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'for'" } */ + +/* { dg-begin-multiline-output "" } + for ((VAR) = (START); (VAR) < (STOP); (VAR++)) + ^ + { dg-end-multiline-output "" } */ +/* { dg-begin-multiline-output "" } + FOR_EACH (i, 0, 10) + ^~~~~~~~ + { dg-end-multiline-output "" } */ +/* { dg-begin-multiline-output "" } + bar (i, i); + ^~~ + { dg-end-multiline-output "" } */ +} +#undef FOR_EACH Index: gcc/testsuite/c-c++-common/Wmisleading-indentation.c =================================================================== --- gcc/testsuite/c-c++-common/Wmisleading-indentation.c (revision 234402) +++ gcc/testsuite/c-c++-common/Wmisleading-indentation.c (revision 234403) @@ -12,9 +12,9 @@ fn_1 (int flag) { int x = 4, y = 5; - if (flag) /* { dg-message "3: ...this 'if' clause, but it is not" } */ + if (flag) /* { dg-warning "3: this 'if' clause does not guard..." } */ x = 3; - y = 2; /* { dg-warning "statement is indented as if it were guarded by..." } */ + y = 2; /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */ return x * y; } @@ -21,8 +21,8 @@ int fn_2 (int flag, int x, int y) { - if (flag) /* { dg-message "3: ...this 'if' clause, but it is not" } */ - x++; y++; /* { dg-warning "statement is indented as if it were guarded by..." } */ + if (flag) /* { dg-warning "3: this 'if' clause does not guard..." } */ + x++; y++; /* { dg-message "10: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */ return x * y; } @@ -33,9 +33,9 @@ int x = 4, y = 5; if (flag) x = 3; - else /* { dg-message "3: ...this 'else' clause, but it is not" } */ + else /* { dg-warning "3: this 'else' clause does not guard..." } */ x = 2; - y = 2; /* { dg-warning "statement is indented as if it were guarded by..." } */ + y = 2; /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'else'" } */ return x * y; } @@ -43,9 +43,9 @@ fn_4 (double *a, double *b, double *c) { int i = 0; - while (i < 10) /* { dg-message "3: ...this 'while' clause, but it is not" } */ + while (i < 10) /* { dg-warning "3: this 'while' clause does not guard..." } */ a[i] = b[i] * c[i]; - i++; /* { dg-warning "statement is indented as if it were guarded by..." } */ + i++; /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'while'" } */ } void @@ -52,9 +52,9 @@ fn_5 (double *a, double *b, double *sum, double *prod) { int i = 0; - for (i = 0; i < 10; i++) /* { dg-output "3: ...this 'for' clause, but it is not" } */ + for (i = 0; i < 10; i++) /* { dg-warning "3: this 'for' clause does not guard..." } */ sum[i] = a[i] * b[i]; - prod[i] = a[i] * b[i]; /* { dg-warning "statement is indented as if it were guarded by..." } */ + prod[i] = a[i] * b[i]; /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'for'" } */ } /* Based on CVE-2014-1266 aka "goto fail" */ @@ -65,9 +65,9 @@ /* ... */ if ((err = foo (a)) != 0) goto fail; - if ((err = foo (b)) != 0) /* { dg-message "2: ...this 'if' clause, but it is not" } */ + if ((err = foo (b)) != 0) /* { dg-message "2: this 'if' clause does not guard..." } */ goto fail; - goto fail; /* { dg-warning "statement is indented as if it were guarded by..." } */ + goto fail; /* { dg-message "3: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */ if ((err = foo (c)) != 0) goto fail; /* ... */ @@ -80,8 +80,8 @@ { if (bar (p, q)) { - if (p) /* { dg-message "7: ...this 'if' clause, but it is not" } */ - q++; r++; /* { dg-warning "statement is indented as if it were guarded by..." } */ + if (p) /* { dg-message "7: this 'if' clause does not guard..." } */ + q++; r++; /* { dg-message "14: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */ t++; } return p + q + r + s + t; @@ -95,20 +95,20 @@ void fn_9 (int flag) { - if (flag) /* { dg-message "3: ...this 'if' clause, but it is not" } */ + if (flag) /* { dg-warning "3: this 'if' clause does not guard..." } */ foo (0); - foo (1); /* { dg-warning "statement is indented as if it were guarded by..." } */ + foo (1); /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */ } void fn_10 (int flag) { - if (flag) /* { dg-message "3: ...this 'if' clause, but it is not" } */ + if (flag) /* { dg-warning "3: this 'if' clause does not guard..." } */ if (flag / 2) { foo (0); foo (1); } - foo (2); /* { dg-warning "statement is indented as if it were guarded by..." } */ + foo (2); /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */ foo (3); } @@ -116,48 +116,48 @@ { if (flagA) if (flagB) - if (flagC) /* { dg-message "7: ...this 'if' clause, but it is not" } */ + if (flagC) /* { dg-message "7: this 'if' clause does not guard..." } */ foo (0); - bar (1, 2); /* { dg-warning "statement is indented as if it were guarded by..." } */ + bar (1, 2); /* { dg-message "9: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */ } void fn_12 (void) { if (flagA) - if (flagB) /* { dg-message "5: ...this 'if' clause, but it is not" } */ + if (flagB) /* { dg-message "5: this 'if' clause does not guard..." } */ if (flagC) foo (0); - bar (1, 2); /* { dg-warning "statement is indented as if it were guarded by..." } */ + bar (1, 2); /* { dg-message "7: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */ } void fn_13 (void) { - if (flagA) /* { dg-message "3: ...this 'if' clause, but it is not" } */ + if (flagA) /* { dg-warning "3: this 'if' clause does not guard..." } */ if (flagB) if (flagC) foo (0); - bar (1, 2); /* { dg-warning "statement is indented as if it were guarded by..." } */ + bar (1, 2); /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */ } #define FOR_EACH(VAR, START, STOP) \ - for ((VAR) = (START); (VAR) < (STOP); (VAR++)) /* { dg-message "3: ...this 'for' clause, but it is not" } */ + for ((VAR) = (START); (VAR) < (STOP); (VAR++)) /* { dg-warning "3: this 'for' clause does not guard..." } */ void fn_14 (void) { int i; - FOR_EACH (i, 0, 10) /* { dg-message "3: in expansion of macro" } */ + FOR_EACH (i, 0, 10) /* { dg-message "in expansion of macro .FOR_EACH." } */ foo (i); - bar (i, i); /* { dg-warning "statement is indented as if it were guarded by..." } */ + bar (i, i); /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'for'" } */ } #undef FOR_EACH -#define FOR_EACH(VAR, START, STOP) for ((VAR) = (START); (VAR) < (STOP); (VAR++)) /* { dg-message "36: ...this 'for' clause, but it is not" } */ +#define FOR_EACH(VAR, START, STOP) for ((VAR) = (START); (VAR) < (STOP); (VAR++)) /* { dg-message "36: this 'for' clause does not guard..." } */ void fn_15 (void) { int i; - FOR_EACH (i, 0, 10) /* { dg-message "3: in expansion of macro" } */ + FOR_EACH (i, 0, 10) /* { dg-message "in expansion of macro .FOR_EACH." } */ foo (i); - bar (i, i); /* { dg-warning "statement is indented as if it were guarded by..." } */ + bar (i, i); /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'for'" } */ } #undef FOR_EACH @@ -166,9 +166,9 @@ int i; for (i = 0; i < 10; i++) while (flagA) - if (flagB) /* { dg-message "7: ...this 'if' clause, but it is not" } */ + if (flagB) /* { dg-message "7: this 'if' clause does not guard..." } */ foo (0); - foo (1); /* { dg-warning "statement is indented as if it were guarded by..." } */ + foo (1); /* { dg-message "9: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */ } void fn_16_tabs (void) @@ -176,29 +176,29 @@ int i; for (i = 0; i < 10; i++) while (flagA) - if (flagB) /* { dg-message "7: ...this 'if' clause, but it is not" } */ + if (flagB) /* { dg-message "7: this 'if' clause does not guard..." } */ foo (0); - foo (1);/* { dg-warning "statement is indented as if it were guarded by..." } */ + foo (1);/* { dg-message "2: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */ } void fn_17_spaces (void) { int i; - for (i = 0; i < 10; i++) /* { dg-message "3: ...this 'for' clause, but it is not" } */ + for (i = 0; i < 10; i++) /* { dg-warning "3: this 'for' clause does not guard..." } */ while (flagA) if (flagB) foo (0); - foo (1);/* { dg-warning "statement is indented as if it were guarded by..." } */ + foo (1);/* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'for'" } */ } void fn_17_tabs (void) { int i; - for (i = 0; i < 10; i++) /* { dg-message "3: ...this 'for' clause, but it is not" } */ + for (i = 0; i < 10; i++) /* { dg-warning "3: this 'for' clause does not guard..." } */ while (flagA) if (flagB) foo (0); - foo (1);/* { dg-warning "statement is indented as if it were guarded by..." } */ + foo (1);/* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'for'" } */ } void fn_18_spaces (void) @@ -205,10 +205,10 @@ { int i; for (i = 0; i < 10; i++) - while (flagA) /* { dg-message "5: ...this 'while' clause, but it is not" } */ + while (flagA) /* { dg-message "5: this 'while' clause does not guard..." } */ if (flagB) foo (0); - foo (1);/* { dg-warning "statement is indented as if it were guarded by..." } */ + foo (1);/* { dg-message "7: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'while'" } */ } void fn_18_tabs (void) @@ -215,10 +215,10 @@ { int i; for (i = 0; i < 10; i++) - while (flagA) /* { dg-message "5: ...this 'while' clause, but it is not" } */ + while (flagA) /* { dg-message "5: this 'while' clause does not guard..." } */ if (flagB) foo (0); - foo (1);/* { dg-warning "statement is indented as if it were guarded by..." } */ + foo (1);/* { dg-message "7: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'while'" } */ } /* This shouldn't lead to a warning. */ @@ -701,40 +701,40 @@ int i; #define EMPTY -#define FOR_EACH(VAR, START, STOP) for (VAR = START; VAR < STOP; VAR++) +#define FOR_EACH(VAR, START, STOP) for (VAR = START; VAR < STOP; VAR++) /* { dg-warning "this 'for' clause" } */ - while (flagA); /* { dg-message "3: ...this 'while' clause" } */ - foo (0); /* { dg-warning "statement is indented as if" } */ + while (flagA); /* { dg-warning "3: this 'while' clause" } */ + foo (0); /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'while'" } */ if (flagA) ; - else if (flagB); /* { dg-message "8: ...this 'if' clause" } */ - foo (0); /* { dg-warning "statement is indented as if" } */ - while (flagA) /* { dg-message "3: ...this 'while' clause" } */ + else if (flagB); /* { dg-warning "8: this 'if' clause" } */ + foo (0); /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */ + while (flagA) /* { dg-warning "3: this 'while' clause" } */ /* blah */; - foo (0); /* { dg-warning "statement is indented as if" } */ + foo (0); /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'while'" } */ if (flagA) ; - else if (flagB) /* { dg-message "8: ...this 'if' clause" } */ + else if (flagB) /* { dg-warning "8: this 'if' clause" } */ foo (1); - foo (2); /* { dg-warning "statement is indented as if" } */ + foo (2); /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */ if (flagA) foo (1); - else if (flagB) /* { dg-message "8: ...this 'if' clause" } */ + else if (flagB) /* { dg-warning "8: this 'if' clause" } */ foo (2); - foo (3); /* { dg-warning "statement is indented as if" } */ + foo (3); /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */ - if (flagB) /* { dg-message "3: ...this 'if' clause" } */ + if (flagB) /* { dg-warning "3: this 'if' clause" } */ /* blah */; - { /* { dg-warning "statement is indented as if" } */ + { /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */ foo (0); } - if (flagB) /* { dg-message "3: ...this 'if' clause" } */ + if (flagB) /* { dg-warning "3: this 'if' clause" } */ /* blah */; - { /* { dg-warning "statement is indented as if" } */ + { /* { dg-message "4: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */ foo (0); } @@ -741,68 +741,68 @@ if (flagB) ; - else; foo (0); /* { dg-warning "statement is indented as if" } */ + else; foo (0); /* { dg-warning "3: this 'else' clause" } */ - if (flagC); foo (2); /* { dg-warning "statement is indented as if" } */ + if (flagC); foo (2); /* { dg-warning "3: this 'if' clause" } */ - if (flagA) - ; /* blah */ { /* { dg-warning "statement is indented as if" } */ + if (flagA) /* { dg-warning "3: this 'if' clause" } */ + ; /* blah */ { /* { dg-message "18: ...this statement" } */ foo (1); } - if (flagB) ; /* { dg-message "3: ...this 'if' clause" } */ - return; /* { dg-warning "statement is indented as if" } */ + if (flagB) ; /* { dg-warning "3: this 'if' clause" } */ + return; /* { dg-message "5: ...this statement" } */ - if (flagB) EMPTY; /* { dg-message "3: ...this 'if' clause" } */ - foo (1); /* { dg-warning "statement is indented as if" } */ + if (flagB) EMPTY; /* { dg-warning "3: this 'if' clause" } */ + foo (1); /* { dg-message "5: ...this statement" } */ - for (i = 0; i < 10; i++); /* { dg-message "3: ...this 'for' clause" } */ - foo (2); /* { dg-warning "statement is indented as if" } */ + for (i = 0; i < 10; i++); /* { dg-warning "3: this 'for' clause" } */ + foo (2); /* { dg-message "5: ...this statement" } */ - FOR_EACH (i, 0, 10); - foo (2); /* { dg-warning "statement is indented as if" } */ + FOR_EACH (i, 0, 10); /* { dg-message "3: in expansion of macro .FOR_EACH." } */ + foo (2); /* { dg-message "5: ...this statement" } */ - FOR_EACH (i, 0, 10); - { /* { dg-warning "statement is indented as if" } */ + FOR_EACH (i, 0, 10); /* { dg-message "3: in expansion of macro .FOR_EACH." } */ + { /* { dg-message "5: ...this statement" } */ foo (3); } - FOR_EACH (i, 0, 10); - { /* { dg-warning "statement is indented as if" } */ + FOR_EACH (i, 0, 10); /* { dg-message "3: in expansion of macro .FOR_EACH." } */ + { /* { dg-message "3: ...this statement" } */ foo (3); } - while (i++); { /* { dg-warning "statement is indented as if" } */ + while (i++); { /* { dg-warning "3: this 'while' clause" } */ foo (3); } - if (i++); { /* { dg-warning "statement is indented as if" } */ + if (i++); { /* { dg-warning "3: this 'if' clause" } */ foo (3); } if (flagA) { foo (1); - } else /* { dg-message "5: ...this 'else' clause" } */ + } else /* { dg-warning "5: this 'else' clause" } */ if (flagB) foo (2); - foo (3); /* { dg-warning "statement is indented as if" } */ + foo (3); /* { dg-message "5: ...this statement" } */ if (flagA) foo (1); - else if (flagB); /* { dg-message "8: ...this 'if' clause" } */ - foo (2); /* { dg-warning "statement is indented as if" } */ + else if (flagB); /* { dg-warning "8: this 'if' clause" } */ + foo (2); /* { dg-message "5: ...this statement" } */ - for (i = 0; /* { dg-message "3: ...this 'for' clause" } */ + for (i = 0; /* { dg-warning "3: this 'for' clause" } */ i < 10; i++); - foo (i); /* { dg-warning "statement is indented as if" } */ + foo (i); /* { dg-message "5: ...this statement" } */ if (flagA) { foo (1); } - else if (flagB); /* { dg-message "8: ...this 'if' clause" } */ - { /* { dg-warning "statement is indented as if" } */ + else if (flagB); /* { dg-warning "8: this 'if' clause" } */ + { /* { dg-message "3: ...this statement" } */ foo (2); } @@ -1025,10 +1025,10 @@ if (locked) i = foo (0); - else /* { dg-message "...this .else. clause" } */ + else /* { dg-warning "this .else. clause" } */ i = foo (1); engine_ref_debug(e, 0, -1) - if (i > 0) /* { dg-warning "statement is indented" } */ + if (i > 0) /* { dg-message "...this statement" } */ return 1; return 0; #undef engine_ref_debug @@ -1117,7 +1117,7 @@ foo (1); } else if (flagB) /* { dg-message "...this .if. clause" } */ foo (2); - foo (3); /* { dg-warning "statement is indented" } */ + foo (3); /* { dg-message "...this statement" } */ } /* Aligned with the "else". Likewise, we should warn. */ @@ -1129,7 +1129,7 @@ foo (1); } else if (flagB) /* { dg-message "...this .if. clause" } */ foo (2); - foo (3); /* { dg-warning "statement is indented" } */ + foo (3); /* { dg-message "...this statement" } */ } /* Indented between the "else" and the "if". Likewise, we should warn. */ @@ -1141,7 +1141,7 @@ foo (1); } else if (flagB) /* { dg-message "...this .if. clause" } */ foo (2); - foo (3); /* { dg-warning "statement is indented" } */ + foo (3); /* { dg-message "...this statement" } */ } /* Aligned with the "if". Likewise, we should warn. */ @@ -1151,9 +1151,9 @@ { if (flagA) { foo (1); - } else if (flagB) /* { dg-message "...this .else. clause" } */ + } else if (flagB) /* { dg-warning "this .else. clause" } */ foo (2); - foo (3); /* { dg-warning "statement is indented" } */ + foo (3); /* { dg-message "...this statement" } */ } /* Indented more than the "if". Likewise, we should warn. */ @@ -1165,7 +1165,7 @@ foo (1); } else if (flagB) /* { dg-message "...this .if. clause" } */ foo (2); - foo (3); /* { dg-warning "statement is indented" } */ + foo (3); /* { dg-message "...this statement" } */ } /* Again, but without the 2nd "if". */ @@ -1210,9 +1210,9 @@ { if (flagA) { foo (1); - } else /* { dg-message "...this .else. clause" } */ + } else /* { dg-warning "this .else. clause" } */ foo (2); - foo (3); /* { dg-warning "statement is indented" } */ + foo (3); /* { dg-message "...this statement" } */ } /* Aligned with the "else". Likewise, we should warn. */ @@ -1222,9 +1222,9 @@ { if (flagA) { foo (1); - } else /* { dg-message "...this .else. clause" } */ + } else /* { dg-warning "this .else. clause" } */ foo (2); - foo (3); /* { dg-warning "statement is indented" } */ + foo (3); /* { dg-message "...this statement" } */ } /* Indented more than the "else". Likewise, we should warn. */ @@ -1234,7 +1234,7 @@ { if (flagA) { foo (1); - } else /* { dg-message "...this .else. clause" } */ + } else /* { dg-warning "this .else. clause" } */ foo (2); - foo (3); /* { dg-warning "statement is indented" } */ + foo (3); /* { dg-message "...this statement" } */ }