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

--- Comment #1 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by David Malcolm <dmalc...@gcc.gnu.org>:

https://gcc.gnu.org/g:9f4fdc3acebcf6b045edea1361570658da4bc0ab

commit r15-1540-g9f4fdc3acebcf6b045edea1361570658da4bc0ab
Author: David Malcolm <dmalc...@redhat.com>
Date:   Fri Jun 21 08:46:13 2024 -0400

    diagnostics: fixes to SARIF output [PR109360]

    When adding validation of .sarif files against the schema
    (PR testsuite/109360) I discovered various issues where we were
    generating invalid .sarif files.

    Specifically, in
      c-c++-common/diagnostic-format-sarif-file-bad-utf8-pr109098-1.c
    the relatedLocations for the "note" diagnostics were missing column
    numbers, leading to validation failure due to non-unique elements,
    such as multiple:
            "message": {"text": "invalid UTF-8 character <bf>"}},
    on line 25 with no column information.

    Root cause is that for some diagnostics in libcpp we have a location_t
    representing the line as a whole, setting a column_override on the
    rich_location (since the line hasn't been fully read yet).  We were
    handling this column override for plain text output, but not for .sarif
    output.

    Similarly, in diagnostic-format-sarif-file-pr111700.c there is a warning
    emitted on "line 0" of the file, whereas SARIF requires line numbers to
    be positive.

    We also use column == 0 internally to mean "the line as a whole",
    whereas SARIF required column numbers to be positive.

    This patch fixes these various issues.

    gcc/ChangeLog:
            PR testsuite/109360
            * diagnostic-format-sarif.cc
            (sarif_builder::make_location_object): Pass any column override
            from rich_loc to maybe_make_physical_location_object.
            (sarif_builder::maybe_make_physical_location_object): Add
            "column_override" param and pass it to maybe_make_region_object.
            (sarif_builder::maybe_make_region_object): Add "column_override"
            param and use it when the location has 0 for a column.  Don't
            add "startLine", "startColumn", "endLine", or "endColumn" if
            the values aren't positive.
            (sarif_builder::maybe_make_region_object_for_context): Don't
            add "startLine" or "endLine" if the values aren't positive.

    libcpp/ChangeLog:
            PR testsuite/109360
            * include/rich-location.h (rich_location::get_column_override):
            New accessor.

    Signed-off-by: David Malcolm <dmalc...@redhat.com>

Reply via email to