diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index bd8b58a8472fb0c0ff50fb15fb13505d2eee9cac..12becdbcaf0e49aa75c707e479d119f208af15b3 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,7 @@
+2000-08-02  Mark Mitchell  <mark@codesourcery.com>
+
+	* cp-tree.h (DECL_NEEDED_P): Tweak.
+
 2000-07-28  Jason Merrill  <jason@redhat.com>
 
 	* lang-specs.h: Use %i in rule for .ii files.
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index 63c1e8ef24848b0cf2c8dcefb371328901cb4605..d949fcb70c648bd281dbf72045f7c50f1f4ab28a 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -1936,7 +1936,7 @@ struct lang_decl
    anything that isn't comdat, but we don't know for sure whether or
    not something is comdat until end-of-file.  */
 #define DECL_NEEDED_P(DECL)					\
-  ((at_eof && !DECL_COMDAT (DECL))				\
+  ((at_eof && TREE_PUBLIC (DECL) && !DECL_COMDAT (DECL))	\
    || (TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME ((DECL))))	\
    || (flag_syntax_only && TREE_USED ((DECL))))
 
diff --git a/gcc/testsuite/g++.old-deja/g++.other/static14.C b/gcc/testsuite/g++.old-deja/g++.other/static14.C
new file mode 100644
index 0000000000000000000000000000000000000000..6df4c4c5e103117a1a3882ec8bc38509915d2e7d
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.other/static14.C
@@ -0,0 +1,19 @@
+// Build don't run:
+// Origin: scott snyder <snyder@fnal.gov>
+
+struct basic_string
+{
+  ~basic_string();
+};
+
+struct Side
+{
+  void name()
+  {
+    static basic_string sname;
+  }
+};
+
+int main ()
+{
+}