On Fri, 9 Feb 2024, Patrick Palka wrote:
> Bootstrapped and regtested on x86_64-pc-linux-gnu, does this look
> OK for trunk?
>
> I'll try to reduce and add testcases overnight for these separate bugs
> before pushing.
>
> -- >8 --
>
> Building modular fmtlib triggered two small modules bugs in C++23 and
> C++26 mode respectively (due to libstdc++ header differences).
>
> The first is that a TEMPLATE_DECL having DECL_LANG_SPECIFIC doesn't
> necessarily imply that its DECL_TEMPLATE_RESULT has DECL_LANG_SPECIFIC.
> So we need to use STRIP_TEMPLATE consistently; this is a follow-up to
> r12-7187-gdb84f382ae3dc2.
>
> The second is that get_originating_module_decl was ICEing on class-scope
> enumerators injected via using-enum.
>
> gcc/cp/ChangeLog:
>
> * module.cc (depset::hash::add_specializations): Use
> STRIP_TEMPLATE consistently.
> (get_originating_module_decl): Handle class-scope CONST_DECL.
> ---
> gcc/cp/module.cc | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc
> index 3c2fef0e3f4..659fa03dae1 100644
> --- a/gcc/cp/module.cc
> +++ b/gcc/cp/module.cc
> @@ -13248,7 +13248,7 @@ depset::hash::add_specializations (bool decl_p)
> if (use_tpl == 1)
> /* Implicit instantiations only walked if we reach them. */
> needs_reaching = true;
> - else if (!DECL_LANG_SPECIFIC (spec)
> + else if (!DECL_LANG_SPECIFIC (STRIP_TEMPLATE (spec))
> || !DECL_MODULE_PURVIEW_P (STRIP_TEMPLATE (spec)))
> /* Likewise, GMF explicit or partial specializations. */
> needs_reaching = true;
> @@ -18708,7 +18708,8 @@ get_originating_module_decl (tree decl)
> && (TREE_CODE (DECL_CONTEXT (decl)) == ENUMERAL_TYPE))
> decl = TYPE_NAME (DECL_CONTEXT (decl));
> else if (TREE_CODE (decl) == FIELD_DECL
> - || TREE_CODE (decl) == USING_DECL)
> + || TREE_CODE (decl) == USING_DECL
> + || TREE_CODE (decl) == CONST_DECL)
On second thought maybe we should test for CONST_DECL_USING_P (decl)
specifically. In other contexts a CONST_DECL could be a template
parameter, so using CONST_DECL_USING_P makes this code more readable
arguably.
> {
> decl = DECL_CONTEXT (decl);
> if (TREE_CODE (decl) != FUNCTION_DECL)
> --
> 2.43.0.561.g235986be82
>
>