summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2010-04-07 15:55:02 +0000
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2010-04-07 15:55:02 +0000
commit305104fdc55b3a2237c6fff6f36545556a28d91c (patch)
tree5d11af1d0803ae77593c8e8e5b7621b20166dee5
parent90fb08fc73be441f9af09ad8ca93b6d837bc4dcf (diff)
downloadppe42-gcc-305104fdc55b3a2237c6fff6f36545556a28d91c.tar.gz
ppe42-gcc-305104fdc55b3a2237c6fff6f36545556a28d91c.zip
* 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
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/cp-tree.h1
-rw-r--r--gcc/cp/decl.c4
-rw-r--r--gcc/cp/name-lookup.c3
-rw-r--r--gcc/testsuite/ChangeLog2
-rw-r--r--gcc/testsuite/g++.dg/lookup/ns4.C20
-rw-r--r--libjava/ChangeLog5
-rw-r--r--libjava/gnu/gcj/runtime/natSharedLibLoader.cc5
8 files changed, 42 insertions, 4 deletions
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 <jason@redhat.com>
+ * 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 <jason@redhat.com>
+ * 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 <jason@redhat.com>
+
+ * gnu/gcj/runtime/natSharedLibLoader.cc (findCore): Move
+ declaration of _Jv_create_core out of the function.
+
2010-04-02 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
* 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
OpenPOWER on IntegriCloud