Patchwork C++ PATCH to warn about undefined functions in anonymous namespace

login
register
mail settings
Submitter Jason Merrill
Date June 10, 2013, 7:37 p.m.
Message ID <51B62AFE.4000809@redhat.com>
Download mbox | patch
Permalink /patch/250342/
State New
Headers show

Comments

Jason Merrill - June 10, 2013, 7:37 p.m.
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.
Gabriel Dos Reis - June 12, 2013, 3:53 p.m.
On Mon, Jun 10, 2013 at 2:37 PM, Jason Merrill <jason@redhat.com> wrote:
> 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.

Thank you!

-- Gaby

Patch

commit 815fbf1df6dafdbeb04a35827222d78c9b419219
Author: Jason Merrill <jason@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();
+}