Decl.cpp revision d330e23f183cedb9e6c1cbb809407576f7bbab71
1//===--- Decl.cpp - Declaration AST Node Implementation -------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file implements the Decl subclasses.
11//
12//===----------------------------------------------------------------------===//
13
14#include "clang/AST/Decl.h"
15#include "clang/AST/DeclCXX.h"
16#include "clang/AST/DeclObjC.h"
17#include "clang/AST/DeclTemplate.h"
18#include "clang/AST/ASTContext.h"
19#include "clang/AST/TypeLoc.h"
20#include "clang/AST/Stmt.h"
21#include "clang/AST/Expr.h"
22#include "clang/AST/ExprCXX.h"
23#include "clang/AST/PrettyPrinter.h"
24#include "clang/AST/ASTMutationListener.h"
25#include "clang/Basic/Builtins.h"
26#include "clang/Basic/IdentifierTable.h"
27#include "clang/Basic/Specifiers.h"
28#include "clang/Basic/TargetInfo.h"
29#include "llvm/Support/ErrorHandling.h"
30
31using namespace clang;
32
33//===----------------------------------------------------------------------===//
34// NamedDecl Implementation
35//===----------------------------------------------------------------------===//
36
37static llvm::Optional<Visibility> getVisibilityOf(const Decl *D) {
38  // If this declaration has an explicit visibility attribute, use it.
39  if (const VisibilityAttr *A = D->getAttr<VisibilityAttr>()) {
40    switch (A->getVisibility()) {
41    case VisibilityAttr::Default:
42      return DefaultVisibility;
43    case VisibilityAttr::Hidden:
44      return HiddenVisibility;
45    case VisibilityAttr::Protected:
46      return ProtectedVisibility;
47    }
48
49    return DefaultVisibility;
50  }
51
52  // If we're on Mac OS X, an 'availability' for Mac OS X attribute
53  // implies visibility(default).
54  if (D->getASTContext().Target.getTriple().isOSDarwin()) {
55    for (specific_attr_iterator<AvailabilityAttr>
56              A = D->specific_attr_begin<AvailabilityAttr>(),
57           AEnd = D->specific_attr_end<AvailabilityAttr>();
58         A != AEnd; ++A)
59      if ((*A)->getPlatform()->getName().equals("macosx"))
60        return DefaultVisibility;
61  }
62
63  return llvm::Optional<Visibility>();
64}
65
66typedef NamedDecl::LinkageInfo LinkageInfo;
67typedef std::pair<Linkage,Visibility> LVPair;
68
69static LVPair merge(LVPair L, LVPair R) {
70  return LVPair(minLinkage(L.first, R.first),
71                minVisibility(L.second, R.second));
72}
73
74static LVPair merge(LVPair L, LinkageInfo R) {
75  return LVPair(minLinkage(L.first, R.linkage()),
76                minVisibility(L.second, R.visibility()));
77}
78
79namespace {
80/// Flags controlling the computation of linkage and visibility.
81struct LVFlags {
82  bool ConsiderGlobalVisibility;
83  bool ConsiderVisibilityAttributes;
84  bool ConsiderTemplateParameterTypes;
85
86  LVFlags() : ConsiderGlobalVisibility(true),
87              ConsiderVisibilityAttributes(true),
88              ConsiderTemplateParameterTypes(true) {
89  }
90
91  /// \brief Returns a set of flags that is only useful for computing the
92  /// linkage, not the visibility, of a declaration.
93  static LVFlags CreateOnlyDeclLinkage() {
94    LVFlags F;
95    F.ConsiderGlobalVisibility = false;
96    F.ConsiderVisibilityAttributes = false;
97    F.ConsiderTemplateParameterTypes = false;
98    return F;
99  }
100
101  /// Returns a set of flags, otherwise based on these, which ignores
102  /// off all sources of visibility except template arguments.
103  LVFlags onlyTemplateVisibility() const {
104    LVFlags F = *this;
105    F.ConsiderGlobalVisibility = false;
106    F.ConsiderVisibilityAttributes = false;
107    F.ConsiderTemplateParameterTypes = false;
108    return F;
109  }
110};
111} // end anonymous namespace
112
113/// \brief Get the most restrictive linkage for the types in the given
114/// template parameter list.
115static LVPair
116getLVForTemplateParameterList(const TemplateParameterList *Params) {
117  LVPair LV(ExternalLinkage, DefaultVisibility);
118  for (TemplateParameterList::const_iterator P = Params->begin(),
119                                          PEnd = Params->end();
120       P != PEnd; ++P) {
121    if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(*P)) {
122      if (NTTP->isExpandedParameterPack()) {
123        for (unsigned I = 0, N = NTTP->getNumExpansionTypes(); I != N; ++I) {
124          QualType T = NTTP->getExpansionType(I);
125          if (!T->isDependentType())
126            LV = merge(LV, T->getLinkageAndVisibility());
127        }
128        continue;
129      }
130
131      if (!NTTP->getType()->isDependentType()) {
132        LV = merge(LV, NTTP->getType()->getLinkageAndVisibility());
133        continue;
134      }
135    }
136
137    if (TemplateTemplateParmDecl *TTP
138                                   = dyn_cast<TemplateTemplateParmDecl>(*P)) {
139      LV = merge(LV, getLVForTemplateParameterList(TTP->getTemplateParameters()));
140    }
141  }
142
143  return LV;
144}
145
146/// getLVForDecl - Get the linkage and visibility for the given declaration.
147static LinkageInfo getLVForDecl(const NamedDecl *D, LVFlags F);
148
149/// \brief Get the most restrictive linkage for the types and
150/// declarations in the given template argument list.
151static LVPair getLVForTemplateArgumentList(const TemplateArgument *Args,
152                                           unsigned NumArgs,
153                                           LVFlags &F) {
154  LVPair LV(ExternalLinkage, DefaultVisibility);
155
156  for (unsigned I = 0; I != NumArgs; ++I) {
157    switch (Args[I].getKind()) {
158    case TemplateArgument::Null:
159    case TemplateArgument::Integral:
160    case TemplateArgument::Expression:
161      break;
162
163    case TemplateArgument::Type:
164      LV = merge(LV, Args[I].getAsType()->getLinkageAndVisibility());
165      break;
166
167    case TemplateArgument::Declaration:
168      // The decl can validly be null as the representation of nullptr
169      // arguments, valid only in C++0x.
170      if (Decl *D = Args[I].getAsDecl()) {
171        if (NamedDecl *ND = dyn_cast<NamedDecl>(D))
172          LV = merge(LV, getLVForDecl(ND, F));
173      }
174      break;
175
176    case TemplateArgument::Template:
177    case TemplateArgument::TemplateExpansion:
178      if (TemplateDecl *Template
179                = Args[I].getAsTemplateOrTemplatePattern().getAsTemplateDecl())
180        LV = merge(LV, getLVForDecl(Template, F));
181      break;
182
183    case TemplateArgument::Pack:
184      LV = merge(LV, getLVForTemplateArgumentList(Args[I].pack_begin(),
185                                                  Args[I].pack_size(),
186                                                  F));
187      break;
188    }
189  }
190
191  return LV;
192}
193
194static LVPair
195getLVForTemplateArgumentList(const TemplateArgumentList &TArgs,
196                             LVFlags &F) {
197  return getLVForTemplateArgumentList(TArgs.data(), TArgs.size(), F);
198}
199
200static bool shouldConsiderTemplateLV(const FunctionDecl *fn,
201                               const FunctionTemplateSpecializationInfo *spec) {
202  return !(spec->isExplicitSpecialization() &&
203           fn->hasAttr<VisibilityAttr>());
204}
205
206static bool shouldConsiderTemplateLV(const ClassTemplateSpecializationDecl *d) {
207  return !(d->isExplicitSpecialization() && d->hasAttr<VisibilityAttr>());
208}
209
210static LinkageInfo getLVForNamespaceScopeDecl(const NamedDecl *D, LVFlags F) {
211  assert(D->getDeclContext()->getRedeclContext()->isFileContext() &&
212         "Not a name having namespace scope");
213  ASTContext &Context = D->getASTContext();
214
215  // C++ [basic.link]p3:
216  //   A name having namespace scope (3.3.6) has internal linkage if it
217  //   is the name of
218  //     - an object, reference, function or function template that is
219  //       explicitly declared static; or,
220  // (This bullet corresponds to C99 6.2.2p3.)
221  if (const VarDecl *Var = dyn_cast<VarDecl>(D)) {
222    // Explicitly declared static.
223    if (Var->getStorageClass() == SC_Static)
224      return LinkageInfo::internal();
225
226    // - an object or reference that is explicitly declared const
227    //   and neither explicitly declared extern nor previously
228    //   declared to have external linkage; or
229    // (there is no equivalent in C99)
230    if (Context.getLangOptions().CPlusPlus &&
231        Var->getType().isConstant(Context) &&
232        Var->getStorageClass() != SC_Extern &&
233        Var->getStorageClass() != SC_PrivateExtern) {
234      bool FoundExtern = false;
235      for (const VarDecl *PrevVar = Var->getPreviousDeclaration();
236           PrevVar && !FoundExtern;
237           PrevVar = PrevVar->getPreviousDeclaration())
238        if (isExternalLinkage(PrevVar->getLinkage()))
239          FoundExtern = true;
240
241      if (!FoundExtern)
242        return LinkageInfo::internal();
243    }
244    if (Var->getStorageClass() == SC_None) {
245      const VarDecl *PrevVar = Var->getPreviousDeclaration();
246      for (; PrevVar; PrevVar = PrevVar->getPreviousDeclaration())
247        if (PrevVar->getStorageClass() == SC_PrivateExtern)
248          break;
249        if (PrevVar)
250          return PrevVar->getLinkageAndVisibility();
251    }
252  } else if (isa<FunctionDecl>(D) || isa<FunctionTemplateDecl>(D)) {
253    // C++ [temp]p4:
254    //   A non-member function template can have internal linkage; any
255    //   other template name shall have external linkage.
256    const FunctionDecl *Function = 0;
257    if (const FunctionTemplateDecl *FunTmpl
258                                        = dyn_cast<FunctionTemplateDecl>(D))
259      Function = FunTmpl->getTemplatedDecl();
260    else
261      Function = cast<FunctionDecl>(D);
262
263    // Explicitly declared static.
264    if (Function->getStorageClass() == SC_Static)
265      return LinkageInfo(InternalLinkage, DefaultVisibility, false);
266  } else if (const FieldDecl *Field = dyn_cast<FieldDecl>(D)) {
267    //   - a data member of an anonymous union.
268    if (cast<RecordDecl>(Field->getDeclContext())->isAnonymousStructOrUnion())
269      return LinkageInfo::internal();
270  }
271
272  if (D->isInAnonymousNamespace()) {
273    const VarDecl *Var = dyn_cast<VarDecl>(D);
274    const FunctionDecl *Func = dyn_cast<FunctionDecl>(D);
275    if ((!Var || !Var->isExternC()) && (!Func || !Func->isExternC()))
276      return LinkageInfo::uniqueExternal();
277  }
278
279  // Set up the defaults.
280
281  // C99 6.2.2p5:
282  //   If the declaration of an identifier for an object has file
283  //   scope and no storage-class specifier, its linkage is
284  //   external.
285  LinkageInfo LV;
286
287  if (F.ConsiderVisibilityAttributes) {
288    if (llvm::Optional<Visibility> Vis = D->getExplicitVisibility()) {
289      LV.setVisibility(*Vis, true);
290      F.ConsiderGlobalVisibility = false;
291    } else {
292      // If we're declared in a namespace with a visibility attribute,
293      // use that namespace's visibility, but don't call it explicit.
294      for (const DeclContext *DC = D->getDeclContext();
295           !isa<TranslationUnitDecl>(DC);
296           DC = DC->getParent()) {
297        if (!isa<NamespaceDecl>(DC)) continue;
298        if (llvm::Optional<Visibility> Vis
299                           = cast<NamespaceDecl>(DC)->getExplicitVisibility()) {
300          LV.setVisibility(*Vis, false);
301          F.ConsiderGlobalVisibility = false;
302          break;
303        }
304      }
305    }
306  }
307
308  // C++ [basic.link]p4:
309
310  //   A name having namespace scope has external linkage if it is the
311  //   name of
312  //
313  //     - an object or reference, unless it has internal linkage; or
314  if (const VarDecl *Var = dyn_cast<VarDecl>(D)) {
315    // GCC applies the following optimization to variables and static
316    // data members, but not to functions:
317    //
318    // Modify the variable's LV by the LV of its type unless this is
319    // C or extern "C".  This follows from [basic.link]p9:
320    //   A type without linkage shall not be used as the type of a
321    //   variable or function with external linkage unless
322    //    - the entity has C language linkage, or
323    //    - the entity is declared within an unnamed namespace, or
324    //    - the entity is not used or is defined in the same
325    //      translation unit.
326    // and [basic.link]p10:
327    //   ...the types specified by all declarations referring to a
328    //   given variable or function shall be identical...
329    // C does not have an equivalent rule.
330    //
331    // Ignore this if we've got an explicit attribute;  the user
332    // probably knows what they're doing.
333    //
334    // Note that we don't want to make the variable non-external
335    // because of this, but unique-external linkage suits us.
336    if (Context.getLangOptions().CPlusPlus && !Var->isExternC()) {
337      LVPair TypeLV = Var->getType()->getLinkageAndVisibility();
338      if (TypeLV.first != ExternalLinkage)
339        return LinkageInfo::uniqueExternal();
340      if (!LV.visibilityExplicit())
341        LV.mergeVisibility(TypeLV.second);
342    }
343
344    if (Var->getStorageClass() == SC_PrivateExtern)
345      LV.setVisibility(HiddenVisibility, true);
346
347    if (!Context.getLangOptions().CPlusPlus &&
348        (Var->getStorageClass() == SC_Extern ||
349         Var->getStorageClass() == SC_PrivateExtern)) {
350
351      // C99 6.2.2p4:
352      //   For an identifier declared with the storage-class specifier
353      //   extern in a scope in which a prior declaration of that
354      //   identifier is visible, if the prior declaration specifies
355      //   internal or external linkage, the linkage of the identifier
356      //   at the later declaration is the same as the linkage
357      //   specified at the prior declaration. If no prior declaration
358      //   is visible, or if the prior declaration specifies no
359      //   linkage, then the identifier has external linkage.
360      if (const VarDecl *PrevVar = Var->getPreviousDeclaration()) {
361        LinkageInfo PrevLV = getLVForDecl(PrevVar, F);
362        if (PrevLV.linkage()) LV.setLinkage(PrevLV.linkage());
363        LV.mergeVisibility(PrevLV);
364      }
365    }
366
367  //     - a function, unless it has internal linkage; or
368  } else if (const FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {
369    // In theory, we can modify the function's LV by the LV of its
370    // type unless it has C linkage (see comment above about variables
371    // for justification).  In practice, GCC doesn't do this, so it's
372    // just too painful to make work.
373
374    if (Function->getStorageClass() == SC_PrivateExtern)
375      LV.setVisibility(HiddenVisibility, true);
376
377    // C99 6.2.2p5:
378    //   If the declaration of an identifier for a function has no
379    //   storage-class specifier, its linkage is determined exactly
380    //   as if it were declared with the storage-class specifier
381    //   extern.
382    if (!Context.getLangOptions().CPlusPlus &&
383        (Function->getStorageClass() == SC_Extern ||
384         Function->getStorageClass() == SC_PrivateExtern ||
385         Function->getStorageClass() == SC_None)) {
386      // C99 6.2.2p4:
387      //   For an identifier declared with the storage-class specifier
388      //   extern in a scope in which a prior declaration of that
389      //   identifier is visible, if the prior declaration specifies
390      //   internal or external linkage, the linkage of the identifier
391      //   at the later declaration is the same as the linkage
392      //   specified at the prior declaration. If no prior declaration
393      //   is visible, or if the prior declaration specifies no
394      //   linkage, then the identifier has external linkage.
395      if (const FunctionDecl *PrevFunc = Function->getPreviousDeclaration()) {
396        LinkageInfo PrevLV = getLVForDecl(PrevFunc, F);
397        if (PrevLV.linkage()) LV.setLinkage(PrevLV.linkage());
398        LV.mergeVisibility(PrevLV);
399      }
400    }
401
402    // In C++, then if the type of the function uses a type with
403    // unique-external linkage, it's not legally usable from outside
404    // this translation unit.  However, we should use the C linkage
405    // rules instead for extern "C" declarations.
406    if (Context.getLangOptions().CPlusPlus && !Function->isExternC() &&
407        Function->getType()->getLinkage() == UniqueExternalLinkage)
408      return LinkageInfo::uniqueExternal();
409
410    // Consider LV from the template and the template arguments unless
411    // this is an explicit specialization with a visibility attribute.
412    if (FunctionTemplateSpecializationInfo *specInfo
413                               = Function->getTemplateSpecializationInfo()) {
414      if (shouldConsiderTemplateLV(Function, specInfo)) {
415        LV.merge(getLVForDecl(specInfo->getTemplate(),
416                              F.onlyTemplateVisibility()));
417        const TemplateArgumentList &templateArgs = *specInfo->TemplateArguments;
418        LV.merge(getLVForTemplateArgumentList(templateArgs, F));
419      }
420    }
421
422  //     - a named class (Clause 9), or an unnamed class defined in a
423  //       typedef declaration in which the class has the typedef name
424  //       for linkage purposes (7.1.3); or
425  //     - a named enumeration (7.2), or an unnamed enumeration
426  //       defined in a typedef declaration in which the enumeration
427  //       has the typedef name for linkage purposes (7.1.3); or
428  } else if (const TagDecl *Tag = dyn_cast<TagDecl>(D)) {
429    // Unnamed tags have no linkage.
430    if (!Tag->getDeclName() && !Tag->getTypedefNameForAnonDecl())
431      return LinkageInfo::none();
432
433    // If this is a class template specialization, consider the
434    // linkage of the template and template arguments.
435    if (const ClassTemplateSpecializationDecl *spec
436          = dyn_cast<ClassTemplateSpecializationDecl>(Tag)) {
437      if (shouldConsiderTemplateLV(spec)) {
438        // From the template.
439        LV.merge(getLVForDecl(spec->getSpecializedTemplate(),
440                              F.onlyTemplateVisibility()));
441
442        // The arguments at which the template was instantiated.
443        const TemplateArgumentList &TemplateArgs = spec->getTemplateArgs();
444        LV.merge(getLVForTemplateArgumentList(TemplateArgs, F));
445      }
446    }
447
448    // Consider -fvisibility unless the type has C linkage.
449    if (F.ConsiderGlobalVisibility)
450      F.ConsiderGlobalVisibility =
451        (Context.getLangOptions().CPlusPlus &&
452         !Tag->getDeclContext()->isExternCContext());
453
454  //     - an enumerator belonging to an enumeration with external linkage;
455  } else if (isa<EnumConstantDecl>(D)) {
456    LinkageInfo EnumLV = getLVForDecl(cast<NamedDecl>(D->getDeclContext()), F);
457    if (!isExternalLinkage(EnumLV.linkage()))
458      return LinkageInfo::none();
459    LV.merge(EnumLV);
460
461  //     - a template, unless it is a function template that has
462  //       internal linkage (Clause 14);
463  } else if (const TemplateDecl *temp = dyn_cast<TemplateDecl>(D)) {
464    if (F.ConsiderTemplateParameterTypes)
465      LV.merge(getLVForTemplateParameterList(temp->getTemplateParameters()));
466
467  //     - a namespace (7.3), unless it is declared within an unnamed
468  //       namespace.
469  } else if (isa<NamespaceDecl>(D) && !D->isInAnonymousNamespace()) {
470    return LV;
471
472  // By extension, we assign external linkage to Objective-C
473  // interfaces.
474  } else if (isa<ObjCInterfaceDecl>(D)) {
475    // fallout
476
477  // Everything not covered here has no linkage.
478  } else {
479    return LinkageInfo::none();
480  }
481
482  // If we ended up with non-external linkage, visibility should
483  // always be default.
484  if (LV.linkage() != ExternalLinkage)
485    return LinkageInfo(LV.linkage(), DefaultVisibility, false);
486
487  // If we didn't end up with hidden visibility, consider attributes
488  // and -fvisibility.
489  if (F.ConsiderGlobalVisibility)
490    LV.mergeVisibility(Context.getLangOptions().getVisibilityMode());
491
492  return LV;
493}
494
495static LinkageInfo getLVForClassMember(const NamedDecl *D, LVFlags F) {
496  // Only certain class members have linkage.  Note that fields don't
497  // really have linkage, but it's convenient to say they do for the
498  // purposes of calculating linkage of pointer-to-data-member
499  // template arguments.
500  if (!(isa<CXXMethodDecl>(D) ||
501        isa<VarDecl>(D) ||
502        isa<FieldDecl>(D) ||
503        (isa<TagDecl>(D) &&
504         (D->getDeclName() || cast<TagDecl>(D)->getTypedefNameForAnonDecl()))))
505    return LinkageInfo::none();
506
507  LinkageInfo LV;
508
509  // The flags we're going to use to compute the class's visibility.
510  LVFlags ClassF = F;
511
512  // If we have an explicit visibility attribute, merge that in.
513  if (F.ConsiderVisibilityAttributes) {
514    if (llvm::Optional<Visibility> Vis = D->getExplicitVisibility()) {
515      LV.mergeVisibility(*Vis, true);
516
517      // Ignore global visibility later, but not this attribute.
518      F.ConsiderGlobalVisibility = false;
519
520      // Ignore both global visibility and attributes when computing our
521      // parent's visibility.
522      ClassF = F.onlyTemplateVisibility();
523    }
524  }
525
526  // Class members only have linkage if their class has external
527  // linkage.
528  LV.merge(getLVForDecl(cast<RecordDecl>(D->getDeclContext()), ClassF));
529  if (!isExternalLinkage(LV.linkage()))
530    return LinkageInfo::none();
531
532  // If the class already has unique-external linkage, we can't improve.
533  if (LV.linkage() == UniqueExternalLinkage)
534    return LinkageInfo::uniqueExternal();
535
536  if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D)) {
537    // If the type of the function uses a type with unique-external
538    // linkage, it's not legally usable from outside this translation unit.
539    if (MD->getType()->getLinkage() == UniqueExternalLinkage)
540      return LinkageInfo::uniqueExternal();
541
542    TemplateSpecializationKind TSK = TSK_Undeclared;
543
544    // If this is a method template specialization, use the linkage for
545    // the template parameters and arguments.
546    if (FunctionTemplateSpecializationInfo *spec
547           = MD->getTemplateSpecializationInfo()) {
548      if (shouldConsiderTemplateLV(MD, spec)) {
549        LV.merge(getLVForTemplateArgumentList(*spec->TemplateArguments, F));
550        if (F.ConsiderTemplateParameterTypes)
551          LV.merge(getLVForTemplateParameterList(
552                              spec->getTemplate()->getTemplateParameters()));
553      }
554
555      TSK = spec->getTemplateSpecializationKind();
556    } else if (MemberSpecializationInfo *MSI =
557                 MD->getMemberSpecializationInfo()) {
558      TSK = MSI->getTemplateSpecializationKind();
559    }
560
561    // If we're paying attention to global visibility, apply
562    // -finline-visibility-hidden if this is an inline method.
563    //
564    // Note that ConsiderGlobalVisibility doesn't yet have information
565    // about whether containing classes have visibility attributes,
566    // and that's intentional.
567    if (TSK != TSK_ExplicitInstantiationDeclaration &&
568        F.ConsiderGlobalVisibility &&
569        MD->getASTContext().getLangOptions().InlineVisibilityHidden) {
570      // InlineVisibilityHidden only applies to definitions, and
571      // isInlined() only gives meaningful answers on definitions
572      // anyway.
573      const FunctionDecl *Def = 0;
574      if (MD->hasBody(Def) && Def->isInlined())
575        LV.setVisibility(HiddenVisibility);
576    }
577
578    // Note that in contrast to basically every other situation, we
579    // *do* apply -fvisibility to method declarations.
580
581  } else if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(D)) {
582    if (const ClassTemplateSpecializationDecl *spec
583        = dyn_cast<ClassTemplateSpecializationDecl>(RD)) {
584      if (shouldConsiderTemplateLV(spec)) {
585        // Merge template argument/parameter information for member
586        // class template specializations.
587        LV.merge(getLVForTemplateArgumentList(spec->getTemplateArgs(), F));
588      if (F.ConsiderTemplateParameterTypes)
589        LV.merge(getLVForTemplateParameterList(
590                    spec->getSpecializedTemplate()->getTemplateParameters()));
591      }
592    }
593
594  // Static data members.
595  } else if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
596    // Modify the variable's linkage by its type, but ignore the
597    // type's visibility unless it's a definition.
598    LVPair TypeLV = VD->getType()->getLinkageAndVisibility();
599    if (TypeLV.first != ExternalLinkage)
600      LV.mergeLinkage(UniqueExternalLinkage);
601    if (!LV.visibilityExplicit())
602      LV.mergeVisibility(TypeLV.second);
603  }
604
605  F.ConsiderGlobalVisibility &= !LV.visibilityExplicit();
606
607  // Apply -fvisibility if desired.
608  if (F.ConsiderGlobalVisibility && LV.visibility() != HiddenVisibility) {
609    LV.mergeVisibility(D->getASTContext().getLangOptions().getVisibilityMode());
610  }
611
612  return LV;
613}
614
615static void clearLinkageForClass(const CXXRecordDecl *record) {
616  for (CXXRecordDecl::decl_iterator
617         i = record->decls_begin(), e = record->decls_end(); i != e; ++i) {
618    Decl *child = *i;
619    if (isa<NamedDecl>(child))
620      cast<NamedDecl>(child)->ClearLinkageCache();
621  }
622}
623
624void NamedDecl::ClearLinkageCache() {
625  // Note that we can't skip clearing the linkage of children just
626  // because the parent doesn't have cached linkage:  we don't cache
627  // when computing linkage for parent contexts.
628
629  HasCachedLinkage = 0;
630
631  // If we're changing the linkage of a class, we need to reset the
632  // linkage of child declarations, too.
633  if (const CXXRecordDecl *record = dyn_cast<CXXRecordDecl>(this))
634    clearLinkageForClass(record);
635
636  if (ClassTemplateDecl *temp =
637        dyn_cast<ClassTemplateDecl>(const_cast<NamedDecl*>(this))) {
638    // Clear linkage for the template pattern.
639    CXXRecordDecl *record = temp->getTemplatedDecl();
640    record->HasCachedLinkage = 0;
641    clearLinkageForClass(record);
642
643    // We need to clear linkage for specializations, too.
644    for (ClassTemplateDecl::spec_iterator
645           i = temp->spec_begin(), e = temp->spec_end(); i != e; ++i)
646      i->ClearLinkageCache();
647  }
648
649  // Clear cached linkage for function template decls, too.
650  if (FunctionTemplateDecl *temp =
651        dyn_cast<FunctionTemplateDecl>(const_cast<NamedDecl*>(this))) {
652    temp->getTemplatedDecl()->ClearLinkageCache();
653    for (FunctionTemplateDecl::spec_iterator
654           i = temp->spec_begin(), e = temp->spec_end(); i != e; ++i)
655      i->ClearLinkageCache();
656  }
657
658}
659
660Linkage NamedDecl::getLinkage() const {
661  if (HasCachedLinkage) {
662    assert(Linkage(CachedLinkage) ==
663             getLVForDecl(this, LVFlags::CreateOnlyDeclLinkage()).linkage());
664    return Linkage(CachedLinkage);
665  }
666
667  CachedLinkage = getLVForDecl(this,
668                               LVFlags::CreateOnlyDeclLinkage()).linkage();
669  HasCachedLinkage = 1;
670  return Linkage(CachedLinkage);
671}
672
673LinkageInfo NamedDecl::getLinkageAndVisibility() const {
674  LinkageInfo LI = getLVForDecl(this, LVFlags());
675  assert(!HasCachedLinkage || Linkage(CachedLinkage) == LI.linkage());
676  HasCachedLinkage = 1;
677  CachedLinkage = LI.linkage();
678  return LI;
679}
680
681llvm::Optional<Visibility> NamedDecl::getExplicitVisibility() const {
682  // Use the most recent declaration of a variable.
683  if (const VarDecl *var = dyn_cast<VarDecl>(this))
684    return getVisibilityOf(var->getMostRecentDeclaration());
685
686  // Use the most recent declaration of a function, and also handle
687  // function template specializations.
688  if (const FunctionDecl *fn = dyn_cast<FunctionDecl>(this)) {
689    if (llvm::Optional<Visibility> V
690                            = getVisibilityOf(fn->getMostRecentDeclaration()))
691      return V;
692
693    // If the function is a specialization of a template with an
694    // explicit visibility attribute, use that.
695    if (FunctionTemplateSpecializationInfo *templateInfo
696          = fn->getTemplateSpecializationInfo())
697      return getVisibilityOf(templateInfo->getTemplate()->getTemplatedDecl());
698
699    return llvm::Optional<Visibility>();
700  }
701
702  // Otherwise, just check the declaration itself first.
703  if (llvm::Optional<Visibility> V = getVisibilityOf(this))
704    return V;
705
706  // If there wasn't explicit visibility there, and this is a
707  // specialization of a class template, check for visibility
708  // on the pattern.
709  if (const ClassTemplateSpecializationDecl *spec
710        = dyn_cast<ClassTemplateSpecializationDecl>(this))
711    return getVisibilityOf(spec->getSpecializedTemplate()->getTemplatedDecl());
712
713  return llvm::Optional<Visibility>();
714}
715
716static LinkageInfo getLVForDecl(const NamedDecl *D, LVFlags Flags) {
717  // Objective-C: treat all Objective-C declarations as having external
718  // linkage.
719  switch (D->getKind()) {
720    default:
721      break;
722    case Decl::TemplateTemplateParm: // count these as external
723    case Decl::NonTypeTemplateParm:
724    case Decl::ObjCAtDefsField:
725    case Decl::ObjCCategory:
726    case Decl::ObjCCategoryImpl:
727    case Decl::ObjCCompatibleAlias:
728    case Decl::ObjCForwardProtocol:
729    case Decl::ObjCImplementation:
730    case Decl::ObjCMethod:
731    case Decl::ObjCProperty:
732    case Decl::ObjCPropertyImpl:
733    case Decl::ObjCProtocol:
734      return LinkageInfo::external();
735  }
736
737  // Handle linkage for namespace-scope names.
738  if (D->getDeclContext()->getRedeclContext()->isFileContext())
739    return getLVForNamespaceScopeDecl(D, Flags);
740
741  // C++ [basic.link]p5:
742  //   In addition, a member function, static data member, a named
743  //   class or enumeration of class scope, or an unnamed class or
744  //   enumeration defined in a class-scope typedef declaration such
745  //   that the class or enumeration has the typedef name for linkage
746  //   purposes (7.1.3), has external linkage if the name of the class
747  //   has external linkage.
748  if (D->getDeclContext()->isRecord())
749    return getLVForClassMember(D, Flags);
750
751  // C++ [basic.link]p6:
752  //   The name of a function declared in block scope and the name of
753  //   an object declared by a block scope extern declaration have
754  //   linkage. If there is a visible declaration of an entity with
755  //   linkage having the same name and type, ignoring entities
756  //   declared outside the innermost enclosing namespace scope, the
757  //   block scope declaration declares that same entity and receives
758  //   the linkage of the previous declaration. If there is more than
759  //   one such matching entity, the program is ill-formed. Otherwise,
760  //   if no matching entity is found, the block scope entity receives
761  //   external linkage.
762  if (D->getLexicalDeclContext()->isFunctionOrMethod()) {
763    if (const FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {
764      if (Function->isInAnonymousNamespace() && !Function->isExternC())
765        return LinkageInfo::uniqueExternal();
766
767      LinkageInfo LV;
768      if (Flags.ConsiderVisibilityAttributes) {
769        if (llvm::Optional<Visibility> Vis = Function->getExplicitVisibility())
770          LV.setVisibility(*Vis);
771      }
772
773      if (const FunctionDecl *Prev = Function->getPreviousDeclaration()) {
774        LinkageInfo PrevLV = getLVForDecl(Prev, Flags);
775        if (PrevLV.linkage()) LV.setLinkage(PrevLV.linkage());
776        LV.mergeVisibility(PrevLV);
777      }
778
779      return LV;
780    }
781
782    if (const VarDecl *Var = dyn_cast<VarDecl>(D))
783      if (Var->getStorageClass() == SC_Extern ||
784          Var->getStorageClass() == SC_PrivateExtern) {
785        if (Var->isInAnonymousNamespace() && !Var->isExternC())
786          return LinkageInfo::uniqueExternal();
787
788        LinkageInfo LV;
789        if (Var->getStorageClass() == SC_PrivateExtern)
790          LV.setVisibility(HiddenVisibility);
791        else if (Flags.ConsiderVisibilityAttributes) {
792          if (llvm::Optional<Visibility> Vis = Var->getExplicitVisibility())
793            LV.setVisibility(*Vis);
794        }
795
796        if (const VarDecl *Prev = Var->getPreviousDeclaration()) {
797          LinkageInfo PrevLV = getLVForDecl(Prev, Flags);
798          if (PrevLV.linkage()) LV.setLinkage(PrevLV.linkage());
799          LV.mergeVisibility(PrevLV);
800        }
801
802        return LV;
803      }
804  }
805
806  // C++ [basic.link]p6:
807  //   Names not covered by these rules have no linkage.
808  return LinkageInfo::none();
809}
810
811std::string NamedDecl::getQualifiedNameAsString() const {
812  return getQualifiedNameAsString(getASTContext().getLangOptions());
813}
814
815std::string NamedDecl::getQualifiedNameAsString(const PrintingPolicy &P) const {
816  const DeclContext *Ctx = getDeclContext();
817
818  if (Ctx->isFunctionOrMethod())
819    return getNameAsString();
820
821  typedef SmallVector<const DeclContext *, 8> ContextsTy;
822  ContextsTy Contexts;
823
824  // Collect contexts.
825  while (Ctx && isa<NamedDecl>(Ctx)) {
826    Contexts.push_back(Ctx);
827    Ctx = Ctx->getParent();
828  };
829
830  std::string QualName;
831  llvm::raw_string_ostream OS(QualName);
832
833  for (ContextsTy::reverse_iterator I = Contexts.rbegin(), E = Contexts.rend();
834       I != E; ++I) {
835    if (const ClassTemplateSpecializationDecl *Spec
836          = dyn_cast<ClassTemplateSpecializationDecl>(*I)) {
837      const TemplateArgumentList &TemplateArgs = Spec->getTemplateArgs();
838      std::string TemplateArgsStr
839        = TemplateSpecializationType::PrintTemplateArgumentList(
840                                           TemplateArgs.data(),
841                                           TemplateArgs.size(),
842                                           P);
843      OS << Spec->getName() << TemplateArgsStr;
844    } else if (const NamespaceDecl *ND = dyn_cast<NamespaceDecl>(*I)) {
845      if (ND->isAnonymousNamespace())
846        OS << "<anonymous namespace>";
847      else
848        OS << ND;
849    } else if (const RecordDecl *RD = dyn_cast<RecordDecl>(*I)) {
850      if (!RD->getIdentifier())
851        OS << "<anonymous " << RD->getKindName() << '>';
852      else
853        OS << RD;
854    } else if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
855      const FunctionProtoType *FT = 0;
856      if (FD->hasWrittenPrototype())
857        FT = dyn_cast<FunctionProtoType>(FD->getType()->getAs<FunctionType>());
858
859      OS << FD << '(';
860      if (FT) {
861        unsigned NumParams = FD->getNumParams();
862        for (unsigned i = 0; i < NumParams; ++i) {
863          if (i)
864            OS << ", ";
865          std::string Param;
866          FD->getParamDecl(i)->getType().getAsStringInternal(Param, P);
867          OS << Param;
868        }
869
870        if (FT->isVariadic()) {
871          if (NumParams > 0)
872            OS << ", ";
873          OS << "...";
874        }
875      }
876      OS << ')';
877    } else {
878      OS << cast<NamedDecl>(*I);
879    }
880    OS << "::";
881  }
882
883  if (getDeclName())
884    OS << this;
885  else
886    OS << "<anonymous>";
887
888  return OS.str();
889}
890
891bool NamedDecl::declarationReplaces(NamedDecl *OldD) const {
892  assert(getDeclName() == OldD->getDeclName() && "Declaration name mismatch");
893
894  // UsingDirectiveDecl's are not really NamedDecl's, and all have same name.
895  // We want to keep it, unless it nominates same namespace.
896  if (getKind() == Decl::UsingDirective) {
897    return cast<UsingDirectiveDecl>(this)->getNominatedNamespace()
898             ->getOriginalNamespace() ==
899           cast<UsingDirectiveDecl>(OldD)->getNominatedNamespace()
900             ->getOriginalNamespace();
901  }
902
903  if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(this))
904    // For function declarations, we keep track of redeclarations.
905    return FD->getPreviousDeclaration() == OldD;
906
907  // For function templates, the underlying function declarations are linked.
908  if (const FunctionTemplateDecl *FunctionTemplate
909        = dyn_cast<FunctionTemplateDecl>(this))
910    if (const FunctionTemplateDecl *OldFunctionTemplate
911          = dyn_cast<FunctionTemplateDecl>(OldD))
912      return FunctionTemplate->getTemplatedDecl()
913               ->declarationReplaces(OldFunctionTemplate->getTemplatedDecl());
914
915  // For method declarations, we keep track of redeclarations.
916  if (isa<ObjCMethodDecl>(this))
917    return false;
918
919  if (isa<ObjCInterfaceDecl>(this) && isa<ObjCCompatibleAliasDecl>(OldD))
920    return true;
921
922  if (isa<UsingShadowDecl>(this) && isa<UsingShadowDecl>(OldD))
923    return cast<UsingShadowDecl>(this)->getTargetDecl() ==
924           cast<UsingShadowDecl>(OldD)->getTargetDecl();
925
926  if (isa<UsingDecl>(this) && isa<UsingDecl>(OldD)) {
927    ASTContext &Context = getASTContext();
928    return Context.getCanonicalNestedNameSpecifier(
929                                     cast<UsingDecl>(this)->getQualifier()) ==
930           Context.getCanonicalNestedNameSpecifier(
931                                        cast<UsingDecl>(OldD)->getQualifier());
932  }
933
934  // For non-function declarations, if the declarations are of the
935  // same kind then this must be a redeclaration, or semantic analysis
936  // would not have given us the new declaration.
937  return this->getKind() == OldD->getKind();
938}
939
940bool NamedDecl::hasLinkage() const {
941  return getLinkage() != NoLinkage;
942}
943
944NamedDecl *NamedDecl::getUnderlyingDecl() {
945  NamedDecl *ND = this;
946  while (true) {
947    if (UsingShadowDecl *UD = dyn_cast<UsingShadowDecl>(ND))
948      ND = UD->getTargetDecl();
949    else if (ObjCCompatibleAliasDecl *AD
950              = dyn_cast<ObjCCompatibleAliasDecl>(ND))
951      return AD->getClassInterface();
952    else
953      return ND;
954  }
955}
956
957bool NamedDecl::isCXXInstanceMember() const {
958  assert(isCXXClassMember() &&
959         "checking whether non-member is instance member");
960
961  const NamedDecl *D = this;
962  if (isa<UsingShadowDecl>(D))
963    D = cast<UsingShadowDecl>(D)->getTargetDecl();
964
965  if (isa<FieldDecl>(D) || isa<IndirectFieldDecl>(D))
966    return true;
967  if (isa<CXXMethodDecl>(D))
968    return cast<CXXMethodDecl>(D)->isInstance();
969  if (isa<FunctionTemplateDecl>(D))
970    return cast<CXXMethodDecl>(cast<FunctionTemplateDecl>(D)
971                                 ->getTemplatedDecl())->isInstance();
972  return false;
973}
974
975//===----------------------------------------------------------------------===//
976// DeclaratorDecl Implementation
977//===----------------------------------------------------------------------===//
978
979template <typename DeclT>
980static SourceLocation getTemplateOrInnerLocStart(const DeclT *decl) {
981  if (decl->getNumTemplateParameterLists() > 0)
982    return decl->getTemplateParameterList(0)->getTemplateLoc();
983  else
984    return decl->getInnerLocStart();
985}
986
987SourceLocation DeclaratorDecl::getTypeSpecStartLoc() const {
988  TypeSourceInfo *TSI = getTypeSourceInfo();
989  if (TSI) return TSI->getTypeLoc().getBeginLoc();
990  return SourceLocation();
991}
992
993void DeclaratorDecl::setQualifierInfo(NestedNameSpecifierLoc QualifierLoc) {
994  if (QualifierLoc) {
995    // Make sure the extended decl info is allocated.
996    if (!hasExtInfo()) {
997      // Save (non-extended) type source info pointer.
998      TypeSourceInfo *savedTInfo = DeclInfo.get<TypeSourceInfo*>();
999      // Allocate external info struct.
1000      DeclInfo = new (getASTContext()) ExtInfo;
1001      // Restore savedTInfo into (extended) decl info.
1002      getExtInfo()->TInfo = savedTInfo;
1003    }
1004    // Set qualifier info.
1005    getExtInfo()->QualifierLoc = QualifierLoc;
1006  }
1007  else {
1008    // Here Qualifier == 0, i.e., we are removing the qualifier (if any).
1009    if (hasExtInfo()) {
1010      if (getExtInfo()->NumTemplParamLists == 0) {
1011        // Save type source info pointer.
1012        TypeSourceInfo *savedTInfo = getExtInfo()->TInfo;
1013        // Deallocate the extended decl info.
1014        getASTContext().Deallocate(getExtInfo());
1015        // Restore savedTInfo into (non-extended) decl info.
1016        DeclInfo = savedTInfo;
1017      }
1018      else
1019        getExtInfo()->QualifierLoc = QualifierLoc;
1020    }
1021  }
1022}
1023
1024void
1025DeclaratorDecl::setTemplateParameterListsInfo(ASTContext &Context,
1026                                              unsigned NumTPLists,
1027                                              TemplateParameterList **TPLists) {
1028  assert(NumTPLists > 0);
1029  // Make sure the extended decl info is allocated.
1030  if (!hasExtInfo()) {
1031    // Save (non-extended) type source info pointer.
1032    TypeSourceInfo *savedTInfo = DeclInfo.get<TypeSourceInfo*>();
1033    // Allocate external info struct.
1034    DeclInfo = new (getASTContext()) ExtInfo;
1035    // Restore savedTInfo into (extended) decl info.
1036    getExtInfo()->TInfo = savedTInfo;
1037  }
1038  // Set the template parameter lists info.
1039  getExtInfo()->setTemplateParameterListsInfo(Context, NumTPLists, TPLists);
1040}
1041
1042SourceLocation DeclaratorDecl::getOuterLocStart() const {
1043  return getTemplateOrInnerLocStart(this);
1044}
1045
1046namespace {
1047
1048// Helper function: returns true if QT is or contains a type
1049// having a postfix component.
1050bool typeIsPostfix(clang::QualType QT) {
1051  while (true) {
1052    const Type* T = QT.getTypePtr();
1053    switch (T->getTypeClass()) {
1054    default:
1055      return false;
1056    case Type::Pointer:
1057      QT = cast<PointerType>(T)->getPointeeType();
1058      break;
1059    case Type::BlockPointer:
1060      QT = cast<BlockPointerType>(T)->getPointeeType();
1061      break;
1062    case Type::MemberPointer:
1063      QT = cast<MemberPointerType>(T)->getPointeeType();
1064      break;
1065    case Type::LValueReference:
1066    case Type::RValueReference:
1067      QT = cast<ReferenceType>(T)->getPointeeType();
1068      break;
1069    case Type::PackExpansion:
1070      QT = cast<PackExpansionType>(T)->getPattern();
1071      break;
1072    case Type::Paren:
1073    case Type::ConstantArray:
1074    case Type::DependentSizedArray:
1075    case Type::IncompleteArray:
1076    case Type::VariableArray:
1077    case Type::FunctionProto:
1078    case Type::FunctionNoProto:
1079      return true;
1080    }
1081  }
1082}
1083
1084} // namespace
1085
1086SourceRange DeclaratorDecl::getSourceRange() const {
1087  SourceLocation RangeEnd = getLocation();
1088  if (TypeSourceInfo *TInfo = getTypeSourceInfo()) {
1089    if (typeIsPostfix(TInfo->getType()))
1090      RangeEnd = TInfo->getTypeLoc().getSourceRange().getEnd();
1091  }
1092  return SourceRange(getOuterLocStart(), RangeEnd);
1093}
1094
1095void
1096QualifierInfo::setTemplateParameterListsInfo(ASTContext &Context,
1097                                             unsigned NumTPLists,
1098                                             TemplateParameterList **TPLists) {
1099  assert((NumTPLists == 0 || TPLists != 0) &&
1100         "Empty array of template parameters with positive size!");
1101
1102  // Free previous template parameters (if any).
1103  if (NumTemplParamLists > 0) {
1104    Context.Deallocate(TemplParamLists);
1105    TemplParamLists = 0;
1106    NumTemplParamLists = 0;
1107  }
1108  // Set info on matched template parameter lists (if any).
1109  if (NumTPLists > 0) {
1110    TemplParamLists = new (Context) TemplateParameterList*[NumTPLists];
1111    NumTemplParamLists = NumTPLists;
1112    for (unsigned i = NumTPLists; i-- > 0; )
1113      TemplParamLists[i] = TPLists[i];
1114  }
1115}
1116
1117//===----------------------------------------------------------------------===//
1118// VarDecl Implementation
1119//===----------------------------------------------------------------------===//
1120
1121const char *VarDecl::getStorageClassSpecifierString(StorageClass SC) {
1122  switch (SC) {
1123  case SC_None:          break;
1124  case SC_Auto:          return "auto"; break;
1125  case SC_Extern:        return "extern"; break;
1126  case SC_PrivateExtern: return "__private_extern__"; break;
1127  case SC_Register:      return "register"; break;
1128  case SC_Static:        return "static"; break;
1129  }
1130
1131  assert(0 && "Invalid storage class");
1132  return 0;
1133}
1134
1135VarDecl *VarDecl::Create(ASTContext &C, DeclContext *DC,
1136                         SourceLocation StartL, SourceLocation IdL,
1137                         IdentifierInfo *Id, QualType T, TypeSourceInfo *TInfo,
1138                         StorageClass S, StorageClass SCAsWritten) {
1139  return new (C) VarDecl(Var, DC, StartL, IdL, Id, T, TInfo, S, SCAsWritten);
1140}
1141
1142void VarDecl::setStorageClass(StorageClass SC) {
1143  assert(isLegalForVariable(SC));
1144  if (getStorageClass() != SC)
1145    ClearLinkageCache();
1146
1147  VarDeclBits.SClass = SC;
1148}
1149
1150SourceRange VarDecl::getSourceRange() const {
1151  if (getInit())
1152    return SourceRange(getOuterLocStart(), getInit()->getLocEnd());
1153  return DeclaratorDecl::getSourceRange();
1154}
1155
1156bool VarDecl::isExternC() const {
1157  ASTContext &Context = getASTContext();
1158  if (!Context.getLangOptions().CPlusPlus)
1159    return (getDeclContext()->isTranslationUnit() &&
1160            getStorageClass() != SC_Static) ||
1161      (getDeclContext()->isFunctionOrMethod() && hasExternalStorage());
1162
1163  const DeclContext *DC = getDeclContext();
1164  if (DC->isFunctionOrMethod())
1165    return false;
1166
1167  for (; !DC->isTranslationUnit(); DC = DC->getParent()) {
1168    if (const LinkageSpecDecl *Linkage = dyn_cast<LinkageSpecDecl>(DC))  {
1169      if (Linkage->getLanguage() == LinkageSpecDecl::lang_c)
1170        return getStorageClass() != SC_Static;
1171
1172      break;
1173    }
1174
1175  }
1176
1177  return false;
1178}
1179
1180VarDecl *VarDecl::getCanonicalDecl() {
1181  return getFirstDeclaration();
1182}
1183
1184VarDecl::DefinitionKind VarDecl::isThisDeclarationADefinition() const {
1185  // C++ [basic.def]p2:
1186  //   A declaration is a definition unless [...] it contains the 'extern'
1187  //   specifier or a linkage-specification and neither an initializer [...],
1188  //   it declares a static data member in a class declaration [...].
1189  // C++ [temp.expl.spec]p15:
1190  //   An explicit specialization of a static data member of a template is a
1191  //   definition if the declaration includes an initializer; otherwise, it is
1192  //   a declaration.
1193  if (isStaticDataMember()) {
1194    if (isOutOfLine() && (hasInit() ||
1195          getTemplateSpecializationKind() != TSK_ExplicitSpecialization))
1196      return Definition;
1197    else
1198      return DeclarationOnly;
1199  }
1200  // C99 6.7p5:
1201  //   A definition of an identifier is a declaration for that identifier that
1202  //   [...] causes storage to be reserved for that object.
1203  // Note: that applies for all non-file-scope objects.
1204  // C99 6.9.2p1:
1205  //   If the declaration of an identifier for an object has file scope and an
1206  //   initializer, the declaration is an external definition for the identifier
1207  if (hasInit())
1208    return Definition;
1209  // AST for 'extern "C" int foo;' is annotated with 'extern'.
1210  if (hasExternalStorage())
1211    return DeclarationOnly;
1212
1213  if (getStorageClassAsWritten() == SC_Extern ||
1214       getStorageClassAsWritten() == SC_PrivateExtern) {
1215    for (const VarDecl *PrevVar = getPreviousDeclaration();
1216         PrevVar; PrevVar = PrevVar->getPreviousDeclaration()) {
1217      if (PrevVar->getLinkage() == InternalLinkage && PrevVar->hasInit())
1218        return DeclarationOnly;
1219    }
1220  }
1221  // C99 6.9.2p2:
1222  //   A declaration of an object that has file scope without an initializer,
1223  //   and without a storage class specifier or the scs 'static', constitutes
1224  //   a tentative definition.
1225  // No such thing in C++.
1226  if (!getASTContext().getLangOptions().CPlusPlus && isFileVarDecl())
1227    return TentativeDefinition;
1228
1229  // What's left is (in C, block-scope) declarations without initializers or
1230  // external storage. These are definitions.
1231  return Definition;
1232}
1233
1234VarDecl *VarDecl::getActingDefinition() {
1235  DefinitionKind Kind = isThisDeclarationADefinition();
1236  if (Kind != TentativeDefinition)
1237    return 0;
1238
1239  VarDecl *LastTentative = 0;
1240  VarDecl *First = getFirstDeclaration();
1241  for (redecl_iterator I = First->redecls_begin(), E = First->redecls_end();
1242       I != E; ++I) {
1243    Kind = (*I)->isThisDeclarationADefinition();
1244    if (Kind == Definition)
1245      return 0;
1246    else if (Kind == TentativeDefinition)
1247      LastTentative = *I;
1248  }
1249  return LastTentative;
1250}
1251
1252bool VarDecl::isTentativeDefinitionNow() const {
1253  DefinitionKind Kind = isThisDeclarationADefinition();
1254  if (Kind != TentativeDefinition)
1255    return false;
1256
1257  for (redecl_iterator I = redecls_begin(), E = redecls_end(); I != E; ++I) {
1258    if ((*I)->isThisDeclarationADefinition() == Definition)
1259      return false;
1260  }
1261  return true;
1262}
1263
1264VarDecl *VarDecl::getDefinition() {
1265  VarDecl *First = getFirstDeclaration();
1266  for (redecl_iterator I = First->redecls_begin(), E = First->redecls_end();
1267       I != E; ++I) {
1268    if ((*I)->isThisDeclarationADefinition() == Definition)
1269      return *I;
1270  }
1271  return 0;
1272}
1273
1274VarDecl::DefinitionKind VarDecl::hasDefinition() const {
1275  DefinitionKind Kind = DeclarationOnly;
1276
1277  const VarDecl *First = getFirstDeclaration();
1278  for (redecl_iterator I = First->redecls_begin(), E = First->redecls_end();
1279       I != E; ++I)
1280    Kind = std::max(Kind, (*I)->isThisDeclarationADefinition());
1281
1282  return Kind;
1283}
1284
1285const Expr *VarDecl::getAnyInitializer(const VarDecl *&D) const {
1286  redecl_iterator I = redecls_begin(), E = redecls_end();
1287  while (I != E && !I->getInit())
1288    ++I;
1289
1290  if (I != E) {
1291    D = *I;
1292    return I->getInit();
1293  }
1294  return 0;
1295}
1296
1297bool VarDecl::isOutOfLine() const {
1298  if (Decl::isOutOfLine())
1299    return true;
1300
1301  if (!isStaticDataMember())
1302    return false;
1303
1304  // If this static data member was instantiated from a static data member of
1305  // a class template, check whether that static data member was defined
1306  // out-of-line.
1307  if (VarDecl *VD = getInstantiatedFromStaticDataMember())
1308    return VD->isOutOfLine();
1309
1310  return false;
1311}
1312
1313VarDecl *VarDecl::getOutOfLineDefinition() {
1314  if (!isStaticDataMember())
1315    return 0;
1316
1317  for (VarDecl::redecl_iterator RD = redecls_begin(), RDEnd = redecls_end();
1318       RD != RDEnd; ++RD) {
1319    if (RD->getLexicalDeclContext()->isFileContext())
1320      return *RD;
1321  }
1322
1323  return 0;
1324}
1325
1326void VarDecl::setInit(Expr *I) {
1327  if (EvaluatedStmt *Eval = Init.dyn_cast<EvaluatedStmt *>()) {
1328    Eval->~EvaluatedStmt();
1329    getASTContext().Deallocate(Eval);
1330  }
1331
1332  Init = I;
1333}
1334
1335bool VarDecl::extendsLifetimeOfTemporary() const {
1336  assert(getType()->isReferenceType() &&"Non-references never extend lifetime");
1337
1338  const Expr *E = getInit();
1339  if (!E)
1340    return false;
1341
1342  if (const ExprWithCleanups *Cleanups = dyn_cast<ExprWithCleanups>(E))
1343    E = Cleanups->getSubExpr();
1344
1345  return isa<MaterializeTemporaryExpr>(E);
1346}
1347
1348VarDecl *VarDecl::getInstantiatedFromStaticDataMember() const {
1349  if (MemberSpecializationInfo *MSI = getMemberSpecializationInfo())
1350    return cast<VarDecl>(MSI->getInstantiatedFrom());
1351
1352  return 0;
1353}
1354
1355TemplateSpecializationKind VarDecl::getTemplateSpecializationKind() const {
1356  if (MemberSpecializationInfo *MSI = getMemberSpecializationInfo())
1357    return MSI->getTemplateSpecializationKind();
1358
1359  return TSK_Undeclared;
1360}
1361
1362MemberSpecializationInfo *VarDecl::getMemberSpecializationInfo() const {
1363  return getASTContext().getInstantiatedFromStaticDataMember(this);
1364}
1365
1366void VarDecl::setTemplateSpecializationKind(TemplateSpecializationKind TSK,
1367                                         SourceLocation PointOfInstantiation) {
1368  MemberSpecializationInfo *MSI = getMemberSpecializationInfo();
1369  assert(MSI && "Not an instantiated static data member?");
1370  MSI->setTemplateSpecializationKind(TSK);
1371  if (TSK != TSK_ExplicitSpecialization &&
1372      PointOfInstantiation.isValid() &&
1373      MSI->getPointOfInstantiation().isInvalid())
1374    MSI->setPointOfInstantiation(PointOfInstantiation);
1375}
1376
1377//===----------------------------------------------------------------------===//
1378// ParmVarDecl Implementation
1379//===----------------------------------------------------------------------===//
1380
1381ParmVarDecl *ParmVarDecl::Create(ASTContext &C, DeclContext *DC,
1382                                 SourceLocation StartLoc,
1383                                 SourceLocation IdLoc, IdentifierInfo *Id,
1384                                 QualType T, TypeSourceInfo *TInfo,
1385                                 StorageClass S, StorageClass SCAsWritten,
1386                                 Expr *DefArg) {
1387  return new (C) ParmVarDecl(ParmVar, DC, StartLoc, IdLoc, Id, T, TInfo,
1388                             S, SCAsWritten, DefArg);
1389}
1390
1391SourceRange ParmVarDecl::getSourceRange() const {
1392  if (!hasInheritedDefaultArg()) {
1393    SourceRange ArgRange = getDefaultArgRange();
1394    if (ArgRange.isValid())
1395      return SourceRange(getOuterLocStart(), ArgRange.getEnd());
1396  }
1397
1398  return DeclaratorDecl::getSourceRange();
1399}
1400
1401Expr *ParmVarDecl::getDefaultArg() {
1402  assert(!hasUnparsedDefaultArg() && "Default argument is not yet parsed!");
1403  assert(!hasUninstantiatedDefaultArg() &&
1404         "Default argument is not yet instantiated!");
1405
1406  Expr *Arg = getInit();
1407  if (ExprWithCleanups *E = dyn_cast_or_null<ExprWithCleanups>(Arg))
1408    return E->getSubExpr();
1409
1410  return Arg;
1411}
1412
1413unsigned ParmVarDecl::getNumDefaultArgTemporaries() const {
1414  if (const ExprWithCleanups *E = dyn_cast<ExprWithCleanups>(getInit()))
1415    return E->getNumTemporaries();
1416
1417  return 0;
1418}
1419
1420CXXTemporary *ParmVarDecl::getDefaultArgTemporary(unsigned i) {
1421  assert(getNumDefaultArgTemporaries() &&
1422         "Default arguments does not have any temporaries!");
1423
1424  ExprWithCleanups *E = cast<ExprWithCleanups>(getInit());
1425  return E->getTemporary(i);
1426}
1427
1428SourceRange ParmVarDecl::getDefaultArgRange() const {
1429  if (const Expr *E = getInit())
1430    return E->getSourceRange();
1431
1432  if (hasUninstantiatedDefaultArg())
1433    return getUninstantiatedDefaultArg()->getSourceRange();
1434
1435  return SourceRange();
1436}
1437
1438bool ParmVarDecl::isParameterPack() const {
1439  return isa<PackExpansionType>(getType());
1440}
1441
1442//===----------------------------------------------------------------------===//
1443// FunctionDecl Implementation
1444//===----------------------------------------------------------------------===//
1445
1446void FunctionDecl::getNameForDiagnostic(std::string &S,
1447                                        const PrintingPolicy &Policy,
1448                                        bool Qualified) const {
1449  NamedDecl::getNameForDiagnostic(S, Policy, Qualified);
1450  const TemplateArgumentList *TemplateArgs = getTemplateSpecializationArgs();
1451  if (TemplateArgs)
1452    S += TemplateSpecializationType::PrintTemplateArgumentList(
1453                                                         TemplateArgs->data(),
1454                                                         TemplateArgs->size(),
1455                                                               Policy);
1456
1457}
1458
1459bool FunctionDecl::isVariadic() const {
1460  if (const FunctionProtoType *FT = getType()->getAs<FunctionProtoType>())
1461    return FT->isVariadic();
1462  return false;
1463}
1464
1465bool FunctionDecl::hasBody(const FunctionDecl *&Definition) const {
1466  for (redecl_iterator I = redecls_begin(), E = redecls_end(); I != E; ++I) {
1467    if (I->Body || I->IsLateTemplateParsed) {
1468      Definition = *I;
1469      return true;
1470    }
1471  }
1472
1473  return false;
1474}
1475
1476bool FunctionDecl::hasTrivialBody() const
1477{
1478  Stmt *S = getBody();
1479  if (!S) {
1480    // Since we don't have a body for this function, we don't know if it's
1481    // trivial or not.
1482    return false;
1483  }
1484
1485  if (isa<CompoundStmt>(S) && cast<CompoundStmt>(S)->body_empty())
1486    return true;
1487  return false;
1488}
1489
1490bool FunctionDecl::isDefined(const FunctionDecl *&Definition) const {
1491  for (redecl_iterator I = redecls_begin(), E = redecls_end(); I != E; ++I) {
1492    if (I->IsDeleted || I->IsDefaulted || I->Body || I->IsLateTemplateParsed) {
1493      Definition = I->IsDeleted ? I->getCanonicalDecl() : *I;
1494      return true;
1495    }
1496  }
1497
1498  return false;
1499}
1500
1501Stmt *FunctionDecl::getBody(const FunctionDecl *&Definition) const {
1502  for (redecl_iterator I = redecls_begin(), E = redecls_end(); I != E; ++I) {
1503    if (I->Body) {
1504      Definition = *I;
1505      return I->Body.get(getASTContext().getExternalSource());
1506    } else if (I->IsLateTemplateParsed) {
1507      Definition = *I;
1508      return 0;
1509    }
1510  }
1511
1512  return 0;
1513}
1514
1515void FunctionDecl::setBody(Stmt *B) {
1516  Body = B;
1517  if (B)
1518    EndRangeLoc = B->getLocEnd();
1519}
1520
1521void FunctionDecl::setPure(bool P) {
1522  IsPure = P;
1523  if (P)
1524    if (CXXRecordDecl *Parent = dyn_cast<CXXRecordDecl>(getDeclContext()))
1525      Parent->markedVirtualFunctionPure();
1526}
1527
1528bool FunctionDecl::isMain() const {
1529  const TranslationUnitDecl *tunit =
1530    dyn_cast<TranslationUnitDecl>(getDeclContext()->getRedeclContext());
1531  return tunit &&
1532         !tunit->getASTContext().getLangOptions().Freestanding &&
1533         getIdentifier() &&
1534         getIdentifier()->isStr("main");
1535}
1536
1537bool FunctionDecl::isReservedGlobalPlacementOperator() const {
1538  assert(getDeclName().getNameKind() == DeclarationName::CXXOperatorName);
1539  assert(getDeclName().getCXXOverloadedOperator() == OO_New ||
1540         getDeclName().getCXXOverloadedOperator() == OO_Delete ||
1541         getDeclName().getCXXOverloadedOperator() == OO_Array_New ||
1542         getDeclName().getCXXOverloadedOperator() == OO_Array_Delete);
1543
1544  if (isa<CXXRecordDecl>(getDeclContext())) return false;
1545  assert(getDeclContext()->getRedeclContext()->isTranslationUnit());
1546
1547  const FunctionProtoType *proto = getType()->castAs<FunctionProtoType>();
1548  if (proto->getNumArgs() != 2 || proto->isVariadic()) return false;
1549
1550  ASTContext &Context =
1551    cast<TranslationUnitDecl>(getDeclContext()->getRedeclContext())
1552      ->getASTContext();
1553
1554  // The result type and first argument type are constant across all
1555  // these operators.  The second argument must be exactly void*.
1556  return (proto->getArgType(1).getCanonicalType() == Context.VoidPtrTy);
1557}
1558
1559bool FunctionDecl::isExternC() const {
1560  ASTContext &Context = getASTContext();
1561  // In C, any non-static, non-overloadable function has external
1562  // linkage.
1563  if (!Context.getLangOptions().CPlusPlus)
1564    return getStorageClass() != SC_Static && !getAttr<OverloadableAttr>();
1565
1566  const DeclContext *DC = getDeclContext();
1567  if (DC->isRecord())
1568    return false;
1569
1570  for (; !DC->isTranslationUnit(); DC = DC->getParent()) {
1571    if (const LinkageSpecDecl *Linkage = dyn_cast<LinkageSpecDecl>(DC))  {
1572      if (Linkage->getLanguage() == LinkageSpecDecl::lang_c)
1573        return getStorageClass() != SC_Static &&
1574               !getAttr<OverloadableAttr>();
1575
1576      break;
1577    }
1578  }
1579
1580  return isMain();
1581}
1582
1583bool FunctionDecl::isGlobal() const {
1584  if (const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(this))
1585    return Method->isStatic();
1586
1587  if (getStorageClass() == SC_Static)
1588    return false;
1589
1590  for (const DeclContext *DC = getDeclContext();
1591       DC->isNamespace();
1592       DC = DC->getParent()) {
1593    if (const NamespaceDecl *Namespace = cast<NamespaceDecl>(DC)) {
1594      if (!Namespace->getDeclName())
1595        return false;
1596      break;
1597    }
1598  }
1599
1600  return true;
1601}
1602
1603void
1604FunctionDecl::setPreviousDeclaration(FunctionDecl *PrevDecl) {
1605  redeclarable_base::setPreviousDeclaration(PrevDecl);
1606
1607  if (FunctionTemplateDecl *FunTmpl = getDescribedFunctionTemplate()) {
1608    FunctionTemplateDecl *PrevFunTmpl
1609      = PrevDecl? PrevDecl->getDescribedFunctionTemplate() : 0;
1610    assert((!PrevDecl || PrevFunTmpl) && "Function/function template mismatch");
1611    FunTmpl->setPreviousDeclaration(PrevFunTmpl);
1612  }
1613
1614  if (PrevDecl->IsInline)
1615    IsInline = true;
1616}
1617
1618const FunctionDecl *FunctionDecl::getCanonicalDecl() const {
1619  return getFirstDeclaration();
1620}
1621
1622FunctionDecl *FunctionDecl::getCanonicalDecl() {
1623  return getFirstDeclaration();
1624}
1625
1626void FunctionDecl::setStorageClass(StorageClass SC) {
1627  assert(isLegalForFunction(SC));
1628  if (getStorageClass() != SC)
1629    ClearLinkageCache();
1630
1631  SClass = SC;
1632}
1633
1634/// \brief Returns a value indicating whether this function
1635/// corresponds to a builtin function.
1636///
1637/// The function corresponds to a built-in function if it is
1638/// declared at translation scope or within an extern "C" block and
1639/// its name matches with the name of a builtin. The returned value
1640/// will be 0 for functions that do not correspond to a builtin, a
1641/// value of type \c Builtin::ID if in the target-independent range
1642/// \c [1,Builtin::First), or a target-specific builtin value.
1643unsigned FunctionDecl::getBuiltinID() const {
1644  ASTContext &Context = getASTContext();
1645  if (!getIdentifier() || !getIdentifier()->getBuiltinID())
1646    return 0;
1647
1648  unsigned BuiltinID = getIdentifier()->getBuiltinID();
1649  if (!Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID))
1650    return BuiltinID;
1651
1652  // This function has the name of a known C library
1653  // function. Determine whether it actually refers to the C library
1654  // function or whether it just has the same name.
1655
1656  // If this is a static function, it's not a builtin.
1657  if (getStorageClass() == SC_Static)
1658    return 0;
1659
1660  // If this function is at translation-unit scope and we're not in
1661  // C++, it refers to the C library function.
1662  if (!Context.getLangOptions().CPlusPlus &&
1663      getDeclContext()->isTranslationUnit())
1664    return BuiltinID;
1665
1666  // If the function is in an extern "C" linkage specification and is
1667  // not marked "overloadable", it's the real function.
1668  if (isa<LinkageSpecDecl>(getDeclContext()) &&
1669      cast<LinkageSpecDecl>(getDeclContext())->getLanguage()
1670        == LinkageSpecDecl::lang_c &&
1671      !getAttr<OverloadableAttr>())
1672    return BuiltinID;
1673
1674  // Not a builtin
1675  return 0;
1676}
1677
1678
1679/// getNumParams - Return the number of parameters this function must have
1680/// based on its FunctionType.  This is the length of the ParamInfo array
1681/// after it has been created.
1682unsigned FunctionDecl::getNumParams() const {
1683  const FunctionType *FT = getType()->getAs<FunctionType>();
1684  if (isa<FunctionNoProtoType>(FT))
1685    return 0;
1686  return cast<FunctionProtoType>(FT)->getNumArgs();
1687
1688}
1689
1690void FunctionDecl::setParams(ASTContext &C,
1691                             ParmVarDecl **NewParamInfo, unsigned NumParams) {
1692  assert(ParamInfo == 0 && "Already has param info!");
1693  assert(NumParams == getNumParams() && "Parameter count mismatch!");
1694
1695  // Zero params -> null pointer.
1696  if (NumParams) {
1697    void *Mem = C.Allocate(sizeof(ParmVarDecl*)*NumParams);
1698    ParamInfo = new (Mem) ParmVarDecl*[NumParams];
1699    memcpy(ParamInfo, NewParamInfo, sizeof(ParmVarDecl*)*NumParams);
1700  }
1701}
1702
1703/// getMinRequiredArguments - Returns the minimum number of arguments
1704/// needed to call this function. This may be fewer than the number of
1705/// function parameters, if some of the parameters have default
1706/// arguments (in C++) or the last parameter is a parameter pack.
1707unsigned FunctionDecl::getMinRequiredArguments() const {
1708  if (!getASTContext().getLangOptions().CPlusPlus)
1709    return getNumParams();
1710
1711  unsigned NumRequiredArgs = getNumParams();
1712
1713  // If the last parameter is a parameter pack, we don't need an argument for
1714  // it.
1715  if (NumRequiredArgs > 0 &&
1716      getParamDecl(NumRequiredArgs - 1)->isParameterPack())
1717    --NumRequiredArgs;
1718
1719  // If this parameter has a default argument, we don't need an argument for
1720  // it.
1721  while (NumRequiredArgs > 0 &&
1722         getParamDecl(NumRequiredArgs-1)->hasDefaultArg())
1723    --NumRequiredArgs;
1724
1725  // We might have parameter packs before the end. These can't be deduced,
1726  // but they can still handle multiple arguments.
1727  unsigned ArgIdx = NumRequiredArgs;
1728  while (ArgIdx > 0) {
1729    if (getParamDecl(ArgIdx - 1)->isParameterPack())
1730      NumRequiredArgs = ArgIdx;
1731
1732    --ArgIdx;
1733  }
1734
1735  return NumRequiredArgs;
1736}
1737
1738bool FunctionDecl::isInlined() const {
1739  if (IsInline)
1740    return true;
1741
1742  if (isa<CXXMethodDecl>(this)) {
1743    if (!isOutOfLine() || getCanonicalDecl()->isInlineSpecified())
1744      return true;
1745  }
1746
1747  switch (getTemplateSpecializationKind()) {
1748  case TSK_Undeclared:
1749  case TSK_ExplicitSpecialization:
1750    return false;
1751
1752  case TSK_ImplicitInstantiation:
1753  case TSK_ExplicitInstantiationDeclaration:
1754  case TSK_ExplicitInstantiationDefinition:
1755    // Handle below.
1756    break;
1757  }
1758
1759  const FunctionDecl *PatternDecl = getTemplateInstantiationPattern();
1760  bool HasPattern = false;
1761  if (PatternDecl)
1762    HasPattern = PatternDecl->hasBody(PatternDecl);
1763
1764  if (HasPattern && PatternDecl)
1765    return PatternDecl->isInlined();
1766
1767  return false;
1768}
1769
1770/// \brief For a function declaration in C or C++, determine whether this
1771/// declaration causes the definition to be externally visible.
1772///
1773/// Determines whether this is the first non-inline redeclaration of an inline
1774/// function in a language where "inline" does not normally require an
1775/// externally visible definition.
1776bool FunctionDecl::doesDeclarationForceExternallyVisibleDefinition() const {
1777  assert(!doesThisDeclarationHaveABody() &&
1778         "Must have a declaration without a body.");
1779
1780  ASTContext &Context = getASTContext();
1781
1782  // In C99 mode, a function may have an inline definition (causing it to
1783  // be deferred) then redeclared later.  As a special case, "extern inline"
1784  // is not required to produce an external symbol.
1785  if (Context.getLangOptions().GNUInline || !Context.getLangOptions().C99 ||
1786      Context.getLangOptions().CPlusPlus)
1787    return false;
1788  if (getLinkage() != ExternalLinkage || isInlineSpecified())
1789    return false;
1790  const FunctionDecl *Definition = 0;
1791  if (hasBody(Definition))
1792    return Definition->isInlined() &&
1793           Definition->isInlineDefinitionExternallyVisible();
1794  return false;
1795}
1796
1797/// \brief For an inline function definition in C or C++, determine whether the
1798/// definition will be externally visible.
1799///
1800/// Inline function definitions are always available for inlining optimizations.
1801/// However, depending on the language dialect, declaration specifiers, and
1802/// attributes, the definition of an inline function may or may not be
1803/// "externally" visible to other translation units in the program.
1804///
1805/// In C99, inline definitions are not externally visible by default. However,
1806/// if even one of the global-scope declarations is marked "extern inline", the
1807/// inline definition becomes externally visible (C99 6.7.4p6).
1808///
1809/// In GNU89 mode, or if the gnu_inline attribute is attached to the function
1810/// definition, we use the GNU semantics for inline, which are nearly the
1811/// opposite of C99 semantics. In particular, "inline" by itself will create
1812/// an externally visible symbol, but "extern inline" will not create an
1813/// externally visible symbol.
1814bool FunctionDecl::isInlineDefinitionExternallyVisible() const {
1815  assert(doesThisDeclarationHaveABody() && "Must have the function definition");
1816  assert(isInlined() && "Function must be inline");
1817  ASTContext &Context = getASTContext();
1818
1819  if (Context.getLangOptions().GNUInline || hasAttr<GNUInlineAttr>()) {
1820    // If it's not the case that both 'inline' and 'extern' are
1821    // specified on the definition, then this inline definition is
1822    // externally visible.
1823    if (!(isInlineSpecified() && getStorageClassAsWritten() == SC_Extern))
1824      return true;
1825
1826    // If any declaration is 'inline' but not 'extern', then this definition
1827    // is externally visible.
1828    for (redecl_iterator Redecl = redecls_begin(), RedeclEnd = redecls_end();
1829         Redecl != RedeclEnd;
1830         ++Redecl) {
1831      if (Redecl->isInlineSpecified() &&
1832          Redecl->getStorageClassAsWritten() != SC_Extern)
1833        return true;
1834    }
1835
1836    return false;
1837  }
1838
1839  // C99 6.7.4p6:
1840  //   [...] If all of the file scope declarations for a function in a
1841  //   translation unit include the inline function specifier without extern,
1842  //   then the definition in that translation unit is an inline definition.
1843  for (redecl_iterator Redecl = redecls_begin(), RedeclEnd = redecls_end();
1844       Redecl != RedeclEnd;
1845       ++Redecl) {
1846    // Only consider file-scope declarations in this test.
1847    if (!Redecl->getLexicalDeclContext()->isTranslationUnit())
1848      continue;
1849
1850    if (!Redecl->isInlineSpecified() || Redecl->getStorageClass() == SC_Extern)
1851      return true; // Not an inline definition
1852  }
1853
1854  // C99 6.7.4p6:
1855  //   An inline definition does not provide an external definition for the
1856  //   function, and does not forbid an external definition in another
1857  //   translation unit.
1858  return false;
1859}
1860
1861/// getOverloadedOperator - Which C++ overloaded operator this
1862/// function represents, if any.
1863OverloadedOperatorKind FunctionDecl::getOverloadedOperator() const {
1864  if (getDeclName().getNameKind() == DeclarationName::CXXOperatorName)
1865    return getDeclName().getCXXOverloadedOperator();
1866  else
1867    return OO_None;
1868}
1869
1870/// getLiteralIdentifier - The literal suffix identifier this function
1871/// represents, if any.
1872const IdentifierInfo *FunctionDecl::getLiteralIdentifier() const {
1873  if (getDeclName().getNameKind() == DeclarationName::CXXLiteralOperatorName)
1874    return getDeclName().getCXXLiteralIdentifier();
1875  else
1876    return 0;
1877}
1878
1879FunctionDecl::TemplatedKind FunctionDecl::getTemplatedKind() const {
1880  if (TemplateOrSpecialization.isNull())
1881    return TK_NonTemplate;
1882  if (TemplateOrSpecialization.is<FunctionTemplateDecl *>())
1883    return TK_FunctionTemplate;
1884  if (TemplateOrSpecialization.is<MemberSpecializationInfo *>())
1885    return TK_MemberSpecialization;
1886  if (TemplateOrSpecialization.is<FunctionTemplateSpecializationInfo *>())
1887    return TK_FunctionTemplateSpecialization;
1888  if (TemplateOrSpecialization.is
1889                               <DependentFunctionTemplateSpecializationInfo*>())
1890    return TK_DependentFunctionTemplateSpecialization;
1891
1892  assert(false && "Did we miss a TemplateOrSpecialization type?");
1893  return TK_NonTemplate;
1894}
1895
1896FunctionDecl *FunctionDecl::getInstantiatedFromMemberFunction() const {
1897  if (MemberSpecializationInfo *Info = getMemberSpecializationInfo())
1898    return cast<FunctionDecl>(Info->getInstantiatedFrom());
1899
1900  return 0;
1901}
1902
1903MemberSpecializationInfo *FunctionDecl::getMemberSpecializationInfo() const {
1904  return TemplateOrSpecialization.dyn_cast<MemberSpecializationInfo*>();
1905}
1906
1907void
1908FunctionDecl::setInstantiationOfMemberFunction(ASTContext &C,
1909                                               FunctionDecl *FD,
1910                                               TemplateSpecializationKind TSK) {
1911  assert(TemplateOrSpecialization.isNull() &&
1912         "Member function is already a specialization");
1913  MemberSpecializationInfo *Info
1914    = new (C) MemberSpecializationInfo(FD, TSK);
1915  TemplateOrSpecialization = Info;
1916}
1917
1918bool FunctionDecl::isImplicitlyInstantiable() const {
1919  // If the function is invalid, it can't be implicitly instantiated.
1920  if (isInvalidDecl())
1921    return false;
1922
1923  switch (getTemplateSpecializationKind()) {
1924  case TSK_Undeclared:
1925  case TSK_ExplicitSpecialization:
1926  case TSK_ExplicitInstantiationDefinition:
1927    return false;
1928
1929  case TSK_ImplicitInstantiation:
1930    return true;
1931
1932  case TSK_ExplicitInstantiationDeclaration:
1933    // Handled below.
1934    break;
1935  }
1936
1937  // Find the actual template from which we will instantiate.
1938  const FunctionDecl *PatternDecl = getTemplateInstantiationPattern();
1939  bool HasPattern = false;
1940  if (PatternDecl)
1941    HasPattern = PatternDecl->hasBody(PatternDecl);
1942
1943  // C++0x [temp.explicit]p9:
1944  //   Except for inline functions, other explicit instantiation declarations
1945  //   have the effect of suppressing the implicit instantiation of the entity
1946  //   to which they refer.
1947  if (!HasPattern || !PatternDecl)
1948    return true;
1949
1950  return PatternDecl->isInlined();
1951}
1952
1953FunctionDecl *FunctionDecl::getTemplateInstantiationPattern() const {
1954  if (FunctionTemplateDecl *Primary = getPrimaryTemplate()) {
1955    while (Primary->getInstantiatedFromMemberTemplate()) {
1956      // If we have hit a point where the user provided a specialization of
1957      // this template, we're done looking.
1958      if (Primary->isMemberSpecialization())
1959        break;
1960
1961      Primary = Primary->getInstantiatedFromMemberTemplate();
1962    }
1963
1964    return Primary->getTemplatedDecl();
1965  }
1966
1967  return getInstantiatedFromMemberFunction();
1968}
1969
1970FunctionTemplateDecl *FunctionDecl::getPrimaryTemplate() const {
1971  if (FunctionTemplateSpecializationInfo *Info
1972        = TemplateOrSpecialization
1973            .dyn_cast<FunctionTemplateSpecializationInfo*>()) {
1974    return Info->Template.getPointer();
1975  }
1976  return 0;
1977}
1978
1979const TemplateArgumentList *
1980FunctionDecl::getTemplateSpecializationArgs() const {
1981  if (FunctionTemplateSpecializationInfo *Info
1982        = TemplateOrSpecialization
1983            .dyn_cast<FunctionTemplateSpecializationInfo*>()) {
1984    return Info->TemplateArguments;
1985  }
1986  return 0;
1987}
1988
1989const TemplateArgumentListInfo *
1990FunctionDecl::getTemplateSpecializationArgsAsWritten() const {
1991  if (FunctionTemplateSpecializationInfo *Info
1992        = TemplateOrSpecialization
1993            .dyn_cast<FunctionTemplateSpecializationInfo*>()) {
1994    return Info->TemplateArgumentsAsWritten;
1995  }
1996  return 0;
1997}
1998
1999void
2000FunctionDecl::setFunctionTemplateSpecialization(ASTContext &C,
2001                                                FunctionTemplateDecl *Template,
2002                                     const TemplateArgumentList *TemplateArgs,
2003                                                void *InsertPos,
2004                                                TemplateSpecializationKind TSK,
2005                        const TemplateArgumentListInfo *TemplateArgsAsWritten,
2006                                          SourceLocation PointOfInstantiation) {
2007  assert(TSK != TSK_Undeclared &&
2008         "Must specify the type of function template specialization");
2009  FunctionTemplateSpecializationInfo *Info
2010    = TemplateOrSpecialization.dyn_cast<FunctionTemplateSpecializationInfo*>();
2011  if (!Info)
2012    Info = FunctionTemplateSpecializationInfo::Create(C, this, Template, TSK,
2013                                                      TemplateArgs,
2014                                                      TemplateArgsAsWritten,
2015                                                      PointOfInstantiation);
2016  TemplateOrSpecialization = Info;
2017
2018  // Insert this function template specialization into the set of known
2019  // function template specializations.
2020  if (InsertPos)
2021    Template->addSpecialization(Info, InsertPos);
2022  else {
2023    // Try to insert the new node. If there is an existing node, leave it, the
2024    // set will contain the canonical decls while
2025    // FunctionTemplateDecl::findSpecialization will return
2026    // the most recent redeclarations.
2027    FunctionTemplateSpecializationInfo *Existing
2028      = Template->getSpecializations().GetOrInsertNode(Info);
2029    (void)Existing;
2030    assert((!Existing || Existing->Function->isCanonicalDecl()) &&
2031           "Set is supposed to only contain canonical decls");
2032  }
2033}
2034
2035void
2036FunctionDecl::setDependentTemplateSpecialization(ASTContext &Context,
2037                                    const UnresolvedSetImpl &Templates,
2038                             const TemplateArgumentListInfo &TemplateArgs) {
2039  assert(TemplateOrSpecialization.isNull());
2040  size_t Size = sizeof(DependentFunctionTemplateSpecializationInfo);
2041  Size += Templates.size() * sizeof(FunctionTemplateDecl*);
2042  Size += TemplateArgs.size() * sizeof(TemplateArgumentLoc);
2043  void *Buffer = Context.Allocate(Size);
2044  DependentFunctionTemplateSpecializationInfo *Info =
2045    new (Buffer) DependentFunctionTemplateSpecializationInfo(Templates,
2046                                                             TemplateArgs);
2047  TemplateOrSpecialization = Info;
2048}
2049
2050DependentFunctionTemplateSpecializationInfo::
2051DependentFunctionTemplateSpecializationInfo(const UnresolvedSetImpl &Ts,
2052                                      const TemplateArgumentListInfo &TArgs)
2053  : AngleLocs(TArgs.getLAngleLoc(), TArgs.getRAngleLoc()) {
2054
2055  d.NumTemplates = Ts.size();
2056  d.NumArgs = TArgs.size();
2057
2058  FunctionTemplateDecl **TsArray =
2059    const_cast<FunctionTemplateDecl**>(getTemplates());
2060  for (unsigned I = 0, E = Ts.size(); I != E; ++I)
2061    TsArray[I] = cast<FunctionTemplateDecl>(Ts[I]->getUnderlyingDecl());
2062
2063  TemplateArgumentLoc *ArgsArray =
2064    const_cast<TemplateArgumentLoc*>(getTemplateArgs());
2065  for (unsigned I = 0, E = TArgs.size(); I != E; ++I)
2066    new (&ArgsArray[I]) TemplateArgumentLoc(TArgs[I]);
2067}
2068
2069TemplateSpecializationKind FunctionDecl::getTemplateSpecializationKind() const {
2070  // For a function template specialization, query the specialization
2071  // information object.
2072  FunctionTemplateSpecializationInfo *FTSInfo
2073    = TemplateOrSpecialization.dyn_cast<FunctionTemplateSpecializationInfo*>();
2074  if (FTSInfo)
2075    return FTSInfo->getTemplateSpecializationKind();
2076
2077  MemberSpecializationInfo *MSInfo
2078    = TemplateOrSpecialization.dyn_cast<MemberSpecializationInfo*>();
2079  if (MSInfo)
2080    return MSInfo->getTemplateSpecializationKind();
2081
2082  return TSK_Undeclared;
2083}
2084
2085void
2086FunctionDecl::setTemplateSpecializationKind(TemplateSpecializationKind TSK,
2087                                          SourceLocation PointOfInstantiation) {
2088  if (FunctionTemplateSpecializationInfo *FTSInfo
2089        = TemplateOrSpecialization.dyn_cast<
2090                                    FunctionTemplateSpecializationInfo*>()) {
2091    FTSInfo->setTemplateSpecializationKind(TSK);
2092    if (TSK != TSK_ExplicitSpecialization &&
2093        PointOfInstantiation.isValid() &&
2094        FTSInfo->getPointOfInstantiation().isInvalid())
2095      FTSInfo->setPointOfInstantiation(PointOfInstantiation);
2096  } else if (MemberSpecializationInfo *MSInfo
2097             = TemplateOrSpecialization.dyn_cast<MemberSpecializationInfo*>()) {
2098    MSInfo->setTemplateSpecializationKind(TSK);
2099    if (TSK != TSK_ExplicitSpecialization &&
2100        PointOfInstantiation.isValid() &&
2101        MSInfo->getPointOfInstantiation().isInvalid())
2102      MSInfo->setPointOfInstantiation(PointOfInstantiation);
2103  } else
2104    assert(false && "Function cannot have a template specialization kind");
2105}
2106
2107SourceLocation FunctionDecl::getPointOfInstantiation() const {
2108  if (FunctionTemplateSpecializationInfo *FTSInfo
2109        = TemplateOrSpecialization.dyn_cast<
2110                                        FunctionTemplateSpecializationInfo*>())
2111    return FTSInfo->getPointOfInstantiation();
2112  else if (MemberSpecializationInfo *MSInfo
2113             = TemplateOrSpecialization.dyn_cast<MemberSpecializationInfo*>())
2114    return MSInfo->getPointOfInstantiation();
2115
2116  return SourceLocation();
2117}
2118
2119bool FunctionDecl::isOutOfLine() const {
2120  if (Decl::isOutOfLine())
2121    return true;
2122
2123  // If this function was instantiated from a member function of a
2124  // class template, check whether that member function was defined out-of-line.
2125  if (FunctionDecl *FD = getInstantiatedFromMemberFunction()) {
2126    const FunctionDecl *Definition;
2127    if (FD->hasBody(Definition))
2128      return Definition->isOutOfLine();
2129  }
2130
2131  // If this function was instantiated from a function template,
2132  // check whether that function template was defined out-of-line.
2133  if (FunctionTemplateDecl *FunTmpl = getPrimaryTemplate()) {
2134    const FunctionDecl *Definition;
2135    if (FunTmpl->getTemplatedDecl()->hasBody(Definition))
2136      return Definition->isOutOfLine();
2137  }
2138
2139  return false;
2140}
2141
2142SourceRange FunctionDecl::getSourceRange() const {
2143  return SourceRange(getOuterLocStart(), EndRangeLoc);
2144}
2145
2146//===----------------------------------------------------------------------===//
2147// FieldDecl Implementation
2148//===----------------------------------------------------------------------===//
2149
2150FieldDecl *FieldDecl::Create(const ASTContext &C, DeclContext *DC,
2151                             SourceLocation StartLoc, SourceLocation IdLoc,
2152                             IdentifierInfo *Id, QualType T,
2153                             TypeSourceInfo *TInfo, Expr *BW, bool Mutable,
2154                             bool HasInit) {
2155  return new (C) FieldDecl(Decl::Field, DC, StartLoc, IdLoc, Id, T, TInfo,
2156                           BW, Mutable, HasInit);
2157}
2158
2159bool FieldDecl::isAnonymousStructOrUnion() const {
2160  if (!isImplicit() || getDeclName())
2161    return false;
2162
2163  if (const RecordType *Record = getType()->getAs<RecordType>())
2164    return Record->getDecl()->isAnonymousStructOrUnion();
2165
2166  return false;
2167}
2168
2169unsigned FieldDecl::getFieldIndex() const {
2170  if (CachedFieldIndex) return CachedFieldIndex - 1;
2171
2172  unsigned index = 0;
2173  const RecordDecl *RD = getParent();
2174  const FieldDecl *LastFD = 0;
2175  bool IsMsStruct = RD->hasAttr<MsStructAttr>();
2176
2177  RecordDecl::field_iterator i = RD->field_begin(), e = RD->field_end();
2178  while (true) {
2179    assert(i != e && "failed to find field in parent!");
2180    if (*i == this)
2181      break;
2182
2183    if (IsMsStruct) {
2184      // Zero-length bitfields following non-bitfield members are ignored.
2185      if (getASTContext().ZeroBitfieldFollowsNonBitfield((*i), LastFD)) {
2186        ++i;
2187        continue;
2188      }
2189      LastFD = (*i);
2190    }
2191    ++i;
2192    ++index;
2193  }
2194
2195  CachedFieldIndex = index + 1;
2196  return index;
2197}
2198
2199SourceRange FieldDecl::getSourceRange() const {
2200  if (const Expr *E = InitializerOrBitWidth.getPointer())
2201    return SourceRange(getInnerLocStart(), E->getLocEnd());
2202  return DeclaratorDecl::getSourceRange();
2203}
2204
2205void FieldDecl::setInClassInitializer(Expr *Init) {
2206  assert(!InitializerOrBitWidth.getPointer() &&
2207         "bit width or initializer already set");
2208  InitializerOrBitWidth.setPointer(Init);
2209  InitializerOrBitWidth.setInt(0);
2210}
2211
2212//===----------------------------------------------------------------------===//
2213// TagDecl Implementation
2214//===----------------------------------------------------------------------===//
2215
2216SourceLocation TagDecl::getOuterLocStart() const {
2217  return getTemplateOrInnerLocStart(this);
2218}
2219
2220SourceRange TagDecl::getSourceRange() const {
2221  SourceLocation E = RBraceLoc.isValid() ? RBraceLoc : getLocation();
2222  return SourceRange(getOuterLocStart(), E);
2223}
2224
2225TagDecl* TagDecl::getCanonicalDecl() {
2226  return getFirstDeclaration();
2227}
2228
2229void TagDecl::setTypedefNameForAnonDecl(TypedefNameDecl *TDD) {
2230  TypedefNameDeclOrQualifier = TDD;
2231  if (TypeForDecl)
2232    const_cast<Type*>(TypeForDecl)->ClearLinkageCache();
2233  ClearLinkageCache();
2234}
2235
2236void TagDecl::startDefinition() {
2237  IsBeingDefined = true;
2238
2239  if (isa<CXXRecordDecl>(this)) {
2240    CXXRecordDecl *D = cast<CXXRecordDecl>(this);
2241    struct CXXRecordDecl::DefinitionData *Data =
2242      new (getASTContext()) struct CXXRecordDecl::DefinitionData(D);
2243    for (redecl_iterator I = redecls_begin(), E = redecls_end(); I != E; ++I)
2244      cast<CXXRecordDecl>(*I)->DefinitionData = Data;
2245  }
2246}
2247
2248void TagDecl::completeDefinition() {
2249  assert((!isa<CXXRecordDecl>(this) ||
2250          cast<CXXRecordDecl>(this)->hasDefinition()) &&
2251         "definition completed but not started");
2252
2253  IsDefinition = true;
2254  IsBeingDefined = false;
2255
2256  if (ASTMutationListener *L = getASTMutationListener())
2257    L->CompletedTagDefinition(this);
2258}
2259
2260TagDecl* TagDecl::getDefinition() const {
2261  if (isDefinition())
2262    return const_cast<TagDecl *>(this);
2263  if (const CXXRecordDecl *CXXRD = dyn_cast<CXXRecordDecl>(this))
2264    return CXXRD->getDefinition();
2265
2266  for (redecl_iterator R = redecls_begin(), REnd = redecls_end();
2267       R != REnd; ++R)
2268    if (R->isDefinition())
2269      return *R;
2270
2271  return 0;
2272}
2273
2274void TagDecl::setQualifierInfo(NestedNameSpecifierLoc QualifierLoc) {
2275  if (QualifierLoc) {
2276    // Make sure the extended qualifier info is allocated.
2277    if (!hasExtInfo())
2278      TypedefNameDeclOrQualifier = new (getASTContext()) ExtInfo;
2279    // Set qualifier info.
2280    getExtInfo()->QualifierLoc = QualifierLoc;
2281  }
2282  else {
2283    // Here Qualifier == 0, i.e., we are removing the qualifier (if any).
2284    if (hasExtInfo()) {
2285      if (getExtInfo()->NumTemplParamLists == 0) {
2286        getASTContext().Deallocate(getExtInfo());
2287        TypedefNameDeclOrQualifier = (TypedefNameDecl*) 0;
2288      }
2289      else
2290        getExtInfo()->QualifierLoc = QualifierLoc;
2291    }
2292  }
2293}
2294
2295void TagDecl::setTemplateParameterListsInfo(ASTContext &Context,
2296                                            unsigned NumTPLists,
2297                                            TemplateParameterList **TPLists) {
2298  assert(NumTPLists > 0);
2299  // Make sure the extended decl info is allocated.
2300  if (!hasExtInfo())
2301    // Allocate external info struct.
2302    TypedefNameDeclOrQualifier = new (getASTContext()) ExtInfo;
2303  // Set the template parameter lists info.
2304  getExtInfo()->setTemplateParameterListsInfo(Context, NumTPLists, TPLists);
2305}
2306
2307//===----------------------------------------------------------------------===//
2308// EnumDecl Implementation
2309//===----------------------------------------------------------------------===//
2310
2311EnumDecl *EnumDecl::Create(ASTContext &C, DeclContext *DC,
2312                           SourceLocation StartLoc, SourceLocation IdLoc,
2313                           IdentifierInfo *Id,
2314                           EnumDecl *PrevDecl, bool IsScoped,
2315                           bool IsScopedUsingClassTag, bool IsFixed) {
2316  EnumDecl *Enum = new (C) EnumDecl(DC, StartLoc, IdLoc, Id, PrevDecl,
2317                                    IsScoped, IsScopedUsingClassTag, IsFixed);
2318  C.getTypeDeclType(Enum, PrevDecl);
2319  return Enum;
2320}
2321
2322EnumDecl *EnumDecl::Create(ASTContext &C, EmptyShell Empty) {
2323  return new (C) EnumDecl(0, SourceLocation(), SourceLocation(), 0, 0,
2324                          false, false, false);
2325}
2326
2327void EnumDecl::completeDefinition(QualType NewType,
2328                                  QualType NewPromotionType,
2329                                  unsigned NumPositiveBits,
2330                                  unsigned NumNegativeBits) {
2331  assert(!isDefinition() && "Cannot redefine enums!");
2332  if (!IntegerType)
2333    IntegerType = NewType.getTypePtr();
2334  PromotionType = NewPromotionType;
2335  setNumPositiveBits(NumPositiveBits);
2336  setNumNegativeBits(NumNegativeBits);
2337  TagDecl::completeDefinition();
2338}
2339
2340//===----------------------------------------------------------------------===//
2341// RecordDecl Implementation
2342//===----------------------------------------------------------------------===//
2343
2344RecordDecl::RecordDecl(Kind DK, TagKind TK, DeclContext *DC,
2345                       SourceLocation StartLoc, SourceLocation IdLoc,
2346                       IdentifierInfo *Id, RecordDecl *PrevDecl)
2347  : TagDecl(DK, TK, DC, IdLoc, Id, PrevDecl, StartLoc) {
2348  HasFlexibleArrayMember = false;
2349  AnonymousStructOrUnion = false;
2350  HasObjectMember = false;
2351  LoadedFieldsFromExternalStorage = false;
2352  assert(classof(static_cast<Decl*>(this)) && "Invalid Kind!");
2353}
2354
2355RecordDecl *RecordDecl::Create(const ASTContext &C, TagKind TK, DeclContext *DC,
2356                               SourceLocation StartLoc, SourceLocation IdLoc,
2357                               IdentifierInfo *Id, RecordDecl* PrevDecl) {
2358  RecordDecl* R = new (C) RecordDecl(Record, TK, DC, StartLoc, IdLoc, Id,
2359                                     PrevDecl);
2360  C.getTypeDeclType(R, PrevDecl);
2361  return R;
2362}
2363
2364RecordDecl *RecordDecl::Create(const ASTContext &C, EmptyShell Empty) {
2365  return new (C) RecordDecl(Record, TTK_Struct, 0, SourceLocation(),
2366                            SourceLocation(), 0, 0);
2367}
2368
2369bool RecordDecl::isInjectedClassName() const {
2370  return isImplicit() && getDeclName() && getDeclContext()->isRecord() &&
2371    cast<RecordDecl>(getDeclContext())->getDeclName() == getDeclName();
2372}
2373
2374RecordDecl::field_iterator RecordDecl::field_begin() const {
2375  if (hasExternalLexicalStorage() && !LoadedFieldsFromExternalStorage)
2376    LoadFieldsFromExternalStorage();
2377
2378  return field_iterator(decl_iterator(FirstDecl));
2379}
2380
2381/// completeDefinition - Notes that the definition of this type is now
2382/// complete.
2383void RecordDecl::completeDefinition() {
2384  assert(!isDefinition() && "Cannot redefine record!");
2385  TagDecl::completeDefinition();
2386}
2387
2388void RecordDecl::LoadFieldsFromExternalStorage() const {
2389  ExternalASTSource *Source = getASTContext().getExternalSource();
2390  assert(hasExternalLexicalStorage() && Source && "No external storage?");
2391
2392  // Notify that we have a RecordDecl doing some initialization.
2393  ExternalASTSource::Deserializing TheFields(Source);
2394
2395  SmallVector<Decl*, 64> Decls;
2396  LoadedFieldsFromExternalStorage = true;
2397  switch (Source->FindExternalLexicalDeclsBy<FieldDecl>(this, Decls)) {
2398  case ELR_Success:
2399    break;
2400
2401  case ELR_AlreadyLoaded:
2402  case ELR_Failure:
2403    return;
2404  }
2405
2406#ifndef NDEBUG
2407  // Check that all decls we got were FieldDecls.
2408  for (unsigned i=0, e=Decls.size(); i != e; ++i)
2409    assert(isa<FieldDecl>(Decls[i]));
2410#endif
2411
2412  if (Decls.empty())
2413    return;
2414
2415  llvm::tie(FirstDecl, LastDecl) = BuildDeclChain(Decls);
2416}
2417
2418//===----------------------------------------------------------------------===//
2419// BlockDecl Implementation
2420//===----------------------------------------------------------------------===//
2421
2422void BlockDecl::setParams(ParmVarDecl **NewParamInfo,
2423                          unsigned NParms) {
2424  assert(ParamInfo == 0 && "Already has param info!");
2425
2426  // Zero params -> null pointer.
2427  if (NParms) {
2428    NumParams = NParms;
2429    void *Mem = getASTContext().Allocate(sizeof(ParmVarDecl*)*NumParams);
2430    ParamInfo = new (Mem) ParmVarDecl*[NumParams];
2431    memcpy(ParamInfo, NewParamInfo, sizeof(ParmVarDecl*)*NumParams);
2432  }
2433}
2434
2435void BlockDecl::setCaptures(ASTContext &Context,
2436                            const Capture *begin,
2437                            const Capture *end,
2438                            bool capturesCXXThis) {
2439  CapturesCXXThis = capturesCXXThis;
2440
2441  if (begin == end) {
2442    NumCaptures = 0;
2443    Captures = 0;
2444    return;
2445  }
2446
2447  NumCaptures = end - begin;
2448
2449  // Avoid new Capture[] because we don't want to provide a default
2450  // constructor.
2451  size_t allocationSize = NumCaptures * sizeof(Capture);
2452  void *buffer = Context.Allocate(allocationSize, /*alignment*/sizeof(void*));
2453  memcpy(buffer, begin, allocationSize);
2454  Captures = static_cast<Capture*>(buffer);
2455}
2456
2457bool BlockDecl::capturesVariable(const VarDecl *variable) const {
2458  for (capture_const_iterator
2459         i = capture_begin(), e = capture_end(); i != e; ++i)
2460    // Only auto vars can be captured, so no redeclaration worries.
2461    if (i->getVariable() == variable)
2462      return true;
2463
2464  return false;
2465}
2466
2467SourceRange BlockDecl::getSourceRange() const {
2468  return SourceRange(getLocation(), Body? Body->getLocEnd() : getLocation());
2469}
2470
2471//===----------------------------------------------------------------------===//
2472// Other Decl Allocation/Deallocation Method Implementations
2473//===----------------------------------------------------------------------===//
2474
2475TranslationUnitDecl *TranslationUnitDecl::Create(ASTContext &C) {
2476  return new (C) TranslationUnitDecl(C);
2477}
2478
2479LabelDecl *LabelDecl::Create(ASTContext &C, DeclContext *DC,
2480                             SourceLocation IdentL, IdentifierInfo *II) {
2481  return new (C) LabelDecl(DC, IdentL, II, 0, IdentL);
2482}
2483
2484LabelDecl *LabelDecl::Create(ASTContext &C, DeclContext *DC,
2485                             SourceLocation IdentL, IdentifierInfo *II,
2486                             SourceLocation GnuLabelL) {
2487  assert(GnuLabelL != IdentL && "Use this only for GNU local labels");
2488  return new (C) LabelDecl(DC, IdentL, II, 0, GnuLabelL);
2489}
2490
2491
2492NamespaceDecl *NamespaceDecl::Create(ASTContext &C, DeclContext *DC,
2493                                     SourceLocation StartLoc,
2494                                     SourceLocation IdLoc, IdentifierInfo *Id) {
2495  return new (C) NamespaceDecl(DC, StartLoc, IdLoc, Id);
2496}
2497
2498NamespaceDecl *NamespaceDecl::getNextNamespace() {
2499  return dyn_cast_or_null<NamespaceDecl>(
2500                       NextNamespace.get(getASTContext().getExternalSource()));
2501}
2502
2503ImplicitParamDecl *ImplicitParamDecl::Create(ASTContext &C, DeclContext *DC,
2504                                             SourceLocation IdLoc,
2505                                             IdentifierInfo *Id,
2506                                             QualType Type) {
2507  return new (C) ImplicitParamDecl(DC, IdLoc, Id, Type);
2508}
2509
2510FunctionDecl *FunctionDecl::Create(ASTContext &C, DeclContext *DC,
2511                                   SourceLocation StartLoc,
2512                                   const DeclarationNameInfo &NameInfo,
2513                                   QualType T, TypeSourceInfo *TInfo,
2514                                   StorageClass SC, StorageClass SCAsWritten,
2515                                   bool isInlineSpecified,
2516                                   bool hasWrittenPrototype) {
2517  FunctionDecl *New = new (C) FunctionDecl(Function, DC, StartLoc, NameInfo,
2518                                           T, TInfo, SC, SCAsWritten,
2519                                           isInlineSpecified);
2520  New->HasWrittenPrototype = hasWrittenPrototype;
2521  return New;
2522}
2523
2524BlockDecl *BlockDecl::Create(ASTContext &C, DeclContext *DC, SourceLocation L) {
2525  return new (C) BlockDecl(DC, L);
2526}
2527
2528EnumConstantDecl *EnumConstantDecl::Create(ASTContext &C, EnumDecl *CD,
2529                                           SourceLocation L,
2530                                           IdentifierInfo *Id, QualType T,
2531                                           Expr *E, const llvm::APSInt &V) {
2532  return new (C) EnumConstantDecl(CD, L, Id, T, E, V);
2533}
2534
2535IndirectFieldDecl *
2536IndirectFieldDecl::Create(ASTContext &C, DeclContext *DC, SourceLocation L,
2537                          IdentifierInfo *Id, QualType T, NamedDecl **CH,
2538                          unsigned CHS) {
2539  return new (C) IndirectFieldDecl(DC, L, Id, T, CH, CHS);
2540}
2541
2542SourceRange EnumConstantDecl::getSourceRange() const {
2543  SourceLocation End = getLocation();
2544  if (Init)
2545    End = Init->getLocEnd();
2546  return SourceRange(getLocation(), End);
2547}
2548
2549TypedefDecl *TypedefDecl::Create(ASTContext &C, DeclContext *DC,
2550                                 SourceLocation StartLoc, SourceLocation IdLoc,
2551                                 IdentifierInfo *Id, TypeSourceInfo *TInfo) {
2552  return new (C) TypedefDecl(DC, StartLoc, IdLoc, Id, TInfo);
2553}
2554
2555TypeAliasDecl *TypeAliasDecl::Create(ASTContext &C, DeclContext *DC,
2556                                     SourceLocation StartLoc,
2557                                     SourceLocation IdLoc, IdentifierInfo *Id,
2558                                     TypeSourceInfo *TInfo) {
2559  return new (C) TypeAliasDecl(DC, StartLoc, IdLoc, Id, TInfo);
2560}
2561
2562SourceRange TypedefDecl::getSourceRange() const {
2563  SourceLocation RangeEnd = getLocation();
2564  if (TypeSourceInfo *TInfo = getTypeSourceInfo()) {
2565    if (typeIsPostfix(TInfo->getType()))
2566      RangeEnd = TInfo->getTypeLoc().getSourceRange().getEnd();
2567  }
2568  return SourceRange(getLocStart(), RangeEnd);
2569}
2570
2571SourceRange TypeAliasDecl::getSourceRange() const {
2572  SourceLocation RangeEnd = getLocStart();
2573  if (TypeSourceInfo *TInfo = getTypeSourceInfo())
2574    RangeEnd = TInfo->getTypeLoc().getSourceRange().getEnd();
2575  return SourceRange(getLocStart(), RangeEnd);
2576}
2577
2578FileScopeAsmDecl *FileScopeAsmDecl::Create(ASTContext &C, DeclContext *DC,
2579                                           StringLiteral *Str,
2580                                           SourceLocation AsmLoc,
2581                                           SourceLocation RParenLoc) {
2582  return new (C) FileScopeAsmDecl(DC, Str, AsmLoc, RParenLoc);
2583}
2584