https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97117

--- Comment #2 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Patrick Palka <ppa...@gcc.gnu.org>:

https://gcc.gnu.org/g:4394b1ce7731b04446555e034163b14b4f4a7f8d

commit r11-4848-g4394b1ce7731b04446555e034163b14b4f4a7f8d
Author: Patrick Palka <ppa...@redhat.com>
Date:   Mon Nov 9 11:09:42 2020 -0500

    c-family: Fix regression in location-overflow-test-1.c [PR97117]

    The r11-3266 patch that added macro support to -Wmisleading-indentation
    accidentally suppressed the column-tracking diagnostic in
    get_visual_column in some cases, e.g. in the location-overflow-test-1.c
    testcase.

    More generally, when all three tokens are on the same line and we've run
    out of locations with column info, then their location_t values will be
    equal, and we exit early from should_warn_for_misleading_indentation due
    to the new check

      /* Give up if the loci are not all distinct.  */
      if (guard_loc == body_loc || body_loc == next_stmt_loc)
        return false;

    before we ever call get_visual_column.

    [ This new check is needed to detect and give up on analyzing code
      fragments where exactly two out of the three tokens come from the same
      macro expansion, e.g.

        #define MACRO \
          if (a)      \
            foo ();

        MACRO; bar ();

      Here, guard_loc and body_loc will be equal and point to the macro
      expansion point (and next_stmt_loc will point to 'bar').  The heuristics
      that the warning uses are not really valid in scenarios like these.  ]

    In order to restore the column-tracking diagnostic, this patch moves the
    the diagnostic code out from get_visual_column to earlier in
    should_warn_for_misleading_indentation.  Moreover, it tests the three
    locations for a zero column all at once, which I suppose should make us
    issue the diagnostic more consistently.

    gcc/c-family/ChangeLog:

            PR testsuite/97117
            * c-indentation.c (get_visual_column): Remove location_t
            parameter.  Move the column-tracking diagnostic code from here
            to ...
            (should_warn_for_misleading_indentation): ... here, before the
            early exit for when the loci are not all distinct.  Don't pass a
            location_t argument to get_visual_column.
            (assert_get_visual_column_succeeds): Don't pass a location_t
            argument to get_visual_column.
            (assert_get_visual_column_fails): Likewise.
  • [Bug testsuite/97117] [11 regre... cvs-commit at gcc dot gnu.org via Gcc-bugs

Reply via email to