PR libmudflap/53359
authoraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 18 Jan 2013 10:57:58 +0000 (10:57 +0000)
committeraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 18 Jan 2013 10:57:58 +0000 (10:57 +0000)
* tree-mudflap.c (mudflap_finish_file): Skip deferred decls
not found in the symtab.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@195290 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree-mudflap.c

index 6eff629..9763bca 100644 (file)
@@ -1,5 +1,11 @@
 2013-01-18  Alexandre Oliva <aoliva@redhat.com>
 
+       PR libmudflap/53359
+       * tree-mudflap.c (mudflap_finish_file): Skip deferred decls
+       not found in the symtab.
+
+2013-01-18  Alexandre Oliva <aoliva@redhat.com>
+
        PR rtl-optimization/55547
        PR rtl-optimization/53827
        PR debug/53671
index 3c866bc..b250bfe 100644 (file)
@@ -1334,6 +1334,16 @@ mudflap_finish_file (void)
           if (! TREE_PUBLIC (obj) && ! TREE_ADDRESSABLE (obj))
             continue;
 
+         /* If we're neither emitting nor referencing the symbol,
+            don't register it.  We have to register external symbols
+            if they happen to be in other files not compiled with
+            mudflap (say system libraries), and we must not register
+            internal symbols that we don't emit or they'll become
+            dangling references or force symbols to be emitted that
+            didn't have to.  */
+         if (!symtab_get_node (obj))
+           continue;
+
           if (! COMPLETE_TYPE_P (TREE_TYPE (obj)))
             {
               warning (OPT_Wmudflap,