+2015-06-02 David Malcolm <dmalcolm@redhat.com>
+
+ PR c/66220:
+ * c-indentation.c (should_warn_for_misleading_indentation): Use
+ expand_location rather than expand_location_to_spelling_point.
+ Don't warn if the guarding statement is more indented than the
+ next/body stmts.
+
2015-06-02 David Malcolm <dmalcolm@redhat.com>
* c-indentation.c (warn_for_misleading_indentation): Bail out
if (next_tok_type == CPP_SEMICOLON)
return false;
- expanded_location body_exploc
- = expand_location_to_spelling_point (body_loc);
- expanded_location next_stmt_exploc
- = expand_location_to_spelling_point (next_stmt_loc);
+ expanded_location body_exploc = expand_location (body_loc);
+ expanded_location next_stmt_exploc = expand_location (next_stmt_loc);
/* They must be in the same file. */
if (next_stmt_exploc.file != body_exploc.file)
^ DON'T WARN HERE. */
if (next_stmt_exploc.line == body_exploc.line)
{
- expanded_location guard_exploc
- = expand_location_to_spelling_point (guard_loc);
+ expanded_location guard_exploc = expand_location (guard_loc);
if (guard_exploc.file != body_exploc.file)
return true;
if (guard_exploc.line < body_exploc.line)
#endif
bar ();
^ DON'T WARN HERE
+
+ if (flag) {
+ foo ();
+ } else
+ {
+ bar ();
+ }
+ baz ();
+ ^ DON'T WARN HERE
*/
if (next_stmt_exploc.line > body_exploc.line)
{
/* Don't warn if they aren't aligned on the same column
as the guard itself (suggesting autogenerated code that
doesn't bother indenting at all). */
- expanded_location guard_exploc
- = expand_location_to_spelling_point (guard_loc);
+ expanded_location guard_exploc = expand_location (guard_loc);
unsigned int guard_vis_column;
if (!get_visual_column (guard_exploc, &guard_vis_column))
return false;
if (guard_vis_column == body_vis_column)
return false;
+ /* PR 66220: Don't warn if the guarding statement is more
+ indented than the next/body stmts. */
+ if (guard_vis_column > body_vis_column)
+ return false;
+
/* Don't warn if there is multiline preprocessor logic between
the two statements. */
if (detect_preprocessor_logic (body_exploc, next_stmt_exploc))
}
foo(5);
}
+
+/* PR 66220. */
+int fn_35 (int v)
+{
+ int res = 28;
+
+ if (v == 2)
+ {
+ res = 27;
+ } else
+ {
+ res = 18;
+ }
+ return res;
+}
+
+/* This variant of K&R-style formatting (in the presence of conditional
+ compilation) shouldn't lead to a warning.
+
+ Based on false positive seen with r223098 when compiling
+ linux-4.0.3:arch/x86/crypto/aesni-intel_glue.c:aesni_init. */
+void
+fn_36 (void)
+{
+#if 1 /* e.g. some configuration variable. */
+ if (flagA) {
+ foo(0);
+ foo(1);
+ foo(2);
+ } else
+#endif
+ {
+ foo(3);
+ foo(4);
+ foo(5);
+ }
+ foo(6); /* We shouldn't warn here. */
+}