aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-family
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/c-family')
-rw-r--r--gcc/c-family/ChangeLog8
-rw-r--r--gcc/c-family/c-indentation.c26
2 files changed, 26 insertions, 8 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index 8fc0281..f1501bc 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,5 +1,13 @@
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
immediately if -Wmisleading-indentation isn't enabled.
diff --git a/gcc/c-family/c-indentation.c b/gcc/c-family/c-indentation.c
index 9aeebae..1e3a6d8 100644
--- a/gcc/c-family/c-indentation.c
+++ b/gcc/c-family/c-indentation.c
@@ -230,10 +230,8 @@ should_warn_for_misleading_indentation (location_t guard_loc,
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)
@@ -257,8 +255,7 @@ should_warn_for_misleading_indentation (location_t guard_loc,
^ 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)
@@ -299,6 +296,15 @@ should_warn_for_misleading_indentation (location_t guard_loc,
#endif
bar ();
^ DON'T WARN HERE
+
+ if (flag) {
+ foo ();
+ } else
+ {
+ bar ();
+ }
+ baz ();
+ ^ DON'T WARN HERE
*/
if (next_stmt_exploc.line > body_exploc.line)
{
@@ -319,14 +325,18 @@ should_warn_for_misleading_indentation (location_t guard_loc,
/* 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))