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

--- Comment #3 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Nathan Sidwell <nat...@gcc.gnu.org>:

https://gcc.gnu.org/g:f207eed69e2421695e240aaf47bf881c09cbdd8a

commit r11-7377-gf207eed69e2421695e240aaf47bf881c09cbdd8a
Author: Nathan Sidwell <nat...@acm.org>
Date:   Wed Feb 24 12:32:23 2021 -0800

    c++: Macro location fixes [PR 98718]

    This fixes some issues with macro maps.  We were incorrectly
    calculating the number of macro expansions in a location span, and I
    had a workaround that partially covered that up.  Further, while macro
    location spans are monotonic, that is not true of ordinary location
    spans.  Thus we need to insert an indirection array when binary
    searching the latter. (We load ordinary locations before loading
    imports, but macro locations afterwards.  We make sure an import
    location is de-macrofied, if needed.)

            PR c++/98718
            gcc/cp/
            * module.cc (ool): New indirection vector.
            (loc_spans::maybe_propagate): Location is not optional.
            (loc_spans::open): Likewise.  Assert monotonically advancing.
            (module_for_ordinary_loc): Use ool indirection vector.
            (module_state::write_prepare_maps): Do not count empty macro
            expansions.  Elide empty spans.
            (module_state::write_macro_maps): Skip empty expansions.
            (ool_cmp): New qsort comparator.
            (module_state::write): Create and destroy ool vector.
            (name_pending_imports): Fix dump push/pop.
            (preprocess_module): Likewise.  Add more dumping.
            (preprocessed_module): Likewise.
            libcpp/
            * include/line-map.h
            * line-map.c
            gcc/testsuite/
            * g++.dg/modules/pr98718_a.C: New.
            * g++.dg/modules/pr98718_b.C: New.

Reply via email to