diff mbox

Refactor -Wmisleading-indentation API and extend coverage

Message ID alpine.DEB.2.20.1506071835180.9606@idea
State New
Headers show

Commit Message

Patrick Palka June 7, 2015, 11:09 p.m. UTC
The new heuristic turns out to trigger a common false positive (see test
case below) in many programs.  I have applied this diff on top of the
original patch to make the heuristic more strict.
diff mbox

Patch

diff --git a/gcc/c-family/c-indentation.c b/gcc/c-family/c-indentation.c
index d3e842b..5532ff4 100644
--- a/gcc/c-family/c-indentation.c
+++ b/gcc/c-family/c-indentation.c
@@ -390,7 +390,10 @@  should_warn_for_misleading_indentation (const common_token_info &guard_tinfo,
  		unsigned int guard_vis_column;
  		if (!get_visual_column (guard_exploc, &guard_vis_column))
  		  return false;
-		if (next_stmt_vis_column != guard_vis_column
+		if (next_stmt_vis_column > guard_vis_column
+		    || (guard_tinfo.keyword == RID_IF
+			&& next_stmt_vis_column < guard_vis_column
+			&& !is_first_nonwhitespace_on_line (guard_exploc))
  		    || (next_tok_type == CPP_OPEN_BRACE
  			&& next_stmt_vis_column == guard_vis_column))
  		  return true;
diff --git a/gcc/testsuite/c-c++-common/Wmisleading-indentation.c b/gcc/testsuite/c-c++-common/Wmisleading-indentation.c
index e8e04e3..fd25102 100644
--- a/gcc/testsuite/c-c++-common/Wmisleading-indentation.c
+++ b/gcc/testsuite/c-c++-common/Wmisleading-indentation.c
@@ -787,6 +787,13 @@  fn_37 (void)
      foo (3);
    }

+  if (i)
+    while (i++ < 10000);
+  foo (5);
+
+  if (i) while (i++ < 10000);
+  foo (5);
+
  #undef EMPTY
  #undef FOR_EACH
  }