aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>1999-07-14 10:57:21 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>1999-07-14 10:57:21 +0000
commit5937a6f93a56beddfde2c2ae0e14a2ec79d96283 (patch)
tree7554efd89f6688b8dfc2293692068aaa59ed70eb /gcc
parent7e7b6c199549f404f705d40a8f10a1289b7bdeb7 (diff)
downloadgcc-5937a6f93a56beddfde2c2ae0e14a2ec79d96283.zip
gcc-5937a6f93a56beddfde2c2ae0e14a2ec79d96283.tar.gz
gcc-5937a6f93a56beddfde2c2ae0e14a2ec79d96283.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/pt.c13
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/defarg9.C15
3 files changed, 29 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 6edfa5f..fdc4b70 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+1999-07-14 Mark Mitchell <mark@codesourcery.com>
+
+ * 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 <tiemann@happy.cygnus.com>
Jason Merrill <jason@yorick.cygnus.com>
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index d591c46..00e17be 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 0000000..f9de4aa
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/defarg9.C
@@ -0,0 +1,15 @@
+// Build don't link:
+// Origin: Mark Mitchell <mark@codesourcery.com>
+
+template <class T = int>
+struct S
+{
+ void g ()
+ {
+ }
+
+ friend void f (double)
+ {
+ }
+};
+