xref: /netbsd-src/external/gpl3/gcc.old/dist/gcc/cp/method.c (revision bdc22b2e01993381dcefeff2bc9b56ca75a4235c)
1 /* Handle the hair of processing (but not expanding) inline functions.
2    Also manage function and variable name overloading.
3    Copyright (C) 1987-2015 Free Software Foundation, Inc.
4    Contributed by Michael Tiemann (tiemann@cygnus.com)
5 
6 This file is part of GCC.
7 
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3, or (at your option)
11 any later version.
12 
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17 
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21 
22 
23 /* Handle method declarations.  */
24 #include "config.h"
25 #include "system.h"
26 #include "coretypes.h"
27 #include "tm.h"
28 #include "hash-set.h"
29 #include "machmode.h"
30 #include "vec.h"
31 #include "double-int.h"
32 #include "input.h"
33 #include "alias.h"
34 #include "symtab.h"
35 #include "wide-int.h"
36 #include "inchash.h"
37 #include "tree.h"
38 #include "stringpool.h"
39 #include "varasm.h"
40 #include "cp-tree.h"
41 #include "flags.h"
42 #include "toplev.h"
43 #include "tm_p.h"
44 #include "target.h"
45 #include "common/common-target.h"
46 #include "diagnostic.h"
47 #include "hash-map.h"
48 #include "is-a.h"
49 #include "plugin-api.h"
50 #include "hard-reg-set.h"
51 #include "input.h"
52 #include "function.h"
53 #include "ipa-ref.h"
54 #include "cgraph.h"
55 
56 /* Various flags to control the mangling process.  */
57 
58 enum mangling_flags
59 {
60   /* No flags.  */
61   mf_none = 0,
62   /* The thing we are presently mangling is part of a template type,
63      rather than a fully instantiated type.  Therefore, we may see
64      complex expressions where we would normally expect to see a
65      simple integer constant.  */
66   mf_maybe_uninstantiated = 1,
67   /* When mangling a numeric value, use the form `_XX_' (instead of
68      just `XX') if the value has more than one digit.  */
69   mf_use_underscores_around_value = 2
70 };
71 
72 typedef enum mangling_flags mangling_flags;
73 
74 static void do_build_copy_assign (tree);
75 static void do_build_copy_constructor (tree);
76 static tree make_alias_for_thunk (tree);
77 
78 /* Called once to initialize method.c.  */
79 
80 void
81 init_method (void)
82 {
83   init_mangle ();
84 }
85 
86 /* Return a this or result adjusting thunk to FUNCTION.  THIS_ADJUSTING
87    indicates whether it is a this or result adjusting thunk.
88    FIXED_OFFSET and VIRTUAL_OFFSET indicate how to do the adjustment
89    (see thunk_adjust).  VIRTUAL_OFFSET can be NULL, but FIXED_OFFSET
90    never is.  VIRTUAL_OFFSET is the /index/ into the vtable for this
91    adjusting thunks, we scale it to a byte offset. For covariant
92    thunks VIRTUAL_OFFSET is the virtual binfo.  You must post process
93    the returned thunk with finish_thunk.  */
94 
95 tree
96 make_thunk (tree function, bool this_adjusting,
97 	    tree fixed_offset, tree virtual_offset)
98 {
99   HOST_WIDE_INT d;
100   tree thunk;
101 
102   gcc_assert (TREE_CODE (function) == FUNCTION_DECL);
103   /* We can have this thunks to covariant thunks, but not vice versa.  */
104   gcc_assert (!DECL_THIS_THUNK_P (function));
105   gcc_assert (!DECL_RESULT_THUNK_P (function) || this_adjusting);
106 
107   /* Scale the VIRTUAL_OFFSET to be in terms of bytes.  */
108   if (this_adjusting && virtual_offset)
109     virtual_offset
110       = size_binop (MULT_EXPR,
111 		    virtual_offset,
112 		    convert (ssizetype,
113 			     TYPE_SIZE_UNIT (vtable_entry_type)));
114 
115   d = tree_to_shwi (fixed_offset);
116 
117   /* See if we already have the thunk in question.  For this_adjusting
118      thunks VIRTUAL_OFFSET will be an INTEGER_CST, for covariant thunks it
119      will be a BINFO.  */
120   for (thunk = DECL_THUNKS (function); thunk; thunk = DECL_CHAIN (thunk))
121     if (DECL_THIS_THUNK_P (thunk) == this_adjusting
122 	&& THUNK_FIXED_OFFSET (thunk) == d
123 	&& !virtual_offset == !THUNK_VIRTUAL_OFFSET (thunk)
124 	&& (!virtual_offset
125 	    || (this_adjusting
126 		? tree_int_cst_equal (THUNK_VIRTUAL_OFFSET (thunk),
127 				      virtual_offset)
128 		: THUNK_VIRTUAL_OFFSET (thunk) == virtual_offset)))
129       return thunk;
130 
131   /* All thunks must be created before FUNCTION is actually emitted;
132      the ABI requires that all thunks be emitted together with the
133      function to which they transfer control.  */
134   gcc_assert (!TREE_ASM_WRITTEN (function));
135   /* Likewise, we can only be adding thunks to a function declared in
136      the class currently being laid out.  */
137   gcc_assert (TYPE_SIZE (DECL_CONTEXT (function))
138 	      && TYPE_BEING_DEFINED (DECL_CONTEXT (function)));
139 
140   thunk = build_decl (DECL_SOURCE_LOCATION (function),
141 		      FUNCTION_DECL, NULL_TREE, TREE_TYPE (function));
142   DECL_LANG_SPECIFIC (thunk) = DECL_LANG_SPECIFIC (function);
143   cxx_dup_lang_specific_decl (thunk);
144   DECL_VIRTUAL_P (thunk) = true;
145   SET_DECL_THUNKS (thunk, NULL_TREE);
146 
147   DECL_CONTEXT (thunk) = DECL_CONTEXT (function);
148   TREE_READONLY (thunk) = TREE_READONLY (function);
149   TREE_THIS_VOLATILE (thunk) = TREE_THIS_VOLATILE (function);
150   TREE_PUBLIC (thunk) = TREE_PUBLIC (function);
151   SET_DECL_THUNK_P (thunk, this_adjusting);
152   THUNK_TARGET (thunk) = function;
153   THUNK_FIXED_OFFSET (thunk) = d;
154   THUNK_VIRTUAL_OFFSET (thunk) = virtual_offset;
155   THUNK_ALIAS (thunk) = NULL_TREE;
156 
157   DECL_INTERFACE_KNOWN (thunk) = 1;
158   DECL_NOT_REALLY_EXTERN (thunk) = 1;
159   DECL_COMDAT (thunk) = DECL_COMDAT (function);
160   DECL_SAVED_FUNCTION_DATA (thunk) = NULL;
161   /* The thunk itself is not a constructor or destructor, even if
162      the thing it is thunking to is.  */
163   DECL_DESTRUCTOR_P (thunk) = 0;
164   DECL_CONSTRUCTOR_P (thunk) = 0;
165   DECL_EXTERNAL (thunk) = 1;
166   DECL_ARTIFICIAL (thunk) = 1;
167   /* The THUNK is not a pending inline, even if the FUNCTION is.  */
168   DECL_PENDING_INLINE_P (thunk) = 0;
169   DECL_DECLARED_INLINE_P (thunk) = 0;
170   /* Nor is it a template instantiation.  */
171   DECL_USE_TEMPLATE (thunk) = 0;
172   DECL_TEMPLATE_INFO (thunk) = NULL;
173 
174   /* Add it to the list of thunks associated with FUNCTION.  */
175   DECL_CHAIN (thunk) = DECL_THUNKS (function);
176   SET_DECL_THUNKS (function, thunk);
177 
178   return thunk;
179 }
180 
181 /* Finish THUNK, a thunk decl.  */
182 
183 void
184 finish_thunk (tree thunk)
185 {
186   tree function, name;
187   tree fixed_offset = ssize_int (THUNK_FIXED_OFFSET (thunk));
188   tree virtual_offset = THUNK_VIRTUAL_OFFSET (thunk);
189 
190   gcc_assert (!DECL_NAME (thunk) && DECL_THUNK_P (thunk));
191   if (virtual_offset && DECL_RESULT_THUNK_P (thunk))
192     virtual_offset = BINFO_VPTR_FIELD (virtual_offset);
193   function = THUNK_TARGET (thunk);
194   name = mangle_thunk (function, DECL_THIS_THUNK_P (thunk),
195 		       fixed_offset, virtual_offset);
196 
197   /* We can end up with declarations of (logically) different
198      covariant thunks, that do identical adjustments.  The two thunks
199      will be adjusting between within different hierarchies, which
200      happen to have the same layout.  We must nullify one of them to
201      refer to the other.  */
202   if (DECL_RESULT_THUNK_P (thunk))
203     {
204       tree cov_probe;
205 
206       for (cov_probe = DECL_THUNKS (function);
207 	   cov_probe; cov_probe = DECL_CHAIN (cov_probe))
208 	if (DECL_NAME (cov_probe) == name)
209 	  {
210 	    gcc_assert (!DECL_THUNKS (thunk));
211 	    THUNK_ALIAS (thunk) = (THUNK_ALIAS (cov_probe)
212 				   ? THUNK_ALIAS (cov_probe) : cov_probe);
213 	    break;
214 	  }
215     }
216 
217   DECL_NAME (thunk) = name;
218   SET_DECL_ASSEMBLER_NAME (thunk, name);
219 }
220 
221 static GTY (()) int thunk_labelno;
222 
223 /* Create a static alias to target.  */
224 
225 tree
226 make_alias_for (tree target, tree newid)
227 {
228   tree alias = build_decl (DECL_SOURCE_LOCATION (target),
229 			   TREE_CODE (target), newid, TREE_TYPE (target));
230   DECL_LANG_SPECIFIC (alias) = DECL_LANG_SPECIFIC (target);
231   cxx_dup_lang_specific_decl (alias);
232   DECL_CONTEXT (alias) = NULL;
233   TREE_READONLY (alias) = TREE_READONLY (target);
234   TREE_THIS_VOLATILE (alias) = TREE_THIS_VOLATILE (target);
235   TREE_PUBLIC (alias) = 0;
236   DECL_INTERFACE_KNOWN (alias) = 1;
237   if (DECL_LANG_SPECIFIC (alias))
238     {
239       DECL_NOT_REALLY_EXTERN (alias) = 1;
240       DECL_USE_TEMPLATE (alias) = 0;
241       DECL_TEMPLATE_INFO (alias) = NULL;
242     }
243   DECL_EXTERNAL (alias) = 0;
244   DECL_ARTIFICIAL (alias) = 1;
245   DECL_TEMPLATE_INSTANTIATED (alias) = 0;
246   if (TREE_CODE (alias) == FUNCTION_DECL)
247     {
248       DECL_SAVED_FUNCTION_DATA (alias) = NULL;
249       DECL_DESTRUCTOR_P (alias) = 0;
250       DECL_CONSTRUCTOR_P (alias) = 0;
251       DECL_PENDING_INLINE_P (alias) = 0;
252       DECL_DECLARED_INLINE_P (alias) = 0;
253       DECL_INITIAL (alias) = error_mark_node;
254       DECL_ARGUMENTS (alias) = copy_list (DECL_ARGUMENTS (target));
255     }
256   else
257     TREE_STATIC (alias) = 1;
258   TREE_ADDRESSABLE (alias) = 1;
259   TREE_USED (alias) = 1;
260   SET_DECL_ASSEMBLER_NAME (alias, DECL_NAME (alias));
261   return alias;
262 }
263 
264 static tree
265 make_alias_for_thunk (tree function)
266 {
267   tree alias;
268   char buf[256];
269 
270   targetm.asm_out.generate_internal_label (buf, "LTHUNK", thunk_labelno);
271   thunk_labelno++;
272 
273   alias = make_alias_for (function, get_identifier (buf));
274 
275   if (!flag_syntax_only)
276     {
277       struct cgraph_node *funcn, *aliasn;
278       funcn = cgraph_node::get (function);
279       gcc_checking_assert (funcn);
280       aliasn = cgraph_node::create_same_body_alias (alias, function);
281       DECL_ASSEMBLER_NAME (function);
282       gcc_assert (aliasn != NULL);
283     }
284 
285   return alias;
286 }
287 
288 /* Emit the definition of a C++ multiple inheritance or covariant
289    return vtable thunk.  If EMIT_P is nonzero, the thunk is emitted
290    immediately.  */
291 
292 void
293 use_thunk (tree thunk_fndecl, bool emit_p)
294 {
295   tree a, t, function, alias;
296   tree virtual_offset;
297   HOST_WIDE_INT fixed_offset, virtual_value;
298   bool this_adjusting = DECL_THIS_THUNK_P (thunk_fndecl);
299   struct cgraph_node *funcn, *thunk_node;
300 
301   /* We should have called finish_thunk to give it a name.  */
302   gcc_assert (DECL_NAME (thunk_fndecl));
303 
304   /* We should never be using an alias, always refer to the
305      aliased thunk.  */
306   gcc_assert (!THUNK_ALIAS (thunk_fndecl));
307 
308   if (TREE_ASM_WRITTEN (thunk_fndecl))
309     return;
310 
311   function = THUNK_TARGET (thunk_fndecl);
312   if (DECL_RESULT (thunk_fndecl))
313     /* We already turned this thunk into an ordinary function.
314        There's no need to process this thunk again.  */
315     return;
316 
317   if (DECL_THUNK_P (function))
318     /* The target is itself a thunk, process it now.  */
319     use_thunk (function, emit_p);
320 
321   /* Thunks are always addressable; they only appear in vtables.  */
322   TREE_ADDRESSABLE (thunk_fndecl) = 1;
323 
324   /* Figure out what function is being thunked to.  It's referenced in
325      this translation unit.  */
326   TREE_ADDRESSABLE (function) = 1;
327   mark_used (function);
328   if (!emit_p)
329     return;
330 
331   if (TARGET_USE_LOCAL_THUNK_ALIAS_P (function))
332    alias = make_alias_for_thunk (function);
333   else
334    alias = function;
335 
336   fixed_offset = THUNK_FIXED_OFFSET (thunk_fndecl);
337   virtual_offset = THUNK_VIRTUAL_OFFSET (thunk_fndecl);
338 
339   if (virtual_offset)
340     {
341       if (!this_adjusting)
342 	virtual_offset = BINFO_VPTR_FIELD (virtual_offset);
343       virtual_value = tree_to_shwi (virtual_offset);
344       gcc_assert (virtual_value);
345     }
346   else
347     virtual_value = 0;
348 
349   /* And, if we need to emit the thunk, it's used.  */
350   mark_used (thunk_fndecl);
351   /* This thunk is actually defined.  */
352   DECL_EXTERNAL (thunk_fndecl) = 0;
353   /* The linkage of the function may have changed.  FIXME in linkage
354      rewrite.  */
355   gcc_assert (DECL_INTERFACE_KNOWN (function));
356   TREE_PUBLIC (thunk_fndecl) = TREE_PUBLIC (function);
357   DECL_VISIBILITY (thunk_fndecl) = DECL_VISIBILITY (function);
358   DECL_VISIBILITY_SPECIFIED (thunk_fndecl)
359     = DECL_VISIBILITY_SPECIFIED (function);
360   DECL_COMDAT (thunk_fndecl) = DECL_COMDAT (function);
361   DECL_WEAK (thunk_fndecl) = DECL_WEAK (function);
362 
363   if (flag_syntax_only)
364     {
365       TREE_ASM_WRITTEN (thunk_fndecl) = 1;
366       return;
367     }
368 
369   push_to_top_level ();
370 
371   if (TARGET_USE_LOCAL_THUNK_ALIAS_P (function)
372       && targetm_common.have_named_sections)
373     {
374       tree fn = function;
375       struct symtab_node *symbol;
376 
377       if ((symbol = symtab_node::get (function))
378 	  && symbol->alias)
379 	{
380 	  if (symbol->analyzed)
381 	    fn = symtab_node::get (function)->ultimate_alias_target ()->decl;
382 	  else
383 	    fn = symtab_node::get (function)->alias_target;
384 	}
385       resolve_unique_section (fn, 0, flag_function_sections);
386 
387       if (DECL_SECTION_NAME (fn) != NULL && DECL_ONE_ONLY (fn))
388 	{
389 	  resolve_unique_section (thunk_fndecl, 0, flag_function_sections);
390 
391 	  /* Output the thunk into the same section as function.  */
392 	  set_decl_section_name (thunk_fndecl, DECL_SECTION_NAME (fn));
393 	  symtab_node::get (thunk_fndecl)->implicit_section
394 	    = symtab_node::get (fn)->implicit_section;
395 	}
396     }
397 
398   /* Set up cloned argument trees for the thunk.  */
399   t = NULL_TREE;
400   for (a = DECL_ARGUMENTS (function); a; a = DECL_CHAIN (a))
401     {
402       tree x = copy_node (a);
403       DECL_CHAIN (x) = t;
404       DECL_CONTEXT (x) = thunk_fndecl;
405       SET_DECL_RTL (x, NULL);
406       DECL_HAS_VALUE_EXPR_P (x) = 0;
407       TREE_ADDRESSABLE (x) = 0;
408       t = x;
409     }
410   a = nreverse (t);
411   DECL_ARGUMENTS (thunk_fndecl) = a;
412   TREE_ASM_WRITTEN (thunk_fndecl) = 1;
413   funcn = cgraph_node::get (function);
414   gcc_checking_assert (funcn);
415   thunk_node = funcn->create_thunk (thunk_fndecl, function,
416 				    this_adjusting, fixed_offset, virtual_value,
417 				    virtual_offset, alias);
418   if (DECL_ONE_ONLY (function))
419     thunk_node->add_to_same_comdat_group (funcn);
420 
421   pop_from_top_level ();
422 }
423 
424 /* Code for synthesizing methods which have default semantics defined.  */
425 
426 /* True iff CTYPE has a trivial SFK.  */
427 
428 static bool
429 type_has_trivial_fn (tree ctype, special_function_kind sfk)
430 {
431   switch (sfk)
432     {
433     case sfk_constructor:
434       return !TYPE_HAS_COMPLEX_DFLT (ctype);
435     case sfk_copy_constructor:
436       return !TYPE_HAS_COMPLEX_COPY_CTOR (ctype);
437     case sfk_move_constructor:
438       return !TYPE_HAS_COMPLEX_MOVE_CTOR (ctype);
439     case sfk_copy_assignment:
440       return !TYPE_HAS_COMPLEX_COPY_ASSIGN (ctype);
441     case sfk_move_assignment:
442       return !TYPE_HAS_COMPLEX_MOVE_ASSIGN (ctype);
443     case sfk_destructor:
444       return !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (ctype);
445     case sfk_inheriting_constructor:
446       return false;
447     default:
448       gcc_unreachable ();
449     }
450 }
451 
452 /* Note that CTYPE has a non-trivial SFK even though we previously thought
453    it was trivial.  */
454 
455 static void
456 type_set_nontrivial_flag (tree ctype, special_function_kind sfk)
457 {
458   switch (sfk)
459     {
460     case sfk_constructor:
461       TYPE_HAS_COMPLEX_DFLT (ctype) = true;
462       return;
463     case sfk_copy_constructor:
464       TYPE_HAS_COMPLEX_COPY_CTOR (ctype) = true;
465       return;
466     case sfk_move_constructor:
467       TYPE_HAS_COMPLEX_MOVE_CTOR (ctype) = true;
468       return;
469     case sfk_copy_assignment:
470       TYPE_HAS_COMPLEX_COPY_ASSIGN (ctype) = true;
471       return;
472     case sfk_move_assignment:
473       TYPE_HAS_COMPLEX_MOVE_ASSIGN (ctype) = true;
474       return;
475     case sfk_destructor:
476       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (ctype) = true;
477       return;
478     case sfk_inheriting_constructor:
479     default:
480       gcc_unreachable ();
481     }
482 }
483 
484 /* True iff FN is a trivial defaulted member function ([cd]tor, op=).  */
485 
486 bool
487 trivial_fn_p (tree fn)
488 {
489   if (!DECL_DEFAULTED_FN (fn))
490     return false;
491 
492   /* If fn is a clone, get the primary variant.  */
493   if (tree prim = DECL_CLONED_FUNCTION (fn))
494     fn = prim;
495   return type_has_trivial_fn (DECL_CONTEXT (fn), special_function_p (fn));
496 }
497 
498 /* Subroutine of do_build_copy_constructor: Add a mem-initializer for BINFO
499    given the parameter or parameters PARM, possibly inherited constructor
500    base INH, or move flag MOVE_P.  */
501 
502 static tree
503 add_one_base_init (tree binfo, tree parm, bool move_p, tree inh,
504 		   tree member_init_list)
505 {
506   tree init;
507   if (inh)
508     {
509       /* An inheriting constructor only has a mem-initializer for
510 	 the base it inherits from.  */
511       if (BINFO_TYPE (binfo) != inh)
512 	return member_init_list;
513 
514       tree *p = &init;
515       init = NULL_TREE;
516       for (; parm; parm = DECL_CHAIN (parm))
517 	{
518 	  tree exp = convert_from_reference (parm);
519 	  if (TREE_CODE (TREE_TYPE (parm)) != REFERENCE_TYPE
520 	      || TYPE_REF_IS_RVALUE (TREE_TYPE (parm)))
521 	    exp = move (exp);
522 	  *p = build_tree_list (NULL_TREE, exp);
523 	  p = &TREE_CHAIN (*p);
524 	}
525     }
526   else
527     {
528       init = build_base_path (PLUS_EXPR, parm, binfo, 1,
529 			      tf_warning_or_error);
530       if (move_p)
531 	init = move (init);
532       init = build_tree_list (NULL_TREE, init);
533     }
534   return tree_cons (binfo, init, member_init_list);
535 }
536 
537 /* Generate code for default X(X&) or X(X&&) constructor or an inheriting
538    constructor.  */
539 
540 static void
541 do_build_copy_constructor (tree fndecl)
542 {
543   tree parm = FUNCTION_FIRST_USER_PARM (fndecl);
544   bool move_p = DECL_MOVE_CONSTRUCTOR_P (fndecl);
545   bool trivial = trivial_fn_p (fndecl);
546   tree inh = DECL_INHERITED_CTOR_BASE (fndecl);
547 
548   if (!inh)
549     parm = convert_from_reference (parm);
550 
551   if (trivial
552       && is_empty_class (current_class_type))
553     /* Don't copy the padding byte; it might not have been allocated
554        if *this is a base subobject.  */;
555   else if (trivial)
556     {
557       tree t = build2 (INIT_EXPR, void_type_node, current_class_ref, parm);
558       finish_expr_stmt (t);
559     }
560   else
561     {
562       tree fields = TYPE_FIELDS (current_class_type);
563       tree member_init_list = NULL_TREE;
564       int cvquals = cp_type_quals (TREE_TYPE (parm));
565       int i;
566       tree binfo, base_binfo;
567       tree init;
568       vec<tree, va_gc> *vbases;
569 
570       /* Initialize all the base-classes with the parameter converted
571 	 to their type so that we get their copy constructor and not
572 	 another constructor that takes current_class_type.  We must
573 	 deal with the binfo's directly as a direct base might be
574 	 inaccessible due to ambiguity.  */
575       for (vbases = CLASSTYPE_VBASECLASSES (current_class_type), i = 0;
576 	   vec_safe_iterate (vbases, i, &binfo); i++)
577 	{
578 	  member_init_list = add_one_base_init (binfo, parm, move_p, inh,
579 						member_init_list);
580 	}
581 
582       for (binfo = TYPE_BINFO (current_class_type), i = 0;
583 	   BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
584 	{
585 	  if (BINFO_VIRTUAL_P (base_binfo))
586 	    continue;
587 	  member_init_list = add_one_base_init (base_binfo, parm, move_p,
588 						inh, member_init_list);
589 	}
590 
591       for (; fields; fields = DECL_CHAIN (fields))
592 	{
593 	  tree field = fields;
594 	  tree expr_type;
595 
596 	  if (TREE_CODE (field) != FIELD_DECL)
597 	    continue;
598 	  if (inh)
599 	    continue;
600 
601 	  expr_type = TREE_TYPE (field);
602 	  if (DECL_NAME (field))
603 	    {
604 	      if (VFIELD_NAME_P (DECL_NAME (field)))
605 		continue;
606 	    }
607 	  else if (ANON_AGGR_TYPE_P (expr_type) && TYPE_FIELDS (expr_type))
608 	    /* Just use the field; anonymous types can't have
609 	       nontrivial copy ctors or assignment ops or this
610 	       function would be deleted.  */;
611 	  else
612 	    continue;
613 
614 	  /* Compute the type of "init->field".  If the copy-constructor
615 	     parameter is, for example, "const S&", and the type of
616 	     the field is "T", then the type will usually be "const
617 	     T".  (There are no cv-qualified variants of reference
618 	     types.)  */
619 	  if (TREE_CODE (expr_type) != REFERENCE_TYPE)
620 	    {
621 	      int quals = cvquals;
622 
623 	      if (DECL_MUTABLE_P (field))
624 		quals &= ~TYPE_QUAL_CONST;
625 	      quals |= cp_type_quals (expr_type);
626 	      expr_type = cp_build_qualified_type (expr_type, quals);
627 	    }
628 
629 	  init = build3 (COMPONENT_REF, expr_type, parm, field, NULL_TREE);
630 	  if (move_p && TREE_CODE (expr_type) != REFERENCE_TYPE
631 	      /* 'move' breaks bit-fields, and has no effect for scalars.  */
632 	      && !scalarish_type_p (expr_type))
633 	    init = move (init);
634 	  init = build_tree_list (NULL_TREE, init);
635 
636 	  member_init_list = tree_cons (field, init, member_init_list);
637 	}
638       finish_mem_initializers (member_init_list);
639     }
640 }
641 
642 static void
643 do_build_copy_assign (tree fndecl)
644 {
645   tree parm = DECL_CHAIN (DECL_ARGUMENTS (fndecl));
646   tree compound_stmt;
647   bool move_p = move_fn_p (fndecl);
648   bool trivial = trivial_fn_p (fndecl);
649   int flags = LOOKUP_NORMAL | LOOKUP_NONVIRTUAL | LOOKUP_DEFAULTED;
650 
651   compound_stmt = begin_compound_stmt (0);
652   parm = convert_from_reference (parm);
653 
654   if (trivial
655       && is_empty_class (current_class_type))
656     /* Don't copy the padding byte; it might not have been allocated
657        if *this is a base subobject.  */;
658   else if (trivial)
659     {
660       tree t = build2 (MODIFY_EXPR, void_type_node, current_class_ref, parm);
661       finish_expr_stmt (t);
662     }
663   else
664     {
665       tree fields;
666       int cvquals = cp_type_quals (TREE_TYPE (parm));
667       int i;
668       tree binfo, base_binfo;
669 
670       /* Assign to each of the direct base classes.  */
671       for (binfo = TYPE_BINFO (current_class_type), i = 0;
672 	   BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
673 	{
674 	  tree converted_parm;
675 	  vec<tree, va_gc> *parmvec;
676 
677 	  /* We must convert PARM directly to the base class
678 	     explicitly since the base class may be ambiguous.  */
679 	  converted_parm = build_base_path (PLUS_EXPR, parm, base_binfo, 1,
680 					    tf_warning_or_error);
681 	  if (move_p)
682 	    converted_parm = move (converted_parm);
683 	  /* Call the base class assignment operator.  */
684 	  parmvec = make_tree_vector_single (converted_parm);
685 	  finish_expr_stmt
686 	    (build_special_member_call (current_class_ref,
687 					ansi_assopname (NOP_EXPR),
688 					&parmvec,
689 					base_binfo,
690 					flags,
691                                         tf_warning_or_error));
692 	  release_tree_vector (parmvec);
693 	}
694 
695       /* Assign to each of the non-static data members.  */
696       for (fields = TYPE_FIELDS (current_class_type);
697 	   fields;
698 	   fields = DECL_CHAIN (fields))
699 	{
700 	  tree comp = current_class_ref;
701 	  tree init = parm;
702 	  tree field = fields;
703 	  tree expr_type;
704 	  int quals;
705 
706 	  if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
707 	    continue;
708 
709 	  expr_type = TREE_TYPE (field);
710 
711 	  if (CP_TYPE_CONST_P (expr_type))
712 	    {
713 	      error ("non-static const member %q#D, can%'t use default "
714 		     "assignment operator", field);
715 	      continue;
716 	    }
717 	  else if (TREE_CODE (expr_type) == REFERENCE_TYPE)
718 	    {
719 	      error ("non-static reference member %q#D, can%'t use "
720 		     "default assignment operator", field);
721 	      continue;
722 	    }
723 
724 	  if (DECL_NAME (field))
725 	    {
726 	      if (VFIELD_NAME_P (DECL_NAME (field)))
727 		continue;
728 	    }
729 	  else if (ANON_AGGR_TYPE_P (expr_type)
730 		   && TYPE_FIELDS (expr_type) != NULL_TREE)
731 	    /* Just use the field; anonymous types can't have
732 	       nontrivial copy ctors or assignment ops or this
733 	       function would be deleted.  */;
734 	  else
735 	    continue;
736 
737 	  comp = build3 (COMPONENT_REF, expr_type, comp, field, NULL_TREE);
738 
739 	  /* Compute the type of init->field  */
740 	  quals = cvquals;
741 	  if (DECL_MUTABLE_P (field))
742 	    quals &= ~TYPE_QUAL_CONST;
743 	  expr_type = cp_build_qualified_type (expr_type, quals);
744 
745 	  init = build3 (COMPONENT_REF, expr_type, init, field, NULL_TREE);
746 	  if (move_p && TREE_CODE (expr_type) != REFERENCE_TYPE
747 	      /* 'move' breaks bit-fields, and has no effect for scalars.  */
748 	      && !scalarish_type_p (expr_type))
749 	    init = move (init);
750 
751 	  if (DECL_NAME (field))
752 	    init = cp_build_modify_expr (comp, NOP_EXPR, init,
753 					 tf_warning_or_error);
754 	  else
755 	    init = build2 (MODIFY_EXPR, TREE_TYPE (comp), comp, init);
756 	  finish_expr_stmt (init);
757 	}
758     }
759   finish_return_stmt (current_class_ref);
760   finish_compound_stmt (compound_stmt);
761 }
762 
763 /* Synthesize FNDECL, a non-static member function.   */
764 
765 void
766 synthesize_method (tree fndecl)
767 {
768   bool nested = (current_function_decl != NULL_TREE);
769   tree context = decl_function_context (fndecl);
770   bool need_body = true;
771   tree stmt;
772   location_t save_input_location = input_location;
773   int error_count = errorcount;
774   int warning_count = warningcount + werrorcount;
775 
776   /* Reset the source location, we might have been previously
777      deferred, and thus have saved where we were first needed.  */
778   DECL_SOURCE_LOCATION (fndecl)
779     = DECL_SOURCE_LOCATION (TYPE_NAME (DECL_CONTEXT (fndecl)));
780 
781   /* If we've been asked to synthesize a clone, just synthesize the
782      cloned function instead.  Doing so will automatically fill in the
783      body for the clone.  */
784   if (DECL_CLONED_FUNCTION_P (fndecl))
785     fndecl = DECL_CLONED_FUNCTION (fndecl);
786 
787   /* We may be in the middle of deferred access check.  Disable
788      it now.  */
789   push_deferring_access_checks (dk_no_deferred);
790 
791   if (! context)
792     push_to_top_level ();
793   else if (nested)
794     push_function_context ();
795 
796   input_location = DECL_SOURCE_LOCATION (fndecl);
797 
798   start_preparsed_function (fndecl, NULL_TREE, SF_DEFAULT | SF_PRE_PARSED);
799   stmt = begin_function_body ();
800 
801   if (DECL_OVERLOADED_OPERATOR_P (fndecl) == NOP_EXPR)
802     {
803       do_build_copy_assign (fndecl);
804       need_body = false;
805     }
806   else if (DECL_CONSTRUCTOR_P (fndecl))
807     {
808       tree arg_chain = FUNCTION_FIRST_USER_PARMTYPE (fndecl);
809       if (arg_chain != void_list_node)
810 	do_build_copy_constructor (fndecl);
811       else
812 	finish_mem_initializers (NULL_TREE);
813     }
814 
815   /* If we haven't yet generated the body of the function, just
816      generate an empty compound statement.  */
817   if (need_body)
818     {
819       tree compound_stmt;
820       compound_stmt = begin_compound_stmt (BCS_FN_BODY);
821       finish_compound_stmt (compound_stmt);
822     }
823 
824   finish_function_body (stmt);
825   expand_or_defer_fn (finish_function (0));
826 
827   input_location = save_input_location;
828 
829   if (! context)
830     pop_from_top_level ();
831   else if (nested)
832     pop_function_context ();
833 
834   pop_deferring_access_checks ();
835 
836   if (error_count != errorcount || warning_count != warningcount + werrorcount)
837     inform (input_location, "synthesized method %qD first required here ",
838 	    fndecl);
839 }
840 
841 /* Build a reference to type TYPE with cv-quals QUALS, which is an
842    rvalue if RVALUE is true.  */
843 
844 static tree
845 build_stub_type (tree type, int quals, bool rvalue)
846 {
847   tree argtype = cp_build_qualified_type (type, quals);
848   return cp_build_reference_type (argtype, rvalue);
849 }
850 
851 /* Build a dummy glvalue from dereferencing a dummy reference of type
852    REFTYPE.  */
853 
854 static tree
855 build_stub_object (tree reftype)
856 {
857   if (TREE_CODE (reftype) != REFERENCE_TYPE)
858     reftype = cp_build_reference_type (reftype, /*rval*/true);
859   tree stub = build1 (CONVERT_EXPR, reftype, integer_one_node);
860   return convert_from_reference (stub);
861 }
862 
863 /* Determine which function will be called when looking up NAME in TYPE,
864    called with a single ARGTYPE argument, or no argument if ARGTYPE is
865    null.  FLAGS and COMPLAIN are as for build_new_method_call.
866 
867    Returns a FUNCTION_DECL if all is well.
868    Returns NULL_TREE if overload resolution failed.
869    Returns error_mark_node if the chosen function cannot be called.  */
870 
871 static tree
872 locate_fn_flags (tree type, tree name, tree argtype, int flags,
873 		 tsubst_flags_t complain)
874 {
875   tree ob, fn, fns, binfo, rval;
876   vec<tree, va_gc> *args;
877 
878   if (TYPE_P (type))
879     binfo = TYPE_BINFO (type);
880   else
881     {
882       binfo = type;
883       type = BINFO_TYPE (binfo);
884     }
885 
886   ob = build_stub_object (cp_build_reference_type (type, false));
887   args = make_tree_vector ();
888   if (argtype)
889     {
890       if (TREE_CODE (argtype) == TREE_LIST)
891 	{
892 	  for (tree elt = argtype; elt != void_list_node;
893 	       elt = TREE_CHAIN (elt))
894 	    {
895 	      tree type = TREE_VALUE (elt);
896 	      tree arg = build_stub_object (type);
897 	      vec_safe_push (args, arg);
898 	    }
899 	}
900       else
901 	{
902 	  tree arg = build_stub_object (argtype);
903 	  args->quick_push (arg);
904 	}
905     }
906 
907   fns = lookup_fnfields (binfo, name, 0);
908   rval = build_new_method_call (ob, fns, &args, binfo, flags, &fn, complain);
909 
910   release_tree_vector (args);
911   if (fn && rval == error_mark_node)
912     return rval;
913   else
914     return fn;
915 }
916 
917 /* Locate the dtor of TYPE.  */
918 
919 tree
920 get_dtor (tree type, tsubst_flags_t complain)
921 {
922   tree fn = locate_fn_flags (type, complete_dtor_identifier, NULL_TREE,
923 			     LOOKUP_NORMAL, complain);
924   if (fn == error_mark_node)
925     return NULL_TREE;
926   return fn;
927 }
928 
929 /* Locate the default ctor of TYPE.  */
930 
931 tree
932 locate_ctor (tree type)
933 {
934   tree fn;
935 
936   push_deferring_access_checks (dk_no_check);
937   fn = locate_fn_flags (type, complete_ctor_identifier, NULL_TREE,
938 			LOOKUP_SPECULATIVE, tf_none);
939   pop_deferring_access_checks ();
940   if (fn == error_mark_node)
941     return NULL_TREE;
942   return fn;
943 }
944 
945 /* Likewise, but give any appropriate errors.  */
946 
947 tree
948 get_default_ctor (tree type)
949 {
950   tree fn = locate_fn_flags (type, complete_ctor_identifier, NULL_TREE,
951 			     LOOKUP_NORMAL, tf_warning_or_error);
952   if (fn == error_mark_node)
953     return NULL_TREE;
954   return fn;
955 }
956 
957 /* Locate the copy ctor of TYPE.  */
958 
959 tree
960 get_copy_ctor (tree type, tsubst_flags_t complain)
961 {
962   int quals = (TYPE_HAS_CONST_COPY_CTOR (type)
963 	       ? TYPE_QUAL_CONST : TYPE_UNQUALIFIED);
964   tree argtype = build_stub_type (type, quals, false);
965   tree fn = locate_fn_flags (type, complete_ctor_identifier, argtype,
966 			     LOOKUP_NORMAL, complain);
967   if (fn == error_mark_node)
968     return NULL_TREE;
969   return fn;
970 }
971 
972 /* Locate the copy assignment operator of TYPE.  */
973 
974 tree
975 get_copy_assign (tree type)
976 {
977   int quals = (TYPE_HAS_CONST_COPY_ASSIGN (type)
978 	       ? TYPE_QUAL_CONST : TYPE_UNQUALIFIED);
979   tree argtype = build_stub_type (type, quals, false);
980   tree fn = locate_fn_flags (type, ansi_assopname (NOP_EXPR), argtype,
981 			     LOOKUP_NORMAL, tf_warning_or_error);
982   if (fn == error_mark_node)
983     return NULL_TREE;
984   return fn;
985 }
986 
987 /* Locate the inherited constructor of constructor CTOR.  */
988 
989 tree
990 get_inherited_ctor (tree ctor)
991 {
992   gcc_assert (DECL_INHERITED_CTOR_BASE (ctor));
993 
994   push_deferring_access_checks (dk_no_check);
995   tree fn = locate_fn_flags (DECL_INHERITED_CTOR_BASE (ctor),
996 			     complete_ctor_identifier,
997 			     FUNCTION_FIRST_USER_PARMTYPE (ctor),
998 			     LOOKUP_NORMAL|LOOKUP_SPECULATIVE,
999 			     tf_none);
1000   pop_deferring_access_checks ();
1001   if (fn == error_mark_node)
1002     return NULL_TREE;
1003   return fn;
1004 }
1005 
1006 /* walk_tree helper function for is_trivially_xible.  If *TP is a call,
1007    return it if it calls something other than a trivial special member
1008    function.  */
1009 
1010 static tree
1011 check_nontriv (tree *tp, int *, void *)
1012 {
1013   tree fn;
1014   if (TREE_CODE (*tp) == CALL_EXPR)
1015     fn = CALL_EXPR_FN (*tp);
1016   else if (TREE_CODE (*tp) == AGGR_INIT_EXPR)
1017     fn = AGGR_INIT_EXPR_FN (*tp);
1018   else
1019     return NULL_TREE;
1020 
1021   if (TREE_CODE (fn) == ADDR_EXPR)
1022     fn = TREE_OPERAND (fn, 0);
1023 
1024   if (TREE_CODE (fn) != FUNCTION_DECL
1025       || !trivial_fn_p (fn))
1026     return fn;
1027   return NULL_TREE;
1028 }
1029 
1030 /* Return declval<T>() = declval<U>() treated as an unevaluated operand.  */
1031 
1032 static tree
1033 assignable_expr (tree to, tree from)
1034 {
1035   ++cp_unevaluated_operand;
1036   to = build_stub_object (to);
1037   from = build_stub_object (from);
1038   tree r = cp_build_modify_expr (to, NOP_EXPR, from, tf_none);
1039   --cp_unevaluated_operand;
1040   return r;
1041 }
1042 
1043 /* The predicate condition for a template specialization
1044    is_constructible<T, Args...> shall be satisfied if and only if the
1045    following variable definition would be well-formed for some invented
1046    variable t: T t(create<Args>()...);
1047 
1048    Return something equivalent in well-formedness and triviality.  */
1049 
1050 static tree
1051 constructible_expr (tree to, tree from)
1052 {
1053   tree expr;
1054   if (CLASS_TYPE_P (to))
1055     {
1056       tree ctype = to;
1057       vec<tree, va_gc> *args = NULL;
1058       if (TREE_CODE (to) != REFERENCE_TYPE)
1059 	to = cp_build_reference_type (to, /*rval*/false);
1060       tree ob = build_stub_object (to);
1061       for (; from; from = TREE_CHAIN (from))
1062 	vec_safe_push (args, build_stub_object (TREE_VALUE (from)));
1063       expr = build_special_member_call (ob, complete_ctor_identifier, &args,
1064 					ctype, LOOKUP_NORMAL, tf_none);
1065       if (expr == error_mark_node)
1066 	return error_mark_node;
1067       /* The current state of the standard vis-a-vis LWG 2116 is that
1068 	 is_*constructible involves destruction as well.  */
1069       if (type_build_dtor_call (ctype))
1070 	{
1071 	  tree dtor = build_special_member_call (ob, complete_dtor_identifier,
1072 						 NULL, ctype, LOOKUP_NORMAL,
1073 						 tf_none);
1074 	  if (dtor == error_mark_node)
1075 	    return error_mark_node;
1076 	  if (!TYPE_HAS_TRIVIAL_DESTRUCTOR (ctype))
1077 	    expr = build2 (COMPOUND_EXPR, void_type_node, expr, dtor);
1078 	}
1079     }
1080   else
1081     {
1082       if (from == NULL_TREE)
1083 	return build_value_init (to, tf_none);
1084       else if (TREE_CHAIN (from))
1085 	return error_mark_node; // too many initializers
1086       from = build_stub_object (TREE_VALUE (from));
1087       expr = perform_direct_initialization_if_possible (to, from,
1088 							/*cast*/false,
1089 							tf_none);
1090     }
1091   return expr;
1092 }
1093 
1094 /* Returns true iff TO is trivially assignable (if CODE is MODIFY_EXPR) or
1095    constructible (otherwise) from FROM, which is a single type for
1096    assignment or a list of types for construction.  */
1097 
1098 bool
1099 is_trivially_xible (enum tree_code code, tree to, tree from)
1100 {
1101   tree expr;
1102   if (code == MODIFY_EXPR)
1103     expr = assignable_expr (to, from);
1104   else if (from && TREE_CHAIN (from))
1105     return false; // only 0- and 1-argument ctors can be trivial
1106   else
1107     expr = constructible_expr (to, from);
1108 
1109   if (expr == error_mark_node)
1110     return false;
1111   tree nt = cp_walk_tree_without_duplicates (&expr, check_nontriv, NULL);
1112   return !nt;
1113 }
1114 
1115 /* Subroutine of synthesized_method_walk.  Update SPEC_P, TRIVIAL_P and
1116    DELETED_P or give an error message MSG with argument ARG.  */
1117 
1118 static void
1119 process_subob_fn (tree fn, tree *spec_p, bool *trivial_p,
1120 		  bool *deleted_p, bool *constexpr_p,
1121 		  bool diag, tree arg, bool dtor_from_ctor = false)
1122 {
1123   if (!fn || fn == error_mark_node)
1124     goto bad;
1125 
1126   if (spec_p)
1127     {
1128       maybe_instantiate_noexcept (fn);
1129       tree raises = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn));
1130       *spec_p = merge_exception_specifiers (*spec_p, raises);
1131     }
1132 
1133   if (!trivial_fn_p (fn) && !dtor_from_ctor)
1134     {
1135       if (trivial_p)
1136 	*trivial_p = false;
1137       if (TREE_CODE (arg) == FIELD_DECL
1138 	  && TREE_CODE (DECL_CONTEXT (arg)) == UNION_TYPE)
1139 	{
1140 	  if (deleted_p)
1141 	    *deleted_p = true;
1142 	  if (diag)
1143 	    error ("union member %q+D with non-trivial %qD", arg, fn);
1144 	}
1145     }
1146 
1147   if (constexpr_p && !DECL_DECLARED_CONSTEXPR_P (fn))
1148     {
1149       *constexpr_p = false;
1150       if (diag)
1151 	{
1152 	  inform (0, "defaulted constructor calls non-constexpr "
1153 		  "%q+D", fn);
1154 	  explain_invalid_constexpr_fn (fn);
1155 	}
1156     }
1157 
1158   return;
1159 
1160  bad:
1161   if (deleted_p)
1162     *deleted_p = true;
1163 }
1164 
1165 /* Subroutine of synthesized_method_walk to allow recursion into anonymous
1166    aggregates.  If DTOR_FROM_CTOR is true, we're walking subobject destructors
1167    called from a synthesized constructor, in which case we don't consider
1168    the triviality of the subobject destructor.  */
1169 
1170 static void
1171 walk_field_subobs (tree fields, tree fnname, special_function_kind sfk,
1172 		   int quals, bool copy_arg_p, bool move_p,
1173 		   bool assign_p, tree *spec_p, bool *trivial_p,
1174 		   bool *deleted_p, bool *constexpr_p,
1175 		   bool diag, int flags, tsubst_flags_t complain,
1176 		   bool dtor_from_ctor)
1177 {
1178   tree field;
1179   for (field = fields; field; field = DECL_CHAIN (field))
1180     {
1181       tree mem_type, argtype, rval;
1182 
1183       if (TREE_CODE (field) != FIELD_DECL
1184 	  || DECL_ARTIFICIAL (field))
1185 	continue;
1186 
1187       mem_type = strip_array_types (TREE_TYPE (field));
1188       if (assign_p)
1189 	{
1190 	  bool bad = true;
1191 	  if (CP_TYPE_CONST_P (mem_type) && !CLASS_TYPE_P (mem_type))
1192 	    {
1193 	      if (diag)
1194 		error ("non-static const member %q#D, can%'t use default "
1195 		       "assignment operator", field);
1196 	    }
1197 	  else if (TREE_CODE (mem_type) == REFERENCE_TYPE)
1198 	    {
1199 	      if (diag)
1200 		error ("non-static reference member %q#D, can%'t use "
1201 		       "default assignment operator", field);
1202 	    }
1203 	  else
1204 	    bad = false;
1205 
1206 	  if (bad && deleted_p)
1207 	    *deleted_p = true;
1208 	}
1209       else if (sfk == sfk_constructor)
1210 	{
1211 	  bool bad;
1212 
1213 	  if (DECL_INITIAL (field))
1214 	    {
1215 	      if (diag && DECL_INITIAL (field) == error_mark_node)
1216 		inform (0, "initializer for %q+#D is invalid", field);
1217 	      if (trivial_p)
1218 		*trivial_p = false;
1219 	      /* Core 1351: If the field has an NSDMI that could throw, the
1220 		 default constructor is noexcept(false).  */
1221 	      if (spec_p)
1222 		{
1223 		  tree nsdmi = get_nsdmi (field, /*ctor*/false);
1224 		  if (!expr_noexcept_p (nsdmi, complain))
1225 		    *spec_p = noexcept_false_spec;
1226 		}
1227 	      /* Don't do the normal processing.  */
1228 	      continue;
1229 	    }
1230 
1231 	  bad = false;
1232 	  if (CP_TYPE_CONST_P (mem_type)
1233 	      && default_init_uninitialized_part (mem_type))
1234 	    {
1235 	      if (diag)
1236 		{
1237 		  error ("uninitialized const member in %q#T",
1238 			 current_class_type);
1239 		  inform (DECL_SOURCE_LOCATION (field),
1240 			  "%q#D should be initialized", field);
1241 		}
1242 	      bad = true;
1243 	    }
1244 	  else if (TREE_CODE (mem_type) == REFERENCE_TYPE)
1245 	    {
1246 	      if (diag)
1247 		{
1248 		  error ("uninitialized reference member in %q#T",
1249 			 current_class_type);
1250 		  inform (DECL_SOURCE_LOCATION (field),
1251 			  "%q#D should be initialized", field);
1252 		}
1253 	      bad = true;
1254 	    }
1255 
1256 	  if (bad && deleted_p)
1257 	    *deleted_p = true;
1258 
1259 	  /* For an implicitly-defined default constructor to be constexpr,
1260 	     every member must have a user-provided default constructor or
1261 	     an explicit initializer.  */
1262 	  if (constexpr_p && !CLASS_TYPE_P (mem_type)
1263 	      && TREE_CODE (DECL_CONTEXT (field)) != UNION_TYPE)
1264 	    {
1265 	      *constexpr_p = false;
1266 	      if (diag)
1267 		inform (0, "defaulted default constructor does not "
1268 			"initialize %q+#D", field);
1269 	    }
1270 	}
1271       else if (sfk == sfk_copy_constructor)
1272 	{
1273 	  /* 12.8p11b5 */
1274 	  if (TREE_CODE (mem_type) == REFERENCE_TYPE
1275 	      && TYPE_REF_IS_RVALUE (mem_type))
1276 	    {
1277 	      if (diag)
1278 		error ("copying non-static data member %q#D of rvalue "
1279 		       "reference type", field);
1280 	      if (deleted_p)
1281 		*deleted_p = true;
1282 	    }
1283 	}
1284 
1285       if (!CLASS_TYPE_P (mem_type))
1286 	continue;
1287 
1288       if (ANON_AGGR_TYPE_P (mem_type))
1289 	{
1290 	  walk_field_subobs (TYPE_FIELDS (mem_type), fnname, sfk, quals,
1291 			     copy_arg_p, move_p, assign_p, spec_p, trivial_p,
1292 			     deleted_p, constexpr_p,
1293 			     diag, flags, complain, dtor_from_ctor);
1294 	  continue;
1295 	}
1296 
1297       if (copy_arg_p)
1298 	{
1299 	  int mem_quals = cp_type_quals (mem_type) | quals;
1300 	  if (DECL_MUTABLE_P (field))
1301 	    mem_quals &= ~TYPE_QUAL_CONST;
1302 	  argtype = build_stub_type (mem_type, mem_quals, move_p);
1303 	}
1304       else
1305 	argtype = NULL_TREE;
1306 
1307       rval = locate_fn_flags (mem_type, fnname, argtype, flags, complain);
1308 
1309       process_subob_fn (rval, spec_p, trivial_p, deleted_p,
1310 			constexpr_p, diag, field, dtor_from_ctor);
1311     }
1312 }
1313 
1314 /* The caller wants to generate an implicit declaration of SFK for CTYPE
1315    which is const if relevant and CONST_P is set.  If spec_p, trivial_p and
1316    deleted_p are non-null, set their referent appropriately.  If diag is
1317    true, we're either being called from maybe_explain_implicit_delete to
1318    give errors, or if constexpr_p is non-null, from
1319    explain_invalid_constexpr_fn.  */
1320 
1321 static void
1322 synthesized_method_walk (tree ctype, special_function_kind sfk, bool const_p,
1323 			 tree *spec_p, bool *trivial_p, bool *deleted_p,
1324 			 bool *constexpr_p, bool diag,
1325 			 tree inherited_base, tree inherited_parms)
1326 {
1327   tree binfo, base_binfo, scope, fnname, rval, argtype;
1328   bool move_p, copy_arg_p, assign_p, expected_trivial, check_vdtor;
1329   vec<tree, va_gc> *vbases;
1330   int i, quals, flags;
1331   tsubst_flags_t complain;
1332   bool ctor_p;
1333 
1334   if (spec_p)
1335     *spec_p = (cxx_dialect >= cxx11 ? noexcept_true_spec : empty_except_spec);
1336 
1337   if (deleted_p)
1338     {
1339       /* "The closure type associated with a lambda-expression has a deleted
1340 	 default constructor and a deleted copy assignment operator."
1341          This is diagnosed in maybe_explain_implicit_delete.  */
1342       if (LAMBDA_TYPE_P (ctype)
1343 	  && (sfk == sfk_constructor
1344 	      || sfk == sfk_copy_assignment))
1345 	{
1346 	  *deleted_p = true;
1347 	  return;
1348 	}
1349 
1350       *deleted_p = false;
1351     }
1352 
1353   ctor_p = false;
1354   assign_p = false;
1355   check_vdtor = false;
1356   switch (sfk)
1357     {
1358     case sfk_move_assignment:
1359     case sfk_copy_assignment:
1360       assign_p = true;
1361       fnname = ansi_assopname (NOP_EXPR);
1362       break;
1363 
1364     case sfk_destructor:
1365       check_vdtor = true;
1366       /* The synthesized method will call base dtors, but check complete
1367 	 here to avoid having to deal with VTT.  */
1368       fnname = complete_dtor_identifier;
1369       break;
1370 
1371     case sfk_constructor:
1372     case sfk_move_constructor:
1373     case sfk_copy_constructor:
1374     case sfk_inheriting_constructor:
1375       ctor_p = true;
1376       fnname = complete_ctor_identifier;
1377       break;
1378 
1379     default:
1380       gcc_unreachable ();
1381     }
1382 
1383   gcc_assert ((sfk == sfk_inheriting_constructor)
1384 	      == (inherited_base != NULL_TREE));
1385 
1386   /* If that user-written default constructor would satisfy the
1387      requirements of a constexpr constructor (7.1.5), the
1388      implicitly-defined default constructor is constexpr.
1389 
1390      The implicitly-defined copy/move assignment operator is constexpr if
1391       - X is a literal type, and
1392       - the assignment operator selected to copy/move each direct base class
1393 	subobject is a constexpr function, and
1394       - for each non-static data member of X that is of class type (or array
1395 	thereof), the assignment operator selected to copy/move that member is a
1396 	constexpr function.  */
1397   if (constexpr_p)
1398     *constexpr_p = ctor_p
1399       || (assign_p && cxx_dialect >= cxx14);
1400 
1401   move_p = false;
1402   switch (sfk)
1403     {
1404     case sfk_constructor:
1405     case sfk_destructor:
1406     case sfk_inheriting_constructor:
1407       copy_arg_p = false;
1408       break;
1409 
1410     case sfk_move_constructor:
1411     case sfk_move_assignment:
1412       move_p = true;
1413     case sfk_copy_constructor:
1414     case sfk_copy_assignment:
1415       copy_arg_p = true;
1416       break;
1417 
1418     default:
1419       gcc_unreachable ();
1420     }
1421 
1422   expected_trivial = type_has_trivial_fn (ctype, sfk);
1423   if (trivial_p)
1424     *trivial_p = expected_trivial;
1425 
1426   /* The TYPE_HAS_COMPLEX_* flags tell us about constraints from base
1427      class versions and other properties of the type.  But a subobject
1428      class can be trivially copyable and yet have overload resolution
1429      choose a template constructor for initialization, depending on
1430      rvalueness and cv-quals.  And furthermore, a member in a base might
1431      be trivial but deleted or otherwise not callable.  So we can't exit
1432      early in C++0x.  The same considerations apply in C++98/03, but
1433      there the definition of triviality does not consider overload
1434      resolution, so a constructor can be trivial even if it would otherwise
1435      call a non-trivial constructor.  */
1436   if (expected_trivial
1437       && (!copy_arg_p || cxx_dialect < cxx11))
1438     {
1439       if (constexpr_p && sfk == sfk_constructor)
1440 	{
1441 	  bool cx = trivial_default_constructor_is_constexpr (ctype);
1442 	  *constexpr_p = cx;
1443 	  if (diag && !cx && TREE_CODE (ctype) == UNION_TYPE)
1444 	    /* A trivial constructor doesn't have any NSDMI.  */
1445 	    inform (input_location, "defaulted default constructor does "
1446 		    "not initialize any non-static data member");
1447 	}
1448       if (!diag && cxx_dialect < cxx11)
1449 	return;
1450     }
1451 
1452   ++cp_unevaluated_operand;
1453   ++c_inhibit_evaluation_warnings;
1454   push_deferring_access_checks (dk_no_deferred);
1455 
1456   scope = push_scope (ctype);
1457 
1458   flags = LOOKUP_NORMAL|LOOKUP_SPECULATIVE;
1459   if (!inherited_base)
1460     flags |= LOOKUP_DEFAULTED;
1461 
1462   complain = diag ? tf_warning_or_error : tf_none;
1463 
1464   if (const_p)
1465     quals = TYPE_QUAL_CONST;
1466   else
1467     quals = TYPE_UNQUALIFIED;
1468   argtype = NULL_TREE;
1469 
1470   for (binfo = TYPE_BINFO (ctype), i = 0;
1471        BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
1472     {
1473       tree basetype = BINFO_TYPE (base_binfo);
1474 
1475       if (!assign_p && BINFO_VIRTUAL_P (base_binfo))
1476 	/* We'll handle virtual bases below.  */
1477 	continue;
1478 
1479       if (copy_arg_p)
1480 	argtype = build_stub_type (basetype, quals, move_p);
1481       else if (basetype == inherited_base)
1482 	argtype = inherited_parms;
1483       rval = locate_fn_flags (base_binfo, fnname, argtype, flags, complain);
1484       if (inherited_base)
1485 	argtype = NULL_TREE;
1486 
1487       process_subob_fn (rval, spec_p, trivial_p, deleted_p,
1488 			constexpr_p, diag, basetype);
1489       if (ctor_p)
1490 	{
1491 	  /* In a constructor we also need to check the subobject
1492 	     destructors for cleanup of partially constructed objects.  */
1493 	  rval = locate_fn_flags (base_binfo, complete_dtor_identifier,
1494 				  NULL_TREE, flags, complain);
1495 	  /* Note that we don't pass down trivial_p; the subobject
1496 	     destructors don't affect triviality of the constructor.  Nor
1497 	     do they affect constexpr-ness (a constant expression doesn't
1498 	     throw) or exception-specification (a throw from one of the
1499 	     dtors would be a double-fault).  */
1500 	  process_subob_fn (rval, NULL, NULL,
1501 			    deleted_p, NULL, false,
1502 			    basetype, /*dtor_from_ctor*/true);
1503 	}
1504 
1505       if (check_vdtor && type_has_virtual_destructor (basetype))
1506 	{
1507 	  rval = locate_fn_flags (ctype, ansi_opname (DELETE_EXPR),
1508 				  ptr_type_node, flags, complain);
1509 	  /* Unlike for base ctor/op=/dtor, for operator delete it's fine
1510 	     to have a null rval (no class-specific op delete).  */
1511 	  if (rval && rval == error_mark_node && deleted_p)
1512 	    *deleted_p = true;
1513 	  check_vdtor = false;
1514 	}
1515 
1516       if (diag && assign_p && move_p
1517 	  && BINFO_VIRTUAL_P (base_binfo)
1518 	  && rval && TREE_CODE (rval) == FUNCTION_DECL
1519 	  && move_fn_p (rval) && !trivial_fn_p (rval)
1520 	  && vbase_has_user_provided_move_assign (basetype))
1521 	warning (OPT_Wvirtual_move_assign,
1522 		 "defaulted move assignment for %qT calls a non-trivial "
1523 		 "move assignment operator for virtual base %qT",
1524 		 ctype, basetype);
1525     }
1526 
1527   vbases = CLASSTYPE_VBASECLASSES (ctype);
1528   if (vec_safe_is_empty (vbases))
1529     /* No virtual bases to worry about.  */;
1530   else if (!assign_p)
1531     {
1532       if (constexpr_p)
1533 	*constexpr_p = false;
1534       FOR_EACH_VEC_ELT (*vbases, i, base_binfo)
1535 	{
1536 	  tree basetype = BINFO_TYPE (base_binfo);
1537 	  if (copy_arg_p)
1538 	    argtype = build_stub_type (basetype, quals, move_p);
1539 	  rval = locate_fn_flags (base_binfo, fnname, argtype, flags, complain);
1540 
1541 	  process_subob_fn (rval, spec_p, trivial_p, deleted_p,
1542 			    constexpr_p, diag, basetype);
1543 	  if (ctor_p && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (basetype))
1544 	    {
1545 	      rval = locate_fn_flags (base_binfo, complete_dtor_identifier,
1546 				      NULL_TREE, flags, complain);
1547 	      process_subob_fn (rval, NULL, NULL,
1548 				deleted_p, NULL, false,
1549 				basetype, /*dtor_from_ctor*/true);
1550 	    }
1551 	}
1552     }
1553 
1554   /* Now handle the non-static data members.  */
1555   walk_field_subobs (TYPE_FIELDS (ctype), fnname, sfk, quals,
1556 		     copy_arg_p, move_p, assign_p, spec_p, trivial_p,
1557 		     deleted_p, constexpr_p,
1558 		     diag, flags, complain, /*dtor_from_ctor*/false);
1559   if (ctor_p)
1560     walk_field_subobs (TYPE_FIELDS (ctype), complete_dtor_identifier,
1561 		       sfk_destructor, TYPE_UNQUALIFIED, false,
1562 		       false, false, NULL, NULL,
1563 		       deleted_p, NULL,
1564 		       false, flags, complain, /*dtor_from_ctor*/true);
1565 
1566   pop_scope (scope);
1567 
1568   pop_deferring_access_checks ();
1569   --cp_unevaluated_operand;
1570   --c_inhibit_evaluation_warnings;
1571 }
1572 
1573 /* DECL is a defaulted function whose exception specification is now
1574    needed.  Return what it should be.  */
1575 
1576 tree
1577 get_defaulted_eh_spec (tree decl)
1578 {
1579   if (DECL_CLONED_FUNCTION_P (decl))
1580     decl = DECL_CLONED_FUNCTION (decl);
1581   special_function_kind sfk = special_function_p (decl);
1582   tree ctype = DECL_CONTEXT (decl);
1583   tree parms = FUNCTION_FIRST_USER_PARMTYPE (decl);
1584   tree parm_type = TREE_VALUE (parms);
1585   bool const_p = CP_TYPE_CONST_P (non_reference (parm_type));
1586   tree spec = empty_except_spec;
1587   synthesized_method_walk (ctype, sfk, const_p, &spec, NULL, NULL,
1588 			   NULL, false, DECL_INHERITED_CTOR_BASE (decl),
1589 			   parms);
1590   return spec;
1591 }
1592 
1593 /* DECL is a deleted function.  If it's implicitly deleted, explain why and
1594    return true; else return false.  */
1595 
1596 bool
1597 maybe_explain_implicit_delete (tree decl)
1598 {
1599   /* If decl is a clone, get the primary variant.  */
1600   decl = DECL_ORIGIN (decl);
1601   gcc_assert (DECL_DELETED_FN (decl));
1602   if (DECL_DEFAULTED_FN (decl))
1603     {
1604       /* Not marked GTY; it doesn't need to be GC'd or written to PCH.  */
1605       static hash_set<tree> *explained;
1606 
1607       special_function_kind sfk;
1608       location_t loc;
1609       bool informed;
1610       tree ctype;
1611 
1612       if (!explained)
1613 	explained = new hash_set<tree>;
1614       if (explained->add (decl))
1615 	return true;
1616 
1617       sfk = special_function_p (decl);
1618       ctype = DECL_CONTEXT (decl);
1619       loc = input_location;
1620       input_location = DECL_SOURCE_LOCATION (decl);
1621 
1622       informed = false;
1623       if (LAMBDA_TYPE_P (ctype))
1624 	{
1625 	  informed = true;
1626 	  if (sfk == sfk_constructor)
1627 	    inform (DECL_SOURCE_LOCATION (decl),
1628 		    "a lambda closure type has a deleted default constructor");
1629 	  else if (sfk == sfk_copy_assignment)
1630 	    inform (DECL_SOURCE_LOCATION (decl),
1631 		    "a lambda closure type has a deleted copy assignment operator");
1632 	  else
1633 	    informed = false;
1634 	}
1635       else if (DECL_ARTIFICIAL (decl)
1636 	       && (sfk == sfk_copy_assignment
1637 		   || sfk == sfk_copy_constructor)
1638 	       && (type_has_user_declared_move_constructor (ctype)
1639 		   || type_has_user_declared_move_assign (ctype)))
1640 	{
1641 	  inform (0, "%q+#D is implicitly declared as deleted because %qT "
1642 		 "declares a move constructor or move assignment operator",
1643 		 decl, ctype);
1644 	  informed = true;
1645 	}
1646       if (!informed)
1647 	{
1648 	  tree parms = FUNCTION_FIRST_USER_PARMTYPE (decl);
1649 	  tree parm_type = TREE_VALUE (parms);
1650 	  bool const_p = CP_TYPE_CONST_P (non_reference (parm_type));
1651 	  tree raises = NULL_TREE;
1652 	  bool deleted_p = false;
1653 	  tree scope = push_scope (ctype);
1654 
1655 	  synthesized_method_walk (ctype, sfk, const_p,
1656 				   &raises, NULL, &deleted_p, NULL, false,
1657 				   DECL_INHERITED_CTOR_BASE (decl), parms);
1658 	  if (deleted_p)
1659 	    {
1660 	      inform (0, "%q+#D is implicitly deleted because the default "
1661 		      "definition would be ill-formed:", decl);
1662 	      synthesized_method_walk (ctype, sfk, const_p,
1663 				       NULL, NULL, NULL, NULL, true,
1664 				       DECL_INHERITED_CTOR_BASE (decl), parms);
1665 	    }
1666 	  else if (!comp_except_specs
1667 		   (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)),
1668 		    raises, ce_normal))
1669 	    inform (DECL_SOURCE_LOCATION (decl), "%q#F is implicitly "
1670 		    "deleted because its exception-specification does not "
1671 		    "match the implicit exception-specification %qX",
1672 		    decl, raises);
1673 #ifdef ENABLE_CHECKING
1674 	  else
1675 	    gcc_unreachable ();
1676 #endif
1677 
1678 	  pop_scope (scope);
1679 	}
1680 
1681       input_location = loc;
1682       return true;
1683     }
1684   return false;
1685 }
1686 
1687 /* DECL is a defaulted function which was declared constexpr.  Explain why
1688    it can't be constexpr.  */
1689 
1690 void
1691 explain_implicit_non_constexpr (tree decl)
1692 {
1693   tree parm_type = TREE_VALUE (FUNCTION_FIRST_USER_PARMTYPE (decl));
1694   bool const_p = CP_TYPE_CONST_P (non_reference (parm_type));
1695   bool dummy;
1696   synthesized_method_walk (DECL_CLASS_CONTEXT (decl),
1697 			   special_function_p (decl), const_p,
1698 			   NULL, NULL, NULL, &dummy, true,
1699 			   DECL_INHERITED_CTOR_BASE (decl),
1700 			   FUNCTION_FIRST_USER_PARMTYPE (decl));
1701 }
1702 
1703 /* DECL is an instantiation of an inheriting constructor template.  Deduce
1704    the correct exception-specification and deletedness for this particular
1705    specialization.  */
1706 
1707 void
1708 deduce_inheriting_ctor (tree decl)
1709 {
1710   gcc_assert (DECL_INHERITED_CTOR_BASE (decl));
1711   tree spec;
1712   bool trivial, constexpr_, deleted;
1713   synthesized_method_walk (DECL_CONTEXT (decl), sfk_inheriting_constructor,
1714 			   false, &spec, &trivial, &deleted, &constexpr_,
1715 			   /*diag*/false,
1716 			   DECL_INHERITED_CTOR_BASE (decl),
1717 			   FUNCTION_FIRST_USER_PARMTYPE (decl));
1718   DECL_DELETED_FN (decl) = deleted;
1719   TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl), spec);
1720 }
1721 
1722 /* Implicitly declare the special function indicated by KIND, as a
1723    member of TYPE.  For copy constructors and assignment operators,
1724    CONST_P indicates whether these functions should take a const
1725    reference argument or a non-const reference.  Returns the
1726    FUNCTION_DECL for the implicitly declared function.  */
1727 
1728 tree
1729 implicitly_declare_fn (special_function_kind kind, tree type,
1730 		       bool const_p, tree inherited_ctor,
1731 		       tree inherited_parms)
1732 {
1733   tree fn;
1734   tree parameter_types = void_list_node;
1735   tree return_type;
1736   tree fn_type;
1737   tree raises = empty_except_spec;
1738   tree rhs_parm_type = NULL_TREE;
1739   tree this_parm;
1740   tree name;
1741   HOST_WIDE_INT saved_processing_template_decl;
1742   bool deleted_p;
1743   bool constexpr_p;
1744 
1745   /* Because we create declarations for implicitly declared functions
1746      lazily, we may be creating the declaration for a member of TYPE
1747      while in some completely different context.  However, TYPE will
1748      never be a dependent class (because we never want to do lookups
1749      for implicitly defined functions in a dependent class).
1750      Furthermore, we must set PROCESSING_TEMPLATE_DECL to zero here
1751      because we only create clones for constructors and destructors
1752      when not in a template.  */
1753   gcc_assert (!dependent_type_p (type));
1754   saved_processing_template_decl = processing_template_decl;
1755   processing_template_decl = 0;
1756 
1757   type = TYPE_MAIN_VARIANT (type);
1758 
1759   if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (type))
1760     {
1761       if (kind == sfk_destructor)
1762 	/* See comment in check_special_function_return_type.  */
1763 	return_type = build_pointer_type (void_type_node);
1764       else
1765 	return_type = build_pointer_type (type);
1766     }
1767   else
1768     return_type = void_type_node;
1769 
1770   switch (kind)
1771     {
1772     case sfk_destructor:
1773       /* Destructor.  */
1774       name = constructor_name (type);
1775       break;
1776 
1777     case sfk_constructor:
1778       /* Default constructor.  */
1779       name = constructor_name (type);
1780       break;
1781 
1782     case sfk_copy_constructor:
1783     case sfk_copy_assignment:
1784     case sfk_move_constructor:
1785     case sfk_move_assignment:
1786     case sfk_inheriting_constructor:
1787     {
1788       bool move_p;
1789       if (kind == sfk_copy_assignment
1790 	  || kind == sfk_move_assignment)
1791 	{
1792 	  return_type = build_reference_type (type);
1793 	  name = ansi_assopname (NOP_EXPR);
1794 	}
1795       else
1796 	name = constructor_name (type);
1797 
1798       if (kind == sfk_inheriting_constructor)
1799 	parameter_types = inherited_parms;
1800       else
1801 	{
1802 	  if (const_p)
1803 	    rhs_parm_type = cp_build_qualified_type (type, TYPE_QUAL_CONST);
1804 	  else
1805 	    rhs_parm_type = type;
1806 	  move_p = (kind == sfk_move_assignment
1807 		    || kind == sfk_move_constructor);
1808 	  rhs_parm_type = cp_build_reference_type (rhs_parm_type, move_p);
1809 
1810 	  parameter_types = tree_cons (NULL_TREE, rhs_parm_type, parameter_types);
1811 	}
1812       break;
1813     }
1814     default:
1815       gcc_unreachable ();
1816     }
1817 
1818   tree inherited_base = (inherited_ctor
1819 			 ? DECL_CONTEXT (inherited_ctor)
1820 			 : NULL_TREE);
1821   bool trivial_p = false;
1822 
1823   if (inherited_ctor && TREE_CODE (inherited_ctor) == TEMPLATE_DECL)
1824     {
1825       /* For an inheriting constructor template, just copy these flags from
1826 	 the inherited constructor template for now.  */
1827       raises = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (inherited_ctor));
1828       deleted_p = DECL_DELETED_FN (inherited_ctor);
1829       constexpr_p = DECL_DECLARED_CONSTEXPR_P (inherited_ctor);
1830     }
1831   else if (cxx_dialect >= cxx11)
1832     {
1833       raises = unevaluated_noexcept_spec ();
1834       synthesized_method_walk (type, kind, const_p, NULL, &trivial_p,
1835 			       &deleted_p, &constexpr_p, false,
1836 			       inherited_base, inherited_parms);
1837     }
1838   else
1839     synthesized_method_walk (type, kind, const_p, &raises, &trivial_p,
1840 			     &deleted_p, &constexpr_p, false,
1841 			     inherited_base, inherited_parms);
1842   /* Don't bother marking a deleted constructor as constexpr.  */
1843   if (deleted_p)
1844     constexpr_p = false;
1845   /* A trivial copy/move constructor is also a constexpr constructor,
1846      unless the class has virtual bases (7.1.5p4).  */
1847   else if (trivial_p && cxx_dialect >= cxx11
1848 	   && (kind == sfk_copy_constructor
1849 	       || kind == sfk_move_constructor)
1850 	   && !CLASSTYPE_VBASECLASSES (type))
1851     gcc_assert (constexpr_p);
1852 
1853   if (!trivial_p && type_has_trivial_fn (type, kind))
1854     type_set_nontrivial_flag (type, kind);
1855 
1856   /* Create the function.  */
1857   fn_type = build_method_type_directly (type, return_type, parameter_types);
1858   if (raises)
1859     fn_type = build_exception_variant (fn_type, raises);
1860   fn = build_lang_decl (FUNCTION_DECL, name, fn_type);
1861   if (kind != sfk_inheriting_constructor)
1862     DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (TYPE_NAME (type));
1863   if (kind == sfk_constructor || kind == sfk_copy_constructor
1864       || kind == sfk_move_constructor || kind == sfk_inheriting_constructor)
1865     DECL_CONSTRUCTOR_P (fn) = 1;
1866   else if (kind == sfk_destructor)
1867     DECL_DESTRUCTOR_P (fn) = 1;
1868   else
1869     {
1870       DECL_ASSIGNMENT_OPERATOR_P (fn) = 1;
1871       SET_OVERLOADED_OPERATOR_CODE (fn, NOP_EXPR);
1872     }
1873 
1874   /* If pointers to member functions use the least significant bit to
1875      indicate whether a function is virtual, ensure a pointer
1876      to this function will have that bit clear.  */
1877   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
1878       && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
1879     DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
1880 
1881   /* Create the explicit arguments.  */
1882   if (rhs_parm_type)
1883     {
1884       /* Note that this parameter is *not* marked DECL_ARTIFICIAL; we
1885 	 want its type to be included in the mangled function
1886 	 name.  */
1887       tree decl = cp_build_parm_decl (NULL_TREE, rhs_parm_type);
1888       TREE_READONLY (decl) = 1;
1889       retrofit_lang_decl (decl);
1890       DECL_PARM_INDEX (decl) = DECL_PARM_LEVEL (decl) = 1;
1891       DECL_ARGUMENTS (fn) = decl;
1892     }
1893   else if (kind == sfk_inheriting_constructor)
1894     {
1895       tree *p = &DECL_ARGUMENTS (fn);
1896       int index = 1;
1897       for (tree parm = inherited_parms; parm != void_list_node;
1898 	   parm = TREE_CHAIN (parm))
1899 	{
1900 	  *p = cp_build_parm_decl (NULL_TREE, TREE_VALUE (parm));
1901 	  retrofit_lang_decl (*p);
1902 	  DECL_PARM_LEVEL (*p) = 1;
1903 	  DECL_PARM_INDEX (*p) = index++;
1904 	  DECL_CONTEXT (*p) = fn;
1905 	  p = &DECL_CHAIN (*p);
1906 	}
1907       SET_DECL_INHERITED_CTOR_BASE (fn, inherited_base);
1908       DECL_NONCONVERTING_P (fn) = DECL_NONCONVERTING_P (inherited_ctor);
1909       /* A constructor so declared has the same access as the corresponding
1910 	 constructor in X.  */
1911       TREE_PRIVATE (fn) = TREE_PRIVATE (inherited_ctor);
1912       TREE_PROTECTED (fn) = TREE_PROTECTED (inherited_ctor);
1913       /* Copy constexpr from the inherited constructor even if the
1914 	 inheriting constructor doesn't satisfy the requirements.  */
1915       constexpr_p = DECL_DECLARED_CONSTEXPR_P (inherited_ctor);
1916     }
1917   /* Add the "this" parameter.  */
1918   this_parm = build_this_parm (fn_type, TYPE_UNQUALIFIED);
1919   DECL_CHAIN (this_parm) = DECL_ARGUMENTS (fn);
1920   DECL_ARGUMENTS (fn) = this_parm;
1921 
1922   grokclassfn (type, fn, kind == sfk_destructor ? DTOR_FLAG : NO_SPECIAL);
1923   DECL_IN_AGGR_P (fn) = 1;
1924   DECL_ARTIFICIAL (fn) = 1;
1925   DECL_DEFAULTED_FN (fn) = 1;
1926   if (cxx_dialect >= cxx11)
1927     {
1928       /* "The closure type associated with a lambda-expression has a deleted
1929 	 default constructor and a deleted copy assignment operator."  */
1930       if ((kind == sfk_constructor
1931 	   || kind == sfk_copy_assignment)
1932 	  && LAMBDA_TYPE_P (type))
1933 	deleted_p = true;
1934       DECL_DELETED_FN (fn) = deleted_p;
1935       DECL_DECLARED_CONSTEXPR_P (fn) = constexpr_p;
1936     }
1937   DECL_EXTERNAL (fn) = true;
1938   DECL_NOT_REALLY_EXTERN (fn) = 1;
1939   DECL_DECLARED_INLINE_P (fn) = 1;
1940   DECL_COMDAT (fn) = 1;
1941   set_linkage_according_to_type (type, fn);
1942   rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
1943   gcc_assert (!TREE_USED (fn));
1944 
1945   /* Restore PROCESSING_TEMPLATE_DECL.  */
1946   processing_template_decl = saved_processing_template_decl;
1947 
1948   if (inherited_ctor && TREE_CODE (inherited_ctor) == TEMPLATE_DECL)
1949     fn = add_inherited_template_parms (fn, inherited_ctor);
1950 
1951   /* Warn about calling a non-trivial move assignment in a virtual base.  */
1952   if (kind == sfk_move_assignment && !deleted_p && !trivial_p
1953       && CLASSTYPE_VBASECLASSES (type))
1954     {
1955       location_t loc = input_location;
1956       input_location = DECL_SOURCE_LOCATION (fn);
1957       synthesized_method_walk (type, kind, const_p,
1958 			       NULL, NULL, NULL, NULL, true,
1959 			       NULL_TREE, NULL_TREE);
1960       input_location = loc;
1961     }
1962 
1963   return fn;
1964 }
1965 
1966 /* Gives any errors about defaulted functions which need to be deferred
1967    until the containing class is complete.  */
1968 
1969 void
1970 defaulted_late_check (tree fn)
1971 {
1972   /* Complain about invalid signature for defaulted fn.  */
1973   tree ctx = DECL_CONTEXT (fn);
1974   special_function_kind kind = special_function_p (fn);
1975   bool fn_const_p = (copy_fn_p (fn) == 2);
1976   tree implicit_fn = implicitly_declare_fn (kind, ctx, fn_const_p,
1977 					    NULL, NULL);
1978   tree eh_spec = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (implicit_fn));
1979 
1980   if (!same_type_p (TREE_TYPE (TREE_TYPE (fn)),
1981 		    TREE_TYPE (TREE_TYPE (implicit_fn)))
1982       || !compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1983 		     TYPE_ARG_TYPES (TREE_TYPE (implicit_fn))))
1984     {
1985       error ("defaulted declaration %q+D", fn);
1986       error_at (DECL_SOURCE_LOCATION (fn),
1987 		"does not match expected signature %qD", implicit_fn);
1988     }
1989 
1990   /* 8.4.2/2: An explicitly-defaulted function (...) may have an explicit
1991      exception-specification only if it is compatible (15.4) with the
1992      exception-specification on the implicit declaration.  If a function
1993      is explicitly defaulted on its first declaration, (...) it is
1994      implicitly considered to have the same exception-specification as if
1995      it had been implicitly declared.  */
1996   maybe_instantiate_noexcept (fn);
1997   tree fn_spec = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn));
1998   if (!fn_spec)
1999     {
2000       if (DECL_DEFAULTED_IN_CLASS_P (fn))
2001 	TREE_TYPE (fn) = build_exception_variant (TREE_TYPE (fn), eh_spec);
2002     }
2003   else if (UNEVALUATED_NOEXCEPT_SPEC_P (fn_spec))
2004     /* Equivalent to the implicit spec.  */;
2005   else if (DECL_DEFAULTED_IN_CLASS_P (fn)
2006 	   && !CLASSTYPE_TEMPLATE_INSTANTIATION (ctx))
2007     /* We can't compare an explicit exception-specification on a
2008        constructor defaulted in the class body to the implicit
2009        exception-specification until after we've parsed any NSDMI; see
2010        after_nsdmi_defaulted_late_checks.  */;
2011   else
2012     {
2013       tree eh_spec = get_defaulted_eh_spec (fn);
2014       if (!comp_except_specs (fn_spec, eh_spec, ce_normal))
2015 	{
2016 	  if (DECL_DEFAULTED_IN_CLASS_P (fn))
2017 	    DECL_DELETED_FN (fn) = true;
2018 	  else
2019 	    error ("function %q+D defaulted on its redeclaration "
2020 		   "with an exception-specification that differs from "
2021 		   "the implicit exception-specification %qX", fn, eh_spec);
2022 	}
2023     }
2024 
2025   if (DECL_DEFAULTED_IN_CLASS_P (fn)
2026       && DECL_DECLARED_CONSTEXPR_P (implicit_fn))
2027     {
2028       /* Hmm...should we do this for out-of-class too? Should it be OK to
2029 	 add constexpr later like inline, rather than requiring
2030 	 declarations to match?  */
2031       DECL_DECLARED_CONSTEXPR_P (fn) = true;
2032       if (kind == sfk_constructor)
2033 	TYPE_HAS_CONSTEXPR_CTOR (ctx) = true;
2034     }
2035 
2036   if (!DECL_DECLARED_CONSTEXPR_P (implicit_fn)
2037       && DECL_DECLARED_CONSTEXPR_P (fn))
2038     {
2039       if (!CLASSTYPE_TEMPLATE_INSTANTIATION (ctx))
2040 	{
2041 	  error ("explicitly defaulted function %q+D cannot be declared "
2042 		 "as constexpr because the implicit declaration is not "
2043 		 "constexpr:", fn);
2044 	  explain_implicit_non_constexpr (fn);
2045 	}
2046       DECL_DECLARED_CONSTEXPR_P (fn) = false;
2047     }
2048 
2049   if (DECL_DELETED_FN (implicit_fn))
2050     DECL_DELETED_FN (fn) = 1;
2051 }
2052 
2053 /* OK, we've parsed the NSDMI for class T, now we can check any explicit
2054    exception-specifications on functions defaulted in the class body.  */
2055 
2056 void
2057 after_nsdmi_defaulted_late_checks (tree t)
2058 {
2059   if (uses_template_parms (t))
2060     return;
2061   if (t == error_mark_node)
2062     return;
2063   for (tree fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
2064     if (!DECL_ARTIFICIAL (fn) && DECL_DEFAULTED_IN_CLASS_P (fn))
2065       {
2066 	tree fn_spec = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn));
2067 	if (UNEVALUATED_NOEXCEPT_SPEC_P (fn_spec))
2068 	  continue;
2069 
2070 	tree eh_spec = get_defaulted_eh_spec (fn);
2071 	if (!comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn)),
2072 				eh_spec, ce_normal))
2073 	  DECL_DELETED_FN (fn) = true;
2074       }
2075 }
2076 
2077 /* Returns true iff FN can be explicitly defaulted, and gives any
2078    errors if defaulting FN is ill-formed.  */
2079 
2080 bool
2081 defaultable_fn_check (tree fn)
2082 {
2083   special_function_kind kind = sfk_none;
2084 
2085   if (template_parm_scope_p ())
2086     {
2087       error ("a template cannot be defaulted");
2088       return false;
2089     }
2090 
2091   if (DECL_CONSTRUCTOR_P (fn))
2092     {
2093       if (FUNCTION_FIRST_USER_PARMTYPE (fn) == void_list_node)
2094 	kind = sfk_constructor;
2095       else if (copy_fn_p (fn) > 0
2096 	       && (TREE_CHAIN (FUNCTION_FIRST_USER_PARMTYPE (fn))
2097 		   == void_list_node))
2098 	kind = sfk_copy_constructor;
2099       else if (move_fn_p (fn))
2100 	kind = sfk_move_constructor;
2101     }
2102   else if (DECL_DESTRUCTOR_P (fn))
2103     kind = sfk_destructor;
2104   else if (DECL_ASSIGNMENT_OPERATOR_P (fn)
2105 	   && DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR)
2106     {
2107       if (copy_fn_p (fn))
2108 	kind = sfk_copy_assignment;
2109       else if (move_fn_p (fn))
2110 	kind = sfk_move_assignment;
2111     }
2112 
2113   if (kind == sfk_none)
2114     {
2115       error ("%qD cannot be defaulted", fn);
2116       return false;
2117     }
2118   else
2119     {
2120       for (tree t = FUNCTION_FIRST_USER_PARMTYPE (fn);
2121 	   t && t != void_list_node; t = TREE_CHAIN (t))
2122 	if (TREE_PURPOSE (t))
2123 	  {
2124 	    error ("defaulted function %q+D with default argument", fn);
2125 	    break;
2126 	  }
2127 
2128       /* Avoid do_warn_unused_parameter warnings.  */
2129       for (tree p = FUNCTION_FIRST_USER_PARM (fn); p; p = DECL_CHAIN (p))
2130 	if (DECL_NAME (p))
2131 	  TREE_NO_WARNING (p) = 1;
2132 
2133       if (TYPE_BEING_DEFINED (DECL_CONTEXT (fn)))
2134 	/* Defer checking.  */;
2135       else if (!processing_template_decl)
2136 	defaulted_late_check (fn);
2137 
2138       return true;
2139     }
2140 }
2141 
2142 /* Add an implicit declaration to TYPE for the kind of function
2143    indicated by SFK.  Return the FUNCTION_DECL for the new implicit
2144    declaration.  */
2145 
2146 tree
2147 lazily_declare_fn (special_function_kind sfk, tree type)
2148 {
2149   tree fn;
2150   /* Whether or not the argument has a const reference type.  */
2151   bool const_p = false;
2152 
2153   switch (sfk)
2154     {
2155     case sfk_constructor:
2156       CLASSTYPE_LAZY_DEFAULT_CTOR (type) = 0;
2157       break;
2158     case sfk_copy_constructor:
2159       const_p = TYPE_HAS_CONST_COPY_CTOR (type);
2160       CLASSTYPE_LAZY_COPY_CTOR (type) = 0;
2161       break;
2162     case sfk_move_constructor:
2163       CLASSTYPE_LAZY_MOVE_CTOR (type) = 0;
2164       break;
2165     case sfk_copy_assignment:
2166       const_p = TYPE_HAS_CONST_COPY_ASSIGN (type);
2167       CLASSTYPE_LAZY_COPY_ASSIGN (type) = 0;
2168       break;
2169     case sfk_move_assignment:
2170       CLASSTYPE_LAZY_MOVE_ASSIGN (type) = 0;
2171       break;
2172     case sfk_destructor:
2173       CLASSTYPE_LAZY_DESTRUCTOR (type) = 0;
2174       break;
2175     default:
2176       gcc_unreachable ();
2177     }
2178 
2179   /* Declare the function.  */
2180   fn = implicitly_declare_fn (sfk, type, const_p, NULL, NULL);
2181 
2182   /* [class.copy]/8 If the class definition declares a move constructor or
2183      move assignment operator, the implicitly declared copy constructor is
2184      defined as deleted.... */
2185   if ((sfk == sfk_copy_assignment
2186        || sfk == sfk_copy_constructor)
2187       && (type_has_user_declared_move_constructor (type)
2188 	  || type_has_user_declared_move_assign (type)))
2189     DECL_DELETED_FN (fn) = true;
2190 
2191   /* A destructor may be virtual.  */
2192   if (sfk == sfk_destructor
2193       || sfk == sfk_move_assignment
2194       || sfk == sfk_copy_assignment)
2195     check_for_override (fn, type);
2196   /* Add it to CLASSTYPE_METHOD_VEC.  */
2197   add_method (type, fn, NULL_TREE);
2198   /* Add it to TYPE_METHODS.  */
2199   if (sfk == sfk_destructor
2200       && DECL_VIRTUAL_P (fn))
2201     /* The ABI requires that a virtual destructor go at the end of the
2202        vtable.  */
2203     TYPE_METHODS (type) = chainon (TYPE_METHODS (type), fn);
2204   else
2205     {
2206       DECL_CHAIN (fn) = TYPE_METHODS (type);
2207       TYPE_METHODS (type) = fn;
2208     }
2209   maybe_add_class_template_decl_list (type, fn, /*friend_p=*/0);
2210   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn)
2211       || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn))
2212     /* Create appropriate clones.  */
2213     clone_function_decl (fn, /*update_method_vec=*/true);
2214 
2215   return fn;
2216 }
2217 
2218 /* Given a FUNCTION_DECL FN and a chain LIST, skip as many elements of LIST
2219    as there are artificial parms in FN.  */
2220 
2221 tree
2222 skip_artificial_parms_for (const_tree fn, tree list)
2223 {
2224   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
2225     list = TREE_CHAIN (list);
2226   else
2227     return list;
2228 
2229   if (DECL_HAS_IN_CHARGE_PARM_P (fn))
2230     list = TREE_CHAIN (list);
2231   if (DECL_HAS_VTT_PARM_P (fn))
2232     list = TREE_CHAIN (list);
2233   return list;
2234 }
2235 
2236 /* Given a FUNCTION_DECL FN and a chain LIST, return the number of
2237    artificial parms in FN.  */
2238 
2239 int
2240 num_artificial_parms_for (const_tree fn)
2241 {
2242   int count = 0;
2243 
2244   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
2245     count++;
2246   else
2247     return 0;
2248 
2249   if (DECL_HAS_IN_CHARGE_PARM_P (fn))
2250     count++;
2251   if (DECL_HAS_VTT_PARM_P (fn))
2252     count++;
2253   return count;
2254 }
2255 
2256 
2257 #include "gt-cp-method.h"
2258