Tested on x86_64-pc-linux-gnu (so far just modules.exp), OK for trunk if full bootstrap+regtest succeeds?
-- >8 -- 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 <nathanielosh...@gmail.com> --- 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 <int n> +struct Base { + static constexpr int base_static_mbr_n = n; +}; + +template <int n> +struct Derived : Base<n> { + using Base<n>::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.0