xref: /dragonfly/contrib/gcc-4.7/gcc/cp/friend.c (revision 9348a738)
1 /* Help friends in C++.
2    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
3    2007, 2008, 2010, 2011  Free Software Foundation, Inc.
4 
5 This file is part of GCC.
6 
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
11 
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3.  If not see
19 <http://www.gnu.org/licenses/>.  */
20 
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "tm.h"
25 #include "tree.h"
26 #include "cp-tree.h"
27 #include "flags.h"
28 #include "output.h"
29 
30 /* Friend data structures are described in cp-tree.h.  */
31 
32 /* Returns nonzero if SUPPLICANT is a friend of TYPE.  */
33 
34 int
35 is_friend (tree type, tree supplicant)
36 {
37   int declp;
38   tree list;
39   tree context;
40 
41   if (supplicant == NULL_TREE || type == NULL_TREE)
42     return 0;
43 
44   declp = DECL_P (supplicant);
45 
46   if (declp)
47     /* It's a function decl.  */
48     {
49       tree list = DECL_FRIENDLIST (TYPE_MAIN_DECL (type));
50       tree name = DECL_NAME (supplicant);
51 
52       for (; list ; list = TREE_CHAIN (list))
53 	{
54 	  if (name == FRIEND_NAME (list))
55 	    {
56 	      tree friends = FRIEND_DECLS (list);
57 	      for (; friends ; friends = TREE_CHAIN (friends))
58 		{
59 		  tree this_friend = TREE_VALUE (friends);
60 
61 		  if (this_friend == NULL_TREE)
62 		    continue;
63 
64 		  if (supplicant == this_friend)
65 		    return 1;
66 
67 		  if (is_specialization_of_friend (supplicant, this_friend))
68 		    return 1;
69 		}
70 	      break;
71 	    }
72 	}
73     }
74   else
75     /* It's a type.  */
76     {
77       if (same_type_p (supplicant, type))
78 	return 1;
79 
80       list = CLASSTYPE_FRIEND_CLASSES (TREE_TYPE (TYPE_MAIN_DECL (type)));
81       for (; list ; list = TREE_CHAIN (list))
82 	{
83 	  tree t = TREE_VALUE (list);
84 
85 	  if (TREE_CODE (t) == TEMPLATE_DECL ?
86 	      is_specialization_of_friend (TYPE_MAIN_DECL (supplicant), t) :
87 	      same_type_p (supplicant, t))
88 	    return 1;
89 	}
90     }
91 
92   if (declp)
93     {
94       if (DECL_FUNCTION_MEMBER_P (supplicant))
95 	context = DECL_CONTEXT (supplicant);
96       else
97 	context = NULL_TREE;
98     }
99   else
100     {
101       if (TYPE_CLASS_SCOPE_P (supplicant))
102 	/* Nested classes get the same access as their enclosing types, as
103 	   per DR 45 (this is a change from the standard).  */
104 	context = TYPE_CONTEXT (supplicant);
105       else
106 	/* Local classes have the same access as the enclosing function.  */
107 	context = decl_function_context (TYPE_MAIN_DECL (supplicant));
108     }
109 
110   /* A namespace is not friend to anybody.  */
111   if (context && TREE_CODE (context) == NAMESPACE_DECL)
112     context = NULL_TREE;
113 
114   if (context)
115     return is_friend (type, context);
116 
117   return 0;
118 }
119 
120 /* Add a new friend to the friends of the aggregate type TYPE.
121    DECL is the FUNCTION_DECL of the friend being added.
122 
123    If COMPLAIN is true, warning about duplicate friend is issued.
124    We want to have this diagnostics during parsing but not
125    when a template is being instantiated.  */
126 
127 void
128 add_friend (tree type, tree decl, bool complain)
129 {
130   tree typedecl;
131   tree list;
132   tree name;
133   tree ctx;
134 
135   if (decl == error_mark_node)
136     return;
137 
138   typedecl = TYPE_MAIN_DECL (type);
139   list = DECL_FRIENDLIST (typedecl);
140   name = DECL_NAME (decl);
141   type = TREE_TYPE (typedecl);
142 
143   while (list)
144     {
145       if (name == FRIEND_NAME (list))
146 	{
147 	  tree friends = FRIEND_DECLS (list);
148 	  for (; friends ; friends = TREE_CHAIN (friends))
149 	    {
150 	      if (decl == TREE_VALUE (friends))
151 		{
152 		  if (complain)
153 		    warning (0, "%qD is already a friend of class %qT",
154 			     decl, type);
155 		  return;
156 		}
157 	    }
158 
159 	  maybe_add_class_template_decl_list (type, decl, /*friend_p=*/1);
160 
161 	  TREE_VALUE (list) = tree_cons (NULL_TREE, decl,
162 					 TREE_VALUE (list));
163 	  return;
164 	}
165       list = TREE_CHAIN (list);
166     }
167 
168   ctx = DECL_CONTEXT (decl);
169   if (ctx && CLASS_TYPE_P (ctx) && !uses_template_parms (ctx))
170     perform_or_defer_access_check (TYPE_BINFO (ctx), decl, decl);
171 
172   maybe_add_class_template_decl_list (type, decl, /*friend_p=*/1);
173 
174   DECL_FRIENDLIST (typedecl)
175     = tree_cons (DECL_NAME (decl), build_tree_list (NULL_TREE, decl),
176 		 DECL_FRIENDLIST (typedecl));
177   if (!uses_template_parms (type))
178     DECL_BEFRIENDING_CLASSES (decl)
179       = tree_cons (NULL_TREE, type,
180 		   DECL_BEFRIENDING_CLASSES (decl));
181 }
182 
183 /* Make FRIEND_TYPE a friend class to TYPE.  If FRIEND_TYPE has already
184    been defined, we make all of its member functions friends of
185    TYPE.  If not, we make it a pending friend, which can later be added
186    when its definition is seen.  If a type is defined, then its TYPE_DECL's
187    DECL_UNDEFINED_FRIENDS contains a (possibly empty) list of friend
188    classes that are not defined.  If a type has not yet been defined,
189    then the DECL_WAITING_FRIENDS contains a list of types
190    waiting to make it their friend.  Note that these two can both
191    be in use at the same time!
192 
193    If COMPLAIN is true, warning about duplicate friend is issued.
194    We want to have this diagnostics during parsing but not
195    when a template is being instantiated.  */
196 
197 void
198 make_friend_class (tree type, tree friend_type, bool complain)
199 {
200   tree classes;
201 
202   /* CLASS_TEMPLATE_DEPTH counts the number of template headers for
203      the enclosing class.  FRIEND_DEPTH counts the number of template
204      headers used for this friend declaration.  TEMPLATE_MEMBER_P,
205      defined inside the `if' block for TYPENAME_TYPE case, is true if
206      a template header in FRIEND_DEPTH is intended for DECLARATOR.
207      For example, the code
208 
209        template <class T> struct A {
210 	 template <class U> struct B {
211 	   template <class V> template <class W>
212 	     friend class C<V>::D;
213 	 };
214        };
215 
216      will eventually give the following results
217 
218      1. CLASS_TEMPLATE_DEPTH equals 2 (for `T' and `U').
219      2. FRIEND_DEPTH equals 2 (for `V' and `W').
220      3. TEMPLATE_MEMBER_P is true (for `W').
221 
222      The friend is a template friend iff FRIEND_DEPTH is nonzero.  */
223 
224   int class_template_depth = template_class_depth (type);
225   int friend_depth = processing_template_decl - class_template_depth;
226 
227   if (! MAYBE_CLASS_TYPE_P (friend_type))
228     {
229       /* N1791: If the type specifier in a friend declaration designates a
230 	 (possibly cv-qualified) class type, that class is declared as a
231 	 friend; otherwise, the friend declaration is ignored.
232 
233          So don't complain in C++0x mode.  */
234       if (cxx_dialect < cxx0x)
235 	pedwarn (input_location, complain ? 0 : OPT_pedantic,
236 		 "invalid type %qT declared %<friend%>", friend_type);
237       return;
238     }
239 
240   friend_type = cv_unqualified (friend_type);
241 
242   if (friend_depth)
243     /* If the TYPE is a template then it makes sense for it to be
244        friends with itself; this means that each instantiation is
245        friends with all other instantiations.  */
246     {
247       if (CLASS_TYPE_P (friend_type)
248 	  && CLASSTYPE_TEMPLATE_SPECIALIZATION (friend_type)
249 	  && uses_template_parms (friend_type))
250 	{
251 	  /* [temp.friend]
252 	     Friend declarations shall not declare partial
253 	     specializations.  */
254 	  error ("partial specialization %qT declared %<friend%>",
255 		 friend_type);
256 	  return;
257 	}
258     }
259   else if (same_type_p (type, friend_type))
260     {
261       if (complain)
262 	warning (0, "class %qT is implicitly friends with itself",
263 		 type);
264       return;
265     }
266 
267   /* [temp.friend]
268 
269      A friend of a class or class template can be a function or
270      class template, a specialization of a function template or
271      class template, or an ordinary (nontemplate) function or
272      class.  */
273   if (!friend_depth)
274     ;/* ok */
275   else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
276     {
277       if (TREE_CODE (TYPENAME_TYPE_FULLNAME (friend_type))
278 	  == TEMPLATE_ID_EXPR)
279 	{
280 	  /* template <class U> friend class T::X<U>; */
281 	  /* [temp.friend]
282 	     Friend declarations shall not declare partial
283 	     specializations.  */
284 	  error ("partial specialization %qT declared %<friend%>",
285 		 friend_type);
286 	  return;
287 	}
288       else
289 	{
290 	  /* We will figure this out later.  */
291 	  bool template_member_p = false;
292 
293 	  tree ctype = TYPE_CONTEXT (friend_type);
294 	  tree name = TYPE_IDENTIFIER (friend_type);
295 	  tree decl;
296 
297 	  if (!uses_template_parms_level (ctype, class_template_depth
298 						 + friend_depth))
299 	    template_member_p = true;
300 
301 	  if (class_template_depth)
302 	    {
303 	      /* We rely on tsubst_friend_class to check the
304 		 validity of the declaration later.  */
305 	      if (template_member_p)
306 		friend_type
307 		  = make_unbound_class_template (ctype,
308 						 name,
309 						 current_template_parms,
310 						 tf_error);
311 	      else
312 		friend_type
313 		  = make_typename_type (ctype, name, class_type, tf_error);
314 	    }
315 	  else
316 	    {
317 	      decl = lookup_member (ctype, name, 0, true, tf_warning_or_error);
318 	      if (!decl)
319 		{
320 		  error ("%qT is not a member of %qT", name, ctype);
321 		  return;
322 		}
323 	      if (template_member_p && !DECL_CLASS_TEMPLATE_P (decl))
324 		{
325 		  error ("%qT is not a member class template of %qT",
326 			 name, ctype);
327 		  error ("%q+D declared here", decl);
328 		  return;
329 		}
330 	      if (!template_member_p && (TREE_CODE (decl) != TYPE_DECL
331 					 || !CLASS_TYPE_P (TREE_TYPE (decl))))
332 		{
333 		  error ("%qT is not a nested class of %qT",
334 			 name, ctype);
335 		  error ("%q+D declared here", decl);
336 		  return;
337 		}
338 
339 	      friend_type = CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl));
340 	    }
341 	}
342     }
343   else if (TREE_CODE (friend_type) == TEMPLATE_TYPE_PARM)
344     {
345       /* template <class T> friend class T; */
346       error ("template parameter type %qT declared %<friend%>", friend_type);
347       return;
348     }
349   else if (!CLASSTYPE_TEMPLATE_INFO (friend_type))
350     {
351       /* template <class T> friend class A; where A is not a template */
352       error ("%q#T is not a template", friend_type);
353       return;
354     }
355   else
356     /* template <class T> friend class A; where A is a template */
357     friend_type = CLASSTYPE_TI_TEMPLATE (friend_type);
358 
359   if (friend_type == error_mark_node)
360     return;
361 
362   /* See if it is already a friend.  */
363   for (classes = CLASSTYPE_FRIEND_CLASSES (type);
364        classes;
365        classes = TREE_CHAIN (classes))
366     {
367       tree probe = TREE_VALUE (classes);
368 
369       if (TREE_CODE (friend_type) == TEMPLATE_DECL)
370 	{
371 	  if (friend_type == probe)
372 	    {
373 	      if (complain)
374 		warning (0, "%qD is already a friend of %qT", probe, type);
375 	      break;
376 	    }
377 	}
378       else if (TREE_CODE (probe) != TEMPLATE_DECL)
379 	{
380 	  if (same_type_p (probe, friend_type))
381 	    {
382 	      if (complain)
383 		warning (0, "%qT is already a friend of %qT", probe, type);
384 	      break;
385 	    }
386 	}
387     }
388 
389   if (!classes)
390     {
391       maybe_add_class_template_decl_list (type, friend_type, /*friend_p=*/1);
392 
393       CLASSTYPE_FRIEND_CLASSES (type)
394 	= tree_cons (NULL_TREE, friend_type, CLASSTYPE_FRIEND_CLASSES (type));
395       if (TREE_CODE (friend_type) == TEMPLATE_DECL)
396 	friend_type = TREE_TYPE (friend_type);
397       if (!uses_template_parms (type))
398 	CLASSTYPE_BEFRIENDING_CLASSES (friend_type)
399 	  = tree_cons (NULL_TREE, type,
400 		       CLASSTYPE_BEFRIENDING_CLASSES (friend_type));
401     }
402 }
403 
404 /* Record DECL (a FUNCTION_DECL) as a friend of the
405    CURRENT_CLASS_TYPE.  If DECL is a member function, CTYPE is the
406    class of which it is a member, as named in the friend declaration.
407    DECLARATOR is the name of the friend.  FUNCDEF_FLAG is true if the
408    friend declaration is a definition of the function.  FLAGS is as
409    for grokclass fn.  */
410 
411 tree
412 do_friend (tree ctype, tree declarator, tree decl,
413 	   tree attrlist, enum overload_flags flags,
414 	   bool funcdef_flag)
415 {
416   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
417   gcc_assert (!ctype || MAYBE_CLASS_TYPE_P (ctype));
418 
419   /* Every decl that gets here is a friend of something.  */
420   DECL_FRIEND_P (decl) = 1;
421 
422   /* Unfortunately, we have to handle attributes here.  Normally we would
423      handle them in start_decl_1, but since this is a friend decl start_decl_1
424      never gets to see it.  */
425 
426   /* Set attributes here so if duplicate decl, will have proper attributes.  */
427   cplus_decl_attributes (&decl, attrlist, 0);
428 
429   if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
430     {
431       declarator = TREE_OPERAND (declarator, 0);
432       if (is_overloaded_fn (declarator))
433 	declarator = DECL_NAME (get_first_fn (declarator));
434     }
435 
436   if (ctype)
437     {
438       /* CLASS_TEMPLATE_DEPTH counts the number of template headers for
439 	 the enclosing class.  FRIEND_DEPTH counts the number of template
440 	 headers used for this friend declaration.  TEMPLATE_MEMBER_P is
441 	 true if a template header in FRIEND_DEPTH is intended for
442 	 DECLARATOR.  For example, the code
443 
444 	   template <class T> struct A {
445 	     template <class U> struct B {
446 	       template <class V> template <class W>
447 		 friend void C<V>::f(W);
448 	     };
449 	   };
450 
451 	 will eventually give the following results
452 
453 	 1. CLASS_TEMPLATE_DEPTH equals 2 (for `T' and `U').
454 	 2. FRIEND_DEPTH equals 2 (for `V' and `W').
455 	 3. TEMPLATE_MEMBER_P is true (for `W').  */
456 
457       int class_template_depth = template_class_depth (current_class_type);
458       int friend_depth = processing_template_decl - class_template_depth;
459       /* We will figure this out later.  */
460       bool template_member_p = false;
461 
462       tree cname = TYPE_NAME (ctype);
463       if (TREE_CODE (cname) == TYPE_DECL)
464 	cname = DECL_NAME (cname);
465 
466       /* A method friend.  */
467       if (flags == NO_SPECIAL && declarator == cname)
468 	DECL_CONSTRUCTOR_P (decl) = 1;
469 
470       grokclassfn (ctype, decl, flags);
471 
472       if (friend_depth)
473 	{
474 	  if (!uses_template_parms_level (ctype, class_template_depth
475 						 + friend_depth))
476 	    template_member_p = true;
477 	}
478 
479       /* A nested class may declare a member of an enclosing class
480 	 to be a friend, so we do lookup here even if CTYPE is in
481 	 the process of being defined.  */
482       if (class_template_depth
483 	  || COMPLETE_TYPE_P (ctype)
484 	  || (CLASS_TYPE_P (ctype) && TYPE_BEING_DEFINED (ctype)))
485 	{
486 	  if (DECL_TEMPLATE_INFO (decl))
487 	    /* DECL is a template specialization.  No need to
488 	       build a new TEMPLATE_DECL.  */
489 	    ;
490 	  else if (class_template_depth)
491 	    /* We rely on tsubst_friend_function to check the
492 	       validity of the declaration later.  */
493 	    decl = push_template_decl_real (decl, /*is_friend=*/true);
494 	  else
495 	    decl = check_classfn (ctype, decl,
496 				  template_member_p
497 				  ? current_template_parms
498 				  : NULL_TREE);
499 
500 	  if (template_member_p && decl && TREE_CODE (decl) == FUNCTION_DECL)
501 	    decl = DECL_TI_TEMPLATE (decl);
502 
503 	  if (decl)
504 	    add_friend (current_class_type, decl, /*complain=*/true);
505 	}
506       else
507 	error ("member %qD declared as friend before type %qT defined",
508 		  decl, ctype);
509     }
510   /* A global friend.
511      @@ or possibly a friend from a base class ?!?  */
512   else if (TREE_CODE (decl) == FUNCTION_DECL)
513     {
514       int is_friend_template = PROCESSING_REAL_TEMPLATE_DECL_P ();
515 
516       /* Friends must all go through the overload machinery,
517 	 even though they may not technically be overloaded.
518 
519 	 Note that because classes all wind up being top-level
520 	 in their scope, their friend wind up in top-level scope as well.  */
521       if (funcdef_flag)
522 	SET_DECL_FRIEND_CONTEXT (decl, current_class_type);
523 
524       if (! DECL_USE_TEMPLATE (decl))
525 	{
526 	  /* We must check whether the decl refers to template
527 	     arguments before push_template_decl_real adds a
528 	     reference to the containing template class.  */
529 	  int warn = (warn_nontemplate_friend
530 		      && ! funcdef_flag && ! is_friend_template
531 		      && current_template_parms
532 		      && uses_template_parms (decl));
533 
534 	  if (is_friend_template
535 	      || template_class_depth (current_class_type) != 0)
536 	    /* We can't call pushdecl for a template class, since in
537 	       general, such a declaration depends on template
538 	       parameters.  Instead, we call pushdecl when the class
539 	       is instantiated.  */
540 	    decl = push_template_decl_real (decl, /*is_friend=*/true);
541 	  else if (current_function_decl)
542 	    {
543 	      /* This must be a local class.  11.5p11:
544 
545 		 If a friend declaration appears in a local class (9.8) and
546 		 the name specified is an unqualified name, a prior
547 		 declaration is looked up without considering scopes that
548 		 are outside the innermost enclosing non-class scope. For a
549 		 friend function declaration, if there is no prior
550 		 declaration, the program is ill-formed.  */
551 	      tree t = lookup_name_innermost_nonclass_level (DECL_NAME (decl));
552 	      if (t)
553 		decl = pushdecl_maybe_friend (decl, /*is_friend=*/true);
554 	      else
555 		{
556 		  error ("friend declaration %qD in local class without "
557 			 "prior declaration", decl);
558 		  return error_mark_node;
559 		}
560 	    }
561 	  else
562 	    {
563 	      /* We can't use pushdecl, as we might be in a template
564 		 class specialization, and pushdecl will insert an
565 		 unqualified friend decl into the template parameter
566 		 scope, rather than the namespace containing it.  */
567 	      tree ns = decl_namespace_context (decl);
568 
569 	      push_nested_namespace (ns);
570 	      decl = pushdecl_namespace_level (decl, /*is_friend=*/true);
571 	      pop_nested_namespace (ns);
572 	    }
573 
574 	  if (warn)
575 	    {
576 	      static int explained;
577 	      bool warned;
578 
579 	      warned = warning (OPT_Wnon_template_friend, "friend declaration "
580 				"%q#D declares a non-template function", decl);
581 	      if (! explained && warned)
582 		{
583 		  inform (input_location, "(if this is not what you intended, make sure "
584 			  "the function template has already been declared "
585 			  "and add <> after the function name here) ");
586 		  explained = 1;
587 		}
588 	    }
589 	}
590 
591       if (decl == error_mark_node)
592 	return error_mark_node;
593 
594       add_friend (current_class_type,
595 		  is_friend_template ? DECL_TI_TEMPLATE (decl) : decl,
596 		  /*complain=*/true);
597       DECL_FRIEND_P (decl) = 1;
598     }
599 
600   return decl;
601 }
602