+2015-09-22 Patrick Palka <ppalka@gcc.gnu.org>
+
+ * c-indentation.c (should_warn_for_misleading_indentation):
+ Float out and consolidate the calls to get_visual_column that
+ are passed guard_exploc as an argument. Compare
+ next_stmt_vis_column with guard_line_first_nws instead of with
+ body_line_first_nws.
+
2015-09-22 Nathan Sidwell <nathan@codesourcery.com>
* c.opt (Wmultiple-inheritance, Wvirtual-inheritance, Wtemplates,
unsigned int next_stmt_vis_column;
unsigned int body_vis_column;
unsigned int body_line_first_nws;
+ unsigned int guard_vis_column;
+ unsigned int guard_line_first_nws;
/* If we can't determine it, don't issue a warning. This is sometimes
the case for input files containing #line directives, and these
are often for autogenerated sources (e.g. from .md files), where
&body_vis_column,
&body_line_first_nws))
return false;
+ if (!get_visual_column (guard_exploc,
+ &guard_vis_column,
+ &guard_line_first_nws))
+ return false;
+
if ((body_type != CPP_SEMICOLON
&& next_stmt_vis_column == body_vis_column)
/* As a special case handle the case where the body is a semicolon
|| (body_type == CPP_SEMICOLON
&& body_exploc.line > guard_exploc.line
&& body_line_first_nws != body_vis_column
- && next_stmt_vis_column == body_line_first_nws))
+ && next_stmt_vis_column > guard_line_first_nws))
{
/* Don't warn if they are aligned on the same column
as the guard itself (suggesting autogenerated code that doesn't
indentation is misleading). Using the column of the first
non-whitespace character on the guard line makes that
happen. */
- unsigned int guard_vis_column;
- unsigned int guard_line_first_nws;
- if (!get_visual_column (guard_exploc,
- &guard_vis_column,
- &guard_line_first_nws))
- return false;
-
if (guard_line_first_nws == body_vis_column)
return false;
{
if (body_exploc.line == guard_exploc.line)
{
- unsigned int guard_vis_column;
- unsigned int guard_line_first_nws;
- if (!get_visual_column (guard_exploc,
- &guard_vis_column,
- &guard_line_first_nws))
- return false;
-
if (next_stmt_vis_column > guard_line_first_nws
|| (next_tok_type == CPP_OPEN_BRACE
&& next_stmt_vis_column == guard_vis_column))
foo (0);
}
+ if (flagB) /* { dg-message "3: ...this 'if' clause" } */
+ /* blah */;
+ { /* { dg-warning "statement is indented as if" } */
+ foo (0);
+ }
+
+
if (flagB)
;
else; foo (0); /* { dg-warning "statement is indented as if" } */
else if (flagB); /* { dg-message "8: ...this 'if' clause" } */
foo (2); /* { dg-warning "statement is indented as if" } */
+ for (i = 0; /* { dg-message "3: ...this 'for' clause" } */
+ i < 10;
+ i++);
+ foo (i); /* { dg-warning "statement is indented as if" } */
+
#undef EMPTY
#undef FOR_EACH
}
if (flagB)
foo (2);
foo (3);
+
+ for (i = 0;
+ i < 10;
+ i++
+ );
+ foo (i);
}
/* The following function contains good indentation which we definitely should
void
fn_39 (void)
{
+ int i;
+
if (flagA)
;
if (flagB)
foo (1);
else
foo (2);
+
+ for (i = 0;
+ i < 10;
+ i++);
+ foo (i);
}