Bootstrapped and regtested on x86_64-pc-linux-gnu, does this look
OK for trun/kbackports?
-- >8 --
Since a mem-initializer needs to be able to initialize any base class,
we in turn need to make mem-initializer-id qualified name lookup
type-only too.
PR c++/122192
gcc/cp/ChangeLog:
* parser.cc (cp_parser_mem_initializer_id): Pass class_type
instead of typename_to to cp_parser_class_name in the
nested-name-specifier case.
gcc/testsuite/ChangeLog:
* g++.dg/template/dependent-base6.C: Verify mem-initializer-id
qualified name lookup is type-only too.
---
gcc/cp/parser.cc | 2 +-
gcc/testsuite/g++.dg/template/dependent-base6.C | 4 +++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc
index 1ed2f3767e1c..9280632d47b8 100644
--- a/gcc/cp/parser.cc
+++ b/gcc/cp/parser.cc
@@ -19091,7 +19091,7 @@ cp_parser_mem_initializer_id (cp_parser* parser)
return cp_parser_class_name (parser,
/*typename_keyword_p=*/true,
/*template_keyword_p=*/template_p,
- typename_type,
+ class_type,
/*check_dependency_p=*/true,
/*class_head_p=*/false,
/*is_declaration=*/true);
diff --git a/gcc/testsuite/g++.dg/template/dependent-base6.C
b/gcc/testsuite/g++.dg/template/dependent-base6.C
index b4bc5c279a58..9f2a7a23923f 100644
--- a/gcc/testsuite/g++.dg/template/dependent-base6.C
+++ b/gcc/testsuite/g++.dg/template/dependent-base6.C
@@ -8,5 +8,7 @@ struct A {
struct S1 : A::B { }; // OK
-template<class T> struct S2 : T::B { }; // OK, used to fail
+template<class T> struct S2 : T::B { // OK, used to fail
+ S2() : T::B() { } // Also OK
+};
template struct S2<A>;
--
2.51.0.491.g4b71b29477