From 45707d3120b9f91076bf8ab60a60fa094f2eb7b5 Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Thu, 13 Mar 2003 20:54:36 +0000 Subject: [PATCH] decl2.c (do_nonmember_using_decl): Correct handling of simultaneous type/non-type bindings. * decl2.c (do_nonmember_using_decl): Correct handling of simultaneous type/non-type bindings. * g++.dg/parse/namespace9.C: New test. From-SVN: r64323 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/decl2.c | 7 +++++++ gcc/testsuite/ChangeLog | 2 ++ gcc/testsuite/g++.dg/parse/namespace9.C | 8 ++++++++ 4 files changed, 20 insertions(+) create mode 100644 gcc/testsuite/g++.dg/parse/namespace9.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 6a679d24fe3..29166882d5f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2003-03-13 Mark Mitchell + * decl2.c (do_nonmember_using_decl): Correct handling of + simultaneous type/non-type bindings. + * call.c (initialize_reference): Remove bogus assertion. * decl.c (build_ptrmemfunc_type): Revert change of 2003-03-09. diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index b4654c9036f..fb25127da33 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -4222,6 +4222,13 @@ do_nonmember_using_decl (tree scope, tree name, tree oldval, tree oldtype, { tree tmp, tmp1; + if (oldval && !is_overloaded_fn (oldval)) + { + if (!DECL_IMPLICIT_TYPEDEF_P (oldval)) + error ("`%D' is already declared in this scope", name); + oldval = NULL_TREE; + } + *newval = oldval; for (tmp = BINDING_VALUE (decls); tmp; tmp = OVL_NEXT (tmp)) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3407e5ccb5a..1cf08340a14 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,7 @@ 2003-03-13 Mark Mitchell + * g++.dg/parse/namespace9.C: New test. + * g++.dg/init/ref5.C: New test. * g++.dg/parse/ptrmem1.C: Likewise. diff --git a/gcc/testsuite/g++.dg/parse/namespace9.C b/gcc/testsuite/g++.dg/parse/namespace9.C new file mode 100644 index 00000000000..7ff0267bff3 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/namespace9.C @@ -0,0 +1,8 @@ +namespace A { + void f(); +} +int g() +{ + struct f { }; + using A::f; +}