diff options
author | Andrew Pinski <pinskia@physics.uc.edu> | 2003-12-25 16:28:50 +0000 |
---|---|---|
committer | Andrew Pinski <pinskia@gcc.gnu.org> | 2003-12-25 08:28:50 -0800 |
commit | ac2b322259b04b7c158c49a771f629430afaadeb (patch) | |
tree | 9e63c348c0242d549efe192d37ce056146844149 | |
parent | 5a6159ddb9f1c5a0bf70ae1535023f8a19870251 (diff) | |
download | gcc-ac2b322259b04b7c158c49a771f629430afaadeb.zip gcc-ac2b322259b04b7c158c49a771f629430afaadeb.tar.gz gcc-ac2b322259b04b7c158c49a771f629430afaadeb.tar.bz2 |
PR c++/13268, c++/13339
PR c++/13268, c++/13339
* class.c (add_method): Return early when method is error_mark_node.
* pt.c (tsubst_friend_function): Return early when new_friend is
error_mark_node.
From-SVN: r75022
-rw-r--r-- | gcc/cp/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cp/class.c | 12 | ||||
-rw-r--r-- | gcc/cp/pt.c | 3 |
3 files changed, 19 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 9d13f3d..4adb918 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2003-12-25 Andrew Pinski <pinskia@physics.uc.edu> + + PR c++/13268, c++/13339 + * class.c (add_method): Return early when method is error_mark_node. + * pt.c (tsubst_friend_function): Return early when new_friend is + error_mark_node. + 2003-12-23 Mark Mitchell <mark@codesourcery.com> * cp-lang.c (cp_expr_size): Return zero for empty classes. diff --git a/gcc/cp/class.c b/gcc/cp/class.c index d110295..2928dd3 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -725,12 +725,18 @@ modify_vtable_entry (tree t, void add_method (tree type, tree method, int error_p) { - int using = (DECL_CONTEXT (method) != type); + int using; int len; int slot; tree method_vec; - int template_conv_p = (TREE_CODE (method) == TEMPLATE_DECL - && DECL_TEMPLATE_CONV_FN_P (method)); + int template_conv_p; + + if (method == error_mark_node) + return; + + using = (DECL_CONTEXT (method) != type); + template_conv_p = (TREE_CODE (method) == TEMPLATE_DECL + && DECL_TEMPLATE_CONV_FN_P (method)); if (!CLASSTYPE_METHOD_VEC (type)) /* Make a new method vector. We start with 8 entries. We must diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index e7a8863..3c0e7d8 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -4897,6 +4897,9 @@ tsubst_friend_function (tree decl, tree args) Then, in S<int>, template <class U> void f(int, U) is not an instantiation of anything. */ + if (new_friend == error_mark_node) + return error_mark_node; + DECL_USE_TEMPLATE (new_friend) = 0; if (TREE_CODE (decl) == TEMPLATE_DECL) { |