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 > >