re PR c++/10968 (If member function implicitly instantiated, explicit instantiation...
authorJason Merrill <jason@gcc.gnu.org>
Tue, 10 Jun 2003 19:08:46 +0000 (15:08 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Tue, 10 Jun 2003 19:08:46 +0000 (15:08 -0400)
        PR c++/10968
        * pt.c (mark_decl_instantiated): Set TREE_SYMBOL_REFERENCED.

[[Split portion of a mixed commit.]]

From-SVN: r67725.2

gcc/cp/pt.c
gcc/testsuite/g++.dg/template/explicit-instantiation2.C [new file with mode: 0644]

index 1f64f747ca623a9abe61311d82ac9be762a86bbc..926b26d5c5575c6e4adc10800e95de7ae95e4831 100644 (file)
@@ -9974,6 +9974,9 @@ mark_decl_instantiated (result, extern_p)
        set correctly by tsubst.  */
     TREE_PUBLIC (result) = 1;
 
+  /* This might have been set by an earlier implicit instantiation.  */
+  DECL_COMDAT (result) = 0;
+
   if (! extern_p)
     {
       DECL_INTERFACE_KNOWN (result) = 1;
diff --git a/gcc/testsuite/g++.dg/template/explicit-instantiation2.C b/gcc/testsuite/g++.dg/template/explicit-instantiation2.C
new file mode 100644 (file)
index 0000000..21109a7
--- /dev/null
@@ -0,0 +1,6 @@
+// Bug 10968: implicit instantiation overrides explicit instantiation
+// { dg-final { scan-assembler "_Z1fIiET_S0_" } }
+
+template <class T> T f (T t) { return t; }
+inline void g () { f (4); }
+template int f (int);