pt.c (tsubst_friend_function): Improve comment.
* pt.c (tsubst_friend_function): Improve comment. (instantiate_decl): Avoid crashing when a "nested" function is instantiated from the top level. From-SVN: r31403
This commit is contained in:
parent
f1ebdfc52a
commit
1c2278974c
@ -1,3 +1,12 @@
|
||||
2000-01-13 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
* pt.c (tsubst_friend_function): Improve comment.
|
||||
(instantiate_decl): Avoid crashing when a "nested" function is
|
||||
instantiated from the top level.
|
||||
|
||||
* dump.c (dqeueue_and_dump): Dump
|
||||
DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION.
|
||||
|
||||
2000-01-13 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
|
||||
|
||||
* call.c: If GATHER_STATISTICS, declare `n_build_method_call'.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Tree-dumping functionality for intermediate representation.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
Copyright (C) 1999, 2000 Free Software Foundation, Inc.
|
||||
Written by Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
This file is part of GNU CC.
|
||||
@ -585,6 +585,8 @@ dequeue_and_dump (di)
|
||||
dump_string (di, "global fini");
|
||||
dump_int (di, "prio", GLOBAL_INIT_PRIORITY (t));
|
||||
}
|
||||
if (DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (t))
|
||||
dump_string (di, "pseudo tmpl");
|
||||
|
||||
dump_child ("body", DECL_SAVED_TREE (t));
|
||||
}
|
||||
|
@ -4466,8 +4466,8 @@ tsubst_friend_function (decl, args)
|
||||
}
|
||||
|
||||
/* Inside pushdecl_namespace_level, we will push into the
|
||||
current namespace. However, the friend function should
|
||||
tyically go into the namespace of the template. */
|
||||
current namespace. However, the friend function should go
|
||||
into the namespace of the template. */
|
||||
ns = decl_namespace_context (new_friend);
|
||||
push_nested_namespace (ns);
|
||||
old_decl = pushdecl_namespace_level (new_friend);
|
||||
@ -9559,7 +9559,7 @@ instantiate_decl (d)
|
||||
&& ! DECL_NEEDED_P (d)
|
||||
/* If the function that caused us to be instantiated is needed, we
|
||||
will be needed, too. */
|
||||
&& (! nested || ! DECL_NEEDED_P (old_fn)))
|
||||
&& (! nested || (old_fn && ! DECL_NEEDED_P (old_fn))))
|
||||
DECL_DEFER_OUTPUT (d) = 1;
|
||||
|
||||
/* We're now committed to instantiating this template. Mark it as
|
||||
|
29
gcc/testsuite/g++.old-deja/g++.pt/crash54.C
Normal file
29
gcc/testsuite/g++.old-deja/g++.pt/crash54.C
Normal file
@ -0,0 +1,29 @@
|
||||
// Build don't link:
|
||||
// Origin: Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
template <class T>
|
||||
int g (T);
|
||||
|
||||
int j = g (3);
|
||||
|
||||
template <class T>
|
||||
inline T f (T)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
struct S
|
||||
{
|
||||
static const int i;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
const int S<T>::i = f (3);
|
||||
|
||||
template <class T>
|
||||
int g (T)
|
||||
{
|
||||
return S<double>::i;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user