From 43dddeef7a870ce4db7407f73660504b67a0a919 Mon Sep 17 00:00:00 2001 From: Nathaniel Shead Date: Sat, 24 May 2025 00:51:49 +1000 Subject: [PATCH] c++/modules: Fix stream-in of member using-decls [PR120414] When streaming in a reference to a data member, we have an oversight where we did not consider USING_DECLs, despite otherwise handling them here the same as fields. This patch corrects that mistake. PR c++/120414 gcc/cp/ChangeLog: * module.cc (trees_in::tree_node): Allow reading a USING_DECL when streaming tt_data_member. gcc/testsuite/ChangeLog: * g++.dg/modules/using-31_a.C: New test. * g++.dg/modules/using-31_b.C: New test. Signed-off-by: Nathaniel Shead Reviewed-by: Jason Merrill --- gcc/cp/module.cc | 3 ++- gcc/testsuite/g++.dg/modules/using-31_a.C | 18 ++++++++++++++++++ gcc/testsuite/g++.dg/modules/using-31_b.C | 5 +++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/modules/using-31_a.C create mode 100644 gcc/testsuite/g++.dg/modules/using-31_b.C diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc index 13f8770b7bd..17c040d26b0 100644 --- a/gcc/cp/module.cc +++ b/gcc/cp/module.cc @@ -10512,7 +10512,8 @@ trees_in::tree_node (bool is_use) res = lookup_field_ident (ctx, u ()); if (!res - || TREE_CODE (res) != FIELD_DECL + || (TREE_CODE (res) != FIELD_DECL + && TREE_CODE (res) != USING_DECL) || DECL_CONTEXT (res) != ctx) res = NULL_TREE; } diff --git a/gcc/testsuite/g++.dg/modules/using-31_a.C b/gcc/testsuite/g++.dg/modules/using-31_a.C new file mode 100644 index 00000000000..75bd87285e1 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/using-31_a.C @@ -0,0 +1,18 @@ +// PR c++/120414 +// { dg-additional-options "-fmodules" } +// { dg-module-cmi m } + +export module m; + +template +struct Base { + static constexpr int base_static_mbr_n = n; +}; + +template +struct Derived : Base { + using Base::base_static_mbr_n; + static constexpr int go(int x = base_static_mbr_n) { return x; } +}; + +template struct Derived<1>; diff --git a/gcc/testsuite/g++.dg/modules/using-31_b.C b/gcc/testsuite/g++.dg/modules/using-31_b.C new file mode 100644 index 00000000000..e913a77aaf9 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/using-31_b.C @@ -0,0 +1,5 @@ +// PR c++/120414 +// { dg-additional-options "-fmodules" } + +module m; +static_assert(Derived<1>::go() == 1); -- 2.47.2