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

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [gcc/] [cp/] [pt.c] - Blame information for rev 20

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

Line No. Rev Author Line
1 12 jlechner
/* 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  Free Software Foundation, Inc.
4
   Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
5
   Rewritten by Jason Merrill (jason@cygnus.com).
6
 
7
This file is part of GCC.
8
 
9
GCC is free software; you can redistribute it and/or modify
10
it under the terms of the GNU General Public License as published by
11
the Free Software Foundation; either version 2, or (at your option)
12
any later version.
13
 
14
GCC is distributed in the hope that it will be useful,
15
but WITHOUT ANY WARRANTY; without even the implied warranty of
16
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
GNU General Public License for more details.
18
 
19
You should have received a copy of the GNU General Public License
20
along with GCC; see the file COPYING.  If not, write to
21
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
22
Boston, MA 02110-1301, USA.  */
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 "obstack.h"
34
#include "tree.h"
35
#include "pointer-set.h"
36
#include "flags.h"
37
#include "c-common.h"
38
#include "cp-tree.h"
39
#include "cp-objcp-common.h"
40
#include "tree-inline.h"
41
#include "decl.h"
42
#include "output.h"
43
#include "except.h"
44
#include "toplev.h"
45
#include "rtl.h"
46
#include "timevar.h"
47
#include "tree-iterator.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
   The TREE_PURPOSE of each entry is either a DECL (for a function or
57
   static data member), or a TYPE (for a class) indicating what we are
58
   hoping to instantiate.  The TREE_VALUE is not used.  */
59
static GTY(()) tree pending_templates;
60
static GTY(()) tree last_pending_template;
61
 
62
int processing_template_parmlist;
63
static int template_header_count;
64
 
65
static GTY(()) tree saved_trees;
66
static GTY(()) varray_type inline_parm_levels;
67
static size_t inline_parm_levels_used;
68
 
69
static GTY(()) tree current_tinst_level;
70
 
71
static GTY(()) tree saved_access_scope;
72
 
73
/* Live only within one (recursive) call to tsubst_expr.  We use
74
   this to pass the statement expression node from the STMT_EXPR
75
   to the EXPR_STMT that is its result.  */
76
static tree cur_stmt_expr;
77
 
78
/* A map from local variable declarations in the body of the template
79
   presently being instantiated to the corresponding instantiated
80
   local variables.  */
81
static htab_t local_specializations;
82
 
83
#define UNIFY_ALLOW_NONE 0
84
#define UNIFY_ALLOW_MORE_CV_QUAL 1
85
#define UNIFY_ALLOW_LESS_CV_QUAL 2
86
#define UNIFY_ALLOW_DERIVED 4
87
#define UNIFY_ALLOW_INTEGER 8
88
#define UNIFY_ALLOW_OUTER_LEVEL 16
89
#define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
90
#define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
91
 
92
static void push_access_scope (tree);
93
static void pop_access_scope (tree);
94
static int resolve_overloaded_unification (tree, tree, tree, tree,
95
                                           unification_kind_t, int);
96
static int try_one_overload (tree, tree, tree, tree, tree,
97
                             unification_kind_t, int, bool);
98
static int unify (tree, tree, tree, tree, int);
99
static void add_pending_template (tree);
100
static void reopen_tinst_level (tree);
101
static tree classtype_mangled_name (tree);
102
static char* mangle_class_name_for_template (const char *, tree, tree);
103
static tree tsubst_initializer_list (tree, tree);
104
static tree get_class_bindings (tree, tree, tree);
105
static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t, int);
106
static void tsubst_enum (tree, tree, tree);
107
static tree add_to_template_args (tree, tree);
108
static tree add_outermost_template_args (tree, tree);
109
static bool check_instantiated_args (tree, tree, tsubst_flags_t);
110
static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*);
111
static int  type_unification_real (tree, tree, tree, tree,
112
                                   int, unification_kind_t, int);
113
static void note_template_header (int);
114
static tree convert_nontype_argument_function (tree, tree);
115
static tree convert_nontype_argument (tree, tree);
116
static tree convert_template_argument (tree, tree, tree,
117
                                       tsubst_flags_t, int, tree);
118
static int for_each_template_parm (tree, tree_fn_t, void*,
119
                                   struct pointer_set_t*);
120
static tree build_template_parm_index (int, int, int, tree, tree);
121
static int inline_needs_template_parms (tree);
122
static void push_inline_template_parms_recursive (tree, int);
123
static tree retrieve_local_specialization (tree);
124
static void register_local_specialization (tree, tree);
125
static tree reduce_template_parm_level (tree, tree, int);
126
static int mark_template_parm (tree, void *);
127
static int template_parm_this_level_p (tree, void *);
128
static tree tsubst_friend_function (tree, tree);
129
static tree tsubst_friend_class (tree, tree);
130
static int can_complete_type_without_circularity (tree);
131
static tree get_bindings (tree, tree, tree, bool);
132
static int template_decl_level (tree);
133
static int check_cv_quals_for_unify (int, tree, tree);
134
static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
135
static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
136
static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
137
static void regenerate_decl_from_template (tree, tree);
138
static tree most_specialized (tree, tree, tree);
139
static tree most_specialized_class (tree, tree);
140
static int template_class_depth_real (tree, int);
141
static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
142
static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
143
static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
144
static void check_specialization_scope (void);
145
static tree process_partial_specialization (tree);
146
static void set_current_access_from_decl (tree);
147
static void check_default_tmpl_args (tree, tree, int, int);
148
static tree tsubst_call_declarator_parms (tree, tree, tsubst_flags_t, tree);
149
static tree get_template_base (tree, tree, tree, tree);
150
static tree try_class_unification (tree, tree, tree, tree);
151
static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
152
                                           tree, tree);
153
static tree determine_specialization (tree, tree, tree *, int, int);
154
static int template_args_equal (tree, tree);
155
static void tsubst_default_arguments (tree);
156
static tree for_each_template_parm_r (tree *, int *, void *);
157
static tree copy_default_args_to_explicit_spec_1 (tree, tree);
158
static void copy_default_args_to_explicit_spec (tree);
159
static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
160
static int eq_local_specializations (const void *, const void *);
161
static bool dependent_type_p_r (tree);
162
static tree tsubst (tree, tree, tsubst_flags_t, tree);
163
static tree tsubst_expr (tree, tree, tsubst_flags_t, tree);
164
static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
165
 
166
/* Make the current scope suitable for access checking when we are
167
   processing T.  T can be FUNCTION_DECL for instantiated function
168
   template, or VAR_DECL for static member variable (need by
169
   instantiate_decl).  */
170
 
171
static void
172
push_access_scope (tree t)
173
{
174
  gcc_assert (TREE_CODE (t) == FUNCTION_DECL
175
              || TREE_CODE (t) == VAR_DECL);
176
 
177
  if (DECL_FRIEND_CONTEXT (t))
178
    push_nested_class (DECL_FRIEND_CONTEXT (t));
179
  else if (DECL_CLASS_SCOPE_P (t))
180
    push_nested_class (DECL_CONTEXT (t));
181
  else
182
    push_to_top_level ();
183
 
184
  if (TREE_CODE (t) == FUNCTION_DECL)
185
    {
186
      saved_access_scope = tree_cons
187
        (NULL_TREE, current_function_decl, saved_access_scope);
188
      current_function_decl = t;
189
    }
190
}
191
 
192
/* Restore the scope set up by push_access_scope.  T is the node we
193
   are processing.  */
194
 
195
static void
196
pop_access_scope (tree t)
197
{
198
  if (TREE_CODE (t) == FUNCTION_DECL)
199
    {
200
      current_function_decl = TREE_VALUE (saved_access_scope);
201
      saved_access_scope = TREE_CHAIN (saved_access_scope);
202
    }
203
 
204
  if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
205
    pop_nested_class ();
206
  else
207
    pop_from_top_level ();
208
}
209
 
210
/* Do any processing required when DECL (a member template
211
   declaration) is finished.  Returns the TEMPLATE_DECL corresponding
212
   to DECL, unless it is a specialization, in which case the DECL
213
   itself is returned.  */
214
 
215
tree
216
finish_member_template_decl (tree decl)
217
{
218
  if (decl == error_mark_node)
219
    return error_mark_node;
220
 
221
  gcc_assert (DECL_P (decl));
222
 
223
  if (TREE_CODE (decl) == TYPE_DECL)
224
    {
225
      tree type;
226
 
227
      type = TREE_TYPE (decl);
228
      if (IS_AGGR_TYPE (type)
229
          && CLASSTYPE_TEMPLATE_INFO (type)
230
          && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
231
        {
232
          tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
233
          check_member_template (tmpl);
234
          return tmpl;
235
        }
236
      return NULL_TREE;
237
    }
238
  else if (TREE_CODE (decl) == FIELD_DECL)
239
    error ("data member %qD cannot be a member template", decl);
240
  else if (DECL_TEMPLATE_INFO (decl))
241
    {
242
      if (!DECL_TEMPLATE_SPECIALIZATION (decl))
243
        {
244
          check_member_template (DECL_TI_TEMPLATE (decl));
245
          return DECL_TI_TEMPLATE (decl);
246
        }
247
      else
248
        return decl;
249
    }
250
  else
251
    error ("invalid member template declaration %qD", decl);
252
 
253
  return error_mark_node;
254
}
255
 
256
/* Returns the template nesting level of the indicated class TYPE.
257
 
258
   For example, in:
259
     template <class T>
260
     struct A
261
     {
262
       template <class U>
263
       struct B {};
264
     };
265
 
266
   A<T>::B<U> has depth two, while A<T> has depth one.
267
   Both A<T>::B<int> and A<int>::B<U> have depth one, if
268
   COUNT_SPECIALIZATIONS is 0 or if they are instantiations, not
269
   specializations.
270
 
271
   This function is guaranteed to return 0 if passed NULL_TREE so
272
   that, for example, `template_class_depth (current_class_type)' is
273
   always safe.  */
274
 
275
static int
276
template_class_depth_real (tree type, int count_specializations)
277
{
278
  int depth;
279
 
280
  for (depth = 0;
281
       type && TREE_CODE (type) != NAMESPACE_DECL;
282
       type = (TREE_CODE (type) == FUNCTION_DECL)
283
         ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
284
    {
285
      if (TREE_CODE (type) != FUNCTION_DECL)
286
        {
287
          if (CLASSTYPE_TEMPLATE_INFO (type)
288
              && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type))
289
              && ((count_specializations
290
                   && CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
291
                  || uses_template_parms (CLASSTYPE_TI_ARGS (type))))
292
            ++depth;
293
        }
294
      else
295
        {
296
          if (DECL_TEMPLATE_INFO (type)
297
              && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (type))
298
              && ((count_specializations
299
                   && DECL_TEMPLATE_SPECIALIZATION (type))
300
                  || uses_template_parms (DECL_TI_ARGS (type))))
301
            ++depth;
302
        }
303
    }
304
 
305
  return depth;
306
}
307
 
308
/* Returns the template nesting level of the indicated class TYPE.
309
   Like template_class_depth_real, but instantiations do not count in
310
   the depth.  */
311
 
312
int
313
template_class_depth (tree type)
314
{
315
  return template_class_depth_real (type, /*count_specializations=*/0);
316
}
317
 
318
/* Returns 1 if processing DECL as part of do_pending_inlines
319
   needs us to push template parms.  */
320
 
321
static int
322
inline_needs_template_parms (tree decl)
323
{
324
  if (! DECL_TEMPLATE_INFO (decl))
325
    return 0;
326
 
327
  return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
328
          > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
329
}
330
 
331
/* Subroutine of maybe_begin_member_template_processing.
332
   Push the template parms in PARMS, starting from LEVELS steps into the
333
   chain, and ending at the beginning, since template parms are listed
334
   innermost first.  */
335
 
336
static void
337
push_inline_template_parms_recursive (tree parmlist, int levels)
338
{
339
  tree parms = TREE_VALUE (parmlist);
340
  int i;
341
 
342
  if (levels > 1)
343
    push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
344
 
345
  ++processing_template_decl;
346
  current_template_parms
347
    = tree_cons (size_int (processing_template_decl),
348
                 parms, current_template_parms);
349
  TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
350
 
351
  begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
352
               NULL);
353
  for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
354
    {
355
      tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
356
      gcc_assert (DECL_P (parm));
357
 
358
      switch (TREE_CODE (parm))
359
        {
360
        case TYPE_DECL:
361
        case TEMPLATE_DECL:
362
          pushdecl (parm);
363
          break;
364
 
365
        case PARM_DECL:
366
          {
367
            /* Make a CONST_DECL as is done in process_template_parm.
368
               It is ugly that we recreate this here; the original
369
               version built in process_template_parm is no longer
370
               available.  */
371
            tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
372
                                    TREE_TYPE (parm));
373
            DECL_ARTIFICIAL (decl) = 1;
374
            TREE_CONSTANT (decl) = 1;
375
            TREE_INVARIANT (decl) = 1;
376
            TREE_READONLY (decl) = 1;
377
            DECL_INITIAL (decl) = DECL_INITIAL (parm);
378
            SET_DECL_TEMPLATE_PARM_P (decl);
379
            pushdecl (decl);
380
          }
381
          break;
382
 
383
        default:
384
          gcc_unreachable ();
385
        }
386
    }
387
}
388
 
389
/* Restore the template parameter context for a member template or
390
   a friend template defined in a class definition.  */
391
 
392
void
393
maybe_begin_member_template_processing (tree decl)
394
{
395
  tree parms;
396
  int levels = 0;
397
 
398
  if (inline_needs_template_parms (decl))
399
    {
400
      parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
401
      levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
402
 
403
      if (DECL_TEMPLATE_SPECIALIZATION (decl))
404
        {
405
          --levels;
406
          parms = TREE_CHAIN (parms);
407
        }
408
 
409
      push_inline_template_parms_recursive (parms, levels);
410
    }
411
 
412
  /* Remember how many levels of template parameters we pushed so that
413
     we can pop them later.  */
414
  if (!inline_parm_levels)
415
    VARRAY_INT_INIT (inline_parm_levels, 4, "inline_parm_levels");
416
  if (inline_parm_levels_used == inline_parm_levels->num_elements)
417
    VARRAY_GROW (inline_parm_levels, 2 * inline_parm_levels_used);
418
  VARRAY_INT (inline_parm_levels, inline_parm_levels_used) = levels;
419
  ++inline_parm_levels_used;
420
}
421
 
422
/* Undo the effects of maybe_begin_member_template_processing.  */
423
 
424
void
425
maybe_end_member_template_processing (void)
426
{
427
  int i;
428
 
429
  if (!inline_parm_levels_used)
430
    return;
431
 
432
  --inline_parm_levels_used;
433
  for (i = 0;
434
       i < VARRAY_INT (inline_parm_levels, inline_parm_levels_used);
435
       ++i)
436
    {
437
      --processing_template_decl;
438
      current_template_parms = TREE_CHAIN (current_template_parms);
439
      poplevel (0, 0, 0);
440
    }
441
}
442
 
443
/* Return a new template argument vector which contains all of ARGS,
444
   but has as its innermost set of arguments the EXTRA_ARGS.  */
445
 
446
static tree
447
add_to_template_args (tree args, tree extra_args)
448
{
449
  tree new_args;
450
  int extra_depth;
451
  int i;
452
  int j;
453
 
454
  extra_depth = TMPL_ARGS_DEPTH (extra_args);
455
  new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
456
 
457
  for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
458
    SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
459
 
460
  for (j = 1; j <= extra_depth; ++j, ++i)
461
    SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
462
 
463
  return new_args;
464
}
465
 
466
/* Like add_to_template_args, but only the outermost ARGS are added to
467
   the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
468
   (EXTRA_ARGS) levels are added.  This function is used to combine
469
   the template arguments from a partial instantiation with the
470
   template arguments used to attain the full instantiation from the
471
   partial instantiation.  */
472
 
473
static tree
474
add_outermost_template_args (tree args, tree extra_args)
475
{
476
  tree new_args;
477
 
478
  /* If there are more levels of EXTRA_ARGS than there are ARGS,
479
     something very fishy is going on.  */
480
  gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
481
 
482
  /* If *all* the new arguments will be the EXTRA_ARGS, just return
483
     them.  */
484
  if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
485
    return extra_args;
486
 
487
  /* For the moment, we make ARGS look like it contains fewer levels.  */
488
  TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
489
 
490
  new_args = add_to_template_args (args, extra_args);
491
 
492
  /* Now, we restore ARGS to its full dimensions.  */
493
  TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
494
 
495
  return new_args;
496
}
497
 
498
/* Return the N levels of innermost template arguments from the ARGS.  */
499
 
500
tree
501
get_innermost_template_args (tree args, int n)
502
{
503
  tree new_args;
504
  int extra_levels;
505
  int i;
506
 
507
  gcc_assert (n >= 0);
508
 
509
  /* If N is 1, just return the innermost set of template arguments.  */
510
  if (n == 1)
511
    return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
512
 
513
  /* If we're not removing anything, just return the arguments we were
514
     given.  */
515
  extra_levels = TMPL_ARGS_DEPTH (args) - n;
516
  gcc_assert (extra_levels >= 0);
517
  if (extra_levels == 0)
518
    return args;
519
 
520
  /* Make a new set of arguments, not containing the outer arguments.  */
521
  new_args = make_tree_vec (n);
522
  for (i = 1; i <= n; ++i)
523
    SET_TMPL_ARGS_LEVEL (new_args, i,
524
                         TMPL_ARGS_LEVEL (args, i + extra_levels));
525
 
526
  return new_args;
527
}
528
 
529
/* We've got a template header coming up; push to a new level for storing
530
   the parms.  */
531
 
532
void
533
begin_template_parm_list (void)
534
{
535
  /* We use a non-tag-transparent scope here, which causes pushtag to
536
     put tags in this scope, rather than in the enclosing class or
537
     namespace scope.  This is the right thing, since we want
538
     TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
539
     global template class, push_template_decl handles putting the
540
     TEMPLATE_DECL into top-level scope.  For a nested template class,
541
     e.g.:
542
 
543
       template <class T> struct S1 {
544
         template <class T> struct S2 {};
545
       };
546
 
547
     pushtag contains special code to call pushdecl_with_scope on the
548
     TEMPLATE_DECL for S2.  */
549
  begin_scope (sk_template_parms, NULL);
550
  ++processing_template_decl;
551
  ++processing_template_parmlist;
552
  note_template_header (0);
553
}
554
 
555
/* This routine is called when a specialization is declared.  If it is
556
   invalid to declare a specialization here, an error is reported.  */
557
 
558
static void
559
check_specialization_scope (void)
560
{
561
  tree scope = current_scope ();
562
 
563
  /* [temp.expl.spec]
564
 
565
     An explicit specialization shall be declared in the namespace of
566
     which the template is a member, or, for member templates, in the
567
     namespace of which the enclosing class or enclosing class
568
     template is a member.  An explicit specialization of a member
569
     function, member class or static data member of a class template
570
     shall be declared in the namespace of which the class template
571
     is a member.  */
572
  if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
573
    error ("explicit specialization in non-namespace scope %qD", scope);
574
 
575
  /* [temp.expl.spec]
576
 
577
     In an explicit specialization declaration for a member of a class
578
     template or a member template that appears in namespace scope,
579
     the member template and some of its enclosing class templates may
580
     remain unspecialized, except that the declaration shall not
581
     explicitly specialize a class member template if its enclosing
582
     class templates are not explicitly specialized as well.  */
583
  if (current_template_parms)
584
    error ("enclosing class templates are not explicitly specialized");
585
}
586
 
587
/* We've just seen template <>.  */
588
 
589
void
590
begin_specialization (void)
591
{
592
  begin_scope (sk_template_spec, NULL);
593
  note_template_header (1);
594
  check_specialization_scope ();
595
}
596
 
597
/* Called at then end of processing a declaration preceded by
598
   template<>.  */
599
 
600
void
601
end_specialization (void)
602
{
603
  finish_scope ();
604
  reset_specialization ();
605
}
606
 
607
/* Any template <>'s that we have seen thus far are not referring to a
608
   function specialization.  */
609
 
610
void
611
reset_specialization (void)
612
{
613
  processing_specialization = 0;
614
  template_header_count = 0;
615
}
616
 
617
/* We've just seen a template header.  If SPECIALIZATION is nonzero,
618
   it was of the form template <>.  */
619
 
620
static void
621
note_template_header (int specialization)
622
{
623
  processing_specialization = specialization;
624
  template_header_count++;
625
}
626
 
627
/* We're beginning an explicit instantiation.  */
628
 
629
void
630
begin_explicit_instantiation (void)
631
{
632
  gcc_assert (!processing_explicit_instantiation);
633
  processing_explicit_instantiation = true;
634
}
635
 
636
 
637
void
638
end_explicit_instantiation (void)
639
{
640
  gcc_assert (processing_explicit_instantiation);
641
  processing_explicit_instantiation = false;
642
}
643
 
644
/* An explicit specialization or partial specialization TMPL is being
645
   declared.  Check that the namespace in which the specialization is
646
   occurring is permissible.  Returns false iff it is invalid to
647
   specialize TMPL in the current namespace.  */
648
 
649
static bool
650
check_specialization_namespace (tree tmpl)
651
{
652
  tree tpl_ns = decl_namespace_context (tmpl);
653
 
654
  /* [tmpl.expl.spec]
655
 
656
     An explicit specialization shall be declared in the namespace of
657
     which the template is a member, or, for member templates, in the
658
     namespace of which the enclosing class or enclosing class
659
     template is a member.  An explicit specialization of a member
660
     function, member class or static data member of a class template
661
     shall be declared in the namespace of which the class template is
662
     a member.  */
663
  if (is_associated_namespace (current_namespace, tpl_ns))
664
    /* Same or super-using namespace.  */
665
    return true;
666
  else
667
    {
668
      pedwarn ("specialization of %qD in different namespace", tmpl);
669
      pedwarn ("  from definition of %q+#D", tmpl);
670
      return false;
671
    }
672
}
673
 
674
/* SPEC is an explicit instantiation.  Check that it is valid to
675
   perform this explicit instantiation in the current namespace.  */
676
 
677
static void
678
check_explicit_instantiation_namespace (tree spec)
679
{
680
  tree ns;
681
 
682
  /* DR 275: An explicit instantiation shall appear in an enclosing
683
     namespace of its template.  */
684
  ns = decl_namespace_context (spec);
685
  if (!is_ancestor (current_namespace, ns))
686
    pedwarn ("explicit instantiation of %qD in namespace %qD "
687
             "(which does not enclose namespace %qD)",
688
             spec, current_namespace, ns);
689
}
690
 
691
/* The TYPE is being declared.  If it is a template type, that means it
692
   is a partial specialization.  Do appropriate error-checking.  */
693
 
694
void
695
maybe_process_partial_specialization (tree type)
696
{
697
  tree context;
698
 
699
  if (type == error_mark_node)
700
    return;
701
 
702
  context = TYPE_CONTEXT (type);
703
 
704
  if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
705
    {
706
      /* This is for ordinary explicit specialization and partial
707
         specialization of a template class such as:
708
 
709
           template <> class C<int>;
710
 
711
         or:
712
 
713
           template <class T> class C<T*>;
714
 
715
         Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
716
 
717
      if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
718
          && !COMPLETE_TYPE_P (type))
719
        {
720
          check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
721
          SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
722
          if (processing_template_decl)
723
            push_template_decl (TYPE_MAIN_DECL (type));
724
        }
725
      else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
726
        error ("specialization of %qT after instantiation", type);
727
    }
728
  else if (CLASS_TYPE_P (type)
729
           && !CLASSTYPE_USE_TEMPLATE (type)
730
           && CLASSTYPE_TEMPLATE_INFO (type)
731
           && context && CLASS_TYPE_P (context)
732
           && CLASSTYPE_TEMPLATE_INFO (context))
733
    {
734
      /* This is for an explicit specialization of member class
735
         template according to [temp.expl.spec/18]:
736
 
737
           template <> template <class U> class C<int>::D;
738
 
739
         The context `C<int>' must be an implicit instantiation.
740
         Otherwise this is just a member class template declared
741
         earlier like:
742
 
743
           template <> class C<int> { template <class U> class D; };
744
           template <> template <class U> class C<int>::D;
745
 
746
         In the first case, `C<int>::D' is a specialization of `C<T>::D'
747
         while in the second case, `C<int>::D' is a primary template
748
         and `C<T>::D' may not exist.  */
749
 
750
      if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
751
          && !COMPLETE_TYPE_P (type))
752
        {
753
          tree t;
754
 
755
          if (current_namespace
756
              != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
757
            {
758
              pedwarn ("specializing %q#T in different namespace", type);
759
              pedwarn ("  from definition of %q+#D",
760
                       CLASSTYPE_TI_TEMPLATE (type));
761
            }
762
 
763
          /* Check for invalid specialization after instantiation:
764
 
765
               template <> template <> class C<int>::D<int>;
766
               template <> template <class U> class C<int>::D;  */
767
 
768
          for (t = DECL_TEMPLATE_INSTANTIATIONS
769
                 (most_general_template (CLASSTYPE_TI_TEMPLATE (type)));
770
               t; t = TREE_CHAIN (t))
771
            if (TREE_VALUE (t) != type
772
                && TYPE_CONTEXT (TREE_VALUE (t)) == context)
773
              error ("specialization %qT after instantiation %qT",
774
                     type, TREE_VALUE (t));
775
 
776
          /* Mark TYPE as a specialization.  And as a result, we only
777
             have one level of template argument for the innermost
778
             class template.  */
779
          SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
780
          CLASSTYPE_TI_ARGS (type)
781
            = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
782
        }
783
    }
784
  else if (processing_specialization)
785
    error ("explicit specialization of non-template %qT", type);
786
}
787
 
788
/* Returns nonzero if we can optimize the retrieval of specializations
789
   for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
790
   do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
791
 
792
static inline bool
793
optimize_specialization_lookup_p (tree tmpl)
794
{
795
  return (DECL_FUNCTION_TEMPLATE_P (tmpl)
796
          && DECL_CLASS_SCOPE_P (tmpl)
797
          /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
798
             parameter.  */
799
          && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
800
          /* The optimized lookup depends on the fact that the
801
             template arguments for the member function template apply
802
             purely to the containing class, which is not true if the
803
             containing class is an explicit or partial
804
             specialization.  */
805
          && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
806
          && !DECL_MEMBER_TEMPLATE_P (tmpl)
807
          && !DECL_CONV_FN_P (tmpl)
808
          /* It is possible to have a template that is not a member
809
             template and is not a member of a template class:
810
 
811
             template <typename T>
812
             struct S { friend A::f(); };
813
 
814
             Here, the friend function is a template, but the context does
815
             not have template information.  The optimized lookup relies
816
             on having ARGS be the template arguments for both the class
817
             and the function template.  */
818
          && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
819
}
820
 
821
/* Retrieve the specialization (in the sense of [temp.spec] - a
822
   specialization is either an instantiation or an explicit
823
   specialization) of TMPL for the given template ARGS.  If there is
824
   no such specialization, return NULL_TREE.  The ARGS are a vector of
825
   arguments, or a vector of vectors of arguments, in the case of
826
   templates with more than one level of parameters.
827
 
828
   If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
829
   then we search for a partial specialization matching ARGS.  This
830
   parameter is ignored if TMPL is not a class template.  */
831
 
832
static tree
833
retrieve_specialization (tree tmpl, tree args,
834
                         bool class_specializations_p)
835
{
836
  gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
837
 
838
  /* There should be as many levels of arguments as there are
839
     levels of parameters.  */
840
  gcc_assert (TMPL_ARGS_DEPTH (args)
841
              == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
842
 
843
  if (optimize_specialization_lookup_p (tmpl))
844
    {
845
      tree class_template;
846
      tree class_specialization;
847
      VEC(tree,gc) *methods;
848
      tree fns;
849
      int idx;
850
 
851
      /* The template arguments actually apply to the containing
852
         class.  Find the class specialization with those
853
         arguments.  */
854
      class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
855
      class_specialization
856
        = retrieve_specialization (class_template, args,
857
                                   /*class_specializations_p=*/false);
858
      if (!class_specialization)
859
        return NULL_TREE;
860
      /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
861
         for the specialization.  */
862
      idx = class_method_index_for_fn (class_specialization, tmpl);
863
      if (idx == -1)
864
        return NULL_TREE;
865
      /* Iterate through the methods with the indicated name, looking
866
         for the one that has an instance of TMPL.  */
867
      methods = CLASSTYPE_METHOD_VEC (class_specialization);
868
      for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
869
        {
870
          tree fn = OVL_CURRENT (fns);
871
          if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl)
872
            return fn;
873
        }
874
      return NULL_TREE;
875
    }
876
  else
877
    {
878
      tree *sp;
879
      tree *head;
880
 
881
      /* Class templates store their instantiations on the
882
         DECL_TEMPLATE_INSTANTIATIONS list; other templates use the
883
         DECL_TEMPLATE_SPECIALIZATIONS list.  */
884
      if (!class_specializations_p
885
          && TREE_CODE (DECL_TEMPLATE_RESULT (tmpl)) == TYPE_DECL)
886
        sp = &DECL_TEMPLATE_INSTANTIATIONS (tmpl);
887
      else
888
        sp = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
889
      head = sp;
890
      /* Iterate through the list until we find a matching template.  */
891
      while (*sp != NULL_TREE)
892
        {
893
          tree spec = *sp;
894
 
895
          if (comp_template_args (TREE_PURPOSE (spec), args))
896
            {
897
              /* Use the move-to-front heuristic to speed up future
898
                 searches.  */
899
              if (spec != *head)
900
                {
901
                  *sp = TREE_CHAIN (*sp);
902
                  TREE_CHAIN (spec) = *head;
903
                  *head = spec;
904
                }
905
              return TREE_VALUE (spec);
906
            }
907
          sp = &TREE_CHAIN (spec);
908
        }
909
    }
910
 
911
  return NULL_TREE;
912
}
913
 
914
/* Like retrieve_specialization, but for local declarations.  */
915
 
916
static tree
917
retrieve_local_specialization (tree tmpl)
918
{
919
  tree spec = htab_find_with_hash (local_specializations, tmpl,
920
                                   htab_hash_pointer (tmpl));
921
  return spec ? TREE_PURPOSE (spec) : NULL_TREE;
922
}
923
 
924
/* Returns nonzero iff DECL is a specialization of TMPL.  */
925
 
926
int
927
is_specialization_of (tree decl, tree tmpl)
928
{
929
  tree t;
930
 
931
  if (TREE_CODE (decl) == FUNCTION_DECL)
932
    {
933
      for (t = decl;
934
           t != NULL_TREE;
935
           t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
936
        if (t == tmpl)
937
          return 1;
938
    }
939
  else
940
    {
941
      gcc_assert (TREE_CODE (decl) == TYPE_DECL);
942
 
943
      for (t = TREE_TYPE (decl);
944
           t != NULL_TREE;
945
           t = CLASSTYPE_USE_TEMPLATE (t)
946
             ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
947
        if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
948
          return 1;
949
    }
950
 
951
  return 0;
952
}
953
 
954
/* Returns nonzero iff DECL is a specialization of friend declaration
955
   FRIEND according to [temp.friend].  */
956
 
957
bool
958
is_specialization_of_friend (tree decl, tree friend)
959
{
960
  bool need_template = true;
961
  int template_depth;
962
 
963
  gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
964
              || TREE_CODE (decl) == TYPE_DECL);
965
 
966
  /* For [temp.friend/6] when FRIEND is an ordinary member function
967
     of a template class, we want to check if DECL is a specialization
968
     if this.  */
969
  if (TREE_CODE (friend) == FUNCTION_DECL
970
      && DECL_TEMPLATE_INFO (friend)
971
      && !DECL_USE_TEMPLATE (friend))
972
    {
973
      /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
974
      friend = DECL_TI_TEMPLATE (friend);
975
      need_template = false;
976
    }
977
  else if (TREE_CODE (friend) == TEMPLATE_DECL
978
           && !PRIMARY_TEMPLATE_P (friend))
979
    need_template = false;
980
 
981
  /* There is nothing to do if this is not a template friend.  */
982
  if (TREE_CODE (friend) != TEMPLATE_DECL)
983
    return false;
984
 
985
  if (is_specialization_of (decl, friend))
986
    return true;
987
 
988
  /* [temp.friend/6]
989
     A member of a class template may be declared to be a friend of a
990
     non-template class.  In this case, the corresponding member of
991
     every specialization of the class template is a friend of the
992
     class granting friendship.
993
 
994
     For example, given a template friend declaration
995
 
996
       template <class T> friend void A<T>::f();
997
 
998
     the member function below is considered a friend
999
 
1000
       template <> struct A<int> {
1001
         void f();
1002
       };
1003
 
1004
     For this type of template friend, TEMPLATE_DEPTH below will be
1005
     nonzero.  To determine if DECL is a friend of FRIEND, we first
1006
     check if the enclosing class is a specialization of another.  */
1007
 
1008
  template_depth = template_class_depth (DECL_CONTEXT (friend));
1009
  if (template_depth
1010
      && DECL_CLASS_SCOPE_P (decl)
1011
      && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1012
                               CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend))))
1013
    {
1014
      /* Next, we check the members themselves.  In order to handle
1015
         a few tricky cases, such as when FRIEND's are
1016
 
1017
           template <class T> friend void A<T>::g(T t);
1018
           template <class T> template <T t> friend void A<T>::h();
1019
 
1020
         and DECL's are
1021
 
1022
           void A<int>::g(int);
1023
           template <int> void A<int>::h();
1024
 
1025
         we need to figure out ARGS, the template arguments from
1026
         the context of DECL.  This is required for template substitution
1027
         of `T' in the function parameter of `g' and template parameter
1028
         of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1029
 
1030
      tree context = DECL_CONTEXT (decl);
1031
      tree args = NULL_TREE;
1032
      int current_depth = 0;
1033
 
1034
      while (current_depth < template_depth)
1035
        {
1036
          if (CLASSTYPE_TEMPLATE_INFO (context))
1037
            {
1038
              if (current_depth == 0)
1039
                args = TYPE_TI_ARGS (context);
1040
              else
1041
                args = add_to_template_args (TYPE_TI_ARGS (context), args);
1042
              current_depth++;
1043
            }
1044
          context = TYPE_CONTEXT (context);
1045
        }
1046
 
1047
      if (TREE_CODE (decl) == FUNCTION_DECL)
1048
        {
1049
          bool is_template;
1050
          tree friend_type;
1051
          tree decl_type;
1052
          tree friend_args_type;
1053
          tree decl_args_type;
1054
 
1055
          /* Make sure that both DECL and FRIEND are templates or
1056
             non-templates.  */
1057
          is_template = DECL_TEMPLATE_INFO (decl)
1058
                        && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1059
          if (need_template ^ is_template)
1060
            return false;
1061
          else if (is_template)
1062
            {
1063
              /* If both are templates, check template parameter list.  */
1064
              tree friend_parms
1065
                = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1066
                                         args, tf_none);
1067
              if (!comp_template_parms
1068
                     (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1069
                      friend_parms))
1070
                return false;
1071
 
1072
              decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1073
            }
1074
          else
1075
            decl_type = TREE_TYPE (decl);
1076
 
1077
          friend_type = tsubst_function_type (TREE_TYPE (friend), args,
1078
                                              tf_none, NULL_TREE);
1079
          if (friend_type == error_mark_node)
1080
            return false;
1081
 
1082
          /* Check if return types match.  */
1083
          if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1084
            return false;
1085
 
1086
          /* Check if function parameter types match, ignoring the
1087
             `this' parameter.  */
1088
          friend_args_type = TYPE_ARG_TYPES (friend_type);
1089
          decl_args_type = TYPE_ARG_TYPES (decl_type);
1090
          if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend))
1091
            friend_args_type = TREE_CHAIN (friend_args_type);
1092
          if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1093
            decl_args_type = TREE_CHAIN (decl_args_type);
1094
 
1095
          return compparms (decl_args_type, friend_args_type);
1096
        }
1097
      else
1098
        {
1099
          /* DECL is a TYPE_DECL */
1100
          bool is_template;
1101
          tree decl_type = TREE_TYPE (decl);
1102
 
1103
          /* Make sure that both DECL and FRIEND are templates or
1104
             non-templates.  */
1105
          is_template
1106
            = CLASSTYPE_TEMPLATE_INFO (decl_type)
1107
              && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1108
 
1109
          if (need_template ^ is_template)
1110
            return false;
1111
          else if (is_template)
1112
            {
1113
              tree friend_parms;
1114
              /* If both are templates, check the name of the two
1115
                 TEMPLATE_DECL's first because is_friend didn't.  */
1116
              if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1117
                  != DECL_NAME (friend))
1118
                return false;
1119
 
1120
              /* Now check template parameter list.  */
1121
              friend_parms
1122
                = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1123
                                         args, tf_none);
1124
              return comp_template_parms
1125
                (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1126
                 friend_parms);
1127
            }
1128
          else
1129
            return (DECL_NAME (decl)
1130
                    == DECL_NAME (friend));
1131
        }
1132
    }
1133
  return false;
1134
}
1135
 
1136
/* Register the specialization SPEC as a specialization of TMPL with
1137
   the indicated ARGS.  IS_FRIEND indicates whether the specialization
1138
   is actually just a friend declaration.  Returns SPEC, or an
1139
   equivalent prior declaration, if available.  */
1140
 
1141
static tree
1142
register_specialization (tree spec, tree tmpl, tree args, bool is_friend)
1143
{
1144
  tree fn;
1145
 
1146
  gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
1147
 
1148
  if (TREE_CODE (spec) == FUNCTION_DECL
1149
      && uses_template_parms (DECL_TI_ARGS (spec)))
1150
    /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1151
       register it; we want the corresponding TEMPLATE_DECL instead.
1152
       We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1153
       the more obvious `uses_template_parms (spec)' to avoid problems
1154
       with default function arguments.  In particular, given
1155
       something like this:
1156
 
1157
          template <class T> void f(T t1, T t = T())
1158
 
1159
       the default argument expression is not substituted for in an
1160
       instantiation unless and until it is actually needed.  */
1161
    return spec;
1162
 
1163
  fn = retrieve_specialization (tmpl, args,
1164
                                /*class_specializations_p=*/false);
1165
  /* We can sometimes try to re-register a specialization that we've
1166
     already got.  In particular, regenerate_decl_from_template calls
1167
     duplicate_decls which will update the specialization list.  But,
1168
     we'll still get called again here anyhow.  It's more convenient
1169
     to simply allow this than to try to prevent it.  */
1170
  if (fn == spec)
1171
    return spec;
1172
  else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1173
    {
1174
      if (DECL_TEMPLATE_INSTANTIATION (fn))
1175
        {
1176
          if (TREE_USED (fn)
1177
              || DECL_EXPLICIT_INSTANTIATION (fn))
1178
            {
1179
              error ("specialization of %qD after instantiation",
1180
                     fn);
1181
              return spec;
1182
            }
1183
          else
1184
            {
1185
              tree clone;
1186
              /* This situation should occur only if the first
1187
                 specialization is an implicit instantiation, the
1188
                 second is an explicit specialization, and the
1189
                 implicit instantiation has not yet been used.  That
1190
                 situation can occur if we have implicitly
1191
                 instantiated a member function and then specialized
1192
                 it later.
1193
 
1194
                 We can also wind up here if a friend declaration that
1195
                 looked like an instantiation turns out to be a
1196
                 specialization:
1197
 
1198
                   template <class T> void foo(T);
1199
                   class S { friend void foo<>(int) };
1200
                   template <> void foo(int);
1201
 
1202
                 We transform the existing DECL in place so that any
1203
                 pointers to it become pointers to the updated
1204
                 declaration.
1205
 
1206
                 If there was a definition for the template, but not
1207
                 for the specialization, we want this to look as if
1208
                 there were no definition, and vice versa.  */
1209
              DECL_INITIAL (fn) = NULL_TREE;
1210
              duplicate_decls (spec, fn, is_friend);
1211
              /* The call to duplicate_decls will have applied
1212
                 [temp.expl.spec]:
1213
 
1214
                   An explicit specialization of a function template
1215
                   is inline only if it is explicitly declared to be,
1216
                   and independently of whether its function tempalte
1217
                   is.
1218
 
1219
                to the primary function; now copy the inline bits to
1220
                the various clones.  */
1221
              FOR_EACH_CLONE (clone, fn)
1222
                {
1223
                  DECL_DECLARED_INLINE_P (clone)
1224
                    = DECL_DECLARED_INLINE_P (fn);
1225
                  DECL_INLINE (clone)
1226
                    = DECL_INLINE (fn);
1227
                }
1228
              check_specialization_namespace (fn);
1229
 
1230
              return fn;
1231
            }
1232
        }
1233
      else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1234
        {
1235
          if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1236
            /* Dup decl failed, but this is a new definition. Set the
1237
               line number so any errors match this new
1238
               definition.  */
1239
            DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1240
 
1241
          return fn;
1242
        }
1243
    }
1244
 
1245
  /* A specialization must be declared in the same namespace as the
1246
     template it is specializing.  */
1247
  if (DECL_TEMPLATE_SPECIALIZATION (spec)
1248
      && !check_specialization_namespace (tmpl))
1249
    DECL_CONTEXT (spec) = decl_namespace_context (tmpl);
1250
 
1251
  if (!optimize_specialization_lookup_p (tmpl))
1252
    DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
1253
      = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
1254
 
1255
  return spec;
1256
}
1257
 
1258
/* Unregister the specialization SPEC as a specialization of TMPL.
1259
   Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1260
   if the SPEC was listed as a specialization of TMPL.  */
1261
 
1262
bool
1263
reregister_specialization (tree spec, tree tmpl, tree new_spec)
1264
{
1265
  tree* s;
1266
 
1267
  for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
1268
       *s != NULL_TREE;
1269
       s = &TREE_CHAIN (*s))
1270
    if (TREE_VALUE (*s) == spec)
1271
      {
1272
        if (!new_spec)
1273
          *s = TREE_CHAIN (*s);
1274
        else
1275
          TREE_VALUE (*s) = new_spec;
1276
        return 1;
1277
      }
1278
 
1279
  return 0;
1280
}
1281
 
1282
/* Compare an entry in the local specializations hash table P1 (which
1283
   is really a pointer to a TREE_LIST) with P2 (which is really a
1284
   DECL).  */
1285
 
1286
static int
1287
eq_local_specializations (const void *p1, const void *p2)
1288
{
1289
  return TREE_VALUE ((tree) p1) == (tree) p2;
1290
}
1291
 
1292
/* Hash P1, an entry in the local specializations table.  */
1293
 
1294
static hashval_t
1295
hash_local_specialization (const void* p1)
1296
{
1297
  return htab_hash_pointer (TREE_VALUE ((tree) p1));
1298
}
1299
 
1300
/* Like register_specialization, but for local declarations.  We are
1301
   registering SPEC, an instantiation of TMPL.  */
1302
 
1303
static void
1304
register_local_specialization (tree spec, tree tmpl)
1305
{
1306
  void **slot;
1307
 
1308
  slot = htab_find_slot_with_hash (local_specializations, tmpl,
1309
                                   htab_hash_pointer (tmpl), INSERT);
1310
  *slot = build_tree_list (spec, tmpl);
1311
}
1312
 
1313
/* Print the list of candidate FNS in an error message.  */
1314
 
1315
void
1316
print_candidates (tree fns)
1317
{
1318
  tree fn;
1319
 
1320
  const char *str = "candidates are:";
1321
 
1322
  for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1323
    {
1324
      tree f;
1325
 
1326
      for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
1327
        error ("%s %+#D", str, OVL_CURRENT (f));
1328
      str = "               ";
1329
    }
1330
}
1331
 
1332
/* Returns the template (one of the functions given by TEMPLATE_ID)
1333
   which can be specialized to match the indicated DECL with the
1334
   explicit template args given in TEMPLATE_ID.  The DECL may be
1335
   NULL_TREE if none is available.  In that case, the functions in
1336
   TEMPLATE_ID are non-members.
1337
 
1338
   If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1339
   specialization of a member template.
1340
 
1341
   The TEMPLATE_COUNT is the number of references to qualifying
1342
   template classes that appeared in the name of the function. See
1343
   check_explicit_specialization for a more accurate description.
1344
 
1345
   The template args (those explicitly specified and those deduced)
1346
   are output in a newly created vector *TARGS_OUT.
1347
 
1348
   If it is impossible to determine the result, an error message is
1349
   issued.  The error_mark_node is returned to indicate failure.  */
1350
 
1351
static tree
1352
determine_specialization (tree template_id,
1353
                          tree decl,
1354
                          tree* targs_out,
1355
                          int need_member_template,
1356
                          int template_count)
1357
{
1358
  tree fns;
1359
  tree targs;
1360
  tree explicit_targs;
1361
  tree candidates = NULL_TREE;
1362
  tree templates = NULL_TREE;
1363
  int header_count;
1364
  struct cp_binding_level *b;
1365
 
1366
  *targs_out = NULL_TREE;
1367
 
1368
  if (template_id == error_mark_node)
1369
    return error_mark_node;
1370
 
1371
  fns = TREE_OPERAND (template_id, 0);
1372
  explicit_targs = TREE_OPERAND (template_id, 1);
1373
 
1374
  if (fns == error_mark_node)
1375
    return error_mark_node;
1376
 
1377
  /* Check for baselinks.  */
1378
  if (BASELINK_P (fns))
1379
    fns = BASELINK_FUNCTIONS (fns);
1380
 
1381
  if (!is_overloaded_fn (fns))
1382
    {
1383
      error ("%qD is not a function template", fns);
1384
      return error_mark_node;
1385
    }
1386
 
1387
  /* Count the number of template headers specified for this
1388
     specialization.  */
1389
  header_count = 0;
1390
  for (b = current_binding_level;
1391
       b->kind == sk_template_parms;
1392
       b = b->level_chain)
1393
    ++header_count;
1394
 
1395
  for (; fns; fns = OVL_NEXT (fns))
1396
    {
1397
      tree fn = OVL_CURRENT (fns);
1398
 
1399
      if (TREE_CODE (fn) == TEMPLATE_DECL)
1400
        {
1401
          tree decl_arg_types;
1402
          tree fn_arg_types;
1403
 
1404
          /* DECL might be a specialization of FN.  */
1405
 
1406
          /* Adjust the type of DECL in case FN is a static member.  */
1407
          decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1408
          if (DECL_STATIC_FUNCTION_P (fn)
1409
              && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1410
            decl_arg_types = TREE_CHAIN (decl_arg_types);
1411
 
1412
          /* Check that the number of function parameters matches.
1413
             For example,
1414
               template <class T> void f(int i = 0);
1415
               template <> void f<int>();
1416
             The specialization f<int> is invalid but is not caught
1417
             by get_bindings below.  */
1418
 
1419
          fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1420
          if (list_length (fn_arg_types) != list_length (decl_arg_types))
1421
            continue;
1422
 
1423
          /* For a non-static member function, we need to make sure that
1424
             the const qualification is the same. This can be done by
1425
             checking the 'this' in the argument list.  */
1426
          if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1427
              && !same_type_p (TREE_VALUE (fn_arg_types),
1428
                               TREE_VALUE (decl_arg_types)))
1429
            continue;
1430
 
1431
          /* In case of explicit specialization, we need to check if
1432
             the number of template headers appearing in the specialization
1433
             is correct. This is usually done in check_explicit_specialization,
1434
             but the check done there cannot be exhaustive when specializing
1435
             member functions. Consider the following code:
1436
 
1437
             template <> void A<int>::f(int);
1438
             template <> template <> void A<int>::f(int);
1439
 
1440
             Assuming that A<int> is not itself an explicit specialization
1441
             already, the first line specializes "f" which is a non-template
1442
             member function, whilst the second line specializes "f" which
1443
             is a template member function. So both lines are syntactically
1444
             correct, and check_explicit_specialization does not reject
1445
             them.
1446
 
1447
             Here, we can do better, as we are matching the specialization
1448
             against the declarations. We count the number of template
1449
             headers, and we check if they match TEMPLATE_COUNT + 1
1450
             (TEMPLATE_COUNT is the number of qualifying template classes,
1451
             plus there must be another header for the member template
1452
             itself).
1453
 
1454
             Notice that if header_count is zero, this is not a
1455
             specialization but rather a template instantiation, so there
1456
             is no check we can perform here.  */
1457
          if (header_count && header_count != template_count + 1)
1458
            continue;
1459
 
1460
          /* Check that the number of template arguments at the
1461
             innermost level for DECL is the same as for FN.  */
1462
          if (current_binding_level->kind == sk_template_parms
1463
              && !current_binding_level->explicit_spec_p
1464
              && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1465
                  != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1466
                                      (current_template_parms))))
1467
            continue;
1468
 
1469
          /* See whether this function might be a specialization of this
1470
             template.  */
1471
          targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1472
 
1473
          if (!targs)
1474
            /* We cannot deduce template arguments that when used to
1475
               specialize TMPL will produce DECL.  */
1476
            continue;
1477
 
1478
          /* Save this template, and the arguments deduced.  */
1479
          templates = tree_cons (targs, fn, templates);
1480
        }
1481
      else if (need_member_template)
1482
        /* FN is an ordinary member function, and we need a
1483
           specialization of a member template.  */
1484
        ;
1485
      else if (TREE_CODE (fn) != FUNCTION_DECL)
1486
        /* We can get IDENTIFIER_NODEs here in certain erroneous
1487
           cases.  */
1488
        ;
1489
      else if (!DECL_FUNCTION_MEMBER_P (fn))
1490
        /* This is just an ordinary non-member function.  Nothing can
1491
           be a specialization of that.  */
1492
        ;
1493
      else if (DECL_ARTIFICIAL (fn))
1494
        /* Cannot specialize functions that are created implicitly.  */
1495
        ;
1496
      else
1497
        {
1498
          tree decl_arg_types;
1499
 
1500
          /* This is an ordinary member function.  However, since
1501
             we're here, we can assume it's enclosing class is a
1502
             template class.  For example,
1503
 
1504
               template <typename T> struct S { void f(); };
1505
               template <> void S<int>::f() {}
1506
 
1507
             Here, S<int>::f is a non-template, but S<int> is a
1508
             template class.  If FN has the same type as DECL, we
1509
             might be in business.  */
1510
 
1511
          if (!DECL_TEMPLATE_INFO (fn))
1512
            /* Its enclosing class is an explicit specialization
1513
               of a template class.  This is not a candidate.  */
1514
            continue;
1515
 
1516
          if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1517
                            TREE_TYPE (TREE_TYPE (fn))))
1518
            /* The return types differ.  */
1519
            continue;
1520
 
1521
          /* Adjust the type of DECL in case FN is a static member.  */
1522
          decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1523
          if (DECL_STATIC_FUNCTION_P (fn)
1524
              && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1525
            decl_arg_types = TREE_CHAIN (decl_arg_types);
1526
 
1527
          if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1528
                         decl_arg_types))
1529
            /* They match!  */
1530
            candidates = tree_cons (NULL_TREE, fn, candidates);
1531
        }
1532
    }
1533
 
1534
  if (templates && TREE_CHAIN (templates))
1535
    {
1536
      /* We have:
1537
 
1538
           [temp.expl.spec]
1539
 
1540
           It is possible for a specialization with a given function
1541
           signature to be instantiated from more than one function
1542
           template.  In such cases, explicit specification of the
1543
           template arguments must be used to uniquely identify the
1544
           function template specialization being specialized.
1545
 
1546
         Note that here, there's no suggestion that we're supposed to
1547
         determine which of the candidate templates is most
1548
         specialized.  However, we, also have:
1549
 
1550
           [temp.func.order]
1551
 
1552
           Partial ordering of overloaded function template
1553
           declarations is used in the following contexts to select
1554
           the function template to which a function template
1555
           specialization refers:
1556
 
1557
           -- when an explicit specialization refers to a function
1558
              template.
1559
 
1560
         So, we do use the partial ordering rules, at least for now.
1561
         This extension can only serve to make invalid programs valid,
1562
         so it's safe.  And, there is strong anecdotal evidence that
1563
         the committee intended the partial ordering rules to apply;
1564
         the EDG front-end has that behavior, and John Spicer claims
1565
         that the committee simply forgot to delete the wording in
1566
         [temp.expl.spec].  */
1567
     tree tmpl = most_specialized (templates, decl, explicit_targs);
1568
     if (tmpl && tmpl != error_mark_node)
1569
       {
1570
         targs = get_bindings (tmpl, decl, explicit_targs, /*check_ret=*/true);
1571
         templates = tree_cons (targs, tmpl, NULL_TREE);
1572
       }
1573
    }
1574
 
1575
  if (templates == NULL_TREE && candidates == NULL_TREE)
1576
    {
1577
      error ("template-id %qD for %q+D does not match any template "
1578
             "declaration", template_id, decl);
1579
      return error_mark_node;
1580
    }
1581
  else if ((templates && TREE_CHAIN (templates))
1582
           || (candidates && TREE_CHAIN (candidates))
1583
           || (templates && candidates))
1584
    {
1585
      error ("ambiguous template specialization %qD for %q+D",
1586
             template_id, decl);
1587
      chainon (candidates, templates);
1588
      print_candidates (candidates);
1589
      return error_mark_node;
1590
    }
1591
 
1592
  /* We have one, and exactly one, match.  */
1593
  if (candidates)
1594
    {
1595
      /* It was a specialization of an ordinary member function in a
1596
         template class.  */
1597
      *targs_out = copy_node (DECL_TI_ARGS (TREE_VALUE (candidates)));
1598
      return DECL_TI_TEMPLATE (TREE_VALUE (candidates));
1599
    }
1600
 
1601
  /* It was a specialization of a template.  */
1602
  targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
1603
  if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1604
    {
1605
      *targs_out = copy_node (targs);
1606
      SET_TMPL_ARGS_LEVEL (*targs_out,
1607
                           TMPL_ARGS_DEPTH (*targs_out),
1608
                           TREE_PURPOSE (templates));
1609
    }
1610
  else
1611
    *targs_out = TREE_PURPOSE (templates);
1612
  return TREE_VALUE (templates);
1613
}
1614
 
1615
/* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1616
   but with the default argument values filled in from those in the
1617
   TMPL_TYPES.  */
1618
 
1619
static tree
1620
copy_default_args_to_explicit_spec_1 (tree spec_types,
1621
                                      tree tmpl_types)
1622
{
1623
  tree new_spec_types;
1624
 
1625
  if (!spec_types)
1626
    return NULL_TREE;
1627
 
1628
  if (spec_types == void_list_node)
1629
    return void_list_node;
1630
 
1631
  /* Substitute into the rest of the list.  */
1632
  new_spec_types =
1633
    copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1634
                                          TREE_CHAIN (tmpl_types));
1635
 
1636
  /* Add the default argument for this parameter.  */
1637
  return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1638
                         TREE_VALUE (spec_types),
1639
                         new_spec_types);
1640
}
1641
 
1642
/* DECL is an explicit specialization.  Replicate default arguments
1643
   from the template it specializes.  (That way, code like:
1644
 
1645
     template <class T> void f(T = 3);
1646
     template <> void f(double);
1647
     void g () { f (); }
1648
 
1649
   works, as required.)  An alternative approach would be to look up
1650
   the correct default arguments at the call-site, but this approach
1651
   is consistent with how implicit instantiations are handled.  */
1652
 
1653
static void
1654
copy_default_args_to_explicit_spec (tree decl)
1655
{
1656
  tree tmpl;
1657
  tree spec_types;
1658
  tree tmpl_types;
1659
  tree new_spec_types;
1660
  tree old_type;
1661
  tree new_type;
1662
  tree t;
1663
  tree object_type = NULL_TREE;
1664
  tree in_charge = NULL_TREE;
1665
  tree vtt = NULL_TREE;
1666
 
1667
  /* See if there's anything we need to do.  */
1668
  tmpl = DECL_TI_TEMPLATE (decl);
1669
  tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1670
  for (t = tmpl_types; t; t = TREE_CHAIN (t))
1671
    if (TREE_PURPOSE (t))
1672
      break;
1673
  if (!t)
1674
    return;
1675
 
1676
  old_type = TREE_TYPE (decl);
1677
  spec_types = TYPE_ARG_TYPES (old_type);
1678
 
1679
  if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1680
    {
1681
      /* Remove the this pointer, but remember the object's type for
1682
         CV quals.  */
1683
      object_type = TREE_TYPE (TREE_VALUE (spec_types));
1684
      spec_types = TREE_CHAIN (spec_types);
1685
      tmpl_types = TREE_CHAIN (tmpl_types);
1686
 
1687
      if (DECL_HAS_IN_CHARGE_PARM_P (decl))
1688
        {
1689
          /* DECL may contain more parameters than TMPL due to the extra
1690
             in-charge parameter in constructors and destructors.  */
1691
          in_charge = spec_types;
1692
          spec_types = TREE_CHAIN (spec_types);
1693
        }
1694
      if (DECL_HAS_VTT_PARM_P (decl))
1695
        {
1696
          vtt = spec_types;
1697
          spec_types = TREE_CHAIN (spec_types);
1698
        }
1699
    }
1700
 
1701
  /* Compute the merged default arguments.  */
1702
  new_spec_types =
1703
    copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1704
 
1705
  /* Compute the new FUNCTION_TYPE.  */
1706
  if (object_type)
1707
    {
1708
      if (vtt)
1709
        new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
1710
                                         TREE_VALUE (vtt),
1711
                                         new_spec_types);
1712
 
1713
      if (in_charge)
1714
        /* Put the in-charge parameter back.  */
1715
        new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1716
                                         TREE_VALUE (in_charge),
1717
                                         new_spec_types);
1718
 
1719
      new_type = build_method_type_directly (object_type,
1720
                                             TREE_TYPE (old_type),
1721
                                             new_spec_types);
1722
    }
1723
  else
1724
    new_type = build_function_type (TREE_TYPE (old_type),
1725
                                    new_spec_types);
1726
  new_type = cp_build_type_attribute_variant (new_type,
1727
                                              TYPE_ATTRIBUTES (old_type));
1728
  new_type = build_exception_variant (new_type,
1729
                                      TYPE_RAISES_EXCEPTIONS (old_type));
1730
  TREE_TYPE (decl) = new_type;
1731
}
1732
 
1733
/* Check to see if the function just declared, as indicated in
1734
   DECLARATOR, and in DECL, is a specialization of a function
1735
   template.  We may also discover that the declaration is an explicit
1736
   instantiation at this point.
1737
 
1738
   Returns DECL, or an equivalent declaration that should be used
1739
   instead if all goes well.  Issues an error message if something is
1740
   amiss.  Returns error_mark_node if the error is not easily
1741
   recoverable.
1742
 
1743
   FLAGS is a bitmask consisting of the following flags:
1744
 
1745
   2: The function has a definition.
1746
   4: The function is a friend.
1747
 
1748
   The TEMPLATE_COUNT is the number of references to qualifying
1749
   template classes that appeared in the name of the function.  For
1750
   example, in
1751
 
1752
     template <class T> struct S { void f(); };
1753
     void S<int>::f();
1754
 
1755
   the TEMPLATE_COUNT would be 1.  However, explicitly specialized
1756
   classes are not counted in the TEMPLATE_COUNT, so that in
1757
 
1758
     template <class T> struct S {};
1759
     template <> struct S<int> { void f(); }
1760
     template <> void S<int>::f();
1761
 
1762
   the TEMPLATE_COUNT would be 0.  (Note that this declaration is
1763
   invalid; there should be no template <>.)
1764
 
1765
   If the function is a specialization, it is marked as such via
1766
   DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
1767
   is set up correctly, and it is added to the list of specializations
1768
   for that template.  */
1769
 
1770
tree
1771
check_explicit_specialization (tree declarator,
1772
                               tree decl,
1773
                               int template_count,
1774
                               int flags)
1775
{
1776
  int have_def = flags & 2;
1777
  int is_friend = flags & 4;
1778
  int specialization = 0;
1779
  int explicit_instantiation = 0;
1780
  int member_specialization = 0;
1781
  tree ctype = DECL_CLASS_CONTEXT (decl);
1782
  tree dname = DECL_NAME (decl);
1783
  tmpl_spec_kind tsk;
1784
 
1785
  if (is_friend)
1786
    {
1787
      if (!processing_specialization)
1788
        tsk = tsk_none;
1789
      else
1790
        tsk = tsk_excessive_parms;
1791
    }
1792
  else
1793
    tsk = current_tmpl_spec_kind (template_count);
1794
 
1795
  switch (tsk)
1796
    {
1797
    case tsk_none:
1798
      if (processing_specialization)
1799
        {
1800
          specialization = 1;
1801
          SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1802
        }
1803
      else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1804
        {
1805
          if (is_friend)
1806
            /* This could be something like:
1807
 
1808
               template <class T> void f(T);
1809
               class S { friend void f<>(int); }  */
1810
            specialization = 1;
1811
          else
1812
            {
1813
              /* This case handles bogus declarations like template <>
1814
                 template <class T> void f<int>(); */
1815
 
1816
              error ("template-id %qD in declaration of primary template",
1817
                     declarator);
1818
              return decl;
1819
            }
1820
        }
1821
      break;
1822
 
1823
    case tsk_invalid_member_spec:
1824
      /* The error has already been reported in
1825
         check_specialization_scope.  */
1826
      return error_mark_node;
1827
 
1828
    case tsk_invalid_expl_inst:
1829
      error ("template parameter list used in explicit instantiation");
1830
 
1831
      /* Fall through.  */
1832
 
1833
    case tsk_expl_inst:
1834
      if (have_def)
1835
        error ("definition provided for explicit instantiation");
1836
 
1837
      explicit_instantiation = 1;
1838
      break;
1839
 
1840
    case tsk_excessive_parms:
1841
    case tsk_insufficient_parms:
1842
      if (tsk == tsk_excessive_parms)
1843
        error ("too many template parameter lists in declaration of %qD",
1844
               decl);
1845
      else if (template_header_count)
1846
        error("too few template parameter lists in declaration of %qD", decl);
1847
      else
1848
        error("explicit specialization of %qD must be introduced by "
1849
              "%<template <>%>", decl);
1850
 
1851
      /* Fall through.  */
1852
    case tsk_expl_spec:
1853
      SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1854
      if (ctype)
1855
        member_specialization = 1;
1856
      else
1857
        specialization = 1;
1858
      break;
1859
 
1860
    case tsk_template:
1861
      if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1862
        {
1863
          /* This case handles bogus declarations like template <>
1864
             template <class T> void f<int>(); */
1865
 
1866
          if (uses_template_parms (declarator))
1867
            error ("function template partial specialization %qD "
1868
                   "is not allowed", declarator);
1869
          else
1870
            error ("template-id %qD in declaration of primary template",
1871
                   declarator);
1872
          return decl;
1873
        }
1874
 
1875
      if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1876
        /* This is a specialization of a member template, without
1877
           specialization the containing class.  Something like:
1878
 
1879
             template <class T> struct S {
1880
               template <class U> void f (U);
1881
             };
1882
             template <> template <class U> void S<int>::f(U) {}
1883
 
1884
           That's a specialization -- but of the entire template.  */
1885
        specialization = 1;
1886
      break;
1887
 
1888
    default:
1889
      gcc_unreachable ();
1890
    }
1891
 
1892
  if (specialization || member_specialization)
1893
    {
1894
      tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
1895
      for (; t; t = TREE_CHAIN (t))
1896
        if (TREE_PURPOSE (t))
1897
          {
1898
            pedwarn
1899
              ("default argument specified in explicit specialization");
1900
            break;
1901
          }
1902
    }
1903
 
1904
  if (specialization || member_specialization || explicit_instantiation)
1905
    {
1906
      tree tmpl = NULL_TREE;
1907
      tree targs = NULL_TREE;
1908
 
1909
      /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
1910
      if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
1911
        {
1912
          tree fns;
1913
 
1914
          gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
1915
          if (ctype)
1916
            fns = dname;
1917
          else
1918
            {
1919
              /* If there is no class context, the explicit instantiation
1920
                 must be at namespace scope.  */
1921
              gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
1922
 
1923
              /* Find the namespace binding, using the declaration
1924
                 context.  */
1925
              fns = namespace_binding (dname, CP_DECL_CONTEXT (decl));
1926
              if (!fns || !is_overloaded_fn (fns))
1927
                {
1928
                  error ("%qD is not a template function", dname);
1929
                  fns = error_mark_node;
1930
                }
1931
            }
1932
 
1933
          declarator = lookup_template_function (fns, NULL_TREE);
1934
        }
1935
 
1936
      if (declarator == error_mark_node)
1937
        return error_mark_node;
1938
 
1939
      if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
1940
        {
1941
          if (!explicit_instantiation)
1942
            /* A specialization in class scope.  This is invalid,
1943
               but the error will already have been flagged by
1944
               check_specialization_scope.  */
1945
            return error_mark_node;
1946
          else
1947
            {
1948
              /* It's not valid to write an explicit instantiation in
1949
                 class scope, e.g.:
1950
 
1951
                   class C { template void f(); }
1952
 
1953
                   This case is caught by the parser.  However, on
1954
                   something like:
1955
 
1956
                   template class C { void f(); };
1957
 
1958
                   (which is invalid) we can get here.  The error will be
1959
                   issued later.  */
1960
              ;
1961
            }
1962
 
1963
          return decl;
1964
        }
1965
      else if (ctype != NULL_TREE
1966
               && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
1967
                   IDENTIFIER_NODE))
1968
        {
1969
          /* Find the list of functions in ctype that have the same
1970
             name as the declared function.  */
1971
          tree name = TREE_OPERAND (declarator, 0);
1972
          tree fns = NULL_TREE;
1973
          int idx;
1974
 
1975
          if (constructor_name_p (name, ctype))
1976
            {
1977
              int is_constructor = DECL_CONSTRUCTOR_P (decl);
1978
 
1979
              if (is_constructor ? !TYPE_HAS_CONSTRUCTOR (ctype)
1980
                  : !CLASSTYPE_DESTRUCTORS (ctype))
1981
                {
1982
                  /* From [temp.expl.spec]:
1983
 
1984
                     If such an explicit specialization for the member
1985
                     of a class template names an implicitly-declared
1986
                     special member function (clause _special_), the
1987
                     program is ill-formed.
1988
 
1989
                     Similar language is found in [temp.explicit].  */
1990
                  error ("specialization of implicitly-declared special member function");
1991
                  return error_mark_node;
1992
                }
1993
 
1994
              name = is_constructor ? ctor_identifier : dtor_identifier;
1995
            }
1996
 
1997
          if (!DECL_CONV_FN_P (decl))
1998
            {
1999
              idx = lookup_fnfields_1 (ctype, name);
2000
              if (idx >= 0)
2001
                fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2002
            }
2003
          else
2004
            {
2005
              VEC(tree,gc) *methods;
2006
              tree ovl;
2007
 
2008
              /* For a type-conversion operator, we cannot do a
2009
                 name-based lookup.  We might be looking for `operator
2010
                 int' which will be a specialization of `operator T'.
2011
                 So, we find *all* the conversion operators, and then
2012
                 select from them.  */
2013
              fns = NULL_TREE;
2014
 
2015
              methods = CLASSTYPE_METHOD_VEC (ctype);
2016
              if (methods)
2017
                for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2018
                     VEC_iterate (tree, methods, idx, ovl);
2019
                     ++idx)
2020
                  {
2021
                    if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2022
                      /* There are no more conversion functions.  */
2023
                      break;
2024
 
2025
                    /* Glue all these conversion functions together
2026
                       with those we already have.  */
2027
                    for (; ovl; ovl = OVL_NEXT (ovl))
2028
                      fns = ovl_cons (OVL_CURRENT (ovl), fns);
2029
                  }
2030
            }
2031
 
2032
          if (fns == NULL_TREE)
2033
            {
2034
              error ("no member function %qD declared in %qT", name, ctype);
2035
              return error_mark_node;
2036
            }
2037
          else
2038
            TREE_OPERAND (declarator, 0) = fns;
2039
        }
2040
 
2041
      /* Figure out what exactly is being specialized at this point.
2042
         Note that for an explicit instantiation, even one for a
2043
         member function, we cannot tell apriori whether the
2044
         instantiation is for a member template, or just a member
2045
         function of a template class.  Even if a member template is
2046
         being instantiated, the member template arguments may be
2047
         elided if they can be deduced from the rest of the
2048
         declaration.  */
2049
      tmpl = determine_specialization (declarator, decl,
2050
                                       &targs,
2051
                                       member_specialization,
2052
                                       template_count);
2053
 
2054
      if (!tmpl || tmpl == error_mark_node)
2055
        /* We couldn't figure out what this declaration was
2056
           specializing.  */
2057
        return error_mark_node;
2058
      else
2059
        {
2060
          tree gen_tmpl = most_general_template (tmpl);
2061
 
2062
          if (explicit_instantiation)
2063
            {
2064
              /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2065
                 is done by do_decl_instantiation later.  */
2066
 
2067
              int arg_depth = TMPL_ARGS_DEPTH (targs);
2068
              int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2069
 
2070
              if (arg_depth > parm_depth)
2071
                {
2072
                  /* If TMPL is not the most general template (for
2073
                     example, if TMPL is a friend template that is
2074
                     injected into namespace scope), then there will
2075
                     be too many levels of TARGS.  Remove some of them
2076
                     here.  */
2077
                  int i;
2078
                  tree new_targs;
2079
 
2080
                  new_targs = make_tree_vec (parm_depth);
2081
                  for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2082
                    TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2083
                      = TREE_VEC_ELT (targs, i);
2084
                  targs = new_targs;
2085
                }
2086
 
2087
              return instantiate_template (tmpl, targs, tf_error);
2088
            }
2089
 
2090
          /* If we thought that the DECL was a member function, but it
2091
             turns out to be specializing a static member function,
2092
             make DECL a static member function as well.  */
2093
          if (DECL_STATIC_FUNCTION_P (tmpl)
2094
              && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2095
            revert_static_member_fn (decl);
2096
 
2097
          /* If this is a specialization of a member template of a
2098
             template class.  In we want to return the TEMPLATE_DECL,
2099
             not the specialization of it.  */
2100
          if (tsk == tsk_template)
2101
            {
2102
              SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2103
              DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
2104
              if (have_def)
2105
                {
2106
                  DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2107
                  DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl))
2108
                    = DECL_SOURCE_LOCATION (decl);
2109
                  /* We want to use the argument list specified in the
2110
                     definition, not in the original declaration.  */
2111
                  DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (tmpl))
2112
                    = DECL_ARGUMENTS (decl);
2113
                }
2114
              return tmpl;
2115
            }
2116
 
2117
          /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2118
          DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
2119
 
2120
          /* Inherit default function arguments from the template
2121
             DECL is specializing.  */
2122
          copy_default_args_to_explicit_spec (decl);
2123
 
2124
          /* This specialization has the same protection as the
2125
             template it specializes.  */
2126
          TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2127
          TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2128
          /* The specialization has the same visibility as the
2129
             template it specializes.  */
2130
          if (DECL_VISIBILITY_SPECIFIED (gen_tmpl))
2131
            {
2132
              DECL_VISIBILITY_SPECIFIED (decl) = 1;
2133
              DECL_VISIBILITY (decl) = DECL_VISIBILITY (gen_tmpl);
2134
            }
2135
          /* If DECL is a friend declaration, declared using an
2136
             unqualified name, the namespace associated with DECL may
2137
             have been set incorrectly.  For example, in:
2138
 
2139
               template <typename T> void f(T);
2140
               namespace N {
2141
                 struct S { friend void f<int>(int); }
2142
               }
2143
 
2144
             we will have set the DECL_CONTEXT for the friend
2145
             declaration to N, rather than to the global namespace.  */
2146
          if (DECL_NAMESPACE_SCOPE_P (decl))
2147
            DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2148
 
2149
          if (is_friend && !have_def)
2150
            /* This is not really a declaration of a specialization.
2151
               It's just the name of an instantiation.  But, it's not
2152
               a request for an instantiation, either.  */
2153
            SET_DECL_IMPLICIT_INSTANTIATION (decl);
2154
          else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2155
            /* This is indeed a specialization.  In case of constructors
2156
               and destructors, we need in-charge and not-in-charge
2157
               versions in V3 ABI.  */
2158
            clone_function_decl (decl, /*update_method_vec_p=*/0);
2159
 
2160
          /* Register this specialization so that we can find it
2161
             again.  */
2162
          decl = register_specialization (decl, gen_tmpl, targs, is_friend);
2163
        }
2164
    }
2165
 
2166
  return decl;
2167
}
2168
 
2169
/* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2170
   parameters.  These are represented in the same format used for
2171
   DECL_TEMPLATE_PARMS.  */
2172
 
2173
int
2174
comp_template_parms (tree parms1, tree parms2)
2175
{
2176
  tree p1;
2177
  tree p2;
2178
 
2179
  if (parms1 == parms2)
2180
    return 1;
2181
 
2182
  for (p1 = parms1, p2 = parms2;
2183
       p1 != NULL_TREE && p2 != NULL_TREE;
2184
       p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2185
    {
2186
      tree t1 = TREE_VALUE (p1);
2187
      tree t2 = TREE_VALUE (p2);
2188
      int i;
2189
 
2190
      gcc_assert (TREE_CODE (t1) == TREE_VEC);
2191
      gcc_assert (TREE_CODE (t2) == TREE_VEC);
2192
 
2193
      if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2194
        return 0;
2195
 
2196
      for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2197
        {
2198
          tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2199
          tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2200
 
2201
          if (TREE_CODE (parm1) != TREE_CODE (parm2))
2202
            return 0;
2203
 
2204
          if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM)
2205
            continue;
2206
          else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2207
            return 0;
2208
        }
2209
    }
2210
 
2211
  if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2212
    /* One set of parameters has more parameters lists than the
2213
       other.  */
2214
    return 0;
2215
 
2216
  return 1;
2217
}
2218
 
2219
/* Complain if DECL shadows a template parameter.
2220
 
2221
   [temp.local]: A template-parameter shall not be redeclared within its
2222
   scope (including nested scopes).  */
2223
 
2224
void
2225
check_template_shadow (tree decl)
2226
{
2227
  tree olddecl;
2228
 
2229
  /* If we're not in a template, we can't possibly shadow a template
2230
     parameter.  */
2231
  if (!current_template_parms)
2232
    return;
2233
 
2234
  /* Figure out what we're shadowing.  */
2235
  if (TREE_CODE (decl) == OVERLOAD)
2236
    decl = OVL_CURRENT (decl);
2237
  olddecl = innermost_non_namespace_value (DECL_NAME (decl));
2238
 
2239
  /* If there's no previous binding for this name, we're not shadowing
2240
     anything, let alone a template parameter.  */
2241
  if (!olddecl)
2242
    return;
2243
 
2244
  /* If we're not shadowing a template parameter, we're done.  Note
2245
     that OLDDECL might be an OVERLOAD (or perhaps even an
2246
     ERROR_MARK), so we can't just blithely assume it to be a _DECL
2247
     node.  */
2248
  if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
2249
    return;
2250
 
2251
  /* We check for decl != olddecl to avoid bogus errors for using a
2252
     name inside a class.  We check TPFI to avoid duplicate errors for
2253
     inline member templates.  */
2254
  if (decl == olddecl
2255
      || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
2256
    return;
2257
 
2258
  error ("declaration of %q+#D", decl);
2259
  error (" shadows template parm %q+#D", olddecl);
2260
}
2261
 
2262
/* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
2263
   ORIG_LEVEL, DECL, and TYPE.  */
2264
 
2265
static tree
2266
build_template_parm_index (int index,
2267
                           int level,
2268
                           int orig_level,
2269
                           tree decl,
2270
                           tree type)
2271
{
2272
  tree t = make_node (TEMPLATE_PARM_INDEX);
2273
  TEMPLATE_PARM_IDX (t) = index;
2274
  TEMPLATE_PARM_LEVEL (t) = level;
2275
  TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
2276
  TEMPLATE_PARM_DECL (t) = decl;
2277
  TREE_TYPE (t) = type;
2278
  TREE_CONSTANT (t) = TREE_CONSTANT (decl);
2279
  TREE_INVARIANT (t) = TREE_INVARIANT (decl);
2280
  TREE_READONLY (t) = TREE_READONLY (decl);
2281
 
2282
  return t;
2283
}
2284
 
2285
/* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
2286
   TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
2287
   TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2288
   new one is created.  */
2289
 
2290
static tree
2291
reduce_template_parm_level (tree index, tree type, int levels)
2292
{
2293
  if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
2294
      || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
2295
          != TEMPLATE_PARM_LEVEL (index) - levels))
2296
    {
2297
      tree orig_decl = TEMPLATE_PARM_DECL (index);
2298
      tree decl, t;
2299
 
2300
      decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
2301
      TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
2302
      TREE_INVARIANT (decl) = TREE_INVARIANT (orig_decl);
2303
      TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2304
      DECL_ARTIFICIAL (decl) = 1;
2305
      SET_DECL_TEMPLATE_PARM_P (decl);
2306
 
2307
      t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
2308
                                     TEMPLATE_PARM_LEVEL (index) - levels,
2309
                                     TEMPLATE_PARM_ORIG_LEVEL (index),
2310
                                     decl, type);
2311
      TEMPLATE_PARM_DESCENDANTS (index) = t;
2312
 
2313
        /* Template template parameters need this.  */
2314
      if (TREE_CODE (decl) != CONST_DECL)
2315
        DECL_TEMPLATE_PARMS (decl)
2316
          = DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index));
2317
    }
2318
 
2319
  return TEMPLATE_PARM_DESCENDANTS (index);
2320
}
2321
 
2322
/* Process information from new template parameter NEXT and append it to the
2323
   LIST being built.  This new parameter is a non-type parameter iff
2324
   IS_NON_TYPE is true.  */
2325
 
2326
tree
2327
process_template_parm (tree list, tree next, bool is_non_type)
2328
{
2329
  tree parm;
2330
  tree decl = 0;
2331
  tree defval;
2332
  int idx;
2333
 
2334
  parm = next;
2335
  gcc_assert (TREE_CODE (parm) == TREE_LIST);
2336
  defval = TREE_PURPOSE (parm);
2337
 
2338
  if (list)
2339
    {
2340
      tree p = TREE_VALUE (tree_last (list));
2341
 
2342
      if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
2343
        idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
2344
      else
2345
        idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
2346
      ++idx;
2347
    }
2348
  else
2349
    idx = 0;
2350
 
2351
  if (is_non_type)
2352
    {
2353
      parm = TREE_VALUE (parm);
2354
 
2355
      SET_DECL_TEMPLATE_PARM_P (parm);
2356
 
2357
      /* [temp.param]
2358
 
2359
         The top-level cv-qualifiers on the template-parameter are
2360
         ignored when determining its type.  */
2361
      TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
2362
 
2363
      /* A template parameter is not modifiable.  */
2364
      TREE_CONSTANT (parm) = 1;
2365
      TREE_INVARIANT (parm) = 1;
2366
      TREE_READONLY (parm) = 1;
2367
      if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
2368
        TREE_TYPE (parm) = void_type_node;
2369
      decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
2370
      TREE_CONSTANT (decl) = 1;
2371
      TREE_INVARIANT (decl) = 1;
2372
      TREE_READONLY (decl) = 1;
2373
      DECL_INITIAL (parm) = DECL_INITIAL (decl)
2374
        = build_template_parm_index (idx, processing_template_decl,
2375
                                     processing_template_decl,
2376
                                     decl, TREE_TYPE (parm));
2377
    }
2378
  else
2379
    {
2380
      tree t;
2381
      parm = TREE_VALUE (TREE_VALUE (parm));
2382
 
2383
      if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
2384
        {
2385
          t = make_aggr_type (TEMPLATE_TEMPLATE_PARM);
2386
          /* This is for distinguishing between real templates and template
2387
             template parameters */
2388
          TREE_TYPE (parm) = t;
2389
          TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
2390
          decl = parm;
2391
        }
2392
      else
2393
        {
2394
          t = make_aggr_type (TEMPLATE_TYPE_PARM);
2395
          /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
2396
          decl = build_decl (TYPE_DECL, parm, t);
2397
        }
2398
 
2399
      TYPE_NAME (t) = decl;
2400
      TYPE_STUB_DECL (t) = decl;
2401
      parm = decl;
2402
      TEMPLATE_TYPE_PARM_INDEX (t)
2403
        = build_template_parm_index (idx, processing_template_decl,
2404
                                     processing_template_decl,
2405
                                     decl, TREE_TYPE (parm));
2406
    }
2407
  DECL_ARTIFICIAL (decl) = 1;
2408
  SET_DECL_TEMPLATE_PARM_P (decl);
2409
  pushdecl (decl);
2410
  parm = build_tree_list (defval, parm);
2411
  return chainon (list, parm);
2412
}
2413
 
2414
/* The end of a template parameter list has been reached.  Process the
2415
   tree list into a parameter vector, converting each parameter into a more
2416
   useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
2417
   as PARM_DECLs.  */
2418
 
2419
tree
2420
end_template_parm_list (tree parms)
2421
{
2422
  int nparms;
2423
  tree parm, next;
2424
  tree saved_parmlist = make_tree_vec (list_length (parms));
2425
 
2426
  current_template_parms
2427
    = tree_cons (size_int (processing_template_decl),
2428
                 saved_parmlist, current_template_parms);
2429
 
2430
  for (parm = parms, nparms = 0; parm; parm = next, nparms++)
2431
    {
2432
      next = TREE_CHAIN (parm);
2433
      TREE_VEC_ELT (saved_parmlist, nparms) = parm;
2434
      TREE_CHAIN (parm) = NULL_TREE;
2435
    }
2436
 
2437
  --processing_template_parmlist;
2438
 
2439
  return saved_parmlist;
2440
}
2441
 
2442
/* end_template_decl is called after a template declaration is seen.  */
2443
 
2444
void
2445
end_template_decl (void)
2446
{
2447
  reset_specialization ();
2448
 
2449
  if (! processing_template_decl)
2450
    return;
2451
 
2452
  /* This matches the pushlevel in begin_template_parm_list.  */
2453
  finish_scope ();
2454
 
2455
  --processing_template_decl;
2456
  current_template_parms = TREE_CHAIN (current_template_parms);
2457
}
2458
 
2459
/* Given a template argument vector containing the template PARMS.
2460
   The innermost PARMS are given first.  */
2461
 
2462
tree
2463
current_template_args (void)
2464
{
2465
  tree header;
2466
  tree args = NULL_TREE;
2467
  int length = TMPL_PARMS_DEPTH (current_template_parms);
2468
  int l = length;
2469
 
2470
  /* If there is only one level of template parameters, we do not
2471
     create a TREE_VEC of TREE_VECs.  Instead, we return a single
2472
     TREE_VEC containing the arguments.  */
2473
  if (length > 1)
2474
    args = make_tree_vec (length);
2475
 
2476
  for (header = current_template_parms; header; header = TREE_CHAIN (header))
2477
    {
2478
      tree a = copy_node (TREE_VALUE (header));
2479
      int i;
2480
 
2481
      TREE_TYPE (a) = NULL_TREE;
2482
      for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
2483
        {
2484
          tree t = TREE_VEC_ELT (a, i);
2485
 
2486
          /* T will be a list if we are called from within a
2487
             begin/end_template_parm_list pair, but a vector directly
2488
             if within a begin/end_member_template_processing pair.  */
2489
          if (TREE_CODE (t) == TREE_LIST)
2490
            {
2491
              t = TREE_VALUE (t);
2492
 
2493
              if (TREE_CODE (t) == TYPE_DECL
2494
                  || TREE_CODE (t) == TEMPLATE_DECL)
2495
                t = TREE_TYPE (t);
2496
              else
2497
                t = DECL_INITIAL (t);
2498
              TREE_VEC_ELT (a, i) = t;
2499
            }
2500
        }
2501
 
2502
      if (length > 1)
2503
        TREE_VEC_ELT (args, --l) = a;
2504
      else
2505
        args = a;
2506
    }
2507
 
2508
  return args;
2509
}
2510
 
2511
/* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
2512
   template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
2513
   a member template.  Used by push_template_decl below.  */
2514
 
2515
static tree
2516
build_template_decl (tree decl, tree parms, bool member_template_p)
2517
{
2518
  tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
2519
  DECL_TEMPLATE_PARMS (tmpl) = parms;
2520
  DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
2521
  DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
2522
  if (DECL_LANG_SPECIFIC (decl))
2523
    {
2524
      DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
2525
      DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
2526
      DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
2527
      DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
2528
      DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
2529
      if (DECL_OVERLOADED_OPERATOR_P (decl))
2530
        SET_OVERLOADED_OPERATOR_CODE (tmpl,
2531
                                      DECL_OVERLOADED_OPERATOR_P (decl));
2532
    }
2533
 
2534
  return tmpl;
2535
}
2536
 
2537
struct template_parm_data
2538
{
2539
  /* The level of the template parameters we are currently
2540
     processing.  */
2541
  int level;
2542
 
2543
  /* The index of the specialization argument we are currently
2544
     processing.  */
2545
  int current_arg;
2546
 
2547
  /* An array whose size is the number of template parameters.  The
2548
     elements are nonzero if the parameter has been used in any one
2549
     of the arguments processed so far.  */
2550
  int* parms;
2551
 
2552
  /* An array whose size is the number of template arguments.  The
2553
     elements are nonzero if the argument makes use of template
2554
     parameters of this level.  */
2555
  int* arg_uses_template_parms;
2556
};
2557
 
2558
/* Subroutine of push_template_decl used to see if each template
2559
   parameter in a partial specialization is used in the explicit
2560
   argument list.  If T is of the LEVEL given in DATA (which is
2561
   treated as a template_parm_data*), then DATA->PARMS is marked
2562
   appropriately.  */
2563
 
2564
static int
2565
mark_template_parm (tree t, void* data)
2566
{
2567
  int level;
2568
  int idx;
2569
  struct template_parm_data* tpd = (struct template_parm_data*) data;
2570
 
2571
  if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
2572
    {
2573
      level = TEMPLATE_PARM_LEVEL (t);
2574
      idx = TEMPLATE_PARM_IDX (t);
2575
    }
2576
  else
2577
    {
2578
      level = TEMPLATE_TYPE_LEVEL (t);
2579
      idx = TEMPLATE_TYPE_IDX (t);
2580
    }
2581
 
2582
  if (level == tpd->level)
2583
    {
2584
      tpd->parms[idx] = 1;
2585
      tpd->arg_uses_template_parms[tpd->current_arg] = 1;
2586
    }
2587
 
2588
  /* Return zero so that for_each_template_parm will continue the
2589
     traversal of the tree; we want to mark *every* template parm.  */
2590
  return 0;
2591
}
2592
 
2593
/* Process the partial specialization DECL.  */
2594
 
2595
static tree
2596
process_partial_specialization (tree decl)
2597
{
2598
  tree type = TREE_TYPE (decl);
2599
  tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
2600
  tree specargs = CLASSTYPE_TI_ARGS (type);
2601
  tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
2602
  tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
2603
  tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
2604
  int nargs = TREE_VEC_LENGTH (inner_args);
2605
  int ntparms = TREE_VEC_LENGTH (inner_parms);
2606
  int  i;
2607
  int did_error_intro = 0;
2608
  struct template_parm_data tpd;
2609
  struct template_parm_data tpd2;
2610
 
2611
  /* We check that each of the template parameters given in the
2612
     partial specialization is used in the argument list to the
2613
     specialization.  For example:
2614
 
2615
       template <class T> struct S;
2616
       template <class T> struct S<T*>;
2617
 
2618
     The second declaration is OK because `T*' uses the template
2619
     parameter T, whereas
2620
 
2621
       template <class T> struct S<int>;
2622
 
2623
     is no good.  Even trickier is:
2624
 
2625
       template <class T>
2626
       struct S1
2627
       {
2628
          template <class U>
2629
          struct S2;
2630
          template <class U>
2631
          struct S2<T>;
2632
       };
2633
 
2634
     The S2<T> declaration is actually invalid; it is a
2635
     full-specialization.  Of course,
2636
 
2637
          template <class U>
2638
          struct S2<T (*)(U)>;
2639
 
2640
     or some such would have been OK.  */
2641
  tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
2642
  tpd.parms = alloca (sizeof (int) * ntparms);
2643
  memset (tpd.parms, 0, sizeof (int) * ntparms);
2644
 
2645
  tpd.arg_uses_template_parms = alloca (sizeof (int) * nargs);
2646
  memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
2647
  for (i = 0; i < nargs; ++i)
2648
    {
2649
      tpd.current_arg = i;
2650
      for_each_template_parm (TREE_VEC_ELT (inner_args, i),
2651
                              &mark_template_parm,
2652
                              &tpd,
2653
                              NULL);
2654
    }
2655
  for (i = 0; i < ntparms; ++i)
2656
    if (tpd.parms[i] == 0)
2657
      {
2658
        /* One of the template parms was not used in the
2659
           specialization.  */
2660
        if (!did_error_intro)
2661
          {
2662
            error ("template parameters not used in partial specialization:");
2663
            did_error_intro = 1;
2664
          }
2665
 
2666
        error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
2667
      }
2668
 
2669
  /* [temp.class.spec]
2670
 
2671
     The argument list of the specialization shall not be identical to
2672
     the implicit argument list of the primary template.  */
2673
  if (comp_template_args
2674
      (inner_args,
2675
       INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
2676
                                                   (maintmpl)))))
2677
    error ("partial specialization %qT does not specialize any template arguments", type);
2678
 
2679
  /* [temp.class.spec]
2680
 
2681
     A partially specialized non-type argument expression shall not
2682
     involve template parameters of the partial specialization except
2683
     when the argument expression is a simple identifier.
2684
 
2685
     The type of a template parameter corresponding to a specialized
2686
     non-type argument shall not be dependent on a parameter of the
2687
     specialization.  */
2688
  gcc_assert (nargs == DECL_NTPARMS (maintmpl));
2689
  tpd2.parms = 0;
2690
  for (i = 0; i < nargs; ++i)
2691
    {
2692
      tree arg = TREE_VEC_ELT (inner_args, i);
2693
      if (/* These first two lines are the `non-type' bit.  */
2694
          !TYPE_P (arg)
2695
          && TREE_CODE (arg) != TEMPLATE_DECL
2696
          /* This next line is the `argument expression is not just a
2697
             simple identifier' condition and also the `specialized
2698
             non-type argument' bit.  */
2699
          && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
2700
        {
2701
          if (tpd.arg_uses_template_parms[i])
2702
            error ("template argument %qE involves template parameter(s)", arg);
2703
          else
2704
            {
2705
              /* Look at the corresponding template parameter,
2706
                 marking which template parameters its type depends
2707
                 upon.  */
2708
              tree type =
2709
                TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (main_inner_parms,
2710
                                                     i)));
2711
 
2712
              if (!tpd2.parms)
2713
                {
2714
                  /* We haven't yet initialized TPD2.  Do so now.  */
2715
                  tpd2.arg_uses_template_parms
2716
                    = alloca (sizeof (int) * nargs);
2717
                  /* The number of parameters here is the number in the
2718
                     main template, which, as checked in the assertion
2719
                     above, is NARGS.  */
2720
                  tpd2.parms = alloca (sizeof (int) * nargs);
2721
                  tpd2.level =
2722
                    TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
2723
                }
2724
 
2725
              /* Mark the template parameters.  But this time, we're
2726
                 looking for the template parameters of the main
2727
                 template, not in the specialization.  */
2728
              tpd2.current_arg = i;
2729
              tpd2.arg_uses_template_parms[i] = 0;
2730
              memset (tpd2.parms, 0, sizeof (int) * nargs);
2731
              for_each_template_parm (type,
2732
                                      &mark_template_parm,
2733
                                      &tpd2,
2734
                                      NULL);
2735
 
2736
              if (tpd2.arg_uses_template_parms [i])
2737
                {
2738
                  /* The type depended on some template parameters.
2739
                     If they are fully specialized in the
2740
                     specialization, that's OK.  */
2741
                  int j;
2742
                  for (j = 0; j < nargs; ++j)
2743
                    if (tpd2.parms[j] != 0
2744
                        && tpd.arg_uses_template_parms [j])
2745
                      {
2746
                        error ("type %qT of template argument %qE depends "
2747
                               "on template parameter(s)",
2748
                               type,
2749
                               arg);
2750
                        break;
2751
                      }
2752
                }
2753
            }
2754
        }
2755
    }
2756
 
2757
  if (retrieve_specialization (maintmpl, specargs,
2758
                               /*class_specializations_p=*/true))
2759
    /* We've already got this specialization.  */
2760
    return decl;
2761
 
2762
  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
2763
    = tree_cons (specargs, inner_parms,
2764
                 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
2765
  TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
2766
  return decl;
2767
}
2768
 
2769
/* Check that a template declaration's use of default arguments is not
2770
   invalid.  Here, PARMS are the template parameters.  IS_PRIMARY is
2771
   nonzero if DECL is the thing declared by a primary template.
2772
   IS_PARTIAL is nonzero if DECL is a partial specialization.  */
2773
 
2774
static void
2775
check_default_tmpl_args (tree decl, tree parms, int is_primary, int is_partial)
2776
{
2777
  const char *msg;
2778
  int last_level_to_check;
2779
  tree parm_level;
2780
 
2781
  /* [temp.param]
2782
 
2783
     A default template-argument shall not be specified in a
2784
     function template declaration or a function template definition, nor
2785
     in the template-parameter-list of the definition of a member of a
2786
     class template.  */
2787
 
2788
  if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
2789
    /* You can't have a function template declaration in a local
2790
       scope, nor you can you define a member of a class template in a
2791
       local scope.  */
2792
    return;
2793
 
2794
  if (current_class_type
2795
      && !TYPE_BEING_DEFINED (current_class_type)
2796
      && DECL_LANG_SPECIFIC (decl)
2797
      /* If this is either a friend defined in the scope of the class
2798
         or a member function.  */
2799
      && (DECL_FUNCTION_MEMBER_P (decl)
2800
          ? same_type_p (DECL_CONTEXT (decl), current_class_type)
2801
          : DECL_FRIEND_CONTEXT (decl)
2802
          ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
2803
          : false)
2804
      /* And, if it was a member function, it really was defined in
2805
         the scope of the class.  */
2806
      && (!DECL_FUNCTION_MEMBER_P (decl)
2807
          || DECL_INITIALIZED_IN_CLASS_P (decl)))
2808
    /* We already checked these parameters when the template was
2809
       declared, so there's no need to do it again now.  This function
2810
       was defined in class scope, but we're processing it's body now
2811
       that the class is complete.  */
2812
    return;
2813
 
2814
  /* [temp.param]
2815
 
2816
     If a template-parameter has a default template-argument, all
2817
     subsequent template-parameters shall have a default
2818
     template-argument supplied.  */
2819
  for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
2820
    {
2821
      tree inner_parms = TREE_VALUE (parm_level);
2822
      int ntparms = TREE_VEC_LENGTH (inner_parms);
2823
      int seen_def_arg_p = 0;
2824
      int i;
2825
 
2826
      for (i = 0; i < ntparms; ++i)
2827
        {
2828
          tree parm = TREE_VEC_ELT (inner_parms, i);
2829
          if (TREE_PURPOSE (parm))
2830
            seen_def_arg_p = 1;
2831
          else if (seen_def_arg_p)
2832
            {
2833
              error ("no default argument for %qD", TREE_VALUE (parm));
2834
              /* For better subsequent error-recovery, we indicate that
2835
                 there should have been a default argument.  */
2836
              TREE_PURPOSE (parm) = error_mark_node;
2837
            }
2838
        }
2839
    }
2840
 
2841
  if (TREE_CODE (decl) != TYPE_DECL || is_partial || !is_primary)
2842
    /* For an ordinary class template, default template arguments are
2843
       allowed at the innermost level, e.g.:
2844
         template <class T = int>
2845
         struct S {};
2846
       but, in a partial specialization, they're not allowed even
2847
       there, as we have in [temp.class.spec]:
2848
 
2849
         The template parameter list of a specialization shall not
2850
         contain default template argument values.
2851
 
2852
       So, for a partial specialization, or for a function template,
2853
       we look at all of them.  */
2854
    ;
2855
  else
2856
    /* But, for a primary class template that is not a partial
2857
       specialization we look at all template parameters except the
2858
       innermost ones.  */
2859
    parms = TREE_CHAIN (parms);
2860
 
2861
  /* Figure out what error message to issue.  */
2862
  if (TREE_CODE (decl) == FUNCTION_DECL)
2863
    msg = "default template arguments may not be used in function templates";
2864
  else if (is_partial)
2865
    msg = "default template arguments may not be used in partial specializations";
2866
  else
2867
    msg = "default argument for template parameter for class enclosing %qD";
2868
 
2869
  if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
2870
    /* If we're inside a class definition, there's no need to
2871
       examine the parameters to the class itself.  On the one
2872
       hand, they will be checked when the class is defined, and,
2873
       on the other, default arguments are valid in things like:
2874
         template <class T = double>
2875
         struct S { template <class U> void f(U); };
2876
       Here the default argument for `S' has no bearing on the
2877
       declaration of `f'.  */
2878
    last_level_to_check = template_class_depth (current_class_type) + 1;
2879
  else
2880
    /* Check everything.  */
2881
    last_level_to_check = 0;
2882
 
2883
  for (parm_level = parms;
2884
       parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
2885
       parm_level = TREE_CHAIN (parm_level))
2886
    {
2887
      tree inner_parms = TREE_VALUE (parm_level);
2888
      int i;
2889
      int ntparms;
2890
 
2891
      ntparms = TREE_VEC_LENGTH (inner_parms);
2892
      for (i = 0; i < ntparms; ++i)
2893
        if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
2894
          {
2895
            if (msg)
2896
              {
2897
                error (msg, decl);
2898
                msg = 0;
2899
              }
2900
 
2901
            /* Clear out the default argument so that we are not
2902
               confused later.  */
2903
            TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
2904
          }
2905
 
2906
      /* At this point, if we're still interested in issuing messages,
2907
         they must apply to classes surrounding the object declared.  */
2908
      if (msg)
2909
        msg = "default argument for template parameter for class enclosing %qD";
2910
    }
2911
}
2912
 
2913
/* Worker for push_template_decl_real, called via
2914
   for_each_template_parm.  DATA is really an int, indicating the
2915
   level of the parameters we are interested in.  If T is a template
2916
   parameter of that level, return nonzero.  */
2917
 
2918
static int
2919
template_parm_this_level_p (tree t, void* data)
2920
{
2921
  int this_level = *(int *)data;
2922
  int level;
2923
 
2924
  if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
2925
    level = TEMPLATE_PARM_LEVEL (t);
2926
  else
2927
    level = TEMPLATE_TYPE_LEVEL (t);
2928
  return level == this_level;
2929
}
2930
 
2931
/* Creates a TEMPLATE_DECL for the indicated DECL using the template
2932
   parameters given by current_template_args, or reuses a
2933
   previously existing one, if appropriate.  Returns the DECL, or an
2934
   equivalent one, if it is replaced via a call to duplicate_decls.
2935
 
2936
   If IS_FRIEND is true, DECL is a friend declaration.  */
2937
 
2938
tree
2939
push_template_decl_real (tree decl, bool is_friend)
2940
{
2941
  tree tmpl;
2942
  tree args;
2943
  tree info;
2944
  tree ctx;
2945
  int primary;
2946
  int is_partial;
2947
  int new_template_p = 0;
2948
  /* True if the template is a member template, in the sense of
2949
     [temp.mem].  */
2950
  bool member_template_p = false;
2951
 
2952
  if (decl == error_mark_node)
2953
    return decl;
2954
 
2955
  /* See if this is a partial specialization.  */
2956
  is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
2957
                && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
2958
                && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
2959
 
2960
  if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
2961
    is_friend = true;
2962
 
2963
  if (is_friend)
2964
    /* For a friend, we want the context of the friend function, not
2965
       the type of which it is a friend.  */
2966
    ctx = DECL_CONTEXT (decl);
2967
  else if (CP_DECL_CONTEXT (decl)
2968
           && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
2969
    /* In the case of a virtual function, we want the class in which
2970
       it is defined.  */
2971
    ctx = CP_DECL_CONTEXT (decl);
2972
  else
2973
    /* Otherwise, if we're currently defining some class, the DECL
2974
       is assumed to be a member of the class.  */
2975
    ctx = current_scope ();
2976
 
2977
  if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
2978
    ctx = NULL_TREE;
2979
 
2980
  if (!DECL_CONTEXT (decl))
2981
    DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2982
 
2983
  /* See if this is a primary template.  */
2984
  primary = template_parm_scope_p ();
2985
 
2986
  if (primary)
2987
    {
2988
      if (DECL_CLASS_SCOPE_P (decl))
2989
        member_template_p = true;
2990
      if (TREE_CODE (decl) == TYPE_DECL
2991
          && ANON_AGGRNAME_P (DECL_NAME (decl)))
2992
        error ("template class without a name");
2993
      else if (TREE_CODE (decl) == FUNCTION_DECL)
2994
        {
2995
          if (DECL_DESTRUCTOR_P (decl))
2996
            {
2997
              /* [temp.mem]
2998
 
2999
                 A destructor shall not be a member template.  */
3000
              error ("destructor %qD declared as member template", decl);
3001
              return error_mark_node;
3002
            }
3003
          if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
3004
              && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
3005
                  || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
3006
                  || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
3007
                  || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
3008
                      == void_list_node)))
3009
            {
3010
              /* [basic.stc.dynamic.allocation]
3011
 
3012
                 An allocation function can be a function
3013
                 template. ... Template allocation functions shall
3014
                 have two or more parameters.  */
3015
              error ("invalid template declaration of %qD", decl);
3016
              return decl;
3017
            }
3018
        }
3019
      else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3020
               && CLASS_TYPE_P (TREE_TYPE (decl)))
3021
        /* OK */;
3022
      else
3023
        {
3024
          error ("template declaration of %q#D", decl);
3025
          return error_mark_node;
3026
        }
3027
    }
3028
 
3029
  /* Check to see that the rules regarding the use of default
3030
     arguments are not being violated.  */
3031
  check_default_tmpl_args (decl, current_template_parms,
3032
                           primary, is_partial);
3033
 
3034
  if (is_partial)
3035
    return process_partial_specialization (decl);
3036
 
3037
  args = current_template_args ();
3038
 
3039
  if (!ctx
3040
      || TREE_CODE (ctx) == FUNCTION_DECL
3041
      || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
3042
      || (is_friend && !DECL_TEMPLATE_INFO (decl)))
3043
    {
3044
      if (DECL_LANG_SPECIFIC (decl)
3045
          && DECL_TEMPLATE_INFO (decl)
3046
          && DECL_TI_TEMPLATE (decl))
3047
        tmpl = DECL_TI_TEMPLATE (decl);
3048
      /* If DECL is a TYPE_DECL for a class-template, then there won't
3049
         be DECL_LANG_SPECIFIC.  The information equivalent to
3050
         DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
3051
      else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3052
               && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3053
               && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3054
        {
3055
          /* Since a template declaration already existed for this
3056
             class-type, we must be redeclaring it here.  Make sure
3057
             that the redeclaration is valid.  */
3058
          redeclare_class_template (TREE_TYPE (decl),
3059
                                    current_template_parms);
3060
          /* We don't need to create a new TEMPLATE_DECL; just use the
3061
             one we already had.  */
3062
          tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3063
        }
3064
      else
3065
        {
3066
          tmpl = build_template_decl (decl, current_template_parms,
3067
                                      member_template_p);
3068
          new_template_p = 1;
3069
 
3070
          if (DECL_LANG_SPECIFIC (decl)
3071
              && DECL_TEMPLATE_SPECIALIZATION (decl))
3072
            {
3073
              /* A specialization of a member template of a template
3074
                 class.  */
3075
              SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3076
              DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
3077
              DECL_TEMPLATE_INFO (decl) = NULL_TREE;
3078
            }
3079
        }
3080
    }
3081
  else
3082
    {
3083
      tree a, t, current, parms;
3084
      int i;
3085
 
3086
      if (TREE_CODE (decl) == TYPE_DECL)
3087
        {
3088
          if ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (decl)))
3089
               || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
3090
              && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3091
              && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3092
            tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3093
          else
3094
            {
3095
              error ("%qD does not declare a template type", decl);
3096
              return decl;
3097
            }
3098
        }
3099
      else if (!DECL_LANG_SPECIFIC (decl) || !DECL_TEMPLATE_INFO (decl))
3100
        {
3101
          error ("template definition of non-template %q#D", decl);
3102
          return decl;
3103
        }
3104
      else
3105
        tmpl = DECL_TI_TEMPLATE (decl);
3106
 
3107
      if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3108
          && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
3109
          && DECL_TEMPLATE_SPECIALIZATION (decl)
3110
          && DECL_MEMBER_TEMPLATE_P (tmpl))
3111
        {
3112
          tree new_tmpl;
3113
 
3114
          /* The declaration is a specialization of a member
3115
             template, declared outside the class.  Therefore, the
3116
             innermost template arguments will be NULL, so we
3117
             replace them with the arguments determined by the
3118
             earlier call to check_explicit_specialization.  */
3119
          args = DECL_TI_ARGS (decl);
3120
 
3121
          new_tmpl
3122
            = build_template_decl (decl, current_template_parms,
3123
                                   member_template_p);
3124
          DECL_TEMPLATE_RESULT (new_tmpl) = decl;
3125
          TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
3126
          DECL_TI_TEMPLATE (decl) = new_tmpl;
3127
          SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
3128
          DECL_TEMPLATE_INFO (new_tmpl)
3129
            = tree_cons (tmpl, args, NULL_TREE);
3130
 
3131
          register_specialization (new_tmpl,
3132
                                   most_general_template (tmpl),
3133
                                   args,
3134
                                   is_friend);
3135
          return decl;
3136
        }
3137
 
3138
      /* Make sure the template headers we got make sense.  */
3139
 
3140
      parms = DECL_TEMPLATE_PARMS (tmpl);
3141
      i = TMPL_PARMS_DEPTH (parms);
3142
      if (TMPL_ARGS_DEPTH (args) != i)
3143
        {
3144
          error ("expected %d levels of template parms for %q#D, got %d",
3145
                 i, decl, TMPL_ARGS_DEPTH (args));
3146
        }
3147
      else
3148
        for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
3149
          {
3150
            a = TMPL_ARGS_LEVEL (args, i);
3151
            t = INNERMOST_TEMPLATE_PARMS (parms);
3152
 
3153
            if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
3154
              {
3155
                if (current == decl)
3156
                  error ("got %d template parameters for %q#D",
3157
                         TREE_VEC_LENGTH (a), decl);
3158
                else
3159
                  error ("got %d template parameters for %q#T",
3160
                         TREE_VEC_LENGTH (a), current);
3161
                error ("  but %d required", TREE_VEC_LENGTH (t));
3162
                return error_mark_node;
3163
              }
3164
 
3165
            /* Perhaps we should also check that the parms are used in the
3166
               appropriate qualifying scopes in the declarator?  */
3167
 
3168
            if (current == decl)
3169
              current = ctx;
3170
            else
3171
              current = TYPE_CONTEXT (current);
3172
          }
3173
    }
3174
 
3175
  DECL_TEMPLATE_RESULT (tmpl) = decl;
3176
  TREE_TYPE (tmpl) = TREE_TYPE (decl);
3177
 
3178
  /* Push template declarations for global functions and types.  Note
3179
     that we do not try to push a global template friend declared in a
3180
     template class; such a thing may well depend on the template
3181
     parameters of the class.  */
3182
  if (new_template_p && !ctx
3183
      && !(is_friend && template_class_depth (current_class_type) > 0))
3184
    {
3185
      tmpl = pushdecl_namespace_level (tmpl, is_friend);
3186
      if (tmpl == error_mark_node)
3187
        return error_mark_node;
3188
 
3189
      /* Hide template friend classes that haven't been declared yet.  */
3190
      if (is_friend && TREE_CODE (decl) == TYPE_DECL)
3191
        {
3192
          DECL_ANTICIPATED (tmpl) = 1;
3193
          DECL_FRIEND_P (tmpl) = 1;
3194
        }
3195
    }
3196
 
3197
  if (primary)
3198
    {
3199
      DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
3200
      if (DECL_CONV_FN_P (tmpl))
3201
        {
3202
          int depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
3203
 
3204
          /* It is a conversion operator. See if the type converted to
3205
             depends on innermost template operands.  */
3206
 
3207
          if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
3208
                                         depth))
3209
            DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
3210
        }
3211
    }
3212
 
3213
  /* The DECL_TI_ARGS of DECL contains full set of arguments referring
3214
     back to its most general template.  If TMPL is a specialization,
3215
     ARGS may only have the innermost set of arguments.  Add the missing
3216
     argument levels if necessary.  */
3217
  if (DECL_TEMPLATE_INFO (tmpl))
3218
    args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
3219
 
3220
  info = tree_cons (tmpl, args, NULL_TREE);
3221
 
3222
  if (DECL_IMPLICIT_TYPEDEF_P (decl))
3223
    {
3224
      SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
3225
      if ((!ctx || TREE_CODE (ctx) != FUNCTION_DECL)
3226
          && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
3227
          /* Don't change the name if we've already set it up.  */
3228
          && !IDENTIFIER_TEMPLATE (DECL_NAME (decl)))
3229
        DECL_NAME (decl) = classtype_mangled_name (TREE_TYPE (decl));
3230
    }
3231
  else if (DECL_LANG_SPECIFIC (decl))
3232
    DECL_TEMPLATE_INFO (decl) = info;
3233
 
3234
  return DECL_TEMPLATE_RESULT (tmpl);
3235
}
3236
 
3237
tree
3238
push_template_decl (tree decl)
3239
{
3240
  return push_template_decl_real (decl, false);
3241
}
3242
 
3243
/* Called when a class template TYPE is redeclared with the indicated
3244
   template PARMS, e.g.:
3245
 
3246
     template <class T> struct S;
3247
     template <class T> struct S {};  */
3248
 
3249
void
3250
redeclare_class_template (tree type, tree parms)
3251
{
3252
  tree tmpl;
3253
  tree tmpl_parms;
3254
  int i;
3255
 
3256
  if (!TYPE_TEMPLATE_INFO (type))
3257
    {
3258
      error ("%qT is not a template type", type);
3259
      return;
3260
    }
3261
 
3262
  tmpl = TYPE_TI_TEMPLATE (type);
3263
  if (!PRIMARY_TEMPLATE_P (tmpl))
3264
    /* The type is nested in some template class.  Nothing to worry
3265
       about here; there are no new template parameters for the nested
3266
       type.  */
3267
    return;
3268
 
3269
  if (!parms)
3270
    {
3271
      error ("template specifiers not specified in declaration of %qD",
3272
             tmpl);
3273
      return;
3274
    }
3275
 
3276
  parms = INNERMOST_TEMPLATE_PARMS (parms);
3277
  tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
3278
 
3279
  if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
3280
    {
3281
      error ("previous declaration %q+D", tmpl);
3282
      error ("used %d template parameter(s) instead of %d",
3283
             TREE_VEC_LENGTH (tmpl_parms),
3284
             TREE_VEC_LENGTH (parms));
3285
      return;
3286
    }
3287
 
3288
  for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
3289
    {
3290
      tree tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
3291
      tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
3292
      tree tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
3293
      tree parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
3294
 
3295
      /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
3296
         TEMPLATE_DECL.  */
3297
      if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
3298
          || (TREE_CODE (tmpl_parm) != TYPE_DECL
3299
              && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm))))
3300
        {
3301
          error ("template parameter %q+#D", tmpl_parm);
3302
          error ("redeclared here as %q#D", parm);
3303
          return;
3304
        }
3305
 
3306
      if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
3307
        {
3308
          /* We have in [temp.param]:
3309
 
3310
             A template-parameter may not be given default arguments
3311
             by two different declarations in the same scope.  */
3312
          error ("redefinition of default argument for %q#D", parm);
3313
          error ("%J  original definition appeared here", tmpl_parm);
3314
          return;
3315
        }
3316
 
3317
      if (parm_default != NULL_TREE)
3318
        /* Update the previous template parameters (which are the ones
3319
           that will really count) with the new default value.  */
3320
        TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
3321
      else if (tmpl_default != NULL_TREE)
3322
        /* Update the new parameters, too; they'll be used as the
3323
           parameters for any members.  */
3324
        TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
3325
    }
3326
}
3327
 
3328
/* Simplify EXPR if it is a non-dependent expression.  Returns the
3329
   (possibly simplified) expression.  */
3330
 
3331
tree
3332
fold_non_dependent_expr (tree expr)
3333
{
3334
  /* If we're in a template, but EXPR isn't value dependent, simplify
3335
     it.  We're supposed to treat:
3336
 
3337
       template <typename T> void f(T[1 + 1]);
3338
       template <typename T> void f(T[2]);
3339
 
3340
     as two declarations of the same function, for example.  */
3341
  if (processing_template_decl
3342
      && !type_dependent_expression_p (expr)
3343
      && !value_dependent_expression_p (expr))
3344
    {
3345
      HOST_WIDE_INT saved_processing_template_decl;
3346
 
3347
      saved_processing_template_decl = processing_template_decl;
3348
      processing_template_decl = 0;
3349
      expr = tsubst_copy_and_build (expr,
3350
                                    /*args=*/NULL_TREE,
3351
                                    tf_error,
3352
                                    /*in_decl=*/NULL_TREE,
3353
                                    /*function_p=*/false);
3354
      processing_template_decl = saved_processing_template_decl;
3355
    }
3356
  return expr;
3357
}
3358
 
3359
/* EXPR is an expression which is used in a constant-expression context.
3360
   For instance, it could be a VAR_DECL with a constant initializer.
3361
   Extract the innest constant expression.
3362
 
3363
   This is basically a more powerful version of
3364
   integral_constant_value, which can be used also in templates where
3365
   initializers can maintain a syntactic rather than semantic form
3366
   (even if they are non-dependent, for access-checking purposes).  */
3367
 
3368
tree
3369
fold_decl_constant_value (tree expr)
3370
{
3371
  tree const_expr = expr;
3372
  do
3373
    {
3374
      expr = fold_non_dependent_expr (const_expr);
3375
      const_expr = integral_constant_value (expr);
3376
    }
3377
  while (expr != const_expr);
3378
 
3379
  return expr;
3380
}
3381
 
3382
/* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
3383
   must be a function or a pointer-to-function type, as specified
3384
   in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
3385
   and check that the resulting function has external linkage.  */
3386
 
3387
static tree
3388
convert_nontype_argument_function (tree type, tree expr)
3389
{
3390
  tree fns = expr;
3391
  tree fn, fn_no_ptr;
3392
 
3393
  fn = instantiate_type (type, fns, tf_none);
3394
  if (fn == error_mark_node)
3395
    return error_mark_node;
3396
 
3397
  fn_no_ptr = fn;
3398
  if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
3399
    fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
3400
 
3401
  /* [temp.arg.nontype]/1
3402
 
3403
     A template-argument for a non-type, non-template template-parameter
3404
     shall be one of:
3405
     [...]
3406
     -- the address of an object or function with external linkage.  */
3407
  if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
3408
    {
3409
      error ("%qE is not a valid template argument for type %qT "
3410
             "because function %qD has not external linkage",
3411
             expr, type, fn_no_ptr);
3412
      return NULL_TREE;
3413
    }
3414
 
3415
  return fn;
3416
}
3417
 
3418
/* Attempt to convert the non-type template parameter EXPR to the
3419
   indicated TYPE.  If the conversion is successful, return the
3420
   converted value.  If the conversion is unsuccessful, return
3421
   NULL_TREE if we issued an error message, or error_mark_node if we
3422
   did not.  We issue error messages for out-and-out bad template
3423
   parameters, but not simply because the conversion failed, since we
3424
   might be just trying to do argument deduction.  Both TYPE and EXPR
3425
   must be non-dependent.
3426
 
3427
   The conversion follows the special rules described in
3428
   [temp.arg.nontype], and it is much more strict than an implicit
3429
   conversion.
3430
 
3431
   This function is called twice for each template argument (see
3432
   lookup_template_class for a more accurate description of this
3433
   problem). This means that we need to handle expressions which
3434
   are not valid in a C++ source, but can be created from the
3435
   first call (for instance, casts to perform conversions). These
3436
   hacks can go away after we fix the double coercion problem.  */
3437
 
3438
static tree
3439
convert_nontype_argument (tree type, tree expr)
3440
{
3441
  tree expr_type;
3442
 
3443
  /* Detect immediately string literals as invalid non-type argument.
3444
     This special-case is not needed for correctness (we would easily
3445
     catch this later), but only to provide better diagnostic for this
3446
     common user mistake. As suggested by DR 100, we do not mention
3447
     linkage issues in the diagnostic as this is not the point.  */
3448
  if (TREE_CODE (expr) == STRING_CST)
3449
    {
3450
      error ("%qE is not a valid template argument for type %qT "
3451
             "because string literals can never be used in this context",
3452
             expr, type);
3453
      return NULL_TREE;
3454
    }
3455
 
3456
  /* If we are in a template, EXPR may be non-dependent, but still
3457
     have a syntactic, rather than semantic, form.  For example, EXPR
3458
     might be a SCOPE_REF, rather than the VAR_DECL to which the
3459
     SCOPE_REF refers.  Preserving the qualifying scope is necessary
3460
     so that access checking can be performed when the template is
3461
     instantiated -- but here we need the resolved form so that we can
3462
     convert the argument.  */
3463
  expr = fold_non_dependent_expr (expr);
3464
  if (error_operand_p (expr))
3465
    return error_mark_node;
3466
  expr_type = TREE_TYPE (expr);
3467
 
3468
  /* HACK: Due to double coercion, we can get a
3469
     NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
3470
     which is the tree that we built on the first call (see
3471
     below when coercing to reference to object or to reference to
3472
     function). We just strip everything and get to the arg.
3473
     See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
3474
     for examples.  */
3475
  if (TREE_CODE (expr) == NOP_EXPR)
3476
    {
3477
      if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
3478
        {
3479
          /* ??? Maybe we could use convert_from_reference here, but we
3480
             would need to relax its constraints because the NOP_EXPR
3481
             could actually change the type to something more cv-qualified,
3482
             and this is not folded by convert_from_reference.  */
3483
          tree addr = TREE_OPERAND (expr, 0);
3484
          gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
3485
          gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
3486
          gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
3487
          gcc_assert (same_type_ignoring_top_level_qualifiers_p
3488
                      (TREE_TYPE (expr_type),
3489
                       TREE_TYPE (TREE_TYPE (addr))));
3490
 
3491
          expr = TREE_OPERAND (addr, 0);
3492
          expr_type = TREE_TYPE (expr);
3493
        }
3494
 
3495
      /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
3496
         parameter is a pointer to object, through decay and
3497
         qualification conversion. Let's strip everything.  */
3498
      else if (TYPE_PTROBV_P (type))
3499
        {
3500
          STRIP_NOPS (expr);
3501
          gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
3502
          gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
3503
          /* Skip the ADDR_EXPR only if it is part of the decay for
3504
             an array. Otherwise, it is part of the original argument
3505
             in the source code.  */
3506
          if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
3507
            expr = TREE_OPERAND (expr, 0);
3508
          expr_type = TREE_TYPE (expr);
3509
        }
3510
    }
3511
 
3512
  /* [temp.arg.nontype]/5, bullet 1
3513
 
3514
     For a non-type template-parameter of integral or enumeration type,
3515
     integral promotions (_conv.prom_) and integral conversions
3516
     (_conv.integral_) are applied.  */
3517
  if (INTEGRAL_TYPE_P (type))
3518
    {
3519
      if (!INTEGRAL_TYPE_P (expr_type))
3520
        return error_mark_node;
3521
 
3522
      expr = fold_decl_constant_value (expr);
3523
      /* Notice that there are constant expressions like '4 % 0' which
3524
         do not fold into integer constants.  */
3525
      if (TREE_CODE (expr) != INTEGER_CST)
3526
        {
3527
          error ("%qE is not a valid template argument for type %qT "
3528
                 "because it is a non-constant expression", expr, type);
3529
          return NULL_TREE;
3530
        }
3531
 
3532
      /* At this point, an implicit conversion does what we want,
3533
         because we already know that the expression is of integral
3534
         type.  */
3535
      expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
3536
      if (expr == error_mark_node)
3537
        return error_mark_node;
3538
 
3539
      /* Conversion was allowed: fold it to a bare integer constant.  */
3540
      expr = fold (expr);
3541
    }
3542
  /* [temp.arg.nontype]/5, bullet 2
3543
 
3544
     For a non-type template-parameter of type pointer to object,
3545
     qualification conversions (_conv.qual_) and the array-to-pointer
3546
     conversion (_conv.array_) are applied.  */
3547
  else if (TYPE_PTROBV_P (type))
3548
    {
3549
      /* [temp.arg.nontype]/1  (TC1 version, DR 49):
3550
 
3551
         A template-argument for a non-type, non-template template-parameter
3552
         shall be one of: [...]
3553
 
3554
         -- the name of a non-type template-parameter;
3555
         -- the address of an object or function with external linkage, [...]
3556
            expressed as "& id-expression" where the & is optional if the name
3557
            refers to a function or array, or if the corresponding
3558
            template-parameter is a reference.
3559
 
3560
        Here, we do not care about functions, as they are invalid anyway
3561
        for a parameter of type pointer-to-object.  */
3562
      bool constant_address_p =
3563
        (TREE_CODE (expr) == ADDR_EXPR
3564
         || TREE_CODE (expr_type) == ARRAY_TYPE
3565
         || (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr)));
3566
 
3567
      expr = decay_conversion (expr);
3568
      if (expr == error_mark_node)
3569
        return error_mark_node;
3570
 
3571
      expr = perform_qualification_conversions (type, expr);
3572
      if (expr == error_mark_node)
3573
        return error_mark_node;
3574
 
3575
      if (!constant_address_p)
3576
        {
3577
            error ("%qE is not a valid template argument for type %qT "
3578
                  "because it is not a constant pointer", expr, type);
3579
            return NULL_TREE;
3580
        }
3581
    }
3582
  /* [temp.arg.nontype]/5, bullet 3
3583
 
3584
     For a non-type template-parameter of type reference to object, no
3585
     conversions apply. The type referred to by the reference may be more
3586
     cv-qualified than the (otherwise identical) type of the
3587
     template-argument. The template-parameter is bound directly to the
3588
     template-argument, which must be an lvalue.  */
3589
  else if (TYPE_REF_OBJ_P (type))
3590
    {
3591
      if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
3592
                                                      expr_type))
3593
        return error_mark_node;
3594
 
3595
      if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
3596
        {
3597
          error ("%qE is not a valid template argument for type %qT "
3598
                 "because of conflicts in cv-qualification", expr, type);
3599
          return NULL_TREE;
3600
        }
3601
 
3602
      if (!real_lvalue_p (expr))
3603
        {
3604
          error ("%qE is not a valid template argument for type %qT "
3605
                 "because it is not a lvalue", expr, type);
3606
          return NULL_TREE;
3607
        }
3608
 
3609
      /* [temp.arg.nontype]/1
3610
 
3611
         A template-argument for a non-type, non-template template-parameter
3612
         shall be one of: [...]
3613
 
3614
         -- the address of an object or function with external linkage.  */
3615
      if (!DECL_EXTERNAL_LINKAGE_P (expr))
3616
        {
3617
          error ("%qE is not a valid template argument for type %qT "
3618
                 "because object %qD has not external linkage",
3619
                 expr, type, expr);
3620
          return NULL_TREE;
3621
        }
3622
 
3623
      expr = build_nop (type, build_address (expr));
3624
    }
3625
  /* [temp.arg.nontype]/5, bullet 4
3626
 
3627
     For a non-type template-parameter of type pointer to function, only
3628
     the function-to-pointer conversion (_conv.func_) is applied. If the
3629
     template-argument represents a set of overloaded functions (or a
3630
     pointer to such), the matching function is selected from the set
3631
     (_over.over_).  */
3632
  else if (TYPE_PTRFN_P (type))
3633
    {
3634
      /* If the argument is a template-id, we might not have enough
3635
         context information to decay the pointer.  */
3636
      if (!type_unknown_p (expr_type))
3637
        {
3638
          expr = decay_conversion (expr);
3639
          if (expr == error_mark_node)
3640
            return error_mark_node;
3641
        }
3642
 
3643
      expr = convert_nontype_argument_function (type, expr);
3644
      if (!expr || expr == error_mark_node)
3645
        return expr;
3646
    }
3647
  /* [temp.arg.nontype]/5, bullet 5
3648
 
3649
     For a non-type template-parameter of type reference to function, no
3650
     conversions apply. If the template-argument represents a set of
3651
     overloaded functions, the matching function is selected from the set
3652
     (_over.over_).  */
3653
  else if (TYPE_REFFN_P (type))
3654
    {
3655
      if (TREE_CODE (expr) == ADDR_EXPR)
3656
        {
3657
          error ("%qE is not a valid template argument for type %qT "
3658
                 "because it is a pointer", expr, type);
3659
          inform ("try using %qE instead", TREE_OPERAND (expr, 0));
3660
          return NULL_TREE;
3661
        }
3662
 
3663
      expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
3664
      if (!expr || expr == error_mark_node)
3665
        return expr;
3666
 
3667
      expr = build_nop (type, build_address (expr));
3668
    }
3669
  /* [temp.arg.nontype]/5, bullet 6
3670
 
3671
     For a non-type template-parameter of type pointer to member function,
3672
     no conversions apply. If the template-argument represents a set of
3673
     overloaded member functions, the matching member function is selected
3674
     from the set (_over.over_).  */
3675
  else if (TYPE_PTRMEMFUNC_P (type))
3676
    {
3677
      expr = instantiate_type (type, expr, tf_none);
3678
      if (expr == error_mark_node)
3679
        return error_mark_node;
3680
 
3681
      /* There is no way to disable standard conversions in
3682
         resolve_address_of_overloaded_function (called by
3683
         instantiate_type). It is possible that the call succeeded by
3684
         converting &B::I to &D::I (where B is a base of D), so we need
3685
         to reject this conversion here.
3686
 
3687
         Actually, even if there was a way to disable standard conversions,
3688
         it would still be better to reject them here so that we can
3689
         provide a superior diagnostic.  */
3690
      if (!same_type_p (TREE_TYPE (expr), type))
3691
        {
3692
          /* Make sure we are just one standard conversion off.  */
3693
          gcc_assert (can_convert (type, TREE_TYPE (expr)));
3694
          error ("%qE is not a valid template argument for type %qT "
3695
                 "because it is of type %qT", expr, type,
3696
                 TREE_TYPE (expr));
3697
          inform ("standard conversions are not allowed in this context");
3698
          return NULL_TREE;
3699
        }
3700
    }
3701
  /* [temp.arg.nontype]/5, bullet 7
3702
 
3703
     For a non-type template-parameter of type pointer to data member,
3704
     qualification conversions (_conv.qual_) are applied.  */
3705
  else if (TYPE_PTRMEM_P (type))
3706
    {
3707
      expr = perform_qualification_conversions (type, expr);
3708
      if (expr == error_mark_node)
3709
        return expr;
3710
    }
3711
  /* A template non-type parameter must be one of the above.  */
3712
  else
3713
    gcc_unreachable ();
3714
 
3715
  /* Sanity check: did we actually convert the argument to the
3716
     right type?  */
3717
  gcc_assert (same_type_p (type, TREE_TYPE (expr)));
3718
  return expr;
3719
}
3720
 
3721
 
3722
/* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
3723
   template template parameters.  Both PARM_PARMS and ARG_PARMS are
3724
   vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
3725
   or PARM_DECL.
3726
 
3727
   ARG_PARMS may contain more parameters than PARM_PARMS.  If this is
3728
   the case, then extra parameters must have default arguments.
3729
 
3730
   Consider the example:
3731
     template <class T, class Allocator = allocator> class vector;
3732
     template<template <class U> class TT> class C;
3733
 
3734
   C<vector> is a valid instantiation.  PARM_PARMS for the above code
3735
   contains a TYPE_DECL (for U),  ARG_PARMS contains two TYPE_DECLs (for
3736
   T and Allocator) and OUTER_ARGS contains the argument that is used to
3737
   substitute the TT parameter.  */
3738
 
3739
static int
3740
coerce_template_template_parms (tree parm_parms,
3741
                                tree arg_parms,
3742
                                tsubst_flags_t complain,
3743
                                tree in_decl,
3744
                                tree outer_args)
3745
{
3746
  int nparms, nargs, i;
3747
  tree parm, arg;
3748
 
3749
  gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
3750
  gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
3751
 
3752
  nparms = TREE_VEC_LENGTH (parm_parms);
3753
  nargs = TREE_VEC_LENGTH (arg_parms);
3754
 
3755
  /* The rule here is opposite of coerce_template_parms.  */
3756
  if (nargs < nparms
3757
      || (nargs > nparms
3758
          && TREE_PURPOSE (TREE_VEC_ELT (arg_parms, nparms)) == NULL_TREE))
3759
    return 0;
3760
 
3761
  for (i = 0; i < nparms; ++i)
3762
    {
3763
      parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
3764
      arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
3765
 
3766
      if (arg == NULL_TREE || arg == error_mark_node
3767
          || parm == NULL_TREE || parm == error_mark_node)
3768
        return 0;
3769
 
3770
      if (TREE_CODE (arg) != TREE_CODE (parm))
3771
        return 0;
3772
 
3773
      switch (TREE_CODE (parm))
3774
        {
3775
        case TYPE_DECL:
3776
          break;
3777
 
3778
        case TEMPLATE_DECL:
3779
          /* We encounter instantiations of templates like
3780
               template <template <template <class> class> class TT>
3781
               class C;  */
3782
          {
3783
            tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3784
            tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3785
 
3786
            if (!coerce_template_template_parms
3787
                (parmparm, argparm, complain, in_decl, outer_args))
3788
              return 0;
3789
          }
3790
          break;
3791
 
3792
        case PARM_DECL:
3793
          /* The tsubst call is used to handle cases such as
3794
 
3795
               template <int> class C {};
3796
               template <class T, template <T> class TT> class D {};
3797
               D<int, C> d;
3798
 
3799
             i.e. the parameter list of TT depends on earlier parameters.  */
3800
          if (!dependent_type_p (TREE_TYPE (arg))
3801
              && !same_type_p
3802
                    (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
3803
                             TREE_TYPE (arg)))
3804
            return 0;
3805
          break;
3806
 
3807
        default:
3808
          gcc_unreachable ();
3809
        }
3810
    }
3811
  return 1;
3812
}
3813
 
3814
/* Convert the indicated template ARG as necessary to match the
3815
   indicated template PARM.  Returns the converted ARG, or
3816
   error_mark_node if the conversion was unsuccessful.  Error and
3817
   warning messages are issued under control of COMPLAIN.  This
3818
   conversion is for the Ith parameter in the parameter list.  ARGS is
3819
   the full set of template arguments deduced so far.  */
3820
 
3821
static tree
3822
convert_template_argument (tree parm,
3823
                           tree arg,
3824
                           tree args,
3825
                           tsubst_flags_t complain,
3826
                           int i,
3827
                           tree in_decl)
3828
{
3829
  tree val;
3830
  tree inner_args;
3831
  int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
3832
 
3833
  inner_args = INNERMOST_TEMPLATE_ARGS (args);
3834
 
3835
  if (TREE_CODE (arg) == TREE_LIST
3836
      && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
3837
    {
3838
      /* The template argument was the name of some
3839
         member function.  That's usually
3840
         invalid, but static members are OK.  In any
3841
         case, grab the underlying fields/functions
3842
         and issue an error later if required.  */
3843
      arg = TREE_VALUE (arg);
3844
      TREE_TYPE (arg) = unknown_type_node;
3845
    }
3846
 
3847
  requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
3848
  requires_type = (TREE_CODE (parm) == TYPE_DECL
3849
                   || requires_tmpl_type);
3850
 
3851
  is_tmpl_type = ((TREE_CODE (arg) == TEMPLATE_DECL
3852
                   && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
3853
                  || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3854
                  || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
3855
 
3856
  if (is_tmpl_type
3857
      && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3858
          || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
3859
    arg = TYPE_STUB_DECL (arg);
3860
 
3861
  is_type = TYPE_P (arg) || is_tmpl_type;
3862
 
3863
  if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
3864
      && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
3865
    {
3866
      pedwarn ("to refer to a type member of a template parameter, "
3867
               "use %<typename %E%>", arg);
3868
 
3869
      arg = make_typename_type (TREE_OPERAND (arg, 0),
3870
                                TREE_OPERAND (arg, 1),
3871
                                typename_type,
3872
                                complain & tf_error);
3873
      is_type = 1;
3874
    }
3875
  if (is_type != requires_type)
3876
    {
3877
      if (in_decl)
3878
        {
3879
          if (complain & tf_error)
3880
            {
3881
              error ("type/value mismatch at argument %d in template "
3882
                     "parameter list for %qD",
3883
                     i + 1, in_decl);
3884
              if (is_type)
3885
                error ("  expected a constant of type %qT, got %qT",
3886
                       TREE_TYPE (parm),
3887
                       (is_tmpl_type ? DECL_NAME (arg) : arg));
3888
              else if (requires_tmpl_type)
3889
                error ("  expected a class template, got %qE", arg);
3890
              else
3891
                error ("  expected a type, got %qE", arg);
3892
            }
3893
        }
3894
      return error_mark_node;
3895
    }
3896
  if (is_tmpl_type ^ requires_tmpl_type)
3897
    {
3898
      if (in_decl && (complain & tf_error))
3899
        {
3900
          error ("type/value mismatch at argument %d in template "
3901
                 "parameter list for %qD",
3902
                 i + 1, in_decl);
3903
          if (is_tmpl_type)
3904
            error ("  expected a type, got %qT", DECL_NAME (arg));
3905
          else
3906
            error ("  expected a class template, got %qT", arg);
3907
        }
3908
      return error_mark_node;
3909
    }
3910
 
3911
  if (is_type)
3912
    {
3913
      if (requires_tmpl_type)
3914
        {
3915
          if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
3916
            /* The number of argument required is not known yet.
3917
               Just accept it for now.  */
3918
            val = TREE_TYPE (arg);
3919
          else
3920
            {
3921
              tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3922
              tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3923
 
3924
              if (coerce_template_template_parms (parmparm, argparm,
3925
                                                  complain, in_decl,
3926
                                                  inner_args))
3927
                {
3928
                  val = arg;
3929
 
3930
                  /* TEMPLATE_TEMPLATE_PARM node is preferred over
3931
                     TEMPLATE_DECL.  */
3932
                  if (val != error_mark_node
3933
                      && DECL_TEMPLATE_TEMPLATE_PARM_P (val))
3934
                    val = TREE_TYPE (val);
3935
                }
3936
              else
3937
                {
3938
                  if (in_decl && (complain & tf_error))
3939
                    {
3940
                      error ("type/value mismatch at argument %d in "
3941
                             "template parameter list for %qD",
3942
                             i + 1, in_decl);
3943
                      error ("  expected a template of type %qD, got %qD",
3944
                             parm, arg);
3945
                    }
3946
 
3947
                  val = error_mark_node;
3948
                }
3949
            }
3950
        }
3951
      else
3952
        val = arg;
3953
      /* We only form one instance of each template specialization.
3954
         Therefore, if we use a non-canonical variant (i.e., a
3955
         typedef), any future messages referring to the type will use
3956
         the typedef, which is confusing if those future uses do not
3957
         themselves also use the typedef.  */
3958
      if (TYPE_P (val))
3959
        val = canonical_type_variant (val);
3960
    }
3961
  else
3962
    {
3963
      tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
3964
 
3965
      if (invalid_nontype_parm_type_p (t, complain))
3966
        return error_mark_node;
3967
 
3968
      if (!uses_template_parms (arg) && !uses_template_parms (t))
3969
        /* We used to call digest_init here.  However, digest_init
3970
           will report errors, which we don't want when complain
3971
           is zero.  More importantly, digest_init will try too
3972
           hard to convert things: for example, `0' should not be
3973
           converted to pointer type at this point according to
3974
           the standard.  Accepting this is not merely an
3975
           extension, since deciding whether or not these
3976
           conversions can occur is part of determining which
3977
           function template to call, or whether a given explicit
3978
           argument specification is valid.  */
3979
        val = convert_nontype_argument (t, arg);
3980
      else
3981
        val = arg;
3982
 
3983
      if (val == NULL_TREE)
3984
        val = error_mark_node;
3985
      else if (val == error_mark_node && (complain & tf_error))
3986
        error ("could not convert template argument %qE to %qT",  arg, t);
3987
    }
3988
 
3989
  return val;
3990
}
3991
 
3992
/* Convert all template arguments to their appropriate types, and
3993
   return a vector containing the innermost resulting template
3994
   arguments.  If any error occurs, return error_mark_node. Error and
3995
   warning messages are issued under control of COMPLAIN.
3996
 
3997
   If REQUIRE_ALL_ARGUMENTS is nonzero, all arguments must be
3998
   provided in ARGLIST, or else trailing parameters must have default
3999
   values.  If REQUIRE_ALL_ARGUMENTS is zero, we will attempt argument
4000
   deduction for any unspecified trailing arguments.  */
4001
 
4002
static tree
4003
coerce_template_parms (tree parms,
4004
                       tree args,
4005
                       tree in_decl,
4006
                       tsubst_flags_t complain,
4007
                       int require_all_arguments)
4008
{
4009
  int nparms, nargs, i, lost = 0;
4010
  tree inner_args;
4011
  tree new_args;
4012
  tree new_inner_args;
4013
 
4014
  inner_args = INNERMOST_TEMPLATE_ARGS (args);
4015
  nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
4016
  nparms = TREE_VEC_LENGTH (parms);
4017
 
4018
  if (nargs > nparms
4019
      || (nargs < nparms
4020
          && require_all_arguments
4021
          && TREE_PURPOSE (TREE_VEC_ELT (parms, nargs)) == NULL_TREE))
4022
    {
4023
      if (complain & tf_error)
4024
        {
4025
          error ("wrong number of template arguments (%d, should be %d)",
4026
                 nargs, nparms);
4027
 
4028
          if (in_decl)
4029
            error ("provided for %q+D", in_decl);
4030
        }
4031
 
4032
      return error_mark_node;
4033
    }
4034
 
4035
  new_inner_args = make_tree_vec (nparms);
4036
  new_args = add_outermost_template_args (args, new_inner_args);
4037
  for (i = 0; i < nparms; i++)
4038
    {
4039
      tree arg;
4040
      tree parm;
4041
 
4042
      /* Get the Ith template parameter.  */
4043
      parm = TREE_VEC_ELT (parms, i);
4044
 
4045
      /* Calculate the Ith argument.  */
4046
      if (i < nargs)
4047
        arg = TREE_VEC_ELT (inner_args, i);
4048
      else if (require_all_arguments)
4049
        /* There must be a default arg in this case.  */
4050
        arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
4051
                                   complain, in_decl);
4052
      else
4053
        break;
4054
 
4055
      gcc_assert (arg);
4056
      if (arg == error_mark_node)
4057
        {
4058
          if (complain & tf_error)
4059
            error ("template argument %d is invalid", i + 1);
4060
        }
4061
      else
4062
        arg = convert_template_argument (TREE_VALUE (parm),
4063
                                         arg, new_args, complain, i,
4064
                                         in_decl);
4065
 
4066
      if (arg == error_mark_node)
4067
        lost++;
4068
      TREE_VEC_ELT (new_inner_args, i) = arg;
4069
    }
4070
 
4071
  if (lost)
4072
    return error_mark_node;
4073
 
4074
  return new_inner_args;
4075
}
4076
 
4077
/* Returns 1 if template args OT and NT are equivalent.  */
4078
 
4079
static int
4080
template_args_equal (tree ot, tree nt)
4081
{
4082
  if (nt == ot)
4083
    return 1;
4084
 
4085
  if (TREE_CODE (nt) == TREE_VEC)
4086
    /* For member templates */
4087
    return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
4088
  else if (TYPE_P (nt))
4089
    return TYPE_P (ot) && same_type_p (ot, nt);
4090
  else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
4091
    return 0;
4092
  else
4093
    return cp_tree_equal (ot, nt);
4094
}
4095
 
4096
/* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
4097
   of template arguments.  Returns 0 otherwise.  */
4098
 
4099
int
4100
comp_template_args (tree oldargs, tree newargs)
4101
{
4102
  int i;
4103
 
4104
  if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
4105
    return 0;
4106
 
4107
  for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
4108
    {
4109
      tree nt = TREE_VEC_ELT (newargs, i);
4110
      tree ot = TREE_VEC_ELT (oldargs, i);
4111
 
4112
      if (! template_args_equal (ot, nt))
4113
        return 0;
4114
    }
4115
  return 1;
4116
}
4117
 
4118
/* Given class template name and parameter list, produce a user-friendly name
4119
   for the instantiation.  */
4120
 
4121
static char *
4122
mangle_class_name_for_template (const char* name, tree parms, tree arglist)
4123
{
4124
  static struct obstack scratch_obstack;
4125
  static char *scratch_firstobj;
4126
  int i, nparms;
4127
 
4128
  if (!scratch_firstobj)
4129
    gcc_obstack_init (&scratch_obstack);
4130
  else
4131
    obstack_free (&scratch_obstack, scratch_firstobj);
4132
  scratch_firstobj = obstack_alloc (&scratch_obstack, 1);
4133
 
4134
#define ccat(C) obstack_1grow (&scratch_obstack, (C));
4135
#define cat(S)  obstack_grow (&scratch_obstack, (S), strlen (S))
4136
 
4137
  cat (name);
4138
  ccat ('<');
4139
  nparms = TREE_VEC_LENGTH (parms);
4140
  arglist = INNERMOST_TEMPLATE_ARGS (arglist);
4141
  gcc_assert (nparms == TREE_VEC_LENGTH (arglist));
4142
  for (i = 0; i < nparms; i++)
4143
    {
4144
      tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4145
      tree arg = TREE_VEC_ELT (arglist, i);
4146
 
4147
      if (i)
4148
        ccat (',');
4149
 
4150
      if (TREE_CODE (parm) == TYPE_DECL)
4151
        {
4152
          cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
4153
          continue;
4154
        }
4155
      else if (TREE_CODE (parm) == TEMPLATE_DECL)
4156
        {
4157
          if (TREE_CODE (arg) == TEMPLATE_DECL)
4158
            {
4159
              /* Already substituted with real template.  Just output
4160
                 the template name here */
4161
              tree context = DECL_CONTEXT (arg);
4162
              if (context)
4163
                {
4164
                  /* The template may be defined in a namespace, or
4165
                     may be a member template.  */
4166
                  gcc_assert (TREE_CODE (context) == NAMESPACE_DECL
4167
                              || CLASS_TYPE_P (context));
4168
                  cat (decl_as_string (DECL_CONTEXT (arg),
4169
                                      TFF_PLAIN_IDENTIFIER));
4170
                  cat ("::");
4171
                }
4172
              cat (IDENTIFIER_POINTER (DECL_NAME (arg)));
4173
            }
4174
          else
4175
            /* Output the parameter declaration.  */
4176
            cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
4177
          continue;
4178
        }
4179
      else
4180
        gcc_assert (TREE_CODE (parm) == PARM_DECL);
4181
 
4182
      /* No need to check arglist against parmlist here; we did that
4183
         in coerce_template_parms, called from lookup_template_class.  */
4184
      cat (expr_as_string (arg, TFF_PLAIN_IDENTIFIER));
4185
    }
4186
  {
4187
    char *bufp = obstack_next_free (&scratch_obstack);
4188
    int offset = 0;
4189
    while (bufp[offset - 1] == ' ')
4190
      offset--;
4191
    obstack_blank_fast (&scratch_obstack, offset);
4192
 
4193
    /* B<C<char> >, not B<C<char>> */
4194
    if (bufp[offset - 1] == '>')
4195
      ccat (' ');
4196
  }
4197
  ccat ('>');
4198
  ccat ('\0');
4199
  return (char *) obstack_base (&scratch_obstack);
4200
}
4201
 
4202
static tree
4203
classtype_mangled_name (tree t)
4204
{
4205
  if (CLASSTYPE_TEMPLATE_INFO (t)
4206
      /* Specializations have already had their names set up in
4207
         lookup_template_class.  */
4208
      && !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
4209
    {
4210
      tree tmpl = most_general_template (CLASSTYPE_TI_TEMPLATE (t));
4211
 
4212
      /* For non-primary templates, the template parameters are
4213
         implicit from their surrounding context.  */
4214
      if (PRIMARY_TEMPLATE_P (tmpl))
4215
        {
4216
          tree name = DECL_NAME (tmpl);
4217
          char *mangled_name = mangle_class_name_for_template
4218
            (IDENTIFIER_POINTER (name),
4219
             DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
4220
             CLASSTYPE_TI_ARGS (t));
4221
          tree id = get_identifier (mangled_name);
4222
          IDENTIFIER_TEMPLATE (id) = name;
4223
          return id;
4224
        }
4225
    }
4226
 
4227
  return TYPE_IDENTIFIER (t);
4228
}
4229
 
4230
static void
4231
add_pending_template (tree d)
4232
{
4233
  tree ti = (TYPE_P (d)
4234
             ? CLASSTYPE_TEMPLATE_INFO (d)
4235
             : DECL_TEMPLATE_INFO (d));
4236
  tree pt;
4237
  int level;
4238
 
4239
  if (TI_PENDING_TEMPLATE_FLAG (ti))
4240
    return;
4241
 
4242
  /* We are called both from instantiate_decl, where we've already had a
4243
     tinst_level pushed, and instantiate_template, where we haven't.
4244
     Compensate.  */
4245
  level = !(current_tinst_level && TINST_DECL (current_tinst_level) == d);
4246
 
4247
  if (level)
4248
    push_tinst_level (d);
4249
 
4250
  pt = tree_cons (current_tinst_level, d, NULL_TREE);
4251
  if (last_pending_template)
4252
    TREE_CHAIN (last_pending_template) = pt;
4253
  else
4254
    pending_templates = pt;
4255
 
4256
  last_pending_template = pt;
4257
 
4258
  TI_PENDING_TEMPLATE_FLAG (ti) = 1;
4259
 
4260
  if (level)
4261
    pop_tinst_level ();
4262
}
4263
 
4264
 
4265
/* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
4266
   ARGLIST.  Valid choices for FNS are given in the cp-tree.def
4267
   documentation for TEMPLATE_ID_EXPR.  */
4268
 
4269
tree
4270
lookup_template_function (tree fns, tree arglist)
4271
{
4272
  tree type;
4273
 
4274
  if (fns == error_mark_node || arglist == error_mark_node)
4275
    return error_mark_node;
4276
 
4277
  gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
4278
  gcc_assert (fns && (is_overloaded_fn (fns)
4279
                      || TREE_CODE (fns) == IDENTIFIER_NODE));
4280
 
4281
  if (BASELINK_P (fns))
4282
    {
4283
      BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
4284
                                         unknown_type_node,
4285
                                         BASELINK_FUNCTIONS (fns),
4286
                                         arglist);
4287
      return fns;
4288
    }
4289
 
4290
  type = TREE_TYPE (fns);
4291
  if (TREE_CODE (fns) == OVERLOAD || !type)
4292
    type = unknown_type_node;
4293
 
4294
  return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
4295
}
4296
 
4297
/* Within the scope of a template class S<T>, the name S gets bound
4298
   (in build_self_reference) to a TYPE_DECL for the class, not a
4299
   TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
4300
   or one of its enclosing classes, and that type is a template,
4301
   return the associated TEMPLATE_DECL.  Otherwise, the original
4302
   DECL is returned.  */
4303
 
4304
tree
4305
maybe_get_template_decl_from_type_decl (tree decl)
4306
{
4307
  return (decl != NULL_TREE
4308
          && TREE_CODE (decl) == TYPE_DECL
4309
          && DECL_ARTIFICIAL (decl)
4310
          && CLASS_TYPE_P (TREE_TYPE (decl))
4311
          && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
4312
    ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
4313
}
4314
 
4315
/* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
4316
   parameters, find the desired type.
4317
 
4318
   D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
4319
 
4320
   IN_DECL, if non-NULL, is the template declaration we are trying to
4321
   instantiate.
4322
 
4323
   If ENTERING_SCOPE is nonzero, we are about to enter the scope of
4324
   the class we are looking up.
4325
 
4326
   Issue error and warning messages under control of COMPLAIN.
4327
 
4328
   If the template class is really a local class in a template
4329
   function, then the FUNCTION_CONTEXT is the function in which it is
4330
   being instantiated.
4331
 
4332
   ??? Note that this function is currently called *twice* for each
4333
   template-id: the first time from the parser, while creating the
4334
   incomplete type (finish_template_type), and the second type during the
4335
   real instantiation (instantiate_template_class). This is surely something
4336
   that we want to avoid. It also causes some problems with argument
4337
   coercion (see convert_nontype_argument for more information on this).  */
4338
 
4339
tree
4340
lookup_template_class (tree d1,
4341
                       tree arglist,
4342
                       tree in_decl,
4343
                       tree context,
4344
                       int entering_scope,
4345
                       tsubst_flags_t complain)
4346
{
4347
  tree template = NULL_TREE, parmlist;
4348
  tree t;
4349
 
4350
  timevar_push (TV_NAME_LOOKUP);
4351
 
4352
  if (TREE_CODE (d1) == IDENTIFIER_NODE)
4353
    {
4354
      tree value = innermost_non_namespace_value (d1);
4355
      if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
4356
        template = value;
4357
      else
4358
        {
4359
          if (context)
4360
            push_decl_namespace (context);
4361
          template = lookup_name (d1, /*prefer_type=*/0);
4362
          template = maybe_get_template_decl_from_type_decl (template);
4363
          if (context)
4364
            pop_decl_namespace ();
4365
        }
4366
      if (template)
4367
        context = DECL_CONTEXT (template);
4368
    }
4369
  else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
4370
    {
4371
      tree type = TREE_TYPE (d1);
4372
 
4373
      /* If we are declaring a constructor, say A<T>::A<T>, we will get
4374
         an implicit typename for the second A.  Deal with it.  */
4375
      if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
4376
        type = TREE_TYPE (type);
4377
 
4378
      if (CLASSTYPE_TEMPLATE_INFO (type))
4379
        {
4380
          template = CLASSTYPE_TI_TEMPLATE (type);
4381
          d1 = DECL_NAME (template);
4382
        }
4383
    }
4384
  else if (TREE_CODE (d1) == ENUMERAL_TYPE
4385
           || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
4386
    {
4387
      template = TYPE_TI_TEMPLATE (d1);
4388
      d1 = DECL_NAME (template);
4389
    }
4390
  else if (TREE_CODE (d1) == TEMPLATE_DECL
4391
           && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
4392
    {
4393
      template = d1;
4394
      d1 = DECL_NAME (template);
4395
      context = DECL_CONTEXT (template);
4396
    }
4397
 
4398
  /* Issue an error message if we didn't find a template.  */
4399
  if (! template)
4400
    {
4401
      if (complain & tf_error)
4402
        error ("%qT is not a template", d1);
4403
      POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4404
    }
4405
 
4406
  if (TREE_CODE (template) != TEMPLATE_DECL
4407
         /* Make sure it's a user visible template, if it was named by
4408
            the user.  */
4409
      || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (template)
4410
          && !PRIMARY_TEMPLATE_P (template)))
4411
    {
4412
      if (complain & tf_error)
4413
        {
4414
          error ("non-template type %qT used as a template", d1);
4415
          if (in_decl)
4416
            error ("for template declaration %q+D", in_decl);
4417
        }
4418
      POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4419
    }
4420
 
4421
  complain &= ~tf_user;
4422
 
4423
  if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
4424
    {
4425
      /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
4426
         template arguments */
4427
 
4428
      tree parm;
4429
      tree arglist2;
4430
 
4431
      parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
4432
 
4433
      /* Consider an example where a template template parameter declared as
4434
 
4435
           template <class T, class U = std::allocator<T> > class TT
4436
 
4437
         The template parameter level of T and U are one level larger than
4438
         of TT.  To proper process the default argument of U, say when an
4439
         instantiation `TT<int>' is seen, we need to build the full
4440
         arguments containing {int} as the innermost level.  Outer levels,
4441
         available when not appearing as default template argument, can be
4442
         obtained from `current_template_args ()'.
4443
 
4444
         Suppose that TT is later substituted with std::vector.  The above
4445
         instantiation is `TT<int, std::allocator<T> >' with TT at
4446
         level 1, and T at level 2, while the template arguments at level 1
4447
         becomes {std::vector} and the inner level 2 is {int}.  */
4448
 
4449
      if (current_template_parms)
4450
        arglist = add_to_template_args (current_template_args (), arglist);
4451
 
4452
      arglist2 = coerce_template_parms (parmlist, arglist, template,
4453
                                        complain, /*require_all_args=*/1);
4454
      if (arglist2 == error_mark_node
4455
          || (!uses_template_parms (arglist2)
4456
              && check_instantiated_args (template, arglist2, complain)))
4457
        POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4458
 
4459
      parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
4460
      POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
4461
    }
4462
  else
4463
    {
4464
      tree template_type = TREE_TYPE (template);
4465
      tree gen_tmpl;
4466
      tree type_decl;
4467
      tree found = NULL_TREE;
4468
      int arg_depth;
4469
      int parm_depth;
4470
      int is_partial_instantiation;
4471
 
4472
      gen_tmpl = most_general_template (template);
4473
      parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
4474
      parm_depth = TMPL_PARMS_DEPTH (parmlist);
4475
      arg_depth = TMPL_ARGS_DEPTH (arglist);
4476
 
4477
      if (arg_depth == 1 && parm_depth > 1)
4478
        {
4479
          /* We've been given an incomplete set of template arguments.
4480
             For example, given:
4481
 
4482
               template <class T> struct S1 {
4483
                 template <class U> struct S2 {};
4484
                 template <class U> struct S2<U*> {};
4485
                };
4486
 
4487
             we will be called with an ARGLIST of `U*', but the
4488
             TEMPLATE will be `template <class T> template
4489
             <class U> struct S1<T>::S2'.  We must fill in the missing
4490
             arguments.  */
4491
          arglist
4492
            = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
4493
                                           arglist);
4494
          arg_depth = TMPL_ARGS_DEPTH (arglist);
4495
        }
4496
 
4497
      /* Now we should have enough arguments.  */
4498
      gcc_assert (parm_depth == arg_depth);
4499
 
4500
      /* From here on, we're only interested in the most general
4501
         template.  */
4502
      template = gen_tmpl;
4503
 
4504
      /* Calculate the BOUND_ARGS.  These will be the args that are
4505
         actually tsubst'd into the definition to create the
4506
         instantiation.  */
4507
      if (parm_depth > 1)
4508
        {
4509
          /* We have multiple levels of arguments to coerce, at once.  */
4510
          int i;
4511
          int saved_depth = TMPL_ARGS_DEPTH (arglist);
4512
 
4513
          tree bound_args = make_tree_vec (parm_depth);
4514
 
4515
          for (i = saved_depth,
4516
                 t = DECL_TEMPLATE_PARMS (template);
4517
               i > 0 && t != NULL_TREE;
4518
               --i, t = TREE_CHAIN (t))
4519
            {
4520
              tree a = coerce_template_parms (TREE_VALUE (t),
4521
                                              arglist, template,
4522
                                              complain, /*require_all_args=*/1);
4523
 
4524
              /* Don't process further if one of the levels fails.  */
4525
              if (a == error_mark_node)
4526
                {
4527
                  /* Restore the ARGLIST to its full size.  */
4528
                  TREE_VEC_LENGTH (arglist) = saved_depth;
4529
                  POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4530
                }
4531
 
4532
              SET_TMPL_ARGS_LEVEL (bound_args, i, a);
4533
 
4534
              /* We temporarily reduce the length of the ARGLIST so
4535
                 that coerce_template_parms will see only the arguments
4536
                 corresponding to the template parameters it is
4537
                 examining.  */
4538
              TREE_VEC_LENGTH (arglist)--;
4539
            }
4540
 
4541
          /* Restore the ARGLIST to its full size.  */
4542
          TREE_VEC_LENGTH (arglist) = saved_depth;
4543
 
4544
          arglist = bound_args;
4545
        }
4546
      else
4547
        arglist
4548
          = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
4549
                                   INNERMOST_TEMPLATE_ARGS (arglist),
4550
                                   template,
4551
                                   complain, /*require_all_args=*/1);
4552
 
4553
      if (arglist == error_mark_node)
4554
        /* We were unable to bind the arguments.  */
4555
        POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4556
 
4557
      /* In the scope of a template class, explicit references to the
4558
         template class refer to the type of the template, not any
4559
         instantiation of it.  For example, in:
4560
 
4561
           template <class T> class C { void f(C<T>); }
4562
 
4563
         the `C<T>' is just the same as `C'.  Outside of the
4564
         class, however, such a reference is an instantiation.  */
4565
      if (comp_template_args (TYPE_TI_ARGS (template_type),
4566
                              arglist))
4567
        {
4568
          found = template_type;
4569
 
4570
          if (!entering_scope && PRIMARY_TEMPLATE_P (template))
4571
            {
4572
              tree ctx;
4573
 
4574
              for (ctx = current_class_type;
4575
                   ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
4576
                   ctx = (TYPE_P (ctx)
4577
                          ? TYPE_CONTEXT (ctx)
4578
                          : DECL_CONTEXT (ctx)))
4579
                if (TYPE_P (ctx) && same_type_p (ctx, template_type))
4580
                  goto found_ctx;
4581
 
4582
              /* We're not in the scope of the class, so the
4583
                 TEMPLATE_TYPE is not the type we want after all.  */
4584
              found = NULL_TREE;
4585
            found_ctx:;
4586
            }
4587
        }
4588
      if (found)
4589
        POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4590
 
4591
      /* If we already have this specialization, return it.  */
4592
      found = retrieve_specialization (template, arglist,
4593
                                       /*class_specializations_p=*/false);
4594
      if (found)
4595
        POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4596
 
4597
      /* This type is a "partial instantiation" if any of the template
4598
         arguments still involve template parameters.  Note that we set
4599
         IS_PARTIAL_INSTANTIATION for partial specializations as
4600
         well.  */
4601
      is_partial_instantiation = uses_template_parms (arglist);
4602
 
4603
      /* If the deduced arguments are invalid, then the binding
4604
         failed.  */
4605
      if (!is_partial_instantiation
4606
          && check_instantiated_args (template,
4607
                                      INNERMOST_TEMPLATE_ARGS (arglist),
4608
                                      complain))
4609
        POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4610
 
4611
      if (!is_partial_instantiation
4612
          && !PRIMARY_TEMPLATE_P (template)
4613
          && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
4614
        {
4615
          found = xref_tag_from_type (TREE_TYPE (template),
4616
                                      DECL_NAME (template),
4617
                                      /*tag_scope=*/ts_global);
4618
          POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4619
        }
4620
 
4621
      context = tsubst (DECL_CONTEXT (template), arglist,
4622
                        complain, in_decl);
4623
      if (!context)
4624
        context = global_namespace;
4625
 
4626
      /* Create the type.  */
4627
      if (TREE_CODE (template_type) == ENUMERAL_TYPE)
4628
        {
4629
          if (!is_partial_instantiation)
4630
            {
4631
              set_current_access_from_decl (TYPE_NAME (template_type));
4632
              t = start_enum (TYPE_IDENTIFIER (template_type));
4633
            }
4634
          else
4635
            /* We don't want to call start_enum for this type, since
4636
               the values for the enumeration constants may involve
4637
               template parameters.  And, no one should be interested
4638
               in the enumeration constants for such a type.  */
4639
            t = make_node (ENUMERAL_TYPE);
4640
        }
4641
      else
4642
        {
4643
          t = make_aggr_type (TREE_CODE (template_type));
4644
          CLASSTYPE_DECLARED_CLASS (t)
4645
            = CLASSTYPE_DECLARED_CLASS (template_type);
4646
          SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
4647
          TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
4648
 
4649
          /* A local class.  Make sure the decl gets registered properly.  */
4650
          if (context == current_function_decl)
4651
            pushtag (DECL_NAME (template), t, /*tag_scope=*/ts_current);
4652
        }
4653
 
4654
      /* If we called start_enum or pushtag above, this information
4655
         will already be set up.  */
4656
      if (!TYPE_NAME (t))
4657
        {
4658
          TYPE_CONTEXT (t) = FROB_CONTEXT (context);
4659
 
4660
          type_decl = create_implicit_typedef (DECL_NAME (template), t);
4661
          DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
4662
          TYPE_STUB_DECL (t) = type_decl;
4663
          DECL_SOURCE_LOCATION (type_decl)
4664
            = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
4665
        }
4666
      else
4667
        type_decl = TYPE_NAME (t);
4668
 
4669
      TREE_PRIVATE (type_decl)
4670
        = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
4671
      TREE_PROTECTED (type_decl)
4672
        = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
4673
      DECL_IN_SYSTEM_HEADER (type_decl)
4674
        = DECL_IN_SYSTEM_HEADER (template);
4675
      if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
4676
        {
4677
          DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
4678
          DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
4679
        }
4680
 
4681
      /* Set up the template information.  We have to figure out which
4682
         template is the immediate parent if this is a full
4683
         instantiation.  */
4684
      if (parm_depth == 1 || is_partial_instantiation
4685
          || !PRIMARY_TEMPLATE_P (template))
4686
        /* This case is easy; there are no member templates involved.  */
4687
        found = template;
4688
      else
4689
        {
4690
          /* This is a full instantiation of a member template.  Look
4691
             for a partial instantiation of which this is an instance.  */
4692
 
4693
          for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
4694
               found; found = TREE_CHAIN (found))
4695
            {
4696
              int success;
4697
              tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
4698
 
4699
              /* We only want partial instantiations, here, not
4700
                 specializations or full instantiations.  */
4701
              if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
4702
                  || !uses_template_parms (TREE_VALUE (found)))
4703
                continue;
4704
 
4705
              /* Temporarily reduce by one the number of levels in the
4706
                 ARGLIST and in FOUND so as to avoid comparing the
4707
                 last set of arguments.  */
4708
              TREE_VEC_LENGTH (arglist)--;
4709
              TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
4710
 
4711
              /* See if the arguments match.  If they do, then TMPL is
4712
                 the partial instantiation we want.  */
4713
              success = comp_template_args (TREE_PURPOSE (found), arglist);
4714
 
4715
              /* Restore the argument vectors to their full size.  */
4716
              TREE_VEC_LENGTH (arglist)++;
4717
              TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
4718
 
4719
              if (success)
4720
                {
4721
                  found = tmpl;
4722
                  break;
4723
                }
4724
            }
4725
 
4726
          if (!found)
4727
            {
4728
              /* There was no partial instantiation. This happens
4729
                 where C<T> is a member template of A<T> and it's used
4730
                 in something like
4731
 
4732
                  template <typename T> struct B { A<T>::C<int> m; };
4733
                  B<float>;
4734
 
4735
                 Create the partial instantiation.
4736
               */
4737
              TREE_VEC_LENGTH (arglist)--;
4738
              found = tsubst (template, arglist, complain, NULL_TREE);
4739
              TREE_VEC_LENGTH (arglist)++;
4740
            }
4741
        }
4742
 
4743
      SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
4744
      DECL_TEMPLATE_INSTANTIATIONS (template)
4745
        = tree_cons (arglist, t,
4746
                     DECL_TEMPLATE_INSTANTIATIONS (template));
4747
 
4748
      if (TREE_CODE (t) == ENUMERAL_TYPE
4749
          && !is_partial_instantiation)
4750
        /* Now that the type has been registered on the instantiations
4751
           list, we set up the enumerators.  Because the enumeration
4752
           constants may involve the enumeration type itself, we make
4753
           sure to register the type first, and then create the
4754
           constants.  That way, doing tsubst_expr for the enumeration
4755
           constants won't result in recursive calls here; we'll find
4756
           the instantiation and exit above.  */
4757
        tsubst_enum (template_type, t, arglist);
4758
 
4759
      /* Reset the name of the type, now that CLASSTYPE_TEMPLATE_INFO
4760
         is set up.  */
4761
      if (TREE_CODE (t) != ENUMERAL_TYPE)
4762
        DECL_NAME (type_decl) = classtype_mangled_name (t);
4763
      if (is_partial_instantiation)
4764
        /* If the type makes use of template parameters, the
4765
           code that generates debugging information will crash.  */
4766
        DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
4767
 
4768
      POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
4769
    }
4770
  timevar_pop (TV_NAME_LOOKUP);
4771
}
4772
 
4773
struct pair_fn_data
4774
{
4775
  tree_fn_t fn;
4776
  void *data;
4777
  struct pointer_set_t *visited;
4778
};
4779
 
4780
/* Called from for_each_template_parm via walk_tree.  */
4781
 
4782
static tree
4783
for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
4784
{
4785
  tree t = *tp;
4786
  struct pair_fn_data *pfd = (struct pair_fn_data *) d;
4787
  tree_fn_t fn = pfd->fn;
4788
  void *data = pfd->data;
4789
 
4790
  if (TYPE_P (t)
4791
      && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited))
4792
    return error_mark_node;
4793
 
4794
  switch (TREE_CODE (t))
4795
    {
4796
    case RECORD_TYPE:
4797
      if (TYPE_PTRMEMFUNC_P (t))
4798
        break;
4799
      /* Fall through.  */
4800
 
4801
    case UNION_TYPE:
4802
    case ENUMERAL_TYPE:
4803
      if (!TYPE_TEMPLATE_INFO (t))
4804
        *walk_subtrees = 0;
4805
      else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
4806
                                       fn, data, pfd->visited))
4807
        return error_mark_node;
4808
      break;
4809
 
4810
    case METHOD_TYPE:
4811
      /* Since we're not going to walk subtrees, we have to do this
4812
         explicitly here.  */
4813
      if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
4814
                                  pfd->visited))
4815
        return error_mark_node;
4816
      /* Fall through.  */
4817
 
4818
    case FUNCTION_TYPE:
4819
      /* Check the return type.  */
4820
      if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
4821
        return error_mark_node;
4822
 
4823
      /* Check the parameter types.  Since default arguments are not
4824
         instantiated until they are needed, the TYPE_ARG_TYPES may
4825
         contain expressions that involve template parameters.  But,
4826
         no-one should be looking at them yet.  And, once they're
4827
         instantiated, they don't contain template parameters, so
4828
         there's no point in looking at them then, either.  */
4829
      {
4830
        tree parm;
4831
 
4832
        for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
4833
          if (for_each_template_parm (TREE_VALUE (parm), fn, data,
4834
                                      pfd->visited))
4835
            return error_mark_node;
4836
 
4837
        /* Since we've already handled the TYPE_ARG_TYPES, we don't
4838
           want walk_tree walking into them itself.  */
4839
        *walk_subtrees = 0;
4840
      }
4841
      break;
4842
 
4843
    case TYPEOF_TYPE:
4844
      if (for_each_template_parm (TYPE_FIELDS (t), fn, data,
4845
                                  pfd->visited))
4846
        return error_mark_node;
4847
      break;
4848
 
4849
    case FUNCTION_DECL:
4850
    case VAR_DECL:
4851
      if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
4852
          && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
4853
                                     pfd->visited))
4854
        return error_mark_node;
4855
      /* Fall through.  */
4856
 
4857
    case PARM_DECL:
4858
    case CONST_DECL:
4859
      if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
4860
          && for_each_template_parm (DECL_INITIAL (t), fn, data,
4861
                                     pfd->visited))
4862
        return error_mark_node;
4863
      if (DECL_CONTEXT (t)
4864
          && for_each_template_parm (DECL_CONTEXT (t), fn, data,
4865
                                     pfd->visited))
4866
        return error_mark_node;
4867
      break;
4868
 
4869
    case BOUND_TEMPLATE_TEMPLATE_PARM:
4870
      /* Record template parameters such as `T' inside `TT<T>'.  */
4871
      if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited))
4872
        return error_mark_node;
4873
      /* Fall through.  */
4874
 
4875
    case TEMPLATE_TEMPLATE_PARM:
4876
    case TEMPLATE_TYPE_PARM:
4877
    case TEMPLATE_PARM_INDEX:
4878
      if (fn && (*fn)(t, data))
4879
        return error_mark_node;
4880
      else if (!fn)
4881
        return error_mark_node;
4882
      break;
4883
 
4884
    case TEMPLATE_DECL:
4885
      /* A template template parameter is encountered.  */
4886
      if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
4887
          && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
4888
        return error_mark_node;
4889
 
4890
      /* Already substituted template template parameter */
4891
      *walk_subtrees = 0;
4892
      break;
4893
 
4894
    case TYPENAME_TYPE:
4895
      if (!fn
4896
          || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
4897
                                     data, pfd->visited))
4898
        return error_mark_node;
4899
      break;
4900
 
4901
    case CONSTRUCTOR:
4902
      if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
4903
          && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
4904
                                     (TREE_TYPE (t)), fn, data,
4905
                                     pfd->visited))
4906
        return error_mark_node;
4907
      break;
4908
 
4909
    case INDIRECT_REF:
4910
    case COMPONENT_REF:
4911
      /* If there's no type, then this thing must be some expression
4912
         involving template parameters.  */
4913
      if (!fn && !TREE_TYPE (t))
4914
        return error_mark_node;
4915
      break;
4916
 
4917
    case MODOP_EXPR:
4918
    case CAST_EXPR:
4919
    case REINTERPRET_CAST_EXPR:
4920
    case CONST_CAST_EXPR:
4921
    case STATIC_CAST_EXPR:
4922
    case DYNAMIC_CAST_EXPR:
4923
    case ARROW_EXPR:
4924
    case DOTSTAR_EXPR:
4925
    case TYPEID_EXPR:
4926
    case PSEUDO_DTOR_EXPR:
4927
      if (!fn)
4928
        return error_mark_node;
4929
      break;
4930
 
4931
    case BASELINK:
4932
      /* If we do not handle this case specially, we end up walking
4933
         the BINFO hierarchy, which is circular, and therefore
4934
         confuses walk_tree.  */
4935
      *walk_subtrees = 0;
4936
      if (for_each_template_parm (BASELINK_FUNCTIONS (*tp), fn, data,
4937
                                  pfd->visited))
4938
        return error_mark_node;
4939
      break;
4940
 
4941
    default:
4942
      break;
4943
    }
4944
 
4945
  /* We didn't find any template parameters we liked.  */
4946
  return NULL_TREE;
4947
}
4948
 
4949
/* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
4950
   BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
4951
   call FN with the parameter and the DATA.
4952
   If FN returns nonzero, the iteration is terminated, and
4953
   for_each_template_parm returns 1.  Otherwise, the iteration
4954
   continues.  If FN never returns a nonzero value, the value
4955
   returned by for_each_template_parm is 0.  If FN is NULL, it is
4956
   considered to be the function which always returns 1.  */
4957
 
4958
static int
4959
for_each_template_parm (tree t, tree_fn_t fn, void* data,
4960
                        struct pointer_set_t *visited)
4961
{
4962
  struct pair_fn_data pfd;
4963
  int result;
4964
 
4965
  /* Set up.  */
4966
  pfd.fn = fn;
4967
  pfd.data = data;
4968
 
4969
  /* Walk the tree.  (Conceptually, we would like to walk without
4970
     duplicates, but for_each_template_parm_r recursively calls
4971
     for_each_template_parm, so we would need to reorganize a fair
4972
     bit to use walk_tree_without_duplicates, so we keep our own
4973
     visited list.)  */
4974
  if (visited)
4975
    pfd.visited = visited;
4976
  else
4977
    pfd.visited = pointer_set_create ();
4978
  result = walk_tree (&t,
4979
                      for_each_template_parm_r,
4980
                      &pfd,
4981
                      pfd.visited) != NULL_TREE;
4982
 
4983
  /* Clean up.  */
4984
  if (!visited)
4985
    {
4986
      pointer_set_destroy (pfd.visited);
4987
      pfd.visited = 0;
4988
    }
4989
 
4990
  return result;
4991
}
4992
 
4993
/* Returns true if T depends on any template parameter.  */
4994
 
4995
int
4996
uses_template_parms (tree t)
4997
{
4998
  bool dependent_p;
4999
  int saved_processing_template_decl;
5000
 
5001
  saved_processing_template_decl = processing_template_decl;
5002
  if (!saved_processing_template_decl)
5003
    processing_template_decl = 1;
5004
  if (TYPE_P (t))
5005
    dependent_p = dependent_type_p (t);
5006
  else if (TREE_CODE (t) == TREE_VEC)
5007
    dependent_p = any_dependent_template_arguments_p (t);
5008
  else if (TREE_CODE (t) == TREE_LIST)
5009
    dependent_p = (uses_template_parms (TREE_VALUE (t))
5010
                   || uses_template_parms (TREE_CHAIN (t)));
5011
  else if (TREE_CODE (t) == TYPE_DECL)
5012
    dependent_p = dependent_type_p (TREE_TYPE (t));
5013
  else if (DECL_P (t)
5014
           || EXPR_P (t)
5015
           || TREE_CODE (t) == TEMPLATE_PARM_INDEX
5016
           || TREE_CODE (t) == OVERLOAD
5017
           || TREE_CODE (t) == BASELINK
5018
           || TREE_CODE (t) == IDENTIFIER_NODE
5019
           || CONSTANT_CLASS_P (t))
5020
    dependent_p = (type_dependent_expression_p (t)
5021
                   || value_dependent_expression_p (t));
5022
  else
5023
    {
5024
      gcc_assert (t == error_mark_node);
5025
      dependent_p = false;
5026
    }
5027
 
5028
  processing_template_decl = saved_processing_template_decl;
5029
 
5030
  return dependent_p;
5031
}
5032
 
5033
/* Returns true if T depends on any template parameter with level LEVEL.  */
5034
 
5035
int
5036
uses_template_parms_level (tree t, int level)
5037
{
5038
  return for_each_template_parm (t, template_parm_this_level_p, &level, NULL);
5039
}
5040
 
5041
static int tinst_depth;
5042
extern int max_tinst_depth;
5043
#ifdef GATHER_STATISTICS
5044
int depth_reached;
5045
#endif
5046
static int tinst_level_tick;
5047
static int last_template_error_tick;
5048
 
5049
/* We're starting to instantiate D; record the template instantiation context
5050
   for diagnostics and to restore it later.  */
5051
 
5052
int
5053
push_tinst_level (tree d)
5054
{
5055
  tree new;
5056
 
5057
  if (tinst_depth >= max_tinst_depth)
5058
    {
5059
      /* If the instantiation in question still has unbound template parms,
5060
         we don't really care if we can't instantiate it, so just return.
5061
         This happens with base instantiation for implicit `typename'.  */
5062
      if (uses_template_parms (d))
5063
        return 0;
5064
 
5065
      last_template_error_tick = tinst_level_tick;
5066
      error ("template instantiation depth exceeds maximum of %d (use "
5067
             "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
5068
             max_tinst_depth, d);
5069
 
5070
      print_instantiation_context ();
5071
 
5072
      return 0;
5073
    }
5074
 
5075
  new = make_node (TINST_LEVEL);
5076
  TINST_DECL (new) = d;
5077
  TINST_LOCATION (new) = input_location;
5078
  TINST_IN_SYSTEM_HEADER_P (new) = in_system_header;
5079
  TREE_CHAIN (new) = current_tinst_level;
5080
  current_tinst_level = new;
5081
 
5082
  ++tinst_depth;
5083
#ifdef GATHER_STATISTICS
5084
  if (tinst_depth > depth_reached)
5085
    depth_reached = tinst_depth;
5086
#endif
5087
 
5088
  ++tinst_level_tick;
5089
  return 1;
5090
}
5091
 
5092
/* We're done instantiating this template; return to the instantiation
5093
   context.  */
5094
 
5095
void
5096
pop_tinst_level (void)
5097
{
5098
  tree old = current_tinst_level;
5099
 
5100
  /* Restore the filename and line number stashed away when we started
5101
     this instantiation.  */
5102
  input_location = TINST_LOCATION (old);
5103
  in_system_header = TINST_IN_SYSTEM_HEADER_P (old);
5104
  current_tinst_level = TREE_CHAIN (old);
5105
  --tinst_depth;
5106
  ++tinst_level_tick;
5107
}
5108
 
5109
/* We're instantiating a deferred template; restore the template
5110
   instantiation context in which the instantiation was requested, which
5111
   is one step out from LEVEL.  */
5112
 
5113
static void
5114
reopen_tinst_level (tree level)
5115
{
5116
  tree t;
5117
 
5118
  tinst_depth = 0;
5119
  for (t = level; t; t = TREE_CHAIN (t))
5120
    ++tinst_depth;
5121
 
5122
  current_tinst_level = level;
5123
  pop_tinst_level ();
5124
}
5125
 
5126
/* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
5127
   vector of template arguments, as for tsubst.
5128
 
5129
   Returns an appropriate tsubst'd friend declaration.  */
5130
 
5131
static tree
5132
tsubst_friend_function (tree decl, tree args)
5133
{
5134
  tree new_friend;
5135
 
5136
  if (TREE_CODE (decl) == FUNCTION_DECL
5137
      && DECL_TEMPLATE_INSTANTIATION (decl)
5138
      && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
5139
    /* This was a friend declared with an explicit template
5140
       argument list, e.g.:
5141
 
5142
       friend void f<>(T);
5143
 
5144
       to indicate that f was a template instantiation, not a new
5145
       function declaration.  Now, we have to figure out what
5146
       instantiation of what template.  */
5147
    {
5148
      tree template_id, arglist, fns;
5149
      tree new_args;
5150
      tree tmpl;
5151
      tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
5152
 
5153
      /* Friend functions are looked up in the containing namespace scope.
5154
         We must enter that scope, to avoid finding member functions of the
5155
         current cless with same name.  */
5156
      push_nested_namespace (ns);
5157
      fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
5158
                         tf_error | tf_warning, NULL_TREE);
5159
      pop_nested_namespace (ns);
5160
      arglist = tsubst (DECL_TI_ARGS (decl), args,
5161
                        tf_error | tf_warning, NULL_TREE);
5162
      template_id = lookup_template_function (fns, arglist);
5163
 
5164
      new_friend = tsubst (decl, args, tf_error | tf_warning, NULL_TREE);
5165
      tmpl = determine_specialization (template_id, new_friend,
5166
                                       &new_args,
5167
                                       /*need_member_template=*/0,
5168
                                       TREE_VEC_LENGTH (args));
5169
      return instantiate_template (tmpl, new_args, tf_error);
5170
    }
5171
 
5172
  new_friend = tsubst (decl, args, tf_error | tf_warning, NULL_TREE);
5173
 
5174
  /* The NEW_FRIEND will look like an instantiation, to the
5175
     compiler, but is not an instantiation from the point of view of
5176
     the language.  For example, we might have had:
5177
 
5178
     template <class T> struct S {
5179
       template <class U> friend void f(T, U);
5180
     };
5181
 
5182
     Then, in S<int>, template <class U> void f(int, U) is not an
5183
     instantiation of anything.  */
5184
  if (new_friend == error_mark_node)
5185
    return error_mark_node;
5186
 
5187
  DECL_USE_TEMPLATE (new_friend) = 0;
5188
  if (TREE_CODE (decl) == TEMPLATE_DECL)
5189
    {
5190
      DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
5191
      DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
5192
        = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
5193
    }
5194
 
5195
  /* The mangled name for the NEW_FRIEND is incorrect.  The function
5196
     is not a template instantiation and should not be mangled like
5197
     one.  Therefore, we forget the mangling here; we'll recompute it
5198
     later if we need it.  */
5199
  if (TREE_CODE (new_friend) != TEMPLATE_DECL)
5200
    {
5201
      SET_DECL_RTL (new_friend, NULL_RTX);
5202
      SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
5203
    }
5204
 
5205
  if (DECL_NAMESPACE_SCOPE_P (new_friend))
5206
    {
5207
      tree old_decl;
5208
      tree new_friend_template_info;
5209
      tree new_friend_result_template_info;
5210
      tree ns;
5211
      int  new_friend_is_defn;
5212
 
5213
      /* We must save some information from NEW_FRIEND before calling
5214
         duplicate decls since that function will free NEW_FRIEND if
5215
         possible.  */
5216
      new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
5217
      new_friend_is_defn =
5218
            (DECL_INITIAL (DECL_TEMPLATE_RESULT
5219
                           (template_for_substitution (new_friend)))
5220
             != NULL_TREE);
5221
      if (TREE_CODE (new_friend) == TEMPLATE_DECL)
5222
        {
5223
          /* This declaration is a `primary' template.  */
5224
          DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
5225
 
5226
          new_friend_result_template_info
5227
            = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
5228
        }
5229
      else
5230
        new_friend_result_template_info = NULL_TREE;
5231
 
5232
      /* Inside pushdecl_namespace_level, we will push into the
5233
         current namespace. However, the friend function should go
5234
         into the namespace of the template.  */
5235
      ns = decl_namespace_context (new_friend);
5236
      push_nested_namespace (ns);
5237
      old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
5238
      pop_nested_namespace (ns);
5239
 
5240
      if (old_decl != new_friend)
5241
        {
5242
          /* This new friend declaration matched an existing
5243
             declaration.  For example, given:
5244
 
5245
               template <class T> void f(T);
5246
               template <class U> class C {
5247
                 template <class T> friend void f(T) {}
5248
               };
5249
 
5250
             the friend declaration actually provides the definition
5251
             of `f', once C has been instantiated for some type.  So,
5252
             old_decl will be the out-of-class template declaration,
5253
             while new_friend is the in-class definition.
5254
 
5255
             But, if `f' was called before this point, the
5256
             instantiation of `f' will have DECL_TI_ARGS corresponding
5257
             to `T' but not to `U', references to which might appear
5258
             in the definition of `f'.  Previously, the most general
5259
             template for an instantiation of `f' was the out-of-class
5260
             version; now it is the in-class version.  Therefore, we
5261
             run through all specialization of `f', adding to their
5262
             DECL_TI_ARGS appropriately.  In particular, they need a
5263
             new set of outer arguments, corresponding to the
5264
             arguments for this class instantiation.
5265
 
5266
             The same situation can arise with something like this:
5267
 
5268
               friend void f(int);
5269
               template <class T> class C {
5270
                 friend void f(T) {}
5271
               };
5272
 
5273
             when `C<int>' is instantiated.  Now, `f(int)' is defined
5274
             in the class.  */
5275
 
5276
          if (!new_friend_is_defn)
5277
            /* On the other hand, if the in-class declaration does
5278
               *not* provide a definition, then we don't want to alter
5279
               existing definitions.  We can just leave everything
5280
               alone.  */
5281
            ;
5282
          else
5283
            {
5284
              /* Overwrite whatever template info was there before, if
5285
                 any, with the new template information pertaining to
5286
                 the declaration.  */
5287
              DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
5288
 
5289
              if (TREE_CODE (old_decl) != TEMPLATE_DECL)
5290
                reregister_specialization (new_friend,
5291
                                           most_general_template (old_decl),
5292
                                           old_decl);
5293
              else
5294
                {
5295
                  tree t;
5296
                  tree new_friend_args;
5297
 
5298
                  DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
5299
                    = new_friend_result_template_info;
5300
 
5301
                  new_friend_args = TI_ARGS (new_friend_template_info);
5302
                  for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
5303
                       t != NULL_TREE;
5304
                       t = TREE_CHAIN (t))
5305
                    {
5306
                      tree spec = TREE_VALUE (t);
5307
 
5308
                      DECL_TI_ARGS (spec)
5309
                        = add_outermost_template_args (new_friend_args,
5310
                                                       DECL_TI_ARGS (spec));
5311
                    }
5312
 
5313
                  /* Now, since specializations are always supposed to
5314
                     hang off of the most general template, we must move
5315
                     them.  */
5316
                  t = most_general_template (old_decl);
5317
                  if (t != old_decl)
5318
                    {
5319
                      DECL_TEMPLATE_SPECIALIZATIONS (t)
5320
                        = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
5321
                                   DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
5322
                      DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
5323
                    }
5324
                }
5325
            }
5326
 
5327
          /* The information from NEW_FRIEND has been merged into OLD_DECL
5328
             by duplicate_decls.  */
5329
          new_friend = old_decl;
5330
        }
5331
    }
5332
  else
5333
    {
5334
      tree context = DECL_CONTEXT (new_friend);
5335
      bool dependent_p;
5336
 
5337
      /* In the code
5338
           template <class T> class C {
5339
             template <class U> friend void C1<U>::f (); // case 1
5340
             friend void C2<T>::f ();                    // case 2
5341
           };
5342
         we only need to make sure CONTEXT is a complete type for
5343
         case 2.  To distinguish between the two cases, we note that
5344
         CONTEXT of case 1 remains dependent type after tsubst while
5345
         this isn't true for case 2.  */
5346
      ++processing_template_decl;
5347
      dependent_p = dependent_type_p (context);
5348
      --processing_template_decl;
5349
 
5350
      if (!dependent_p
5351
          && !complete_type_or_else (context, NULL_TREE))
5352
        return error_mark_node;
5353
 
5354
      if (COMPLETE_TYPE_P (context))
5355
        {
5356
          /* Check to see that the declaration is really present, and,
5357
             possibly obtain an improved declaration.  */
5358
          tree fn = check_classfn (context,
5359
                                   new_friend, NULL_TREE);
5360
 
5361
          if (fn)
5362
            new_friend = fn;
5363
        }
5364
    }
5365
 
5366
  return new_friend;
5367
}
5368
 
5369
/* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
5370
   template arguments, as for tsubst.
5371
 
5372
   Returns an appropriate tsubst'd friend type or error_mark_node on
5373
   failure.  */
5374
 
5375
static tree
5376
tsubst_friend_class (tree friend_tmpl, tree args)
5377
{
5378
  tree friend_type;
5379
  tree tmpl;
5380
  tree context;
5381
 
5382
  context = DECL_CONTEXT (friend_tmpl);
5383
 
5384
  if (context)
5385
    {
5386
      if (TREE_CODE (context) == NAMESPACE_DECL)
5387
        push_nested_namespace (context);
5388
      else
5389
        push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
5390
    }
5391
 
5392
  /* First, we look for a class template.  */
5393
  tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/0);
5394
 
5395
  /* But, if we don't find one, it might be because we're in a
5396
     situation like this:
5397
 
5398
       template <class T>
5399
       struct S {
5400
         template <class U>
5401
         friend struct S;
5402
       };
5403
 
5404
     Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
5405
     for `S<int>', not the TEMPLATE_DECL.  */
5406
  if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5407
    {
5408
      tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/1);
5409
      tmpl = maybe_get_template_decl_from_type_decl (tmpl);
5410
    }
5411
 
5412
  if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
5413
    {
5414
      /* The friend template has already been declared.  Just
5415
         check to see that the declarations match, and install any new
5416
         default parameters.  We must tsubst the default parameters,
5417
         of course.  We only need the innermost template parameters
5418
         because that is all that redeclare_class_template will look
5419
         at.  */
5420
      if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
5421
          > TMPL_ARGS_DEPTH (args))
5422
        {
5423
          tree parms;
5424
          parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
5425
                                         args, tf_error | tf_warning);
5426
          redeclare_class_template (TREE_TYPE (tmpl), parms);
5427
        }
5428
 
5429
      friend_type = TREE_TYPE (tmpl);
5430
    }
5431
  else
5432
    {
5433
      /* The friend template has not already been declared.  In this
5434
         case, the instantiation of the template class will cause the
5435
         injection of this template into the global scope.  */
5436
      tmpl = tsubst (friend_tmpl, args, tf_error | tf_warning, NULL_TREE);
5437
 
5438
      /* The new TMPL is not an instantiation of anything, so we
5439
         forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
5440
         the new type because that is supposed to be the corresponding
5441
         template decl, i.e., TMPL.  */
5442
      DECL_USE_TEMPLATE (tmpl) = 0;
5443
      DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
5444
      CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
5445
      CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
5446
        = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
5447
 
5448
      /* Inject this template into the global scope.  */
5449
      friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
5450
    }
5451
 
5452
  if (context)
5453
    {
5454
      if (TREE_CODE (context) == NAMESPACE_DECL)
5455
        pop_nested_namespace (context);
5456
      else
5457
        pop_nested_class ();
5458
    }
5459
 
5460
  return friend_type;
5461
}
5462
 
5463
/* Returns zero if TYPE cannot be completed later due to circularity.
5464
   Otherwise returns one.  */
5465
 
5466
static int
5467
can_complete_type_without_circularity (tree type)
5468
{
5469
  if (type == NULL_TREE || type == error_mark_node)
5470
    return 0;
5471
  else if (COMPLETE_TYPE_P (type))
5472
    return 1;
5473
  else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
5474
    return can_complete_type_without_circularity (TREE_TYPE (type));
5475
  else if (CLASS_TYPE_P (type)
5476
           && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
5477
    return 0;
5478
  else
5479
    return 1;
5480
}
5481
 
5482
tree
5483
instantiate_class_template (tree type)
5484
{
5485
  tree template, args, pattern, t, member;
5486
  tree typedecl;
5487
  tree pbinfo;
5488
  tree base_list;
5489
 
5490
  if (type == error_mark_node)
5491
    return error_mark_node;
5492
 
5493
  if (TYPE_BEING_DEFINED (type)
5494
      || COMPLETE_TYPE_P (type)
5495
      || dependent_type_p (type))
5496
    return type;
5497
 
5498
  /* Figure out which template is being instantiated.  */
5499
  template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
5500
  gcc_assert (TREE_CODE (template) == TEMPLATE_DECL);
5501
 
5502
  /* Determine what specialization of the original template to
5503
     instantiate.  */
5504
  t = most_specialized_class (type, template);
5505
  if (t == error_mark_node)
5506
    {
5507
      TYPE_BEING_DEFINED (type) = 1;
5508
      return error_mark_node;
5509
    }
5510
  else if (t)
5511
    {
5512
      /* This TYPE is actually an instantiation of a partial
5513
         specialization.  We replace the innermost set of ARGS with
5514
         the arguments appropriate for substitution.  For example,
5515
         given:
5516
 
5517
           template <class T> struct S {};
5518
           template <class T> struct S<T*> {};
5519
 
5520
         and supposing that we are instantiating S<int*>, ARGS will
5521
         presently be {int*} -- but we need {int}.  */
5522
      pattern = TREE_TYPE (t);
5523
      args = TREE_PURPOSE (t);
5524
    }
5525
  else
5526
    {
5527
      pattern = TREE_TYPE (template);
5528
      args = CLASSTYPE_TI_ARGS (type);
5529
    }
5530
 
5531
  /* If the template we're instantiating is incomplete, then clearly
5532
     there's nothing we can do.  */
5533
  if (!COMPLETE_TYPE_P (pattern))
5534
    return type;
5535
 
5536
  /* If we've recursively instantiated too many templates, stop.  */
5537
  if (! push_tinst_level (type))
5538
    return type;
5539
 
5540
  /* Now we're really doing the instantiation.  Mark the type as in
5541
     the process of being defined.  */
5542
  TYPE_BEING_DEFINED (type) = 1;
5543
 
5544
  /* We may be in the middle of deferred access check.  Disable
5545
     it now.  */
5546
  push_deferring_access_checks (dk_no_deferred);
5547
 
5548
  push_to_top_level ();
5549
 
5550
  SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
5551
 
5552
  /* Set the input location to the template definition. This is needed
5553
     if tsubsting causes an error.  */
5554
  typedecl = TYPE_MAIN_DECL (type);
5555
  input_location = DECL_SOURCE_LOCATION (typedecl);
5556
  in_system_header = DECL_IN_SYSTEM_HEADER (typedecl);
5557
 
5558
  TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
5559
  TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
5560
  TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
5561
  TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
5562
  TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
5563
  TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
5564
  TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
5565
  TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
5566
  TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
5567
  TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
5568
  TYPE_PACKED (type) = TYPE_PACKED (pattern);
5569
  TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
5570
  TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
5571
  TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
5572
  if (ANON_AGGR_TYPE_P (pattern))
5573
    SET_ANON_AGGR_TYPE_P (type);
5574
  if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
5575
    {
5576
      CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
5577
      CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
5578
    }
5579
 
5580
  pbinfo = TYPE_BINFO (pattern);
5581
 
5582
  /* We should never instantiate a nested class before its enclosing
5583
     class; we need to look up the nested class by name before we can
5584
     instantiate it, and that lookup should instantiate the enclosing
5585
     class.  */
5586
  gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
5587
              || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
5588
              || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
5589
 
5590
  base_list = NULL_TREE;
5591
  if (BINFO_N_BASE_BINFOS (pbinfo))
5592
    {
5593
      tree pbase_binfo;
5594
      tree context = TYPE_CONTEXT (type);
5595
      tree pushed_scope;
5596
      int i;
5597
 
5598
      /* We must enter the scope containing the type, as that is where
5599
         the accessibility of types named in dependent bases are
5600
         looked up from.  */
5601
      pushed_scope = push_scope (context ? context : global_namespace);
5602
 
5603
      /* Substitute into each of the bases to determine the actual
5604
         basetypes.  */
5605
      for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
5606
        {
5607
          tree base;
5608
          tree access = BINFO_BASE_ACCESS (pbinfo, i);
5609
 
5610
          /* Substitute to figure out the base class.  */
5611
          base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, NULL_TREE);
5612
          if (base == error_mark_node)
5613
            continue;
5614
 
5615
          base_list = tree_cons (access, base, base_list);
5616
          if (BINFO_VIRTUAL_P (pbase_binfo))
5617
            TREE_TYPE (base_list) = integer_type_node;
5618
        }
5619
 
5620
      /* The list is now in reverse order; correct that.  */
5621
      base_list = nreverse (base_list);
5622
 
5623
      if (pushed_scope)
5624
        pop_scope (pushed_scope);
5625
    }
5626
  /* Now call xref_basetypes to set up all the base-class
5627
     information.  */
5628
  xref_basetypes (type, base_list);
5629
 
5630
 
5631
  /* Now that our base classes are set up, enter the scope of the
5632
     class, so that name lookups into base classes, etc. will work
5633
     correctly.  This is precisely analogous to what we do in
5634
     begin_class_definition when defining an ordinary non-template
5635
     class.  */
5636
  pushclass (type);
5637
 
5638
  /* Now members are processed in the order of declaration.  */
5639
  for (member = CLASSTYPE_DECL_LIST (pattern);
5640
       member; member = TREE_CHAIN (member))
5641
    {
5642
      tree t = TREE_VALUE (member);
5643
 
5644
      if (TREE_PURPOSE (member))
5645
        {
5646
          if (TYPE_P (t))
5647
            {
5648
              /* Build new CLASSTYPE_NESTED_UTDS.  */
5649
 
5650
              tree tag = t;
5651
              tree name = TYPE_IDENTIFIER (tag);
5652
              tree newtag;
5653
              bool class_template_p;
5654
 
5655
              class_template_p = (TREE_CODE (tag) != ENUMERAL_TYPE
5656
                                  && TYPE_LANG_SPECIFIC (tag)
5657
                                  && CLASSTYPE_IS_TEMPLATE (tag));
5658
              /* If the member is a class template, then -- even after
5659
                 substitution -- there may be dependent types in the
5660
                 template argument list for the class.  We increment
5661
                 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
5662
                 that function will assume that no types are dependent
5663
                 when outside of a template.  */
5664
              if (class_template_p)
5665
                ++processing_template_decl;
5666
              newtag = tsubst (tag, args, tf_error, NULL_TREE);
5667
              if (class_template_p)
5668
                --processing_template_decl;
5669
              if (newtag == error_mark_node)
5670
                continue;
5671
 
5672
              if (TREE_CODE (newtag) != ENUMERAL_TYPE)
5673
                {
5674
                  if (class_template_p)
5675
                    /* Unfortunately, lookup_template_class sets
5676
                       CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
5677
                       instantiation (i.e., for the type of a member
5678
                       template class nested within a template class.)
5679
                       This behavior is required for
5680
                       maybe_process_partial_specialization to work
5681
                       correctly, but is not accurate in this case;
5682
                       the TAG is not an instantiation of anything.
5683
                       (The corresponding TEMPLATE_DECL is an
5684
                       instantiation, but the TYPE is not.) */
5685
                    CLASSTYPE_USE_TEMPLATE (newtag) = 0;
5686
 
5687
                  /* Now, we call pushtag to put this NEWTAG into the scope of
5688
                     TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
5689
                     pushtag calling push_template_decl.  We don't have to do
5690
                     this for enums because it will already have been done in
5691
                     tsubst_enum.  */
5692
                  if (name)
5693
                    SET_IDENTIFIER_TYPE_VALUE (name, newtag);
5694
                  pushtag (name, newtag, /*tag_scope=*/ts_current);
5695
                }
5696
            }
5697
          else if (TREE_CODE (t) == FUNCTION_DECL
5698
                   || DECL_FUNCTION_TEMPLATE_P (t))
5699
            {
5700
              /* Build new TYPE_METHODS.  */
5701
              tree r;
5702
 
5703
              if (TREE_CODE (t) == TEMPLATE_DECL)
5704
                ++processing_template_decl;
5705
              r = tsubst (t, args, tf_error, NULL_TREE);
5706
              if (TREE_CODE (t) == TEMPLATE_DECL)
5707
                --processing_template_decl;
5708
              set_current_access_from_decl (r);
5709
              grok_special_member_properties (r);
5710
              finish_member_declaration (r);
5711
            }
5712
          else
5713
            {
5714
              /* Build new TYPE_FIELDS.  */
5715
 
5716
              if (TREE_CODE (t) != CONST_DECL)
5717
                {
5718
                  tree r;
5719
 
5720
                  /* The the file and line for this declaration, to
5721
                     assist in error message reporting.  Since we
5722
                     called push_tinst_level above, we don't need to
5723
                     restore these.  */
5724
                  input_location = DECL_SOURCE_LOCATION (t);
5725
 
5726
                  if (TREE_CODE (t) == TEMPLATE_DECL)
5727
                    ++processing_template_decl;
5728
                  r = tsubst (t, args, tf_error | tf_warning, NULL_TREE);
5729
                  if (TREE_CODE (t) == TEMPLATE_DECL)
5730
                    --processing_template_decl;
5731
                  if (TREE_CODE (r) == VAR_DECL)
5732
                    {
5733
                      /* In [temp.inst]:
5734
 
5735
                           [t]he initialization (and any associated
5736
                           side-effects) of a static data member does
5737
                           not occur unless the static data member is
5738
                           itself used in a way that requires the
5739
                           definition of the static data member to
5740
                           exist.
5741
 
5742
                         Therefore, we do not substitute into the
5743
                         initialized for the static data member here.  */
5744
                      finish_static_data_member_decl
5745
                        (r,
5746
                         /*init=*/NULL_TREE,
5747
                         /*init_const_expr_p=*/false,
5748
                         /*asmspec_tree=*/NULL_TREE,
5749
                         /*flags=*/0);
5750
                      if (DECL_INITIALIZED_IN_CLASS_P (r))
5751
                        check_static_variable_definition (r, TREE_TYPE (r));
5752
                    }
5753
                  else if (TREE_CODE (r) == FIELD_DECL)
5754
                    {
5755
                      /* Determine whether R has a valid type and can be
5756
                         completed later.  If R is invalid, then it is
5757
                         replaced by error_mark_node so that it will not be
5758
                         added to TYPE_FIELDS.  */
5759
                      tree rtype = TREE_TYPE (r);
5760
                      if (can_complete_type_without_circularity (rtype))
5761
                        complete_type (rtype);
5762
 
5763
                      if (!COMPLETE_TYPE_P (rtype))
5764
                        {
5765
                          cxx_incomplete_type_error (r, rtype);
5766
                          r = error_mark_node;
5767
                        }
5768
                    }
5769
 
5770
                  /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
5771
                     such a thing will already have been added to the field
5772
                     list by tsubst_enum in finish_member_declaration in the
5773
                     CLASSTYPE_NESTED_UTDS case above.  */
5774
                  if (!(TREE_CODE (r) == TYPE_DECL
5775
                        && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
5776
                        && DECL_ARTIFICIAL (r)))
5777
                    {
5778
                      set_current_access_from_decl (r);
5779
                      finish_member_declaration (r);
5780
                    }
5781
                }
5782
            }
5783
        }
5784
      else
5785
        {
5786
          if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
5787
            {
5788
              /* Build new CLASSTYPE_FRIEND_CLASSES.  */
5789
 
5790
              tree friend_type = t;
5791
              bool adjust_processing_template_decl = false;
5792
 
5793
              if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5794
                {
5795
                  /* template <class T> friend class C;  */
5796
                  friend_type = tsubst_friend_class (friend_type, args);
5797
                  adjust_processing_template_decl = true;
5798
                }
5799
              else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
5800
                {
5801
                  /* template <class T> friend class C::D;  */
5802
                  friend_type = tsubst (friend_type, args,
5803
                                        tf_error | tf_warning, NULL_TREE);
5804
                  if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5805
                    friend_type = TREE_TYPE (friend_type);
5806
                  adjust_processing_template_decl = true;
5807
                }
5808
              else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
5809
                {
5810
                  /* This could be either
5811
 
5812
                       friend class T::C;
5813
 
5814
                     when dependent_type_p is false or
5815
 
5816
                       template <class U> friend class T::C;
5817
 
5818
                     otherwise.  */
5819
                  friend_type = tsubst (friend_type, args,
5820
                                        tf_error | tf_warning, NULL_TREE);
5821
                  /* Bump processing_template_decl for correct
5822
                     dependent_type_p calculation.  */
5823
                  ++processing_template_decl;
5824
                  if (dependent_type_p (friend_type))
5825
                    adjust_processing_template_decl = true;
5826
                  --processing_template_decl;
5827
                }
5828
              else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
5829
                       && hidden_name_p (TYPE_NAME (friend_type)))
5830
                {
5831
                  /* friend class C;
5832
 
5833
                     where C hasn't been declared yet.  Let's lookup name
5834
                     from namespace scope directly, bypassing any name that
5835
                     come from dependent base class.  */
5836
                  tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
5837
 
5838
                  /* The call to xref_tag_from_type does injection for friend
5839
                     classes.  */
5840
                  push_nested_namespace (ns);
5841
                  friend_type =
5842
                    xref_tag_from_type (friend_type, NULL_TREE,
5843
                                        /*tag_scope=*/ts_current);
5844
                  pop_nested_namespace (ns);
5845
                }
5846
              else if (uses_template_parms (friend_type))
5847
                /* friend class C<T>;  */
5848
                friend_type = tsubst (friend_type, args,
5849
                                      tf_error | tf_warning, NULL_TREE);
5850
              /* Otherwise it's
5851
 
5852
                   friend class C;
5853
 
5854
                 where C is already declared or
5855
 
5856
                   friend class C<int>;
5857
 
5858
                 We don't have to do anything in these cases.  */
5859
 
5860
              if (adjust_processing_template_decl)
5861
                /* Trick make_friend_class into realizing that the friend
5862
                   we're adding is a template, not an ordinary class.  It's
5863
                   important that we use make_friend_class since it will
5864
                   perform some error-checking and output cross-reference
5865
                   information.  */
5866
                ++processing_template_decl;
5867
 
5868
              if (friend_type != error_mark_node)
5869
                make_friend_class (type, friend_type, /*complain=*/false);
5870
 
5871
              if (adjust_processing_template_decl)
5872
                --processing_template_decl;
5873
            }
5874
          else
5875
            {
5876
              /* Build new DECL_FRIENDLIST.  */
5877
              tree r;
5878
 
5879
              /* The the file and line for this declaration, to
5880
                 assist in error message reporting.  Since we
5881
                 called push_tinst_level above, we don't need to
5882
                 restore these.  */
5883
              input_location = DECL_SOURCE_LOCATION (t);
5884
 
5885
              if (TREE_CODE (t) == TEMPLATE_DECL)
5886
                {
5887
                  ++processing_template_decl;
5888
                  push_deferring_access_checks (dk_no_check);
5889
                }
5890
 
5891
              r = tsubst_friend_function (t, args);
5892
              add_friend (type, r, /*complain=*/false);
5893
              if (TREE_CODE (t) == TEMPLATE_DECL)
5894
                {
5895
                  pop_deferring_access_checks ();
5896
                  --processing_template_decl;
5897
                }
5898
            }
5899
        }
5900
    }
5901
 
5902
  /* Set the file and line number information to whatever is given for
5903
     the class itself.  This puts error messages involving generated
5904
     implicit functions at a predictable point, and the same point
5905
     that would be used for non-template classes.  */
5906
  input_location = DECL_SOURCE_LOCATION (typedecl);
5907
 
5908
  unreverse_member_declarations (type);
5909
  finish_struct_1 (type);
5910
  TYPE_BEING_DEFINED (type) = 0;
5911
 
5912
  /* Now that the class is complete, instantiate default arguments for
5913
     any member functions.  We don't do this earlier because the
5914
     default arguments may reference members of the class.  */
5915
  if (!PRIMARY_TEMPLATE_P (template))
5916
    for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
5917
      if (TREE_CODE (t) == FUNCTION_DECL
5918
          /* Implicitly generated member functions will not have template
5919
             information; they are not instantiations, but instead are
5920
             created "fresh" for each instantiation.  */
5921
          && DECL_TEMPLATE_INFO (t))
5922
        tsubst_default_arguments (t);
5923
 
5924
  popclass ();
5925
  pop_from_top_level ();
5926
  pop_deferring_access_checks ();
5927
  pop_tinst_level ();
5928
 
5929
  /* The vtable for a template class can be emitted in any translation
5930
     unit in which the class is instantiated.  When there is no key
5931
     method, however, finish_struct_1 will already have added TYPE to
5932
     the keyed_classes list.  */
5933
  if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
5934
    keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
5935
 
5936
  return type;
5937
}
5938
 
5939
static tree
5940
tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
5941
{
5942
  tree r;
5943
 
5944
  if (!t)
5945
    r = t;
5946
  else if (TYPE_P (t))
5947
    r = tsubst (t, args, complain, in_decl);
5948
  else
5949
    {
5950
      r = tsubst_expr (t, args, complain, in_decl);
5951
      r = fold_non_dependent_expr (r);
5952
    }
5953
  return r;
5954
}
5955
 
5956
/* Substitute ARGS into the vector or list of template arguments T.  */
5957
 
5958
static tree
5959
tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
5960
{
5961
  int len = TREE_VEC_LENGTH (t);
5962
  int need_new = 0, i;
5963
  tree *elts = alloca (len * sizeof (tree));
5964
 
5965
  for (i = 0; i < len; i++)
5966
    {
5967
      tree orig_arg = TREE_VEC_ELT (t, i);
5968
      tree new_arg;
5969
 
5970
      if (TREE_CODE (orig_arg) == TREE_VEC)
5971
        new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
5972
      else
5973
        new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
5974
 
5975
      if (new_arg == error_mark_node)
5976
        return error_mark_node;
5977
 
5978
      elts[i] = new_arg;
5979
      if (new_arg != orig_arg)
5980
        need_new = 1;
5981
    }
5982
 
5983
  if (!need_new)
5984
    return t;
5985
 
5986
  t = make_tree_vec (len);
5987
  for (i = 0; i < len; i++)
5988
    TREE_VEC_ELT (t, i) = elts[i];
5989
 
5990
  return t;
5991
}
5992
 
5993
/* Return the result of substituting ARGS into the template parameters
5994
   given by PARMS.  If there are m levels of ARGS and m + n levels of
5995
   PARMS, then the result will contain n levels of PARMS.  For
5996
   example, if PARMS is `template <class T> template <class U>
5997
   template <T*, U, class V>' and ARGS is {{int}, {double}} then the
5998
   result will be `template <int*, double, class V>'.  */
5999
 
6000
static tree
6001
tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
6002
{
6003
  tree r = NULL_TREE;
6004
  tree* new_parms;
6005
 
6006
  /* When substituting into a template, we must set
6007
     PROCESSING_TEMPLATE_DECL as the template parameters may be
6008
     dependent if they are based on one-another, and the dependency
6009
     predicates are short-circuit outside of templates.  */
6010
  ++processing_template_decl;
6011
 
6012
  for (new_parms = &r;
6013
       TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
6014
       new_parms = &(TREE_CHAIN (*new_parms)),
6015
         parms = TREE_CHAIN (parms))
6016
    {
6017
      tree new_vec =
6018
        make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
6019
      int i;
6020
 
6021
      for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
6022
        {
6023
          tree tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
6024
          tree default_value = TREE_PURPOSE (tuple);
6025
          tree parm_decl = TREE_VALUE (tuple);
6026
 
6027
          parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
6028
          if (TREE_CODE (parm_decl) == PARM_DECL
6029
              && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
6030
            parm_decl = error_mark_node;
6031
          default_value = tsubst_template_arg (default_value, args,
6032
                                               complain, NULL_TREE);
6033
 
6034
          tuple = build_tree_list (default_value, parm_decl);
6035
          TREE_VEC_ELT (new_vec, i) = tuple;
6036
        }
6037
 
6038
      *new_parms =
6039
        tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
6040
                             - TMPL_ARGS_DEPTH (args)),
6041
                   new_vec, NULL_TREE);
6042
    }
6043
 
6044
  --processing_template_decl;
6045
 
6046
  return r;
6047
}
6048
 
6049
/* Substitute the ARGS into the indicated aggregate (or enumeration)
6050
   type T.  If T is not an aggregate or enumeration type, it is
6051
   handled as if by tsubst.  IN_DECL is as for tsubst.  If
6052
   ENTERING_SCOPE is nonzero, T is the context for a template which
6053
   we are presently tsubst'ing.  Return the substituted value.  */
6054
 
6055
static tree
6056
tsubst_aggr_type (tree t,
6057
                  tree args,
6058
                  tsubst_flags_t complain,
6059
                  tree in_decl,
6060
                  int entering_scope)
6061
{
6062
  if (t == NULL_TREE)
6063
    return NULL_TREE;
6064
 
6065
  switch (TREE_CODE (t))
6066
    {
6067
    case RECORD_TYPE:
6068
      if (TYPE_PTRMEMFUNC_P (t))
6069
        return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
6070
 
6071
      /* Else fall through.  */
6072
    case ENUMERAL_TYPE:
6073
    case UNION_TYPE:
6074
      if (TYPE_TEMPLATE_INFO (t))
6075
        {
6076
          tree argvec;
6077
          tree context;
6078
          tree r;
6079
          bool saved_skip_evaluation;
6080
 
6081
          /* In "sizeof(X<I>)" we need to evaluate "I".  */
6082
          saved_skip_evaluation = skip_evaluation;
6083
          skip_evaluation = false;
6084
 
6085
          /* First, determine the context for the type we are looking
6086
             up.  */
6087
          context = TYPE_CONTEXT (t);
6088
          if (context)
6089
            context = tsubst_aggr_type (context, args, complain,
6090
                                        in_decl, /*entering_scope=*/1);
6091
 
6092
          /* Then, figure out what arguments are appropriate for the
6093
             type we are trying to find.  For example, given:
6094
 
6095
               template <class T> struct S;
6096
               template <class T, class U> void f(T, U) { S<U> su; }
6097
 
6098
             and supposing that we are instantiating f<int, double>,
6099
             then our ARGS will be {int, double}, but, when looking up
6100
             S we only want {double}.  */
6101
          argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
6102
                                         complain, in_decl);
6103
          if (argvec == error_mark_node)
6104
            r = error_mark_node;
6105
          else
6106
            {
6107
              r = lookup_template_class (t, argvec, in_decl, context,
6108
                                         entering_scope, complain);
6109
              r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
6110
            }
6111
 
6112
          skip_evaluation = saved_skip_evaluation;
6113
 
6114
          return r;
6115
        }
6116
      else
6117
        /* This is not a template type, so there's nothing to do.  */
6118
        return t;
6119
 
6120
    default:
6121
      return tsubst (t, args, complain, in_decl);
6122
    }
6123
}
6124
 
6125
/* Substitute into the default argument ARG (a default argument for
6126
   FN), which has the indicated TYPE.  */
6127
 
6128
tree
6129
tsubst_default_argument (tree fn, tree type, tree arg)
6130
{
6131
  tree saved_class_ptr = NULL_TREE;
6132
  tree saved_class_ref = NULL_TREE;
6133
 
6134
  /* This default argument came from a template.  Instantiate the
6135
     default argument here, not in tsubst.  In the case of
6136
     something like:
6137
 
6138
       template <class T>
6139
       struct S {
6140
         static T t();
6141
         void f(T = t());
6142
       };
6143
 
6144
     we must be careful to do name lookup in the scope of S<T>,
6145
     rather than in the current class.  */
6146
  push_access_scope (fn);
6147
  /* The "this" pointer is not valid in a default argument.  */
6148
  if (cfun)
6149
    {
6150
      saved_class_ptr = current_class_ptr;
6151
      cp_function_chain->x_current_class_ptr = NULL_TREE;
6152
      saved_class_ref = current_class_ref;
6153
      cp_function_chain->x_current_class_ref = NULL_TREE;
6154
    }
6155
 
6156
  push_deferring_access_checks(dk_no_deferred);
6157
  /* The default argument expression may cause implicitly defined
6158
     member functions to be synthesized, which will result in garbage
6159
     collection.  We must treat this situation as if we were within
6160
     the body of function so as to avoid collecting live data on the
6161
      stack.  */
6162
  ++function_depth;
6163
  arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
6164
                     tf_error | tf_warning, NULL_TREE);
6165
  --function_depth;
6166
  pop_deferring_access_checks();
6167
 
6168
  /* Restore the "this" pointer.  */
6169
  if (cfun)
6170
    {
6171
      cp_function_chain->x_current_class_ptr = saved_class_ptr;
6172
      cp_function_chain->x_current_class_ref = saved_class_ref;
6173
    }
6174
 
6175
  pop_access_scope (fn);
6176
 
6177
  /* Make sure the default argument is reasonable.  */
6178
  arg = check_default_argument (type, arg);
6179
 
6180
  return arg;
6181
}
6182
 
6183
/* Substitute into all the default arguments for FN.  */
6184
 
6185
static void
6186
tsubst_default_arguments (tree fn)
6187
{
6188
  tree arg;
6189
  tree tmpl_args;
6190
 
6191
  tmpl_args = DECL_TI_ARGS (fn);
6192
 
6193
  /* If this function is not yet instantiated, we certainly don't need
6194
     its default arguments.  */
6195
  if (uses_template_parms (tmpl_args))
6196
    return;
6197
 
6198
  for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
6199
       arg;
6200
       arg = TREE_CHAIN (arg))
6201
    if (TREE_PURPOSE (arg))
6202
      TREE_PURPOSE (arg) = tsubst_default_argument (fn,
6203
                                                    TREE_VALUE (arg),
6204
                                                    TREE_PURPOSE (arg));
6205
}
6206
 
6207
/* Substitute the ARGS into the T, which is a _DECL.  Return the
6208
   result of the substitution.  Issue error and warning messages under
6209
   control of COMPLAIN.  */
6210
 
6211
static tree
6212
tsubst_decl (tree t, tree args, tsubst_flags_t complain)
6213
{
6214
  location_t saved_loc;
6215
  tree r = NULL_TREE;
6216
  tree in_decl = t;
6217
 
6218
  /* Set the filename and linenumber to improve error-reporting.  */
6219
  saved_loc = input_location;
6220
  input_location = DECL_SOURCE_LOCATION (t);
6221
 
6222
  switch (TREE_CODE (t))
6223
    {
6224
    case TEMPLATE_DECL:
6225
      {
6226
        /* We can get here when processing a member function template,
6227
           member class template, and template template parameter of
6228
           a template class.  */
6229
        tree decl = DECL_TEMPLATE_RESULT (t);
6230
        tree spec;
6231
        tree tmpl_args;
6232
        tree full_args;
6233
 
6234
        if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
6235
          {
6236
            /* Template template parameter is treated here.  */
6237
            tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6238
            if (new_type == error_mark_node)
6239
              return error_mark_node;
6240
 
6241
            r = copy_decl (t);
6242
            TREE_CHAIN (r) = NULL_TREE;
6243
            TREE_TYPE (r) = new_type;
6244
            DECL_TEMPLATE_RESULT (r)
6245
              = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
6246
            DECL_TEMPLATE_PARMS (r)
6247
              = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
6248
                                       complain);
6249
            TYPE_NAME (new_type) = r;
6250
            break;
6251
          }
6252
 
6253
        /* We might already have an instance of this template.
6254
           The ARGS are for the surrounding class type, so the
6255
           full args contain the tsubst'd args for the context,
6256
           plus the innermost args from the template decl.  */
6257
        tmpl_args = DECL_CLASS_TEMPLATE_P (t)
6258
          ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
6259
          : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
6260
        /* Because this is a template, the arguments will still be
6261
           dependent, even after substitution.  If
6262
           PROCESSING_TEMPLATE_DECL is not set, the dependency
6263
           predicates will short-circuit.  */
6264
        ++processing_template_decl;
6265
        full_args = tsubst_template_args (tmpl_args, args,
6266
                                          complain, in_decl);
6267
        --processing_template_decl;
6268
        if (full_args == error_mark_node)
6269
          return error_mark_node;
6270
 
6271
        /* tsubst_template_args doesn't copy the vector if
6272
           nothing changed.  But, *something* should have
6273
           changed.  */
6274
        gcc_assert (full_args != tmpl_args);
6275
 
6276
        spec = retrieve_specialization (t, full_args,
6277
                                        /*class_specializations_p=*/true);
6278
        if (spec != NULL_TREE)
6279
          {
6280
            r = spec;
6281
            break;
6282
          }
6283
 
6284
        /* Make a new template decl.  It will be similar to the
6285
           original, but will record the current template arguments.
6286
           We also create a new function declaration, which is just
6287
           like the old one, but points to this new template, rather
6288
           than the old one.  */
6289
        r = copy_decl (t);
6290
        gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
6291
        TREE_CHAIN (r) = NULL_TREE;
6292
 
6293
        DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
6294
 
6295
        if (TREE_CODE (decl) == TYPE_DECL)
6296
          {
6297
            tree new_type;
6298
            ++processing_template_decl;
6299
            new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6300
            --processing_template_decl;
6301
            if (new_type == error_mark_node)
6302
              return error_mark_node;
6303
 
6304
            TREE_TYPE (r) = new_type;
6305
            CLASSTYPE_TI_TEMPLATE (new_type) = r;
6306
            DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
6307
            DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
6308
            DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
6309
          }
6310
        else
6311
          {
6312
            tree new_decl;
6313
            ++processing_template_decl;
6314
            new_decl = tsubst (decl, args, complain, in_decl);
6315
            --processing_template_decl;
6316
            if (new_decl == error_mark_node)
6317
              return error_mark_node;
6318
 
6319
            DECL_TEMPLATE_RESULT (r) = new_decl;
6320
            DECL_TI_TEMPLATE (new_decl) = r;
6321
            TREE_TYPE (r) = TREE_TYPE (new_decl);
6322
            DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
6323
            DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
6324
          }
6325
 
6326
        SET_DECL_IMPLICIT_INSTANTIATION (r);
6327
        DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
6328
        DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
6329
 
6330
        /* The template parameters for this new template are all the
6331
           template parameters for the old template, except the
6332
           outermost level of parameters.  */
6333
        DECL_TEMPLATE_PARMS (r)
6334
          = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
6335
                                   complain);
6336
 
6337
        if (PRIMARY_TEMPLATE_P (t))
6338
          DECL_PRIMARY_TEMPLATE (r) = r;
6339
 
6340
        if (TREE_CODE (decl) != TYPE_DECL)
6341
          /* Record this non-type partial instantiation.  */
6342
          register_specialization (r, t,
6343
                                   DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
6344
                                   false);
6345
      }
6346
      break;
6347
 
6348
    case FUNCTION_DECL:
6349
      {
6350
        tree ctx;
6351
        tree argvec = NULL_TREE;
6352
        tree *friends;
6353
        tree gen_tmpl;
6354
        tree type;
6355
        int member;
6356
        int args_depth;
6357
        int parms_depth;
6358
 
6359
        /* Nobody should be tsubst'ing into non-template functions.  */
6360
        gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
6361
 
6362
        if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
6363
          {
6364
            tree spec;
6365
            bool dependent_p;
6366
 
6367
            /* If T is not dependent, just return it.  We have to
6368
               increment PROCESSING_TEMPLATE_DECL because
6369
               value_dependent_expression_p assumes that nothing is
6370
               dependent when PROCESSING_TEMPLATE_DECL is zero.  */
6371
            ++processing_template_decl;
6372
            dependent_p = value_dependent_expression_p (t);
6373
            --processing_template_decl;
6374
            if (!dependent_p)
6375
              return t;
6376
 
6377
            /* Calculate the most general template of which R is a
6378
               specialization, and the complete set of arguments used to
6379
               specialize R.  */
6380
            gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
6381
            argvec = tsubst_template_args (DECL_TI_ARGS
6382
                                           (DECL_TEMPLATE_RESULT (gen_tmpl)),
6383
                                           args, complain, in_decl);
6384
 
6385
            /* Check to see if we already have this specialization.  */
6386
            spec = retrieve_specialization (gen_tmpl, argvec,
6387
                                            /*class_specializations_p=*/false);
6388
 
6389
            if (spec)
6390
              {
6391
                r = spec;
6392
                break;
6393
              }
6394
 
6395
            /* We can see more levels of arguments than parameters if
6396
               there was a specialization of a member template, like
6397
               this:
6398
 
6399
                 template <class T> struct S { template <class U> void f(); }
6400
                 template <> template <class U> void S<int>::f(U);
6401
 
6402
               Here, we'll be substituting into the specialization,
6403
               because that's where we can find the code we actually
6404
               want to generate, but we'll have enough arguments for
6405
               the most general template.
6406
 
6407
               We also deal with the peculiar case:
6408
 
6409
                 template <class T> struct S {
6410
                   template <class U> friend void f();
6411
                 };
6412
                 template <class U> void f() {}
6413
                 template S<int>;
6414
                 template void f<double>();
6415
 
6416
               Here, the ARGS for the instantiation of will be {int,
6417
               double}.  But, we only need as many ARGS as there are
6418
               levels of template parameters in CODE_PATTERN.  We are
6419
               careful not to get fooled into reducing the ARGS in
6420
               situations like:
6421
 
6422
                 template <class T> struct S { template <class U> void f(U); }
6423
                 template <class T> template <> void S<T>::f(int) {}
6424
 
6425
               which we can spot because the pattern will be a
6426
               specialization in this case.  */
6427
            args_depth = TMPL_ARGS_DEPTH (args);
6428
            parms_depth =
6429
              TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
6430
            if (args_depth > parms_depth
6431
                && !DECL_TEMPLATE_SPECIALIZATION (t))
6432
              args = get_innermost_template_args (args, parms_depth);
6433
          }
6434
        else
6435
          {
6436
            /* This special case arises when we have something like this:
6437
 
6438
                 template <class T> struct S {
6439
                   friend void f<int>(int, double);
6440
                 };
6441
 
6442
               Here, the DECL_TI_TEMPLATE for the friend declaration
6443
               will be an IDENTIFIER_NODE.  We are being called from
6444
               tsubst_friend_function, and we want only to create a
6445
               new decl (R) with appropriate types so that we can call
6446
               determine_specialization.  */
6447
            gen_tmpl = NULL_TREE;
6448
          }
6449
 
6450
        if (DECL_CLASS_SCOPE_P (t))
6451
          {
6452
            if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
6453
              member = 2;
6454
            else
6455
              member = 1;
6456
            ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
6457
                                    complain, t, /*entering_scope=*/1);
6458
          }
6459
        else
6460
          {
6461
            member = 0;
6462
            ctx = DECL_CONTEXT (t);
6463
          }
6464
        type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6465
        if (type == error_mark_node)
6466
          return error_mark_node;
6467
 
6468
        /* We do NOT check for matching decls pushed separately at this
6469
           point, as they may not represent instantiations of this
6470
           template, and in any case are considered separate under the
6471
           discrete model.  */
6472
        r = copy_decl (t);
6473
        DECL_USE_TEMPLATE (r) = 0;
6474
        TREE_TYPE (r) = type;
6475
        /* Clear out the mangled name and RTL for the instantiation.  */
6476
        SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
6477
        SET_DECL_RTL (r, NULL_RTX);
6478
        DECL_INITIAL (r) = NULL_TREE;
6479
        DECL_CONTEXT (r) = ctx;
6480
 
6481
        if (member && DECL_CONV_FN_P (r))
6482
          /* Type-conversion operator.  Reconstruct the name, in
6483
             case it's the name of one of the template's parameters.  */
6484
          DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
6485
 
6486
        DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
6487
                                     complain, t);
6488
        DECL_RESULT (r) = NULL_TREE;
6489
 
6490
        TREE_STATIC (r) = 0;
6491
        TREE_PUBLIC (r) = TREE_PUBLIC (t);
6492
        DECL_EXTERNAL (r) = 1;
6493
        /* If this is an instantiation of a function with internal
6494
           linkage, we already know what object file linkage will be
6495
           assigned to the instantiation.  */
6496
        DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
6497
        DECL_DEFER_OUTPUT (r) = 0;
6498
        TREE_CHAIN (r) = NULL_TREE;
6499
        DECL_PENDING_INLINE_INFO (r) = 0;
6500
        DECL_PENDING_INLINE_P (r) = 0;
6501
        DECL_SAVED_TREE (r) = NULL_TREE;
6502
        TREE_USED (r) = 0;
6503
        if (DECL_CLONED_FUNCTION (r))
6504
          {
6505
            DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
6506
                                               args, complain, t);
6507
            TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
6508
            TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
6509
          }
6510
 
6511
        /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
6512
           this in the special friend case mentioned above where
6513
           GEN_TMPL is NULL.  */
6514
        if (gen_tmpl)
6515
          {
6516
            DECL_TEMPLATE_INFO (r)
6517
              = tree_cons (gen_tmpl, argvec, NULL_TREE);
6518
            SET_DECL_IMPLICIT_INSTANTIATION (r);
6519
            register_specialization (r, gen_tmpl, argvec, false);
6520
 
6521
            /* We're not supposed to instantiate default arguments
6522
               until they are called, for a template.  But, for a
6523
               declaration like:
6524
 
6525
                 template <class T> void f ()
6526
                 { extern void g(int i = T()); }
6527
 
6528
               we should do the substitution when the template is
6529
               instantiated.  We handle the member function case in
6530
               instantiate_class_template since the default arguments
6531
               might refer to other members of the class.  */
6532
            if (!member
6533
                && !PRIMARY_TEMPLATE_P (gen_tmpl)
6534
                && !uses_template_parms (argvec))
6535
              tsubst_default_arguments (r);
6536
          }
6537
        else
6538
          DECL_TEMPLATE_INFO (r) = NULL_TREE;
6539
 
6540
        /* Copy the list of befriending classes.  */
6541
        for (friends = &DECL_BEFRIENDING_CLASSES (r);
6542
             *friends;
6543
             friends = &TREE_CHAIN (*friends))
6544
          {
6545
            *friends = copy_node (*friends);
6546
            TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
6547
                                            args, complain,
6548
                                            in_decl);
6549
          }
6550
 
6551
        if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
6552
          {
6553
            maybe_retrofit_in_chrg (r);
6554
            if (DECL_CONSTRUCTOR_P (r))
6555
              grok_ctor_properties (ctx, r);
6556
            /* If this is an instantiation of a member template, clone it.
6557
               If it isn't, that'll be handled by
6558
               clone_constructors_and_destructors.  */
6559
            if (PRIMARY_TEMPLATE_P (gen_tmpl))
6560
              clone_function_decl (r, /*update_method_vec_p=*/0);
6561
          }
6562
        else if (IDENTIFIER_OPNAME_P (DECL_NAME (r)))
6563
          grok_op_properties (r, (complain & tf_error) != 0);
6564
 
6565
        if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
6566
          SET_DECL_FRIEND_CONTEXT (r,
6567
                                   tsubst (DECL_FRIEND_CONTEXT (t),
6568
                                            args, complain, in_decl));
6569
      }
6570
      break;
6571
 
6572
    case PARM_DECL:
6573
      {
6574
        tree type;
6575
 
6576
        r = copy_node (t);
6577
        if (DECL_TEMPLATE_PARM_P (t))
6578
          SET_DECL_TEMPLATE_PARM_P (r);
6579
 
6580
        type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6581
        type = type_decays_to (type);
6582
        TREE_TYPE (r) = type;
6583
        cp_apply_type_quals_to_decl (cp_type_quals (type), r);
6584
 
6585
        if (DECL_INITIAL (r))
6586
          {
6587
            if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
6588
              DECL_INITIAL (r) = TREE_TYPE (r);
6589
            else
6590
              DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
6591
                                         complain, in_decl);
6592
          }
6593
 
6594
        DECL_CONTEXT (r) = NULL_TREE;
6595
 
6596
        if (!DECL_TEMPLATE_PARM_P (r))
6597
          DECL_ARG_TYPE (r) = type_passed_as (type);
6598
        if (TREE_CHAIN (t))
6599
          TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
6600
                                   complain, TREE_CHAIN (t));
6601
      }
6602
      break;
6603
 
6604
    case FIELD_DECL:
6605
      {
6606
        tree type;
6607
 
6608
        r = copy_decl (t);
6609
        type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6610
        if (type == error_mark_node)
6611
          return error_mark_node;
6612
        TREE_TYPE (r) = type;
6613
        cp_apply_type_quals_to_decl (cp_type_quals (type), r);
6614
 
6615
        /* We don't have to set DECL_CONTEXT here; it is set by
6616
           finish_member_declaration.  */
6617
        DECL_INITIAL (r) = tsubst_expr (DECL_INITIAL (t), args,
6618
                                        complain, in_decl);
6619
        TREE_CHAIN (r) = NULL_TREE;
6620
        if (VOID_TYPE_P (type))
6621
          error ("instantiation of %q+D as type %qT", r, type);
6622
      }
6623
      break;
6624
 
6625
    case USING_DECL:
6626
      /* We reach here only for member using decls.  */
6627
      if (DECL_DEPENDENT_P (t))
6628
        {
6629
          r = do_class_using_decl
6630
            (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
6631
             tsubst_copy (DECL_NAME (t), args, complain, in_decl));
6632
          if (!r)
6633
            r = error_mark_node;
6634
        }
6635
      else
6636
        {
6637
          r = copy_node (t);
6638
          TREE_CHAIN (r) = NULL_TREE;
6639
        }
6640
      break;
6641
 
6642
    case TYPE_DECL:
6643
    case VAR_DECL:
6644
      {
6645
        tree argvec = NULL_TREE;
6646
        tree gen_tmpl = NULL_TREE;
6647
        tree spec;
6648
        tree tmpl = NULL_TREE;
6649
        tree ctx;
6650
        tree type = NULL_TREE;
6651
        int local_p;
6652
 
6653
        if (TREE_CODE (t) == TYPE_DECL)
6654
          {
6655
            type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6656
            if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
6657
                || t == TYPE_MAIN_DECL (TREE_TYPE (t)))
6658
              {
6659
                /* If this is the canonical decl, we don't have to
6660
                   mess with instantiations, and often we can't (for
6661
                   typename, template type parms and such).  Note that
6662
                   TYPE_NAME is not correct for the above test if
6663
                   we've copied the type for a typedef.  */
6664
                r = TYPE_NAME (type);
6665
                break;
6666
              }
6667
          }
6668
 
6669
        /* Assume this is a non-local variable.  */
6670
        local_p = 0;
6671
 
6672
        if (TYPE_P (CP_DECL_CONTEXT (t)))
6673
          ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
6674
                                  complain,
6675
                                  in_decl, /*entering_scope=*/1);
6676
        else if (DECL_NAMESPACE_SCOPE_P (t))
6677
          ctx = DECL_CONTEXT (t);
6678
        else
6679
          {
6680
            /* Subsequent calls to pushdecl will fill this in.  */
6681
            ctx = NULL_TREE;
6682
            local_p = 1;
6683
          }
6684
 
6685
        /* Check to see if we already have this specialization.  */
6686
        if (!local_p)
6687
          {
6688
            tmpl = DECL_TI_TEMPLATE (t);
6689
            gen_tmpl = most_general_template (tmpl);
6690
            argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
6691
            spec = retrieve_specialization (gen_tmpl, argvec,
6692
                                            /*class_specializations_p=*/false);
6693
          }
6694
        else
6695
          spec = retrieve_local_specialization (t);
6696
 
6697
        if (spec)
6698
          {
6699
            r = spec;
6700
            break;
6701
          }
6702
 
6703
        r = copy_decl (t);
6704
        if (TREE_CODE (r) == VAR_DECL)
6705
          {
6706
            /* Even if the original location is out of scope, the
6707
               newly substituted one is not.  */
6708
            DECL_DEAD_FOR_LOCAL (r) = 0;
6709
            DECL_INITIALIZED_P (r) = 0;
6710
            DECL_TEMPLATE_INSTANTIATED (r) = 0;
6711
            type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6712
            if (type == error_mark_node)
6713
              return error_mark_node;
6714
            type = complete_type (type);
6715
            DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
6716
              = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
6717
            type = check_var_type (DECL_NAME (r), type);
6718
 
6719
            if (DECL_HAS_VALUE_EXPR_P (t))
6720
              {
6721
                tree ve = DECL_VALUE_EXPR (t);
6722
                ve = tsubst_expr (ve, args, complain, in_decl);
6723
                SET_DECL_VALUE_EXPR (r, ve);
6724
              }
6725
          }
6726
        else if (DECL_SELF_REFERENCE_P (t))
6727
          SET_DECL_SELF_REFERENCE_P (r);
6728
        TREE_TYPE (r) = type;
6729
        cp_apply_type_quals_to_decl (cp_type_quals (type), r);
6730
        DECL_CONTEXT (r) = ctx;
6731
        /* Clear out the mangled name and RTL for the instantiation.  */
6732
        SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
6733
        if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
6734
          SET_DECL_RTL (r, NULL_RTX);
6735
        /* The initializer must not be expanded until it is required;
6736
           see [temp.inst].  */
6737
        DECL_INITIAL (r) = NULL_TREE;
6738
        if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
6739
          SET_DECL_RTL (r, NULL_RTX);
6740
        DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
6741
 
6742
        if (!local_p)
6743
          {
6744
            /* A static data member declaration is always marked
6745
               external when it is declared in-class, even if an
6746
               initializer is present.  We mimic the non-template
6747
               processing here.  */
6748
            DECL_EXTERNAL (r) = 1;
6749
 
6750
            register_specialization (r, gen_tmpl, argvec, false);
6751
            DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
6752
            SET_DECL_IMPLICIT_INSTANTIATION (r);
6753
          }
6754
        else
6755
          register_local_specialization (r, t);
6756
 
6757
        TREE_CHAIN (r) = NULL_TREE;
6758
        layout_decl (r, 0);
6759
      }
6760
      break;
6761
 
6762
    default:
6763
      gcc_unreachable ();
6764
    }
6765
 
6766
  /* Restore the file and line information.  */
6767
  input_location = saved_loc;
6768
 
6769
  return r;
6770
}
6771
 
6772
/* Substitute into the ARG_TYPES of a function type.  */
6773
 
6774
static tree
6775
tsubst_arg_types (tree arg_types,
6776
                  tree args,
6777
                  tsubst_flags_t complain,
6778
                  tree in_decl)
6779
{
6780
  tree remaining_arg_types;
6781
  tree type;
6782
  tree default_arg;
6783
  tree result = NULL_TREE;
6784
 
6785
  if (!arg_types || arg_types == void_list_node)
6786
    return arg_types;
6787
 
6788
  remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
6789
                                          args, complain, in_decl);
6790
  if (remaining_arg_types == error_mark_node)
6791
    return error_mark_node;
6792
 
6793
  type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
6794
  if (type == error_mark_node)
6795
    return error_mark_node;
6796
  if (VOID_TYPE_P (type))
6797
    {
6798
      if (complain & tf_error)
6799
        {
6800
          error ("invalid parameter type %qT", type);
6801
          if (in_decl)
6802
            error ("in declaration %q+D", in_decl);
6803
        }
6804
      return error_mark_node;
6805
    }
6806
 
6807
  /* Do array-to-pointer, function-to-pointer conversion, and ignore
6808
     top-level qualifiers as required.  */
6809
  type = TYPE_MAIN_VARIANT (type_decays_to (type));
6810
 
6811
  /* We do not substitute into default arguments here.  The standard
6812
     mandates that they be instantiated only when needed, which is
6813
     done in build_over_call.  */
6814
  default_arg = TREE_PURPOSE (arg_types);
6815
 
6816
  if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
6817
    {
6818
      /* We've instantiated a template before its default arguments
6819
         have been parsed.  This can happen for a nested template
6820
         class, and is not an error unless we require the default
6821
         argument in a call of this function.  */
6822
      result = tree_cons (default_arg, type, remaining_arg_types);
6823
      VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), result);
6824
    }
6825
  else
6826
    result = hash_tree_cons (default_arg, type, remaining_arg_types);
6827
 
6828
  return result;
6829
}
6830
 
6831
/* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
6832
   *not* handle the exception-specification for FNTYPE, because the
6833
   initial substitution of explicitly provided template parameters
6834
   during argument deduction forbids substitution into the
6835
   exception-specification:
6836
 
6837
     [temp.deduct]
6838
 
6839
     All references in the function type of the function template to  the
6840
     corresponding template parameters are replaced by the specified tem-
6841
     plate argument values.  If a substitution in a template parameter or
6842
     in  the function type of the function template results in an invalid
6843
     type, type deduction fails.  [Note: The equivalent  substitution  in
6844
     exception specifications is done only when the function is instanti-
6845
     ated, at which point a program is  ill-formed  if  the  substitution
6846
     results in an invalid type.]  */
6847
 
6848
static tree
6849
tsubst_function_type (tree t,
6850
                      tree args,
6851
                      tsubst_flags_t complain,
6852
                      tree in_decl)
6853
{
6854
  tree return_type;
6855
  tree arg_types;
6856
  tree fntype;
6857
 
6858
  /* The TYPE_CONTEXT is not used for function/method types.  */
6859
  gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
6860
 
6861
  /* Substitute the return type.  */
6862
  return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6863
  if (return_type == error_mark_node)
6864
    return error_mark_node;
6865
  /* The standard does not presently indicate that creation of a
6866
     function type with an invalid return type is a deduction failure.
6867
     However, that is clearly analogous to creating an array of "void"
6868
     or a reference to a reference.  This is core issue #486.  */
6869
  if (TREE_CODE (return_type) == ARRAY_TYPE
6870
      || TREE_CODE (return_type) == FUNCTION_TYPE)
6871
    {
6872
      if (complain & tf_error)
6873
        {
6874
          if (TREE_CODE (return_type) == ARRAY_TYPE)
6875
            error ("function returning an array");
6876
          else
6877
            error ("function returning a function");
6878
        }
6879
      return error_mark_node;
6880
    }
6881
 
6882
  /* Substitute the argument types.  */
6883
  arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
6884
                                complain, in_decl);
6885
  if (arg_types == error_mark_node)
6886
    return error_mark_node;
6887
 
6888
  /* Construct a new type node and return it.  */
6889
  if (TREE_CODE (t) == FUNCTION_TYPE)
6890
    fntype = build_function_type (return_type, arg_types);
6891
  else
6892
    {
6893
      tree r = TREE_TYPE (TREE_VALUE (arg_types));
6894
      if (! IS_AGGR_TYPE (r))
6895
        {
6896
          /* [temp.deduct]
6897
 
6898
             Type deduction may fail for any of the following
6899
             reasons:
6900
 
6901
             -- Attempting to create "pointer to member of T" when T
6902
             is not a class type.  */
6903
          if (complain & tf_error)
6904
            error ("creating pointer to member function of non-class type %qT",
6905
                      r);
6906
          return error_mark_node;
6907
        }
6908
 
6909
      fntype = build_method_type_directly (r, return_type,
6910
                                           TREE_CHAIN (arg_types));
6911
    }
6912
  fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
6913
  fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
6914
 
6915
  return fntype;
6916
}
6917
 
6918
/* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
6919
   ARGS into that specification, and return the substituted
6920
   specification.  If there is no specification, return NULL_TREE.  */
6921
 
6922
static tree
6923
tsubst_exception_specification (tree fntype,
6924
                                tree args,
6925
                                tsubst_flags_t complain,
6926
                                tree in_decl)
6927
{
6928
  tree specs;
6929
  tree new_specs;
6930
 
6931
  specs = TYPE_RAISES_EXCEPTIONS (fntype);
6932
  new_specs = NULL_TREE;
6933
  if (specs)
6934
    {
6935
      if (! TREE_VALUE (specs))
6936
        new_specs = specs;
6937
      else
6938
        while (specs)
6939
          {
6940
            tree spec;
6941
            spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
6942
            if (spec == error_mark_node)
6943
              return spec;
6944
            new_specs = add_exception_specifier (new_specs, spec, complain);
6945
            specs = TREE_CHAIN (specs);
6946
          }
6947
    }
6948
  return new_specs;
6949
}
6950
 
6951
/* Substitute into the PARMS of a call-declarator.  */
6952
 
6953
static tree
6954
tsubst_call_declarator_parms (tree parms,
6955
                              tree args,
6956
                              tsubst_flags_t complain,
6957
                              tree in_decl)
6958
{
6959
  tree new_parms;
6960
  tree type;
6961
  tree defarg;
6962
 
6963
  if (!parms || parms == void_list_node)
6964
    return parms;
6965
 
6966
  new_parms = tsubst_call_declarator_parms (TREE_CHAIN (parms),
6967
                                            args, complain, in_decl);
6968
 
6969
  /* Figure out the type of this parameter.  */
6970
  type = tsubst (TREE_VALUE (parms), args, complain, in_decl);
6971
 
6972
  /* Figure out the default argument as well.  Note that we use
6973
     tsubst_expr since the default argument is really an expression.  */
6974
  defarg = tsubst_expr (TREE_PURPOSE (parms), args, complain, in_decl);
6975
 
6976
  /* Chain this parameter on to the front of those we have already
6977
     processed.  We don't use hash_tree_cons because that function
6978
     doesn't check TREE_PARMLIST.  */
6979
  new_parms = tree_cons (defarg, type, new_parms);
6980
 
6981
  return new_parms;
6982
}
6983
 
6984
/* Take the tree structure T and replace template parameters used
6985
   therein with the argument vector ARGS.  IN_DECL is an associated
6986
   decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
6987
   Issue error and warning messages under control of COMPLAIN.  Note
6988
   that we must be relatively non-tolerant of extensions here, in
6989
   order to preserve conformance; if we allow substitutions that
6990
   should not be allowed, we may allow argument deductions that should
6991
   not succeed, and therefore report ambiguous overload situations
6992
   where there are none.  In theory, we could allow the substitution,
6993
   but indicate that it should have failed, and allow our caller to
6994
   make sure that the right thing happens, but we don't try to do this
6995
   yet.
6996
 
6997
   This function is used for dealing with types, decls and the like;
6998
   for expressions, use tsubst_expr or tsubst_copy.  */
6999
 
7000
static tree
7001
tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7002
{
7003
  tree type, r;
7004
 
7005
  if (t == NULL_TREE || t == error_mark_node
7006
      || t == integer_type_node
7007
      || t == void_type_node
7008
      || t == char_type_node
7009
      || t == unknown_type_node
7010
      || TREE_CODE (t) == NAMESPACE_DECL)
7011
    return t;
7012
 
7013
  if (DECL_P (t))
7014
    return tsubst_decl (t, args, complain);
7015
 
7016
  if (TREE_CODE (t) == IDENTIFIER_NODE)
7017
    type = IDENTIFIER_TYPE_VALUE (t);
7018
  else
7019
    type = TREE_TYPE (t);
7020
 
7021
  gcc_assert (type != unknown_type_node);
7022
 
7023
  if (type
7024
      && TREE_CODE (t) != TYPENAME_TYPE
7025
      && TREE_CODE (t) != IDENTIFIER_NODE
7026
      && TREE_CODE (t) != FUNCTION_TYPE
7027
      && TREE_CODE (t) != METHOD_TYPE)
7028
    type = tsubst (type, args, complain, in_decl);
7029
  if (type == error_mark_node)
7030
    return error_mark_node;
7031
 
7032
  switch (TREE_CODE (t))
7033
    {
7034
    case RECORD_TYPE:
7035
    case UNION_TYPE:
7036
    case ENUMERAL_TYPE:
7037
      return tsubst_aggr_type (t, args, complain, in_decl,
7038
                               /*entering_scope=*/0);
7039
 
7040
    case ERROR_MARK:
7041
    case IDENTIFIER_NODE:
7042
    case VOID_TYPE:
7043
    case REAL_TYPE:
7044
    case COMPLEX_TYPE:
7045
    case VECTOR_TYPE:
7046
    case BOOLEAN_TYPE:
7047
    case INTEGER_CST:
7048
    case REAL_CST:
7049
    case STRING_CST:
7050
      return t;
7051
 
7052
    case INTEGER_TYPE:
7053
      if (t == integer_type_node)
7054
        return t;
7055
 
7056
      if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
7057
          && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
7058
        return t;
7059
 
7060
      {
7061
        tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
7062
 
7063
        /* The array dimension behaves like a non-type template arg,
7064
           in that we want to fold it as much as possible.  */
7065
        max = tsubst_template_arg (omax, args, complain, in_decl);
7066
        max = fold_decl_constant_value (max);
7067
 
7068
        /* [temp.deduct]
7069
 
7070
           Type deduction may fail for any of the following
7071
           reasons:
7072
 
7073
             Attempting to create an array with a size that is
7074
             zero or negative.  */
7075
        if (integer_zerop (max) && !(complain & tf_error))
7076
          /* We must fail if performing argument deduction (as
7077
             indicated by the state of complain), so that
7078
             another substitution can be found.  */
7079
          return error_mark_node;
7080
 
7081
        else if (TREE_CODE (max) == INTEGER_CST
7082
                 && INT_CST_LT (max, integer_zero_node))
7083
          {
7084
            if (complain & tf_error)
7085
              error ("creating array with negative size (%qE)", max);
7086
 
7087
            return error_mark_node;
7088
          }
7089
 
7090
        return compute_array_index_type (NULL_TREE, max);
7091
      }
7092
 
7093
    case TEMPLATE_TYPE_PARM:
7094
    case TEMPLATE_TEMPLATE_PARM:
7095
    case BOUND_TEMPLATE_TEMPLATE_PARM:
7096
    case TEMPLATE_PARM_INDEX:
7097
      {
7098
        int idx;
7099
        int level;
7100
        int levels;
7101
        tree arg = NULL_TREE;
7102
 
7103
        r = NULL_TREE;
7104
 
7105
        gcc_assert (TREE_VEC_LENGTH (args) > 0);
7106
        if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
7107
            || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
7108
            || TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
7109
          {
7110
            idx = TEMPLATE_TYPE_IDX (t);
7111
            level = TEMPLATE_TYPE_LEVEL (t);
7112
          }
7113
        else
7114
          {
7115
            idx = TEMPLATE_PARM_IDX (t);
7116
            level = TEMPLATE_PARM_LEVEL (t);
7117
          }
7118
 
7119
        levels = TMPL_ARGS_DEPTH (args);
7120
        if (level <= levels)
7121
          arg = TMPL_ARG (args, level, idx);
7122
 
7123
        if (arg == error_mark_node)
7124
          return error_mark_node;
7125
        else if (arg != NULL_TREE)
7126
          {
7127
            if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
7128
              {
7129
                gcc_assert (TYPE_P (arg));
7130
                return cp_build_qualified_type_real
7131
                  (arg, cp_type_quals (arg) | cp_type_quals (t),
7132
                   complain | tf_ignore_bad_quals);
7133
              }
7134
            else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
7135
              {
7136
                /* We are processing a type constructed from a
7137
                   template template parameter.  */
7138
                tree argvec = tsubst (TYPE_TI_ARGS (t),
7139
                                      args, complain, in_decl);
7140
                if (argvec == error_mark_node)
7141
                  return error_mark_node;
7142
 
7143
                /* We can get a TEMPLATE_TEMPLATE_PARM here when we
7144
                   are resolving nested-types in the signature of a
7145
                   member function templates.  Otherwise ARG is a
7146
                   TEMPLATE_DECL and is the real template to be
7147
                   instantiated.  */
7148
                if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
7149
                  arg = TYPE_NAME (arg);
7150
 
7151
                r = lookup_template_class (arg,
7152
                                           argvec, in_decl,
7153
                                           DECL_CONTEXT (arg),
7154
                                            /*entering_scope=*/0,
7155
                                           complain);
7156
                return cp_build_qualified_type_real
7157
                  (r, TYPE_QUALS (t), complain);
7158
              }
7159
            else
7160
              /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
7161
              return arg;
7162
          }
7163
 
7164
        if (level == 1)
7165
          /* This can happen during the attempted tsubst'ing in
7166
             unify.  This means that we don't yet have any information
7167
             about the template parameter in question.  */
7168
          return t;
7169
 
7170
        /* If we get here, we must have been looking at a parm for a
7171
           more deeply nested template.  Make a new version of this
7172
           template parameter, but with a lower level.  */
7173
        switch (TREE_CODE (t))
7174
          {
7175
          case TEMPLATE_TYPE_PARM:
7176
          case TEMPLATE_TEMPLATE_PARM:
7177
          case BOUND_TEMPLATE_TEMPLATE_PARM:
7178
            if (cp_type_quals (t))
7179
              {
7180
                r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
7181
                r = cp_build_qualified_type_real
7182
                  (r, cp_type_quals (t),
7183
                   complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
7184
                               ? tf_ignore_bad_quals : 0));
7185
              }
7186
            else
7187
              {
7188
                r = copy_type (t);
7189
                TEMPLATE_TYPE_PARM_INDEX (r)
7190
                  = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
7191
                                                r, levels);
7192
                TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
7193
                TYPE_MAIN_VARIANT (r) = r;
7194
                TYPE_POINTER_TO (r) = NULL_TREE;
7195
                TYPE_REFERENCE_TO (r) = NULL_TREE;
7196
 
7197
                if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
7198
                  {
7199
                    tree argvec = tsubst (TYPE_TI_ARGS (t), args,
7200
                                          complain, in_decl);
7201
                    if (argvec == error_mark_node)
7202
                      return error_mark_node;
7203
 
7204
                    TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
7205
                      = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
7206
                  }
7207
              }
7208
            break;
7209
 
7210
          case TEMPLATE_PARM_INDEX:
7211
            r = reduce_template_parm_level (t, type, levels);
7212
            break;
7213
 
7214
          default:
7215
            gcc_unreachable ();
7216
          }
7217
 
7218
        return r;
7219
      }
7220
 
7221
    case TREE_LIST:
7222
      {
7223
        tree purpose, value, chain;
7224
 
7225
        if (t == void_list_node)
7226
          return t;
7227
 
7228
        purpose = TREE_PURPOSE (t);
7229
        if (purpose)
7230
          {
7231
            purpose = tsubst (purpose, args, complain, in_decl);
7232
            if (purpose == error_mark_node)
7233
              return error_mark_node;
7234
          }
7235
        value = TREE_VALUE (t);
7236
        if (value)
7237
          {
7238
            value = tsubst (value, args, complain, in_decl);
7239
            if (value == error_mark_node)
7240
              return error_mark_node;
7241
          }
7242
        chain = TREE_CHAIN (t);
7243
        if (chain && chain != void_type_node)
7244
          {
7245
            chain = tsubst (chain, args, complain, in_decl);
7246
            if (chain == error_mark_node)
7247
              return error_mark_node;
7248
          }
7249
        if (purpose == TREE_PURPOSE (t)
7250
            && value == TREE_VALUE (t)
7251
            && chain == TREE_CHAIN (t))
7252
          return t;
7253
        return hash_tree_cons (purpose, value, chain);
7254
      }
7255
 
7256
    case TREE_BINFO:
7257
      /* We should never be tsubsting a binfo.  */
7258
      gcc_unreachable ();
7259
 
7260
    case TREE_VEC:
7261
      /* A vector of template arguments.  */
7262
      gcc_assert (!type);
7263
      return tsubst_template_args (t, args, complain, in_decl);
7264
 
7265
    case POINTER_TYPE:
7266
    case REFERENCE_TYPE:
7267
      {
7268
        enum tree_code code;
7269
 
7270
        if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
7271
          return t;
7272
 
7273
        code = TREE_CODE (t);
7274
 
7275
 
7276
        /* [temp.deduct]
7277
 
7278
           Type deduction may fail for any of the following
7279
           reasons:
7280
 
7281
           -- Attempting to create a pointer to reference type.
7282
           -- Attempting to create a reference to a reference type or
7283
              a reference to void.  */
7284
        if (TREE_CODE (type) == REFERENCE_TYPE
7285
            || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
7286
          {
7287
            static location_t last_loc;
7288
 
7289
            /* We keep track of the last time we issued this error
7290
               message to avoid spewing a ton of messages during a
7291
               single bad template instantiation.  */
7292
            if (complain & tf_error
7293
#ifdef USE_MAPPED_LOCATION
7294
                && last_loc != input_location
7295
#else
7296
                && (last_loc.line != input_line
7297
                    || last_loc.file != input_filename)
7298
#endif
7299
                  )
7300
              {
7301
                if (TREE_CODE (type) == VOID_TYPE)
7302
                  error ("forming reference to void");
7303
                else
7304
                  error ("forming %s to reference type %qT",
7305
                         (code == POINTER_TYPE) ? "pointer" : "reference",
7306
                         type);
7307
                last_loc = input_location;
7308
              }
7309
 
7310
            return error_mark_node;
7311
          }
7312
        else if (code == POINTER_TYPE)
7313
          {
7314
            r = build_pointer_type (type);
7315
            if (TREE_CODE (type) == METHOD_TYPE)
7316
              r = build_ptrmemfunc_type (r);
7317
          }
7318
        else
7319
          r = build_reference_type (type);
7320
        r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7321
 
7322
        if (r != error_mark_node)
7323
          /* Will this ever be needed for TYPE_..._TO values?  */
7324
          layout_type (r);
7325
 
7326
        return r;
7327
      }
7328
    case OFFSET_TYPE:
7329
      {
7330
        r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
7331
        if (r == error_mark_node || !IS_AGGR_TYPE (r))
7332
          {
7333
            /* [temp.deduct]
7334
 
7335
               Type deduction may fail for any of the following
7336
               reasons:
7337
 
7338
               -- Attempting to create "pointer to member of T" when T
7339
                  is not a class type.  */
7340
            if (complain & tf_error)
7341
              error ("creating pointer to member of non-class type %qT", r);
7342
            return error_mark_node;
7343
          }
7344
        if (TREE_CODE (type) == REFERENCE_TYPE)
7345
          {
7346
            if (complain & tf_error)
7347
              error ("creating pointer to member reference type %qT", type);
7348
            return error_mark_node;
7349
          }
7350
        if (TREE_CODE (type) == VOID_TYPE)
7351
          {
7352
            if (complain & tf_error)
7353
              error ("creating pointer to member of type void");
7354
            return error_mark_node;
7355
          }
7356
        gcc_assert (TREE_CODE (type) != METHOD_TYPE);
7357
        if (TREE_CODE (type) == FUNCTION_TYPE)
7358
          {
7359
            /* The type of the implicit object parameter gets its
7360
               cv-qualifiers from the FUNCTION_TYPE. */
7361
            tree method_type;
7362
            tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
7363
                                                      cp_type_quals (type));
7364
            tree memptr;
7365
            method_type = build_method_type_directly (this_type,
7366
                                                      TREE_TYPE (type),
7367
                                                      TYPE_ARG_TYPES (type));
7368
            memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
7369
            return cp_build_qualified_type_real (memptr, cp_type_quals (t),
7370
                                                 complain);
7371
          }
7372
        else
7373
          return cp_build_qualified_type_real (build_ptrmem_type (r, type),
7374
                                               TYPE_QUALS (t),
7375
                                               complain);
7376
      }
7377
    case FUNCTION_TYPE:
7378
    case METHOD_TYPE:
7379
      {
7380
        tree fntype;
7381
        tree specs;
7382
        fntype = tsubst_function_type (t, args, complain, in_decl);
7383
        if (fntype == error_mark_node)
7384
          return error_mark_node;
7385
 
7386
        /* Substitute the exception specification.  */
7387
        specs = tsubst_exception_specification (t, args, complain,
7388
                                                in_decl);
7389
        if (specs == error_mark_node)
7390
          return error_mark_node;
7391
        if (specs)
7392
          fntype = build_exception_variant (fntype, specs);
7393
        return fntype;
7394
      }
7395
    case ARRAY_TYPE:
7396
      {
7397
        tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
7398
        if (domain == error_mark_node)
7399
          return error_mark_node;
7400
 
7401
        /* As an optimization, we avoid regenerating the array type if
7402
           it will obviously be the same as T.  */
7403
        if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
7404
          return t;
7405
 
7406
        /* These checks should match the ones in grokdeclarator.
7407
 
7408
           [temp.deduct]
7409
 
7410
           The deduction may fail for any of the following reasons:
7411
 
7412
           -- Attempting to create an array with an element type that
7413
              is void, a function type, or a reference type, or [DR337]
7414
              an abstract class type.  */
7415
        if (TREE_CODE (type) == VOID_TYPE
7416
            || TREE_CODE (type) == FUNCTION_TYPE
7417
            || TREE_CODE (type) == REFERENCE_TYPE)
7418
          {
7419
            if (complain & tf_error)
7420
              error ("creating array of %qT", type);
7421
            return error_mark_node;
7422
          }
7423
        if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
7424
          {
7425
            if (complain & tf_error)
7426
              error ("creating array of %qT, which is an abstract class type",
7427
                     type);
7428
            return error_mark_node;
7429
          }
7430
 
7431
        r = build_cplus_array_type (type, domain);
7432
        return r;
7433
      }
7434
 
7435
    case PLUS_EXPR:
7436
    case MINUS_EXPR:
7437
      {
7438
        tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7439
        tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
7440
 
7441
        if (e1 == error_mark_node || e2 == error_mark_node)
7442
          return error_mark_node;
7443
 
7444
        return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
7445
      }
7446
 
7447
    case NEGATE_EXPR:
7448
    case NOP_EXPR:
7449
      {
7450
        tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7451
        if (e == error_mark_node)
7452
          return error_mark_node;
7453
 
7454
        return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
7455
      }
7456
 
7457
    case TYPENAME_TYPE:
7458
      {
7459
        tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
7460
                                     in_decl, /*entering_scope=*/1);
7461
        tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
7462
                              complain, in_decl);
7463
 
7464
        if (ctx == error_mark_node || f == error_mark_node)
7465
          return error_mark_node;
7466
 
7467
        if (!IS_AGGR_TYPE (ctx))
7468
          {
7469
            if (complain & tf_error)
7470
              error ("%qT is not a class, struct, or union type", ctx);
7471
            return error_mark_node;
7472
          }
7473
        else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
7474
          {
7475
            /* Normally, make_typename_type does not require that the CTX
7476
               have complete type in order to allow things like:
7477
 
7478
                 template <class T> struct S { typename S<T>::X Y; };
7479
 
7480
               But, such constructs have already been resolved by this
7481
               point, so here CTX really should have complete type, unless
7482
               it's a partial instantiation.  */
7483
            ctx = complete_type (ctx);
7484
            if (!COMPLETE_TYPE_P (ctx))
7485
              {
7486
                if (complain & tf_error)
7487
                  cxx_incomplete_type_error (NULL_TREE, ctx);
7488
                return error_mark_node;
7489
              }
7490
          }
7491
 
7492
        f = make_typename_type (ctx, f, typename_type,
7493
                                (complain & tf_error) | tf_keep_type_decl);
7494
        if (f == error_mark_node)
7495
          return f;
7496
        if (TREE_CODE (f) == TYPE_DECL)
7497
          {
7498
            complain |= tf_ignore_bad_quals;
7499
            f = TREE_TYPE (f);
7500
          }
7501
 
7502
        if (TREE_CODE (f) != TYPENAME_TYPE)
7503
          {
7504
            if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
7505
              error ("%qT resolves to %qT, which is not an enumeration type",
7506
                     t, f);
7507
            else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
7508
              error ("%qT resolves to %qT, which is is not a class type",
7509
                     t, f);
7510
          }
7511
 
7512
        return cp_build_qualified_type_real
7513
          (f, cp_type_quals (f) | cp_type_quals (t), complain);
7514
      }
7515
 
7516
    case UNBOUND_CLASS_TEMPLATE:
7517
      {
7518
        tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
7519
                                     in_decl, /*entering_scope=*/1);
7520
        tree name = TYPE_IDENTIFIER (t);
7521
        tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
7522
 
7523
        if (ctx == error_mark_node || name == error_mark_node)
7524
          return error_mark_node;
7525
 
7526
        if (parm_list)
7527
          parm_list = tsubst_template_parms (parm_list, args, complain);
7528
        return make_unbound_class_template (ctx, name, parm_list, complain);
7529
      }
7530
 
7531
    case INDIRECT_REF:
7532
    case ADDR_EXPR:
7533
    case CALL_EXPR:
7534
      gcc_unreachable ();
7535
 
7536
    case ARRAY_REF:
7537
      {
7538
        tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7539
        tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl);
7540
        if (e1 == error_mark_node || e2 == error_mark_node)
7541
          return error_mark_node;
7542
 
7543
        return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
7544
      }
7545
 
7546
    case SCOPE_REF:
7547
      {
7548
        tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7549
        tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
7550
        if (e1 == error_mark_node || e2 == error_mark_node)
7551
          return error_mark_node;
7552
 
7553
        return build_qualified_name (/*type=*/NULL_TREE,
7554
                                     e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
7555
      }
7556
 
7557
    case TYPEOF_TYPE:
7558
      {
7559
        tree type;
7560
 
7561
        type = finish_typeof (tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
7562
                                           complain, in_decl));
7563
        return cp_build_qualified_type_real (type,
7564
                                             cp_type_quals (t)
7565
                                             | cp_type_quals (type),
7566
                                             complain);
7567
      }
7568
 
7569
    default:
7570
      sorry ("use of %qs in template",
7571
             tree_code_name [(int) TREE_CODE (t)]);
7572
      return error_mark_node;
7573
    }
7574
}
7575
 
7576
/* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
7577
   type of the expression on the left-hand side of the "." or "->"
7578
   operator.  */
7579
 
7580
static tree
7581
tsubst_baselink (tree baselink, tree object_type,
7582
                 tree args, tsubst_flags_t complain, tree in_decl)
7583
{
7584
    tree name;
7585
    tree qualifying_scope;
7586
    tree fns;
7587
    tree template_args = 0;
7588
    bool template_id_p = false;
7589
 
7590
    /* A baselink indicates a function from a base class.  The
7591
       BASELINK_ACCESS_BINFO and BASELINK_BINFO are going to have
7592
       non-dependent types; otherwise, the lookup could not have
7593
       succeeded.  However, they may indicate bases of the template
7594
       class, rather than the instantiated class.
7595
 
7596
       In addition, lookups that were not ambiguous before may be
7597
       ambiguous now.  Therefore, we perform the lookup again.  */
7598
    qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
7599
    fns = BASELINK_FUNCTIONS (baselink);
7600
    if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7601
      {
7602
        template_id_p = true;
7603
        template_args = TREE_OPERAND (fns, 1);
7604
        fns = TREE_OPERAND (fns, 0);
7605
        if (template_args)
7606
          template_args = tsubst_template_args (template_args, args,
7607
                                                complain, in_decl);
7608
      }
7609
    name = DECL_NAME (get_first_fn (fns));
7610
    baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
7611
 
7612
    /* If lookup found a single function, mark it as used at this
7613
       point.  (If it lookup found multiple functions the one selected
7614
       later by overload resolution will be marked as used at that
7615
       point.)  */
7616
    if (BASELINK_P (baselink))
7617
      fns = BASELINK_FUNCTIONS (baselink);
7618
    if (!template_id_p && !really_overloaded_fn (fns))
7619
      mark_used (OVL_CURRENT (fns));
7620
 
7621
    /* Add back the template arguments, if present.  */
7622
    if (BASELINK_P (baselink) && template_id_p)
7623
      BASELINK_FUNCTIONS (baselink)
7624
        = build_nt (TEMPLATE_ID_EXPR,
7625
                    BASELINK_FUNCTIONS (baselink),
7626
                    template_args);
7627
 
7628
    if (!object_type)
7629
      object_type = current_class_type;
7630
    return adjust_result_of_qualified_name_lookup (baselink,
7631
                                                   qualifying_scope,
7632
                                                   object_type);
7633
}
7634
 
7635
/* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
7636
   true if the qualified-id will be a postfix-expression in-and-of
7637
   itself; false if more of the postfix-expression follows the
7638
   QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
7639
   of "&".  */
7640
 
7641
static tree
7642
tsubst_qualified_id (tree qualified_id, tree args,
7643
                     tsubst_flags_t complain, tree in_decl,
7644
                     bool done, bool address_p)
7645
{
7646
  tree expr;
7647
  tree scope;
7648
  tree name;
7649
  bool is_template;
7650
  tree template_args;
7651
 
7652
  gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
7653
 
7654
  /* Figure out what name to look up.  */
7655
  name = TREE_OPERAND (qualified_id, 1);
7656
  if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
7657
    {
7658
      is_template = true;
7659
      template_args = TREE_OPERAND (name, 1);
7660
      if (template_args)
7661
        template_args = tsubst_template_args (template_args, args,
7662
                                              complain, in_decl);
7663
      name = TREE_OPERAND (name, 0);
7664
    }
7665
  else
7666
    {
7667
      is_template = false;
7668
      template_args = NULL_TREE;
7669
    }
7670
 
7671
  /* Substitute into the qualifying scope.  When there are no ARGS, we
7672
     are just trying to simplify a non-dependent expression.  In that
7673
     case the qualifying scope may be dependent, and, in any case,
7674
     substituting will not help.  */
7675
  scope = TREE_OPERAND (qualified_id, 0);
7676
  if (args)
7677
    {
7678
      scope = tsubst (scope, args, complain, in_decl);
7679
      expr = tsubst_copy (name, args, complain, in_decl);
7680
    }
7681
  else
7682
    expr = name;
7683
 
7684
  if (dependent_type_p (scope))
7685
    return build_qualified_name (/*type=*/NULL_TREE,
7686
                                 scope, expr,
7687
                                 QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
7688
 
7689
  if (!BASELINK_P (name) && !DECL_P (expr))
7690
    {
7691
      if (TREE_CODE (expr) == BIT_NOT_EXPR)
7692
        /* If this were actually a destructor call, it would have been
7693
           parsed as such by the parser.  */
7694
        expr = error_mark_node;
7695
      else
7696
        expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
7697
      if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
7698
                     ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
7699
        {
7700
          if (complain & tf_error)
7701
            {
7702
              error ("dependent-name %qE is parsed as a non-type, but "
7703
                     "instantiation yields a type", qualified_id);
7704
              inform ("say %<typename %E%> if a type is meant", qualified_id);
7705
            }
7706
          return error_mark_node;
7707
        }
7708
    }
7709
 
7710
  if (DECL_P (expr))
7711
    {
7712
      check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
7713
                                           scope);
7714
      /* Remember that there was a reference to this entity.  */
7715
      mark_used (expr);
7716
    }
7717
 
7718
  if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
7719
    {
7720
      if (complain & tf_error)
7721
        qualified_name_lookup_error (scope,
7722
                                     TREE_OPERAND (qualified_id, 1),
7723
                                     expr);
7724
      return error_mark_node;
7725
    }
7726
 
7727
  if (is_template)
7728
    expr = lookup_template_function (expr, template_args);
7729
 
7730
  if (expr == error_mark_node && complain & tf_error)
7731
    qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
7732
                                 expr);
7733
  else if (TYPE_P (scope))
7734
    {
7735
      expr = (adjust_result_of_qualified_name_lookup
7736
              (expr, scope, current_class_type));
7737
      expr = (finish_qualified_id_expr
7738
              (scope, expr, done, address_p,
7739
               QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
7740
               /*template_arg_p=*/false));
7741
    }
7742
 
7743
  if (TREE_CODE (expr) != SCOPE_REF)
7744
    expr = convert_from_reference (expr);
7745
 
7746
  return expr;
7747
}
7748
 
7749
/* Like tsubst, but deals with expressions.  This function just replaces
7750
   template parms; to finish processing the resultant expression, use
7751
   tsubst_expr.  */
7752
 
7753
static tree
7754
tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7755
{
7756
  enum tree_code code;
7757
  tree r;
7758
 
7759
  if (t == NULL_TREE || t == error_mark_node)
7760
    return t;
7761
 
7762
  code = TREE_CODE (t);
7763
 
7764
  switch (code)
7765
    {
7766
    case PARM_DECL:
7767
      r = retrieve_local_specialization (t);
7768
      gcc_assert (r != NULL);
7769
      mark_used (r);
7770
      return r;
7771
 
7772
    case CONST_DECL:
7773
      {
7774
        tree enum_type;
7775
        tree v;
7776
 
7777
        if (DECL_TEMPLATE_PARM_P (t))
7778
          return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
7779
        /* There is no need to substitute into namespace-scope
7780
           enumerators.  */
7781
        if (DECL_NAMESPACE_SCOPE_P (t))
7782
          return t;
7783
        /* If ARGS is NULL, then T is known to be non-dependent.  */
7784
        if (args == NULL_TREE)
7785
          return integral_constant_value (t);
7786
 
7787
        /* Unfortunately, we cannot just call lookup_name here.
7788
           Consider:
7789
 
7790
             template <int I> int f() {
7791
             enum E { a = I };
7792
             struct S { void g() { E e = a; } };
7793
             };
7794
 
7795
           When we instantiate f<7>::S::g(), say, lookup_name is not
7796
           clever enough to find f<7>::a.  */
7797
        enum_type
7798
          = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
7799
                              /*entering_scope=*/0);
7800
 
7801
        for (v = TYPE_VALUES (enum_type);
7802
             v != NULL_TREE;
7803
             v = TREE_CHAIN (v))
7804
          if (TREE_PURPOSE (v) == DECL_NAME (t))
7805
            return TREE_VALUE (v);
7806
 
7807
          /* We didn't find the name.  That should never happen; if
7808
             name-lookup found it during preliminary parsing, we
7809
             should find it again here during instantiation.  */
7810
        gcc_unreachable ();
7811
      }
7812
      return t;
7813
 
7814
    case FIELD_DECL:
7815
      if (DECL_CONTEXT (t))
7816
        {
7817
          tree ctx;
7818
 
7819
          ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
7820
                                  /*entering_scope=*/1);
7821
          if (ctx != DECL_CONTEXT (t))
7822
            {
7823
              tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
7824
              if (!r)
7825
                {
7826
                  if (complain & tf_error)
7827
                    error ("using invalid field %qD", t);
7828
                  return error_mark_node;
7829
                }
7830
              return r;
7831
            }
7832
        }
7833
 
7834
      return t;
7835
 
7836
    case VAR_DECL:
7837
    case FUNCTION_DECL:
7838
      if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
7839
          || local_variable_p (t))
7840
        t = tsubst (t, args, complain, in_decl);
7841
      mark_used (t);
7842
      return t;
7843
 
7844
    case BASELINK:
7845
      return tsubst_baselink (t, current_class_type, args, complain, in_decl);
7846
 
7847
    case TEMPLATE_DECL:
7848
      if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7849
        return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
7850
                       args, complain, in_decl);
7851
      else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
7852
        return tsubst (t, args, complain, in_decl);
7853
      else if (DECL_CLASS_SCOPE_P (t)
7854
               && uses_template_parms (DECL_CONTEXT (t)))
7855
        {
7856
          /* Template template argument like the following example need
7857
             special treatment:
7858
 
7859
               template <template <class> class TT> struct C {};
7860
               template <class T> struct D {
7861
                 template <class U> struct E {};
7862
                 C<E> c;                                // #1
7863
               };
7864
               D<int> d;                                // #2
7865
 
7866
             We are processing the template argument `E' in #1 for
7867
             the template instantiation #2.  Originally, `E' is a
7868
             TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
7869
             have to substitute this with one having context `D<int>'.  */
7870
 
7871
          tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
7872
          return lookup_field (context, DECL_NAME(t), 0, false);
7873
        }
7874
      else
7875
        /* Ordinary template template argument.  */
7876
        return t;
7877
 
7878
    case CAST_EXPR:
7879
    case REINTERPRET_CAST_EXPR:
7880
    case CONST_CAST_EXPR:
7881
    case STATIC_CAST_EXPR:
7882
    case DYNAMIC_CAST_EXPR:
7883
    case NOP_EXPR:
7884
      return build1
7885
        (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7886
         tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
7887
 
7888
    case INDIRECT_REF:
7889
    case NEGATE_EXPR:
7890
    case TRUTH_NOT_EXPR:
7891
    case BIT_NOT_EXPR:
7892
    case ADDR_EXPR:
7893
    case UNARY_PLUS_EXPR:      /* Unary + */
7894
    case SIZEOF_EXPR:
7895
    case ALIGNOF_EXPR:
7896
    case ARROW_EXPR:
7897
    case THROW_EXPR:
7898
    case TYPEID_EXPR:
7899
    case REALPART_EXPR:
7900
    case IMAGPART_EXPR:
7901
      return build1
7902
        (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7903
         tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
7904
 
7905
    case COMPONENT_REF:
7906
      {
7907
        tree object;
7908
        tree name;
7909
 
7910
        object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
7911
        name = TREE_OPERAND (t, 1);
7912
        if (TREE_CODE (name) == BIT_NOT_EXPR)
7913
          {
7914
            name = tsubst_copy (TREE_OPERAND (name, 0), args,
7915
                                complain, in_decl);
7916
            name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7917
          }
7918
        else if (TREE_CODE (name) == SCOPE_REF
7919
                 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
7920
          {
7921
            tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
7922
                                     complain, in_decl);
7923
            name = TREE_OPERAND (name, 1);
7924
            name = tsubst_copy (TREE_OPERAND (name, 0), args,
7925
                                complain, in_decl);
7926
            name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7927
            name = build_qualified_name (/*type=*/NULL_TREE,
7928
                                         base, name,
7929
                                         /*template_p=*/false);
7930
          }
7931
        else if (TREE_CODE (name) == BASELINK)
7932
          name = tsubst_baselink (name,
7933
                                  non_reference (TREE_TYPE (object)),
7934
                                  args, complain,
7935
                                  in_decl);
7936
        else
7937
          name = tsubst_copy (name, args, complain, in_decl);
7938
        return build_nt (COMPONENT_REF, object, name, NULL_TREE);
7939
      }
7940
 
7941
    case PLUS_EXPR:
7942
    case MINUS_EXPR:
7943
    case MULT_EXPR:
7944
    case TRUNC_DIV_EXPR:
7945
    case CEIL_DIV_EXPR:
7946
    case FLOOR_DIV_EXPR:
7947
    case ROUND_DIV_EXPR:
7948
    case EXACT_DIV_EXPR:
7949
    case BIT_AND_EXPR:
7950
    case BIT_IOR_EXPR:
7951
    case BIT_XOR_EXPR:
7952
    case TRUNC_MOD_EXPR:
7953
    case FLOOR_MOD_EXPR:
7954
    case TRUTH_ANDIF_EXPR:
7955
    case TRUTH_ORIF_EXPR:
7956
    case TRUTH_AND_EXPR:
7957
    case TRUTH_OR_EXPR:
7958
    case RSHIFT_EXPR:
7959
    case LSHIFT_EXPR:
7960
    case RROTATE_EXPR:
7961
    case LROTATE_EXPR:
7962
    case EQ_EXPR:
7963
    case NE_EXPR:
7964
    case MAX_EXPR:
7965
    case MIN_EXPR:
7966
    case LE_EXPR:
7967
    case GE_EXPR:
7968
    case LT_EXPR:
7969
    case GT_EXPR:
7970
    case COMPOUND_EXPR:
7971
    case DOTSTAR_EXPR:
7972
    case MEMBER_REF:
7973
    case PREDECREMENT_EXPR:
7974
    case PREINCREMENT_EXPR:
7975
    case POSTDECREMENT_EXPR:
7976
    case POSTINCREMENT_EXPR:
7977
      return build_nt
7978
        (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7979
         tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
7980
 
7981
    case SCOPE_REF:
7982
      return build_qualified_name (/*type=*/NULL_TREE,
7983
                                   tsubst_copy (TREE_OPERAND (t, 0),
7984
                                                args, complain, in_decl),
7985
                                   tsubst_copy (TREE_OPERAND (t, 1),
7986
                                                args, complain, in_decl),
7987
                                   QUALIFIED_NAME_IS_TEMPLATE (t));
7988
 
7989
    case ARRAY_REF:
7990
      return build_nt
7991
        (ARRAY_REF,
7992
         tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7993
         tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7994
         NULL_TREE, NULL_TREE);
7995
 
7996
    case CALL_EXPR:
7997
      return build_nt (code,
7998
                       tsubst_copy (TREE_OPERAND (t, 0), args,
7999
                                    complain, in_decl),
8000
                       tsubst_copy (TREE_OPERAND (t, 1), args, complain,
8001
                                    in_decl),
8002
                       NULL_TREE);
8003
 
8004
    case COND_EXPR:
8005
    case MODOP_EXPR:
8006
    case PSEUDO_DTOR_EXPR:
8007
      {
8008
        r = build_nt
8009
          (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
8010
           tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
8011
           tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
8012
        TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
8013
        return r;
8014
      }
8015
 
8016
    case NEW_EXPR:
8017
      {
8018
        r = build_nt
8019
        (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
8020
         tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
8021
         tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
8022
        NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
8023
        return r;
8024
      }
8025
 
8026
    case DELETE_EXPR:
8027
      {
8028
        r = build_nt
8029
        (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
8030
         tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
8031
        DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
8032
        DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
8033
        return r;
8034
      }
8035
 
8036
    case TEMPLATE_ID_EXPR:
8037
      {
8038
        /* Substituted template arguments */
8039
        tree fn = TREE_OPERAND (t, 0);
8040
        tree targs = TREE_OPERAND (t, 1);
8041
 
8042
        fn = tsubst_copy (fn, args, complain, in_decl);
8043
        if (targs)
8044
          targs = tsubst_template_args (targs, args, complain, in_decl);
8045
 
8046
        return lookup_template_function (fn, targs);
8047
      }
8048
 
8049
    case TREE_LIST:
8050
      {
8051
        tree purpose, value, chain;
8052
 
8053
        if (t == void_list_node)
8054
          return t;
8055
 
8056
        purpose = TREE_PURPOSE (t);
8057
        if (purpose)
8058
          purpose = tsubst_copy (purpose, args, complain, in_decl);
8059
        value = TREE_VALUE (t);
8060
        if (value)
8061
          value = tsubst_copy (value, args, complain, in_decl);
8062
        chain = TREE_CHAIN (t);
8063
        if (chain && chain != void_type_node)
8064
          chain = tsubst_copy (chain, args, complain, in_decl);
8065
        if (purpose == TREE_PURPOSE (t)
8066
            && value == TREE_VALUE (t)
8067
            && chain == TREE_CHAIN (t))
8068
          return t;
8069
        return tree_cons (purpose, value, chain);
8070
      }
8071
 
8072
    case RECORD_TYPE:
8073
    case UNION_TYPE:
8074
    case ENUMERAL_TYPE:
8075
    case INTEGER_TYPE:
8076
    case TEMPLATE_TYPE_PARM:
8077
    case TEMPLATE_TEMPLATE_PARM:
8078
    case BOUND_TEMPLATE_TEMPLATE_PARM:
8079
    case TEMPLATE_PARM_INDEX:
8080
    case POINTER_TYPE:
8081
    case REFERENCE_TYPE:
8082
    case OFFSET_TYPE:
8083
    case FUNCTION_TYPE:
8084
    case METHOD_TYPE:
8085
    case ARRAY_TYPE:
8086
    case TYPENAME_TYPE:
8087
    case UNBOUND_CLASS_TEMPLATE:
8088
    case TYPEOF_TYPE:
8089
    case TYPE_DECL:
8090
      return tsubst (t, args, complain, in_decl);
8091
 
8092
    case IDENTIFIER_NODE:
8093
      if (IDENTIFIER_TYPENAME_P (t))
8094
        {
8095
          tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8096
          return mangle_conv_op_name_for_type (new_type);
8097
        }
8098
      else
8099
        return t;
8100
 
8101
    case CONSTRUCTOR:
8102
      /* This is handled by tsubst_copy_and_build.  */
8103
      gcc_unreachable ();
8104
 
8105
    case VA_ARG_EXPR:
8106
      return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
8107
                                          in_decl),
8108
                             tsubst (TREE_TYPE (t), args, complain, in_decl));
8109
 
8110
    case CLEANUP_POINT_EXPR:
8111
      /* We shouldn't have built any of these during initial template
8112
         generation.  Instead, they should be built during instantiation
8113
         in response to the saved STMT_IS_FULL_EXPR_P setting.  */
8114
      gcc_unreachable ();
8115
 
8116
    case OFFSET_REF:
8117
      mark_used (TREE_OPERAND (t, 1));
8118
      return t;
8119
 
8120
    default:
8121
      return t;
8122
    }
8123
}
8124
 
8125
/* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
8126
 
8127
static tree
8128
tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
8129
                          tree in_decl)
8130
{
8131
#define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
8132
 
8133
  tree purpose, value, chain;
8134
 
8135
  if (t == NULL)
8136
    return t;
8137
 
8138
  if (TREE_CODE (t) != TREE_LIST)
8139
    return tsubst_copy_and_build (t, args, complain, in_decl,
8140
                                  /*function_p=*/false);
8141
 
8142
  if (t == void_list_node)
8143
    return t;
8144
 
8145
  purpose = TREE_PURPOSE (t);
8146
  if (purpose)
8147
    purpose = RECUR (purpose);
8148
  value = TREE_VALUE (t);
8149
  if (value)
8150
    value = RECUR (value);
8151
  chain = TREE_CHAIN (t);
8152
  if (chain && chain != void_type_node)
8153
    chain = RECUR (chain);
8154
  return tree_cons (purpose, value, chain);
8155
#undef RECUR
8156
}
8157
 
8158
/* Like tsubst_copy for expressions, etc. but also does semantic
8159
   processing.  */
8160
 
8161
static tree
8162
tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8163
{
8164
  tree stmt, tmp;
8165
 
8166
  if (t == NULL_TREE || t == error_mark_node)
8167
    return t;
8168
 
8169
  if (EXPR_HAS_LOCATION (t))
8170
    input_location = EXPR_LOCATION (t);
8171
  if (STATEMENT_CODE_P (TREE_CODE (t)))
8172
    current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
8173
 
8174
  switch (TREE_CODE (t))
8175
    {
8176
    case STATEMENT_LIST:
8177
      {
8178
        tree_stmt_iterator i;
8179
        for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
8180
          tsubst_expr (tsi_stmt (i), args, complain, in_decl);
8181
        break;
8182
      }
8183
 
8184
    case CTOR_INITIALIZER:
8185
      finish_mem_initializers (tsubst_initializer_list
8186
                               (TREE_OPERAND (t, 0), args));
8187
      break;
8188
 
8189
    case RETURN_EXPR:
8190
      finish_return_stmt (tsubst_expr (TREE_OPERAND (t, 0),
8191
                                       args, complain, in_decl));
8192
      break;
8193
 
8194
    case EXPR_STMT:
8195
      tmp = tsubst_expr (EXPR_STMT_EXPR (t), args, complain, in_decl);
8196
      if (EXPR_STMT_STMT_EXPR_RESULT (t))
8197
        finish_stmt_expr_expr (tmp, cur_stmt_expr);
8198
      else
8199
        finish_expr_stmt (tmp);
8200
      break;
8201
 
8202
    case USING_STMT:
8203
      do_using_directive (tsubst_expr (USING_STMT_NAMESPACE (t),
8204
                                       args, complain, in_decl));
8205
      break;
8206
 
8207
    case DECL_EXPR:
8208
      {
8209
        tree decl;
8210
        tree init;
8211
 
8212
        decl = DECL_EXPR_DECL (t);
8213
        if (TREE_CODE (decl) == LABEL_DECL)
8214
          finish_label_decl (DECL_NAME (decl));
8215
        else if (TREE_CODE (decl) == USING_DECL)
8216
          {
8217
            tree scope = USING_DECL_SCOPE (decl);
8218
            tree name = DECL_NAME (decl);
8219
            tree decl;
8220
 
8221
            scope = tsubst_expr (scope, args, complain, in_decl);
8222
            decl = lookup_qualified_name (scope, name,
8223
                                          /*is_type_p=*/false,
8224
                                          /*complain=*/false);
8225
            if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
8226
              qualified_name_lookup_error (scope, name, decl);
8227
            else
8228
              do_local_using_decl (decl, scope, name);
8229
          }
8230
        else
8231
          {
8232
            init = DECL_INITIAL (decl);
8233
            decl = tsubst (decl, args, complain, in_decl);
8234
            if (decl != error_mark_node)
8235
              {
8236
                if (init)
8237
                  DECL_INITIAL (decl) = error_mark_node;
8238
                /* By marking the declaration as instantiated, we avoid
8239
                   trying to instantiate it.  Since instantiate_decl can't
8240
                   handle local variables, and since we've already done
8241
                   all that needs to be done, that's the right thing to
8242
                   do.  */
8243
                if (TREE_CODE (decl) == VAR_DECL)
8244
                  DECL_TEMPLATE_INSTANTIATED (decl) = 1;
8245
                if (TREE_CODE (decl) == VAR_DECL
8246
                    && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
8247
                  /* Anonymous aggregates are a special case.  */
8248
                  finish_anon_union (decl);
8249
                else
8250
                  {
8251
                    maybe_push_decl (decl);
8252
                    if (TREE_CODE (decl) == VAR_DECL
8253
                        && DECL_PRETTY_FUNCTION_P (decl))
8254
                      {
8255
                        /* For __PRETTY_FUNCTION__ we have to adjust the
8256
                           initializer.  */
8257
                        const char *const name
8258
                          = cxx_printable_name (current_function_decl, 2);
8259
                        init = cp_fname_init (name, &TREE_TYPE (decl));
8260
                      }
8261
                    else
8262
                      init = tsubst_expr (init, args, complain, in_decl);
8263
                    finish_decl (decl, init, NULL_TREE);
8264
                  }
8265
              }
8266
          }
8267
 
8268
        /* A DECL_EXPR can also be used as an expression, in the condition
8269
           clause of an if/for/while construct.  */
8270
        return decl;
8271
      }
8272
 
8273
    case FOR_STMT:
8274
      stmt = begin_for_stmt ();
8275
      tsubst_expr (FOR_INIT_STMT (t), args, complain, in_decl);
8276
      finish_for_init_stmt (stmt);
8277
      tmp = tsubst_expr (FOR_COND (t), args, complain, in_decl);
8278
      finish_for_cond (tmp, stmt);
8279
      tmp = tsubst_expr (FOR_EXPR (t), args, complain, in_decl);
8280
      finish_for_expr (tmp, stmt);
8281
      tsubst_expr (FOR_BODY (t), args, complain, in_decl);
8282
      finish_for_stmt (stmt);
8283
      break;
8284
 
8285
    case WHILE_STMT:
8286
      stmt = begin_while_stmt ();
8287
      tmp = tsubst_expr (WHILE_COND (t), args, complain, in_decl);
8288
      finish_while_stmt_cond (tmp, stmt);
8289
      tsubst_expr (WHILE_BODY (t), args, complain, in_decl);
8290
      finish_while_stmt (stmt);
8291
      break;
8292
 
8293
    case DO_STMT:
8294
      stmt = begin_do_stmt ();
8295
      tsubst_expr (DO_BODY (t), args, complain, in_decl);
8296
      finish_do_body (stmt);
8297
      tmp = tsubst_expr (DO_COND (t), args, complain, in_decl);
8298
      finish_do_stmt (tmp, stmt);
8299
      break;
8300
 
8301
    case IF_STMT:
8302
      stmt = begin_if_stmt ();
8303
      tmp = tsubst_expr (IF_COND (t), args, complain, in_decl);
8304
      finish_if_stmt_cond (tmp, stmt);
8305
      tsubst_expr (THEN_CLAUSE (t), args, complain, in_decl);
8306
      finish_then_clause (stmt);
8307
 
8308
      if (ELSE_CLAUSE (t))
8309
        {
8310
          begin_else_clause (stmt);
8311
          tsubst_expr (ELSE_CLAUSE (t), args, complain, in_decl);
8312
          finish_else_clause (stmt);
8313
        }
8314
 
8315
      finish_if_stmt (stmt);
8316
      break;
8317
 
8318
    case BIND_EXPR:
8319
      if (BIND_EXPR_BODY_BLOCK (t))
8320
        stmt = begin_function_body ();
8321
      else
8322
        stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
8323
                                    ? BCS_TRY_BLOCK : 0);
8324
 
8325
      tsubst_expr (BIND_EXPR_BODY (t), args, complain, in_decl);
8326
 
8327
      if (BIND_EXPR_BODY_BLOCK (t))
8328
        finish_function_body (stmt);
8329
      else
8330
        finish_compound_stmt (stmt);
8331
      break;
8332
 
8333
    case BREAK_STMT:
8334
      finish_break_stmt ();
8335
      break;
8336
 
8337
    case CONTINUE_STMT:
8338
      finish_continue_stmt ();
8339
      break;
8340
 
8341
    case SWITCH_STMT:
8342
      stmt = begin_switch_stmt ();
8343
      tmp = tsubst_expr (SWITCH_STMT_COND (t), args, complain, in_decl);
8344
      finish_switch_cond (tmp, stmt);
8345
      tsubst_expr (SWITCH_STMT_BODY (t), args, complain, in_decl);
8346
      finish_switch_stmt (stmt);
8347
      break;
8348
 
8349
    case CASE_LABEL_EXPR:
8350
      finish_case_label (tsubst_expr (CASE_LOW (t), args, complain, in_decl),
8351
                         tsubst_expr (CASE_HIGH (t), args, complain,
8352
                                      in_decl));
8353
      break;
8354
 
8355
    case LABEL_EXPR:
8356
      finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
8357
      break;
8358
 
8359
    case GOTO_EXPR:
8360
      tmp = GOTO_DESTINATION (t);
8361
      if (TREE_CODE (tmp) != LABEL_DECL)
8362
        /* Computed goto's must be tsubst'd into.  On the other hand,
8363
           non-computed gotos must not be; the identifier in question
8364
           will have no binding.  */
8365
        tmp = tsubst_expr (tmp, args, complain, in_decl);
8366
      else
8367
        tmp = DECL_NAME (tmp);
8368
      finish_goto_stmt (tmp);
8369
      break;
8370
 
8371
    case ASM_EXPR:
8372
      tmp = finish_asm_stmt
8373
        (ASM_VOLATILE_P (t),
8374
         tsubst_expr (ASM_STRING (t), args, complain, in_decl),
8375
         tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
8376
         tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
8377
         tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl));
8378
      {
8379
        tree asm_expr = tmp;
8380
        if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
8381
          asm_expr = TREE_OPERAND (asm_expr, 0);
8382
        ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
8383
      }
8384
      break;
8385
 
8386
    case TRY_BLOCK:
8387
      if (CLEANUP_P (t))
8388
        {
8389
          stmt = begin_try_block ();
8390
          tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
8391
          finish_cleanup_try_block (stmt);
8392
          finish_cleanup (tsubst_expr (TRY_HANDLERS (t), args,
8393
                                       complain, in_decl),
8394
                          stmt);
8395
        }
8396
      else
8397
        {
8398
          if (FN_TRY_BLOCK_P (t))
8399
            stmt = begin_function_try_block ();
8400
          else
8401
            stmt = begin_try_block ();
8402
 
8403
          tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
8404
 
8405
          if (FN_TRY_BLOCK_P (t))
8406
            finish_function_try_block (stmt);
8407
          else
8408
            finish_try_block (stmt);
8409
 
8410
          tsubst_expr (TRY_HANDLERS (t), args, complain, in_decl);
8411
          if (FN_TRY_BLOCK_P (t))
8412
            finish_function_handler_sequence (stmt);
8413
          else
8414
            finish_handler_sequence (stmt);
8415
        }
8416
      break;
8417
 
8418
    case HANDLER:
8419
      {
8420
        tree decl;
8421
 
8422
        stmt = begin_handler ();
8423
        if (HANDLER_PARMS (t))
8424
          {
8425
            decl = HANDLER_PARMS (t);
8426
            decl = tsubst (decl, args, complain, in_decl);
8427
            /* Prevent instantiate_decl from trying to instantiate
8428
               this variable.  We've already done all that needs to be
8429
               done.  */
8430
            DECL_TEMPLATE_INSTANTIATED (decl) = 1;
8431
          }
8432
        else
8433
          decl = NULL_TREE;
8434
        finish_handler_parms (decl, stmt);
8435
        tsubst_expr (HANDLER_BODY (t), args, complain, in_decl);
8436
        finish_handler (stmt);
8437
      }
8438
      break;
8439
 
8440
    case TAG_DEFN:
8441
      tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
8442
      break;
8443
 
8444
    default:
8445
      gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
8446
 
8447
      return tsubst_copy_and_build (t, args, complain, in_decl,
8448
                                    /*function_p=*/false);
8449
    }
8450
 
8451
  return NULL_TREE;
8452
}
8453
 
8454
/* T is a postfix-expression that is not being used in a function
8455
   call.  Return the substituted version of T.  */
8456
 
8457
static tree
8458
tsubst_non_call_postfix_expression (tree t, tree args,
8459
                                    tsubst_flags_t complain,
8460
                                    tree in_decl)
8461
{
8462
  if (TREE_CODE (t) == SCOPE_REF)
8463
    t = tsubst_qualified_id (t, args, complain, in_decl,
8464
                             /*done=*/false, /*address_p=*/false);
8465
  else
8466
    t = tsubst_copy_and_build (t, args, complain, in_decl,
8467
                               /*function_p=*/false);
8468
 
8469
  return t;
8470
}
8471
 
8472
/* Like tsubst but deals with expressions and performs semantic
8473
   analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
8474
 
8475
tree
8476
tsubst_copy_and_build (tree t,
8477
                       tree args,
8478
                       tsubst_flags_t complain,
8479
                       tree in_decl,
8480
                       bool function_p)
8481
{
8482
#define RECUR(NODE) \
8483
  tsubst_copy_and_build (NODE, args, complain, in_decl, /*function_p=*/false)
8484
 
8485
  tree op1;
8486
 
8487
  if (t == NULL_TREE || t == error_mark_node)
8488
    return t;
8489
 
8490
  switch (TREE_CODE (t))
8491
    {
8492
    case USING_DECL:
8493
      t = DECL_NAME (t);
8494
      /* Fall through.  */
8495
    case IDENTIFIER_NODE:
8496
      {
8497
        tree decl;
8498
        cp_id_kind idk;
8499
        bool non_integral_constant_expression_p;
8500
        const char *error_msg;
8501
 
8502
        if (IDENTIFIER_TYPENAME_P (t))
8503
          {
8504
            tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8505
            t = mangle_conv_op_name_for_type (new_type);
8506
          }
8507
 
8508
        /* Look up the name.  */
8509
        decl = lookup_name (t, 0);
8510
 
8511
        /* By convention, expressions use ERROR_MARK_NODE to indicate
8512
           failure, not NULL_TREE.  */
8513
        if (decl == NULL_TREE)
8514
          decl = error_mark_node;
8515
 
8516
        decl = finish_id_expression (t, decl, NULL_TREE,
8517
                                     &idk,
8518
                                     /*integral_constant_expression_p=*/false,
8519
                                     /*allow_non_integral_constant_expression_p=*/false,
8520
                                     &non_integral_constant_expression_p,
8521
                                     /*template_p=*/false,
8522
                                     /*done=*/true,
8523
                                     /*address_p=*/false,
8524
                                     /*template_arg_p=*/false,
8525
                                     &error_msg);
8526
        if (error_msg)
8527
          error (error_msg);
8528
        if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
8529
          decl = unqualified_name_lookup_error (decl);
8530
        return decl;
8531
      }
8532
 
8533
    case TEMPLATE_ID_EXPR:
8534
      {
8535
        tree object;
8536
        tree template = RECUR (TREE_OPERAND (t, 0));
8537
        tree targs = TREE_OPERAND (t, 1);
8538
 
8539
        if (targs)
8540
          targs = tsubst_template_args (targs, args, complain, in_decl);
8541
 
8542
        if (TREE_CODE (template) == COMPONENT_REF)
8543
          {
8544
            object = TREE_OPERAND (template, 0);
8545
            template = TREE_OPERAND (template, 1);
8546
          }
8547
        else
8548
          object = NULL_TREE;
8549
        template = lookup_template_function (template, targs);
8550
 
8551
        if (object)
8552
          return build3 (COMPONENT_REF, TREE_TYPE (template),
8553
                         object, template, NULL_TREE);
8554
        else
8555
          return template;
8556
      }
8557
 
8558
    case INDIRECT_REF:
8559
      {
8560
        tree r = RECUR (TREE_OPERAND (t, 0));
8561
 
8562
        if (REFERENCE_REF_P (t))
8563
          {
8564
            /* A type conversion to reference type will be enclosed in
8565
               such an indirect ref, but the substitution of the cast
8566
               will have also added such an indirect ref.  */
8567
            if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
8568
              r = convert_from_reference (r);
8569
          }
8570
        else
8571
          r = build_x_indirect_ref (r, "unary *");
8572
        return r;
8573
      }
8574
 
8575
    case NOP_EXPR:
8576
      return build_nop
8577
        (tsubst (TREE_TYPE (t), args, complain, in_decl),
8578
         RECUR (TREE_OPERAND (t, 0)));
8579
 
8580
    case CAST_EXPR:
8581
      return build_functional_cast
8582
        (tsubst (TREE_TYPE (t), args, complain, in_decl),
8583
         RECUR (TREE_OPERAND (t, 0)));
8584
 
8585
    case REINTERPRET_CAST_EXPR:
8586
      return build_reinterpret_cast
8587
        (tsubst (TREE_TYPE (t), args, complain, in_decl),
8588
         RECUR (TREE_OPERAND (t, 0)));
8589
 
8590
    case CONST_CAST_EXPR:
8591
      return build_const_cast
8592
        (tsubst (TREE_TYPE (t), args, complain, in_decl),
8593
         RECUR (TREE_OPERAND (t, 0)));
8594
 
8595
    case DYNAMIC_CAST_EXPR:
8596
      return build_dynamic_cast
8597
        (tsubst (TREE_TYPE (t), args, complain, in_decl),
8598
         RECUR (TREE_OPERAND (t, 0)));
8599
 
8600
    case STATIC_CAST_EXPR:
8601
      return build_static_cast
8602
        (tsubst (TREE_TYPE (t), args, complain, in_decl),
8603
         RECUR (TREE_OPERAND (t, 0)));
8604
 
8605
    case POSTDECREMENT_EXPR:
8606
    case POSTINCREMENT_EXPR:
8607
      op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8608
                                                args, complain, in_decl);
8609
      return build_x_unary_op (TREE_CODE (t), op1);
8610
 
8611
    case PREDECREMENT_EXPR:
8612
    case PREINCREMENT_EXPR:
8613
    case NEGATE_EXPR:
8614
    case BIT_NOT_EXPR:
8615
    case ABS_EXPR:
8616
    case TRUTH_NOT_EXPR:
8617
    case UNARY_PLUS_EXPR:  /* Unary + */
8618
    case REALPART_EXPR:
8619
    case IMAGPART_EXPR:
8620
      return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
8621
 
8622
    case ADDR_EXPR:
8623
      op1 = TREE_OPERAND (t, 0);
8624
      if (TREE_CODE (op1) == SCOPE_REF)
8625
        op1 = tsubst_qualified_id (op1, args, complain, in_decl,
8626
                                   /*done=*/true, /*address_p=*/true);
8627
      else
8628
        op1 = tsubst_non_call_postfix_expression (op1, args, complain,
8629
                                                  in_decl);
8630
      if (TREE_CODE (op1) == LABEL_DECL)
8631
        return finish_label_address_expr (DECL_NAME (op1));
8632
      return build_x_unary_op (ADDR_EXPR, op1);
8633
 
8634
    case PLUS_EXPR:
8635
    case MINUS_EXPR:
8636
    case MULT_EXPR:
8637
    case TRUNC_DIV_EXPR:
8638
    case CEIL_DIV_EXPR:
8639
    case FLOOR_DIV_EXPR:
8640
    case ROUND_DIV_EXPR:
8641
    case EXACT_DIV_EXPR:
8642
    case BIT_AND_EXPR:
8643
    case BIT_IOR_EXPR:
8644
    case BIT_XOR_EXPR:
8645
    case TRUNC_MOD_EXPR:
8646
    case FLOOR_MOD_EXPR:
8647
    case TRUTH_ANDIF_EXPR:
8648
    case TRUTH_ORIF_EXPR:
8649
    case TRUTH_AND_EXPR:
8650
    case TRUTH_OR_EXPR:
8651
    case RSHIFT_EXPR:
8652
    case LSHIFT_EXPR:
8653
    case RROTATE_EXPR:
8654
    case LROTATE_EXPR:
8655
    case EQ_EXPR:
8656
    case NE_EXPR:
8657
    case MAX_EXPR:
8658
    case MIN_EXPR:
8659
    case LE_EXPR:
8660
    case GE_EXPR:
8661
    case LT_EXPR:
8662
    case GT_EXPR:
8663
    case MEMBER_REF:
8664
    case DOTSTAR_EXPR:
8665
      return build_x_binary_op
8666
        (TREE_CODE (t),
8667
         RECUR (TREE_OPERAND (t, 0)),
8668
         RECUR (TREE_OPERAND (t, 1)),
8669
         /*overloaded_p=*/NULL);
8670
 
8671
    case SCOPE_REF:
8672
      return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
8673
                                  /*address_p=*/false);
8674
    case ARRAY_REF:
8675
      op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8676
                                                args, complain, in_decl);
8677
      return build_x_binary_op (ARRAY_REF, op1, RECUR (TREE_OPERAND (t, 1)),
8678
                                /*overloaded_p=*/NULL);
8679
 
8680
    case SIZEOF_EXPR:
8681
    case ALIGNOF_EXPR:
8682
      op1 = TREE_OPERAND (t, 0);
8683
      if (!args)
8684
        {
8685
          /* When there are no ARGS, we are trying to evaluate a
8686
             non-dependent expression from the parser.  Trying to do
8687
             the substitutions may not work.  */
8688
          if (!TYPE_P (op1))
8689
            op1 = TREE_TYPE (op1);
8690
        }
8691
      else
8692
        {
8693
          ++skip_evaluation;
8694
          op1 = RECUR (op1);
8695
          --skip_evaluation;
8696
        }
8697
      if (TYPE_P (op1))
8698
        return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
8699
      else
8700
        return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
8701
 
8702
    case MODOP_EXPR:
8703
      {
8704
        tree r = build_x_modify_expr
8705
          (RECUR (TREE_OPERAND (t, 0)),
8706
           TREE_CODE (TREE_OPERAND (t, 1)),
8707
           RECUR (TREE_OPERAND (t, 2)));
8708
        /* TREE_NO_WARNING must be set if either the expression was
8709
           parenthesized or it uses an operator such as >>= rather
8710
           than plain assignment.  In the former case, it was already
8711
           set and must be copied.  In the latter case,
8712
           build_x_modify_expr sets it and it must not be reset
8713
           here.  */
8714
        if (TREE_NO_WARNING (t))
8715
          TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
8716
        return r;
8717
      }
8718
 
8719
    case ARROW_EXPR:
8720
      op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8721
                                                args, complain, in_decl);
8722
      /* Remember that there was a reference to this entity.  */
8723
      if (DECL_P (op1))
8724
        mark_used (op1);
8725
      return build_x_arrow (op1);
8726
 
8727
    case NEW_EXPR:
8728
      return build_new
8729
        (RECUR (TREE_OPERAND (t, 0)),
8730
         RECUR (TREE_OPERAND (t, 1)),
8731
         RECUR (TREE_OPERAND (t, 2)),
8732
         RECUR (TREE_OPERAND (t, 3)),
8733
         NEW_EXPR_USE_GLOBAL (t));
8734
 
8735
    case DELETE_EXPR:
8736
     return delete_sanity
8737
       (RECUR (TREE_OPERAND (t, 0)),
8738
        RECUR (TREE_OPERAND (t, 1)),
8739
        DELETE_EXPR_USE_VEC (t),
8740
        DELETE_EXPR_USE_GLOBAL (t));
8741
 
8742
    case COMPOUND_EXPR:
8743
      return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
8744
                                    RECUR (TREE_OPERAND (t, 1)));
8745
 
8746
    case CALL_EXPR:
8747
      {
8748
        tree function;
8749
        tree call_args;
8750
        bool qualified_p;
8751
        bool koenig_p;
8752
 
8753
        function = TREE_OPERAND (t, 0);
8754
        /* When we parsed the expression,  we determined whether or
8755
           not Koenig lookup should be performed.  */
8756
        koenig_p = KOENIG_LOOKUP_P (t);
8757
        if (TREE_CODE (function) == SCOPE_REF)
8758
          {
8759
            qualified_p = true;
8760
            function = tsubst_qualified_id (function, args, complain, in_decl,
8761
                                            /*done=*/false,
8762
                                            /*address_p=*/false);
8763
          }
8764
        else
8765
          {
8766
            if (TREE_CODE (function) == COMPONENT_REF)
8767
              {
8768
                tree op = TREE_OPERAND (function, 1);
8769
 
8770
                qualified_p = (TREE_CODE (op) == SCOPE_REF
8771
                               || (BASELINK_P (op)
8772
                                   && BASELINK_QUALIFIED_P (op)));
8773
              }
8774
            else
8775
              qualified_p = false;
8776
 
8777
            function = tsubst_copy_and_build (function, args, complain,
8778
                                              in_decl,
8779
                                              !qualified_p);
8780
            if (BASELINK_P (function))
8781
              qualified_p = true;
8782
          }
8783
 
8784
        call_args = RECUR (TREE_OPERAND (t, 1));
8785
 
8786
        /* We do not perform argument-dependent lookup if normal
8787
           lookup finds a non-function, in accordance with the
8788
           expected resolution of DR 218.  */
8789
        if (koenig_p
8790
            && ((is_overloaded_fn (function)
8791
                 /* If lookup found a member function, the Koenig lookup is
8792
                    not appropriate, even if an unqualified-name was used
8793
                    to denote the function.  */
8794
                 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
8795
                || TREE_CODE (function) == IDENTIFIER_NODE))
8796
          function = perform_koenig_lookup (function, call_args);
8797
 
8798
        if (TREE_CODE (function) == IDENTIFIER_NODE)
8799
          {
8800
            unqualified_name_lookup_error (function);
8801
            return error_mark_node;
8802
          }
8803
 
8804
        /* Remember that there was a reference to this entity.  */
8805
        if (DECL_P (function))
8806
          mark_used (function);
8807
 
8808
        if (TREE_CODE (function) == OFFSET_REF)
8809
          return build_offset_ref_call_from_tree (function, call_args);
8810
        if (TREE_CODE (function) == COMPONENT_REF)
8811
          {
8812
            if (!BASELINK_P (TREE_OPERAND (function, 1)))
8813
              return finish_call_expr (function, call_args,
8814
                                       /*disallow_virtual=*/false,
8815
                                       /*koenig_p=*/false);
8816
            else
8817
              return (build_new_method_call
8818
                      (TREE_OPERAND (function, 0),
8819
                       TREE_OPERAND (function, 1),
8820
                       call_args, NULL_TREE,
8821
                       qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL));
8822
          }
8823
        return finish_call_expr (function, call_args,
8824
                                 /*disallow_virtual=*/qualified_p,
8825
                                 koenig_p);
8826
      }
8827
 
8828
    case COND_EXPR:
8829
      return build_x_conditional_expr
8830
        (RECUR (TREE_OPERAND (t, 0)),
8831
         RECUR (TREE_OPERAND (t, 1)),
8832
         RECUR (TREE_OPERAND (t, 2)));
8833
 
8834
    case PSEUDO_DTOR_EXPR:
8835
      return finish_pseudo_destructor_expr
8836
        (RECUR (TREE_OPERAND (t, 0)),
8837
         RECUR (TREE_OPERAND (t, 1)),
8838
         RECUR (TREE_OPERAND (t, 2)));
8839
 
8840
    case TREE_LIST:
8841
      {
8842
        tree purpose, value, chain;
8843
 
8844
        if (t == void_list_node)
8845
          return t;
8846
 
8847
        purpose = TREE_PURPOSE (t);
8848
        if (purpose)
8849
          purpose = RECUR (purpose);
8850
        value = TREE_VALUE (t);
8851
        if (value)
8852
          value = RECUR (value);
8853
        chain = TREE_CHAIN (t);
8854
        if (chain && chain != void_type_node)
8855
          chain = RECUR (chain);
8856
        if (purpose == TREE_PURPOSE (t)
8857
            && value == TREE_VALUE (t)
8858
            && chain == TREE_CHAIN (t))
8859
          return t;
8860
        return tree_cons (purpose, value, chain);
8861
      }
8862
 
8863
    case COMPONENT_REF:
8864
      {
8865
        tree object;
8866
        tree object_type;
8867
        tree member;
8868
 
8869
        object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8870
                                                     args, complain, in_decl);
8871
        /* Remember that there was a reference to this entity.  */
8872
        if (DECL_P (object))
8873
          mark_used (object);
8874
        object_type = TREE_TYPE (object);
8875
 
8876
        member = TREE_OPERAND (t, 1);
8877
        if (BASELINK_P (member))
8878
          member = tsubst_baselink (member,
8879
                                    non_reference (TREE_TYPE (object)),
8880
                                    args, complain, in_decl);
8881
        else
8882
          member = tsubst_copy (member, args, complain, in_decl);
8883
        if (member == error_mark_node)
8884
          return error_mark_node;
8885
 
8886
        if (object_type && !CLASS_TYPE_P (object_type))
8887
          {
8888
            if (TREE_CODE (member) == BIT_NOT_EXPR)
8889
              return finish_pseudo_destructor_expr (object,
8890
                                                    NULL_TREE,
8891
                                                    object_type);
8892
            else if (TREE_CODE (member) == SCOPE_REF
8893
                     && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
8894
              return finish_pseudo_destructor_expr (object,
8895
                                                    object,
8896
                                                    object_type);
8897
          }
8898
        else if (TREE_CODE (member) == SCOPE_REF
8899
                 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
8900
          {
8901
            tree tmpl;
8902
            tree args;
8903
 
8904
            /* Lookup the template functions now that we know what the
8905
               scope is.  */
8906
            tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
8907
            args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
8908
            member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
8909
                                            /*is_type_p=*/false,
8910
                                            /*complain=*/false);
8911
            if (BASELINK_P (member))
8912
              {
8913
                BASELINK_FUNCTIONS (member)
8914
                  = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
8915
                              args);
8916
                member = (adjust_result_of_qualified_name_lookup
8917
                          (member, BINFO_TYPE (BASELINK_BINFO (member)),
8918
                           object_type));
8919
              }
8920
            else
8921
              {
8922
                qualified_name_lookup_error (object_type, tmpl, member);
8923
                return error_mark_node;
8924
              }
8925
          }
8926
        else if (TREE_CODE (member) == SCOPE_REF
8927
                 && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
8928
                 && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
8929
          {
8930
            if (complain & tf_error)
8931
              {
8932
                if (TYPE_P (TREE_OPERAND (member, 0)))
8933
                  error ("%qT is not a class or namespace",
8934
                         TREE_OPERAND (member, 0));
8935
                else
8936
                  error ("%qD is not a class or namespace",
8937
                         TREE_OPERAND (member, 0));
8938
              }
8939
            return error_mark_node;
8940
          }
8941
        else if (TREE_CODE (member) == FIELD_DECL)
8942
          return finish_non_static_data_member (member, object, NULL_TREE);
8943
 
8944
        return finish_class_member_access_expr (object, member,
8945
                                                /*template_p=*/false);
8946
      }
8947
 
8948
    case THROW_EXPR:
8949
      return build_throw
8950
        (RECUR (TREE_OPERAND (t, 0)));
8951
 
8952
    case CONSTRUCTOR:
8953
      {
8954
        VEC(constructor_elt,gc) *n;
8955
        constructor_elt *ce;
8956
        unsigned HOST_WIDE_INT idx;
8957
        tree r;
8958
        tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8959
        bool process_index_p;
8960
 
8961
        /* digest_init will do the wrong thing if we let it.  */
8962
        if (type && TYPE_PTRMEMFUNC_P (type))
8963
          return t;
8964
 
8965
        /* We do not want to process the index of aggregate
8966
           initializers as they are identifier nodes which will be
8967
           looked up by digest_init.  */
8968
        process_index_p = !(type && IS_AGGR_TYPE (type));
8969
 
8970
        n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
8971
        for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
8972
          {
8973
            if (ce->index && process_index_p)
8974
              ce->index = RECUR (ce->index);
8975
            ce->value = RECUR (ce->value);
8976
          }
8977
 
8978
        r = build_constructor (NULL_TREE, n);
8979
        TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
8980
 
8981
        if (type)
8982
          return digest_init (type, r);
8983
        return r;
8984
      }
8985
 
8986
    case TYPEID_EXPR:
8987
      {
8988
        tree operand_0 = RECUR (TREE_OPERAND (t, 0));
8989
        if (TYPE_P (operand_0))
8990
          return get_typeid (operand_0);
8991
        return build_typeid (operand_0);
8992
      }
8993
 
8994
    case VAR_DECL:
8995
      if (!args)
8996
        return t;
8997
      /* Fall through */
8998
 
8999
    case PARM_DECL:
9000
      {
9001
        tree r = tsubst_copy (t, args, complain, in_decl);
9002
 
9003
        if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
9004
          /* If the original type was a reference, we'll be wrapped in
9005
             the appropriate INDIRECT_REF.  */
9006
          r = convert_from_reference (r);
9007
        return r;
9008
      }
9009
 
9010
    case VA_ARG_EXPR:
9011
      return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
9012
                             tsubst_copy (TREE_TYPE (t), args, complain,
9013
                                          in_decl));
9014
 
9015
    case OFFSETOF_EXPR:
9016
      return fold_offsetof (RECUR (TREE_OPERAND (t, 0)));
9017
 
9018
    case STMT_EXPR:
9019
      {
9020
        tree old_stmt_expr = cur_stmt_expr;
9021
        tree stmt_expr = begin_stmt_expr ();
9022
 
9023
        cur_stmt_expr = stmt_expr;
9024
        tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl);
9025
        stmt_expr = finish_stmt_expr (stmt_expr, false);
9026
        cur_stmt_expr = old_stmt_expr;
9027
 
9028
        return stmt_expr;
9029
      }
9030
 
9031
    case CONST_DECL:
9032
      t = tsubst_copy (t, args, complain, in_decl);
9033
      /* As in finish_id_expression, we resolve enumeration constants
9034
         to their underlying values.  */
9035
      if (TREE_CODE (t) == CONST_DECL)
9036
        return DECL_INITIAL (t);
9037
      return t;
9038
 
9039
    default:
9040
      /* Handle Objective-C++ constructs, if appropriate.  */
9041
      {
9042
        tree subst
9043
          = objcp_tsubst_copy_and_build (t, args, complain,
9044
                                         in_decl, /*function_p=*/false);
9045
        if (subst)
9046
          return subst;
9047
      }
9048
      return tsubst_copy (t, args, complain, in_decl);
9049
    }
9050
 
9051
#undef RECUR
9052
}
9053
 
9054
/* Verify that the instantiated ARGS are valid. For type arguments,
9055
   make sure that the type's linkage is ok. For non-type arguments,
9056
   make sure they are constants if they are integral or enumerations.
9057
   Emit an error under control of COMPLAIN, and return TRUE on error.  */
9058
 
9059
static bool
9060
check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
9061
{
9062
  int ix, len = DECL_NTPARMS (tmpl);
9063
  bool result = false;
9064
 
9065
  for (ix = 0; ix != len; ix++)
9066
    {
9067
      tree t = TREE_VEC_ELT (args, ix);
9068
 
9069
      if (TYPE_P (t))
9070
        {
9071
          /* [basic.link]: A name with no linkage (notably, the name
9072
             of a class or enumeration declared in a local scope)
9073
             shall not be used to declare an entity with linkage.
9074
             This implies that names with no linkage cannot be used as
9075
             template arguments.  */
9076
          tree nt = no_linkage_check (t, /*relaxed_p=*/false);
9077
 
9078
          if (nt)
9079
            {
9080
              /* DR 488 makes use of a type with no linkage cause
9081
                 type deduction to fail.  */
9082
              if (complain & tf_error)
9083
                {
9084
                  if (TYPE_ANONYMOUS_P (nt))
9085
                    error ("%qT is/uses anonymous type", t);
9086
                  else
9087
                    error ("%qT uses local type %qT", t, nt);
9088
                }
9089
              result = true;
9090
            }
9091
          /* In order to avoid all sorts of complications, we do not
9092
             allow variably-modified types as template arguments.  */
9093
          else if (variably_modified_type_p (t, NULL_TREE))
9094
            {
9095
              if (complain & tf_error)
9096
                error ("%qT is a variably modified type", t);
9097
              result = true;
9098
            }
9099
        }
9100
      /* A non-type argument of integral or enumerated type must be a
9101
         constant.  */
9102
      else if (TREE_TYPE (t)
9103
               && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
9104
               && !TREE_CONSTANT (t))
9105
        {
9106
          if (complain & tf_error)
9107
            error ("integral expression %qE is not constant", t);
9108
          result = true;
9109
        }
9110
    }
9111
  if (result && (complain & tf_error))
9112
    error ("  trying to instantiate %qD", tmpl);
9113
  return result;
9114
}
9115
 
9116
/* Instantiate the indicated variable or function template TMPL with
9117
   the template arguments in TARG_PTR.  */
9118
 
9119
tree
9120
instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
9121
{
9122
  tree fndecl;
9123
  tree gen_tmpl;
9124
  tree spec;
9125
 
9126
  if (tmpl == error_mark_node)
9127
    return error_mark_node;
9128
 
9129
  gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
9130
 
9131
  /* If this function is a clone, handle it specially.  */
9132
  if (DECL_CLONED_FUNCTION_P (tmpl))
9133
    {
9134
      tree spec;
9135
      tree clone;
9136
 
9137
      spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
9138
                                   complain);
9139
      if (spec == error_mark_node)
9140
        return error_mark_node;
9141
 
9142
      /* Look for the clone.  */
9143
      FOR_EACH_CLONE (clone, spec)
9144
        if (DECL_NAME (clone) == DECL_NAME (tmpl))
9145
          return clone;
9146
      /* We should always have found the clone by now.  */
9147
      gcc_unreachable ();
9148
      return NULL_TREE;
9149
    }
9150
 
9151
  /* Check to see if we already have this specialization.  */
9152
  spec = retrieve_specialization (tmpl, targ_ptr,
9153
                                  /*class_specializations_p=*/false);
9154
  if (spec != NULL_TREE)
9155
    return spec;
9156
 
9157
  gen_tmpl = most_general_template (tmpl);
9158
  if (tmpl != gen_tmpl)
9159
    {
9160
      /* The TMPL is a partial instantiation.  To get a full set of
9161
         arguments we must add the arguments used to perform the
9162
         partial instantiation.  */
9163
      targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
9164
                                              targ_ptr);
9165
 
9166
      /* Check to see if we already have this specialization.  */
9167
      spec = retrieve_specialization (gen_tmpl, targ_ptr,
9168
                                      /*class_specializations_p=*/false);
9169
      if (spec != NULL_TREE)
9170
        return spec;
9171
    }
9172
 
9173
  if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
9174
                               complain))
9175
    return error_mark_node;
9176
 
9177
  /* We are building a FUNCTION_DECL, during which the access of its
9178
     parameters and return types have to be checked.  However this
9179
     FUNCTION_DECL which is the desired context for access checking
9180
     is not built yet.  We solve this chicken-and-egg problem by
9181
     deferring all checks until we have the FUNCTION_DECL.  */
9182
  push_deferring_access_checks (dk_deferred);
9183
 
9184
  /* Substitute template parameters.  */
9185
  fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
9186
                   targ_ptr, complain, gen_tmpl);
9187
  if (fndecl == error_mark_node)
9188
    return error_mark_node;
9189
 
9190
  /* Now we know the specialization, compute access previously
9191
     deferred.  */
9192
  push_access_scope (fndecl);
9193
  perform_deferred_access_checks ();
9194
  pop_access_scope (fndecl);
9195
  pop_deferring_access_checks ();
9196
 
9197
  /* The DECL_TI_TEMPLATE should always be the immediate parent
9198
     template, not the most general template.  */
9199
  DECL_TI_TEMPLATE (fndecl) = tmpl;
9200
 
9201
  /* If we've just instantiated the main entry point for a function,
9202
     instantiate all the alternate entry points as well.  We do this
9203
     by cloning the instantiation of the main entry point, not by
9204
     instantiating the template clones.  */
9205
  if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
9206
    clone_function_decl (fndecl, /*update_method_vec_p=*/0);
9207
 
9208
  return fndecl;
9209
}
9210
 
9211
/* The FN is a TEMPLATE_DECL for a function.  The ARGS are the
9212
   arguments that are being used when calling it.  TARGS is a vector
9213
   into which the deduced template arguments are placed.
9214
 
9215
   Return zero for success, 2 for an incomplete match that doesn't resolve
9216
   all the types, and 1 for complete failure.  An error message will be
9217
   printed only for an incomplete match.
9218
 
9219
   If FN is a conversion operator, or we are trying to produce a specific
9220
   specialization, RETURN_TYPE is the return type desired.
9221
 
9222
   The EXPLICIT_TARGS are explicit template arguments provided via a
9223
   template-id.
9224
 
9225
   The parameter STRICT is one of:
9226
 
9227
   DEDUCE_CALL:
9228
     We are deducing arguments for a function call, as in
9229
     [temp.deduct.call].
9230
 
9231
   DEDUCE_CONV:
9232
     We are deducing arguments for a conversion function, as in
9233
     [temp.deduct.conv].
9234
 
9235
   DEDUCE_EXACT:
9236
     We are deducing arguments when doing an explicit instantiation
9237
     as in [temp.explicit], when determining an explicit specialization
9238
     as in [temp.expl.spec], or when taking the address of a function
9239
     template, as in [temp.deduct.funcaddr].  */
9240
 
9241
int
9242
fn_type_unification (tree fn,
9243
                     tree explicit_targs,
9244
                     tree targs,
9245
                     tree args,
9246
                     tree return_type,
9247
                     unification_kind_t strict,
9248
                     int flags)
9249
{
9250
  tree parms;
9251
  tree fntype;
9252
  int result;
9253
 
9254
  gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
9255
 
9256
  fntype = TREE_TYPE (fn);
9257
  if (explicit_targs)
9258
    {
9259
      /* [temp.deduct]
9260
 
9261
         The specified template arguments must match the template
9262
         parameters in kind (i.e., type, nontype, template), and there
9263
         must not be more arguments than there are parameters;
9264
         otherwise type deduction fails.
9265
 
9266
         Nontype arguments must match the types of the corresponding
9267
         nontype template parameters, or must be convertible to the
9268
         types of the corresponding nontype parameters as specified in
9269
         _temp.arg.nontype_, otherwise type deduction fails.
9270
 
9271
         All references in the function type of the function template
9272
         to the corresponding template parameters are replaced by the
9273
         specified template argument values.  If a substitution in a
9274
         template parameter or in the function type of the function
9275
         template results in an invalid type, type deduction fails.  */
9276
      int i;
9277
      tree converted_args;
9278
      bool incomplete;
9279
 
9280
      if (explicit_targs == error_mark_node)
9281
        return 1;
9282
 
9283
      converted_args
9284
        = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
9285
                                  explicit_targs, NULL_TREE, tf_none,
9286
                                  /*require_all_arguments=*/0));
9287
      if (converted_args == error_mark_node)
9288
        return 1;
9289
 
9290
      /* Substitute the explicit args into the function type.  This is
9291
         necessary so that, for instance, explicitly declared function
9292
         arguments can match null pointed constants.  If we were given
9293
         an incomplete set of explicit args, we must not do semantic
9294
         processing during substitution as we could create partial
9295
         instantiations.  */
9296
      incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
9297
      processing_template_decl += incomplete;
9298
      fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
9299
      processing_template_decl -= incomplete;
9300
 
9301
      if (fntype == error_mark_node)
9302
        return 1;
9303
 
9304
      /* Place the explicitly specified arguments in TARGS.  */
9305
      for (i = NUM_TMPL_ARGS (converted_args); i--;)
9306
        TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
9307
    }
9308
 
9309
  parms = TYPE_ARG_TYPES (fntype);
9310
  /* Never do unification on the 'this' parameter.  */
9311
  if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
9312
    parms = TREE_CHAIN (parms);
9313
 
9314
  if (return_type)
9315
    {
9316
      parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
9317
      args = tree_cons (NULL_TREE, return_type, args);
9318
    }
9319
 
9320
  /* We allow incomplete unification without an error message here
9321
     because the standard doesn't seem to explicitly prohibit it.  Our
9322
     callers must be ready to deal with unification failures in any
9323
     event.  */
9324
  result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
9325
                                  targs, parms, args, /*subr=*/0,
9326
                                  strict, flags);
9327
 
9328
  if (result == 0)
9329
    /* All is well so far.  Now, check:
9330
 
9331
       [temp.deduct]
9332
 
9333
       When all template arguments have been deduced, all uses of
9334
       template parameters in nondeduced contexts are replaced with
9335
       the corresponding deduced argument values.  If the
9336
       substitution results in an invalid type, as described above,
9337
       type deduction fails.  */
9338
    if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
9339
        == error_mark_node)
9340
      return 1;
9341
 
9342
  return result;
9343
}
9344
 
9345
/* Adjust types before performing type deduction, as described in
9346
   [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
9347
   sections are symmetric.  PARM is the type of a function parameter
9348
   or the return type of the conversion function.  ARG is the type of
9349
   the argument passed to the call, or the type of the value
9350
   initialized with the result of the conversion function.  */
9351
 
9352
static int
9353
maybe_adjust_types_for_deduction (unification_kind_t strict,
9354
                                  tree* parm,
9355
                                  tree* arg)
9356
{
9357
  int result = 0;
9358
 
9359
  switch (strict)
9360
    {
9361
    case DEDUCE_CALL:
9362
      break;
9363
 
9364
    case DEDUCE_CONV:
9365
      {
9366
        /* Swap PARM and ARG throughout the remainder of this
9367
           function; the handling is precisely symmetric since PARM
9368
           will initialize ARG rather than vice versa.  */
9369
        tree* temp = parm;
9370
        parm = arg;
9371
        arg = temp;
9372
        break;
9373
      }
9374
 
9375
    case DEDUCE_EXACT:
9376
      /* There is nothing to do in this case.  */
9377
      return 0;
9378
 
9379
    default:
9380
      gcc_unreachable ();
9381
    }
9382
 
9383
  if (TREE_CODE (*parm) != REFERENCE_TYPE)
9384
    {
9385
      /* [temp.deduct.call]
9386
 
9387
         If P is not a reference type:
9388
 
9389
         --If A is an array type, the pointer type produced by the
9390
         array-to-pointer standard conversion (_conv.array_) is
9391
         used in place of A for type deduction; otherwise,
9392
 
9393
         --If A is a function type, the pointer type produced by
9394
         the function-to-pointer standard conversion
9395
         (_conv.func_) is used in place of A for type deduction;
9396
         otherwise,
9397
 
9398
         --If A is a cv-qualified type, the top level
9399
         cv-qualifiers of A's type are ignored for type
9400
         deduction.  */
9401
      if (TREE_CODE (*arg) == ARRAY_TYPE)
9402
        *arg = build_pointer_type (TREE_TYPE (*arg));
9403
      else if (TREE_CODE (*arg) == FUNCTION_TYPE)
9404
        *arg = build_pointer_type (*arg);
9405
      else
9406
        *arg = TYPE_MAIN_VARIANT (*arg);
9407
    }
9408
 
9409
  /* [temp.deduct.call]
9410
 
9411
     If P is a cv-qualified type, the top level cv-qualifiers
9412
     of P's type are ignored for type deduction.  If P is a
9413
     reference type, the type referred to by P is used for
9414
     type deduction.  */
9415
  *parm = TYPE_MAIN_VARIANT (*parm);
9416
  if (TREE_CODE (*parm) == REFERENCE_TYPE)
9417
    {
9418
      *parm = TREE_TYPE (*parm);
9419
      result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9420
    }
9421
 
9422
  /* DR 322. For conversion deduction, remove a reference type on parm
9423
     too (which has been swapped into ARG).  */
9424
  if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
9425
    *arg = TREE_TYPE (*arg);
9426
 
9427
  return result;
9428
}
9429
 
9430
/* Most parms like fn_type_unification.
9431
 
9432
   If SUBR is 1, we're being called recursively (to unify the
9433
   arguments of a function or method parameter of a function
9434
   template). */
9435
 
9436
static int
9437
type_unification_real (tree tparms,
9438
                       tree targs,
9439
                       tree xparms,
9440
                       tree xargs,
9441
                       int subr,
9442
                       unification_kind_t strict,
9443
                       int flags)
9444
{
9445
  tree parm, arg;
9446
  int i;
9447
  int ntparms = TREE_VEC_LENGTH (tparms);
9448
  int sub_strict;
9449
  int saw_undeduced = 0;
9450
  tree parms, args;
9451
 
9452
  gcc_assert (TREE_CODE (tparms) == TREE_VEC);
9453
  gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
9454
  gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
9455
  gcc_assert (ntparms > 0);
9456
 
9457
  switch (strict)
9458
    {
9459
    case DEDUCE_CALL:
9460
      sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
9461
                    | UNIFY_ALLOW_DERIVED);
9462
      break;
9463
 
9464
    case DEDUCE_CONV:
9465
      sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
9466
      break;
9467
 
9468
    case DEDUCE_EXACT:
9469
      sub_strict = UNIFY_ALLOW_NONE;
9470
      break;
9471
 
9472
    default:
9473
      gcc_unreachable ();
9474
    }
9475
 
9476
 again:
9477
  parms = xparms;
9478
  args = xargs;
9479
 
9480
  while (parms && parms != void_list_node
9481
         && args && args != void_list_node)
9482
    {
9483
      parm = TREE_VALUE (parms);
9484
      parms = TREE_CHAIN (parms);
9485
      arg = TREE_VALUE (args);
9486
      args = TREE_CHAIN (args);
9487
 
9488
      if (arg == error_mark_node)
9489
        return 1;
9490
      if (arg == unknown_type_node)
9491
        /* We can't deduce anything from this, but we might get all the
9492
           template args from other function args.  */
9493
        continue;
9494
 
9495
      /* Conversions will be performed on a function argument that
9496
         corresponds with a function parameter that contains only
9497
         non-deducible template parameters and explicitly specified
9498
         template parameters.  */
9499
      if (!uses_template_parms (parm))
9500
        {
9501
          tree type;
9502
 
9503
          if (!TYPE_P (arg))
9504
            type = TREE_TYPE (arg);
9505
          else
9506
            type = arg;
9507
 
9508
          if (same_type_p (parm, type))
9509
            continue;
9510
          if (strict != DEDUCE_EXACT
9511
              && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
9512
                                  flags))
9513
            continue;
9514
 
9515
          return 1;
9516
        }
9517
 
9518
      if (!TYPE_P (arg))
9519
        {
9520
          gcc_assert (TREE_TYPE (arg) != NULL_TREE);
9521
          if (type_unknown_p (arg))
9522
            {
9523
              /* [temp.deduct.type] A template-argument can be deduced from
9524
                 a pointer to function or pointer to member function
9525
                 argument if the set of overloaded functions does not
9526
                 contain function templates and at most one of a set of
9527
                 overloaded functions provides a unique match.  */
9528
 
9529
              if (resolve_overloaded_unification
9530
                  (tparms, targs, parm, arg, strict, sub_strict)
9531
                  != 0)
9532
                return 1;
9533
              continue;
9534
            }
9535
          arg = TREE_TYPE (arg);
9536
          if (arg == error_mark_node)
9537
            return 1;
9538
        }
9539
 
9540
      {
9541
        int arg_strict = sub_strict;
9542
 
9543
        if (!subr)
9544
          arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9545
 
9546
        if (unify (tparms, targs, parm, arg, arg_strict))
9547
          return 1;
9548
      }
9549
    }
9550
 
9551
  /* Fail if we've reached the end of the parm list, and more args
9552
     are present, and the parm list isn't variadic.  */
9553
  if (args && args != void_list_node && parms == void_list_node)
9554
    return 1;
9555
  /* Fail if parms are left and they don't have default values.  */
9556
  if (parms && parms != void_list_node
9557
      && TREE_PURPOSE (parms) == NULL_TREE)
9558
    return 1;
9559
 
9560
  if (!subr)
9561
    for (i = 0; i < ntparms; i++)
9562
      if (!TREE_VEC_ELT (targs, i))
9563
        {
9564
          tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
9565
 
9566
          /* If this is an undeduced nontype parameter that depends on
9567
             a type parameter, try another pass; its type may have been
9568
             deduced from a later argument than the one from which
9569
             this parameter can be deduced.  */
9570
          if (TREE_CODE (tparm) == PARM_DECL
9571
              && uses_template_parms (TREE_TYPE (tparm))
9572
              && !saw_undeduced++)
9573
            goto again;
9574
 
9575
          return 2;
9576
        }
9577
 
9578
  return 0;
9579
}
9580
 
9581
/* Subroutine of type_unification_real.  Args are like the variables at the
9582
   call site.  ARG is an overloaded function (or template-id); we try
9583
   deducing template args from each of the overloads, and if only one
9584
   succeeds, we go with that.  Modifies TARGS and returns 0 on success.  */
9585
 
9586
static int
9587
resolve_overloaded_unification (tree tparms,
9588
                                tree targs,
9589
                                tree parm,
9590
                                tree arg,
9591
                                unification_kind_t strict,
9592
                                int sub_strict)
9593
{
9594
  tree tempargs = copy_node (targs);
9595
  int good = 0;
9596
  bool addr_p;
9597
 
9598
  if (TREE_CODE (arg) == ADDR_EXPR)
9599
    {
9600
      arg = TREE_OPERAND (arg, 0);
9601
      addr_p = true;
9602
    }
9603
  else
9604
    addr_p = false;
9605
 
9606
  if (TREE_CODE (arg) == COMPONENT_REF)
9607
    /* Handle `&x' where `x' is some static or non-static member
9608
       function name.  */
9609
    arg = TREE_OPERAND (arg, 1);
9610
 
9611
  if (TREE_CODE (arg) == OFFSET_REF)
9612
    arg = TREE_OPERAND (arg, 1);
9613
 
9614
  /* Strip baselink information.  */
9615
  if (BASELINK_P (arg))
9616
    arg = BASELINK_FUNCTIONS (arg);
9617
 
9618
  if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
9619
    {
9620
      /* If we got some explicit template args, we need to plug them into
9621
         the affected templates before we try to unify, in case the
9622
         explicit args will completely resolve the templates in question.  */
9623
 
9624
      tree expl_subargs = TREE_OPERAND (arg, 1);
9625
      arg = TREE_OPERAND (arg, 0);
9626
 
9627
      for (; arg; arg = OVL_NEXT (arg))
9628
        {
9629
          tree fn = OVL_CURRENT (arg);
9630
          tree subargs, elem;
9631
 
9632
          if (TREE_CODE (fn) != TEMPLATE_DECL)
9633
            continue;
9634
 
9635
          subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
9636
                                  expl_subargs, /*check_ret=*/false);
9637
          if (subargs)
9638
            {
9639
              elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
9640
              good += try_one_overload (tparms, targs, tempargs, parm,
9641
                                        elem, strict, sub_strict, addr_p);
9642
            }
9643
        }
9644
    }
9645
  else
9646
    {
9647
      gcc_assert (TREE_CODE (arg) == OVERLOAD
9648
                  || TREE_CODE (arg) == FUNCTION_DECL);
9649
 
9650
      for (; arg; arg = OVL_NEXT (arg))
9651
        good += try_one_overload (tparms, targs, tempargs, parm,
9652
                                  TREE_TYPE (OVL_CURRENT (arg)),
9653
                                  strict, sub_strict, addr_p);
9654
    }
9655
 
9656
  /* [temp.deduct.type] A template-argument can be deduced from a pointer
9657
     to function or pointer to member function argument if the set of
9658
     overloaded functions does not contain function templates and at most
9659
     one of a set of overloaded functions provides a unique match.
9660
 
9661
     So if we found multiple possibilities, we return success but don't
9662
     deduce anything.  */
9663
 
9664
  if (good == 1)
9665
    {
9666
      int i = TREE_VEC_LENGTH (targs);
9667
      for (; i--; )
9668
        if (TREE_VEC_ELT (tempargs, i))
9669
          TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
9670
    }
9671
  if (good)
9672
    return 0;
9673
 
9674
  return 1;
9675
}
9676
 
9677
/* Subroutine of resolve_overloaded_unification; does deduction for a single
9678
   overload.  Fills TARGS with any deduced arguments, or error_mark_node if
9679
   different overloads deduce different arguments for a given parm.
9680
   ADDR_P is true if the expression for which deduction is being
9681
   performed was of the form "& fn" rather than simply "fn".
9682
 
9683
   Returns 1 on success.  */
9684
 
9685
static int
9686
try_one_overload (tree tparms,
9687
                  tree orig_targs,
9688
                  tree targs,
9689
                  tree parm,
9690
                  tree arg,
9691
                  unification_kind_t strict,
9692
                  int sub_strict,
9693
                  bool addr_p)
9694
{
9695
  int nargs;
9696
  tree tempargs;
9697
  int i;
9698
 
9699
  /* [temp.deduct.type] A template-argument can be deduced from a pointer
9700
     to function or pointer to member function argument if the set of
9701
     overloaded functions does not contain function templates and at most
9702
     one of a set of overloaded functions provides a unique match.
9703
 
9704
     So if this is a template, just return success.  */
9705
 
9706
  if (uses_template_parms (arg))
9707
    return 1;
9708
 
9709
  if (TREE_CODE (arg) == METHOD_TYPE)
9710
    arg = build_ptrmemfunc_type (build_pointer_type (arg));
9711
  else if (addr_p)
9712
    arg = build_pointer_type (arg);
9713
 
9714
  sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9715
 
9716
  /* We don't copy orig_targs for this because if we have already deduced
9717
     some template args from previous args, unify would complain when we
9718
     try to deduce a template parameter for the same argument, even though
9719
     there isn't really a conflict.  */
9720
  nargs = TREE_VEC_LENGTH (targs);
9721
  tempargs = make_tree_vec (nargs);
9722
 
9723
  if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
9724
    return 0;
9725
 
9726
  /* First make sure we didn't deduce anything that conflicts with
9727
     explicitly specified args.  */
9728
  for (i = nargs; i--; )
9729
    {
9730
      tree elt = TREE_VEC_ELT (tempargs, i);
9731
      tree oldelt = TREE_VEC_ELT (orig_targs, i);
9732
 
9733
      if (!elt)
9734
        /*NOP*/;
9735
      else if (uses_template_parms (elt))
9736
        /* Since we're unifying against ourselves, we will fill in
9737
           template args used in the function parm list with our own
9738
           template parms.  Discard them.  */
9739
        TREE_VEC_ELT (tempargs, i) = NULL_TREE;
9740
      else if (oldelt && !template_args_equal (oldelt, elt))
9741
        return 0;
9742
    }
9743
 
9744
  for (i = nargs; i--; )
9745
    {
9746
      tree elt = TREE_VEC_ELT (tempargs, i);
9747
 
9748
      if (elt)
9749
        TREE_VEC_ELT (targs, i) = elt;
9750
    }
9751
 
9752
  return 1;
9753
}
9754
 
9755
/* PARM is a template class (perhaps with unbound template
9756
   parameters).  ARG is a fully instantiated type.  If ARG can be
9757
   bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
9758
   TARGS are as for unify.  */
9759
 
9760
static tree
9761
try_class_unification (tree tparms, tree targs, tree parm, tree arg)
9762
{
9763
  tree copy_of_targs;
9764
 
9765
  if (!CLASSTYPE_TEMPLATE_INFO (arg)
9766
      || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
9767
          != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
9768
    return NULL_TREE;
9769
 
9770
  /* We need to make a new template argument vector for the call to
9771
     unify.  If we used TARGS, we'd clutter it up with the result of
9772
     the attempted unification, even if this class didn't work out.
9773
     We also don't want to commit ourselves to all the unifications
9774
     we've already done, since unification is supposed to be done on
9775
     an argument-by-argument basis.  In other words, consider the
9776
     following pathological case:
9777
 
9778
       template <int I, int J, int K>
9779
       struct S {};
9780
 
9781
       template <int I, int J>
9782
       struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
9783
 
9784
       template <int I, int J, int K>
9785
       void f(S<I, J, K>, S<I, I, I>);
9786
 
9787
       void g() {
9788
         S<0, 0, 0> s0;
9789
         S<0, 1, 2> s2;
9790
 
9791
         f(s0, s2);
9792
       }
9793
 
9794
     Now, by the time we consider the unification involving `s2', we
9795
     already know that we must have `f<0, 0, 0>'.  But, even though
9796
     `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
9797
     because there are two ways to unify base classes of S<0, 1, 2>
9798
     with S<I, I, I>.  If we kept the already deduced knowledge, we
9799
     would reject the possibility I=1.  */
9800
  copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
9801
 
9802
  /* If unification failed, we're done.  */
9803
  if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
9804
             CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
9805
    return NULL_TREE;
9806
 
9807
  return arg;
9808
}
9809
 
9810
/* Given a template type PARM and a class type ARG, find the unique
9811
   base type in ARG that is an instance of PARM.  We do not examine
9812
   ARG itself; only its base-classes.  If there is not exactly one
9813
   appropriate base class, return NULL_TREE.  PARM may be the type of
9814
   a partial specialization, as well as a plain template type.  Used
9815
   by unify.  */
9816
 
9817
static tree
9818
get_template_base (tree tparms, tree targs, tree parm, tree arg)
9819
{
9820
  tree rval = NULL_TREE;
9821
  tree binfo;
9822
 
9823
  gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
9824
 
9825
  binfo = TYPE_BINFO (complete_type (arg));
9826
  if (!binfo)
9827
    /* The type could not be completed.  */
9828
    return NULL_TREE;
9829
 
9830
  /* Walk in inheritance graph order.  The search order is not
9831
     important, and this avoids multiple walks of virtual bases.  */
9832
  for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
9833
    {
9834
      tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
9835
 
9836
      if (r)
9837
        {
9838
          /* If there is more than one satisfactory baseclass, then:
9839
 
9840
               [temp.deduct.call]
9841
 
9842
              If they yield more than one possible deduced A, the type
9843
              deduction fails.
9844
 
9845
             applies.  */
9846
          if (rval && !same_type_p (r, rval))
9847
            return NULL_TREE;
9848
 
9849
          rval = r;
9850
        }
9851
    }
9852
 
9853
  return rval;
9854
}
9855
 
9856
/* Returns the level of DECL, which declares a template parameter.  */
9857
 
9858
static int
9859
template_decl_level (tree decl)
9860
{
9861
  switch (TREE_CODE (decl))
9862
    {
9863
    case TYPE_DECL:
9864
    case TEMPLATE_DECL:
9865
      return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
9866
 
9867
    case PARM_DECL:
9868
      return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
9869
 
9870
    default:
9871
      gcc_unreachable ();
9872
    }
9873
  return 0;
9874
}
9875
 
9876
/* Decide whether ARG can be unified with PARM, considering only the
9877
   cv-qualifiers of each type, given STRICT as documented for unify.
9878
   Returns nonzero iff the unification is OK on that basis.  */
9879
 
9880
static int
9881
check_cv_quals_for_unify (int strict, tree arg, tree parm)
9882
{
9883
  int arg_quals = cp_type_quals (arg);
9884
  int parm_quals = cp_type_quals (parm);
9885
 
9886
  if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
9887
      && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
9888
    {
9889
      /*  Although a CVR qualifier is ignored when being applied to a
9890
          substituted template parameter ([8.3.2]/1 for example), that
9891
          does not apply during deduction [14.8.2.4]/1, (even though
9892
          that is not explicitly mentioned, [14.8.2.4]/9 indicates
9893
          this).  Except when we're allowing additional CV qualifiers
9894
          at the outer level [14.8.2.1]/3,1st bullet.  */
9895
      if ((TREE_CODE (arg) == REFERENCE_TYPE
9896
           || TREE_CODE (arg) == FUNCTION_TYPE
9897
           || TREE_CODE (arg) == METHOD_TYPE)
9898
          && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
9899
        return 0;
9900
 
9901
      if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
9902
          && (parm_quals & TYPE_QUAL_RESTRICT))
9903
        return 0;
9904
    }
9905
 
9906
  if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
9907
      && (arg_quals & parm_quals) != parm_quals)
9908
    return 0;
9909
 
9910
  if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
9911
      && (parm_quals & arg_quals) != arg_quals)
9912
    return 0;
9913
 
9914
  return 1;
9915
}
9916
 
9917
/* Deduce the value of template parameters.  TPARMS is the (innermost)
9918
   set of template parameters to a template.  TARGS is the bindings
9919
   for those template parameters, as determined thus far; TARGS may
9920
   include template arguments for outer levels of template parameters
9921
   as well.  PARM is a parameter to a template function, or a
9922
   subcomponent of that parameter; ARG is the corresponding argument.
9923
   This function attempts to match PARM with ARG in a manner
9924
   consistent with the existing assignments in TARGS.  If more values
9925
   are deduced, then TARGS is updated.
9926
 
9927
   Returns 0 if the type deduction succeeds, 1 otherwise.  The
9928
   parameter STRICT is a bitwise or of the following flags:
9929
 
9930
     UNIFY_ALLOW_NONE:
9931
       Require an exact match between PARM and ARG.
9932
     UNIFY_ALLOW_MORE_CV_QUAL:
9933
       Allow the deduced ARG to be more cv-qualified (by qualification
9934
       conversion) than ARG.
9935
     UNIFY_ALLOW_LESS_CV_QUAL:
9936
       Allow the deduced ARG to be less cv-qualified than ARG.
9937
     UNIFY_ALLOW_DERIVED:
9938
       Allow the deduced ARG to be a template base class of ARG,
9939
       or a pointer to a template base class of the type pointed to by
9940
       ARG.
9941
     UNIFY_ALLOW_INTEGER:
9942
       Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
9943
       case for more information.
9944
     UNIFY_ALLOW_OUTER_LEVEL:
9945
       This is the outermost level of a deduction. Used to determine validity
9946
       of qualification conversions. A valid qualification conversion must
9947
       have const qualified pointers leading up to the inner type which
9948
       requires additional CV quals, except at the outer level, where const
9949
       is not required [conv.qual]. It would be normal to set this flag in
9950
       addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
9951
     UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
9952
       This is the outermost level of a deduction, and PARM can be more CV
9953
       qualified at this point.
9954
     UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
9955
       This is the outermost level of a deduction, and PARM can be less CV
9956
       qualified at this point.  */
9957
 
9958
static int
9959
unify (tree tparms, tree targs, tree parm, tree arg, int strict)
9960
{
9961
  int idx;
9962
  tree targ;
9963
  tree tparm;
9964
  int strict_in = strict;
9965
 
9966
  /* I don't think this will do the right thing with respect to types.
9967
     But the only case I've seen it in so far has been array bounds, where
9968
     signedness is the only information lost, and I think that will be
9969
     okay.  */
9970
  while (TREE_CODE (parm) == NOP_EXPR)
9971
    parm = TREE_OPERAND (parm, 0);
9972
 
9973
  if (arg == error_mark_node)
9974
    return 1;
9975
  if (arg == unknown_type_node)
9976
    /* We can't deduce anything from this, but we might get all the
9977
       template args from other function args.  */
9978
    return 0;
9979
 
9980
  /* If PARM uses template parameters, then we can't bail out here,
9981
     even if ARG == PARM, since we won't record unifications for the
9982
     template parameters.  We might need them if we're trying to
9983
     figure out which of two things is more specialized.  */
9984
  if (arg == parm && !uses_template_parms (parm))
9985
    return 0;
9986
 
9987
  /* Immediately reject some pairs that won't unify because of
9988
     cv-qualification mismatches.  */
9989
  if (TREE_CODE (arg) == TREE_CODE (parm)
9990
      && TYPE_P (arg)
9991
      /* It is the elements of the array which hold the cv quals of an array
9992
         type, and the elements might be template type parms. We'll check
9993
         when we recurse.  */
9994
      && TREE_CODE (arg) != ARRAY_TYPE
9995
      /* We check the cv-qualifiers when unifying with template type
9996
         parameters below.  We want to allow ARG `const T' to unify with
9997
         PARM `T' for example, when computing which of two templates
9998
         is more specialized, for example.  */
9999
      && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
10000
      && !check_cv_quals_for_unify (strict_in, arg, parm))
10001
    return 1;
10002
 
10003
  if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
10004
      && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
10005
    strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
10006
  strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
10007
  strict &= ~UNIFY_ALLOW_DERIVED;
10008
  strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
10009
  strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
10010
 
10011
  switch (TREE_CODE (parm))
10012
    {
10013
    case TYPENAME_TYPE:
10014
    case SCOPE_REF:
10015
    case UNBOUND_CLASS_TEMPLATE:
10016
      /* In a type which contains a nested-name-specifier, template
10017
         argument values cannot be deduced for template parameters used
10018
         within the nested-name-specifier.  */
10019
      return 0;
10020
 
10021
    case TEMPLATE_TYPE_PARM:
10022
    case TEMPLATE_TEMPLATE_PARM:
10023
    case BOUND_TEMPLATE_TEMPLATE_PARM:
10024
      tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
10025
 
10026
      if (TEMPLATE_TYPE_LEVEL (parm)
10027
          != template_decl_level (tparm))
10028
        /* The PARM is not one we're trying to unify.  Just check
10029
           to see if it matches ARG.  */
10030
        return (TREE_CODE (arg) == TREE_CODE (parm)
10031
                && same_type_p (parm, arg)) ? 0 : 1;
10032
      idx = TEMPLATE_TYPE_IDX (parm);
10033
      targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
10034
      tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
10035
 
10036
      /* Check for mixed types and values.  */
10037
      if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
10038
           && TREE_CODE (tparm) != TYPE_DECL)
10039
          || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
10040
              && TREE_CODE (tparm) != TEMPLATE_DECL))
10041
        return 1;
10042
 
10043
      if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
10044
        {
10045
          /* ARG must be constructed from a template class or a template
10046
             template parameter.  */
10047
          if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
10048
              && (TREE_CODE (arg) != RECORD_TYPE || !CLASSTYPE_TEMPLATE_INFO (arg)))
10049
            return 1;
10050
 
10051
          {
10052
            tree parmtmpl = TYPE_TI_TEMPLATE (parm);
10053
            tree parmvec = TYPE_TI_ARGS (parm);
10054
            tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
10055
            tree argtmplvec
10056
              = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
10057
            int i;
10058
 
10059
            /* The parameter and argument roles have to be switched here
10060
               in order to handle default arguments properly.  For example,
10061
               template<template <class> class TT> void f(TT<int>)
10062
               should be able to accept vector<int> which comes from
10063
               template <class T, class Allocator = allocator>
10064
               class vector.  */
10065
 
10066
            if (coerce_template_parms (argtmplvec, parmvec, parmtmpl, 0, 1)
10067
                == error_mark_node)
10068
              return 1;
10069
 
10070
            /* Deduce arguments T, i from TT<T> or TT<i>.
10071
               We check each element of PARMVEC and ARGVEC individually
10072
               rather than the whole TREE_VEC since they can have
10073
               different number of elements.  */
10074
 
10075
            for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
10076
              {
10077
                if (unify (tparms, targs,
10078
                           TREE_VEC_ELT (parmvec, i),
10079
                           TREE_VEC_ELT (argvec, i),
10080
                           UNIFY_ALLOW_NONE))
10081
                  return 1;
10082
              }
10083
          }
10084
          arg = TYPE_TI_TEMPLATE (arg);
10085
 
10086
          /* Fall through to deduce template name.  */
10087
        }
10088
 
10089
      if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
10090
          || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
10091
        {
10092
          /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
10093
 
10094
          /* Simple cases: Value already set, does match or doesn't.  */
10095
          if (targ != NULL_TREE && template_args_equal (targ, arg))
10096
            return 0;
10097
          else if (targ)
10098
            return 1;
10099
        }
10100
      else
10101
        {
10102
          /* If PARM is `const T' and ARG is only `int', we don't have
10103
             a match unless we are allowing additional qualification.
10104
             If ARG is `const int' and PARM is just `T' that's OK;
10105
             that binds `const int' to `T'.  */
10106
          if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
10107
                                         arg, parm))
10108
            return 1;
10109
 
10110
          /* Consider the case where ARG is `const volatile int' and
10111
             PARM is `const T'.  Then, T should be `volatile int'.  */
10112
          arg = cp_build_qualified_type_real
10113
            (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
10114
          if (arg == error_mark_node)
10115
            return 1;
10116
 
10117
          /* Simple cases: Value already set, does match or doesn't.  */
10118
          if (targ != NULL_TREE && same_type_p (targ, arg))
10119
            return 0;
10120
          else if (targ)
10121
            return 1;
10122
 
10123
          /* Make sure that ARG is not a variable-sized array.  (Note
10124
             that were talking about variable-sized arrays (like
10125
             `int[n]'), rather than arrays of unknown size (like
10126
             `int[]').)  We'll get very confused by such a type since
10127
             the bound of the array will not be computable in an
10128
             instantiation.  Besides, such types are not allowed in
10129
             ISO C++, so we can do as we please here.  */
10130
          if (variably_modified_type_p (arg, NULL_TREE))
10131
            return 1;
10132
        }
10133
 
10134
      TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
10135
      return 0;
10136
 
10137
    case TEMPLATE_PARM_INDEX:
10138
      tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
10139
 
10140
      if (TEMPLATE_PARM_LEVEL (parm)
10141
          != template_decl_level (tparm))
10142
        /* The PARM is not one we're trying to unify.  Just check
10143
           to see if it matches ARG.  */
10144
        return !(TREE_CODE (arg) == TREE_CODE (parm)
10145
                 && cp_tree_equal (parm, arg));
10146
 
10147
      idx = TEMPLATE_PARM_IDX (parm);
10148
      targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
10149
 
10150
      if (targ)
10151
        return !cp_tree_equal (targ, arg);
10152
 
10153
      /* [temp.deduct.type] If, in the declaration of a function template
10154
         with a non-type template-parameter, the non-type
10155
         template-parameter is used in an expression in the function
10156
         parameter-list and, if the corresponding template-argument is
10157
         deduced, the template-argument type shall match the type of the
10158
         template-parameter exactly, except that a template-argument
10159
         deduced from an array bound may be of any integral type.
10160
         The non-type parameter might use already deduced type parameters.  */
10161
      tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
10162
      if (!TREE_TYPE (arg))
10163
        /* Template-parameter dependent expression.  Just accept it for now.
10164
           It will later be processed in convert_template_argument.  */
10165
        ;
10166
      else if (same_type_p (TREE_TYPE (arg), tparm))
10167
        /* OK */;
10168
      else if ((strict & UNIFY_ALLOW_INTEGER)
10169
               && (TREE_CODE (tparm) == INTEGER_TYPE
10170
                   || TREE_CODE (tparm) == BOOLEAN_TYPE))
10171
        /* Convert the ARG to the type of PARM; the deduced non-type
10172
           template argument must exactly match the types of the
10173
           corresponding parameter.  */
10174
        arg = fold (build_nop (TREE_TYPE (parm), arg));
10175
      else if (uses_template_parms (tparm))
10176
        /* We haven't deduced the type of this parameter yet.  Try again
10177
           later.  */
10178
        return 0;
10179
      else
10180
        return 1;
10181
 
10182
      TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
10183
      return 0;
10184
 
10185
    case PTRMEM_CST:
10186
     {
10187
        /* A pointer-to-member constant can be unified only with
10188
         another constant.  */
10189
      if (TREE_CODE (arg) != PTRMEM_CST)
10190
        return 1;
10191
 
10192
      /* Just unify the class member. It would be useless (and possibly
10193
         wrong, depending on the strict flags) to unify also
10194
         PTRMEM_CST_CLASS, because we want to be sure that both parm and
10195
         arg refer to the same variable, even if through different
10196
         classes. For instance:
10197
 
10198
         struct A { int x; };
10199
         struct B : A { };
10200
 
10201
         Unification of &A::x and &B::x must succeed.  */
10202
      return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
10203
                    PTRMEM_CST_MEMBER (arg), strict);
10204
     }
10205
 
10206
    case POINTER_TYPE:
10207
      {
10208
        if (TREE_CODE (arg) != POINTER_TYPE)
10209
          return 1;
10210
 
10211
        /* [temp.deduct.call]
10212
 
10213
           A can be another pointer or pointer to member type that can
10214
           be converted to the deduced A via a qualification
10215
           conversion (_conv.qual_).
10216
 
10217
           We pass down STRICT here rather than UNIFY_ALLOW_NONE.
10218
           This will allow for additional cv-qualification of the
10219
           pointed-to types if appropriate.  */
10220
 
10221
        if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
10222
          /* The derived-to-base conversion only persists through one
10223
             level of pointers.  */
10224
          strict |= (strict_in & UNIFY_ALLOW_DERIVED);
10225
 
10226
        return unify (tparms, targs, TREE_TYPE (parm),
10227
                      TREE_TYPE (arg), strict);
10228
      }
10229
 
10230
    case REFERENCE_TYPE:
10231
      if (TREE_CODE (arg) != REFERENCE_TYPE)
10232
        return 1;
10233
      return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10234
                    strict & UNIFY_ALLOW_MORE_CV_QUAL);
10235
 
10236
    case ARRAY_TYPE:
10237
      if (TREE_CODE (arg) != ARRAY_TYPE)
10238
        return 1;
10239
      if ((TYPE_DOMAIN (parm) == NULL_TREE)
10240
          != (TYPE_DOMAIN (arg) == NULL_TREE))
10241
        return 1;
10242
      if (TYPE_DOMAIN (parm) != NULL_TREE)
10243
        {
10244
          tree parm_max;
10245
          tree arg_max;
10246
 
10247
          parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
10248
          arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
10249
 
10250
          /* Our representation of array types uses "N - 1" as the
10251
             TYPE_MAX_VALUE for an array with "N" elements, if "N" is
10252
             not an integer constant.  */
10253
          if (TREE_CODE (parm_max) == MINUS_EXPR)
10254
            {
10255
              arg_max = fold_build2 (PLUS_EXPR,
10256
                                     integer_type_node,
10257
                                     arg_max,
10258
                                     TREE_OPERAND (parm_max, 1));
10259
              parm_max = TREE_OPERAND (parm_max, 0);
10260
            }
10261
 
10262
          if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
10263
            return 1;
10264
        }
10265
      return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10266
                    strict & UNIFY_ALLOW_MORE_CV_QUAL);
10267
 
10268
    case REAL_TYPE:
10269
    case COMPLEX_TYPE:
10270
    case VECTOR_TYPE:
10271
    case INTEGER_TYPE:
10272
    case BOOLEAN_TYPE:
10273
    case ENUMERAL_TYPE:
10274
    case VOID_TYPE:
10275
      if (TREE_CODE (arg) != TREE_CODE (parm))
10276
        return 1;
10277
 
10278
      /* We have already checked cv-qualification at the top of the
10279
         function.  */
10280
      if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
10281
        return 1;
10282
 
10283
      /* As far as unification is concerned, this wins.  Later checks
10284
         will invalidate it if necessary.  */
10285
      return 0;
10286
 
10287
      /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
10288
      /* Type INTEGER_CST can come from ordinary constant template args.  */
10289
    case INTEGER_CST:
10290
      while (TREE_CODE (arg) == NOP_EXPR)
10291
        arg = TREE_OPERAND (arg, 0);
10292
 
10293
      if (TREE_CODE (arg) != INTEGER_CST)
10294
        return 1;
10295
      return !tree_int_cst_equal (parm, arg);
10296
 
10297
    case TREE_VEC:
10298
      {
10299
        int i;
10300
        if (TREE_CODE (arg) != TREE_VEC)
10301
          return 1;
10302
        if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
10303
          return 1;
10304
        for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
10305
          if (unify (tparms, targs,
10306
                     TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
10307
                     UNIFY_ALLOW_NONE))
10308
            return 1;
10309
        return 0;
10310
      }
10311
 
10312
    case RECORD_TYPE:
10313
    case UNION_TYPE:
10314
      if (TREE_CODE (arg) != TREE_CODE (parm))
10315
        return 1;
10316
 
10317
      if (TYPE_PTRMEMFUNC_P (parm))
10318
        {
10319
          if (!TYPE_PTRMEMFUNC_P (arg))
10320
            return 1;
10321
 
10322
          return unify (tparms, targs,
10323
                        TYPE_PTRMEMFUNC_FN_TYPE (parm),
10324
                        TYPE_PTRMEMFUNC_FN_TYPE (arg),
10325
                        strict);
10326
        }
10327
 
10328
      if (CLASSTYPE_TEMPLATE_INFO (parm))
10329
        {
10330
          tree t = NULL_TREE;
10331
 
10332
          if (strict_in & UNIFY_ALLOW_DERIVED)
10333
            {
10334
              /* First, we try to unify the PARM and ARG directly.  */
10335
              t = try_class_unification (tparms, targs,
10336
                                         parm, arg);
10337
 
10338
              if (!t)
10339
                {
10340
                  /* Fallback to the special case allowed in
10341
                     [temp.deduct.call]:
10342
 
10343
                       If P is a class, and P has the form
10344
                       template-id, then A can be a derived class of
10345
                       the deduced A.  Likewise, if P is a pointer to
10346
                       a class of the form template-id, A can be a
10347
                       pointer to a derived class pointed to by the
10348
                       deduced A.  */
10349
                  t = get_template_base (tparms, targs, parm, arg);
10350
 
10351
                  if (!t)
10352
                    return 1;
10353
                }
10354
            }
10355
          else if (CLASSTYPE_TEMPLATE_INFO (arg)
10356
                   && (CLASSTYPE_TI_TEMPLATE (parm)
10357
                       == CLASSTYPE_TI_TEMPLATE (arg)))
10358
            /* Perhaps PARM is something like S<U> and ARG is S<int>.
10359
               Then, we should unify `int' and `U'.  */
10360
            t = arg;
10361
          else
10362
            /* There's no chance of unification succeeding.  */
10363
            return 1;
10364
 
10365
          return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
10366
                        CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
10367
        }
10368
      else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
10369
        return 1;
10370
      return 0;
10371
 
10372
    case METHOD_TYPE:
10373
    case FUNCTION_TYPE:
10374
      if (TREE_CODE (arg) != TREE_CODE (parm))
10375
        return 1;
10376
 
10377
      /* CV qualifications for methods can never be deduced, they must
10378
         match exactly.  We need to check them explicitly here,
10379
         because type_unification_real treats them as any other
10380
         cvqualified parameter.  */
10381
      if (TREE_CODE (parm) == METHOD_TYPE
10382
          && (!check_cv_quals_for_unify
10383
              (UNIFY_ALLOW_NONE,
10384
               TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
10385
               TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
10386
        return 1;
10387
 
10388
      if (unify (tparms, targs, TREE_TYPE (parm),
10389
                 TREE_TYPE (arg), UNIFY_ALLOW_NONE))
10390
        return 1;
10391
      return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
10392
                                    TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
10393
                                    LOOKUP_NORMAL);
10394
 
10395
    case OFFSET_TYPE:
10396
      /* Unify a pointer to member with a pointer to member function, which
10397
         deduces the type of the member as a function type. */
10398
      if (TYPE_PTRMEMFUNC_P (arg))
10399
        {
10400
          tree method_type;
10401
          tree fntype;
10402
          cp_cv_quals cv_quals;
10403
 
10404
          /* Check top-level cv qualifiers */
10405
          if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
10406
            return 1;
10407
 
10408
          if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
10409
                     TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
10410
            return 1;
10411
 
10412
          /* Determine the type of the function we are unifying against. */
10413
          method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
10414
          fntype =
10415
            build_function_type (TREE_TYPE (method_type),
10416
                                 TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
10417
 
10418
          /* Extract the cv-qualifiers of the member function from the
10419
             implicit object parameter and place them on the function
10420
             type to be restored later. */
10421
          cv_quals =
10422
            cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
10423
          fntype = build_qualified_type (fntype, cv_quals);
10424
          return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
10425
        }
10426
 
10427
      if (TREE_CODE (arg) != OFFSET_TYPE)
10428
        return 1;
10429
      if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
10430
                 TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
10431
        return 1;
10432
      return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10433
                    strict);
10434
 
10435
    case CONST_DECL:
10436
      if (DECL_TEMPLATE_PARM_P (parm))
10437
        return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
10438
      if (arg != integral_constant_value (parm))
10439
        return 1;
10440
      return 0;
10441
 
10442
    case FIELD_DECL:
10443
    case TEMPLATE_DECL:
10444
      /* Matched cases are handled by the ARG == PARM test above.  */
10445
      return 1;
10446
 
10447
    default:
10448
      gcc_assert (EXPR_P (parm));
10449
 
10450
      /* We must be looking at an expression.  This can happen with
10451
         something like:
10452
 
10453
           template <int I>
10454
           void foo(S<I>, S<I + 2>);
10455
 
10456
         This is a "nondeduced context":
10457
 
10458
           [deduct.type]
10459
 
10460
           The nondeduced contexts are:
10461
 
10462
           --A type that is a template-id in which one or more of
10463
             the template-arguments is an expression that references
10464
             a template-parameter.
10465
 
10466
         In these cases, we assume deduction succeeded, but don't
10467
         actually infer any unifications.  */
10468
 
10469
      if (!uses_template_parms (parm)
10470
          && !template_args_equal (parm, arg))
10471
        return 1;
10472
      else
10473
        return 0;
10474
    }
10475
}
10476
 
10477
/* Note that DECL can be defined in this translation unit, if
10478
   required.  */
10479
 
10480
static void
10481
mark_definable (tree decl)
10482
{
10483
  tree clone;
10484
  DECL_NOT_REALLY_EXTERN (decl) = 1;
10485
  FOR_EACH_CLONE (clone, decl)
10486
    DECL_NOT_REALLY_EXTERN (clone) = 1;
10487
}
10488
 
10489
/* Called if RESULT is explicitly instantiated, or is a member of an
10490
   explicitly instantiated class.  */
10491
 
10492
void
10493
mark_decl_instantiated (tree result, int extern_p)
10494
{
10495
  SET_DECL_EXPLICIT_INSTANTIATION (result);
10496
 
10497
  /* If this entity has already been written out, it's too late to
10498
     make any modifications.  */
10499
  if (TREE_ASM_WRITTEN (result))
10500
    return;
10501
 
10502
  if (TREE_CODE (result) != FUNCTION_DECL)
10503
    /* The TREE_PUBLIC flag for function declarations will have been
10504
       set correctly by tsubst.  */
10505
    TREE_PUBLIC (result) = 1;
10506
 
10507
  /* This might have been set by an earlier implicit instantiation.  */
10508
  DECL_COMDAT (result) = 0;
10509
 
10510
  if (extern_p)
10511
    DECL_NOT_REALLY_EXTERN (result) = 0;
10512
  else
10513
    {
10514
      mark_definable (result);
10515
      /* Always make artificials weak.  */
10516
      if (DECL_ARTIFICIAL (result) && flag_weak)
10517
        comdat_linkage (result);
10518
      /* For WIN32 we also want to put explicit instantiations in
10519
         linkonce sections.  */
10520
      else if (TREE_PUBLIC (result))
10521
        maybe_make_one_only (result);
10522
    }
10523
 
10524
  /* If EXTERN_P, then this function will not be emitted -- unless
10525
     followed by an explicit instantiation, at which point its linkage
10526
     will be adjusted.  If !EXTERN_P, then this function will be
10527
     emitted here.  In neither circumstance do we want
10528
     import_export_decl to adjust the linkage.  */
10529
  DECL_INTERFACE_KNOWN (result) = 1;
10530
}
10531
 
10532
/* Given two function templates PAT1 and PAT2, return:
10533
 
10534
   1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
10535
   -1 if PAT2 is more specialized than PAT1.
10536
 
10537
 
10538
   LEN indicates the number of parameters we should consider
10539
   (defaulted parameters should not be considered).
10540
 
10541
   The 1998 std underspecified function template partial ordering, and
10542
   DR214 addresses the issue.  We take pairs of arguments, one from
10543
   each of the templates, and deduce them against each other.  One of
10544
   the templates will be more specialized if all the *other*
10545
   template's arguments deduce against its arguments and at least one
10546
   of its arguments *does* *not* deduce against the other template's
10547
   corresponding argument.  Deduction is done as for class templates.
10548
   The arguments used in deduction have reference and top level cv
10549
   qualifiers removed.  Iff both arguments were originally reference
10550
   types *and* deduction succeeds in both directions, the template
10551
   with the more cv-qualified argument wins for that pairing (if
10552
   neither is more cv-qualified, they both are equal).  Unlike regular
10553
   deduction, after all the arguments have been deduced in this way,
10554
   we do *not* verify the deduced template argument values can be
10555
   substituted into non-deduced contexts, nor do we have to verify
10556
   that all template arguments have been deduced.  */
10557
 
10558
int
10559
more_specialized_fn (tree pat1, tree pat2, int len)
10560
{
10561
  tree decl1 = DECL_TEMPLATE_RESULT (pat1);
10562
  tree decl2 = DECL_TEMPLATE_RESULT (pat2);
10563
  tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
10564
  tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
10565
  tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
10566
  tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
10567
  tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
10568
  tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
10569
  int better1 = 0;
10570
  int better2 = 0;
10571
 
10572
  /* Remove the this parameter from non-static member functions.  If
10573
     one is a non-static member function and the other is not a static
10574
     member function, remove the first parameter from that function
10575
     also.  This situation occurs for operator functions where we
10576
     locate both a member function (with this pointer) and non-member
10577
     operator (with explicit first operand).  */
10578
  if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
10579
    {
10580
      len--; /* LEN is the number of significant arguments for DECL1 */
10581
      args1 = TREE_CHAIN (args1);
10582
      if (!DECL_STATIC_FUNCTION_P (decl2))
10583
        args2 = TREE_CHAIN (args2);
10584
    }
10585
  else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
10586
    {
10587
      args2 = TREE_CHAIN (args2);
10588
      if (!DECL_STATIC_FUNCTION_P (decl1))
10589
        {
10590
          len--;
10591
          args1 = TREE_CHAIN (args1);
10592
        }
10593
    }
10594
 
10595
  /* If only one is a conversion operator, they are unordered.  */
10596
  if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
10597
    return 0;
10598
 
10599
  /* Consider the return type for a conversion function */
10600
  if (DECL_CONV_FN_P (decl1))
10601
    {
10602
      args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
10603
      args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
10604
      len++;
10605
    }
10606
 
10607
  processing_template_decl++;
10608
 
10609
  while (len--)
10610
    {
10611
      tree arg1 = TREE_VALUE (args1);
10612
      tree arg2 = TREE_VALUE (args2);
10613
      int deduce1, deduce2;
10614
      int quals1 = -1;
10615
      int quals2 = -1;
10616
 
10617
      if (TREE_CODE (arg1) == REFERENCE_TYPE)
10618
        {
10619
          arg1 = TREE_TYPE (arg1);
10620
          quals1 = cp_type_quals (arg1);
10621
        }
10622
 
10623
      if (TREE_CODE (arg2) == REFERENCE_TYPE)
10624
        {
10625
          arg2 = TREE_TYPE (arg2);
10626
          quals2 = cp_type_quals (arg2);
10627
        }
10628
 
10629
      if ((quals1 < 0) != (quals2 < 0))
10630
        {
10631
          /* Only of the args is a reference, see if we should apply
10632
             array/function pointer decay to it.  This is not part of
10633
             DR214, but is, IMHO, consistent with the deduction rules
10634
             for the function call itself, and with our earlier
10635
             implementation of the underspecified partial ordering
10636
             rules.  (nathan).  */
10637
          if (quals1 >= 0)
10638
            {
10639
              switch (TREE_CODE (arg1))
10640
                {
10641
                case ARRAY_TYPE:
10642
                  arg1 = TREE_TYPE (arg1);
10643
                  /* FALLTHROUGH. */
10644
                case FUNCTION_TYPE:
10645
                  arg1 = build_pointer_type (arg1);
10646
                  break;
10647
 
10648
                default:
10649
                  break;
10650
                }
10651
            }
10652
          else
10653
            {
10654
              switch (TREE_CODE (arg2))
10655
                {
10656
                case ARRAY_TYPE:
10657
                  arg2 = TREE_TYPE (arg2);
10658
                  /* FALLTHROUGH. */
10659
                case FUNCTION_TYPE:
10660
                  arg2 = build_pointer_type (arg2);
10661
                  break;
10662
 
10663
                default:
10664
                  break;
10665
                }
10666
            }
10667
        }
10668
 
10669
      arg1 = TYPE_MAIN_VARIANT (arg1);
10670
      arg2 = TYPE_MAIN_VARIANT (arg2);
10671
 
10672
      deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
10673
      deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
10674
 
10675
      if (!deduce1)
10676
        better2 = -1;
10677
      if (!deduce2)
10678
        better1 = -1;
10679
      if (better1 < 0 && better2 < 0)
10680
        /* We've failed to deduce something in either direction.
10681
           These must be unordered.  */
10682
        break;
10683
 
10684
      if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
10685
        {
10686
          /* Deduces in both directions, see if quals can
10687
             disambiguate.  Pretend the worse one failed to deduce. */
10688
          if ((quals1 & quals2) == quals2)
10689
            deduce1 = 0;
10690
          if ((quals1 & quals2) == quals1)
10691
            deduce2 = 0;
10692
        }
10693
      if (deduce1 && !deduce2 && !better2)
10694
        better2 = 1;
10695
      if (deduce2 && !deduce1 && !better1)
10696
        better1 = 1;
10697
 
10698
      args1 = TREE_CHAIN (args1);
10699
      args2 = TREE_CHAIN (args2);
10700
    }
10701
 
10702
  processing_template_decl--;
10703
 
10704
  return (better1 > 0) - (better2 > 0);
10705
}
10706
 
10707
/* Determine which of two partial specializations is more specialized.
10708
 
10709
   PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
10710
   to the first partial specialization.  The TREE_VALUE is the
10711
   innermost set of template parameters for the partial
10712
   specialization.  PAT2 is similar, but for the second template.
10713
 
10714
   Return 1 if the first partial specialization is more specialized;
10715
   -1 if the second is more specialized; 0 if neither is more
10716
   specialized.
10717
 
10718
   See [temp.class.order] for information about determining which of
10719
   two templates is more specialized.  */
10720
 
10721
int
10722
more_specialized_class (tree pat1, tree pat2)
10723
{
10724
  tree targs;
10725
  tree tmpl1, tmpl2;
10726
  int winner = 0;
10727
 
10728
  tmpl1 = TREE_TYPE (pat1);
10729
  tmpl2 = TREE_TYPE (pat2);
10730
 
10731
  /* Just like what happens for functions, if we are ordering between
10732
     different class template specializations, we may encounter dependent
10733
     types in the arguments, and we need our dependency check functions
10734
     to behave correctly.  */
10735
  ++processing_template_decl;
10736
  targs = get_class_bindings (TREE_VALUE (pat1),
10737
                              CLASSTYPE_TI_ARGS (tmpl1),
10738
                              CLASSTYPE_TI_ARGS (tmpl2));
10739
  if (targs)
10740
    --winner;
10741
 
10742
  targs = get_class_bindings (TREE_VALUE (pat2),
10743
                              CLASSTYPE_TI_ARGS (tmpl2),
10744
                              CLASSTYPE_TI_ARGS (tmpl1));
10745
  if (targs)
10746
    ++winner;
10747
  --processing_template_decl;
10748
 
10749
  return winner;
10750
}
10751
 
10752
/* Return the template arguments that will produce the function signature
10753
   DECL from the function template FN, with the explicit template
10754
   arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
10755
   also match.  Return NULL_TREE if no satisfactory arguments could be
10756
   found.  */
10757
 
10758
static tree
10759
get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
10760
{
10761
  int ntparms = DECL_NTPARMS (fn);
10762
  tree targs = make_tree_vec (ntparms);
10763
  tree decl_type;
10764
  tree decl_arg_types;
10765
 
10766
  /* Substitute the explicit template arguments into the type of DECL.
10767
     The call to fn_type_unification will handle substitution into the
10768
     FN.  */
10769
  decl_type = TREE_TYPE (decl);
10770
  if (explicit_args && uses_template_parms (decl_type))
10771
    {
10772
      tree tmpl;
10773
      tree converted_args;
10774
 
10775
      if (DECL_TEMPLATE_INFO (decl))
10776
        tmpl = DECL_TI_TEMPLATE (decl);
10777
      else
10778
        /* We can get here for some invalid specializations.  */
10779
        return NULL_TREE;
10780
 
10781
      converted_args
10782
        = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
10783
                                  explicit_args, NULL_TREE,
10784
                                  tf_none, /*require_all_arguments=*/0));
10785
      if (converted_args == error_mark_node)
10786
        return NULL_TREE;
10787
 
10788
      decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
10789
      if (decl_type == error_mark_node)
10790
        return NULL_TREE;
10791
    }
10792
 
10793
  decl_arg_types = TYPE_ARG_TYPES (decl_type);
10794
  /* Never do unification on the 'this' parameter.  */
10795
  if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10796
    decl_arg_types = TREE_CHAIN (decl_arg_types);
10797
 
10798
  if (fn_type_unification (fn, explicit_args, targs,
10799
                           decl_arg_types,
10800
                           (check_rettype || DECL_CONV_FN_P (fn)
10801
                            ? TREE_TYPE (decl_type) : NULL_TREE),
10802
                           DEDUCE_EXACT, LOOKUP_NORMAL))
10803
    return NULL_TREE;
10804
 
10805
  return targs;
10806
}
10807
 
10808
/* Return the innermost template arguments that, when applied to a
10809
   template specialization whose innermost template parameters are
10810
   TPARMS, and whose specialization arguments are PARMS, yield the
10811
   ARGS.
10812
 
10813
   For example, suppose we have:
10814
 
10815
     template <class T, class U> struct S {};
10816
     template <class T> struct S<T*, int> {};
10817
 
10818
   Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
10819
   {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
10820
   int}.  The resulting vector will be {double}, indicating that `T'
10821
   is bound to `double'.  */
10822
 
10823
static tree
10824
get_class_bindings (tree tparms, tree spec_args, tree args)
10825
{
10826
  int i, ntparms = TREE_VEC_LENGTH (tparms);
10827
  tree deduced_args;
10828
  tree innermost_deduced_args;
10829
 
10830
  innermost_deduced_args = make_tree_vec (ntparms);
10831
  if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
10832
    {
10833
      deduced_args = copy_node (args);
10834
      SET_TMPL_ARGS_LEVEL (deduced_args,
10835
                           TMPL_ARGS_DEPTH (deduced_args),
10836
                           innermost_deduced_args);
10837
    }
10838
  else
10839
    deduced_args = innermost_deduced_args;
10840
 
10841
  if (unify (tparms, deduced_args,
10842
             INNERMOST_TEMPLATE_ARGS (spec_args),
10843
             INNERMOST_TEMPLATE_ARGS (args),
10844
             UNIFY_ALLOW_NONE))
10845
    return NULL_TREE;
10846
 
10847
  for (i =  0; i < ntparms; ++i)
10848
    if (! TREE_VEC_ELT (innermost_deduced_args, i))
10849
      return NULL_TREE;
10850
 
10851
  /* Verify that nondeduced template arguments agree with the type
10852
     obtained from argument deduction.
10853
 
10854
     For example:
10855
 
10856
       struct A { typedef int X; };
10857
       template <class T, class U> struct C {};
10858
       template <class T> struct C<T, typename T::X> {};
10859
 
10860
     Then with the instantiation `C<A, int>', we can deduce that
10861
     `T' is `A' but unify () does not check whether `typename T::X'
10862
     is `int'.  */
10863
  spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
10864
  if (spec_args == error_mark_node
10865
      /* We only need to check the innermost arguments; the other
10866
         arguments will always agree.  */
10867
      || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
10868
                              INNERMOST_TEMPLATE_ARGS (args)))
10869
    return NULL_TREE;
10870
 
10871
  return deduced_args;
10872
}
10873
 
10874
/* In INSTANTIATIONS is a list of <INSTANTIATION, TEMPLATE> pairs.
10875
   Pick the most specialized template, and return the corresponding
10876
   instantiation, or if there is no corresponding instantiation, the
10877
   template itself.  If there is no most specialized template,
10878
   error_mark_node is returned.  If there are no templates at all,
10879
   NULL_TREE is returned.  */
10880
 
10881
tree
10882
most_specialized_instantiation (tree instantiations)
10883
{
10884
  tree fn, champ;
10885
 
10886
  if (!instantiations)
10887
    return NULL_TREE;
10888
 
10889
  ++processing_template_decl;
10890
 
10891
  champ = instantiations;
10892
  for (fn = TREE_CHAIN (instantiations); fn; fn = TREE_CHAIN (fn))
10893
    {
10894
      int fate = 0;
10895
 
10896
      if (get_bindings (TREE_VALUE (champ),
10897
                        DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
10898
                        NULL_TREE, /*check_ret=*/false))
10899
        fate--;
10900
 
10901
      if (get_bindings (TREE_VALUE (fn),
10902
                        DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
10903
                        NULL_TREE, /*check_ret=*/false))
10904
        fate++;
10905
 
10906
      if (fate == -1)
10907
        champ = fn;
10908
      else if (!fate)
10909
        {
10910
          /* Equally specialized, move to next function.  If there
10911
             is no next function, nothing's most specialized.  */
10912
          fn = TREE_CHAIN (fn);
10913
          champ = fn;
10914
          if (!fn)
10915
            break;
10916
        }
10917
    }
10918
 
10919
  if (champ)
10920
    /* Now verify that champ is better than everything earlier in the
10921
       instantiation list.  */
10922
    for (fn = instantiations; fn != champ; fn = TREE_CHAIN (fn))
10923
      if (get_bindings (TREE_VALUE (champ),
10924
                        DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
10925
                        NULL_TREE, /*check_ret=*/false)
10926
          || !get_bindings (TREE_VALUE (fn),
10927
                            DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
10928
                            NULL_TREE, /*check_ret=*/false))
10929
        {
10930
          champ = NULL_TREE;
10931
          break;
10932
        }
10933
 
10934
  processing_template_decl--;
10935
 
10936
  if (!champ)
10937
    return error_mark_node;
10938
 
10939
  return TREE_PURPOSE (champ) ? TREE_PURPOSE (champ) : TREE_VALUE (champ);
10940
}
10941
 
10942
/* Return the most specialized of the list of templates in FNS that can
10943
   produce an instantiation matching DECL, given the explicit template
10944
   arguments EXPLICIT_ARGS.  */
10945
 
10946
static tree
10947
most_specialized (tree fns, tree decl, tree explicit_args)
10948
{
10949
  tree candidates = NULL_TREE;
10950
  tree fn, args;
10951
 
10952
  for (fn = fns; fn; fn = TREE_CHAIN (fn))
10953
    {
10954
      tree candidate = TREE_VALUE (fn);
10955
 
10956
      args = get_bindings (candidate, decl, explicit_args, /*check_ret=*/true);
10957
      if (args)
10958
        candidates = tree_cons (NULL_TREE, candidate, candidates);
10959
    }
10960
 
10961
  return most_specialized_instantiation (candidates);
10962
}
10963
 
10964
/* If DECL is a specialization of some template, return the most
10965
   general such template.  Otherwise, returns NULL_TREE.
10966
 
10967
   For example, given:
10968
 
10969
     template <class T> struct S { template <class U> void f(U); };
10970
 
10971
   if TMPL is `template <class U> void S<int>::f(U)' this will return
10972
   the full template.  This function will not trace past partial
10973
   specializations, however.  For example, given in addition:
10974
 
10975
     template <class T> struct S<T*> { template <class U> void f(U); };
10976
 
10977
   if TMPL is `template <class U> void S<int*>::f(U)' this will return
10978
   `template <class T> template <class U> S<T*>::f(U)'.  */
10979
 
10980
tree
10981
most_general_template (tree decl)
10982
{
10983
  /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
10984
     an immediate specialization.  */
10985
  if (TREE_CODE (decl) == FUNCTION_DECL)
10986
    {
10987
      if (DECL_TEMPLATE_INFO (decl)) {
10988
        decl = DECL_TI_TEMPLATE (decl);
10989
 
10990
        /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
10991
           template friend.  */
10992
        if (TREE_CODE (decl) != TEMPLATE_DECL)
10993
          return NULL_TREE;
10994
      } else
10995
        return NULL_TREE;
10996
    }
10997
 
10998
  /* Look for more and more general templates.  */
10999
  while (DECL_TEMPLATE_INFO (decl))
11000
    {
11001
      /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
11002
         (See cp-tree.h for details.)  */
11003
      if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
11004
        break;
11005
 
11006
      if (CLASS_TYPE_P (TREE_TYPE (decl))
11007
          && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
11008
        break;
11009
 
11010
      /* Stop if we run into an explicitly specialized class template.  */
11011
      if (!DECL_NAMESPACE_SCOPE_P (decl)
11012
          && DECL_CONTEXT (decl)
11013
          && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
11014
        break;
11015
 
11016
      decl = DECL_TI_TEMPLATE (decl);
11017
    }
11018
 
11019
  return decl;
11020
}
11021
 
11022
/* Return the most specialized of the class template partial
11023
   specializations of TMPL which can produce TYPE, a specialization of
11024
   TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
11025
   a _TYPE node corresponding to the partial specialization, while the
11026
   TREE_PURPOSE is the set of template arguments that must be
11027
   substituted into the TREE_TYPE in order to generate TYPE.
11028
 
11029
   If the choice of partial specialization is ambiguous, a diagnostic
11030
   is issued, and the error_mark_node is returned.  If there are no
11031
   partial specializations of TMPL matching TYPE, then NULL_TREE is
11032
   returned.  */
11033
 
11034
static tree
11035
most_specialized_class (tree type, tree tmpl)
11036
{
11037
  tree list = NULL_TREE;
11038
  tree t;
11039
  tree champ;
11040
  int fate;
11041
  bool ambiguous_p;
11042
  tree args;
11043
 
11044
  tmpl = most_general_template (tmpl);
11045
  args = CLASSTYPE_TI_ARGS (type);
11046
  for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
11047
    {
11048
      tree partial_spec_args;
11049
      tree spec_args;
11050
 
11051
      partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
11052
      spec_args = get_class_bindings (TREE_VALUE (t),
11053
                                      partial_spec_args,
11054
                                      args);
11055
      if (spec_args)
11056
        {
11057
          list = tree_cons (spec_args, TREE_VALUE (t), list);
11058
          TREE_TYPE (list) = TREE_TYPE (t);
11059
        }
11060
    }
11061
 
11062
  if (! list)
11063
    return NULL_TREE;
11064
 
11065
  ambiguous_p = false;
11066
  t = list;
11067
  champ = t;
11068
  t = TREE_CHAIN (t);
11069
  for (; t; t = TREE_CHAIN (t))
11070
    {
11071
      fate = more_specialized_class (champ, t);
11072
      if (fate == 1)
11073
        ;
11074
      else
11075
        {
11076
          if (fate == 0)
11077
            {
11078
              t = TREE_CHAIN (t);
11079
              if (! t)
11080
                {
11081
                  ambiguous_p = true;
11082
                  break;
11083
                }
11084
            }
11085
          champ = t;
11086
        }
11087
    }
11088
 
11089
  if (!ambiguous_p)
11090
    for (t = list; t && t != champ; t = TREE_CHAIN (t))
11091
      {
11092
        fate = more_specialized_class (champ, t);
11093
        if (fate != 1)
11094
          {
11095
            ambiguous_p = true;
11096
            break;
11097
          }
11098
      }
11099
 
11100
  if (ambiguous_p)
11101
    {
11102
      const char *str = "candidates are:";
11103
      error ("ambiguous class template instantiation for %q#T", type);
11104
      for (t = list; t; t = TREE_CHAIN (t))
11105
        {
11106
          error ("%s %+#T", str, TREE_TYPE (t));
11107
          str = "               ";
11108
        }
11109
      return error_mark_node;
11110
    }
11111
 
11112
  return champ;
11113
}
11114
 
11115
/* Explicitly instantiate DECL.  */
11116
 
11117
void
11118
do_decl_instantiation (tree decl, tree storage)
11119
{
11120
  tree result = NULL_TREE;
11121
  int extern_p = 0;
11122
 
11123
  if (!decl || decl == error_mark_node)
11124
    /* An error occurred, for which grokdeclarator has already issued
11125
       an appropriate message.  */
11126
    return;
11127
  else if (! DECL_LANG_SPECIFIC (decl))
11128
    {
11129
      error ("explicit instantiation of non-template %q#D", decl);
11130
      return;
11131
    }
11132
  else if (TREE_CODE (decl) == VAR_DECL)
11133
    {
11134
      /* There is an asymmetry here in the way VAR_DECLs and
11135
         FUNCTION_DECLs are handled by grokdeclarator.  In the case of
11136
         the latter, the DECL we get back will be marked as a
11137
         template instantiation, and the appropriate
11138
         DECL_TEMPLATE_INFO will be set up.  This does not happen for
11139
         VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
11140
         should handle VAR_DECLs as it currently handles
11141
         FUNCTION_DECLs.  */
11142
      result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
11143
      if (!result || TREE_CODE (result) != VAR_DECL)
11144
        {
11145
          error ("no matching template for %qD found", decl);
11146
          return;
11147
        }
11148
    }
11149
  else if (TREE_CODE (decl) != FUNCTION_DECL)
11150
    {
11151
      error ("explicit instantiation of %q#D", decl);
11152
      return;
11153
    }
11154
  else
11155
    result = decl;
11156
 
11157
  /* Check for various error cases.  Note that if the explicit
11158
     instantiation is valid the RESULT will currently be marked as an
11159
     *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
11160
     until we get here.  */
11161
 
11162
  if (DECL_TEMPLATE_SPECIALIZATION (result))
11163
    {
11164
      /* DR 259 [temp.spec].
11165
 
11166
         Both an explicit instantiation and a declaration of an explicit
11167
         specialization shall not appear in a program unless the explicit
11168
         instantiation follows a declaration of the explicit specialization.
11169
 
11170
         For a given set of template parameters, if an explicit
11171
         instantiation of a template appears after a declaration of an
11172
         explicit specialization for that template, the explicit
11173
         instantiation has no effect.  */
11174
      return;
11175
    }
11176
  else if (DECL_EXPLICIT_INSTANTIATION (result))
11177
    {
11178
      /* [temp.spec]
11179
 
11180
         No program shall explicitly instantiate any template more
11181
         than once.
11182
 
11183
         We check DECL_NOT_REALLY_EXTERN so as not to complain when
11184
         the first instantiation was `extern' and the second is not,
11185
         and EXTERN_P for the opposite case.  */
11186
      if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
11187
        pedwarn ("duplicate explicit instantiation of %q#D", result);
11188
      /* If an "extern" explicit instantiation follows an ordinary
11189
         explicit instantiation, the template is instantiated.  */
11190
      if (extern_p)
11191
        return;
11192
    }
11193
  else if (!DECL_IMPLICIT_INSTANTIATION (result))
11194
    {
11195
      error ("no matching template for %qD found", result);
11196
      return;
11197
    }
11198
  else if (!DECL_TEMPLATE_INFO (result))
11199
    {
11200
      pedwarn ("explicit instantiation of non-template %q#D", result);
11201
      return;
11202
    }
11203
 
11204
  if (storage == NULL_TREE)
11205
    ;
11206
  else if (storage == ridpointers[(int) RID_EXTERN])
11207
    {
11208
      if (pedantic && !in_system_header)
11209
        pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
11210
                 "instantiations");
11211
      extern_p = 1;
11212
    }
11213
  else
11214
    error ("storage class %qD applied to template instantiation", storage);
11215
 
11216
  check_explicit_instantiation_namespace (result);
11217
  mark_decl_instantiated (result, extern_p);
11218
  if (! extern_p)
11219
    instantiate_decl (result, /*defer_ok=*/1,
11220
                      /*expl_inst_class_mem_p=*/false);
11221
}
11222
 
11223
void
11224
mark_class_instantiated (tree t, int extern_p)
11225
{
11226
  SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
11227
  SET_CLASSTYPE_INTERFACE_KNOWN (t);
11228
  CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
11229
  TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
11230
  if (! extern_p)
11231
    {
11232
      CLASSTYPE_DEBUG_REQUESTED (t) = 1;
11233
      rest_of_type_compilation (t, 1);
11234
    }
11235
}
11236
 
11237
/* Called from do_type_instantiation through binding_table_foreach to
11238
   do recursive instantiation for the type bound in ENTRY.  */
11239
static void
11240
bt_instantiate_type_proc (binding_entry entry, void *data)
11241
{
11242
  tree storage = *(tree *) data;
11243
 
11244
  if (IS_AGGR_TYPE (entry->type)
11245
      && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
11246
    do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
11247
}
11248
 
11249
/* Called from do_type_instantiation to instantiate a member
11250
   (a member function or a static member variable) of an
11251
   explicitly instantiated class template.  */
11252
static void
11253
instantiate_class_member (tree decl, int extern_p)
11254
{
11255
  mark_decl_instantiated (decl, extern_p);
11256
  if (! extern_p)
11257
    instantiate_decl (decl, /*defer_ok=*/1,
11258
                      /*expl_inst_class_mem_p=*/true);
11259
}
11260
 
11261
/* Perform an explicit instantiation of template class T.  STORAGE, if
11262
   non-null, is the RID for extern, inline or static.  COMPLAIN is
11263
   nonzero if this is called from the parser, zero if called recursively,
11264
   since the standard is unclear (as detailed below).  */
11265
 
11266
void
11267
do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
11268
{
11269
  int extern_p = 0;
11270
  int nomem_p = 0;
11271
  int static_p = 0;
11272
  int previous_instantiation_extern_p = 0;
11273
 
11274
  if (TREE_CODE (t) == TYPE_DECL)
11275
    t = TREE_TYPE (t);
11276
 
11277
  if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
11278
    {
11279
      error ("explicit instantiation of non-template type %qT", t);
11280
      return;
11281
    }
11282
 
11283
  complete_type (t);
11284
 
11285
  if (!COMPLETE_TYPE_P (t))
11286
    {
11287
      if (complain & tf_error)
11288
        error ("explicit instantiation of %q#T before definition of template",
11289
               t);
11290
      return;
11291
    }
11292
 
11293
  if (storage != NULL_TREE)
11294
    {
11295
      if (pedantic && !in_system_header)
11296
        pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
11297
                storage);
11298
 
11299
      if (storage == ridpointers[(int) RID_INLINE])
11300
        nomem_p = 1;
11301
      else if (storage == ridpointers[(int) RID_EXTERN])
11302
        extern_p = 1;
11303
      else if (storage == ridpointers[(int) RID_STATIC])
11304
        static_p = 1;
11305
      else
11306
        {
11307
          error ("storage class %qD applied to template instantiation",
11308
                 storage);
11309
          extern_p = 0;
11310
        }
11311
    }
11312
 
11313
  if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
11314
    {
11315
      /* DR 259 [temp.spec].
11316
 
11317
         Both an explicit instantiation and a declaration of an explicit
11318
         specialization shall not appear in a program unless the explicit
11319
         instantiation follows a declaration of the explicit specialization.
11320
 
11321
         For a given set of template parameters, if an explicit
11322
         instantiation of a template appears after a declaration of an
11323
         explicit specialization for that template, the explicit
11324
         instantiation has no effect.  */
11325
      return;
11326
    }
11327
  else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
11328
    {
11329
      /* [temp.spec]
11330
 
11331
         No program shall explicitly instantiate any template more
11332
         than once.
11333
 
11334
         If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
11335
         instantiation was `extern'.  If EXTERN_P then the second is.
11336
         These cases are OK.  */
11337
      previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
11338
 
11339
      if (!previous_instantiation_extern_p && !extern_p
11340
          && (complain & tf_error))
11341
        pedwarn ("duplicate explicit instantiation of %q#T", t);
11342
 
11343
      /* If we've already instantiated the template, just return now.  */
11344
      if (!CLASSTYPE_INTERFACE_ONLY (t))
11345
        return;
11346
    }
11347
 
11348
  check_explicit_instantiation_namespace (TYPE_NAME (t));
11349
  mark_class_instantiated (t, extern_p);
11350
 
11351
  if (nomem_p)
11352
    return;
11353
 
11354
  {
11355
    tree tmp;
11356
 
11357
    /* In contrast to implicit instantiation, where only the
11358
       declarations, and not the definitions, of members are
11359
       instantiated, we have here:
11360
 
11361
         [temp.explicit]
11362
 
11363
         The explicit instantiation of a class template specialization
11364
         implies the instantiation of all of its members not
11365
         previously explicitly specialized in the translation unit
11366
         containing the explicit instantiation.
11367
 
11368
       Of course, we can't instantiate member template classes, since
11369
       we don't have any arguments for them.  Note that the standard
11370
       is unclear on whether the instantiation of the members are
11371
       *explicit* instantiations or not.  However, the most natural
11372
       interpretation is that it should be an explicit instantiation.  */
11373
 
11374
    if (! static_p)
11375
      for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
11376
        if (TREE_CODE (tmp) == FUNCTION_DECL
11377
            && DECL_TEMPLATE_INSTANTIATION (tmp))
11378
          instantiate_class_member (tmp, extern_p);
11379
 
11380
    for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
11381
      if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
11382
        instantiate_class_member (tmp, extern_p);
11383
 
11384
    if (CLASSTYPE_NESTED_UTDS (t))
11385
      binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
11386
                             bt_instantiate_type_proc, &storage);
11387
  }
11388
}
11389
 
11390
/* Given a function DECL, which is a specialization of TMPL, modify
11391
   DECL to be a re-instantiation of TMPL with the same template
11392
   arguments.  TMPL should be the template into which tsubst'ing
11393
   should occur for DECL, not the most general template.
11394
 
11395
   One reason for doing this is a scenario like this:
11396
 
11397
     template <class T>
11398
     void f(const T&, int i);
11399
 
11400
     void g() { f(3, 7); }
11401
 
11402
     template <class T>
11403
     void f(const T& t, const int i) { }
11404
 
11405
   Note that when the template is first instantiated, with
11406
   instantiate_template, the resulting DECL will have no name for the
11407
   first parameter, and the wrong type for the second.  So, when we go
11408
   to instantiate the DECL, we regenerate it.  */
11409
 
11410
static void
11411
regenerate_decl_from_template (tree decl, tree tmpl)
11412
{
11413
  /* The arguments used to instantiate DECL, from the most general
11414
     template.  */
11415
  tree args;
11416
  tree code_pattern;
11417
 
11418
  args = DECL_TI_ARGS (decl);
11419
  code_pattern = DECL_TEMPLATE_RESULT (tmpl);
11420
 
11421
  /* Make sure that we can see identifiers, and compute access
11422
     correctly.  */
11423
  push_access_scope (decl);
11424
 
11425
  if (TREE_CODE (decl) == FUNCTION_DECL)
11426
    {
11427
      tree decl_parm;
11428
      tree pattern_parm;
11429
      tree specs;
11430
      int args_depth;
11431
      int parms_depth;
11432
 
11433
      args_depth = TMPL_ARGS_DEPTH (args);
11434
      parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
11435
      if (args_depth > parms_depth)
11436
        args = get_innermost_template_args (args, parms_depth);
11437
 
11438
      specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
11439
                                              args, tf_error, NULL_TREE);
11440
      if (specs)
11441
        TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
11442
                                                    specs);
11443
 
11444
      /* Merge parameter declarations.  */
11445
      decl_parm = skip_artificial_parms_for (decl,
11446
                                             DECL_ARGUMENTS (decl));
11447
      pattern_parm
11448
        = skip_artificial_parms_for (code_pattern,
11449
                                     DECL_ARGUMENTS (code_pattern));
11450
      while (decl_parm)
11451
        {
11452
          tree parm_type;
11453
          tree attributes;
11454
 
11455
          if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
11456
            DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
11457
          parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
11458
                              NULL_TREE);
11459
          parm_type = type_decays_to (parm_type);
11460
          if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
11461
            TREE_TYPE (decl_parm) = parm_type;
11462
          attributes = DECL_ATTRIBUTES (pattern_parm);
11463
          if (DECL_ATTRIBUTES (decl_parm) != attributes)
11464
            {
11465
              DECL_ATTRIBUTES (decl_parm) = attributes;
11466
              cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
11467
            }
11468
          decl_parm = TREE_CHAIN (decl_parm);
11469
          pattern_parm = TREE_CHAIN (pattern_parm);
11470
        }
11471
 
11472
      /* Merge additional specifiers from the CODE_PATTERN.  */
11473
      if (DECL_DECLARED_INLINE_P (code_pattern)
11474
          && !DECL_DECLARED_INLINE_P (decl))
11475
        DECL_DECLARED_INLINE_P (decl) = 1;
11476
      if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
11477
        DECL_INLINE (decl) = 1;
11478
    }
11479
  else if (TREE_CODE (decl) == VAR_DECL)
11480
    DECL_INITIAL (decl) =
11481
      tsubst_expr (DECL_INITIAL (code_pattern), args,
11482
                   tf_error, DECL_TI_TEMPLATE (decl));
11483
  else
11484
    gcc_unreachable ();
11485
 
11486
  pop_access_scope (decl);
11487
}
11488
 
11489
/* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
11490
   substituted to get DECL.  */
11491
 
11492
tree
11493
template_for_substitution (tree decl)
11494
{
11495
  tree tmpl = DECL_TI_TEMPLATE (decl);
11496
 
11497
  /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
11498
     for the instantiation.  This is not always the most general
11499
     template.  Consider, for example:
11500
 
11501
        template <class T>
11502
        struct S { template <class U> void f();
11503
                   template <> void f<int>(); };
11504
 
11505
     and an instantiation of S<double>::f<int>.  We want TD to be the
11506
     specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
11507
  while (/* An instantiation cannot have a definition, so we need a
11508
            more general template.  */
11509
         DECL_TEMPLATE_INSTANTIATION (tmpl)
11510
           /* We must also deal with friend templates.  Given:
11511
 
11512
                template <class T> struct S {
11513
                  template <class U> friend void f() {};
11514
                };
11515
 
11516
              S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
11517
              so far as the language is concerned, but that's still
11518
              where we get the pattern for the instantiation from.  On
11519
              other hand, if the definition comes outside the class, say:
11520
 
11521
                template <class T> struct S {
11522
                  template <class U> friend void f();
11523
                };
11524
                template <class U> friend void f() {}
11525
 
11526
              we don't need to look any further.  That's what the check for
11527
              DECL_INITIAL is for.  */
11528
          || (TREE_CODE (decl) == FUNCTION_DECL
11529
              && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
11530
              && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
11531
    {
11532
      /* The present template, TD, should not be a definition.  If it
11533
         were a definition, we should be using it!  Note that we
11534
         cannot restructure the loop to just keep going until we find
11535
         a template with a definition, since that might go too far if
11536
         a specialization was declared, but not defined.  */
11537
      gcc_assert (TREE_CODE (decl) != VAR_DECL
11538
                  || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
11539
 
11540
      /* Fetch the more general template.  */
11541
      tmpl = DECL_TI_TEMPLATE (tmpl);
11542
    }
11543
 
11544
  return tmpl;
11545
}
11546
 
11547
/* Produce the definition of D, a _DECL generated from a template.  If
11548
   DEFER_OK is nonzero, then we don't have to actually do the
11549
   instantiation now; we just have to do it sometime.  Normally it is
11550
   an error if this is an explicit instantiation but D is undefined.
11551
   EXPL_INST_CLASS_MEM_P is true iff D is a member of an
11552
   explicitly instantiated class template.  */
11553
 
11554
tree
11555
instantiate_decl (tree d, int defer_ok,
11556
                  bool expl_inst_class_mem_p)
11557
{
11558
  tree tmpl = DECL_TI_TEMPLATE (d);
11559
  tree gen_args;
11560
  tree args;
11561
  tree td;
11562
  tree code_pattern;
11563
  tree spec;
11564
  tree gen_tmpl;
11565
  bool pattern_defined;
11566
  int need_push;
11567
  location_t saved_loc = input_location;
11568
  bool external_p;
11569
 
11570
  /* This function should only be used to instantiate templates for
11571
     functions and static member variables.  */
11572
  gcc_assert (TREE_CODE (d) == FUNCTION_DECL
11573
              || TREE_CODE (d) == VAR_DECL);
11574
 
11575
  /* Variables are never deferred; if instantiation is required, they
11576
     are instantiated right away.  That allows for better code in the
11577
     case that an expression refers to the value of the variable --
11578
     if the variable has a constant value the referring expression can
11579
     take advantage of that fact.  */
11580
  if (TREE_CODE (d) == VAR_DECL)
11581
    defer_ok = 0;
11582
 
11583
  /* Don't instantiate cloned functions.  Instead, instantiate the
11584
     functions they cloned.  */
11585
  if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
11586
    d = DECL_CLONED_FUNCTION (d);
11587
 
11588
  if (DECL_TEMPLATE_INSTANTIATED (d))
11589
    /* D has already been instantiated.  It might seem reasonable to
11590
       check whether or not D is an explicit instantiation, and, if so,
11591
       stop here.  But when an explicit instantiation is deferred
11592
       until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
11593
       is set, even though we still need to do the instantiation.  */
11594
    return d;
11595
 
11596
  /* If we already have a specialization of this declaration, then
11597
     there's no reason to instantiate it.  Note that
11598
     retrieve_specialization gives us both instantiations and
11599
     specializations, so we must explicitly check
11600
     DECL_TEMPLATE_SPECIALIZATION.  */
11601
  gen_tmpl = most_general_template (tmpl);
11602
  gen_args = DECL_TI_ARGS (d);
11603
  spec = retrieve_specialization (gen_tmpl, gen_args,
11604
                                  /*class_specializations_p=*/false);
11605
  if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
11606
    return spec;
11607
 
11608
  /* This needs to happen before any tsubsting.  */
11609
  if (! push_tinst_level (d))
11610
    return d;
11611
 
11612
  timevar_push (TV_PARSE);
11613
 
11614
  /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
11615
     for the instantiation.  */
11616
  td = template_for_substitution (d);
11617
  code_pattern = DECL_TEMPLATE_RESULT (td);
11618
 
11619
  /* We should never be trying to instantiate a member of a class
11620
     template or partial specialization.  */
11621
  gcc_assert (d != code_pattern);
11622
 
11623
  if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
11624
      || DECL_TEMPLATE_SPECIALIZATION (td))
11625
    /* In the case of a friend template whose definition is provided
11626
       outside the class, we may have too many arguments.  Drop the
11627
       ones we don't need.  The same is true for specializations.  */
11628
    args = get_innermost_template_args
11629
      (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
11630
  else
11631
    args = gen_args;
11632
 
11633
  if (TREE_CODE (d) == FUNCTION_DECL)
11634
    pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
11635
  else
11636
    pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
11637
 
11638
  /* We may be in the middle of deferred access check.  Disable it now.  */
11639
  push_deferring_access_checks (dk_no_deferred);
11640
 
11641
  /* Unless an explicit instantiation directive has already determined
11642
     the linkage of D, remember that a definition is available for
11643
     this entity.  */
11644
  if (pattern_defined
11645
      && !DECL_INTERFACE_KNOWN (d)
11646
      && !DECL_NOT_REALLY_EXTERN (d))
11647
    mark_definable (d);
11648
 
11649
  input_location = DECL_SOURCE_LOCATION (d);
11650
 
11651
  /* If D is a member of an explicitly instantiated class template,
11652
     and no definition is available, treat it like an implicit
11653
     instantiation.  */
11654
  if (!pattern_defined && expl_inst_class_mem_p
11655
      && DECL_EXPLICIT_INSTANTIATION (d))
11656
    {
11657
      DECL_NOT_REALLY_EXTERN (d) = 0;
11658
      DECL_INTERFACE_KNOWN (d) = 0;
11659
      SET_DECL_IMPLICIT_INSTANTIATION (d);
11660
    }
11661
 
11662
  if (!defer_ok)
11663
    {
11664
      /* Recheck the substitutions to obtain any warning messages
11665
         about ignoring cv qualifiers.  */
11666
      tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
11667
      tree type = TREE_TYPE (gen);
11668
 
11669
      /* Make sure that we can see identifiers, and compute access
11670
         correctly.  D is already the target FUNCTION_DECL with the
11671
         right context.  */
11672
      push_access_scope (d);
11673
 
11674
      if (TREE_CODE (gen) == FUNCTION_DECL)
11675
        {
11676
          tsubst (DECL_ARGUMENTS (gen), gen_args, tf_error | tf_warning, d);
11677
          tsubst (TYPE_RAISES_EXCEPTIONS (type), gen_args,
11678
                  tf_error | tf_warning, d);
11679
          /* Don't simply tsubst the function type, as that will give
11680
             duplicate warnings about poor parameter qualifications.
11681
             The function arguments are the same as the decl_arguments
11682
             without the top level cv qualifiers.  */
11683
          type = TREE_TYPE (type);
11684
        }
11685
      tsubst (type, gen_args, tf_error | tf_warning, d);
11686
 
11687
      pop_access_scope (d);
11688
    }
11689
 
11690
  /* Check to see whether we know that this template will be
11691
     instantiated in some other file, as with "extern template"
11692
     extension.  */
11693
  external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
11694
  /* In general, we do not instantiate such templates...  */
11695
  if (external_p
11696
      /* ... but we instantiate inline functions so that we can inline
11697
         them and ... */
11698
      && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d))
11699
      /* ... we instantiate static data members whose values are
11700
         needed in integral constant expressions.  */
11701
      && ! (TREE_CODE (d) == VAR_DECL
11702
            && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
11703
    goto out;
11704
  /* Defer all other templates, unless we have been explicitly
11705
     forbidden from doing so.  */
11706
  if (/* If there is no definition, we cannot instantiate the
11707
         template.  */
11708
      ! pattern_defined
11709
      /* If it's OK to postpone instantiation, do so.  */
11710
      || defer_ok
11711
      /* If this is a static data member that will be defined
11712
         elsewhere, we don't want to instantiate the entire data
11713
         member, but we do want to instantiate the initializer so that
11714
         we can substitute that elsewhere.  */
11715
      || (external_p && TREE_CODE (d) == VAR_DECL))
11716
    {
11717
      /* The definition of the static data member is now required so
11718
         we must substitute the initializer.  */
11719
      if (TREE_CODE (d) == VAR_DECL
11720
          && !DECL_INITIAL (d)
11721
          && DECL_INITIAL (code_pattern))
11722
        {
11723
          tree ns;
11724
          tree init;
11725
 
11726
          ns = decl_namespace_context (d);
11727
          push_nested_namespace (ns);
11728
          push_nested_class (DECL_CONTEXT (d));
11729
          init = tsubst_expr (DECL_INITIAL (code_pattern),
11730
                              args,
11731
                              tf_error | tf_warning, NULL_TREE);
11732
          DECL_INITIAL (d) = init;
11733
          cp_finish_decl (d, init, /*init_const_expr_p=*/false,
11734
                          /*asmspec_tree=*/NULL_TREE,
11735
                          LOOKUP_ONLYCONVERTING);
11736
          pop_nested_class ();
11737
          pop_nested_namespace (ns);
11738
        }
11739
 
11740
      /* We restore the source position here because it's used by
11741
         add_pending_template.  */
11742
      input_location = saved_loc;
11743
 
11744
      if (at_eof && !pattern_defined
11745
          && DECL_EXPLICIT_INSTANTIATION (d))
11746
        /* [temp.explicit]
11747
 
11748
           The definition of a non-exported function template, a
11749
           non-exported member function template, or a non-exported
11750
           member function or static data member of a class template
11751
           shall be present in every translation unit in which it is
11752
           explicitly instantiated.  */
11753
        pedwarn
11754
          ("explicit instantiation of %qD but no definition available", d);
11755
 
11756
      /* ??? Historically, we have instantiated inline functions, even
11757
         when marked as "extern template".  */
11758
      if (!(external_p && TREE_CODE (d) == VAR_DECL))
11759
        add_pending_template (d);
11760
      goto out;
11761
    }
11762
  /* Tell the repository that D is available in this translation unit
11763
     -- and see if it is supposed to be instantiated here.  */
11764
  if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
11765
    {
11766
      /* In a PCH file, despite the fact that the repository hasn't
11767
         requested instantiation in the PCH it is still possible that
11768
         an instantiation will be required in a file that includes the
11769
         PCH.  */
11770
      if (pch_file)
11771
        add_pending_template (d);
11772
      /* Instantiate inline functions so that the inliner can do its
11773
         job, even though we'll not be emitting a copy of this
11774
         function.  */
11775
      if (!(TREE_CODE (d) == FUNCTION_DECL
11776
            && flag_inline_trees
11777
            && DECL_DECLARED_INLINE_P (d)))
11778
        goto out;
11779
    }
11780
 
11781
  need_push = !cfun || !global_bindings_p ();
11782
  if (need_push)
11783
    push_to_top_level ();
11784
 
11785
  /* Mark D as instantiated so that recursive calls to
11786
     instantiate_decl do not try to instantiate it again.  */
11787
  DECL_TEMPLATE_INSTANTIATED (d) = 1;
11788
 
11789
  /* Regenerate the declaration in case the template has been modified
11790
     by a subsequent redeclaration.  */
11791
  regenerate_decl_from_template (d, td);
11792
 
11793
  /* We already set the file and line above.  Reset them now in case
11794
     they changed as a result of calling regenerate_decl_from_template.  */
11795
  input_location = DECL_SOURCE_LOCATION (d);
11796
 
11797
  if (TREE_CODE (d) == VAR_DECL)
11798
    {
11799
      /* Clear out DECL_RTL; whatever was there before may not be right
11800
         since we've reset the type of the declaration.  */
11801
      SET_DECL_RTL (d, NULL_RTX);
11802
      DECL_IN_AGGR_P (d) = 0;
11803
 
11804
      /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
11805
         initializer.  That function will defer actual emission until
11806
         we have a chance to determine linkage.  */
11807
      DECL_EXTERNAL (d) = 0;
11808
 
11809
      /* Enter the scope of D so that access-checking works correctly.  */
11810
      push_nested_class (DECL_CONTEXT (d));
11811
      finish_decl (d, DECL_INITIAL (d), NULL_TREE);
11812
      pop_nested_class ();
11813
    }
11814
  else if (TREE_CODE (d) == FUNCTION_DECL)
11815
    {
11816
      htab_t saved_local_specializations;
11817
      tree subst_decl;
11818
      tree tmpl_parm;
11819
      tree spec_parm;
11820
 
11821
      /* Save away the current list, in case we are instantiating one
11822
         template from within the body of another.  */
11823
      saved_local_specializations = local_specializations;
11824
 
11825
      /* Set up the list of local specializations.  */
11826
      local_specializations = htab_create (37,
11827
                                           hash_local_specialization,
11828
                                           eq_local_specializations,
11829
                                           NULL);
11830
 
11831
      /* Set up context.  */
11832
      start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
11833
 
11834
      /* Create substitution entries for the parameters.  */
11835
      subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
11836
      tmpl_parm = DECL_ARGUMENTS (subst_decl);
11837
      spec_parm = DECL_ARGUMENTS (d);
11838
      if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
11839
        {
11840
          register_local_specialization (spec_parm, tmpl_parm);
11841
          spec_parm = skip_artificial_parms_for (d, spec_parm);
11842
          tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
11843
        }
11844
      while (tmpl_parm)
11845
        {
11846
          register_local_specialization (spec_parm, tmpl_parm);
11847
          tmpl_parm = TREE_CHAIN (tmpl_parm);
11848
          spec_parm = TREE_CHAIN (spec_parm);
11849
        }
11850
      gcc_assert (!spec_parm);
11851
 
11852
      /* Substitute into the body of the function.  */
11853
      tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
11854
                   tf_error | tf_warning, tmpl);
11855
 
11856
      /* We don't need the local specializations any more.  */
11857
      htab_delete (local_specializations);
11858
      local_specializations = saved_local_specializations;
11859
 
11860
      /* Finish the function.  */
11861
      d = finish_function (0);
11862
      expand_or_defer_fn (d);
11863
    }
11864
 
11865
  /* We're not deferring instantiation any more.  */
11866
  TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
11867
 
11868
  if (need_push)
11869
    pop_from_top_level ();
11870
 
11871
out:
11872
  input_location = saved_loc;
11873
  pop_deferring_access_checks ();
11874
  pop_tinst_level ();
11875
 
11876
  timevar_pop (TV_PARSE);
11877
 
11878
  return d;
11879
}
11880
 
11881
/* Run through the list of templates that we wish we could
11882
   instantiate, and instantiate any we can.  RETRIES is the
11883
   number of times we retry pending template instantiation.  */
11884
 
11885
void
11886
instantiate_pending_templates (int retries)
11887
{
11888
  tree *t;
11889
  tree last = NULL_TREE;
11890
  int reconsider;
11891
  location_t saved_loc = input_location;
11892
  int saved_in_system_header = in_system_header;
11893
 
11894
  /* Instantiating templates may trigger vtable generation.  This in turn
11895
     may require further template instantiations.  We place a limit here
11896
     to avoid infinite loop.  */
11897
  if (pending_templates && retries >= max_tinst_depth)
11898
    {
11899
      tree decl = TREE_VALUE (pending_templates);
11900
 
11901
      error ("template instantiation depth exceeds maximum of %d"
11902
             " instantiating %q+D, possibly from virtual table generation"
11903
             " (use -ftemplate-depth-NN to increase the maximum)",
11904
             max_tinst_depth, decl);
11905
      if (TREE_CODE (decl) == FUNCTION_DECL)
11906
        /* Pretend that we defined it.  */
11907
        DECL_INITIAL (decl) = error_mark_node;
11908
      return;
11909
    }
11910
 
11911
  do
11912
    {
11913
      reconsider = 0;
11914
 
11915
      t = &pending_templates;
11916
      while (*t)
11917
        {
11918
          tree instantiation = TREE_VALUE (*t);
11919
 
11920
          reopen_tinst_level (TREE_PURPOSE (*t));
11921
 
11922
          if (TYPE_P (instantiation))
11923
            {
11924
              tree fn;
11925
 
11926
              if (!COMPLETE_TYPE_P (instantiation))
11927
                {
11928
                  instantiate_class_template (instantiation);
11929
                  if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
11930
                    for (fn = TYPE_METHODS (instantiation);
11931
                         fn;
11932
                         fn = TREE_CHAIN (fn))
11933
                      if (! DECL_ARTIFICIAL (fn))
11934
                        instantiate_decl (fn,
11935
                                          /*defer_ok=*/0,
11936
                                          /*expl_inst_class_mem_p=*/false);
11937
                  if (COMPLETE_TYPE_P (instantiation))
11938
                    reconsider = 1;
11939
                }
11940
 
11941
              if (COMPLETE_TYPE_P (instantiation))
11942
                /* If INSTANTIATION has been instantiated, then we don't
11943
                   need to consider it again in the future.  */
11944
                *t = TREE_CHAIN (*t);
11945
              else
11946
                {
11947
                  last = *t;
11948
                  t = &TREE_CHAIN (*t);
11949
                }
11950
            }
11951
          else
11952
            {
11953
              if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
11954
                  && !DECL_TEMPLATE_INSTANTIATED (instantiation))
11955
                {
11956
                  instantiation
11957
                    = instantiate_decl (instantiation,
11958
                                        /*defer_ok=*/0,
11959
                                        /*expl_inst_class_mem_p=*/false);
11960
                  if (DECL_TEMPLATE_INSTANTIATED (instantiation))
11961
                    reconsider = 1;
11962
                }
11963
 
11964
              if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
11965
                  || DECL_TEMPLATE_INSTANTIATED (instantiation))
11966
                /* If INSTANTIATION has been instantiated, then we don't
11967
                   need to consider it again in the future.  */
11968
                *t = TREE_CHAIN (*t);
11969
              else
11970
                {
11971
                  last = *t;
11972
                  t = &TREE_CHAIN (*t);
11973
                }
11974
            }
11975
          tinst_depth = 0;
11976
          current_tinst_level = NULL_TREE;
11977
        }
11978
      last_pending_template = last;
11979
    }
11980
  while (reconsider);
11981
 
11982
  input_location = saved_loc;
11983
  in_system_header = saved_in_system_header;
11984
}
11985
 
11986
/* Substitute ARGVEC into T, which is a list of initializers for
11987
   either base class or a non-static data member.  The TREE_PURPOSEs
11988
   are DECLs, and the TREE_VALUEs are the initializer values.  Used by
11989
   instantiate_decl.  */
11990
 
11991
static tree
11992
tsubst_initializer_list (tree t, tree argvec)
11993
{
11994
  tree inits = NULL_TREE;
11995
 
11996
  for (; t; t = TREE_CHAIN (t))
11997
    {
11998
      tree decl;
11999
      tree init;
12000
 
12001
      decl = tsubst_copy (TREE_PURPOSE (t), argvec, tf_error | tf_warning,
12002
                          NULL_TREE);
12003
      decl = expand_member_init (decl);
12004
      if (decl && !DECL_P (decl))
12005
        in_base_initializer = 1;
12006
 
12007
      init = tsubst_expr (TREE_VALUE (t), argvec, tf_error | tf_warning,
12008
                          NULL_TREE);
12009
      in_base_initializer = 0;
12010
 
12011
      if (decl)
12012
        {
12013
          init = build_tree_list (decl, init);
12014
          TREE_CHAIN (init) = inits;
12015
          inits = init;
12016
        }
12017
    }
12018
  return inits;
12019
}
12020
 
12021
/* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
12022
 
12023
static void
12024
set_current_access_from_decl (tree decl)
12025
{
12026
  if (TREE_PRIVATE (decl))
12027
    current_access_specifier = access_private_node;
12028
  else if (TREE_PROTECTED (decl))
12029
    current_access_specifier = access_protected_node;
12030
  else
12031
    current_access_specifier = access_public_node;
12032
}
12033
 
12034
/* Instantiate an enumerated type.  TAG is the template type, NEWTAG
12035
   is the instantiation (which should have been created with
12036
   start_enum) and ARGS are the template arguments to use.  */
12037
 
12038
static void
12039
tsubst_enum (tree tag, tree newtag, tree args)
12040
{
12041
  tree e;
12042
 
12043
  for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
12044
    {
12045
      tree value;
12046
      tree decl;
12047
 
12048
      decl = TREE_VALUE (e);
12049
      /* Note that in a template enum, the TREE_VALUE is the
12050
         CONST_DECL, not the corresponding INTEGER_CST.  */
12051
      value = tsubst_expr (DECL_INITIAL (decl),
12052
                           args, tf_error | tf_warning,
12053
                           NULL_TREE);
12054
 
12055
      /* Give this enumeration constant the correct access.  */
12056
      set_current_access_from_decl (decl);
12057
 
12058
      /* Actually build the enumerator itself.  */
12059
      build_enumerator (DECL_NAME (decl), value, newtag);
12060
    }
12061
 
12062
  finish_enum (newtag);
12063
  DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
12064
    = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
12065
}
12066
 
12067
/* DECL is a FUNCTION_DECL that is a template specialization.  Return
12068
   its type -- but without substituting the innermost set of template
12069
   arguments.  So, innermost set of template parameters will appear in
12070
   the type.  */
12071
 
12072
tree
12073
get_mostly_instantiated_function_type (tree decl)
12074
{
12075
  tree fn_type;
12076
  tree tmpl;
12077
  tree targs;
12078
  tree tparms;
12079
  int parm_depth;
12080
 
12081
  tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
12082
  targs = DECL_TI_ARGS (decl);
12083
  tparms = DECL_TEMPLATE_PARMS (tmpl);
12084
  parm_depth = TMPL_PARMS_DEPTH (tparms);
12085
 
12086
  /* There should be as many levels of arguments as there are levels
12087
     of parameters.  */
12088
  gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
12089
 
12090
  fn_type = TREE_TYPE (tmpl);
12091
 
12092
  if (parm_depth == 1)
12093
    /* No substitution is necessary.  */
12094
    ;
12095
  else
12096
    {
12097
      int i, save_access_control;
12098
      tree partial_args;
12099
 
12100
      /* Replace the innermost level of the TARGS with NULL_TREEs to
12101
         let tsubst know not to substitute for those parameters.  */
12102
      partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
12103
      for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
12104
        SET_TMPL_ARGS_LEVEL (partial_args, i,
12105
                             TMPL_ARGS_LEVEL (targs, i));
12106
      SET_TMPL_ARGS_LEVEL (partial_args,
12107
                           TMPL_ARGS_DEPTH (targs),
12108
                           make_tree_vec (DECL_NTPARMS (tmpl)));
12109
 
12110
      /* Disable access control as this function is used only during
12111
         name-mangling.  */
12112
      save_access_control = flag_access_control;
12113
      flag_access_control = 0;
12114
 
12115
      ++processing_template_decl;
12116
      /* Now, do the (partial) substitution to figure out the
12117
         appropriate function type.  */
12118
      fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
12119
      --processing_template_decl;
12120
 
12121
      /* Substitute into the template parameters to obtain the real
12122
         innermost set of parameters.  This step is important if the
12123
         innermost set of template parameters contains value
12124
         parameters whose types depend on outer template parameters.  */
12125
      TREE_VEC_LENGTH (partial_args)--;
12126
      tparms = tsubst_template_parms (tparms, partial_args, tf_error);
12127
 
12128
      flag_access_control = save_access_control;
12129
    }
12130
 
12131
  return fn_type;
12132
}
12133
 
12134
/* Return truthvalue if we're processing a template different from
12135
   the last one involved in diagnostics.  */
12136
int
12137
problematic_instantiation_changed (void)
12138
{
12139
  return last_template_error_tick != tinst_level_tick;
12140
}
12141
 
12142
/* Remember current template involved in diagnostics.  */
12143
void
12144
record_last_problematic_instantiation (void)
12145
{
12146
  last_template_error_tick = tinst_level_tick;
12147
}
12148
 
12149
tree
12150
current_instantiation (void)
12151
{
12152
  return current_tinst_level;
12153
}
12154
 
12155
/* [temp.param] Check that template non-type parm TYPE is of an allowable
12156
   type. Return zero for ok, nonzero for disallowed. Issue error and
12157
   warning messages under control of COMPLAIN.  */
12158
 
12159
static int
12160
invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
12161
{
12162
  if (INTEGRAL_TYPE_P (type))
12163
    return 0;
12164
  else if (POINTER_TYPE_P (type))
12165
    return 0;
12166
  else if (TYPE_PTR_TO_MEMBER_P (type))
12167
    return 0;
12168
  else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
12169
    return 0;
12170
  else if (TREE_CODE (type) == TYPENAME_TYPE)
12171
    return 0;
12172
 
12173
  if (complain & tf_error)
12174
    error ("%q#T is not a valid type for a template constant parameter", type);
12175
  return 1;
12176
}
12177
 
12178
/* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
12179
   Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
12180
 
12181
static bool
12182
dependent_type_p_r (tree type)
12183
{
12184
  tree scope;
12185
 
12186
  /* [temp.dep.type]
12187
 
12188
     A type is dependent if it is:
12189
 
12190
     -- a template parameter. Template template parameters are types
12191
        for us (since TYPE_P holds true for them) so we handle
12192
        them here.  */
12193
  if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
12194
      || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
12195
    return true;
12196
  /* -- a qualified-id with a nested-name-specifier which contains a
12197
        class-name that names a dependent type or whose unqualified-id
12198
        names a dependent type.  */
12199
  if (TREE_CODE (type) == TYPENAME_TYPE)
12200
    return true;
12201
  /* -- a cv-qualified type where the cv-unqualified type is
12202
        dependent.  */
12203
  type = TYPE_MAIN_VARIANT (type);
12204
  /* -- a compound type constructed from any dependent type.  */
12205
  if (TYPE_PTR_TO_MEMBER_P (type))
12206
    return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
12207
            || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
12208
                                           (type)));
12209
  else if (TREE_CODE (type) == POINTER_TYPE
12210
           || TREE_CODE (type) == REFERENCE_TYPE)
12211
    return dependent_type_p (TREE_TYPE (type));
12212
  else if (TREE_CODE (type) == FUNCTION_TYPE
12213
           || TREE_CODE (type) == METHOD_TYPE)
12214
    {
12215
      tree arg_type;
12216
 
12217
      if (dependent_type_p (TREE_TYPE (type)))
12218
        return true;
12219
      for (arg_type = TYPE_ARG_TYPES (type);
12220
           arg_type;
12221
           arg_type = TREE_CHAIN (arg_type))
12222
        if (dependent_type_p (TREE_VALUE (arg_type)))
12223
          return true;
12224
      return false;
12225
    }
12226
  /* -- an array type constructed from any dependent type or whose
12227
        size is specified by a constant expression that is
12228
        value-dependent.  */
12229
  if (TREE_CODE (type) == ARRAY_TYPE)
12230
    {
12231
      if (TYPE_DOMAIN (type)
12232
          && ((value_dependent_expression_p
12233
               (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
12234
              || (type_dependent_expression_p
12235
                  (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
12236
        return true;
12237
      return dependent_type_p (TREE_TYPE (type));
12238
    }
12239
 
12240
  /* -- a template-id in which either the template name is a template
12241
     parameter ...  */
12242
  if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
12243
    return true;
12244
  /* ... or any of the template arguments is a dependent type or
12245
        an expression that is type-dependent or value-dependent.  */
12246
  else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
12247
           && (any_dependent_template_arguments_p
12248
               (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
12249
    return true;
12250
 
12251
  /* All TYPEOF_TYPEs are dependent; if the argument of the `typeof'
12252
     expression is not type-dependent, then it should already been
12253
     have resolved.  */
12254
  if (TREE_CODE (type) == TYPEOF_TYPE)
12255
    return true;
12256
 
12257
  /* The standard does not specifically mention types that are local
12258
     to template functions or local classes, but they should be
12259
     considered dependent too.  For example:
12260
 
12261
       template <int I> void f() {
12262
         enum E { a = I };
12263
         S<sizeof (E)> s;
12264
       }
12265
 
12266
     The size of `E' cannot be known until the value of `I' has been
12267
     determined.  Therefore, `E' must be considered dependent.  */
12268
  scope = TYPE_CONTEXT (type);
12269
  if (scope && TYPE_P (scope))
12270
    return dependent_type_p (scope);
12271
  else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12272
    return type_dependent_expression_p (scope);
12273
 
12274
  /* Other types are non-dependent.  */
12275
  return false;
12276
}
12277
 
12278
/* Returns TRUE if TYPE is dependent, in the sense of
12279
   [temp.dep.type].  */
12280
 
12281
bool
12282
dependent_type_p (tree type)
12283
{
12284
  /* If there are no template parameters in scope, then there can't be
12285
     any dependent types.  */
12286
  if (!processing_template_decl)
12287
    return false;
12288
 
12289
  /* If the type is NULL, we have not computed a type for the entity
12290
     in question; in that case, the type is dependent.  */
12291
  if (!type)
12292
    return true;
12293
 
12294
  /* Erroneous types can be considered non-dependent.  */
12295
  if (type == error_mark_node)
12296
    return false;
12297
 
12298
  /* If we have not already computed the appropriate value for TYPE,
12299
     do so now.  */
12300
  if (!TYPE_DEPENDENT_P_VALID (type))
12301
    {
12302
      TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
12303
      TYPE_DEPENDENT_P_VALID (type) = 1;
12304
    }
12305
 
12306
  return TYPE_DEPENDENT_P (type);
12307
}
12308
 
12309
/* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
12310
 
12311
static bool
12312
dependent_scope_ref_p (tree expression, bool criterion (tree))
12313
{
12314
  tree scope;
12315
  tree name;
12316
 
12317
  gcc_assert (TREE_CODE (expression) == SCOPE_REF);
12318
 
12319
  if (!TYPE_P (TREE_OPERAND (expression, 0)))
12320
    return true;
12321
 
12322
  scope = TREE_OPERAND (expression, 0);
12323
  name = TREE_OPERAND (expression, 1);
12324
 
12325
  /* [temp.dep.expr]
12326
 
12327
     An id-expression is type-dependent if it contains a
12328
     nested-name-specifier that contains a class-name that names a
12329
     dependent type.  */
12330
  /* The suggested resolution to Core Issue 2 implies that if the
12331
     qualifying type is the current class, then we must peek
12332
     inside it.  */
12333
  if (DECL_P (name)
12334
      && currently_open_class (scope)
12335
      && !criterion (name))
12336
    return false;
12337
  if (dependent_type_p (scope))
12338
    return true;
12339
 
12340
  return false;
12341
}
12342
 
12343
/* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
12344
   [temp.dep.constexpr] */
12345
 
12346
bool
12347
value_dependent_expression_p (tree expression)
12348
{
12349
  if (!processing_template_decl)
12350
    return false;
12351
 
12352
  /* A name declared with a dependent type.  */
12353
  if (DECL_P (expression) && type_dependent_expression_p (expression))
12354
    return true;
12355
 
12356
  switch (TREE_CODE (expression))
12357
    {
12358
    case IDENTIFIER_NODE:
12359
      /* A name that has not been looked up -- must be dependent.  */
12360
      return true;
12361
 
12362
    case TEMPLATE_PARM_INDEX:
12363
      /* A non-type template parm.  */
12364
      return true;
12365
 
12366
    case CONST_DECL:
12367
      /* A non-type template parm.  */
12368
      if (DECL_TEMPLATE_PARM_P (expression))
12369
        return true;
12370
      return false;
12371
 
12372
    case VAR_DECL:
12373
       /* A constant with integral or enumeration type and is initialized
12374
          with an expression that is value-dependent.  */
12375
      if (DECL_INITIAL (expression)
12376
          && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
12377
          && value_dependent_expression_p (DECL_INITIAL (expression)))
12378
        return true;
12379
      return false;
12380
 
12381
    case DYNAMIC_CAST_EXPR:
12382
    case STATIC_CAST_EXPR:
12383
    case CONST_CAST_EXPR:
12384
    case REINTERPRET_CAST_EXPR:
12385
    case CAST_EXPR:
12386
      /* These expressions are value-dependent if the type to which
12387
         the cast occurs is dependent or the expression being casted
12388
         is value-dependent.  */
12389
      {
12390
        tree type = TREE_TYPE (expression);
12391
 
12392
        if (dependent_type_p (type))
12393
          return true;
12394
 
12395
        /* A functional cast has a list of operands.  */
12396
        expression = TREE_OPERAND (expression, 0);
12397
        if (!expression)
12398
          {
12399
            /* If there are no operands, it must be an expression such
12400
               as "int()". This should not happen for aggregate types
12401
               because it would form non-constant expressions.  */
12402
            gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
12403
 
12404
            return false;
12405
          }
12406
 
12407
        if (TREE_CODE (expression) == TREE_LIST)
12408
          {
12409
            for (; expression; expression = TREE_CHAIN (expression))
12410
              if (value_dependent_expression_p (TREE_VALUE (expression)))
12411
                return true;
12412
            return false;
12413
          }
12414
 
12415
        return value_dependent_expression_p (expression);
12416
      }
12417
 
12418
    case SIZEOF_EXPR:
12419
    case ALIGNOF_EXPR:
12420
      /* A `sizeof' expression is value-dependent if the operand is
12421
         type-dependent.  */
12422
      expression = TREE_OPERAND (expression, 0);
12423
      if (TYPE_P (expression))
12424
        return dependent_type_p (expression);
12425
      return type_dependent_expression_p (expression);
12426
 
12427
    case SCOPE_REF:
12428
      return dependent_scope_ref_p (expression, value_dependent_expression_p);
12429
 
12430
    case COMPONENT_REF:
12431
      return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
12432
              || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
12433
 
12434
    case CALL_EXPR:
12435
      /* A CALL_EXPR is value-dependent if any argument is
12436
         value-dependent.  Why do we have to handle CALL_EXPRs in this
12437
         function at all?  First, some function calls, those for which
12438
         value_dependent_expression_p is true, man appear in constant
12439
         expressions.  Second, there appear to be bugs which result in
12440
         other CALL_EXPRs reaching this point. */
12441
      {
12442
        tree function = TREE_OPERAND (expression, 0);
12443
        tree args = TREE_OPERAND (expression, 1);
12444
 
12445
        if (value_dependent_expression_p (function))
12446
          return true;
12447
 
12448
        if (! args)
12449
          return false;
12450
 
12451
        if (TREE_CODE (args) == TREE_LIST)
12452
          {
12453
            for (; args; args = TREE_CHAIN (args))
12454
              if (value_dependent_expression_p (TREE_VALUE (args)))
12455
                return true;
12456
            return false;
12457
          }
12458
 
12459
        return value_dependent_expression_p (args);
12460
      }
12461
 
12462
    default:
12463
      /* A constant expression is value-dependent if any subexpression is
12464
         value-dependent.  */
12465
      switch (TREE_CODE_CLASS (TREE_CODE (expression)))
12466
        {
12467
        case tcc_reference:
12468
        case tcc_unary:
12469
          return (value_dependent_expression_p
12470
                  (TREE_OPERAND (expression, 0)));
12471
 
12472
        case tcc_comparison:
12473
        case tcc_binary:
12474
          return ((value_dependent_expression_p
12475
                   (TREE_OPERAND (expression, 0)))
12476
                  || (value_dependent_expression_p
12477
                      (TREE_OPERAND (expression, 1))));
12478
 
12479
        case tcc_expression:
12480
          {
12481
            int i;
12482
            for (i = 0; i < TREE_CODE_LENGTH (TREE_CODE (expression)); ++i)
12483
              /* In some cases, some of the operands may be missing.
12484
                 (For example, in the case of PREDECREMENT_EXPR, the
12485
                 amount to increment by may be missing.)  That doesn't
12486
                 make the expression dependent.  */
12487
              if (TREE_OPERAND (expression, i)
12488
                  && (value_dependent_expression_p
12489
                      (TREE_OPERAND (expression, i))))
12490
                return true;
12491
            return false;
12492
          }
12493
 
12494
        default:
12495
          break;
12496
        }
12497
    }
12498
 
12499
  /* The expression is not value-dependent.  */
12500
  return false;
12501
}
12502
 
12503
/* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
12504
   [temp.dep.expr].  */
12505
 
12506
bool
12507
type_dependent_expression_p (tree expression)
12508
{
12509
  if (!processing_template_decl)
12510
    return false;
12511
 
12512
  if (expression == error_mark_node)
12513
    return false;
12514
 
12515
  /* An unresolved name is always dependent.  */
12516
  if (TREE_CODE (expression) == IDENTIFIER_NODE)
12517
    return true;
12518
 
12519
  /* Some expression forms are never type-dependent.  */
12520
  if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
12521
      || TREE_CODE (expression) == SIZEOF_EXPR
12522
      || TREE_CODE (expression) == ALIGNOF_EXPR
12523
      || TREE_CODE (expression) == TYPEID_EXPR
12524
      || TREE_CODE (expression) == DELETE_EXPR
12525
      || TREE_CODE (expression) == VEC_DELETE_EXPR
12526
      || TREE_CODE (expression) == THROW_EXPR)
12527
    return false;
12528
 
12529
  /* The types of these expressions depends only on the type to which
12530
     the cast occurs.  */
12531
  if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
12532
      || TREE_CODE (expression) == STATIC_CAST_EXPR
12533
      || TREE_CODE (expression) == CONST_CAST_EXPR
12534
      || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
12535
      || TREE_CODE (expression) == CAST_EXPR)
12536
    return dependent_type_p (TREE_TYPE (expression));
12537
 
12538
  /* The types of these expressions depends only on the type created
12539
     by the expression.  */
12540
  if (TREE_CODE (expression) == NEW_EXPR
12541
      || TREE_CODE (expression) == VEC_NEW_EXPR)
12542
    {
12543
      /* For NEW_EXPR tree nodes created inside a template, either
12544
         the object type itself or a TREE_LIST may appear as the
12545
         operand 1.  */
12546
      tree type = TREE_OPERAND (expression, 1);
12547
      if (TREE_CODE (type) == TREE_LIST)
12548
        /* This is an array type.  We need to check array dimensions
12549
           as well.  */
12550
        return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
12551
               || value_dependent_expression_p
12552
                    (TREE_OPERAND (TREE_VALUE (type), 1));
12553
      else
12554
        return dependent_type_p (type);
12555
    }
12556
 
12557
  if (TREE_CODE (expression) == SCOPE_REF
12558
      && dependent_scope_ref_p (expression,
12559
                                type_dependent_expression_p))
12560
    return true;
12561
 
12562
  if (TREE_CODE (expression) == FUNCTION_DECL
12563
      && DECL_LANG_SPECIFIC (expression)
12564
      && DECL_TEMPLATE_INFO (expression)
12565
      && (any_dependent_template_arguments_p
12566
          (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
12567
    return true;
12568
 
12569
  if (TREE_CODE (expression) == TEMPLATE_DECL
12570
      && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
12571
    return false;
12572
 
12573
  if (TREE_TYPE (expression) == unknown_type_node)
12574
    {
12575
      if (TREE_CODE (expression) == ADDR_EXPR)
12576
        return type_dependent_expression_p (TREE_OPERAND (expression, 0));
12577
      if (TREE_CODE (expression) == COMPONENT_REF
12578
          || TREE_CODE (expression) == OFFSET_REF)
12579
        {
12580
          if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
12581
            return true;
12582
          expression = TREE_OPERAND (expression, 1);
12583
          if (TREE_CODE (expression) == IDENTIFIER_NODE)
12584
            return false;
12585
        }
12586
      /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
12587
      if (TREE_CODE (expression) == SCOPE_REF)
12588
        return false;
12589
 
12590
      if (TREE_CODE (expression) == BASELINK)
12591
        expression = BASELINK_FUNCTIONS (expression);
12592
 
12593
      if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
12594
        {
12595
          if (any_dependent_template_arguments_p
12596
              (TREE_OPERAND (expression, 1)))
12597
            return true;
12598
          expression = TREE_OPERAND (expression, 0);
12599
        }
12600
      gcc_assert (TREE_CODE (expression) == OVERLOAD
12601
                  || TREE_CODE (expression) == FUNCTION_DECL);
12602
 
12603
      while (expression)
12604
        {
12605
          if (type_dependent_expression_p (OVL_CURRENT (expression)))
12606
            return true;
12607
          expression = OVL_NEXT (expression);
12608
        }
12609
      return false;
12610
    }
12611
 
12612
  gcc_assert (TREE_CODE (expression) != TYPE_DECL);
12613
 
12614
  return (dependent_type_p (TREE_TYPE (expression)));
12615
}
12616
 
12617
/* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
12618
   contains a type-dependent expression.  */
12619
 
12620
bool
12621
any_type_dependent_arguments_p (tree args)
12622
{
12623
  while (args)
12624
    {
12625
      tree arg = TREE_VALUE (args);
12626
 
12627
      if (type_dependent_expression_p (arg))
12628
        return true;
12629
      args = TREE_CHAIN (args);
12630
    }
12631
  return false;
12632
}
12633
 
12634
/* Returns TRUE if the ARG (a template argument) is dependent.  */
12635
 
12636
static bool
12637
dependent_template_arg_p (tree arg)
12638
{
12639
  if (!processing_template_decl)
12640
    return false;
12641
 
12642
  if (TREE_CODE (arg) == TEMPLATE_DECL
12643
      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
12644
    return dependent_template_p (arg);
12645
  else if (TYPE_P (arg))
12646
    return dependent_type_p (arg);
12647
  else
12648
    return (type_dependent_expression_p (arg)
12649
            || value_dependent_expression_p (arg));
12650
}
12651
 
12652
/* Returns true if ARGS (a collection of template arguments) contains
12653
   any dependent arguments.  */
12654
 
12655
bool
12656
any_dependent_template_arguments_p (tree args)
12657
{
12658
  int i;
12659
  int j;
12660
 
12661
  if (!args)
12662
    return false;
12663
  if (args == error_mark_node)
12664
    return true;
12665
 
12666
  for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
12667
    {
12668
      tree level = TMPL_ARGS_LEVEL (args, i + 1);
12669
      for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
12670
        if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
12671
          return true;
12672
    }
12673
 
12674
  return false;
12675
}
12676
 
12677
/* Returns TRUE if the template TMPL is dependent.  */
12678
 
12679
bool
12680
dependent_template_p (tree tmpl)
12681
{
12682
  if (TREE_CODE (tmpl) == OVERLOAD)
12683
    {
12684
      while (tmpl)
12685
        {
12686
          if (dependent_template_p (OVL_FUNCTION (tmpl)))
12687
            return true;
12688
          tmpl = OVL_CHAIN (tmpl);
12689
        }
12690
      return false;
12691
    }
12692
 
12693
  /* Template template parameters are dependent.  */
12694
  if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
12695
      || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
12696
    return true;
12697
  /* So are names that have not been looked up.  */
12698
  if (TREE_CODE (tmpl) == SCOPE_REF
12699
      || TREE_CODE (tmpl) == IDENTIFIER_NODE)
12700
    return true;
12701
  /* So are member templates of dependent classes.  */
12702
  if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
12703
    return dependent_type_p (DECL_CONTEXT (tmpl));
12704
  return false;
12705
}
12706
 
12707
/* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
12708
 
12709
bool
12710
dependent_template_id_p (tree tmpl, tree args)
12711
{
12712
  return (dependent_template_p (tmpl)
12713
          || any_dependent_template_arguments_p (args));
12714
}
12715
 
12716
/* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
12717
   TYPENAME_TYPE corresponds.  Returns ERROR_MARK_NODE if no such TYPE
12718
   can be found.  Note that this function peers inside uninstantiated
12719
   templates and therefore should be used only in extremely limited
12720
   situations.  ONLY_CURRENT_P restricts this peering to the currently
12721
   open classes hierarchy (which is required when comparing types).  */
12722
 
12723
tree
12724
resolve_typename_type (tree type, bool only_current_p)
12725
{
12726
  tree scope;
12727
  tree name;
12728
  tree decl;
12729
  int quals;
12730
  tree pushed_scope;
12731
 
12732
  gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
12733
 
12734
  scope = TYPE_CONTEXT (type);
12735
  name = TYPE_IDENTIFIER (type);
12736
 
12737
  /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
12738
     it first before we can figure out what NAME refers to.  */
12739
  if (TREE_CODE (scope) == TYPENAME_TYPE)
12740
    scope = resolve_typename_type (scope, only_current_p);
12741
  /* If we don't know what SCOPE refers to, then we cannot resolve the
12742
     TYPENAME_TYPE.  */
12743
  if (scope == error_mark_node || TREE_CODE (scope) == TYPENAME_TYPE)
12744
    return error_mark_node;
12745
  /* If the SCOPE is a template type parameter, we have no way of
12746
     resolving the name.  */
12747
  if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
12748
    return type;
12749
  /* If the SCOPE is not the current instantiation, there's no reason
12750
     to look inside it.  */
12751
  if (only_current_p && !currently_open_class (scope))
12752
    return error_mark_node;
12753
  /* If SCOPE is a partial instantiation, it will not have a valid
12754
     TYPE_FIELDS list, so use the original template.  */
12755
  scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
12756
  /* Enter the SCOPE so that name lookup will be resolved as if we
12757
     were in the class definition.  In particular, SCOPE will no
12758
     longer be considered a dependent type.  */
12759
  pushed_scope = push_scope (scope);
12760
  /* Look up the declaration.  */
12761
  decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
12762
  /* Obtain the set of qualifiers applied to the TYPE.  */
12763
  quals = cp_type_quals (type);
12764
  /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
12765
     find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
12766
  if (!decl)
12767
    type = error_mark_node;
12768
  else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
12769
           && TREE_CODE (decl) == TYPE_DECL)
12770
    type = TREE_TYPE (decl);
12771
  else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
12772
           && DECL_CLASS_TEMPLATE_P (decl))
12773
    {
12774
      tree tmpl;
12775
      tree args;
12776
      /* Obtain the template and the arguments.  */
12777
      tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
12778
      args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
12779
      /* Instantiate the template.  */
12780
      type = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
12781
                                    /*entering_scope=*/0, tf_error | tf_user);
12782
    }
12783
  else
12784
    type = error_mark_node;
12785
  /* Qualify the resulting type.  */
12786
  if (type != error_mark_node && quals)
12787
    type = cp_build_qualified_type (type, quals);
12788
  /* Leave the SCOPE.  */
12789
  if (pushed_scope)
12790
    pop_scope (pushed_scope);
12791
 
12792
  return type;
12793
}
12794
 
12795
/* EXPR is an expression which is not type-dependent.  Return a proxy
12796
   for EXPR that can be used to compute the types of larger
12797
   expressions containing EXPR.  */
12798
 
12799
tree
12800
build_non_dependent_expr (tree expr)
12801
{
12802
  tree inner_expr;
12803
 
12804
  /* Preserve null pointer constants so that the type of things like
12805
     "p == 0" where "p" is a pointer can be determined.  */
12806
  if (null_ptr_cst_p (expr))
12807
    return expr;
12808
  /* Preserve OVERLOADs; the functions must be available to resolve
12809
     types.  */
12810
  inner_expr = (TREE_CODE (expr) == ADDR_EXPR ?
12811
                TREE_OPERAND (expr, 0) :
12812
                TREE_CODE (expr) == COMPONENT_REF ?
12813
                TREE_OPERAND (expr, 1) : expr);
12814
  if (is_overloaded_fn (inner_expr)
12815
      || TREE_CODE (inner_expr) == OFFSET_REF)
12816
    return expr;
12817
  /* There is no need to return a proxy for a variable.  */
12818
  if (TREE_CODE (expr) == VAR_DECL)
12819
    return expr;
12820
  /* Preserve string constants; conversions from string constants to
12821
     "char *" are allowed, even though normally a "const char *"
12822
     cannot be used to initialize a "char *".  */
12823
  if (TREE_CODE (expr) == STRING_CST)
12824
    return expr;
12825
  /* Preserve arithmetic constants, as an optimization -- there is no
12826
     reason to create a new node.  */
12827
  if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
12828
    return expr;
12829
  /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
12830
     There is at least one place where we want to know that a
12831
     particular expression is a throw-expression: when checking a ?:
12832
     expression, there are special rules if the second or third
12833
     argument is a throw-expression.  */
12834
  if (TREE_CODE (expr) == THROW_EXPR)
12835
    return expr;
12836
 
12837
  if (TREE_CODE (expr) == COND_EXPR)
12838
    return build3 (COND_EXPR,
12839
                   TREE_TYPE (expr),
12840
                   TREE_OPERAND (expr, 0),
12841
                   (TREE_OPERAND (expr, 1)
12842
                    ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
12843
                    : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
12844
                   build_non_dependent_expr (TREE_OPERAND (expr, 2)));
12845
  if (TREE_CODE (expr) == COMPOUND_EXPR
12846
      && !COMPOUND_EXPR_OVERLOADED (expr))
12847
    return build2 (COMPOUND_EXPR,
12848
                   TREE_TYPE (expr),
12849
                   TREE_OPERAND (expr, 0),
12850
                   build_non_dependent_expr (TREE_OPERAND (expr, 1)));
12851
 
12852
  /* If the type is unknown, it can't really be non-dependent */
12853
  gcc_assert (TREE_TYPE (expr) != unknown_type_node);
12854
 
12855
  /* Otherwise, build a NON_DEPENDENT_EXPR.
12856
 
12857
     REFERENCE_TYPEs are not stripped for expressions in templates
12858
     because doing so would play havoc with mangling.  Consider, for
12859
     example:
12860
 
12861
       template <typename T> void f<T& g>() { g(); }
12862
 
12863
     In the body of "f", the expression for "g" will have
12864
     REFERENCE_TYPE, even though the standard says that it should
12865
     not.  The reason is that we must preserve the syntactic form of
12866
     the expression so that mangling (say) "f<g>" inside the body of
12867
     "f" works out correctly.  Therefore, the REFERENCE_TYPE is
12868
     stripped here.  */
12869
  return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
12870
}
12871
 
12872
/* ARGS is a TREE_LIST of expressions as arguments to a function call.
12873
   Return a new TREE_LIST with the various arguments replaced with
12874
   equivalent non-dependent expressions.  */
12875
 
12876
tree
12877
build_non_dependent_args (tree args)
12878
{
12879
  tree a;
12880
  tree new_args;
12881
 
12882
  new_args = NULL_TREE;
12883
  for (a = args; a; a = TREE_CHAIN (a))
12884
    new_args = tree_cons (NULL_TREE,
12885
                          build_non_dependent_expr (TREE_VALUE (a)),
12886
                          new_args);
12887
  return nreverse (new_args);
12888
}
12889
 
12890
#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.