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

--- Comment #8 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Nathaniel Shead <[email protected]>:

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

commit r16-7062-gaaa06bae53e5b352a3c7c999e751e31e9e58f249
Author: Nathaniel Shead <[email protected]>
Date:   Fri Jan 9 17:21:08 2026 +1100

    c++/modules: Include instantiation origination for all name lookup
[PR122609]

    Many expressions rely on standard library names being visible when used,
    such as for structured bindings, typeid, coroutine traits, and so forth.
    When these expressions occur in templates, and the instantiations occur
    in a TU where those names are not visible, we currently error, even if
    the name was visible in the TU the template was defined.

    This is a poor user experience (made worse by fixit suggestions to add
    an include in the module the template was defined, which wouldn't fix
    the error anyway).  It seems reasonable to also include declarations that
    were visible at the point the instantiation originated.

    When using 'import std' this should fix most such errors.  If using
    traditional #includes to provide the standard library this may or may
    not fix the error; in many cases we may still incorrectly discard the
    relevant names (e.g. typeid in a template does not currently cause us to
    consider std::type_info to be decl-reachable).

    This also fixes the XFAIL in adl-12_b.C as we add_candidates now
    properly considers names visible in the instantiation context of the
    comparison.

            PR c++/122609
            PR c++/101140

    gcc/cp/ChangeLog:

            * cp-tree.h (visible_from_instantiation_origination): Declare.
            * module.cc: (orig_decl_for_instantiation): New function.
            (path_of_instantiation): Use it.
            (visible_from_instantiation_origination): New function.
            * name-lookup.cc (name_lookup::search_namespace_only): Also find
            names visible at the point the instantiation originated.

    gcc/testsuite/ChangeLog:

            * g++.dg/modules/adl-12_b.C: Remove XFAIL.
            * g++.dg/modules/inst-8_a.C: New test.
            * g++.dg/modules/inst-8_b.C: New test.
            * g++.dg/modules/inst-8_c.C: New test.
            * g++.dg/modules/inst-9_a.C: New test.
            * g++.dg/modules/inst-9_b.C: New test.
            * g++.dg/modules/inst-10_a.C: New test.
            * g++.dg/modules/inst-10_b.C: New test.
            * g++.dg/modules/inst-10_c.C: New test.

    Signed-off-by: Nathaniel Shead <[email protected]>
    Reviewed-by: Jason Merrill <[email protected]>

Reply via email to