Since members of the anonymous namespace can't be defined in another translation unit, we should treat them like statics for diagnostic purposes.

Tested x86_64-pc-linux-gnu, applying to trunk.
commit 815fbf1df6dafdbeb04a35827222d78c9b419219
Author: Jason Merrill <ja...@redhat.com>
Date:   Mon Jun 10 12:29:35 2013 -0400

    	* name-lookup.c (add_decl_to_level): Add decls in an anonymous
    	namespace to static_decls.

diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c
index 17d5ca2..2b1f9fb 100644
--- a/gcc/cp/name-lookup.c
+++ b/gcc/cp/name-lookup.c
@@ -597,7 +597,9 @@ add_decl_to_level (tree decl, cp_binding_level *b)
 	if ((VAR_P (decl)
 	     && (TREE_STATIC (decl) || DECL_EXTERNAL (decl)))
 	    || (TREE_CODE (decl) == FUNCTION_DECL
-		&& (!TREE_PUBLIC (decl) || DECL_DECLARED_INLINE_P (decl))))
+		&& (!TREE_PUBLIC (decl)
+		    || decl_anon_ns_mem_p (decl)
+		    || DECL_DECLARED_INLINE_P (decl))))
 	  vec_safe_push (b->static_decls, decl);
     }
 }
diff --git a/gcc/testsuite/g++.dg/warn/anonymous-namespace-5.C b/gcc/testsuite/g++.dg/warn/anonymous-namespace-5.C
new file mode 100644
index 0000000..6f5a081
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/anonymous-namespace-5.C
@@ -0,0 +1,8 @@
+namespace {
+  void f();			// { dg-message "never defined" }
+}
+
+int main()
+{
+  f();
+}

Reply via email to