We are emitting a bogus warning for the code
do foo (0); while (flagA);
^--- NEXT
^------------ BODY
^--------------- GUARD
In general I don't think we can get any useful indentation warning out
of a do-while statement, so this patch makes it so that we just skip
them.
Is this OK to commit after testing?
gcc/c-family/ChangeLog:
* c-indentation.c (should_warn_for_misleading_indentation):
Don't warn about do-while statements.
gcc/testsuite/ChangeLog:
* c-c++-common/Wisleading-indentation.c: Augment test.
---
gcc/c-family/c-indentation.c | 6 ++++++
gcc/testsuite/c-c++-common/Wmisleading-indentation.c | 2 ++
2 files changed, 8 insertions(+)
diff --git a/gcc/c-family/c-indentation.c b/gcc/c-family/c-indentation.c
index 638a9cf..1cbaab7 100644
--- a/gcc/c-family/c-indentation.c
+++ b/gcc/c-family/c-indentation.c
@@ -202,6 +202,12 @@ should_warn_for_misleading_indentation (const
token_indent_info &guard_tinfo,
if (line_table->seen_line_directive)
return false;
+ /* We can't usefully warn about do-while statements since the bodies of these
+ statements are always explicitly delimited at both ends, so control flow
is
+ quite obvious. */
+ if (guard_tinfo.keyword == RID_DO)
+ return false;
+
/* If the token following the body is a close brace or an "else"
then while indentation may be sloppy, there is not much ambiguity
about control flow, e.g.
diff --git a/gcc/testsuite/c-c++-common/Wmisleading-indentation.c
b/gcc/testsuite/c-c++-common/Wmisleading-indentation.c
index a3f5acd..72c21a0 100644
--- a/gcc/testsuite/c-c++-common/Wmisleading-indentation.c
+++ b/gcc/testsuite/c-c++-common/Wmisleading-indentation.c
@@ -890,4 +890,6 @@ fn_39 (void)
i < 10;
i++);
foo (i);
+
+ do foo (0); while (flagA);
}
--
2.7.0.rc1.98.gacf58d0.dirty