From 305104fdc55b3a2237c6fff6f36545556a28d91c Mon Sep 17 00:00:00 2001 From: jason Date: Wed, 7 Apr 2010 15:55:02 +0000 Subject: [PATCH] * name-lookup.c (current_decl_namespace): Non-static. (pop_nested_namespace): Sanity check. * cp-tree.h: Declare current_decl_namespace. * decl.c (grokvardecl): Use it instead of current_namespace. (grokfndecl): Likewise. * gnu/gcj/runtime/natSharedLibLoader.cc (findCore): Move declaration of _Jv_create_core out of the function. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@158074 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/cp-tree.h | 1 + gcc/cp/decl.c | 4 ++-- gcc/cp/name-lookup.c | 3 ++- gcc/testsuite/ChangeLog | 2 ++ gcc/testsuite/g++.dg/lookup/ns4.C | 20 ++++++++++++++++++++ libjava/ChangeLog | 5 +++++ libjava/gnu/gcj/runtime/natSharedLibLoader.cc | 5 ++++- 8 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/g++.dg/lookup/ns4.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 6e048cad8b9..c044294eb11 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,11 @@ 2010-04-07 Jason Merrill + * name-lookup.c (current_decl_namespace): Non-static. + (pop_nested_namespace): Sanity check. + * cp-tree.h: Declare current_decl_namespace. + * decl.c (grokvardecl): Use it instead of current_namespace. + (grokfndecl): Likewise. + PR c++/38392 * pt.c (tsubst_friend_function): Instatiate a friend that has already been used. diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 1350619057a..f71317b6027 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -4644,6 +4644,7 @@ extern tree pushdecl_top_level_and_finish (tree, tree); extern tree check_for_out_of_scope_variable (tree); extern void print_other_binding_stack (struct cp_binding_level *); extern tree maybe_push_decl (tree); +extern tree current_decl_namespace (void); /* decl.c */ extern tree poplevel (int, int, int); diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 4ae924b32ad..bfbe3ca5a73 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -6758,7 +6758,7 @@ grokfndecl (tree ctype, if (in_namespace) set_decl_namespace (decl, in_namespace, friendp); else if (!ctype) - DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace); + DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ()); /* `main' and builtins have implicit 'C' linkage. */ if ((MAIN_NAME_P (declarator) @@ -7020,7 +7020,7 @@ grokvardecl (tree type, /* An explicit "extern" specifier indicates a namespace-scope variable. */ if (declspecs->storage_class == sc_extern) - scope = current_namespace; + scope = current_decl_namespace (); else if (!at_function_scope_p ()) scope = current_scope (); } diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index 7b43d30f47e..b4ac49f5c32 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -3170,7 +3170,7 @@ set_decl_namespace (tree decl, tree scope, bool friendp) /* Return the namespace where the current declaration is declared. */ -static tree +tree current_decl_namespace (void) { tree result; @@ -3342,6 +3342,7 @@ void pop_nested_namespace (tree ns) { timevar_push (TV_NAME_LOOKUP); + gcc_assert (current_namespace == ns); while (ns != global_namespace) { pop_namespace (); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3df0787cc8b..4156ad4d383 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,7 @@ 2010-04-07 Jason Merrill + * g++.dg/lookup/ns4.C: New. + PR c++/38392 * g++.dg/template/friend51.C: New test. diff --git a/gcc/testsuite/g++.dg/lookup/ns4.C b/gcc/testsuite/g++.dg/lookup/ns4.C new file mode 100644 index 00000000000..a28cda6cd4b --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/ns4.C @@ -0,0 +1,20 @@ +// { dg-do link } + +namespace N { + void f(); +} + +void N::f() +{ + extern int i; + extern void g(); + i = 1; + g(); +} + +namespace N { + int i; + void g() { } +} + +int main() { } diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 8bc03cc54ad..0a46cf50d81 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,8 @@ +2010-04-07 Jason Merrill + + * gnu/gcj/runtime/natSharedLibLoader.cc (findCore): Move + declaration of _Jv_create_core out of the function. + 2010-04-02 Ralf Wildenhues * Makefile.in: Regenerate. diff --git a/libjava/gnu/gcj/runtime/natSharedLibLoader.cc b/libjava/gnu/gcj/runtime/natSharedLibLoader.cc index 0d8d0e8341b..fabdbcbe526 100644 --- a/libjava/gnu/gcj/runtime/natSharedLibLoader.cc +++ b/libjava/gnu/gcj/runtime/natSharedLibLoader.cc @@ -119,11 +119,14 @@ gnu::gcj::runtime::SharedLibHelper::hasResource (jstring name) #endif } +#ifdef HAVE_DLOPEN +extern gnu::gcj::Core *_Jv_create_core (_Jv_core_chain *node, jstring name); +#endif + gnu::gcj::Core * gnu::gcj::runtime::SharedLibHelper::findCore (jstring name) { #ifdef HAVE_DLOPEN - extern gnu::gcj::Core *_Jv_create_core (_Jv_core_chain *node, jstring name); ensureInit(); return _Jv_create_core ((_Jv_core_chain *) core_chain, name); #else -- 2.11.4.GIT