OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [cp/] [pt.c] - Blame information for rev 731

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 710 jeremybenn
/* Handle parameterized types (templates) for GNU C++.
2
   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3
   2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012
4
   Free Software Foundation, Inc.
5
   Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
6
   Rewritten by Jason Merrill (jason@cygnus.com).
7
 
8
This file is part of GCC.
9
 
10
GCC is free software; you can redistribute it and/or modify
11
it under the terms of the GNU General Public License as published by
12
the Free Software Foundation; either version 3, or (at your option)
13
any later version.
14
 
15
GCC is distributed in the hope that it will be useful,
16
but WITHOUT ANY WARRANTY; without even the implied warranty of
17
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
GNU General Public License for more details.
19
 
20
You should have received a copy of the GNU General Public License
21
along with GCC; see the file COPYING3.  If not see
22
<http://www.gnu.org/licenses/>.  */
23
 
24
/* Known bugs or deficiencies include:
25
 
26
     all methods must be provided in header files; can't use a source
27
     file that contains only the method templates and "just win".  */
28
 
29
#include "config.h"
30
#include "system.h"
31
#include "coretypes.h"
32
#include "tm.h"
33
#include "tree.h"
34
#include "intl.h"
35
#include "pointer-set.h"
36
#include "flags.h"
37
#include "cp-tree.h"
38
#include "c-family/c-common.h"
39
#include "c-family/c-objc.h"
40
#include "cp-objcp-common.h"
41
#include "tree-inline.h"
42
#include "decl.h"
43
#include "output.h"
44
#include "toplev.h"
45
#include "timevar.h"
46
#include "tree-iterator.h"
47
#include "vecprim.h"
48
 
49
/* The type of functions taking a tree, and some additional data, and
50
   returning an int.  */
51
typedef int (*tree_fn_t) (tree, void*);
52
 
53
/* The PENDING_TEMPLATES is a TREE_LIST of templates whose
54
   instantiations have been deferred, either because their definitions
55
   were not yet available, or because we were putting off doing the work.  */
56
struct GTY ((chain_next ("%h.next"))) pending_template {
57
  struct pending_template *next;
58
  struct tinst_level *tinst;
59
};
60
 
61
static GTY(()) struct pending_template *pending_templates;
62
static GTY(()) struct pending_template *last_pending_template;
63
 
64
int processing_template_parmlist;
65
static int template_header_count;
66
 
67
static GTY(()) tree saved_trees;
68
static VEC(int,heap) *inline_parm_levels;
69
 
70
static GTY(()) struct tinst_level *current_tinst_level;
71
 
72
static GTY(()) tree saved_access_scope;
73
 
74
/* Live only within one (recursive) call to tsubst_expr.  We use
75
   this to pass the statement expression node from the STMT_EXPR
76
   to the EXPR_STMT that is its result.  */
77
static tree cur_stmt_expr;
78
 
79
/* A map from local variable declarations in the body of the template
80
   presently being instantiated to the corresponding instantiated
81
   local variables.  */
82
static htab_t local_specializations;
83
 
84
typedef struct GTY(()) spec_entry
85
{
86
  tree tmpl;
87
  tree args;
88
  tree spec;
89
} spec_entry;
90
 
91
static GTY ((param_is (spec_entry)))
92
  htab_t decl_specializations;
93
 
94
static GTY ((param_is (spec_entry)))
95
  htab_t type_specializations;
96
 
97
/* Contains canonical template parameter types. The vector is indexed by
98
   the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
99
   TREE_LIST, whose TREE_VALUEs contain the canonical template
100
   parameters of various types and levels.  */
101
static GTY(()) VEC(tree,gc) *canonical_template_parms;
102
 
103
#define UNIFY_ALLOW_NONE 0
104
#define UNIFY_ALLOW_MORE_CV_QUAL 1
105
#define UNIFY_ALLOW_LESS_CV_QUAL 2
106
#define UNIFY_ALLOW_DERIVED 4
107
#define UNIFY_ALLOW_INTEGER 8
108
#define UNIFY_ALLOW_OUTER_LEVEL 16
109
#define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
110
#define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
111
 
112
enum template_base_result {
113
  tbr_incomplete_type,
114
  tbr_ambiguous_baseclass,
115
  tbr_success
116
};
117
 
118
static void push_access_scope (tree);
119
static void pop_access_scope (tree);
120
static void push_deduction_access_scope (tree);
121
static void pop_deduction_access_scope (tree);
122
static bool resolve_overloaded_unification (tree, tree, tree, tree,
123
                                            unification_kind_t, int,
124
                                            bool);
125
static int try_one_overload (tree, tree, tree, tree, tree,
126
                             unification_kind_t, int, bool, bool);
127
static int unify (tree, tree, tree, tree, int, bool);
128
static void add_pending_template (tree);
129
static tree reopen_tinst_level (struct tinst_level *);
130
static tree tsubst_initializer_list (tree, tree);
131
static tree get_class_bindings (tree, tree, tree);
132
static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
133
                                   bool, bool);
134
static void tsubst_enum (tree, tree, tree);
135
static tree add_to_template_args (tree, tree);
136
static tree add_outermost_template_args (tree, tree);
137
static bool check_instantiated_args (tree, tree, tsubst_flags_t);
138
static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
139
                                             tree);
140
static int type_unification_real (tree, tree, tree, const tree *,
141
                                  unsigned int, int, unification_kind_t, int,
142
                                  bool);
143
static void note_template_header (int);
144
static tree convert_nontype_argument_function (tree, tree);
145
static tree convert_nontype_argument (tree, tree, tsubst_flags_t);
146
static tree convert_template_argument (tree, tree, tree,
147
                                       tsubst_flags_t, int, tree);
148
static int for_each_template_parm (tree, tree_fn_t, void*,
149
                                   struct pointer_set_t*, bool);
150
static tree expand_template_argument_pack (tree);
151
static tree build_template_parm_index (int, int, int, int, tree, tree);
152
static bool inline_needs_template_parms (tree);
153
static void push_inline_template_parms_recursive (tree, int);
154
static tree retrieve_local_specialization (tree);
155
static void register_local_specialization (tree, tree);
156
static hashval_t hash_specialization (const void *p);
157
static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
158
static int mark_template_parm (tree, void *);
159
static int template_parm_this_level_p (tree, void *);
160
static tree tsubst_friend_function (tree, tree);
161
static tree tsubst_friend_class (tree, tree);
162
static int can_complete_type_without_circularity (tree);
163
static tree get_bindings (tree, tree, tree, bool);
164
static int template_decl_level (tree);
165
static int check_cv_quals_for_unify (int, tree, tree);
166
static void template_parm_level_and_index (tree, int*, int*);
167
static int unify_pack_expansion (tree, tree, tree,
168
                                 tree, unification_kind_t, bool, bool);
169
static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
170
static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
171
static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
172
static void regenerate_decl_from_template (tree, tree);
173
static tree most_specialized_class (tree, tree, tsubst_flags_t);
174
static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
175
static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
176
static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
177
static bool check_specialization_scope (void);
178
static tree process_partial_specialization (tree);
179
static void set_current_access_from_decl (tree);
180
static enum template_base_result get_template_base (tree, tree, tree, tree,
181
                                                    bool , tree *);
182
static tree try_class_unification (tree, tree, tree, tree, bool);
183
static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
184
                                           tree, tree);
185
static bool template_template_parm_bindings_ok_p (tree, tree);
186
static int template_args_equal (tree, tree);
187
static void tsubst_default_arguments (tree);
188
static tree for_each_template_parm_r (tree *, int *, void *);
189
static tree copy_default_args_to_explicit_spec_1 (tree, tree);
190
static void copy_default_args_to_explicit_spec (tree);
191
static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
192
static int eq_local_specializations (const void *, const void *);
193
static bool dependent_template_arg_p (tree);
194
static bool any_template_arguments_need_structural_equality_p (tree);
195
static bool dependent_type_p_r (tree);
196
static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
197
static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
198
static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
199
static tree tsubst_decl (tree, tree, tsubst_flags_t);
200
static void perform_typedefs_access_check (tree tmpl, tree targs);
201
static void append_type_to_template_for_access_check_1 (tree, tree, tree,
202
                                                        location_t);
203
static tree listify (tree);
204
static tree listify_autos (tree, tree);
205
static tree template_parm_to_arg (tree t);
206
static bool arg_from_parm_pack_p (tree, tree);
207
static tree current_template_args (void);
208
static tree fixup_template_type_parm_type (tree, int);
209
static tree fixup_template_parm_index (tree, tree, int);
210
static tree tsubst_template_parm (tree, tree, tsubst_flags_t);
211
 
212
/* Make the current scope suitable for access checking when we are
213
   processing T.  T can be FUNCTION_DECL for instantiated function
214
   template, or VAR_DECL for static member variable (need by
215
   instantiate_decl).  */
216
 
217
static void
218
push_access_scope (tree t)
219
{
220
  gcc_assert (TREE_CODE (t) == FUNCTION_DECL
221
              || TREE_CODE (t) == VAR_DECL);
222
 
223
  if (DECL_FRIEND_CONTEXT (t))
224
    push_nested_class (DECL_FRIEND_CONTEXT (t));
225
  else if (DECL_CLASS_SCOPE_P (t))
226
    push_nested_class (DECL_CONTEXT (t));
227
  else
228
    push_to_top_level ();
229
 
230
  if (TREE_CODE (t) == FUNCTION_DECL)
231
    {
232
      saved_access_scope = tree_cons
233
        (NULL_TREE, current_function_decl, saved_access_scope);
234
      current_function_decl = t;
235
    }
236
}
237
 
238
/* Restore the scope set up by push_access_scope.  T is the node we
239
   are processing.  */
240
 
241
static void
242
pop_access_scope (tree t)
243
{
244
  if (TREE_CODE (t) == FUNCTION_DECL)
245
    {
246
      current_function_decl = TREE_VALUE (saved_access_scope);
247
      saved_access_scope = TREE_CHAIN (saved_access_scope);
248
    }
249
 
250
  if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
251
    pop_nested_class ();
252
  else
253
    pop_from_top_level ();
254
}
255
 
256
/* Do any processing required when DECL (a member template
257
   declaration) is finished.  Returns the TEMPLATE_DECL corresponding
258
   to DECL, unless it is a specialization, in which case the DECL
259
   itself is returned.  */
260
 
261
tree
262
finish_member_template_decl (tree decl)
263
{
264
  if (decl == error_mark_node)
265
    return error_mark_node;
266
 
267
  gcc_assert (DECL_P (decl));
268
 
269
  if (TREE_CODE (decl) == TYPE_DECL)
270
    {
271
      tree type;
272
 
273
      type = TREE_TYPE (decl);
274
      if (type == error_mark_node)
275
        return error_mark_node;
276
      if (MAYBE_CLASS_TYPE_P (type)
277
          && CLASSTYPE_TEMPLATE_INFO (type)
278
          && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
279
        {
280
          tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
281
          check_member_template (tmpl);
282
          return tmpl;
283
        }
284
      return NULL_TREE;
285
    }
286
  else if (TREE_CODE (decl) == FIELD_DECL)
287
    error ("data member %qD cannot be a member template", decl);
288
  else if (DECL_TEMPLATE_INFO (decl))
289
    {
290
      if (!DECL_TEMPLATE_SPECIALIZATION (decl))
291
        {
292
          check_member_template (DECL_TI_TEMPLATE (decl));
293
          return DECL_TI_TEMPLATE (decl);
294
        }
295
      else
296
        return decl;
297
    }
298
  else
299
    error ("invalid member template declaration %qD", decl);
300
 
301
  return error_mark_node;
302
}
303
 
304
/* Create a template info node.  */
305
 
306
tree
307
build_template_info (tree template_decl, tree template_args)
308
{
309
  tree result = make_node (TEMPLATE_INFO);
310
  TI_TEMPLATE (result) = template_decl;
311
  TI_ARGS (result) = template_args;
312
  return result;
313
}
314
 
315
/* Return the template info node corresponding to T, whatever T is.  */
316
 
317
tree
318
get_template_info (const_tree t)
319
{
320
  tree tinfo = NULL_TREE;
321
 
322
  if (!t || t == error_mark_node)
323
    return NULL;
324
 
325
  if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
326
    tinfo = DECL_TEMPLATE_INFO (t);
327
 
328
  if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
329
    t = TREE_TYPE (t);
330
 
331
  if (TAGGED_TYPE_P (t))
332
    tinfo = TYPE_TEMPLATE_INFO (t);
333
  else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
334
    tinfo = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
335
 
336
  return tinfo;
337
}
338
 
339
/* Returns the template nesting level of the indicated class TYPE.
340
 
341
   For example, in:
342
     template <class T>
343
     struct A
344
     {
345
       template <class U>
346
       struct B {};
347
     };
348
 
349
   A<T>::B<U> has depth two, while A<T> has depth one.
350
   Both A<T>::B<int> and A<int>::B<U> have depth one, if
351
   they are instantiations, not specializations.
352
 
353
   This function is guaranteed to return 0 if passed NULL_TREE so
354
   that, for example, `template_class_depth (current_class_type)' is
355
   always safe.  */
356
 
357
int
358
template_class_depth (tree type)
359
{
360
  int depth;
361
 
362
  for (depth = 0;
363
       type && TREE_CODE (type) != NAMESPACE_DECL;
364
       type = (TREE_CODE (type) == FUNCTION_DECL)
365
         ? CP_DECL_CONTEXT (type) : CP_TYPE_CONTEXT (type))
366
    {
367
      tree tinfo = get_template_info (type);
368
 
369
      if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
370
          && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
371
        ++depth;
372
    }
373
 
374
  return depth;
375
}
376
 
377
/* Subroutine of maybe_begin_member_template_processing.
378
   Returns true if processing DECL needs us to push template parms.  */
379
 
380
static bool
381
inline_needs_template_parms (tree decl)
382
{
383
  if (! DECL_TEMPLATE_INFO (decl))
384
    return false;
385
 
386
  return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
387
          > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
388
}
389
 
390
/* Subroutine of maybe_begin_member_template_processing.
391
   Push the template parms in PARMS, starting from LEVELS steps into the
392
   chain, and ending at the beginning, since template parms are listed
393
   innermost first.  */
394
 
395
static void
396
push_inline_template_parms_recursive (tree parmlist, int levels)
397
{
398
  tree parms = TREE_VALUE (parmlist);
399
  int i;
400
 
401
  if (levels > 1)
402
    push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
403
 
404
  ++processing_template_decl;
405
  current_template_parms
406
    = tree_cons (size_int (processing_template_decl),
407
                 parms, current_template_parms);
408
  TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
409
 
410
  begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
411
               NULL);
412
  for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
413
    {
414
      tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
415
 
416
      if (parm == error_mark_node)
417
        continue;
418
 
419
      gcc_assert (DECL_P (parm));
420
 
421
      switch (TREE_CODE (parm))
422
        {
423
        case TYPE_DECL:
424
        case TEMPLATE_DECL:
425
          pushdecl (parm);
426
          break;
427
 
428
        case PARM_DECL:
429
          {
430
            /* Make a CONST_DECL as is done in process_template_parm.
431
               It is ugly that we recreate this here; the original
432
               version built in process_template_parm is no longer
433
               available.  */
434
            tree decl = build_decl (DECL_SOURCE_LOCATION (parm),
435
                                    CONST_DECL, DECL_NAME (parm),
436
                                    TREE_TYPE (parm));
437
            DECL_ARTIFICIAL (decl) = 1;
438
            TREE_CONSTANT (decl) = 1;
439
            TREE_READONLY (decl) = 1;
440
            DECL_INITIAL (decl) = DECL_INITIAL (parm);
441
            SET_DECL_TEMPLATE_PARM_P (decl);
442
            pushdecl (decl);
443
          }
444
          break;
445
 
446
        default:
447
          gcc_unreachable ();
448
        }
449
    }
450
}
451
 
452
/* Restore the template parameter context for a member template or
453
   a friend template defined in a class definition.  */
454
 
455
void
456
maybe_begin_member_template_processing (tree decl)
457
{
458
  tree parms;
459
  int levels = 0;
460
 
461
  if (inline_needs_template_parms (decl))
462
    {
463
      parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
464
      levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
465
 
466
      if (DECL_TEMPLATE_SPECIALIZATION (decl))
467
        {
468
          --levels;
469
          parms = TREE_CHAIN (parms);
470
        }
471
 
472
      push_inline_template_parms_recursive (parms, levels);
473
    }
474
 
475
  /* Remember how many levels of template parameters we pushed so that
476
     we can pop them later.  */
477
  VEC_safe_push (int, heap, inline_parm_levels, levels);
478
}
479
 
480
/* Undo the effects of maybe_begin_member_template_processing.  */
481
 
482
void
483
maybe_end_member_template_processing (void)
484
{
485
  int i;
486
  int last;
487
 
488
  if (VEC_length (int, inline_parm_levels) == 0)
489
    return;
490
 
491
  last = VEC_pop (int, inline_parm_levels);
492
  for (i = 0; i < last; ++i)
493
    {
494
      --processing_template_decl;
495
      current_template_parms = TREE_CHAIN (current_template_parms);
496
      poplevel (0, 0, 0);
497
    }
498
}
499
 
500
/* Return a new template argument vector which contains all of ARGS,
501
   but has as its innermost set of arguments the EXTRA_ARGS.  */
502
 
503
static tree
504
add_to_template_args (tree args, tree extra_args)
505
{
506
  tree new_args;
507
  int extra_depth;
508
  int i;
509
  int j;
510
 
511
  if (args == NULL_TREE || extra_args == error_mark_node)
512
    return extra_args;
513
 
514
  extra_depth = TMPL_ARGS_DEPTH (extra_args);
515
  new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
516
 
517
  for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
518
    SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
519
 
520
  for (j = 1; j <= extra_depth; ++j, ++i)
521
    SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
522
 
523
  return new_args;
524
}
525
 
526
/* Like add_to_template_args, but only the outermost ARGS are added to
527
   the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
528
   (EXTRA_ARGS) levels are added.  This function is used to combine
529
   the template arguments from a partial instantiation with the
530
   template arguments used to attain the full instantiation from the
531
   partial instantiation.  */
532
 
533
static tree
534
add_outermost_template_args (tree args, tree extra_args)
535
{
536
  tree new_args;
537
 
538
  /* If there are more levels of EXTRA_ARGS than there are ARGS,
539
     something very fishy is going on.  */
540
  gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
541
 
542
  /* If *all* the new arguments will be the EXTRA_ARGS, just return
543
     them.  */
544
  if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
545
    return extra_args;
546
 
547
  /* For the moment, we make ARGS look like it contains fewer levels.  */
548
  TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
549
 
550
  new_args = add_to_template_args (args, extra_args);
551
 
552
  /* Now, we restore ARGS to its full dimensions.  */
553
  TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
554
 
555
  return new_args;
556
}
557
 
558
/* Return the N levels of innermost template arguments from the ARGS.  */
559
 
560
tree
561
get_innermost_template_args (tree args, int n)
562
{
563
  tree new_args;
564
  int extra_levels;
565
  int i;
566
 
567
  gcc_assert (n >= 0);
568
 
569
  /* If N is 1, just return the innermost set of template arguments.  */
570
  if (n == 1)
571
    return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
572
 
573
  /* If we're not removing anything, just return the arguments we were
574
     given.  */
575
  extra_levels = TMPL_ARGS_DEPTH (args) - n;
576
  gcc_assert (extra_levels >= 0);
577
  if (extra_levels == 0)
578
    return args;
579
 
580
  /* Make a new set of arguments, not containing the outer arguments.  */
581
  new_args = make_tree_vec (n);
582
  for (i = 1; i <= n; ++i)
583
    SET_TMPL_ARGS_LEVEL (new_args, i,
584
                         TMPL_ARGS_LEVEL (args, i + extra_levels));
585
 
586
  return new_args;
587
}
588
 
589
/* The inverse of get_innermost_template_args: Return all but the innermost
590
   EXTRA_LEVELS levels of template arguments from the ARGS.  */
591
 
592
static tree
593
strip_innermost_template_args (tree args, int extra_levels)
594
{
595
  tree new_args;
596
  int n = TMPL_ARGS_DEPTH (args) - extra_levels;
597
  int i;
598
 
599
  gcc_assert (n >= 0);
600
 
601
  /* If N is 1, just return the outermost set of template arguments.  */
602
  if (n == 1)
603
    return TMPL_ARGS_LEVEL (args, 1);
604
 
605
  /* If we're not removing anything, just return the arguments we were
606
     given.  */
607
  gcc_assert (extra_levels >= 0);
608
  if (extra_levels == 0)
609
    return args;
610
 
611
  /* Make a new set of arguments, not containing the inner arguments.  */
612
  new_args = make_tree_vec (n);
613
  for (i = 1; i <= n; ++i)
614
    SET_TMPL_ARGS_LEVEL (new_args, i,
615
                         TMPL_ARGS_LEVEL (args, i));
616
 
617
  return new_args;
618
}
619
 
620
/* We've got a template header coming up; push to a new level for storing
621
   the parms.  */
622
 
623
void
624
begin_template_parm_list (void)
625
{
626
  /* We use a non-tag-transparent scope here, which causes pushtag to
627
     put tags in this scope, rather than in the enclosing class or
628
     namespace scope.  This is the right thing, since we want
629
     TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
630
     global template class, push_template_decl handles putting the
631
     TEMPLATE_DECL into top-level scope.  For a nested template class,
632
     e.g.:
633
 
634
       template <class T> struct S1 {
635
         template <class T> struct S2 {};
636
       };
637
 
638
     pushtag contains special code to call pushdecl_with_scope on the
639
     TEMPLATE_DECL for S2.  */
640
  begin_scope (sk_template_parms, NULL);
641
  ++processing_template_decl;
642
  ++processing_template_parmlist;
643
  note_template_header (0);
644
}
645
 
646
/* This routine is called when a specialization is declared.  If it is
647
   invalid to declare a specialization here, an error is reported and
648
   false is returned, otherwise this routine will return true.  */
649
 
650
static bool
651
check_specialization_scope (void)
652
{
653
  tree scope = current_scope ();
654
 
655
  /* [temp.expl.spec]
656
 
657
     An explicit specialization shall be declared in the namespace of
658
     which the template is a member, or, for member templates, in the
659
     namespace of which the enclosing class or enclosing class
660
     template is a member.  An explicit specialization of a member
661
     function, member class or static data member of a class template
662
     shall be declared in the namespace of which the class template
663
     is a member.  */
664
  if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
665
    {
666
      error ("explicit specialization in non-namespace scope %qD", scope);
667
      return false;
668
    }
669
 
670
  /* [temp.expl.spec]
671
 
672
     In an explicit specialization declaration for a member of a class
673
     template or a member template that appears in namespace scope,
674
     the member template and some of its enclosing class templates may
675
     remain unspecialized, except that the declaration shall not
676
     explicitly specialize a class member template if its enclosing
677
     class templates are not explicitly specialized as well.  */
678
  if (current_template_parms)
679
    {
680
      error ("enclosing class templates are not explicitly specialized");
681
      return false;
682
    }
683
 
684
  return true;
685
}
686
 
687
/* We've just seen template <>.  */
688
 
689
bool
690
begin_specialization (void)
691
{
692
  begin_scope (sk_template_spec, NULL);
693
  note_template_header (1);
694
  return check_specialization_scope ();
695
}
696
 
697
/* Called at then end of processing a declaration preceded by
698
   template<>.  */
699
 
700
void
701
end_specialization (void)
702
{
703
  finish_scope ();
704
  reset_specialization ();
705
}
706
 
707
/* Any template <>'s that we have seen thus far are not referring to a
708
   function specialization.  */
709
 
710
void
711
reset_specialization (void)
712
{
713
  processing_specialization = 0;
714
  template_header_count = 0;
715
}
716
 
717
/* We've just seen a template header.  If SPECIALIZATION is nonzero,
718
   it was of the form template <>.  */
719
 
720
static void
721
note_template_header (int specialization)
722
{
723
  processing_specialization = specialization;
724
  template_header_count++;
725
}
726
 
727
/* We're beginning an explicit instantiation.  */
728
 
729
void
730
begin_explicit_instantiation (void)
731
{
732
  gcc_assert (!processing_explicit_instantiation);
733
  processing_explicit_instantiation = true;
734
}
735
 
736
 
737
void
738
end_explicit_instantiation (void)
739
{
740
  gcc_assert (processing_explicit_instantiation);
741
  processing_explicit_instantiation = false;
742
}
743
 
744
/* An explicit specialization or partial specialization TMPL is being
745
   declared.  Check that the namespace in which the specialization is
746
   occurring is permissible.  Returns false iff it is invalid to
747
   specialize TMPL in the current namespace.  */
748
 
749
static bool
750
check_specialization_namespace (tree tmpl)
751
{
752
  tree tpl_ns = decl_namespace_context (tmpl);
753
 
754
  /* [tmpl.expl.spec]
755
 
756
     An explicit specialization shall be declared in the namespace of
757
     which the template is a member, or, for member templates, in the
758
     namespace of which the enclosing class or enclosing class
759
     template is a member.  An explicit specialization of a member
760
     function, member class or static data member of a class template
761
     shall be declared in the namespace of which the class template is
762
     a member.  */
763
  if (current_scope() != DECL_CONTEXT (tmpl)
764
      && !at_namespace_scope_p ())
765
    {
766
      error ("specialization of %qD must appear at namespace scope", tmpl);
767
      return false;
768
    }
769
  if (is_associated_namespace (current_namespace, tpl_ns))
770
    /* Same or super-using namespace.  */
771
    return true;
772
  else
773
    {
774
      permerror (input_location, "specialization of %qD in different namespace", tmpl);
775
      permerror (input_location, "  from definition of %q+#D", tmpl);
776
      return false;
777
    }
778
}
779
 
780
/* SPEC is an explicit instantiation.  Check that it is valid to
781
   perform this explicit instantiation in the current namespace.  */
782
 
783
static void
784
check_explicit_instantiation_namespace (tree spec)
785
{
786
  tree ns;
787
 
788
  /* DR 275: An explicit instantiation shall appear in an enclosing
789
     namespace of its template.  */
790
  ns = decl_namespace_context (spec);
791
  if (!is_ancestor (current_namespace, ns))
792
    permerror (input_location, "explicit instantiation of %qD in namespace %qD "
793
               "(which does not enclose namespace %qD)",
794
               spec, current_namespace, ns);
795
}
796
 
797
/* The TYPE is being declared.  If it is a template type, that means it
798
   is a partial specialization.  Do appropriate error-checking.  */
799
 
800
tree
801
maybe_process_partial_specialization (tree type)
802
{
803
  tree context;
804
 
805
  if (type == error_mark_node)
806
    return error_mark_node;
807
 
808
  if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
809
    {
810
      error ("name of class shadows template template parameter %qD",
811
             TYPE_NAME (type));
812
      return error_mark_node;
813
    }
814
 
815
  context = TYPE_CONTEXT (type);
816
 
817
  if ((CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
818
      /* Consider non-class instantiations of alias templates as
819
         well.  */
820
      || (TYPE_P (type)
821
          && TYPE_TEMPLATE_INFO (type)
822
          && DECL_LANG_SPECIFIC (TYPE_NAME (type))
823
          && DECL_USE_TEMPLATE (TYPE_NAME (type))))
824
    {
825
      /* This is for ordinary explicit specialization and partial
826
         specialization of a template class such as:
827
 
828
           template <> class C<int>;
829
 
830
         or:
831
 
832
           template <class T> class C<T*>;
833
 
834
         Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
835
 
836
      if (CLASS_TYPE_P (type)
837
          && CLASSTYPE_IMPLICIT_INSTANTIATION (type)
838
          && !COMPLETE_TYPE_P (type))
839
        {
840
          check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
841
          SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
842
          if (processing_template_decl)
843
            {
844
              if (push_template_decl (TYPE_MAIN_DECL (type))
845
                  == error_mark_node)
846
                return error_mark_node;
847
            }
848
        }
849
      else if (CLASS_TYPE_P (type)
850
               && CLASSTYPE_TEMPLATE_INSTANTIATION (type))
851
        error ("specialization of %qT after instantiation", type);
852
 
853
      if (DECL_ALIAS_TEMPLATE_P (TYPE_TI_TEMPLATE (type)))
854
        {
855
          error ("partial specialization of alias template %qD",
856
                 TYPE_TI_TEMPLATE (type));
857
          return error_mark_node;
858
        }
859
    }
860
  else if (CLASS_TYPE_P (type)
861
           && !CLASSTYPE_USE_TEMPLATE (type)
862
           && CLASSTYPE_TEMPLATE_INFO (type)
863
           && context && CLASS_TYPE_P (context)
864
           && CLASSTYPE_TEMPLATE_INFO (context))
865
    {
866
      /* This is for an explicit specialization of member class
867
         template according to [temp.expl.spec/18]:
868
 
869
           template <> template <class U> class C<int>::D;
870
 
871
         The context `C<int>' must be an implicit instantiation.
872
         Otherwise this is just a member class template declared
873
         earlier like:
874
 
875
           template <> class C<int> { template <class U> class D; };
876
           template <> template <class U> class C<int>::D;
877
 
878
         In the first case, `C<int>::D' is a specialization of `C<T>::D'
879
         while in the second case, `C<int>::D' is a primary template
880
         and `C<T>::D' may not exist.  */
881
 
882
      if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
883
          && !COMPLETE_TYPE_P (type))
884
        {
885
          tree t;
886
          tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
887
 
888
          if (current_namespace
889
              != decl_namespace_context (tmpl))
890
            {
891
              permerror (input_location, "specializing %q#T in different namespace", type);
892
              permerror (input_location, "  from definition of %q+#D", tmpl);
893
            }
894
 
895
          /* Check for invalid specialization after instantiation:
896
 
897
               template <> template <> class C<int>::D<int>;
898
               template <> template <class U> class C<int>::D;  */
899
 
900
          for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
901
               t; t = TREE_CHAIN (t))
902
            {
903
              tree inst = TREE_VALUE (t);
904
              if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst))
905
                {
906
                  /* We already have a full specialization of this partial
907
                     instantiation.  Reassign it to the new member
908
                     specialization template.  */
909
                  spec_entry elt;
910
                  spec_entry *entry;
911
                  void **slot;
912
 
913
                  elt.tmpl = most_general_template (tmpl);
914
                  elt.args = CLASSTYPE_TI_ARGS (inst);
915
                  elt.spec = inst;
916
 
917
                  htab_remove_elt (type_specializations, &elt);
918
 
919
                  elt.tmpl = tmpl;
920
                  elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
921
 
922
                  slot = htab_find_slot (type_specializations, &elt, INSERT);
923
                  entry = ggc_alloc_spec_entry ();
924
                  *entry = elt;
925
                  *slot = entry;
926
                }
927
              else if (COMPLETE_OR_OPEN_TYPE_P (inst))
928
                /* But if we've had an implicit instantiation, that's a
929
                   problem ([temp.expl.spec]/6).  */
930
                error ("specialization %qT after instantiation %qT",
931
                       type, inst);
932
            }
933
 
934
          /* Mark TYPE as a specialization.  And as a result, we only
935
             have one level of template argument for the innermost
936
             class template.  */
937
          SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
938
          CLASSTYPE_TI_ARGS (type)
939
            = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
940
        }
941
    }
942
  else if (processing_specialization)
943
    {
944
       /* Someday C++0x may allow for enum template specialization.  */
945
      if (cxx_dialect > cxx98 && TREE_CODE (type) == ENUMERAL_TYPE
946
          && CLASS_TYPE_P (context) && CLASSTYPE_USE_TEMPLATE (context))
947
        pedwarn (input_location, OPT_pedantic, "template specialization "
948
                 "of %qD not allowed by ISO C++", type);
949
      else
950
        {
951
          error ("explicit specialization of non-template %qT", type);
952
          return error_mark_node;
953
        }
954
    }
955
 
956
  return type;
957
}
958
 
959
/* Returns nonzero if we can optimize the retrieval of specializations
960
   for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
961
   do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
962
 
963
static inline bool
964
optimize_specialization_lookup_p (tree tmpl)
965
{
966
  return (DECL_FUNCTION_TEMPLATE_P (tmpl)
967
          && DECL_CLASS_SCOPE_P (tmpl)
968
          /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
969
             parameter.  */
970
          && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
971
          /* The optimized lookup depends on the fact that the
972
             template arguments for the member function template apply
973
             purely to the containing class, which is not true if the
974
             containing class is an explicit or partial
975
             specialization.  */
976
          && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
977
          && !DECL_MEMBER_TEMPLATE_P (tmpl)
978
          && !DECL_CONV_FN_P (tmpl)
979
          /* It is possible to have a template that is not a member
980
             template and is not a member of a template class:
981
 
982
             template <typename T>
983
             struct S { friend A::f(); };
984
 
985
             Here, the friend function is a template, but the context does
986
             not have template information.  The optimized lookup relies
987
             on having ARGS be the template arguments for both the class
988
             and the function template.  */
989
          && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
990
}
991
 
992
/* Retrieve the specialization (in the sense of [temp.spec] - a
993
   specialization is either an instantiation or an explicit
994
   specialization) of TMPL for the given template ARGS.  If there is
995
   no such specialization, return NULL_TREE.  The ARGS are a vector of
996
   arguments, or a vector of vectors of arguments, in the case of
997
   templates with more than one level of parameters.
998
 
999
   If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
1000
   then we search for a partial specialization matching ARGS.  This
1001
   parameter is ignored if TMPL is not a class template.  */
1002
 
1003
static tree
1004
retrieve_specialization (tree tmpl, tree args, hashval_t hash)
1005
{
1006
  if (args == error_mark_node)
1007
    return NULL_TREE;
1008
 
1009
  gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
1010
 
1011
  /* There should be as many levels of arguments as there are
1012
     levels of parameters.  */
1013
  gcc_assert (TMPL_ARGS_DEPTH (args)
1014
              == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
1015
 
1016
  if (optimize_specialization_lookup_p (tmpl))
1017
    {
1018
      tree class_template;
1019
      tree class_specialization;
1020
      VEC(tree,gc) *methods;
1021
      tree fns;
1022
      int idx;
1023
 
1024
      /* The template arguments actually apply to the containing
1025
         class.  Find the class specialization with those
1026
         arguments.  */
1027
      class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
1028
      class_specialization
1029
        = retrieve_specialization (class_template, args, 0);
1030
      if (!class_specialization)
1031
        return NULL_TREE;
1032
      /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
1033
         for the specialization.  */
1034
      idx = class_method_index_for_fn (class_specialization, tmpl);
1035
      if (idx == -1)
1036
        return NULL_TREE;
1037
      /* Iterate through the methods with the indicated name, looking
1038
         for the one that has an instance of TMPL.  */
1039
      methods = CLASSTYPE_METHOD_VEC (class_specialization);
1040
      for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
1041
        {
1042
          tree fn = OVL_CURRENT (fns);
1043
          if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
1044
              /* using-declarations can add base methods to the method vec,
1045
                 and we don't want those here.  */
1046
              && DECL_CONTEXT (fn) == class_specialization)
1047
            return fn;
1048
        }
1049
      return NULL_TREE;
1050
    }
1051
  else
1052
    {
1053
      spec_entry *found;
1054
      spec_entry elt;
1055
      htab_t specializations;
1056
 
1057
      elt.tmpl = tmpl;
1058
      elt.args = args;
1059
      elt.spec = NULL_TREE;
1060
 
1061
      if (DECL_CLASS_TEMPLATE_P (tmpl))
1062
        specializations = type_specializations;
1063
      else
1064
        specializations = decl_specializations;
1065
 
1066
      if (hash == 0)
1067
        hash = hash_specialization (&elt);
1068
      found = (spec_entry *) htab_find_with_hash (specializations, &elt, hash);
1069
      if (found)
1070
        return found->spec;
1071
    }
1072
 
1073
  return NULL_TREE;
1074
}
1075
 
1076
/* Like retrieve_specialization, but for local declarations.  */
1077
 
1078
static tree
1079
retrieve_local_specialization (tree tmpl)
1080
{
1081
  tree spec;
1082
 
1083
  if (local_specializations == NULL)
1084
    return NULL_TREE;
1085
 
1086
  spec = (tree) htab_find_with_hash (local_specializations, tmpl,
1087
                                     htab_hash_pointer (tmpl));
1088
  return spec ? TREE_PURPOSE (spec) : NULL_TREE;
1089
}
1090
 
1091
/* Returns nonzero iff DECL is a specialization of TMPL.  */
1092
 
1093
int
1094
is_specialization_of (tree decl, tree tmpl)
1095
{
1096
  tree t;
1097
 
1098
  if (TREE_CODE (decl) == FUNCTION_DECL)
1099
    {
1100
      for (t = decl;
1101
           t != NULL_TREE;
1102
           t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1103
        if (t == tmpl)
1104
          return 1;
1105
    }
1106
  else
1107
    {
1108
      gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1109
 
1110
      for (t = TREE_TYPE (decl);
1111
           t != NULL_TREE;
1112
           t = CLASSTYPE_USE_TEMPLATE (t)
1113
             ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1114
        if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1115
          return 1;
1116
    }
1117
 
1118
  return 0;
1119
}
1120
 
1121
/* Returns nonzero iff DECL is a specialization of friend declaration
1122
   FRIEND_DECL according to [temp.friend].  */
1123
 
1124
bool
1125
is_specialization_of_friend (tree decl, tree friend_decl)
1126
{
1127
  bool need_template = true;
1128
  int template_depth;
1129
 
1130
  gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1131
              || TREE_CODE (decl) == TYPE_DECL);
1132
 
1133
  /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1134
     of a template class, we want to check if DECL is a specialization
1135
     if this.  */
1136
  if (TREE_CODE (friend_decl) == FUNCTION_DECL
1137
      && DECL_TEMPLATE_INFO (friend_decl)
1138
      && !DECL_USE_TEMPLATE (friend_decl))
1139
    {
1140
      /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1141
      friend_decl = DECL_TI_TEMPLATE (friend_decl);
1142
      need_template = false;
1143
    }
1144
  else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1145
           && !PRIMARY_TEMPLATE_P (friend_decl))
1146
    need_template = false;
1147
 
1148
  /* There is nothing to do if this is not a template friend.  */
1149
  if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1150
    return false;
1151
 
1152
  if (is_specialization_of (decl, friend_decl))
1153
    return true;
1154
 
1155
  /* [temp.friend/6]
1156
     A member of a class template may be declared to be a friend of a
1157
     non-template class.  In this case, the corresponding member of
1158
     every specialization of the class template is a friend of the
1159
     class granting friendship.
1160
 
1161
     For example, given a template friend declaration
1162
 
1163
       template <class T> friend void A<T>::f();
1164
 
1165
     the member function below is considered a friend
1166
 
1167
       template <> struct A<int> {
1168
         void f();
1169
       };
1170
 
1171
     For this type of template friend, TEMPLATE_DEPTH below will be
1172
     nonzero.  To determine if DECL is a friend of FRIEND, we first
1173
     check if the enclosing class is a specialization of another.  */
1174
 
1175
  template_depth = template_class_depth (CP_DECL_CONTEXT (friend_decl));
1176
  if (template_depth
1177
      && DECL_CLASS_SCOPE_P (decl)
1178
      && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1179
                               CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1180
    {
1181
      /* Next, we check the members themselves.  In order to handle
1182
         a few tricky cases, such as when FRIEND_DECL's are
1183
 
1184
           template <class T> friend void A<T>::g(T t);
1185
           template <class T> template <T t> friend void A<T>::h();
1186
 
1187
         and DECL's are
1188
 
1189
           void A<int>::g(int);
1190
           template <int> void A<int>::h();
1191
 
1192
         we need to figure out ARGS, the template arguments from
1193
         the context of DECL.  This is required for template substitution
1194
         of `T' in the function parameter of `g' and template parameter
1195
         of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1196
 
1197
      tree context = DECL_CONTEXT (decl);
1198
      tree args = NULL_TREE;
1199
      int current_depth = 0;
1200
 
1201
      while (current_depth < template_depth)
1202
        {
1203
          if (CLASSTYPE_TEMPLATE_INFO (context))
1204
            {
1205
              if (current_depth == 0)
1206
                args = TYPE_TI_ARGS (context);
1207
              else
1208
                args = add_to_template_args (TYPE_TI_ARGS (context), args);
1209
              current_depth++;
1210
            }
1211
          context = TYPE_CONTEXT (context);
1212
        }
1213
 
1214
      if (TREE_CODE (decl) == FUNCTION_DECL)
1215
        {
1216
          bool is_template;
1217
          tree friend_type;
1218
          tree decl_type;
1219
          tree friend_args_type;
1220
          tree decl_args_type;
1221
 
1222
          /* Make sure that both DECL and FRIEND_DECL are templates or
1223
             non-templates.  */
1224
          is_template = DECL_TEMPLATE_INFO (decl)
1225
                        && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1226
          if (need_template ^ is_template)
1227
            return false;
1228
          else if (is_template)
1229
            {
1230
              /* If both are templates, check template parameter list.  */
1231
              tree friend_parms
1232
                = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1233
                                         args, tf_none);
1234
              if (!comp_template_parms
1235
                     (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1236
                      friend_parms))
1237
                return false;
1238
 
1239
              decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1240
            }
1241
          else
1242
            decl_type = TREE_TYPE (decl);
1243
 
1244
          friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1245
                                              tf_none, NULL_TREE);
1246
          if (friend_type == error_mark_node)
1247
            return false;
1248
 
1249
          /* Check if return types match.  */
1250
          if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1251
            return false;
1252
 
1253
          /* Check if function parameter types match, ignoring the
1254
             `this' parameter.  */
1255
          friend_args_type = TYPE_ARG_TYPES (friend_type);
1256
          decl_args_type = TYPE_ARG_TYPES (decl_type);
1257
          if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1258
            friend_args_type = TREE_CHAIN (friend_args_type);
1259
          if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1260
            decl_args_type = TREE_CHAIN (decl_args_type);
1261
 
1262
          return compparms (decl_args_type, friend_args_type);
1263
        }
1264
      else
1265
        {
1266
          /* DECL is a TYPE_DECL */
1267
          bool is_template;
1268
          tree decl_type = TREE_TYPE (decl);
1269
 
1270
          /* Make sure that both DECL and FRIEND_DECL are templates or
1271
             non-templates.  */
1272
          is_template
1273
            = CLASSTYPE_TEMPLATE_INFO (decl_type)
1274
              && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1275
 
1276
          if (need_template ^ is_template)
1277
            return false;
1278
          else if (is_template)
1279
            {
1280
              tree friend_parms;
1281
              /* If both are templates, check the name of the two
1282
                 TEMPLATE_DECL's first because is_friend didn't.  */
1283
              if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1284
                  != DECL_NAME (friend_decl))
1285
                return false;
1286
 
1287
              /* Now check template parameter list.  */
1288
              friend_parms
1289
                = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1290
                                         args, tf_none);
1291
              return comp_template_parms
1292
                (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1293
                 friend_parms);
1294
            }
1295
          else
1296
            return (DECL_NAME (decl)
1297
                    == DECL_NAME (friend_decl));
1298
        }
1299
    }
1300
  return false;
1301
}
1302
 
1303
/* Register the specialization SPEC as a specialization of TMPL with
1304
   the indicated ARGS.  IS_FRIEND indicates whether the specialization
1305
   is actually just a friend declaration.  Returns SPEC, or an
1306
   equivalent prior declaration, if available.  */
1307
 
1308
static tree
1309
register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1310
                         hashval_t hash)
1311
{
1312
  tree fn;
1313
  void **slot = NULL;
1314
  spec_entry elt;
1315
 
1316
  gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec));
1317
 
1318
  if (TREE_CODE (spec) == FUNCTION_DECL
1319
      && uses_template_parms (DECL_TI_ARGS (spec)))
1320
    /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1321
       register it; we want the corresponding TEMPLATE_DECL instead.
1322
       We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1323
       the more obvious `uses_template_parms (spec)' to avoid problems
1324
       with default function arguments.  In particular, given
1325
       something like this:
1326
 
1327
          template <class T> void f(T t1, T t = T())
1328
 
1329
       the default argument expression is not substituted for in an
1330
       instantiation unless and until it is actually needed.  */
1331
    return spec;
1332
 
1333
  if (optimize_specialization_lookup_p (tmpl))
1334
    /* We don't put these specializations in the hash table, but we might
1335
       want to give an error about a mismatch.  */
1336
    fn = retrieve_specialization (tmpl, args, 0);
1337
  else
1338
    {
1339
      elt.tmpl = tmpl;
1340
      elt.args = args;
1341
      elt.spec = spec;
1342
 
1343
      if (hash == 0)
1344
        hash = hash_specialization (&elt);
1345
 
1346
      slot =
1347
        htab_find_slot_with_hash (decl_specializations, &elt, hash, INSERT);
1348
      if (*slot)
1349
        fn = ((spec_entry *) *slot)->spec;
1350
      else
1351
        fn = NULL_TREE;
1352
    }
1353
 
1354
  /* We can sometimes try to re-register a specialization that we've
1355
     already got.  In particular, regenerate_decl_from_template calls
1356
     duplicate_decls which will update the specialization list.  But,
1357
     we'll still get called again here anyhow.  It's more convenient
1358
     to simply allow this than to try to prevent it.  */
1359
  if (fn == spec)
1360
    return spec;
1361
  else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1362
    {
1363
      if (DECL_TEMPLATE_INSTANTIATION (fn))
1364
        {
1365
          if (DECL_ODR_USED (fn)
1366
              || DECL_EXPLICIT_INSTANTIATION (fn))
1367
            {
1368
              error ("specialization of %qD after instantiation",
1369
                     fn);
1370
              return error_mark_node;
1371
            }
1372
          else
1373
            {
1374
              tree clone;
1375
              /* This situation should occur only if the first
1376
                 specialization is an implicit instantiation, the
1377
                 second is an explicit specialization, and the
1378
                 implicit instantiation has not yet been used.  That
1379
                 situation can occur if we have implicitly
1380
                 instantiated a member function and then specialized
1381
                 it later.
1382
 
1383
                 We can also wind up here if a friend declaration that
1384
                 looked like an instantiation turns out to be a
1385
                 specialization:
1386
 
1387
                   template <class T> void foo(T);
1388
                   class S { friend void foo<>(int) };
1389
                   template <> void foo(int);
1390
 
1391
                 We transform the existing DECL in place so that any
1392
                 pointers to it become pointers to the updated
1393
                 declaration.
1394
 
1395
                 If there was a definition for the template, but not
1396
                 for the specialization, we want this to look as if
1397
                 there were no definition, and vice versa.  */
1398
              DECL_INITIAL (fn) = NULL_TREE;
1399
              duplicate_decls (spec, fn, is_friend);
1400
              /* The call to duplicate_decls will have applied
1401
                 [temp.expl.spec]:
1402
 
1403
                   An explicit specialization of a function template
1404
                   is inline only if it is explicitly declared to be,
1405
                   and independently of whether its function template
1406
                   is.
1407
 
1408
                to the primary function; now copy the inline bits to
1409
                the various clones.  */
1410
              FOR_EACH_CLONE (clone, fn)
1411
                {
1412
                  DECL_DECLARED_INLINE_P (clone)
1413
                    = DECL_DECLARED_INLINE_P (fn);
1414
                  DECL_SOURCE_LOCATION (clone)
1415
                    = DECL_SOURCE_LOCATION (fn);
1416
                }
1417
              check_specialization_namespace (fn);
1418
 
1419
              return fn;
1420
            }
1421
        }
1422
      else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1423
        {
1424
          if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1425
            /* Dup decl failed, but this is a new definition. Set the
1426
               line number so any errors match this new
1427
               definition.  */
1428
            DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1429
 
1430
          return fn;
1431
        }
1432
    }
1433
  else if (fn)
1434
    return duplicate_decls (spec, fn, is_friend);
1435
 
1436
  /* A specialization must be declared in the same namespace as the
1437
     template it is specializing.  */
1438
  if (DECL_TEMPLATE_SPECIALIZATION (spec)
1439
      && !check_specialization_namespace (tmpl))
1440
    DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1441
 
1442
  if (slot != NULL /* !optimize_specialization_lookup_p (tmpl) */)
1443
    {
1444
      spec_entry *entry = ggc_alloc_spec_entry ();
1445
      gcc_assert (tmpl && args && spec);
1446
      *entry = elt;
1447
      *slot = entry;
1448
      if (TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1449
          && PRIMARY_TEMPLATE_P (tmpl)
1450
          && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1451
        /* TMPL is a forward declaration of a template function; keep a list
1452
           of all specializations in case we need to reassign them to a friend
1453
           template later in tsubst_friend_function.  */
1454
        DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1455
          = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1456
    }
1457
 
1458
  return spec;
1459
}
1460
 
1461
/* Returns true iff two spec_entry nodes are equivalent.  Only compares the
1462
   TMPL and ARGS members, ignores SPEC.  */
1463
 
1464
static int
1465
eq_specializations (const void *p1, const void *p2)
1466
{
1467
  const spec_entry *e1 = (const spec_entry *)p1;
1468
  const spec_entry *e2 = (const spec_entry *)p2;
1469
 
1470
  return (e1->tmpl == e2->tmpl
1471
          && comp_template_args (e1->args, e2->args));
1472
}
1473
 
1474
/* Returns a hash for a template TMPL and template arguments ARGS.  */
1475
 
1476
static hashval_t
1477
hash_tmpl_and_args (tree tmpl, tree args)
1478
{
1479
  hashval_t val = DECL_UID (tmpl);
1480
  return iterative_hash_template_arg (args, val);
1481
}
1482
 
1483
/* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1484
   ignoring SPEC.  */
1485
 
1486
static hashval_t
1487
hash_specialization (const void *p)
1488
{
1489
  const spec_entry *e = (const spec_entry *)p;
1490
  return hash_tmpl_and_args (e->tmpl, e->args);
1491
}
1492
 
1493
/* Recursively calculate a hash value for a template argument ARG, for use
1494
   in the hash tables of template specializations.  */
1495
 
1496
hashval_t
1497
iterative_hash_template_arg (tree arg, hashval_t val)
1498
{
1499
  unsigned HOST_WIDE_INT i;
1500
  enum tree_code code;
1501
  char tclass;
1502
 
1503
  if (arg == NULL_TREE)
1504
    return iterative_hash_object (arg, val);
1505
 
1506
  if (!TYPE_P (arg))
1507
    STRIP_NOPS (arg);
1508
 
1509
  if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
1510
    /* We can get one of these when re-hashing a previous entry in the middle
1511
       of substituting into a pack expansion.  Just look through it.  */
1512
    arg = ARGUMENT_PACK_SELECT_FROM_PACK (arg);
1513
 
1514
  code = TREE_CODE (arg);
1515
  tclass = TREE_CODE_CLASS (code);
1516
 
1517
  val = iterative_hash_object (code, val);
1518
 
1519
  switch (code)
1520
    {
1521
    case ERROR_MARK:
1522
      return val;
1523
 
1524
    case IDENTIFIER_NODE:
1525
      return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1526
 
1527
    case TREE_VEC:
1528
      {
1529
        int i, len = TREE_VEC_LENGTH (arg);
1530
        for (i = 0; i < len; ++i)
1531
          val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1532
        return val;
1533
      }
1534
 
1535
    case TYPE_PACK_EXPANSION:
1536
    case EXPR_PACK_EXPANSION:
1537
      val = iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1538
      return iterative_hash_template_arg (PACK_EXPANSION_EXTRA_ARGS (arg), val);
1539
 
1540
    case TYPE_ARGUMENT_PACK:
1541
    case NONTYPE_ARGUMENT_PACK:
1542
      return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1543
 
1544
    case TREE_LIST:
1545
      for (; arg; arg = TREE_CHAIN (arg))
1546
        val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1547
      return val;
1548
 
1549
    case OVERLOAD:
1550
      for (; arg; arg = OVL_NEXT (arg))
1551
        val = iterative_hash_template_arg (OVL_CURRENT (arg), val);
1552
      return val;
1553
 
1554
    case CONSTRUCTOR:
1555
      {
1556
        tree field, value;
1557
        FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1558
          {
1559
            val = iterative_hash_template_arg (field, val);
1560
            val = iterative_hash_template_arg (value, val);
1561
          }
1562
        return val;
1563
      }
1564
 
1565
    case PARM_DECL:
1566
      if (!DECL_ARTIFICIAL (arg))
1567
        {
1568
          val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1569
          val = iterative_hash_object (DECL_PARM_LEVEL (arg), val);
1570
        }
1571
      return iterative_hash_template_arg (TREE_TYPE (arg), val);
1572
 
1573
    case TARGET_EXPR:
1574
      return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1575
 
1576
    case PTRMEM_CST:
1577
      val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1578
      return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1579
 
1580
    case TEMPLATE_PARM_INDEX:
1581
      val = iterative_hash_template_arg
1582
        (TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1583
      val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1584
      return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1585
 
1586
    case TRAIT_EXPR:
1587
      val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1588
      val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1589
      return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1590
 
1591
    case BASELINK:
1592
      val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1593
                                         val);
1594
      return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1595
                                          val);
1596
 
1597
    case MODOP_EXPR:
1598
      val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1599
      code = TREE_CODE (TREE_OPERAND (arg, 1));
1600
      val = iterative_hash_object (code, val);
1601
      return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1602
 
1603
    case LAMBDA_EXPR:
1604
      /* A lambda can't appear in a template arg, but don't crash on
1605
         erroneous input.  */
1606
      gcc_assert (seen_error ());
1607
      return val;
1608
 
1609
    case CAST_EXPR:
1610
    case IMPLICIT_CONV_EXPR:
1611
    case STATIC_CAST_EXPR:
1612
    case REINTERPRET_CAST_EXPR:
1613
    case CONST_CAST_EXPR:
1614
    case DYNAMIC_CAST_EXPR:
1615
    case NEW_EXPR:
1616
      val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1617
      /* Now hash operands as usual.  */
1618
      break;
1619
 
1620
    default:
1621
      break;
1622
    }
1623
 
1624
  switch (tclass)
1625
    {
1626
    case tcc_type:
1627
      if (TYPE_CANONICAL (arg))
1628
        return iterative_hash_object (TYPE_HASH (TYPE_CANONICAL (arg)),
1629
                                      val);
1630
      else if (TREE_CODE (arg) == DECLTYPE_TYPE)
1631
        return iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1632
      /* Otherwise just compare the types during lookup.  */
1633
      return val;
1634
 
1635
    case tcc_declaration:
1636
    case tcc_constant:
1637
      return iterative_hash_expr (arg, val);
1638
 
1639
    default:
1640
      gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1641
      {
1642
        unsigned n = cp_tree_operand_length (arg);
1643
        for (i = 0; i < n; ++i)
1644
          val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1645
        return val;
1646
      }
1647
    }
1648
  gcc_unreachable ();
1649
  return 0;
1650
}
1651
 
1652
/* Unregister the specialization SPEC as a specialization of TMPL.
1653
   Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1654
   if the SPEC was listed as a specialization of TMPL.
1655
 
1656
   Note that SPEC has been ggc_freed, so we can't look inside it.  */
1657
 
1658
bool
1659
reregister_specialization (tree spec, tree tinfo, tree new_spec)
1660
{
1661
  spec_entry *entry;
1662
  spec_entry elt;
1663
 
1664
  elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1665
  elt.args = TI_ARGS (tinfo);
1666
  elt.spec = NULL_TREE;
1667
 
1668
  entry = (spec_entry *) htab_find (decl_specializations, &elt);
1669
  if (entry != NULL)
1670
    {
1671
      gcc_assert (entry->spec == spec || entry->spec == new_spec);
1672
      gcc_assert (new_spec != NULL_TREE);
1673
      entry->spec = new_spec;
1674
      return 1;
1675
    }
1676
 
1677
  return 0;
1678
}
1679
 
1680
/* Compare an entry in the local specializations hash table P1 (which
1681
   is really a pointer to a TREE_LIST) with P2 (which is really a
1682
   DECL).  */
1683
 
1684
static int
1685
eq_local_specializations (const void *p1, const void *p2)
1686
{
1687
  return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1688
}
1689
 
1690
/* Hash P1, an entry in the local specializations table.  */
1691
 
1692
static hashval_t
1693
hash_local_specialization (const void* p1)
1694
{
1695
  return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1696
}
1697
 
1698
/* Like register_specialization, but for local declarations.  We are
1699
   registering SPEC, an instantiation of TMPL.  */
1700
 
1701
static void
1702
register_local_specialization (tree spec, tree tmpl)
1703
{
1704
  void **slot;
1705
 
1706
  slot = htab_find_slot_with_hash (local_specializations, tmpl,
1707
                                   htab_hash_pointer (tmpl), INSERT);
1708
  *slot = build_tree_list (spec, tmpl);
1709
}
1710
 
1711
/* TYPE is a class type.  Returns true if TYPE is an explicitly
1712
   specialized class.  */
1713
 
1714
bool
1715
explicit_class_specialization_p (tree type)
1716
{
1717
  if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1718
    return false;
1719
  return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1720
}
1721
 
1722
/* Print the list of functions at FNS, going through all the overloads
1723
   for each element of the list.  Alternatively, FNS can not be a
1724
   TREE_LIST, in which case it will be printed together with all the
1725
   overloads.
1726
 
1727
   MORE and *STR should respectively be FALSE and NULL when the function
1728
   is called from the outside.  They are used internally on recursive
1729
   calls.  print_candidates manages the two parameters and leaves NULL
1730
   in *STR when it ends.  */
1731
 
1732
static void
1733
print_candidates_1 (tree fns, bool more, const char **str)
1734
{
1735
  tree fn, fn2;
1736
  char *spaces = NULL;
1737
 
1738
  for (fn = fns; fn; fn = OVL_NEXT (fn))
1739
    if (TREE_CODE (fn) == TREE_LIST)
1740
      {
1741
        for (fn2 = fn; fn2 != NULL_TREE; fn2 = TREE_CHAIN (fn2))
1742
          print_candidates_1 (TREE_VALUE (fn2),
1743
                              TREE_CHAIN (fn2) || more, str);
1744
      }
1745
    else
1746
      {
1747
        if (!*str)
1748
          {
1749
            /* Pick the prefix string.  */
1750
            if (!more && !OVL_NEXT (fns))
1751
              {
1752
                error ("candidate is: %+#D", OVL_CURRENT (fn));
1753
                continue;
1754
              }
1755
 
1756
            *str = _("candidates are:");
1757
            spaces = get_spaces (*str);
1758
          }
1759
        error ("%s %+#D", *str, OVL_CURRENT (fn));
1760
        *str = spaces ? spaces : *str;
1761
      }
1762
 
1763
  if (!more)
1764
    {
1765
      free (spaces);
1766
      *str = NULL;
1767
    }
1768
}
1769
 
1770
/* Print the list of candidate FNS in an error message.  FNS can also
1771
   be a TREE_LIST of non-functions in the case of an ambiguous lookup.  */
1772
 
1773
void
1774
print_candidates (tree fns)
1775
{
1776
  const char *str = NULL;
1777
  print_candidates_1 (fns, false, &str);
1778
  gcc_assert (str == NULL);
1779
}
1780
 
1781
/* Returns the template (one of the functions given by TEMPLATE_ID)
1782
   which can be specialized to match the indicated DECL with the
1783
   explicit template args given in TEMPLATE_ID.  The DECL may be
1784
   NULL_TREE if none is available.  In that case, the functions in
1785
   TEMPLATE_ID are non-members.
1786
 
1787
   If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1788
   specialization of a member template.
1789
 
1790
   The TEMPLATE_COUNT is the number of references to qualifying
1791
   template classes that appeared in the name of the function. See
1792
   check_explicit_specialization for a more accurate description.
1793
 
1794
   TSK indicates what kind of template declaration (if any) is being
1795
   declared.  TSK_TEMPLATE indicates that the declaration given by
1796
   DECL, though a FUNCTION_DECL, has template parameters, and is
1797
   therefore a template function.
1798
 
1799
   The template args (those explicitly specified and those deduced)
1800
   are output in a newly created vector *TARGS_OUT.
1801
 
1802
   If it is impossible to determine the result, an error message is
1803
   issued.  The error_mark_node is returned to indicate failure.  */
1804
 
1805
static tree
1806
determine_specialization (tree template_id,
1807
                          tree decl,
1808
                          tree* targs_out,
1809
                          int need_member_template,
1810
                          int template_count,
1811
                          tmpl_spec_kind tsk)
1812
{
1813
  tree fns;
1814
  tree targs;
1815
  tree explicit_targs;
1816
  tree candidates = NULL_TREE;
1817
  /* A TREE_LIST of templates of which DECL may be a specialization.
1818
     The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1819
     corresponding TREE_PURPOSE is the set of template arguments that,
1820
     when used to instantiate the template, would produce a function
1821
     with the signature of DECL.  */
1822
  tree templates = NULL_TREE;
1823
  int header_count;
1824
  cp_binding_level *b;
1825
 
1826
  *targs_out = NULL_TREE;
1827
 
1828
  if (template_id == error_mark_node || decl == error_mark_node)
1829
    return error_mark_node;
1830
 
1831
  fns = TREE_OPERAND (template_id, 0);
1832
  explicit_targs = TREE_OPERAND (template_id, 1);
1833
 
1834
  if (fns == error_mark_node)
1835
    return error_mark_node;
1836
 
1837
  /* Check for baselinks.  */
1838
  if (BASELINK_P (fns))
1839
    fns = BASELINK_FUNCTIONS (fns);
1840
 
1841
  if (!is_overloaded_fn (fns))
1842
    {
1843
      error ("%qD is not a function template", fns);
1844
      return error_mark_node;
1845
    }
1846
 
1847
  /* Count the number of template headers specified for this
1848
     specialization.  */
1849
  header_count = 0;
1850
  for (b = current_binding_level;
1851
       b->kind == sk_template_parms;
1852
       b = b->level_chain)
1853
    ++header_count;
1854
 
1855
  for (; fns; fns = OVL_NEXT (fns))
1856
    {
1857
      tree fn = OVL_CURRENT (fns);
1858
 
1859
      if (TREE_CODE (fn) == TEMPLATE_DECL)
1860
        {
1861
          tree decl_arg_types;
1862
          tree fn_arg_types;
1863
 
1864
          /* In case of explicit specialization, we need to check if
1865
             the number of template headers appearing in the specialization
1866
             is correct. This is usually done in check_explicit_specialization,
1867
             but the check done there cannot be exhaustive when specializing
1868
             member functions. Consider the following code:
1869
 
1870
             template <> void A<int>::f(int);
1871
             template <> template <> void A<int>::f(int);
1872
 
1873
             Assuming that A<int> is not itself an explicit specialization
1874
             already, the first line specializes "f" which is a non-template
1875
             member function, whilst the second line specializes "f" which
1876
             is a template member function. So both lines are syntactically
1877
             correct, and check_explicit_specialization does not reject
1878
             them.
1879
 
1880
             Here, we can do better, as we are matching the specialization
1881
             against the declarations. We count the number of template
1882
             headers, and we check if they match TEMPLATE_COUNT + 1
1883
             (TEMPLATE_COUNT is the number of qualifying template classes,
1884
             plus there must be another header for the member template
1885
             itself).
1886
 
1887
             Notice that if header_count is zero, this is not a
1888
             specialization but rather a template instantiation, so there
1889
             is no check we can perform here.  */
1890
          if (header_count && header_count != template_count + 1)
1891
            continue;
1892
 
1893
          /* Check that the number of template arguments at the
1894
             innermost level for DECL is the same as for FN.  */
1895
          if (current_binding_level->kind == sk_template_parms
1896
              && !current_binding_level->explicit_spec_p
1897
              && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1898
                  != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1899
                                      (current_template_parms))))
1900
            continue;
1901
 
1902
          /* DECL might be a specialization of FN.  */
1903
          decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1904
          fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1905
 
1906
          /* For a non-static member function, we need to make sure
1907
             that the const qualification is the same.  Since
1908
             get_bindings does not try to merge the "this" parameter,
1909
             we must do the comparison explicitly.  */
1910
          if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1911
              && !same_type_p (TREE_VALUE (fn_arg_types),
1912
                               TREE_VALUE (decl_arg_types)))
1913
            continue;
1914
 
1915
          /* Skip the "this" parameter and, for constructors of
1916
             classes with virtual bases, the VTT parameter.  A
1917
             full specialization of a constructor will have a VTT
1918
             parameter, but a template never will.  */
1919
          decl_arg_types
1920
            = skip_artificial_parms_for (decl, decl_arg_types);
1921
          fn_arg_types
1922
            = skip_artificial_parms_for (fn, fn_arg_types);
1923
 
1924
          /* Check that the number of function parameters matches.
1925
             For example,
1926
               template <class T> void f(int i = 0);
1927
               template <> void f<int>();
1928
             The specialization f<int> is invalid but is not caught
1929
             by get_bindings below.  */
1930
          if (list_length (fn_arg_types) != list_length (decl_arg_types))
1931
            continue;
1932
 
1933
          /* Function templates cannot be specializations; there are
1934
             no partial specializations of functions.  Therefore, if
1935
             the type of DECL does not match FN, there is no
1936
             match.  */
1937
          if (tsk == tsk_template)
1938
            {
1939
              if (compparms (fn_arg_types, decl_arg_types))
1940
                candidates = tree_cons (NULL_TREE, fn, candidates);
1941
              continue;
1942
            }
1943
 
1944
          /* See whether this function might be a specialization of this
1945
             template.  */
1946
          targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1947
 
1948
          if (!targs)
1949
            /* We cannot deduce template arguments that when used to
1950
               specialize TMPL will produce DECL.  */
1951
            continue;
1952
 
1953
          /* Save this template, and the arguments deduced.  */
1954
          templates = tree_cons (targs, fn, templates);
1955
        }
1956
      else if (need_member_template)
1957
        /* FN is an ordinary member function, and we need a
1958
           specialization of a member template.  */
1959
        ;
1960
      else if (TREE_CODE (fn) != FUNCTION_DECL)
1961
        /* We can get IDENTIFIER_NODEs here in certain erroneous
1962
           cases.  */
1963
        ;
1964
      else if (!DECL_FUNCTION_MEMBER_P (fn))
1965
        /* This is just an ordinary non-member function.  Nothing can
1966
           be a specialization of that.  */
1967
        ;
1968
      else if (DECL_ARTIFICIAL (fn))
1969
        /* Cannot specialize functions that are created implicitly.  */
1970
        ;
1971
      else
1972
        {
1973
          tree decl_arg_types;
1974
 
1975
          /* This is an ordinary member function.  However, since
1976
             we're here, we can assume it's enclosing class is a
1977
             template class.  For example,
1978
 
1979
               template <typename T> struct S { void f(); };
1980
               template <> void S<int>::f() {}
1981
 
1982
             Here, S<int>::f is a non-template, but S<int> is a
1983
             template class.  If FN has the same type as DECL, we
1984
             might be in business.  */
1985
 
1986
          if (!DECL_TEMPLATE_INFO (fn))
1987
            /* Its enclosing class is an explicit specialization
1988
               of a template class.  This is not a candidate.  */
1989
            continue;
1990
 
1991
          if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1992
                            TREE_TYPE (TREE_TYPE (fn))))
1993
            /* The return types differ.  */
1994
            continue;
1995
 
1996
          /* Adjust the type of DECL in case FN is a static member.  */
1997
          decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1998
          if (DECL_STATIC_FUNCTION_P (fn)
1999
              && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2000
            decl_arg_types = TREE_CHAIN (decl_arg_types);
2001
 
2002
          if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
2003
                         decl_arg_types))
2004
            /* They match!  */
2005
            candidates = tree_cons (NULL_TREE, fn, candidates);
2006
        }
2007
    }
2008
 
2009
  if (templates && TREE_CHAIN (templates))
2010
    {
2011
      /* We have:
2012
 
2013
           [temp.expl.spec]
2014
 
2015
           It is possible for a specialization with a given function
2016
           signature to be instantiated from more than one function
2017
           template.  In such cases, explicit specification of the
2018
           template arguments must be used to uniquely identify the
2019
           function template specialization being specialized.
2020
 
2021
         Note that here, there's no suggestion that we're supposed to
2022
         determine which of the candidate templates is most
2023
         specialized.  However, we, also have:
2024
 
2025
           [temp.func.order]
2026
 
2027
           Partial ordering of overloaded function template
2028
           declarations is used in the following contexts to select
2029
           the function template to which a function template
2030
           specialization refers:
2031
 
2032
           -- when an explicit specialization refers to a function
2033
              template.
2034
 
2035
         So, we do use the partial ordering rules, at least for now.
2036
         This extension can only serve to make invalid programs valid,
2037
         so it's safe.  And, there is strong anecdotal evidence that
2038
         the committee intended the partial ordering rules to apply;
2039
         the EDG front end has that behavior, and John Spicer claims
2040
         that the committee simply forgot to delete the wording in
2041
         [temp.expl.spec].  */
2042
      tree tmpl = most_specialized_instantiation (templates);
2043
      if (tmpl != error_mark_node)
2044
        {
2045
          templates = tmpl;
2046
          TREE_CHAIN (templates) = NULL_TREE;
2047
        }
2048
    }
2049
 
2050
  if (templates == NULL_TREE && candidates == NULL_TREE)
2051
    {
2052
      error ("template-id %qD for %q+D does not match any template "
2053
             "declaration", template_id, decl);
2054
      if (header_count && header_count != template_count + 1)
2055
        inform (input_location, "saw %d %<template<>%>, need %d for "
2056
                "specializing a member function template",
2057
                header_count, template_count + 1);
2058
      return error_mark_node;
2059
    }
2060
  else if ((templates && TREE_CHAIN (templates))
2061
           || (candidates && TREE_CHAIN (candidates))
2062
           || (templates && candidates))
2063
    {
2064
      error ("ambiguous template specialization %qD for %q+D",
2065
             template_id, decl);
2066
      candidates = chainon (candidates, templates);
2067
      print_candidates (candidates);
2068
      return error_mark_node;
2069
    }
2070
 
2071
  /* We have one, and exactly one, match.  */
2072
  if (candidates)
2073
    {
2074
      tree fn = TREE_VALUE (candidates);
2075
      *targs_out = copy_node (DECL_TI_ARGS (fn));
2076
      /* DECL is a re-declaration or partial instantiation of a template
2077
         function.  */
2078
      if (TREE_CODE (fn) == TEMPLATE_DECL)
2079
        return fn;
2080
      /* It was a specialization of an ordinary member function in a
2081
         template class.  */
2082
      return DECL_TI_TEMPLATE (fn);
2083
    }
2084
 
2085
  /* It was a specialization of a template.  */
2086
  targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
2087
  if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
2088
    {
2089
      *targs_out = copy_node (targs);
2090
      SET_TMPL_ARGS_LEVEL (*targs_out,
2091
                           TMPL_ARGS_DEPTH (*targs_out),
2092
                           TREE_PURPOSE (templates));
2093
    }
2094
  else
2095
    *targs_out = TREE_PURPOSE (templates);
2096
  return TREE_VALUE (templates);
2097
}
2098
 
2099
/* Returns a chain of parameter types, exactly like the SPEC_TYPES,
2100
   but with the default argument values filled in from those in the
2101
   TMPL_TYPES.  */
2102
 
2103
static tree
2104
copy_default_args_to_explicit_spec_1 (tree spec_types,
2105
                                      tree tmpl_types)
2106
{
2107
  tree new_spec_types;
2108
 
2109
  if (!spec_types)
2110
    return NULL_TREE;
2111
 
2112
  if (spec_types == void_list_node)
2113
    return void_list_node;
2114
 
2115
  /* Substitute into the rest of the list.  */
2116
  new_spec_types =
2117
    copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
2118
                                          TREE_CHAIN (tmpl_types));
2119
 
2120
  /* Add the default argument for this parameter.  */
2121
  return hash_tree_cons (TREE_PURPOSE (tmpl_types),
2122
                         TREE_VALUE (spec_types),
2123
                         new_spec_types);
2124
}
2125
 
2126
/* DECL is an explicit specialization.  Replicate default arguments
2127
   from the template it specializes.  (That way, code like:
2128
 
2129
     template <class T> void f(T = 3);
2130
     template <> void f(double);
2131
     void g () { f (); }
2132
 
2133
   works, as required.)  An alternative approach would be to look up
2134
   the correct default arguments at the call-site, but this approach
2135
   is consistent with how implicit instantiations are handled.  */
2136
 
2137
static void
2138
copy_default_args_to_explicit_spec (tree decl)
2139
{
2140
  tree tmpl;
2141
  tree spec_types;
2142
  tree tmpl_types;
2143
  tree new_spec_types;
2144
  tree old_type;
2145
  tree new_type;
2146
  tree t;
2147
  tree object_type = NULL_TREE;
2148
  tree in_charge = NULL_TREE;
2149
  tree vtt = NULL_TREE;
2150
 
2151
  /* See if there's anything we need to do.  */
2152
  tmpl = DECL_TI_TEMPLATE (decl);
2153
  tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
2154
  for (t = tmpl_types; t; t = TREE_CHAIN (t))
2155
    if (TREE_PURPOSE (t))
2156
      break;
2157
  if (!t)
2158
    return;
2159
 
2160
  old_type = TREE_TYPE (decl);
2161
  spec_types = TYPE_ARG_TYPES (old_type);
2162
 
2163
  if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2164
    {
2165
      /* Remove the this pointer, but remember the object's type for
2166
         CV quals.  */
2167
      object_type = TREE_TYPE (TREE_VALUE (spec_types));
2168
      spec_types = TREE_CHAIN (spec_types);
2169
      tmpl_types = TREE_CHAIN (tmpl_types);
2170
 
2171
      if (DECL_HAS_IN_CHARGE_PARM_P (decl))
2172
        {
2173
          /* DECL may contain more parameters than TMPL due to the extra
2174
             in-charge parameter in constructors and destructors.  */
2175
          in_charge = spec_types;
2176
          spec_types = TREE_CHAIN (spec_types);
2177
        }
2178
      if (DECL_HAS_VTT_PARM_P (decl))
2179
        {
2180
          vtt = spec_types;
2181
          spec_types = TREE_CHAIN (spec_types);
2182
        }
2183
    }
2184
 
2185
  /* Compute the merged default arguments.  */
2186
  new_spec_types =
2187
    copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
2188
 
2189
  /* Compute the new FUNCTION_TYPE.  */
2190
  if (object_type)
2191
    {
2192
      if (vtt)
2193
        new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
2194
                                         TREE_VALUE (vtt),
2195
                                         new_spec_types);
2196
 
2197
      if (in_charge)
2198
        /* Put the in-charge parameter back.  */
2199
        new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
2200
                                         TREE_VALUE (in_charge),
2201
                                         new_spec_types);
2202
 
2203
      new_type = build_method_type_directly (object_type,
2204
                                             TREE_TYPE (old_type),
2205
                                             new_spec_types);
2206
    }
2207
  else
2208
    new_type = build_function_type (TREE_TYPE (old_type),
2209
                                    new_spec_types);
2210
  new_type = cp_build_type_attribute_variant (new_type,
2211
                                              TYPE_ATTRIBUTES (old_type));
2212
  new_type = build_exception_variant (new_type,
2213
                                      TYPE_RAISES_EXCEPTIONS (old_type));
2214
  TREE_TYPE (decl) = new_type;
2215
}
2216
 
2217
/* Check to see if the function just declared, as indicated in
2218
   DECLARATOR, and in DECL, is a specialization of a function
2219
   template.  We may also discover that the declaration is an explicit
2220
   instantiation at this point.
2221
 
2222
   Returns DECL, or an equivalent declaration that should be used
2223
   instead if all goes well.  Issues an error message if something is
2224
   amiss.  Returns error_mark_node if the error is not easily
2225
   recoverable.
2226
 
2227
   FLAGS is a bitmask consisting of the following flags:
2228
 
2229
   2: The function has a definition.
2230
   4: The function is a friend.
2231
 
2232
   The TEMPLATE_COUNT is the number of references to qualifying
2233
   template classes that appeared in the name of the function.  For
2234
   example, in
2235
 
2236
     template <class T> struct S { void f(); };
2237
     void S<int>::f();
2238
 
2239
   the TEMPLATE_COUNT would be 1.  However, explicitly specialized
2240
   classes are not counted in the TEMPLATE_COUNT, so that in
2241
 
2242
     template <class T> struct S {};
2243
     template <> struct S<int> { void f(); }
2244
     template <> void S<int>::f();
2245
 
2246
   the TEMPLATE_COUNT would be 0.  (Note that this declaration is
2247
   invalid; there should be no template <>.)
2248
 
2249
   If the function is a specialization, it is marked as such via
2250
   DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
2251
   is set up correctly, and it is added to the list of specializations
2252
   for that template.  */
2253
 
2254
tree
2255
check_explicit_specialization (tree declarator,
2256
                               tree decl,
2257
                               int template_count,
2258
                               int flags)
2259
{
2260
  int have_def = flags & 2;
2261
  int is_friend = flags & 4;
2262
  int specialization = 0;
2263
  int explicit_instantiation = 0;
2264
  int member_specialization = 0;
2265
  tree ctype = DECL_CLASS_CONTEXT (decl);
2266
  tree dname = DECL_NAME (decl);
2267
  tmpl_spec_kind tsk;
2268
 
2269
  if (is_friend)
2270
    {
2271
      if (!processing_specialization)
2272
        tsk = tsk_none;
2273
      else
2274
        tsk = tsk_excessive_parms;
2275
    }
2276
  else
2277
    tsk = current_tmpl_spec_kind (template_count);
2278
 
2279
  switch (tsk)
2280
    {
2281
    case tsk_none:
2282
      if (processing_specialization)
2283
        {
2284
          specialization = 1;
2285
          SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2286
        }
2287
      else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2288
        {
2289
          if (is_friend)
2290
            /* This could be something like:
2291
 
2292
               template <class T> void f(T);
2293
               class S { friend void f<>(int); }  */
2294
            specialization = 1;
2295
          else
2296
            {
2297
              /* This case handles bogus declarations like template <>
2298
                 template <class T> void f<int>(); */
2299
 
2300
              error ("template-id %qD in declaration of primary template",
2301
                     declarator);
2302
              return decl;
2303
            }
2304
        }
2305
      break;
2306
 
2307
    case tsk_invalid_member_spec:
2308
      /* The error has already been reported in
2309
         check_specialization_scope.  */
2310
      return error_mark_node;
2311
 
2312
    case tsk_invalid_expl_inst:
2313
      error ("template parameter list used in explicit instantiation");
2314
 
2315
      /* Fall through.  */
2316
 
2317
    case tsk_expl_inst:
2318
      if (have_def)
2319
        error ("definition provided for explicit instantiation");
2320
 
2321
      explicit_instantiation = 1;
2322
      break;
2323
 
2324
    case tsk_excessive_parms:
2325
    case tsk_insufficient_parms:
2326
      if (tsk == tsk_excessive_parms)
2327
        error ("too many template parameter lists in declaration of %qD",
2328
               decl);
2329
      else if (template_header_count)
2330
        error("too few template parameter lists in declaration of %qD", decl);
2331
      else
2332
        error("explicit specialization of %qD must be introduced by "
2333
              "%<template <>%>", decl);
2334
 
2335
      /* Fall through.  */
2336
    case tsk_expl_spec:
2337
      SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2338
      if (ctype)
2339
        member_specialization = 1;
2340
      else
2341
        specialization = 1;
2342
      break;
2343
 
2344
    case tsk_template:
2345
      if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2346
        {
2347
          /* This case handles bogus declarations like template <>
2348
             template <class T> void f<int>(); */
2349
 
2350
          if (uses_template_parms (declarator))
2351
            error ("function template partial specialization %qD "
2352
                   "is not allowed", declarator);
2353
          else
2354
            error ("template-id %qD in declaration of primary template",
2355
                   declarator);
2356
          return decl;
2357
        }
2358
 
2359
      if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2360
        /* This is a specialization of a member template, without
2361
           specialization the containing class.  Something like:
2362
 
2363
             template <class T> struct S {
2364
               template <class U> void f (U);
2365
             };
2366
             template <> template <class U> void S<int>::f(U) {}
2367
 
2368
           That's a specialization -- but of the entire template.  */
2369
        specialization = 1;
2370
      break;
2371
 
2372
    default:
2373
      gcc_unreachable ();
2374
    }
2375
 
2376
  if (specialization || member_specialization)
2377
    {
2378
      tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2379
      for (; t; t = TREE_CHAIN (t))
2380
        if (TREE_PURPOSE (t))
2381
          {
2382
            permerror (input_location,
2383
                       "default argument specified in explicit specialization");
2384
            break;
2385
          }
2386
    }
2387
 
2388
  if (specialization || member_specialization || explicit_instantiation)
2389
    {
2390
      tree tmpl = NULL_TREE;
2391
      tree targs = NULL_TREE;
2392
 
2393
      /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2394
      if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2395
        {
2396
          tree fns;
2397
 
2398
          gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2399
          if (ctype)
2400
            fns = dname;
2401
          else
2402
            {
2403
              /* If there is no class context, the explicit instantiation
2404
                 must be at namespace scope.  */
2405
              gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2406
 
2407
              /* Find the namespace binding, using the declaration
2408
                 context.  */
2409
              fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2410
                                           false, true);
2411
              if (fns == error_mark_node || !is_overloaded_fn (fns))
2412
                {
2413
                  error ("%qD is not a template function", dname);
2414
                  fns = error_mark_node;
2415
                }
2416
              else
2417
                {
2418
                  tree fn = OVL_CURRENT (fns);
2419
                  if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2420
                                                CP_DECL_CONTEXT (fn)))
2421
                    error ("%qD is not declared in %qD",
2422
                           decl, current_namespace);
2423
                }
2424
            }
2425
 
2426
          declarator = lookup_template_function (fns, NULL_TREE);
2427
        }
2428
 
2429
      if (declarator == error_mark_node)
2430
        return error_mark_node;
2431
 
2432
      if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2433
        {
2434
          if (!explicit_instantiation)
2435
            /* A specialization in class scope.  This is invalid,
2436
               but the error will already have been flagged by
2437
               check_specialization_scope.  */
2438
            return error_mark_node;
2439
          else
2440
            {
2441
              /* It's not valid to write an explicit instantiation in
2442
                 class scope, e.g.:
2443
 
2444
                   class C { template void f(); }
2445
 
2446
                   This case is caught by the parser.  However, on
2447
                   something like:
2448
 
2449
                   template class C { void f(); };
2450
 
2451
                   (which is invalid) we can get here.  The error will be
2452
                   issued later.  */
2453
              ;
2454
            }
2455
 
2456
          return decl;
2457
        }
2458
      else if (ctype != NULL_TREE
2459
               && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2460
                   IDENTIFIER_NODE))
2461
        {
2462
          /* Find the list of functions in ctype that have the same
2463
             name as the declared function.  */
2464
          tree name = TREE_OPERAND (declarator, 0);
2465
          tree fns = NULL_TREE;
2466
          int idx;
2467
 
2468
          if (constructor_name_p (name, ctype))
2469
            {
2470
              int is_constructor = DECL_CONSTRUCTOR_P (decl);
2471
 
2472
              if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2473
                  : !CLASSTYPE_DESTRUCTORS (ctype))
2474
                {
2475
                  /* From [temp.expl.spec]:
2476
 
2477
                     If such an explicit specialization for the member
2478
                     of a class template names an implicitly-declared
2479
                     special member function (clause _special_), the
2480
                     program is ill-formed.
2481
 
2482
                     Similar language is found in [temp.explicit].  */
2483
                  error ("specialization of implicitly-declared special member function");
2484
                  return error_mark_node;
2485
                }
2486
 
2487
              name = is_constructor ? ctor_identifier : dtor_identifier;
2488
            }
2489
 
2490
          if (!DECL_CONV_FN_P (decl))
2491
            {
2492
              idx = lookup_fnfields_1 (ctype, name);
2493
              if (idx >= 0)
2494
                fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2495
            }
2496
          else
2497
            {
2498
              VEC(tree,gc) *methods;
2499
              tree ovl;
2500
 
2501
              /* For a type-conversion operator, we cannot do a
2502
                 name-based lookup.  We might be looking for `operator
2503
                 int' which will be a specialization of `operator T'.
2504
                 So, we find *all* the conversion operators, and then
2505
                 select from them.  */
2506
              fns = NULL_TREE;
2507
 
2508
              methods = CLASSTYPE_METHOD_VEC (ctype);
2509
              if (methods)
2510
                for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2511
                     VEC_iterate (tree, methods, idx, ovl);
2512
                     ++idx)
2513
                  {
2514
                    if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2515
                      /* There are no more conversion functions.  */
2516
                      break;
2517
 
2518
                    /* Glue all these conversion functions together
2519
                       with those we already have.  */
2520
                    for (; ovl; ovl = OVL_NEXT (ovl))
2521
                      fns = ovl_cons (OVL_CURRENT (ovl), fns);
2522
                  }
2523
            }
2524
 
2525
          if (fns == NULL_TREE)
2526
            {
2527
              error ("no member function %qD declared in %qT", name, ctype);
2528
              return error_mark_node;
2529
            }
2530
          else
2531
            TREE_OPERAND (declarator, 0) = fns;
2532
        }
2533
 
2534
      /* Figure out what exactly is being specialized at this point.
2535
         Note that for an explicit instantiation, even one for a
2536
         member function, we cannot tell apriori whether the
2537
         instantiation is for a member template, or just a member
2538
         function of a template class.  Even if a member template is
2539
         being instantiated, the member template arguments may be
2540
         elided if they can be deduced from the rest of the
2541
         declaration.  */
2542
      tmpl = determine_specialization (declarator, decl,
2543
                                       &targs,
2544
                                       member_specialization,
2545
                                       template_count,
2546
                                       tsk);
2547
 
2548
      if (!tmpl || tmpl == error_mark_node)
2549
        /* We couldn't figure out what this declaration was
2550
           specializing.  */
2551
        return error_mark_node;
2552
      else
2553
        {
2554
          tree gen_tmpl = most_general_template (tmpl);
2555
 
2556
          if (explicit_instantiation)
2557
            {
2558
              /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2559
                 is done by do_decl_instantiation later.  */
2560
 
2561
              int arg_depth = TMPL_ARGS_DEPTH (targs);
2562
              int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2563
 
2564
              if (arg_depth > parm_depth)
2565
                {
2566
                  /* If TMPL is not the most general template (for
2567
                     example, if TMPL is a friend template that is
2568
                     injected into namespace scope), then there will
2569
                     be too many levels of TARGS.  Remove some of them
2570
                     here.  */
2571
                  int i;
2572
                  tree new_targs;
2573
 
2574
                  new_targs = make_tree_vec (parm_depth);
2575
                  for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2576
                    TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2577
                      = TREE_VEC_ELT (targs, i);
2578
                  targs = new_targs;
2579
                }
2580
 
2581
              return instantiate_template (tmpl, targs, tf_error);
2582
            }
2583
 
2584
          /* If we thought that the DECL was a member function, but it
2585
             turns out to be specializing a static member function,
2586
             make DECL a static member function as well.  */
2587
          if (DECL_STATIC_FUNCTION_P (tmpl)
2588
              && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2589
            revert_static_member_fn (decl);
2590
 
2591
          /* If this is a specialization of a member template of a
2592
             template class, we want to return the TEMPLATE_DECL, not
2593
             the specialization of it.  */
2594
          if (tsk == tsk_template)
2595
            {
2596
              tree result = DECL_TEMPLATE_RESULT (tmpl);
2597
              SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2598
              DECL_INITIAL (result) = NULL_TREE;
2599
              if (have_def)
2600
                {
2601
                  tree parm;
2602
                  DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2603
                  DECL_SOURCE_LOCATION (result)
2604
                    = DECL_SOURCE_LOCATION (decl);
2605
                  /* We want to use the argument list specified in the
2606
                     definition, not in the original declaration.  */
2607
                  DECL_ARGUMENTS (result) = DECL_ARGUMENTS (decl);
2608
                  for (parm = DECL_ARGUMENTS (result); parm;
2609
                       parm = DECL_CHAIN (parm))
2610
                    DECL_CONTEXT (parm) = result;
2611
                }
2612
              return register_specialization (tmpl, gen_tmpl, targs,
2613
                                              is_friend, 0);
2614
            }
2615
 
2616
          /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2617
          DECL_TEMPLATE_INFO (decl) = build_template_info (tmpl, targs);
2618
 
2619
          /* Inherit default function arguments from the template
2620
             DECL is specializing.  */
2621
          copy_default_args_to_explicit_spec (decl);
2622
 
2623
          /* This specialization has the same protection as the
2624
             template it specializes.  */
2625
          TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2626
          TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2627
 
2628
          /* 7.1.1-1 [dcl.stc]
2629
 
2630
             A storage-class-specifier shall not be specified in an
2631
             explicit specialization...
2632
 
2633
             The parser rejects these, so unless action is taken here,
2634
             explicit function specializations will always appear with
2635
             global linkage.
2636
 
2637
             The action recommended by the C++ CWG in response to C++
2638
             defect report 605 is to make the storage class and linkage
2639
             of the explicit specialization match the templated function:
2640
 
2641
             http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2642
           */
2643
          if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2644
            {
2645
              tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2646
              gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2647
 
2648
              /* This specialization has the same linkage and visibility as
2649
                 the function template it specializes.  */
2650
              TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2651
              if (! TREE_PUBLIC (decl))
2652
                {
2653
                  DECL_INTERFACE_KNOWN (decl) = 1;
2654
                  DECL_NOT_REALLY_EXTERN (decl) = 1;
2655
                }
2656
              DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2657
              if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2658
                {
2659
                  DECL_VISIBILITY_SPECIFIED (decl) = 1;
2660
                  DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2661
                }
2662
            }
2663
 
2664
          /* If DECL is a friend declaration, declared using an
2665
             unqualified name, the namespace associated with DECL may
2666
             have been set incorrectly.  For example, in:
2667
 
2668
               template <typename T> void f(T);
2669
               namespace N {
2670
                 struct S { friend void f<int>(int); }
2671
               }
2672
 
2673
             we will have set the DECL_CONTEXT for the friend
2674
             declaration to N, rather than to the global namespace.  */
2675
          if (DECL_NAMESPACE_SCOPE_P (decl))
2676
            DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2677
 
2678
          if (is_friend && !have_def)
2679
            /* This is not really a declaration of a specialization.
2680
               It's just the name of an instantiation.  But, it's not
2681
               a request for an instantiation, either.  */
2682
            SET_DECL_IMPLICIT_INSTANTIATION (decl);
2683
          else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2684
            /* This is indeed a specialization.  In case of constructors
2685
               and destructors, we need in-charge and not-in-charge
2686
               versions in V3 ABI.  */
2687
            clone_function_decl (decl, /*update_method_vec_p=*/0);
2688
 
2689
          /* Register this specialization so that we can find it
2690
             again.  */
2691
          decl = register_specialization (decl, gen_tmpl, targs, is_friend, 0);
2692
        }
2693
    }
2694
 
2695
  return decl;
2696
}
2697
 
2698
/* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2699
   parameters.  These are represented in the same format used for
2700
   DECL_TEMPLATE_PARMS.  */
2701
 
2702
int
2703
comp_template_parms (const_tree parms1, const_tree parms2)
2704
{
2705
  const_tree p1;
2706
  const_tree p2;
2707
 
2708
  if (parms1 == parms2)
2709
    return 1;
2710
 
2711
  for (p1 = parms1, p2 = parms2;
2712
       p1 != NULL_TREE && p2 != NULL_TREE;
2713
       p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2714
    {
2715
      tree t1 = TREE_VALUE (p1);
2716
      tree t2 = TREE_VALUE (p2);
2717
      int i;
2718
 
2719
      gcc_assert (TREE_CODE (t1) == TREE_VEC);
2720
      gcc_assert (TREE_CODE (t2) == TREE_VEC);
2721
 
2722
      if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2723
        return 0;
2724
 
2725
      for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2726
        {
2727
          tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2728
          tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2729
 
2730
          /* If either of the template parameters are invalid, assume
2731
             they match for the sake of error recovery. */
2732
          if (parm1 == error_mark_node || parm2 == error_mark_node)
2733
            return 1;
2734
 
2735
          if (TREE_CODE (parm1) != TREE_CODE (parm2))
2736
            return 0;
2737
 
2738
          if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2739
              && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2740
                  == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2741
            continue;
2742
          else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2743
            return 0;
2744
        }
2745
    }
2746
 
2747
  if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2748
    /* One set of parameters has more parameters lists than the
2749
       other.  */
2750
    return 0;
2751
 
2752
  return 1;
2753
}
2754
 
2755
/* Determine whether PARM is a parameter pack.  */
2756
 
2757
bool
2758
template_parameter_pack_p (const_tree parm)
2759
{
2760
  /* Determine if we have a non-type template parameter pack.  */
2761
  if (TREE_CODE (parm) == PARM_DECL)
2762
    return (DECL_TEMPLATE_PARM_P (parm)
2763
            && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2764
  if (TREE_CODE (parm) == TEMPLATE_PARM_INDEX)
2765
    return TEMPLATE_PARM_PARAMETER_PACK (parm);
2766
 
2767
  /* If this is a list of template parameters, we could get a
2768
     TYPE_DECL or a TEMPLATE_DECL.  */
2769
  if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2770
    parm = TREE_TYPE (parm);
2771
 
2772
  /* Otherwise it must be a type template parameter.  */
2773
  return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2774
           || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2775
          && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2776
}
2777
 
2778
/* Determine if T is a function parameter pack.  */
2779
 
2780
bool
2781
function_parameter_pack_p (const_tree t)
2782
{
2783
  if (t && TREE_CODE (t) == PARM_DECL)
2784
    return FUNCTION_PARAMETER_PACK_P (t);
2785
  return false;
2786
}
2787
 
2788
/* Return the function template declaration of PRIMARY_FUNC_TMPL_INST.
2789
   PRIMARY_FUNC_TMPL_INST is a primary function template instantiation.  */
2790
 
2791
tree
2792
get_function_template_decl (const_tree primary_func_tmpl_inst)
2793
{
2794
  if (! primary_func_tmpl_inst
2795
      || TREE_CODE (primary_func_tmpl_inst) != FUNCTION_DECL
2796
      || ! primary_template_instantiation_p (primary_func_tmpl_inst))
2797
    return NULL;
2798
 
2799
  return DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (primary_func_tmpl_inst));
2800
}
2801
 
2802
/* Return true iff the function parameter PARAM_DECL was expanded
2803
   from the function parameter pack PACK.  */
2804
 
2805
bool
2806
function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
2807
{
2808
  if (DECL_ARTIFICIAL (param_decl)
2809
      || !function_parameter_pack_p (pack))
2810
    return false;
2811
 
2812
  /* The parameter pack and its pack arguments have the same
2813
     DECL_PARM_INDEX.  */
2814
  return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
2815
}
2816
 
2817
/* Determine whether ARGS describes a variadic template args list,
2818
   i.e., one that is terminated by a template argument pack.  */
2819
 
2820
static bool
2821
template_args_variadic_p (tree args)
2822
{
2823
  int nargs;
2824
  tree last_parm;
2825
 
2826
  if (args == NULL_TREE)
2827
    return false;
2828
 
2829
  args = INNERMOST_TEMPLATE_ARGS (args);
2830
  nargs = TREE_VEC_LENGTH (args);
2831
 
2832
  if (nargs == 0)
2833
    return false;
2834
 
2835
  last_parm = TREE_VEC_ELT (args, nargs - 1);
2836
 
2837
  return ARGUMENT_PACK_P (last_parm);
2838
}
2839
 
2840
/* Generate a new name for the parameter pack name NAME (an
2841
   IDENTIFIER_NODE) that incorporates its */
2842
 
2843
static tree
2844
make_ith_pack_parameter_name (tree name, int i)
2845
{
2846
  /* Munge the name to include the parameter index.  */
2847
#define NUMBUF_LEN 128
2848
  char numbuf[NUMBUF_LEN];
2849
  char* newname;
2850
  int newname_len;
2851
 
2852
  snprintf (numbuf, NUMBUF_LEN, "%i", i);
2853
  newname_len = IDENTIFIER_LENGTH (name)
2854
                + strlen (numbuf) + 2;
2855
  newname = (char*)alloca (newname_len);
2856
  snprintf (newname, newname_len,
2857
            "%s#%i", IDENTIFIER_POINTER (name), i);
2858
  return get_identifier (newname);
2859
}
2860
 
2861
/* Return true if T is a primary function, class or alias template
2862
   instantiation.  */
2863
 
2864
bool
2865
primary_template_instantiation_p (const_tree t)
2866
{
2867
  if (!t)
2868
    return false;
2869
 
2870
  if (TREE_CODE (t) == FUNCTION_DECL)
2871
    return DECL_LANG_SPECIFIC (t)
2872
           && DECL_TEMPLATE_INSTANTIATION (t)
2873
           && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t));
2874
  else if (CLASS_TYPE_P (t) && !TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
2875
    return CLASSTYPE_TEMPLATE_INSTANTIATION (t)
2876
           && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t));
2877
  else if (TYPE_P (t)
2878
           && TYPE_TEMPLATE_INFO (t)
2879
           && PRIMARY_TEMPLATE_P (TYPE_TI_TEMPLATE (t))
2880
           && DECL_TEMPLATE_INSTANTIATION (TYPE_NAME (t)))
2881
    return true;
2882
  return false;
2883
}
2884
 
2885
/* Return true if PARM is a template template parameter.  */
2886
 
2887
bool
2888
template_template_parameter_p (const_tree parm)
2889
{
2890
  return DECL_TEMPLATE_TEMPLATE_PARM_P (parm);
2891
}
2892
 
2893
/* Return the template parameters of T if T is a
2894
   primary template instantiation, NULL otherwise.  */
2895
 
2896
tree
2897
get_primary_template_innermost_parameters (const_tree t)
2898
{
2899
  tree parms = NULL, template_info = NULL;
2900
 
2901
  if ((template_info = get_template_info (t))
2902
      && primary_template_instantiation_p (t))
2903
    parms = INNERMOST_TEMPLATE_PARMS
2904
        (DECL_TEMPLATE_PARMS (TI_TEMPLATE (template_info)));
2905
 
2906
  return parms;
2907
}
2908
 
2909
/* Return the template parameters of the LEVELth level from the full list
2910
   of template parameters PARMS.  */
2911
 
2912
tree
2913
get_template_parms_at_level (tree parms, int level)
2914
{
2915
  tree p;
2916
  if (!parms
2917
      || TREE_CODE (parms) != TREE_LIST
2918
      || level > TMPL_PARMS_DEPTH (parms))
2919
    return NULL_TREE;
2920
 
2921
  for (p = parms; p; p = TREE_CHAIN (p))
2922
    if (TMPL_PARMS_DEPTH (p) == level)
2923
      return p;
2924
 
2925
  return NULL_TREE;
2926
}
2927
 
2928
/* Returns the template arguments of T if T is a template instantiation,
2929
   NULL otherwise.  */
2930
 
2931
tree
2932
get_template_innermost_arguments (const_tree t)
2933
{
2934
  tree args = NULL, template_info = NULL;
2935
 
2936
  if ((template_info = get_template_info (t))
2937
      && TI_ARGS (template_info))
2938
    args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (template_info));
2939
 
2940
  return args;
2941
}
2942
 
2943
/* Return the argument pack elements of T if T is a template argument pack,
2944
   NULL otherwise.  */
2945
 
2946
tree
2947
get_template_argument_pack_elems (const_tree t)
2948
{
2949
  if (TREE_CODE (t) != TYPE_ARGUMENT_PACK
2950
      && TREE_CODE (t) != NONTYPE_ARGUMENT_PACK)
2951
    return NULL;
2952
 
2953
  return ARGUMENT_PACK_ARGS (t);
2954
}
2955
 
2956
/* Structure used to track the progress of find_parameter_packs_r.  */
2957
struct find_parameter_pack_data
2958
{
2959
  /* TREE_LIST that will contain all of the parameter packs found by
2960
     the traversal.  */
2961
  tree* parameter_packs;
2962
 
2963
  /* Set of AST nodes that have been visited by the traversal.  */
2964
  struct pointer_set_t *visited;
2965
};
2966
 
2967
/* Identifies all of the argument packs that occur in a template
2968
   argument and appends them to the TREE_LIST inside DATA, which is a
2969
   find_parameter_pack_data structure. This is a subroutine of
2970
   make_pack_expansion and uses_parameter_packs.  */
2971
static tree
2972
find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2973
{
2974
  tree t = *tp;
2975
  struct find_parameter_pack_data* ppd =
2976
    (struct find_parameter_pack_data*)data;
2977
  bool parameter_pack_p = false;
2978
 
2979
  /* Handle type aliases/typedefs.  */
2980
  if (TYPE_P (t)
2981
      && TYPE_NAME (t)
2982
      && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL
2983
      && TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
2984
    {
2985
      if (TYPE_TEMPLATE_INFO (t))
2986
        cp_walk_tree (&TYPE_TI_ARGS (t),
2987
                      &find_parameter_packs_r,
2988
                      ppd, ppd->visited);
2989
      *walk_subtrees = 0;
2990
      return NULL_TREE;
2991
    }
2992
 
2993
  /* Identify whether this is a parameter pack or not.  */
2994
  switch (TREE_CODE (t))
2995
    {
2996
    case TEMPLATE_PARM_INDEX:
2997
      if (TEMPLATE_PARM_PARAMETER_PACK (t))
2998
        parameter_pack_p = true;
2999
      break;
3000
 
3001
    case TEMPLATE_TYPE_PARM:
3002
      t = TYPE_MAIN_VARIANT (t);
3003
    case TEMPLATE_TEMPLATE_PARM:
3004
      if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3005
        parameter_pack_p = true;
3006
      break;
3007
 
3008
    case PARM_DECL:
3009
      if (FUNCTION_PARAMETER_PACK_P (t))
3010
        {
3011
          /* We don't want to walk into the type of a PARM_DECL,
3012
             because we don't want to see the type parameter pack.  */
3013
          *walk_subtrees = 0;
3014
          parameter_pack_p = true;
3015
        }
3016
      break;
3017
 
3018
    case BASES:
3019
      parameter_pack_p = true;
3020
      break;
3021
    default:
3022
      /* Not a parameter pack.  */
3023
      break;
3024
    }
3025
 
3026
  if (parameter_pack_p)
3027
    {
3028
      /* Add this parameter pack to the list.  */
3029
      *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
3030
    }
3031
 
3032
  if (TYPE_P (t))
3033
    cp_walk_tree (&TYPE_CONTEXT (t),
3034
                  &find_parameter_packs_r, ppd, ppd->visited);
3035
 
3036
  /* This switch statement will return immediately if we don't find a
3037
     parameter pack.  */
3038
  switch (TREE_CODE (t))
3039
    {
3040
    case TEMPLATE_PARM_INDEX:
3041
      return NULL_TREE;
3042
 
3043
    case BOUND_TEMPLATE_TEMPLATE_PARM:
3044
      /* Check the template itself.  */
3045
      cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)),
3046
                    &find_parameter_packs_r, ppd, ppd->visited);
3047
      /* Check the template arguments.  */
3048
      cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd,
3049
                    ppd->visited);
3050
      *walk_subtrees = 0;
3051
      return NULL_TREE;
3052
 
3053
    case TEMPLATE_TYPE_PARM:
3054
    case TEMPLATE_TEMPLATE_PARM:
3055
      return NULL_TREE;
3056
 
3057
    case PARM_DECL:
3058
      return NULL_TREE;
3059
 
3060
    case RECORD_TYPE:
3061
      if (TYPE_PTRMEMFUNC_P (t))
3062
        return NULL_TREE;
3063
      /* Fall through.  */
3064
 
3065
    case UNION_TYPE:
3066
    case ENUMERAL_TYPE:
3067
      if (TYPE_TEMPLATE_INFO (t))
3068
        cp_walk_tree (&TI_ARGS (TYPE_TEMPLATE_INFO (t)),
3069
                      &find_parameter_packs_r, ppd, ppd->visited);
3070
 
3071
      *walk_subtrees = 0;
3072
      return NULL_TREE;
3073
 
3074
    case CONSTRUCTOR:
3075
    case TEMPLATE_DECL:
3076
      cp_walk_tree (&TREE_TYPE (t),
3077
                    &find_parameter_packs_r, ppd, ppd->visited);
3078
      return NULL_TREE;
3079
 
3080
    case TYPENAME_TYPE:
3081
      cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
3082
                   ppd, ppd->visited);
3083
      *walk_subtrees = 0;
3084
      return NULL_TREE;
3085
 
3086
    case TYPE_PACK_EXPANSION:
3087
    case EXPR_PACK_EXPANSION:
3088
      *walk_subtrees = 0;
3089
      return NULL_TREE;
3090
 
3091
    case INTEGER_TYPE:
3092
      cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r,
3093
                    ppd, ppd->visited);
3094
      *walk_subtrees = 0;
3095
      return NULL_TREE;
3096
 
3097
    case IDENTIFIER_NODE:
3098
      cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd,
3099
                    ppd->visited);
3100
      *walk_subtrees = 0;
3101
      return NULL_TREE;
3102
 
3103
    default:
3104
      return NULL_TREE;
3105
    }
3106
 
3107
  return NULL_TREE;
3108
}
3109
 
3110
/* Determines if the expression or type T uses any parameter packs.  */
3111
bool
3112
uses_parameter_packs (tree t)
3113
{
3114
  tree parameter_packs = NULL_TREE;
3115
  struct find_parameter_pack_data ppd;
3116
  ppd.parameter_packs = &parameter_packs;
3117
  ppd.visited = pointer_set_create ();
3118
  cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3119
  pointer_set_destroy (ppd.visited);
3120
  return parameter_packs != NULL_TREE;
3121
}
3122
 
3123
/* Turn ARG, which may be an expression, type, or a TREE_LIST
3124
   representation a base-class initializer into a parameter pack
3125
   expansion. If all goes well, the resulting node will be an
3126
   EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
3127
   respectively.  */
3128
tree
3129
make_pack_expansion (tree arg)
3130
{
3131
  tree result;
3132
  tree parameter_packs = NULL_TREE;
3133
  bool for_types = false;
3134
  struct find_parameter_pack_data ppd;
3135
 
3136
  if (!arg || arg == error_mark_node)
3137
    return arg;
3138
 
3139
  if (TREE_CODE (arg) == TREE_LIST)
3140
    {
3141
      /* The only time we will see a TREE_LIST here is for a base
3142
         class initializer.  In this case, the TREE_PURPOSE will be a
3143
         _TYPE node (representing the base class expansion we're
3144
         initializing) and the TREE_VALUE will be a TREE_LIST
3145
         containing the initialization arguments.
3146
 
3147
         The resulting expansion looks somewhat different from most
3148
         expansions. Rather than returning just one _EXPANSION, we
3149
         return a TREE_LIST whose TREE_PURPOSE is a
3150
         TYPE_PACK_EXPANSION containing the bases that will be
3151
         initialized.  The TREE_VALUE will be identical to the
3152
         original TREE_VALUE, which is a list of arguments that will
3153
         be passed to each base.  We do not introduce any new pack
3154
         expansion nodes into the TREE_VALUE (although it is possible
3155
         that some already exist), because the TREE_PURPOSE and
3156
         TREE_VALUE all need to be expanded together with the same
3157
         _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
3158
         resulting TREE_PURPOSE will mention the parameter packs in
3159
         both the bases and the arguments to the bases.  */
3160
      tree purpose;
3161
      tree value;
3162
      tree parameter_packs = NULL_TREE;
3163
 
3164
      /* Determine which parameter packs will be used by the base
3165
         class expansion.  */
3166
      ppd.visited = pointer_set_create ();
3167
      ppd.parameter_packs = &parameter_packs;
3168
      cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r,
3169
                    &ppd, ppd.visited);
3170
 
3171
      if (parameter_packs == NULL_TREE)
3172
        {
3173
          error ("base initializer expansion %<%T%> contains no parameter packs", arg);
3174
          pointer_set_destroy (ppd.visited);
3175
          return error_mark_node;
3176
        }
3177
 
3178
      if (TREE_VALUE (arg) != void_type_node)
3179
        {
3180
          /* Collect the sets of parameter packs used in each of the
3181
             initialization arguments.  */
3182
          for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3183
            {
3184
              /* Determine which parameter packs will be expanded in this
3185
                 argument.  */
3186
              cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r,
3187
                            &ppd, ppd.visited);
3188
            }
3189
        }
3190
 
3191
      pointer_set_destroy (ppd.visited);
3192
 
3193
      /* Create the pack expansion type for the base type.  */
3194
      purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3195
      SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3196
      PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3197
 
3198
      /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3199
         they will rarely be compared to anything.  */
3200
      SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3201
 
3202
      return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3203
    }
3204
 
3205
  if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3206
    for_types = true;
3207
 
3208
  /* Build the PACK_EXPANSION_* node.  */
3209
  result = for_types
3210
     ? cxx_make_type (TYPE_PACK_EXPANSION)
3211
     : make_node (EXPR_PACK_EXPANSION);
3212
  SET_PACK_EXPANSION_PATTERN (result, arg);
3213
  if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3214
    {
3215
      /* Propagate type and const-expression information.  */
3216
      TREE_TYPE (result) = TREE_TYPE (arg);
3217
      TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3218
    }
3219
  else
3220
    /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3221
       they will rarely be compared to anything.  */
3222
    SET_TYPE_STRUCTURAL_EQUALITY (result);
3223
 
3224
  /* Determine which parameter packs will be expanded.  */
3225
  ppd.parameter_packs = &parameter_packs;
3226
  ppd.visited = pointer_set_create ();
3227
  cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
3228
  pointer_set_destroy (ppd.visited);
3229
 
3230
  /* Make sure we found some parameter packs.  */
3231
  if (parameter_packs == NULL_TREE)
3232
    {
3233
      if (TYPE_P (arg))
3234
        error ("expansion pattern %<%T%> contains no argument packs", arg);
3235
      else
3236
        error ("expansion pattern %<%E%> contains no argument packs", arg);
3237
      return error_mark_node;
3238
    }
3239
  PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
3240
 
3241
  PACK_EXPANSION_LOCAL_P (result) = at_function_scope_p ();
3242
 
3243
  return result;
3244
}
3245
 
3246
/* Checks T for any "bare" parameter packs, which have not yet been
3247
   expanded, and issues an error if any are found. This operation can
3248
   only be done on full expressions or types (e.g., an expression
3249
   statement, "if" condition, etc.), because we could have expressions like:
3250
 
3251
     foo(f(g(h(args)))...)
3252
 
3253
   where "args" is a parameter pack. check_for_bare_parameter_packs
3254
   should not be called for the subexpressions args, h(args),
3255
   g(h(args)), or f(g(h(args))), because we would produce erroneous
3256
   error messages.
3257
 
3258
   Returns TRUE and emits an error if there were bare parameter packs,
3259
   returns FALSE otherwise.  */
3260
bool
3261
check_for_bare_parameter_packs (tree t)
3262
{
3263
  tree parameter_packs = NULL_TREE;
3264
  struct find_parameter_pack_data ppd;
3265
 
3266
  if (!processing_template_decl || !t || t == error_mark_node)
3267
    return false;
3268
 
3269
  if (TREE_CODE (t) == TYPE_DECL)
3270
    t = TREE_TYPE (t);
3271
 
3272
  ppd.parameter_packs = &parameter_packs;
3273
  ppd.visited = pointer_set_create ();
3274
  cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3275
  pointer_set_destroy (ppd.visited);
3276
 
3277
  if (parameter_packs)
3278
    {
3279
      error ("parameter packs not expanded with %<...%>:");
3280
      while (parameter_packs)
3281
        {
3282
          tree pack = TREE_VALUE (parameter_packs);
3283
          tree name = NULL_TREE;
3284
 
3285
          if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
3286
              || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
3287
            name = TYPE_NAME (pack);
3288
          else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
3289
            name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
3290
          else
3291
            name = DECL_NAME (pack);
3292
 
3293
          if (name)
3294
            inform (input_location, "        %qD", name);
3295
          else
3296
            inform (input_location, "        <anonymous>");
3297
 
3298
          parameter_packs = TREE_CHAIN (parameter_packs);
3299
        }
3300
 
3301
      return true;
3302
    }
3303
 
3304
  return false;
3305
}
3306
 
3307
/* Expand any parameter packs that occur in the template arguments in
3308
   ARGS.  */
3309
tree
3310
expand_template_argument_pack (tree args)
3311
{
3312
  tree result_args = NULL_TREE;
3313
  int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
3314
  int num_result_args = -1;
3315
  int non_default_args_count = -1;
3316
 
3317
  /* First, determine if we need to expand anything, and the number of
3318
     slots we'll need.  */
3319
  for (in_arg = 0; in_arg < nargs; ++in_arg)
3320
    {
3321
      tree arg = TREE_VEC_ELT (args, in_arg);
3322
      if (arg == NULL_TREE)
3323
        return args;
3324
      if (ARGUMENT_PACK_P (arg))
3325
        {
3326
          int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
3327
          if (num_result_args < 0)
3328
            num_result_args = in_arg + num_packed;
3329
          else
3330
            num_result_args += num_packed;
3331
        }
3332
      else
3333
        {
3334
          if (num_result_args >= 0)
3335
            num_result_args++;
3336
        }
3337
    }
3338
 
3339
  /* If no expansion is necessary, we're done.  */
3340
  if (num_result_args < 0)
3341
    return args;
3342
 
3343
  /* Expand arguments.  */
3344
  result_args = make_tree_vec (num_result_args);
3345
  if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
3346
    non_default_args_count =
3347
      GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
3348
  for (in_arg = 0; in_arg < nargs; ++in_arg)
3349
    {
3350
      tree arg = TREE_VEC_ELT (args, in_arg);
3351
      if (ARGUMENT_PACK_P (arg))
3352
        {
3353
          tree packed = ARGUMENT_PACK_ARGS (arg);
3354
          int i, num_packed = TREE_VEC_LENGTH (packed);
3355
          for (i = 0; i < num_packed; ++i, ++out_arg)
3356
            TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
3357
          if (non_default_args_count > 0)
3358
            non_default_args_count += num_packed;
3359
        }
3360
      else
3361
        {
3362
          TREE_VEC_ELT (result_args, out_arg) = arg;
3363
          ++out_arg;
3364
        }
3365
    }
3366
  if (non_default_args_count >= 0)
3367
    SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
3368
  return result_args;
3369
}
3370
 
3371
/* Checks if DECL shadows a template parameter.
3372
 
3373
   [temp.local]: A template-parameter shall not be redeclared within its
3374
   scope (including nested scopes).
3375
 
3376
   Emits an error and returns TRUE if the DECL shadows a parameter,
3377
   returns FALSE otherwise.  */
3378
 
3379
bool
3380
check_template_shadow (tree decl)
3381
{
3382
  tree olddecl;
3383
 
3384
  /* If we're not in a template, we can't possibly shadow a template
3385
     parameter.  */
3386
  if (!current_template_parms)
3387
    return true;
3388
 
3389
  /* Figure out what we're shadowing.  */
3390
  if (TREE_CODE (decl) == OVERLOAD)
3391
    decl = OVL_CURRENT (decl);
3392
  olddecl = innermost_non_namespace_value (DECL_NAME (decl));
3393
 
3394
  /* If there's no previous binding for this name, we're not shadowing
3395
     anything, let alone a template parameter.  */
3396
  if (!olddecl)
3397
    return true;
3398
 
3399
  /* If we're not shadowing a template parameter, we're done.  Note
3400
     that OLDDECL might be an OVERLOAD (or perhaps even an
3401
     ERROR_MARK), so we can't just blithely assume it to be a _DECL
3402
     node.  */
3403
  if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
3404
    return true;
3405
 
3406
  /* We check for decl != olddecl to avoid bogus errors for using a
3407
     name inside a class.  We check TPFI to avoid duplicate errors for
3408
     inline member templates.  */
3409
  if (decl == olddecl
3410
      || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
3411
    return true;
3412
 
3413
  error ("declaration of %q+#D", decl);
3414
  error (" shadows template parm %q+#D", olddecl);
3415
  return false;
3416
}
3417
 
3418
/* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
3419
   ORIG_LEVEL, DECL, and TYPE.  NUM_SIBLINGS is the total number of
3420
   template parameters.  */
3421
 
3422
static tree
3423
build_template_parm_index (int index,
3424
                           int level,
3425
                           int orig_level,
3426
                           int num_siblings,
3427
                           tree decl,
3428
                           tree type)
3429
{
3430
  tree t = make_node (TEMPLATE_PARM_INDEX);
3431
  TEMPLATE_PARM_IDX (t) = index;
3432
  TEMPLATE_PARM_LEVEL (t) = level;
3433
  TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
3434
  TEMPLATE_PARM_NUM_SIBLINGS (t) = num_siblings;
3435
  TEMPLATE_PARM_DECL (t) = decl;
3436
  TREE_TYPE (t) = type;
3437
  TREE_CONSTANT (t) = TREE_CONSTANT (decl);
3438
  TREE_READONLY (t) = TREE_READONLY (decl);
3439
 
3440
  return t;
3441
}
3442
 
3443
/* Find the canonical type parameter for the given template type
3444
   parameter.  Returns the canonical type parameter, which may be TYPE
3445
   if no such parameter existed.  */
3446
 
3447
static tree
3448
canonical_type_parameter (tree type)
3449
{
3450
  tree list;
3451
  int idx = TEMPLATE_TYPE_IDX (type);
3452
  if (!canonical_template_parms)
3453
    canonical_template_parms = VEC_alloc (tree, gc, idx+1);
3454
 
3455
  while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
3456
    VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
3457
 
3458
  list = VEC_index (tree, canonical_template_parms, idx);
3459
  while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
3460
    list = TREE_CHAIN (list);
3461
 
3462
  if (list)
3463
    return TREE_VALUE (list);
3464
  else
3465
    {
3466
      VEC_replace(tree, canonical_template_parms, idx,
3467
                  tree_cons (NULL_TREE, type,
3468
                             VEC_index (tree, canonical_template_parms, idx)));
3469
      return type;
3470
    }
3471
}
3472
 
3473
/* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
3474
   TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
3475
   TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
3476
   new one is created.  */
3477
 
3478
static tree
3479
reduce_template_parm_level (tree index, tree type, int levels, tree args,
3480
                            tsubst_flags_t complain)
3481
{
3482
  if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
3483
      || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
3484
          != TEMPLATE_PARM_LEVEL (index) - levels)
3485
      || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
3486
    {
3487
      tree orig_decl = TEMPLATE_PARM_DECL (index);
3488
      tree decl, t;
3489
 
3490
      decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
3491
                         TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
3492
      TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
3493
      TREE_READONLY (decl) = TREE_READONLY (orig_decl);
3494
      DECL_ARTIFICIAL (decl) = 1;
3495
      SET_DECL_TEMPLATE_PARM_P (decl);
3496
 
3497
      t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
3498
                                     TEMPLATE_PARM_LEVEL (index) - levels,
3499
                                     TEMPLATE_PARM_ORIG_LEVEL (index),
3500
                                     TEMPLATE_PARM_NUM_SIBLINGS (index),
3501
                                     decl, type);
3502
      TEMPLATE_PARM_DESCENDANTS (index) = t;
3503
      TEMPLATE_PARM_PARAMETER_PACK (t)
3504
        = TEMPLATE_PARM_PARAMETER_PACK (index);
3505
 
3506
        /* Template template parameters need this.  */
3507
      if (TREE_CODE (decl) == TEMPLATE_DECL)
3508
        DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
3509
          (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
3510
           args, complain);
3511
    }
3512
 
3513
  return TEMPLATE_PARM_DESCENDANTS (index);
3514
}
3515
 
3516
/* Process information from new template parameter PARM and append it
3517
   to the LIST being built.  This new parameter is a non-type
3518
   parameter iff IS_NON_TYPE is true. This new parameter is a
3519
   parameter pack iff IS_PARAMETER_PACK is true.  The location of PARM
3520
   is in PARM_LOC. NUM_TEMPLATE_PARMS is the size of the template
3521
   parameter list PARM belongs to. This is used used to create a
3522
   proper canonical type for the type of PARM that is to be created,
3523
   iff PARM is a type.  If the size is not known, this parameter shall
3524
   be set to 0.  */
3525
 
3526
tree
3527
process_template_parm (tree list, location_t parm_loc, tree parm,
3528
                       bool is_non_type, bool is_parameter_pack,
3529
                       unsigned num_template_parms)
3530
{
3531
  tree decl = 0;
3532
  tree defval;
3533
  tree err_parm_list;
3534
  int idx = 0;
3535
 
3536
  gcc_assert (TREE_CODE (parm) == TREE_LIST);
3537
  defval = TREE_PURPOSE (parm);
3538
 
3539
  if (list)
3540
    {
3541
      tree p = tree_last (list);
3542
 
3543
      if (p && TREE_VALUE (p) != error_mark_node)
3544
        {
3545
          p = TREE_VALUE (p);
3546
          if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
3547
            idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
3548
          else
3549
            idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
3550
        }
3551
 
3552
      ++idx;
3553
    }
3554
  else
3555
    idx = 0;
3556
 
3557
  if (is_non_type)
3558
    {
3559
      parm = TREE_VALUE (parm);
3560
 
3561
      SET_DECL_TEMPLATE_PARM_P (parm);
3562
 
3563
      if (TREE_TYPE (parm) == error_mark_node)
3564
        {
3565
          err_parm_list = build_tree_list (defval, parm);
3566
          TREE_VALUE (err_parm_list) = error_mark_node;
3567
           return chainon (list, err_parm_list);
3568
        }
3569
      else
3570
      {
3571
        /* [temp.param]
3572
 
3573
           The top-level cv-qualifiers on the template-parameter are
3574
           ignored when determining its type.  */
3575
        TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3576
        if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3577
          {
3578
            err_parm_list = build_tree_list (defval, parm);
3579
            TREE_VALUE (err_parm_list) = error_mark_node;
3580
             return chainon (list, err_parm_list);
3581
          }
3582
 
3583
        if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
3584
          {
3585
            /* This template parameter is not a parameter pack, but it
3586
               should be. Complain about "bare" parameter packs.  */
3587
            check_for_bare_parameter_packs (TREE_TYPE (parm));
3588
 
3589
            /* Recover by calling this a parameter pack.  */
3590
            is_parameter_pack = true;
3591
          }
3592
      }
3593
 
3594
      /* A template parameter is not modifiable.  */
3595
      TREE_CONSTANT (parm) = 1;
3596
      TREE_READONLY (parm) = 1;
3597
      decl = build_decl (parm_loc,
3598
                         CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3599
      TREE_CONSTANT (decl) = 1;
3600
      TREE_READONLY (decl) = 1;
3601
      DECL_INITIAL (parm) = DECL_INITIAL (decl)
3602
        = build_template_parm_index (idx, processing_template_decl,
3603
                                     processing_template_decl,
3604
                                     num_template_parms,
3605
                                     decl, TREE_TYPE (parm));
3606
 
3607
      TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
3608
        = is_parameter_pack;
3609
    }
3610
  else
3611
    {
3612
      tree t;
3613
      parm = TREE_VALUE (TREE_VALUE (parm));
3614
 
3615
      if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3616
        {
3617
          t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3618
          /* This is for distinguishing between real templates and template
3619
             template parameters */
3620
          TREE_TYPE (parm) = t;
3621
          TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3622
          decl = parm;
3623
        }
3624
      else
3625
        {
3626
          t = cxx_make_type (TEMPLATE_TYPE_PARM);
3627
          /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3628
          decl = build_decl (parm_loc,
3629
                             TYPE_DECL, parm, t);
3630
        }
3631
 
3632
      TYPE_NAME (t) = decl;
3633
      TYPE_STUB_DECL (t) = decl;
3634
      parm = decl;
3635
      TEMPLATE_TYPE_PARM_INDEX (t)
3636
        = build_template_parm_index (idx, processing_template_decl,
3637
                                     processing_template_decl,
3638
                                     num_template_parms,
3639
                                     decl, TREE_TYPE (parm));
3640
      TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3641
      TYPE_CANONICAL (t) = canonical_type_parameter (t);
3642
    }
3643
  DECL_ARTIFICIAL (decl) = 1;
3644
  SET_DECL_TEMPLATE_PARM_P (decl);
3645
  pushdecl (decl);
3646
  parm = build_tree_list (defval, parm);
3647
  return chainon (list, parm);
3648
}
3649
 
3650
/* The end of a template parameter list has been reached.  Process the
3651
   tree list into a parameter vector, converting each parameter into a more
3652
   useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
3653
   as PARM_DECLs.  */
3654
 
3655
tree
3656
end_template_parm_list (tree parms)
3657
{
3658
  int nparms;
3659
  tree parm, next;
3660
  tree saved_parmlist = make_tree_vec (list_length (parms));
3661
 
3662
  current_template_parms
3663
    = tree_cons (size_int (processing_template_decl),
3664
                 saved_parmlist, current_template_parms);
3665
 
3666
  for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3667
    {
3668
      next = TREE_CHAIN (parm);
3669
      TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3670
      TREE_CHAIN (parm) = NULL_TREE;
3671
    }
3672
 
3673
  --processing_template_parmlist;
3674
 
3675
  return saved_parmlist;
3676
}
3677
 
3678
/* Create a new type almost identical to TYPE but which has the
3679
   following differences:
3680
 
3681
     1/ T has a new TEMPLATE_PARM_INDEX that carries the new number of
3682
     template sibling parameters of T.
3683
 
3684
     2/ T has a new canonical type that matches the new number
3685
     of sibling parms.
3686
 
3687
     3/ From now on, T is going to be what lookups referring to the
3688
     name of TYPE will return. No lookup should return TYPE anymore.
3689
 
3690
   NUM_PARMS is the new number of sibling parms TYPE belongs to.
3691
 
3692
   This is a subroutine of fixup_template_parms.  */
3693
 
3694
static tree
3695
fixup_template_type_parm_type (tree type, int num_parms)
3696
{
3697
  tree orig_idx = TEMPLATE_TYPE_PARM_INDEX (type), idx;
3698
  tree t;
3699
  /* This is the decl which name is inserted into the symbol table for
3700
     the template parm type. So whenever we lookup the type name, this
3701
     is the DECL we get.  */
3702
  tree decl;
3703
 
3704
  /* Do not fix up the type twice.  */
3705
  if (orig_idx && TEMPLATE_PARM_NUM_SIBLINGS (orig_idx) != 0)
3706
    return type;
3707
 
3708
  t = copy_type (type);
3709
  decl = TYPE_NAME (t);
3710
 
3711
  TYPE_MAIN_VARIANT (t) = t;
3712
  TYPE_NEXT_VARIANT (t)= NULL_TREE;
3713
  TYPE_POINTER_TO (t) = 0;
3714
  TYPE_REFERENCE_TO (t) = 0;
3715
 
3716
  idx = build_template_parm_index (TEMPLATE_PARM_IDX (orig_idx),
3717
                                   TEMPLATE_PARM_LEVEL (orig_idx),
3718
                                   TEMPLATE_PARM_ORIG_LEVEL (orig_idx),
3719
                                   num_parms,
3720
                                   decl, t);
3721
  TEMPLATE_PARM_DESCENDANTS (idx) = TEMPLATE_PARM_DESCENDANTS (orig_idx);
3722
  TEMPLATE_PARM_PARAMETER_PACK (idx) = TEMPLATE_PARM_PARAMETER_PACK (orig_idx);
3723
  TEMPLATE_TYPE_PARM_INDEX (t) = idx;
3724
 
3725
  TYPE_STUB_DECL (t) = decl;
3726
  TEMPLATE_TYPE_DECL (t) = decl;
3727
  if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
3728
    TREE_TYPE (DECL_TEMPLATE_RESULT  (decl)) = t;
3729
 
3730
  /* Update the type associated to the type name stored in the symbol
3731
     table. Now, whenever the type name is looked up, the resulting
3732
     type is properly fixed up.  */
3733
  TREE_TYPE (decl) = t;
3734
 
3735
  TYPE_CANONICAL (t) = canonical_type_parameter (t);
3736
 
3737
  return t;
3738
}
3739
 
3740
/* Create and return a new TEMPLATE_PARM_INDEX that is almost
3741
   identical to I, but that is fixed up as to:
3742
 
3743
   1/ carry the number of sibling parms (NUM_PARMS) of the template
3744
   parm represented by I.
3745
 
3746
   2/ replace all references to template parm types declared before I
3747
   (in the same template parm list as I) by references to template
3748
   parm types contained in ARGS. ARGS should contain the list of
3749
   template parms that have been fixed up so far, in a form suitable
3750
   to be passed to tsubst.
3751
 
3752
   This is a subroutine of fixup_template_parms.  */
3753
 
3754
static tree
3755
fixup_template_parm_index (tree i, tree args, int num_parms)
3756
{
3757
  tree index, decl, type;
3758
 
3759
  if (i == NULL_TREE
3760
      || TREE_CODE (i) != TEMPLATE_PARM_INDEX
3761
      /* Do not fix up the index twice.  */
3762
      || (TEMPLATE_PARM_NUM_SIBLINGS (i) != 0))
3763
    return i;
3764
 
3765
  decl = TEMPLATE_PARM_DECL (i);
3766
  type = TREE_TYPE (decl);
3767
 
3768
  index = build_template_parm_index (TEMPLATE_PARM_IDX (i),
3769
                                     TEMPLATE_PARM_LEVEL (i),
3770
                                     TEMPLATE_PARM_ORIG_LEVEL (i),
3771
                                     num_parms,
3772
                                     decl, type);
3773
 
3774
  TEMPLATE_PARM_DESCENDANTS (index) = TEMPLATE_PARM_DESCENDANTS (i);
3775
  TEMPLATE_PARM_PARAMETER_PACK (index) = TEMPLATE_PARM_PARAMETER_PACK (i);
3776
 
3777
  type = tsubst (type, args, tf_none, NULL_TREE);
3778
 
3779
  TREE_TYPE (decl) = type;
3780
  TREE_TYPE (index) = type;
3781
 
3782
  return index;
3783
}
3784
 
3785
/*
3786
   This is a subroutine of fixup_template_parms.
3787
 
3788
   It computes the canonical type of the type of the template
3789
   parameter PARM_DESC and update all references to that type so that
3790
   they use the newly computed canonical type. No access check is
3791
   performed during the fixup. PARM_DESC is a TREE_LIST which
3792
   TREE_VALUE is the template parameter and its TREE_PURPOSE is the
3793
   default argument of the template parm if any. IDX is the index of
3794
   the template parameter, starting at 0. NUM_PARMS is the number of
3795
   template parameters in the set PARM_DESC belongs to. ARGLIST is a
3796
   TREE_VEC containing the full set of template parameters in a form
3797
   suitable to be passed to substs functions as their ARGS
3798
   argument. This is what current_template_args returns for a given
3799
   template. The innermost vector of args in ARGLIST is the set of
3800
   template parms that have been fixed up so far. This function adds
3801
   the fixed up parameter into that vector.  */
3802
 
3803
static void
3804
fixup_template_parm (tree parm_desc,
3805
                     int idx,
3806
                     int num_parms,
3807
                     tree arglist)
3808
{
3809
  tree parm = TREE_VALUE (parm_desc);
3810
  tree fixedup_args = INNERMOST_TEMPLATE_ARGS (arglist);
3811
 
3812
  push_deferring_access_checks (dk_no_check);
3813
 
3814
  if (TREE_CODE (parm) == TYPE_DECL)
3815
    {
3816
      /* PARM is a template type parameter. Fix up its type, add
3817
         the fixed-up template parm to the vector of fixed-up
3818
         template parms so far, and substitute the fixed-up
3819
         template parms into the default argument of this
3820
         parameter.  */
3821
      tree t =
3822
        fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
3823
      TREE_TYPE (parm) = t;
3824
 
3825
      TREE_VEC_ELT (fixedup_args, idx) = template_parm_to_arg (parm_desc);
3826
    }
3827
  else if (TREE_CODE (parm) == TEMPLATE_DECL)
3828
    {
3829
      /* PARM is a template template parameter. This is going to
3830
         be interesting.  */
3831
      tree tparms, targs, innermost_args, t;
3832
      int j;
3833
 
3834
      /* First, fix up the parms of the template template parm
3835
         because the parms are involved in defining the new canonical
3836
         type of the template template parm.  */
3837
 
3838
      /* So we need to substitute the template parm types that have
3839
         been fixed up so far into the template parms of this template
3840
         template parm. E.g, consider this:
3841
 
3842
         template<class T, template<T u> class TT> class S;
3843
 
3844
         In this case we want to substitute T into the
3845
         template parameters of TT.
3846
 
3847
         So let's walk the template parms of PARM here, and
3848
         tsubst ARGLIST into into each of the template
3849
         parms.   */
3850
 
3851
      /* For this substitution we need to build the full set of
3852
         template parameters and use that as arguments for the
3853
         tsubsting function.  */
3854
      tparms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (parm));
3855
 
3856
      /* This will contain the innermost parms of PARM into which
3857
         we have substituted so far.  */
3858
      innermost_args = make_tree_vec (TREE_VEC_LENGTH (tparms));
3859
      targs = add_to_template_args (arglist, innermost_args);
3860
      for (j = 0; j < TREE_VEC_LENGTH (tparms); ++j)
3861
        {
3862
          tree parameter;
3863
 
3864
          parameter = TREE_VEC_ELT (tparms, j);
3865
 
3866
          /* INNERMOST_ARGS needs to have at least the same number
3867
             of elements as the index PARAMETER, ortherwise
3868
             tsubsting into PARAMETER will result in partially
3869
             instantiating it, reducing its tempate parm
3870
             level. Let's tactically fill INNERMOST_ARGS for that
3871
             purpose.  */
3872
          TREE_VEC_ELT (innermost_args, j) =
3873
            template_parm_to_arg (parameter);
3874
 
3875
          fixup_template_parm (parameter, j,
3876
                               TREE_VEC_LENGTH (tparms),
3877
                               targs);
3878
        }
3879
 
3880
      /* Now fix up the type of the template template parm.  */
3881
 
3882
      t = fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
3883
      TREE_TYPE (parm) = t;
3884
 
3885
      TREE_VEC_ELT (fixedup_args, idx) =
3886
        template_parm_to_arg (parm_desc);
3887
    }
3888
  else if (TREE_CODE (parm) == PARM_DECL)
3889
    {
3890
      /* PARM is a non-type template parameter. We need to:
3891
 
3892
       * Fix up its TEMPLATE_PARM_INDEX to make it carry the
3893
       proper number of sibling parameters.
3894
 
3895
       * Make lookups of the template parameter return a reference
3896
       to the fixed-up index. No lookup should return references
3897
       to the former index anymore.
3898
 
3899
       * Substitute the template parms that got fixed up so far
3900
 
3901
       * into the type of PARM.  */
3902
 
3903
      tree index = DECL_INITIAL (parm);
3904
 
3905
      /* PUSHED_DECL is the decl added to the symbol table with
3906
         the name of the parameter. E,g:
3907
 
3908
         template<class T, T u> //#0
3909
         auto my_function(T t) -> decltype(u); //#1
3910
 
3911
         Here, when looking up u at //#1, we get the decl of u
3912
         resulting from the declaration in #0. This is what
3913
         PUSHED_DECL is. We need to replace the reference to the
3914
         old TEMPLATE_PARM_INDEX carried by PUSHED_DECL by the
3915
         fixed-up TEMPLATE_PARM_INDEX.  */
3916
      tree pushed_decl = TEMPLATE_PARM_DECL (index);
3917
 
3918
      /* Let's fix up the TEMPLATE_PARM_INDEX then. Note that we must
3919
         fixup the type of PUSHED_DECL as well and luckily
3920
         fixup_template_parm_index does it for us too.  */
3921
      tree fixed_up_index =
3922
        fixup_template_parm_index (index, arglist, num_parms);
3923
 
3924
      DECL_INITIAL (pushed_decl) = DECL_INITIAL (parm) = fixed_up_index;
3925
 
3926
      /* Add this fixed up PARM to the template parms we've fixed
3927
         up so far and use that to substitute the fixed-up
3928
         template parms into the type of PARM.  */
3929
      TREE_VEC_ELT (fixedup_args, idx) =
3930
        template_parm_to_arg (parm_desc);
3931
      TREE_TYPE (parm) = tsubst (TREE_TYPE (parm), arglist,
3932
                                 tf_none, NULL_TREE);
3933
    }
3934
 
3935
  TREE_PURPOSE (parm_desc) =
3936
    tsubst_template_arg (TREE_PURPOSE (parm_desc),
3937
                         arglist, tf_none, parm);
3938
 
3939
  pop_deferring_access_checks ();
3940
}
3941
 
3942
/* Walk the current template parms and properly compute the canonical
3943
   types of the dependent types created during
3944
   cp_parser_template_parameter_list.  */
3945
 
3946
void
3947
fixup_template_parms (void)
3948
{
3949
  tree arglist;
3950
  tree parameter_vec;
3951
  tree fixedup_args;
3952
  int i, num_parms;
3953
 
3954
  parameter_vec = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3955
  if (parameter_vec == NULL_TREE)
3956
    return;
3957
 
3958
  num_parms = TREE_VEC_LENGTH (parameter_vec);
3959
 
3960
  /* This vector contains the current innermost template parms that
3961
     have been fixed up so far.  The form of FIXEDUP_ARGS is suitable
3962
     to be passed to tsubst* functions as their ARGS argument.  */
3963
  fixedup_args = make_tree_vec (num_parms);
3964
 
3965
  /* This vector contains the full set of template parms in a form
3966
     suitable to be passed to substs functions as their ARGS
3967
     argument.  */
3968
  arglist = current_template_args ();
3969
  arglist = add_outermost_template_args (arglist, fixedup_args);
3970
 
3971
  /* Let's do the proper fixup now.  */
3972
  for (i = 0; i < num_parms; ++i)
3973
    fixup_template_parm (TREE_VEC_ELT (parameter_vec, i),
3974
                         i, num_parms, arglist);
3975
}
3976
 
3977
/* end_template_decl is called after a template declaration is seen.  */
3978
 
3979
void
3980
end_template_decl (void)
3981
{
3982
  reset_specialization ();
3983
 
3984
  if (! processing_template_decl)
3985
    return;
3986
 
3987
  /* This matches the pushlevel in begin_template_parm_list.  */
3988
  finish_scope ();
3989
 
3990
  --processing_template_decl;
3991
  current_template_parms = TREE_CHAIN (current_template_parms);
3992
}
3993
 
3994
/* Takes a TREE_LIST representing a template parameter and convert it
3995
   into an argument suitable to be passed to the type substitution
3996
   functions.  Note that If the TREE_LIST contains an error_mark
3997
   node, the returned argument is error_mark_node.  */
3998
 
3999
static tree
4000
template_parm_to_arg (tree t)
4001
{
4002
 
4003
  if (t == NULL_TREE
4004
      || TREE_CODE (t) != TREE_LIST)
4005
    return t;
4006
 
4007
  if (error_operand_p (TREE_VALUE (t)))
4008
    return error_mark_node;
4009
 
4010
  t = TREE_VALUE (t);
4011
 
4012
  if (TREE_CODE (t) == TYPE_DECL
4013
      || TREE_CODE (t) == TEMPLATE_DECL)
4014
    {
4015
      t = TREE_TYPE (t);
4016
 
4017
      if (TEMPLATE_TYPE_PARAMETER_PACK (t))
4018
        {
4019
          /* Turn this argument into a TYPE_ARGUMENT_PACK
4020
             with a single element, which expands T.  */
4021
          tree vec = make_tree_vec (1);
4022
#ifdef ENABLE_CHECKING
4023
          SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
4024
            (vec, TREE_VEC_LENGTH (vec));
4025
#endif
4026
          TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
4027
 
4028
          t = cxx_make_type (TYPE_ARGUMENT_PACK);
4029
          SET_ARGUMENT_PACK_ARGS (t, vec);
4030
        }
4031
    }
4032
  else
4033
    {
4034
      t = DECL_INITIAL (t);
4035
 
4036
      if (TEMPLATE_PARM_PARAMETER_PACK (t))
4037
        {
4038
          /* Turn this argument into a NONTYPE_ARGUMENT_PACK
4039
             with a single element, which expands T.  */
4040
          tree vec = make_tree_vec (1);
4041
          tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
4042
#ifdef ENABLE_CHECKING
4043
          SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
4044
            (vec, TREE_VEC_LENGTH (vec));
4045
#endif
4046
          TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
4047
 
4048
          t  = make_node (NONTYPE_ARGUMENT_PACK);
4049
          SET_ARGUMENT_PACK_ARGS (t, vec);
4050
          TREE_TYPE (t) = type;
4051
        }
4052
    }
4053
  return t;
4054
}
4055
 
4056
/* This function returns TRUE if PARM_PACK is a template parameter
4057
   pack and if ARG_PACK is what template_parm_to_arg returned when
4058
   passed PARM_PACK.  */
4059
 
4060
static bool
4061
arg_from_parm_pack_p (tree arg_pack, tree parm_pack)
4062
{
4063
  /* For clarity in the comments below let's use the representation
4064
     argument_pack<elements>' to denote an argument pack and its
4065
     elements.
4066
 
4067
     In the 'if' block below, we want to detect cases where
4068
     ARG_PACK is argument_pack<PARM_PACK...>.  I.e, we want to
4069
     check if ARG_PACK is an argument pack which sole element is
4070
     the expansion of PARM_PACK.  That argument pack is typically
4071
     created by template_parm_to_arg when passed a parameter
4072
     pack.  */
4073
 
4074
  if (arg_pack
4075
      && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
4076
      && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
4077
    {
4078
      tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
4079
      tree pattern = PACK_EXPANSION_PATTERN (expansion);
4080
      /* So we have an argument_pack<P...>.  We want to test if P
4081
         is actually PARM_PACK.  We will not use cp_tree_equal to
4082
         test P and PARM_PACK because during type fixup (by
4083
         fixup_template_parm) P can be a pre-fixup version of a
4084
         type and PARM_PACK be its post-fixup version.
4085
         cp_tree_equal would consider them as different even
4086
         though we would want to consider them compatible for our
4087
         precise purpose here.
4088
 
4089
         Thus we are going to consider that P and PARM_PACK are
4090
         compatible if they have the same DECL.  */
4091
      if ((/* If ARG_PACK is a type parameter pack named by the
4092
              same DECL as parm_pack ...  */
4093
           (TYPE_P (pattern)
4094
            && TYPE_P (parm_pack)
4095
            && TYPE_NAME (pattern) == TYPE_NAME (parm_pack))
4096
           /* ... or if PARM_PACK is a non-type parameter named by the
4097
              same DECL as ARG_PACK.  Note that PARM_PACK being a
4098
              non-type parameter means it's either a PARM_DECL or a
4099
              TEMPLATE_PARM_INDEX.  */
4100
           || (TREE_CODE (pattern) == TEMPLATE_PARM_INDEX
4101
               && ((TREE_CODE (parm_pack) == PARM_DECL
4102
                    && (TEMPLATE_PARM_DECL (pattern)
4103
                        == TEMPLATE_PARM_DECL (DECL_INITIAL (parm_pack))))
4104
                   || (TREE_CODE (parm_pack) == TEMPLATE_PARM_INDEX
4105
                       && (TEMPLATE_PARM_DECL (pattern)
4106
                           == TEMPLATE_PARM_DECL (parm_pack))))))
4107
          && template_parameter_pack_p (pattern))
4108
        return true;
4109
    }
4110
  return false;
4111
}
4112
 
4113
/* Within the declaration of a template, return all levels of template
4114
   parameters that apply.  The template parameters are represented as
4115
   a TREE_VEC, in the form documented in cp-tree.h for template
4116
   arguments.  */
4117
 
4118
static tree
4119
current_template_args (void)
4120
{
4121
  tree header;
4122
  tree args = NULL_TREE;
4123
  int length = TMPL_PARMS_DEPTH (current_template_parms);
4124
  int l = length;
4125
 
4126
  /* If there is only one level of template parameters, we do not
4127
     create a TREE_VEC of TREE_VECs.  Instead, we return a single
4128
     TREE_VEC containing the arguments.  */
4129
  if (length > 1)
4130
    args = make_tree_vec (length);
4131
 
4132
  for (header = current_template_parms; header; header = TREE_CHAIN (header))
4133
    {
4134
      tree a = copy_node (TREE_VALUE (header));
4135
      int i;
4136
 
4137
      TREE_TYPE (a) = NULL_TREE;
4138
      for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
4139
        TREE_VEC_ELT (a, i) = template_parm_to_arg (TREE_VEC_ELT (a, i));
4140
 
4141
#ifdef ENABLE_CHECKING
4142
      SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
4143
#endif
4144
 
4145
      if (length > 1)
4146
        TREE_VEC_ELT (args, --l) = a;
4147
      else
4148
        args = a;
4149
    }
4150
 
4151
    if (length > 1 && TREE_VEC_ELT (args, 0) == NULL_TREE)
4152
      /* This can happen for template parms of a template template
4153
         parameter, e.g:
4154
 
4155
         template<template<class T, class U> class TT> struct S;
4156
 
4157
         Consider the level of the parms of TT; T and U both have
4158
         level 2; TT has no template parm of level 1. So in this case
4159
         the first element of full_template_args is NULL_TREE. If we
4160
         leave it like this TMPL_ARG_DEPTH on args returns 1 instead
4161
         of 2. This will make tsubst wrongly consider that T and U
4162
         have level 1. Instead, let's create a dummy vector as the
4163
         first element of full_template_args so that TMPL_ARG_DEPTH
4164
         returns the correct depth for args.  */
4165
      TREE_VEC_ELT (args, 0) = make_tree_vec (1);
4166
  return args;
4167
}
4168
 
4169
/* Update the declared TYPE by doing any lookups which were thought to be
4170
   dependent, but are not now that we know the SCOPE of the declarator.  */
4171
 
4172
tree
4173
maybe_update_decl_type (tree orig_type, tree scope)
4174
{
4175
  tree type = orig_type;
4176
 
4177
  if (type == NULL_TREE)
4178
    return type;
4179
 
4180
  if (TREE_CODE (orig_type) == TYPE_DECL)
4181
    type = TREE_TYPE (type);
4182
 
4183
  if (scope && TYPE_P (scope) && dependent_type_p (scope)
4184
      && dependent_type_p (type)
4185
      /* Don't bother building up the args in this case.  */
4186
      && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
4187
    {
4188
      /* tsubst in the args corresponding to the template parameters,
4189
         including auto if present.  Most things will be unchanged, but
4190
         make_typename_type and tsubst_qualified_id will resolve
4191
         TYPENAME_TYPEs and SCOPE_REFs that were previously dependent.  */
4192
      tree args = current_template_args ();
4193
      tree auto_node = type_uses_auto (type);
4194
      tree pushed;
4195
      if (auto_node)
4196
        {
4197
          tree auto_vec = make_tree_vec (1);
4198
          TREE_VEC_ELT (auto_vec, 0) = auto_node;
4199
          args = add_to_template_args (args, auto_vec);
4200
        }
4201
      pushed = push_scope (scope);
4202
      type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
4203
      if (pushed)
4204
        pop_scope (scope);
4205
    }
4206
 
4207
  if (type == error_mark_node)
4208
    return orig_type;
4209
 
4210
  if (TREE_CODE (orig_type) == TYPE_DECL)
4211
    {
4212
      if (same_type_p (type, TREE_TYPE (orig_type)))
4213
        type = orig_type;
4214
      else
4215
        type = TYPE_NAME (type);
4216
    }
4217
  return type;
4218
}
4219
 
4220
/* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
4221
   template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
4222
   a member template.  Used by push_template_decl below.  */
4223
 
4224
static tree
4225
build_template_decl (tree decl, tree parms, bool member_template_p)
4226
{
4227
  tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
4228
  DECL_TEMPLATE_PARMS (tmpl) = parms;
4229
  DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
4230
  DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
4231
  DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
4232
 
4233
  return tmpl;
4234
}
4235
 
4236
struct template_parm_data
4237
{
4238
  /* The level of the template parameters we are currently
4239
     processing.  */
4240
  int level;
4241
 
4242
  /* The index of the specialization argument we are currently
4243
     processing.  */
4244
  int current_arg;
4245
 
4246
  /* An array whose size is the number of template parameters.  The
4247
     elements are nonzero if the parameter has been used in any one
4248
     of the arguments processed so far.  */
4249
  int* parms;
4250
 
4251
  /* An array whose size is the number of template arguments.  The
4252
     elements are nonzero if the argument makes use of template
4253
     parameters of this level.  */
4254
  int* arg_uses_template_parms;
4255
};
4256
 
4257
/* Subroutine of push_template_decl used to see if each template
4258
   parameter in a partial specialization is used in the explicit
4259
   argument list.  If T is of the LEVEL given in DATA (which is
4260
   treated as a template_parm_data*), then DATA->PARMS is marked
4261
   appropriately.  */
4262
 
4263
static int
4264
mark_template_parm (tree t, void* data)
4265
{
4266
  int level;
4267
  int idx;
4268
  struct template_parm_data* tpd = (struct template_parm_data*) data;
4269
 
4270
  if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4271
    {
4272
      level = TEMPLATE_PARM_LEVEL (t);
4273
      idx = TEMPLATE_PARM_IDX (t);
4274
    }
4275
  else
4276
    {
4277
      level = TEMPLATE_TYPE_LEVEL (t);
4278
      idx = TEMPLATE_TYPE_IDX (t);
4279
    }
4280
 
4281
  if (level == tpd->level)
4282
    {
4283
      tpd->parms[idx] = 1;
4284
      tpd->arg_uses_template_parms[tpd->current_arg] = 1;
4285
    }
4286
 
4287
  /* Return zero so that for_each_template_parm will continue the
4288
     traversal of the tree; we want to mark *every* template parm.  */
4289
  return 0;
4290
}
4291
 
4292
/* Process the partial specialization DECL.  */
4293
 
4294
static tree
4295
process_partial_specialization (tree decl)
4296
{
4297
  tree type = TREE_TYPE (decl);
4298
  tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
4299
  tree specargs = CLASSTYPE_TI_ARGS (type);
4300
  tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
4301
  tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
4302
  tree inner_parms;
4303
  tree inst;
4304
  int nargs = TREE_VEC_LENGTH (inner_args);
4305
  int ntparms;
4306
  int  i;
4307
  bool did_error_intro = false;
4308
  struct template_parm_data tpd;
4309
  struct template_parm_data tpd2;
4310
 
4311
  gcc_assert (current_template_parms);
4312
 
4313
  inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
4314
  ntparms = TREE_VEC_LENGTH (inner_parms);
4315
 
4316
  /* We check that each of the template parameters given in the
4317
     partial specialization is used in the argument list to the
4318
     specialization.  For example:
4319
 
4320
       template <class T> struct S;
4321
       template <class T> struct S<T*>;
4322
 
4323
     The second declaration is OK because `T*' uses the template
4324
     parameter T, whereas
4325
 
4326
       template <class T> struct S<int>;
4327
 
4328
     is no good.  Even trickier is:
4329
 
4330
       template <class T>
4331
       struct S1
4332
       {
4333
          template <class U>
4334
          struct S2;
4335
          template <class U>
4336
          struct S2<T>;
4337
       };
4338
 
4339
     The S2<T> declaration is actually invalid; it is a
4340
     full-specialization.  Of course,
4341
 
4342
          template <class U>
4343
          struct S2<T (*)(U)>;
4344
 
4345
     or some such would have been OK.  */
4346
  tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
4347
  tpd.parms = XALLOCAVEC (int, ntparms);
4348
  memset (tpd.parms, 0, sizeof (int) * ntparms);
4349
 
4350
  tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4351
  memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
4352
  for (i = 0; i < nargs; ++i)
4353
    {
4354
      tpd.current_arg = i;
4355
      for_each_template_parm (TREE_VEC_ELT (inner_args, i),
4356
                              &mark_template_parm,
4357
                              &tpd,
4358
                              NULL,
4359
                              /*include_nondeduced_p=*/false);
4360
    }
4361
  for (i = 0; i < ntparms; ++i)
4362
    if (tpd.parms[i] == 0)
4363
      {
4364
        /* One of the template parms was not used in the
4365
           specialization.  */
4366
        if (!did_error_intro)
4367
          {
4368
            error ("template parameters not used in partial specialization:");
4369
            did_error_intro = true;
4370
          }
4371
 
4372
        error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
4373
      }
4374
 
4375
  if (did_error_intro)
4376
    return error_mark_node;
4377
 
4378
  /* [temp.class.spec]
4379
 
4380
     The argument list of the specialization shall not be identical to
4381
     the implicit argument list of the primary template.  */
4382
  if (comp_template_args
4383
      (inner_args,
4384
       INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
4385
                                                   (maintmpl)))))
4386
    error ("partial specialization %qT does not specialize any template arguments", type);
4387
 
4388
  /* [temp.class.spec]
4389
 
4390
     A partially specialized non-type argument expression shall not
4391
     involve template parameters of the partial specialization except
4392
     when the argument expression is a simple identifier.
4393
 
4394
     The type of a template parameter corresponding to a specialized
4395
     non-type argument shall not be dependent on a parameter of the
4396
     specialization.
4397
 
4398
     Also, we verify that pack expansions only occur at the
4399
     end of the argument list.  */
4400
  gcc_assert (nargs == DECL_NTPARMS (maintmpl));
4401
  tpd2.parms = 0;
4402
  for (i = 0; i < nargs; ++i)
4403
    {
4404
      tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
4405
      tree arg = TREE_VEC_ELT (inner_args, i);
4406
      tree packed_args = NULL_TREE;
4407
      int j, len = 1;
4408
 
4409
      if (ARGUMENT_PACK_P (arg))
4410
        {
4411
          /* Extract the arguments from the argument pack. We'll be
4412
             iterating over these in the following loop.  */
4413
          packed_args = ARGUMENT_PACK_ARGS (arg);
4414
          len = TREE_VEC_LENGTH (packed_args);
4415
        }
4416
 
4417
      for (j = 0; j < len; j++)
4418
        {
4419
          if (packed_args)
4420
            /* Get the Jth argument in the parameter pack.  */
4421
            arg = TREE_VEC_ELT (packed_args, j);
4422
 
4423
          if (PACK_EXPANSION_P (arg))
4424
            {
4425
              /* Pack expansions must come at the end of the
4426
                 argument list.  */
4427
              if ((packed_args && j < len - 1)
4428
                  || (!packed_args && i < nargs - 1))
4429
                {
4430
                  if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4431
                    error ("parameter pack argument %qE must be at the "
4432
                           "end of the template argument list", arg);
4433
                  else
4434
                    error ("parameter pack argument %qT must be at the "
4435
                           "end of the template argument list", arg);
4436
                }
4437
            }
4438
 
4439
          if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4440
            /* We only care about the pattern.  */
4441
            arg = PACK_EXPANSION_PATTERN (arg);
4442
 
4443
          if (/* These first two lines are the `non-type' bit.  */
4444
              !TYPE_P (arg)
4445
              && TREE_CODE (arg) != TEMPLATE_DECL
4446
              /* This next line is the `argument expression is not just a
4447
                 simple identifier' condition and also the `specialized
4448
                 non-type argument' bit.  */
4449
              && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
4450
            {
4451
              if ((!packed_args && tpd.arg_uses_template_parms[i])
4452
                  || (packed_args && uses_template_parms (arg)))
4453
                error ("template argument %qE involves template parameter(s)",
4454
                       arg);
4455
              else
4456
                {
4457
                  /* Look at the corresponding template parameter,
4458
                     marking which template parameters its type depends
4459
                     upon.  */
4460
                  tree type = TREE_TYPE (parm);
4461
 
4462
                  if (!tpd2.parms)
4463
                    {
4464
                      /* We haven't yet initialized TPD2.  Do so now.  */
4465
                      tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4466
                      /* The number of parameters here is the number in the
4467
                         main template, which, as checked in the assertion
4468
                         above, is NARGS.  */
4469
                      tpd2.parms = XALLOCAVEC (int, nargs);
4470
                      tpd2.level =
4471
                        TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
4472
                    }
4473
 
4474
                  /* Mark the template parameters.  But this time, we're
4475
                     looking for the template parameters of the main
4476
                     template, not in the specialization.  */
4477
                  tpd2.current_arg = i;
4478
                  tpd2.arg_uses_template_parms[i] = 0;
4479
                  memset (tpd2.parms, 0, sizeof (int) * nargs);
4480
                  for_each_template_parm (type,
4481
                                          &mark_template_parm,
4482
                                          &tpd2,
4483
                                          NULL,
4484
                                          /*include_nondeduced_p=*/false);
4485
 
4486
                  if (tpd2.arg_uses_template_parms [i])
4487
                    {
4488
                      /* The type depended on some template parameters.
4489
                         If they are fully specialized in the
4490
                         specialization, that's OK.  */
4491
                      int j;
4492
                      int count = 0;
4493
                      for (j = 0; j < nargs; ++j)
4494
                        if (tpd2.parms[j] != 0
4495
                            && tpd.arg_uses_template_parms [j])
4496
                          ++count;
4497
                      if (count != 0)
4498
                        error_n (input_location, count,
4499
                                 "type %qT of template argument %qE depends "
4500
                                 "on a template parameter",
4501
                                 "type %qT of template argument %qE depends "
4502
                                 "on template parameters",
4503
                                 type,
4504
                                 arg);
4505
                    }
4506
                }
4507
            }
4508
        }
4509
    }
4510
 
4511
  /* We should only get here once.  */
4512
  gcc_assert (!COMPLETE_TYPE_P (type));
4513
 
4514
  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
4515
    = tree_cons (specargs, inner_parms,
4516
                 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
4517
  TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
4518
 
4519
  for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
4520
       inst = TREE_CHAIN (inst))
4521
    {
4522
      tree inst_type = TREE_VALUE (inst);
4523
      if (COMPLETE_TYPE_P (inst_type)
4524
          && CLASSTYPE_IMPLICIT_INSTANTIATION (inst_type))
4525
        {
4526
          tree spec = most_specialized_class (inst_type, maintmpl, tf_none);
4527
          if (spec && TREE_TYPE (spec) == type)
4528
            permerror (input_location,
4529
                       "partial specialization of %qT after instantiation "
4530
                       "of %qT", type, inst_type);
4531
        }
4532
    }
4533
 
4534
  return decl;
4535
}
4536
 
4537
/* Check that a template declaration's use of default arguments and
4538
   parameter packs is not invalid.  Here, PARMS are the template
4539
   parameters.  IS_PRIMARY is nonzero if DECL is the thing declared by
4540
   a primary template.  IS_PARTIAL is nonzero if DECL is a partial
4541
   specialization.
4542
 
4543
 
4544
   IS_FRIEND_DECL is nonzero if DECL is a friend function template
4545
   declaration (but not a definition); 1 indicates a declaration, 2
4546
   indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
4547
   emitted for extraneous default arguments.
4548
 
4549
   Returns TRUE if there were no errors found, FALSE otherwise. */
4550
 
4551
bool
4552
check_default_tmpl_args (tree decl, tree parms, int is_primary,
4553
                         int is_partial, int is_friend_decl)
4554
{
4555
  const char *msg;
4556
  int last_level_to_check;
4557
  tree parm_level;
4558
  bool no_errors = true;
4559
 
4560
  /* [temp.param]
4561
 
4562
     A default template-argument shall not be specified in a
4563
     function template declaration or a function template definition, nor
4564
     in the template-parameter-list of the definition of a member of a
4565
     class template.  */
4566
 
4567
  if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
4568
    /* You can't have a function template declaration in a local
4569
       scope, nor you can you define a member of a class template in a
4570
       local scope.  */
4571
    return true;
4572
 
4573
  if (current_class_type
4574
      && !TYPE_BEING_DEFINED (current_class_type)
4575
      && DECL_LANG_SPECIFIC (decl)
4576
      && DECL_DECLARES_FUNCTION_P (decl)
4577
      /* If this is either a friend defined in the scope of the class
4578
         or a member function.  */
4579
      && (DECL_FUNCTION_MEMBER_P (decl)
4580
          ? same_type_p (DECL_CONTEXT (decl), current_class_type)
4581
          : DECL_FRIEND_CONTEXT (decl)
4582
          ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
4583
          : false)
4584
      /* And, if it was a member function, it really was defined in
4585
         the scope of the class.  */
4586
      && (!DECL_FUNCTION_MEMBER_P (decl)
4587
          || DECL_INITIALIZED_IN_CLASS_P (decl)))
4588
    /* We already checked these parameters when the template was
4589
       declared, so there's no need to do it again now.  This function
4590
       was defined in class scope, but we're processing it's body now
4591
       that the class is complete.  */
4592
    return true;
4593
 
4594
  /* Core issue 226 (C++0x only): the following only applies to class
4595
     templates.  */
4596
  if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
4597
    {
4598
      /* [temp.param]
4599
 
4600
         If a template-parameter has a default template-argument, all
4601
         subsequent template-parameters shall have a default
4602
         template-argument supplied.  */
4603
      for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
4604
        {
4605
          tree inner_parms = TREE_VALUE (parm_level);
4606
          int ntparms = TREE_VEC_LENGTH (inner_parms);
4607
          int seen_def_arg_p = 0;
4608
          int i;
4609
 
4610
          for (i = 0; i < ntparms; ++i)
4611
            {
4612
              tree parm = TREE_VEC_ELT (inner_parms, i);
4613
 
4614
              if (parm == error_mark_node)
4615
                continue;
4616
 
4617
              if (TREE_PURPOSE (parm))
4618
                seen_def_arg_p = 1;
4619
              else if (seen_def_arg_p
4620
                       && !template_parameter_pack_p (TREE_VALUE (parm)))
4621
                {
4622
                  error ("no default argument for %qD", TREE_VALUE (parm));
4623
                  /* For better subsequent error-recovery, we indicate that
4624
                     there should have been a default argument.  */
4625
                  TREE_PURPOSE (parm) = error_mark_node;
4626
                  no_errors = false;
4627
                }
4628
              else if (is_primary
4629
                       && !is_partial
4630
                       && !is_friend_decl
4631
                       /* Don't complain about an enclosing partial
4632
                          specialization.  */
4633
                       && parm_level == parms
4634
                       && TREE_CODE (decl) == TYPE_DECL
4635
                       && i < ntparms - 1
4636
                       && template_parameter_pack_p (TREE_VALUE (parm)))
4637
                {
4638
                  /* A primary class template can only have one
4639
                     parameter pack, at the end of the template
4640
                     parameter list.  */
4641
 
4642
                  if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
4643
                    error ("parameter pack %qE must be at the end of the"
4644
                           " template parameter list", TREE_VALUE (parm));
4645
                  else
4646
                    error ("parameter pack %qT must be at the end of the"
4647
                           " template parameter list",
4648
                           TREE_TYPE (TREE_VALUE (parm)));
4649
 
4650
                  TREE_VALUE (TREE_VEC_ELT (inner_parms, i))
4651
                    = error_mark_node;
4652
                  no_errors = false;
4653
                }
4654
            }
4655
        }
4656
    }
4657
 
4658
  if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
4659
      || is_partial
4660
      || !is_primary
4661
      || is_friend_decl)
4662
    /* For an ordinary class template, default template arguments are
4663
       allowed at the innermost level, e.g.:
4664
         template <class T = int>
4665
         struct S {};
4666
       but, in a partial specialization, they're not allowed even
4667
       there, as we have in [temp.class.spec]:
4668
 
4669
         The template parameter list of a specialization shall not
4670
         contain default template argument values.
4671
 
4672
       So, for a partial specialization, or for a function template
4673
       (in C++98/C++03), we look at all of them.  */
4674
    ;
4675
  else
4676
    /* But, for a primary class template that is not a partial
4677
       specialization we look at all template parameters except the
4678
       innermost ones.  */
4679
    parms = TREE_CHAIN (parms);
4680
 
4681
  /* Figure out what error message to issue.  */
4682
  if (is_friend_decl == 2)
4683
    msg = G_("default template arguments may not be used in function template "
4684
             "friend re-declaration");
4685
  else if (is_friend_decl)
4686
    msg = G_("default template arguments may not be used in function template "
4687
             "friend declarations");
4688
  else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
4689
    msg = G_("default template arguments may not be used in function templates "
4690
             "without -std=c++11 or -std=gnu++11");
4691
  else if (is_partial)
4692
    msg = G_("default template arguments may not be used in "
4693
             "partial specializations");
4694
  else
4695
    msg = G_("default argument for template parameter for class enclosing %qD");
4696
 
4697
  if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
4698
    /* If we're inside a class definition, there's no need to
4699
       examine the parameters to the class itself.  On the one
4700
       hand, they will be checked when the class is defined, and,
4701
       on the other, default arguments are valid in things like:
4702
         template <class T = double>
4703
         struct S { template <class U> void f(U); };
4704
       Here the default argument for `S' has no bearing on the
4705
       declaration of `f'.  */
4706
    last_level_to_check = template_class_depth (current_class_type) + 1;
4707
  else
4708
    /* Check everything.  */
4709
    last_level_to_check = 0;
4710
 
4711
  for (parm_level = parms;
4712
       parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
4713
       parm_level = TREE_CHAIN (parm_level))
4714
    {
4715
      tree inner_parms = TREE_VALUE (parm_level);
4716
      int i;
4717
      int ntparms;
4718
 
4719
      ntparms = TREE_VEC_LENGTH (inner_parms);
4720
      for (i = 0; i < ntparms; ++i)
4721
        {
4722
          if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
4723
            continue;
4724
 
4725
          if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
4726
            {
4727
              if (msg)
4728
                {
4729
                  no_errors = false;
4730
                  if (is_friend_decl == 2)
4731
                    return no_errors;
4732
 
4733
                  error (msg, decl);
4734
                  msg = 0;
4735
                }
4736
 
4737
              /* Clear out the default argument so that we are not
4738
                 confused later.  */
4739
              TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
4740
            }
4741
        }
4742
 
4743
      /* At this point, if we're still interested in issuing messages,
4744
         they must apply to classes surrounding the object declared.  */
4745
      if (msg)
4746
        msg = G_("default argument for template parameter for class "
4747
                 "enclosing %qD");
4748
    }
4749
 
4750
  return no_errors;
4751
}
4752
 
4753
/* Worker for push_template_decl_real, called via
4754
   for_each_template_parm.  DATA is really an int, indicating the
4755
   level of the parameters we are interested in.  If T is a template
4756
   parameter of that level, return nonzero.  */
4757
 
4758
static int
4759
template_parm_this_level_p (tree t, void* data)
4760
{
4761
  int this_level = *(int *)data;
4762
  int level;
4763
 
4764
  if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4765
    level = TEMPLATE_PARM_LEVEL (t);
4766
  else
4767
    level = TEMPLATE_TYPE_LEVEL (t);
4768
  return level == this_level;
4769
}
4770
 
4771
/* Creates a TEMPLATE_DECL for the indicated DECL using the template
4772
   parameters given by current_template_args, or reuses a
4773
   previously existing one, if appropriate.  Returns the DECL, or an
4774
   equivalent one, if it is replaced via a call to duplicate_decls.
4775
 
4776
   If IS_FRIEND is true, DECL is a friend declaration.  */
4777
 
4778
tree
4779
push_template_decl_real (tree decl, bool is_friend)
4780
{
4781
  tree tmpl;
4782
  tree args;
4783
  tree info;
4784
  tree ctx;
4785
  int primary;
4786
  int is_partial;
4787
  int new_template_p = 0;
4788
  /* True if the template is a member template, in the sense of
4789
     [temp.mem].  */
4790
  bool member_template_p = false;
4791
 
4792
  if (decl == error_mark_node || !current_template_parms)
4793
    return error_mark_node;
4794
 
4795
  /* See if this is a partial specialization.  */
4796
  is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
4797
                && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
4798
                && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
4799
 
4800
  if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
4801
    is_friend = true;
4802
 
4803
  if (is_friend)
4804
    /* For a friend, we want the context of the friend function, not
4805
       the type of which it is a friend.  */
4806
    ctx = CP_DECL_CONTEXT (decl);
4807
  else if (CP_DECL_CONTEXT (decl)
4808
           && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4809
    /* In the case of a virtual function, we want the class in which
4810
       it is defined.  */
4811
    ctx = CP_DECL_CONTEXT (decl);
4812
  else
4813
    /* Otherwise, if we're currently defining some class, the DECL
4814
       is assumed to be a member of the class.  */
4815
    ctx = current_scope ();
4816
 
4817
  if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
4818
    ctx = NULL_TREE;
4819
 
4820
  if (!DECL_CONTEXT (decl))
4821
    DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
4822
 
4823
  /* See if this is a primary template.  */
4824
  if (is_friend && ctx)
4825
    /* A friend template that specifies a class context, i.e.
4826
         template <typename T> friend void A<T>::f();
4827
       is not primary.  */
4828
    primary = 0;
4829
  else
4830
    primary = template_parm_scope_p ();
4831
 
4832
  if (primary)
4833
    {
4834
      if (DECL_CLASS_SCOPE_P (decl))
4835
        member_template_p = true;
4836
      if (TREE_CODE (decl) == TYPE_DECL
4837
          && ANON_AGGRNAME_P (DECL_NAME (decl)))
4838
        {
4839
          error ("template class without a name");
4840
          return error_mark_node;
4841
        }
4842
      else if (TREE_CODE (decl) == FUNCTION_DECL)
4843
        {
4844
          if (DECL_DESTRUCTOR_P (decl))
4845
            {
4846
              /* [temp.mem]
4847
 
4848
                 A destructor shall not be a member template.  */
4849
              error ("destructor %qD declared as member template", decl);
4850
              return error_mark_node;
4851
            }
4852
          if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
4853
              && (!prototype_p (TREE_TYPE (decl))
4854
                  || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
4855
                  || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
4856
                  || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
4857
                      == void_list_node)))
4858
            {
4859
              /* [basic.stc.dynamic.allocation]
4860
 
4861
                 An allocation function can be a function
4862
                 template. ... Template allocation functions shall
4863
                 have two or more parameters.  */
4864
              error ("invalid template declaration of %qD", decl);
4865
              return error_mark_node;
4866
            }
4867
        }
4868
      else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4869
               && CLASS_TYPE_P (TREE_TYPE (decl)))
4870
        /* OK */;
4871
      else if (TREE_CODE (decl) == TYPE_DECL
4872
               && TYPE_DECL_ALIAS_P (decl))
4873
        /* alias-declaration */
4874
        gcc_assert (!DECL_ARTIFICIAL (decl));
4875
      else
4876
        {
4877
          error ("template declaration of %q#D", decl);
4878
          return error_mark_node;
4879
        }
4880
    }
4881
 
4882
  /* Check to see that the rules regarding the use of default
4883
     arguments are not being violated.  */
4884
  check_default_tmpl_args (decl, current_template_parms,
4885
                           primary, is_partial, /*is_friend_decl=*/0);
4886
 
4887
  /* Ensure that there are no parameter packs in the type of this
4888
     declaration that have not been expanded.  */
4889
  if (TREE_CODE (decl) == FUNCTION_DECL)
4890
    {
4891
      /* Check each of the arguments individually to see if there are
4892
         any bare parameter packs.  */
4893
      tree type = TREE_TYPE (decl);
4894
      tree arg = DECL_ARGUMENTS (decl);
4895
      tree argtype = TYPE_ARG_TYPES (type);
4896
 
4897
      while (arg && argtype)
4898
        {
4899
          if (!FUNCTION_PARAMETER_PACK_P (arg)
4900
              && check_for_bare_parameter_packs (TREE_TYPE (arg)))
4901
            {
4902
            /* This is a PARM_DECL that contains unexpanded parameter
4903
               packs. We have already complained about this in the
4904
               check_for_bare_parameter_packs call, so just replace
4905
               these types with ERROR_MARK_NODE.  */
4906
              TREE_TYPE (arg) = error_mark_node;
4907
              TREE_VALUE (argtype) = error_mark_node;
4908
            }
4909
 
4910
          arg = DECL_CHAIN (arg);
4911
          argtype = TREE_CHAIN (argtype);
4912
        }
4913
 
4914
      /* Check for bare parameter packs in the return type and the
4915
         exception specifiers.  */
4916
      if (check_for_bare_parameter_packs (TREE_TYPE (type)))
4917
        /* Errors were already issued, set return type to int
4918
           as the frontend doesn't expect error_mark_node as
4919
           the return type.  */
4920
        TREE_TYPE (type) = integer_type_node;
4921
      if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
4922
        TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
4923
    }
4924
  else if (check_for_bare_parameter_packs ((TREE_CODE (decl) == TYPE_DECL
4925
                                            && TYPE_DECL_ALIAS_P (decl))
4926
                                           ? DECL_ORIGINAL_TYPE (decl)
4927
                                           : TREE_TYPE (decl)))
4928
    {
4929
      TREE_TYPE (decl) = error_mark_node;
4930
      return error_mark_node;
4931
    }
4932
 
4933
  if (is_partial)
4934
    return process_partial_specialization (decl);
4935
 
4936
  args = current_template_args ();
4937
 
4938
  if (!ctx
4939
      || TREE_CODE (ctx) == FUNCTION_DECL
4940
      || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
4941
      || (is_friend && !DECL_TEMPLATE_INFO (decl)))
4942
    {
4943
      if (DECL_LANG_SPECIFIC (decl)
4944
          && DECL_TEMPLATE_INFO (decl)
4945
          && DECL_TI_TEMPLATE (decl))
4946
        tmpl = DECL_TI_TEMPLATE (decl);
4947
      /* If DECL is a TYPE_DECL for a class-template, then there won't
4948
         be DECL_LANG_SPECIFIC.  The information equivalent to
4949
         DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
4950
      else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4951
               && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
4952
               && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
4953
        {
4954
          /* Since a template declaration already existed for this
4955
             class-type, we must be redeclaring it here.  Make sure
4956
             that the redeclaration is valid.  */
4957
          redeclare_class_template (TREE_TYPE (decl),
4958
                                    current_template_parms);
4959
          /* We don't need to create a new TEMPLATE_DECL; just use the
4960
             one we already had.  */
4961
          tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
4962
        }
4963
      else
4964
        {
4965
          tmpl = build_template_decl (decl, current_template_parms,
4966
                                      member_template_p);
4967
          new_template_p = 1;
4968
 
4969
          if (DECL_LANG_SPECIFIC (decl)
4970
              && DECL_TEMPLATE_SPECIALIZATION (decl))
4971
            {
4972
              /* A specialization of a member template of a template
4973
                 class.  */
4974
              SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4975
              DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
4976
              DECL_TEMPLATE_INFO (decl) = NULL_TREE;
4977
            }
4978
        }
4979
    }
4980
  else
4981
    {
4982
      tree a, t, current, parms;
4983
      int i;
4984
      tree tinfo = get_template_info (decl);
4985
 
4986
      if (!tinfo)
4987
        {
4988
          error ("template definition of non-template %q#D", decl);
4989
          return error_mark_node;
4990
        }
4991
 
4992
      tmpl = TI_TEMPLATE (tinfo);
4993
 
4994
      if (DECL_FUNCTION_TEMPLATE_P (tmpl)
4995
          && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
4996
          && DECL_TEMPLATE_SPECIALIZATION (decl)
4997
          && DECL_MEMBER_TEMPLATE_P (tmpl))
4998
        {
4999
          tree new_tmpl;
5000
 
5001
          /* The declaration is a specialization of a member
5002
             template, declared outside the class.  Therefore, the
5003
             innermost template arguments will be NULL, so we
5004
             replace them with the arguments determined by the
5005
             earlier call to check_explicit_specialization.  */
5006
          args = DECL_TI_ARGS (decl);
5007
 
5008
          new_tmpl
5009
            = build_template_decl (decl, current_template_parms,
5010
                                   member_template_p);
5011
          DECL_TEMPLATE_RESULT (new_tmpl) = decl;
5012
          TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
5013
          DECL_TI_TEMPLATE (decl) = new_tmpl;
5014
          SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
5015
          DECL_TEMPLATE_INFO (new_tmpl)
5016
            = build_template_info (tmpl, args);
5017
 
5018
          register_specialization (new_tmpl,
5019
                                   most_general_template (tmpl),
5020
                                   args,
5021
                                   is_friend, 0);
5022
          return decl;
5023
        }
5024
 
5025
      /* Make sure the template headers we got make sense.  */
5026
 
5027
      parms = DECL_TEMPLATE_PARMS (tmpl);
5028
      i = TMPL_PARMS_DEPTH (parms);
5029
      if (TMPL_ARGS_DEPTH (args) != i)
5030
        {
5031
          error ("expected %d levels of template parms for %q#D, got %d",
5032
                 i, decl, TMPL_ARGS_DEPTH (args));
5033
        }
5034
      else
5035
        for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
5036
          {
5037
            a = TMPL_ARGS_LEVEL (args, i);
5038
            t = INNERMOST_TEMPLATE_PARMS (parms);
5039
 
5040
            if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
5041
              {
5042
                if (current == decl)
5043
                  error ("got %d template parameters for %q#D",
5044
                         TREE_VEC_LENGTH (a), decl);
5045
                else
5046
                  error ("got %d template parameters for %q#T",
5047
                         TREE_VEC_LENGTH (a), current);
5048
                error ("  but %d required", TREE_VEC_LENGTH (t));
5049
                return error_mark_node;
5050
              }
5051
 
5052
            if (current == decl)
5053
              current = ctx;
5054
            else if (current == NULL_TREE)
5055
              /* Can happen in erroneous input.  */
5056
              break;
5057
            else
5058
              current = (TYPE_P (current)
5059
                         ? TYPE_CONTEXT (current)
5060
                         : DECL_CONTEXT (current));
5061
          }
5062
 
5063
      /* Check that the parms are used in the appropriate qualifying scopes
5064
         in the declarator.  */
5065
      if (!comp_template_args
5066
          (TI_ARGS (tinfo),
5067
           TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
5068
        {
5069
          error ("\
5070
template arguments to %qD do not match original template %qD",
5071
                 decl, DECL_TEMPLATE_RESULT (tmpl));
5072
          if (!uses_template_parms (TI_ARGS (tinfo)))
5073
            inform (input_location, "use template<> for an explicit specialization");
5074
          /* Avoid crash in import_export_decl.  */
5075
          DECL_INTERFACE_KNOWN (decl) = 1;
5076
          return error_mark_node;
5077
        }
5078
    }
5079
 
5080
  DECL_TEMPLATE_RESULT (tmpl) = decl;
5081
  TREE_TYPE (tmpl) = TREE_TYPE (decl);
5082
 
5083
  /* Push template declarations for global functions and types.  Note
5084
     that we do not try to push a global template friend declared in a
5085
     template class; such a thing may well depend on the template
5086
     parameters of the class.  */
5087
  if (new_template_p && !ctx
5088
      && !(is_friend && template_class_depth (current_class_type) > 0))
5089
    {
5090
      tmpl = pushdecl_namespace_level (tmpl, is_friend);
5091
      if (tmpl == error_mark_node)
5092
        return error_mark_node;
5093
 
5094
      /* Hide template friend classes that haven't been declared yet.  */
5095
      if (is_friend && TREE_CODE (decl) == TYPE_DECL)
5096
        {
5097
          DECL_ANTICIPATED (tmpl) = 1;
5098
          DECL_FRIEND_P (tmpl) = 1;
5099
        }
5100
    }
5101
 
5102
  if (primary)
5103
    {
5104
      tree parms = DECL_TEMPLATE_PARMS (tmpl);
5105
      int i;
5106
 
5107
      DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5108
      if (DECL_CONV_FN_P (tmpl))
5109
        {
5110
          int depth = TMPL_PARMS_DEPTH (parms);
5111
 
5112
          /* It is a conversion operator. See if the type converted to
5113
             depends on innermost template operands.  */
5114
 
5115
          if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
5116
                                         depth))
5117
            DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
5118
        }
5119
 
5120
      /* Give template template parms a DECL_CONTEXT of the template
5121
         for which they are a parameter.  */
5122
      parms = INNERMOST_TEMPLATE_PARMS (parms);
5123
      for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
5124
        {
5125
          tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5126
          if (TREE_CODE (parm) == TEMPLATE_DECL)
5127
            DECL_CONTEXT (parm) = tmpl;
5128
        }
5129
    }
5130
 
5131
  /* The DECL_TI_ARGS of DECL contains full set of arguments referring
5132
     back to its most general template.  If TMPL is a specialization,
5133
     ARGS may only have the innermost set of arguments.  Add the missing
5134
     argument levels if necessary.  */
5135
  if (DECL_TEMPLATE_INFO (tmpl))
5136
    args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
5137
 
5138
  info = build_template_info (tmpl, args);
5139
 
5140
  if (DECL_IMPLICIT_TYPEDEF_P (decl))
5141
    SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
5142
  else
5143
    {
5144
      if (primary && !DECL_LANG_SPECIFIC (decl))
5145
        retrofit_lang_decl (decl);
5146
      if (DECL_LANG_SPECIFIC (decl))
5147
        DECL_TEMPLATE_INFO (decl) = info;
5148
    }
5149
 
5150
  return DECL_TEMPLATE_RESULT (tmpl);
5151
}
5152
 
5153
tree
5154
push_template_decl (tree decl)
5155
{
5156
  return push_template_decl_real (decl, false);
5157
}
5158
 
5159
/* Called when a class template TYPE is redeclared with the indicated
5160
   template PARMS, e.g.:
5161
 
5162
     template <class T> struct S;
5163
     template <class T> struct S {};  */
5164
 
5165
bool
5166
redeclare_class_template (tree type, tree parms)
5167
{
5168
  tree tmpl;
5169
  tree tmpl_parms;
5170
  int i;
5171
 
5172
  if (!TYPE_TEMPLATE_INFO (type))
5173
    {
5174
      error ("%qT is not a template type", type);
5175
      return false;
5176
    }
5177
 
5178
  tmpl = TYPE_TI_TEMPLATE (type);
5179
  if (!PRIMARY_TEMPLATE_P (tmpl))
5180
    /* The type is nested in some template class.  Nothing to worry
5181
       about here; there are no new template parameters for the nested
5182
       type.  */
5183
    return true;
5184
 
5185
  if (!parms)
5186
    {
5187
      error ("template specifiers not specified in declaration of %qD",
5188
             tmpl);
5189
      return false;
5190
    }
5191
 
5192
  parms = INNERMOST_TEMPLATE_PARMS (parms);
5193
  tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
5194
 
5195
  if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
5196
    {
5197
      error_n (input_location, TREE_VEC_LENGTH (parms),
5198
               "redeclared with %d template parameter",
5199
               "redeclared with %d template parameters",
5200
               TREE_VEC_LENGTH (parms));
5201
      inform_n (input_location, TREE_VEC_LENGTH (tmpl_parms),
5202
                "previous declaration %q+D used %d template parameter",
5203
                "previous declaration %q+D used %d template parameters",
5204
                tmpl, TREE_VEC_LENGTH (tmpl_parms));
5205
      return false;
5206
    }
5207
 
5208
  for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
5209
    {
5210
      tree tmpl_parm;
5211
      tree parm;
5212
      tree tmpl_default;
5213
      tree parm_default;
5214
 
5215
      if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
5216
          || TREE_VEC_ELT (parms, i) == error_mark_node)
5217
        continue;
5218
 
5219
      tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
5220
      if (tmpl_parm == error_mark_node)
5221
        return false;
5222
 
5223
      parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5224
      tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
5225
      parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
5226
 
5227
      /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
5228
         TEMPLATE_DECL.  */
5229
      if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
5230
          || (TREE_CODE (tmpl_parm) != TYPE_DECL
5231
              && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
5232
          || (TREE_CODE (tmpl_parm) != PARM_DECL
5233
              && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
5234
                  != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
5235
          || (TREE_CODE (tmpl_parm) == PARM_DECL
5236
              && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
5237
                  != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
5238
        {
5239
          error ("template parameter %q+#D", tmpl_parm);
5240
          error ("redeclared here as %q#D", parm);
5241
          return false;
5242
        }
5243
 
5244
      if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
5245
        {
5246
          /* We have in [temp.param]:
5247
 
5248
             A template-parameter may not be given default arguments
5249
             by two different declarations in the same scope.  */
5250
          error_at (input_location, "redefinition of default argument for %q#D", parm);
5251
          inform (DECL_SOURCE_LOCATION (tmpl_parm),
5252
                  "original definition appeared here");
5253
          return false;
5254
        }
5255
 
5256
      if (parm_default != NULL_TREE)
5257
        /* Update the previous template parameters (which are the ones
5258
           that will really count) with the new default value.  */
5259
        TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
5260
      else if (tmpl_default != NULL_TREE)
5261
        /* Update the new parameters, too; they'll be used as the
5262
           parameters for any members.  */
5263
        TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
5264
    }
5265
 
5266
    return true;
5267
}
5268
 
5269
/* Simplify EXPR if it is a non-dependent expression.  Returns the
5270
   (possibly simplified) expression.  */
5271
 
5272
static tree
5273
fold_non_dependent_expr_sfinae (tree expr, tsubst_flags_t complain)
5274
{
5275
  if (expr == NULL_TREE)
5276
    return NULL_TREE;
5277
 
5278
  /* If we're in a template, but EXPR isn't value dependent, simplify
5279
     it.  We're supposed to treat:
5280
 
5281
       template <typename T> void f(T[1 + 1]);
5282
       template <typename T> void f(T[2]);
5283
 
5284
     as two declarations of the same function, for example.  */
5285
  if (processing_template_decl
5286
      && !type_dependent_expression_p (expr)
5287
      && potential_constant_expression (expr)
5288
      && !value_dependent_expression_p (expr))
5289
    {
5290
      HOST_WIDE_INT saved_processing_template_decl;
5291
 
5292
      saved_processing_template_decl = processing_template_decl;
5293
      processing_template_decl = 0;
5294
      expr = tsubst_copy_and_build (expr,
5295
                                    /*args=*/NULL_TREE,
5296
                                    complain,
5297
                                    /*in_decl=*/NULL_TREE,
5298
                                    /*function_p=*/false,
5299
                                    /*integral_constant_expression_p=*/true);
5300
      processing_template_decl = saved_processing_template_decl;
5301
    }
5302
  return expr;
5303
}
5304
 
5305
tree
5306
fold_non_dependent_expr (tree expr)
5307
{
5308
  return fold_non_dependent_expr_sfinae (expr, tf_error);
5309
}
5310
 
5311
/* Return TRUE iff T is a type alias, a TEMPLATE_DECL for an alias
5312
   template declaration, or a TYPE_DECL for an alias declaration.  */
5313
 
5314
bool
5315
alias_type_or_template_p (tree t)
5316
{
5317
  if (t == NULL_TREE)
5318
    return false;
5319
  return ((TREE_CODE (t) == TYPE_DECL && TYPE_DECL_ALIAS_P (t))
5320
          || (TYPE_P (t)
5321
              && TYPE_NAME (t)
5322
              && TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
5323
          || DECL_ALIAS_TEMPLATE_P (t));
5324
}
5325
 
5326
/* Return TRUE iff is a specialization of an alias template.  */
5327
 
5328
bool
5329
alias_template_specialization_p (tree t)
5330
{
5331
  if (t == NULL_TREE)
5332
    return false;
5333
  return (primary_template_instantiation_p (t)
5334
          && DECL_ALIAS_TEMPLATE_P (TYPE_TI_TEMPLATE (t)));
5335
}
5336
 
5337
/* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
5338
   must be a function or a pointer-to-function type, as specified
5339
   in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
5340
   and check that the resulting function has external linkage.  */
5341
 
5342
static tree
5343
convert_nontype_argument_function (tree type, tree expr)
5344
{
5345
  tree fns = expr;
5346
  tree fn, fn_no_ptr;
5347
  linkage_kind linkage;
5348
 
5349
  fn = instantiate_type (type, fns, tf_none);
5350
  if (fn == error_mark_node)
5351
    return error_mark_node;
5352
 
5353
  fn_no_ptr = fn;
5354
  if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
5355
    fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
5356
  if (BASELINK_P (fn_no_ptr))
5357
    fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
5358
 
5359
  /* [temp.arg.nontype]/1
5360
 
5361
     A template-argument for a non-type, non-template template-parameter
5362
     shall be one of:
5363
     [...]
5364
     -- the address of an object or function with external [C++11: or
5365
        internal] linkage.  */
5366
  linkage = decl_linkage (fn_no_ptr);
5367
  if (cxx_dialect >= cxx0x ? linkage == lk_none : linkage != lk_external)
5368
    {
5369
      if (cxx_dialect >= cxx0x)
5370
        error ("%qE is not a valid template argument for type %qT "
5371
               "because %qD has no linkage",
5372
               expr, type, fn_no_ptr);
5373
      else
5374
        error ("%qE is not a valid template argument for type %qT "
5375
               "because %qD does not have external linkage",
5376
               expr, type, fn_no_ptr);
5377
      return NULL_TREE;
5378
    }
5379
 
5380
  return fn;
5381
}
5382
 
5383
/* Subroutine of convert_nontype_argument.
5384
   Check if EXPR of type TYPE is a valid pointer-to-member constant.
5385
   Emit an error otherwise.  */
5386
 
5387
static bool
5388
check_valid_ptrmem_cst_expr (tree type, tree expr,
5389
                             tsubst_flags_t complain)
5390
{
5391
  STRIP_NOPS (expr);
5392
  if (expr && (null_ptr_cst_p (expr) || TREE_CODE (expr) == PTRMEM_CST))
5393
    return true;
5394
  if (cxx_dialect >= cxx0x && null_member_pointer_value_p (expr))
5395
    return true;
5396
  if (complain & tf_error)
5397
    {
5398
      error ("%qE is not a valid template argument for type %qT",
5399
             expr, type);
5400
      error ("it must be a pointer-to-member of the form %<&X::Y%>");
5401
    }
5402
  return false;
5403
}
5404
 
5405
/* Returns TRUE iff the address of OP is value-dependent.
5406
 
5407
   14.6.2.4 [temp.dep.temp]:
5408
   A non-integral non-type template-argument is dependent if its type is
5409
   dependent or it has either of the following forms
5410
     qualified-id
5411
     & qualified-id
5412
   and contains a nested-name-specifier which specifies a class-name that
5413
   names a dependent type.
5414
 
5415
   We generalize this to just say that the address of a member of a
5416
   dependent class is value-dependent; the above doesn't cover the
5417
   address of a static data member named with an unqualified-id.  */
5418
 
5419
static bool
5420
has_value_dependent_address (tree op)
5421
{
5422
  /* We could use get_inner_reference here, but there's no need;
5423
     this is only relevant for template non-type arguments, which
5424
     can only be expressed as &id-expression.  */
5425
  if (DECL_P (op))
5426
    {
5427
      tree ctx = CP_DECL_CONTEXT (op);
5428
      if (TYPE_P (ctx) && dependent_type_p (ctx))
5429
        return true;
5430
    }
5431
 
5432
  return false;
5433
}
5434
 
5435
/* The next set of functions are used for providing helpful explanatory
5436
   diagnostics for failed overload resolution.  Their messages should be
5437
   indented by two spaces for consistency with the messages in
5438
   call.c  */
5439
 
5440
static int
5441
unify_success (bool explain_p ATTRIBUTE_UNUSED)
5442
{
5443
  return 0;
5444
}
5445
 
5446
static int
5447
unify_parameter_deduction_failure (bool explain_p, tree parm)
5448
{
5449
  if (explain_p)
5450
    inform (input_location,
5451
            "  couldn't deduce template parameter %qD", parm);
5452
  return 1;
5453
}
5454
 
5455
static int
5456
unify_invalid (bool explain_p ATTRIBUTE_UNUSED)
5457
{
5458
  return 1;
5459
}
5460
 
5461
static int
5462
unify_cv_qual_mismatch (bool explain_p, tree parm, tree arg)
5463
{
5464
  if (explain_p)
5465
    inform (input_location,
5466
            "  types %qT and %qT have incompatible cv-qualifiers",
5467
            parm, arg);
5468
  return 1;
5469
}
5470
 
5471
static int
5472
unify_type_mismatch (bool explain_p, tree parm, tree arg)
5473
{
5474
  if (explain_p)
5475
    inform (input_location, "  mismatched types %qT and %qT", parm, arg);
5476
  return 1;
5477
}
5478
 
5479
static int
5480
unify_parameter_pack_mismatch (bool explain_p, tree parm, tree arg)
5481
{
5482
  if (explain_p)
5483
    inform (input_location,
5484
            "  template parameter %qD is not a parameter pack, but "
5485
            "argument %qD is",
5486
            parm, arg);
5487
  return 1;
5488
}
5489
 
5490
static int
5491
unify_ptrmem_cst_mismatch (bool explain_p, tree parm, tree arg)
5492
{
5493
  if (explain_p)
5494
    inform (input_location,
5495
            "  template argument %qE does not match "
5496
            "pointer-to-member constant %qE",
5497
            arg, parm);
5498
  return 1;
5499
}
5500
 
5501
static int
5502
unify_expression_unequal (bool explain_p, tree parm, tree arg)
5503
{
5504
  if (explain_p)
5505
    inform (input_location, "  %qE is not equivalent to %qE", parm, arg);
5506
  return 1;
5507
}
5508
 
5509
static int
5510
unify_parameter_pack_inconsistent (bool explain_p, tree old_arg, tree new_arg)
5511
{
5512
  if (explain_p)
5513
    inform (input_location,
5514
            "  inconsistent parameter pack deduction with %qT and %qT",
5515
            old_arg, new_arg);
5516
  return 1;
5517
}
5518
 
5519
static int
5520
unify_inconsistency (bool explain_p, tree parm, tree first, tree second)
5521
{
5522
  if (explain_p)
5523
    {
5524
      if (TYPE_P (parm))
5525
        inform (input_location,
5526
                "  deduced conflicting types for parameter %qT (%qT and %qT)",
5527
                parm, first, second);
5528
      else
5529
        inform (input_location,
5530
                "  deduced conflicting values for non-type parameter "
5531
                "%qE (%qE and %qE)", parm, first, second);
5532
    }
5533
  return 1;
5534
}
5535
 
5536
static int
5537
unify_vla_arg (bool explain_p, tree arg)
5538
{
5539
  if (explain_p)
5540
    inform (input_location,
5541
            "  variable-sized array type %qT is not "
5542
            "a valid template argument",
5543
            arg);
5544
  return 1;
5545
}
5546
 
5547
static int
5548
unify_method_type_error (bool explain_p, tree arg)
5549
{
5550
  if (explain_p)
5551
    inform (input_location,
5552
            "  member function type %qT is not a valid template argument",
5553
            arg);
5554
  return 1;
5555
}
5556
 
5557
static int
5558
unify_arity (bool explain_p, int have, int wanted)
5559
{
5560
  if (explain_p)
5561
    inform_n (input_location, wanted,
5562
              "  candidate expects %d argument, %d provided",
5563
              "  candidate expects %d arguments, %d provided",
5564
              wanted, have);
5565
  return 1;
5566
}
5567
 
5568
static int
5569
unify_too_many_arguments (bool explain_p, int have, int wanted)
5570
{
5571
  return unify_arity (explain_p, have, wanted);
5572
}
5573
 
5574
static int
5575
unify_too_few_arguments (bool explain_p, int have, int wanted)
5576
{
5577
  return unify_arity (explain_p, have, wanted);
5578
}
5579
 
5580
static int
5581
unify_arg_conversion (bool explain_p, tree to_type,
5582
                      tree from_type, tree arg)
5583
{
5584
  if (explain_p)
5585
    inform (input_location, "  cannot convert %qE (type %qT) to type %qT",
5586
            arg, from_type, to_type);
5587
  return 1;
5588
}
5589
 
5590
static int
5591
unify_no_common_base (bool explain_p, enum template_base_result r,
5592
                      tree parm, tree arg)
5593
{
5594
  if (explain_p)
5595
    switch (r)
5596
      {
5597
      case tbr_ambiguous_baseclass:
5598
        inform (input_location, "  %qT is an ambiguous base class of %qT",
5599
                arg, parm);
5600
        break;
5601
      default:
5602
        inform (input_location, "  %qT is not derived from %qT", arg, parm);
5603
        break;
5604
      }
5605
  return 1;
5606
}
5607
 
5608
static int
5609
unify_inconsistent_template_template_parameters (bool explain_p)
5610
{
5611
  if (explain_p)
5612
    inform (input_location,
5613
            "  template parameters of a template template argument are "
5614
            "inconsistent with other deduced template arguments");
5615
  return 1;
5616
}
5617
 
5618
static int
5619
unify_template_deduction_failure (bool explain_p, tree parm, tree arg)
5620
{
5621
  if (explain_p)
5622
    inform (input_location,
5623
            "  can't deduce a template for %qT from non-template type %qT",
5624
            parm, arg);
5625
  return 1;
5626
}
5627
 
5628
static int
5629
unify_template_argument_mismatch (bool explain_p, tree parm, tree arg)
5630
{
5631
  if (explain_p)
5632
    inform (input_location,
5633
            "  template argument %qE does not match %qD", arg, parm);
5634
  return 1;
5635
}
5636
 
5637
static int
5638
unify_overload_resolution_failure (bool explain_p, tree arg)
5639
{
5640
  if (explain_p)
5641
    inform (input_location,
5642
            "  could not resolve address from overloaded function %qE",
5643
            arg);
5644
  return 1;
5645
}
5646
 
5647
/* Attempt to convert the non-type template parameter EXPR to the
5648
   indicated TYPE.  If the conversion is successful, return the
5649
   converted value.  If the conversion is unsuccessful, return
5650
   NULL_TREE if we issued an error message, or error_mark_node if we
5651
   did not.  We issue error messages for out-and-out bad template
5652
   parameters, but not simply because the conversion failed, since we
5653
   might be just trying to do argument deduction.  Both TYPE and EXPR
5654
   must be non-dependent.
5655
 
5656
   The conversion follows the special rules described in
5657
   [temp.arg.nontype], and it is much more strict than an implicit
5658
   conversion.
5659
 
5660
   This function is called twice for each template argument (see
5661
   lookup_template_class for a more accurate description of this
5662
   problem). This means that we need to handle expressions which
5663
   are not valid in a C++ source, but can be created from the
5664
   first call (for instance, casts to perform conversions). These
5665
   hacks can go away after we fix the double coercion problem.  */
5666
 
5667
static tree
5668
convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
5669
{
5670
  tree expr_type;
5671
 
5672
  /* Detect immediately string literals as invalid non-type argument.
5673
     This special-case is not needed for correctness (we would easily
5674
     catch this later), but only to provide better diagnostic for this
5675
     common user mistake. As suggested by DR 100, we do not mention
5676
     linkage issues in the diagnostic as this is not the point.  */
5677
  /* FIXME we're making this OK.  */
5678
  if (TREE_CODE (expr) == STRING_CST)
5679
    {
5680
      if (complain & tf_error)
5681
        error ("%qE is not a valid template argument for type %qT "
5682
               "because string literals can never be used in this context",
5683
               expr, type);
5684
      return NULL_TREE;
5685
    }
5686
 
5687
  /* Add the ADDR_EXPR now for the benefit of
5688
     value_dependent_expression_p.  */
5689
  if (TYPE_PTROBV_P (type)
5690
      && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE)
5691
    expr = decay_conversion (expr);
5692
 
5693
  /* If we are in a template, EXPR may be non-dependent, but still
5694
     have a syntactic, rather than semantic, form.  For example, EXPR
5695
     might be a SCOPE_REF, rather than the VAR_DECL to which the
5696
     SCOPE_REF refers.  Preserving the qualifying scope is necessary
5697
     so that access checking can be performed when the template is
5698
     instantiated -- but here we need the resolved form so that we can
5699
     convert the argument.  */
5700
  if (TYPE_REF_OBJ_P (type)
5701
      && has_value_dependent_address (expr))
5702
    /* If we want the address and it's value-dependent, don't fold.  */;
5703
  else if (!type_unknown_p (expr))
5704
    expr = fold_non_dependent_expr_sfinae (expr, complain);
5705
  if (error_operand_p (expr))
5706
    return error_mark_node;
5707
  expr_type = TREE_TYPE (expr);
5708
  if (TREE_CODE (type) == REFERENCE_TYPE)
5709
    expr = mark_lvalue_use (expr);
5710
  else
5711
    expr = mark_rvalue_use (expr);
5712
 
5713
  /* 14.3.2/5: The null pointer{,-to-member} conversion is applied
5714
     to a non-type argument of "nullptr".  */
5715
  if (expr == nullptr_node
5716
      && (TYPE_PTR_P (type) || TYPE_PTR_TO_MEMBER_P (type)))
5717
    expr = convert (type, expr);
5718
 
5719
  /* In C++11, integral or enumeration non-type template arguments can be
5720
     arbitrary constant expressions.  Pointer and pointer to
5721
     member arguments can be general constant expressions that evaluate
5722
     to a null value, but otherwise still need to be of a specific form.  */
5723
  if (cxx_dialect >= cxx0x)
5724
    {
5725
      if (TREE_CODE (expr) == PTRMEM_CST)
5726
        /* A PTRMEM_CST is already constant, and a valid template
5727
           argument for a parameter of pointer to member type, we just want
5728
           to leave it in that form rather than lower it to a
5729
           CONSTRUCTOR.  */;
5730
      else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5731
        expr = maybe_constant_value (expr);
5732
      else if (TYPE_PTR_P (type)
5733
               || TYPE_PTR_TO_MEMBER_P (type))
5734
        {
5735
          tree folded = maybe_constant_value (expr);
5736
          if (TYPE_PTR_P (type) ? integer_zerop (folded)
5737
              : null_member_pointer_value_p (folded))
5738
            expr = folded;
5739
        }
5740
    }
5741
 
5742
  /* HACK: Due to double coercion, we can get a
5743
     NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
5744
     which is the tree that we built on the first call (see
5745
     below when coercing to reference to object or to reference to
5746
     function). We just strip everything and get to the arg.
5747
     See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
5748
     for examples.  */
5749
  if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
5750
    {
5751
      tree probe_type, probe = expr;
5752
      if (REFERENCE_REF_P (probe))
5753
        probe = TREE_OPERAND (probe, 0);
5754
      probe_type = TREE_TYPE (probe);
5755
      if (TREE_CODE (probe) == NOP_EXPR)
5756
        {
5757
          /* ??? Maybe we could use convert_from_reference here, but we
5758
             would need to relax its constraints because the NOP_EXPR
5759
             could actually change the type to something more cv-qualified,
5760
             and this is not folded by convert_from_reference.  */
5761
          tree addr = TREE_OPERAND (probe, 0);
5762
          gcc_assert (TREE_CODE (probe_type) == REFERENCE_TYPE);
5763
          gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
5764
          gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
5765
          gcc_assert (same_type_ignoring_top_level_qualifiers_p
5766
                      (TREE_TYPE (probe_type),
5767
                       TREE_TYPE (TREE_TYPE (addr))));
5768
 
5769
          expr = TREE_OPERAND (addr, 0);
5770
          expr_type = TREE_TYPE (expr);
5771
        }
5772
    }
5773
 
5774
  /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
5775
     parameter is a pointer to object, through decay and
5776
     qualification conversion. Let's strip everything.  */
5777
  else if (TREE_CODE (expr) == NOP_EXPR && TYPE_PTROBV_P (type))
5778
    {
5779
      STRIP_NOPS (expr);
5780
      gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
5781
      gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
5782
      /* Skip the ADDR_EXPR only if it is part of the decay for
5783
         an array. Otherwise, it is part of the original argument
5784
         in the source code.  */
5785
      if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
5786
        expr = TREE_OPERAND (expr, 0);
5787
      expr_type = TREE_TYPE (expr);
5788
    }
5789
 
5790
  /* [temp.arg.nontype]/5, bullet 1
5791
 
5792
     For a non-type template-parameter of integral or enumeration type,
5793
     integral promotions (_conv.prom_) and integral conversions
5794
     (_conv.integral_) are applied.  */
5795
  if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5796
    {
5797
      tree t = build_integral_nontype_arg_conv (type, expr, complain);
5798
      t = maybe_constant_value (t);
5799
      if (t != error_mark_node)
5800
        expr = t;
5801
 
5802
      if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (expr)))
5803
        return error_mark_node;
5804
 
5805
      /* Notice that there are constant expressions like '4 % 0' which
5806
         do not fold into integer constants.  */
5807
      if (TREE_CODE (expr) != INTEGER_CST)
5808
        {
5809
          if (complain & tf_error)
5810
            {
5811
              int errs = errorcount, warns = warningcount;
5812
              if (processing_template_decl
5813
                  && !require_potential_constant_expression (expr))
5814
                return NULL_TREE;
5815
              expr = cxx_constant_value (expr);
5816
              if (errorcount > errs || warningcount > warns)
5817
                inform (EXPR_LOC_OR_HERE (expr),
5818
                        "in template argument for type %qT ", type);
5819
              if (expr == error_mark_node)
5820
                return NULL_TREE;
5821
              /* else cxx_constant_value complained but gave us
5822
                 a real constant, so go ahead.  */
5823
              gcc_assert (TREE_CODE (expr) == INTEGER_CST);
5824
            }
5825
          else
5826
            return NULL_TREE;
5827
        }
5828
    }
5829
  /* [temp.arg.nontype]/5, bullet 2
5830
 
5831
     For a non-type template-parameter of type pointer to object,
5832
     qualification conversions (_conv.qual_) and the array-to-pointer
5833
     conversion (_conv.array_) are applied.  */
5834
  else if (TYPE_PTROBV_P (type))
5835
    {
5836
      /* [temp.arg.nontype]/1  (TC1 version, DR 49):
5837
 
5838
         A template-argument for a non-type, non-template template-parameter
5839
         shall be one of: [...]
5840
 
5841
         -- the name of a non-type template-parameter;
5842
         -- the address of an object or function with external linkage, [...]
5843
            expressed as "& id-expression" where the & is optional if the name
5844
            refers to a function or array, or if the corresponding
5845
            template-parameter is a reference.
5846
 
5847
        Here, we do not care about functions, as they are invalid anyway
5848
        for a parameter of type pointer-to-object.  */
5849
 
5850
      if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
5851
        /* Non-type template parameters are OK.  */
5852
        ;
5853
      else if (cxx_dialect >= cxx0x && integer_zerop (expr))
5854
        /* Null pointer values are OK in C++11.  */;
5855
      else if (TREE_CODE (expr) != ADDR_EXPR
5856
               && TREE_CODE (expr_type) != ARRAY_TYPE)
5857
        {
5858
          if (TREE_CODE (expr) == VAR_DECL)
5859
            {
5860
              error ("%qD is not a valid template argument "
5861
                     "because %qD is a variable, not the address of "
5862
                     "a variable",
5863
                     expr, expr);
5864
              return NULL_TREE;
5865
            }
5866
          /* Other values, like integer constants, might be valid
5867
             non-type arguments of some other type.  */
5868
          return error_mark_node;
5869
        }
5870
      else
5871
        {
5872
          tree decl;
5873
 
5874
          decl = ((TREE_CODE (expr) == ADDR_EXPR)
5875
                  ? TREE_OPERAND (expr, 0) : expr);
5876
          if (TREE_CODE (decl) != VAR_DECL)
5877
            {
5878
              error ("%qE is not a valid template argument of type %qT "
5879
                     "because %qE is not a variable",
5880
                     expr, type, decl);
5881
              return NULL_TREE;
5882
            }
5883
          else if (cxx_dialect < cxx0x && !DECL_EXTERNAL_LINKAGE_P (decl))
5884
            {
5885
              error ("%qE is not a valid template argument of type %qT "
5886
                     "because %qD does not have external linkage",
5887
                     expr, type, decl);
5888
              return NULL_TREE;
5889
            }
5890
          else if (cxx_dialect >= cxx0x && decl_linkage (decl) == lk_none)
5891
            {
5892
              error ("%qE is not a valid template argument of type %qT "
5893
                     "because %qD has no linkage",
5894
                     expr, type, decl);
5895
              return NULL_TREE;
5896
            }
5897
        }
5898
 
5899
      expr = decay_conversion (expr);
5900
      if (expr == error_mark_node)
5901
        return error_mark_node;
5902
 
5903
      expr = perform_qualification_conversions (type, expr);
5904
      if (expr == error_mark_node)
5905
        return error_mark_node;
5906
    }
5907
  /* [temp.arg.nontype]/5, bullet 3
5908
 
5909
     For a non-type template-parameter of type reference to object, no
5910
     conversions apply. The type referred to by the reference may be more
5911
     cv-qualified than the (otherwise identical) type of the
5912
     template-argument. The template-parameter is bound directly to the
5913
     template-argument, which must be an lvalue.  */
5914
  else if (TYPE_REF_OBJ_P (type))
5915
    {
5916
      if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
5917
                                                      expr_type))
5918
        return error_mark_node;
5919
 
5920
      if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
5921
        {
5922
          error ("%qE is not a valid template argument for type %qT "
5923
                 "because of conflicts in cv-qualification", expr, type);
5924
          return NULL_TREE;
5925
        }
5926
 
5927
      if (!real_lvalue_p (expr))
5928
        {
5929
          error ("%qE is not a valid template argument for type %qT "
5930
                 "because it is not an lvalue", expr, type);
5931
          return NULL_TREE;
5932
        }
5933
 
5934
      /* [temp.arg.nontype]/1
5935
 
5936
         A template-argument for a non-type, non-template template-parameter
5937
         shall be one of: [...]
5938
 
5939
         -- the address of an object or function with external linkage.  */
5940
      if (TREE_CODE (expr) == INDIRECT_REF
5941
          && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
5942
        {
5943
          expr = TREE_OPERAND (expr, 0);
5944
          if (DECL_P (expr))
5945
            {
5946
              error ("%q#D is not a valid template argument for type %qT "
5947
                     "because a reference variable does not have a constant "
5948
                     "address", expr, type);
5949
              return NULL_TREE;
5950
            }
5951
        }
5952
 
5953
      if (!DECL_P (expr))
5954
        {
5955
          error ("%qE is not a valid template argument for type %qT "
5956
                 "because it is not an object with external linkage",
5957
                 expr, type);
5958
          return NULL_TREE;
5959
        }
5960
 
5961
      if (!DECL_EXTERNAL_LINKAGE_P (expr))
5962
        {
5963
          error ("%qE is not a valid template argument for type %qT "
5964
                 "because object %qD has not external linkage",
5965
                 expr, type, expr);
5966
          return NULL_TREE;
5967
        }
5968
 
5969
      expr = build_nop (type, build_address (expr));
5970
    }
5971
  /* [temp.arg.nontype]/5, bullet 4
5972
 
5973
     For a non-type template-parameter of type pointer to function, only
5974
     the function-to-pointer conversion (_conv.func_) is applied. If the
5975
     template-argument represents a set of overloaded functions (or a
5976
     pointer to such), the matching function is selected from the set
5977
     (_over.over_).  */
5978
  else if (TYPE_PTRFN_P (type))
5979
    {
5980
      /* If the argument is a template-id, we might not have enough
5981
         context information to decay the pointer.  */
5982
      if (!type_unknown_p (expr_type))
5983
        {
5984
          expr = decay_conversion (expr);
5985
          if (expr == error_mark_node)
5986
            return error_mark_node;
5987
        }
5988
 
5989
      if (cxx_dialect >= cxx0x && integer_zerop (expr))
5990
        /* Null pointer values are OK in C++11.  */
5991
        return perform_qualification_conversions (type, expr);
5992
 
5993
      expr = convert_nontype_argument_function (type, expr);
5994
      if (!expr || expr == error_mark_node)
5995
        return expr;
5996
 
5997
      if (TREE_CODE (expr) != ADDR_EXPR)
5998
        {
5999
          error ("%qE is not a valid template argument for type %qT", expr, type);
6000
          error ("it must be the address of a function with external linkage");
6001
          return NULL_TREE;
6002
        }
6003
    }
6004
  /* [temp.arg.nontype]/5, bullet 5
6005
 
6006
     For a non-type template-parameter of type reference to function, no
6007
     conversions apply. If the template-argument represents a set of
6008
     overloaded functions, the matching function is selected from the set
6009
     (_over.over_).  */
6010
  else if (TYPE_REFFN_P (type))
6011
    {
6012
      if (TREE_CODE (expr) == ADDR_EXPR)
6013
        {
6014
          error ("%qE is not a valid template argument for type %qT "
6015
                 "because it is a pointer", expr, type);
6016
          inform (input_location, "try using %qE instead", TREE_OPERAND (expr, 0));
6017
          return NULL_TREE;
6018
        }
6019
 
6020
      expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
6021
      if (!expr || expr == error_mark_node)
6022
        return expr;
6023
 
6024
      expr = build_nop (type, build_address (expr));
6025
    }
6026
  /* [temp.arg.nontype]/5, bullet 6
6027
 
6028
     For a non-type template-parameter of type pointer to member function,
6029
     no conversions apply. If the template-argument represents a set of
6030
     overloaded member functions, the matching member function is selected
6031
     from the set (_over.over_).  */
6032
  else if (TYPE_PTRMEMFUNC_P (type))
6033
    {
6034
      expr = instantiate_type (type, expr, tf_none);
6035
      if (expr == error_mark_node)
6036
        return error_mark_node;
6037
 
6038
      /* [temp.arg.nontype] bullet 1 says the pointer to member
6039
         expression must be a pointer-to-member constant.  */
6040
      if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6041
        return error_mark_node;
6042
 
6043
      /* There is no way to disable standard conversions in
6044
         resolve_address_of_overloaded_function (called by
6045
         instantiate_type). It is possible that the call succeeded by
6046
         converting &B::I to &D::I (where B is a base of D), so we need
6047
         to reject this conversion here.
6048
 
6049
         Actually, even if there was a way to disable standard conversions,
6050
         it would still be better to reject them here so that we can
6051
         provide a superior diagnostic.  */
6052
      if (!same_type_p (TREE_TYPE (expr), type))
6053
        {
6054
          error ("%qE is not a valid template argument for type %qT "
6055
                 "because it is of type %qT", expr, type,
6056
                 TREE_TYPE (expr));
6057
          /* If we are just one standard conversion off, explain.  */
6058
          if (can_convert (type, TREE_TYPE (expr)))
6059
            inform (input_location,
6060
                    "standard conversions are not allowed in this context");
6061
          return NULL_TREE;
6062
        }
6063
    }
6064
  /* [temp.arg.nontype]/5, bullet 7
6065
 
6066
     For a non-type template-parameter of type pointer to data member,
6067
     qualification conversions (_conv.qual_) are applied.  */
6068
  else if (TYPE_PTRMEM_P (type))
6069
    {
6070
      /* [temp.arg.nontype] bullet 1 says the pointer to member
6071
         expression must be a pointer-to-member constant.  */
6072
      if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6073
        return error_mark_node;
6074
 
6075
      expr = perform_qualification_conversions (type, expr);
6076
      if (expr == error_mark_node)
6077
        return expr;
6078
    }
6079
  else if (NULLPTR_TYPE_P (type))
6080
    {
6081
      if (expr != nullptr_node)
6082
        {
6083
          error ("%qE is not a valid template argument for type %qT "
6084
                 "because it is of type %qT", expr, type, TREE_TYPE (expr));
6085
          return NULL_TREE;
6086
        }
6087
      return expr;
6088
    }
6089
  /* A template non-type parameter must be one of the above.  */
6090
  else
6091
    gcc_unreachable ();
6092
 
6093
  /* Sanity check: did we actually convert the argument to the
6094
     right type?  */
6095
  gcc_assert (same_type_ignoring_top_level_qualifiers_p
6096
              (type, TREE_TYPE (expr)));
6097
  return expr;
6098
}
6099
 
6100
/* Subroutine of coerce_template_template_parms, which returns 1 if
6101
   PARM_PARM and ARG_PARM match using the rule for the template
6102
   parameters of template template parameters. Both PARM and ARG are
6103
   template parameters; the rest of the arguments are the same as for
6104
   coerce_template_template_parms.
6105
 */
6106
static int
6107
coerce_template_template_parm (tree parm,
6108
                              tree arg,
6109
                              tsubst_flags_t complain,
6110
                              tree in_decl,
6111
                              tree outer_args)
6112
{
6113
  if (arg == NULL_TREE || arg == error_mark_node
6114
      || parm == NULL_TREE || parm == error_mark_node)
6115
    return 0;
6116
 
6117
  if (TREE_CODE (arg) != TREE_CODE (parm))
6118
    return 0;
6119
 
6120
  switch (TREE_CODE (parm))
6121
    {
6122
    case TEMPLATE_DECL:
6123
      /* We encounter instantiations of templates like
6124
         template <template <template <class> class> class TT>
6125
         class C;  */
6126
      {
6127
        tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6128
        tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6129
 
6130
        if (!coerce_template_template_parms
6131
            (parmparm, argparm, complain, in_decl, outer_args))
6132
          return 0;
6133
      }
6134
      /* Fall through.  */
6135
 
6136
    case TYPE_DECL:
6137
      if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
6138
          && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6139
        /* Argument is a parameter pack but parameter is not.  */
6140
        return 0;
6141
      break;
6142
 
6143
    case PARM_DECL:
6144
      /* The tsubst call is used to handle cases such as
6145
 
6146
           template <int> class C {};
6147
           template <class T, template <T> class TT> class D {};
6148
           D<int, C> d;
6149
 
6150
         i.e. the parameter list of TT depends on earlier parameters.  */
6151
      if (!uses_template_parms (TREE_TYPE (arg))
6152
          && !same_type_p
6153
                (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
6154
                 TREE_TYPE (arg)))
6155
        return 0;
6156
 
6157
      if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
6158
          && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6159
        /* Argument is a parameter pack but parameter is not.  */
6160
        return 0;
6161
 
6162
      break;
6163
 
6164
    default:
6165
      gcc_unreachable ();
6166
    }
6167
 
6168
  return 1;
6169
}
6170
 
6171
 
6172
/* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
6173
   template template parameters.  Both PARM_PARMS and ARG_PARMS are
6174
   vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
6175
   or PARM_DECL.
6176
 
6177
   Consider the example:
6178
     template <class T> class A;
6179
     template<template <class U> class TT> class B;
6180
 
6181
   For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
6182
   the parameters to A, and OUTER_ARGS contains A.  */
6183
 
6184
static int
6185
coerce_template_template_parms (tree parm_parms,
6186
                                tree arg_parms,
6187
                                tsubst_flags_t complain,
6188
                                tree in_decl,
6189
                                tree outer_args)
6190
{
6191
  int nparms, nargs, i;
6192
  tree parm, arg;
6193
  int variadic_p = 0;
6194
 
6195
  gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
6196
  gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
6197
 
6198
  nparms = TREE_VEC_LENGTH (parm_parms);
6199
  nargs = TREE_VEC_LENGTH (arg_parms);
6200
 
6201
  /* Determine whether we have a parameter pack at the end of the
6202
     template template parameter's template parameter list.  */
6203
  if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
6204
    {
6205
      parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
6206
 
6207
      if (parm == error_mark_node)
6208
        return 0;
6209
 
6210
      switch (TREE_CODE (parm))
6211
        {
6212
        case TEMPLATE_DECL:
6213
        case TYPE_DECL:
6214
          if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6215
            variadic_p = 1;
6216
          break;
6217
 
6218
        case PARM_DECL:
6219
          if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6220
            variadic_p = 1;
6221
          break;
6222
 
6223
        default:
6224
          gcc_unreachable ();
6225
        }
6226
    }
6227
 
6228
  if (nargs != nparms
6229
      && !(variadic_p && nargs >= nparms - 1))
6230
    return 0;
6231
 
6232
  /* Check all of the template parameters except the parameter pack at
6233
     the end (if any).  */
6234
  for (i = 0; i < nparms - variadic_p; ++i)
6235
    {
6236
      if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
6237
          || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6238
        continue;
6239
 
6240
      parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6241
      arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6242
 
6243
      if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6244
                                          outer_args))
6245
        return 0;
6246
 
6247
    }
6248
 
6249
  if (variadic_p)
6250
    {
6251
      /* Check each of the template parameters in the template
6252
         argument against the template parameter pack at the end of
6253
         the template template parameter.  */
6254
      if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
6255
        return 0;
6256
 
6257
      parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6258
 
6259
      for (; i < nargs; ++i)
6260
        {
6261
          if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6262
            continue;
6263
 
6264
          arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6265
 
6266
          if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6267
                                              outer_args))
6268
            return 0;
6269
        }
6270
    }
6271
 
6272
  return 1;
6273
}
6274
 
6275
/* Verifies that the deduced template arguments (in TARGS) for the
6276
   template template parameters (in TPARMS) represent valid bindings,
6277
   by comparing the template parameter list of each template argument
6278
   to the template parameter list of its corresponding template
6279
   template parameter, in accordance with DR150. This
6280
   routine can only be called after all template arguments have been
6281
   deduced. It will return TRUE if all of the template template
6282
   parameter bindings are okay, FALSE otherwise.  */
6283
bool
6284
template_template_parm_bindings_ok_p (tree tparms, tree targs)
6285
{
6286
  int i, ntparms = TREE_VEC_LENGTH (tparms);
6287
  bool ret = true;
6288
 
6289
  /* We're dealing with template parms in this process.  */
6290
  ++processing_template_decl;
6291
 
6292
  targs = INNERMOST_TEMPLATE_ARGS (targs);
6293
 
6294
  for (i = 0; i < ntparms; ++i)
6295
    {
6296
      tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
6297
      tree targ = TREE_VEC_ELT (targs, i);
6298
 
6299
      if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
6300
        {
6301
          tree packed_args = NULL_TREE;
6302
          int idx, len = 1;
6303
 
6304
          if (ARGUMENT_PACK_P (targ))
6305
            {
6306
              /* Look inside the argument pack.  */
6307
              packed_args = ARGUMENT_PACK_ARGS (targ);
6308
              len = TREE_VEC_LENGTH (packed_args);
6309
            }
6310
 
6311
          for (idx = 0; idx < len; ++idx)
6312
            {
6313
              tree targ_parms = NULL_TREE;
6314
 
6315
              if (packed_args)
6316
                /* Extract the next argument from the argument
6317
                   pack.  */
6318
                targ = TREE_VEC_ELT (packed_args, idx);
6319
 
6320
              if (PACK_EXPANSION_P (targ))
6321
                /* Look at the pattern of the pack expansion.  */
6322
                targ = PACK_EXPANSION_PATTERN (targ);
6323
 
6324
              /* Extract the template parameters from the template
6325
                 argument.  */
6326
              if (TREE_CODE (targ) == TEMPLATE_DECL)
6327
                targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
6328
              else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
6329
                targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
6330
 
6331
              /* Verify that we can coerce the template template
6332
                 parameters from the template argument to the template
6333
                 parameter.  This requires an exact match.  */
6334
              if (targ_parms
6335
                  && !coerce_template_template_parms
6336
                       (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
6337
                        targ_parms,
6338
                        tf_none,
6339
                        tparm,
6340
                        targs))
6341
                {
6342
                  ret = false;
6343
                  goto out;
6344
                }
6345
            }
6346
        }
6347
    }
6348
 
6349
 out:
6350
 
6351
  --processing_template_decl;
6352
  return ret;
6353
}
6354
 
6355
/* Since type attributes aren't mangled, we need to strip them from
6356
   template type arguments.  */
6357
 
6358
static tree
6359
canonicalize_type_argument (tree arg, tsubst_flags_t complain)
6360
{
6361
  tree mv;
6362
  if (!arg || arg == error_mark_node || arg == TYPE_CANONICAL (arg))
6363
    return arg;
6364
  mv = TYPE_MAIN_VARIANT (arg);
6365
  arg = strip_typedefs (arg);
6366
  if (TYPE_ALIGN (arg) != TYPE_ALIGN (mv)
6367
      || TYPE_ATTRIBUTES (arg) != TYPE_ATTRIBUTES (mv))
6368
    {
6369
      if (complain & tf_warning)
6370
        warning (0, "ignoring attributes on template argument %qT", arg);
6371
      arg = build_aligned_type (arg, TYPE_ALIGN (mv));
6372
      arg = cp_build_type_attribute_variant (arg, TYPE_ATTRIBUTES (mv));
6373
    }
6374
  return arg;
6375
}
6376
 
6377
/* Convert the indicated template ARG as necessary to match the
6378
   indicated template PARM.  Returns the converted ARG, or
6379
   error_mark_node if the conversion was unsuccessful.  Error and
6380
   warning messages are issued under control of COMPLAIN.  This
6381
   conversion is for the Ith parameter in the parameter list.  ARGS is
6382
   the full set of template arguments deduced so far.  */
6383
 
6384
static tree
6385
convert_template_argument (tree parm,
6386
                           tree arg,
6387
                           tree args,
6388
                           tsubst_flags_t complain,
6389
                           int i,
6390
                           tree in_decl)
6391
{
6392
  tree orig_arg;
6393
  tree val;
6394
  int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
6395
 
6396
  if (TREE_CODE (arg) == TREE_LIST
6397
      && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
6398
    {
6399
      /* The template argument was the name of some
6400
         member function.  That's usually
6401
         invalid, but static members are OK.  In any
6402
         case, grab the underlying fields/functions
6403
         and issue an error later if required.  */
6404
      orig_arg = TREE_VALUE (arg);
6405
      TREE_TYPE (arg) = unknown_type_node;
6406
    }
6407
 
6408
  orig_arg = arg;
6409
 
6410
  requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
6411
  requires_type = (TREE_CODE (parm) == TYPE_DECL
6412
                   || requires_tmpl_type);
6413
 
6414
  /* When determining whether an argument pack expansion is a template,
6415
     look at the pattern.  */
6416
  if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
6417
    arg = PACK_EXPANSION_PATTERN (arg);
6418
 
6419
  /* Deal with an injected-class-name used as a template template arg.  */
6420
  if (requires_tmpl_type && CLASS_TYPE_P (arg))
6421
    {
6422
      tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
6423
      if (TREE_CODE (t) == TEMPLATE_DECL)
6424
        {
6425
          if (cxx_dialect >= cxx0x)
6426
            /* OK under DR 1004.  */;
6427
          else if (complain & tf_warning_or_error)
6428
            pedwarn (input_location, OPT_pedantic, "injected-class-name %qD"
6429
                     " used as template template argument", TYPE_NAME (arg));
6430
          else if (flag_pedantic_errors)
6431
            t = arg;
6432
 
6433
          arg = t;
6434
        }
6435
    }
6436
 
6437
  is_tmpl_type =
6438
    ((TREE_CODE (arg) == TEMPLATE_DECL
6439
      && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
6440
     || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6441
     || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
6442
 
6443
  if (is_tmpl_type
6444
      && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6445
          || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
6446
    arg = TYPE_STUB_DECL (arg);
6447
 
6448
  is_type = TYPE_P (arg) || is_tmpl_type;
6449
 
6450
  if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
6451
      && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
6452
    {
6453
      if (TREE_CODE (TREE_OPERAND (arg, 1)) == BIT_NOT_EXPR)
6454
        {
6455
          if (complain & tf_error)
6456
            error ("invalid use of destructor %qE as a type", orig_arg);
6457
          return error_mark_node;
6458
        }
6459
 
6460
      permerror (input_location,
6461
                 "to refer to a type member of a template parameter, "
6462
                 "use %<typename %E%>", orig_arg);
6463
 
6464
      orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
6465
                                     TREE_OPERAND (arg, 1),
6466
                                     typename_type,
6467
                                     complain & tf_error);
6468
      arg = orig_arg;
6469
      is_type = 1;
6470
    }
6471
  if (is_type != requires_type)
6472
    {
6473
      if (in_decl)
6474
        {
6475
          if (complain & tf_error)
6476
            {
6477
              error ("type/value mismatch at argument %d in template "
6478
                     "parameter list for %qD",
6479
                     i + 1, in_decl);
6480
              if (is_type)
6481
                error ("  expected a constant of type %qT, got %qT",
6482
                       TREE_TYPE (parm),
6483
                       (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
6484
              else if (requires_tmpl_type)
6485
                error ("  expected a class template, got %qE", orig_arg);
6486
              else
6487
                error ("  expected a type, got %qE", orig_arg);
6488
            }
6489
        }
6490
      return error_mark_node;
6491
    }
6492
  if (is_tmpl_type ^ requires_tmpl_type)
6493
    {
6494
      if (in_decl && (complain & tf_error))
6495
        {
6496
          error ("type/value mismatch at argument %d in template "
6497
                 "parameter list for %qD",
6498
                 i + 1, in_decl);
6499
          if (is_tmpl_type)
6500
            error ("  expected a type, got %qT", DECL_NAME (arg));
6501
          else
6502
            error ("  expected a class template, got %qT", orig_arg);
6503
        }
6504
      return error_mark_node;
6505
    }
6506
 
6507
  if (is_type)
6508
    {
6509
      if (requires_tmpl_type)
6510
        {
6511
          if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
6512
            /* The number of argument required is not known yet.
6513
               Just accept it for now.  */
6514
            val = TREE_TYPE (arg);
6515
          else
6516
            {
6517
              tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6518
              tree argparm;
6519
 
6520
              argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6521
 
6522
              if (coerce_template_template_parms (parmparm, argparm,
6523
                                                  complain, in_decl,
6524
                                                  args))
6525
                {
6526
                  val = arg;
6527
 
6528
                  /* TEMPLATE_TEMPLATE_PARM node is preferred over
6529
                     TEMPLATE_DECL.  */
6530
                  if (val != error_mark_node)
6531
                    {
6532
                      if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
6533
                        val = TREE_TYPE (val);
6534
                      if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
6535
                        val = make_pack_expansion (val);
6536
                    }
6537
                }
6538
              else
6539
                {
6540
                  if (in_decl && (complain & tf_error))
6541
                    {
6542
                      error ("type/value mismatch at argument %d in "
6543
                             "template parameter list for %qD",
6544
                             i + 1, in_decl);
6545
                      error ("  expected a template of type %qD, got %qT",
6546
                             parm, orig_arg);
6547
                    }
6548
 
6549
                  val = error_mark_node;
6550
                }
6551
            }
6552
        }
6553
      else
6554
        val = orig_arg;
6555
      /* We only form one instance of each template specialization.
6556
         Therefore, if we use a non-canonical variant (i.e., a
6557
         typedef), any future messages referring to the type will use
6558
         the typedef, which is confusing if those future uses do not
6559
         themselves also use the typedef.  */
6560
      if (TYPE_P (val))
6561
        val = canonicalize_type_argument (val, complain);
6562
    }
6563
  else
6564
    {
6565
      tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
6566
 
6567
      if (invalid_nontype_parm_type_p (t, complain))
6568
        return error_mark_node;
6569
 
6570
      if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6571
        {
6572
          if (same_type_p (t, TREE_TYPE (orig_arg)))
6573
            val = orig_arg;
6574
          else
6575
            {
6576
              /* Not sure if this is reachable, but it doesn't hurt
6577
                 to be robust.  */
6578
              error ("type mismatch in nontype parameter pack");
6579
              val = error_mark_node;
6580
            }
6581
        }
6582
      else if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
6583
        /* We used to call digest_init here.  However, digest_init
6584
           will report errors, which we don't want when complain
6585
           is zero.  More importantly, digest_init will try too
6586
           hard to convert things: for example, `0' should not be
6587
           converted to pointer type at this point according to
6588
           the standard.  Accepting this is not merely an
6589
           extension, since deciding whether or not these
6590
           conversions can occur is part of determining which
6591
           function template to call, or whether a given explicit
6592
           argument specification is valid.  */
6593
        val = convert_nontype_argument (t, orig_arg, complain);
6594
      else
6595
        val = orig_arg;
6596
 
6597
      if (val == NULL_TREE)
6598
        val = error_mark_node;
6599
      else if (val == error_mark_node && (complain & tf_error))
6600
        error ("could not convert template argument %qE to %qT",  orig_arg, t);
6601
 
6602
      if (TREE_CODE (val) == SCOPE_REF)
6603
        {
6604
          /* Strip typedefs from the SCOPE_REF.  */
6605
          tree type = canonicalize_type_argument (TREE_TYPE (val), complain);
6606
          tree scope = canonicalize_type_argument (TREE_OPERAND (val, 0),
6607
                                                   complain);
6608
          val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
6609
                                      QUALIFIED_NAME_IS_TEMPLATE (val));
6610
        }
6611
    }
6612
 
6613
  return val;
6614
}
6615
 
6616
/* Coerces the remaining template arguments in INNER_ARGS (from
6617
   ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
6618
   Returns the coerced argument pack. PARM_IDX is the position of this
6619
   parameter in the template parameter list. ARGS is the original
6620
   template argument list.  */
6621
static tree
6622
coerce_template_parameter_pack (tree parms,
6623
                                int parm_idx,
6624
                                tree args,
6625
                                tree inner_args,
6626
                                int arg_idx,
6627
                                tree new_args,
6628
                                int* lost,
6629
                                tree in_decl,
6630
                                tsubst_flags_t complain)
6631
{
6632
  tree parm = TREE_VEC_ELT (parms, parm_idx);
6633
  int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6634
  tree packed_args;
6635
  tree argument_pack;
6636
  tree packed_types = NULL_TREE;
6637
 
6638
  if (arg_idx > nargs)
6639
    arg_idx = nargs;
6640
 
6641
  packed_args = make_tree_vec (nargs - arg_idx);
6642
 
6643
  if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
6644
      && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
6645
    {
6646
      /* When the template parameter is a non-type template
6647
         parameter pack whose type uses parameter packs, we need
6648
         to look at each of the template arguments
6649
         separately. Build a vector of the types for these
6650
         non-type template parameters in PACKED_TYPES.  */
6651
      tree expansion
6652
        = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
6653
      packed_types = tsubst_pack_expansion (expansion, args,
6654
                                            complain, in_decl);
6655
 
6656
      if (packed_types == error_mark_node)
6657
        return error_mark_node;
6658
 
6659
      /* Check that we have the right number of arguments.  */
6660
      if (arg_idx < nargs
6661
          && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
6662
          && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
6663
        {
6664
          int needed_parms
6665
            = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
6666
          error ("wrong number of template arguments (%d, should be %d)",
6667
                 nargs, needed_parms);
6668
          return error_mark_node;
6669
        }
6670
 
6671
      /* If we aren't able to check the actual arguments now
6672
         (because they haven't been expanded yet), we can at least
6673
         verify that all of the types used for the non-type
6674
         template parameter pack are, in fact, valid for non-type
6675
         template parameters.  */
6676
      if (arg_idx < nargs
6677
          && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
6678
        {
6679
          int j, len = TREE_VEC_LENGTH (packed_types);
6680
          for (j = 0; j < len; ++j)
6681
            {
6682
              tree t = TREE_VEC_ELT (packed_types, j);
6683
              if (invalid_nontype_parm_type_p (t, complain))
6684
                return error_mark_node;
6685
            }
6686
        }
6687
    }
6688
 
6689
  /* Convert the remaining arguments, which will be a part of the
6690
     parameter pack "parm".  */
6691
  for (; arg_idx < nargs; ++arg_idx)
6692
    {
6693
      tree arg = TREE_VEC_ELT (inner_args, arg_idx);
6694
      tree actual_parm = TREE_VALUE (parm);
6695
 
6696
      if (packed_types && !PACK_EXPANSION_P (arg))
6697
        {
6698
          /* When we have a vector of types (corresponding to the
6699
             non-type template parameter pack that uses parameter
6700
             packs in its type, as mention above), and the
6701
             argument is not an expansion (which expands to a
6702
             currently unknown number of arguments), clone the
6703
             parm and give it the next type in PACKED_TYPES.  */
6704
          actual_parm = copy_node (actual_parm);
6705
          TREE_TYPE (actual_parm) =
6706
            TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
6707
        }
6708
 
6709
      if (arg != error_mark_node)
6710
        arg = convert_template_argument (actual_parm,
6711
                                         arg, new_args, complain, parm_idx,
6712
                                         in_decl);
6713
      if (arg == error_mark_node)
6714
        (*lost)++;
6715
      TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg;
6716
    }
6717
 
6718
  if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
6719
      || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
6720
    argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
6721
  else
6722
    {
6723
      argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
6724
      TREE_TYPE (argument_pack)
6725
        = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
6726
      TREE_CONSTANT (argument_pack) = 1;
6727
    }
6728
 
6729
  SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
6730
#ifdef ENABLE_CHECKING
6731
  SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
6732
                                       TREE_VEC_LENGTH (packed_args));
6733
#endif
6734
  return argument_pack;
6735
}
6736
 
6737
/* Convert all template arguments to their appropriate types, and
6738
   return a vector containing the innermost resulting template
6739
   arguments.  If any error occurs, return error_mark_node. Error and
6740
   warning messages are issued under control of COMPLAIN.
6741
 
6742
   If REQUIRE_ALL_ARGS is false, argument deduction will be performed
6743
   for arguments not specified in ARGS.  Otherwise, if
6744
   USE_DEFAULT_ARGS is true, default arguments will be used to fill in
6745
   unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
6746
   USE_DEFAULT_ARGS is false, then all arguments must be specified in
6747
   ARGS.  */
6748
 
6749
static tree
6750
coerce_template_parms (tree parms,
6751
                       tree args,
6752
                       tree in_decl,
6753
                       tsubst_flags_t complain,
6754
                       bool require_all_args,
6755
                       bool use_default_args)
6756
{
6757
  int nparms, nargs, parm_idx, arg_idx, lost = 0;
6758
  tree inner_args;
6759
  tree new_args;
6760
  tree new_inner_args;
6761
  int saved_unevaluated_operand;
6762
  int saved_inhibit_evaluation_warnings;
6763
 
6764
  /* When used as a boolean value, indicates whether this is a
6765
     variadic template parameter list. Since it's an int, we can also
6766
     subtract it from nparms to get the number of non-variadic
6767
     parameters.  */
6768
  int variadic_p = 0;
6769
  int post_variadic_parms = 0;
6770
 
6771
  if (args == error_mark_node)
6772
    return error_mark_node;
6773
 
6774
  nparms = TREE_VEC_LENGTH (parms);
6775
 
6776
  /* Determine if there are any parameter packs.  */
6777
  for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
6778
    {
6779
      tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
6780
      if (variadic_p)
6781
        ++post_variadic_parms;
6782
      if (template_parameter_pack_p (tparm))
6783
        ++variadic_p;
6784
    }
6785
 
6786
  inner_args = INNERMOST_TEMPLATE_ARGS (args);
6787
  /* If there are no parameters that follow a parameter pack, we need to
6788
     expand any argument packs so that we can deduce a parameter pack from
6789
     some non-packed args followed by an argument pack, as in variadic85.C.
6790
     If there are such parameters, we need to leave argument packs intact
6791
     so the arguments are assigned properly.  This can happen when dealing
6792
     with a nested class inside a partial specialization of a class
6793
     template, as in variadic92.C, or when deducing a template parameter pack
6794
     from a sub-declarator, as in variadic114.C.  */
6795
  if (!post_variadic_parms)
6796
    inner_args = expand_template_argument_pack (inner_args);
6797
 
6798
  nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6799
  if ((nargs > nparms && !variadic_p)
6800
      || (nargs < nparms - variadic_p
6801
          && require_all_args
6802
          && (!use_default_args
6803
              || (TREE_VEC_ELT (parms, nargs) != error_mark_node
6804
                  && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
6805
    {
6806
      if (complain & tf_error)
6807
        {
6808
          if (variadic_p)
6809
            {
6810
              nparms -= variadic_p;
6811
              error ("wrong number of template arguments "
6812
                     "(%d, should be %d or more)", nargs, nparms);
6813
            }
6814
          else
6815
             error ("wrong number of template arguments "
6816
                    "(%d, should be %d)", nargs, nparms);
6817
 
6818
          if (in_decl)
6819
            error ("provided for %q+D", in_decl);
6820
        }
6821
 
6822
      return error_mark_node;
6823
    }
6824
 
6825
  /* We need to evaluate the template arguments, even though this
6826
     template-id may be nested within a "sizeof".  */
6827
  saved_unevaluated_operand = cp_unevaluated_operand;
6828
  cp_unevaluated_operand = 0;
6829
  saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
6830
  c_inhibit_evaluation_warnings = 0;
6831
  new_inner_args = make_tree_vec (nparms);
6832
  new_args = add_outermost_template_args (args, new_inner_args);
6833
  for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
6834
    {
6835
      tree arg;
6836
      tree parm;
6837
 
6838
      /* Get the Ith template parameter.  */
6839
      parm = TREE_VEC_ELT (parms, parm_idx);
6840
 
6841
      if (parm == error_mark_node)
6842
      {
6843
        TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
6844
        continue;
6845
      }
6846
 
6847
      /* Calculate the next argument.  */
6848
      if (arg_idx < nargs)
6849
        arg = TREE_VEC_ELT (inner_args, arg_idx);
6850
      else
6851
        arg = NULL_TREE;
6852
 
6853
      if (template_parameter_pack_p (TREE_VALUE (parm))
6854
          && !(arg && ARGUMENT_PACK_P (arg)))
6855
        {
6856
          /* All remaining arguments will be placed in the
6857
             template parameter pack PARM.  */
6858
          arg = coerce_template_parameter_pack (parms, parm_idx, args,
6859
                                                inner_args, arg_idx,
6860
                                                new_args, &lost,
6861
                                                in_decl, complain);
6862
 
6863
          /* Store this argument.  */
6864
          if (arg == error_mark_node)
6865
            lost++;
6866
          TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
6867
 
6868
          /* We are done with all of the arguments.  */
6869
          arg_idx = nargs;
6870
 
6871
          continue;
6872
        }
6873
      else if (arg)
6874
        {
6875
          if (PACK_EXPANSION_P (arg))
6876
            {
6877
              /* We don't know how many args we have yet, just
6878
                 use the unconverted ones for now.  */
6879
              new_inner_args = args;
6880
              break;
6881
            }
6882
        }
6883
      else if (require_all_args)
6884
        {
6885
          /* There must be a default arg in this case.  */
6886
          arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
6887
                                     complain, in_decl);
6888
          /* The position of the first default template argument,
6889
             is also the number of non-defaulted arguments in NEW_INNER_ARGS.
6890
             Record that.  */
6891
          if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6892
            SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args, arg_idx);
6893
        }
6894
      else
6895
        break;
6896
 
6897
      if (arg == error_mark_node)
6898
        {
6899
          if (complain & tf_error)
6900
            error ("template argument %d is invalid", arg_idx + 1);
6901
        }
6902
      else if (!arg)
6903
        /* This only occurs if there was an error in the template
6904
           parameter list itself (which we would already have
6905
           reported) that we are trying to recover from, e.g., a class
6906
           template with a parameter list such as
6907
           template<typename..., typename>.  */
6908
        ++lost;
6909
      else
6910
        arg = convert_template_argument (TREE_VALUE (parm),
6911
                                         arg, new_args, complain,
6912
                                         parm_idx, in_decl);
6913
 
6914
      if (arg == error_mark_node)
6915
        lost++;
6916
      TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
6917
    }
6918
  cp_unevaluated_operand = saved_unevaluated_operand;
6919
  c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
6920
 
6921
  if (lost)
6922
    return error_mark_node;
6923
 
6924
#ifdef ENABLE_CHECKING
6925
  if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6926
    SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
6927
                                         TREE_VEC_LENGTH (new_inner_args));
6928
#endif
6929
 
6930
  return new_inner_args;
6931
}
6932
 
6933
/* Returns 1 if template args OT and NT are equivalent.  */
6934
 
6935
static int
6936
template_args_equal (tree ot, tree nt)
6937
{
6938
  if (nt == ot)
6939
    return 1;
6940
  if (nt == NULL_TREE || ot == NULL_TREE)
6941
    return false;
6942
 
6943
  if (TREE_CODE (nt) == TREE_VEC)
6944
    /* For member templates */
6945
    return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
6946
  else if (PACK_EXPANSION_P (ot))
6947
    return (PACK_EXPANSION_P (nt)
6948
            && template_args_equal (PACK_EXPANSION_PATTERN (ot),
6949
                                    PACK_EXPANSION_PATTERN (nt))
6950
            && template_args_equal (PACK_EXPANSION_EXTRA_ARGS (ot),
6951
                                    PACK_EXPANSION_EXTRA_ARGS (nt)));
6952
  else if (ARGUMENT_PACK_P (ot))
6953
    {
6954
      int i, len;
6955
      tree opack, npack;
6956
 
6957
      if (!ARGUMENT_PACK_P (nt))
6958
        return 0;
6959
 
6960
      opack = ARGUMENT_PACK_ARGS (ot);
6961
      npack = ARGUMENT_PACK_ARGS (nt);
6962
      len = TREE_VEC_LENGTH (opack);
6963
      if (TREE_VEC_LENGTH (npack) != len)
6964
        return 0;
6965
      for (i = 0; i < len; ++i)
6966
        if (!template_args_equal (TREE_VEC_ELT (opack, i),
6967
                                  TREE_VEC_ELT (npack, i)))
6968
          return 0;
6969
      return 1;
6970
    }
6971
  else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
6972
    {
6973
      /* We get here probably because we are in the middle of substituting
6974
         into the pattern of a pack expansion. In that case the
6975
         ARGUMENT_PACK_SELECT temporarily replaces the pack argument we are
6976
         interested in. So we want to use the initial pack argument for
6977
         the comparison.  */
6978
      ot = ARGUMENT_PACK_SELECT_FROM_PACK (ot);
6979
      if (nt && TREE_CODE (nt) == ARGUMENT_PACK_SELECT)
6980
        nt = ARGUMENT_PACK_SELECT_FROM_PACK (nt);
6981
      return template_args_equal (ot, nt);
6982
    }
6983
  else if (TYPE_P (nt))
6984
    return TYPE_P (ot) && same_type_p (ot, nt);
6985
  else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
6986
    return 0;
6987
  else
6988
    return cp_tree_equal (ot, nt);
6989
}
6990
 
6991
/* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets of
6992
   template arguments.  Returns 0 otherwise, and updates OLDARG_PTR and
6993
   NEWARG_PTR with the offending arguments if they are non-NULL.  */
6994
 
6995
static int
6996
comp_template_args_with_info (tree oldargs, tree newargs,
6997
                              tree *oldarg_ptr, tree *newarg_ptr)
6998
{
6999
  int i;
7000
 
7001
  if (oldargs == newargs)
7002
    return 1;
7003
 
7004
  if (!oldargs || !newargs)
7005
    return 0;
7006
 
7007
  if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
7008
    return 0;
7009
 
7010
  for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
7011
    {
7012
      tree nt = TREE_VEC_ELT (newargs, i);
7013
      tree ot = TREE_VEC_ELT (oldargs, i);
7014
 
7015
      if (! template_args_equal (ot, nt))
7016
        {
7017
          if (oldarg_ptr != NULL)
7018
            *oldarg_ptr = ot;
7019
          if (newarg_ptr != NULL)
7020
            *newarg_ptr = nt;
7021
          return 0;
7022
        }
7023
    }
7024
  return 1;
7025
}
7026
 
7027
/* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
7028
   of template arguments.  Returns 0 otherwise.  */
7029
 
7030
int
7031
comp_template_args (tree oldargs, tree newargs)
7032
{
7033
  return comp_template_args_with_info (oldargs, newargs, NULL, NULL);
7034
}
7035
 
7036
static void
7037
add_pending_template (tree d)
7038
{
7039
  tree ti = (TYPE_P (d)
7040
             ? CLASSTYPE_TEMPLATE_INFO (d)
7041
             : DECL_TEMPLATE_INFO (d));
7042
  struct pending_template *pt;
7043
  int level;
7044
 
7045
  if (TI_PENDING_TEMPLATE_FLAG (ti))
7046
    return;
7047
 
7048
  /* We are called both from instantiate_decl, where we've already had a
7049
     tinst_level pushed, and instantiate_template, where we haven't.
7050
     Compensate.  */
7051
  level = !current_tinst_level || current_tinst_level->decl != d;
7052
 
7053
  if (level)
7054
    push_tinst_level (d);
7055
 
7056
  pt = ggc_alloc_pending_template ();
7057
  pt->next = NULL;
7058
  pt->tinst = current_tinst_level;
7059
  if (last_pending_template)
7060
    last_pending_template->next = pt;
7061
  else
7062
    pending_templates = pt;
7063
 
7064
  last_pending_template = pt;
7065
 
7066
  TI_PENDING_TEMPLATE_FLAG (ti) = 1;
7067
 
7068
  if (level)
7069
    pop_tinst_level ();
7070
}
7071
 
7072
 
7073
/* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
7074
   ARGLIST.  Valid choices for FNS are given in the cp-tree.def
7075
   documentation for TEMPLATE_ID_EXPR.  */
7076
 
7077
tree
7078
lookup_template_function (tree fns, tree arglist)
7079
{
7080
  tree type;
7081
 
7082
  if (fns == error_mark_node || arglist == error_mark_node)
7083
    return error_mark_node;
7084
 
7085
  gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
7086
 
7087
  if (!is_overloaded_fn (fns) && TREE_CODE (fns) != IDENTIFIER_NODE)
7088
    {
7089
      error ("%q#D is not a function template", fns);
7090
      return error_mark_node;
7091
    }
7092
 
7093
  if (BASELINK_P (fns))
7094
    {
7095
      BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
7096
                                         unknown_type_node,
7097
                                         BASELINK_FUNCTIONS (fns),
7098
                                         arglist);
7099
      return fns;
7100
    }
7101
 
7102
  type = TREE_TYPE (fns);
7103
  if (TREE_CODE (fns) == OVERLOAD || !type)
7104
    type = unknown_type_node;
7105
 
7106
  return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
7107
}
7108
 
7109
/* Within the scope of a template class S<T>, the name S gets bound
7110
   (in build_self_reference) to a TYPE_DECL for the class, not a
7111
   TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
7112
   or one of its enclosing classes, and that type is a template,
7113
   return the associated TEMPLATE_DECL.  Otherwise, the original
7114
   DECL is returned.
7115
 
7116
   Also handle the case when DECL is a TREE_LIST of ambiguous
7117
   injected-class-names from different bases.  */
7118
 
7119
tree
7120
maybe_get_template_decl_from_type_decl (tree decl)
7121
{
7122
  if (decl == NULL_TREE)
7123
    return decl;
7124
 
7125
  /* DR 176: A lookup that finds an injected-class-name (10.2
7126
     [class.member.lookup]) can result in an ambiguity in certain cases
7127
     (for example, if it is found in more than one base class). If all of
7128
     the injected-class-names that are found refer to specializations of
7129
     the same class template, and if the name is followed by a
7130
     template-argument-list, the reference refers to the class template
7131
     itself and not a specialization thereof, and is not ambiguous.  */
7132
  if (TREE_CODE (decl) == TREE_LIST)
7133
    {
7134
      tree t, tmpl = NULL_TREE;
7135
      for (t = decl; t; t = TREE_CHAIN (t))
7136
        {
7137
          tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
7138
          if (!tmpl)
7139
            tmpl = elt;
7140
          else if (tmpl != elt)
7141
            break;
7142
        }
7143
      if (tmpl && t == NULL_TREE)
7144
        return tmpl;
7145
      else
7146
        return decl;
7147
    }
7148
 
7149
  return (decl != NULL_TREE
7150
          && DECL_SELF_REFERENCE_P (decl)
7151
          && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
7152
    ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
7153
}
7154
 
7155
/* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
7156
   parameters, find the desired type.
7157
 
7158
   D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
7159
 
7160
   IN_DECL, if non-NULL, is the template declaration we are trying to
7161
   instantiate.
7162
 
7163
   If ENTERING_SCOPE is nonzero, we are about to enter the scope of
7164
   the class we are looking up.
7165
 
7166
   Issue error and warning messages under control of COMPLAIN.
7167
 
7168
   If the template class is really a local class in a template
7169
   function, then the FUNCTION_CONTEXT is the function in which it is
7170
   being instantiated.
7171
 
7172
   ??? Note that this function is currently called *twice* for each
7173
   template-id: the first time from the parser, while creating the
7174
   incomplete type (finish_template_type), and the second type during the
7175
   real instantiation (instantiate_template_class). This is surely something
7176
   that we want to avoid. It also causes some problems with argument
7177
   coercion (see convert_nontype_argument for more information on this).  */
7178
 
7179
static tree
7180
lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
7181
                         int entering_scope, tsubst_flags_t complain)
7182
{
7183
  tree templ = NULL_TREE, parmlist;
7184
  tree t;
7185
  void **slot;
7186
  spec_entry *entry;
7187
  spec_entry elt;
7188
  hashval_t hash;
7189
 
7190
  if (TREE_CODE (d1) == IDENTIFIER_NODE)
7191
    {
7192
      tree value = innermost_non_namespace_value (d1);
7193
      if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
7194
        templ = value;
7195
      else
7196
        {
7197
          if (context)
7198
            push_decl_namespace (context);
7199
          templ = lookup_name (d1);
7200
          templ = maybe_get_template_decl_from_type_decl (templ);
7201
          if (context)
7202
            pop_decl_namespace ();
7203
        }
7204
      if (templ)
7205
        context = DECL_CONTEXT (templ);
7206
    }
7207
  else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
7208
    {
7209
      tree type = TREE_TYPE (d1);
7210
 
7211
      /* If we are declaring a constructor, say A<T>::A<T>, we will get
7212
         an implicit typename for the second A.  Deal with it.  */
7213
      if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
7214
        type = TREE_TYPE (type);
7215
 
7216
      if (CLASSTYPE_TEMPLATE_INFO (type))
7217
        {
7218
          templ = CLASSTYPE_TI_TEMPLATE (type);
7219
          d1 = DECL_NAME (templ);
7220
        }
7221
    }
7222
  else if (TREE_CODE (d1) == ENUMERAL_TYPE
7223
           || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
7224
    {
7225
      templ = TYPE_TI_TEMPLATE (d1);
7226
      d1 = DECL_NAME (templ);
7227
    }
7228
  else if (TREE_CODE (d1) == TEMPLATE_DECL
7229
           && DECL_TEMPLATE_RESULT (d1)
7230
           && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
7231
    {
7232
      templ = d1;
7233
      d1 = DECL_NAME (templ);
7234
      context = DECL_CONTEXT (templ);
7235
    }
7236
 
7237
  /* Issue an error message if we didn't find a template.  */
7238
  if (! templ)
7239
    {
7240
      if (complain & tf_error)
7241
        error ("%qT is not a template", d1);
7242
      return error_mark_node;
7243
    }
7244
 
7245
  if (TREE_CODE (templ) != TEMPLATE_DECL
7246
         /* Make sure it's a user visible template, if it was named by
7247
            the user.  */
7248
      || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
7249
          && !PRIMARY_TEMPLATE_P (templ)))
7250
    {
7251
      if (complain & tf_error)
7252
        {
7253
          error ("non-template type %qT used as a template", d1);
7254
          if (in_decl)
7255
            error ("for template declaration %q+D", in_decl);
7256
        }
7257
      return error_mark_node;
7258
    }
7259
 
7260
  complain &= ~tf_user;
7261
 
7262
  if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
7263
    {
7264
      /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
7265
         template arguments */
7266
 
7267
      tree parm;
7268
      tree arglist2;
7269
      tree outer;
7270
 
7271
      parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
7272
 
7273
      /* Consider an example where a template template parameter declared as
7274
 
7275
           template <class T, class U = std::allocator<T> > class TT
7276
 
7277
         The template parameter level of T and U are one level larger than
7278
         of TT.  To proper process the default argument of U, say when an
7279
         instantiation `TT<int>' is seen, we need to build the full
7280
         arguments containing {int} as the innermost level.  Outer levels,
7281
         available when not appearing as default template argument, can be
7282
         obtained from the arguments of the enclosing template.
7283
 
7284
         Suppose that TT is later substituted with std::vector.  The above
7285
         instantiation is `TT<int, std::allocator<T> >' with TT at
7286
         level 1, and T at level 2, while the template arguments at level 1
7287
         becomes {std::vector} and the inner level 2 is {int}.  */
7288
 
7289
      outer = DECL_CONTEXT (templ);
7290
      if (outer)
7291
        outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
7292
      else if (current_template_parms)
7293
        /* This is an argument of the current template, so we haven't set
7294
           DECL_CONTEXT yet.  */
7295
        outer = current_template_args ();
7296
 
7297
      if (outer)
7298
        arglist = add_to_template_args (outer, arglist);
7299
 
7300
      arglist2 = coerce_template_parms (parmlist, arglist, templ,
7301
                                        complain,
7302
                                        /*require_all_args=*/true,
7303
                                        /*use_default_args=*/true);
7304
      if (arglist2 == error_mark_node
7305
          || (!uses_template_parms (arglist2)
7306
              && check_instantiated_args (templ, arglist2, complain)))
7307
        return error_mark_node;
7308
 
7309
      parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
7310
      return parm;
7311
    }
7312
  else
7313
    {
7314
      tree template_type = TREE_TYPE (templ);
7315
      tree gen_tmpl;
7316
      tree type_decl;
7317
      tree found = NULL_TREE;
7318
      int arg_depth;
7319
      int parm_depth;
7320
      int is_dependent_type;
7321
      int use_partial_inst_tmpl = false;
7322
 
7323
      if (template_type == error_mark_node)
7324
        /* An error occured while building the template TEMPL, and a
7325
           diagnostic has most certainly been emitted for that
7326
           already.  Let's propagate that error.  */
7327
        return error_mark_node;
7328
 
7329
      gen_tmpl = most_general_template (templ);
7330
      parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
7331
      parm_depth = TMPL_PARMS_DEPTH (parmlist);
7332
      arg_depth = TMPL_ARGS_DEPTH (arglist);
7333
 
7334
      if (arg_depth == 1 && parm_depth > 1)
7335
        {
7336
          /* We've been given an incomplete set of template arguments.
7337
             For example, given:
7338
 
7339
               template <class T> struct S1 {
7340
                 template <class U> struct S2 {};
7341
                 template <class U> struct S2<U*> {};
7342
                };
7343
 
7344
             we will be called with an ARGLIST of `U*', but the
7345
             TEMPLATE will be `template <class T> template
7346
             <class U> struct S1<T>::S2'.  We must fill in the missing
7347
             arguments.  */
7348
          arglist
7349
            = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
7350
                                           arglist);
7351
          arg_depth = TMPL_ARGS_DEPTH (arglist);
7352
        }
7353
 
7354
      /* Now we should have enough arguments.  */
7355
      gcc_assert (parm_depth == arg_depth);
7356
 
7357
      /* From here on, we're only interested in the most general
7358
         template.  */
7359
 
7360
      /* Calculate the BOUND_ARGS.  These will be the args that are
7361
         actually tsubst'd into the definition to create the
7362
         instantiation.  */
7363
      if (parm_depth > 1)
7364
        {
7365
          /* We have multiple levels of arguments to coerce, at once.  */
7366
          int i;
7367
          int saved_depth = TMPL_ARGS_DEPTH (arglist);
7368
 
7369
          tree bound_args = make_tree_vec (parm_depth);
7370
 
7371
          for (i = saved_depth,
7372
                 t = DECL_TEMPLATE_PARMS (gen_tmpl);
7373
               i > 0 && t != NULL_TREE;
7374
               --i, t = TREE_CHAIN (t))
7375
            {
7376
              tree a;
7377
              if (i == saved_depth)
7378
                a = coerce_template_parms (TREE_VALUE (t),
7379
                                           arglist, gen_tmpl,
7380
                                           complain,
7381
                                           /*require_all_args=*/true,
7382
                                           /*use_default_args=*/true);
7383
              else
7384
                /* Outer levels should have already been coerced.  */
7385
                a = TMPL_ARGS_LEVEL (arglist, i);
7386
 
7387
              /* Don't process further if one of the levels fails.  */
7388
              if (a == error_mark_node)
7389
                {
7390
                  /* Restore the ARGLIST to its full size.  */
7391
                  TREE_VEC_LENGTH (arglist) = saved_depth;
7392
                  return error_mark_node;
7393
                }
7394
 
7395
              SET_TMPL_ARGS_LEVEL (bound_args, i, a);
7396
 
7397
              /* We temporarily reduce the length of the ARGLIST so
7398
                 that coerce_template_parms will see only the arguments
7399
                 corresponding to the template parameters it is
7400
                 examining.  */
7401
              TREE_VEC_LENGTH (arglist)--;
7402
            }
7403
 
7404
          /* Restore the ARGLIST to its full size.  */
7405
          TREE_VEC_LENGTH (arglist) = saved_depth;
7406
 
7407
          arglist = bound_args;
7408
        }
7409
      else
7410
        arglist
7411
          = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
7412
                                   INNERMOST_TEMPLATE_ARGS (arglist),
7413
                                   gen_tmpl,
7414
                                   complain,
7415
                                   /*require_all_args=*/true,
7416
                                   /*use_default_args=*/true);
7417
 
7418
      if (arglist == error_mark_node)
7419
        /* We were unable to bind the arguments.  */
7420
        return error_mark_node;
7421
 
7422
      /* In the scope of a template class, explicit references to the
7423
         template class refer to the type of the template, not any
7424
         instantiation of it.  For example, in:
7425
 
7426
           template <class T> class C { void f(C<T>); }
7427
 
7428
         the `C<T>' is just the same as `C'.  Outside of the
7429
         class, however, such a reference is an instantiation.  */
7430
      if ((entering_scope
7431
           || !PRIMARY_TEMPLATE_P (gen_tmpl)
7432
           || currently_open_class (template_type))
7433
          /* comp_template_args is expensive, check it last.  */
7434
          && comp_template_args (TYPE_TI_ARGS (template_type),
7435
                                 arglist))
7436
        return template_type;
7437
 
7438
      /* If we already have this specialization, return it.  */
7439
      elt.tmpl = gen_tmpl;
7440
      elt.args = arglist;
7441
      hash = hash_specialization (&elt);
7442
      entry = (spec_entry *) htab_find_with_hash (type_specializations,
7443
                                                  &elt, hash);
7444
 
7445
      if (entry)
7446
        return entry->spec;
7447
 
7448
      is_dependent_type = uses_template_parms (arglist);
7449
 
7450
      /* If the deduced arguments are invalid, then the binding
7451
         failed.  */
7452
      if (!is_dependent_type
7453
          && check_instantiated_args (gen_tmpl,
7454
                                      INNERMOST_TEMPLATE_ARGS (arglist),
7455
                                      complain))
7456
        return error_mark_node;
7457
 
7458
      if (!is_dependent_type
7459
          && !PRIMARY_TEMPLATE_P (gen_tmpl)
7460
          && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
7461
          && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
7462
        {
7463
          found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
7464
                                      DECL_NAME (gen_tmpl),
7465
                                      /*tag_scope=*/ts_global);
7466
          return found;
7467
        }
7468
 
7469
      context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
7470
                        complain, in_decl);
7471
      if (context == error_mark_node)
7472
        return error_mark_node;
7473
 
7474
      if (!context)
7475
        context = global_namespace;
7476
 
7477
      /* Create the type.  */
7478
      if (TREE_CODE (template_type) == ENUMERAL_TYPE)
7479
        {
7480
          if (!is_dependent_type)
7481
            {
7482
              set_current_access_from_decl (TYPE_NAME (template_type));
7483
              t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
7484
                              tsubst (ENUM_UNDERLYING_TYPE (template_type),
7485
                                      arglist, complain, in_decl),
7486
                              SCOPED_ENUM_P (template_type), NULL);
7487
            }
7488
          else
7489
            {
7490
              /* We don't want to call start_enum for this type, since
7491
                 the values for the enumeration constants may involve
7492
                 template parameters.  And, no one should be interested
7493
                 in the enumeration constants for such a type.  */
7494
              t = cxx_make_type (ENUMERAL_TYPE);
7495
              SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
7496
            }
7497
          SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
7498
          ENUM_FIXED_UNDERLYING_TYPE_P (t)
7499
            = ENUM_FIXED_UNDERLYING_TYPE_P (template_type);
7500
        }
7501
      else if (DECL_ALIAS_TEMPLATE_P (gen_tmpl))
7502
        {
7503
          /* The user referred to a specialization of an alias
7504
            template represented by GEN_TMPL.
7505
 
7506
            [temp.alias]/2 says:
7507
 
7508
                When a template-id refers to the specialization of an
7509
                alias template, it is equivalent to the associated
7510
                type obtained by substitution of its
7511
                template-arguments for the template-parameters in the
7512
                type-id of the alias template.  */
7513
 
7514
          t = tsubst (TREE_TYPE (gen_tmpl), arglist, complain, in_decl);
7515
          /* Note that the call above (by indirectly calling
7516
             register_specialization in tsubst_decl) registers the
7517
             TYPE_DECL representing the specialization of the alias
7518
             template.  So next time someone substitutes ARGLIST for
7519
             the template parms into the alias template (GEN_TMPL),
7520
             she'll get that TYPE_DECL back.  */
7521
 
7522
          if (t == error_mark_node)
7523
            return t;
7524
        }
7525
      else if (CLASS_TYPE_P (template_type))
7526
        {
7527
          t = make_class_type (TREE_CODE (template_type));
7528
          CLASSTYPE_DECLARED_CLASS (t)
7529
            = CLASSTYPE_DECLARED_CLASS (template_type);
7530
          SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
7531
          TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
7532
 
7533
          /* A local class.  Make sure the decl gets registered properly.  */
7534
          if (context == current_function_decl)
7535
            pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
7536
 
7537
          if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
7538
            /* This instantiation is another name for the primary
7539
               template type. Set the TYPE_CANONICAL field
7540
               appropriately. */
7541
            TYPE_CANONICAL (t) = template_type;
7542
          else if (any_template_arguments_need_structural_equality_p (arglist))
7543
            /* Some of the template arguments require structural
7544
               equality testing, so this template class requires
7545
               structural equality testing. */
7546
            SET_TYPE_STRUCTURAL_EQUALITY (t);
7547
        }
7548
      else
7549
        gcc_unreachable ();
7550
 
7551
      /* If we called start_enum or pushtag above, this information
7552
         will already be set up.  */
7553
      if (!TYPE_NAME (t))
7554
        {
7555
          TYPE_CONTEXT (t) = FROB_CONTEXT (context);
7556
 
7557
          type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
7558
          DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
7559
          DECL_SOURCE_LOCATION (type_decl)
7560
            = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
7561
        }
7562
      else
7563
        type_decl = TYPE_NAME (t);
7564
 
7565
      if (CLASS_TYPE_P (template_type))
7566
        {
7567
          TREE_PRIVATE (type_decl)
7568
            = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
7569
          TREE_PROTECTED (type_decl)
7570
            = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
7571
          if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
7572
            {
7573
              DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
7574
              DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
7575
            }
7576
        }
7577
 
7578
      /* Let's consider the explicit specialization of a member
7579
         of a class template specialization that is implicitely instantiated,
7580
         e.g.:
7581
             template<class T>
7582
             struct S
7583
             {
7584
               template<class U> struct M {}; //#0
7585
             };
7586
 
7587
             template<>
7588
             template<>
7589
             struct S<int>::M<char> //#1
7590
             {
7591
               int i;
7592
             };
7593
        [temp.expl.spec]/4 says this is valid.
7594
 
7595
        In this case, when we write:
7596
        S<int>::M<char> m;
7597
 
7598
        M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
7599
        the one of #0.
7600
 
7601
        When we encounter #1, we want to store the partial instantiation
7602
        of M (template<class T> S<int>::M<T>) in it's CLASSTYPE_TI_TEMPLATE.
7603
 
7604
        For all cases other than this "explicit specialization of member of a
7605
        class template", we just want to store the most general template into
7606
        the CLASSTYPE_TI_TEMPLATE of M.
7607
 
7608
        This case of "explicit specialization of member of a class template"
7609
        only happens when:
7610
        1/ the enclosing class is an instantiation of, and therefore not
7611
        the same as, the context of the most general template, and
7612
        2/ we aren't looking at the partial instantiation itself, i.e.
7613
        the innermost arguments are not the same as the innermost parms of
7614
        the most general template.
7615
 
7616
        So it's only when 1/ and 2/ happens that we want to use the partial
7617
        instantiation of the member template in lieu of its most general
7618
        template.  */
7619
 
7620
      if (PRIMARY_TEMPLATE_P (gen_tmpl)
7621
          && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
7622
          /* the enclosing class must be an instantiation...  */
7623
          && CLASS_TYPE_P (context)
7624
          && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
7625
        {
7626
          tree partial_inst_args;
7627
          TREE_VEC_LENGTH (arglist)--;
7628
          ++processing_template_decl;
7629
          partial_inst_args =
7630
            tsubst (INNERMOST_TEMPLATE_ARGS
7631
                        (TYPE_TI_ARGS (TREE_TYPE (gen_tmpl))),
7632
                    arglist, complain, NULL_TREE);
7633
          --processing_template_decl;
7634
          TREE_VEC_LENGTH (arglist)++;
7635
          use_partial_inst_tmpl =
7636
            /*...and we must not be looking at the partial instantiation
7637
             itself. */
7638
            !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
7639
                                 partial_inst_args);
7640
        }
7641
 
7642
      if (!use_partial_inst_tmpl)
7643
        /* This case is easy; there are no member templates involved.  */
7644
        found = gen_tmpl;
7645
      else
7646
        {
7647
          /* This is a full instantiation of a member template.  Find
7648
             the partial instantiation of which this is an instance.  */
7649
 
7650
          /* Temporarily reduce by one the number of levels in the ARGLIST
7651
             so as to avoid comparing the last set of arguments.  */
7652
          TREE_VEC_LENGTH (arglist)--;
7653
          found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
7654
          TREE_VEC_LENGTH (arglist)++;
7655
          /* FOUND is either a proper class type, or an alias
7656
             template specialization.  In the later case, it's a
7657
             TYPE_DECL, resulting from the substituting of arguments
7658
             for parameters in the TYPE_DECL of the alias template
7659
             done earlier.  So be careful while getting the template
7660
             of FOUND.  */
7661
          found = TREE_CODE (found) == TYPE_DECL
7662
            ? TYPE_TI_TEMPLATE (TREE_TYPE (found))
7663
            : CLASSTYPE_TI_TEMPLATE (found);
7664
        }
7665
 
7666
      SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
7667
 
7668
      elt.spec = t;
7669
      slot = htab_find_slot_with_hash (type_specializations,
7670
                                       &elt, hash, INSERT);
7671
      entry = ggc_alloc_spec_entry ();
7672
      *entry = elt;
7673
      *slot = entry;
7674
 
7675
      /* Note this use of the partial instantiation so we can check it
7676
         later in maybe_process_partial_specialization.  */
7677
      DECL_TEMPLATE_INSTANTIATIONS (templ)
7678
        = tree_cons (arglist, t,
7679
                     DECL_TEMPLATE_INSTANTIATIONS (templ));
7680
 
7681
      if (TREE_CODE (t) == ENUMERAL_TYPE && !is_dependent_type)
7682
        /* Now that the type has been registered on the instantiations
7683
           list, we set up the enumerators.  Because the enumeration
7684
           constants may involve the enumeration type itself, we make
7685
           sure to register the type first, and then create the
7686
           constants.  That way, doing tsubst_expr for the enumeration
7687
           constants won't result in recursive calls here; we'll find
7688
           the instantiation and exit above.  */
7689
        tsubst_enum (template_type, t, arglist);
7690
 
7691
      if (CLASS_TYPE_P (template_type) && is_dependent_type)
7692
        /* If the type makes use of template parameters, the
7693
           code that generates debugging information will crash.  */
7694
        DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
7695
 
7696
      /* Possibly limit visibility based on template args.  */
7697
      TREE_PUBLIC (type_decl) = 1;
7698
      determine_visibility (type_decl);
7699
 
7700
      return t;
7701
    }
7702
}
7703
 
7704
/* Wrapper for lookup_template_class_1.  */
7705
 
7706
tree
7707
lookup_template_class (tree d1, tree arglist, tree in_decl, tree context,
7708
                       int entering_scope, tsubst_flags_t complain)
7709
{
7710
  tree ret;
7711
  timevar_push (TV_TEMPLATE_INST);
7712
  ret = lookup_template_class_1 (d1, arglist, in_decl, context,
7713
                                 entering_scope, complain);
7714
  timevar_pop (TV_TEMPLATE_INST);
7715
  return ret;
7716
}
7717
 
7718
struct pair_fn_data
7719
{
7720
  tree_fn_t fn;
7721
  void *data;
7722
  /* True when we should also visit template parameters that occur in
7723
     non-deduced contexts.  */
7724
  bool include_nondeduced_p;
7725
  struct pointer_set_t *visited;
7726
};
7727
 
7728
/* Called from for_each_template_parm via walk_tree.  */
7729
 
7730
static tree
7731
for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
7732
{
7733
  tree t = *tp;
7734
  struct pair_fn_data *pfd = (struct pair_fn_data *) d;
7735
  tree_fn_t fn = pfd->fn;
7736
  void *data = pfd->data;
7737
 
7738
  if (TYPE_P (t)
7739
      && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
7740
      && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
7741
                                 pfd->include_nondeduced_p))
7742
    return error_mark_node;
7743
 
7744
  switch (TREE_CODE (t))
7745
    {
7746
    case RECORD_TYPE:
7747
      if (TYPE_PTRMEMFUNC_P (t))
7748
        break;
7749
      /* Fall through.  */
7750
 
7751
    case UNION_TYPE:
7752
    case ENUMERAL_TYPE:
7753
      if (!TYPE_TEMPLATE_INFO (t))
7754
        *walk_subtrees = 0;
7755
      else if (for_each_template_parm (TI_ARGS (TYPE_TEMPLATE_INFO (t)),
7756
                                       fn, data, pfd->visited,
7757
                                       pfd->include_nondeduced_p))
7758
        return error_mark_node;
7759
      break;
7760
 
7761
    case INTEGER_TYPE:
7762
      if (for_each_template_parm (TYPE_MIN_VALUE (t),
7763
                                  fn, data, pfd->visited,
7764
                                  pfd->include_nondeduced_p)
7765
          || for_each_template_parm (TYPE_MAX_VALUE (t),
7766
                                     fn, data, pfd->visited,
7767
                                     pfd->include_nondeduced_p))
7768
        return error_mark_node;
7769
      break;
7770
 
7771
    case METHOD_TYPE:
7772
      /* Since we're not going to walk subtrees, we have to do this
7773
         explicitly here.  */
7774
      if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
7775
                                  pfd->visited, pfd->include_nondeduced_p))
7776
        return error_mark_node;
7777
      /* Fall through.  */
7778
 
7779
    case FUNCTION_TYPE:
7780
      /* Check the return type.  */
7781
      if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7782
                                  pfd->include_nondeduced_p))
7783
        return error_mark_node;
7784
 
7785
      /* Check the parameter types.  Since default arguments are not
7786
         instantiated until they are needed, the TYPE_ARG_TYPES may
7787
         contain expressions that involve template parameters.  But,
7788
         no-one should be looking at them yet.  And, once they're
7789
         instantiated, they don't contain template parameters, so
7790
         there's no point in looking at them then, either.  */
7791
      {
7792
        tree parm;
7793
 
7794
        for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
7795
          if (for_each_template_parm (TREE_VALUE (parm), fn, data,
7796
                                      pfd->visited, pfd->include_nondeduced_p))
7797
            return error_mark_node;
7798
 
7799
        /* Since we've already handled the TYPE_ARG_TYPES, we don't
7800
           want walk_tree walking into them itself.  */
7801
        *walk_subtrees = 0;
7802
      }
7803
      break;
7804
 
7805
    case TYPEOF_TYPE:
7806
    case UNDERLYING_TYPE:
7807
      if (pfd->include_nondeduced_p
7808
          && for_each_template_parm (TYPE_FIELDS (t), fn, data,
7809
                                     pfd->visited,
7810
                                     pfd->include_nondeduced_p))
7811
        return error_mark_node;
7812
      break;
7813
 
7814
    case FUNCTION_DECL:
7815
    case VAR_DECL:
7816
      if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
7817
          && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
7818
                                     pfd->visited, pfd->include_nondeduced_p))
7819
        return error_mark_node;
7820
      /* Fall through.  */
7821
 
7822
    case PARM_DECL:
7823
    case CONST_DECL:
7824
      if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
7825
          && for_each_template_parm (DECL_INITIAL (t), fn, data,
7826
                                     pfd->visited, pfd->include_nondeduced_p))
7827
        return error_mark_node;
7828
      if (DECL_CONTEXT (t)
7829
          && pfd->include_nondeduced_p
7830
          && for_each_template_parm (DECL_CONTEXT (t), fn, data,
7831
                                     pfd->visited, pfd->include_nondeduced_p))
7832
        return error_mark_node;
7833
      break;
7834
 
7835
    case BOUND_TEMPLATE_TEMPLATE_PARM:
7836
      /* Record template parameters such as `T' inside `TT<T>'.  */
7837
      if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
7838
                                  pfd->include_nondeduced_p))
7839
        return error_mark_node;
7840
      /* Fall through.  */
7841
 
7842
    case TEMPLATE_TEMPLATE_PARM:
7843
    case TEMPLATE_TYPE_PARM:
7844
    case TEMPLATE_PARM_INDEX:
7845
      if (fn && (*fn)(t, data))
7846
        return error_mark_node;
7847
      else if (!fn)
7848
        return error_mark_node;
7849
      break;
7850
 
7851
    case TEMPLATE_DECL:
7852
      /* A template template parameter is encountered.  */
7853
      if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
7854
          && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7855
                                     pfd->include_nondeduced_p))
7856
        return error_mark_node;
7857
 
7858
      /* Already substituted template template parameter */
7859
      *walk_subtrees = 0;
7860
      break;
7861
 
7862
    case TYPENAME_TYPE:
7863
      if (!fn
7864
          || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
7865
                                     data, pfd->visited,
7866
                                     pfd->include_nondeduced_p))
7867
        return error_mark_node;
7868
      break;
7869
 
7870
    case CONSTRUCTOR:
7871
      if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
7872
          && pfd->include_nondeduced_p
7873
          && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
7874
                                     (TREE_TYPE (t)), fn, data,
7875
                                     pfd->visited, pfd->include_nondeduced_p))
7876
        return error_mark_node;
7877
      break;
7878
 
7879
    case INDIRECT_REF:
7880
    case COMPONENT_REF:
7881
      /* If there's no type, then this thing must be some expression
7882
         involving template parameters.  */
7883
      if (!fn && !TREE_TYPE (t))
7884
        return error_mark_node;
7885
      break;
7886
 
7887
    case MODOP_EXPR:
7888
    case CAST_EXPR:
7889
    case IMPLICIT_CONV_EXPR:
7890
    case REINTERPRET_CAST_EXPR:
7891
    case CONST_CAST_EXPR:
7892
    case STATIC_CAST_EXPR:
7893
    case DYNAMIC_CAST_EXPR:
7894
    case ARROW_EXPR:
7895
    case DOTSTAR_EXPR:
7896
    case TYPEID_EXPR:
7897
    case PSEUDO_DTOR_EXPR:
7898
      if (!fn)
7899
        return error_mark_node;
7900
      break;
7901
 
7902
    default:
7903
      break;
7904
    }
7905
 
7906
  /* We didn't find any template parameters we liked.  */
7907
  return NULL_TREE;
7908
}
7909
 
7910
/* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
7911
   BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
7912
   call FN with the parameter and the DATA.
7913
   If FN returns nonzero, the iteration is terminated, and
7914
   for_each_template_parm returns 1.  Otherwise, the iteration
7915
   continues.  If FN never returns a nonzero value, the value
7916
   returned by for_each_template_parm is 0.  If FN is NULL, it is
7917
   considered to be the function which always returns 1.
7918
 
7919
   If INCLUDE_NONDEDUCED_P, then this routine will also visit template
7920
   parameters that occur in non-deduced contexts.  When false, only
7921
   visits those template parameters that can be deduced.  */
7922
 
7923
static int
7924
for_each_template_parm (tree t, tree_fn_t fn, void* data,
7925
                        struct pointer_set_t *visited,
7926
                        bool include_nondeduced_p)
7927
{
7928
  struct pair_fn_data pfd;
7929
  int result;
7930
 
7931
  /* Set up.  */
7932
  pfd.fn = fn;
7933
  pfd.data = data;
7934
  pfd.include_nondeduced_p = include_nondeduced_p;
7935
 
7936
  /* Walk the tree.  (Conceptually, we would like to walk without
7937
     duplicates, but for_each_template_parm_r recursively calls
7938
     for_each_template_parm, so we would need to reorganize a fair
7939
     bit to use walk_tree_without_duplicates, so we keep our own
7940
     visited list.)  */
7941
  if (visited)
7942
    pfd.visited = visited;
7943
  else
7944
    pfd.visited = pointer_set_create ();
7945
  result = cp_walk_tree (&t,
7946
                         for_each_template_parm_r,
7947
                         &pfd,
7948
                         pfd.visited) != NULL_TREE;
7949
 
7950
  /* Clean up.  */
7951
  if (!visited)
7952
    {
7953
      pointer_set_destroy (pfd.visited);
7954
      pfd.visited = 0;
7955
    }
7956
 
7957
  return result;
7958
}
7959
 
7960
/* Returns true if T depends on any template parameter.  */
7961
 
7962
int
7963
uses_template_parms (tree t)
7964
{
7965
  bool dependent_p;
7966
  int saved_processing_template_decl;
7967
 
7968
  saved_processing_template_decl = processing_template_decl;
7969
  if (!saved_processing_template_decl)
7970
    processing_template_decl = 1;
7971
  if (TYPE_P (t))
7972
    dependent_p = dependent_type_p (t);
7973
  else if (TREE_CODE (t) == TREE_VEC)
7974
    dependent_p = any_dependent_template_arguments_p (t);
7975
  else if (TREE_CODE (t) == TREE_LIST)
7976
    dependent_p = (uses_template_parms (TREE_VALUE (t))
7977
                   || uses_template_parms (TREE_CHAIN (t)));
7978
  else if (TREE_CODE (t) == TYPE_DECL)
7979
    dependent_p = dependent_type_p (TREE_TYPE (t));
7980
  else if (DECL_P (t)
7981
           || EXPR_P (t)
7982
           || TREE_CODE (t) == TEMPLATE_PARM_INDEX
7983
           || TREE_CODE (t) == OVERLOAD
7984
           || BASELINK_P (t)
7985
           || TREE_CODE (t) == IDENTIFIER_NODE
7986
           || TREE_CODE (t) == TRAIT_EXPR
7987
           || TREE_CODE (t) == CONSTRUCTOR
7988
           || CONSTANT_CLASS_P (t))
7989
    dependent_p = (type_dependent_expression_p (t)
7990
                   || value_dependent_expression_p (t));
7991
  else
7992
    {
7993
      gcc_assert (t == error_mark_node);
7994
      dependent_p = false;
7995
    }
7996
 
7997
  processing_template_decl = saved_processing_template_decl;
7998
 
7999
  return dependent_p;
8000
}
8001
 
8002
/* Returns true if T depends on any template parameter with level LEVEL.  */
8003
 
8004
int
8005
uses_template_parms_level (tree t, int level)
8006
{
8007
  return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
8008
                                 /*include_nondeduced_p=*/true);
8009
}
8010
 
8011
/* Returns TRUE iff INST is an instantiation we don't need to do in an
8012
   ill-formed translation unit, i.e. a variable or function that isn't
8013
   usable in a constant expression.  */
8014
 
8015
static inline bool
8016
neglectable_inst_p (tree d)
8017
{
8018
  return (DECL_P (d)
8019
          && !(TREE_CODE (d) == FUNCTION_DECL ? DECL_DECLARED_CONSTEXPR_P (d)
8020
               : decl_maybe_constant_var_p (d)));
8021
}
8022
 
8023
/* Returns TRUE iff we should refuse to instantiate DECL because it's
8024
   neglectable and instantiated from within an erroneous instantiation.  */
8025
 
8026
static bool
8027
limit_bad_template_recursion (tree decl)
8028
{
8029
  struct tinst_level *lev = current_tinst_level;
8030
  int errs = errorcount + sorrycount;
8031
  if (lev == NULL || errs == 0 || !neglectable_inst_p (decl))
8032
    return false;
8033
 
8034
  for (; lev; lev = lev->next)
8035
    if (neglectable_inst_p (lev->decl))
8036
      break;
8037
 
8038
  return (lev && errs > lev->errors);
8039
}
8040
 
8041
static int tinst_depth;
8042
extern int max_tinst_depth;
8043
#ifdef GATHER_STATISTICS
8044
int depth_reached;
8045
#endif
8046
static GTY(()) struct tinst_level *last_error_tinst_level;
8047
 
8048
/* We're starting to instantiate D; record the template instantiation context
8049
   for diagnostics and to restore it later.  */
8050
 
8051
int
8052
push_tinst_level (tree d)
8053
{
8054
  struct tinst_level *new_level;
8055
 
8056
  if (tinst_depth >= max_tinst_depth)
8057
    {
8058
      last_error_tinst_level = current_tinst_level;
8059
      if (TREE_CODE (d) == TREE_LIST)
8060
        error ("template instantiation depth exceeds maximum of %d (use "
8061
               "-ftemplate-depth= to increase the maximum) substituting %qS",
8062
               max_tinst_depth, d);
8063
      else
8064
        error ("template instantiation depth exceeds maximum of %d (use "
8065
               "-ftemplate-depth= to increase the maximum) instantiating %qD",
8066
               max_tinst_depth, d);
8067
 
8068
      print_instantiation_context ();
8069
 
8070
      return 0;
8071
    }
8072
 
8073
  /* If the current instantiation caused problems, don't let it instantiate
8074
     anything else.  Do allow deduction substitution and decls usable in
8075
     constant expressions.  */
8076
  if (limit_bad_template_recursion (d))
8077
    return 0;
8078
 
8079
  new_level = ggc_alloc_tinst_level ();
8080
  new_level->decl = d;
8081
  new_level->locus = input_location;
8082
  new_level->errors = errorcount+sorrycount;
8083
  new_level->in_system_header_p = in_system_header;
8084
  new_level->next = current_tinst_level;
8085
  current_tinst_level = new_level;
8086
 
8087
  ++tinst_depth;
8088
#ifdef GATHER_STATISTICS
8089
  if (tinst_depth > depth_reached)
8090
    depth_reached = tinst_depth;
8091
#endif
8092
 
8093
  return 1;
8094
}
8095
 
8096
/* We're done instantiating this template; return to the instantiation
8097
   context.  */
8098
 
8099
void
8100
pop_tinst_level (void)
8101
{
8102
  /* Restore the filename and line number stashed away when we started
8103
     this instantiation.  */
8104
  input_location = current_tinst_level->locus;
8105
  current_tinst_level = current_tinst_level->next;
8106
  --tinst_depth;
8107
}
8108
 
8109
/* We're instantiating a deferred template; restore the template
8110
   instantiation context in which the instantiation was requested, which
8111
   is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
8112
 
8113
static tree
8114
reopen_tinst_level (struct tinst_level *level)
8115
{
8116
  struct tinst_level *t;
8117
 
8118
  tinst_depth = 0;
8119
  for (t = level; t; t = t->next)
8120
    ++tinst_depth;
8121
 
8122
  current_tinst_level = level;
8123
  pop_tinst_level ();
8124
  if (current_tinst_level)
8125
    current_tinst_level->errors = errorcount+sorrycount;
8126
  return level->decl;
8127
}
8128
 
8129
/* Returns the TINST_LEVEL which gives the original instantiation
8130
   context.  */
8131
 
8132
struct tinst_level *
8133
outermost_tinst_level (void)
8134
{
8135
  struct tinst_level *level = current_tinst_level;
8136
  if (level)
8137
    while (level->next)
8138
      level = level->next;
8139
  return level;
8140
}
8141
 
8142
/* Returns TRUE if PARM is a parameter of the template TEMPL.  */
8143
 
8144
bool
8145
parameter_of_template_p (tree parm, tree templ)
8146
{
8147
  tree parms;
8148
  int i;
8149
 
8150
  if (!parm || !templ)
8151
    return false;
8152
 
8153
  gcc_assert (DECL_TEMPLATE_PARM_P (parm));
8154
  gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
8155
 
8156
  parms = DECL_TEMPLATE_PARMS (templ);
8157
  parms = INNERMOST_TEMPLATE_PARMS (parms);
8158
 
8159
  for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
8160
    {
8161
      tree p = TREE_VALUE (TREE_VEC_ELT (parms, i));
8162
      if (p == error_mark_node)
8163
        continue;
8164
 
8165
      if (parm == p
8166
          || (DECL_INITIAL (parm)
8167
              && DECL_INITIAL (parm) == DECL_INITIAL (p)))
8168
        return true;
8169
    }
8170
 
8171
  return false;
8172
}
8173
 
8174
/* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
8175
   vector of template arguments, as for tsubst.
8176
 
8177
   Returns an appropriate tsubst'd friend declaration.  */
8178
 
8179
static tree
8180
tsubst_friend_function (tree decl, tree args)
8181
{
8182
  tree new_friend;
8183
 
8184
  if (TREE_CODE (decl) == FUNCTION_DECL
8185
      && DECL_TEMPLATE_INSTANTIATION (decl)
8186
      && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
8187
    /* This was a friend declared with an explicit template
8188
       argument list, e.g.:
8189
 
8190
       friend void f<>(T);
8191
 
8192
       to indicate that f was a template instantiation, not a new
8193
       function declaration.  Now, we have to figure out what
8194
       instantiation of what template.  */
8195
    {
8196
      tree template_id, arglist, fns;
8197
      tree new_args;
8198
      tree tmpl;
8199
      tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
8200
 
8201
      /* Friend functions are looked up in the containing namespace scope.
8202
         We must enter that scope, to avoid finding member functions of the
8203
         current class with same name.  */
8204
      push_nested_namespace (ns);
8205
      fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
8206
                         tf_warning_or_error, NULL_TREE,
8207
                         /*integral_constant_expression_p=*/false);
8208
      pop_nested_namespace (ns);
8209
      arglist = tsubst (DECL_TI_ARGS (decl), args,
8210
                        tf_warning_or_error, NULL_TREE);
8211
      template_id = lookup_template_function (fns, arglist);
8212
 
8213
      new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8214
      tmpl = determine_specialization (template_id, new_friend,
8215
                                       &new_args,
8216
                                       /*need_member_template=*/0,
8217
                                       TREE_VEC_LENGTH (args),
8218
                                       tsk_none);
8219
      return instantiate_template (tmpl, new_args, tf_error);
8220
    }
8221
 
8222
  new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8223
 
8224
  /* The NEW_FRIEND will look like an instantiation, to the
8225
     compiler, but is not an instantiation from the point of view of
8226
     the language.  For example, we might have had:
8227
 
8228
     template <class T> struct S {
8229
       template <class U> friend void f(T, U);
8230
     };
8231
 
8232
     Then, in S<int>, template <class U> void f(int, U) is not an
8233
     instantiation of anything.  */
8234
  if (new_friend == error_mark_node)
8235
    return error_mark_node;
8236
 
8237
  DECL_USE_TEMPLATE (new_friend) = 0;
8238
  if (TREE_CODE (decl) == TEMPLATE_DECL)
8239
    {
8240
      DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
8241
      DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
8242
        = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
8243
    }
8244
 
8245
  /* The mangled name for the NEW_FRIEND is incorrect.  The function
8246
     is not a template instantiation and should not be mangled like
8247
     one.  Therefore, we forget the mangling here; we'll recompute it
8248
     later if we need it.  */
8249
  if (TREE_CODE (new_friend) != TEMPLATE_DECL)
8250
    {
8251
      SET_DECL_RTL (new_friend, NULL);
8252
      SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
8253
    }
8254
 
8255
  if (DECL_NAMESPACE_SCOPE_P (new_friend))
8256
    {
8257
      tree old_decl;
8258
      tree new_friend_template_info;
8259
      tree new_friend_result_template_info;
8260
      tree ns;
8261
      int  new_friend_is_defn;
8262
 
8263
      /* We must save some information from NEW_FRIEND before calling
8264
         duplicate decls since that function will free NEW_FRIEND if
8265
         possible.  */
8266
      new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
8267
      new_friend_is_defn =
8268
            (DECL_INITIAL (DECL_TEMPLATE_RESULT
8269
                           (template_for_substitution (new_friend)))
8270
             != NULL_TREE);
8271
      if (TREE_CODE (new_friend) == TEMPLATE_DECL)
8272
        {
8273
          /* This declaration is a `primary' template.  */
8274
          DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
8275
 
8276
          new_friend_result_template_info
8277
            = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
8278
        }
8279
      else
8280
        new_friend_result_template_info = NULL_TREE;
8281
 
8282
      /* Make the init_value nonzero so pushdecl knows this is a defn.  */
8283
      if (new_friend_is_defn)
8284
        DECL_INITIAL (new_friend) = error_mark_node;
8285
 
8286
      /* Inside pushdecl_namespace_level, we will push into the
8287
         current namespace. However, the friend function should go
8288
         into the namespace of the template.  */
8289
      ns = decl_namespace_context (new_friend);
8290
      push_nested_namespace (ns);
8291
      old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
8292
      pop_nested_namespace (ns);
8293
 
8294
      if (old_decl == error_mark_node)
8295
        return error_mark_node;
8296
 
8297
      if (old_decl != new_friend)
8298
        {
8299
          /* This new friend declaration matched an existing
8300
             declaration.  For example, given:
8301
 
8302
               template <class T> void f(T);
8303
               template <class U> class C {
8304
                 template <class T> friend void f(T) {}
8305
               };
8306
 
8307
             the friend declaration actually provides the definition
8308
             of `f', once C has been instantiated for some type.  So,
8309
             old_decl will be the out-of-class template declaration,
8310
             while new_friend is the in-class definition.
8311
 
8312
             But, if `f' was called before this point, the
8313
             instantiation of `f' will have DECL_TI_ARGS corresponding
8314
             to `T' but not to `U', references to which might appear
8315
             in the definition of `f'.  Previously, the most general
8316
             template for an instantiation of `f' was the out-of-class
8317
             version; now it is the in-class version.  Therefore, we
8318
             run through all specialization of `f', adding to their
8319
             DECL_TI_ARGS appropriately.  In particular, they need a
8320
             new set of outer arguments, corresponding to the
8321
             arguments for this class instantiation.
8322
 
8323
             The same situation can arise with something like this:
8324
 
8325
               friend void f(int);
8326
               template <class T> class C {
8327
                 friend void f(T) {}
8328
               };
8329
 
8330
             when `C<int>' is instantiated.  Now, `f(int)' is defined
8331
             in the class.  */
8332
 
8333
          if (!new_friend_is_defn)
8334
            /* On the other hand, if the in-class declaration does
8335
               *not* provide a definition, then we don't want to alter
8336
               existing definitions.  We can just leave everything
8337
               alone.  */
8338
            ;
8339
          else
8340
            {
8341
              tree new_template = TI_TEMPLATE (new_friend_template_info);
8342
              tree new_args = TI_ARGS (new_friend_template_info);
8343
 
8344
              /* Overwrite whatever template info was there before, if
8345
                 any, with the new template information pertaining to
8346
                 the declaration.  */
8347
              DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
8348
 
8349
              if (TREE_CODE (old_decl) != TEMPLATE_DECL)
8350
                {
8351
                  /* We should have called reregister_specialization in
8352
                     duplicate_decls.  */
8353
                  gcc_assert (retrieve_specialization (new_template,
8354
                                                       new_args, 0)
8355
                              == old_decl);
8356
 
8357
                  /* Instantiate it if the global has already been used.  */
8358
                  if (DECL_ODR_USED (old_decl))
8359
                    instantiate_decl (old_decl, /*defer_ok=*/true,
8360
                                      /*expl_inst_class_mem_p=*/false);
8361
                }
8362
              else
8363
                {
8364
                  tree t;
8365
 
8366
                  /* Indicate that the old function template is a partial
8367
                     instantiation.  */
8368
                  DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
8369
                    = new_friend_result_template_info;
8370
 
8371
                  gcc_assert (new_template
8372
                              == most_general_template (new_template));
8373
                  gcc_assert (new_template != old_decl);
8374
 
8375
                  /* Reassign any specializations already in the hash table
8376
                     to the new more general template, and add the
8377
                     additional template args.  */
8378
                  for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
8379
                       t != NULL_TREE;
8380
                       t = TREE_CHAIN (t))
8381
                    {
8382
                      tree spec = TREE_VALUE (t);
8383
                      spec_entry elt;
8384
 
8385
                      elt.tmpl = old_decl;
8386
                      elt.args = DECL_TI_ARGS (spec);
8387
                      elt.spec = NULL_TREE;
8388
 
8389
                      htab_remove_elt (decl_specializations, &elt);
8390
 
8391
                      DECL_TI_ARGS (spec)
8392
                        = add_outermost_template_args (new_args,
8393
                                                       DECL_TI_ARGS (spec));
8394
 
8395
                      register_specialization
8396
                        (spec, new_template, DECL_TI_ARGS (spec), true, 0);
8397
 
8398
                    }
8399
                  DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
8400
                }
8401
            }
8402
 
8403
          /* The information from NEW_FRIEND has been merged into OLD_DECL
8404
             by duplicate_decls.  */
8405
          new_friend = old_decl;
8406
        }
8407
    }
8408
  else
8409
    {
8410
      tree context = DECL_CONTEXT (new_friend);
8411
      bool dependent_p;
8412
 
8413
      /* In the code
8414
           template <class T> class C {
8415
             template <class U> friend void C1<U>::f (); // case 1
8416
             friend void C2<T>::f ();                    // case 2
8417
           };
8418
         we only need to make sure CONTEXT is a complete type for
8419
         case 2.  To distinguish between the two cases, we note that
8420
         CONTEXT of case 1 remains dependent type after tsubst while
8421
         this isn't true for case 2.  */
8422
      ++processing_template_decl;
8423
      dependent_p = dependent_type_p (context);
8424
      --processing_template_decl;
8425
 
8426
      if (!dependent_p
8427
          && !complete_type_or_else (context, NULL_TREE))
8428
        return error_mark_node;
8429
 
8430
      if (COMPLETE_TYPE_P (context))
8431
        {
8432
          /* Check to see that the declaration is really present, and,
8433
             possibly obtain an improved declaration.  */
8434
          tree fn = check_classfn (context,
8435
                                   new_friend, NULL_TREE);
8436
 
8437
          if (fn)
8438
            new_friend = fn;
8439
        }
8440
    }
8441
 
8442
  return new_friend;
8443
}
8444
 
8445
/* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
8446
   template arguments, as for tsubst.
8447
 
8448
   Returns an appropriate tsubst'd friend type or error_mark_node on
8449
   failure.  */
8450
 
8451
static tree
8452
tsubst_friend_class (tree friend_tmpl, tree args)
8453
{
8454
  tree friend_type;
8455
  tree tmpl;
8456
  tree context;
8457
 
8458
  context = CP_DECL_CONTEXT (friend_tmpl);
8459
 
8460
  if (context != global_namespace)
8461
    {
8462
      if (TREE_CODE (context) == NAMESPACE_DECL)
8463
        push_nested_namespace (context);
8464
      else
8465
        push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
8466
    }
8467
 
8468
  /* Look for a class template declaration.  We look for hidden names
8469
     because two friend declarations of the same template are the
8470
     same.  For example, in:
8471
 
8472
       struct A {
8473
         template <typename> friend class F;
8474
       };
8475
       template <typename> struct B {
8476
         template <typename> friend class F;
8477
       };
8478
 
8479
     both F templates are the same.  */
8480
  tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
8481
                           /*block_p=*/true, 0,
8482
                           LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
8483
 
8484
  /* But, if we don't find one, it might be because we're in a
8485
     situation like this:
8486
 
8487
       template <class T>
8488
       struct S {
8489
         template <class U>
8490
         friend struct S;
8491
       };
8492
 
8493
     Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
8494
     for `S<int>', not the TEMPLATE_DECL.  */
8495
  if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
8496
    {
8497
      tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
8498
      tmpl = maybe_get_template_decl_from_type_decl (tmpl);
8499
    }
8500
 
8501
  if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
8502
    {
8503
      /* The friend template has already been declared.  Just
8504
         check to see that the declarations match, and install any new
8505
         default parameters.  We must tsubst the default parameters,
8506
         of course.  We only need the innermost template parameters
8507
         because that is all that redeclare_class_template will look
8508
         at.  */
8509
      if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
8510
          > TMPL_ARGS_DEPTH (args))
8511
        {
8512
          tree parms;
8513
          location_t saved_input_location;
8514
          parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
8515
                                         args, tf_warning_or_error);
8516
 
8517
          saved_input_location = input_location;
8518
          input_location = DECL_SOURCE_LOCATION (friend_tmpl);
8519
          redeclare_class_template (TREE_TYPE (tmpl), parms);
8520
          input_location = saved_input_location;
8521
 
8522
        }
8523
 
8524
      friend_type = TREE_TYPE (tmpl);
8525
    }
8526
  else
8527
    {
8528
      /* The friend template has not already been declared.  In this
8529
         case, the instantiation of the template class will cause the
8530
         injection of this template into the global scope.  */
8531
      tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
8532
      if (tmpl == error_mark_node)
8533
        return error_mark_node;
8534
 
8535
      /* The new TMPL is not an instantiation of anything, so we
8536
         forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
8537
         the new type because that is supposed to be the corresponding
8538
         template decl, i.e., TMPL.  */
8539
      DECL_USE_TEMPLATE (tmpl) = 0;
8540
      DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
8541
      CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
8542
      CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
8543
        = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
8544
 
8545
      /* Inject this template into the global scope.  */
8546
      friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
8547
    }
8548
 
8549
  if (context != global_namespace)
8550
    {
8551
      if (TREE_CODE (context) == NAMESPACE_DECL)
8552
        pop_nested_namespace (context);
8553
      else
8554
        pop_nested_class ();
8555
    }
8556
 
8557
  return friend_type;
8558
}
8559
 
8560
/* Returns zero if TYPE cannot be completed later due to circularity.
8561
   Otherwise returns one.  */
8562
 
8563
static int
8564
can_complete_type_without_circularity (tree type)
8565
{
8566
  if (type == NULL_TREE || type == error_mark_node)
8567
    return 0;
8568
  else if (COMPLETE_TYPE_P (type))
8569
    return 1;
8570
  else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
8571
    return can_complete_type_without_circularity (TREE_TYPE (type));
8572
  else if (CLASS_TYPE_P (type)
8573
           && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
8574
    return 0;
8575
  else
8576
    return 1;
8577
}
8578
 
8579
/* Apply any attributes which had to be deferred until instantiation
8580
   time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
8581
   ARGS, COMPLAIN, IN_DECL are as tsubst.  */
8582
 
8583
static void
8584
apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
8585
                                tree args, tsubst_flags_t complain, tree in_decl)
8586
{
8587
  tree last_dep = NULL_TREE;
8588
  tree t;
8589
  tree *p;
8590
 
8591
  for (t = attributes; t; t = TREE_CHAIN (t))
8592
    if (ATTR_IS_DEPENDENT (t))
8593
      {
8594
        last_dep = t;
8595
        attributes = copy_list (attributes);
8596
        break;
8597
      }
8598
 
8599
  if (DECL_P (*decl_p))
8600
    {
8601
      if (TREE_TYPE (*decl_p) == error_mark_node)
8602
        return;
8603
      p = &DECL_ATTRIBUTES (*decl_p);
8604
    }
8605
  else
8606
    p = &TYPE_ATTRIBUTES (*decl_p);
8607
 
8608
  if (last_dep)
8609
    {
8610
      tree late_attrs = NULL_TREE;
8611
      tree *q = &late_attrs;
8612
 
8613
      for (*p = attributes; *p; )
8614
        {
8615
          t = *p;
8616
          if (ATTR_IS_DEPENDENT (t))
8617
            {
8618
              *p = TREE_CHAIN (t);
8619
              TREE_CHAIN (t) = NULL_TREE;
8620
              /* If the first attribute argument is an identifier, don't
8621
                 pass it through tsubst.  Attributes like mode, format,
8622
                 cleanup and several target specific attributes expect it
8623
                 unmodified.  */
8624
              if (TREE_VALUE (t)
8625
                  && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
8626
                  && TREE_VALUE (TREE_VALUE (t))
8627
                  && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
8628
                      == IDENTIFIER_NODE))
8629
                {
8630
                  tree chain
8631
                    = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
8632
                                   in_decl,
8633
                                   /*integral_constant_expression_p=*/false);
8634
                  if (chain != TREE_CHAIN (TREE_VALUE (t)))
8635
                    TREE_VALUE (t)
8636
                      = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
8637
                                   chain);
8638
                }
8639
              else
8640
                TREE_VALUE (t)
8641
                  = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
8642
                                 /*integral_constant_expression_p=*/false);
8643
              *q = t;
8644
              q = &TREE_CHAIN (t);
8645
            }
8646
          else
8647
            p = &TREE_CHAIN (t);
8648
        }
8649
 
8650
      cplus_decl_attributes (decl_p, late_attrs, attr_flags);
8651
    }
8652
}
8653
 
8654
/* Perform (or defer) access check for typedefs that were referenced
8655
   from within the template TMPL code.
8656
   This is a subroutine of instantiate_template and instantiate_class_template.
8657
   TMPL is the template to consider and TARGS is the list of arguments of
8658
   that template.  */
8659
 
8660
static void
8661
perform_typedefs_access_check (tree tmpl, tree targs)
8662
{
8663
  location_t saved_location;
8664
  int i;
8665
  qualified_typedef_usage_t *iter;
8666
 
8667
  if (!tmpl
8668
      || (!CLASS_TYPE_P (tmpl)
8669
          && TREE_CODE (tmpl) != FUNCTION_DECL))
8670
    return;
8671
 
8672
  saved_location = input_location;
8673
  FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
8674
                    get_types_needing_access_check (tmpl),
8675
                    i, iter)
8676
    {
8677
      tree type_decl = iter->typedef_decl;
8678
      tree type_scope = iter->context;
8679
 
8680
      if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
8681
        continue;
8682
 
8683
      if (uses_template_parms (type_decl))
8684
        type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
8685
      if (uses_template_parms (type_scope))
8686
        type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
8687
 
8688
      /* Make access check error messages point to the location
8689
         of the use of the typedef.  */
8690
      input_location = iter->locus;
8691
      perform_or_defer_access_check (TYPE_BINFO (type_scope),
8692
                                     type_decl, type_decl);
8693
    }
8694
    input_location = saved_location;
8695
}
8696
 
8697
static tree
8698
instantiate_class_template_1 (tree type)
8699
{
8700
  tree templ, args, pattern, t, member;
8701
  tree typedecl;
8702
  tree pbinfo;
8703
  tree base_list;
8704
  unsigned int saved_maximum_field_alignment;
8705
 
8706
  if (type == error_mark_node)
8707
    return error_mark_node;
8708
 
8709
  if (COMPLETE_OR_OPEN_TYPE_P (type)
8710
      || uses_template_parms (type))
8711
    return type;
8712
 
8713
  /* Figure out which template is being instantiated.  */
8714
  templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
8715
  gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
8716
 
8717
  /* Determine what specialization of the original template to
8718
     instantiate.  */
8719
  t = most_specialized_class (type, templ, tf_warning_or_error);
8720
  if (t == error_mark_node)
8721
    {
8722
      TYPE_BEING_DEFINED (type) = 1;
8723
      return error_mark_node;
8724
    }
8725
  else if (t)
8726
    {
8727
      /* This TYPE is actually an instantiation of a partial
8728
         specialization.  We replace the innermost set of ARGS with
8729
         the arguments appropriate for substitution.  For example,
8730
         given:
8731
 
8732
           template <class T> struct S {};
8733
           template <class T> struct S<T*> {};
8734
 
8735
         and supposing that we are instantiating S<int*>, ARGS will
8736
         presently be {int*} -- but we need {int}.  */
8737
      pattern = TREE_TYPE (t);
8738
      args = TREE_PURPOSE (t);
8739
    }
8740
  else
8741
    {
8742
      pattern = TREE_TYPE (templ);
8743
      args = CLASSTYPE_TI_ARGS (type);
8744
    }
8745
 
8746
  /* If the template we're instantiating is incomplete, then clearly
8747
     there's nothing we can do.  */
8748
  if (!COMPLETE_TYPE_P (pattern))
8749
    return type;
8750
 
8751
  /* If we've recursively instantiated too many templates, stop.  */
8752
  if (! push_tinst_level (type))
8753
    return type;
8754
 
8755
  /* Now we're really doing the instantiation.  Mark the type as in
8756
     the process of being defined.  */
8757
  TYPE_BEING_DEFINED (type) = 1;
8758
 
8759
  /* We may be in the middle of deferred access check.  Disable
8760
     it now.  */
8761
  push_deferring_access_checks (dk_no_deferred);
8762
 
8763
  push_to_top_level ();
8764
  /* Use #pragma pack from the template context.  */
8765
  saved_maximum_field_alignment = maximum_field_alignment;
8766
  maximum_field_alignment = TYPE_PRECISION (pattern);
8767
 
8768
  SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
8769
 
8770
  /* Set the input location to the most specialized template definition.
8771
     This is needed if tsubsting causes an error.  */
8772
  typedecl = TYPE_MAIN_DECL (pattern);
8773
  input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
8774
    DECL_SOURCE_LOCATION (typedecl);
8775
 
8776
  TYPE_PACKED (type) = TYPE_PACKED (pattern);
8777
  TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
8778
  TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
8779
  TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
8780
  if (ANON_AGGR_TYPE_P (pattern))
8781
    SET_ANON_AGGR_TYPE_P (type);
8782
  if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
8783
    {
8784
      CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
8785
      CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
8786
      /* Adjust visibility for template arguments.  */
8787
      determine_visibility (TYPE_MAIN_DECL (type));
8788
    }
8789
  CLASSTYPE_FINAL (type) = CLASSTYPE_FINAL (pattern);
8790
 
8791
  pbinfo = TYPE_BINFO (pattern);
8792
 
8793
  /* We should never instantiate a nested class before its enclosing
8794
     class; we need to look up the nested class by name before we can
8795
     instantiate it, and that lookup should instantiate the enclosing
8796
     class.  */
8797
  gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
8798
              || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
8799
 
8800
  base_list = NULL_TREE;
8801
  if (BINFO_N_BASE_BINFOS (pbinfo))
8802
    {
8803
      tree pbase_binfo;
8804
      tree pushed_scope;
8805
      int i;
8806
 
8807
      /* We must enter the scope containing the type, as that is where
8808
         the accessibility of types named in dependent bases are
8809
         looked up from.  */
8810
      pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
8811
 
8812
      /* Substitute into each of the bases to determine the actual
8813
         basetypes.  */
8814
      for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
8815
        {
8816
          tree base;
8817
          tree access = BINFO_BASE_ACCESS (pbinfo, i);
8818
          tree expanded_bases = NULL_TREE;
8819
          int idx, len = 1;
8820
 
8821
          if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
8822
            {
8823
              expanded_bases =
8824
                tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
8825
                                       args, tf_error, NULL_TREE);
8826
              if (expanded_bases == error_mark_node)
8827
                continue;
8828
 
8829
              len = TREE_VEC_LENGTH (expanded_bases);
8830
            }
8831
 
8832
          for (idx = 0; idx < len; idx++)
8833
            {
8834
              if (expanded_bases)
8835
                /* Extract the already-expanded base class.  */
8836
                base = TREE_VEC_ELT (expanded_bases, idx);
8837
              else
8838
                /* Substitute to figure out the base class.  */
8839
                base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error,
8840
                               NULL_TREE);
8841
 
8842
              if (base == error_mark_node)
8843
                continue;
8844
 
8845
              base_list = tree_cons (access, base, base_list);
8846
              if (BINFO_VIRTUAL_P (pbase_binfo))
8847
                TREE_TYPE (base_list) = integer_type_node;
8848
            }
8849
        }
8850
 
8851
      /* The list is now in reverse order; correct that.  */
8852
      base_list = nreverse (base_list);
8853
 
8854
      if (pushed_scope)
8855
        pop_scope (pushed_scope);
8856
    }
8857
  /* Now call xref_basetypes to set up all the base-class
8858
     information.  */
8859
  xref_basetypes (type, base_list);
8860
 
8861
  apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
8862
                                  (int) ATTR_FLAG_TYPE_IN_PLACE,
8863
                                  args, tf_error, NULL_TREE);
8864
  fixup_attribute_variants (type);
8865
 
8866
  /* Now that our base classes are set up, enter the scope of the
8867
     class, so that name lookups into base classes, etc. will work
8868
     correctly.  This is precisely analogous to what we do in
8869
     begin_class_definition when defining an ordinary non-template
8870
     class, except we also need to push the enclosing classes.  */
8871
  push_nested_class (type);
8872
 
8873
  /* Now members are processed in the order of declaration.  */
8874
  for (member = CLASSTYPE_DECL_LIST (pattern);
8875
       member; member = TREE_CHAIN (member))
8876
    {
8877
      tree t = TREE_VALUE (member);
8878
 
8879
      if (TREE_PURPOSE (member))
8880
        {
8881
          if (TYPE_P (t))
8882
            {
8883
              /* Build new CLASSTYPE_NESTED_UTDS.  */
8884
 
8885
              tree newtag;
8886
              bool class_template_p;
8887
 
8888
              class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
8889
                                  && TYPE_LANG_SPECIFIC (t)
8890
                                  && CLASSTYPE_IS_TEMPLATE (t));
8891
              /* If the member is a class template, then -- even after
8892
                 substitution -- there may be dependent types in the
8893
                 template argument list for the class.  We increment
8894
                 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
8895
                 that function will assume that no types are dependent
8896
                 when outside of a template.  */
8897
              if (class_template_p)
8898
                ++processing_template_decl;
8899
              newtag = tsubst (t, args, tf_error, NULL_TREE);
8900
              if (class_template_p)
8901
                --processing_template_decl;
8902
              if (newtag == error_mark_node)
8903
                continue;
8904
 
8905
              if (TREE_CODE (newtag) != ENUMERAL_TYPE)
8906
                {
8907
                  tree name = TYPE_IDENTIFIER (t);
8908
 
8909
                  if (class_template_p)
8910
                    /* Unfortunately, lookup_template_class sets
8911
                       CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
8912
                       instantiation (i.e., for the type of a member
8913
                       template class nested within a template class.)
8914
                       This behavior is required for
8915
                       maybe_process_partial_specialization to work
8916
                       correctly, but is not accurate in this case;
8917
                       the TAG is not an instantiation of anything.
8918
                       (The corresponding TEMPLATE_DECL is an
8919
                       instantiation, but the TYPE is not.) */
8920
                    CLASSTYPE_USE_TEMPLATE (newtag) = 0;
8921
 
8922
                  /* Now, we call pushtag to put this NEWTAG into the scope of
8923
                     TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
8924
                     pushtag calling push_template_decl.  We don't have to do
8925
                     this for enums because it will already have been done in
8926
                     tsubst_enum.  */
8927
                  if (name)
8928
                    SET_IDENTIFIER_TYPE_VALUE (name, newtag);
8929
                  pushtag (name, newtag, /*tag_scope=*/ts_current);
8930
                }
8931
            }
8932
          else if (TREE_CODE (t) == FUNCTION_DECL
8933
                   || DECL_FUNCTION_TEMPLATE_P (t))
8934
            {
8935
              /* Build new TYPE_METHODS.  */
8936
              tree r;
8937
 
8938
              if (TREE_CODE (t) == TEMPLATE_DECL)
8939
                ++processing_template_decl;
8940
              r = tsubst (t, args, tf_error, NULL_TREE);
8941
              if (TREE_CODE (t) == TEMPLATE_DECL)
8942
                --processing_template_decl;
8943
              set_current_access_from_decl (r);
8944
              finish_member_declaration (r);
8945
              /* Instantiate members marked with attribute used.  */
8946
              if (r != error_mark_node && DECL_PRESERVE_P (r))
8947
                mark_used (r);
8948
            }
8949
          else
8950
            {
8951
              /* Build new TYPE_FIELDS.  */
8952
              if (TREE_CODE (t) == STATIC_ASSERT)
8953
                {
8954
                  tree condition =
8955
                    tsubst_expr (STATIC_ASSERT_CONDITION (t), args,
8956
                                 tf_warning_or_error, NULL_TREE,
8957
                                 /*integral_constant_expression_p=*/true);
8958
                  finish_static_assert (condition,
8959
                                        STATIC_ASSERT_MESSAGE (t),
8960
                                        STATIC_ASSERT_SOURCE_LOCATION (t),
8961
                                        /*member_p=*/true);
8962
                }
8963
              else if (TREE_CODE (t) != CONST_DECL)
8964
                {
8965
                  tree r;
8966
 
8967
                  /* The file and line for this declaration, to
8968
                     assist in error message reporting.  Since we
8969
                     called push_tinst_level above, we don't need to
8970
                     restore these.  */
8971
                  input_location = DECL_SOURCE_LOCATION (t);
8972
 
8973
                  if (TREE_CODE (t) == TEMPLATE_DECL)
8974
                    ++processing_template_decl;
8975
                  r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
8976
                  if (TREE_CODE (t) == TEMPLATE_DECL)
8977
                    --processing_template_decl;
8978
                  if (TREE_CODE (r) == VAR_DECL)
8979
                    {
8980
                      /* In [temp.inst]:
8981
 
8982
                           [t]he initialization (and any associated
8983
                           side-effects) of a static data member does
8984
                           not occur unless the static data member is
8985
                           itself used in a way that requires the
8986
                           definition of the static data member to
8987
                           exist.
8988
 
8989
                         Therefore, we do not substitute into the
8990
                         initialized for the static data member here.  */
8991
                      finish_static_data_member_decl
8992
                        (r,
8993
                         /*init=*/NULL_TREE,
8994
                         /*init_const_expr_p=*/false,
8995
                         /*asmspec_tree=*/NULL_TREE,
8996
                         /*flags=*/0);
8997
                      /* Instantiate members marked with attribute used.  */
8998
                      if (r != error_mark_node && DECL_PRESERVE_P (r))
8999
                        mark_used (r);
9000
                    }
9001
                  else if (TREE_CODE (r) == FIELD_DECL)
9002
                    {
9003
                      /* Determine whether R has a valid type and can be
9004
                         completed later.  If R is invalid, then it is
9005
                         replaced by error_mark_node so that it will not be
9006
                         added to TYPE_FIELDS.  */
9007
                      tree rtype = TREE_TYPE (r);
9008
                      if (can_complete_type_without_circularity (rtype))
9009
                        complete_type (rtype);
9010
 
9011
                      if (!COMPLETE_TYPE_P (rtype))
9012
                        {
9013
                          cxx_incomplete_type_error (r, rtype);
9014
                          r = error_mark_node;
9015
                        }
9016
                    }
9017
 
9018
                  /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
9019
                     such a thing will already have been added to the field
9020
                     list by tsubst_enum in finish_member_declaration in the
9021
                     CLASSTYPE_NESTED_UTDS case above.  */
9022
                  if (!(TREE_CODE (r) == TYPE_DECL
9023
                        && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
9024
                        && DECL_ARTIFICIAL (r)))
9025
                    {
9026
                      set_current_access_from_decl (r);
9027
                      finish_member_declaration (r);
9028
                    }
9029
                }
9030
            }
9031
        }
9032
      else
9033
        {
9034
          if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
9035
            {
9036
              /* Build new CLASSTYPE_FRIEND_CLASSES.  */
9037
 
9038
              tree friend_type = t;
9039
              bool adjust_processing_template_decl = false;
9040
 
9041
              if (TREE_CODE (friend_type) == TEMPLATE_DECL)
9042
                {
9043
                  /* template <class T> friend class C;  */
9044
                  friend_type = tsubst_friend_class (friend_type, args);
9045
                  adjust_processing_template_decl = true;
9046
                }
9047
              else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
9048
                {
9049
                  /* template <class T> friend class C::D;  */
9050
                  friend_type = tsubst (friend_type, args,
9051
                                        tf_warning_or_error, NULL_TREE);
9052
                  if (TREE_CODE (friend_type) == TEMPLATE_DECL)
9053
                    friend_type = TREE_TYPE (friend_type);
9054
                  adjust_processing_template_decl = true;
9055
                }
9056
              else if (TREE_CODE (friend_type) == TYPENAME_TYPE
9057
                       || TREE_CODE (friend_type) == TEMPLATE_TYPE_PARM)
9058
                {
9059
                  /* This could be either
9060
 
9061
                       friend class T::C;
9062
 
9063
                     when dependent_type_p is false or
9064
 
9065
                       template <class U> friend class T::C;
9066
 
9067
                     otherwise.  */
9068
                  friend_type = tsubst (friend_type, args,
9069
                                        tf_warning_or_error, NULL_TREE);
9070
                  /* Bump processing_template_decl for correct
9071
                     dependent_type_p calculation.  */
9072
                  ++processing_template_decl;
9073
                  if (dependent_type_p (friend_type))
9074
                    adjust_processing_template_decl = true;
9075
                  --processing_template_decl;
9076
                }
9077
              else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
9078
                       && hidden_name_p (TYPE_NAME (friend_type)))
9079
                {
9080
                  /* friend class C;
9081
 
9082
                     where C hasn't been declared yet.  Let's lookup name
9083
                     from namespace scope directly, bypassing any name that
9084
                     come from dependent base class.  */
9085
                  tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
9086
 
9087
                  /* The call to xref_tag_from_type does injection for friend
9088
                     classes.  */
9089
                  push_nested_namespace (ns);
9090
                  friend_type =
9091
                    xref_tag_from_type (friend_type, NULL_TREE,
9092
                                        /*tag_scope=*/ts_current);
9093
                  pop_nested_namespace (ns);
9094
                }
9095
              else if (uses_template_parms (friend_type))
9096
                /* friend class C<T>;  */
9097
                friend_type = tsubst (friend_type, args,
9098
                                      tf_warning_or_error, NULL_TREE);
9099
              /* Otherwise it's
9100
 
9101
                   friend class C;
9102
 
9103
                 where C is already declared or
9104
 
9105
                   friend class C<int>;
9106
 
9107
                 We don't have to do anything in these cases.  */
9108
 
9109
              if (adjust_processing_template_decl)
9110
                /* Trick make_friend_class into realizing that the friend
9111
                   we're adding is a template, not an ordinary class.  It's
9112
                   important that we use make_friend_class since it will
9113
                   perform some error-checking and output cross-reference
9114
                   information.  */
9115
                ++processing_template_decl;
9116
 
9117
              if (friend_type != error_mark_node)
9118
                make_friend_class (type, friend_type, /*complain=*/false);
9119
 
9120
              if (adjust_processing_template_decl)
9121
                --processing_template_decl;
9122
            }
9123
          else
9124
            {
9125
              /* Build new DECL_FRIENDLIST.  */
9126
              tree r;
9127
 
9128
              /* The file and line for this declaration, to
9129
                 assist in error message reporting.  Since we
9130
                 called push_tinst_level above, we don't need to
9131
                 restore these.  */
9132
              input_location = DECL_SOURCE_LOCATION (t);
9133
 
9134
              if (TREE_CODE (t) == TEMPLATE_DECL)
9135
                {
9136
                  ++processing_template_decl;
9137
                  push_deferring_access_checks (dk_no_check);
9138
                }
9139
 
9140
              r = tsubst_friend_function (t, args);
9141
              add_friend (type, r, /*complain=*/false);
9142
              if (TREE_CODE (t) == TEMPLATE_DECL)
9143
                {
9144
                  pop_deferring_access_checks ();
9145
                  --processing_template_decl;
9146
                }
9147
            }
9148
        }
9149
    }
9150
 
9151
  if (CLASSTYPE_LAMBDA_EXPR (type))
9152
    {
9153
      tree decl = lambda_function (type);
9154
      if (decl)
9155
        {
9156
          tree lambda = CLASSTYPE_LAMBDA_EXPR (type);
9157
          if (LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (lambda))
9158
            {
9159
              apply_lambda_return_type (lambda, void_type_node);
9160
              LAMBDA_EXPR_RETURN_TYPE (lambda) = NULL_TREE;
9161
            }
9162
          instantiate_decl (decl, false, false);
9163
          maybe_add_lambda_conv_op (type);
9164
        }
9165
      else
9166
        gcc_assert (errorcount);
9167
    }
9168
 
9169
  /* Set the file and line number information to whatever is given for
9170
     the class itself.  This puts error messages involving generated
9171
     implicit functions at a predictable point, and the same point
9172
     that would be used for non-template classes.  */
9173
  input_location = DECL_SOURCE_LOCATION (typedecl);
9174
 
9175
  unreverse_member_declarations (type);
9176
  finish_struct_1 (type);
9177
  TYPE_BEING_DEFINED (type) = 0;
9178
 
9179
  /* We don't instantiate default arguments for member functions.  14.7.1:
9180
 
9181
     The implicit instantiation of a class template specialization causes
9182
     the implicit instantiation of the declarations, but not of the
9183
     definitions or default arguments, of the class member functions,
9184
     member classes, static data members and member templates....  */
9185
 
9186
  /* Some typedefs referenced from within the template code need to be access
9187
     checked at template instantiation time, i.e now. These types were
9188
     added to the template at parsing time. Let's get those and perform
9189
     the access checks then.  */
9190
  perform_typedefs_access_check (pattern, args);
9191
  perform_deferred_access_checks ();
9192
  pop_nested_class ();
9193
  maximum_field_alignment = saved_maximum_field_alignment;
9194
  pop_from_top_level ();
9195
  pop_deferring_access_checks ();
9196
  pop_tinst_level ();
9197
 
9198
  /* The vtable for a template class can be emitted in any translation
9199
     unit in which the class is instantiated.  When there is no key
9200
     method, however, finish_struct_1 will already have added TYPE to
9201
     the keyed_classes list.  */
9202
  if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
9203
    keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
9204
 
9205
  return type;
9206
}
9207
 
9208
/* Wrapper for instantiate_class_template_1.  */
9209
 
9210
tree
9211
instantiate_class_template (tree type)
9212
{
9213
  tree ret;
9214
  timevar_push (TV_TEMPLATE_INST);
9215
  ret = instantiate_class_template_1 (type);
9216
  timevar_pop (TV_TEMPLATE_INST);
9217
  return ret;
9218
}
9219
 
9220
static tree
9221
tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9222
{
9223
  tree r;
9224
 
9225
  if (!t)
9226
    r = t;
9227
  else if (TYPE_P (t))
9228
    r = tsubst (t, args, complain, in_decl);
9229
  else
9230
    {
9231
      if (!(complain & tf_warning))
9232
        ++c_inhibit_evaluation_warnings;
9233
      r = tsubst_expr (t, args, complain, in_decl,
9234
                       /*integral_constant_expression_p=*/true);
9235
      if (!(complain & tf_warning))
9236
        --c_inhibit_evaluation_warnings;
9237
      /* Preserve the raw-reference nature of T.  */
9238
      if (TREE_TYPE (t) && TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE
9239
          && REFERENCE_REF_P (r))
9240
        r = TREE_OPERAND (r, 0);
9241
    }
9242
  return r;
9243
}
9244
 
9245
/* Given a function parameter pack TMPL_PARM and some function parameters
9246
   instantiated from it at *SPEC_P, return a NONTYPE_ARGUMENT_PACK of them
9247
   and set *SPEC_P to point at the next point in the list.  */
9248
 
9249
static tree
9250
extract_fnparm_pack (tree tmpl_parm, tree *spec_p)
9251
{
9252
  /* Collect all of the extra "packed" parameters into an
9253
     argument pack.  */
9254
  tree parmvec;
9255
  tree parmtypevec;
9256
  tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
9257
  tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
9258
  tree spec_parm = *spec_p;
9259
  int i, len;
9260
 
9261
  for (len = 0; spec_parm; ++len, spec_parm = TREE_CHAIN (spec_parm))
9262
    if (tmpl_parm
9263
        && !function_parameter_expanded_from_pack_p (spec_parm, tmpl_parm))
9264
      break;
9265
 
9266
  /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
9267
  parmvec = make_tree_vec (len);
9268
  parmtypevec = make_tree_vec (len);
9269
  spec_parm = *spec_p;
9270
  for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
9271
    {
9272
      TREE_VEC_ELT (parmvec, i) = spec_parm;
9273
      TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
9274
    }
9275
 
9276
  /* Build the argument packs.  */
9277
  SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
9278
  SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
9279
  TREE_TYPE (argpack) = argtypepack;
9280
  *spec_p = spec_parm;
9281
 
9282
  return argpack;
9283
}
9284
 
9285
/* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
9286
   NONTYPE_ARGUMENT_PACK.  */
9287
 
9288
static tree
9289
make_fnparm_pack (tree spec_parm)
9290
{
9291
  return extract_fnparm_pack (NULL_TREE, &spec_parm);
9292
}
9293
 
9294
/* Substitute ARGS into T, which is an pack expansion
9295
   (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
9296
   TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
9297
   (if only a partial substitution could be performed) or
9298
   ERROR_MARK_NODE if there was an error.  */
9299
tree
9300
tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
9301
                       tree in_decl)
9302
{
9303
  tree pattern;
9304
  tree pack, packs = NULL_TREE;
9305
  bool unsubstituted_packs = false;
9306
  bool real_packs = false;
9307
  int missing_level = 0;
9308
  int i, len = -1;
9309
  tree result;
9310
  htab_t saved_local_specializations = NULL;
9311
  bool need_local_specializations = false;
9312
  int levels;
9313
 
9314
  gcc_assert (PACK_EXPANSION_P (t));
9315
  pattern = PACK_EXPANSION_PATTERN (t);
9316
 
9317
  /* Add in any args remembered from an earlier partial instantiation.  */
9318
  args = add_to_template_args (PACK_EXPANSION_EXTRA_ARGS (t), args);
9319
 
9320
  levels = TMPL_ARGS_DEPTH (args);
9321
 
9322
  /* Determine the argument packs that will instantiate the parameter
9323
     packs used in the expansion expression. While we're at it,
9324
     compute the number of arguments to be expanded and make sure it
9325
     is consistent.  */
9326
  for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack;
9327
       pack = TREE_CHAIN (pack))
9328
    {
9329
      tree parm_pack = TREE_VALUE (pack);
9330
      tree arg_pack = NULL_TREE;
9331
      tree orig_arg = NULL_TREE;
9332
      int level = 0;
9333
 
9334
      if (TREE_CODE (parm_pack) == BASES)
9335
       {
9336
         if (BASES_DIRECT (parm_pack))
9337
           return calculate_direct_bases (tsubst_expr (BASES_TYPE (parm_pack),
9338
                                                        args, complain, in_decl, false));
9339
         else
9340
           return calculate_bases (tsubst_expr (BASES_TYPE (parm_pack),
9341
                                                 args, complain, in_decl, false));
9342
       }
9343
      if (TREE_CODE (parm_pack) == PARM_DECL)
9344
        {
9345
          if (PACK_EXPANSION_LOCAL_P (t))
9346
            arg_pack = retrieve_local_specialization (parm_pack);
9347
          else
9348
            {
9349
              /* We can't rely on local_specializations for a parameter
9350
                 name used later in a function declaration (such as in a
9351
                 late-specified return type).  Even if it exists, it might
9352
                 have the wrong value for a recursive call.  Just make a
9353
                 dummy decl, since it's only used for its type.  */
9354
              arg_pack = tsubst_decl (parm_pack, args, complain);
9355
              if (arg_pack && FUNCTION_PARAMETER_PACK_P (arg_pack))
9356
                /* Partial instantiation of the parm_pack, we can't build
9357
                   up an argument pack yet.  */
9358
                arg_pack = NULL_TREE;
9359
              else
9360
                arg_pack = make_fnparm_pack (arg_pack);
9361
              need_local_specializations = true;
9362
            }
9363
        }
9364
      else
9365
        {
9366
          int idx;
9367
          template_parm_level_and_index (parm_pack, &level, &idx);
9368
 
9369
          if (level <= levels)
9370
            arg_pack = TMPL_ARG (args, level, idx);
9371
        }
9372
 
9373
      orig_arg = arg_pack;
9374
      if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
9375
        arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
9376
 
9377
      if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
9378
        /* This can only happen if we forget to expand an argument
9379
           pack somewhere else. Just return an error, silently.  */
9380
        {
9381
          result = make_tree_vec (1);
9382
          TREE_VEC_ELT (result, 0) = error_mark_node;
9383
          return result;
9384
        }
9385
 
9386
      if (arg_from_parm_pack_p (arg_pack, parm_pack))
9387
        /* The argument pack that the parameter maps to is just an
9388
           expansion of the parameter itself, such as one would find
9389
           in the implicit typedef of a class inside the class itself.
9390
           Consider this parameter "unsubstituted", so that we will
9391
           maintain the outer pack expansion.  */
9392
        arg_pack = NULL_TREE;
9393
 
9394
      if (arg_pack)
9395
        {
9396
          int my_len =
9397
            TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
9398
 
9399
          /* Don't bother trying to do a partial substitution with
9400
             incomplete packs; we'll try again after deduction.  */
9401
          if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
9402
            return t;
9403
 
9404
          if (len < 0)
9405
            len = my_len;
9406
          else if (len != my_len)
9407
            {
9408
              if (!(complain & tf_error))
9409
                /* Fail quietly.  */;
9410
              else if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
9411
                error ("mismatched argument pack lengths while expanding "
9412
                       "%<%T%>",
9413
                       pattern);
9414
              else
9415
                error ("mismatched argument pack lengths while expanding "
9416
                       "%<%E%>",
9417
                       pattern);
9418
              return error_mark_node;
9419
            }
9420
 
9421
          if (TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
9422
              && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack),
9423
                                                 0)))
9424
            /* This isn't a real argument pack yet.  */;
9425
          else
9426
            real_packs = true;
9427
 
9428
          /* Keep track of the parameter packs and their corresponding
9429
             argument packs.  */
9430
          packs = tree_cons (parm_pack, arg_pack, packs);
9431
          TREE_TYPE (packs) = orig_arg;
9432
        }
9433
      else
9434
        {
9435
          /* We can't substitute for this parameter pack.  We use a flag as
9436
             well as the missing_level counter because function parameter
9437
             packs don't have a level.  */
9438
          unsubstituted_packs = true;
9439
          if (!missing_level || missing_level > level)
9440
            missing_level = level;
9441
        }
9442
    }
9443
 
9444
  /* We cannot expand this expansion expression, because we don't have
9445
     all of the argument packs we need.  */
9446
  if (unsubstituted_packs)
9447
    {
9448
      if (real_packs)
9449
        {
9450
          /* We got some full packs, but we can't substitute them in until we
9451
             have values for all the packs.  So remember these until then.  */
9452
          tree save_args;
9453
 
9454
          t = make_pack_expansion (pattern);
9455
 
9456
          /* The call to add_to_template_args above assumes no overlap
9457
             between saved args and new args, so prune away any fake
9458
             args, i.e. those that satisfied arg_from_parm_pack_p above.  */
9459
          if (missing_level && levels >= missing_level)
9460
            {
9461
              gcc_assert (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args)
9462
                          && missing_level > 1);
9463
              TREE_VEC_LENGTH (args) = missing_level - 1;
9464
              save_args = copy_node (args);
9465
              TREE_VEC_LENGTH (args) = levels;
9466
            }
9467
          else
9468
            save_args = args;
9469
 
9470
          PACK_EXPANSION_EXTRA_ARGS (t) = save_args;
9471
        }
9472
      else
9473
        {
9474
          /* There were no real arguments, we're just replacing a parameter
9475
             pack with another version of itself. Substitute into the
9476
             pattern and return a PACK_EXPANSION_*. The caller will need to
9477
             deal with that.  */
9478
          if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
9479
            t = tsubst_expr (pattern, args, complain, in_decl,
9480
                             /*integral_constant_expression_p=*/false);
9481
          else
9482
            t = tsubst (pattern, args, complain, in_decl);
9483
          t = make_pack_expansion (t);
9484
        }
9485
      return t;
9486
    }
9487
 
9488
  /* We could not find any argument packs that work.  */
9489
  if (len < 0)
9490
    return error_mark_node;
9491
 
9492
  if (need_local_specializations)
9493
    {
9494
      /* We're in a late-specified return type, so create our own local
9495
         specializations table; the current table is either NULL or (in the
9496
         case of recursive unification) might have bindings that we don't
9497
         want to use or alter.  */
9498
      saved_local_specializations = local_specializations;
9499
      local_specializations = htab_create (37,
9500
                                           hash_local_specialization,
9501
                                           eq_local_specializations,
9502
                                           NULL);
9503
    }
9504
 
9505
  /* For each argument in each argument pack, substitute into the
9506
     pattern.  */
9507
  result = make_tree_vec (len);
9508
  for (i = 0; i < len; ++i)
9509
    {
9510
      /* For parameter pack, change the substitution of the parameter
9511
         pack to the ith argument in its argument pack, then expand
9512
         the pattern.  */
9513
      for (pack = packs; pack; pack = TREE_CHAIN (pack))
9514
        {
9515
          tree parm = TREE_PURPOSE (pack);
9516
          tree arg;
9517
 
9518
          /* Select the Ith argument from the pack.  */
9519
          if (TREE_CODE (parm) == PARM_DECL)
9520
            {
9521
              if (i == 0)
9522
                {
9523
                  arg = make_node (ARGUMENT_PACK_SELECT);
9524
                  ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
9525
                  mark_used (parm);
9526
                  register_local_specialization (arg, parm);
9527
                }
9528
              else
9529
                arg = retrieve_local_specialization (parm);
9530
            }
9531
          else
9532
            {
9533
              int idx, level;
9534
              template_parm_level_and_index (parm, &level, &idx);
9535
 
9536
              if (i == 0)
9537
                {
9538
                  arg = make_node (ARGUMENT_PACK_SELECT);
9539
                  ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
9540
                  /* Update the corresponding argument.  */
9541
                  TMPL_ARG (args, level, idx) = arg;
9542
                }
9543
              else
9544
                /* Re-use the ARGUMENT_PACK_SELECT.  */
9545
                arg = TMPL_ARG (args, level, idx);
9546
            }
9547
          ARGUMENT_PACK_SELECT_INDEX (arg) = i;
9548
        }
9549
 
9550
      /* Substitute into the PATTERN with the altered arguments.  */
9551
      if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
9552
        TREE_VEC_ELT (result, i) =
9553
          tsubst_expr (pattern, args, complain, in_decl,
9554
                       /*integral_constant_expression_p=*/false);
9555
      else
9556
        TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
9557
 
9558
      if (TREE_VEC_ELT (result, i) == error_mark_node)
9559
        {
9560
          result = error_mark_node;
9561
          break;
9562
        }
9563
    }
9564
 
9565
  /* Update ARGS to restore the substitution from parameter packs to
9566
     their argument packs.  */
9567
  for (pack = packs; pack; pack = TREE_CHAIN (pack))
9568
    {
9569
      tree parm = TREE_PURPOSE (pack);
9570
 
9571
      if (TREE_CODE (parm) == PARM_DECL)
9572
        register_local_specialization (TREE_TYPE (pack), parm);
9573
      else
9574
        {
9575
          int idx, level;
9576
          template_parm_level_and_index (parm, &level, &idx);
9577
 
9578
          /* Update the corresponding argument.  */
9579
          if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
9580
            TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
9581
              TREE_TYPE (pack);
9582
          else
9583
            TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
9584
        }
9585
    }
9586
 
9587
  if (need_local_specializations)
9588
    {
9589
      htab_delete (local_specializations);
9590
      local_specializations = saved_local_specializations;
9591
    }
9592
 
9593
  return result;
9594
}
9595
 
9596
/* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
9597
   TMPL.  We do this using DECL_PARM_INDEX, which should work even with
9598
   parameter packs; all parms generated from a function parameter pack will
9599
   have the same DECL_PARM_INDEX.  */
9600
 
9601
tree
9602
get_pattern_parm (tree parm, tree tmpl)
9603
{
9604
  tree pattern = DECL_TEMPLATE_RESULT (tmpl);
9605
  tree patparm;
9606
 
9607
  if (DECL_ARTIFICIAL (parm))
9608
    {
9609
      for (patparm = DECL_ARGUMENTS (pattern);
9610
           patparm; patparm = DECL_CHAIN (patparm))
9611
        if (DECL_ARTIFICIAL (patparm)
9612
            && DECL_NAME (parm) == DECL_NAME (patparm))
9613
          break;
9614
    }
9615
  else
9616
    {
9617
      patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
9618
      patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
9619
      gcc_assert (DECL_PARM_INDEX (patparm)
9620
                  == DECL_PARM_INDEX (parm));
9621
    }
9622
 
9623
  return patparm;
9624
}
9625
 
9626
/* Substitute ARGS into the vector or list of template arguments T.  */
9627
 
9628
static tree
9629
tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9630
{
9631
  tree orig_t = t;
9632
  int len, need_new = 0, i, expanded_len_adjust = 0, out;
9633
  tree *elts;
9634
 
9635
  if (t == error_mark_node)
9636
    return error_mark_node;
9637
 
9638
  len = TREE_VEC_LENGTH (t);
9639
  elts = XALLOCAVEC (tree, len);
9640
 
9641
  for (i = 0; i < len; i++)
9642
    {
9643
      tree orig_arg = TREE_VEC_ELT (t, i);
9644
      tree new_arg;
9645
 
9646
      if (TREE_CODE (orig_arg) == TREE_VEC)
9647
        new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
9648
      else if (PACK_EXPANSION_P (orig_arg))
9649
        {
9650
          /* Substitute into an expansion expression.  */
9651
          new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
9652
 
9653
          if (TREE_CODE (new_arg) == TREE_VEC)
9654
            /* Add to the expanded length adjustment the number of
9655
               expanded arguments. We subtract one from this
9656
               measurement, because the argument pack expression
9657
               itself is already counted as 1 in
9658
               LEN. EXPANDED_LEN_ADJUST can actually be negative, if
9659
               the argument pack is empty.  */
9660
            expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
9661
        }
9662
      else if (ARGUMENT_PACK_P (orig_arg))
9663
        {
9664
          /* Substitute into each of the arguments.  */
9665
          new_arg = TYPE_P (orig_arg)
9666
            ? cxx_make_type (TREE_CODE (orig_arg))
9667
            : make_node (TREE_CODE (orig_arg));
9668
 
9669
          SET_ARGUMENT_PACK_ARGS (
9670
            new_arg,
9671
            tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
9672
                                  args, complain, in_decl));
9673
 
9674
          if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
9675
            new_arg = error_mark_node;
9676
 
9677
          if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
9678
            TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
9679
                                          complain, in_decl);
9680
            TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
9681
 
9682
            if (TREE_TYPE (new_arg) == error_mark_node)
9683
              new_arg = error_mark_node;
9684
          }
9685
        }
9686
      else
9687
        new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
9688
 
9689
      if (new_arg == error_mark_node)
9690
        return error_mark_node;
9691
 
9692
      elts[i] = new_arg;
9693
      if (new_arg != orig_arg)
9694
        need_new = 1;
9695
    }
9696
 
9697
  if (!need_new)
9698
    return t;
9699
 
9700
  /* Make space for the expanded arguments coming from template
9701
     argument packs.  */
9702
  t = make_tree_vec (len + expanded_len_adjust);
9703
  /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
9704
     arguments for a member template.
9705
     In that case each TREE_VEC in ORIG_T represents a level of template
9706
     arguments, and ORIG_T won't carry any non defaulted argument count.
9707
     It will rather be the nested TREE_VECs that will carry one.
9708
     In other words, ORIG_T carries a non defaulted argument count only
9709
     if it doesn't contain any nested TREE_VEC.  */
9710
  if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
9711
    {
9712
      int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
9713
      count += expanded_len_adjust;
9714
      SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
9715
    }
9716
  for (i = 0, out = 0; i < len; i++)
9717
    {
9718
      if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
9719
           || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
9720
          && TREE_CODE (elts[i]) == TREE_VEC)
9721
        {
9722
          int idx;
9723
 
9724
          /* Now expand the template argument pack "in place".  */
9725
          for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
9726
            TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
9727
        }
9728
      else
9729
        {
9730
          TREE_VEC_ELT (t, out) = elts[i];
9731
          out++;
9732
        }
9733
    }
9734
 
9735
  return t;
9736
}
9737
 
9738
/* Return the result of substituting ARGS into the template parameters
9739
   given by PARMS.  If there are m levels of ARGS and m + n levels of
9740
   PARMS, then the result will contain n levels of PARMS.  For
9741
   example, if PARMS is `template <class T> template <class U>
9742
   template <T*, U, class V>' and ARGS is {{int}, {double}} then the
9743
   result will be `template <int*, double, class V>'.  */
9744
 
9745
static tree
9746
tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
9747
{
9748
  tree r = NULL_TREE;
9749
  tree* new_parms;
9750
 
9751
  /* When substituting into a template, we must set
9752
     PROCESSING_TEMPLATE_DECL as the template parameters may be
9753
     dependent if they are based on one-another, and the dependency
9754
     predicates are short-circuit outside of templates.  */
9755
  ++processing_template_decl;
9756
 
9757
  for (new_parms = &r;
9758
       TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
9759
       new_parms = &(TREE_CHAIN (*new_parms)),
9760
         parms = TREE_CHAIN (parms))
9761
    {
9762
      tree new_vec =
9763
        make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
9764
      int i;
9765
 
9766
      for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
9767
        {
9768
          tree tuple;
9769
 
9770
          if (parms == error_mark_node)
9771
            continue;
9772
 
9773
          tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
9774
 
9775
          if (tuple == error_mark_node)
9776
            continue;
9777
 
9778
          TREE_VEC_ELT (new_vec, i) =
9779
            tsubst_template_parm (tuple, args, complain);
9780
        }
9781
 
9782
      *new_parms =
9783
        tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
9784
                             - TMPL_ARGS_DEPTH (args)),
9785
                   new_vec, NULL_TREE);
9786
    }
9787
 
9788
  --processing_template_decl;
9789
 
9790
  return r;
9791
}
9792
 
9793
/* Return the result of substituting ARGS into one template parameter
9794
   given by T. T Must be a TREE_LIST which TREE_VALUE is the template
9795
   parameter and which TREE_PURPOSE is the default argument of the
9796
   template parameter.  */
9797
 
9798
static tree
9799
tsubst_template_parm (tree t, tree args, tsubst_flags_t complain)
9800
{
9801
  tree default_value, parm_decl;
9802
 
9803
  if (args == NULL_TREE
9804
      || t == NULL_TREE
9805
      || t == error_mark_node)
9806
    return t;
9807
 
9808
  gcc_assert (TREE_CODE (t) == TREE_LIST);
9809
 
9810
  default_value = TREE_PURPOSE (t);
9811
  parm_decl = TREE_VALUE (t);
9812
 
9813
  parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
9814
  if (TREE_CODE (parm_decl) == PARM_DECL
9815
      && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
9816
    parm_decl = error_mark_node;
9817
  default_value = tsubst_template_arg (default_value, args,
9818
                                       complain, NULL_TREE);
9819
 
9820
  return build_tree_list (default_value, parm_decl);
9821
}
9822
 
9823
/* Substitute the ARGS into the indicated aggregate (or enumeration)
9824
   type T.  If T is not an aggregate or enumeration type, it is
9825
   handled as if by tsubst.  IN_DECL is as for tsubst.  If
9826
   ENTERING_SCOPE is nonzero, T is the context for a template which
9827
   we are presently tsubst'ing.  Return the substituted value.  */
9828
 
9829
static tree
9830
tsubst_aggr_type (tree t,
9831
                  tree args,
9832
                  tsubst_flags_t complain,
9833
                  tree in_decl,
9834
                  int entering_scope)
9835
{
9836
  if (t == NULL_TREE)
9837
    return NULL_TREE;
9838
 
9839
  switch (TREE_CODE (t))
9840
    {
9841
    case RECORD_TYPE:
9842
      if (TYPE_PTRMEMFUNC_P (t))
9843
        return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
9844
 
9845
      /* Else fall through.  */
9846
    case ENUMERAL_TYPE:
9847
    case UNION_TYPE:
9848
      if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
9849
        {
9850
          tree argvec;
9851
          tree context;
9852
          tree r;
9853
          int saved_unevaluated_operand;
9854
          int saved_inhibit_evaluation_warnings;
9855
 
9856
          /* In "sizeof(X<I>)" we need to evaluate "I".  */
9857
          saved_unevaluated_operand = cp_unevaluated_operand;
9858
          cp_unevaluated_operand = 0;
9859
          saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
9860
          c_inhibit_evaluation_warnings = 0;
9861
 
9862
          /* First, determine the context for the type we are looking
9863
             up.  */
9864
          context = TYPE_CONTEXT (t);
9865
          if (context && TYPE_P (context))
9866
            {
9867
              context = tsubst_aggr_type (context, args, complain,
9868
                                          in_decl, /*entering_scope=*/1);
9869
              /* If context is a nested class inside a class template,
9870
                 it may still need to be instantiated (c++/33959).  */
9871
              context = complete_type (context);
9872
            }
9873
 
9874
          /* Then, figure out what arguments are appropriate for the
9875
             type we are trying to find.  For example, given:
9876
 
9877
               template <class T> struct S;
9878
               template <class T, class U> void f(T, U) { S<U> su; }
9879
 
9880
             and supposing that we are instantiating f<int, double>,
9881
             then our ARGS will be {int, double}, but, when looking up
9882
             S we only want {double}.  */
9883
          argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
9884
                                         complain, in_decl);
9885
          if (argvec == error_mark_node)
9886
            r = error_mark_node;
9887
          else
9888
            {
9889
              r = lookup_template_class (t, argvec, in_decl, context,
9890
                                         entering_scope, complain);
9891
              r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
9892
            }
9893
 
9894
          cp_unevaluated_operand = saved_unevaluated_operand;
9895
          c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
9896
 
9897
          return r;
9898
        }
9899
      else
9900
        /* This is not a template type, so there's nothing to do.  */
9901
        return t;
9902
 
9903
    default:
9904
      return tsubst (t, args, complain, in_decl);
9905
    }
9906
}
9907
 
9908
/* Substitute into the default argument ARG (a default argument for
9909
   FN), which has the indicated TYPE.  */
9910
 
9911
tree
9912
tsubst_default_argument (tree fn, tree type, tree arg)
9913
{
9914
  tree saved_class_ptr = NULL_TREE;
9915
  tree saved_class_ref = NULL_TREE;
9916
 
9917
  /* This can happen in invalid code.  */
9918
  if (TREE_CODE (arg) == DEFAULT_ARG)
9919
    return arg;
9920
 
9921
  /* This default argument came from a template.  Instantiate the
9922
     default argument here, not in tsubst.  In the case of
9923
     something like:
9924
 
9925
       template <class T>
9926
       struct S {
9927
         static T t();
9928
         void f(T = t());
9929
       };
9930
 
9931
     we must be careful to do name lookup in the scope of S<T>,
9932
     rather than in the current class.  */
9933
  push_access_scope (fn);
9934
  /* The "this" pointer is not valid in a default argument.  */
9935
  if (cfun)
9936
    {
9937
      saved_class_ptr = current_class_ptr;
9938
      cp_function_chain->x_current_class_ptr = NULL_TREE;
9939
      saved_class_ref = current_class_ref;
9940
      cp_function_chain->x_current_class_ref = NULL_TREE;
9941
    }
9942
 
9943
  push_deferring_access_checks(dk_no_deferred);
9944
  /* The default argument expression may cause implicitly defined
9945
     member functions to be synthesized, which will result in garbage
9946
     collection.  We must treat this situation as if we were within
9947
     the body of function so as to avoid collecting live data on the
9948
     stack.  */
9949
  ++function_depth;
9950
  arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
9951
                     tf_warning_or_error, NULL_TREE,
9952
                     /*integral_constant_expression_p=*/false);
9953
  --function_depth;
9954
  pop_deferring_access_checks();
9955
 
9956
  /* Restore the "this" pointer.  */
9957
  if (cfun)
9958
    {
9959
      cp_function_chain->x_current_class_ptr = saved_class_ptr;
9960
      cp_function_chain->x_current_class_ref = saved_class_ref;
9961
    }
9962
 
9963
  /* Make sure the default argument is reasonable.  */
9964
  arg = check_default_argument (type, arg);
9965
 
9966
  pop_access_scope (fn);
9967
 
9968
  return arg;
9969
}
9970
 
9971
/* Substitute into all the default arguments for FN.  */
9972
 
9973
static void
9974
tsubst_default_arguments (tree fn)
9975
{
9976
  tree arg;
9977
  tree tmpl_args;
9978
 
9979
  tmpl_args = DECL_TI_ARGS (fn);
9980
 
9981
  /* If this function is not yet instantiated, we certainly don't need
9982
     its default arguments.  */
9983
  if (uses_template_parms (tmpl_args))
9984
    return;
9985
  /* Don't do this again for clones.  */
9986
  if (DECL_CLONED_FUNCTION_P (fn))
9987
    return;
9988
 
9989
  for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
9990
       arg;
9991
       arg = TREE_CHAIN (arg))
9992
    if (TREE_PURPOSE (arg))
9993
      TREE_PURPOSE (arg) = tsubst_default_argument (fn,
9994
                                                    TREE_VALUE (arg),
9995
                                                    TREE_PURPOSE (arg));
9996
}
9997
 
9998
/* Substitute the ARGS into the T, which is a _DECL.  Return the
9999
   result of the substitution.  Issue error and warning messages under
10000
   control of COMPLAIN.  */
10001
 
10002
static tree
10003
tsubst_decl (tree t, tree args, tsubst_flags_t complain)
10004
{
10005
#define RETURN(EXP) do { r = (EXP); goto out; } while(0)
10006
  location_t saved_loc;
10007
  tree r = NULL_TREE;
10008
  tree in_decl = t;
10009
  hashval_t hash = 0;
10010
 
10011
  /* Set the filename and linenumber to improve error-reporting.  */
10012
  saved_loc = input_location;
10013
  input_location = DECL_SOURCE_LOCATION (t);
10014
 
10015
  switch (TREE_CODE (t))
10016
    {
10017
    case TEMPLATE_DECL:
10018
      {
10019
        /* We can get here when processing a member function template,
10020
           member class template, or template template parameter.  */
10021
        tree decl = DECL_TEMPLATE_RESULT (t);
10022
        tree spec;
10023
        tree tmpl_args;
10024
        tree full_args;
10025
 
10026
        if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
10027
          {
10028
            /* Template template parameter is treated here.  */
10029
            tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10030
            if (new_type == error_mark_node)
10031
              RETURN (error_mark_node);
10032
 
10033
            r = copy_decl (t);
10034
            DECL_CHAIN (r) = NULL_TREE;
10035
            TREE_TYPE (r) = new_type;
10036
            DECL_TEMPLATE_RESULT (r)
10037
              = build_decl (DECL_SOURCE_LOCATION (decl),
10038
                            TYPE_DECL, DECL_NAME (decl), new_type);
10039
            DECL_TEMPLATE_PARMS (r)
10040
              = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10041
                                       complain);
10042
            TYPE_NAME (new_type) = r;
10043
            break;
10044
          }
10045
 
10046
        /* We might already have an instance of this template.
10047
           The ARGS are for the surrounding class type, so the
10048
           full args contain the tsubst'd args for the context,
10049
           plus the innermost args from the template decl.  */
10050
        tmpl_args = DECL_CLASS_TEMPLATE_P (t)
10051
          ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
10052
          : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
10053
        /* Because this is a template, the arguments will still be
10054
           dependent, even after substitution.  If
10055
           PROCESSING_TEMPLATE_DECL is not set, the dependency
10056
           predicates will short-circuit.  */
10057
        ++processing_template_decl;
10058
        full_args = tsubst_template_args (tmpl_args, args,
10059
                                          complain, in_decl);
10060
        --processing_template_decl;
10061
        if (full_args == error_mark_node)
10062
          RETURN (error_mark_node);
10063
 
10064
        /* If this is a default template template argument,
10065
           tsubst might not have changed anything.  */
10066
        if (full_args == tmpl_args)
10067
          RETURN (t);
10068
 
10069
        hash = hash_tmpl_and_args (t, full_args);
10070
        spec = retrieve_specialization (t, full_args, hash);
10071
        if (spec != NULL_TREE)
10072
          {
10073
            r = spec;
10074
            break;
10075
          }
10076
 
10077
        /* Make a new template decl.  It will be similar to the
10078
           original, but will record the current template arguments.
10079
           We also create a new function declaration, which is just
10080
           like the old one, but points to this new template, rather
10081
           than the old one.  */
10082
        r = copy_decl (t);
10083
        gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
10084
        DECL_CHAIN (r) = NULL_TREE;
10085
 
10086
        DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
10087
 
10088
        if (TREE_CODE (decl) == TYPE_DECL
10089
            && !TYPE_DECL_ALIAS_P (decl))
10090
          {
10091
            tree new_type;
10092
            ++processing_template_decl;
10093
            new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10094
            --processing_template_decl;
10095
            if (new_type == error_mark_node)
10096
              RETURN (error_mark_node);
10097
 
10098
            TREE_TYPE (r) = new_type;
10099
            CLASSTYPE_TI_TEMPLATE (new_type) = r;
10100
            DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
10101
            DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
10102
            DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
10103
          }
10104
        else
10105
          {
10106
            tree new_decl;
10107
            ++processing_template_decl;
10108
            new_decl = tsubst (decl, args, complain, in_decl);
10109
            --processing_template_decl;
10110
            if (new_decl == error_mark_node)
10111
              RETURN (error_mark_node);
10112
 
10113
            DECL_TEMPLATE_RESULT (r) = new_decl;
10114
            DECL_TI_TEMPLATE (new_decl) = r;
10115
            TREE_TYPE (r) = TREE_TYPE (new_decl);
10116
            DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
10117
            DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
10118
          }
10119
 
10120
        SET_DECL_IMPLICIT_INSTANTIATION (r);
10121
        DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
10122
        DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
10123
 
10124
        /* The template parameters for this new template are all the
10125
           template parameters for the old template, except the
10126
           outermost level of parameters.  */
10127
        DECL_TEMPLATE_PARMS (r)
10128
          = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10129
                                   complain);
10130
 
10131
        if (PRIMARY_TEMPLATE_P (t))
10132
          DECL_PRIMARY_TEMPLATE (r) = r;
10133
 
10134
        if (TREE_CODE (decl) != TYPE_DECL)
10135
          /* Record this non-type partial instantiation.  */
10136
          register_specialization (r, t,
10137
                                   DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
10138
                                   false, hash);
10139
      }
10140
      break;
10141
 
10142
    case FUNCTION_DECL:
10143
      {
10144
        tree ctx;
10145
        tree argvec = NULL_TREE;
10146
        tree *friends;
10147
        tree gen_tmpl;
10148
        tree type;
10149
        int member;
10150
        int args_depth;
10151
        int parms_depth;
10152
 
10153
        /* Nobody should be tsubst'ing into non-template functions.  */
10154
        gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
10155
 
10156
        if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
10157
          {
10158
            tree spec;
10159
            bool dependent_p;
10160
 
10161
            /* If T is not dependent, just return it.  We have to
10162
               increment PROCESSING_TEMPLATE_DECL because
10163
               value_dependent_expression_p assumes that nothing is
10164
               dependent when PROCESSING_TEMPLATE_DECL is zero.  */
10165
            ++processing_template_decl;
10166
            dependent_p = value_dependent_expression_p (t);
10167
            --processing_template_decl;
10168
            if (!dependent_p)
10169
              RETURN (t);
10170
 
10171
            /* Calculate the most general template of which R is a
10172
               specialization, and the complete set of arguments used to
10173
               specialize R.  */
10174
            gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
10175
            argvec = tsubst_template_args (DECL_TI_ARGS
10176
                                          (DECL_TEMPLATE_RESULT
10177
                                                 (DECL_TI_TEMPLATE (t))),
10178
                                           args, complain, in_decl);
10179
            if (argvec == error_mark_node)
10180
              RETURN (error_mark_node);
10181
 
10182
            /* Check to see if we already have this specialization.  */
10183
            hash = hash_tmpl_and_args (gen_tmpl, argvec);
10184
            spec = retrieve_specialization (gen_tmpl, argvec, hash);
10185
 
10186
            if (spec)
10187
              {
10188
                r = spec;
10189
                break;
10190
              }
10191
 
10192
            /* We can see more levels of arguments than parameters if
10193
               there was a specialization of a member template, like
10194
               this:
10195
 
10196
                 template <class T> struct S { template <class U> void f(); }
10197
                 template <> template <class U> void S<int>::f(U);
10198
 
10199
               Here, we'll be substituting into the specialization,
10200
               because that's where we can find the code we actually
10201
               want to generate, but we'll have enough arguments for
10202
               the most general template.
10203
 
10204
               We also deal with the peculiar case:
10205
 
10206
                 template <class T> struct S {
10207
                   template <class U> friend void f();
10208
                 };
10209
                 template <class U> void f() {}
10210
                 template S<int>;
10211
                 template void f<double>();
10212
 
10213
               Here, the ARGS for the instantiation of will be {int,
10214
               double}.  But, we only need as many ARGS as there are
10215
               levels of template parameters in CODE_PATTERN.  We are
10216
               careful not to get fooled into reducing the ARGS in
10217
               situations like:
10218
 
10219
                 template <class T> struct S { template <class U> void f(U); }
10220
                 template <class T> template <> void S<T>::f(int) {}
10221
 
10222
               which we can spot because the pattern will be a
10223
               specialization in this case.  */
10224
            args_depth = TMPL_ARGS_DEPTH (args);
10225
            parms_depth =
10226
              TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
10227
            if (args_depth > parms_depth
10228
                && !DECL_TEMPLATE_SPECIALIZATION (t))
10229
              args = get_innermost_template_args (args, parms_depth);
10230
          }
10231
        else
10232
          {
10233
            /* This special case arises when we have something like this:
10234
 
10235
                 template <class T> struct S {
10236
                   friend void f<int>(int, double);
10237
                 };
10238
 
10239
               Here, the DECL_TI_TEMPLATE for the friend declaration
10240
               will be an IDENTIFIER_NODE.  We are being called from
10241
               tsubst_friend_function, and we want only to create a
10242
               new decl (R) with appropriate types so that we can call
10243
               determine_specialization.  */
10244
            gen_tmpl = NULL_TREE;
10245
          }
10246
 
10247
        if (DECL_CLASS_SCOPE_P (t))
10248
          {
10249
            if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
10250
              member = 2;
10251
            else
10252
              member = 1;
10253
            ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
10254
                                    complain, t, /*entering_scope=*/1);
10255
          }
10256
        else
10257
          {
10258
            member = 0;
10259
            ctx = DECL_CONTEXT (t);
10260
          }
10261
        type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10262
        if (type == error_mark_node)
10263
          RETURN (error_mark_node);
10264
 
10265
        /* We do NOT check for matching decls pushed separately at this
10266
           point, as they may not represent instantiations of this
10267
           template, and in any case are considered separate under the
10268
           discrete model.  */
10269
        r = copy_decl (t);
10270
        DECL_USE_TEMPLATE (r) = 0;
10271
        TREE_TYPE (r) = type;
10272
        /* Clear out the mangled name and RTL for the instantiation.  */
10273
        SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10274
        SET_DECL_RTL (r, NULL);
10275
        /* Leave DECL_INITIAL set on deleted instantiations.  */
10276
        if (!DECL_DELETED_FN (r))
10277
          DECL_INITIAL (r) = NULL_TREE;
10278
        DECL_CONTEXT (r) = ctx;
10279
 
10280
        if (member && DECL_CONV_FN_P (r))
10281
          /* Type-conversion operator.  Reconstruct the name, in
10282
             case it's the name of one of the template's parameters.  */
10283
          DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
10284
 
10285
        DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
10286
                                     complain, t);
10287
        DECL_RESULT (r) = NULL_TREE;
10288
 
10289
        TREE_STATIC (r) = 0;
10290
        TREE_PUBLIC (r) = TREE_PUBLIC (t);
10291
        DECL_EXTERNAL (r) = 1;
10292
        /* If this is an instantiation of a function with internal
10293
           linkage, we already know what object file linkage will be
10294
           assigned to the instantiation.  */
10295
        DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
10296
        DECL_DEFER_OUTPUT (r) = 0;
10297
        DECL_CHAIN (r) = NULL_TREE;
10298
        DECL_PENDING_INLINE_INFO (r) = 0;
10299
        DECL_PENDING_INLINE_P (r) = 0;
10300
        DECL_SAVED_TREE (r) = NULL_TREE;
10301
        DECL_STRUCT_FUNCTION (r) = NULL;
10302
        TREE_USED (r) = 0;
10303
        /* We'll re-clone as appropriate in instantiate_template.  */
10304
        DECL_CLONED_FUNCTION (r) = NULL_TREE;
10305
 
10306
        /* If we aren't complaining now, return on error before we register
10307
           the specialization so that we'll complain eventually.  */
10308
        if ((complain & tf_error) == 0
10309
            && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10310
            && !grok_op_properties (r, /*complain=*/false))
10311
          RETURN (error_mark_node);
10312
 
10313
        /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
10314
           this in the special friend case mentioned above where
10315
           GEN_TMPL is NULL.  */
10316
        if (gen_tmpl)
10317
          {
10318
            DECL_TEMPLATE_INFO (r)
10319
              = build_template_info (gen_tmpl, argvec);
10320
            SET_DECL_IMPLICIT_INSTANTIATION (r);
10321
            register_specialization (r, gen_tmpl, argvec, false, hash);
10322
 
10323
            /* We're not supposed to instantiate default arguments
10324
               until they are called, for a template.  But, for a
10325
               declaration like:
10326
 
10327
                 template <class T> void f ()
10328
                 { extern void g(int i = T()); }
10329
 
10330
               we should do the substitution when the template is
10331
               instantiated.  We handle the member function case in
10332
               instantiate_class_template since the default arguments
10333
               might refer to other members of the class.  */
10334
            if (!member
10335
                && !PRIMARY_TEMPLATE_P (gen_tmpl)
10336
                && !uses_template_parms (argvec))
10337
              tsubst_default_arguments (r);
10338
          }
10339
        else
10340
          DECL_TEMPLATE_INFO (r) = NULL_TREE;
10341
 
10342
        /* Copy the list of befriending classes.  */
10343
        for (friends = &DECL_BEFRIENDING_CLASSES (r);
10344
             *friends;
10345
             friends = &TREE_CHAIN (*friends))
10346
          {
10347
            *friends = copy_node (*friends);
10348
            TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
10349
                                            args, complain,
10350
                                            in_decl);
10351
          }
10352
 
10353
        if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
10354
          {
10355
            maybe_retrofit_in_chrg (r);
10356
            if (DECL_CONSTRUCTOR_P (r))
10357
              grok_ctor_properties (ctx, r);
10358
            /* If this is an instantiation of a member template, clone it.
10359
               If it isn't, that'll be handled by
10360
               clone_constructors_and_destructors.  */
10361
            if (PRIMARY_TEMPLATE_P (gen_tmpl))
10362
              clone_function_decl (r, /*update_method_vec_p=*/0);
10363
          }
10364
        else if ((complain & tf_error) != 0
10365
                 && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10366
                 && !grok_op_properties (r, /*complain=*/true))
10367
          RETURN (error_mark_node);
10368
 
10369
        if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
10370
          SET_DECL_FRIEND_CONTEXT (r,
10371
                                   tsubst (DECL_FRIEND_CONTEXT (t),
10372
                                            args, complain, in_decl));
10373
 
10374
        /* Possibly limit visibility based on template args.  */
10375
        DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10376
        if (DECL_VISIBILITY_SPECIFIED (t))
10377
          {
10378
            DECL_VISIBILITY_SPECIFIED (r) = 0;
10379
            DECL_ATTRIBUTES (r)
10380
              = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10381
          }
10382
        determine_visibility (r);
10383
        if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
10384
            && !processing_template_decl)
10385
          defaulted_late_check (r);
10386
 
10387
        apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10388
                                        args, complain, in_decl);
10389
      }
10390
      break;
10391
 
10392
    case PARM_DECL:
10393
      {
10394
        tree type = NULL_TREE;
10395
        int i, len = 1;
10396
        tree expanded_types = NULL_TREE;
10397
        tree prev_r = NULL_TREE;
10398
        tree first_r = NULL_TREE;
10399
 
10400
        if (FUNCTION_PARAMETER_PACK_P (t))
10401
          {
10402
            /* If there is a local specialization that isn't a
10403
               parameter pack, it means that we're doing a "simple"
10404
               substitution from inside tsubst_pack_expansion. Just
10405
               return the local specialization (which will be a single
10406
               parm).  */
10407
            tree spec = retrieve_local_specialization (t);
10408
            if (spec
10409
                && TREE_CODE (spec) == PARM_DECL
10410
                && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
10411
              RETURN (spec);
10412
 
10413
            /* Expand the TYPE_PACK_EXPANSION that provides the types for
10414
               the parameters in this function parameter pack.  */
10415
            expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
10416
                                                    complain, in_decl);
10417
            if (TREE_CODE (expanded_types) == TREE_VEC)
10418
              {
10419
                len = TREE_VEC_LENGTH (expanded_types);
10420
 
10421
                /* Zero-length parameter packs are boring. Just substitute
10422
                   into the chain.  */
10423
                if (len == 0)
10424
                  RETURN (tsubst (TREE_CHAIN (t), args, complain,
10425
                                  TREE_CHAIN (t)));
10426
              }
10427
            else
10428
              {
10429
                /* All we did was update the type. Make a note of that.  */
10430
                type = expanded_types;
10431
                expanded_types = NULL_TREE;
10432
              }
10433
          }
10434
 
10435
        /* Loop through all of the parameter's we'll build. When T is
10436
           a function parameter pack, LEN is the number of expanded
10437
           types in EXPANDED_TYPES; otherwise, LEN is 1.  */
10438
        r = NULL_TREE;
10439
        for (i = 0; i < len; ++i)
10440
          {
10441
            prev_r = r;
10442
            r = copy_node (t);
10443
            if (DECL_TEMPLATE_PARM_P (t))
10444
              SET_DECL_TEMPLATE_PARM_P (r);
10445
 
10446
            if (expanded_types)
10447
              /* We're on the Ith parameter of the function parameter
10448
                 pack.  */
10449
              {
10450
                /* An argument of a function parameter pack is not a parameter
10451
                   pack.  */
10452
                FUNCTION_PARAMETER_PACK_P (r) = false;
10453
 
10454
                /* Get the Ith type.  */
10455
                type = TREE_VEC_ELT (expanded_types, i);
10456
 
10457
                if (DECL_NAME (r))
10458
                  /* Rename the parameter to include the index.  */
10459
                  DECL_NAME (r) =
10460
                    make_ith_pack_parameter_name (DECL_NAME (r), i);
10461
              }
10462
            else if (!type)
10463
              /* We're dealing with a normal parameter.  */
10464
              type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10465
 
10466
            type = type_decays_to (type);
10467
            TREE_TYPE (r) = type;
10468
            cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10469
 
10470
            if (DECL_INITIAL (r))
10471
              {
10472
                if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
10473
                  DECL_INITIAL (r) = TREE_TYPE (r);
10474
                else
10475
                  DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
10476
                                             complain, in_decl);
10477
              }
10478
 
10479
            DECL_CONTEXT (r) = NULL_TREE;
10480
 
10481
            if (!DECL_TEMPLATE_PARM_P (r))
10482
              DECL_ARG_TYPE (r) = type_passed_as (type);
10483
 
10484
            apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10485
                                            args, complain, in_decl);
10486
 
10487
            /* Keep track of the first new parameter we
10488
               generate. That's what will be returned to the
10489
               caller.  */
10490
            if (!first_r)
10491
              first_r = r;
10492
 
10493
            /* Build a proper chain of parameters when substituting
10494
               into a function parameter pack.  */
10495
            if (prev_r)
10496
              DECL_CHAIN (prev_r) = r;
10497
          }
10498
 
10499
        if (DECL_CHAIN (t))
10500
          DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
10501
                                   complain, DECL_CHAIN (t));
10502
 
10503
        /* FIRST_R contains the start of the chain we've built.  */
10504
        r = first_r;
10505
      }
10506
      break;
10507
 
10508
    case FIELD_DECL:
10509
      {
10510
        tree type;
10511
 
10512
        r = copy_decl (t);
10513
        type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10514
        if (type == error_mark_node)
10515
          RETURN (error_mark_node);
10516
        TREE_TYPE (r) = type;
10517
        cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10518
 
10519
        if (DECL_C_BIT_FIELD (r))
10520
          /* For bit-fields, DECL_INITIAL gives the number of bits.  For
10521
             non-bit-fields DECL_INITIAL is a non-static data member
10522
             initializer, which gets deferred instantiation.  */
10523
          DECL_INITIAL (r)
10524
            = tsubst_expr (DECL_INITIAL (t), args,
10525
                           complain, in_decl,
10526
                           /*integral_constant_expression_p=*/true);
10527
        else if (DECL_INITIAL (t))
10528
          {
10529
            /* Set up DECL_TEMPLATE_INFO so that we can get at the
10530
               NSDMI in perform_member_init.  Still set DECL_INITIAL
10531
               so that we know there is one.  */
10532
            DECL_INITIAL (r) = void_zero_node;
10533
            gcc_assert (DECL_LANG_SPECIFIC (r) == NULL);
10534
            retrofit_lang_decl (r);
10535
            DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
10536
          }
10537
        /* We don't have to set DECL_CONTEXT here; it is set by
10538
           finish_member_declaration.  */
10539
        DECL_CHAIN (r) = NULL_TREE;
10540
        if (VOID_TYPE_P (type))
10541
          error ("instantiation of %q+D as type %qT", r, type);
10542
 
10543
        apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10544
                                        args, complain, in_decl);
10545
      }
10546
      break;
10547
 
10548
    case USING_DECL:
10549
      /* We reach here only for member using decls.  */
10550
      if (DECL_DEPENDENT_P (t))
10551
        {
10552
          r = do_class_using_decl
10553
            (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
10554
             tsubst_copy (DECL_NAME (t), args, complain, in_decl));
10555
          if (!r)
10556
            r = error_mark_node;
10557
          else
10558
            {
10559
              TREE_PROTECTED (r) = TREE_PROTECTED (t);
10560
              TREE_PRIVATE (r) = TREE_PRIVATE (t);
10561
            }
10562
        }
10563
      else
10564
        {
10565
          r = copy_node (t);
10566
          DECL_CHAIN (r) = NULL_TREE;
10567
        }
10568
      break;
10569
 
10570
    case TYPE_DECL:
10571
    case VAR_DECL:
10572
      {
10573
        tree argvec = NULL_TREE;
10574
        tree gen_tmpl = NULL_TREE;
10575
        tree spec;
10576
        tree tmpl = NULL_TREE;
10577
        tree ctx;
10578
        tree type = NULL_TREE;
10579
        bool local_p;
10580
 
10581
        if (TREE_CODE (t) == TYPE_DECL
10582
            && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
10583
          {
10584
            /* If this is the canonical decl, we don't have to
10585
               mess with instantiations, and often we can't (for
10586
               typename, template type parms and such).  Note that
10587
               TYPE_NAME is not correct for the above test if
10588
               we've copied the type for a typedef.  */
10589
            type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10590
            if (type == error_mark_node)
10591
              RETURN (error_mark_node);
10592
            r = TYPE_NAME (type);
10593
            break;
10594
          }
10595
 
10596
        /* Check to see if we already have the specialization we
10597
           need.  */
10598
        spec = NULL_TREE;
10599
        if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
10600
          {
10601
            /* T is a static data member or namespace-scope entity.
10602
               We have to substitute into namespace-scope variables
10603
               (even though such entities are never templates) because
10604
               of cases like:
10605
 
10606
                 template <class T> void f() { extern T t; }
10607
 
10608
               where the entity referenced is not known until
10609
               instantiation time.  */
10610
            local_p = false;
10611
            ctx = DECL_CONTEXT (t);
10612
            if (DECL_CLASS_SCOPE_P (t))
10613
              {
10614
                ctx = tsubst_aggr_type (ctx, args,
10615
                                        complain,
10616
                                        in_decl, /*entering_scope=*/1);
10617
                /* If CTX is unchanged, then T is in fact the
10618
                   specialization we want.  That situation occurs when
10619
                   referencing a static data member within in its own
10620
                   class.  We can use pointer equality, rather than
10621
                   same_type_p, because DECL_CONTEXT is always
10622
                   canonical...  */
10623
                if (ctx == DECL_CONTEXT (t)
10624
                    && (TREE_CODE (t) != TYPE_DECL
10625
                        /* ... unless T is a member template; in which
10626
                           case our caller can be willing to create a
10627
                           specialization of that template represented
10628
                           by T.  */
10629
                        || !(DECL_TI_TEMPLATE (t)
10630
                             && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (t)))))
10631
                  spec = t;
10632
              }
10633
 
10634
            if (!spec)
10635
              {
10636
                tmpl = DECL_TI_TEMPLATE (t);
10637
                gen_tmpl = most_general_template (tmpl);
10638
                argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
10639
                hash = hash_tmpl_and_args (gen_tmpl, argvec);
10640
                spec = retrieve_specialization (gen_tmpl, argvec, hash);
10641
              }
10642
          }
10643
        else
10644
          {
10645
            /* A local variable.  */
10646
            local_p = true;
10647
            /* Subsequent calls to pushdecl will fill this in.  */
10648
            ctx = NULL_TREE;
10649
            spec = retrieve_local_specialization (t);
10650
          }
10651
        /* If we already have the specialization we need, there is
10652
           nothing more to do.  */
10653
        if (spec)
10654
          {
10655
            r = spec;
10656
            break;
10657
          }
10658
 
10659
        /* Create a new node for the specialization we need.  */
10660
        r = copy_decl (t);
10661
        if (type == NULL_TREE)
10662
          {
10663
            if (is_typedef_decl (t))
10664
              type = DECL_ORIGINAL_TYPE (t);
10665
            else
10666
              type = TREE_TYPE (t);
10667
            if (TREE_CODE (t) == VAR_DECL
10668
                && VAR_HAD_UNKNOWN_BOUND (t)
10669
                && type != error_mark_node)
10670
              type = strip_array_domain (type);
10671
            type = tsubst (type, args, complain, in_decl);
10672
          }
10673
        if (TREE_CODE (r) == VAR_DECL)
10674
          {
10675
            /* Even if the original location is out of scope, the
10676
               newly substituted one is not.  */
10677
            DECL_DEAD_FOR_LOCAL (r) = 0;
10678
            DECL_INITIALIZED_P (r) = 0;
10679
            DECL_TEMPLATE_INSTANTIATED (r) = 0;
10680
            if (type == error_mark_node)
10681
              RETURN (error_mark_node);
10682
            if (TREE_CODE (type) == FUNCTION_TYPE)
10683
              {
10684
                /* It may seem that this case cannot occur, since:
10685
 
10686
                     typedef void f();
10687
                     void g() { f x; }
10688
 
10689
                   declares a function, not a variable.  However:
10690
 
10691
                     typedef void f();
10692
                     template <typename T> void g() { T t; }
10693
                     template void g<f>();
10694
 
10695
                   is an attempt to declare a variable with function
10696
                   type.  */
10697
                error ("variable %qD has function type",
10698
                       /* R is not yet sufficiently initialized, so we
10699
                          just use its name.  */
10700
                       DECL_NAME (r));
10701
                RETURN (error_mark_node);
10702
              }
10703
            type = complete_type (type);
10704
            /* Wait until cp_finish_decl to set this again, to handle
10705
               circular dependency (template/instantiate6.C). */
10706
            DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) = 0;
10707
            type = check_var_type (DECL_NAME (r), type);
10708
 
10709
            if (DECL_HAS_VALUE_EXPR_P (t))
10710
              {
10711
                tree ve = DECL_VALUE_EXPR (t);
10712
                ve = tsubst_expr (ve, args, complain, in_decl,
10713
                                  /*constant_expression_p=*/false);
10714
                if (REFERENCE_REF_P (ve))
10715
                  {
10716
                    gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
10717
                    ve = TREE_OPERAND (ve, 0);
10718
                  }
10719
                SET_DECL_VALUE_EXPR (r, ve);
10720
              }
10721
          }
10722
        else if (DECL_SELF_REFERENCE_P (t))
10723
          SET_DECL_SELF_REFERENCE_P (r);
10724
        TREE_TYPE (r) = type;
10725
        cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10726
        DECL_CONTEXT (r) = ctx;
10727
        /* Clear out the mangled name and RTL for the instantiation.  */
10728
        SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10729
        if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10730
          SET_DECL_RTL (r, NULL);
10731
        /* The initializer must not be expanded until it is required;
10732
           see [temp.inst].  */
10733
        DECL_INITIAL (r) = NULL_TREE;
10734
        if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10735
          SET_DECL_RTL (r, NULL);
10736
        DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
10737
        if (TREE_CODE (r) == VAR_DECL)
10738
          {
10739
            /* Possibly limit visibility based on template args.  */
10740
            DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10741
            if (DECL_VISIBILITY_SPECIFIED (t))
10742
              {
10743
                DECL_VISIBILITY_SPECIFIED (r) = 0;
10744
                DECL_ATTRIBUTES (r)
10745
                  = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10746
              }
10747
            determine_visibility (r);
10748
          }
10749
 
10750
        if (!local_p)
10751
          {
10752
            /* A static data member declaration is always marked
10753
               external when it is declared in-class, even if an
10754
               initializer is present.  We mimic the non-template
10755
               processing here.  */
10756
            DECL_EXTERNAL (r) = 1;
10757
 
10758
            register_specialization (r, gen_tmpl, argvec, false, hash);
10759
            DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
10760
            SET_DECL_IMPLICIT_INSTANTIATION (r);
10761
          }
10762
        else if (cp_unevaluated_operand)
10763
          {
10764
            /* We're substituting this var in a decltype outside of its
10765
               scope, such as for a lambda return type.  Don't add it to
10766
               local_specializations, do perform auto deduction.  */
10767
            tree auto_node = type_uses_auto (type);
10768
            if (auto_node)
10769
              {
10770
                tree init
10771
                  = tsubst_expr (DECL_INITIAL (t), args, complain, in_decl,
10772
                                 /*constant_expression_p=*/false);
10773
                init = resolve_nondeduced_context (init);
10774
                TREE_TYPE (r) = type
10775
                  = do_auto_deduction (type, init, auto_node);
10776
              }
10777
          }
10778
        else
10779
          register_local_specialization (r, t);
10780
 
10781
        DECL_CHAIN (r) = NULL_TREE;
10782
 
10783
        apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
10784
                                        /*flags=*/0,
10785
                                        args, complain, in_decl);
10786
 
10787
        /* Preserve a typedef that names a type.  */
10788
        if (is_typedef_decl (r))
10789
          {
10790
            DECL_ORIGINAL_TYPE (r) = NULL_TREE;
10791
            set_underlying_type (r);
10792
          }
10793
 
10794
        layout_decl (r, 0);
10795
      }
10796
      break;
10797
 
10798
    default:
10799
      gcc_unreachable ();
10800
    }
10801
#undef RETURN
10802
 
10803
 out:
10804
  /* Restore the file and line information.  */
10805
  input_location = saved_loc;
10806
 
10807
  return r;
10808
}
10809
 
10810
/* Substitute into the ARG_TYPES of a function type.  */
10811
 
10812
static tree
10813
tsubst_arg_types (tree arg_types,
10814
                  tree args,
10815
                  tsubst_flags_t complain,
10816
                  tree in_decl)
10817
{
10818
  tree remaining_arg_types;
10819
  tree type = NULL_TREE;
10820
  int i = 1;
10821
  tree expanded_args = NULL_TREE;
10822
  tree default_arg;
10823
 
10824
  if (!arg_types || arg_types == void_list_node)
10825
    return arg_types;
10826
 
10827
  remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
10828
                                          args, complain, in_decl);
10829
  if (remaining_arg_types == error_mark_node)
10830
    return error_mark_node;
10831
 
10832
  if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
10833
    {
10834
      /* For a pack expansion, perform substitution on the
10835
         entire expression. Later on, we'll handle the arguments
10836
         one-by-one.  */
10837
      expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
10838
                                            args, complain, in_decl);
10839
 
10840
      if (TREE_CODE (expanded_args) == TREE_VEC)
10841
        /* So that we'll spin through the parameters, one by one.  */
10842
        i = TREE_VEC_LENGTH (expanded_args);
10843
      else
10844
        {
10845
          /* We only partially substituted into the parameter
10846
             pack. Our type is TYPE_PACK_EXPANSION.  */
10847
          type = expanded_args;
10848
          expanded_args = NULL_TREE;
10849
        }
10850
    }
10851
 
10852
  while (i > 0) {
10853
    --i;
10854
 
10855
    if (expanded_args)
10856
      type = TREE_VEC_ELT (expanded_args, i);
10857
    else if (!type)
10858
      type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
10859
 
10860
    if (type == error_mark_node)
10861
      return error_mark_node;
10862
    if (VOID_TYPE_P (type))
10863
      {
10864
        if (complain & tf_error)
10865
          {
10866
            error ("invalid parameter type %qT", type);
10867
            if (in_decl)
10868
              error ("in declaration %q+D", in_decl);
10869
          }
10870
        return error_mark_node;
10871
    }
10872
 
10873
    /* Do array-to-pointer, function-to-pointer conversion, and ignore
10874
       top-level qualifiers as required.  */
10875
    type = cv_unqualified (type_decays_to (type));
10876
 
10877
    /* We do not substitute into default arguments here.  The standard
10878
       mandates that they be instantiated only when needed, which is
10879
       done in build_over_call.  */
10880
    default_arg = TREE_PURPOSE (arg_types);
10881
 
10882
    if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
10883
      {
10884
        /* We've instantiated a template before its default arguments
10885
           have been parsed.  This can happen for a nested template
10886
           class, and is not an error unless we require the default
10887
           argument in a call of this function.  */
10888
        remaining_arg_types =
10889
          tree_cons (default_arg, type, remaining_arg_types);
10890
        VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg),
10891
                       remaining_arg_types);
10892
      }
10893
    else
10894
      remaining_arg_types =
10895
        hash_tree_cons (default_arg, type, remaining_arg_types);
10896
  }
10897
 
10898
  return remaining_arg_types;
10899
}
10900
 
10901
/* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
10902
   *not* handle the exception-specification for FNTYPE, because the
10903
   initial substitution of explicitly provided template parameters
10904
   during argument deduction forbids substitution into the
10905
   exception-specification:
10906
 
10907
     [temp.deduct]
10908
 
10909
     All references in the function type of the function template to  the
10910
     corresponding template parameters are replaced by the specified tem-
10911
     plate argument values.  If a substitution in a template parameter or
10912
     in  the function type of the function template results in an invalid
10913
     type, type deduction fails.  [Note: The equivalent  substitution  in
10914
     exception specifications is done only when the function is instanti-
10915
     ated, at which point a program is  ill-formed  if  the  substitution
10916
     results in an invalid type.]  */
10917
 
10918
static tree
10919
tsubst_function_type (tree t,
10920
                      tree args,
10921
                      tsubst_flags_t complain,
10922
                      tree in_decl)
10923
{
10924
  tree return_type;
10925
  tree arg_types;
10926
  tree fntype;
10927
 
10928
  /* The TYPE_CONTEXT is not used for function/method types.  */
10929
  gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
10930
 
10931
  /* Substitute the return type.  */
10932
  return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10933
  if (return_type == error_mark_node)
10934
    return error_mark_node;
10935
  /* The standard does not presently indicate that creation of a
10936
     function type with an invalid return type is a deduction failure.
10937
     However, that is clearly analogous to creating an array of "void"
10938
     or a reference to a reference.  This is core issue #486.  */
10939
  if (TREE_CODE (return_type) == ARRAY_TYPE
10940
      || TREE_CODE (return_type) == FUNCTION_TYPE)
10941
    {
10942
      if (complain & tf_error)
10943
        {
10944
          if (TREE_CODE (return_type) == ARRAY_TYPE)
10945
            error ("function returning an array");
10946
          else
10947
            error ("function returning a function");
10948
        }
10949
      return error_mark_node;
10950
    }
10951
 
10952
  /* Substitute the argument types.  */
10953
  arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
10954
                                complain, in_decl);
10955
  if (arg_types == error_mark_node)
10956
    return error_mark_node;
10957
 
10958
  /* Construct a new type node and return it.  */
10959
  if (TREE_CODE (t) == FUNCTION_TYPE)
10960
    {
10961
      fntype = build_function_type (return_type, arg_types);
10962
      fntype = apply_memfn_quals (fntype, type_memfn_quals (t));
10963
    }
10964
  else
10965
    {
10966
      tree r = TREE_TYPE (TREE_VALUE (arg_types));
10967
      if (! MAYBE_CLASS_TYPE_P (r))
10968
        {
10969
          /* [temp.deduct]
10970
 
10971
             Type deduction may fail for any of the following
10972
             reasons:
10973
 
10974
             -- Attempting to create "pointer to member of T" when T
10975
             is not a class type.  */
10976
          if (complain & tf_error)
10977
            error ("creating pointer to member function of non-class type %qT",
10978
                      r);
10979
          return error_mark_node;
10980
        }
10981
 
10982
      fntype = build_method_type_directly (r, return_type,
10983
                                           TREE_CHAIN (arg_types));
10984
    }
10985
  fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
10986
 
10987
  return fntype;
10988
}
10989
 
10990
/* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
10991
   ARGS into that specification, and return the substituted
10992
   specification.  If there is no specification, return NULL_TREE.  */
10993
 
10994
static tree
10995
tsubst_exception_specification (tree fntype,
10996
                                tree args,
10997
                                tsubst_flags_t complain,
10998
                                tree in_decl,
10999
                                bool defer_ok)
11000
{
11001
  tree specs;
11002
  tree new_specs;
11003
 
11004
  specs = TYPE_RAISES_EXCEPTIONS (fntype);
11005
  new_specs = NULL_TREE;
11006
  if (specs && TREE_PURPOSE (specs))
11007
    {
11008
      /* A noexcept-specifier.  */
11009
      tree expr = TREE_PURPOSE (specs);
11010
      if (expr == boolean_true_node || expr == boolean_false_node)
11011
        new_specs = expr;
11012
      else if (defer_ok)
11013
        {
11014
          /* Defer instantiation of noexcept-specifiers to avoid
11015
             excessive instantiations (c++/49107).  */
11016
          new_specs = make_node (DEFERRED_NOEXCEPT);
11017
          if (DEFERRED_NOEXCEPT_SPEC_P (specs))
11018
            {
11019
              /* We already partially instantiated this member template,
11020
                 so combine the new args with the old.  */
11021
              DEFERRED_NOEXCEPT_PATTERN (new_specs)
11022
                = DEFERRED_NOEXCEPT_PATTERN (expr);
11023
              DEFERRED_NOEXCEPT_ARGS (new_specs)
11024
                = add_to_template_args (DEFERRED_NOEXCEPT_ARGS (expr), args);
11025
            }
11026
          else
11027
            {
11028
              DEFERRED_NOEXCEPT_PATTERN (new_specs) = expr;
11029
              DEFERRED_NOEXCEPT_ARGS (new_specs) = args;
11030
            }
11031
        }
11032
      else
11033
        new_specs = tsubst_copy_and_build
11034
          (expr, args, complain, in_decl, /*function_p=*/false,
11035
           /*integral_constant_expression_p=*/true);
11036
      new_specs = build_noexcept_spec (new_specs, complain);
11037
    }
11038
  else if (specs)
11039
    {
11040
      if (! TREE_VALUE (specs))
11041
        new_specs = specs;
11042
      else
11043
        while (specs)
11044
          {
11045
            tree spec;
11046
            int i, len = 1;
11047
            tree expanded_specs = NULL_TREE;
11048
 
11049
            if (PACK_EXPANSION_P (TREE_VALUE (specs)))
11050
              {
11051
                /* Expand the pack expansion type.  */
11052
                expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
11053
                                                       args, complain,
11054
                                                       in_decl);
11055
 
11056
                if (expanded_specs == error_mark_node)
11057
                  return error_mark_node;
11058
                else if (TREE_CODE (expanded_specs) == TREE_VEC)
11059
                  len = TREE_VEC_LENGTH (expanded_specs);
11060
                else
11061
                  {
11062
                    /* We're substituting into a member template, so
11063
                       we got a TYPE_PACK_EXPANSION back.  Add that
11064
                       expansion and move on.  */
11065
                    gcc_assert (TREE_CODE (expanded_specs)
11066
                                == TYPE_PACK_EXPANSION);
11067
                    new_specs = add_exception_specifier (new_specs,
11068
                                                         expanded_specs,
11069
                                                         complain);
11070
                    specs = TREE_CHAIN (specs);
11071
                    continue;
11072
                  }
11073
              }
11074
 
11075
            for (i = 0; i < len; ++i)
11076
              {
11077
                if (expanded_specs)
11078
                  spec = TREE_VEC_ELT (expanded_specs, i);
11079
                else
11080
                  spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
11081
                if (spec == error_mark_node)
11082
                  return spec;
11083
                new_specs = add_exception_specifier (new_specs, spec,
11084
                                                     complain);
11085
              }
11086
 
11087
            specs = TREE_CHAIN (specs);
11088
          }
11089
    }
11090
  return new_specs;
11091
}
11092
 
11093
/* Take the tree structure T and replace template parameters used
11094
   therein with the argument vector ARGS.  IN_DECL is an associated
11095
   decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
11096
   Issue error and warning messages under control of COMPLAIN.  Note
11097
   that we must be relatively non-tolerant of extensions here, in
11098
   order to preserve conformance; if we allow substitutions that
11099
   should not be allowed, we may allow argument deductions that should
11100
   not succeed, and therefore report ambiguous overload situations
11101
   where there are none.  In theory, we could allow the substitution,
11102
   but indicate that it should have failed, and allow our caller to
11103
   make sure that the right thing happens, but we don't try to do this
11104
   yet.
11105
 
11106
   This function is used for dealing with types, decls and the like;
11107
   for expressions, use tsubst_expr or tsubst_copy.  */
11108
 
11109
tree
11110
tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11111
{
11112
  enum tree_code code;
11113
  tree type, r = NULL_TREE;
11114
 
11115
  if (t == NULL_TREE || t == error_mark_node
11116
      || t == integer_type_node
11117
      || t == void_type_node
11118
      || t == char_type_node
11119
      || t == unknown_type_node
11120
      || TREE_CODE (t) == NAMESPACE_DECL
11121
      || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
11122
    return t;
11123
 
11124
  if (DECL_P (t))
11125
    return tsubst_decl (t, args, complain);
11126
 
11127
  if (args == NULL_TREE)
11128
    return t;
11129
 
11130
  code = TREE_CODE (t);
11131
 
11132
  if (code == IDENTIFIER_NODE)
11133
    type = IDENTIFIER_TYPE_VALUE (t);
11134
  else
11135
    type = TREE_TYPE (t);
11136
 
11137
  gcc_assert (type != unknown_type_node);
11138
 
11139
  /* Reuse typedefs.  We need to do this to handle dependent attributes,
11140
     such as attribute aligned.  */
11141
  if (TYPE_P (t)
11142
      && typedef_variant_p (t))
11143
    {
11144
      tree decl = TYPE_NAME (t);
11145
 
11146
      if (TYPE_DECL_ALIAS_P (decl)
11147
          && DECL_LANG_SPECIFIC (decl)
11148
          && DECL_TEMPLATE_INFO (decl)
11149
          && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl)))
11150
        {
11151
          /* DECL represents an alias template and we want to
11152
             instantiate it.  Let's substitute our arguments for the
11153
             template parameters into the declaration and get the
11154
             resulting type.  */
11155
          r = tsubst (decl, args, complain, decl);
11156
        }
11157
      else if (DECL_CLASS_SCOPE_P (decl)
11158
               && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
11159
               && uses_template_parms (DECL_CONTEXT (decl)))
11160
        {
11161
          tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11162
          tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
11163
          r = retrieve_specialization (tmpl, gen_args, 0);
11164
        }
11165
      else if (DECL_FUNCTION_SCOPE_P (decl)
11166
               && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
11167
               && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
11168
        r = retrieve_local_specialization (decl);
11169
      else
11170
        /* The typedef is from a non-template context.  */
11171
        return t;
11172
 
11173
      if (r)
11174
        {
11175
          r = TREE_TYPE (r);
11176
          r = cp_build_qualified_type_real
11177
            (r, cp_type_quals (t) | cp_type_quals (r),
11178
             complain | tf_ignore_bad_quals);
11179
          return r;
11180
        }
11181
      else
11182
        /* We don't have an instantiation yet, so drop the typedef.  */
11183
        t = DECL_ORIGINAL_TYPE (decl);
11184
    }
11185
 
11186
  if (type
11187
      && code != TYPENAME_TYPE
11188
      && code != TEMPLATE_TYPE_PARM
11189
      && code != IDENTIFIER_NODE
11190
      && code != FUNCTION_TYPE
11191
      && code != METHOD_TYPE)
11192
    type = tsubst (type, args, complain, in_decl);
11193
  if (type == error_mark_node)
11194
    return error_mark_node;
11195
 
11196
  switch (code)
11197
    {
11198
    case RECORD_TYPE:
11199
    case UNION_TYPE:
11200
    case ENUMERAL_TYPE:
11201
      return tsubst_aggr_type (t, args, complain, in_decl,
11202
                               /*entering_scope=*/0);
11203
 
11204
    case ERROR_MARK:
11205
    case IDENTIFIER_NODE:
11206
    case VOID_TYPE:
11207
    case REAL_TYPE:
11208
    case COMPLEX_TYPE:
11209
    case VECTOR_TYPE:
11210
    case BOOLEAN_TYPE:
11211
    case NULLPTR_TYPE:
11212
    case LANG_TYPE:
11213
      return t;
11214
 
11215
    case INTEGER_TYPE:
11216
      if (t == integer_type_node)
11217
        return t;
11218
 
11219
      if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
11220
          && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
11221
        return t;
11222
 
11223
      {
11224
        tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
11225
 
11226
        max = tsubst_expr (omax, args, complain, in_decl,
11227
                           /*integral_constant_expression_p=*/false);
11228
 
11229
        /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
11230
           needed.  */
11231
        if (TREE_CODE (max) == NOP_EXPR
11232
            && TREE_SIDE_EFFECTS (omax)
11233
            && !TREE_TYPE (max))
11234
          TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
11235
 
11236
        /* If we're in a partial instantiation, preserve the magic NOP_EXPR
11237
           with TREE_SIDE_EFFECTS that indicates this is not an integral
11238
           constant expression.  */
11239
        if (processing_template_decl
11240
            && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
11241
          {
11242
            gcc_assert (TREE_CODE (max) == NOP_EXPR);
11243
            TREE_SIDE_EFFECTS (max) = 1;
11244
          }
11245
 
11246
        return compute_array_index_type (NULL_TREE, max, complain);
11247
      }
11248
 
11249
    case TEMPLATE_TYPE_PARM:
11250
    case TEMPLATE_TEMPLATE_PARM:
11251
    case BOUND_TEMPLATE_TEMPLATE_PARM:
11252
    case TEMPLATE_PARM_INDEX:
11253
      {
11254
        int idx;
11255
        int level;
11256
        int levels;
11257
        tree arg = NULL_TREE;
11258
 
11259
        r = NULL_TREE;
11260
 
11261
        gcc_assert (TREE_VEC_LENGTH (args) > 0);
11262
        template_parm_level_and_index (t, &level, &idx);
11263
 
11264
        levels = TMPL_ARGS_DEPTH (args);
11265
        if (level <= levels)
11266
          {
11267
            arg = TMPL_ARG (args, level, idx);
11268
 
11269
            if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
11270
              /* See through ARGUMENT_PACK_SELECT arguments. */
11271
              arg = ARGUMENT_PACK_SELECT_ARG (arg);
11272
          }
11273
 
11274
        if (arg == error_mark_node)
11275
          return error_mark_node;
11276
        else if (arg != NULL_TREE)
11277
          {
11278
            if (ARGUMENT_PACK_P (arg))
11279
              /* If ARG is an argument pack, we don't actually want to
11280
                 perform a substitution here, because substitutions
11281
                 for argument packs are only done
11282
                 element-by-element. We can get to this point when
11283
                 substituting the type of a non-type template
11284
                 parameter pack, when that type actually contains
11285
                 template parameter packs from an outer template, e.g.,
11286
 
11287
                 template<typename... Types> struct A {
11288
                   template<Types... Values> struct B { };
11289
                 };  */
11290
              return t;
11291
 
11292
            if (code == TEMPLATE_TYPE_PARM)
11293
              {
11294
                int quals;
11295
                gcc_assert (TYPE_P (arg));
11296
 
11297
                quals = cp_type_quals (arg) | cp_type_quals (t);
11298
 
11299
                return cp_build_qualified_type_real
11300
                  (arg, quals, complain | tf_ignore_bad_quals);
11301
              }
11302
            else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
11303
              {
11304
                /* We are processing a type constructed from a
11305
                   template template parameter.  */
11306
                tree argvec = tsubst (TYPE_TI_ARGS (t),
11307
                                      args, complain, in_decl);
11308
                if (argvec == error_mark_node)
11309
                  return error_mark_node;
11310
 
11311
                gcc_assert (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
11312
                            || TREE_CODE (arg) == TEMPLATE_DECL
11313
                            || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
11314
 
11315
                if (TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE)
11316
                  /* Consider this code:
11317
 
11318
                        template <template <class> class Template>
11319
                        struct Internal {
11320
                        template <class Arg> using Bind = Template<Arg>;
11321
                        };
11322
 
11323
                        template <template <class> class Template, class Arg>
11324
                        using Instantiate = Template<Arg>; //#0
11325
 
11326
                        template <template <class> class Template,
11327
                                  class Argument>
11328
                        using Bind =
11329
                          Instantiate<Internal<Template>::template Bind,
11330
                                      Argument>; //#1
11331
 
11332
                     When #1 is parsed, the
11333
                     BOUND_TEMPLATE_TEMPLATE_PARM representing the
11334
                     parameter `Template' in #0 matches the
11335
                     UNBOUND_CLASS_TEMPLATE representing the argument
11336
                     `Internal<Template>::template Bind'; We then want
11337
                     to assemble the type `Bind<Argument>' that can't
11338
                     be fully created right now, because
11339
                     `Internal<Template>' not being complete, the Bind
11340
                     template cannot be looked up in that context.  So
11341
                     we need to "store" `Bind<Argument>' for later
11342
                     when the context of Bind becomes complete.  Let's
11343
                     store that in a TYPENAME_TYPE.  */
11344
                  return make_typename_type (TYPE_CONTEXT (arg),
11345
                                             build_nt (TEMPLATE_ID_EXPR,
11346
                                                       TYPE_IDENTIFIER (arg),
11347
                                                       argvec),
11348
                                             typename_type,
11349
                                             complain);
11350
 
11351
                /* We can get a TEMPLATE_TEMPLATE_PARM here when we
11352
                   are resolving nested-types in the signature of a
11353
                   member function templates.  Otherwise ARG is a
11354
                   TEMPLATE_DECL and is the real template to be
11355
                   instantiated.  */
11356
                if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11357
                  arg = TYPE_NAME (arg);
11358
 
11359
                r = lookup_template_class (arg,
11360
                                           argvec, in_decl,
11361
                                           DECL_CONTEXT (arg),
11362
                                            /*entering_scope=*/0,
11363
                                           complain);
11364
                return cp_build_qualified_type_real
11365
                  (r, cp_type_quals (t), complain);
11366
              }
11367
            else
11368
              /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
11369
              return convert_from_reference (unshare_expr (arg));
11370
          }
11371
 
11372
        if (level == 1)
11373
          /* This can happen during the attempted tsubst'ing in
11374
             unify.  This means that we don't yet have any information
11375
             about the template parameter in question.  */
11376
          return t;
11377
 
11378
        /* If we get here, we must have been looking at a parm for a
11379
           more deeply nested template.  Make a new version of this
11380
           template parameter, but with a lower level.  */
11381
        switch (code)
11382
          {
11383
          case TEMPLATE_TYPE_PARM:
11384
          case TEMPLATE_TEMPLATE_PARM:
11385
          case BOUND_TEMPLATE_TEMPLATE_PARM:
11386
            if (cp_type_quals (t))
11387
              {
11388
                r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
11389
                r = cp_build_qualified_type_real
11390
                  (r, cp_type_quals (t),
11391
                   complain | (code == TEMPLATE_TYPE_PARM
11392
                               ? tf_ignore_bad_quals : 0));
11393
              }
11394
            else
11395
              {
11396
                r = copy_type (t);
11397
                TEMPLATE_TYPE_PARM_INDEX (r)
11398
                  = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
11399
                                                r, levels, args, complain);
11400
                TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
11401
                TYPE_MAIN_VARIANT (r) = r;
11402
                TYPE_POINTER_TO (r) = NULL_TREE;
11403
                TYPE_REFERENCE_TO (r) = NULL_TREE;
11404
 
11405
                if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
11406
                  /* We have reduced the level of the template
11407
                     template parameter, but not the levels of its
11408
                     template parameters, so canonical_type_parameter
11409
                     will not be able to find the canonical template
11410
                     template parameter for this level. Thus, we
11411
                     require structural equality checking to compare
11412
                     TEMPLATE_TEMPLATE_PARMs. */
11413
                  SET_TYPE_STRUCTURAL_EQUALITY (r);
11414
                else if (TYPE_STRUCTURAL_EQUALITY_P (t))
11415
                  SET_TYPE_STRUCTURAL_EQUALITY (r);
11416
                else
11417
                  TYPE_CANONICAL (r) = canonical_type_parameter (r);
11418
 
11419
                if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
11420
                  {
11421
                    tree argvec = tsubst (TYPE_TI_ARGS (t), args,
11422
                                          complain, in_decl);
11423
                    if (argvec == error_mark_node)
11424
                      return error_mark_node;
11425
 
11426
                    TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
11427
                      = build_template_info (TYPE_TI_TEMPLATE (t), argvec);
11428
                  }
11429
              }
11430
            break;
11431
 
11432
          case TEMPLATE_PARM_INDEX:
11433
            r = reduce_template_parm_level (t, type, levels, args, complain);
11434
            break;
11435
 
11436
          default:
11437
            gcc_unreachable ();
11438
          }
11439
 
11440
        return r;
11441
      }
11442
 
11443
    case TREE_LIST:
11444
      {
11445
        tree purpose, value, chain;
11446
 
11447
        if (t == void_list_node)
11448
          return t;
11449
 
11450
        purpose = TREE_PURPOSE (t);
11451
        if (purpose)
11452
          {
11453
            purpose = tsubst (purpose, args, complain, in_decl);
11454
            if (purpose == error_mark_node)
11455
              return error_mark_node;
11456
          }
11457
        value = TREE_VALUE (t);
11458
        if (value)
11459
          {
11460
            value = tsubst (value, args, complain, in_decl);
11461
            if (value == error_mark_node)
11462
              return error_mark_node;
11463
          }
11464
        chain = TREE_CHAIN (t);
11465
        if (chain && chain != void_type_node)
11466
          {
11467
            chain = tsubst (chain, args, complain, in_decl);
11468
            if (chain == error_mark_node)
11469
              return error_mark_node;
11470
          }
11471
        if (purpose == TREE_PURPOSE (t)
11472
            && value == TREE_VALUE (t)
11473
            && chain == TREE_CHAIN (t))
11474
          return t;
11475
        return hash_tree_cons (purpose, value, chain);
11476
      }
11477
 
11478
    case TREE_BINFO:
11479
      /* We should never be tsubsting a binfo.  */
11480
      gcc_unreachable ();
11481
 
11482
    case TREE_VEC:
11483
      /* A vector of template arguments.  */
11484
      gcc_assert (!type);
11485
      return tsubst_template_args (t, args, complain, in_decl);
11486
 
11487
    case POINTER_TYPE:
11488
    case REFERENCE_TYPE:
11489
      {
11490
        if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
11491
          return t;
11492
 
11493
        /* [temp.deduct]
11494
 
11495
           Type deduction may fail for any of the following
11496
           reasons:
11497
 
11498
           -- Attempting to create a pointer to reference type.
11499
           -- Attempting to create a reference to a reference type or
11500
              a reference to void.
11501
 
11502
          Core issue 106 says that creating a reference to a reference
11503
          during instantiation is no longer a cause for failure. We
11504
          only enforce this check in strict C++98 mode.  */
11505
        if ((TREE_CODE (type) == REFERENCE_TYPE
11506
             && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
11507
            || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
11508
          {
11509
            static location_t last_loc;
11510
 
11511
            /* We keep track of the last time we issued this error
11512
               message to avoid spewing a ton of messages during a
11513
               single bad template instantiation.  */
11514
            if (complain & tf_error
11515
                && last_loc != input_location)
11516
              {
11517
                if (TREE_CODE (type) == VOID_TYPE)
11518
                  error ("forming reference to void");
11519
               else if (code == POINTER_TYPE)
11520
                 error ("forming pointer to reference type %qT", type);
11521
               else
11522
                  error ("forming reference to reference type %qT", type);
11523
                last_loc = input_location;
11524
              }
11525
 
11526
            return error_mark_node;
11527
          }
11528
        else if (code == POINTER_TYPE)
11529
          {
11530
            r = build_pointer_type (type);
11531
            if (TREE_CODE (type) == METHOD_TYPE)
11532
              r = build_ptrmemfunc_type (r);
11533
          }
11534
        else if (TREE_CODE (type) == REFERENCE_TYPE)
11535
          /* In C++0x, during template argument substitution, when there is an
11536
             attempt to create a reference to a reference type, reference
11537
             collapsing is applied as described in [14.3.1/4 temp.arg.type]:
11538
 
11539
             "If a template-argument for a template-parameter T names a type
11540
             that is a reference to a type A, an attempt to create the type
11541
             'lvalue reference to cv T' creates the type 'lvalue reference to
11542
             A,' while an attempt to create the type type rvalue reference to
11543
             cv T' creates the type T"
11544
          */
11545
          r = cp_build_reference_type
11546
              (TREE_TYPE (type),
11547
               TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
11548
        else
11549
          r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
11550
        r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
11551
 
11552
        if (r != error_mark_node)
11553
          /* Will this ever be needed for TYPE_..._TO values?  */
11554
          layout_type (r);
11555
 
11556
        return r;
11557
      }
11558
    case OFFSET_TYPE:
11559
      {
11560
        r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
11561
        if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
11562
          {
11563
            /* [temp.deduct]
11564
 
11565
               Type deduction may fail for any of the following
11566
               reasons:
11567
 
11568
               -- Attempting to create "pointer to member of T" when T
11569
                  is not a class type.  */
11570
            if (complain & tf_error)
11571
              error ("creating pointer to member of non-class type %qT", r);
11572
            return error_mark_node;
11573
          }
11574
        if (TREE_CODE (type) == REFERENCE_TYPE)
11575
          {
11576
            if (complain & tf_error)
11577
              error ("creating pointer to member reference type %qT", type);
11578
            return error_mark_node;
11579
          }
11580
        if (TREE_CODE (type) == VOID_TYPE)
11581
          {
11582
            if (complain & tf_error)
11583
              error ("creating pointer to member of type void");
11584
            return error_mark_node;
11585
          }
11586
        gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11587
        if (TREE_CODE (type) == FUNCTION_TYPE)
11588
          {
11589
            /* The type of the implicit object parameter gets its
11590
               cv-qualifiers from the FUNCTION_TYPE. */
11591
            tree memptr;
11592
            tree method_type = build_memfn_type (type, r, type_memfn_quals (type));
11593
            memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
11594
            return cp_build_qualified_type_real (memptr, cp_type_quals (t),
11595
                                                 complain);
11596
          }
11597
        else
11598
          return cp_build_qualified_type_real (build_ptrmem_type (r, type),
11599
                                               cp_type_quals (t),
11600
                                               complain);
11601
      }
11602
    case FUNCTION_TYPE:
11603
    case METHOD_TYPE:
11604
      {
11605
        tree fntype;
11606
        tree specs;
11607
        fntype = tsubst_function_type (t, args, complain, in_decl);
11608
        if (fntype == error_mark_node)
11609
          return error_mark_node;
11610
 
11611
        /* Substitute the exception specification.  */
11612
        specs = tsubst_exception_specification (t, args, complain,
11613
                                                in_decl, /*defer_ok*/true);
11614
        if (specs == error_mark_node)
11615
          return error_mark_node;
11616
        if (specs)
11617
          fntype = build_exception_variant (fntype, specs);
11618
        return fntype;
11619
      }
11620
    case ARRAY_TYPE:
11621
      {
11622
        tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
11623
        if (domain == error_mark_node)
11624
          return error_mark_node;
11625
 
11626
        /* As an optimization, we avoid regenerating the array type if
11627
           it will obviously be the same as T.  */
11628
        if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
11629
          return t;
11630
 
11631
        /* These checks should match the ones in grokdeclarator.
11632
 
11633
           [temp.deduct]
11634
 
11635
           The deduction may fail for any of the following reasons:
11636
 
11637
           -- Attempting to create an array with an element type that
11638
              is void, a function type, or a reference type, or [DR337]
11639
              an abstract class type.  */
11640
        if (TREE_CODE (type) == VOID_TYPE
11641
            || TREE_CODE (type) == FUNCTION_TYPE
11642
            || TREE_CODE (type) == REFERENCE_TYPE)
11643
          {
11644
            if (complain & tf_error)
11645
              error ("creating array of %qT", type);
11646
            return error_mark_node;
11647
          }
11648
        if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
11649
          {
11650
            if (complain & tf_error)
11651
              error ("creating array of %qT, which is an abstract class type",
11652
                     type);
11653
            return error_mark_node;
11654
          }
11655
 
11656
        r = build_cplus_array_type (type, domain);
11657
 
11658
        if (TYPE_USER_ALIGN (t))
11659
          {
11660
            TYPE_ALIGN (r) = TYPE_ALIGN (t);
11661
            TYPE_USER_ALIGN (r) = 1;
11662
          }
11663
 
11664
        return r;
11665
      }
11666
 
11667
    case TYPENAME_TYPE:
11668
      {
11669
        tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
11670
                                     in_decl, /*entering_scope=*/1);
11671
        tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
11672
                              complain, in_decl);
11673
 
11674
        if (ctx == error_mark_node || f == error_mark_node)
11675
          return error_mark_node;
11676
 
11677
        if (!MAYBE_CLASS_TYPE_P (ctx))
11678
          {
11679
            if (complain & tf_error)
11680
              error ("%qT is not a class, struct, or union type", ctx);
11681
            return error_mark_node;
11682
          }
11683
        else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
11684
          {
11685
            /* Normally, make_typename_type does not require that the CTX
11686
               have complete type in order to allow things like:
11687
 
11688
                 template <class T> struct S { typename S<T>::X Y; };
11689
 
11690
               But, such constructs have already been resolved by this
11691
               point, so here CTX really should have complete type, unless
11692
               it's a partial instantiation.  */
11693
            ctx = complete_type (ctx);
11694
            if (!COMPLETE_TYPE_P (ctx))
11695
              {
11696
                if (complain & tf_error)
11697
                  cxx_incomplete_type_error (NULL_TREE, ctx);
11698
                return error_mark_node;
11699
              }
11700
          }
11701
 
11702
        f = make_typename_type (ctx, f, typename_type,
11703
                                (complain & tf_error) | tf_keep_type_decl);
11704
        if (f == error_mark_node)
11705
          return f;
11706
        if (TREE_CODE (f) == TYPE_DECL)
11707
          {
11708
            complain |= tf_ignore_bad_quals;
11709
            f = TREE_TYPE (f);
11710
          }
11711
 
11712
        if (TREE_CODE (f) != TYPENAME_TYPE)
11713
          {
11714
            if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
11715
              {
11716
                if (complain & tf_error)
11717
                  error ("%qT resolves to %qT, which is not an enumeration type",
11718
                         t, f);
11719
                else
11720
                  return error_mark_node;
11721
              }
11722
            else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
11723
              {
11724
                if (complain & tf_error)
11725
                  error ("%qT resolves to %qT, which is is not a class type",
11726
                         t, f);
11727
                else
11728
                  return error_mark_node;
11729
              }
11730
          }
11731
 
11732
        return cp_build_qualified_type_real
11733
          (f, cp_type_quals (f) | cp_type_quals (t), complain);
11734
      }
11735
 
11736
    case UNBOUND_CLASS_TEMPLATE:
11737
      {
11738
        tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
11739
                                     in_decl, /*entering_scope=*/1);
11740
        tree name = TYPE_IDENTIFIER (t);
11741
        tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
11742
 
11743
        if (ctx == error_mark_node || name == error_mark_node)
11744
          return error_mark_node;
11745
 
11746
        if (parm_list)
11747
          parm_list = tsubst_template_parms (parm_list, args, complain);
11748
        return make_unbound_class_template (ctx, name, parm_list, complain);
11749
      }
11750
 
11751
    case TYPEOF_TYPE:
11752
      {
11753
        tree type;
11754
 
11755
        ++cp_unevaluated_operand;
11756
        ++c_inhibit_evaluation_warnings;
11757
 
11758
        type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
11759
                            complain, in_decl,
11760
                            /*integral_constant_expression_p=*/false);
11761
 
11762
        --cp_unevaluated_operand;
11763
        --c_inhibit_evaluation_warnings;
11764
 
11765
        type = finish_typeof (type);
11766
        return cp_build_qualified_type_real (type,
11767
                                             cp_type_quals (t)
11768
                                             | cp_type_quals (type),
11769
                                             complain);
11770
      }
11771
 
11772
    case DECLTYPE_TYPE:
11773
      {
11774
        tree type;
11775
 
11776
        ++cp_unevaluated_operand;
11777
        ++c_inhibit_evaluation_warnings;
11778
 
11779
        type = tsubst_expr (DECLTYPE_TYPE_EXPR (t), args,
11780
                            complain, in_decl,
11781
                            /*integral_constant_expression_p=*/false);
11782
 
11783
        --cp_unevaluated_operand;
11784
        --c_inhibit_evaluation_warnings;
11785
 
11786
        if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
11787
          type = lambda_capture_field_type (type);
11788
        else if (DECLTYPE_FOR_LAMBDA_PROXY (t))
11789
          type = lambda_proxy_type (type);
11790
        else
11791
          type = finish_decltype_type
11792
            (type, DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t), complain);
11793
        return cp_build_qualified_type_real (type,
11794
                                             cp_type_quals (t)
11795
                                             | cp_type_quals (type),
11796
                                             complain);
11797
      }
11798
 
11799
    case UNDERLYING_TYPE:
11800
      {
11801
        tree type = tsubst (UNDERLYING_TYPE_TYPE (t), args,
11802
                            complain, in_decl);
11803
        return finish_underlying_type (type);
11804
      }
11805
 
11806
    case TYPE_ARGUMENT_PACK:
11807
    case NONTYPE_ARGUMENT_PACK:
11808
      {
11809
        tree r = TYPE_P (t) ? cxx_make_type (code) : make_node (code);
11810
        tree packed_out =
11811
          tsubst_template_args (ARGUMENT_PACK_ARGS (t),
11812
                                args,
11813
                                complain,
11814
                                in_decl);
11815
        SET_ARGUMENT_PACK_ARGS (r, packed_out);
11816
 
11817
        /* For template nontype argument packs, also substitute into
11818
           the type.  */
11819
        if (code == NONTYPE_ARGUMENT_PACK)
11820
          TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
11821
 
11822
        return r;
11823
      }
11824
      break;
11825
 
11826
    case INTEGER_CST:
11827
    case REAL_CST:
11828
    case STRING_CST:
11829
    case PLUS_EXPR:
11830
    case MINUS_EXPR:
11831
    case NEGATE_EXPR:
11832
    case NOP_EXPR:
11833
    case INDIRECT_REF:
11834
    case ADDR_EXPR:
11835
    case CALL_EXPR:
11836
    case ARRAY_REF:
11837
    case SCOPE_REF:
11838
      /* We should use one of the expression tsubsts for these codes.  */
11839
      gcc_unreachable ();
11840
 
11841
    default:
11842
      sorry ("use of %qs in template", tree_code_name [(int) code]);
11843
      return error_mark_node;
11844
    }
11845
}
11846
 
11847
/* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
11848
   type of the expression on the left-hand side of the "." or "->"
11849
   operator.  */
11850
 
11851
static tree
11852
tsubst_baselink (tree baselink, tree object_type,
11853
                 tree args, tsubst_flags_t complain, tree in_decl)
11854
{
11855
    tree name;
11856
    tree qualifying_scope;
11857
    tree fns;
11858
    tree optype;
11859
    tree template_args = 0;
11860
    bool template_id_p = false;
11861
 
11862
    /* A baselink indicates a function from a base class.  Both the
11863
       BASELINK_ACCESS_BINFO and the base class referenced may
11864
       indicate bases of the template class, rather than the
11865
       instantiated class.  In addition, lookups that were not
11866
       ambiguous before may be ambiguous now.  Therefore, we perform
11867
       the lookup again.  */
11868
    qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
11869
    qualifying_scope = tsubst (qualifying_scope, args,
11870
                               complain, in_decl);
11871
    fns = BASELINK_FUNCTIONS (baselink);
11872
    optype = tsubst (BASELINK_OPTYPE (baselink), args, complain, in_decl);
11873
    if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
11874
      {
11875
        template_id_p = true;
11876
        template_args = TREE_OPERAND (fns, 1);
11877
        fns = TREE_OPERAND (fns, 0);
11878
        if (template_args)
11879
          template_args = tsubst_template_args (template_args, args,
11880
                                                complain, in_decl);
11881
      }
11882
    name = DECL_NAME (get_first_fn (fns));
11883
    if (IDENTIFIER_TYPENAME_P (name))
11884
      name = mangle_conv_op_name_for_type (optype);
11885
    baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
11886
    if (!baselink)
11887
      return error_mark_node;
11888
 
11889
    /* If lookup found a single function, mark it as used at this
11890
       point.  (If it lookup found multiple functions the one selected
11891
       later by overload resolution will be marked as used at that
11892
       point.)  */
11893
    if (BASELINK_P (baselink))
11894
      fns = BASELINK_FUNCTIONS (baselink);
11895
    if (!template_id_p && !really_overloaded_fn (fns))
11896
      mark_used (OVL_CURRENT (fns));
11897
 
11898
    /* Add back the template arguments, if present.  */
11899
    if (BASELINK_P (baselink) && template_id_p)
11900
      BASELINK_FUNCTIONS (baselink)
11901
        = build_nt (TEMPLATE_ID_EXPR,
11902
                    BASELINK_FUNCTIONS (baselink),
11903
                    template_args);
11904
    /* Update the conversion operator type.  */
11905
    BASELINK_OPTYPE (baselink) = optype;
11906
 
11907
    if (!object_type)
11908
      object_type = current_class_type;
11909
    return adjust_result_of_qualified_name_lookup (baselink,
11910
                                                   qualifying_scope,
11911
                                                   object_type);
11912
}
11913
 
11914
/* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
11915
   true if the qualified-id will be a postfix-expression in-and-of
11916
   itself; false if more of the postfix-expression follows the
11917
   QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
11918
   of "&".  */
11919
 
11920
static tree
11921
tsubst_qualified_id (tree qualified_id, tree args,
11922
                     tsubst_flags_t complain, tree in_decl,
11923
                     bool done, bool address_p)
11924
{
11925
  tree expr;
11926
  tree scope;
11927
  tree name;
11928
  bool is_template;
11929
  tree template_args;
11930
 
11931
  gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
11932
 
11933
  /* Figure out what name to look up.  */
11934
  name = TREE_OPERAND (qualified_id, 1);
11935
  if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11936
    {
11937
      is_template = true;
11938
      template_args = TREE_OPERAND (name, 1);
11939
      if (template_args)
11940
        template_args = tsubst_template_args (template_args, args,
11941
                                              complain, in_decl);
11942
      name = TREE_OPERAND (name, 0);
11943
    }
11944
  else
11945
    {
11946
      is_template = false;
11947
      template_args = NULL_TREE;
11948
    }
11949
 
11950
  /* Substitute into the qualifying scope.  When there are no ARGS, we
11951
     are just trying to simplify a non-dependent expression.  In that
11952
     case the qualifying scope may be dependent, and, in any case,
11953
     substituting will not help.  */
11954
  scope = TREE_OPERAND (qualified_id, 0);
11955
  if (args)
11956
    {
11957
      scope = tsubst (scope, args, complain, in_decl);
11958
      expr = tsubst_copy (name, args, complain, in_decl);
11959
    }
11960
  else
11961
    expr = name;
11962
 
11963
  if (dependent_scope_p (scope))
11964
    {
11965
      if (is_template)
11966
        expr = build_min_nt (TEMPLATE_ID_EXPR, expr, template_args);
11967
      return build_qualified_name (NULL_TREE, scope, expr,
11968
                                   QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
11969
    }
11970
 
11971
  if (!BASELINK_P (name) && !DECL_P (expr))
11972
    {
11973
      if (TREE_CODE (expr) == BIT_NOT_EXPR)
11974
        {
11975
          /* A BIT_NOT_EXPR is used to represent a destructor.  */
11976
          if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
11977
            {
11978
              error ("qualifying type %qT does not match destructor name ~%qT",
11979
                     scope, TREE_OPERAND (expr, 0));
11980
              expr = error_mark_node;
11981
            }
11982
          else
11983
            expr = lookup_qualified_name (scope, complete_dtor_identifier,
11984
                                          /*is_type_p=*/0, false);
11985
        }
11986
      else
11987
        expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
11988
      if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
11989
                     ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
11990
        {
11991
          if (complain & tf_error)
11992
            {
11993
              error ("dependent-name %qE is parsed as a non-type, but "
11994
                     "instantiation yields a type", qualified_id);
11995
              inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
11996
            }
11997
          return error_mark_node;
11998
        }
11999
    }
12000
 
12001
  if (DECL_P (expr))
12002
    {
12003
      check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
12004
                                           scope);
12005
      /* Remember that there was a reference to this entity.  */
12006
      mark_used (expr);
12007
    }
12008
 
12009
  if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
12010
    {
12011
      if (complain & tf_error)
12012
        qualified_name_lookup_error (scope,
12013
                                     TREE_OPERAND (qualified_id, 1),
12014
                                     expr, input_location);
12015
      return error_mark_node;
12016
    }
12017
 
12018
  if (is_template)
12019
    expr = lookup_template_function (expr, template_args);
12020
 
12021
  if (expr == error_mark_node && complain & tf_error)
12022
    qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
12023
                                 expr, input_location);
12024
  else if (TYPE_P (scope))
12025
    {
12026
      expr = (adjust_result_of_qualified_name_lookup
12027
              (expr, scope, current_class_type));
12028
      expr = (finish_qualified_id_expr
12029
              (scope, expr, done, address_p && PTRMEM_OK_P (qualified_id),
12030
               QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
12031
               /*template_arg_p=*/false));
12032
    }
12033
 
12034
  /* Expressions do not generally have reference type.  */
12035
  if (TREE_CODE (expr) != SCOPE_REF
12036
      /* However, if we're about to form a pointer-to-member, we just
12037
         want the referenced member referenced.  */
12038
      && TREE_CODE (expr) != OFFSET_REF)
12039
    expr = convert_from_reference (expr);
12040
 
12041
  return expr;
12042
}
12043
 
12044
/* Like tsubst, but deals with expressions.  This function just replaces
12045
   template parms; to finish processing the resultant expression, use
12046
   tsubst_copy_and_build or tsubst_expr.  */
12047
 
12048
static tree
12049
tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
12050
{
12051
  enum tree_code code;
12052
  tree r;
12053
 
12054
  if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
12055
    return t;
12056
 
12057
  code = TREE_CODE (t);
12058
 
12059
  switch (code)
12060
    {
12061
    case PARM_DECL:
12062
      r = retrieve_local_specialization (t);
12063
 
12064
      if (r == NULL)
12065
        {
12066
          tree c;
12067
 
12068
          /* We get here for a use of 'this' in an NSDMI.  */
12069
          if (DECL_NAME (t) == this_identifier
12070
              && at_function_scope_p ()
12071
              && DECL_CONSTRUCTOR_P (current_function_decl))
12072
            return current_class_ptr;
12073
 
12074
          /* This can happen for a parameter name used later in a function
12075
             declaration (such as in a late-specified return type).  Just
12076
             make a dummy decl, since it's only used for its type.  */
12077
          gcc_assert (cp_unevaluated_operand != 0);
12078
          /* We copy T because want to tsubst the PARM_DECL only,
12079
             not the following PARM_DECLs that are chained to T.  */
12080
          c = copy_node (t);
12081
          r = tsubst_decl (c, args, complain);
12082
          /* Give it the template pattern as its context; its true context
12083
             hasn't been instantiated yet and this is good enough for
12084
             mangling.  */
12085
          DECL_CONTEXT (r) = DECL_CONTEXT (t);
12086
        }
12087
 
12088
      if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
12089
        r = ARGUMENT_PACK_SELECT_ARG (r);
12090
      mark_used (r);
12091
      return r;
12092
 
12093
    case CONST_DECL:
12094
      {
12095
        tree enum_type;
12096
        tree v;
12097
 
12098
        if (DECL_TEMPLATE_PARM_P (t))
12099
          return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
12100
        /* There is no need to substitute into namespace-scope
12101
           enumerators.  */
12102
        if (DECL_NAMESPACE_SCOPE_P (t))
12103
          return t;
12104
        /* If ARGS is NULL, then T is known to be non-dependent.  */
12105
        if (args == NULL_TREE)
12106
          return integral_constant_value (t);
12107
 
12108
        /* Unfortunately, we cannot just call lookup_name here.
12109
           Consider:
12110
 
12111
             template <int I> int f() {
12112
             enum E { a = I };
12113
             struct S { void g() { E e = a; } };
12114
             };
12115
 
12116
           When we instantiate f<7>::S::g(), say, lookup_name is not
12117
           clever enough to find f<7>::a.  */
12118
        enum_type
12119
          = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
12120
                              /*entering_scope=*/0);
12121
 
12122
        for (v = TYPE_VALUES (enum_type);
12123
             v != NULL_TREE;
12124
             v = TREE_CHAIN (v))
12125
          if (TREE_PURPOSE (v) == DECL_NAME (t))
12126
            return TREE_VALUE (v);
12127
 
12128
          /* We didn't find the name.  That should never happen; if
12129
             name-lookup found it during preliminary parsing, we
12130
             should find it again here during instantiation.  */
12131
        gcc_unreachable ();
12132
      }
12133
      return t;
12134
 
12135
    case FIELD_DECL:
12136
      if (DECL_CONTEXT (t))
12137
        {
12138
          tree ctx;
12139
 
12140
          ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
12141
                                  /*entering_scope=*/1);
12142
          if (ctx != DECL_CONTEXT (t))
12143
            {
12144
              tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
12145
              if (!r)
12146
                {
12147
                  if (complain & tf_error)
12148
                    error ("using invalid field %qD", t);
12149
                  return error_mark_node;
12150
                }
12151
              return r;
12152
            }
12153
        }
12154
 
12155
      return t;
12156
 
12157
    case VAR_DECL:
12158
    case FUNCTION_DECL:
12159
      if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
12160
          || local_variable_p (t))
12161
        t = tsubst (t, args, complain, in_decl);
12162
      mark_used (t);
12163
      return t;
12164
 
12165
    case NAMESPACE_DECL:
12166
      return t;
12167
 
12168
    case OVERLOAD:
12169
      /* An OVERLOAD will always be a non-dependent overload set; an
12170
         overload set from function scope will just be represented with an
12171
         IDENTIFIER_NODE, and from class scope with a BASELINK.  */
12172
      gcc_assert (!uses_template_parms (t));
12173
      return t;
12174
 
12175
    case BASELINK:
12176
      return tsubst_baselink (t, current_class_type, args, complain, in_decl);
12177
 
12178
    case TEMPLATE_DECL:
12179
      if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
12180
        return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
12181
                       args, complain, in_decl);
12182
      else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
12183
        return tsubst (t, args, complain, in_decl);
12184
      else if (DECL_CLASS_SCOPE_P (t)
12185
               && uses_template_parms (DECL_CONTEXT (t)))
12186
        {
12187
          /* Template template argument like the following example need
12188
             special treatment:
12189
 
12190
               template <template <class> class TT> struct C {};
12191
               template <class T> struct D {
12192
                 template <class U> struct E {};
12193
                 C<E> c;                                // #1
12194
               };
12195
               D<int> d;                                // #2
12196
 
12197
             We are processing the template argument `E' in #1 for
12198
             the template instantiation #2.  Originally, `E' is a
12199
             TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
12200
             have to substitute this with one having context `D<int>'.  */
12201
 
12202
          tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
12203
          return lookup_field (context, DECL_NAME(t), 0, false);
12204
        }
12205
      else
12206
        /* Ordinary template template argument.  */
12207
        return t;
12208
 
12209
    case CAST_EXPR:
12210
    case REINTERPRET_CAST_EXPR:
12211
    case CONST_CAST_EXPR:
12212
    case STATIC_CAST_EXPR:
12213
    case DYNAMIC_CAST_EXPR:
12214
    case IMPLICIT_CONV_EXPR:
12215
    case CONVERT_EXPR:
12216
    case NOP_EXPR:
12217
      return build1
12218
        (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12219
         tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
12220
 
12221
    case SIZEOF_EXPR:
12222
      if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
12223
        {
12224
 
12225
          tree expanded;
12226
          int len = 0;
12227
 
12228
          ++cp_unevaluated_operand;
12229
          ++c_inhibit_evaluation_warnings;
12230
          /* We only want to compute the number of arguments.  */
12231
          expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
12232
                                            complain, in_decl);
12233
          --cp_unevaluated_operand;
12234
          --c_inhibit_evaluation_warnings;
12235
 
12236
          if (TREE_CODE (expanded) == TREE_VEC)
12237
            len = TREE_VEC_LENGTH (expanded);
12238
 
12239
          if (expanded == error_mark_node)
12240
            return error_mark_node;
12241
          else if (PACK_EXPANSION_P (expanded)
12242
                   || (TREE_CODE (expanded) == TREE_VEC
12243
                       && len > 0
12244
                       && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
12245
            {
12246
              if (TREE_CODE (expanded) == TREE_VEC)
12247
                expanded = TREE_VEC_ELT (expanded, len - 1);
12248
 
12249
              if (TYPE_P (expanded))
12250
                return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR,
12251
                                                   complain & tf_error);
12252
              else
12253
                return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
12254
                                                   complain & tf_error);
12255
            }
12256
          else
12257
            return build_int_cst (size_type_node, len);
12258
        }
12259
      /* Fall through */
12260
 
12261
    case INDIRECT_REF:
12262
    case NEGATE_EXPR:
12263
    case TRUTH_NOT_EXPR:
12264
    case BIT_NOT_EXPR:
12265
    case ADDR_EXPR:
12266
    case UNARY_PLUS_EXPR:      /* Unary + */
12267
    case ALIGNOF_EXPR:
12268
    case AT_ENCODE_EXPR:
12269
    case ARROW_EXPR:
12270
    case THROW_EXPR:
12271
    case TYPEID_EXPR:
12272
    case REALPART_EXPR:
12273
    case IMAGPART_EXPR:
12274
      return build1
12275
        (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12276
         tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
12277
 
12278
    case COMPONENT_REF:
12279
      {
12280
        tree object;
12281
        tree name;
12282
 
12283
        object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
12284
        name = TREE_OPERAND (t, 1);
12285
        if (TREE_CODE (name) == BIT_NOT_EXPR)
12286
          {
12287
            name = tsubst_copy (TREE_OPERAND (name, 0), args,
12288
                                complain, in_decl);
12289
            name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
12290
          }
12291
        else if (TREE_CODE (name) == SCOPE_REF
12292
                 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
12293
          {
12294
            tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
12295
                                     complain, in_decl);
12296
            name = TREE_OPERAND (name, 1);
12297
            name = tsubst_copy (TREE_OPERAND (name, 0), args,
12298
                                complain, in_decl);
12299
            name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
12300
            name = build_qualified_name (/*type=*/NULL_TREE,
12301
                                         base, name,
12302
                                         /*template_p=*/false);
12303
          }
12304
        else if (BASELINK_P (name))
12305
          name = tsubst_baselink (name,
12306
                                  non_reference (TREE_TYPE (object)),
12307
                                  args, complain,
12308
                                  in_decl);
12309
        else
12310
          name = tsubst_copy (name, args, complain, in_decl);
12311
        return build_nt (COMPONENT_REF, object, name, NULL_TREE);
12312
      }
12313
 
12314
    case PLUS_EXPR:
12315
    case MINUS_EXPR:
12316
    case MULT_EXPR:
12317
    case TRUNC_DIV_EXPR:
12318
    case CEIL_DIV_EXPR:
12319
    case FLOOR_DIV_EXPR:
12320
    case ROUND_DIV_EXPR:
12321
    case EXACT_DIV_EXPR:
12322
    case BIT_AND_EXPR:
12323
    case BIT_IOR_EXPR:
12324
    case BIT_XOR_EXPR:
12325
    case TRUNC_MOD_EXPR:
12326
    case FLOOR_MOD_EXPR:
12327
    case TRUTH_ANDIF_EXPR:
12328
    case TRUTH_ORIF_EXPR:
12329
    case TRUTH_AND_EXPR:
12330
    case TRUTH_OR_EXPR:
12331
    case RSHIFT_EXPR:
12332
    case LSHIFT_EXPR:
12333
    case RROTATE_EXPR:
12334
    case LROTATE_EXPR:
12335
    case EQ_EXPR:
12336
    case NE_EXPR:
12337
    case MAX_EXPR:
12338
    case MIN_EXPR:
12339
    case LE_EXPR:
12340
    case GE_EXPR:
12341
    case LT_EXPR:
12342
    case GT_EXPR:
12343
    case COMPOUND_EXPR:
12344
    case DOTSTAR_EXPR:
12345
    case MEMBER_REF:
12346
    case PREDECREMENT_EXPR:
12347
    case PREINCREMENT_EXPR:
12348
    case POSTDECREMENT_EXPR:
12349
    case POSTINCREMENT_EXPR:
12350
      return build_nt
12351
        (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12352
         tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12353
 
12354
    case SCOPE_REF:
12355
      return build_qualified_name (/*type=*/NULL_TREE,
12356
                                   tsubst_copy (TREE_OPERAND (t, 0),
12357
                                                args, complain, in_decl),
12358
                                   tsubst_copy (TREE_OPERAND (t, 1),
12359
                                                args, complain, in_decl),
12360
                                   QUALIFIED_NAME_IS_TEMPLATE (t));
12361
 
12362
    case ARRAY_REF:
12363
      return build_nt
12364
        (ARRAY_REF,
12365
         tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12366
         tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12367
         NULL_TREE, NULL_TREE);
12368
 
12369
    case CALL_EXPR:
12370
      {
12371
        int n = VL_EXP_OPERAND_LENGTH (t);
12372
        tree result = build_vl_exp (CALL_EXPR, n);
12373
        int i;
12374
        for (i = 0; i < n; i++)
12375
          TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
12376
                                             complain, in_decl);
12377
        return result;
12378
      }
12379
 
12380
    case COND_EXPR:
12381
    case MODOP_EXPR:
12382
    case PSEUDO_DTOR_EXPR:
12383
      {
12384
        r = build_nt
12385
          (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12386
           tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12387
           tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
12388
        TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
12389
        return r;
12390
      }
12391
 
12392
    case NEW_EXPR:
12393
      {
12394
        r = build_nt
12395
        (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12396
         tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12397
         tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
12398
        NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
12399
        return r;
12400
      }
12401
 
12402
    case DELETE_EXPR:
12403
      {
12404
        r = build_nt
12405
        (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12406
         tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12407
        DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
12408
        DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
12409
        return r;
12410
      }
12411
 
12412
    case TEMPLATE_ID_EXPR:
12413
      {
12414
        /* Substituted template arguments */
12415
        tree fn = TREE_OPERAND (t, 0);
12416
        tree targs = TREE_OPERAND (t, 1);
12417
 
12418
        fn = tsubst_copy (fn, args, complain, in_decl);
12419
        if (targs)
12420
          targs = tsubst_template_args (targs, args, complain, in_decl);
12421
 
12422
        return lookup_template_function (fn, targs);
12423
      }
12424
 
12425
    case TREE_LIST:
12426
      {
12427
        tree purpose, value, chain;
12428
 
12429
        if (t == void_list_node)
12430
          return t;
12431
 
12432
        purpose = TREE_PURPOSE (t);
12433
        if (purpose)
12434
          purpose = tsubst_copy (purpose, args, complain, in_decl);
12435
        value = TREE_VALUE (t);
12436
        if (value)
12437
          value = tsubst_copy (value, args, complain, in_decl);
12438
        chain = TREE_CHAIN (t);
12439
        if (chain && chain != void_type_node)
12440
          chain = tsubst_copy (chain, args, complain, in_decl);
12441
        if (purpose == TREE_PURPOSE (t)
12442
            && value == TREE_VALUE (t)
12443
            && chain == TREE_CHAIN (t))
12444
          return t;
12445
        return tree_cons (purpose, value, chain);
12446
      }
12447
 
12448
    case RECORD_TYPE:
12449
    case UNION_TYPE:
12450
    case ENUMERAL_TYPE:
12451
    case INTEGER_TYPE:
12452
    case TEMPLATE_TYPE_PARM:
12453
    case TEMPLATE_TEMPLATE_PARM:
12454
    case BOUND_TEMPLATE_TEMPLATE_PARM:
12455
    case TEMPLATE_PARM_INDEX:
12456
    case POINTER_TYPE:
12457
    case REFERENCE_TYPE:
12458
    case OFFSET_TYPE:
12459
    case FUNCTION_TYPE:
12460
    case METHOD_TYPE:
12461
    case ARRAY_TYPE:
12462
    case TYPENAME_TYPE:
12463
    case UNBOUND_CLASS_TEMPLATE:
12464
    case TYPEOF_TYPE:
12465
    case DECLTYPE_TYPE:
12466
    case TYPE_DECL:
12467
      return tsubst (t, args, complain, in_decl);
12468
 
12469
    case IDENTIFIER_NODE:
12470
      if (IDENTIFIER_TYPENAME_P (t))
12471
        {
12472
          tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12473
          return mangle_conv_op_name_for_type (new_type);
12474
        }
12475
      else
12476
        return t;
12477
 
12478
    case CONSTRUCTOR:
12479
      /* This is handled by tsubst_copy_and_build.  */
12480
      gcc_unreachable ();
12481
 
12482
    case VA_ARG_EXPR:
12483
      return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
12484
                                          in_decl),
12485
                             tsubst (TREE_TYPE (t), args, complain, in_decl));
12486
 
12487
    case CLEANUP_POINT_EXPR:
12488
      /* We shouldn't have built any of these during initial template
12489
         generation.  Instead, they should be built during instantiation
12490
         in response to the saved STMT_IS_FULL_EXPR_P setting.  */
12491
      gcc_unreachable ();
12492
 
12493
    case OFFSET_REF:
12494
      r = build2
12495
        (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12496
         tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12497
         tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12498
      PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
12499
      mark_used (TREE_OPERAND (r, 1));
12500
      return r;
12501
 
12502
    case EXPR_PACK_EXPANSION:
12503
      error ("invalid use of pack expansion expression");
12504
      return error_mark_node;
12505
 
12506
    case NONTYPE_ARGUMENT_PACK:
12507
      error ("use %<...%> to expand argument pack");
12508
      return error_mark_node;
12509
 
12510
    case INTEGER_CST:
12511
    case REAL_CST:
12512
    case STRING_CST:
12513
    case COMPLEX_CST:
12514
      {
12515
        /* Instantiate any typedefs in the type.  */
12516
        tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12517
        r = fold_convert (type, t);
12518
        gcc_assert (TREE_CODE (r) == code);
12519
        return r;
12520
      }
12521
 
12522
    case PTRMEM_CST:
12523
      /* These can sometimes show up in a partial instantiation, but never
12524
         involve template parms.  */
12525
      gcc_assert (!uses_template_parms (t));
12526
      return t;
12527
 
12528
    default:
12529
      /* We shouldn't get here, but keep going if !ENABLE_CHECKING.  */
12530
      gcc_checking_assert (false);
12531
      return t;
12532
    }
12533
}
12534
 
12535
/* Like tsubst_copy, but specifically for OpenMP clauses.  */
12536
 
12537
static tree
12538
tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
12539
                    tree in_decl)
12540
{
12541
  tree new_clauses = NULL, nc, oc;
12542
 
12543
  for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
12544
    {
12545
      nc = copy_node (oc);
12546
      OMP_CLAUSE_CHAIN (nc) = new_clauses;
12547
      new_clauses = nc;
12548
 
12549
      switch (OMP_CLAUSE_CODE (nc))
12550
        {
12551
        case OMP_CLAUSE_LASTPRIVATE:
12552
          if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
12553
            {
12554
              OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
12555
              tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
12556
                           in_decl, /*integral_constant_expression_p=*/false);
12557
              OMP_CLAUSE_LASTPRIVATE_STMT (nc)
12558
                = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
12559
            }
12560
          /* FALLTHRU */
12561
        case OMP_CLAUSE_PRIVATE:
12562
        case OMP_CLAUSE_SHARED:
12563
        case OMP_CLAUSE_FIRSTPRIVATE:
12564
        case OMP_CLAUSE_REDUCTION:
12565
        case OMP_CLAUSE_COPYIN:
12566
        case OMP_CLAUSE_COPYPRIVATE:
12567
        case OMP_CLAUSE_IF:
12568
        case OMP_CLAUSE_NUM_THREADS:
12569
        case OMP_CLAUSE_SCHEDULE:
12570
        case OMP_CLAUSE_COLLAPSE:
12571
        case OMP_CLAUSE_FINAL:
12572
          OMP_CLAUSE_OPERAND (nc, 0)
12573
            = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
12574
                           in_decl, /*integral_constant_expression_p=*/false);
12575
          break;
12576
        case OMP_CLAUSE_NOWAIT:
12577
        case OMP_CLAUSE_ORDERED:
12578
        case OMP_CLAUSE_DEFAULT:
12579
        case OMP_CLAUSE_UNTIED:
12580
        case OMP_CLAUSE_MERGEABLE:
12581
          break;
12582
        default:
12583
          gcc_unreachable ();
12584
        }
12585
    }
12586
 
12587
  return finish_omp_clauses (nreverse (new_clauses));
12588
}
12589
 
12590
/* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
12591
 
12592
static tree
12593
tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
12594
                          tree in_decl)
12595
{
12596
#define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
12597
 
12598
  tree purpose, value, chain;
12599
 
12600
  if (t == NULL)
12601
    return t;
12602
 
12603
  if (TREE_CODE (t) != TREE_LIST)
12604
    return tsubst_copy_and_build (t, args, complain, in_decl,
12605
                                  /*function_p=*/false,
12606
                                  /*integral_constant_expression_p=*/false);
12607
 
12608
  if (t == void_list_node)
12609
    return t;
12610
 
12611
  purpose = TREE_PURPOSE (t);
12612
  if (purpose)
12613
    purpose = RECUR (purpose);
12614
  value = TREE_VALUE (t);
12615
  if (value)
12616
    {
12617
      if (TREE_CODE (value) != LABEL_DECL)
12618
        value = RECUR (value);
12619
      else
12620
        {
12621
          value = lookup_label (DECL_NAME (value));
12622
          gcc_assert (TREE_CODE (value) == LABEL_DECL);
12623
          TREE_USED (value) = 1;
12624
        }
12625
    }
12626
  chain = TREE_CHAIN (t);
12627
  if (chain && chain != void_type_node)
12628
    chain = RECUR (chain);
12629
  return tree_cons (purpose, value, chain);
12630
#undef RECUR
12631
}
12632
 
12633
/* Substitute one OMP_FOR iterator.  */
12634
 
12635
static void
12636
tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
12637
                         tree condv, tree incrv, tree *clauses,
12638
                         tree args, tsubst_flags_t complain, tree in_decl,
12639
                         bool integral_constant_expression_p)
12640
{
12641
#define RECUR(NODE)                             \
12642
  tsubst_expr ((NODE), args, complain, in_decl, \
12643
               integral_constant_expression_p)
12644
  tree decl, init, cond, incr, auto_node;
12645
 
12646
  init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
12647
  gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
12648
  decl = RECUR (TREE_OPERAND (init, 0));
12649
  init = TREE_OPERAND (init, 1);
12650
  auto_node = type_uses_auto (TREE_TYPE (decl));
12651
  if (auto_node && init)
12652
    {
12653
      tree init_expr = init;
12654
      if (TREE_CODE (init_expr) == DECL_EXPR)
12655
        init_expr = DECL_INITIAL (DECL_EXPR_DECL (init_expr));
12656
      init_expr = RECUR (init_expr);
12657
      TREE_TYPE (decl)
12658
        = do_auto_deduction (TREE_TYPE (decl), init_expr, auto_node);
12659
    }
12660
  gcc_assert (!type_dependent_expression_p (decl));
12661
 
12662
  if (!CLASS_TYPE_P (TREE_TYPE (decl)))
12663
    {
12664
      cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
12665
      incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
12666
      if (TREE_CODE (incr) == MODIFY_EXPR)
12667
        incr = build_x_modify_expr (RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
12668
                                    RECUR (TREE_OPERAND (incr, 1)),
12669
                                    complain);
12670
      else
12671
        incr = RECUR (incr);
12672
      TREE_VEC_ELT (declv, i) = decl;
12673
      TREE_VEC_ELT (initv, i) = init;
12674
      TREE_VEC_ELT (condv, i) = cond;
12675
      TREE_VEC_ELT (incrv, i) = incr;
12676
      return;
12677
    }
12678
 
12679
  if (init && TREE_CODE (init) != DECL_EXPR)
12680
    {
12681
      tree c;
12682
      for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
12683
        {
12684
          if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
12685
               || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
12686
              && OMP_CLAUSE_DECL (c) == decl)
12687
            break;
12688
          else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
12689
                   && OMP_CLAUSE_DECL (c) == decl)
12690
            error ("iteration variable %qD should not be firstprivate", decl);
12691
          else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
12692
                   && OMP_CLAUSE_DECL (c) == decl)
12693
            error ("iteration variable %qD should not be reduction", decl);
12694
        }
12695
      if (c == NULL)
12696
        {
12697
          c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
12698
          OMP_CLAUSE_DECL (c) = decl;
12699
          c = finish_omp_clauses (c);
12700
          if (c)
12701
            {
12702
              OMP_CLAUSE_CHAIN (c) = *clauses;
12703
              *clauses = c;
12704
            }
12705
        }
12706
    }
12707
  cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
12708
  if (COMPARISON_CLASS_P (cond))
12709
    cond = build2 (TREE_CODE (cond), boolean_type_node,
12710
                   RECUR (TREE_OPERAND (cond, 0)),
12711
                   RECUR (TREE_OPERAND (cond, 1)));
12712
  else
12713
    cond = RECUR (cond);
12714
  incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
12715
  switch (TREE_CODE (incr))
12716
    {
12717
    case PREINCREMENT_EXPR:
12718
    case PREDECREMENT_EXPR:
12719
    case POSTINCREMENT_EXPR:
12720
    case POSTDECREMENT_EXPR:
12721
      incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
12722
                     RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
12723
      break;
12724
    case MODIFY_EXPR:
12725
      if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
12726
          || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
12727
        {
12728
          tree rhs = TREE_OPERAND (incr, 1);
12729
          incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
12730
                         RECUR (TREE_OPERAND (incr, 0)),
12731
                         build2 (TREE_CODE (rhs), TREE_TYPE (decl),
12732
                                 RECUR (TREE_OPERAND (rhs, 0)),
12733
                                 RECUR (TREE_OPERAND (rhs, 1))));
12734
        }
12735
      else
12736
        incr = RECUR (incr);
12737
      break;
12738
    case MODOP_EXPR:
12739
      if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
12740
          || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
12741
        {
12742
          tree lhs = RECUR (TREE_OPERAND (incr, 0));
12743
          incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
12744
                         build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
12745
                                 TREE_TYPE (decl), lhs,
12746
                                 RECUR (TREE_OPERAND (incr, 2))));
12747
        }
12748
      else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
12749
               && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
12750
                   || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
12751
        {
12752
          tree rhs = TREE_OPERAND (incr, 2);
12753
          incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
12754
                         RECUR (TREE_OPERAND (incr, 0)),
12755
                         build2 (TREE_CODE (rhs), TREE_TYPE (decl),
12756
                                 RECUR (TREE_OPERAND (rhs, 0)),
12757
                                 RECUR (TREE_OPERAND (rhs, 1))));
12758
        }
12759
      else
12760
        incr = RECUR (incr);
12761
      break;
12762
    default:
12763
      incr = RECUR (incr);
12764
      break;
12765
    }
12766
 
12767
  TREE_VEC_ELT (declv, i) = decl;
12768
  TREE_VEC_ELT (initv, i) = init;
12769
  TREE_VEC_ELT (condv, i) = cond;
12770
  TREE_VEC_ELT (incrv, i) = incr;
12771
#undef RECUR
12772
}
12773
 
12774
/* Like tsubst_copy for expressions, etc. but also does semantic
12775
   processing.  */
12776
 
12777
static tree
12778
tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
12779
             bool integral_constant_expression_p)
12780
{
12781
#define RECUR(NODE)                             \
12782
  tsubst_expr ((NODE), args, complain, in_decl, \
12783
               integral_constant_expression_p)
12784
 
12785
  tree stmt, tmp;
12786
 
12787
  if (t == NULL_TREE || t == error_mark_node)
12788
    return t;
12789
 
12790
  if (EXPR_HAS_LOCATION (t))
12791
    input_location = EXPR_LOCATION (t);
12792
  if (STATEMENT_CODE_P (TREE_CODE (t)))
12793
    current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
12794
 
12795
  switch (TREE_CODE (t))
12796
    {
12797
    case STATEMENT_LIST:
12798
      {
12799
        tree_stmt_iterator i;
12800
        for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
12801
          RECUR (tsi_stmt (i));
12802
        break;
12803
      }
12804
 
12805
    case CTOR_INITIALIZER:
12806
      finish_mem_initializers (tsubst_initializer_list
12807
                               (TREE_OPERAND (t, 0), args));
12808
      break;
12809
 
12810
    case RETURN_EXPR:
12811
      finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
12812
      break;
12813
 
12814
    case EXPR_STMT:
12815
      tmp = RECUR (EXPR_STMT_EXPR (t));
12816
      if (EXPR_STMT_STMT_EXPR_RESULT (t))
12817
        finish_stmt_expr_expr (tmp, cur_stmt_expr);
12818
      else
12819
        finish_expr_stmt (tmp);
12820
      break;
12821
 
12822
    case USING_STMT:
12823
      do_using_directive (USING_STMT_NAMESPACE (t));
12824
      break;
12825
 
12826
    case DECL_EXPR:
12827
      {
12828
        tree decl, pattern_decl;
12829
        tree init;
12830
 
12831
        pattern_decl = decl = DECL_EXPR_DECL (t);
12832
        if (TREE_CODE (decl) == LABEL_DECL)
12833
          finish_label_decl (DECL_NAME (decl));
12834
        else if (TREE_CODE (decl) == USING_DECL)
12835
          {
12836
            tree scope = USING_DECL_SCOPE (decl);
12837
            tree name = DECL_NAME (decl);
12838
            tree decl;
12839
 
12840
            scope = tsubst (scope, args, complain, in_decl);
12841
            decl = lookup_qualified_name (scope, name,
12842
                                          /*is_type_p=*/false,
12843
                                          /*complain=*/false);
12844
            if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
12845
              qualified_name_lookup_error (scope, name, decl, input_location);
12846
            else
12847
              do_local_using_decl (decl, scope, name);
12848
          }
12849
        else
12850
          {
12851
            init = DECL_INITIAL (decl);
12852
            decl = tsubst (decl, args, complain, in_decl);
12853
            if (decl != error_mark_node)
12854
              {
12855
                /* By marking the declaration as instantiated, we avoid
12856
                   trying to instantiate it.  Since instantiate_decl can't
12857
                   handle local variables, and since we've already done
12858
                   all that needs to be done, that's the right thing to
12859
                   do.  */
12860
                if (TREE_CODE (decl) == VAR_DECL)
12861
                  DECL_TEMPLATE_INSTANTIATED (decl) = 1;
12862
                if (TREE_CODE (decl) == VAR_DECL
12863
                    && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
12864
                  /* Anonymous aggregates are a special case.  */
12865
                  finish_anon_union (decl);
12866
                else if (is_capture_proxy (DECL_EXPR_DECL (t)))
12867
                  {
12868
                    DECL_CONTEXT (decl) = current_function_decl;
12869
                    insert_capture_proxy (decl);
12870
                  }
12871
                else
12872
                  {
12873
                    int const_init = false;
12874
                    maybe_push_decl (decl);
12875
                    if (TREE_CODE (decl) == VAR_DECL
12876
                        && DECL_PRETTY_FUNCTION_P (decl))
12877
                      {
12878
                        /* For __PRETTY_FUNCTION__ we have to adjust the
12879
                           initializer.  */
12880
                        const char *const name
12881
                          = cxx_printable_name (current_function_decl, 2);
12882
                        init = cp_fname_init (name, &TREE_TYPE (decl));
12883
                      }
12884
                    else
12885
                      {
12886
                        tree t = RECUR (init);
12887
 
12888
                        if (init && !t)
12889
                          {
12890
                            /* If we had an initializer but it
12891
                               instantiated to nothing,
12892
                               value-initialize the object.  This will
12893
                               only occur when the initializer was a
12894
                               pack expansion where the parameter packs
12895
                               used in that expansion were of length
12896
                               zero.  */
12897
                            init = build_value_init (TREE_TYPE (decl),
12898
                                                     complain);
12899
                            if (TREE_CODE (init) == AGGR_INIT_EXPR)
12900
                              init = get_target_expr_sfinae (init, complain);
12901
                          }
12902
                        else
12903
                          init = t;
12904
                      }
12905
 
12906
                    if (TREE_CODE (decl) == VAR_DECL)
12907
                      const_init = (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P
12908
                                    (pattern_decl));
12909
                    cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
12910
                  }
12911
              }
12912
          }
12913
 
12914
        /* A DECL_EXPR can also be used as an expression, in the condition
12915
           clause of an if/for/while construct.  */
12916
        return decl;
12917
      }
12918
 
12919
    case FOR_STMT:
12920
      stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12921
      RECUR (FOR_INIT_STMT (t));
12922
      finish_for_init_stmt (stmt);
12923
      tmp = RECUR (FOR_COND (t));
12924
      finish_for_cond (tmp, stmt);
12925
      tmp = RECUR (FOR_EXPR (t));
12926
      finish_for_expr (tmp, stmt);
12927
      RECUR (FOR_BODY (t));
12928
      finish_for_stmt (stmt);
12929
      break;
12930
 
12931
    case RANGE_FOR_STMT:
12932
      {
12933
        tree decl, expr;
12934
        stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12935
        decl = RANGE_FOR_DECL (t);
12936
        decl = tsubst (decl, args, complain, in_decl);
12937
        maybe_push_decl (decl);
12938
        expr = RECUR (RANGE_FOR_EXPR (t));
12939
        stmt = cp_convert_range_for (stmt, decl, expr);
12940
        RECUR (RANGE_FOR_BODY (t));
12941
        finish_for_stmt (stmt);
12942
      }
12943
      break;
12944
 
12945
    case WHILE_STMT:
12946
      stmt = begin_while_stmt ();
12947
      tmp = RECUR (WHILE_COND (t));
12948
      finish_while_stmt_cond (tmp, stmt);
12949
      RECUR (WHILE_BODY (t));
12950
      finish_while_stmt (stmt);
12951
      break;
12952
 
12953
    case DO_STMT:
12954
      stmt = begin_do_stmt ();
12955
      RECUR (DO_BODY (t));
12956
      finish_do_body (stmt);
12957
      tmp = RECUR (DO_COND (t));
12958
      finish_do_stmt (tmp, stmt);
12959
      break;
12960
 
12961
    case IF_STMT:
12962
      stmt = begin_if_stmt ();
12963
      tmp = RECUR (IF_COND (t));
12964
      finish_if_stmt_cond (tmp, stmt);
12965
      RECUR (THEN_CLAUSE (t));
12966
      finish_then_clause (stmt);
12967
 
12968
      if (ELSE_CLAUSE (t))
12969
        {
12970
          begin_else_clause (stmt);
12971
          RECUR (ELSE_CLAUSE (t));
12972
          finish_else_clause (stmt);
12973
        }
12974
 
12975
      finish_if_stmt (stmt);
12976
      break;
12977
 
12978
    case BIND_EXPR:
12979
      if (BIND_EXPR_BODY_BLOCK (t))
12980
        stmt = begin_function_body ();
12981
      else
12982
        stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
12983
                                    ? BCS_TRY_BLOCK : 0);
12984
 
12985
      RECUR (BIND_EXPR_BODY (t));
12986
 
12987
      if (BIND_EXPR_BODY_BLOCK (t))
12988
        finish_function_body (stmt);
12989
      else
12990
        finish_compound_stmt (stmt);
12991
      break;
12992
 
12993
    case BREAK_STMT:
12994
      finish_break_stmt ();
12995
      break;
12996
 
12997
    case CONTINUE_STMT:
12998
      finish_continue_stmt ();
12999
      break;
13000
 
13001
    case SWITCH_STMT:
13002
      stmt = begin_switch_stmt ();
13003
      tmp = RECUR (SWITCH_STMT_COND (t));
13004
      finish_switch_cond (tmp, stmt);
13005
      RECUR (SWITCH_STMT_BODY (t));
13006
      finish_switch_stmt (stmt);
13007
      break;
13008
 
13009
    case CASE_LABEL_EXPR:
13010
      finish_case_label (EXPR_LOCATION (t),
13011
                         RECUR (CASE_LOW (t)),
13012
                         RECUR (CASE_HIGH (t)));
13013
      break;
13014
 
13015
    case LABEL_EXPR:
13016
      {
13017
        tree decl = LABEL_EXPR_LABEL (t);
13018
        tree label;
13019
 
13020
        label = finish_label_stmt (DECL_NAME (decl));
13021
        if (DECL_ATTRIBUTES (decl) != NULL_TREE)
13022
          cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
13023
      }
13024
      break;
13025
 
13026
    case GOTO_EXPR:
13027
      tmp = GOTO_DESTINATION (t);
13028
      if (TREE_CODE (tmp) != LABEL_DECL)
13029
        /* Computed goto's must be tsubst'd into.  On the other hand,
13030
           non-computed gotos must not be; the identifier in question
13031
           will have no binding.  */
13032
        tmp = RECUR (tmp);
13033
      else
13034
        tmp = DECL_NAME (tmp);
13035
      finish_goto_stmt (tmp);
13036
      break;
13037
 
13038
    case ASM_EXPR:
13039
      tmp = finish_asm_stmt
13040
        (ASM_VOLATILE_P (t),
13041
         RECUR (ASM_STRING (t)),
13042
         tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
13043
         tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
13044
         tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl),
13045
         tsubst_copy_asm_operands (ASM_LABELS (t), args, complain, in_decl));
13046
      {
13047
        tree asm_expr = tmp;
13048
        if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
13049
          asm_expr = TREE_OPERAND (asm_expr, 0);
13050
        ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
13051
      }
13052
      break;
13053
 
13054
    case TRY_BLOCK:
13055
      if (CLEANUP_P (t))
13056
        {
13057
          stmt = begin_try_block ();
13058
          RECUR (TRY_STMTS (t));
13059
          finish_cleanup_try_block (stmt);
13060
          finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
13061
        }
13062
      else
13063
        {
13064
          tree compound_stmt = NULL_TREE;
13065
 
13066
          if (FN_TRY_BLOCK_P (t))
13067
            stmt = begin_function_try_block (&compound_stmt);
13068
          else
13069
            stmt = begin_try_block ();
13070
 
13071
          RECUR (TRY_STMTS (t));
13072
 
13073
          if (FN_TRY_BLOCK_P (t))
13074
            finish_function_try_block (stmt);
13075
          else
13076
            finish_try_block (stmt);
13077
 
13078
          RECUR (TRY_HANDLERS (t));
13079
          if (FN_TRY_BLOCK_P (t))
13080
            finish_function_handler_sequence (stmt, compound_stmt);
13081
          else
13082
            finish_handler_sequence (stmt);
13083
        }
13084
      break;
13085
 
13086
    case HANDLER:
13087
      {
13088
        tree decl = HANDLER_PARMS (t);
13089
 
13090
        if (decl)
13091
          {
13092
            decl = tsubst (decl, args, complain, in_decl);
13093
            /* Prevent instantiate_decl from trying to instantiate
13094
               this variable.  We've already done all that needs to be
13095
               done.  */
13096
            if (decl != error_mark_node)
13097
              DECL_TEMPLATE_INSTANTIATED (decl) = 1;
13098
          }
13099
        stmt = begin_handler ();
13100
        finish_handler_parms (decl, stmt);
13101
        RECUR (HANDLER_BODY (t));
13102
        finish_handler (stmt);
13103
      }
13104
      break;
13105
 
13106
    case TAG_DEFN:
13107
      tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
13108
      break;
13109
 
13110
    case STATIC_ASSERT:
13111
      {
13112
        tree condition =
13113
          tsubst_expr (STATIC_ASSERT_CONDITION (t),
13114
                       args,
13115
                       complain, in_decl,
13116
                       /*integral_constant_expression_p=*/true);
13117
        finish_static_assert (condition,
13118
                              STATIC_ASSERT_MESSAGE (t),
13119
                              STATIC_ASSERT_SOURCE_LOCATION (t),
13120
                              /*member_p=*/false);
13121
      }
13122
      break;
13123
 
13124
    case OMP_PARALLEL:
13125
      tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
13126
                                args, complain, in_decl);
13127
      stmt = begin_omp_parallel ();
13128
      RECUR (OMP_PARALLEL_BODY (t));
13129
      OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
13130
        = OMP_PARALLEL_COMBINED (t);
13131
      break;
13132
 
13133
    case OMP_TASK:
13134
      tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
13135
                                args, complain, in_decl);
13136
      stmt = begin_omp_task ();
13137
      RECUR (OMP_TASK_BODY (t));
13138
      finish_omp_task (tmp, stmt);
13139
      break;
13140
 
13141
    case OMP_FOR:
13142
      {
13143
        tree clauses, body, pre_body;
13144
        tree declv, initv, condv, incrv;
13145
        int i;
13146
 
13147
        clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
13148
                                      args, complain, in_decl);
13149
        declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13150
        initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13151
        condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13152
        incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
13153
 
13154
        for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
13155
          tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
13156
                                   &clauses, args, complain, in_decl,
13157
                                   integral_constant_expression_p);
13158
 
13159
        stmt = begin_omp_structured_block ();
13160
 
13161
        for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
13162
          if (TREE_VEC_ELT (initv, i) == NULL
13163
              || TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
13164
            TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
13165
          else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
13166
            {
13167
              tree init = RECUR (TREE_VEC_ELT (initv, i));
13168
              gcc_assert (init == TREE_VEC_ELT (declv, i));
13169
              TREE_VEC_ELT (initv, i) = NULL_TREE;
13170
            }
13171
          else
13172
            {
13173
              tree decl_expr = TREE_VEC_ELT (initv, i);
13174
              tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
13175
              gcc_assert (init != NULL);
13176
              TREE_VEC_ELT (initv, i) = RECUR (init);
13177
              DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
13178
              RECUR (decl_expr);
13179
              DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
13180
            }
13181
 
13182
        pre_body = push_stmt_list ();
13183
        RECUR (OMP_FOR_PRE_BODY (t));
13184
        pre_body = pop_stmt_list (pre_body);
13185
 
13186
        body = push_stmt_list ();
13187
        RECUR (OMP_FOR_BODY (t));
13188
        body = pop_stmt_list (body);
13189
 
13190
        t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
13191
                            body, pre_body, clauses);
13192
 
13193
        add_stmt (finish_omp_structured_block (stmt));
13194
      }
13195
      break;
13196
 
13197
    case OMP_SECTIONS:
13198
    case OMP_SINGLE:
13199
      tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
13200
      stmt = push_stmt_list ();
13201
      RECUR (OMP_BODY (t));
13202
      stmt = pop_stmt_list (stmt);
13203
 
13204
      t = copy_node (t);
13205
      OMP_BODY (t) = stmt;
13206
      OMP_CLAUSES (t) = tmp;
13207
      add_stmt (t);
13208
      break;
13209
 
13210
    case OMP_SECTION:
13211
    case OMP_CRITICAL:
13212
    case OMP_MASTER:
13213
    case OMP_ORDERED:
13214
      stmt = push_stmt_list ();
13215
      RECUR (OMP_BODY (t));
13216
      stmt = pop_stmt_list (stmt);
13217
 
13218
      t = copy_node (t);
13219
      OMP_BODY (t) = stmt;
13220
      add_stmt (t);
13221
      break;
13222
 
13223
    case OMP_ATOMIC:
13224
      gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
13225
      if (TREE_CODE (TREE_OPERAND (t, 1)) != MODIFY_EXPR)
13226
        {
13227
          tree op1 = TREE_OPERAND (t, 1);
13228
          tree rhs1 = NULL_TREE;
13229
          tree lhs, rhs;
13230
          if (TREE_CODE (op1) == COMPOUND_EXPR)
13231
            {
13232
              rhs1 = RECUR (TREE_OPERAND (op1, 0));
13233
              op1 = TREE_OPERAND (op1, 1);
13234
            }
13235
          lhs = RECUR (TREE_OPERAND (op1, 0));
13236
          rhs = RECUR (TREE_OPERAND (op1, 1));
13237
          finish_omp_atomic (OMP_ATOMIC, TREE_CODE (op1), lhs, rhs,
13238
                             NULL_TREE, NULL_TREE, rhs1);
13239
        }
13240
      else
13241
        {
13242
          tree op1 = TREE_OPERAND (t, 1);
13243
          tree v = NULL_TREE, lhs, rhs = NULL_TREE, lhs1 = NULL_TREE;
13244
          tree rhs1 = NULL_TREE;
13245
          enum tree_code code = TREE_CODE (TREE_OPERAND (op1, 1));
13246
          enum tree_code opcode = NOP_EXPR;
13247
          if (code == OMP_ATOMIC_READ)
13248
            {
13249
              v = RECUR (TREE_OPERAND (op1, 0));
13250
              lhs = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
13251
            }
13252
          else if (code == OMP_ATOMIC_CAPTURE_OLD
13253
                   || code == OMP_ATOMIC_CAPTURE_NEW)
13254
            {
13255
              tree op11 = TREE_OPERAND (TREE_OPERAND (op1, 1), 1);
13256
              v = RECUR (TREE_OPERAND (op1, 0));
13257
              lhs1 = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
13258
              if (TREE_CODE (op11) == COMPOUND_EXPR)
13259
                {
13260
                  rhs1 = RECUR (TREE_OPERAND (op11, 0));
13261
                  op11 = TREE_OPERAND (op11, 1);
13262
                }
13263
              lhs = RECUR (TREE_OPERAND (op11, 0));
13264
              rhs = RECUR (TREE_OPERAND (op11, 1));
13265
              opcode = TREE_CODE (op11);
13266
            }
13267
          else
13268
            {
13269
              code = OMP_ATOMIC;
13270
              lhs = RECUR (TREE_OPERAND (op1, 0));
13271
              rhs = RECUR (TREE_OPERAND (op1, 1));
13272
            }
13273
          finish_omp_atomic (code, opcode, lhs, rhs, v, lhs1, rhs1);
13274
        }
13275
      break;
13276
 
13277
    case TRANSACTION_EXPR:
13278
      {
13279
        int flags = 0;
13280
        flags |= (TRANSACTION_EXPR_OUTER (t) ? TM_STMT_ATTR_OUTER : 0);
13281
        flags |= (TRANSACTION_EXPR_RELAXED (t) ? TM_STMT_ATTR_RELAXED : 0);
13282
 
13283
        if (TRANSACTION_EXPR_IS_STMT (t))
13284
          {
13285
            tree body = TRANSACTION_EXPR_BODY (t);
13286
            tree noex = NULL_TREE;
13287
            if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
13288
              {
13289
                noex = MUST_NOT_THROW_COND (body);
13290
                if (noex == NULL_TREE)
13291
                  noex = boolean_true_node;
13292
                body = TREE_OPERAND (body, 0);
13293
              }
13294
            stmt = begin_transaction_stmt (input_location, NULL, flags);
13295
            RECUR (body);
13296
            finish_transaction_stmt (stmt, NULL, flags, RECUR (noex));
13297
          }
13298
        else
13299
          {
13300
            stmt = build_transaction_expr (EXPR_LOCATION (t),
13301
                                           RECUR (TRANSACTION_EXPR_BODY (t)),
13302
                                           flags, NULL_TREE);
13303
            return stmt;
13304
          }
13305
      }
13306
      break;
13307
 
13308
    case MUST_NOT_THROW_EXPR:
13309
      return build_must_not_throw_expr (RECUR (TREE_OPERAND (t, 0)),
13310
                                        RECUR (MUST_NOT_THROW_COND (t)));
13311
 
13312
    case EXPR_PACK_EXPANSION:
13313
      error ("invalid use of pack expansion expression");
13314
      return error_mark_node;
13315
 
13316
    case NONTYPE_ARGUMENT_PACK:
13317
      error ("use %<...%> to expand argument pack");
13318
      return error_mark_node;
13319
 
13320
    default:
13321
      gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
13322
 
13323
      return tsubst_copy_and_build (t, args, complain, in_decl,
13324
                                    /*function_p=*/false,
13325
                                    integral_constant_expression_p);
13326
    }
13327
 
13328
  return NULL_TREE;
13329
#undef RECUR
13330
}
13331
 
13332
/* T is a postfix-expression that is not being used in a function
13333
   call.  Return the substituted version of T.  */
13334
 
13335
static tree
13336
tsubst_non_call_postfix_expression (tree t, tree args,
13337
                                    tsubst_flags_t complain,
13338
                                    tree in_decl)
13339
{
13340
  if (TREE_CODE (t) == SCOPE_REF)
13341
    t = tsubst_qualified_id (t, args, complain, in_decl,
13342
                             /*done=*/false, /*address_p=*/false);
13343
  else
13344
    t = tsubst_copy_and_build (t, args, complain, in_decl,
13345
                               /*function_p=*/false,
13346
                               /*integral_constant_expression_p=*/false);
13347
 
13348
  return t;
13349
}
13350
 
13351
/* Like tsubst but deals with expressions and performs semantic
13352
   analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
13353
 
13354
tree
13355
tsubst_copy_and_build (tree t,
13356
                       tree args,
13357
                       tsubst_flags_t complain,
13358
                       tree in_decl,
13359
                       bool function_p,
13360
                       bool integral_constant_expression_p)
13361
{
13362
#define RECUR(NODE)                                             \
13363
  tsubst_copy_and_build (NODE, args, complain, in_decl,         \
13364
                         /*function_p=*/false,                  \
13365
                         integral_constant_expression_p)
13366
 
13367
  tree op1;
13368
 
13369
  if (t == NULL_TREE || t == error_mark_node)
13370
    return t;
13371
 
13372
  switch (TREE_CODE (t))
13373
    {
13374
    case USING_DECL:
13375
      t = DECL_NAME (t);
13376
      /* Fall through.  */
13377
    case IDENTIFIER_NODE:
13378
      {
13379
        tree decl;
13380
        cp_id_kind idk;
13381
        bool non_integral_constant_expression_p;
13382
        const char *error_msg;
13383
 
13384
        if (IDENTIFIER_TYPENAME_P (t))
13385
          {
13386
            tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13387
            t = mangle_conv_op_name_for_type (new_type);
13388
          }
13389
 
13390
        /* Look up the name.  */
13391
        decl = lookup_name (t);
13392
 
13393
        /* By convention, expressions use ERROR_MARK_NODE to indicate
13394
           failure, not NULL_TREE.  */
13395
        if (decl == NULL_TREE)
13396
          decl = error_mark_node;
13397
 
13398
        decl = finish_id_expression (t, decl, NULL_TREE,
13399
                                     &idk,
13400
                                     integral_constant_expression_p,
13401
          /*allow_non_integral_constant_expression_p=*/(cxx_dialect >= cxx0x),
13402
                                     &non_integral_constant_expression_p,
13403
                                     /*template_p=*/false,
13404
                                     /*done=*/true,
13405
                                     /*address_p=*/false,
13406
                                     /*template_arg_p=*/false,
13407
                                     &error_msg,
13408
                                     input_location);
13409
        if (error_msg)
13410
          error (error_msg);
13411
        if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
13412
          {
13413
            if (complain & tf_error)
13414
              unqualified_name_lookup_error (decl);
13415
            decl = error_mark_node;
13416
          }
13417
        return decl;
13418
      }
13419
 
13420
    case TEMPLATE_ID_EXPR:
13421
      {
13422
        tree object;
13423
        tree templ = RECUR (TREE_OPERAND (t, 0));
13424
        tree targs = TREE_OPERAND (t, 1);
13425
 
13426
        if (targs)
13427
          targs = tsubst_template_args (targs, args, complain, in_decl);
13428
 
13429
        if (TREE_CODE (templ) == COMPONENT_REF)
13430
          {
13431
            object = TREE_OPERAND (templ, 0);
13432
            templ = TREE_OPERAND (templ, 1);
13433
          }
13434
        else
13435
          object = NULL_TREE;
13436
        templ = lookup_template_function (templ, targs);
13437
 
13438
        if (object)
13439
          return build3 (COMPONENT_REF, TREE_TYPE (templ),
13440
                         object, templ, NULL_TREE);
13441
        else
13442
          return baselink_for_fns (templ);
13443
      }
13444
 
13445
    case INDIRECT_REF:
13446
      {
13447
        tree r = RECUR (TREE_OPERAND (t, 0));
13448
 
13449
        if (REFERENCE_REF_P (t))
13450
          {
13451
            /* A type conversion to reference type will be enclosed in
13452
               such an indirect ref, but the substitution of the cast
13453
               will have also added such an indirect ref.  */
13454
            if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
13455
              r = convert_from_reference (r);
13456
          }
13457
        else
13458
          r = build_x_indirect_ref (r, RO_UNARY_STAR, complain);
13459
        return r;
13460
      }
13461
 
13462
    case NOP_EXPR:
13463
      return build_nop
13464
        (tsubst (TREE_TYPE (t), args, complain, in_decl),
13465
         RECUR (TREE_OPERAND (t, 0)));
13466
 
13467
    case IMPLICIT_CONV_EXPR:
13468
      {
13469
        tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13470
        tree expr = RECUR (TREE_OPERAND (t, 0));
13471
        int flags = LOOKUP_IMPLICIT;
13472
        if (IMPLICIT_CONV_EXPR_DIRECT_INIT (t))
13473
          flags = LOOKUP_NORMAL;
13474
        return perform_implicit_conversion_flags (type, expr, complain,
13475
                                                  flags);
13476
      }
13477
 
13478
    case CONVERT_EXPR:
13479
      return build1
13480
        (CONVERT_EXPR,
13481
         tsubst (TREE_TYPE (t), args, complain, in_decl),
13482
         RECUR (TREE_OPERAND (t, 0)));
13483
 
13484
    case CAST_EXPR:
13485
    case REINTERPRET_CAST_EXPR:
13486
    case CONST_CAST_EXPR:
13487
    case DYNAMIC_CAST_EXPR:
13488
    case STATIC_CAST_EXPR:
13489
      {
13490
        tree type;
13491
        tree op;
13492
 
13493
        type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13494
        if (integral_constant_expression_p
13495
            && !cast_valid_in_integral_constant_expression_p (type))
13496
          {
13497
            if (complain & tf_error)
13498
              error ("a cast to a type other than an integral or "
13499
                     "enumeration type cannot appear in a constant-expression");
13500
            return error_mark_node;
13501
          }
13502
 
13503
        op = RECUR (TREE_OPERAND (t, 0));
13504
 
13505
        switch (TREE_CODE (t))
13506
          {
13507
          case CAST_EXPR:
13508
            return build_functional_cast (type, op, complain);
13509
          case REINTERPRET_CAST_EXPR:
13510
            return build_reinterpret_cast (type, op, complain);
13511
          case CONST_CAST_EXPR:
13512
            return build_const_cast (type, op, complain);
13513
          case DYNAMIC_CAST_EXPR:
13514
            return build_dynamic_cast (type, op, complain);
13515
          case STATIC_CAST_EXPR:
13516
            return build_static_cast (type, op, complain);
13517
          default:
13518
            gcc_unreachable ();
13519
          }
13520
      }
13521
 
13522
    case POSTDECREMENT_EXPR:
13523
    case POSTINCREMENT_EXPR:
13524
      op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13525
                                                args, complain, in_decl);
13526
      return build_x_unary_op (TREE_CODE (t), op1, complain);
13527
 
13528
    case PREDECREMENT_EXPR:
13529
    case PREINCREMENT_EXPR:
13530
    case NEGATE_EXPR:
13531
    case BIT_NOT_EXPR:
13532
    case ABS_EXPR:
13533
    case TRUTH_NOT_EXPR:
13534
    case UNARY_PLUS_EXPR:  /* Unary + */
13535
    case REALPART_EXPR:
13536
    case IMAGPART_EXPR:
13537
      return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
13538
                               complain);
13539
 
13540
    case FIX_TRUNC_EXPR:
13541
      return cp_build_unary_op (FIX_TRUNC_EXPR, RECUR (TREE_OPERAND (t, 0)),
13542
                                0, complain);
13543
 
13544
    case ADDR_EXPR:
13545
      op1 = TREE_OPERAND (t, 0);
13546
      if (TREE_CODE (op1) == LABEL_DECL)
13547
        return finish_label_address_expr (DECL_NAME (op1),
13548
                                          EXPR_LOCATION (op1));
13549
      if (TREE_CODE (op1) == SCOPE_REF)
13550
        op1 = tsubst_qualified_id (op1, args, complain, in_decl,
13551
                                   /*done=*/true, /*address_p=*/true);
13552
      else
13553
        op1 = tsubst_non_call_postfix_expression (op1, args, complain,
13554
                                                  in_decl);
13555
      return build_x_unary_op (ADDR_EXPR, op1, complain);
13556
 
13557
    case PLUS_EXPR:
13558
    case MINUS_EXPR:
13559
    case MULT_EXPR:
13560
    case TRUNC_DIV_EXPR:
13561
    case CEIL_DIV_EXPR:
13562
    case FLOOR_DIV_EXPR:
13563
    case ROUND_DIV_EXPR:
13564
    case EXACT_DIV_EXPR:
13565
    case BIT_AND_EXPR:
13566
    case BIT_IOR_EXPR:
13567
    case BIT_XOR_EXPR:
13568
    case TRUNC_MOD_EXPR:
13569
    case FLOOR_MOD_EXPR:
13570
    case TRUTH_ANDIF_EXPR:
13571
    case TRUTH_ORIF_EXPR:
13572
    case TRUTH_AND_EXPR:
13573
    case TRUTH_OR_EXPR:
13574
    case RSHIFT_EXPR:
13575
    case LSHIFT_EXPR:
13576
    case RROTATE_EXPR:
13577
    case LROTATE_EXPR:
13578
    case EQ_EXPR:
13579
    case NE_EXPR:
13580
    case MAX_EXPR:
13581
    case MIN_EXPR:
13582
    case LE_EXPR:
13583
    case GE_EXPR:
13584
    case LT_EXPR:
13585
    case GT_EXPR:
13586
    case MEMBER_REF:
13587
    case DOTSTAR_EXPR:
13588
      {
13589
        tree r = build_x_binary_op
13590
          (TREE_CODE (t),
13591
           RECUR (TREE_OPERAND (t, 0)),
13592
           (TREE_NO_WARNING (TREE_OPERAND (t, 0))
13593
            ? ERROR_MARK
13594
            : TREE_CODE (TREE_OPERAND (t, 0))),
13595
           RECUR (TREE_OPERAND (t, 1)),
13596
           (TREE_NO_WARNING (TREE_OPERAND (t, 1))
13597
            ? ERROR_MARK
13598
            : TREE_CODE (TREE_OPERAND (t, 1))),
13599
           /*overload=*/NULL,
13600
           complain);
13601
        if (EXPR_P (r) && TREE_NO_WARNING (t))
13602
          TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
13603
        return r;
13604
      }
13605
 
13606
    case SCOPE_REF:
13607
      return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
13608
                                  /*address_p=*/false);
13609
    case ARRAY_REF:
13610
      op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13611
                                                args, complain, in_decl);
13612
      return build_x_array_ref (op1, RECUR (TREE_OPERAND (t, 1)), complain);
13613
 
13614
    case SIZEOF_EXPR:
13615
      if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
13616
        return tsubst_copy (t, args, complain, in_decl);
13617
      /* Fall through */
13618
 
13619
    case ALIGNOF_EXPR:
13620
      op1 = TREE_OPERAND (t, 0);
13621
      if (!args)
13622
        {
13623
          /* When there are no ARGS, we are trying to evaluate a
13624
             non-dependent expression from the parser.  Trying to do
13625
             the substitutions may not work.  */
13626
          if (!TYPE_P (op1))
13627
            op1 = TREE_TYPE (op1);
13628
        }
13629
      else
13630
        {
13631
          ++cp_unevaluated_operand;
13632
          ++c_inhibit_evaluation_warnings;
13633
          op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13634
                                       /*function_p=*/false,
13635
                                       /*integral_constant_expression_p=*/false);
13636
          --cp_unevaluated_operand;
13637
          --c_inhibit_evaluation_warnings;
13638
        }
13639
      if (TYPE_P (op1))
13640
        return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t),
13641
                                           complain & tf_error);
13642
      else
13643
        return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t),
13644
                                           complain & tf_error);
13645
 
13646
    case AT_ENCODE_EXPR:
13647
      {
13648
        op1 = TREE_OPERAND (t, 0);
13649
        ++cp_unevaluated_operand;
13650
        ++c_inhibit_evaluation_warnings;
13651
        op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13652
                                     /*function_p=*/false,
13653
                                     /*integral_constant_expression_p=*/false);
13654
        --cp_unevaluated_operand;
13655
        --c_inhibit_evaluation_warnings;
13656
        return objc_build_encode_expr (op1);
13657
      }
13658
 
13659
    case NOEXCEPT_EXPR:
13660
      op1 = TREE_OPERAND (t, 0);
13661
      ++cp_unevaluated_operand;
13662
      ++c_inhibit_evaluation_warnings;
13663
      op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13664
                                   /*function_p=*/false,
13665
                                   /*integral_constant_expression_p=*/false);
13666
      --cp_unevaluated_operand;
13667
      --c_inhibit_evaluation_warnings;
13668
      return finish_noexcept_expr (op1, complain);
13669
 
13670
    case MODOP_EXPR:
13671
      {
13672
        tree r = build_x_modify_expr
13673
          (RECUR (TREE_OPERAND (t, 0)),
13674
           TREE_CODE (TREE_OPERAND (t, 1)),
13675
           RECUR (TREE_OPERAND (t, 2)),
13676
           complain);
13677
        /* TREE_NO_WARNING must be set if either the expression was
13678
           parenthesized or it uses an operator such as >>= rather
13679
           than plain assignment.  In the former case, it was already
13680
           set and must be copied.  In the latter case,
13681
           build_x_modify_expr sets it and it must not be reset
13682
           here.  */
13683
        if (TREE_NO_WARNING (t))
13684
          TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
13685
        return r;
13686
      }
13687
 
13688
    case ARROW_EXPR:
13689
      op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13690
                                                args, complain, in_decl);
13691
      /* Remember that there was a reference to this entity.  */
13692
      if (DECL_P (op1))
13693
        mark_used (op1);
13694
      return build_x_arrow (op1);
13695
 
13696
    case NEW_EXPR:
13697
      {
13698
        tree placement = RECUR (TREE_OPERAND (t, 0));
13699
        tree init = RECUR (TREE_OPERAND (t, 3));
13700
        VEC(tree,gc) *placement_vec;
13701
        VEC(tree,gc) *init_vec;
13702
        tree ret;
13703
 
13704
        if (placement == NULL_TREE)
13705
          placement_vec = NULL;
13706
        else
13707
          {
13708
            placement_vec = make_tree_vector ();
13709
            for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
13710
              VEC_safe_push (tree, gc, placement_vec, TREE_VALUE (placement));
13711
          }
13712
 
13713
        /* If there was an initializer in the original tree, but it
13714
           instantiated to an empty list, then we should pass a
13715
           non-NULL empty vector to tell build_new that it was an
13716
           empty initializer() rather than no initializer.  This can
13717
           only happen when the initializer is a pack expansion whose
13718
           parameter packs are of length zero.  */
13719
        if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
13720
          init_vec = NULL;
13721
        else
13722
          {
13723
            init_vec = make_tree_vector ();
13724
            if (init == void_zero_node)
13725
              gcc_assert (init_vec != NULL);
13726
            else
13727
              {
13728
                for (; init != NULL_TREE; init = TREE_CHAIN (init))
13729
                  VEC_safe_push (tree, gc, init_vec, TREE_VALUE (init));
13730
              }
13731
          }
13732
 
13733
        ret = build_new (&placement_vec,
13734
                         tsubst (TREE_OPERAND (t, 1), args, complain, in_decl),
13735
                         RECUR (TREE_OPERAND (t, 2)),
13736
                         &init_vec,
13737
                         NEW_EXPR_USE_GLOBAL (t),
13738
                         complain);
13739
 
13740
        if (placement_vec != NULL)
13741
          release_tree_vector (placement_vec);
13742
        if (init_vec != NULL)
13743
          release_tree_vector (init_vec);
13744
 
13745
        return ret;
13746
      }
13747
 
13748
    case DELETE_EXPR:
13749
     return delete_sanity
13750
       (RECUR (TREE_OPERAND (t, 0)),
13751
        RECUR (TREE_OPERAND (t, 1)),
13752
        DELETE_EXPR_USE_VEC (t),
13753
        DELETE_EXPR_USE_GLOBAL (t),
13754
        complain);
13755
 
13756
    case COMPOUND_EXPR:
13757
      return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
13758
                                    RECUR (TREE_OPERAND (t, 1)),
13759
                                    complain);
13760
 
13761
    case CALL_EXPR:
13762
      {
13763
        tree function;
13764
        VEC(tree,gc) *call_args;
13765
        unsigned int nargs, i;
13766
        bool qualified_p;
13767
        bool koenig_p;
13768
        tree ret;
13769
 
13770
        function = CALL_EXPR_FN (t);
13771
        /* When we parsed the expression,  we determined whether or
13772
           not Koenig lookup should be performed.  */
13773
        koenig_p = KOENIG_LOOKUP_P (t);
13774
        if (TREE_CODE (function) == SCOPE_REF)
13775
          {
13776
            qualified_p = true;
13777
            function = tsubst_qualified_id (function, args, complain, in_decl,
13778
                                            /*done=*/false,
13779
                                            /*address_p=*/false);
13780
          }
13781
        else if (koenig_p && TREE_CODE (function) == IDENTIFIER_NODE)
13782
          {
13783
            /* Do nothing; calling tsubst_copy_and_build on an identifier
13784
               would incorrectly perform unqualified lookup again.
13785
 
13786
               Note that we can also have an IDENTIFIER_NODE if the earlier
13787
               unqualified lookup found a member function; in that case
13788
               koenig_p will be false and we do want to do the lookup
13789
               again to find the instantiated member function.
13790
 
13791
               FIXME but doing that causes c++/15272, so we need to stop
13792
               using IDENTIFIER_NODE in that situation.  */
13793
            qualified_p = false;
13794
          }
13795
        else
13796
          {
13797
            if (TREE_CODE (function) == COMPONENT_REF)
13798
              {
13799
                tree op = TREE_OPERAND (function, 1);
13800
 
13801
                qualified_p = (TREE_CODE (op) == SCOPE_REF
13802
                               || (BASELINK_P (op)
13803
                                   && BASELINK_QUALIFIED_P (op)));
13804
              }
13805
            else
13806
              qualified_p = false;
13807
 
13808
            function = tsubst_copy_and_build (function, args, complain,
13809
                                              in_decl,
13810
                                              !qualified_p,
13811
                                              integral_constant_expression_p);
13812
 
13813
            if (BASELINK_P (function))
13814
              qualified_p = true;
13815
          }
13816
 
13817
        nargs = call_expr_nargs (t);
13818
        call_args = make_tree_vector ();
13819
        for (i = 0; i < nargs; ++i)
13820
          {
13821
            tree arg = CALL_EXPR_ARG (t, i);
13822
 
13823
            if (!PACK_EXPANSION_P (arg))
13824
              VEC_safe_push (tree, gc, call_args,
13825
                             RECUR (CALL_EXPR_ARG (t, i)));
13826
            else
13827
              {
13828
                /* Expand the pack expansion and push each entry onto
13829
                   CALL_ARGS.  */
13830
                arg = tsubst_pack_expansion (arg, args, complain, in_decl);
13831
                if (TREE_CODE (arg) == TREE_VEC)
13832
                  {
13833
                    unsigned int len, j;
13834
 
13835
                    len = TREE_VEC_LENGTH (arg);
13836
                    for (j = 0; j < len; ++j)
13837
                      {
13838
                        tree value = TREE_VEC_ELT (arg, j);
13839
                        if (value != NULL_TREE)
13840
                          value = convert_from_reference (value);
13841
                        VEC_safe_push (tree, gc, call_args, value);
13842
                      }
13843
                  }
13844
                else
13845
                  {
13846
                    /* A partial substitution.  Add one entry.  */
13847
                    VEC_safe_push (tree, gc, call_args, arg);
13848
                  }
13849
              }
13850
          }
13851
 
13852
        /* We do not perform argument-dependent lookup if normal
13853
           lookup finds a non-function, in accordance with the
13854
           expected resolution of DR 218.  */
13855
        if (koenig_p
13856
            && ((is_overloaded_fn (function)
13857
                 /* If lookup found a member function, the Koenig lookup is
13858
                    not appropriate, even if an unqualified-name was used
13859
                    to denote the function.  */
13860
                 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
13861
                || TREE_CODE (function) == IDENTIFIER_NODE)
13862
            /* Only do this when substitution turns a dependent call
13863
               into a non-dependent call.  */
13864
            && type_dependent_expression_p_push (t)
13865
            && !any_type_dependent_arguments_p (call_args))
13866
          function = perform_koenig_lookup (function, call_args, false,
13867
                                            tf_none);
13868
 
13869
        if (TREE_CODE (function) == IDENTIFIER_NODE
13870
            && !any_type_dependent_arguments_p (call_args))
13871
          {
13872
            if (koenig_p && (complain & tf_warning_or_error))
13873
              {
13874
                /* For backwards compatibility and good diagnostics, try
13875
                   the unqualified lookup again if we aren't in SFINAE
13876
                   context.  */
13877
                tree unq = (tsubst_copy_and_build
13878
                            (function, args, complain, in_decl, true,
13879
                             integral_constant_expression_p));
13880
                if (unq == error_mark_node)
13881
                  return error_mark_node;
13882
 
13883
                if (unq != function)
13884
                  {
13885
                    tree fn = unq;
13886
                    if (TREE_CODE (fn) == INDIRECT_REF)
13887
                      fn = TREE_OPERAND (fn, 0);
13888
                    if (TREE_CODE (fn) == COMPONENT_REF)
13889
                      fn = TREE_OPERAND (fn, 1);
13890
                    if (is_overloaded_fn (fn))
13891
                      fn = get_first_fn (fn);
13892
                    permerror (EXPR_LOC_OR_HERE (t),
13893
                               "%qD was not declared in this scope, "
13894
                               "and no declarations were found by "
13895
                               "argument-dependent lookup at the point "
13896
                               "of instantiation", function);
13897
                    if (!DECL_P (fn))
13898
                      /* Can't say anything more.  */;
13899
                    else if (DECL_CLASS_SCOPE_P (fn))
13900
                      {
13901
                        inform (EXPR_LOC_OR_HERE (t),
13902
                                "declarations in dependent base %qT are "
13903
                                "not found by unqualified lookup",
13904
                                DECL_CLASS_CONTEXT (fn));
13905
                        if (current_class_ptr)
13906
                          inform (EXPR_LOC_OR_HERE (t),
13907
                                  "use %<this->%D%> instead", function);
13908
                        else
13909
                          inform (EXPR_LOC_OR_HERE (t),
13910
                                  "use %<%T::%D%> instead",
13911
                                  current_class_name, function);
13912
                      }
13913
                    else
13914
                      inform (0, "%q+D declared here, later in the "
13915
                                "translation unit", fn);
13916
                    function = unq;
13917
                  }
13918
              }
13919
            if (TREE_CODE (function) == IDENTIFIER_NODE)
13920
              {
13921
                unqualified_name_lookup_error (function);
13922
                release_tree_vector (call_args);
13923
                return error_mark_node;
13924
              }
13925
          }
13926
 
13927
        /* Remember that there was a reference to this entity.  */
13928
        if (DECL_P (function))
13929
          mark_used (function);
13930
 
13931
        if (TREE_CODE (function) == OFFSET_REF)
13932
          ret = build_offset_ref_call_from_tree (function, &call_args);
13933
        else if (TREE_CODE (function) == COMPONENT_REF)
13934
          {
13935
            tree instance = TREE_OPERAND (function, 0);
13936
            tree fn = TREE_OPERAND (function, 1);
13937
 
13938
            if (processing_template_decl
13939
                && (type_dependent_expression_p (instance)
13940
                    || (!BASELINK_P (fn)
13941
                        && TREE_CODE (fn) != FIELD_DECL)
13942
                    || type_dependent_expression_p (fn)
13943
                    || any_type_dependent_arguments_p (call_args)))
13944
              ret = build_nt_call_vec (function, call_args);
13945
            else if (!BASELINK_P (fn))
13946
              ret = finish_call_expr (function, &call_args,
13947
                                       /*disallow_virtual=*/false,
13948
                                       /*koenig_p=*/false,
13949
                                       complain);
13950
            else
13951
              ret = (build_new_method_call
13952
                      (instance, fn,
13953
                       &call_args, NULL_TREE,
13954
                       qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
13955
                       /*fn_p=*/NULL,
13956
                       complain));
13957
          }
13958
        else
13959
          ret = finish_call_expr (function, &call_args,
13960
                                  /*disallow_virtual=*/qualified_p,
13961
                                  koenig_p,
13962
                                  complain);
13963
 
13964
        release_tree_vector (call_args);
13965
 
13966
        return ret;
13967
      }
13968
 
13969
    case COND_EXPR:
13970
      return build_x_conditional_expr
13971
        (RECUR (TREE_OPERAND (t, 0)),
13972
         RECUR (TREE_OPERAND (t, 1)),
13973
         RECUR (TREE_OPERAND (t, 2)),
13974
         complain);
13975
 
13976
    case PSEUDO_DTOR_EXPR:
13977
      return finish_pseudo_destructor_expr
13978
        (RECUR (TREE_OPERAND (t, 0)),
13979
         RECUR (TREE_OPERAND (t, 1)),
13980
         tsubst (TREE_OPERAND (t, 2), args, complain, in_decl));
13981
 
13982
    case TREE_LIST:
13983
      {
13984
        tree purpose, value, chain;
13985
 
13986
        if (t == void_list_node)
13987
          return t;
13988
 
13989
        if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
13990
            || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
13991
          {
13992
            /* We have pack expansions, so expand those and
13993
               create a new list out of it.  */
13994
            tree purposevec = NULL_TREE;
13995
            tree valuevec = NULL_TREE;
13996
            tree chain;
13997
            int i, len = -1;
13998
 
13999
            /* Expand the argument expressions.  */
14000
            if (TREE_PURPOSE (t))
14001
              purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
14002
                                                 complain, in_decl);
14003
            if (TREE_VALUE (t))
14004
              valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
14005
                                               complain, in_decl);
14006
 
14007
            /* Build the rest of the list.  */
14008
            chain = TREE_CHAIN (t);
14009
            if (chain && chain != void_type_node)
14010
              chain = RECUR (chain);
14011
 
14012
            /* Determine the number of arguments.  */
14013
            if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
14014
              {
14015
                len = TREE_VEC_LENGTH (purposevec);
14016
                gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
14017
              }
14018
            else if (TREE_CODE (valuevec) == TREE_VEC)
14019
              len = TREE_VEC_LENGTH (valuevec);
14020
            else
14021
              {
14022
                /* Since we only performed a partial substitution into
14023
                   the argument pack, we only return a single list
14024
                   node.  */
14025
                if (purposevec == TREE_PURPOSE (t)
14026
                    && valuevec == TREE_VALUE (t)
14027
                    && chain == TREE_CHAIN (t))
14028
                  return t;
14029
 
14030
                return tree_cons (purposevec, valuevec, chain);
14031
              }
14032
 
14033
            /* Convert the argument vectors into a TREE_LIST */
14034
            i = len;
14035
            while (i > 0)
14036
              {
14037
                /* Grab the Ith values.  */
14038
                i--;
14039
                purpose = purposevec ? TREE_VEC_ELT (purposevec, i)
14040
                                     : NULL_TREE;
14041
                value
14042
                  = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i))
14043
                             : NULL_TREE;
14044
 
14045
                /* Build the list (backwards).  */
14046
                chain = tree_cons (purpose, value, chain);
14047
              }
14048
 
14049
            return chain;
14050
          }
14051
 
14052
        purpose = TREE_PURPOSE (t);
14053
        if (purpose)
14054
          purpose = RECUR (purpose);
14055
        value = TREE_VALUE (t);
14056
        if (value)
14057
          value = RECUR (value);
14058
        chain = TREE_CHAIN (t);
14059
        if (chain && chain != void_type_node)
14060
          chain = RECUR (chain);
14061
        if (purpose == TREE_PURPOSE (t)
14062
            && value == TREE_VALUE (t)
14063
            && chain == TREE_CHAIN (t))
14064
          return t;
14065
        return tree_cons (purpose, value, chain);
14066
      }
14067
 
14068
    case COMPONENT_REF:
14069
      {
14070
        tree object;
14071
        tree object_type;
14072
        tree member;
14073
 
14074
        object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
14075
                                                     args, complain, in_decl);
14076
        /* Remember that there was a reference to this entity.  */
14077
        if (DECL_P (object))
14078
          mark_used (object);
14079
        object_type = TREE_TYPE (object);
14080
 
14081
        member = TREE_OPERAND (t, 1);
14082
        if (BASELINK_P (member))
14083
          member = tsubst_baselink (member,
14084
                                    non_reference (TREE_TYPE (object)),
14085
                                    args, complain, in_decl);
14086
        else
14087
          member = tsubst_copy (member, args, complain, in_decl);
14088
        if (member == error_mark_node)
14089
          return error_mark_node;
14090
 
14091
        if (type_dependent_expression_p (object))
14092
          /* We can't do much here.  */;
14093
        else if (!CLASS_TYPE_P (object_type))
14094
          {
14095
            if (SCALAR_TYPE_P (object_type))
14096
              {
14097
                tree s = NULL_TREE;
14098
                tree dtor = member;
14099
 
14100
                if (TREE_CODE (dtor) == SCOPE_REF)
14101
                  {
14102
                    s = TREE_OPERAND (dtor, 0);
14103
                    dtor = TREE_OPERAND (dtor, 1);
14104
                  }
14105
                if (TREE_CODE (dtor) == BIT_NOT_EXPR)
14106
                  {
14107
                    dtor = TREE_OPERAND (dtor, 0);
14108
                    if (TYPE_P (dtor))
14109
                      return finish_pseudo_destructor_expr (object, s, dtor);
14110
                  }
14111
              }
14112
          }
14113
        else if (TREE_CODE (member) == SCOPE_REF
14114
                 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
14115
          {
14116
            /* Lookup the template functions now that we know what the
14117
               scope is.  */
14118
            tree scope = TREE_OPERAND (member, 0);
14119
            tree tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
14120
            tree args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
14121
            member = lookup_qualified_name (scope, tmpl,
14122
                                            /*is_type_p=*/false,
14123
                                            /*complain=*/false);
14124
            if (BASELINK_P (member))
14125
              {
14126
                BASELINK_FUNCTIONS (member)
14127
                  = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
14128
                              args);
14129
                member = (adjust_result_of_qualified_name_lookup
14130
                          (member, BINFO_TYPE (BASELINK_BINFO (member)),
14131
                           object_type));
14132
              }
14133
            else
14134
              {
14135
                qualified_name_lookup_error (scope, tmpl, member,
14136
                                             input_location);
14137
                return error_mark_node;
14138
              }
14139
          }
14140
        else if (TREE_CODE (member) == SCOPE_REF
14141
                 && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
14142
                 && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
14143
          {
14144
            if (complain & tf_error)
14145
              {
14146
                if (TYPE_P (TREE_OPERAND (member, 0)))
14147
                  error ("%qT is not a class or namespace",
14148
                         TREE_OPERAND (member, 0));
14149
                else
14150
                  error ("%qD is not a class or namespace",
14151
                         TREE_OPERAND (member, 0));
14152
              }
14153
            return error_mark_node;
14154
          }
14155
        else if (TREE_CODE (member) == FIELD_DECL)
14156
          return finish_non_static_data_member (member, object, NULL_TREE);
14157
 
14158
        return finish_class_member_access_expr (object, member,
14159
                                                /*template_p=*/false,
14160
                                                complain);
14161
      }
14162
 
14163
    case THROW_EXPR:
14164
      return build_throw
14165
        (RECUR (TREE_OPERAND (t, 0)));
14166
 
14167
    case CONSTRUCTOR:
14168
      {
14169
        VEC(constructor_elt,gc) *n;
14170
        constructor_elt *ce;
14171
        unsigned HOST_WIDE_INT idx;
14172
        tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14173
        bool process_index_p;
14174
        int newlen;
14175
        bool need_copy_p = false;
14176
        tree r;
14177
 
14178
        if (type == error_mark_node)
14179
          return error_mark_node;
14180
 
14181
        /* digest_init will do the wrong thing if we let it.  */
14182
        if (type && TYPE_PTRMEMFUNC_P (type))
14183
          return t;
14184
 
14185
        /* We do not want to process the index of aggregate
14186
           initializers as they are identifier nodes which will be
14187
           looked up by digest_init.  */
14188
        process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
14189
 
14190
        n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
14191
        newlen = VEC_length (constructor_elt, n);
14192
        FOR_EACH_VEC_ELT (constructor_elt, n, idx, ce)
14193
          {
14194
            if (ce->index && process_index_p)
14195
              ce->index = RECUR (ce->index);
14196
 
14197
            if (PACK_EXPANSION_P (ce->value))
14198
              {
14199
                /* Substitute into the pack expansion.  */
14200
                ce->value = tsubst_pack_expansion (ce->value, args, complain,
14201
                                                  in_decl);
14202
 
14203
                if (ce->value == error_mark_node
14204
                    || PACK_EXPANSION_P (ce->value))
14205
                  ;
14206
                else if (TREE_VEC_LENGTH (ce->value) == 1)
14207
                  /* Just move the argument into place.  */
14208
                  ce->value = TREE_VEC_ELT (ce->value, 0);
14209
                else
14210
                  {
14211
                    /* Update the length of the final CONSTRUCTOR
14212
                       arguments vector, and note that we will need to
14213
                       copy.*/
14214
                    newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
14215
                    need_copy_p = true;
14216
                  }
14217
              }
14218
            else
14219
              ce->value = RECUR (ce->value);
14220
          }
14221
 
14222
        if (need_copy_p)
14223
          {
14224
            VEC(constructor_elt,gc) *old_n = n;
14225
 
14226
            n = VEC_alloc (constructor_elt, gc, newlen);
14227
            FOR_EACH_VEC_ELT (constructor_elt, old_n, idx, ce)
14228
              {
14229
                if (TREE_CODE (ce->value) == TREE_VEC)
14230
                  {
14231
                    int i, len = TREE_VEC_LENGTH (ce->value);
14232
                    for (i = 0; i < len; ++i)
14233
                      CONSTRUCTOR_APPEND_ELT (n, 0,
14234
                                              TREE_VEC_ELT (ce->value, i));
14235
                  }
14236
                else
14237
                  CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
14238
              }
14239
          }
14240
 
14241
        r = build_constructor (init_list_type_node, n);
14242
        CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
14243
 
14244
        if (TREE_HAS_CONSTRUCTOR (t))
14245
          return finish_compound_literal (type, r, complain);
14246
 
14247
        TREE_TYPE (r) = type;
14248
        return r;
14249
      }
14250
 
14251
    case TYPEID_EXPR:
14252
      {
14253
        tree operand_0 = TREE_OPERAND (t, 0);
14254
        if (TYPE_P (operand_0))
14255
          {
14256
            operand_0 = tsubst (operand_0, args, complain, in_decl);
14257
            return get_typeid (operand_0);
14258
          }
14259
        else
14260
          {
14261
            operand_0 = RECUR (operand_0);
14262
            return build_typeid (operand_0);
14263
          }
14264
      }
14265
 
14266
    case VAR_DECL:
14267
      if (!args)
14268
        return t;
14269
      /* Fall through */
14270
 
14271
    case PARM_DECL:
14272
      {
14273
        tree r = tsubst_copy (t, args, complain, in_decl);
14274
 
14275
        if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
14276
          /* If the original type was a reference, we'll be wrapped in
14277
             the appropriate INDIRECT_REF.  */
14278
          r = convert_from_reference (r);
14279
        return r;
14280
      }
14281
 
14282
    case VA_ARG_EXPR:
14283
      return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
14284
                             tsubst (TREE_TYPE (t), args, complain, in_decl));
14285
 
14286
    case OFFSETOF_EXPR:
14287
      return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
14288
 
14289
    case TRAIT_EXPR:
14290
      {
14291
        tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
14292
                                  complain, in_decl);
14293
 
14294
        tree type2 = TRAIT_EXPR_TYPE2 (t);
14295
        if (type2)
14296
          type2 = tsubst_copy (type2, args, complain, in_decl);
14297
 
14298
        return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
14299
      }
14300
 
14301
    case STMT_EXPR:
14302
      {
14303
        tree old_stmt_expr = cur_stmt_expr;
14304
        tree stmt_expr = begin_stmt_expr ();
14305
 
14306
        cur_stmt_expr = stmt_expr;
14307
        tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
14308
                     integral_constant_expression_p);
14309
        stmt_expr = finish_stmt_expr (stmt_expr, false);
14310
        cur_stmt_expr = old_stmt_expr;
14311
 
14312
        /* If the resulting list of expression statement is empty,
14313
           fold it further into void_zero_node.  */
14314
        if (empty_expr_stmt_p (stmt_expr))
14315
          stmt_expr = void_zero_node;
14316
 
14317
        return stmt_expr;
14318
      }
14319
 
14320
    case CONST_DECL:
14321
      t = tsubst_copy (t, args, complain, in_decl);
14322
      /* As in finish_id_expression, we resolve enumeration constants
14323
         to their underlying values.  */
14324
      if (TREE_CODE (t) == CONST_DECL && !processing_template_decl)
14325
        {
14326
          used_types_insert (TREE_TYPE (t));
14327
          return DECL_INITIAL (t);
14328
        }
14329
      return t;
14330
 
14331
    case LAMBDA_EXPR:
14332
      {
14333
        tree r = build_lambda_expr ();
14334
 
14335
        tree type = tsubst (LAMBDA_EXPR_CLOSURE (t), args, complain, NULL_TREE);
14336
        LAMBDA_EXPR_CLOSURE (r) = type;
14337
        CLASSTYPE_LAMBDA_EXPR (type) = r;
14338
 
14339
        LAMBDA_EXPR_LOCATION (r)
14340
          = LAMBDA_EXPR_LOCATION (t);
14341
        LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
14342
          = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
14343
        LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
14344
        LAMBDA_EXPR_DISCRIMINATOR (r)
14345
          = (LAMBDA_EXPR_DISCRIMINATOR (t));
14346
        LAMBDA_EXPR_EXTRA_SCOPE (r)
14347
          = RECUR (LAMBDA_EXPR_EXTRA_SCOPE (t));
14348
        if (LAMBDA_EXPR_RETURN_TYPE (t) == dependent_lambda_return_type_node)
14349
          {
14350
            LAMBDA_EXPR_RETURN_TYPE (r) = dependent_lambda_return_type_node;
14351
            LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (r) = true;
14352
          }
14353
        else
14354
          LAMBDA_EXPR_RETURN_TYPE (r)
14355
            = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
14356
 
14357
        gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (t) == NULL_TREE
14358
                    && LAMBDA_EXPR_PENDING_PROXIES (t) == NULL);
14359
 
14360
        /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
14361
        determine_visibility (TYPE_NAME (type));
14362
        /* Now that we know visibility, instantiate the type so we have a
14363
           declaration of the op() for later calls to lambda_function.  */
14364
        complete_type (type);
14365
 
14366
        /* The capture list refers to closure members, so this needs to
14367
           wait until after we finish instantiating the type.  */
14368
        LAMBDA_EXPR_CAPTURE_LIST (r)
14369
          = RECUR (LAMBDA_EXPR_CAPTURE_LIST (t));
14370
 
14371
        return build_lambda_object (r);
14372
      }
14373
 
14374
    case TARGET_EXPR:
14375
      /* We can get here for a constant initializer of non-dependent type.
14376
         FIXME stop folding in cp_parser_initializer_clause.  */
14377
      gcc_assert (TREE_CONSTANT (t));
14378
      {
14379
        tree r = get_target_expr (RECUR (TARGET_EXPR_INITIAL (t)));
14380
        TREE_CONSTANT (r) = true;
14381
        return r;
14382
      }
14383
 
14384
    case TRANSACTION_EXPR:
14385
      return tsubst_expr(t, args, complain, in_decl,
14386
             integral_constant_expression_p);
14387
 
14388
    default:
14389
      /* Handle Objective-C++ constructs, if appropriate.  */
14390
      {
14391
        tree subst
14392
          = objcp_tsubst_copy_and_build (t, args, complain,
14393
                                         in_decl, /*function_p=*/false);
14394
        if (subst)
14395
          return subst;
14396
      }
14397
      return tsubst_copy (t, args, complain, in_decl);
14398
    }
14399
 
14400
#undef RECUR
14401
}
14402
 
14403
/* Verify that the instantiated ARGS are valid. For type arguments,
14404
   make sure that the type's linkage is ok. For non-type arguments,
14405
   make sure they are constants if they are integral or enumerations.
14406
   Emit an error under control of COMPLAIN, and return TRUE on error.  */
14407
 
14408
static bool
14409
check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
14410
{
14411
  if (ARGUMENT_PACK_P (t))
14412
    {
14413
      tree vec = ARGUMENT_PACK_ARGS (t);
14414
      int len = TREE_VEC_LENGTH (vec);
14415
      bool result = false;
14416
      int i;
14417
 
14418
      for (i = 0; i < len; ++i)
14419
        if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
14420
          result = true;
14421
      return result;
14422
    }
14423
  else if (TYPE_P (t))
14424
    {
14425
      /* [basic.link]: A name with no linkage (notably, the name
14426
         of a class or enumeration declared in a local scope)
14427
         shall not be used to declare an entity with linkage.
14428
         This implies that names with no linkage cannot be used as
14429
         template arguments
14430
 
14431
         DR 757 relaxes this restriction for C++0x.  */
14432
      tree nt = (cxx_dialect > cxx98 ? NULL_TREE
14433
                 : no_linkage_check (t, /*relaxed_p=*/false));
14434
 
14435
      if (nt)
14436
        {
14437
          /* DR 488 makes use of a type with no linkage cause
14438
             type deduction to fail.  */
14439
          if (complain & tf_error)
14440
            {
14441
              if (TYPE_ANONYMOUS_P (nt))
14442
                error ("%qT is/uses anonymous type", t);
14443
              else
14444
                error ("template argument for %qD uses local type %qT",
14445
                       tmpl, t);
14446
            }
14447
          return true;
14448
        }
14449
      /* In order to avoid all sorts of complications, we do not
14450
         allow variably-modified types as template arguments.  */
14451
      else if (variably_modified_type_p (t, NULL_TREE))
14452
        {
14453
          if (complain & tf_error)
14454
            error ("%qT is a variably modified type", t);
14455
          return true;
14456
        }
14457
    }
14458
  /* A non-type argument of integral or enumerated type must be a
14459
     constant.  */
14460
  else if (TREE_TYPE (t)
14461
           && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
14462
           && !TREE_CONSTANT (t))
14463
    {
14464
      if (complain & tf_error)
14465
        error ("integral expression %qE is not constant", t);
14466
      return true;
14467
    }
14468
  return false;
14469
}
14470
 
14471
static bool
14472
check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
14473
{
14474
  int ix, len = DECL_NTPARMS (tmpl);
14475
  bool result = false;
14476
 
14477
  for (ix = 0; ix != len; ix++)
14478
    {
14479
      if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
14480
        result = true;
14481
    }
14482
  if (result && (complain & tf_error))
14483
    error ("  trying to instantiate %qD", tmpl);
14484
  return result;
14485
}
14486
 
14487
/* In C++0x, it's possible to have a function template whose type depends
14488
   on itself recursively.  This is most obvious with decltype, but can also
14489
   occur with enumeration scope (c++/48969).  So we need to catch infinite
14490
   recursion and reject the substitution at deduction time; this function
14491
   will return error_mark_node for any repeated substitution.
14492
 
14493
   This also catches excessive recursion such as when f<N> depends on
14494
   f<N-1> across all integers, and returns error_mark_node for all the
14495
   substitutions back up to the initial one.
14496
 
14497
   This is, of course, not reentrant.  */
14498
 
14499
static tree
14500
deduction_tsubst_fntype (tree fn, tree targs, tsubst_flags_t complain)
14501
{
14502
  static bool excessive_deduction_depth;
14503
  static int deduction_depth;
14504
  struct pending_template *old_last_pend = last_pending_template;
14505
  struct tinst_level *old_error_tinst = last_error_tinst_level;
14506
 
14507
  tree fntype = TREE_TYPE (fn);
14508
  tree tinst;
14509
  tree r;
14510
 
14511
  if (excessive_deduction_depth)
14512
    return error_mark_node;
14513
 
14514
  tinst = build_tree_list (fn, targs);
14515
  if (!push_tinst_level (tinst))
14516
    {
14517
      excessive_deduction_depth = true;
14518
      ggc_free (tinst);
14519
      return error_mark_node;
14520
    }
14521
 
14522
  input_location = DECL_SOURCE_LOCATION (fn);
14523
  ++deduction_depth;
14524
  push_deduction_access_scope (fn);
14525
  r = tsubst (fntype, targs, complain, NULL_TREE);
14526
  pop_deduction_access_scope (fn);
14527
  --deduction_depth;
14528
 
14529
  if (excessive_deduction_depth)
14530
    {
14531
      r = error_mark_node;
14532
      if (deduction_depth == 0)
14533
        /* Reset once we're all the way out.  */
14534
        excessive_deduction_depth = false;
14535
    }
14536
 
14537
  pop_tinst_level ();
14538
  /* We can't free this if a pending_template entry or last_error_tinst_level
14539
     is pointing at it.  */
14540
  if (last_pending_template == old_last_pend
14541
      && last_error_tinst_level == old_error_tinst)
14542
    ggc_free (tinst);
14543
  return r;
14544
}
14545
 
14546
/* Instantiate the indicated variable or function template TMPL with
14547
   the template arguments in TARG_PTR.  */
14548
 
14549
static tree
14550
instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
14551
{
14552
  tree targ_ptr = orig_args;
14553
  tree fndecl;
14554
  tree gen_tmpl;
14555
  tree spec;
14556
 
14557
  if (tmpl == error_mark_node)
14558
    return error_mark_node;
14559
 
14560
  gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
14561
 
14562
  /* If this function is a clone, handle it specially.  */
14563
  if (DECL_CLONED_FUNCTION_P (tmpl))
14564
    {
14565
      tree spec;
14566
      tree clone;
14567
 
14568
      /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
14569
         DECL_CLONED_FUNCTION.  */
14570
      spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
14571
                                   targ_ptr, complain);
14572
      if (spec == error_mark_node)
14573
        return error_mark_node;
14574
 
14575
      /* Look for the clone.  */
14576
      FOR_EACH_CLONE (clone, spec)
14577
        if (DECL_NAME (clone) == DECL_NAME (tmpl))
14578
          return clone;
14579
      /* We should always have found the clone by now.  */
14580
      gcc_unreachable ();
14581
      return NULL_TREE;
14582
    }
14583
 
14584
  /* Check to see if we already have this specialization.  */
14585
  gen_tmpl = most_general_template (tmpl);
14586
  if (tmpl != gen_tmpl)
14587
    /* The TMPL is a partial instantiation.  To get a full set of
14588
       arguments we must add the arguments used to perform the
14589
       partial instantiation.  */
14590
    targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
14591
                                            targ_ptr);
14592
 
14593
  /* It would be nice to avoid hashing here and then again in tsubst_decl,
14594
     but it doesn't seem to be on the hot path.  */
14595
  spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
14596
 
14597
  gcc_assert (tmpl == gen_tmpl
14598
              || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
14599
                  == spec)
14600
              || fndecl == NULL_TREE);
14601
 
14602
  if (spec != NULL_TREE)
14603
    return spec;
14604
 
14605
  if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
14606
                               complain))
14607
    return error_mark_node;
14608
 
14609
  /* We are building a FUNCTION_DECL, during which the access of its
14610
     parameters and return types have to be checked.  However this
14611
     FUNCTION_DECL which is the desired context for access checking
14612
     is not built yet.  We solve this chicken-and-egg problem by
14613
     deferring all checks until we have the FUNCTION_DECL.  */
14614
  push_deferring_access_checks (dk_deferred);
14615
 
14616
  /* Instantiation of the function happens in the context of the function
14617
     template, not the context of the overload resolution we're doing.  */
14618
  push_to_top_level ();
14619
  if (DECL_CLASS_SCOPE_P (gen_tmpl))
14620
    {
14621
      tree ctx = tsubst (DECL_CONTEXT (gen_tmpl), targ_ptr,
14622
                         complain, gen_tmpl);
14623
      push_nested_class (ctx);
14624
    }
14625
  /* Substitute template parameters to obtain the specialization.  */
14626
  fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
14627
                   targ_ptr, complain, gen_tmpl);
14628
  if (DECL_CLASS_SCOPE_P (gen_tmpl))
14629
    pop_nested_class ();
14630
  pop_from_top_level ();
14631
 
14632
  if (fndecl == error_mark_node)
14633
    return error_mark_node;
14634
 
14635
  /* Now we know the specialization, compute access previously
14636
     deferred.  */
14637
  push_access_scope (fndecl);
14638
 
14639
  /* Some typedefs referenced from within the template code need to be access
14640
     checked at template instantiation time, i.e now. These types were
14641
     added to the template at parsing time. Let's get those and perfom
14642
     the acces checks then.  */
14643
  perform_typedefs_access_check (DECL_TEMPLATE_RESULT (tmpl), targ_ptr);
14644
  perform_deferred_access_checks ();
14645
  pop_access_scope (fndecl);
14646
  pop_deferring_access_checks ();
14647
 
14648
  /* The DECL_TI_TEMPLATE should always be the immediate parent
14649
     template, not the most general template.  */
14650
  DECL_TI_TEMPLATE (fndecl) = tmpl;
14651
 
14652
  /* If we've just instantiated the main entry point for a function,
14653
     instantiate all the alternate entry points as well.  We do this
14654
     by cloning the instantiation of the main entry point, not by
14655
     instantiating the template clones.  */
14656
  if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
14657
    clone_function_decl (fndecl, /*update_method_vec_p=*/0);
14658
 
14659
  return fndecl;
14660
}
14661
 
14662
/* Wrapper for instantiate_template_1.  */
14663
 
14664
tree
14665
instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
14666
{
14667
  tree ret;
14668
  timevar_push (TV_TEMPLATE_INST);
14669
  ret = instantiate_template_1 (tmpl, orig_args,  complain);
14670
  timevar_pop (TV_TEMPLATE_INST);
14671
  return ret;
14672
}
14673
 
14674
/* We're going to do deduction substitution on the type of TMPL, a function
14675
   template.  In C++11 mode, push into that access scope.  In C++03 mode,
14676
   disable access checking.  */
14677
 
14678
static void
14679
push_deduction_access_scope (tree tmpl)
14680
{
14681
  if (cxx_dialect >= cxx0x)
14682
    {
14683
      int ptd = processing_template_decl;
14684
      push_access_scope (DECL_TEMPLATE_RESULT (tmpl));
14685
      /* Preserve processing_template_decl across push_to_top_level.  */
14686
      if (ptd && !processing_template_decl)
14687
        ++processing_template_decl;
14688
    }
14689
  else
14690
    push_deferring_access_checks (dk_no_check);
14691
}
14692
 
14693
/* And pop back out.  */
14694
 
14695
static void
14696
pop_deduction_access_scope (tree tmpl)
14697
{
14698
  if (cxx_dialect >= cxx0x)
14699
    pop_access_scope (DECL_TEMPLATE_RESULT (tmpl));
14700
  else
14701
    pop_deferring_access_checks ();
14702
}
14703
 
14704
/* PARM is a template parameter pack for FN.  Returns true iff
14705
   PARM is used in a deducible way in the argument list of FN.  */
14706
 
14707
static bool
14708
pack_deducible_p (tree parm, tree fn)
14709
{
14710
  tree t = FUNCTION_FIRST_USER_PARMTYPE (fn);
14711
  for (; t; t = TREE_CHAIN (t))
14712
    {
14713
      tree type = TREE_VALUE (t);
14714
      tree packs;
14715
      if (!PACK_EXPANSION_P (type))
14716
        continue;
14717
      for (packs = PACK_EXPANSION_PARAMETER_PACKS (type);
14718
           packs; packs = TREE_CHAIN (packs))
14719
        if (TREE_VALUE (packs) == parm)
14720
          {
14721
            /* The template parameter pack is used in a function parameter
14722
               pack.  If this is the end of the parameter list, the
14723
               template parameter pack is deducible.  */
14724
            if (TREE_CHAIN (t) == void_list_node)
14725
              return true;
14726
            else
14727
              /* Otherwise, not.  Well, it could be deduced from
14728
                 a non-pack parameter, but doing so would end up with
14729
                 a deduction mismatch, so don't bother.  */
14730
              return false;
14731
          }
14732
    }
14733
  /* The template parameter pack isn't used in any function parameter
14734
     packs, but it might be used deeper, e.g. tuple<Args...>.  */
14735
  return true;
14736
}
14737
 
14738
/* The FN is a TEMPLATE_DECL for a function.  ARGS is an array with
14739
   NARGS elements of the arguments that are being used when calling
14740
   it.  TARGS is a vector into which the deduced template arguments
14741
   are placed.
14742
 
14743
   Return zero for success, 2 for an incomplete match that doesn't resolve
14744
   all the types, and 1 for complete failure.  An error message will be
14745
   printed only for an incomplete match.
14746
 
14747
   If FN is a conversion operator, or we are trying to produce a specific
14748
   specialization, RETURN_TYPE is the return type desired.
14749
 
14750
   The EXPLICIT_TARGS are explicit template arguments provided via a
14751
   template-id.
14752
 
14753
   The parameter STRICT is one of:
14754
 
14755
   DEDUCE_CALL:
14756
     We are deducing arguments for a function call, as in
14757
     [temp.deduct.call].
14758
 
14759
   DEDUCE_CONV:
14760
     We are deducing arguments for a conversion function, as in
14761
     [temp.deduct.conv].
14762
 
14763
   DEDUCE_EXACT:
14764
     We are deducing arguments when doing an explicit instantiation
14765
     as in [temp.explicit], when determining an explicit specialization
14766
     as in [temp.expl.spec], or when taking the address of a function
14767
     template, as in [temp.deduct.funcaddr].  */
14768
 
14769
int
14770
fn_type_unification (tree fn,
14771
                     tree explicit_targs,
14772
                     tree targs,
14773
                     const tree *args,
14774
                     unsigned int nargs,
14775
                     tree return_type,
14776
                     unification_kind_t strict,
14777
                     int flags,
14778
                     bool explain_p)
14779
{
14780
  tree parms;
14781
  tree fntype;
14782
  int result;
14783
 
14784
  gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
14785
 
14786
  fntype = TREE_TYPE (fn);
14787
  if (explicit_targs)
14788
    {
14789
      /* [temp.deduct]
14790
 
14791
         The specified template arguments must match the template
14792
         parameters in kind (i.e., type, nontype, template), and there
14793
         must not be more arguments than there are parameters;
14794
         otherwise type deduction fails.
14795
 
14796
         Nontype arguments must match the types of the corresponding
14797
         nontype template parameters, or must be convertible to the
14798
         types of the corresponding nontype parameters as specified in
14799
         _temp.arg.nontype_, otherwise type deduction fails.
14800
 
14801
         All references in the function type of the function template
14802
         to the corresponding template parameters are replaced by the
14803
         specified template argument values.  If a substitution in a
14804
         template parameter or in the function type of the function
14805
         template results in an invalid type, type deduction fails.  */
14806
      tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
14807
      int i, len = TREE_VEC_LENGTH (tparms);
14808
      tree converted_args;
14809
      bool incomplete = false;
14810
 
14811
      if (explicit_targs == error_mark_node)
14812
        return unify_invalid (explain_p);
14813
 
14814
      converted_args
14815
        = (coerce_template_parms (tparms, explicit_targs, NULL_TREE,
14816
                                  (explain_p
14817
                                   ? tf_warning_or_error
14818
                                   : tf_none),
14819
                                   /*require_all_args=*/false,
14820
                                   /*use_default_args=*/false));
14821
      if (converted_args == error_mark_node)
14822
        return 1;
14823
 
14824
      /* Substitute the explicit args into the function type.  This is
14825
         necessary so that, for instance, explicitly declared function
14826
         arguments can match null pointed constants.  If we were given
14827
         an incomplete set of explicit args, we must not do semantic
14828
         processing during substitution as we could create partial
14829
         instantiations.  */
14830
      for (i = 0; i < len; i++)
14831
        {
14832
          tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
14833
          bool parameter_pack = false;
14834
          tree targ = TREE_VEC_ELT (converted_args, i);
14835
 
14836
          /* Dig out the actual parm.  */
14837
          if (TREE_CODE (parm) == TYPE_DECL
14838
              || TREE_CODE (parm) == TEMPLATE_DECL)
14839
            {
14840
              parm = TREE_TYPE (parm);
14841
              parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
14842
            }
14843
          else if (TREE_CODE (parm) == PARM_DECL)
14844
            {
14845
              parm = DECL_INITIAL (parm);
14846
              parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
14847
            }
14848
 
14849
          if (!parameter_pack && targ == NULL_TREE)
14850
            /* No explicit argument for this template parameter.  */
14851
            incomplete = true;
14852
 
14853
          if (parameter_pack && pack_deducible_p (parm, fn))
14854
            {
14855
              /* Mark the argument pack as "incomplete". We could
14856
                 still deduce more arguments during unification.
14857
                 We remove this mark in type_unification_real.  */
14858
              if (targ)
14859
                {
14860
                  ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
14861
                  ARGUMENT_PACK_EXPLICIT_ARGS (targ)
14862
                    = ARGUMENT_PACK_ARGS (targ);
14863
                }
14864
 
14865
              /* We have some incomplete argument packs.  */
14866
              incomplete = true;
14867
            }
14868
        }
14869
 
14870
      processing_template_decl += incomplete;
14871
      fntype = deduction_tsubst_fntype (fn, converted_args,
14872
                                        (explain_p
14873
                                         ? tf_warning_or_error
14874
                                         : tf_none));
14875
      processing_template_decl -= incomplete;
14876
 
14877
      if (fntype == error_mark_node)
14878
        return 1;
14879
 
14880
      /* Place the explicitly specified arguments in TARGS.  */
14881
      for (i = NUM_TMPL_ARGS (converted_args); i--;)
14882
        TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
14883
    }
14884
 
14885
  /* Never do unification on the 'this' parameter.  */
14886
  parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
14887
 
14888
  if (return_type)
14889
    {
14890
      tree *new_args;
14891
 
14892
      parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
14893
      new_args = XALLOCAVEC (tree, nargs + 1);
14894
      new_args[0] = return_type;
14895
      memcpy (new_args + 1, args, nargs * sizeof (tree));
14896
      args = new_args;
14897
      ++nargs;
14898
    }
14899
 
14900
  /* We allow incomplete unification without an error message here
14901
     because the standard doesn't seem to explicitly prohibit it.  Our
14902
     callers must be ready to deal with unification failures in any
14903
     event.  */
14904
  result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
14905
                                  targs, parms, args, nargs, /*subr=*/0,
14906
                                  strict, flags, explain_p);
14907
 
14908
  /* Now that we have bindings for all of the template arguments,
14909
     ensure that the arguments deduced for the template template
14910
     parameters have compatible template parameter lists.  We cannot
14911
     check this property before we have deduced all template
14912
     arguments, because the template parameter types of a template
14913
     template parameter might depend on prior template parameters
14914
     deduced after the template template parameter.  The following
14915
     ill-formed example illustrates this issue:
14916
 
14917
       template<typename T, template<T> class C> void f(C<5>, T);
14918
 
14919
       template<int N> struct X {};
14920
 
14921
       void g() {
14922
         f(X<5>(), 5l); // error: template argument deduction fails
14923
       }
14924
 
14925
     The template parameter list of 'C' depends on the template type
14926
     parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
14927
     'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
14928
     time that we deduce 'C'.  */
14929
  if (result == 0
14930
      && !template_template_parm_bindings_ok_p
14931
           (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
14932
    return unify_inconsistent_template_template_parameters (explain_p);
14933
 
14934
  if (result == 0)
14935
    /* All is well so far.  Now, check:
14936
 
14937
       [temp.deduct]
14938
 
14939
       When all template arguments have been deduced, all uses of
14940
       template parameters in nondeduced contexts are replaced with
14941
       the corresponding deduced argument values.  If the
14942
       substitution results in an invalid type, as described above,
14943
       type deduction fails.  */
14944
    {
14945
      tree substed = deduction_tsubst_fntype (fn, targs,
14946
                                              (explain_p
14947
                                               ? tf_warning_or_error
14948
                                               : tf_none));
14949
      if (substed == error_mark_node)
14950
        return 1;
14951
 
14952
      /* If we're looking for an exact match, check that what we got
14953
         is indeed an exact match.  It might not be if some template
14954
         parameters are used in non-deduced contexts.  */
14955
      if (strict == DEDUCE_EXACT)
14956
        {
14957
          unsigned int i;
14958
 
14959
          tree sarg
14960
            = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (substed));
14961
          if (return_type)
14962
            sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
14963
          for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
14964
            if (!same_type_p (args[i], TREE_VALUE (sarg)))
14965
              return unify_type_mismatch (explain_p, args[i],
14966
                                          TREE_VALUE (sarg));
14967
        }
14968
    }
14969
 
14970
  return result;
14971
}
14972
 
14973
/* Adjust types before performing type deduction, as described in
14974
   [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
14975
   sections are symmetric.  PARM is the type of a function parameter
14976
   or the return type of the conversion function.  ARG is the type of
14977
   the argument passed to the call, or the type of the value
14978
   initialized with the result of the conversion function.
14979
   ARG_EXPR is the original argument expression, which may be null.  */
14980
 
14981
static int
14982
maybe_adjust_types_for_deduction (unification_kind_t strict,
14983
                                  tree* parm,
14984
                                  tree* arg,
14985
                                  tree arg_expr)
14986
{
14987
  int result = 0;
14988
 
14989
  switch (strict)
14990
    {
14991
    case DEDUCE_CALL:
14992
      break;
14993
 
14994
    case DEDUCE_CONV:
14995
      {
14996
        /* Swap PARM and ARG throughout the remainder of this
14997
           function; the handling is precisely symmetric since PARM
14998
           will initialize ARG rather than vice versa.  */
14999
        tree* temp = parm;
15000
        parm = arg;
15001
        arg = temp;
15002
        break;
15003
      }
15004
 
15005
    case DEDUCE_EXACT:
15006
      /* Core issue #873: Do the DR606 thing (see below) for these cases,
15007
         too, but here handle it by stripping the reference from PARM
15008
         rather than by adding it to ARG.  */
15009
      if (TREE_CODE (*parm) == REFERENCE_TYPE
15010
          && TYPE_REF_IS_RVALUE (*parm)
15011
          && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
15012
          && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
15013
          && TREE_CODE (*arg) == REFERENCE_TYPE
15014
          && !TYPE_REF_IS_RVALUE (*arg))
15015
        *parm = TREE_TYPE (*parm);
15016
      /* Nothing else to do in this case.  */
15017
      return 0;
15018
 
15019
    default:
15020
      gcc_unreachable ();
15021
    }
15022
 
15023
  if (TREE_CODE (*parm) != REFERENCE_TYPE)
15024
    {
15025
      /* [temp.deduct.call]
15026
 
15027
         If P is not a reference type:
15028
 
15029
         --If A is an array type, the pointer type produced by the
15030
         array-to-pointer standard conversion (_conv.array_) is
15031
         used in place of A for type deduction; otherwise,
15032
 
15033
         --If A is a function type, the pointer type produced by
15034
         the function-to-pointer standard conversion
15035
         (_conv.func_) is used in place of A for type deduction;
15036
         otherwise,
15037
 
15038
         --If A is a cv-qualified type, the top level
15039
         cv-qualifiers of A's type are ignored for type
15040
         deduction.  */
15041
      if (TREE_CODE (*arg) == ARRAY_TYPE)
15042
        *arg = build_pointer_type (TREE_TYPE (*arg));
15043
      else if (TREE_CODE (*arg) == FUNCTION_TYPE)
15044
        *arg = build_pointer_type (*arg);
15045
      else
15046
        *arg = TYPE_MAIN_VARIANT (*arg);
15047
    }
15048
 
15049
  /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
15050
     of the form T&&, where T is a template parameter, and the argument
15051
     is an lvalue, T is deduced as A& */
15052
  if (TREE_CODE (*parm) == REFERENCE_TYPE
15053
      && TYPE_REF_IS_RVALUE (*parm)
15054
      && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
15055
      && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
15056
      && (arg_expr ? real_lvalue_p (arg_expr)
15057
          /* try_one_overload doesn't provide an arg_expr, but
15058
             functions are always lvalues.  */
15059
          : TREE_CODE (*arg) == FUNCTION_TYPE))
15060
    *arg = build_reference_type (*arg);
15061
 
15062
  /* [temp.deduct.call]
15063
 
15064
     If P is a cv-qualified type, the top level cv-qualifiers
15065
     of P's type are ignored for type deduction.  If P is a
15066
     reference type, the type referred to by P is used for
15067
     type deduction.  */
15068
  *parm = TYPE_MAIN_VARIANT (*parm);
15069
  if (TREE_CODE (*parm) == REFERENCE_TYPE)
15070
    {
15071
      *parm = TREE_TYPE (*parm);
15072
      result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
15073
    }
15074
 
15075
  /* DR 322. For conversion deduction, remove a reference type on parm
15076
     too (which has been swapped into ARG).  */
15077
  if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
15078
    *arg = TREE_TYPE (*arg);
15079
 
15080
  return result;
15081
}
15082
 
15083
/* Subroutine of unify_one_argument.  PARM is a function parameter of a
15084
   template which does contain any deducible template parameters; check if
15085
   ARG is a suitable match for it.  STRICT, FLAGS and EXPLAIN_P are as in
15086
   unify_one_argument.  */
15087
 
15088
static int
15089
check_non_deducible_conversion (tree parm, tree arg, int strict,
15090
                                int flags, bool explain_p)
15091
{
15092
  tree type;
15093
 
15094
  if (!TYPE_P (arg))
15095
    type = TREE_TYPE (arg);
15096
  else
15097
    type = arg;
15098
 
15099
  if (same_type_p (parm, type))
15100
    return unify_success (explain_p);
15101
 
15102
  if (strict == DEDUCE_CONV)
15103
    {
15104
      if (can_convert_arg (type, parm, NULL_TREE, flags))
15105
        return unify_success (explain_p);
15106
    }
15107
  else if (strict != DEDUCE_EXACT)
15108
    {
15109
      if (can_convert_arg (parm, type,
15110
                           TYPE_P (arg) ? NULL_TREE : arg,
15111
                           flags))
15112
        return unify_success (explain_p);
15113
    }
15114
 
15115
  if (strict == DEDUCE_EXACT)
15116
    return unify_type_mismatch (explain_p, parm, arg);
15117
  else
15118
    return unify_arg_conversion (explain_p, parm, type, arg);
15119
}
15120
 
15121
/* Subroutine of type_unification_real and unify_pack_expansion to
15122
   handle unification of a single P/A pair.  Parameters are as
15123
   for those functions.  */
15124
 
15125
static int
15126
unify_one_argument (tree tparms, tree targs, tree parm, tree arg,
15127
                    int subr, unification_kind_t strict, int flags,
15128
                    bool explain_p)
15129
{
15130
  tree arg_expr = NULL_TREE;
15131
  int arg_strict;
15132
 
15133
  if (arg == error_mark_node || parm == error_mark_node)
15134
    return unify_invalid (explain_p);
15135
  if (arg == unknown_type_node)
15136
    /* We can't deduce anything from this, but we might get all the
15137
       template args from other function args.  */
15138
    return unify_success (explain_p);
15139
 
15140
  /* FIXME uses_deducible_template_parms */
15141
  if (TYPE_P (parm) && !uses_template_parms (parm))
15142
    return check_non_deducible_conversion (parm, arg, strict, flags,
15143
                                           explain_p);
15144
 
15145
  switch (strict)
15146
    {
15147
    case DEDUCE_CALL:
15148
      arg_strict = (UNIFY_ALLOW_OUTER_LEVEL
15149
                    | UNIFY_ALLOW_MORE_CV_QUAL
15150
                    | UNIFY_ALLOW_DERIVED);
15151
      break;
15152
 
15153
    case DEDUCE_CONV:
15154
      arg_strict = UNIFY_ALLOW_LESS_CV_QUAL;
15155
      break;
15156
 
15157
    case DEDUCE_EXACT:
15158
      arg_strict = UNIFY_ALLOW_NONE;
15159
      break;
15160
 
15161
    default:
15162
      gcc_unreachable ();
15163
    }
15164
 
15165
  /* We only do these transformations if this is the top-level
15166
     parameter_type_list in a call or declaration matching; in other
15167
     situations (nested function declarators, template argument lists) we
15168
     won't be comparing a type to an expression, and we don't do any type
15169
     adjustments.  */
15170
  if (!subr)
15171
    {
15172
      if (!TYPE_P (arg))
15173
        {
15174
          gcc_assert (TREE_TYPE (arg) != NULL_TREE);
15175
          if (type_unknown_p (arg))
15176
            {
15177
              /* [temp.deduct.type] A template-argument can be
15178
                 deduced from a pointer to function or pointer
15179
                 to member function argument if the set of
15180
                 overloaded functions does not contain function
15181
                 templates and at most one of a set of
15182
                 overloaded functions provides a unique
15183
                 match.  */
15184
 
15185
              if (resolve_overloaded_unification
15186
                  (tparms, targs, parm, arg, strict,
15187
                   arg_strict, explain_p))
15188
                return unify_success (explain_p);
15189
              return unify_overload_resolution_failure (explain_p, arg);
15190
            }
15191
 
15192
          arg_expr = arg;
15193
          arg = unlowered_expr_type (arg);
15194
          if (arg == error_mark_node)
15195
            return unify_invalid (explain_p);
15196
        }
15197
 
15198
      arg_strict |=
15199
        maybe_adjust_types_for_deduction (strict, &parm, &arg, arg_expr);
15200
    }
15201
  else
15202
    gcc_assert ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
15203
                == (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL));
15204
 
15205
  /* For deduction from an init-list we need the actual list.  */
15206
  if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
15207
    arg = arg_expr;
15208
  return unify (tparms, targs, parm, arg, arg_strict, explain_p);
15209
}
15210
 
15211
/* Most parms like fn_type_unification.
15212
 
15213
   If SUBR is 1, we're being called recursively (to unify the
15214
   arguments of a function or method parameter of a function
15215
   template). */
15216
 
15217
static int
15218
type_unification_real (tree tparms,
15219
                       tree targs,
15220
                       tree xparms,
15221
                       const tree *xargs,
15222
                       unsigned int xnargs,
15223
                       int subr,
15224
                       unification_kind_t strict,
15225
                       int flags,
15226
                       bool explain_p)
15227
{
15228
  tree parm, arg;
15229
  int i;
15230
  int ntparms = TREE_VEC_LENGTH (tparms);
15231
  int saw_undeduced = 0;
15232
  tree parms;
15233
  const tree *args;
15234
  unsigned int nargs;
15235
  unsigned int ia;
15236
 
15237
  gcc_assert (TREE_CODE (tparms) == TREE_VEC);
15238
  gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
15239
  gcc_assert (ntparms > 0);
15240
 
15241
  /* Reset the number of non-defaulted template arguments contained
15242
     in TARGS.  */
15243
  NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
15244
 
15245
 again:
15246
  parms = xparms;
15247
  args = xargs;
15248
  nargs = xnargs;
15249
 
15250
  ia = 0;
15251
  while (parms && parms != void_list_node
15252
         && ia < nargs)
15253
    {
15254
      parm = TREE_VALUE (parms);
15255
 
15256
      if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
15257
          && (!TREE_CHAIN (parms) || TREE_CHAIN (parms) == void_list_node))
15258
        /* For a function parameter pack that occurs at the end of the
15259
           parameter-declaration-list, the type A of each remaining
15260
           argument of the call is compared with the type P of the
15261
           declarator-id of the function parameter pack.  */
15262
        break;
15263
 
15264
      parms = TREE_CHAIN (parms);
15265
 
15266
      if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
15267
        /* For a function parameter pack that does not occur at the
15268
           end of the parameter-declaration-list, the type of the
15269
           parameter pack is a non-deduced context.  */
15270
        continue;
15271
 
15272
      arg = args[ia];
15273
      ++ia;
15274
 
15275
      if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
15276
                              flags, explain_p))
15277
        return 1;
15278
    }
15279
 
15280
  if (parms
15281
      && parms != void_list_node
15282
      && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
15283
    {
15284
      /* Unify the remaining arguments with the pack expansion type.  */
15285
      tree argvec;
15286
      tree parmvec = make_tree_vec (1);
15287
 
15288
      /* Allocate a TREE_VEC and copy in all of the arguments */
15289
      argvec = make_tree_vec (nargs - ia);
15290
      for (i = 0; ia < nargs; ++ia, ++i)
15291
        TREE_VEC_ELT (argvec, i) = args[ia];
15292
 
15293
      /* Copy the parameter into parmvec.  */
15294
      TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
15295
      if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
15296
                                /*subr=*/subr, explain_p))
15297
        return 1;
15298
 
15299
      /* Advance to the end of the list of parameters.  */
15300
      parms = TREE_CHAIN (parms);
15301
    }
15302
 
15303
  /* Fail if we've reached the end of the parm list, and more args
15304
     are present, and the parm list isn't variadic.  */
15305
  if (ia < nargs && parms == void_list_node)
15306
    return unify_too_many_arguments (explain_p, nargs, ia);
15307
  /* Fail if parms are left and they don't have default values.  */
15308
  if (parms && parms != void_list_node
15309
      && TREE_PURPOSE (parms) == NULL_TREE)
15310
    {
15311
      unsigned int count = nargs;
15312
      tree p = parms;
15313
      while (p && p != void_list_node)
15314
        {
15315
          count++;
15316
          p = TREE_CHAIN (p);
15317
        }
15318
      return unify_too_few_arguments (explain_p, ia, count);
15319
    }
15320
 
15321
  if (!subr)
15322
    {
15323
      tsubst_flags_t complain = (explain_p
15324
                                 ? tf_warning_or_error
15325
                                 : tf_none);
15326
 
15327
      /* Check to see if we need another pass before we start clearing
15328
         ARGUMENT_PACK_INCOMPLETE_P.  */
15329
      for (i = 0; i < ntparms; i++)
15330
        {
15331
          tree targ = TREE_VEC_ELT (targs, i);
15332
          tree tparm = TREE_VEC_ELT (tparms, i);
15333
 
15334
          if (targ || tparm == error_mark_node)
15335
            continue;
15336
          tparm = TREE_VALUE (tparm);
15337
 
15338
          /* If this is an undeduced nontype parameter that depends on
15339
             a type parameter, try another pass; its type may have been
15340
             deduced from a later argument than the one from which
15341
             this parameter can be deduced.  */
15342
          if (TREE_CODE (tparm) == PARM_DECL
15343
              && uses_template_parms (TREE_TYPE (tparm))
15344
              && !saw_undeduced++)
15345
            goto again;
15346
        }
15347
 
15348
      for (i = 0; i < ntparms; i++)
15349
        {
15350
          tree targ = TREE_VEC_ELT (targs, i);
15351
          tree tparm = TREE_VEC_ELT (tparms, i);
15352
 
15353
          /* Clear the "incomplete" flags on all argument packs now so that
15354
             substituting them into later default arguments works.  */
15355
          if (targ && ARGUMENT_PACK_P (targ))
15356
            {
15357
              ARGUMENT_PACK_INCOMPLETE_P (targ) = 0;
15358
              ARGUMENT_PACK_EXPLICIT_ARGS (targ) = NULL_TREE;
15359
            }
15360
 
15361
          if (targ || tparm == error_mark_node)
15362
            continue;
15363
          tparm = TREE_VALUE (tparm);
15364
 
15365
          /* Core issue #226 (C++0x) [temp.deduct]:
15366
 
15367
             If a template argument has not been deduced, its
15368
             default template argument, if any, is used.
15369
 
15370
             When we are in C++98 mode, TREE_PURPOSE will either
15371
             be NULL_TREE or ERROR_MARK_NODE, so we do not need
15372
             to explicitly check cxx_dialect here.  */
15373
          if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
15374
            {
15375
              tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
15376
              tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
15377
              location_t save_loc = input_location;
15378
              if (DECL_P (parm))
15379
                input_location = DECL_SOURCE_LOCATION (parm);
15380
              arg = tsubst_template_arg (arg, targs, complain, NULL_TREE);
15381
              arg = convert_template_argument (parm, arg, targs, complain,
15382
                                               i, NULL_TREE);
15383
              input_location = save_loc;
15384
              if (arg == error_mark_node)
15385
                return 1;
15386
              else
15387
                {
15388
                  TREE_VEC_ELT (targs, i) = arg;
15389
                  /* The position of the first default template argument,
15390
                     is also the number of non-defaulted arguments in TARGS.
15391
                     Record that.  */
15392
                  if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
15393
                    SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
15394
                  continue;
15395
                }
15396
            }
15397
 
15398
          /* If the type parameter is a parameter pack, then it will
15399
             be deduced to an empty parameter pack.  */
15400
          if (template_parameter_pack_p (tparm))
15401
            {
15402
              tree arg;
15403
 
15404
              if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
15405
                {
15406
                  arg = make_node (NONTYPE_ARGUMENT_PACK);
15407
                  TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
15408
                  TREE_CONSTANT (arg) = 1;
15409
                }
15410
              else
15411
                arg = cxx_make_type (TYPE_ARGUMENT_PACK);
15412
 
15413
              SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
15414
 
15415
              TREE_VEC_ELT (targs, i) = arg;
15416
              continue;
15417
            }
15418
 
15419
          return unify_parameter_deduction_failure (explain_p, tparm);
15420
        }
15421
    }
15422
#ifdef ENABLE_CHECKING
15423
  if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
15424
    SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
15425
#endif
15426
 
15427
  return unify_success (explain_p);
15428
}
15429
 
15430
/* Subroutine of type_unification_real.  Args are like the variables
15431
   at the call site.  ARG is an overloaded function (or template-id);
15432
   we try deducing template args from each of the overloads, and if
15433
   only one succeeds, we go with that.  Modifies TARGS and returns
15434
   true on success.  */
15435
 
15436
static bool
15437
resolve_overloaded_unification (tree tparms,
15438
                                tree targs,
15439
                                tree parm,
15440
                                tree arg,
15441
                                unification_kind_t strict,
15442
                                int sub_strict,
15443
                                bool explain_p)
15444
{
15445
  tree tempargs = copy_node (targs);
15446
  int good = 0;
15447
  tree goodfn = NULL_TREE;
15448
  bool addr_p;
15449
 
15450
  if (TREE_CODE (arg) == ADDR_EXPR)
15451
    {
15452
      arg = TREE_OPERAND (arg, 0);
15453
      addr_p = true;
15454
    }
15455
  else
15456
    addr_p = false;
15457
 
15458
  if (TREE_CODE (arg) == COMPONENT_REF)
15459
    /* Handle `&x' where `x' is some static or non-static member
15460
       function name.  */
15461
    arg = TREE_OPERAND (arg, 1);
15462
 
15463
  if (TREE_CODE (arg) == OFFSET_REF)
15464
    arg = TREE_OPERAND (arg, 1);
15465
 
15466
  /* Strip baselink information.  */
15467
  if (BASELINK_P (arg))
15468
    arg = BASELINK_FUNCTIONS (arg);
15469
 
15470
  if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
15471
    {
15472
      /* If we got some explicit template args, we need to plug them into
15473
         the affected templates before we try to unify, in case the
15474
         explicit args will completely resolve the templates in question.  */
15475
 
15476
      int ok = 0;
15477
      tree expl_subargs = TREE_OPERAND (arg, 1);
15478
      arg = TREE_OPERAND (arg, 0);
15479
 
15480
      for (; arg; arg = OVL_NEXT (arg))
15481
        {
15482
          tree fn = OVL_CURRENT (arg);
15483
          tree subargs, elem;
15484
 
15485
          if (TREE_CODE (fn) != TEMPLATE_DECL)
15486
            continue;
15487
 
15488
          ++processing_template_decl;
15489
          subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
15490
                                  expl_subargs, /*check_ret=*/false);
15491
          if (subargs && !any_dependent_template_arguments_p (subargs))
15492
            {
15493
              elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
15494
              if (try_one_overload (tparms, targs, tempargs, parm,
15495
                                    elem, strict, sub_strict, addr_p, explain_p)
15496
                  && (!goodfn || !same_type_p (goodfn, elem)))
15497
                {
15498
                  goodfn = elem;
15499
                  ++good;
15500
                }
15501
            }
15502
          else if (subargs)
15503
            ++ok;
15504
          --processing_template_decl;
15505
        }
15506
      /* If no templates (or more than one) are fully resolved by the
15507
         explicit arguments, this template-id is a non-deduced context; it
15508
         could still be OK if we deduce all template arguments for the
15509
         enclosing call through other arguments.  */
15510
      if (good != 1)
15511
        good = ok;
15512
    }
15513
  else if (TREE_CODE (arg) != OVERLOAD
15514
           && TREE_CODE (arg) != FUNCTION_DECL)
15515
    /* If ARG is, for example, "(0, &f)" then its type will be unknown
15516
       -- but the deduction does not succeed because the expression is
15517
       not just the function on its own.  */
15518
    return false;
15519
  else
15520
    for (; arg; arg = OVL_NEXT (arg))
15521
      if (try_one_overload (tparms, targs, tempargs, parm,
15522
                            TREE_TYPE (OVL_CURRENT (arg)),
15523
                            strict, sub_strict, addr_p, explain_p)
15524
          && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
15525
        {
15526
          goodfn = OVL_CURRENT (arg);
15527
          ++good;
15528
        }
15529
 
15530
  /* [temp.deduct.type] A template-argument can be deduced from a pointer
15531
     to function or pointer to member function argument if the set of
15532
     overloaded functions does not contain function templates and at most
15533
     one of a set of overloaded functions provides a unique match.
15534
 
15535
     So if we found multiple possibilities, we return success but don't
15536
     deduce anything.  */
15537
 
15538
  if (good == 1)
15539
    {
15540
      int i = TREE_VEC_LENGTH (targs);
15541
      for (; i--; )
15542
        if (TREE_VEC_ELT (tempargs, i))
15543
          TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
15544
    }
15545
  if (good)
15546
    return true;
15547
 
15548
  return false;
15549
}
15550
 
15551
/* Core DR 115: In contexts where deduction is done and fails, or in
15552
   contexts where deduction is not done, if a template argument list is
15553
   specified and it, along with any default template arguments, identifies
15554
   a single function template specialization, then the template-id is an
15555
   lvalue for the function template specialization.  */
15556
 
15557
tree
15558
resolve_nondeduced_context (tree orig_expr)
15559
{
15560
  tree expr, offset, baselink;
15561
  bool addr;
15562
 
15563
  if (!type_unknown_p (orig_expr))
15564
    return orig_expr;
15565
 
15566
  expr = orig_expr;
15567
  addr = false;
15568
  offset = NULL_TREE;
15569
  baselink = NULL_TREE;
15570
 
15571
  if (TREE_CODE (expr) == ADDR_EXPR)
15572
    {
15573
      expr = TREE_OPERAND (expr, 0);
15574
      addr = true;
15575
    }
15576
  if (TREE_CODE (expr) == OFFSET_REF)
15577
    {
15578
      offset = expr;
15579
      expr = TREE_OPERAND (expr, 1);
15580
    }
15581
  if (BASELINK_P (expr))
15582
    {
15583
      baselink = expr;
15584
      expr = BASELINK_FUNCTIONS (expr);
15585
    }
15586
 
15587
  if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
15588
    {
15589
      int good = 0;
15590
      tree goodfn = NULL_TREE;
15591
 
15592
      /* If we got some explicit template args, we need to plug them into
15593
         the affected templates before we try to unify, in case the
15594
         explicit args will completely resolve the templates in question.  */
15595
 
15596
      tree expl_subargs = TREE_OPERAND (expr, 1);
15597
      tree arg = TREE_OPERAND (expr, 0);
15598
      tree badfn = NULL_TREE;
15599
      tree badargs = NULL_TREE;
15600
 
15601
      for (; arg; arg = OVL_NEXT (arg))
15602
        {
15603
          tree fn = OVL_CURRENT (arg);
15604
          tree subargs, elem;
15605
 
15606
          if (TREE_CODE (fn) != TEMPLATE_DECL)
15607
            continue;
15608
 
15609
          ++processing_template_decl;
15610
          subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
15611
                                  expl_subargs, /*check_ret=*/false);
15612
          if (subargs && !any_dependent_template_arguments_p (subargs))
15613
            {
15614
              elem = instantiate_template (fn, subargs, tf_none);
15615
              if (elem == error_mark_node)
15616
                {
15617
                  badfn = fn;
15618
                  badargs = subargs;
15619
                }
15620
              else if (elem && (!goodfn || !decls_match (goodfn, elem)))
15621
                {
15622
                  goodfn = elem;
15623
                  ++good;
15624
                }
15625
            }
15626
          --processing_template_decl;
15627
        }
15628
      if (good == 1)
15629
        {
15630
          mark_used (goodfn);
15631
          expr = goodfn;
15632
          if (baselink)
15633
            expr = build_baselink (BASELINK_BINFO (baselink),
15634
                                   BASELINK_ACCESS_BINFO (baselink),
15635
                                   expr, BASELINK_OPTYPE (baselink));
15636
          if (offset)
15637
            {
15638
              tree base
15639
                = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
15640
              expr = build_offset_ref (base, expr, addr);
15641
            }
15642
          if (addr)
15643
            expr = cp_build_addr_expr (expr, tf_warning_or_error);
15644
          return expr;
15645
        }
15646
      else if (good == 0 && badargs)
15647
        /* There were no good options and at least one bad one, so let the
15648
           user know what the problem is.  */
15649
        instantiate_template (badfn, badargs, tf_warning_or_error);
15650
    }
15651
  return orig_expr;
15652
}
15653
 
15654
/* Subroutine of resolve_overloaded_unification; does deduction for a single
15655
   overload.  Fills TARGS with any deduced arguments, or error_mark_node if
15656
   different overloads deduce different arguments for a given parm.
15657
   ADDR_P is true if the expression for which deduction is being
15658
   performed was of the form "& fn" rather than simply "fn".
15659
 
15660
   Returns 1 on success.  */
15661
 
15662
static int
15663
try_one_overload (tree tparms,
15664
                  tree orig_targs,
15665
                  tree targs,
15666
                  tree parm,
15667
                  tree arg,
15668
                  unification_kind_t strict,
15669
                  int sub_strict,
15670
                  bool addr_p,
15671
                  bool explain_p)
15672
{
15673
  int nargs;
15674
  tree tempargs;
15675
  int i;
15676
 
15677
  /* [temp.deduct.type] A template-argument can be deduced from a pointer
15678
     to function or pointer to member function argument if the set of
15679
     overloaded functions does not contain function templates and at most
15680
     one of a set of overloaded functions provides a unique match.
15681
 
15682
     So if this is a template, just return success.  */
15683
 
15684
  if (uses_template_parms (arg))
15685
    return 1;
15686
 
15687
  if (TREE_CODE (arg) == METHOD_TYPE)
15688
    arg = build_ptrmemfunc_type (build_pointer_type (arg));
15689
  else if (addr_p)
15690
    arg = build_pointer_type (arg);
15691
 
15692
  sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
15693
 
15694
  /* We don't copy orig_targs for this because if we have already deduced
15695
     some template args from previous args, unify would complain when we
15696
     try to deduce a template parameter for the same argument, even though
15697
     there isn't really a conflict.  */
15698
  nargs = TREE_VEC_LENGTH (targs);
15699
  tempargs = make_tree_vec (nargs);
15700
 
15701
  if (unify (tparms, tempargs, parm, arg, sub_strict, explain_p))
15702
    return 0;
15703
 
15704
  /* First make sure we didn't deduce anything that conflicts with
15705
     explicitly specified args.  */
15706
  for (i = nargs; i--; )
15707
    {
15708
      tree elt = TREE_VEC_ELT (tempargs, i);
15709
      tree oldelt = TREE_VEC_ELT (orig_targs, i);
15710
 
15711
      if (!elt)
15712
        /*NOP*/;
15713
      else if (uses_template_parms (elt))
15714
        /* Since we're unifying against ourselves, we will fill in
15715
           template args used in the function parm list with our own
15716
           template parms.  Discard them.  */
15717
        TREE_VEC_ELT (tempargs, i) = NULL_TREE;
15718
      else if (oldelt && !template_args_equal (oldelt, elt))
15719
        return 0;
15720
    }
15721
 
15722
  for (i = nargs; i--; )
15723
    {
15724
      tree elt = TREE_VEC_ELT (tempargs, i);
15725
 
15726
      if (elt)
15727
        TREE_VEC_ELT (targs, i) = elt;
15728
    }
15729
 
15730
  return 1;
15731
}
15732
 
15733
/* PARM is a template class (perhaps with unbound template
15734
   parameters).  ARG is a fully instantiated type.  If ARG can be
15735
   bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
15736
   TARGS are as for unify.  */
15737
 
15738
static tree
15739
try_class_unification (tree tparms, tree targs, tree parm, tree arg,
15740
                       bool explain_p)
15741
{
15742
  tree copy_of_targs;
15743
 
15744
  if (!CLASSTYPE_TEMPLATE_INFO (arg)
15745
      || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
15746
          != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
15747
    return NULL_TREE;
15748
 
15749
  /* We need to make a new template argument vector for the call to
15750
     unify.  If we used TARGS, we'd clutter it up with the result of
15751
     the attempted unification, even if this class didn't work out.
15752
     We also don't want to commit ourselves to all the unifications
15753
     we've already done, since unification is supposed to be done on
15754
     an argument-by-argument basis.  In other words, consider the
15755
     following pathological case:
15756
 
15757
       template <int I, int J, int K>
15758
       struct S {};
15759
 
15760
       template <int I, int J>
15761
       struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
15762
 
15763
       template <int I, int J, int K>
15764
       void f(S<I, J, K>, S<I, I, I>);
15765
 
15766
       void g() {
15767
         S<0, 0, 0> s0;
15768
         S<0, 1, 2> s2;
15769
 
15770
         f(s0, s2);
15771
       }
15772
 
15773
     Now, by the time we consider the unification involving `s2', we
15774
     already know that we must have `f<0, 0, 0>'.  But, even though
15775
     `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
15776
     because there are two ways to unify base classes of S<0, 1, 2>
15777
     with S<I, I, I>.  If we kept the already deduced knowledge, we
15778
     would reject the possibility I=1.  */
15779
  copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
15780
 
15781
  /* If unification failed, we're done.  */
15782
  if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
15783
             CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE, explain_p))
15784
    return NULL_TREE;
15785
 
15786
  return arg;
15787
}
15788
 
15789
/* Given a template type PARM and a class type ARG, find the unique
15790
   base type in ARG that is an instance of PARM.  We do not examine
15791
   ARG itself; only its base-classes.  If there is not exactly one
15792
   appropriate base class, return NULL_TREE.  PARM may be the type of
15793
   a partial specialization, as well as a plain template type.  Used
15794
   by unify.  */
15795
 
15796
static enum template_base_result
15797
get_template_base (tree tparms, tree targs, tree parm, tree arg,
15798
                   bool explain_p, tree *result)
15799
{
15800
  tree rval = NULL_TREE;
15801
  tree binfo;
15802
 
15803
  gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
15804
 
15805
  binfo = TYPE_BINFO (complete_type (arg));
15806
  if (!binfo)
15807
    {
15808
      /* The type could not be completed.  */
15809
      *result = NULL_TREE;
15810
      return tbr_incomplete_type;
15811
    }
15812
 
15813
  /* Walk in inheritance graph order.  The search order is not
15814
     important, and this avoids multiple walks of virtual bases.  */
15815
  for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
15816
    {
15817
      tree r = try_class_unification (tparms, targs, parm,
15818
                                      BINFO_TYPE (binfo), explain_p);
15819
 
15820
      if (r)
15821
        {
15822
          /* If there is more than one satisfactory baseclass, then:
15823
 
15824
               [temp.deduct.call]
15825
 
15826
              If they yield more than one possible deduced A, the type
15827
              deduction fails.
15828
 
15829
             applies.  */
15830
          if (rval && !same_type_p (r, rval))
15831
            {
15832
              *result = NULL_TREE;
15833
              return tbr_ambiguous_baseclass;
15834
            }
15835
 
15836
          rval = r;
15837
        }
15838
    }
15839
 
15840
  *result = rval;
15841
  return tbr_success;
15842
}
15843
 
15844
/* Returns the level of DECL, which declares a template parameter.  */
15845
 
15846
static int
15847
template_decl_level (tree decl)
15848
{
15849
  switch (TREE_CODE (decl))
15850
    {
15851
    case TYPE_DECL:
15852
    case TEMPLATE_DECL:
15853
      return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
15854
 
15855
    case PARM_DECL:
15856
      return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
15857
 
15858
    default:
15859
      gcc_unreachable ();
15860
    }
15861
  return 0;
15862
}
15863
 
15864
/* Decide whether ARG can be unified with PARM, considering only the
15865
   cv-qualifiers of each type, given STRICT as documented for unify.
15866
   Returns nonzero iff the unification is OK on that basis.  */
15867
 
15868
static int
15869
check_cv_quals_for_unify (int strict, tree arg, tree parm)
15870
{
15871
  int arg_quals = cp_type_quals (arg);
15872
  int parm_quals = cp_type_quals (parm);
15873
 
15874
  if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15875
      && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
15876
    {
15877
      /*  Although a CVR qualifier is ignored when being applied to a
15878
          substituted template parameter ([8.3.2]/1 for example), that
15879
          does not allow us to unify "const T" with "int&" because both
15880
          types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
15881
          It is ok when we're allowing additional CV qualifiers
15882
          at the outer level [14.8.2.1]/3,1st bullet.  */
15883
      if ((TREE_CODE (arg) == REFERENCE_TYPE
15884
           || TREE_CODE (arg) == FUNCTION_TYPE
15885
           || TREE_CODE (arg) == METHOD_TYPE)
15886
          && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
15887
        return 0;
15888
 
15889
      if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
15890
          && (parm_quals & TYPE_QUAL_RESTRICT))
15891
        return 0;
15892
    }
15893
 
15894
  if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
15895
      && (arg_quals & parm_quals) != parm_quals)
15896
    return 0;
15897
 
15898
  if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
15899
      && (parm_quals & arg_quals) != arg_quals)
15900
    return 0;
15901
 
15902
  return 1;
15903
}
15904
 
15905
/* Determines the LEVEL and INDEX for the template parameter PARM.  */
15906
void
15907
template_parm_level_and_index (tree parm, int* level, int* index)
15908
{
15909
  if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15910
      || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
15911
      || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
15912
    {
15913
      *index = TEMPLATE_TYPE_IDX (parm);
15914
      *level = TEMPLATE_TYPE_LEVEL (parm);
15915
    }
15916
  else
15917
    {
15918
      *index = TEMPLATE_PARM_IDX (parm);
15919
      *level = TEMPLATE_PARM_LEVEL (parm);
15920
    }
15921
}
15922
 
15923
#define RECUR_AND_CHECK_FAILURE(TP, TA, P, A, S, EP)                    \
15924
  do {                                                                  \
15925
    if (unify (TP, TA, P, A, S, EP))                                    \
15926
      return 1;                                                         \
15927
  } while (0);
15928
 
15929
/* Unifies the remaining arguments in PACKED_ARGS with the pack
15930
   expansion at the end of PACKED_PARMS. Returns 0 if the type
15931
   deduction succeeds, 1 otherwise. STRICT is the same as in
15932
   unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
15933
   call argument list. We'll need to adjust the arguments to make them
15934
   types. SUBR tells us if this is from a recursive call to
15935
   type_unification_real, or for comparing two template argument
15936
   lists. */
15937
 
15938
static int
15939
unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
15940
                      tree packed_args, unification_kind_t strict,
15941
                      bool subr, bool explain_p)
15942
{
15943
  tree parm
15944
    = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
15945
  tree pattern = PACK_EXPANSION_PATTERN (parm);
15946
  tree pack, packs = NULL_TREE;
15947
  int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
15948
  int len = TREE_VEC_LENGTH (packed_args);
15949
 
15950
  /* Determine the parameter packs we will be deducing from the
15951
     pattern, and record their current deductions.  */
15952
  for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm);
15953
       pack; pack = TREE_CHAIN (pack))
15954
    {
15955
      tree parm_pack = TREE_VALUE (pack);
15956
      int idx, level;
15957
 
15958
      /* Determine the index and level of this parameter pack.  */
15959
      template_parm_level_and_index (parm_pack, &level, &idx);
15960
 
15961
      /* Keep track of the parameter packs and their corresponding
15962
         argument packs.  */
15963
      packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
15964
      TREE_TYPE (packs) = make_tree_vec (len - start);
15965
    }
15966
 
15967
  /* Loop through all of the arguments that have not yet been
15968
     unified and unify each with the pattern.  */
15969
  for (i = start; i < len; i++)
15970
    {
15971
      tree parm;
15972
      bool any_explicit = false;
15973
      tree arg = TREE_VEC_ELT (packed_args, i);
15974
 
15975
      /* For each parameter pack, set its TMPL_ARG to either NULL_TREE
15976
         or the element of its argument pack at the current index if
15977
         this argument was explicitly specified.  */
15978
      for (pack = packs; pack; pack = TREE_CHAIN (pack))
15979
        {
15980
          int idx, level;
15981
          tree arg, pargs;
15982
          template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
15983
 
15984
          arg = NULL_TREE;
15985
          if (TREE_VALUE (pack)
15986
              && (pargs = ARGUMENT_PACK_EXPLICIT_ARGS (TREE_VALUE (pack)))
15987
              && (i < TREE_VEC_LENGTH (pargs)))
15988
            {
15989
              any_explicit = true;
15990
              arg = TREE_VEC_ELT (pargs, i);
15991
            }
15992
          TMPL_ARG (targs, level, idx) = arg;
15993
        }
15994
 
15995
      /* If we had explicit template arguments, substitute them into the
15996
         pattern before deduction.  */
15997
      if (any_explicit)
15998
        {
15999
          /* Some arguments might still be unspecified or dependent.  */
16000
          bool dependent;
16001
          ++processing_template_decl;
16002
          dependent = any_dependent_template_arguments_p (targs);
16003
          if (!dependent)
16004
            --processing_template_decl;
16005
          parm = tsubst (pattern, targs,
16006
                         explain_p ? tf_warning_or_error : tf_none,
16007
                         NULL_TREE);
16008
          if (dependent)
16009
            --processing_template_decl;
16010
          if (parm == error_mark_node)
16011
            return 1;
16012
        }
16013
      else
16014
        parm = pattern;
16015
 
16016
      /* Unify the pattern with the current argument.  */
16017
      if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
16018
                              LOOKUP_IMPLICIT, explain_p))
16019
        return 1;
16020
 
16021
      /* For each parameter pack, collect the deduced value.  */
16022
      for (pack = packs; pack; pack = TREE_CHAIN (pack))
16023
        {
16024
          int idx, level;
16025
          template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
16026
 
16027
          TREE_VEC_ELT (TREE_TYPE (pack), i - start) =
16028
            TMPL_ARG (targs, level, idx);
16029
        }
16030
    }
16031
 
16032
  /* Verify that the results of unification with the parameter packs
16033
     produce results consistent with what we've seen before, and make
16034
     the deduced argument packs available.  */
16035
  for (pack = packs; pack; pack = TREE_CHAIN (pack))
16036
    {
16037
      tree old_pack = TREE_VALUE (pack);
16038
      tree new_args = TREE_TYPE (pack);
16039
      int i, len = TREE_VEC_LENGTH (new_args);
16040
      int idx, level;
16041
      bool nondeduced_p = false;
16042
 
16043
      /* By default keep the original deduced argument pack.
16044
         If necessary, more specific code is going to update the
16045
         resulting deduced argument later down in this function.  */
16046
      template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
16047
      TMPL_ARG (targs, level, idx) = old_pack;
16048
 
16049
      /* If NEW_ARGS contains any NULL_TREE entries, we didn't
16050
         actually deduce anything.  */
16051
      for (i = 0; i < len && !nondeduced_p; ++i)
16052
        if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
16053
          nondeduced_p = true;
16054
      if (nondeduced_p)
16055
        continue;
16056
 
16057
      if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
16058
        {
16059
          /* If we had fewer function args than explicit template args,
16060
             just use the explicits.  */
16061
          tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
16062
          int explicit_len = TREE_VEC_LENGTH (explicit_args);
16063
          if (len < explicit_len)
16064
            new_args = explicit_args;
16065
        }
16066
 
16067
      if (!old_pack)
16068
        {
16069
          tree result;
16070
          /* Build the deduced *_ARGUMENT_PACK.  */
16071
          if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
16072
            {
16073
              result = make_node (NONTYPE_ARGUMENT_PACK);
16074
              TREE_TYPE (result) =
16075
                TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
16076
              TREE_CONSTANT (result) = 1;
16077
            }
16078
          else
16079
            result = cxx_make_type (TYPE_ARGUMENT_PACK);
16080
 
16081
          SET_ARGUMENT_PACK_ARGS (result, new_args);
16082
 
16083
          /* Note the deduced argument packs for this parameter
16084
             pack.  */
16085
          TMPL_ARG (targs, level, idx) = result;
16086
        }
16087
      else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
16088
               && (ARGUMENT_PACK_ARGS (old_pack)
16089
                   == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
16090
        {
16091
          /* We only had the explicitly-provided arguments before, but
16092
             now we have a complete set of arguments.  */
16093
          tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
16094
 
16095
          SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
16096
          ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
16097
          ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
16098
        }
16099
      else
16100
        {
16101
          tree bad_old_arg = NULL_TREE, bad_new_arg = NULL_TREE;
16102
          tree old_args = ARGUMENT_PACK_ARGS (old_pack);
16103
 
16104
          if (!comp_template_args_with_info (old_args, new_args,
16105
                                             &bad_old_arg, &bad_new_arg))
16106
            /* Inconsistent unification of this parameter pack.  */
16107
            return unify_parameter_pack_inconsistent (explain_p,
16108
                                                      bad_old_arg,
16109
                                                      bad_new_arg);
16110
        }
16111
    }
16112
 
16113
  return unify_success (explain_p);
16114
}
16115
 
16116
/* Deduce the value of template parameters.  TPARMS is the (innermost)
16117
   set of template parameters to a template.  TARGS is the bindings
16118
   for those template parameters, as determined thus far; TARGS may
16119
   include template arguments for outer levels of template parameters
16120
   as well.  PARM is a parameter to a template function, or a
16121
   subcomponent of that parameter; ARG is the corresponding argument.
16122
   This function attempts to match PARM with ARG in a manner
16123
   consistent with the existing assignments in TARGS.  If more values
16124
   are deduced, then TARGS is updated.
16125
 
16126
   Returns 0 if the type deduction succeeds, 1 otherwise.  The
16127
   parameter STRICT is a bitwise or of the following flags:
16128
 
16129
     UNIFY_ALLOW_NONE:
16130
       Require an exact match between PARM and ARG.
16131
     UNIFY_ALLOW_MORE_CV_QUAL:
16132
       Allow the deduced ARG to be more cv-qualified (by qualification
16133
       conversion) than ARG.
16134
     UNIFY_ALLOW_LESS_CV_QUAL:
16135
       Allow the deduced ARG to be less cv-qualified than ARG.
16136
     UNIFY_ALLOW_DERIVED:
16137
       Allow the deduced ARG to be a template base class of ARG,
16138
       or a pointer to a template base class of the type pointed to by
16139
       ARG.
16140
     UNIFY_ALLOW_INTEGER:
16141
       Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
16142
       case for more information.
16143
     UNIFY_ALLOW_OUTER_LEVEL:
16144
       This is the outermost level of a deduction. Used to determine validity
16145
       of qualification conversions. A valid qualification conversion must
16146
       have const qualified pointers leading up to the inner type which
16147
       requires additional CV quals, except at the outer level, where const
16148
       is not required [conv.qual]. It would be normal to set this flag in
16149
       addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
16150
     UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
16151
       This is the outermost level of a deduction, and PARM can be more CV
16152
       qualified at this point.
16153
     UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
16154
       This is the outermost level of a deduction, and PARM can be less CV
16155
       qualified at this point.  */
16156
 
16157
static int
16158
unify (tree tparms, tree targs, tree parm, tree arg, int strict,
16159
       bool explain_p)
16160
{
16161
  int idx;
16162
  tree targ;
16163
  tree tparm;
16164
  int strict_in = strict;
16165
 
16166
  /* I don't think this will do the right thing with respect to types.
16167
     But the only case I've seen it in so far has been array bounds, where
16168
     signedness is the only information lost, and I think that will be
16169
     okay.  */
16170
  while (TREE_CODE (parm) == NOP_EXPR)
16171
    parm = TREE_OPERAND (parm, 0);
16172
 
16173
  if (arg == error_mark_node)
16174
    return unify_invalid (explain_p);
16175
  if (arg == unknown_type_node
16176
      || arg == init_list_type_node)
16177
    /* We can't deduce anything from this, but we might get all the
16178
       template args from other function args.  */
16179
    return unify_success (explain_p);
16180
 
16181
  /* If PARM uses template parameters, then we can't bail out here,
16182
     even if ARG == PARM, since we won't record unifications for the
16183
     template parameters.  We might need them if we're trying to
16184
     figure out which of two things is more specialized.  */
16185
  if (arg == parm && !uses_template_parms (parm))
16186
    return unify_success (explain_p);
16187
 
16188
  /* Handle init lists early, so the rest of the function can assume
16189
     we're dealing with a type. */
16190
  if (BRACE_ENCLOSED_INITIALIZER_P (arg))
16191
    {
16192
      tree elt, elttype;
16193
      unsigned i;
16194
      tree orig_parm = parm;
16195
 
16196
      /* Replace T with std::initializer_list<T> for deduction.  */
16197
      if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
16198
          && flag_deduce_init_list)
16199
        parm = listify (parm);
16200
 
16201
      if (!is_std_init_list (parm))
16202
        /* We can only deduce from an initializer list argument if the
16203
           parameter is std::initializer_list; otherwise this is a
16204
           non-deduced context. */
16205
        return unify_success (explain_p);
16206
 
16207
      elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
16208
 
16209
      FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
16210
        {
16211
          int elt_strict = strict;
16212
 
16213
          if (elt == error_mark_node)
16214
            return unify_invalid (explain_p);
16215
 
16216
          if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
16217
            {
16218
              tree type = TREE_TYPE (elt);
16219
              /* It should only be possible to get here for a call.  */
16220
              gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
16221
              elt_strict |= maybe_adjust_types_for_deduction
16222
                (DEDUCE_CALL, &elttype, &type, elt);
16223
              elt = type;
16224
            }
16225
 
16226
          RECUR_AND_CHECK_FAILURE (tparms, targs, elttype, elt, elt_strict,
16227
                                   explain_p);
16228
        }
16229
 
16230
      /* If the std::initializer_list<T> deduction worked, replace the
16231
         deduced A with std::initializer_list<A>.  */
16232
      if (orig_parm != parm)
16233
        {
16234
          idx = TEMPLATE_TYPE_IDX (orig_parm);
16235
          targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16236
          targ = listify (targ);
16237
          TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
16238
        }
16239
      return unify_success (explain_p);
16240
    }
16241
 
16242
  /* Immediately reject some pairs that won't unify because of
16243
     cv-qualification mismatches.  */
16244
  if (TREE_CODE (arg) == TREE_CODE (parm)
16245
      && TYPE_P (arg)
16246
      /* It is the elements of the array which hold the cv quals of an array
16247
         type, and the elements might be template type parms. We'll check
16248
         when we recurse.  */
16249
      && TREE_CODE (arg) != ARRAY_TYPE
16250
      /* We check the cv-qualifiers when unifying with template type
16251
         parameters below.  We want to allow ARG `const T' to unify with
16252
         PARM `T' for example, when computing which of two templates
16253
         is more specialized, for example.  */
16254
      && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
16255
      && !check_cv_quals_for_unify (strict_in, arg, parm))
16256
    return unify_cv_qual_mismatch (explain_p, parm, arg);
16257
 
16258
  if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
16259
      && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
16260
    strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
16261
  strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
16262
  strict &= ~UNIFY_ALLOW_DERIVED;
16263
  strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
16264
  strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
16265
 
16266
  switch (TREE_CODE (parm))
16267
    {
16268
    case TYPENAME_TYPE:
16269
    case SCOPE_REF:
16270
    case UNBOUND_CLASS_TEMPLATE:
16271
      /* In a type which contains a nested-name-specifier, template
16272
         argument values cannot be deduced for template parameters used
16273
         within the nested-name-specifier.  */
16274
      return unify_success (explain_p);
16275
 
16276
    case TEMPLATE_TYPE_PARM:
16277
    case TEMPLATE_TEMPLATE_PARM:
16278
    case BOUND_TEMPLATE_TEMPLATE_PARM:
16279
      tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
16280
      if (tparm == error_mark_node)
16281
        return unify_invalid (explain_p);
16282
 
16283
      if (TEMPLATE_TYPE_LEVEL (parm)
16284
          != template_decl_level (tparm))
16285
        /* The PARM is not one we're trying to unify.  Just check
16286
           to see if it matches ARG.  */
16287
        {
16288
          if (TREE_CODE (arg) == TREE_CODE (parm)
16289
              && same_type_p (parm, arg))
16290
            return unify_success (explain_p);
16291
          else
16292
            return unify_type_mismatch (explain_p, parm, arg);
16293
        }
16294
      idx = TEMPLATE_TYPE_IDX (parm);
16295
      targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16296
      tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
16297
      if (tparm == error_mark_node)
16298
        return unify_invalid (explain_p);
16299
 
16300
      /* Check for mixed types and values.  */
16301
      if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
16302
           && TREE_CODE (tparm) != TYPE_DECL)
16303
          || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
16304
              && TREE_CODE (tparm) != TEMPLATE_DECL))
16305
        gcc_unreachable ();
16306
 
16307
      if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
16308
        {
16309
          /* ARG must be constructed from a template class or a template
16310
             template parameter.  */
16311
          if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
16312
              && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
16313
            return unify_template_deduction_failure (explain_p, parm, arg);
16314
 
16315
          {
16316
            tree parmvec = TYPE_TI_ARGS (parm);
16317
            tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
16318
            tree full_argvec = add_to_template_args (targs, argvec);
16319
            tree parm_parms
16320
              = DECL_INNERMOST_TEMPLATE_PARMS
16321
                  (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
16322
            int i, len;
16323
            int parm_variadic_p = 0;
16324
 
16325
            /* The resolution to DR150 makes clear that default
16326
               arguments for an N-argument may not be used to bind T
16327
               to a template template parameter with fewer than N
16328
               parameters.  It is not safe to permit the binding of
16329
               default arguments as an extension, as that may change
16330
               the meaning of a conforming program.  Consider:
16331
 
16332
                  struct Dense { static const unsigned int dim = 1; };
16333
 
16334
                  template <template <typename> class View,
16335
                            typename Block>
16336
                  void operator+(float, View<Block> const&);
16337
 
16338
                  template <typename Block,
16339
                            unsigned int Dim = Block::dim>
16340
                  struct Lvalue_proxy { operator float() const; };
16341
 
16342
                  void
16343
                  test_1d (void) {
16344
                    Lvalue_proxy<Dense> p;
16345
                    float b;
16346
                    b + p;
16347
                  }
16348
 
16349
              Here, if Lvalue_proxy is permitted to bind to View, then
16350
              the global operator+ will be used; if they are not, the
16351
              Lvalue_proxy will be converted to float.  */
16352
            if (coerce_template_parms (parm_parms,
16353
                                       full_argvec,
16354
                                       TYPE_TI_TEMPLATE (parm),
16355
                                       (explain_p
16356
                                        ? tf_warning_or_error
16357
                                        : tf_none),
16358
                                       /*require_all_args=*/true,
16359
                                       /*use_default_args=*/false)
16360
                == error_mark_node)
16361
              return 1;
16362
 
16363
            /* Deduce arguments T, i from TT<T> or TT<i>.
16364
               We check each element of PARMVEC and ARGVEC individually
16365
               rather than the whole TREE_VEC since they can have
16366
               different number of elements.  */
16367
 
16368
            parmvec = expand_template_argument_pack (parmvec);
16369
            argvec = expand_template_argument_pack (argvec);
16370
 
16371
            len = TREE_VEC_LENGTH (parmvec);
16372
 
16373
            /* Check if the parameters end in a pack, making them
16374
               variadic.  */
16375
            if (len > 0
16376
                && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
16377
              parm_variadic_p = 1;
16378
 
16379
            if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
16380
              return unify_too_few_arguments (explain_p,
16381
                                              TREE_VEC_LENGTH (argvec), len);
16382
 
16383
             for (i = 0; i < len - parm_variadic_p; ++i)
16384
              {
16385
                RECUR_AND_CHECK_FAILURE (tparms, targs,
16386
                                         TREE_VEC_ELT (parmvec, i),
16387
                                         TREE_VEC_ELT (argvec, i),
16388
                                         UNIFY_ALLOW_NONE, explain_p);
16389
              }
16390
 
16391
            if (parm_variadic_p
16392
                && unify_pack_expansion (tparms, targs,
16393
                                         parmvec, argvec,
16394
                                         DEDUCE_EXACT,
16395
                                         /*subr=*/true, explain_p))
16396
              return 1;
16397
          }
16398
          arg = TYPE_TI_TEMPLATE (arg);
16399
 
16400
          /* Fall through to deduce template name.  */
16401
        }
16402
 
16403
      if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
16404
          || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
16405
        {
16406
          /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
16407
 
16408
          /* Simple cases: Value already set, does match or doesn't.  */
16409
          if (targ != NULL_TREE && template_args_equal (targ, arg))
16410
            return unify_success (explain_p);
16411
          else if (targ)
16412
            return unify_inconsistency (explain_p, parm, targ, arg);
16413
        }
16414
      else
16415
        {
16416
          /* If PARM is `const T' and ARG is only `int', we don't have
16417
             a match unless we are allowing additional qualification.
16418
             If ARG is `const int' and PARM is just `T' that's OK;
16419
             that binds `const int' to `T'.  */
16420
          if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
16421
                                         arg, parm))
16422
            return unify_cv_qual_mismatch (explain_p, parm, arg);
16423
 
16424
          /* Consider the case where ARG is `const volatile int' and
16425
             PARM is `const T'.  Then, T should be `volatile int'.  */
16426
          arg = cp_build_qualified_type_real
16427
            (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
16428
          if (arg == error_mark_node)
16429
            return unify_invalid (explain_p);
16430
 
16431
          /* Simple cases: Value already set, does match or doesn't.  */
16432
          if (targ != NULL_TREE && same_type_p (targ, arg))
16433
            return unify_success (explain_p);
16434
          else if (targ)
16435
            return unify_inconsistency (explain_p, parm, targ, arg);
16436
 
16437
          /* Make sure that ARG is not a variable-sized array.  (Note
16438
             that were talking about variable-sized arrays (like
16439
             `int[n]'), rather than arrays of unknown size (like
16440
             `int[]').)  We'll get very confused by such a type since
16441
             the bound of the array is not constant, and therefore
16442
             not mangleable.  Besides, such types are not allowed in
16443
             ISO C++, so we can do as we please here.  We do allow
16444
             them for 'auto' deduction, since that isn't ABI-exposed.  */
16445
          if (!is_auto (parm) && variably_modified_type_p (arg, NULL_TREE))
16446
            return unify_vla_arg (explain_p, arg);
16447
 
16448
          /* Strip typedefs as in convert_template_argument.  */
16449
          arg = canonicalize_type_argument (arg, tf_none);
16450
        }
16451
 
16452
      /* If ARG is a parameter pack or an expansion, we cannot unify
16453
         against it unless PARM is also a parameter pack.  */
16454
      if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
16455
          && !template_parameter_pack_p (parm))
16456
        return unify_parameter_pack_mismatch (explain_p, parm, arg);
16457
 
16458
      /* If the argument deduction results is a METHOD_TYPE,
16459
         then there is a problem.
16460
         METHOD_TYPE doesn't map to any real C++ type the result of
16461
         the deduction can not be of that type.  */
16462
      if (TREE_CODE (arg) == METHOD_TYPE)
16463
        return unify_method_type_error (explain_p, arg);
16464
 
16465
      TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
16466
      return unify_success (explain_p);
16467
 
16468
    case TEMPLATE_PARM_INDEX:
16469
      tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
16470
      if (tparm == error_mark_node)
16471
        return unify_invalid (explain_p);
16472
 
16473
      if (TEMPLATE_PARM_LEVEL (parm)
16474
          != template_decl_level (tparm))
16475
        {
16476
          /* The PARM is not one we're trying to unify.  Just check
16477
             to see if it matches ARG.  */
16478
          int result = !(TREE_CODE (arg) == TREE_CODE (parm)
16479
                         && cp_tree_equal (parm, arg));
16480
          if (result)
16481
            unify_expression_unequal (explain_p, parm, arg);
16482
          return result;
16483
        }
16484
 
16485
      idx = TEMPLATE_PARM_IDX (parm);
16486
      targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
16487
 
16488
      if (targ)
16489
        {
16490
          int x = !cp_tree_equal (targ, arg);
16491
          if (x)
16492
            unify_inconsistency (explain_p, parm, targ, arg);
16493
          return x;
16494
        }
16495
 
16496
      /* [temp.deduct.type] If, in the declaration of a function template
16497
         with a non-type template-parameter, the non-type
16498
         template-parameter is used in an expression in the function
16499
         parameter-list and, if the corresponding template-argument is
16500
         deduced, the template-argument type shall match the type of the
16501
         template-parameter exactly, except that a template-argument
16502
         deduced from an array bound may be of any integral type.
16503
         The non-type parameter might use already deduced type parameters.  */
16504
      tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
16505
      if (!TREE_TYPE (arg))
16506
        /* Template-parameter dependent expression.  Just accept it for now.
16507
           It will later be processed in convert_template_argument.  */
16508
        ;
16509
      else if (same_type_p (TREE_TYPE (arg), tparm))
16510
        /* OK */;
16511
      else if ((strict & UNIFY_ALLOW_INTEGER)
16512
               && (TREE_CODE (tparm) == INTEGER_TYPE
16513
                   || TREE_CODE (tparm) == BOOLEAN_TYPE))
16514
        /* Convert the ARG to the type of PARM; the deduced non-type
16515
           template argument must exactly match the types of the
16516
           corresponding parameter.  */
16517
        arg = fold (build_nop (tparm, arg));
16518
      else if (uses_template_parms (tparm))
16519
        /* We haven't deduced the type of this parameter yet.  Try again
16520
           later.  */
16521
        return unify_success (explain_p);
16522
      else
16523
        return unify_type_mismatch (explain_p, tparm, arg);
16524
 
16525
      /* If ARG is a parameter pack or an expansion, we cannot unify
16526
         against it unless PARM is also a parameter pack.  */
16527
      if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
16528
          && !TEMPLATE_PARM_PARAMETER_PACK (parm))
16529
        return unify_parameter_pack_mismatch (explain_p, parm, arg);
16530
 
16531
      TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
16532
      return unify_success (explain_p);
16533
 
16534
    case PTRMEM_CST:
16535
     {
16536
        /* A pointer-to-member constant can be unified only with
16537
         another constant.  */
16538
      if (TREE_CODE (arg) != PTRMEM_CST)
16539
        return unify_ptrmem_cst_mismatch (explain_p, parm, arg);
16540
 
16541
      /* Just unify the class member. It would be useless (and possibly
16542
         wrong, depending on the strict flags) to unify also
16543
         PTRMEM_CST_CLASS, because we want to be sure that both parm and
16544
         arg refer to the same variable, even if through different
16545
         classes. For instance:
16546
 
16547
         struct A { int x; };
16548
         struct B : A { };
16549
 
16550
         Unification of &A::x and &B::x must succeed.  */
16551
      return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
16552
                    PTRMEM_CST_MEMBER (arg), strict, explain_p);
16553
     }
16554
 
16555
    case POINTER_TYPE:
16556
      {
16557
        if (TREE_CODE (arg) != POINTER_TYPE)
16558
          return unify_type_mismatch (explain_p, parm, arg);
16559
 
16560
        /* [temp.deduct.call]
16561
 
16562
           A can be another pointer or pointer to member type that can
16563
           be converted to the deduced A via a qualification
16564
           conversion (_conv.qual_).
16565
 
16566
           We pass down STRICT here rather than UNIFY_ALLOW_NONE.
16567
           This will allow for additional cv-qualification of the
16568
           pointed-to types if appropriate.  */
16569
 
16570
        if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
16571
          /* The derived-to-base conversion only persists through one
16572
             level of pointers.  */
16573
          strict |= (strict_in & UNIFY_ALLOW_DERIVED);
16574
 
16575
        return unify (tparms, targs, TREE_TYPE (parm),
16576
                      TREE_TYPE (arg), strict, explain_p);
16577
      }
16578
 
16579
    case REFERENCE_TYPE:
16580
      if (TREE_CODE (arg) != REFERENCE_TYPE)
16581
        return unify_type_mismatch (explain_p, parm, arg);
16582
      return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16583
                    strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
16584
 
16585
    case ARRAY_TYPE:
16586
      if (TREE_CODE (arg) != ARRAY_TYPE)
16587
        return unify_type_mismatch (explain_p, parm, arg);
16588
      if ((TYPE_DOMAIN (parm) == NULL_TREE)
16589
          != (TYPE_DOMAIN (arg) == NULL_TREE))
16590
        return unify_type_mismatch (explain_p, parm, arg);
16591
      if (TYPE_DOMAIN (parm) != NULL_TREE)
16592
        {
16593
          tree parm_max;
16594
          tree arg_max;
16595
          bool parm_cst;
16596
          bool arg_cst;
16597
 
16598
          /* Our representation of array types uses "N - 1" as the
16599
             TYPE_MAX_VALUE for an array with "N" elements, if "N" is
16600
             not an integer constant.  We cannot unify arbitrarily
16601
             complex expressions, so we eliminate the MINUS_EXPRs
16602
             here.  */
16603
          parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
16604
          parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
16605
          if (!parm_cst)
16606
            {
16607
              gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
16608
              parm_max = TREE_OPERAND (parm_max, 0);
16609
            }
16610
          arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
16611
          arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
16612
          if (!arg_cst)
16613
            {
16614
              /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
16615
                 trying to unify the type of a variable with the type
16616
                 of a template parameter.  For example:
16617
 
16618
                   template <unsigned int N>
16619
                   void f (char (&) [N]);
16620
                   int g();
16621
                   void h(int i) {
16622
                     char a[g(i)];
16623
                     f(a);
16624
                   }
16625
 
16626
                Here, the type of the ARG will be "int [g(i)]", and
16627
                may be a SAVE_EXPR, etc.  */
16628
              if (TREE_CODE (arg_max) != MINUS_EXPR)
16629
                return unify_vla_arg (explain_p, arg);
16630
              arg_max = TREE_OPERAND (arg_max, 0);
16631
            }
16632
 
16633
          /* If only one of the bounds used a MINUS_EXPR, compensate
16634
             by adding one to the other bound.  */
16635
          if (parm_cst && !arg_cst)
16636
            parm_max = fold_build2_loc (input_location, PLUS_EXPR,
16637
                                    integer_type_node,
16638
                                    parm_max,
16639
                                    integer_one_node);
16640
          else if (arg_cst && !parm_cst)
16641
            arg_max = fold_build2_loc (input_location, PLUS_EXPR,
16642
                                   integer_type_node,
16643
                                   arg_max,
16644
                                   integer_one_node);
16645
 
16646
          RECUR_AND_CHECK_FAILURE (tparms, targs, parm_max, arg_max,
16647
                                   UNIFY_ALLOW_INTEGER, explain_p);
16648
        }
16649
      return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16650
                    strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
16651
 
16652
    case REAL_TYPE:
16653
    case COMPLEX_TYPE:
16654
    case VECTOR_TYPE:
16655
    case INTEGER_TYPE:
16656
    case BOOLEAN_TYPE:
16657
    case ENUMERAL_TYPE:
16658
    case VOID_TYPE:
16659
    case NULLPTR_TYPE:
16660
      if (TREE_CODE (arg) != TREE_CODE (parm))
16661
        return unify_type_mismatch (explain_p, parm, arg);
16662
 
16663
      /* We have already checked cv-qualification at the top of the
16664
         function.  */
16665
      if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
16666
        return unify_type_mismatch (explain_p, parm, arg);
16667
 
16668
      /* As far as unification is concerned, this wins.  Later checks
16669
         will invalidate it if necessary.  */
16670
      return unify_success (explain_p);
16671
 
16672
      /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
16673
      /* Type INTEGER_CST can come from ordinary constant template args.  */
16674
    case INTEGER_CST:
16675
      while (TREE_CODE (arg) == NOP_EXPR)
16676
        arg = TREE_OPERAND (arg, 0);
16677
 
16678
      if (TREE_CODE (arg) != INTEGER_CST)
16679
        return unify_template_argument_mismatch (explain_p, parm, arg);
16680
      return (tree_int_cst_equal (parm, arg)
16681
              ? unify_success (explain_p)
16682
              : unify_template_argument_mismatch (explain_p, parm, arg));
16683
 
16684
    case TREE_VEC:
16685
      {
16686
        int i, len, argslen;
16687
        int parm_variadic_p = 0;
16688
 
16689
        if (TREE_CODE (arg) != TREE_VEC)
16690
          return unify_template_argument_mismatch (explain_p, parm, arg);
16691
 
16692
        len = TREE_VEC_LENGTH (parm);
16693
        argslen = TREE_VEC_LENGTH (arg);
16694
 
16695
        /* Check for pack expansions in the parameters.  */
16696
        for (i = 0; i < len; ++i)
16697
          {
16698
            if (PACK_EXPANSION_P (TREE_VEC_ELT (parm, i)))
16699
              {
16700
                if (i == len - 1)
16701
                  /* We can unify against something with a trailing
16702
                     parameter pack.  */
16703
                  parm_variadic_p = 1;
16704
                else
16705
                  /* [temp.deduct.type]/9: If the template argument list of
16706
                     P contains a pack expansion that is not the last
16707
                     template argument, the entire template argument list
16708
                     is a non-deduced context.  */
16709
                  return unify_success (explain_p);
16710
              }
16711
          }
16712
 
16713
        /* If we don't have enough arguments to satisfy the parameters
16714
           (not counting the pack expression at the end), or we have
16715
           too many arguments for a parameter list that doesn't end in
16716
           a pack expression, we can't unify.  */
16717
        if (parm_variadic_p
16718
            ? argslen < len - parm_variadic_p
16719
            : argslen != len)
16720
          return unify_arity (explain_p, TREE_VEC_LENGTH (arg), len);
16721
 
16722
        /* Unify all of the parameters that precede the (optional)
16723
           pack expression.  */
16724
        for (i = 0; i < len - parm_variadic_p; ++i)
16725
          {
16726
            RECUR_AND_CHECK_FAILURE (tparms, targs,
16727
                                     TREE_VEC_ELT (parm, i),
16728
                                     TREE_VEC_ELT (arg, i),
16729
                                     UNIFY_ALLOW_NONE, explain_p);
16730
          }
16731
        if (parm_variadic_p)
16732
          return unify_pack_expansion (tparms, targs, parm, arg,
16733
                                       DEDUCE_EXACT,
16734
                                       /*subr=*/true, explain_p);
16735
        return unify_success (explain_p);
16736
      }
16737
 
16738
    case RECORD_TYPE:
16739
    case UNION_TYPE:
16740
      if (TREE_CODE (arg) != TREE_CODE (parm))
16741
        return unify_type_mismatch (explain_p, parm, arg);
16742
 
16743
      if (TYPE_PTRMEMFUNC_P (parm))
16744
        {
16745
          if (!TYPE_PTRMEMFUNC_P (arg))
16746
            return unify_type_mismatch (explain_p, parm, arg);
16747
 
16748
          return unify (tparms, targs,
16749
                        TYPE_PTRMEMFUNC_FN_TYPE (parm),
16750
                        TYPE_PTRMEMFUNC_FN_TYPE (arg),
16751
                        strict, explain_p);
16752
        }
16753
 
16754
      if (CLASSTYPE_TEMPLATE_INFO (parm))
16755
        {
16756
          tree t = NULL_TREE;
16757
 
16758
          if (strict_in & UNIFY_ALLOW_DERIVED)
16759
            {
16760
              /* First, we try to unify the PARM and ARG directly.  */
16761
              t = try_class_unification (tparms, targs,
16762
                                         parm, arg, explain_p);
16763
 
16764
              if (!t)
16765
                {
16766
                  /* Fallback to the special case allowed in
16767
                     [temp.deduct.call]:
16768
 
16769
                       If P is a class, and P has the form
16770
                       template-id, then A can be a derived class of
16771
                       the deduced A.  Likewise, if P is a pointer to
16772
                       a class of the form template-id, A can be a
16773
                       pointer to a derived class pointed to by the
16774
                       deduced A.  */
16775
                  enum template_base_result r;
16776
                  r = get_template_base (tparms, targs, parm, arg,
16777
                                         explain_p, &t);
16778
 
16779
                  if (!t)
16780
                    return unify_no_common_base (explain_p, r, parm, arg);
16781
                }
16782
            }
16783
          else if (CLASSTYPE_TEMPLATE_INFO (arg)
16784
                   && (CLASSTYPE_TI_TEMPLATE (parm)
16785
                       == CLASSTYPE_TI_TEMPLATE (arg)))
16786
            /* Perhaps PARM is something like S<U> and ARG is S<int>.
16787
               Then, we should unify `int' and `U'.  */
16788
            t = arg;
16789
          else
16790
            /* There's no chance of unification succeeding.  */
16791
            return unify_type_mismatch (explain_p, parm, arg);
16792
 
16793
          return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
16794
                        CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE, explain_p);
16795
        }
16796
      else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
16797
        return unify_type_mismatch (explain_p, parm, arg);
16798
      return unify_success (explain_p);
16799
 
16800
    case METHOD_TYPE:
16801
    case FUNCTION_TYPE:
16802
      {
16803
        unsigned int nargs;
16804
        tree *args;
16805
        tree a;
16806
        unsigned int i;
16807
 
16808
        if (TREE_CODE (arg) != TREE_CODE (parm))
16809
          return unify_type_mismatch (explain_p, parm, arg);
16810
 
16811
        /* CV qualifications for methods can never be deduced, they must
16812
           match exactly.  We need to check them explicitly here,
16813
           because type_unification_real treats them as any other
16814
           cv-qualified parameter.  */
16815
        if (TREE_CODE (parm) == METHOD_TYPE
16816
            && (!check_cv_quals_for_unify
16817
                (UNIFY_ALLOW_NONE,
16818
                 class_of_this_parm (arg),
16819
                 class_of_this_parm (parm))))
16820
          return unify_cv_qual_mismatch (explain_p, parm, arg);
16821
 
16822
        RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm),
16823
                                 TREE_TYPE (arg), UNIFY_ALLOW_NONE, explain_p);
16824
 
16825
        nargs = list_length (TYPE_ARG_TYPES (arg));
16826
        args = XALLOCAVEC (tree, nargs);
16827
        for (a = TYPE_ARG_TYPES (arg), i = 0;
16828
             a != NULL_TREE && a != void_list_node;
16829
             a = TREE_CHAIN (a), ++i)
16830
          args[i] = TREE_VALUE (a);
16831
        nargs = i;
16832
 
16833
        return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
16834
                                      args, nargs, 1, DEDUCE_EXACT,
16835
                                      LOOKUP_NORMAL, explain_p);
16836
      }
16837
 
16838
    case OFFSET_TYPE:
16839
      /* Unify a pointer to member with a pointer to member function, which
16840
         deduces the type of the member as a function type. */
16841
      if (TYPE_PTRMEMFUNC_P (arg))
16842
        {
16843
          tree method_type;
16844
          tree fntype;
16845
 
16846
          /* Check top-level cv qualifiers */
16847
          if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
16848
            return unify_cv_qual_mismatch (explain_p, parm, arg);
16849
 
16850
          RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
16851
                                   TYPE_PTRMEMFUNC_OBJECT_TYPE (arg),
16852
                                   UNIFY_ALLOW_NONE, explain_p);
16853
 
16854
          /* Determine the type of the function we are unifying against. */
16855
          method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
16856
          fntype =
16857
            build_function_type (TREE_TYPE (method_type),
16858
                                 TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
16859
 
16860
          /* Extract the cv-qualifiers of the member function from the
16861
             implicit object parameter and place them on the function
16862
             type to be restored later. */
16863
          fntype = apply_memfn_quals (fntype, type_memfn_quals (method_type));
16864
          return unify (tparms, targs, TREE_TYPE (parm), fntype, strict, explain_p);
16865
        }
16866
 
16867
      if (TREE_CODE (arg) != OFFSET_TYPE)
16868
        return unify_type_mismatch (explain_p, parm, arg);
16869
      RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
16870
                               TYPE_OFFSET_BASETYPE (arg),
16871
                               UNIFY_ALLOW_NONE, explain_p);
16872
      return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16873
                    strict, explain_p);
16874
 
16875
    case CONST_DECL:
16876
      if (DECL_TEMPLATE_PARM_P (parm))
16877
        return unify (tparms, targs, DECL_INITIAL (parm), arg, strict, explain_p);
16878
      if (arg != integral_constant_value (parm))
16879
        return unify_template_argument_mismatch (explain_p, parm, arg);
16880
      return unify_success (explain_p);
16881
 
16882
    case FIELD_DECL:
16883
    case TEMPLATE_DECL:
16884
      /* Matched cases are handled by the ARG == PARM test above.  */
16885
      return unify_template_argument_mismatch (explain_p, parm, arg);
16886
 
16887
    case VAR_DECL:
16888
      /* A non-type template parameter that is a variable should be a
16889
         an integral constant, in which case, it whould have been
16890
         folded into its (constant) value. So we should not be getting
16891
         a variable here.  */
16892
      gcc_unreachable ();
16893
 
16894
    case TYPE_ARGUMENT_PACK:
16895
    case NONTYPE_ARGUMENT_PACK:
16896
      return unify (tparms, targs, ARGUMENT_PACK_ARGS (parm),
16897
                    ARGUMENT_PACK_ARGS (arg), strict, explain_p);
16898
 
16899
    case TYPEOF_TYPE:
16900
    case DECLTYPE_TYPE:
16901
    case UNDERLYING_TYPE:
16902
      /* Cannot deduce anything from TYPEOF_TYPE, DECLTYPE_TYPE,
16903
         or UNDERLYING_TYPE nodes.  */
16904
      return unify_success (explain_p);
16905
 
16906
    case ERROR_MARK:
16907
      /* Unification fails if we hit an error node.  */
16908
      return unify_invalid (explain_p);
16909
 
16910
    default:
16911
      /* An unresolved overload is a nondeduced context.  */
16912
      if (is_overloaded_fn (parm) || type_unknown_p (parm))
16913
        return unify_success (explain_p);
16914
      gcc_assert (EXPR_P (parm));
16915
 
16916
      /* We must be looking at an expression.  This can happen with
16917
         something like:
16918
 
16919
           template <int I>
16920
           void foo(S<I>, S<I + 2>);
16921
 
16922
         This is a "nondeduced context":
16923
 
16924
           [deduct.type]
16925
 
16926
           The nondeduced contexts are:
16927
 
16928
           --A type that is a template-id in which one or more of
16929
             the template-arguments is an expression that references
16930
             a template-parameter.
16931
 
16932
         In these cases, we assume deduction succeeded, but don't
16933
         actually infer any unifications.  */
16934
 
16935
      if (!uses_template_parms (parm)
16936
          && !template_args_equal (parm, arg))
16937
        return unify_expression_unequal (explain_p, parm, arg);
16938
      else
16939
        return unify_success (explain_p);
16940
    }
16941
}
16942
#undef RECUR_AND_CHECK_FAILURE
16943
 
16944
/* Note that DECL can be defined in this translation unit, if
16945
   required.  */
16946
 
16947
static void
16948
mark_definable (tree decl)
16949
{
16950
  tree clone;
16951
  DECL_NOT_REALLY_EXTERN (decl) = 1;
16952
  FOR_EACH_CLONE (clone, decl)
16953
    DECL_NOT_REALLY_EXTERN (clone) = 1;
16954
}
16955
 
16956
/* Called if RESULT is explicitly instantiated, or is a member of an
16957
   explicitly instantiated class.  */
16958
 
16959
void
16960
mark_decl_instantiated (tree result, int extern_p)
16961
{
16962
  SET_DECL_EXPLICIT_INSTANTIATION (result);
16963
 
16964
  /* If this entity has already been written out, it's too late to
16965
     make any modifications.  */
16966
  if (TREE_ASM_WRITTEN (result))
16967
    return;
16968
 
16969
  if (TREE_CODE (result) != FUNCTION_DECL)
16970
    /* The TREE_PUBLIC flag for function declarations will have been
16971
       set correctly by tsubst.  */
16972
    TREE_PUBLIC (result) = 1;
16973
 
16974
  /* This might have been set by an earlier implicit instantiation.  */
16975
  DECL_COMDAT (result) = 0;
16976
 
16977
  if (extern_p)
16978
    DECL_NOT_REALLY_EXTERN (result) = 0;
16979
  else
16980
    {
16981
      mark_definable (result);
16982
      /* Always make artificials weak.  */
16983
      if (DECL_ARTIFICIAL (result) && flag_weak)
16984
        comdat_linkage (result);
16985
      /* For WIN32 we also want to put explicit instantiations in
16986
         linkonce sections.  */
16987
      else if (TREE_PUBLIC (result))
16988
        maybe_make_one_only (result);
16989
    }
16990
 
16991
  /* If EXTERN_P, then this function will not be emitted -- unless
16992
     followed by an explicit instantiation, at which point its linkage
16993
     will be adjusted.  If !EXTERN_P, then this function will be
16994
     emitted here.  In neither circumstance do we want
16995
     import_export_decl to adjust the linkage.  */
16996
  DECL_INTERFACE_KNOWN (result) = 1;
16997
}
16998
 
16999
/* Subroutine of more_specialized_fn: check whether TARGS is missing any
17000
   important template arguments.  If any are missing, we check whether
17001
   they're important by using error_mark_node for substituting into any
17002
   args that were used for partial ordering (the ones between ARGS and END)
17003
   and seeing if it bubbles up.  */
17004
 
17005
static bool
17006
check_undeduced_parms (tree targs, tree args, tree end)
17007
{
17008
  bool found = false;
17009
  int i;
17010
  for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
17011
    if (TREE_VEC_ELT (targs, i) == NULL_TREE)
17012
      {
17013
        found = true;
17014
        TREE_VEC_ELT (targs, i) = error_mark_node;
17015
      }
17016
  if (found)
17017
    {
17018
      for (; args != end; args = TREE_CHAIN (args))
17019
        {
17020
          tree substed = tsubst (TREE_VALUE (args), targs, tf_none, NULL_TREE);
17021
          if (substed == error_mark_node)
17022
            return true;
17023
        }
17024
    }
17025
  return false;
17026
}
17027
 
17028
/* Given two function templates PAT1 and PAT2, return:
17029
 
17030
   1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
17031
   -1 if PAT2 is more specialized than PAT1.
17032
 
17033
 
17034
   LEN indicates the number of parameters we should consider
17035
   (defaulted parameters should not be considered).
17036
 
17037
   The 1998 std underspecified function template partial ordering, and
17038
   DR214 addresses the issue.  We take pairs of arguments, one from
17039
   each of the templates, and deduce them against each other.  One of
17040
   the templates will be more specialized if all the *other*
17041
   template's arguments deduce against its arguments and at least one
17042
   of its arguments *does* *not* deduce against the other template's
17043
   corresponding argument.  Deduction is done as for class templates.
17044
   The arguments used in deduction have reference and top level cv
17045
   qualifiers removed.  Iff both arguments were originally reference
17046
   types *and* deduction succeeds in both directions, the template
17047
   with the more cv-qualified argument wins for that pairing (if
17048
   neither is more cv-qualified, they both are equal).  Unlike regular
17049
   deduction, after all the arguments have been deduced in this way,
17050
   we do *not* verify the deduced template argument values can be
17051
   substituted into non-deduced contexts.
17052
 
17053
   The logic can be a bit confusing here, because we look at deduce1 and
17054
   targs1 to see if pat2 is at least as specialized, and vice versa; if we
17055
   can find template arguments for pat1 to make arg1 look like arg2, that
17056
   means that arg2 is at least as specialized as arg1.  */
17057
 
17058
int
17059
more_specialized_fn (tree pat1, tree pat2, int len)
17060
{
17061
  tree decl1 = DECL_TEMPLATE_RESULT (pat1);
17062
  tree decl2 = DECL_TEMPLATE_RESULT (pat2);
17063
  tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
17064
  tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
17065
  tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
17066
  tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
17067
  tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
17068
  tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
17069
  tree origs1, origs2;
17070
  bool lose1 = false;
17071
  bool lose2 = false;
17072
 
17073
  /* Remove the this parameter from non-static member functions.  If
17074
     one is a non-static member function and the other is not a static
17075
     member function, remove the first parameter from that function
17076
     also.  This situation occurs for operator functions where we
17077
     locate both a member function (with this pointer) and non-member
17078
     operator (with explicit first operand).  */
17079
  if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
17080
    {
17081
      len--; /* LEN is the number of significant arguments for DECL1 */
17082
      args1 = TREE_CHAIN (args1);
17083
      if (!DECL_STATIC_FUNCTION_P (decl2))
17084
        args2 = TREE_CHAIN (args2);
17085
    }
17086
  else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
17087
    {
17088
      args2 = TREE_CHAIN (args2);
17089
      if (!DECL_STATIC_FUNCTION_P (decl1))
17090
        {
17091
          len--;
17092
          args1 = TREE_CHAIN (args1);
17093
        }
17094
    }
17095
 
17096
  /* If only one is a conversion operator, they are unordered.  */
17097
  if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
17098
    return 0;
17099
 
17100
  /* Consider the return type for a conversion function */
17101
  if (DECL_CONV_FN_P (decl1))
17102
    {
17103
      args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
17104
      args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
17105
      len++;
17106
    }
17107
 
17108
  processing_template_decl++;
17109
 
17110
  origs1 = args1;
17111
  origs2 = args2;
17112
 
17113
  while (len--
17114
         /* Stop when an ellipsis is seen.  */
17115
         && args1 != NULL_TREE && args2 != NULL_TREE)
17116
    {
17117
      tree arg1 = TREE_VALUE (args1);
17118
      tree arg2 = TREE_VALUE (args2);
17119
      int deduce1, deduce2;
17120
      int quals1 = -1;
17121
      int quals2 = -1;
17122
 
17123
      if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
17124
          && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
17125
        {
17126
          /* When both arguments are pack expansions, we need only
17127
             unify the patterns themselves.  */
17128
          arg1 = PACK_EXPANSION_PATTERN (arg1);
17129
          arg2 = PACK_EXPANSION_PATTERN (arg2);
17130
 
17131
          /* This is the last comparison we need to do.  */
17132
          len = 0;
17133
        }
17134
 
17135
      if (TREE_CODE (arg1) == REFERENCE_TYPE)
17136
        {
17137
          arg1 = TREE_TYPE (arg1);
17138
          quals1 = cp_type_quals (arg1);
17139
        }
17140
 
17141
      if (TREE_CODE (arg2) == REFERENCE_TYPE)
17142
        {
17143
          arg2 = TREE_TYPE (arg2);
17144
          quals2 = cp_type_quals (arg2);
17145
        }
17146
 
17147
      if ((quals1 < 0) != (quals2 < 0))
17148
        {
17149
          /* Only of the args is a reference, see if we should apply
17150
             array/function pointer decay to it.  This is not part of
17151
             DR214, but is, IMHO, consistent with the deduction rules
17152
             for the function call itself, and with our earlier
17153
             implementation of the underspecified partial ordering
17154
             rules.  (nathan).  */
17155
          if (quals1 >= 0)
17156
            {
17157
              switch (TREE_CODE (arg1))
17158
                {
17159
                case ARRAY_TYPE:
17160
                  arg1 = TREE_TYPE (arg1);
17161
                  /* FALLTHROUGH. */
17162
                case FUNCTION_TYPE:
17163
                  arg1 = build_pointer_type (arg1);
17164
                  break;
17165
 
17166
                default:
17167
                  break;
17168
                }
17169
            }
17170
          else
17171
            {
17172
              switch (TREE_CODE (arg2))
17173
                {
17174
                case ARRAY_TYPE:
17175
                  arg2 = TREE_TYPE (arg2);
17176
                  /* FALLTHROUGH. */
17177
                case FUNCTION_TYPE:
17178
                  arg2 = build_pointer_type (arg2);
17179
                  break;
17180
 
17181
                default:
17182
                  break;
17183
                }
17184
            }
17185
        }
17186
 
17187
      arg1 = TYPE_MAIN_VARIANT (arg1);
17188
      arg2 = TYPE_MAIN_VARIANT (arg2);
17189
 
17190
      if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
17191
        {
17192
          int i, len2 = list_length (args2);
17193
          tree parmvec = make_tree_vec (1);
17194
          tree argvec = make_tree_vec (len2);
17195
          tree ta = args2;
17196
 
17197
          /* Setup the parameter vector, which contains only ARG1.  */
17198
          TREE_VEC_ELT (parmvec, 0) = arg1;
17199
 
17200
          /* Setup the argument vector, which contains the remaining
17201
             arguments.  */
17202
          for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
17203
            TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
17204
 
17205
          deduce1 = (unify_pack_expansion (tparms1, targs1, parmvec,
17206
                                           argvec, DEDUCE_EXACT,
17207
                                           /*subr=*/true, /*explain_p=*/false)
17208
                     == 0);
17209
 
17210
          /* We cannot deduce in the other direction, because ARG1 is
17211
             a pack expansion but ARG2 is not.  */
17212
          deduce2 = 0;
17213
        }
17214
      else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
17215
        {
17216
          int i, len1 = list_length (args1);
17217
          tree parmvec = make_tree_vec (1);
17218
          tree argvec = make_tree_vec (len1);
17219
          tree ta = args1;
17220
 
17221
          /* Setup the parameter vector, which contains only ARG1.  */
17222
          TREE_VEC_ELT (parmvec, 0) = arg2;
17223
 
17224
          /* Setup the argument vector, which contains the remaining
17225
             arguments.  */
17226
          for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
17227
            TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
17228
 
17229
          deduce2 = (unify_pack_expansion (tparms2, targs2, parmvec,
17230
                                           argvec, DEDUCE_EXACT,
17231
                                           /*subr=*/true, /*explain_p=*/false)
17232
                     == 0);
17233
 
17234
          /* We cannot deduce in the other direction, because ARG2 is
17235
             a pack expansion but ARG1 is not.*/
17236
          deduce1 = 0;
17237
        }
17238
 
17239
      else
17240
        {
17241
          /* The normal case, where neither argument is a pack
17242
             expansion.  */
17243
          deduce1 = (unify (tparms1, targs1, arg1, arg2,
17244
                            UNIFY_ALLOW_NONE, /*explain_p=*/false)
17245
                     == 0);
17246
          deduce2 = (unify (tparms2, targs2, arg2, arg1,
17247
                            UNIFY_ALLOW_NONE, /*explain_p=*/false)
17248
                     == 0);
17249
        }
17250
 
17251
      /* If we couldn't deduce arguments for tparms1 to make arg1 match
17252
         arg2, then arg2 is not as specialized as arg1.  */
17253
      if (!deduce1)
17254
        lose2 = true;
17255
      if (!deduce2)
17256
        lose1 = true;
17257
 
17258
      /* "If, for a given type, deduction succeeds in both directions
17259
         (i.e., the types are identical after the transformations above)
17260
         and if the type from the argument template is more cv-qualified
17261
         than the type from the parameter template (as described above)
17262
         that type is considered to be more specialized than the other. If
17263
         neither type is more cv-qualified than the other then neither type
17264
         is more specialized than the other."  */
17265
 
17266
      if (deduce1 && deduce2
17267
          && quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
17268
        {
17269
          if ((quals1 & quals2) == quals2)
17270
            lose2 = true;
17271
          if ((quals1 & quals2) == quals1)
17272
            lose1 = true;
17273
        }
17274
 
17275
      if (lose1 && lose2)
17276
        /* We've failed to deduce something in either direction.
17277
           These must be unordered.  */
17278
        break;
17279
 
17280
      if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
17281
          || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
17282
        /* We have already processed all of the arguments in our
17283
           handing of the pack expansion type.  */
17284
        len = 0;
17285
 
17286
      args1 = TREE_CHAIN (args1);
17287
      args2 = TREE_CHAIN (args2);
17288
    }
17289
 
17290
  /* "In most cases, all template parameters must have values in order for
17291
     deduction to succeed, but for partial ordering purposes a template
17292
     parameter may remain without a value provided it is not used in the
17293
     types being used for partial ordering."
17294
 
17295
     Thus, if we are missing any of the targs1 we need to substitute into
17296
     origs1, then pat2 is not as specialized as pat1.  This can happen when
17297
     there is a nondeduced context.  */
17298
  if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
17299
    lose2 = true;
17300
  if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
17301
    lose1 = true;
17302
 
17303
  processing_template_decl--;
17304
 
17305
  /* All things being equal, if the next argument is a pack expansion
17306
     for one function but not for the other, prefer the
17307
     non-variadic function.  FIXME this is bogus; see c++/41958.  */
17308
  if (lose1 == lose2
17309
      && args1 && TREE_VALUE (args1)
17310
      && args2 && TREE_VALUE (args2))
17311
    {
17312
      lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
17313
      lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
17314
    }
17315
 
17316
  if (lose1 == lose2)
17317
    return 0;
17318
  else if (!lose1)
17319
    return 1;
17320
  else
17321
    return -1;
17322
}
17323
 
17324
/* Determine which of two partial specializations is more specialized.
17325
 
17326
   PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
17327
   to the first partial specialization.  The TREE_VALUE is the
17328
   innermost set of template parameters for the partial
17329
   specialization.  PAT2 is similar, but for the second template.
17330
 
17331
   Return 1 if the first partial specialization is more specialized;
17332
   -1 if the second is more specialized; 0 if neither is more
17333
   specialized.
17334
 
17335
   See [temp.class.order] for information about determining which of
17336
   two templates is more specialized.  */
17337
 
17338
static int
17339
more_specialized_class (tree pat1, tree pat2)
17340
{
17341
  tree targs;
17342
  tree tmpl1, tmpl2;
17343
  int winner = 0;
17344
  bool any_deductions = false;
17345
 
17346
  tmpl1 = TREE_TYPE (pat1);
17347
  tmpl2 = TREE_TYPE (pat2);
17348
 
17349
  /* Just like what happens for functions, if we are ordering between
17350
     different class template specializations, we may encounter dependent
17351
     types in the arguments, and we need our dependency check functions
17352
     to behave correctly.  */
17353
  ++processing_template_decl;
17354
  targs = get_class_bindings (TREE_VALUE (pat1),
17355
                              CLASSTYPE_TI_ARGS (tmpl1),
17356
                              CLASSTYPE_TI_ARGS (tmpl2));
17357
  if (targs)
17358
    {
17359
      --winner;
17360
      any_deductions = true;
17361
    }
17362
 
17363
  targs = get_class_bindings (TREE_VALUE (pat2),
17364
                              CLASSTYPE_TI_ARGS (tmpl2),
17365
                              CLASSTYPE_TI_ARGS (tmpl1));
17366
  if (targs)
17367
    {
17368
      ++winner;
17369
      any_deductions = true;
17370
    }
17371
  --processing_template_decl;
17372
 
17373
  /* In the case of a tie where at least one of the class templates
17374
     has a parameter pack at the end, the template with the most
17375
     non-packed parameters wins.  */
17376
  if (winner == 0
17377
      && any_deductions
17378
      && (template_args_variadic_p (TREE_PURPOSE (pat1))
17379
          || template_args_variadic_p (TREE_PURPOSE (pat2))))
17380
    {
17381
      tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
17382
      tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
17383
      int len1 = TREE_VEC_LENGTH (args1);
17384
      int len2 = TREE_VEC_LENGTH (args2);
17385
 
17386
      /* We don't count the pack expansion at the end.  */
17387
      if (template_args_variadic_p (TREE_PURPOSE (pat1)))
17388
        --len1;
17389
      if (template_args_variadic_p (TREE_PURPOSE (pat2)))
17390
        --len2;
17391
 
17392
      if (len1 > len2)
17393
        return 1;
17394
      else if (len1 < len2)
17395
        return -1;
17396
    }
17397
 
17398
  return winner;
17399
}
17400
 
17401
/* Return the template arguments that will produce the function signature
17402
   DECL from the function template FN, with the explicit template
17403
   arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
17404
   also match.  Return NULL_TREE if no satisfactory arguments could be
17405
   found.  */
17406
 
17407
static tree
17408
get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
17409
{
17410
  int ntparms = DECL_NTPARMS (fn);
17411
  tree targs = make_tree_vec (ntparms);
17412
  tree decl_type;
17413
  tree decl_arg_types;
17414
  tree *args;
17415
  unsigned int nargs, ix;
17416
  tree arg;
17417
 
17418
  /* Substitute the explicit template arguments into the type of DECL.
17419
     The call to fn_type_unification will handle substitution into the
17420
     FN.  */
17421
  decl_type = TREE_TYPE (decl);
17422
  if (explicit_args && uses_template_parms (decl_type))
17423
    {
17424
      tree tmpl;
17425
      tree converted_args;
17426
 
17427
      if (DECL_TEMPLATE_INFO (decl))
17428
        tmpl = DECL_TI_TEMPLATE (decl);
17429
      else
17430
        /* We can get here for some invalid specializations.  */
17431
        return NULL_TREE;
17432
 
17433
      converted_args
17434
        = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
17435
                                 explicit_args, NULL_TREE,
17436
                                 tf_none,
17437
                                 /*require_all_args=*/false,
17438
                                 /*use_default_args=*/false);
17439
      if (converted_args == error_mark_node)
17440
        return NULL_TREE;
17441
 
17442
      decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
17443
      if (decl_type == error_mark_node)
17444
        return NULL_TREE;
17445
    }
17446
 
17447
  /* Never do unification on the 'this' parameter.  */
17448
  decl_arg_types = skip_artificial_parms_for (decl,
17449
                                              TYPE_ARG_TYPES (decl_type));
17450
 
17451
  nargs = list_length (decl_arg_types);
17452
  args = XALLOCAVEC (tree, nargs);
17453
  for (arg = decl_arg_types, ix = 0;
17454
       arg != NULL_TREE && arg != void_list_node;
17455
       arg = TREE_CHAIN (arg), ++ix)
17456
    args[ix] = TREE_VALUE (arg);
17457
 
17458
  if (fn_type_unification (fn, explicit_args, targs,
17459
                           args, ix,
17460
                           (check_rettype || DECL_CONV_FN_P (fn)
17461
                            ? TREE_TYPE (decl_type) : NULL_TREE),
17462
                           DEDUCE_EXACT, LOOKUP_NORMAL, /*explain_p=*/false))
17463
    return NULL_TREE;
17464
 
17465
  return targs;
17466
}
17467
 
17468
/* Return the innermost template arguments that, when applied to a
17469
   template specialization whose innermost template parameters are
17470
   TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
17471
   ARGS.
17472
 
17473
   For example, suppose we have:
17474
 
17475
     template <class T, class U> struct S {};
17476
     template <class T> struct S<T*, int> {};
17477
 
17478
   Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
17479
   {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
17480
   int}.  The resulting vector will be {double}, indicating that `T'
17481
   is bound to `double'.  */
17482
 
17483
static tree
17484
get_class_bindings (tree tparms, tree spec_args, tree args)
17485
{
17486
  int i, ntparms = TREE_VEC_LENGTH (tparms);
17487
  tree deduced_args;
17488
  tree innermost_deduced_args;
17489
 
17490
  innermost_deduced_args = make_tree_vec (ntparms);
17491
  if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
17492
    {
17493
      deduced_args = copy_node (args);
17494
      SET_TMPL_ARGS_LEVEL (deduced_args,
17495
                           TMPL_ARGS_DEPTH (deduced_args),
17496
                           innermost_deduced_args);
17497
    }
17498
  else
17499
    deduced_args = innermost_deduced_args;
17500
 
17501
  if (unify (tparms, deduced_args,
17502
             INNERMOST_TEMPLATE_ARGS (spec_args),
17503
             INNERMOST_TEMPLATE_ARGS (args),
17504
             UNIFY_ALLOW_NONE, /*explain_p=*/false))
17505
    return NULL_TREE;
17506
 
17507
  for (i =  0; i < ntparms; ++i)
17508
    if (! TREE_VEC_ELT (innermost_deduced_args, i))
17509
      return NULL_TREE;
17510
 
17511
  /* Verify that nondeduced template arguments agree with the type
17512
     obtained from argument deduction.
17513
 
17514
     For example:
17515
 
17516
       struct A { typedef int X; };
17517
       template <class T, class U> struct C {};
17518
       template <class T> struct C<T, typename T::X> {};
17519
 
17520
     Then with the instantiation `C<A, int>', we can deduce that
17521
     `T' is `A' but unify () does not check whether `typename T::X'
17522
     is `int'.  */
17523
  spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
17524
  if (spec_args == error_mark_node
17525
      /* We only need to check the innermost arguments; the other
17526
         arguments will always agree.  */
17527
      || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
17528
                              INNERMOST_TEMPLATE_ARGS (args)))
17529
    return NULL_TREE;
17530
 
17531
  /* Now that we have bindings for all of the template arguments,
17532
     ensure that the arguments deduced for the template template
17533
     parameters have compatible template parameter lists.  See the use
17534
     of template_template_parm_bindings_ok_p in fn_type_unification
17535
     for more information.  */
17536
  if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
17537
    return NULL_TREE;
17538
 
17539
  return deduced_args;
17540
}
17541
 
17542
/* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
17543
   Return the TREE_LIST node with the most specialized template, if
17544
   any.  If there is no most specialized template, the error_mark_node
17545
   is returned.
17546
 
17547
   Note that this function does not look at, or modify, the
17548
   TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
17549
   returned is one of the elements of INSTANTIATIONS, callers may
17550
   store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
17551
   and retrieve it from the value returned.  */
17552
 
17553
tree
17554
most_specialized_instantiation (tree templates)
17555
{
17556
  tree fn, champ;
17557
 
17558
  ++processing_template_decl;
17559
 
17560
  champ = templates;
17561
  for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
17562
    {
17563
      int fate = 0;
17564
 
17565
      if (get_bindings (TREE_VALUE (champ),
17566
                        DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
17567
                        NULL_TREE, /*check_ret=*/true))
17568
        fate--;
17569
 
17570
      if (get_bindings (TREE_VALUE (fn),
17571
                        DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
17572
                        NULL_TREE, /*check_ret=*/true))
17573
        fate++;
17574
 
17575
      if (fate == -1)
17576
        champ = fn;
17577
      else if (!fate)
17578
        {
17579
          /* Equally specialized, move to next function.  If there
17580
             is no next function, nothing's most specialized.  */
17581
          fn = TREE_CHAIN (fn);
17582
          champ = fn;
17583
          if (!fn)
17584
            break;
17585
        }
17586
    }
17587
 
17588
  if (champ)
17589
    /* Now verify that champ is better than everything earlier in the
17590
       instantiation list.  */
17591
    for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
17592
      if (get_bindings (TREE_VALUE (champ),
17593
                        DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
17594
                        NULL_TREE, /*check_ret=*/true)
17595
          || !get_bindings (TREE_VALUE (fn),
17596
                            DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
17597
                            NULL_TREE, /*check_ret=*/true))
17598
        {
17599
          champ = NULL_TREE;
17600
          break;
17601
        }
17602
 
17603
  processing_template_decl--;
17604
 
17605
  if (!champ)
17606
    return error_mark_node;
17607
 
17608
  return champ;
17609
}
17610
 
17611
/* If DECL is a specialization of some template, return the most
17612
   general such template.  Otherwise, returns NULL_TREE.
17613
 
17614
   For example, given:
17615
 
17616
     template <class T> struct S { template <class U> void f(U); };
17617
 
17618
   if TMPL is `template <class U> void S<int>::f(U)' this will return
17619
   the full template.  This function will not trace past partial
17620
   specializations, however.  For example, given in addition:
17621
 
17622
     template <class T> struct S<T*> { template <class U> void f(U); };
17623
 
17624
   if TMPL is `template <class U> void S<int*>::f(U)' this will return
17625
   `template <class T> template <class U> S<T*>::f(U)'.  */
17626
 
17627
tree
17628
most_general_template (tree decl)
17629
{
17630
  /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
17631
     an immediate specialization.  */
17632
  if (TREE_CODE (decl) == FUNCTION_DECL)
17633
    {
17634
      if (DECL_TEMPLATE_INFO (decl)) {
17635
        decl = DECL_TI_TEMPLATE (decl);
17636
 
17637
        /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
17638
           template friend.  */
17639
        if (TREE_CODE (decl) != TEMPLATE_DECL)
17640
          return NULL_TREE;
17641
      } else
17642
        return NULL_TREE;
17643
    }
17644
 
17645
  /* Look for more and more general templates.  */
17646
  while (DECL_TEMPLATE_INFO (decl))
17647
    {
17648
      /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
17649
         (See cp-tree.h for details.)  */
17650
      if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
17651
        break;
17652
 
17653
      if (CLASS_TYPE_P (TREE_TYPE (decl))
17654
          && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
17655
        break;
17656
 
17657
      /* Stop if we run into an explicitly specialized class template.  */
17658
      if (!DECL_NAMESPACE_SCOPE_P (decl)
17659
          && DECL_CONTEXT (decl)
17660
          && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
17661
        break;
17662
 
17663
      decl = DECL_TI_TEMPLATE (decl);
17664
    }
17665
 
17666
  return decl;
17667
}
17668
 
17669
/* Return the most specialized of the class template partial
17670
   specializations of TMPL which can produce TYPE, a specialization of
17671
   TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
17672
   a _TYPE node corresponding to the partial specialization, while the
17673
   TREE_PURPOSE is the set of template arguments that must be
17674
   substituted into the TREE_TYPE in order to generate TYPE.
17675
 
17676
   If the choice of partial specialization is ambiguous, a diagnostic
17677
   is issued, and the error_mark_node is returned.  If there are no
17678
   partial specializations of TMPL matching TYPE, then NULL_TREE is
17679
   returned.  */
17680
 
17681
static tree
17682
most_specialized_class (tree type, tree tmpl, tsubst_flags_t complain)
17683
{
17684
  tree list = NULL_TREE;
17685
  tree t;
17686
  tree champ;
17687
  int fate;
17688
  bool ambiguous_p;
17689
  tree args;
17690
  tree outer_args = NULL_TREE;
17691
 
17692
  tmpl = most_general_template (tmpl);
17693
  args = CLASSTYPE_TI_ARGS (type);
17694
 
17695
  /* For determining which partial specialization to use, only the
17696
     innermost args are interesting.  */
17697
  if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
17698
    {
17699
      outer_args = strip_innermost_template_args (args, 1);
17700
      args = INNERMOST_TEMPLATE_ARGS (args);
17701
    }
17702
 
17703
  for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
17704
    {
17705
      tree partial_spec_args;
17706
      tree spec_args;
17707
      tree parms = TREE_VALUE (t);
17708
 
17709
      partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
17710
 
17711
      ++processing_template_decl;
17712
 
17713
      if (outer_args)
17714
        {
17715
          int i;
17716
 
17717
          /* Discard the outer levels of args, and then substitute in the
17718
             template args from the enclosing class.  */
17719
          partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
17720
          partial_spec_args = tsubst_template_args
17721
            (partial_spec_args, outer_args, tf_none, NULL_TREE);
17722
 
17723
          /* PARMS already refers to just the innermost parms, but the
17724
             template parms in partial_spec_args had their levels lowered
17725
             by tsubst, so we need to do the same for the parm list.  We
17726
             can't just tsubst the TREE_VEC itself, as tsubst wants to
17727
             treat a TREE_VEC as an argument vector.  */
17728
          parms = copy_node (parms);
17729
          for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
17730
            TREE_VEC_ELT (parms, i) =
17731
              tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
17732
 
17733
        }
17734
 
17735
      partial_spec_args =
17736
          coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
17737
                                 add_to_template_args (outer_args,
17738
                                                       partial_spec_args),
17739
                                 tmpl, tf_none,
17740
                                 /*require_all_args=*/true,
17741
                                 /*use_default_args=*/true);
17742
 
17743
      --processing_template_decl;
17744
 
17745
      if (partial_spec_args == error_mark_node)
17746
        return error_mark_node;
17747
 
17748
      spec_args = get_class_bindings (parms,
17749
                                      partial_spec_args,
17750
                                      args);
17751
      if (spec_args)
17752
        {
17753
          if (outer_args)
17754
            spec_args = add_to_template_args (outer_args, spec_args);
17755
          list = tree_cons (spec_args, TREE_VALUE (t), list);
17756
          TREE_TYPE (list) = TREE_TYPE (t);
17757
        }
17758
    }
17759
 
17760
  if (! list)
17761
    return NULL_TREE;
17762
 
17763
  ambiguous_p = false;
17764
  t = list;
17765
  champ = t;
17766
  t = TREE_CHAIN (t);
17767
  for (; t; t = TREE_CHAIN (t))
17768
    {
17769
      fate = more_specialized_class (champ, t);
17770
      if (fate == 1)
17771
        ;
17772
      else
17773
        {
17774
          if (fate == 0)
17775
            {
17776
              t = TREE_CHAIN (t);
17777
              if (! t)
17778
                {
17779
                  ambiguous_p = true;
17780
                  break;
17781
                }
17782
            }
17783
          champ = t;
17784
        }
17785
    }
17786
 
17787
  if (!ambiguous_p)
17788
    for (t = list; t && t != champ; t = TREE_CHAIN (t))
17789
      {
17790
        fate = more_specialized_class (champ, t);
17791
        if (fate != 1)
17792
          {
17793
            ambiguous_p = true;
17794
            break;
17795
          }
17796
      }
17797
 
17798
  if (ambiguous_p)
17799
    {
17800
      const char *str;
17801
      char *spaces = NULL;
17802
      if (!(complain & tf_error))
17803
        return error_mark_node;
17804
      error ("ambiguous class template instantiation for %q#T", type);
17805
      str = ngettext ("candidate is:", "candidates are:", list_length (list));
17806
      for (t = list; t; t = TREE_CHAIN (t))
17807
        {
17808
          error ("%s %+#T", spaces ? spaces : str, TREE_TYPE (t));
17809
          spaces = spaces ? spaces : get_spaces (str);
17810
        }
17811
      free (spaces);
17812
      return error_mark_node;
17813
    }
17814
 
17815
  return champ;
17816
}
17817
 
17818
/* Explicitly instantiate DECL.  */
17819
 
17820
void
17821
do_decl_instantiation (tree decl, tree storage)
17822
{
17823
  tree result = NULL_TREE;
17824
  int extern_p = 0;
17825
 
17826
  if (!decl || decl == error_mark_node)
17827
    /* An error occurred, for which grokdeclarator has already issued
17828
       an appropriate message.  */
17829
    return;
17830
  else if (! DECL_LANG_SPECIFIC (decl))
17831
    {
17832
      error ("explicit instantiation of non-template %q#D", decl);
17833
      return;
17834
    }
17835
  else if (TREE_CODE (decl) == VAR_DECL)
17836
    {
17837
      /* There is an asymmetry here in the way VAR_DECLs and
17838
         FUNCTION_DECLs are handled by grokdeclarator.  In the case of
17839
         the latter, the DECL we get back will be marked as a
17840
         template instantiation, and the appropriate
17841
         DECL_TEMPLATE_INFO will be set up.  This does not happen for
17842
         VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
17843
         should handle VAR_DECLs as it currently handles
17844
         FUNCTION_DECLs.  */
17845
      if (!DECL_CLASS_SCOPE_P (decl))
17846
        {
17847
          error ("%qD is not a static data member of a class template", decl);
17848
          return;
17849
        }
17850
      result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
17851
      if (!result || TREE_CODE (result) != VAR_DECL)
17852
        {
17853
          error ("no matching template for %qD found", decl);
17854
          return;
17855
        }
17856
      if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
17857
        {
17858
          error ("type %qT for explicit instantiation %qD does not match "
17859
                 "declared type %qT", TREE_TYPE (result), decl,
17860
                 TREE_TYPE (decl));
17861
          return;
17862
        }
17863
    }
17864
  else if (TREE_CODE (decl) != FUNCTION_DECL)
17865
    {
17866
      error ("explicit instantiation of %q#D", decl);
17867
      return;
17868
    }
17869
  else
17870
    result = decl;
17871
 
17872
  /* Check for various error cases.  Note that if the explicit
17873
     instantiation is valid the RESULT will currently be marked as an
17874
     *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
17875
     until we get here.  */
17876
 
17877
  if (DECL_TEMPLATE_SPECIALIZATION (result))
17878
    {
17879
      /* DR 259 [temp.spec].
17880
 
17881
         Both an explicit instantiation and a declaration of an explicit
17882
         specialization shall not appear in a program unless the explicit
17883
         instantiation follows a declaration of the explicit specialization.
17884
 
17885
         For a given set of template parameters, if an explicit
17886
         instantiation of a template appears after a declaration of an
17887
         explicit specialization for that template, the explicit
17888
         instantiation has no effect.  */
17889
      return;
17890
    }
17891
  else if (DECL_EXPLICIT_INSTANTIATION (result))
17892
    {
17893
      /* [temp.spec]
17894
 
17895
         No program shall explicitly instantiate any template more
17896
         than once.
17897
 
17898
         We check DECL_NOT_REALLY_EXTERN so as not to complain when
17899
         the first instantiation was `extern' and the second is not,
17900
         and EXTERN_P for the opposite case.  */
17901
      if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
17902
        permerror (input_location, "duplicate explicit instantiation of %q#D", result);
17903
      /* If an "extern" explicit instantiation follows an ordinary
17904
         explicit instantiation, the template is instantiated.  */
17905
      if (extern_p)
17906
        return;
17907
    }
17908
  else if (!DECL_IMPLICIT_INSTANTIATION (result))
17909
    {
17910
      error ("no matching template for %qD found", result);
17911
      return;
17912
    }
17913
  else if (!DECL_TEMPLATE_INFO (result))
17914
    {
17915
      permerror (input_location, "explicit instantiation of non-template %q#D", result);
17916
      return;
17917
    }
17918
 
17919
  if (storage == NULL_TREE)
17920
    ;
17921
  else if (storage == ridpointers[(int) RID_EXTERN])
17922
    {
17923
      if (!in_system_header && (cxx_dialect == cxx98))
17924
        pedwarn (input_location, OPT_pedantic,
17925
                 "ISO C++ 1998 forbids the use of %<extern%> on explicit "
17926
                 "instantiations");
17927
      extern_p = 1;
17928
    }
17929
  else
17930
    error ("storage class %qD applied to template instantiation", storage);
17931
 
17932
  check_explicit_instantiation_namespace (result);
17933
  mark_decl_instantiated (result, extern_p);
17934
  if (! extern_p)
17935
    instantiate_decl (result, /*defer_ok=*/1,
17936
                      /*expl_inst_class_mem_p=*/false);
17937
}
17938
 
17939
static void
17940
mark_class_instantiated (tree t, int extern_p)
17941
{
17942
  SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
17943
  SET_CLASSTYPE_INTERFACE_KNOWN (t);
17944
  CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
17945
  TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
17946
  if (! extern_p)
17947
    {
17948
      CLASSTYPE_DEBUG_REQUESTED (t) = 1;
17949
      rest_of_type_compilation (t, 1);
17950
    }
17951
}
17952
 
17953
/* Called from do_type_instantiation through binding_table_foreach to
17954
   do recursive instantiation for the type bound in ENTRY.  */
17955
static void
17956
bt_instantiate_type_proc (binding_entry entry, void *data)
17957
{
17958
  tree storage = *(tree *) data;
17959
 
17960
  if (MAYBE_CLASS_TYPE_P (entry->type)
17961
      && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
17962
    do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
17963
}
17964
 
17965
/* Called from do_type_instantiation to instantiate a member
17966
   (a member function or a static member variable) of an
17967
   explicitly instantiated class template.  */
17968
static void
17969
instantiate_class_member (tree decl, int extern_p)
17970
{
17971
  mark_decl_instantiated (decl, extern_p);
17972
  if (! extern_p)
17973
    instantiate_decl (decl, /*defer_ok=*/1,
17974
                      /*expl_inst_class_mem_p=*/true);
17975
}
17976
 
17977
/* Perform an explicit instantiation of template class T.  STORAGE, if
17978
   non-null, is the RID for extern, inline or static.  COMPLAIN is
17979
   nonzero if this is called from the parser, zero if called recursively,
17980
   since the standard is unclear (as detailed below).  */
17981
 
17982
void
17983
do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
17984
{
17985
  int extern_p = 0;
17986
  int nomem_p = 0;
17987
  int static_p = 0;
17988
  int previous_instantiation_extern_p = 0;
17989
 
17990
  if (TREE_CODE (t) == TYPE_DECL)
17991
    t = TREE_TYPE (t);
17992
 
17993
  if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
17994
    {
17995
      tree tmpl =
17996
        (TYPE_TEMPLATE_INFO (t)) ? TYPE_TI_TEMPLATE (t) : NULL;
17997
      if (tmpl)
17998
        error ("explicit instantiation of non-class template %qD", tmpl);
17999
      else
18000
        error ("explicit instantiation of non-template type %qT", t);
18001
      return;
18002
    }
18003
 
18004
  complete_type (t);
18005
 
18006
  if (!COMPLETE_TYPE_P (t))
18007
    {
18008
      if (complain & tf_error)
18009
        error ("explicit instantiation of %q#T before definition of template",
18010
               t);
18011
      return;
18012
    }
18013
 
18014
  if (storage != NULL_TREE)
18015
    {
18016
      if (!in_system_header)
18017
        {
18018
          if (storage == ridpointers[(int) RID_EXTERN])
18019
            {
18020
              if (cxx_dialect == cxx98)
18021
                pedwarn (input_location, OPT_pedantic,
18022
                         "ISO C++ 1998 forbids the use of %<extern%> on "
18023
                         "explicit instantiations");
18024
            }
18025
          else
18026
            pedwarn (input_location, OPT_pedantic,
18027
                     "ISO C++ forbids the use of %qE"
18028
                     " on explicit instantiations", storage);
18029
        }
18030
 
18031
      if (storage == ridpointers[(int) RID_INLINE])
18032
        nomem_p = 1;
18033
      else if (storage == ridpointers[(int) RID_EXTERN])
18034
        extern_p = 1;
18035
      else if (storage == ridpointers[(int) RID_STATIC])
18036
        static_p = 1;
18037
      else
18038
        {
18039
          error ("storage class %qD applied to template instantiation",
18040
                 storage);
18041
          extern_p = 0;
18042
        }
18043
    }
18044
 
18045
  if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
18046
    {
18047
      /* DR 259 [temp.spec].
18048
 
18049
         Both an explicit instantiation and a declaration of an explicit
18050
         specialization shall not appear in a program unless the explicit
18051
         instantiation follows a declaration of the explicit specialization.
18052
 
18053
         For a given set of template parameters, if an explicit
18054
         instantiation of a template appears after a declaration of an
18055
         explicit specialization for that template, the explicit
18056
         instantiation has no effect.  */
18057
      return;
18058
    }
18059
  else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
18060
    {
18061
      /* [temp.spec]
18062
 
18063
         No program shall explicitly instantiate any template more
18064
         than once.
18065
 
18066
         If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
18067
         instantiation was `extern'.  If EXTERN_P then the second is.
18068
         These cases are OK.  */
18069
      previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
18070
 
18071
      if (!previous_instantiation_extern_p && !extern_p
18072
          && (complain & tf_error))
18073
        permerror (input_location, "duplicate explicit instantiation of %q#T", t);
18074
 
18075
      /* If we've already instantiated the template, just return now.  */
18076
      if (!CLASSTYPE_INTERFACE_ONLY (t))
18077
        return;
18078
    }
18079
 
18080
  check_explicit_instantiation_namespace (TYPE_NAME (t));
18081
  mark_class_instantiated (t, extern_p);
18082
 
18083
  if (nomem_p)
18084
    return;
18085
 
18086
  {
18087
    tree tmp;
18088
 
18089
    /* In contrast to implicit instantiation, where only the
18090
       declarations, and not the definitions, of members are
18091
       instantiated, we have here:
18092
 
18093
         [temp.explicit]
18094
 
18095
         The explicit instantiation of a class template specialization
18096
         implies the instantiation of all of its members not
18097
         previously explicitly specialized in the translation unit
18098
         containing the explicit instantiation.
18099
 
18100
       Of course, we can't instantiate member template classes, since
18101
       we don't have any arguments for them.  Note that the standard
18102
       is unclear on whether the instantiation of the members are
18103
       *explicit* instantiations or not.  However, the most natural
18104
       interpretation is that it should be an explicit instantiation.  */
18105
 
18106
    if (! static_p)
18107
      for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
18108
        if (TREE_CODE (tmp) == FUNCTION_DECL
18109
            && DECL_TEMPLATE_INSTANTIATION (tmp))
18110
          instantiate_class_member (tmp, extern_p);
18111
 
18112
    for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
18113
      if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
18114
        instantiate_class_member (tmp, extern_p);
18115
 
18116
    if (CLASSTYPE_NESTED_UTDS (t))
18117
      binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
18118
                             bt_instantiate_type_proc, &storage);
18119
  }
18120
}
18121
 
18122
/* Given a function DECL, which is a specialization of TMPL, modify
18123
   DECL to be a re-instantiation of TMPL with the same template
18124
   arguments.  TMPL should be the template into which tsubst'ing
18125
   should occur for DECL, not the most general template.
18126
 
18127
   One reason for doing this is a scenario like this:
18128
 
18129
     template <class T>
18130
     void f(const T&, int i);
18131
 
18132
     void g() { f(3, 7); }
18133
 
18134
     template <class T>
18135
     void f(const T& t, const int i) { }
18136
 
18137
   Note that when the template is first instantiated, with
18138
   instantiate_template, the resulting DECL will have no name for the
18139
   first parameter, and the wrong type for the second.  So, when we go
18140
   to instantiate the DECL, we regenerate it.  */
18141
 
18142
static void
18143
regenerate_decl_from_template (tree decl, tree tmpl)
18144
{
18145
  /* The arguments used to instantiate DECL, from the most general
18146
     template.  */
18147
  tree args;
18148
  tree code_pattern;
18149
 
18150
  args = DECL_TI_ARGS (decl);
18151
  code_pattern = DECL_TEMPLATE_RESULT (tmpl);
18152
 
18153
  /* Make sure that we can see identifiers, and compute access
18154
     correctly.  */
18155
  push_access_scope (decl);
18156
 
18157
  if (TREE_CODE (decl) == FUNCTION_DECL)
18158
    {
18159
      tree decl_parm;
18160
      tree pattern_parm;
18161
      tree specs;
18162
      int args_depth;
18163
      int parms_depth;
18164
 
18165
      args_depth = TMPL_ARGS_DEPTH (args);
18166
      parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
18167
      if (args_depth > parms_depth)
18168
        args = get_innermost_template_args (args, parms_depth);
18169
 
18170
      specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
18171
                                              args, tf_error, NULL_TREE,
18172
                                              /*defer_ok*/false);
18173
      if (specs && specs != error_mark_node)
18174
        TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
18175
                                                    specs);
18176
 
18177
      /* Merge parameter declarations.  */
18178
      decl_parm = skip_artificial_parms_for (decl,
18179
                                             DECL_ARGUMENTS (decl));
18180
      pattern_parm
18181
        = skip_artificial_parms_for (code_pattern,
18182
                                     DECL_ARGUMENTS (code_pattern));
18183
      while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
18184
        {
18185
          tree parm_type;
18186
          tree attributes;
18187
 
18188
          if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
18189
            DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
18190
          parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
18191
                              NULL_TREE);
18192
          parm_type = type_decays_to (parm_type);
18193
          if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
18194
            TREE_TYPE (decl_parm) = parm_type;
18195
          attributes = DECL_ATTRIBUTES (pattern_parm);
18196
          if (DECL_ATTRIBUTES (decl_parm) != attributes)
18197
            {
18198
              DECL_ATTRIBUTES (decl_parm) = attributes;
18199
              cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
18200
            }
18201
          decl_parm = DECL_CHAIN (decl_parm);
18202
          pattern_parm = DECL_CHAIN (pattern_parm);
18203
        }
18204
      /* Merge any parameters that match with the function parameter
18205
         pack.  */
18206
      if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
18207
        {
18208
          int i, len;
18209
          tree expanded_types;
18210
          /* Expand the TYPE_PACK_EXPANSION that provides the types for
18211
             the parameters in this function parameter pack.  */
18212
          expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm),
18213
                                                 args, tf_error, NULL_TREE);
18214
          len = TREE_VEC_LENGTH (expanded_types);
18215
          for (i = 0; i < len; i++)
18216
            {
18217
              tree parm_type;
18218
              tree attributes;
18219
 
18220
              if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
18221
                /* Rename the parameter to include the index.  */
18222
                DECL_NAME (decl_parm) =
18223
                  make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
18224
              parm_type = TREE_VEC_ELT (expanded_types, i);
18225
              parm_type = type_decays_to (parm_type);
18226
              if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
18227
                TREE_TYPE (decl_parm) = parm_type;
18228
              attributes = DECL_ATTRIBUTES (pattern_parm);
18229
              if (DECL_ATTRIBUTES (decl_parm) != attributes)
18230
                {
18231
                  DECL_ATTRIBUTES (decl_parm) = attributes;
18232
                  cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
18233
                }
18234
              decl_parm = DECL_CHAIN (decl_parm);
18235
            }
18236
        }
18237
      /* Merge additional specifiers from the CODE_PATTERN.  */
18238
      if (DECL_DECLARED_INLINE_P (code_pattern)
18239
          && !DECL_DECLARED_INLINE_P (decl))
18240
        DECL_DECLARED_INLINE_P (decl) = 1;
18241
    }
18242
  else if (TREE_CODE (decl) == VAR_DECL)
18243
    {
18244
      DECL_INITIAL (decl) =
18245
        tsubst_expr (DECL_INITIAL (code_pattern), args,
18246
                     tf_error, DECL_TI_TEMPLATE (decl),
18247
                     /*integral_constant_expression_p=*/false);
18248
      if (VAR_HAD_UNKNOWN_BOUND (decl))
18249
        TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
18250
                                   tf_error, DECL_TI_TEMPLATE (decl));
18251
    }
18252
  else
18253
    gcc_unreachable ();
18254
 
18255
  pop_access_scope (decl);
18256
}
18257
 
18258
/* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
18259
   substituted to get DECL.  */
18260
 
18261
tree
18262
template_for_substitution (tree decl)
18263
{
18264
  tree tmpl = DECL_TI_TEMPLATE (decl);
18265
 
18266
  /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
18267
     for the instantiation.  This is not always the most general
18268
     template.  Consider, for example:
18269
 
18270
        template <class T>
18271
        struct S { template <class U> void f();
18272
                   template <> void f<int>(); };
18273
 
18274
     and an instantiation of S<double>::f<int>.  We want TD to be the
18275
     specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
18276
  while (/* An instantiation cannot have a definition, so we need a
18277
            more general template.  */
18278
         DECL_TEMPLATE_INSTANTIATION (tmpl)
18279
           /* We must also deal with friend templates.  Given:
18280
 
18281
                template <class T> struct S {
18282
                  template <class U> friend void f() {};
18283
                };
18284
 
18285
              S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
18286
              so far as the language is concerned, but that's still
18287
              where we get the pattern for the instantiation from.  On
18288
              other hand, if the definition comes outside the class, say:
18289
 
18290
                template <class T> struct S {
18291
                  template <class U> friend void f();
18292
                };
18293
                template <class U> friend void f() {}
18294
 
18295
              we don't need to look any further.  That's what the check for
18296
              DECL_INITIAL is for.  */
18297
          || (TREE_CODE (decl) == FUNCTION_DECL
18298
              && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
18299
              && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
18300
    {
18301
      /* The present template, TD, should not be a definition.  If it
18302
         were a definition, we should be using it!  Note that we
18303
         cannot restructure the loop to just keep going until we find
18304
         a template with a definition, since that might go too far if
18305
         a specialization was declared, but not defined.  */
18306
      gcc_assert (TREE_CODE (decl) != VAR_DECL
18307
                  || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
18308
 
18309
      /* Fetch the more general template.  */
18310
      tmpl = DECL_TI_TEMPLATE (tmpl);
18311
    }
18312
 
18313
  return tmpl;
18314
}
18315
 
18316
/* Returns true if we need to instantiate this template instance even if we
18317
   know we aren't going to emit it..  */
18318
 
18319
bool
18320
always_instantiate_p (tree decl)
18321
{
18322
  /* We always instantiate inline functions so that we can inline them.  An
18323
     explicit instantiation declaration prohibits implicit instantiation of
18324
     non-inline functions.  With high levels of optimization, we would
18325
     normally inline non-inline functions -- but we're not allowed to do
18326
     that for "extern template" functions.  Therefore, we check
18327
     DECL_DECLARED_INLINE_P, rather than possibly_inlined_p.  */
18328
  return ((TREE_CODE (decl) == FUNCTION_DECL
18329
           && DECL_DECLARED_INLINE_P (decl))
18330
          /* And we need to instantiate static data members so that
18331
             their initializers are available in integral constant
18332
             expressions.  */
18333
          || (TREE_CODE (decl) == VAR_DECL
18334
              && decl_maybe_constant_var_p (decl)));
18335
}
18336
 
18337
/* If FN has a noexcept-specifier that hasn't been instantiated yet,
18338
   instantiate it now, modifying TREE_TYPE (fn).  */
18339
 
18340
void
18341
maybe_instantiate_noexcept (tree fn)
18342
{
18343
  tree fntype, spec, noex, clone;
18344
 
18345
  if (DECL_CLONED_FUNCTION_P (fn))
18346
    fn = DECL_CLONED_FUNCTION (fn);
18347
  fntype = TREE_TYPE (fn);
18348
  spec = TYPE_RAISES_EXCEPTIONS (fntype);
18349
 
18350
  if (!DEFERRED_NOEXCEPT_SPEC_P (spec))
18351
    return;
18352
 
18353
  noex = TREE_PURPOSE (spec);
18354
 
18355
  if (TREE_CODE (noex) == DEFERRED_NOEXCEPT)
18356
    {
18357
      if (push_tinst_level (fn))
18358
        {
18359
          push_access_scope (fn);
18360
          input_location = DECL_SOURCE_LOCATION (fn);
18361
          noex = tsubst_copy_and_build (DEFERRED_NOEXCEPT_PATTERN (noex),
18362
                                        DEFERRED_NOEXCEPT_ARGS (noex),
18363
                                        tf_warning_or_error, fn,
18364
                                        /*function_p=*/false,
18365
                                        /*integral_constant_expression_p=*/true);
18366
          pop_access_scope (fn);
18367
          pop_tinst_level ();
18368
          spec = build_noexcept_spec (noex, tf_warning_or_error);
18369
          if (spec == error_mark_node)
18370
            spec = noexcept_false_spec;
18371
        }
18372
      else
18373
        spec = noexcept_false_spec;
18374
    }
18375
  else
18376
    {
18377
      /* This is an implicitly declared function, so NOEX is a list of
18378
         other functions to evaluate and merge.  */
18379
      tree elt;
18380
      spec = noexcept_true_spec;
18381
      for (elt = noex; elt; elt = OVL_NEXT (elt))
18382
        {
18383
          tree fn = OVL_CURRENT (elt);
18384
          tree subspec;
18385
          maybe_instantiate_noexcept (fn);
18386
          subspec = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn));
18387
          spec = merge_exception_specifiers (spec, subspec, NULL_TREE);
18388
        }
18389
    }
18390
 
18391
  TREE_TYPE (fn) = build_exception_variant (fntype, spec);
18392
 
18393
  FOR_EACH_CLONE (clone, fn)
18394
    {
18395
      if (TREE_TYPE (clone) == fntype)
18396
        TREE_TYPE (clone) = TREE_TYPE (fn);
18397
      else
18398
        TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone), spec);
18399
    }
18400
}
18401
 
18402
/* Produce the definition of D, a _DECL generated from a template.  If
18403
   DEFER_OK is nonzero, then we don't have to actually do the
18404
   instantiation now; we just have to do it sometime.  Normally it is
18405
   an error if this is an explicit instantiation but D is undefined.
18406
   EXPL_INST_CLASS_MEM_P is true iff D is a member of an
18407
   explicitly instantiated class template.  */
18408
 
18409
tree
18410
instantiate_decl (tree d, int defer_ok,
18411
                  bool expl_inst_class_mem_p)
18412
{
18413
  tree tmpl = DECL_TI_TEMPLATE (d);
18414
  tree gen_args;
18415
  tree args;
18416
  tree td;
18417
  tree code_pattern;
18418
  tree spec;
18419
  tree gen_tmpl;
18420
  bool pattern_defined;
18421
  int need_push;
18422
  location_t saved_loc = input_location;
18423
  bool external_p;
18424
 
18425
  /* This function should only be used to instantiate templates for
18426
     functions and static member variables.  */
18427
  gcc_assert (TREE_CODE (d) == FUNCTION_DECL
18428
              || TREE_CODE (d) == VAR_DECL);
18429
 
18430
  /* Variables are never deferred; if instantiation is required, they
18431
     are instantiated right away.  That allows for better code in the
18432
     case that an expression refers to the value of the variable --
18433
     if the variable has a constant value the referring expression can
18434
     take advantage of that fact.  */
18435
  if (TREE_CODE (d) == VAR_DECL
18436
      || DECL_DECLARED_CONSTEXPR_P (d))
18437
    defer_ok = 0;
18438
 
18439
  /* Don't instantiate cloned functions.  Instead, instantiate the
18440
     functions they cloned.  */
18441
  if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
18442
    d = DECL_CLONED_FUNCTION (d);
18443
 
18444
  if (DECL_TEMPLATE_INSTANTIATED (d)
18445
      || (TREE_CODE (d) == FUNCTION_DECL
18446
          && DECL_DEFAULTED_FN (d) && DECL_INITIAL (d))
18447
      || DECL_TEMPLATE_SPECIALIZATION (d))
18448
    /* D has already been instantiated or explicitly specialized, so
18449
       there's nothing for us to do here.
18450
 
18451
       It might seem reasonable to check whether or not D is an explicit
18452
       instantiation, and, if so, stop here.  But when an explicit
18453
       instantiation is deferred until the end of the compilation,
18454
       DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
18455
       the instantiation.  */
18456
    return d;
18457
 
18458
  /* Check to see whether we know that this template will be
18459
     instantiated in some other file, as with "extern template"
18460
     extension.  */
18461
  external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
18462
 
18463
  /* In general, we do not instantiate such templates.  */
18464
  if (external_p && !always_instantiate_p (d))
18465
    return d;
18466
 
18467
  gen_tmpl = most_general_template (tmpl);
18468
  gen_args = DECL_TI_ARGS (d);
18469
 
18470
  if (tmpl != gen_tmpl)
18471
    /* We should already have the extra args.  */
18472
    gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
18473
                == TMPL_ARGS_DEPTH (gen_args));
18474
  /* And what's in the hash table should match D.  */
18475
  gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
18476
              || spec == NULL_TREE);
18477
 
18478
  /* This needs to happen before any tsubsting.  */
18479
  if (! push_tinst_level (d))
18480
    return d;
18481
 
18482
  timevar_push (TV_TEMPLATE_INST);
18483
 
18484
  /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
18485
     for the instantiation.  */
18486
  td = template_for_substitution (d);
18487
  code_pattern = DECL_TEMPLATE_RESULT (td);
18488
 
18489
  /* We should never be trying to instantiate a member of a class
18490
     template or partial specialization.  */
18491
  gcc_assert (d != code_pattern);
18492
 
18493
  if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
18494
      || DECL_TEMPLATE_SPECIALIZATION (td))
18495
    /* In the case of a friend template whose definition is provided
18496
       outside the class, we may have too many arguments.  Drop the
18497
       ones we don't need.  The same is true for specializations.  */
18498
    args = get_innermost_template_args
18499
      (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
18500
  else
18501
    args = gen_args;
18502
 
18503
  if (TREE_CODE (d) == FUNCTION_DECL)
18504
    pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE
18505
                       || DECL_DEFAULTED_OUTSIDE_CLASS_P (code_pattern));
18506
  else
18507
    pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
18508
 
18509
  /* We may be in the middle of deferred access check.  Disable it now.  */
18510
  push_deferring_access_checks (dk_no_deferred);
18511
 
18512
  /* Unless an explicit instantiation directive has already determined
18513
     the linkage of D, remember that a definition is available for
18514
     this entity.  */
18515
  if (pattern_defined
18516
      && !DECL_INTERFACE_KNOWN (d)
18517
      && !DECL_NOT_REALLY_EXTERN (d))
18518
    mark_definable (d);
18519
 
18520
  DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
18521
  DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
18522
  input_location = DECL_SOURCE_LOCATION (d);
18523
 
18524
  /* If D is a member of an explicitly instantiated class template,
18525
     and no definition is available, treat it like an implicit
18526
     instantiation.  */
18527
  if (!pattern_defined && expl_inst_class_mem_p
18528
      && DECL_EXPLICIT_INSTANTIATION (d))
18529
    {
18530
      /* Leave linkage flags alone on instantiations with anonymous
18531
         visibility.  */
18532
      if (TREE_PUBLIC (d))
18533
        {
18534
          DECL_NOT_REALLY_EXTERN (d) = 0;
18535
          DECL_INTERFACE_KNOWN (d) = 0;
18536
        }
18537
      SET_DECL_IMPLICIT_INSTANTIATION (d);
18538
    }
18539
 
18540
  if (TREE_CODE (d) == FUNCTION_DECL)
18541
    maybe_instantiate_noexcept (d);
18542
 
18543
  /* Recheck the substitutions to obtain any warning messages
18544
     about ignoring cv qualifiers.  Don't do this for artificial decls,
18545
     as it breaks the context-sensitive substitution for lambda op(). */
18546
  if (!defer_ok && !DECL_ARTIFICIAL (d))
18547
    {
18548
      tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
18549
      tree type = TREE_TYPE (gen);
18550
 
18551
      /* Make sure that we can see identifiers, and compute access
18552
         correctly.  D is already the target FUNCTION_DECL with the
18553
         right context.  */
18554
      push_access_scope (d);
18555
 
18556
      if (TREE_CODE (gen) == FUNCTION_DECL)
18557
        {
18558
          tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
18559
          tsubst_exception_specification (type, gen_args, tf_warning_or_error,
18560
                                          d, /*defer_ok*/true);
18561
          /* Don't simply tsubst the function type, as that will give
18562
             duplicate warnings about poor parameter qualifications.
18563
             The function arguments are the same as the decl_arguments
18564
             without the top level cv qualifiers.  */
18565
          type = TREE_TYPE (type);
18566
        }
18567
      tsubst (type, gen_args, tf_warning_or_error, d);
18568
 
18569
      pop_access_scope (d);
18570
    }
18571
 
18572
  /* Defer all other templates, unless we have been explicitly
18573
     forbidden from doing so.  */
18574
  if (/* If there is no definition, we cannot instantiate the
18575
         template.  */
18576
      ! pattern_defined
18577
      /* If it's OK to postpone instantiation, do so.  */
18578
      || defer_ok
18579
      /* If this is a static data member that will be defined
18580
         elsewhere, we don't want to instantiate the entire data
18581
         member, but we do want to instantiate the initializer so that
18582
         we can substitute that elsewhere.  */
18583
      || (external_p && TREE_CODE (d) == VAR_DECL))
18584
    {
18585
      /* The definition of the static data member is now required so
18586
         we must substitute the initializer.  */
18587
      if (TREE_CODE (d) == VAR_DECL
18588
          && !DECL_INITIAL (d)
18589
          && DECL_INITIAL (code_pattern))
18590
        {
18591
          tree ns;
18592
          tree init;
18593
          bool const_init = false;
18594
 
18595
          ns = decl_namespace_context (d);
18596
          push_nested_namespace (ns);
18597
          push_nested_class (DECL_CONTEXT (d));
18598
          init = tsubst_expr (DECL_INITIAL (code_pattern),
18599
                              args,
18600
                              tf_warning_or_error, NULL_TREE,
18601
                              /*integral_constant_expression_p=*/false);
18602
          /* Make sure the initializer is still constant, in case of
18603
             circular dependency (template/instantiate6.C). */
18604
          const_init
18605
            = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
18606
          cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
18607
                          /*asmspec_tree=*/NULL_TREE,
18608
                          LOOKUP_ONLYCONVERTING);
18609
          pop_nested_class ();
18610
          pop_nested_namespace (ns);
18611
        }
18612
 
18613
      /* We restore the source position here because it's used by
18614
         add_pending_template.  */
18615
      input_location = saved_loc;
18616
 
18617
      if (at_eof && !pattern_defined
18618
          && DECL_EXPLICIT_INSTANTIATION (d)
18619
          && DECL_NOT_REALLY_EXTERN (d))
18620
        /* [temp.explicit]
18621
 
18622
           The definition of a non-exported function template, a
18623
           non-exported member function template, or a non-exported
18624
           member function or static data member of a class template
18625
           shall be present in every translation unit in which it is
18626
           explicitly instantiated.  */
18627
        permerror (input_location,  "explicit instantiation of %qD "
18628
                   "but no definition available", d);
18629
 
18630
      /* If we're in unevaluated context, we just wanted to get the
18631
         constant value; this isn't an odr use, so don't queue
18632
         a full instantiation.  */
18633
      if (cp_unevaluated_operand != 0)
18634
        goto out;
18635
      /* ??? Historically, we have instantiated inline functions, even
18636
         when marked as "extern template".  */
18637
      if (!(external_p && TREE_CODE (d) == VAR_DECL))
18638
        add_pending_template (d);
18639
      goto out;
18640
    }
18641
  /* Tell the repository that D is available in this translation unit
18642
     -- and see if it is supposed to be instantiated here.  */
18643
  if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
18644
    {
18645
      /* In a PCH file, despite the fact that the repository hasn't
18646
         requested instantiation in the PCH it is still possible that
18647
         an instantiation will be required in a file that includes the
18648
         PCH.  */
18649
      if (pch_file)
18650
        add_pending_template (d);
18651
      /* Instantiate inline functions so that the inliner can do its
18652
         job, even though we'll not be emitting a copy of this
18653
         function.  */
18654
      if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
18655
        goto out;
18656
    }
18657
 
18658
  need_push = !cfun || !global_bindings_p ();
18659
  if (need_push)
18660
    push_to_top_level ();
18661
 
18662
  /* Mark D as instantiated so that recursive calls to
18663
     instantiate_decl do not try to instantiate it again.  */
18664
  DECL_TEMPLATE_INSTANTIATED (d) = 1;
18665
 
18666
  /* Regenerate the declaration in case the template has been modified
18667
     by a subsequent redeclaration.  */
18668
  regenerate_decl_from_template (d, td);
18669
 
18670
  /* We already set the file and line above.  Reset them now in case
18671
     they changed as a result of calling regenerate_decl_from_template.  */
18672
  input_location = DECL_SOURCE_LOCATION (d);
18673
 
18674
  if (TREE_CODE (d) == VAR_DECL)
18675
    {
18676
      tree init;
18677
      bool const_init = false;
18678
 
18679
      /* Clear out DECL_RTL; whatever was there before may not be right
18680
         since we've reset the type of the declaration.  */
18681
      SET_DECL_RTL (d, NULL);
18682
      DECL_IN_AGGR_P (d) = 0;
18683
 
18684
      /* The initializer is placed in DECL_INITIAL by
18685
         regenerate_decl_from_template so we don't need to
18686
         push/pop_access_scope again here.  Pull it out so that
18687
         cp_finish_decl can process it.  */
18688
      init = DECL_INITIAL (d);
18689
      DECL_INITIAL (d) = NULL_TREE;
18690
      DECL_INITIALIZED_P (d) = 0;
18691
 
18692
      /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
18693
         initializer.  That function will defer actual emission until
18694
         we have a chance to determine linkage.  */
18695
      DECL_EXTERNAL (d) = 0;
18696
 
18697
      /* Enter the scope of D so that access-checking works correctly.  */
18698
      push_nested_class (DECL_CONTEXT (d));
18699
      const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
18700
      cp_finish_decl (d, init, const_init, NULL_TREE, 0);
18701
      pop_nested_class ();
18702
    }
18703
  else if (TREE_CODE (d) == FUNCTION_DECL && DECL_DEFAULTED_FN (code_pattern))
18704
    synthesize_method (d);
18705
  else if (TREE_CODE (d) == FUNCTION_DECL)
18706
    {
18707
      htab_t saved_local_specializations;
18708
      tree subst_decl;
18709
      tree tmpl_parm;
18710
      tree spec_parm;
18711
 
18712
      /* Save away the current list, in case we are instantiating one
18713
         template from within the body of another.  */
18714
      saved_local_specializations = local_specializations;
18715
 
18716
      /* Set up the list of local specializations.  */
18717
      local_specializations = htab_create (37,
18718
                                           hash_local_specialization,
18719
                                           eq_local_specializations,
18720
                                           NULL);
18721
 
18722
      /* Set up context.  */
18723
      start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
18724
 
18725
      /* Create substitution entries for the parameters.  */
18726
      subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
18727
      tmpl_parm = DECL_ARGUMENTS (subst_decl);
18728
      spec_parm = DECL_ARGUMENTS (d);
18729
      if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
18730
        {
18731
          register_local_specialization (spec_parm, tmpl_parm);
18732
          spec_parm = skip_artificial_parms_for (d, spec_parm);
18733
          tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
18734
        }
18735
      for (; tmpl_parm; tmpl_parm = DECL_CHAIN (tmpl_parm))
18736
        {
18737
          if (!FUNCTION_PARAMETER_PACK_P (tmpl_parm))
18738
            {
18739
              register_local_specialization (spec_parm, tmpl_parm);
18740
              spec_parm = DECL_CHAIN (spec_parm);
18741
            }
18742
          else
18743
            {
18744
              /* Register the (value) argument pack as a specialization of
18745
                 TMPL_PARM, then move on.  */
18746
              tree argpack = extract_fnparm_pack (tmpl_parm, &spec_parm);
18747
              register_local_specialization (argpack, tmpl_parm);
18748
            }
18749
        }
18750
      gcc_assert (!spec_parm);
18751
 
18752
      /* Substitute into the body of the function.  */
18753
      tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
18754
                   tf_warning_or_error, tmpl,
18755
                   /*integral_constant_expression_p=*/false);
18756
 
18757
      /* Set the current input_location to the end of the function
18758
         so that finish_function knows where we are.  */
18759
      input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
18760
 
18761
      /* We don't need the local specializations any more.  */
18762
      htab_delete (local_specializations);
18763
      local_specializations = saved_local_specializations;
18764
 
18765
      /* Finish the function.  */
18766
      d = finish_function (0);
18767
      expand_or_defer_fn (d);
18768
    }
18769
 
18770
  /* We're not deferring instantiation any more.  */
18771
  TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
18772
 
18773
  if (need_push)
18774
    pop_from_top_level ();
18775
 
18776
out:
18777
  input_location = saved_loc;
18778
  pop_deferring_access_checks ();
18779
  pop_tinst_level ();
18780
 
18781
  timevar_pop (TV_TEMPLATE_INST);
18782
 
18783
  return d;
18784
}
18785
 
18786
/* Run through the list of templates that we wish we could
18787
   instantiate, and instantiate any we can.  RETRIES is the
18788
   number of times we retry pending template instantiation.  */
18789
 
18790
void
18791
instantiate_pending_templates (int retries)
18792
{
18793
  int reconsider;
18794
  location_t saved_loc = input_location;
18795
 
18796
  /* Instantiating templates may trigger vtable generation.  This in turn
18797
     may require further template instantiations.  We place a limit here
18798
     to avoid infinite loop.  */
18799
  if (pending_templates && retries >= max_tinst_depth)
18800
    {
18801
      tree decl = pending_templates->tinst->decl;
18802
 
18803
      error ("template instantiation depth exceeds maximum of %d"
18804
             " instantiating %q+D, possibly from virtual table generation"
18805
             " (use -ftemplate-depth= to increase the maximum)",
18806
             max_tinst_depth, decl);
18807
      if (TREE_CODE (decl) == FUNCTION_DECL)
18808
        /* Pretend that we defined it.  */
18809
        DECL_INITIAL (decl) = error_mark_node;
18810
      return;
18811
    }
18812
 
18813
  do
18814
    {
18815
      struct pending_template **t = &pending_templates;
18816
      struct pending_template *last = NULL;
18817
      reconsider = 0;
18818
      while (*t)
18819
        {
18820
          tree instantiation = reopen_tinst_level ((*t)->tinst);
18821
          bool complete = false;
18822
 
18823
          if (TYPE_P (instantiation))
18824
            {
18825
              tree fn;
18826
 
18827
              if (!COMPLETE_TYPE_P (instantiation))
18828
                {
18829
                  instantiate_class_template (instantiation);
18830
                  if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
18831
                    for (fn = TYPE_METHODS (instantiation);
18832
                         fn;
18833
                         fn = TREE_CHAIN (fn))
18834
                      if (! DECL_ARTIFICIAL (fn))
18835
                        instantiate_decl (fn,
18836
                                          /*defer_ok=*/0,
18837
                                          /*expl_inst_class_mem_p=*/false);
18838
                  if (COMPLETE_TYPE_P (instantiation))
18839
                    reconsider = 1;
18840
                }
18841
 
18842
              complete = COMPLETE_TYPE_P (instantiation);
18843
            }
18844
          else
18845
            {
18846
              if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
18847
                  && !DECL_TEMPLATE_INSTANTIATED (instantiation))
18848
                {
18849
                  instantiation
18850
                    = instantiate_decl (instantiation,
18851
                                        /*defer_ok=*/0,
18852
                                        /*expl_inst_class_mem_p=*/false);
18853
                  if (DECL_TEMPLATE_INSTANTIATED (instantiation))
18854
                    reconsider = 1;
18855
                }
18856
 
18857
              complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
18858
                          || DECL_TEMPLATE_INSTANTIATED (instantiation));
18859
            }
18860
 
18861
          if (complete)
18862
            /* If INSTANTIATION has been instantiated, then we don't
18863
               need to consider it again in the future.  */
18864
            *t = (*t)->next;
18865
          else
18866
            {
18867
              last = *t;
18868
              t = &(*t)->next;
18869
            }
18870
          tinst_depth = 0;
18871
          current_tinst_level = NULL;
18872
        }
18873
      last_pending_template = last;
18874
    }
18875
  while (reconsider);
18876
 
18877
  input_location = saved_loc;
18878
}
18879
 
18880
/* Substitute ARGVEC into T, which is a list of initializers for
18881
   either base class or a non-static data member.  The TREE_PURPOSEs
18882
   are DECLs, and the TREE_VALUEs are the initializer values.  Used by
18883
   instantiate_decl.  */
18884
 
18885
static tree
18886
tsubst_initializer_list (tree t, tree argvec)
18887
{
18888
  tree inits = NULL_TREE;
18889
 
18890
  for (; t; t = TREE_CHAIN (t))
18891
    {
18892
      tree decl;
18893
      tree init;
18894
      tree expanded_bases = NULL_TREE;
18895
      tree expanded_arguments = NULL_TREE;
18896
      int i, len = 1;
18897
 
18898
      if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
18899
        {
18900
          tree expr;
18901
          tree arg;
18902
 
18903
          /* Expand the base class expansion type into separate base
18904
             classes.  */
18905
          expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
18906
                                                 tf_warning_or_error,
18907
                                                 NULL_TREE);
18908
          if (expanded_bases == error_mark_node)
18909
            continue;
18910
 
18911
          /* We'll be building separate TREE_LISTs of arguments for
18912
             each base.  */
18913
          len = TREE_VEC_LENGTH (expanded_bases);
18914
          expanded_arguments = make_tree_vec (len);
18915
          for (i = 0; i < len; i++)
18916
            TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
18917
 
18918
          /* Build a dummy EXPR_PACK_EXPANSION that will be used to
18919
             expand each argument in the TREE_VALUE of t.  */
18920
          expr = make_node (EXPR_PACK_EXPANSION);
18921
          PACK_EXPANSION_LOCAL_P (expr) = true;
18922
          PACK_EXPANSION_PARAMETER_PACKS (expr) =
18923
            PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
18924
 
18925
          if (TREE_VALUE (t) == void_type_node)
18926
            /* VOID_TYPE_NODE is used to indicate
18927
               value-initialization.  */
18928
            {
18929
              for (i = 0; i < len; i++)
18930
                TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
18931
            }
18932
          else
18933
            {
18934
              /* Substitute parameter packs into each argument in the
18935
                 TREE_LIST.  */
18936
              in_base_initializer = 1;
18937
              for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
18938
                {
18939
                  tree expanded_exprs;
18940
 
18941
                  /* Expand the argument.  */
18942
                  SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
18943
                  expanded_exprs
18944
                    = tsubst_pack_expansion (expr, argvec,
18945
                                             tf_warning_or_error,
18946
                                             NULL_TREE);
18947
                  if (expanded_exprs == error_mark_node)
18948
                    continue;
18949
 
18950
                  /* Prepend each of the expanded expressions to the
18951
                     corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
18952
                  for (i = 0; i < len; i++)
18953
                    {
18954
                      TREE_VEC_ELT (expanded_arguments, i) =
18955
                        tree_cons (NULL_TREE,
18956
                                   TREE_VEC_ELT (expanded_exprs, i),
18957
                                   TREE_VEC_ELT (expanded_arguments, i));
18958
                    }
18959
                }
18960
              in_base_initializer = 0;
18961
 
18962
              /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
18963
                 since we built them backwards.  */
18964
              for (i = 0; i < len; i++)
18965
                {
18966
                  TREE_VEC_ELT (expanded_arguments, i) =
18967
                    nreverse (TREE_VEC_ELT (expanded_arguments, i));
18968
                }
18969
            }
18970
        }
18971
 
18972
      for (i = 0; i < len; ++i)
18973
        {
18974
          if (expanded_bases)
18975
            {
18976
              decl = TREE_VEC_ELT (expanded_bases, i);
18977
              decl = expand_member_init (decl);
18978
              init = TREE_VEC_ELT (expanded_arguments, i);
18979
            }
18980
          else
18981
            {
18982
              decl = tsubst_copy (TREE_PURPOSE (t), argvec,
18983
                                  tf_warning_or_error, NULL_TREE);
18984
 
18985
              decl = expand_member_init (decl);
18986
              if (decl && !DECL_P (decl))
18987
                in_base_initializer = 1;
18988
 
18989
              init = TREE_VALUE (t);
18990
              if (init != void_type_node)
18991
                init = tsubst_expr (init, argvec,
18992
                                    tf_warning_or_error, NULL_TREE,
18993
                                    /*integral_constant_expression_p=*/false);
18994
              in_base_initializer = 0;
18995
            }
18996
 
18997
          if (decl)
18998
            {
18999
              init = build_tree_list (decl, init);
19000
              TREE_CHAIN (init) = inits;
19001
              inits = init;
19002
            }
19003
        }
19004
    }
19005
  return inits;
19006
}
19007
 
19008
/* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
19009
 
19010
static void
19011
set_current_access_from_decl (tree decl)
19012
{
19013
  if (TREE_PRIVATE (decl))
19014
    current_access_specifier = access_private_node;
19015
  else if (TREE_PROTECTED (decl))
19016
    current_access_specifier = access_protected_node;
19017
  else
19018
    current_access_specifier = access_public_node;
19019
}
19020
 
19021
/* Instantiate an enumerated type.  TAG is the template type, NEWTAG
19022
   is the instantiation (which should have been created with
19023
   start_enum) and ARGS are the template arguments to use.  */
19024
 
19025
static void
19026
tsubst_enum (tree tag, tree newtag, tree args)
19027
{
19028
  tree e;
19029
 
19030
  if (SCOPED_ENUM_P (newtag))
19031
    begin_scope (sk_scoped_enum, newtag);
19032
 
19033
  for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
19034
    {
19035
      tree value;
19036
      tree decl;
19037
 
19038
      decl = TREE_VALUE (e);
19039
      /* Note that in a template enum, the TREE_VALUE is the
19040
         CONST_DECL, not the corresponding INTEGER_CST.  */
19041
      value = tsubst_expr (DECL_INITIAL (decl),
19042
                           args, tf_warning_or_error, NULL_TREE,
19043
                           /*integral_constant_expression_p=*/true);
19044
 
19045
      /* Give this enumeration constant the correct access.  */
19046
      set_current_access_from_decl (decl);
19047
 
19048
      /* Actually build the enumerator itself.  */
19049
      build_enumerator
19050
        (DECL_NAME (decl), value, newtag, DECL_SOURCE_LOCATION (decl));
19051
    }
19052
 
19053
  if (SCOPED_ENUM_P (newtag))
19054
    finish_scope ();
19055
 
19056
  finish_enum_value_list (newtag);
19057
  finish_enum (newtag);
19058
 
19059
  DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
19060
    = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
19061
}
19062
 
19063
/* DECL is a FUNCTION_DECL that is a template specialization.  Return
19064
   its type -- but without substituting the innermost set of template
19065
   arguments.  So, innermost set of template parameters will appear in
19066
   the type.  */
19067
 
19068
tree
19069
get_mostly_instantiated_function_type (tree decl)
19070
{
19071
  tree fn_type;
19072
  tree tmpl;
19073
  tree targs;
19074
  tree tparms;
19075
  int parm_depth;
19076
 
19077
  tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
19078
  targs = DECL_TI_ARGS (decl);
19079
  tparms = DECL_TEMPLATE_PARMS (tmpl);
19080
  parm_depth = TMPL_PARMS_DEPTH (tparms);
19081
 
19082
  /* There should be as many levels of arguments as there are levels
19083
     of parameters.  */
19084
  gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
19085
 
19086
  fn_type = TREE_TYPE (tmpl);
19087
 
19088
  if (parm_depth == 1)
19089
    /* No substitution is necessary.  */
19090
    ;
19091
  else
19092
    {
19093
      int i;
19094
      tree partial_args;
19095
 
19096
      /* Replace the innermost level of the TARGS with NULL_TREEs to
19097
         let tsubst know not to substitute for those parameters.  */
19098
      partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
19099
      for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
19100
        SET_TMPL_ARGS_LEVEL (partial_args, i,
19101
                             TMPL_ARGS_LEVEL (targs, i));
19102
      SET_TMPL_ARGS_LEVEL (partial_args,
19103
                           TMPL_ARGS_DEPTH (targs),
19104
                           make_tree_vec (DECL_NTPARMS (tmpl)));
19105
 
19106
      /* Make sure that we can see identifiers, and compute access
19107
         correctly.  */
19108
      push_access_scope (decl);
19109
 
19110
      ++processing_template_decl;
19111
      /* Now, do the (partial) substitution to figure out the
19112
         appropriate function type.  */
19113
      fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
19114
      --processing_template_decl;
19115
 
19116
      /* Substitute into the template parameters to obtain the real
19117
         innermost set of parameters.  This step is important if the
19118
         innermost set of template parameters contains value
19119
         parameters whose types depend on outer template parameters.  */
19120
      TREE_VEC_LENGTH (partial_args)--;
19121
      tparms = tsubst_template_parms (tparms, partial_args, tf_error);
19122
 
19123
      pop_access_scope (decl);
19124
    }
19125
 
19126
  return fn_type;
19127
}
19128
 
19129
/* Return truthvalue if we're processing a template different from
19130
   the last one involved in diagnostics.  */
19131
int
19132
problematic_instantiation_changed (void)
19133
{
19134
  return current_tinst_level != last_error_tinst_level;
19135
}
19136
 
19137
/* Remember current template involved in diagnostics.  */
19138
void
19139
record_last_problematic_instantiation (void)
19140
{
19141
  last_error_tinst_level = current_tinst_level;
19142
}
19143
 
19144
struct tinst_level *
19145
current_instantiation (void)
19146
{
19147
  return current_tinst_level;
19148
}
19149
 
19150
/* [temp.param] Check that template non-type parm TYPE is of an allowable
19151
   type. Return zero for ok, nonzero for disallowed. Issue error and
19152
   warning messages under control of COMPLAIN.  */
19153
 
19154
static int
19155
invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
19156
{
19157
  if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
19158
    return 0;
19159
  else if (POINTER_TYPE_P (type))
19160
    return 0;
19161
  else if (TYPE_PTR_TO_MEMBER_P (type))
19162
    return 0;
19163
  else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
19164
    return 0;
19165
  else if (TREE_CODE (type) == TYPENAME_TYPE)
19166
    return 0;
19167
  else if (TREE_CODE (type) == DECLTYPE_TYPE)
19168
    return 0;
19169
  else if (TREE_CODE (type) == NULLPTR_TYPE)
19170
    return 0;
19171
 
19172
  if (complain & tf_error)
19173
    {
19174
      if (type == error_mark_node)
19175
        inform (input_location, "invalid template non-type parameter");
19176
      else
19177
        error ("%q#T is not a valid type for a template non-type parameter",
19178
               type);
19179
    }
19180
  return 1;
19181
}
19182
 
19183
/* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
19184
   Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
19185
 
19186
static bool
19187
dependent_type_p_r (tree type)
19188
{
19189
  tree scope;
19190
 
19191
  /* [temp.dep.type]
19192
 
19193
     A type is dependent if it is:
19194
 
19195
     -- a template parameter. Template template parameters are types
19196
        for us (since TYPE_P holds true for them) so we handle
19197
        them here.  */
19198
  if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
19199
      || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
19200
    return true;
19201
  /* -- a qualified-id with a nested-name-specifier which contains a
19202
        class-name that names a dependent type or whose unqualified-id
19203
        names a dependent type.  */
19204
  if (TREE_CODE (type) == TYPENAME_TYPE)
19205
    return true;
19206
  /* -- a cv-qualified type where the cv-unqualified type is
19207
        dependent.  */
19208
  type = TYPE_MAIN_VARIANT (type);
19209
  /* -- a compound type constructed from any dependent type.  */
19210
  if (TYPE_PTR_TO_MEMBER_P (type))
19211
    return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
19212
            || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
19213
                                           (type)));
19214
  else if (TREE_CODE (type) == POINTER_TYPE
19215
           || TREE_CODE (type) == REFERENCE_TYPE)
19216
    return dependent_type_p (TREE_TYPE (type));
19217
  else if (TREE_CODE (type) == FUNCTION_TYPE
19218
           || TREE_CODE (type) == METHOD_TYPE)
19219
    {
19220
      tree arg_type;
19221
 
19222
      if (dependent_type_p (TREE_TYPE (type)))
19223
        return true;
19224
      for (arg_type = TYPE_ARG_TYPES (type);
19225
           arg_type;
19226
           arg_type = TREE_CHAIN (arg_type))
19227
        if (dependent_type_p (TREE_VALUE (arg_type)))
19228
          return true;
19229
      return false;
19230
    }
19231
  /* -- an array type constructed from any dependent type or whose
19232
        size is specified by a constant expression that is
19233
        value-dependent.
19234
 
19235
        We checked for type- and value-dependence of the bounds in
19236
        compute_array_index_type, so TYPE_DEPENDENT_P is already set.  */
19237
  if (TREE_CODE (type) == ARRAY_TYPE)
19238
    {
19239
      if (TYPE_DOMAIN (type)
19240
          && dependent_type_p (TYPE_DOMAIN (type)))
19241
        return true;
19242
      return dependent_type_p (TREE_TYPE (type));
19243
    }
19244
 
19245
  /* -- a template-id in which either the template name is a template
19246
     parameter ...  */
19247
  if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
19248
    return true;
19249
  /* ... or any of the template arguments is a dependent type or
19250
        an expression that is type-dependent or value-dependent.  */
19251
  else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
19252
           && (any_dependent_template_arguments_p
19253
               (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
19254
    return true;
19255
 
19256
  /* All TYPEOF_TYPEs, DECLTYPE_TYPEs, and UNDERLYING_TYPEs are
19257
     dependent; if the argument of the `typeof' expression is not
19258
     type-dependent, then it should already been have resolved.  */
19259
  if (TREE_CODE (type) == TYPEOF_TYPE
19260
      || TREE_CODE (type) == DECLTYPE_TYPE
19261
      || TREE_CODE (type) == UNDERLYING_TYPE)
19262
    return true;
19263
 
19264
  /* A template argument pack is dependent if any of its packed
19265
     arguments are.  */
19266
  if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
19267
    {
19268
      tree args = ARGUMENT_PACK_ARGS (type);
19269
      int i, len = TREE_VEC_LENGTH (args);
19270
      for (i = 0; i < len; ++i)
19271
        if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
19272
          return true;
19273
    }
19274
 
19275
  /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
19276
     be template parameters.  */
19277
  if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
19278
    return true;
19279
 
19280
  /* The standard does not specifically mention types that are local
19281
     to template functions or local classes, but they should be
19282
     considered dependent too.  For example:
19283
 
19284
       template <int I> void f() {
19285
         enum E { a = I };
19286
         S<sizeof (E)> s;
19287
       }
19288
 
19289
     The size of `E' cannot be known until the value of `I' has been
19290
     determined.  Therefore, `E' must be considered dependent.  */
19291
  scope = TYPE_CONTEXT (type);
19292
  if (scope && TYPE_P (scope))
19293
    return dependent_type_p (scope);
19294
  /* Don't use type_dependent_expression_p here, as it can lead
19295
     to infinite recursion trying to determine whether a lambda
19296
     nested in a lambda is dependent (c++/47687).  */
19297
  else if (scope && TREE_CODE (scope) == FUNCTION_DECL
19298
           && DECL_LANG_SPECIFIC (scope)
19299
           && DECL_TEMPLATE_INFO (scope)
19300
           && (any_dependent_template_arguments_p
19301
               (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (scope)))))
19302
    return true;
19303
 
19304
  /* Other types are non-dependent.  */
19305
  return false;
19306
}
19307
 
19308
/* Returns TRUE if TYPE is dependent, in the sense of
19309
   [temp.dep.type].  Note that a NULL type is considered dependent.  */
19310
 
19311
bool
19312
dependent_type_p (tree type)
19313
{
19314
  /* If there are no template parameters in scope, then there can't be
19315
     any dependent types.  */
19316
  if (!processing_template_decl)
19317
    {
19318
      /* If we are not processing a template, then nobody should be
19319
         providing us with a dependent type.  */
19320
      gcc_assert (type);
19321
      gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
19322
      return false;
19323
    }
19324
 
19325
  /* If the type is NULL, we have not computed a type for the entity
19326
     in question; in that case, the type is dependent.  */
19327
  if (!type)
19328
    return true;
19329
 
19330
  /* Erroneous types can be considered non-dependent.  */
19331
  if (type == error_mark_node)
19332
    return false;
19333
 
19334
  /* If we have not already computed the appropriate value for TYPE,
19335
     do so now.  */
19336
  if (!TYPE_DEPENDENT_P_VALID (type))
19337
    {
19338
      TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
19339
      TYPE_DEPENDENT_P_VALID (type) = 1;
19340
    }
19341
 
19342
  return TYPE_DEPENDENT_P (type);
19343
}
19344
 
19345
/* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
19346
   lookup.  In other words, a dependent type that is not the current
19347
   instantiation.  */
19348
 
19349
bool
19350
dependent_scope_p (tree scope)
19351
{
19352
  return (scope && TYPE_P (scope) && dependent_type_p (scope)
19353
          && !currently_open_class (scope));
19354
}
19355
 
19356
/* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
19357
   [temp.dep.constexpr].  EXPRESSION is already known to be a constant
19358
   expression.  */
19359
 
19360
/* Note that this predicate is not appropriate for general expressions;
19361
   only constant expressions (that satisfy potential_constant_expression)
19362
   can be tested for value dependence.
19363
 
19364
   We should really also have a predicate for "instantiation-dependent".
19365
 
19366
   fold_non_dependent_expr: fold if constant and not type-dependent and not value-dependent.
19367
     (what about instantiation-dependent constant-expressions?)
19368
   is_late_template_attribute: defer if instantiation-dependent.
19369
   compute_array_index_type: proceed if constant and not t- or v-dependent
19370
     if instantiation-dependent, need to remember full expression
19371
   uses_template_parms: FIXME - need to audit callers
19372
   tsubst_decl [function_decl]: Why is this using value_dependent_expression_p?
19373
   dependent_type_p [array_type]: dependent if index type is dependent
19374
     (or non-constant?)
19375
   static_assert - instantiation-dependent */
19376
 
19377
bool
19378
value_dependent_expression_p (tree expression)
19379
{
19380
  if (!processing_template_decl)
19381
    return false;
19382
 
19383
  /* A name declared with a dependent type.  */
19384
  if (DECL_P (expression) && type_dependent_expression_p (expression))
19385
    return true;
19386
 
19387
  switch (TREE_CODE (expression))
19388
    {
19389
    case IDENTIFIER_NODE:
19390
      /* A name that has not been looked up -- must be dependent.  */
19391
      return true;
19392
 
19393
    case TEMPLATE_PARM_INDEX:
19394
      /* A non-type template parm.  */
19395
      return true;
19396
 
19397
    case CONST_DECL:
19398
      /* A non-type template parm.  */
19399
      if (DECL_TEMPLATE_PARM_P (expression))
19400
        return true;
19401
      return value_dependent_expression_p (DECL_INITIAL (expression));
19402
 
19403
    case VAR_DECL:
19404
       /* A constant with literal type and is initialized
19405
          with an expression that is value-dependent.  */
19406
      if (DECL_INITIAL (expression)
19407
          && decl_constant_var_p (expression)
19408
          && value_dependent_expression_p (DECL_INITIAL (expression)))
19409
        return true;
19410
      return false;
19411
 
19412
    case DYNAMIC_CAST_EXPR:
19413
    case STATIC_CAST_EXPR:
19414
    case CONST_CAST_EXPR:
19415
    case REINTERPRET_CAST_EXPR:
19416
    case CAST_EXPR:
19417
      /* These expressions are value-dependent if the type to which
19418
         the cast occurs is dependent or the expression being casted
19419
         is value-dependent.  */
19420
      {
19421
        tree type = TREE_TYPE (expression);
19422
 
19423
        if (dependent_type_p (type))
19424
          return true;
19425
 
19426
        /* A functional cast has a list of operands.  */
19427
        expression = TREE_OPERAND (expression, 0);
19428
        if (!expression)
19429
          {
19430
            /* If there are no operands, it must be an expression such
19431
               as "int()". This should not happen for aggregate types
19432
               because it would form non-constant expressions.  */
19433
            gcc_assert (cxx_dialect >= cxx0x
19434
                        || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
19435
 
19436
            return false;
19437
          }
19438
 
19439
        if (TREE_CODE (expression) == TREE_LIST)
19440
          return any_value_dependent_elements_p (expression);
19441
 
19442
        return value_dependent_expression_p (expression);
19443
      }
19444
 
19445
    case SIZEOF_EXPR:
19446
    case ALIGNOF_EXPR:
19447
    case TYPEID_EXPR:
19448
      /* A `sizeof' expression is value-dependent if the operand is
19449
         type-dependent or is a pack expansion.  */
19450
      expression = TREE_OPERAND (expression, 0);
19451
      if (PACK_EXPANSION_P (expression))
19452
        return true;
19453
      else if (TYPE_P (expression))
19454
        return dependent_type_p (expression);
19455
      return type_dependent_expression_p (expression);
19456
 
19457
    case AT_ENCODE_EXPR:
19458
      /* An 'encode' expression is value-dependent if the operand is
19459
         type-dependent.  */
19460
      expression = TREE_OPERAND (expression, 0);
19461
      return dependent_type_p (expression);
19462
 
19463
    case NOEXCEPT_EXPR:
19464
      expression = TREE_OPERAND (expression, 0);
19465
      return type_dependent_expression_p (expression);
19466
 
19467
    case SCOPE_REF:
19468
      {
19469
        tree name = TREE_OPERAND (expression, 1);
19470
        return value_dependent_expression_p (name);
19471
      }
19472
 
19473
    case COMPONENT_REF:
19474
      return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
19475
              || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
19476
 
19477
    case NONTYPE_ARGUMENT_PACK:
19478
      /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
19479
         is value-dependent.  */
19480
      {
19481
        tree values = ARGUMENT_PACK_ARGS (expression);
19482
        int i, len = TREE_VEC_LENGTH (values);
19483
 
19484
        for (i = 0; i < len; ++i)
19485
          if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
19486
            return true;
19487
 
19488
        return false;
19489
      }
19490
 
19491
    case TRAIT_EXPR:
19492
      {
19493
        tree type2 = TRAIT_EXPR_TYPE2 (expression);
19494
        return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
19495
                || (type2 ? dependent_type_p (type2) : false));
19496
      }
19497
 
19498
    case MODOP_EXPR:
19499
      return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
19500
              || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
19501
 
19502
    case ARRAY_REF:
19503
      return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
19504
              || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
19505
 
19506
    case ADDR_EXPR:
19507
      {
19508
        tree op = TREE_OPERAND (expression, 0);
19509
        return (value_dependent_expression_p (op)
19510
                || has_value_dependent_address (op));
19511
      }
19512
 
19513
    case CALL_EXPR:
19514
      {
19515
        tree fn = get_callee_fndecl (expression);
19516
        int i, nargs;
19517
        if (!fn && value_dependent_expression_p (CALL_EXPR_FN (expression)))
19518
          return true;
19519
        nargs = call_expr_nargs (expression);
19520
        for (i = 0; i < nargs; ++i)
19521
          {
19522
            tree op = CALL_EXPR_ARG (expression, i);
19523
            /* In a call to a constexpr member function, look through the
19524
               implicit ADDR_EXPR on the object argument so that it doesn't
19525
               cause the call to be considered value-dependent.  We also
19526
               look through it in potential_constant_expression.  */
19527
            if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
19528
                && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
19529
                && TREE_CODE (op) == ADDR_EXPR)
19530
              op = TREE_OPERAND (op, 0);
19531
            if (value_dependent_expression_p (op))
19532
              return true;
19533
          }
19534
        return false;
19535
      }
19536
 
19537
    case TEMPLATE_ID_EXPR:
19538
      /* If a TEMPLATE_ID_EXPR involves a dependent name, it will be
19539
         type-dependent.  */
19540
      return type_dependent_expression_p (expression);
19541
 
19542
    case CONSTRUCTOR:
19543
      {
19544
        unsigned ix;
19545
        tree val;
19546
        FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), ix, val)
19547
          if (value_dependent_expression_p (val))
19548
            return true;
19549
        return false;
19550
      }
19551
 
19552
    case STMT_EXPR:
19553
      /* Treat a GNU statement expression as dependent to avoid crashing
19554
         under fold_non_dependent_expr; it can't be constant.  */
19555
      return true;
19556
 
19557
    default:
19558
      /* A constant expression is value-dependent if any subexpression is
19559
         value-dependent.  */
19560
      switch (TREE_CODE_CLASS (TREE_CODE (expression)))
19561
        {
19562
        case tcc_reference:
19563
        case tcc_unary:
19564
        case tcc_comparison:
19565
        case tcc_binary:
19566
        case tcc_expression:
19567
        case tcc_vl_exp:
19568
          {
19569
            int i, len = cp_tree_operand_length (expression);
19570
 
19571
            for (i = 0; i < len; i++)
19572
              {
19573
                tree t = TREE_OPERAND (expression, i);
19574
 
19575
                /* In some cases, some of the operands may be missing.l
19576
                   (For example, in the case of PREDECREMENT_EXPR, the
19577
                   amount to increment by may be missing.)  That doesn't
19578
                   make the expression dependent.  */
19579
                if (t && value_dependent_expression_p (t))
19580
                  return true;
19581
              }
19582
          }
19583
          break;
19584
        default:
19585
          break;
19586
        }
19587
      break;
19588
    }
19589
 
19590
  /* The expression is not value-dependent.  */
19591
  return false;
19592
}
19593
 
19594
/* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
19595
   [temp.dep.expr].  Note that an expression with no type is
19596
   considered dependent.  Other parts of the compiler arrange for an
19597
   expression with type-dependent subexpressions to have no type, so
19598
   this function doesn't have to be fully recursive.  */
19599
 
19600
bool
19601
type_dependent_expression_p (tree expression)
19602
{
19603
  if (!processing_template_decl)
19604
    return false;
19605
 
19606
  if (expression == error_mark_node)
19607
    return false;
19608
 
19609
  /* An unresolved name is always dependent.  */
19610
  if (TREE_CODE (expression) == IDENTIFIER_NODE
19611
      || TREE_CODE (expression) == USING_DECL)
19612
    return true;
19613
 
19614
  /* Some expression forms are never type-dependent.  */
19615
  if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
19616
      || TREE_CODE (expression) == SIZEOF_EXPR
19617
      || TREE_CODE (expression) == ALIGNOF_EXPR
19618
      || TREE_CODE (expression) == AT_ENCODE_EXPR
19619
      || TREE_CODE (expression) == NOEXCEPT_EXPR
19620
      || TREE_CODE (expression) == TRAIT_EXPR
19621
      || TREE_CODE (expression) == TYPEID_EXPR
19622
      || TREE_CODE (expression) == DELETE_EXPR
19623
      || TREE_CODE (expression) == VEC_DELETE_EXPR
19624
      || TREE_CODE (expression) == THROW_EXPR)
19625
    return false;
19626
 
19627
  /* The types of these expressions depends only on the type to which
19628
     the cast occurs.  */
19629
  if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
19630
      || TREE_CODE (expression) == STATIC_CAST_EXPR
19631
      || TREE_CODE (expression) == CONST_CAST_EXPR
19632
      || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
19633
      || TREE_CODE (expression) == IMPLICIT_CONV_EXPR
19634
      || TREE_CODE (expression) == CAST_EXPR)
19635
    return dependent_type_p (TREE_TYPE (expression));
19636
 
19637
  /* The types of these expressions depends only on the type created
19638
     by the expression.  */
19639
  if (TREE_CODE (expression) == NEW_EXPR
19640
      || TREE_CODE (expression) == VEC_NEW_EXPR)
19641
    {
19642
      /* For NEW_EXPR tree nodes created inside a template, either
19643
         the object type itself or a TREE_LIST may appear as the
19644
         operand 1.  */
19645
      tree type = TREE_OPERAND (expression, 1);
19646
      if (TREE_CODE (type) == TREE_LIST)
19647
        /* This is an array type.  We need to check array dimensions
19648
           as well.  */
19649
        return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
19650
               || value_dependent_expression_p
19651
                    (TREE_OPERAND (TREE_VALUE (type), 1));
19652
      else
19653
        return dependent_type_p (type);
19654
    }
19655
 
19656
  if (TREE_CODE (expression) == SCOPE_REF)
19657
    {
19658
      tree scope = TREE_OPERAND (expression, 0);
19659
      tree name = TREE_OPERAND (expression, 1);
19660
 
19661
      /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
19662
         contains an identifier associated by name lookup with one or more
19663
         declarations declared with a dependent type, or...a
19664
         nested-name-specifier or qualified-id that names a member of an
19665
         unknown specialization.  */
19666
      return (type_dependent_expression_p (name)
19667
              || dependent_scope_p (scope));
19668
    }
19669
 
19670
  if (TREE_CODE (expression) == FUNCTION_DECL
19671
      && DECL_LANG_SPECIFIC (expression)
19672
      && DECL_TEMPLATE_INFO (expression)
19673
      && (any_dependent_template_arguments_p
19674
          (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
19675
    return true;
19676
 
19677
  if (TREE_CODE (expression) == TEMPLATE_DECL
19678
      && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
19679
    return false;
19680
 
19681
  if (TREE_CODE (expression) == STMT_EXPR)
19682
    expression = stmt_expr_value_expr (expression);
19683
 
19684
  if (BRACE_ENCLOSED_INITIALIZER_P (expression))
19685
    {
19686
      tree elt;
19687
      unsigned i;
19688
 
19689
      FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
19690
        {
19691
          if (type_dependent_expression_p (elt))
19692
            return true;
19693
        }
19694
      return false;
19695
    }
19696
 
19697
  /* A static data member of the current instantiation with incomplete
19698
     array type is type-dependent, as the definition and specializations
19699
     can have different bounds.  */
19700
  if (TREE_CODE (expression) == VAR_DECL
19701
      && DECL_CLASS_SCOPE_P (expression)
19702
      && dependent_type_p (DECL_CONTEXT (expression))
19703
      && VAR_HAD_UNKNOWN_BOUND (expression))
19704
    return true;
19705
 
19706
  if (TREE_TYPE (expression) == unknown_type_node)
19707
    {
19708
      if (TREE_CODE (expression) == ADDR_EXPR)
19709
        return type_dependent_expression_p (TREE_OPERAND (expression, 0));
19710
      if (TREE_CODE (expression) == COMPONENT_REF
19711
          || TREE_CODE (expression) == OFFSET_REF)
19712
        {
19713
          if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
19714
            return true;
19715
          expression = TREE_OPERAND (expression, 1);
19716
          if (TREE_CODE (expression) == IDENTIFIER_NODE)
19717
            return false;
19718
        }
19719
      /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
19720
      if (TREE_CODE (expression) == SCOPE_REF)
19721
        return false;
19722
 
19723
      if (BASELINK_P (expression))
19724
        expression = BASELINK_FUNCTIONS (expression);
19725
 
19726
      if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
19727
        {
19728
          if (any_dependent_template_arguments_p
19729
              (TREE_OPERAND (expression, 1)))
19730
            return true;
19731
          expression = TREE_OPERAND (expression, 0);
19732
        }
19733
      gcc_assert (TREE_CODE (expression) == OVERLOAD
19734
                  || TREE_CODE (expression) == FUNCTION_DECL);
19735
 
19736
      while (expression)
19737
        {
19738
          if (type_dependent_expression_p (OVL_CURRENT (expression)))
19739
            return true;
19740
          expression = OVL_NEXT (expression);
19741
        }
19742
      return false;
19743
    }
19744
 
19745
  gcc_assert (TREE_CODE (expression) != TYPE_DECL);
19746
 
19747
  return (dependent_type_p (TREE_TYPE (expression)));
19748
}
19749
 
19750
/* Like type_dependent_expression_p, but it also works while not processing
19751
   a template definition, i.e. during substitution or mangling.  */
19752
 
19753
bool
19754
type_dependent_expression_p_push (tree expr)
19755
{
19756
  bool b;
19757
  ++processing_template_decl;
19758
  b = type_dependent_expression_p (expr);
19759
  --processing_template_decl;
19760
  return b;
19761
}
19762
 
19763
/* Returns TRUE if ARGS contains a type-dependent expression.  */
19764
 
19765
bool
19766
any_type_dependent_arguments_p (const VEC(tree,gc) *args)
19767
{
19768
  unsigned int i;
19769
  tree arg;
19770
 
19771
  FOR_EACH_VEC_ELT (tree, args, i, arg)
19772
    {
19773
      if (type_dependent_expression_p (arg))
19774
        return true;
19775
    }
19776
  return false;
19777
}
19778
 
19779
/* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
19780
   expressions) contains any type-dependent expressions.  */
19781
 
19782
bool
19783
any_type_dependent_elements_p (const_tree list)
19784
{
19785
  for (; list; list = TREE_CHAIN (list))
19786
    if (value_dependent_expression_p (TREE_VALUE (list)))
19787
      return true;
19788
 
19789
  return false;
19790
}
19791
 
19792
/* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
19793
   expressions) contains any value-dependent expressions.  */
19794
 
19795
bool
19796
any_value_dependent_elements_p (const_tree list)
19797
{
19798
  for (; list; list = TREE_CHAIN (list))
19799
    if (value_dependent_expression_p (TREE_VALUE (list)))
19800
      return true;
19801
 
19802
  return false;
19803
}
19804
 
19805
/* Returns TRUE if the ARG (a template argument) is dependent.  */
19806
 
19807
bool
19808
dependent_template_arg_p (tree arg)
19809
{
19810
  if (!processing_template_decl)
19811
    return false;
19812
 
19813
  /* Assume a template argument that was wrongly written by the user
19814
     is dependent. This is consistent with what
19815
     any_dependent_template_arguments_p [that calls this function]
19816
     does.  */
19817
  if (!arg || arg == error_mark_node)
19818
    return true;
19819
 
19820
  if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
19821
    arg = ARGUMENT_PACK_SELECT_ARG (arg);
19822
 
19823
  if (TREE_CODE (arg) == TEMPLATE_DECL
19824
      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
19825
    return dependent_template_p (arg);
19826
  else if (ARGUMENT_PACK_P (arg))
19827
    {
19828
      tree args = ARGUMENT_PACK_ARGS (arg);
19829
      int i, len = TREE_VEC_LENGTH (args);
19830
      for (i = 0; i < len; ++i)
19831
        {
19832
          if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
19833
            return true;
19834
        }
19835
 
19836
      return false;
19837
    }
19838
  else if (TYPE_P (arg))
19839
    return dependent_type_p (arg);
19840
  else
19841
    return (type_dependent_expression_p (arg)
19842
            || value_dependent_expression_p (arg));
19843
}
19844
 
19845
/* Returns true if ARGS (a collection of template arguments) contains
19846
   any types that require structural equality testing.  */
19847
 
19848
bool
19849
any_template_arguments_need_structural_equality_p (tree args)
19850
{
19851
  int i;
19852
  int j;
19853
 
19854
  if (!args)
19855
    return false;
19856
  if (args == error_mark_node)
19857
    return true;
19858
 
19859
  for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
19860
    {
19861
      tree level = TMPL_ARGS_LEVEL (args, i + 1);
19862
      for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
19863
        {
19864
          tree arg = TREE_VEC_ELT (level, j);
19865
          tree packed_args = NULL_TREE;
19866
          int k, len = 1;
19867
 
19868
          if (ARGUMENT_PACK_P (arg))
19869
            {
19870
              /* Look inside the argument pack.  */
19871
              packed_args = ARGUMENT_PACK_ARGS (arg);
19872
              len = TREE_VEC_LENGTH (packed_args);
19873
            }
19874
 
19875
          for (k = 0; k < len; ++k)
19876
            {
19877
              if (packed_args)
19878
                arg = TREE_VEC_ELT (packed_args, k);
19879
 
19880
              if (error_operand_p (arg))
19881
                return true;
19882
              else if (TREE_CODE (arg) == TEMPLATE_DECL
19883
                       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
19884
                continue;
19885
              else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
19886
                return true;
19887
              else if (!TYPE_P (arg) && TREE_TYPE (arg)
19888
                       && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
19889
                return true;
19890
            }
19891
        }
19892
    }
19893
 
19894
  return false;
19895
}
19896
 
19897
/* Returns true if ARGS (a collection of template arguments) contains
19898
   any dependent arguments.  */
19899
 
19900
bool
19901
any_dependent_template_arguments_p (const_tree args)
19902
{
19903
  int i;
19904
  int j;
19905
 
19906
  if (!args)
19907
    return false;
19908
  if (args == error_mark_node)
19909
    return true;
19910
 
19911
  for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
19912
    {
19913
      const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
19914
      for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
19915
        if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
19916
          return true;
19917
    }
19918
 
19919
  return false;
19920
}
19921
 
19922
/* Returns TRUE if the template TMPL is dependent.  */
19923
 
19924
bool
19925
dependent_template_p (tree tmpl)
19926
{
19927
  if (TREE_CODE (tmpl) == OVERLOAD)
19928
    {
19929
      while (tmpl)
19930
        {
19931
          if (dependent_template_p (OVL_CURRENT (tmpl)))
19932
            return true;
19933
          tmpl = OVL_NEXT (tmpl);
19934
        }
19935
      return false;
19936
    }
19937
 
19938
  /* Template template parameters are dependent.  */
19939
  if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
19940
      || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
19941
    return true;
19942
  /* So are names that have not been looked up.  */
19943
  if (TREE_CODE (tmpl) == SCOPE_REF
19944
      || TREE_CODE (tmpl) == IDENTIFIER_NODE)
19945
    return true;
19946
  /* So are member templates of dependent classes.  */
19947
  if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
19948
    return dependent_type_p (DECL_CONTEXT (tmpl));
19949
  return false;
19950
}
19951
 
19952
/* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
19953
 
19954
bool
19955
dependent_template_id_p (tree tmpl, tree args)
19956
{
19957
  return (dependent_template_p (tmpl)
19958
          || any_dependent_template_arguments_p (args));
19959
}
19960
 
19961
/* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
19962
   is dependent.  */
19963
 
19964
bool
19965
dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
19966
{
19967
  int i;
19968
 
19969
  if (!processing_template_decl)
19970
    return false;
19971
 
19972
  for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
19973
    {
19974
      tree decl = TREE_VEC_ELT (declv, i);
19975
      tree init = TREE_VEC_ELT (initv, i);
19976
      tree cond = TREE_VEC_ELT (condv, i);
19977
      tree incr = TREE_VEC_ELT (incrv, i);
19978
 
19979
      if (type_dependent_expression_p (decl))
19980
        return true;
19981
 
19982
      if (init && type_dependent_expression_p (init))
19983
        return true;
19984
 
19985
      if (type_dependent_expression_p (cond))
19986
        return true;
19987
 
19988
      if (COMPARISON_CLASS_P (cond)
19989
          && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
19990
              || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
19991
        return true;
19992
 
19993
      if (TREE_CODE (incr) == MODOP_EXPR)
19994
        {
19995
          if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
19996
              || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
19997
            return true;
19998
        }
19999
      else if (type_dependent_expression_p (incr))
20000
        return true;
20001
      else if (TREE_CODE (incr) == MODIFY_EXPR)
20002
        {
20003
          if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
20004
            return true;
20005
          else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
20006
            {
20007
              tree t = TREE_OPERAND (incr, 1);
20008
              if (type_dependent_expression_p (TREE_OPERAND (t, 0))
20009
                  || type_dependent_expression_p (TREE_OPERAND (t, 1)))
20010
                return true;
20011
            }
20012
        }
20013
    }
20014
 
20015
  return false;
20016
}
20017
 
20018
/* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
20019
   TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
20020
   no such TYPE can be found.  Note that this function peers inside
20021
   uninstantiated templates and therefore should be used only in
20022
   extremely limited situations.  ONLY_CURRENT_P restricts this
20023
   peering to the currently open classes hierarchy (which is required
20024
   when comparing types).  */
20025
 
20026
tree
20027
resolve_typename_type (tree type, bool only_current_p)
20028
{
20029
  tree scope;
20030
  tree name;
20031
  tree decl;
20032
  int quals;
20033
  tree pushed_scope;
20034
  tree result;
20035
 
20036
  gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
20037
 
20038
  scope = TYPE_CONTEXT (type);
20039
  /* Usually the non-qualified identifier of a TYPENAME_TYPE is
20040
     TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
20041
     a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
20042
     the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
20043
     identifier  of the TYPENAME_TYPE anymore.
20044
     So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
20045
     TYPENAME_TYPE instead, we avoid messing up with a possible
20046
     typedef variant case.  */
20047
  name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
20048
 
20049
  /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
20050
     it first before we can figure out what NAME refers to.  */
20051
  if (TREE_CODE (scope) == TYPENAME_TYPE)
20052
    scope = resolve_typename_type (scope, only_current_p);
20053
  /* If we don't know what SCOPE refers to, then we cannot resolve the
20054
     TYPENAME_TYPE.  */
20055
  if (TREE_CODE (scope) == TYPENAME_TYPE)
20056
    return type;
20057
  /* If the SCOPE is a template type parameter, we have no way of
20058
     resolving the name.  */
20059
  if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
20060
    return type;
20061
  /* If the SCOPE is not the current instantiation, there's no reason
20062
     to look inside it.  */
20063
  if (only_current_p && !currently_open_class (scope))
20064
    return type;
20065
  /* If this is a typedef, we don't want to look inside (c++/11987).  */
20066
  if (typedef_variant_p (type))
20067
    return type;
20068
  /* If SCOPE isn't the template itself, it will not have a valid
20069
     TYPE_FIELDS list.  */
20070
  if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
20071
    /* scope is either the template itself or a compatible instantiation
20072
       like X<T>, so look up the name in the original template.  */
20073
    scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
20074
  else
20075
    /* scope is a partial instantiation, so we can't do the lookup or we
20076
       will lose the template arguments.  */
20077
    return type;
20078
  /* Enter the SCOPE so that name lookup will be resolved as if we
20079
     were in the class definition.  In particular, SCOPE will no
20080
     longer be considered a dependent type.  */
20081
  pushed_scope = push_scope (scope);
20082
  /* Look up the declaration.  */
20083
  decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true,
20084
                        tf_warning_or_error);
20085
 
20086
  result = NULL_TREE;
20087
 
20088
  /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
20089
     find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
20090
  if (!decl)
20091
    /*nop*/;
20092
  else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
20093
           && TREE_CODE (decl) == TYPE_DECL)
20094
    {
20095
      result = TREE_TYPE (decl);
20096
      if (result == error_mark_node)
20097
        result = NULL_TREE;
20098
    }
20099
  else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
20100
           && DECL_CLASS_TEMPLATE_P (decl))
20101
    {
20102
      tree tmpl;
20103
      tree args;
20104
      /* Obtain the template and the arguments.  */
20105
      tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
20106
      args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
20107
      /* Instantiate the template.  */
20108
      result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
20109
                                      /*entering_scope=*/0,
20110
                                      tf_error | tf_user);
20111
      if (result == error_mark_node)
20112
        result = NULL_TREE;
20113
    }
20114
 
20115
  /* Leave the SCOPE.  */
20116
  if (pushed_scope)
20117
    pop_scope (pushed_scope);
20118
 
20119
  /* If we failed to resolve it, return the original typename.  */
20120
  if (!result)
20121
    return type;
20122
 
20123
  /* If lookup found a typename type, resolve that too.  */
20124
  if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
20125
    {
20126
      /* Ill-formed programs can cause infinite recursion here, so we
20127
         must catch that.  */
20128
      TYPENAME_IS_RESOLVING_P (type) = 1;
20129
      result = resolve_typename_type (result, only_current_p);
20130
      TYPENAME_IS_RESOLVING_P (type) = 0;
20131
    }
20132
 
20133
  /* Qualify the resulting type.  */
20134
  quals = cp_type_quals (type);
20135
  if (quals)
20136
    result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
20137
 
20138
  return result;
20139
}
20140
 
20141
/* EXPR is an expression which is not type-dependent.  Return a proxy
20142
   for EXPR that can be used to compute the types of larger
20143
   expressions containing EXPR.  */
20144
 
20145
tree
20146
build_non_dependent_expr (tree expr)
20147
{
20148
  tree inner_expr;
20149
 
20150
#ifdef ENABLE_CHECKING
20151
  /* Try to get a constant value for all non-type-dependent expressions in
20152
      order to expose bugs in *_dependent_expression_p and constexpr.  */
20153
  if (cxx_dialect >= cxx0x)
20154
    maybe_constant_value (fold_non_dependent_expr_sfinae (expr, tf_none));
20155
#endif
20156
 
20157
  /* Preserve OVERLOADs; the functions must be available to resolve
20158
     types.  */
20159
  inner_expr = expr;
20160
  if (TREE_CODE (inner_expr) == STMT_EXPR)
20161
    inner_expr = stmt_expr_value_expr (inner_expr);
20162
  if (TREE_CODE (inner_expr) == ADDR_EXPR)
20163
    inner_expr = TREE_OPERAND (inner_expr, 0);
20164
  if (TREE_CODE (inner_expr) == COMPONENT_REF)
20165
    inner_expr = TREE_OPERAND (inner_expr, 1);
20166
  if (is_overloaded_fn (inner_expr)
20167
      || TREE_CODE (inner_expr) == OFFSET_REF)
20168
    return expr;
20169
  /* There is no need to return a proxy for a variable.  */
20170
  if (TREE_CODE (expr) == VAR_DECL)
20171
    return expr;
20172
  /* Preserve string constants; conversions from string constants to
20173
     "char *" are allowed, even though normally a "const char *"
20174
     cannot be used to initialize a "char *".  */
20175
  if (TREE_CODE (expr) == STRING_CST)
20176
    return expr;
20177
  /* Preserve arithmetic constants, as an optimization -- there is no
20178
     reason to create a new node.  */
20179
  if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
20180
    return expr;
20181
  /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
20182
     There is at least one place where we want to know that a
20183
     particular expression is a throw-expression: when checking a ?:
20184
     expression, there are special rules if the second or third
20185
     argument is a throw-expression.  */
20186
  if (TREE_CODE (expr) == THROW_EXPR)
20187
    return expr;
20188
 
20189
  /* Don't wrap an initializer list, we need to be able to look inside.  */
20190
  if (BRACE_ENCLOSED_INITIALIZER_P (expr))
20191
    return expr;
20192
 
20193
  if (TREE_CODE (expr) == COND_EXPR)
20194
    return build3 (COND_EXPR,
20195
                   TREE_TYPE (expr),
20196
                   TREE_OPERAND (expr, 0),
20197
                   (TREE_OPERAND (expr, 1)
20198
                    ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
20199
                    : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
20200
                   build_non_dependent_expr (TREE_OPERAND (expr, 2)));
20201
  if (TREE_CODE (expr) == COMPOUND_EXPR
20202
      && !COMPOUND_EXPR_OVERLOADED (expr))
20203
    return build2 (COMPOUND_EXPR,
20204
                   TREE_TYPE (expr),
20205
                   TREE_OPERAND (expr, 0),
20206
                   build_non_dependent_expr (TREE_OPERAND (expr, 1)));
20207
 
20208
  /* If the type is unknown, it can't really be non-dependent */
20209
  gcc_assert (TREE_TYPE (expr) != unknown_type_node);
20210
 
20211
  /* Otherwise, build a NON_DEPENDENT_EXPR.  */
20212
  return build1 (NON_DEPENDENT_EXPR, TREE_TYPE (expr), expr);
20213
}
20214
 
20215
/* ARGS is a vector of expressions as arguments to a function call.
20216
   Replace the arguments with equivalent non-dependent expressions.
20217
   This modifies ARGS in place.  */
20218
 
20219
void
20220
make_args_non_dependent (VEC(tree,gc) *args)
20221
{
20222
  unsigned int ix;
20223
  tree arg;
20224
 
20225
  FOR_EACH_VEC_ELT (tree, args, ix, arg)
20226
    {
20227
      tree newarg = build_non_dependent_expr (arg);
20228
      if (newarg != arg)
20229
        VEC_replace (tree, args, ix, newarg);
20230
    }
20231
}
20232
 
20233
/* Returns a type which represents 'auto'.  We use a TEMPLATE_TYPE_PARM
20234
   with a level one deeper than the actual template parms.  */
20235
 
20236
tree
20237
make_auto (void)
20238
{
20239
  tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
20240
  TYPE_NAME (au) = build_decl (BUILTINS_LOCATION,
20241
                               TYPE_DECL, get_identifier ("auto"), au);
20242
  TYPE_STUB_DECL (au) = TYPE_NAME (au);
20243
  TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
20244
    (0, processing_template_decl + 1, processing_template_decl + 1,
20245
     0, TYPE_NAME (au), NULL_TREE);
20246
  TYPE_CANONICAL (au) = canonical_type_parameter (au);
20247
  DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
20248
  SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
20249
 
20250
  return au;
20251
}
20252
 
20253
/* Given type ARG, return std::initializer_list<ARG>.  */
20254
 
20255
static tree
20256
listify (tree arg)
20257
{
20258
  tree std_init_list = namespace_binding
20259
    (get_identifier ("initializer_list"), std_node);
20260
  tree argvec;
20261
  if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
20262
    {
20263
      error ("deducing from brace-enclosed initializer list requires "
20264
             "#include <initializer_list>");
20265
      return error_mark_node;
20266
    }
20267
  argvec = make_tree_vec (1);
20268
  TREE_VEC_ELT (argvec, 0) = arg;
20269
  return lookup_template_class (std_init_list, argvec, NULL_TREE,
20270
                                NULL_TREE, 0, tf_warning_or_error);
20271
}
20272
 
20273
/* Replace auto in TYPE with std::initializer_list<auto>.  */
20274
 
20275
static tree
20276
listify_autos (tree type, tree auto_node)
20277
{
20278
  tree init_auto = listify (auto_node);
20279
  tree argvec = make_tree_vec (1);
20280
  TREE_VEC_ELT (argvec, 0) = init_auto;
20281
  if (processing_template_decl)
20282
    argvec = add_to_template_args (current_template_args (), argvec);
20283
  return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
20284
}
20285
 
20286
/* walk_tree helper for do_auto_deduction.  */
20287
 
20288
static tree
20289
contains_auto_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
20290
                 void *type)
20291
{
20292
  /* Is this a variable with the type we're looking for?  */
20293
  if (DECL_P (*tp)
20294
      && TREE_TYPE (*tp) == type)
20295
    return *tp;
20296
  else
20297
    return NULL_TREE;
20298
}
20299
 
20300
/* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
20301
   from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.  */
20302
 
20303
tree
20304
do_auto_deduction (tree type, tree init, tree auto_node)
20305
{
20306
  tree parms, tparms, targs;
20307
  tree args[1];
20308
  tree decl;
20309
  int val;
20310
 
20311
  if (processing_template_decl
20312
      && (TREE_TYPE (init) == NULL_TREE
20313
          || BRACE_ENCLOSED_INITIALIZER_P (init)))
20314
    /* Not enough information to try this yet.  */
20315
    return type;
20316
 
20317
  /* The name of the object being declared shall not appear in the
20318
     initializer expression.  */
20319
  decl = cp_walk_tree_without_duplicates (&init, contains_auto_r, type);
20320
  if (decl)
20321
    {
20322
      error ("variable %q#D with %<auto%> type used in its own "
20323
             "initializer", decl);
20324
      return error_mark_node;
20325
    }
20326
 
20327
  /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
20328
     with either a new invented type template parameter U or, if the
20329
     initializer is a braced-init-list (8.5.4), with
20330
     std::initializer_list<U>.  */
20331
  if (BRACE_ENCLOSED_INITIALIZER_P (init))
20332
    type = listify_autos (type, auto_node);
20333
 
20334
  init = resolve_nondeduced_context (init);
20335
 
20336
  parms = build_tree_list (NULL_TREE, type);
20337
  args[0] = init;
20338
  tparms = make_tree_vec (1);
20339
  targs = make_tree_vec (1);
20340
  TREE_VEC_ELT (tparms, 0)
20341
    = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
20342
  val = type_unification_real (tparms, targs, parms, args, 1, 0,
20343
                               DEDUCE_CALL, LOOKUP_NORMAL,
20344
                               /*explain_p=*/false);
20345
  if (val > 0)
20346
    {
20347
      if (processing_template_decl)
20348
        /* Try again at instantiation time.  */
20349
        return type;
20350
      if (type && type != error_mark_node)
20351
        /* If type is error_mark_node a diagnostic must have been
20352
           emitted by now.  Also, having a mention to '<type error>'
20353
           in the diagnostic is not really useful to the user.  */
20354
        error ("unable to deduce %qT from %qE", type, init);
20355
      return error_mark_node;
20356
    }
20357
 
20358
  /* If the list of declarators contains more than one declarator, the type
20359
     of each declared variable is determined as described above. If the
20360
     type deduced for the template parameter U is not the same in each
20361
     deduction, the program is ill-formed.  */
20362
  if (TREE_TYPE (auto_node)
20363
      && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
20364
    {
20365
      error ("inconsistent deduction for %qT: %qT and then %qT",
20366
             auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
20367
      return error_mark_node;
20368
    }
20369
  TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
20370
 
20371
  if (processing_template_decl)
20372
    targs = add_to_template_args (current_template_args (), targs);
20373
  return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
20374
}
20375
 
20376
/* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
20377
   result.  */
20378
 
20379
tree
20380
splice_late_return_type (tree type, tree late_return_type)
20381
{
20382
  tree argvec;
20383
 
20384
  if (late_return_type == NULL_TREE)
20385
    return type;
20386
  argvec = make_tree_vec (1);
20387
  TREE_VEC_ELT (argvec, 0) = late_return_type;
20388
  if (processing_template_parmlist)
20389
    /* For a late-specified return type in a template type-parameter, we
20390
       need to add a dummy argument level for its parmlist.  */
20391
    argvec = add_to_template_args
20392
      (make_tree_vec (processing_template_parmlist), argvec);
20393
  if (current_template_parms)
20394
    argvec = add_to_template_args (current_template_args (), argvec);
20395
  return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
20396
}
20397
 
20398
/* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto'.  */
20399
 
20400
bool
20401
is_auto (const_tree type)
20402
{
20403
  if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
20404
      && TYPE_IDENTIFIER (type) == get_identifier ("auto"))
20405
    return true;
20406
  else
20407
    return false;
20408
}
20409
 
20410
/* Returns true iff TYPE contains a use of 'auto'.  Since auto can only
20411
   appear as a type-specifier for the declaration in question, we don't
20412
   have to look through the whole type.  */
20413
 
20414
tree
20415
type_uses_auto (tree type)
20416
{
20417
  enum tree_code code;
20418
  if (is_auto (type))
20419
    return type;
20420
 
20421
  code = TREE_CODE (type);
20422
 
20423
  if (code == POINTER_TYPE || code == REFERENCE_TYPE
20424
      || code == OFFSET_TYPE || code == FUNCTION_TYPE
20425
      || code == METHOD_TYPE || code == ARRAY_TYPE)
20426
    return type_uses_auto (TREE_TYPE (type));
20427
 
20428
  if (TYPE_PTRMEMFUNC_P (type))
20429
    return type_uses_auto (TREE_TYPE (TREE_TYPE
20430
                                   (TYPE_PTRMEMFUNC_FN_TYPE (type))));
20431
 
20432
  return NULL_TREE;
20433
}
20434
 
20435
/* For a given template T, return the vector of typedefs referenced
20436
   in T for which access check is needed at T instantiation time.
20437
   T is either  a FUNCTION_DECL or a RECORD_TYPE.
20438
   Those typedefs were added to T by the function
20439
   append_type_to_template_for_access_check.  */
20440
 
20441
VEC(qualified_typedef_usage_t,gc)*
20442
get_types_needing_access_check (tree t)
20443
{
20444
  tree ti;
20445
  VEC(qualified_typedef_usage_t,gc) *result = NULL;
20446
 
20447
  if (!t || t == error_mark_node)
20448
    return NULL;
20449
 
20450
  if (!(ti = get_template_info (t)))
20451
    return NULL;
20452
 
20453
  if (CLASS_TYPE_P (t)
20454
      || TREE_CODE (t) == FUNCTION_DECL)
20455
    {
20456
      if (!TI_TEMPLATE (ti))
20457
        return NULL;
20458
 
20459
      result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
20460
    }
20461
 
20462
  return result;
20463
}
20464
 
20465
/* Append the typedef TYPE_DECL used in template T to a list of typedefs
20466
   tied to T. That list of typedefs will be access checked at
20467
   T instantiation time.
20468
   T is either a FUNCTION_DECL or a RECORD_TYPE.
20469
   TYPE_DECL is a TYPE_DECL node representing a typedef.
20470
   SCOPE is the scope through which TYPE_DECL is accessed.
20471
   LOCATION is the location of the usage point of TYPE_DECL.
20472
 
20473
   This function is a subroutine of
20474
   append_type_to_template_for_access_check.  */
20475
 
20476
static void
20477
append_type_to_template_for_access_check_1 (tree t,
20478
                                            tree type_decl,
20479
                                            tree scope,
20480
                                            location_t location)
20481
{
20482
  qualified_typedef_usage_t typedef_usage;
20483
  tree ti;
20484
 
20485
  if (!t || t == error_mark_node)
20486
    return;
20487
 
20488
  gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
20489
               || CLASS_TYPE_P (t))
20490
              && type_decl
20491
              && TREE_CODE (type_decl) == TYPE_DECL
20492
              && scope);
20493
 
20494
  if (!(ti = get_template_info (t)))
20495
    return;
20496
 
20497
  gcc_assert (TI_TEMPLATE (ti));
20498
 
20499
  typedef_usage.typedef_decl = type_decl;
20500
  typedef_usage.context = scope;
20501
  typedef_usage.locus = location;
20502
 
20503
  VEC_safe_push (qualified_typedef_usage_t, gc,
20504
                 TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti),
20505
                 &typedef_usage);
20506
}
20507
 
20508
/* Append TYPE_DECL to the template TEMPL.
20509
   TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
20510
   At TEMPL instanciation time, TYPE_DECL will be checked to see
20511
   if it can be accessed through SCOPE.
20512
   LOCATION is the location of the usage point of TYPE_DECL.
20513
 
20514
   e.g. consider the following code snippet:
20515
 
20516
     class C
20517
     {
20518
       typedef int myint;
20519
     };
20520
 
20521
     template<class U> struct S
20522
     {
20523
       C::myint mi; // <-- usage point of the typedef C::myint
20524
     };
20525
 
20526
     S<char> s;
20527
 
20528
   At S<char> instantiation time, we need to check the access of C::myint
20529
   In other words, we need to check the access of the myint typedef through
20530
   the C scope. For that purpose, this function will add the myint typedef
20531
   and the scope C through which its being accessed to a list of typedefs
20532
   tied to the template S. That list will be walked at template instantiation
20533
   time and access check performed on each typedefs it contains.
20534
   Note that this particular code snippet should yield an error because
20535
   myint is private to C.  */
20536
 
20537
void
20538
append_type_to_template_for_access_check (tree templ,
20539
                                          tree type_decl,
20540
                                          tree scope,
20541
                                          location_t location)
20542
{
20543
  qualified_typedef_usage_t *iter;
20544
  int i;
20545
 
20546
  gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
20547
 
20548
  /* Make sure we don't append the type to the template twice.  */
20549
  FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
20550
                    get_types_needing_access_check (templ),
20551
                    i, iter)
20552
    if (iter->typedef_decl == type_decl && scope == iter->context)
20553
      return;
20554
 
20555
  append_type_to_template_for_access_check_1 (templ, type_decl,
20556
                                              scope, location);
20557
}
20558
 
20559
/* Set up the hash tables for template instantiations.  */
20560
 
20561
void
20562
init_template_processing (void)
20563
{
20564
  decl_specializations = htab_create_ggc (37,
20565
                                          hash_specialization,
20566
                                          eq_specializations,
20567
                                          ggc_free);
20568
  type_specializations = htab_create_ggc (37,
20569
                                          hash_specialization,
20570
                                          eq_specializations,
20571
                                          ggc_free);
20572
}
20573
 
20574
/* Print stats about the template hash tables for -fstats.  */
20575
 
20576
void
20577
print_template_statistics (void)
20578
{
20579
  fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
20580
           "%f collisions\n", (long) htab_size (decl_specializations),
20581
           (long) htab_elements (decl_specializations),
20582
           htab_collisions (decl_specializations));
20583
  fprintf (stderr, "type_specializations: size %ld, %ld elements, "
20584
           "%f collisions\n", (long) htab_size (type_specializations),
20585
           (long) htab_elements (type_specializations),
20586
           htab_collisions (type_specializations));
20587
}
20588
 
20589
#include "gt-cp-pt.h"

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.