aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@yorick.cygnus.com>1997-12-11 05:15:37 +0000
committerJason Merrill <jason@gcc.gnu.org>1997-12-11 00:15:37 -0500
commitc4ae3f91a2e59633859532b4e2f62b210f23b3bf (patch)
treecc4933ad581ab4304c447832882d2db3bc119e02 /gcc
parentf40421ce8cec176baab909b8a58374f349e1a9b1 (diff)
downloadgcc-c4ae3f91a2e59633859532b4e2f62b210f23b3bf.zip
gcc-c4ae3f91a2e59633859532b4e2f62b210f23b3bf.tar.gz
gcc-c4ae3f91a2e59633859532b4e2f62b210f23b3bf.tar.bz2
* pt.c (instantiate_decl): Defer all templates but inline functions.
From-SVN: r17039
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/pt.c17
2 files changed, 13 insertions, 8 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 0ddfaf5..8873220 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,7 @@
+Wed Dec 10 11:04:45 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * pt.c (instantiate_decl): Defer all templates but inline functions.
+
Mon Dec 8 23:17:13 1997 Jason Merrill <jason@yorick.cygnus.com>
* init.c (expand_vec_init): Don't fold a list of parameters.
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index c35dc20..a68bf1f 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -4553,15 +4553,16 @@ instantiate_decl (d)
import_export_decl (d);
}
+ /* Reject all external templates except inline functions. */
+ if (DECL_INTERFACE_KNOWN (d)
+ && ! DECL_NOT_REALLY_EXTERN (d)
+ && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d)))
+ goto out;
+
+ /* Defer all templates except inline functions used in another function. */
if (! pattern_defined
- || (TREE_CODE (d) == FUNCTION_DECL && ! DECL_INLINE (d)
- && (! DECL_INTERFACE_KNOWN (d)
- || ! DECL_NOT_REALLY_EXTERN (d)))
- /* Kludge: if we compile a constructor in the middle of processing a
- toplevel declaration, we blow away the declspecs in
- temp_decl_obstack when we call permanent_allocation in
- finish_function. So don't compile it yet. */
- || (TREE_CODE (d) == FUNCTION_DECL && ! nested && ! at_eof))
+ || (! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d) && nested)
+ && ! at_eof))
{
add_pending_template (d);
goto out;