1 /* Help friends in C++.
2 Copyright (C) 1997-2018 Free Software Foundation, Inc.
4 This file is part of GCC.
6 GCC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3, or (at your option)
11 GCC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3. If not see
18 <http://www.gnu.org/licenses/>. */
22 #include "coretypes.h"
25 /* Friend data structures are described in cp-tree.h. */
28 /* The GLOBAL_FRIEND scope (functions, classes, or templates) is
29 regarded as a friend of every class. This is only used by libcc1,
30 to enable GDB's code snippets to access private members without
31 disabling access control in general, which could cause different
32 template overload resolution results when accessibility matters
33 (e.g. tests for an accessible member). */
35 static GTY(()) tree global_friend
;
37 /* Set the GLOBAL_FRIEND for this compilation session. It might be
38 set multiple times, but always to the same scope. */
41 set_global_friend (tree scope
)
43 gcc_checking_assert (scope
!= NULL_TREE
);
44 gcc_assert (!global_friend
|| global_friend
== scope
);
45 global_friend
= scope
;
48 /* Return TRUE if SCOPE is the global friend. */
51 is_global_friend (tree scope
)
53 gcc_checking_assert (scope
!= NULL_TREE
);
55 if (global_friend
== scope
)
61 if (is_specialization_of_friend (global_friend
, scope
))
67 /* Returns nonzero if SUPPLICANT is a friend of TYPE. */
70 is_friend (tree type
, tree supplicant
)
76 if (supplicant
== NULL_TREE
|| type
== NULL_TREE
)
79 if (is_global_friend (supplicant
))
82 declp
= DECL_P (supplicant
);
85 /* It's a function decl. */
87 tree list
= DECL_FRIENDLIST (TYPE_MAIN_DECL (type
));
88 tree name
= DECL_NAME (supplicant
);
90 for (; list
; list
= TREE_CHAIN (list
))
92 if (name
== FRIEND_NAME (list
))
94 tree friends
= FRIEND_DECLS (list
);
95 for (; friends
; friends
= TREE_CHAIN (friends
))
97 tree this_friend
= TREE_VALUE (friends
);
99 if (this_friend
== NULL_TREE
)
102 if (supplicant
== this_friend
)
105 if (is_specialization_of_friend (supplicant
, this_friend
))
115 if (same_type_p (supplicant
, type
))
118 list
= CLASSTYPE_FRIEND_CLASSES (TREE_TYPE (TYPE_MAIN_DECL (type
)));
119 for (; list
; list
= TREE_CHAIN (list
))
121 tree t
= TREE_VALUE (list
);
123 if (TREE_CODE (t
) == TEMPLATE_DECL
?
124 is_specialization_of_friend (TYPE_MAIN_DECL (supplicant
), t
) :
125 same_type_p (supplicant
, t
))
132 if (DECL_FUNCTION_MEMBER_P (supplicant
))
133 context
= DECL_CONTEXT (supplicant
);
139 if (TYPE_CLASS_SCOPE_P (supplicant
))
140 /* Nested classes get the same access as their enclosing types, as
141 per DR 45 (this is a change from the standard). */
142 context
= TYPE_CONTEXT (supplicant
);
144 /* Local classes have the same access as the enclosing function. */
145 context
= decl_function_context (TYPE_MAIN_DECL (supplicant
));
148 /* A namespace is not friend to anybody. */
149 if (context
&& TREE_CODE (context
) == NAMESPACE_DECL
)
153 return is_friend (type
, context
);
158 /* Add a new friend to the friends of the aggregate type TYPE.
159 DECL is the FUNCTION_DECL of the friend being added.
161 If COMPLAIN is true, warning about duplicate friend is issued.
162 We want to have this diagnostics during parsing but not
163 when a template is being instantiated. */
166 add_friend (tree type
, tree decl
, bool complain
)
173 if (decl
== error_mark_node
)
176 if (TREE_CODE (decl
) == FUNCTION_DECL
177 && DECL_TEMPLATE_INSTANTIATION (decl
))
178 /* We'll have parsed this as a declaration, and therefore not
179 marked the lookup set for keeping. Do that now. */
180 lookup_keep (DECL_TI_TEMPLATE (decl
));
182 typedecl
= TYPE_MAIN_DECL (type
);
183 list
= DECL_FRIENDLIST (typedecl
);
184 name
= DECL_NAME (decl
);
185 type
= TREE_TYPE (typedecl
);
189 if (name
== FRIEND_NAME (list
))
191 tree friends
= FRIEND_DECLS (list
);
192 for (; friends
; friends
= TREE_CHAIN (friends
))
194 if (decl
== TREE_VALUE (friends
))
197 warning (OPT_Wredundant_decls
,
198 "%qD is already a friend of class %qT",
204 TREE_VALUE (list
) = tree_cons (NULL_TREE
, decl
,
208 list
= TREE_CHAIN (list
);
211 ctx
= DECL_CONTEXT (decl
);
212 if (ctx
&& CLASS_TYPE_P (ctx
) && !uses_template_parms (ctx
))
213 perform_or_defer_access_check (TYPE_BINFO (ctx
), decl
, decl
,
214 tf_warning_or_error
);
216 maybe_add_class_template_decl_list (type
, decl
, /*friend_p=*/1);
219 DECL_FRIENDLIST (typedecl
)
220 = tree_cons (DECL_NAME (decl
), build_tree_list (NULL_TREE
, decl
),
221 DECL_FRIENDLIST (typedecl
));
222 if (!uses_template_parms (type
))
223 DECL_BEFRIENDING_CLASSES (decl
)
224 = tree_cons (NULL_TREE
, type
,
225 DECL_BEFRIENDING_CLASSES (decl
));
228 /* Make FRIEND_TYPE a friend class to TYPE. If FRIEND_TYPE has already
229 been defined, we make all of its member functions friends of
230 TYPE. If not, we make it a pending friend, which can later be added
231 when its definition is seen. If a type is defined, then its TYPE_DECL's
232 DECL_UNDEFINED_FRIENDS contains a (possibly empty) list of friend
233 classes that are not defined. If a type has not yet been defined,
234 then the DECL_WAITING_FRIENDS contains a list of types
235 waiting to make it their friend. Note that these two can both
236 be in use at the same time!
238 If COMPLAIN is true, warning about duplicate friend is issued.
239 We want to have this diagnostics during parsing but not
240 when a template is being instantiated. */
243 make_friend_class (tree type
, tree friend_type
, bool complain
)
247 /* CLASS_TEMPLATE_DEPTH counts the number of template headers for
248 the enclosing class. FRIEND_DEPTH counts the number of template
249 headers used for this friend declaration. TEMPLATE_MEMBER_P,
250 defined inside the `if' block for TYPENAME_TYPE case, is true if
251 a template header in FRIEND_DEPTH is intended for DECLARATOR.
252 For example, the code
254 template <class T> struct A {
255 template <class U> struct B {
256 template <class V> template <class W>
257 friend class C<V>::D;
261 will eventually give the following results
263 1. CLASS_TEMPLATE_DEPTH equals 2 (for `T' and `U').
264 2. FRIEND_DEPTH equals 2 (for `V' and `W').
265 3. TEMPLATE_MEMBER_P is true (for `W').
267 The friend is a template friend iff FRIEND_DEPTH is nonzero. */
269 int class_template_depth
= template_class_depth (type
);
270 int friend_depth
= processing_template_decl
- class_template_depth
;
272 if (! MAYBE_CLASS_TYPE_P (friend_type
)
273 && TREE_CODE (friend_type
) != TEMPLATE_TEMPLATE_PARM
)
275 /* N1791: If the type specifier in a friend declaration designates a
276 (possibly cv-qualified) class type, that class is declared as a
277 friend; otherwise, the friend declaration is ignored.
279 So don't complain in C++11 mode. */
280 if (cxx_dialect
< cxx11
)
281 pedwarn (input_location
, complain
? 0 : OPT_Wpedantic
,
282 "invalid type %qT declared %<friend%>", friend_type
);
286 friend_type
= cv_unqualified (friend_type
);
288 if (check_for_bare_parameter_packs (friend_type
))
293 /* [temp.friend] Friend declarations shall not declare partial
295 if (CLASS_TYPE_P (friend_type
)
296 && CLASSTYPE_TEMPLATE_SPECIALIZATION (friend_type
)
297 && uses_template_parms (friend_type
))
299 error ("partial specialization %qT declared %<friend%>",
304 if (TYPE_TEMPLATE_INFO (friend_type
)
305 && !PRIMARY_TEMPLATE_P (TYPE_TI_TEMPLATE (friend_type
)))
307 auto_diagnostic_group d
;
308 error ("%qT is not a template", friend_type
);
309 inform (location_of (friend_type
), "previous declaration here");
310 if (TYPE_CLASS_SCOPE_P (friend_type
)
311 && CLASSTYPE_TEMPLATE_INFO (TYPE_CONTEXT (friend_type
))
312 && currently_open_class (TYPE_CONTEXT (friend_type
)))
313 inform (input_location
, "perhaps you need explicit template "
314 "arguments in your nested-name-specifier");
319 /* It makes sense for a template class to be friends with itself,
320 that means the instantiations can be friendly. Other cases are
321 not so meaningful. */
322 if (!friend_depth
&& same_type_p (type
, friend_type
))
325 warning (0, "class %qT is implicitly friends with itself",
332 A friend of a class or class template can be a function or
333 class template, a specialization of a function template or
334 class template, or an ordinary (nontemplate) function or
338 else if (TREE_CODE (friend_type
) == TYPENAME_TYPE
)
340 if (TREE_CODE (TYPENAME_TYPE_FULLNAME (friend_type
))
343 /* template <class U> friend class T::X<U>; */
345 Friend declarations shall not declare partial
347 error ("partial specialization %qT declared %<friend%>",
353 /* We will figure this out later. */
354 bool template_member_p
= false;
356 tree ctype
= TYPE_CONTEXT (friend_type
);
357 tree name
= TYPE_IDENTIFIER (friend_type
);
360 if (!uses_template_parms_level (ctype
, class_template_depth
362 template_member_p
= true;
364 if (class_template_depth
)
366 /* We rely on tsubst_friend_class to check the
367 validity of the declaration later. */
368 if (template_member_p
)
370 = make_unbound_class_template (ctype
,
372 current_template_parms
,
376 = make_typename_type (ctype
, name
, class_type
, tf_error
);
380 decl
= lookup_member (ctype
, name
, 0, true, tf_warning_or_error
);
383 error ("%qT is not a member of %qT", name
, ctype
);
386 if (template_member_p
&& !DECL_CLASS_TEMPLATE_P (decl
))
388 auto_diagnostic_group d
;
389 error ("%qT is not a member class template of %qT",
391 inform (DECL_SOURCE_LOCATION (decl
),
392 "%qD declared here", decl
);
395 if (!template_member_p
&& (TREE_CODE (decl
) != TYPE_DECL
396 || !CLASS_TYPE_P (TREE_TYPE (decl
))))
398 auto_diagnostic_group d
;
399 error ("%qT is not a nested class of %qT",
401 inform (DECL_SOURCE_LOCATION (decl
),
402 "%qD declared here", decl
);
406 friend_type
= CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl
));
410 else if (TREE_CODE (friend_type
) == TEMPLATE_TYPE_PARM
)
412 /* template <class T> friend class T; */
413 error ("template parameter type %qT declared %<friend%>", friend_type
);
416 else if (TREE_CODE (friend_type
) == TEMPLATE_TEMPLATE_PARM
)
417 friend_type
= TYPE_NAME (friend_type
);
418 else if (!CLASSTYPE_TEMPLATE_INFO (friend_type
))
420 /* template <class T> friend class A; where A is not a template */
421 error ("%q#T is not a template", friend_type
);
425 /* template <class T> friend class A; where A is a template */
426 friend_type
= CLASSTYPE_TI_TEMPLATE (friend_type
);
428 if (friend_type
== error_mark_node
)
431 /* See if it is already a friend. */
432 for (classes
= CLASSTYPE_FRIEND_CLASSES (type
);
434 classes
= TREE_CHAIN (classes
))
436 tree probe
= TREE_VALUE (classes
);
438 if (TREE_CODE (friend_type
) == TEMPLATE_DECL
)
440 if (friend_type
== probe
)
443 warning (OPT_Wredundant_decls
,
444 "%qD is already a friend of %qT", probe
, type
);
448 else if (TREE_CODE (probe
) != TEMPLATE_DECL
)
450 if (same_type_p (probe
, friend_type
))
453 warning (OPT_Wredundant_decls
,
454 "%qT is already a friend of %qT", probe
, type
);
462 maybe_add_class_template_decl_list (type
, friend_type
, /*friend_p=*/1);
464 CLASSTYPE_FRIEND_CLASSES (type
)
465 = tree_cons (NULL_TREE
, friend_type
, CLASSTYPE_FRIEND_CLASSES (type
));
466 if (TREE_CODE (friend_type
) == TEMPLATE_DECL
)
467 friend_type
= TREE_TYPE (friend_type
);
468 if (!uses_template_parms (type
))
469 CLASSTYPE_BEFRIENDING_CLASSES (friend_type
)
470 = tree_cons (NULL_TREE
, type
,
471 CLASSTYPE_BEFRIENDING_CLASSES (friend_type
));
475 /* Record DECL (a FUNCTION_DECL) as a friend of the
476 CURRENT_CLASS_TYPE. If DECL is a member function, CTYPE is the
477 class of which it is a member, as named in the friend declaration.
478 DECLARATOR is the name of the friend. FUNCDEF_FLAG is true if the
479 friend declaration is a definition of the function. FLAGS is as
483 do_friend (tree ctype
, tree declarator
, tree decl
,
484 tree attrlist
, enum overload_flags flags
,
487 gcc_assert (TREE_CODE (decl
) == FUNCTION_DECL
);
488 gcc_assert (!ctype
|| MAYBE_CLASS_TYPE_P (ctype
));
490 /* Every decl that gets here is a friend of something. */
491 DECL_FRIEND_P (decl
) = 1;
493 if (DECL_OVERRIDE_P (decl
) || DECL_FINAL_P (decl
))
494 error ("friend declaration %qD may not have virt-specifiers",
497 /* Unfortunately, we have to handle attributes here. Normally we would
498 handle them in start_decl_1, but since this is a friend decl start_decl_1
499 never gets to see it. */
501 /* Set attributes here so if duplicate decl, will have proper attributes. */
502 cplus_decl_attributes (&decl
, attrlist
, 0);
504 if (TREE_CODE (declarator
) == TEMPLATE_ID_EXPR
)
506 declarator
= TREE_OPERAND (declarator
, 0);
507 if (!identifier_p (declarator
))
508 declarator
= OVL_NAME (declarator
);
513 /* CLASS_TEMPLATE_DEPTH counts the number of template headers for
514 the enclosing class. FRIEND_DEPTH counts the number of template
515 headers used for this friend declaration. TEMPLATE_MEMBER_P is
516 true if a template header in FRIEND_DEPTH is intended for
517 DECLARATOR. For example, the code
519 template <class T> struct A {
520 template <class U> struct B {
521 template <class V> template <class W>
522 friend void C<V>::f(W);
526 will eventually give the following results
528 1. CLASS_TEMPLATE_DEPTH equals 2 (for `T' and `U').
529 2. FRIEND_DEPTH equals 2 (for `V' and `W').
530 3. TEMPLATE_MEMBER_P is true (for `W'). */
532 int class_template_depth
= template_class_depth (current_class_type
);
533 int friend_depth
= processing_template_decl
- class_template_depth
;
534 /* We will figure this out later. */
535 bool template_member_p
= false;
537 tree cname
= TYPE_NAME (ctype
);
538 if (TREE_CODE (cname
) == TYPE_DECL
)
539 cname
= DECL_NAME (cname
);
541 /* A method friend. */
542 if (flags
== NO_SPECIAL
&& declarator
== cname
)
543 DECL_CXX_CONSTRUCTOR_P (decl
) = 1;
545 grokclassfn (ctype
, decl
, flags
);
549 if (!uses_template_parms_level (ctype
, class_template_depth
551 template_member_p
= true;
554 /* A nested class may declare a member of an enclosing class
555 to be a friend, so we do lookup here even if CTYPE is in
556 the process of being defined. */
557 if (class_template_depth
558 || COMPLETE_OR_OPEN_TYPE_P (ctype
))
560 if (DECL_TEMPLATE_INFO (decl
))
561 /* DECL is a template specialization. No need to
562 build a new TEMPLATE_DECL. */
564 else if (class_template_depth
)
565 /* We rely on tsubst_friend_function to check the
566 validity of the declaration later. */
567 decl
= push_template_decl_real (decl
, /*is_friend=*/true);
569 decl
= check_classfn (ctype
, decl
,
571 ? current_template_parms
574 if ((template_member_p
575 /* Always pull out the TEMPLATE_DECL if we have a friend
576 template in a class template so that it gets tsubsted
577 properly later on (59956). tsubst_friend_function knows
578 how to tell this apart from a member template. */
579 || (class_template_depth
&& friend_depth
))
580 && decl
&& TREE_CODE (decl
) == FUNCTION_DECL
)
581 decl
= DECL_TI_TEMPLATE (decl
);
584 add_friend (current_class_type
, decl
, /*complain=*/true);
587 error ("member %qD declared as friend before type %qT defined",
591 @@ or possibly a friend from a base class ?!? */
592 else if (TREE_CODE (decl
) == FUNCTION_DECL
)
594 int is_friend_template
= PROCESSING_REAL_TEMPLATE_DECL_P ();
596 /* Friends must all go through the overload machinery,
597 even though they may not technically be overloaded.
599 Note that because classes all wind up being top-level
600 in their scope, their friend wind up in top-level scope as well. */
602 SET_DECL_FRIEND_CONTEXT (decl
, current_class_type
);
604 if (! DECL_USE_TEMPLATE (decl
))
606 /* We must check whether the decl refers to template
607 arguments before push_template_decl_real adds a
608 reference to the containing template class. */
609 int warn
= (warn_nontemplate_friend
610 && ! funcdef_flag
&& ! is_friend_template
611 && current_template_parms
612 && uses_template_parms (decl
));
614 if (is_friend_template
615 || template_class_depth (current_class_type
) != 0)
616 /* We can't call pushdecl for a template class, since in
617 general, such a declaration depends on template
618 parameters. Instead, we call pushdecl when the class
620 decl
= push_template_decl_real (decl
, /*is_friend=*/true);
621 else if (current_function_decl
)
622 /* pushdecl will check there's a local decl already. */
623 decl
= pushdecl (decl
, /*is_friend=*/true);
626 /* We can't use pushdecl, as we might be in a template
627 class specialization, and pushdecl will insert an
628 unqualified friend decl into the template parameter
629 scope, rather than the namespace containing it. */
630 tree ns
= decl_namespace_context (decl
);
632 push_nested_namespace (ns
);
633 decl
= pushdecl_namespace_level (decl
, /*is_friend=*/true);
634 pop_nested_namespace (ns
);
639 static int explained
;
642 auto_diagnostic_group d
;
643 warned
= warning (OPT_Wnon_template_friend
, "friend declaration "
644 "%q#D declares a non-template function", decl
);
645 if (! explained
&& warned
)
647 inform (input_location
, "(if this is not what you intended, make sure "
648 "the function template has already been declared "
649 "and add <> after the function name here) ");
655 if (decl
== error_mark_node
)
656 return error_mark_node
;
658 add_friend (current_class_type
,
659 is_friend_template
? DECL_TI_TEMPLATE (decl
) : decl
,
661 DECL_FRIEND_P (decl
) = 1;
667 #include "gt-cp-friend.h"