From 5937a6f93a56beddfde2c2ae0e14a2ec79d96283 Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Wed, 14 Jul 1999 10:57:21 +0000 Subject: [PATCH] pt.c (check_default_tmpl_args): Handle friends defined in the class just like member functions defined in the class. * pt.c (check_default_tmpl_args): Handle friends defined in the class just like member functions defined in the class. From-SVN: r28097 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/pt.c | 13 +++++++++---- gcc/testsuite/g++.old-deja/g++.pt/defarg9.C | 15 +++++++++++++++ 3 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/defarg9.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 6edfa5f2a77..fdc4b70c348 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +1999-07-14 Mark Mitchell + + * pt.c (check_default_tmpl_args): Handle friends defined in the + class just like member functions defined in the class. + 1999-07-09 Michael Tiemann Jason Merrill diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index d591c46a525..00e17be096b 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -2211,12 +2211,17 @@ check_default_tmpl_args (decl, parms, is_primary, is_partial) if (current_class_type && !TYPE_BEING_DEFINED (current_class_type) - && DECL_REAL_CONTEXT (decl) == current_class_type && DECL_LANG_SPECIFIC (decl) - && DECL_DEFINED_IN_CLASS_P (decl)) + /* If this is either a friend defined in the scope of the class + or a member function. */ + && DECL_CLASS_CONTEXT (decl) == current_class_type + /* And, if it was a member function, it really was defined in + the scope of the class. */ + && (!DECL_FUNCTION_MEMBER_P (decl) || DECL_DEFINED_IN_CLASS_P (decl))) /* We already checked these parameters when the template was - declared, so there's no need to do it again now. This is an - inline member function definition. */ + declared, so there's no need to do it again now. This function + was defined in class scope, but we're processing it's body now + that the class is complete. */ return; if (TREE_CODE (decl) != TYPE_DECL || is_partial || !is_primary) diff --git a/gcc/testsuite/g++.old-deja/g++.pt/defarg9.C b/gcc/testsuite/g++.old-deja/g++.pt/defarg9.C new file mode 100644 index 00000000000..f9de4aae352 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/defarg9.C @@ -0,0 +1,15 @@ +// Build don't link: +// Origin: Mark Mitchell + +template +struct S +{ + void g () + { + } + + friend void f (double) + { + } +}; + -- 2.30.2