[Bug c/68473] ICE: in contains_point, at diagnostic-show-locus.c:340 after error

dmalcolm at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Mar 9 18:15:00 GMT 2016


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

--- Comment #14 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
Author: dmalcolm
Date: Wed Mar  9 18:14:43 2016
New Revision: 234087

URL: https://gcc.gnu.org/viewcvs?rev=234087&root=gcc&view=rev
Log:
PR c++/70105: Defer location expansion until diagnostic_show_locus

gcc/ChangeLog:
        PR c/68473
        PR c++/70105
        * diagnostic-show-locus.c (layout_range::layout_range): Replace
        location_range param with three const expanded_locations * and a
        bool.
        (layout::layout): Replace call to
        rich_location::lazily_expand_location with get_expanded_location.
        Extract the range and perform location expansion here, passing
        the results to the layout_range ctor.
        * diagnostic.c (source_range::debug): Delete.
        * diagnostic.h (diagnostic_expand_location): Reimplement in terms
        of rich_location::get_expanded_location.
        * gcc-rich-location.c (get_range_for_expr): Delete.
        (gcc_rich_location::add_expr): Reimplement to avoid the
        rich_location::add_range overload that took a location_range,
        passing a location_t instead.

gcc/testsuite/ChangeLog:
        PR c/68473
        PR c++/70105
        * gcc.dg/plugin/diagnostic_plugin_show_trees.c (show_tree):
        Drop range information from call to inform_at_rich_loc.
        * gcc.dg/plugin/diagnostic_plugin_test_show_locus.c (add_range):
        New.
        (test_show_locus): Replace calls to rich_location::add_range with
        calls to add_range.  Rewrite the tests that used the now-defunct
        rich_location ctor taking a source_range.  Simplify other tests
        by replacing calls to COMBINE_LOCATION_DATA with calls to
        make_location.

libcpp/ChangeLog:
        PR c/68473
        PR c++/70105
        * include/line-map.h (source_range::debug): Delete.
        (struct location_range): Update comment.  Replace
        expanded_location fields "m_start", "m_finish", and "m_caret" with
        a source_location field: "m_loc".
        (class rich_location): Reword comment.
        (rich_location::get_loc): Reimplement in terms of a new overloaded
        variant which takes an unsigned int.
        (rich_location::get_loc_addr): Delete.
        (rich_location::add_range): Drop params "start" and "finish" in
        favor of param "loc".  Drop overloaded variants taking a
        source_range or location_range *.
        (rich_location::lazily_expand_location): Delete in favor of...
        (rich_location::get_expanded_location): New decl.
        (rich_location::m_loc): Delete field.
        (rich_location::m_column_override): New field.
        * line-map.c (rich_location::rich_location):  Drop name of
        line_maps * param.  Update initializations for deletion of field
        "m_loc" and addition of field "m_column_override".  Reimplement
        body as a call to add_range.  Delete overloaded variant taking a
        source_range.
        (rich_location::get_loc): New function.
        (rich_location::lazily_expand_location): Delete in favor of...
        (rich_location::get_expanded_location): New function.
        (rich_location::override_column): Reimplement.
        (rich_location::add_range): Drop params "start" and "finish" in
        favor of param "loc".  Eliminate location expansion in favor of
        simply storing loc.  Drop overloaded variants taking a
        source_range or location_range *.
        (rich_location::set_range): Eliminate location expansion.


Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/diagnostic-show-locus.c
    trunk/gcc/diagnostic.c
    trunk/gcc/diagnostic.h
    trunk/gcc/gcc-rich-location.c
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_show_trees.c
    trunk/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
    trunk/libcpp/ChangeLog
    trunk/libcpp/include/line-map.h
    trunk/libcpp/line-map.c


More information about the Gcc-bugs mailing list