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/ASTContext.h"
16#include "clang/AST/ASTLambda.h"
17#include "clang/AST/ASTMutationListener.h"
18#include "clang/AST/Attr.h"
19#include "clang/AST/DeclCXX.h"
20#include "clang/AST/DeclObjC.h"
21#include "clang/AST/DeclTemplate.h"
22#include "clang/AST/Expr.h"
23#include "clang/AST/ExprCXX.h"
24#include "clang/AST/PrettyPrinter.h"
25#include "clang/AST/Stmt.h"
26#include "clang/AST/TypeLoc.h"
27#include "clang/Basic/Builtins.h"
28#include "clang/Basic/IdentifierTable.h"
29#include "clang/Basic/Module.h"
30#include "clang/Basic/Specifiers.h"
31#include "clang/Basic/TargetInfo.h"
32#include "llvm/Support/ErrorHandling.h"
33#include <algorithm>
34
35using namespace clang;
36
37Decl *clang::getPrimaryMergedDecl(Decl *D) {
38  return D->getASTContext().getPrimaryMergedDecl(D);
39}
40
41//===----------------------------------------------------------------------===//
42// NamedDecl Implementation
43//===----------------------------------------------------------------------===//
44
45// Visibility rules aren't rigorously externally specified, but here
46// are the basic principles behind what we implement:
47//
48// 1. An explicit visibility attribute is generally a direct expression
49// of the user's intent and should be honored.  Only the innermost
50// visibility attribute applies.  If no visibility attribute applies,
51// global visibility settings are considered.
52//
53// 2. There is one caveat to the above: on or in a template pattern,
54// an explicit visibility attribute is just a default rule, and
55// visibility can be decreased by the visibility of template
56// arguments.  But this, too, has an exception: an attribute on an
57// explicit specialization or instantiation causes all the visibility
58// restrictions of the template arguments to be ignored.
59//
60// 3. A variable that does not otherwise have explicit visibility can
61// be restricted by the visibility of its type.
62//
63// 4. A visibility restriction is explicit if it comes from an
64// attribute (or something like it), not a global visibility setting.
65// When emitting a reference to an external symbol, visibility
66// restrictions are ignored unless they are explicit.
67//
68// 5. When computing the visibility of a non-type, including a
69// non-type member of a class, only non-type visibility restrictions
70// are considered: the 'visibility' attribute, global value-visibility
71// settings, and a few special cases like __private_extern.
72//
73// 6. When computing the visibility of a type, including a type member
74// of a class, only type visibility restrictions are considered:
75// the 'type_visibility' attribute and global type-visibility settings.
76// However, a 'visibility' attribute counts as a 'type_visibility'
77// attribute on any declaration that only has the former.
78//
79// The visibility of a "secondary" entity, like a template argument,
80// is computed using the kind of that entity, not the kind of the
81// primary entity for which we are computing visibility.  For example,
82// the visibility of a specialization of either of these templates:
83//   template <class T, bool (&compare)(T, X)> bool has_match(list<T>, X);
84//   template <class T, bool (&compare)(T, X)> class matcher;
85// is restricted according to the type visibility of the argument 'T',
86// the type visibility of 'bool(&)(T,X)', and the value visibility of
87// the argument function 'compare'.  That 'has_match' is a value
88// and 'matcher' is a type only matters when looking for attributes
89// and settings from the immediate context.
90
91const unsigned IgnoreExplicitVisibilityBit = 2;
92const unsigned IgnoreAllVisibilityBit = 4;
93
94/// Kinds of LV computation.  The linkage side of the computation is
95/// always the same, but different things can change how visibility is
96/// computed.
97enum LVComputationKind {
98  /// Do an LV computation for, ultimately, a type.
99  /// Visibility may be restricted by type visibility settings and
100  /// the visibility of template arguments.
101  LVForType = NamedDecl::VisibilityForType,
102
103  /// Do an LV computation for, ultimately, a non-type declaration.
104  /// Visibility may be restricted by value visibility settings and
105  /// the visibility of template arguments.
106  LVForValue = NamedDecl::VisibilityForValue,
107
108  /// Do an LV computation for, ultimately, a type that already has
109  /// some sort of explicit visibility.  Visibility may only be
110  /// restricted by the visibility of template arguments.
111  LVForExplicitType = (LVForType | IgnoreExplicitVisibilityBit),
112
113  /// Do an LV computation for, ultimately, a non-type declaration
114  /// that already has some sort of explicit visibility.  Visibility
115  /// may only be restricted by the visibility of template arguments.
116  LVForExplicitValue = (LVForValue | IgnoreExplicitVisibilityBit),
117
118  /// Do an LV computation when we only care about the linkage.
119  LVForLinkageOnly =
120      LVForValue | IgnoreExplicitVisibilityBit | IgnoreAllVisibilityBit
121};
122
123/// Does this computation kind permit us to consider additional
124/// visibility settings from attributes and the like?
125static bool hasExplicitVisibilityAlready(LVComputationKind computation) {
126  return ((unsigned(computation) & IgnoreExplicitVisibilityBit) != 0);
127}
128
129/// Given an LVComputationKind, return one of the same type/value sort
130/// that records that it already has explicit visibility.
131static LVComputationKind
132withExplicitVisibilityAlready(LVComputationKind oldKind) {
133  LVComputationKind newKind =
134    static_cast<LVComputationKind>(unsigned(oldKind) |
135                                   IgnoreExplicitVisibilityBit);
136  assert(oldKind != LVForType          || newKind == LVForExplicitType);
137  assert(oldKind != LVForValue         || newKind == LVForExplicitValue);
138  assert(oldKind != LVForExplicitType  || newKind == LVForExplicitType);
139  assert(oldKind != LVForExplicitValue || newKind == LVForExplicitValue);
140  return newKind;
141}
142
143static Optional<Visibility> getExplicitVisibility(const NamedDecl *D,
144                                                  LVComputationKind kind) {
145  assert(!hasExplicitVisibilityAlready(kind) &&
146         "asking for explicit visibility when we shouldn't be");
147  return D->getExplicitVisibility((NamedDecl::ExplicitVisibilityKind) kind);
148}
149
150/// Is the given declaration a "type" or a "value" for the purposes of
151/// visibility computation?
152static bool usesTypeVisibility(const NamedDecl *D) {
153  return isa<TypeDecl>(D) ||
154         isa<ClassTemplateDecl>(D) ||
155         isa<ObjCInterfaceDecl>(D);
156}
157
158/// Does the given declaration have member specialization information,
159/// and if so, is it an explicit specialization?
160template <class T> static typename
161std::enable_if<!std::is_base_of<RedeclarableTemplateDecl, T>::value, bool>::type
162isExplicitMemberSpecialization(const T *D) {
163  if (const MemberSpecializationInfo *member =
164        D->getMemberSpecializationInfo()) {
165    return member->isExplicitSpecialization();
166  }
167  return false;
168}
169
170/// For templates, this question is easier: a member template can't be
171/// explicitly instantiated, so there's a single bit indicating whether
172/// or not this is an explicit member specialization.
173static bool isExplicitMemberSpecialization(const RedeclarableTemplateDecl *D) {
174  return D->isMemberSpecialization();
175}
176
177/// Given a visibility attribute, return the explicit visibility
178/// associated with it.
179template <class T>
180static Visibility getVisibilityFromAttr(const T *attr) {
181  switch (attr->getVisibility()) {
182  case T::Default:
183    return DefaultVisibility;
184  case T::Hidden:
185    return HiddenVisibility;
186  case T::Protected:
187    return ProtectedVisibility;
188  }
189  llvm_unreachable("bad visibility kind");
190}
191
192/// Return the explicit visibility of the given declaration.
193static Optional<Visibility> getVisibilityOf(const NamedDecl *D,
194                                    NamedDecl::ExplicitVisibilityKind kind) {
195  // If we're ultimately computing the visibility of a type, look for
196  // a 'type_visibility' attribute before looking for 'visibility'.
197  if (kind == NamedDecl::VisibilityForType) {
198    if (const TypeVisibilityAttr *A = D->getAttr<TypeVisibilityAttr>()) {
199      return getVisibilityFromAttr(A);
200    }
201  }
202
203  // If this declaration has an explicit visibility attribute, use it.
204  if (const VisibilityAttr *A = D->getAttr<VisibilityAttr>()) {
205    return getVisibilityFromAttr(A);
206  }
207
208  // If we're on Mac OS X, an 'availability' for Mac OS X attribute
209  // implies visibility(default).
210  if (D->getASTContext().getTargetInfo().getTriple().isOSDarwin()) {
211    for (const auto *A : D->specific_attrs<AvailabilityAttr>())
212      if (A->getPlatform()->getName().equals("macosx"))
213        return DefaultVisibility;
214  }
215
216  return None;
217}
218
219static LinkageInfo
220getLVForType(const Type &T, LVComputationKind computation) {
221  if (computation == LVForLinkageOnly)
222    return LinkageInfo(T.getLinkage(), DefaultVisibility, true);
223  return T.getLinkageAndVisibility();
224}
225
226/// \brief Get the most restrictive linkage for the types in the given
227/// template parameter list.  For visibility purposes, template
228/// parameters are part of the signature of a template.
229static LinkageInfo
230getLVForTemplateParameterList(const TemplateParameterList *Params,
231                              LVComputationKind computation) {
232  LinkageInfo LV;
233  for (const NamedDecl *P : *Params) {
234    // Template type parameters are the most common and never
235    // contribute to visibility, pack or not.
236    if (isa<TemplateTypeParmDecl>(P))
237      continue;
238
239    // Non-type template parameters can be restricted by the value type, e.g.
240    //   template <enum X> class A { ... };
241    // We have to be careful here, though, because we can be dealing with
242    // dependent types.
243    if (const NonTypeTemplateParmDecl *NTTP =
244            dyn_cast<NonTypeTemplateParmDecl>(P)) {
245      // Handle the non-pack case first.
246      if (!NTTP->isExpandedParameterPack()) {
247        if (!NTTP->getType()->isDependentType()) {
248          LV.merge(getLVForType(*NTTP->getType(), computation));
249        }
250        continue;
251      }
252
253      // Look at all the types in an expanded pack.
254      for (unsigned i = 0, n = NTTP->getNumExpansionTypes(); i != n; ++i) {
255        QualType type = NTTP->getExpansionType(i);
256        if (!type->isDependentType())
257          LV.merge(type->getLinkageAndVisibility());
258      }
259      continue;
260    }
261
262    // Template template parameters can be restricted by their
263    // template parameters, recursively.
264    const TemplateTemplateParmDecl *TTP = cast<TemplateTemplateParmDecl>(P);
265
266    // Handle the non-pack case first.
267    if (!TTP->isExpandedParameterPack()) {
268      LV.merge(getLVForTemplateParameterList(TTP->getTemplateParameters(),
269                                             computation));
270      continue;
271    }
272
273    // Look at all expansions in an expanded pack.
274    for (unsigned i = 0, n = TTP->getNumExpansionTemplateParameters();
275           i != n; ++i) {
276      LV.merge(getLVForTemplateParameterList(
277          TTP->getExpansionTemplateParameters(i), computation));
278    }
279  }
280
281  return LV;
282}
283
284/// getLVForDecl - Get the linkage and visibility for the given declaration.
285static LinkageInfo getLVForDecl(const NamedDecl *D,
286                                LVComputationKind computation);
287
288static const Decl *getOutermostFuncOrBlockContext(const Decl *D) {
289  const Decl *Ret = nullptr;
290  const DeclContext *DC = D->getDeclContext();
291  while (DC->getDeclKind() != Decl::TranslationUnit) {
292    if (isa<FunctionDecl>(DC) || isa<BlockDecl>(DC))
293      Ret = cast<Decl>(DC);
294    DC = DC->getParent();
295  }
296  return Ret;
297}
298
299/// \brief Get the most restrictive linkage for the types and
300/// declarations in the given template argument list.
301///
302/// Note that we don't take an LVComputationKind because we always
303/// want to honor the visibility of template arguments in the same way.
304static LinkageInfo getLVForTemplateArgumentList(ArrayRef<TemplateArgument> Args,
305                                                LVComputationKind computation) {
306  LinkageInfo LV;
307
308  for (const TemplateArgument &Arg : Args) {
309    switch (Arg.getKind()) {
310    case TemplateArgument::Null:
311    case TemplateArgument::Integral:
312    case TemplateArgument::Expression:
313      continue;
314
315    case TemplateArgument::Type:
316      LV.merge(getLVForType(*Arg.getAsType(), computation));
317      continue;
318
319    case TemplateArgument::Declaration:
320      if (NamedDecl *ND = dyn_cast<NamedDecl>(Arg.getAsDecl())) {
321        assert(!usesTypeVisibility(ND));
322        LV.merge(getLVForDecl(ND, computation));
323      }
324      continue;
325
326    case TemplateArgument::NullPtr:
327      LV.merge(Arg.getNullPtrType()->getLinkageAndVisibility());
328      continue;
329
330    case TemplateArgument::Template:
331    case TemplateArgument::TemplateExpansion:
332      if (TemplateDecl *Template =
333              Arg.getAsTemplateOrTemplatePattern().getAsTemplateDecl())
334        LV.merge(getLVForDecl(Template, computation));
335      continue;
336
337    case TemplateArgument::Pack:
338      LV.merge(getLVForTemplateArgumentList(Arg.getPackAsArray(), computation));
339      continue;
340    }
341    llvm_unreachable("bad template argument kind");
342  }
343
344  return LV;
345}
346
347static LinkageInfo
348getLVForTemplateArgumentList(const TemplateArgumentList &TArgs,
349                             LVComputationKind computation) {
350  return getLVForTemplateArgumentList(TArgs.asArray(), computation);
351}
352
353static bool shouldConsiderTemplateVisibility(const FunctionDecl *fn,
354                        const FunctionTemplateSpecializationInfo *specInfo) {
355  // Include visibility from the template parameters and arguments
356  // only if this is not an explicit instantiation or specialization
357  // with direct explicit visibility.  (Implicit instantiations won't
358  // have a direct attribute.)
359  if (!specInfo->isExplicitInstantiationOrSpecialization())
360    return true;
361
362  return !fn->hasAttr<VisibilityAttr>();
363}
364
365/// Merge in template-related linkage and visibility for the given
366/// function template specialization.
367///
368/// We don't need a computation kind here because we can assume
369/// LVForValue.
370///
371/// \param[out] LV the computation to use for the parent
372static void
373mergeTemplateLV(LinkageInfo &LV, const FunctionDecl *fn,
374                const FunctionTemplateSpecializationInfo *specInfo,
375                LVComputationKind computation) {
376  bool considerVisibility =
377    shouldConsiderTemplateVisibility(fn, specInfo);
378
379  // Merge information from the template parameters.
380  FunctionTemplateDecl *temp = specInfo->getTemplate();
381  LinkageInfo tempLV =
382    getLVForTemplateParameterList(temp->getTemplateParameters(), computation);
383  LV.mergeMaybeWithVisibility(tempLV, considerVisibility);
384
385  // Merge information from the template arguments.
386  const TemplateArgumentList &templateArgs = *specInfo->TemplateArguments;
387  LinkageInfo argsLV = getLVForTemplateArgumentList(templateArgs, computation);
388  LV.mergeMaybeWithVisibility(argsLV, considerVisibility);
389}
390
391/// Does the given declaration have a direct visibility attribute
392/// that would match the given rules?
393static bool hasDirectVisibilityAttribute(const NamedDecl *D,
394                                         LVComputationKind computation) {
395  switch (computation) {
396  case LVForType:
397  case LVForExplicitType:
398    if (D->hasAttr<TypeVisibilityAttr>())
399      return true;
400    // fallthrough
401  case LVForValue:
402  case LVForExplicitValue:
403    if (D->hasAttr<VisibilityAttr>())
404      return true;
405    return false;
406  case LVForLinkageOnly:
407    return false;
408  }
409  llvm_unreachable("bad visibility computation kind");
410}
411
412/// Should we consider visibility associated with the template
413/// arguments and parameters of the given class template specialization?
414static bool shouldConsiderTemplateVisibility(
415                                 const ClassTemplateSpecializationDecl *spec,
416                                 LVComputationKind computation) {
417  // Include visibility from the template parameters and arguments
418  // only if this is not an explicit instantiation or specialization
419  // with direct explicit visibility (and note that implicit
420  // instantiations won't have a direct attribute).
421  //
422  // Furthermore, we want to ignore template parameters and arguments
423  // for an explicit specialization when computing the visibility of a
424  // member thereof with explicit visibility.
425  //
426  // This is a bit complex; let's unpack it.
427  //
428  // An explicit class specialization is an independent, top-level
429  // declaration.  As such, if it or any of its members has an
430  // explicit visibility attribute, that must directly express the
431  // user's intent, and we should honor it.  The same logic applies to
432  // an explicit instantiation of a member of such a thing.
433
434  // Fast path: if this is not an explicit instantiation or
435  // specialization, we always want to consider template-related
436  // visibility restrictions.
437  if (!spec->isExplicitInstantiationOrSpecialization())
438    return true;
439
440  // This is the 'member thereof' check.
441  if (spec->isExplicitSpecialization() &&
442      hasExplicitVisibilityAlready(computation))
443    return false;
444
445  return !hasDirectVisibilityAttribute(spec, computation);
446}
447
448/// Merge in template-related linkage and visibility for the given
449/// class template specialization.
450static void mergeTemplateLV(LinkageInfo &LV,
451                            const ClassTemplateSpecializationDecl *spec,
452                            LVComputationKind computation) {
453  bool considerVisibility = shouldConsiderTemplateVisibility(spec, computation);
454
455  // Merge information from the template parameters, but ignore
456  // visibility if we're only considering template arguments.
457
458  ClassTemplateDecl *temp = spec->getSpecializedTemplate();
459  LinkageInfo tempLV =
460    getLVForTemplateParameterList(temp->getTemplateParameters(), computation);
461  LV.mergeMaybeWithVisibility(tempLV,
462           considerVisibility && !hasExplicitVisibilityAlready(computation));
463
464  // Merge information from the template arguments.  We ignore
465  // template-argument visibility if we've got an explicit
466  // instantiation with a visibility attribute.
467  const TemplateArgumentList &templateArgs = spec->getTemplateArgs();
468  LinkageInfo argsLV = getLVForTemplateArgumentList(templateArgs, computation);
469  if (considerVisibility)
470    LV.mergeVisibility(argsLV);
471  LV.mergeExternalVisibility(argsLV);
472}
473
474/// Should we consider visibility associated with the template
475/// arguments and parameters of the given variable template
476/// specialization? As usual, follow class template specialization
477/// logic up to initialization.
478static bool shouldConsiderTemplateVisibility(
479                                 const VarTemplateSpecializationDecl *spec,
480                                 LVComputationKind computation) {
481  // Include visibility from the template parameters and arguments
482  // only if this is not an explicit instantiation or specialization
483  // with direct explicit visibility (and note that implicit
484  // instantiations won't have a direct attribute).
485  if (!spec->isExplicitInstantiationOrSpecialization())
486    return true;
487
488  // An explicit variable specialization is an independent, top-level
489  // declaration.  As such, if it has an explicit visibility attribute,
490  // that must directly express the user's intent, and we should honor
491  // it.
492  if (spec->isExplicitSpecialization() &&
493      hasExplicitVisibilityAlready(computation))
494    return false;
495
496  return !hasDirectVisibilityAttribute(spec, computation);
497}
498
499/// Merge in template-related linkage and visibility for the given
500/// variable template specialization. As usual, follow class template
501/// specialization logic up to initialization.
502static void mergeTemplateLV(LinkageInfo &LV,
503                            const VarTemplateSpecializationDecl *spec,
504                            LVComputationKind computation) {
505  bool considerVisibility = shouldConsiderTemplateVisibility(spec, computation);
506
507  // Merge information from the template parameters, but ignore
508  // visibility if we're only considering template arguments.
509
510  VarTemplateDecl *temp = spec->getSpecializedTemplate();
511  LinkageInfo tempLV =
512    getLVForTemplateParameterList(temp->getTemplateParameters(), computation);
513  LV.mergeMaybeWithVisibility(tempLV,
514           considerVisibility && !hasExplicitVisibilityAlready(computation));
515
516  // Merge information from the template arguments.  We ignore
517  // template-argument visibility if we've got an explicit
518  // instantiation with a visibility attribute.
519  const TemplateArgumentList &templateArgs = spec->getTemplateArgs();
520  LinkageInfo argsLV = getLVForTemplateArgumentList(templateArgs, computation);
521  if (considerVisibility)
522    LV.mergeVisibility(argsLV);
523  LV.mergeExternalVisibility(argsLV);
524}
525
526static bool useInlineVisibilityHidden(const NamedDecl *D) {
527  // FIXME: we should warn if -fvisibility-inlines-hidden is used with c.
528  const LangOptions &Opts = D->getASTContext().getLangOpts();
529  if (!Opts.CPlusPlus || !Opts.InlineVisibilityHidden)
530    return false;
531
532  const FunctionDecl *FD = dyn_cast<FunctionDecl>(D);
533  if (!FD)
534    return false;
535
536  TemplateSpecializationKind TSK = TSK_Undeclared;
537  if (FunctionTemplateSpecializationInfo *spec
538      = FD->getTemplateSpecializationInfo()) {
539    TSK = spec->getTemplateSpecializationKind();
540  } else if (MemberSpecializationInfo *MSI =
541             FD->getMemberSpecializationInfo()) {
542    TSK = MSI->getTemplateSpecializationKind();
543  }
544
545  const FunctionDecl *Def = nullptr;
546  // InlineVisibilityHidden only applies to definitions, and
547  // isInlined() only gives meaningful answers on definitions
548  // anyway.
549  return TSK != TSK_ExplicitInstantiationDeclaration &&
550    TSK != TSK_ExplicitInstantiationDefinition &&
551    FD->hasBody(Def) && Def->isInlined() && !Def->hasAttr<GNUInlineAttr>();
552}
553
554template <typename T> static bool isFirstInExternCContext(T *D) {
555  const T *First = D->getFirstDecl();
556  return First->isInExternCContext();
557}
558
559static bool isSingleLineLanguageLinkage(const Decl &D) {
560  if (const LinkageSpecDecl *SD = dyn_cast<LinkageSpecDecl>(D.getDeclContext()))
561    if (!SD->hasBraces())
562      return true;
563  return false;
564}
565
566static LinkageInfo getLVForNamespaceScopeDecl(const NamedDecl *D,
567                                              LVComputationKind computation) {
568  assert(D->getDeclContext()->getRedeclContext()->isFileContext() &&
569         "Not a name having namespace scope");
570  ASTContext &Context = D->getASTContext();
571
572  // C++ [basic.link]p3:
573  //   A name having namespace scope (3.3.6) has internal linkage if it
574  //   is the name of
575  //     - an object, reference, function or function template that is
576  //       explicitly declared static; or,
577  // (This bullet corresponds to C99 6.2.2p3.)
578  if (const VarDecl *Var = dyn_cast<VarDecl>(D)) {
579    // Explicitly declared static.
580    if (Var->getStorageClass() == SC_Static)
581      return LinkageInfo::internal();
582
583    // - a non-volatile object or reference that is explicitly declared const
584    //   or constexpr and neither explicitly declared extern nor previously
585    //   declared to have external linkage; or (there is no equivalent in C99)
586    if (Context.getLangOpts().CPlusPlus &&
587        Var->getType().isConstQualified() &&
588        !Var->getType().isVolatileQualified()) {
589      const VarDecl *PrevVar = Var->getPreviousDecl();
590      if (PrevVar)
591        return getLVForDecl(PrevVar, computation);
592
593      if (Var->getStorageClass() != SC_Extern &&
594          Var->getStorageClass() != SC_PrivateExtern &&
595          !isSingleLineLanguageLinkage(*Var))
596        return LinkageInfo::internal();
597    }
598
599    for (const VarDecl *PrevVar = Var->getPreviousDecl(); PrevVar;
600         PrevVar = PrevVar->getPreviousDecl()) {
601      if (PrevVar->getStorageClass() == SC_PrivateExtern &&
602          Var->getStorageClass() == SC_None)
603        return PrevVar->getLinkageAndVisibility();
604      // Explicitly declared static.
605      if (PrevVar->getStorageClass() == SC_Static)
606        return LinkageInfo::internal();
607    }
608  } else if (const FunctionDecl *Function = D->getAsFunction()) {
609    // C++ [temp]p4:
610    //   A non-member function template can have internal linkage; any
611    //   other template name shall have external linkage.
612
613    // Explicitly declared static.
614    if (Function->getCanonicalDecl()->getStorageClass() == SC_Static)
615      return LinkageInfo(InternalLinkage, DefaultVisibility, false);
616  }
617  //   - a data member of an anonymous union.
618  assert(!isa<IndirectFieldDecl>(D) && "Didn't expect an IndirectFieldDecl!");
619  assert(!isa<FieldDecl>(D) && "Didn't expect a FieldDecl!");
620
621  if (D->isInAnonymousNamespace()) {
622    const VarDecl *Var = dyn_cast<VarDecl>(D);
623    const FunctionDecl *Func = dyn_cast<FunctionDecl>(D);
624    if ((!Var || !isFirstInExternCContext(Var)) &&
625        (!Func || !isFirstInExternCContext(Func)))
626      return LinkageInfo::uniqueExternal();
627  }
628
629  // Set up the defaults.
630
631  // C99 6.2.2p5:
632  //   If the declaration of an identifier for an object has file
633  //   scope and no storage-class specifier, its linkage is
634  //   external.
635  LinkageInfo LV;
636
637  if (!hasExplicitVisibilityAlready(computation)) {
638    if (Optional<Visibility> Vis = getExplicitVisibility(D, computation)) {
639      LV.mergeVisibility(*Vis, true);
640    } else {
641      // If we're declared in a namespace with a visibility attribute,
642      // use that namespace's visibility, and it still counts as explicit.
643      for (const DeclContext *DC = D->getDeclContext();
644           !isa<TranslationUnitDecl>(DC);
645           DC = DC->getParent()) {
646        const NamespaceDecl *ND = dyn_cast<NamespaceDecl>(DC);
647        if (!ND) continue;
648        if (Optional<Visibility> Vis = getExplicitVisibility(ND, computation)) {
649          LV.mergeVisibility(*Vis, true);
650          break;
651        }
652      }
653    }
654
655    // Add in global settings if the above didn't give us direct visibility.
656    if (!LV.isVisibilityExplicit()) {
657      // Use global type/value visibility as appropriate.
658      Visibility globalVisibility;
659      if (computation == LVForValue) {
660        globalVisibility = Context.getLangOpts().getValueVisibilityMode();
661      } else {
662        assert(computation == LVForType);
663        globalVisibility = Context.getLangOpts().getTypeVisibilityMode();
664      }
665      LV.mergeVisibility(globalVisibility, /*explicit*/ false);
666
667      // If we're paying attention to global visibility, apply
668      // -finline-visibility-hidden if this is an inline method.
669      if (useInlineVisibilityHidden(D))
670        LV.mergeVisibility(HiddenVisibility, true);
671    }
672  }
673
674  // C++ [basic.link]p4:
675
676  //   A name having namespace scope has external linkage if it is the
677  //   name of
678  //
679  //     - an object or reference, unless it has internal linkage; or
680  if (const VarDecl *Var = dyn_cast<VarDecl>(D)) {
681    // GCC applies the following optimization to variables and static
682    // data members, but not to functions:
683    //
684    // Modify the variable's LV by the LV of its type unless this is
685    // C or extern "C".  This follows from [basic.link]p9:
686    //   A type without linkage shall not be used as the type of a
687    //   variable or function with external linkage unless
688    //    - the entity has C language linkage, or
689    //    - the entity is declared within an unnamed namespace, or
690    //    - the entity is not used or is defined in the same
691    //      translation unit.
692    // and [basic.link]p10:
693    //   ...the types specified by all declarations referring to a
694    //   given variable or function shall be identical...
695    // C does not have an equivalent rule.
696    //
697    // Ignore this if we've got an explicit attribute;  the user
698    // probably knows what they're doing.
699    //
700    // Note that we don't want to make the variable non-external
701    // because of this, but unique-external linkage suits us.
702    if (Context.getLangOpts().CPlusPlus && !isFirstInExternCContext(Var)) {
703      LinkageInfo TypeLV = getLVForType(*Var->getType(), computation);
704      if (TypeLV.getLinkage() != ExternalLinkage)
705        return LinkageInfo::uniqueExternal();
706      if (!LV.isVisibilityExplicit())
707        LV.mergeVisibility(TypeLV);
708    }
709
710    if (Var->getStorageClass() == SC_PrivateExtern)
711      LV.mergeVisibility(HiddenVisibility, true);
712
713    // Note that Sema::MergeVarDecl already takes care of implementing
714    // C99 6.2.2p4 and propagating the visibility attribute, so we don't have
715    // to do it here.
716
717    // As per function and class template specializations (below),
718    // consider LV for the template and template arguments.  We're at file
719    // scope, so we do not need to worry about nested specializations.
720    if (const VarTemplateSpecializationDecl *spec
721              = dyn_cast<VarTemplateSpecializationDecl>(Var)) {
722      mergeTemplateLV(LV, spec, computation);
723    }
724
725  //     - a function, unless it has internal linkage; or
726  } else if (const FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {
727    // In theory, we can modify the function's LV by the LV of its
728    // type unless it has C linkage (see comment above about variables
729    // for justification).  In practice, GCC doesn't do this, so it's
730    // just too painful to make work.
731
732    if (Function->getStorageClass() == SC_PrivateExtern)
733      LV.mergeVisibility(HiddenVisibility, true);
734
735    // Note that Sema::MergeCompatibleFunctionDecls already takes care of
736    // merging storage classes and visibility attributes, so we don't have to
737    // look at previous decls in here.
738
739    // In C++, then if the type of the function uses a type with
740    // unique-external linkage, it's not legally usable from outside
741    // this translation unit.  However, we should use the C linkage
742    // rules instead for extern "C" declarations.
743    if (Context.getLangOpts().CPlusPlus &&
744        !Function->isInExternCContext()) {
745      // Only look at the type-as-written. If this function has an auto-deduced
746      // return type, we can't compute the linkage of that type because it could
747      // require looking at the linkage of this function, and we don't need this
748      // for correctness because the type is not part of the function's
749      // signature.
750      // FIXME: This is a hack. We should be able to solve this circularity and
751      // the one in getLVForClassMember for Functions some other way.
752      QualType TypeAsWritten = Function->getType();
753      if (TypeSourceInfo *TSI = Function->getTypeSourceInfo())
754        TypeAsWritten = TSI->getType();
755      if (TypeAsWritten->getLinkage() == UniqueExternalLinkage)
756        return LinkageInfo::uniqueExternal();
757    }
758
759    // Consider LV from the template and the template arguments.
760    // We're at file scope, so we do not need to worry about nested
761    // specializations.
762    if (FunctionTemplateSpecializationInfo *specInfo
763                               = Function->getTemplateSpecializationInfo()) {
764      mergeTemplateLV(LV, Function, specInfo, computation);
765    }
766
767  //     - a named class (Clause 9), or an unnamed class defined in a
768  //       typedef declaration in which the class has the typedef name
769  //       for linkage purposes (7.1.3); or
770  //     - a named enumeration (7.2), or an unnamed enumeration
771  //       defined in a typedef declaration in which the enumeration
772  //       has the typedef name for linkage purposes (7.1.3); or
773  } else if (const TagDecl *Tag = dyn_cast<TagDecl>(D)) {
774    // Unnamed tags have no linkage.
775    if (!Tag->hasNameForLinkage())
776      return LinkageInfo::none();
777
778    // If this is a class template specialization, consider the
779    // linkage of the template and template arguments.  We're at file
780    // scope, so we do not need to worry about nested specializations.
781    if (const ClassTemplateSpecializationDecl *spec
782          = dyn_cast<ClassTemplateSpecializationDecl>(Tag)) {
783      mergeTemplateLV(LV, spec, computation);
784    }
785
786  //     - an enumerator belonging to an enumeration with external linkage;
787  } else if (isa<EnumConstantDecl>(D)) {
788    LinkageInfo EnumLV = getLVForDecl(cast<NamedDecl>(D->getDeclContext()),
789                                      computation);
790    if (!isExternalFormalLinkage(EnumLV.getLinkage()))
791      return LinkageInfo::none();
792    LV.merge(EnumLV);
793
794  //     - a template, unless it is a function template that has
795  //       internal linkage (Clause 14);
796  } else if (const TemplateDecl *temp = dyn_cast<TemplateDecl>(D)) {
797    bool considerVisibility = !hasExplicitVisibilityAlready(computation);
798    LinkageInfo tempLV =
799      getLVForTemplateParameterList(temp->getTemplateParameters(), computation);
800    LV.mergeMaybeWithVisibility(tempLV, considerVisibility);
801
802  //     - a namespace (7.3), unless it is declared within an unnamed
803  //       namespace.
804  } else if (isa<NamespaceDecl>(D) && !D->isInAnonymousNamespace()) {
805    return LV;
806
807  // By extension, we assign external linkage to Objective-C
808  // interfaces.
809  } else if (isa<ObjCInterfaceDecl>(D)) {
810    // fallout
811
812  // Everything not covered here has no linkage.
813  } else {
814    return LinkageInfo::none();
815  }
816
817  // If we ended up with non-external linkage, visibility should
818  // always be default.
819  if (LV.getLinkage() != ExternalLinkage)
820    return LinkageInfo(LV.getLinkage(), DefaultVisibility, false);
821
822  return LV;
823}
824
825static LinkageInfo getLVForClassMember(const NamedDecl *D,
826                                       LVComputationKind computation) {
827  // Only certain class members have linkage.  Note that fields don't
828  // really have linkage, but it's convenient to say they do for the
829  // purposes of calculating linkage of pointer-to-data-member
830  // template arguments.
831  //
832  // Templates also don't officially have linkage, but since we ignore
833  // the C++ standard and look at template arguments when determining
834  // linkage and visibility of a template specialization, we might hit
835  // a template template argument that way. If we do, we need to
836  // consider its linkage.
837  if (!(isa<CXXMethodDecl>(D) ||
838        isa<VarDecl>(D) ||
839        isa<FieldDecl>(D) ||
840        isa<IndirectFieldDecl>(D) ||
841        isa<TagDecl>(D) ||
842        isa<TemplateDecl>(D)))
843    return LinkageInfo::none();
844
845  LinkageInfo LV;
846
847  // If we have an explicit visibility attribute, merge that in.
848  if (!hasExplicitVisibilityAlready(computation)) {
849    if (Optional<Visibility> Vis = getExplicitVisibility(D, computation))
850      LV.mergeVisibility(*Vis, true);
851    // If we're paying attention to global visibility, apply
852    // -finline-visibility-hidden if this is an inline method.
853    //
854    // Note that we do this before merging information about
855    // the class visibility.
856    if (!LV.isVisibilityExplicit() && useInlineVisibilityHidden(D))
857      LV.mergeVisibility(HiddenVisibility, true);
858  }
859
860  // If this class member has an explicit visibility attribute, the only
861  // thing that can change its visibility is the template arguments, so
862  // only look for them when processing the class.
863  LVComputationKind classComputation = computation;
864  if (LV.isVisibilityExplicit())
865    classComputation = withExplicitVisibilityAlready(computation);
866
867  LinkageInfo classLV =
868    getLVForDecl(cast<RecordDecl>(D->getDeclContext()), classComputation);
869  // If the class already has unique-external linkage, we can't improve.
870  if (classLV.getLinkage() == UniqueExternalLinkage)
871    return LinkageInfo::uniqueExternal();
872
873  if (!isExternallyVisible(classLV.getLinkage()))
874    return LinkageInfo::none();
875
876
877  // Otherwise, don't merge in classLV yet, because in certain cases
878  // we need to completely ignore the visibility from it.
879
880  // Specifically, if this decl exists and has an explicit attribute.
881  const NamedDecl *explicitSpecSuppressor = nullptr;
882
883  if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D)) {
884    // If the type of the function uses a type with unique-external
885    // linkage, it's not legally usable from outside this translation unit.
886    // But only look at the type-as-written. If this function has an auto-deduced
887    // return type, we can't compute the linkage of that type because it could
888    // require looking at the linkage of this function, and we don't need this
889    // for correctness because the type is not part of the function's
890    // signature.
891    // FIXME: This is a hack. We should be able to solve this circularity and the
892    // one in getLVForNamespaceScopeDecl for Functions some other way.
893    {
894      QualType TypeAsWritten = MD->getType();
895      if (TypeSourceInfo *TSI = MD->getTypeSourceInfo())
896        TypeAsWritten = TSI->getType();
897      if (TypeAsWritten->getLinkage() == UniqueExternalLinkage)
898        return LinkageInfo::uniqueExternal();
899    }
900    // If this is a method template specialization, use the linkage for
901    // the template parameters and arguments.
902    if (FunctionTemplateSpecializationInfo *spec
903           = MD->getTemplateSpecializationInfo()) {
904      mergeTemplateLV(LV, MD, spec, computation);
905      if (spec->isExplicitSpecialization()) {
906        explicitSpecSuppressor = MD;
907      } else if (isExplicitMemberSpecialization(spec->getTemplate())) {
908        explicitSpecSuppressor = spec->getTemplate()->getTemplatedDecl();
909      }
910    } else if (isExplicitMemberSpecialization(MD)) {
911      explicitSpecSuppressor = MD;
912    }
913
914  } else if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(D)) {
915    if (const ClassTemplateSpecializationDecl *spec
916        = dyn_cast<ClassTemplateSpecializationDecl>(RD)) {
917      mergeTemplateLV(LV, spec, computation);
918      if (spec->isExplicitSpecialization()) {
919        explicitSpecSuppressor = spec;
920      } else {
921        const ClassTemplateDecl *temp = spec->getSpecializedTemplate();
922        if (isExplicitMemberSpecialization(temp)) {
923          explicitSpecSuppressor = temp->getTemplatedDecl();
924        }
925      }
926    } else if (isExplicitMemberSpecialization(RD)) {
927      explicitSpecSuppressor = RD;
928    }
929
930  // Static data members.
931  } else if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
932    if (const VarTemplateSpecializationDecl *spec
933        = dyn_cast<VarTemplateSpecializationDecl>(VD))
934      mergeTemplateLV(LV, spec, computation);
935
936    // Modify the variable's linkage by its type, but ignore the
937    // type's visibility unless it's a definition.
938    LinkageInfo typeLV = getLVForType(*VD->getType(), computation);
939    if (!LV.isVisibilityExplicit() && !classLV.isVisibilityExplicit())
940      LV.mergeVisibility(typeLV);
941    LV.mergeExternalVisibility(typeLV);
942
943    if (isExplicitMemberSpecialization(VD)) {
944      explicitSpecSuppressor = VD;
945    }
946
947  // Template members.
948  } else if (const TemplateDecl *temp = dyn_cast<TemplateDecl>(D)) {
949    bool considerVisibility =
950      (!LV.isVisibilityExplicit() &&
951       !classLV.isVisibilityExplicit() &&
952       !hasExplicitVisibilityAlready(computation));
953    LinkageInfo tempLV =
954      getLVForTemplateParameterList(temp->getTemplateParameters(), computation);
955    LV.mergeMaybeWithVisibility(tempLV, considerVisibility);
956
957    if (const RedeclarableTemplateDecl *redeclTemp =
958          dyn_cast<RedeclarableTemplateDecl>(temp)) {
959      if (isExplicitMemberSpecialization(redeclTemp)) {
960        explicitSpecSuppressor = temp->getTemplatedDecl();
961      }
962    }
963  }
964
965  // We should never be looking for an attribute directly on a template.
966  assert(!explicitSpecSuppressor || !isa<TemplateDecl>(explicitSpecSuppressor));
967
968  // If this member is an explicit member specialization, and it has
969  // an explicit attribute, ignore visibility from the parent.
970  bool considerClassVisibility = true;
971  if (explicitSpecSuppressor &&
972      // optimization: hasDVA() is true only with explicit visibility.
973      LV.isVisibilityExplicit() &&
974      classLV.getVisibility() != DefaultVisibility &&
975      hasDirectVisibilityAttribute(explicitSpecSuppressor, computation)) {
976    considerClassVisibility = false;
977  }
978
979  // Finally, merge in information from the class.
980  LV.mergeMaybeWithVisibility(classLV, considerClassVisibility);
981  return LV;
982}
983
984void NamedDecl::anchor() { }
985
986static LinkageInfo computeLVForDecl(const NamedDecl *D,
987                                    LVComputationKind computation);
988
989bool NamedDecl::isLinkageValid() const {
990  if (!hasCachedLinkage())
991    return true;
992
993  return computeLVForDecl(this, LVForLinkageOnly).getLinkage() ==
994         getCachedLinkage();
995}
996
997Linkage NamedDecl::getLinkageInternal() const {
998  // We don't care about visibility here, so ask for the cheapest
999  // possible visibility analysis.
1000  return getLVForDecl(this, LVForLinkageOnly).getLinkage();
1001}
1002
1003LinkageInfo NamedDecl::getLinkageAndVisibility() const {
1004  LVComputationKind computation =
1005    (usesTypeVisibility(this) ? LVForType : LVForValue);
1006  return getLVForDecl(this, computation);
1007}
1008
1009static Optional<Visibility>
1010getExplicitVisibilityAux(const NamedDecl *ND,
1011                         NamedDecl::ExplicitVisibilityKind kind,
1012                         bool IsMostRecent) {
1013  assert(!IsMostRecent || ND == ND->getMostRecentDecl());
1014
1015  // Check the declaration itself first.
1016  if (Optional<Visibility> V = getVisibilityOf(ND, kind))
1017    return V;
1018
1019  // If this is a member class of a specialization of a class template
1020  // and the corresponding decl has explicit visibility, use that.
1021  if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(ND)) {
1022    CXXRecordDecl *InstantiatedFrom = RD->getInstantiatedFromMemberClass();
1023    if (InstantiatedFrom)
1024      return getVisibilityOf(InstantiatedFrom, kind);
1025  }
1026
1027  // If there wasn't explicit visibility there, and this is a
1028  // specialization of a class template, check for visibility
1029  // on the pattern.
1030  if (const ClassTemplateSpecializationDecl *spec
1031        = dyn_cast<ClassTemplateSpecializationDecl>(ND))
1032    return getVisibilityOf(spec->getSpecializedTemplate()->getTemplatedDecl(),
1033                           kind);
1034
1035  // Use the most recent declaration.
1036  if (!IsMostRecent && !isa<NamespaceDecl>(ND)) {
1037    const NamedDecl *MostRecent = ND->getMostRecentDecl();
1038    if (MostRecent != ND)
1039      return getExplicitVisibilityAux(MostRecent, kind, true);
1040  }
1041
1042  if (const VarDecl *Var = dyn_cast<VarDecl>(ND)) {
1043    if (Var->isStaticDataMember()) {
1044      VarDecl *InstantiatedFrom = Var->getInstantiatedFromStaticDataMember();
1045      if (InstantiatedFrom)
1046        return getVisibilityOf(InstantiatedFrom, kind);
1047    }
1048
1049    if (const auto *VTSD = dyn_cast<VarTemplateSpecializationDecl>(Var))
1050      return getVisibilityOf(VTSD->getSpecializedTemplate()->getTemplatedDecl(),
1051                             kind);
1052
1053    return None;
1054  }
1055  // Also handle function template specializations.
1056  if (const FunctionDecl *fn = dyn_cast<FunctionDecl>(ND)) {
1057    // If the function is a specialization of a template with an
1058    // explicit visibility attribute, use that.
1059    if (FunctionTemplateSpecializationInfo *templateInfo
1060          = fn->getTemplateSpecializationInfo())
1061      return getVisibilityOf(templateInfo->getTemplate()->getTemplatedDecl(),
1062                             kind);
1063
1064    // If the function is a member of a specialization of a class template
1065    // and the corresponding decl has explicit visibility, use that.
1066    FunctionDecl *InstantiatedFrom = fn->getInstantiatedFromMemberFunction();
1067    if (InstantiatedFrom)
1068      return getVisibilityOf(InstantiatedFrom, kind);
1069
1070    return None;
1071  }
1072
1073  // The visibility of a template is stored in the templated decl.
1074  if (const TemplateDecl *TD = dyn_cast<TemplateDecl>(ND))
1075    return getVisibilityOf(TD->getTemplatedDecl(), kind);
1076
1077  return None;
1078}
1079
1080Optional<Visibility>
1081NamedDecl::getExplicitVisibility(ExplicitVisibilityKind kind) const {
1082  return getExplicitVisibilityAux(this, kind, false);
1083}
1084
1085static LinkageInfo getLVForClosure(const DeclContext *DC, Decl *ContextDecl,
1086                                   LVComputationKind computation) {
1087  // This lambda has its linkage/visibility determined by its owner.
1088  if (ContextDecl) {
1089    if (isa<ParmVarDecl>(ContextDecl))
1090      DC = ContextDecl->getDeclContext()->getRedeclContext();
1091    else
1092      return getLVForDecl(cast<NamedDecl>(ContextDecl), computation);
1093  }
1094
1095  if (const NamedDecl *ND = dyn_cast<NamedDecl>(DC))
1096    return getLVForDecl(ND, computation);
1097
1098  return LinkageInfo::external();
1099}
1100
1101static LinkageInfo getLVForLocalDecl(const NamedDecl *D,
1102                                     LVComputationKind computation) {
1103  if (const FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {
1104    if (Function->isInAnonymousNamespace() &&
1105        !Function->isInExternCContext())
1106      return LinkageInfo::uniqueExternal();
1107
1108    // This is a "void f();" which got merged with a file static.
1109    if (Function->getCanonicalDecl()->getStorageClass() == SC_Static)
1110      return LinkageInfo::internal();
1111
1112    LinkageInfo LV;
1113    if (!hasExplicitVisibilityAlready(computation)) {
1114      if (Optional<Visibility> Vis =
1115              getExplicitVisibility(Function, computation))
1116        LV.mergeVisibility(*Vis, true);
1117    }
1118
1119    // Note that Sema::MergeCompatibleFunctionDecls already takes care of
1120    // merging storage classes and visibility attributes, so we don't have to
1121    // look at previous decls in here.
1122
1123    return LV;
1124  }
1125
1126  if (const VarDecl *Var = dyn_cast<VarDecl>(D)) {
1127    if (Var->hasExternalStorage()) {
1128      if (Var->isInAnonymousNamespace() && !Var->isInExternCContext())
1129        return LinkageInfo::uniqueExternal();
1130
1131      LinkageInfo LV;
1132      if (Var->getStorageClass() == SC_PrivateExtern)
1133        LV.mergeVisibility(HiddenVisibility, true);
1134      else if (!hasExplicitVisibilityAlready(computation)) {
1135        if (Optional<Visibility> Vis = getExplicitVisibility(Var, computation))
1136          LV.mergeVisibility(*Vis, true);
1137      }
1138
1139      if (const VarDecl *Prev = Var->getPreviousDecl()) {
1140        LinkageInfo PrevLV = getLVForDecl(Prev, computation);
1141        if (PrevLV.getLinkage())
1142          LV.setLinkage(PrevLV.getLinkage());
1143        LV.mergeVisibility(PrevLV);
1144      }
1145
1146      return LV;
1147    }
1148
1149    if (!Var->isStaticLocal())
1150      return LinkageInfo::none();
1151  }
1152
1153  ASTContext &Context = D->getASTContext();
1154  if (!Context.getLangOpts().CPlusPlus)
1155    return LinkageInfo::none();
1156
1157  const Decl *OuterD = getOutermostFuncOrBlockContext(D);
1158  if (!OuterD)
1159    return LinkageInfo::none();
1160
1161  LinkageInfo LV;
1162  if (const BlockDecl *BD = dyn_cast<BlockDecl>(OuterD)) {
1163    if (!BD->getBlockManglingNumber())
1164      return LinkageInfo::none();
1165
1166    LV = getLVForClosure(BD->getDeclContext()->getRedeclContext(),
1167                         BD->getBlockManglingContextDecl(), computation);
1168  } else {
1169    const FunctionDecl *FD = cast<FunctionDecl>(OuterD);
1170    if (!FD->isInlined() &&
1171        FD->getTemplateSpecializationKind() == TSK_Undeclared)
1172      return LinkageInfo::none();
1173
1174    LV = getLVForDecl(FD, computation);
1175  }
1176  if (!isExternallyVisible(LV.getLinkage()))
1177    return LinkageInfo::none();
1178  return LinkageInfo(VisibleNoLinkage, LV.getVisibility(),
1179                     LV.isVisibilityExplicit());
1180}
1181
1182static inline const CXXRecordDecl*
1183getOutermostEnclosingLambda(const CXXRecordDecl *Record) {
1184  const CXXRecordDecl *Ret = Record;
1185  while (Record && Record->isLambda()) {
1186    Ret = Record;
1187    if (!Record->getParent()) break;
1188    // Get the Containing Class of this Lambda Class
1189    Record = dyn_cast_or_null<CXXRecordDecl>(
1190      Record->getParent()->getParent());
1191  }
1192  return Ret;
1193}
1194
1195static LinkageInfo computeLVForDecl(const NamedDecl *D,
1196                                    LVComputationKind computation) {
1197  // Objective-C: treat all Objective-C declarations as having external
1198  // linkage.
1199  switch (D->getKind()) {
1200    default:
1201      break;
1202    case Decl::ParmVar:
1203      return LinkageInfo::none();
1204    case Decl::TemplateTemplateParm: // count these as external
1205    case Decl::NonTypeTemplateParm:
1206    case Decl::ObjCAtDefsField:
1207    case Decl::ObjCCategory:
1208    case Decl::ObjCCategoryImpl:
1209    case Decl::ObjCCompatibleAlias:
1210    case Decl::ObjCImplementation:
1211    case Decl::ObjCMethod:
1212    case Decl::ObjCProperty:
1213    case Decl::ObjCPropertyImpl:
1214    case Decl::ObjCProtocol:
1215      return LinkageInfo::external();
1216
1217    case Decl::CXXRecord: {
1218      const CXXRecordDecl *Record = cast<CXXRecordDecl>(D);
1219      if (Record->isLambda()) {
1220        if (!Record->getLambdaManglingNumber()) {
1221          // This lambda has no mangling number, so it's internal.
1222          return LinkageInfo::internal();
1223        }
1224
1225        // This lambda has its linkage/visibility determined:
1226        //  - either by the outermost lambda if that lambda has no mangling
1227        //    number.
1228        //  - or by the parent of the outer most lambda
1229        // This prevents infinite recursion in settings such as nested lambdas
1230        // used in NSDMI's, for e.g.
1231        //  struct L {
1232        //    int t{};
1233        //    int t2 = ([](int a) { return [](int b) { return b; };})(t)(t);
1234        //  };
1235        const CXXRecordDecl *OuterMostLambda =
1236            getOutermostEnclosingLambda(Record);
1237        if (!OuterMostLambda->getLambdaManglingNumber())
1238          return LinkageInfo::internal();
1239
1240        return getLVForClosure(
1241                  OuterMostLambda->getDeclContext()->getRedeclContext(),
1242                  OuterMostLambda->getLambdaContextDecl(), computation);
1243      }
1244
1245      break;
1246    }
1247  }
1248
1249  // Handle linkage for namespace-scope names.
1250  if (D->getDeclContext()->getRedeclContext()->isFileContext())
1251    return getLVForNamespaceScopeDecl(D, computation);
1252
1253  // C++ [basic.link]p5:
1254  //   In addition, a member function, static data member, a named
1255  //   class or enumeration of class scope, or an unnamed class or
1256  //   enumeration defined in a class-scope typedef declaration such
1257  //   that the class or enumeration has the typedef name for linkage
1258  //   purposes (7.1.3), has external linkage if the name of the class
1259  //   has external linkage.
1260  if (D->getDeclContext()->isRecord())
1261    return getLVForClassMember(D, computation);
1262
1263  // C++ [basic.link]p6:
1264  //   The name of a function declared in block scope and the name of
1265  //   an object declared by a block scope extern declaration have
1266  //   linkage. If there is a visible declaration of an entity with
1267  //   linkage having the same name and type, ignoring entities
1268  //   declared outside the innermost enclosing namespace scope, the
1269  //   block scope declaration declares that same entity and receives
1270  //   the linkage of the previous declaration. If there is more than
1271  //   one such matching entity, the program is ill-formed. Otherwise,
1272  //   if no matching entity is found, the block scope entity receives
1273  //   external linkage.
1274  if (D->getDeclContext()->isFunctionOrMethod())
1275    return getLVForLocalDecl(D, computation);
1276
1277  // C++ [basic.link]p6:
1278  //   Names not covered by these rules have no linkage.
1279  return LinkageInfo::none();
1280}
1281
1282namespace clang {
1283class LinkageComputer {
1284public:
1285  static LinkageInfo getLVForDecl(const NamedDecl *D,
1286                                  LVComputationKind computation) {
1287    if (computation == LVForLinkageOnly && D->hasCachedLinkage())
1288      return LinkageInfo(D->getCachedLinkage(), DefaultVisibility, false);
1289
1290    LinkageInfo LV = computeLVForDecl(D, computation);
1291    if (D->hasCachedLinkage())
1292      assert(D->getCachedLinkage() == LV.getLinkage());
1293
1294    D->setCachedLinkage(LV.getLinkage());
1295
1296#ifndef NDEBUG
1297    // In C (because of gnu inline) and in c++ with microsoft extensions an
1298    // static can follow an extern, so we can have two decls with different
1299    // linkages.
1300    const LangOptions &Opts = D->getASTContext().getLangOpts();
1301    if (!Opts.CPlusPlus || Opts.MicrosoftExt)
1302      return LV;
1303
1304    // We have just computed the linkage for this decl. By induction we know
1305    // that all other computed linkages match, check that the one we just
1306    // computed also does.
1307    NamedDecl *Old = nullptr;
1308    for (auto I : D->redecls()) {
1309      NamedDecl *T = cast<NamedDecl>(I);
1310      if (T == D)
1311        continue;
1312      if (!T->isInvalidDecl() && T->hasCachedLinkage()) {
1313        Old = T;
1314        break;
1315      }
1316    }
1317    assert(!Old || Old->getCachedLinkage() == D->getCachedLinkage());
1318#endif
1319
1320    return LV;
1321  }
1322};
1323}
1324
1325static LinkageInfo getLVForDecl(const NamedDecl *D,
1326                                LVComputationKind computation) {
1327  return clang::LinkageComputer::getLVForDecl(D, computation);
1328}
1329
1330std::string NamedDecl::getQualifiedNameAsString() const {
1331  std::string QualName;
1332  llvm::raw_string_ostream OS(QualName);
1333  printQualifiedName(OS, getASTContext().getPrintingPolicy());
1334  return OS.str();
1335}
1336
1337void NamedDecl::printQualifiedName(raw_ostream &OS) const {
1338  printQualifiedName(OS, getASTContext().getPrintingPolicy());
1339}
1340
1341void NamedDecl::printQualifiedName(raw_ostream &OS,
1342                                   const PrintingPolicy &P) const {
1343  const DeclContext *Ctx = getDeclContext();
1344
1345  if (Ctx->isFunctionOrMethod()) {
1346    printName(OS);
1347    return;
1348  }
1349
1350  typedef SmallVector<const DeclContext *, 8> ContextsTy;
1351  ContextsTy Contexts;
1352
1353  // Collect contexts.
1354  while (Ctx && isa<NamedDecl>(Ctx)) {
1355    Contexts.push_back(Ctx);
1356    Ctx = Ctx->getParent();
1357  }
1358
1359  for (ContextsTy::reverse_iterator I = Contexts.rbegin(), E = Contexts.rend();
1360       I != E; ++I) {
1361    if (const ClassTemplateSpecializationDecl *Spec
1362          = dyn_cast<ClassTemplateSpecializationDecl>(*I)) {
1363      OS << Spec->getName();
1364      const TemplateArgumentList &TemplateArgs = Spec->getTemplateArgs();
1365      TemplateSpecializationType::PrintTemplateArgumentList(OS,
1366                                                            TemplateArgs.data(),
1367                                                            TemplateArgs.size(),
1368                                                            P);
1369    } else if (const NamespaceDecl *ND = dyn_cast<NamespaceDecl>(*I)) {
1370      if (P.SuppressUnwrittenScope &&
1371          (ND->isAnonymousNamespace() || ND->isInline()))
1372        continue;
1373      if (ND->isAnonymousNamespace())
1374        OS << "(anonymous namespace)";
1375      else
1376        OS << *ND;
1377    } else if (const RecordDecl *RD = dyn_cast<RecordDecl>(*I)) {
1378      if (!RD->getIdentifier())
1379        OS << "(anonymous " << RD->getKindName() << ')';
1380      else
1381        OS << *RD;
1382    } else if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
1383      const FunctionProtoType *FT = nullptr;
1384      if (FD->hasWrittenPrototype())
1385        FT = dyn_cast<FunctionProtoType>(FD->getType()->castAs<FunctionType>());
1386
1387      OS << *FD << '(';
1388      if (FT) {
1389        unsigned NumParams = FD->getNumParams();
1390        for (unsigned i = 0; i < NumParams; ++i) {
1391          if (i)
1392            OS << ", ";
1393          OS << FD->getParamDecl(i)->getType().stream(P);
1394        }
1395
1396        if (FT->isVariadic()) {
1397          if (NumParams > 0)
1398            OS << ", ";
1399          OS << "...";
1400        }
1401      }
1402      OS << ')';
1403    } else {
1404      OS << *cast<NamedDecl>(*I);
1405    }
1406    OS << "::";
1407  }
1408
1409  if (getDeclName())
1410    OS << *this;
1411  else
1412    OS << "(anonymous)";
1413}
1414
1415void NamedDecl::getNameForDiagnostic(raw_ostream &OS,
1416                                     const PrintingPolicy &Policy,
1417                                     bool Qualified) const {
1418  if (Qualified)
1419    printQualifiedName(OS, Policy);
1420  else
1421    printName(OS);
1422}
1423
1424bool NamedDecl::declarationReplaces(NamedDecl *OldD) const {
1425  assert(getDeclName() == OldD->getDeclName() && "Declaration name mismatch");
1426
1427  // UsingDirectiveDecl's are not really NamedDecl's, and all have same name.
1428  // We want to keep it, unless it nominates same namespace.
1429  if (getKind() == Decl::UsingDirective) {
1430    return cast<UsingDirectiveDecl>(this)->getNominatedNamespace()
1431             ->getOriginalNamespace() ==
1432           cast<UsingDirectiveDecl>(OldD)->getNominatedNamespace()
1433             ->getOriginalNamespace();
1434  }
1435
1436  if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(this))
1437    // For function declarations, we keep track of redeclarations.
1438    return FD->getPreviousDecl() == OldD;
1439
1440  // For function templates, the underlying function declarations are linked.
1441  if (const FunctionTemplateDecl *FunctionTemplate
1442        = dyn_cast<FunctionTemplateDecl>(this))
1443    if (const FunctionTemplateDecl *OldFunctionTemplate
1444          = dyn_cast<FunctionTemplateDecl>(OldD))
1445      return FunctionTemplate->getTemplatedDecl()
1446               ->declarationReplaces(OldFunctionTemplate->getTemplatedDecl());
1447
1448  // For method declarations, we keep track of redeclarations.
1449  if (isa<ObjCMethodDecl>(this))
1450    return false;
1451
1452  // FIXME: Is this correct if one of the decls comes from an inline namespace?
1453  if (isa<ObjCInterfaceDecl>(this) && isa<ObjCCompatibleAliasDecl>(OldD))
1454    return true;
1455
1456  if (isa<UsingShadowDecl>(this) && isa<UsingShadowDecl>(OldD))
1457    return cast<UsingShadowDecl>(this)->getTargetDecl() ==
1458           cast<UsingShadowDecl>(OldD)->getTargetDecl();
1459
1460  if (isa<UsingDecl>(this) && isa<UsingDecl>(OldD)) {
1461    ASTContext &Context = getASTContext();
1462    return Context.getCanonicalNestedNameSpecifier(
1463                                     cast<UsingDecl>(this)->getQualifier()) ==
1464           Context.getCanonicalNestedNameSpecifier(
1465                                        cast<UsingDecl>(OldD)->getQualifier());
1466  }
1467
1468  if (isa<UnresolvedUsingValueDecl>(this) &&
1469      isa<UnresolvedUsingValueDecl>(OldD)) {
1470    ASTContext &Context = getASTContext();
1471    return Context.getCanonicalNestedNameSpecifier(
1472                      cast<UnresolvedUsingValueDecl>(this)->getQualifier()) ==
1473           Context.getCanonicalNestedNameSpecifier(
1474                        cast<UnresolvedUsingValueDecl>(OldD)->getQualifier());
1475  }
1476
1477  // A typedef of an Objective-C class type can replace an Objective-C class
1478  // declaration or definition, and vice versa.
1479  // FIXME: Is this correct if one of the decls comes from an inline namespace?
1480  if ((isa<TypedefNameDecl>(this) && isa<ObjCInterfaceDecl>(OldD)) ||
1481      (isa<ObjCInterfaceDecl>(this) && isa<TypedefNameDecl>(OldD)))
1482    return true;
1483
1484  // For non-function declarations, if the declarations are of the
1485  // same kind and have the same parent then this must be a redeclaration,
1486  // or semantic analysis would not have given us the new declaration.
1487  // Note that inline namespaces can give us two declarations with the same
1488  // name and kind in the same scope but different contexts.
1489  return this->getKind() == OldD->getKind() &&
1490         this->getDeclContext()->getRedeclContext()->Equals(
1491             OldD->getDeclContext()->getRedeclContext());
1492}
1493
1494bool NamedDecl::hasLinkage() const {
1495  return getFormalLinkage() != NoLinkage;
1496}
1497
1498NamedDecl *NamedDecl::getUnderlyingDeclImpl() {
1499  NamedDecl *ND = this;
1500  while (UsingShadowDecl *UD = dyn_cast<UsingShadowDecl>(ND))
1501    ND = UD->getTargetDecl();
1502
1503  if (ObjCCompatibleAliasDecl *AD = dyn_cast<ObjCCompatibleAliasDecl>(ND))
1504    return AD->getClassInterface();
1505
1506  return ND;
1507}
1508
1509bool NamedDecl::isCXXInstanceMember() const {
1510  if (!isCXXClassMember())
1511    return false;
1512
1513  const NamedDecl *D = this;
1514  if (isa<UsingShadowDecl>(D))
1515    D = cast<UsingShadowDecl>(D)->getTargetDecl();
1516
1517  if (isa<FieldDecl>(D) || isa<IndirectFieldDecl>(D) || isa<MSPropertyDecl>(D))
1518    return true;
1519  if (const CXXMethodDecl *MD =
1520          dyn_cast_or_null<CXXMethodDecl>(D->getAsFunction()))
1521    return MD->isInstance();
1522  return false;
1523}
1524
1525//===----------------------------------------------------------------------===//
1526// DeclaratorDecl Implementation
1527//===----------------------------------------------------------------------===//
1528
1529template <typename DeclT>
1530static SourceLocation getTemplateOrInnerLocStart(const DeclT *decl) {
1531  if (decl->getNumTemplateParameterLists() > 0)
1532    return decl->getTemplateParameterList(0)->getTemplateLoc();
1533  else
1534    return decl->getInnerLocStart();
1535}
1536
1537SourceLocation DeclaratorDecl::getTypeSpecStartLoc() const {
1538  TypeSourceInfo *TSI = getTypeSourceInfo();
1539  if (TSI) return TSI->getTypeLoc().getBeginLoc();
1540  return SourceLocation();
1541}
1542
1543void DeclaratorDecl::setQualifierInfo(NestedNameSpecifierLoc QualifierLoc) {
1544  if (QualifierLoc) {
1545    // Make sure the extended decl info is allocated.
1546    if (!hasExtInfo()) {
1547      // Save (non-extended) type source info pointer.
1548      TypeSourceInfo *savedTInfo = DeclInfo.get<TypeSourceInfo*>();
1549      // Allocate external info struct.
1550      DeclInfo = new (getASTContext()) ExtInfo;
1551      // Restore savedTInfo into (extended) decl info.
1552      getExtInfo()->TInfo = savedTInfo;
1553    }
1554    // Set qualifier info.
1555    getExtInfo()->QualifierLoc = QualifierLoc;
1556  } else {
1557    // Here Qualifier == 0, i.e., we are removing the qualifier (if any).
1558    if (hasExtInfo()) {
1559      if (getExtInfo()->NumTemplParamLists == 0) {
1560        // Save type source info pointer.
1561        TypeSourceInfo *savedTInfo = getExtInfo()->TInfo;
1562        // Deallocate the extended decl info.
1563        getASTContext().Deallocate(getExtInfo());
1564        // Restore savedTInfo into (non-extended) decl info.
1565        DeclInfo = savedTInfo;
1566      }
1567      else
1568        getExtInfo()->QualifierLoc = QualifierLoc;
1569    }
1570  }
1571}
1572
1573void
1574DeclaratorDecl::setTemplateParameterListsInfo(ASTContext &Context,
1575                                              unsigned NumTPLists,
1576                                              TemplateParameterList **TPLists) {
1577  assert(NumTPLists > 0);
1578  // Make sure the extended decl info is allocated.
1579  if (!hasExtInfo()) {
1580    // Save (non-extended) type source info pointer.
1581    TypeSourceInfo *savedTInfo = DeclInfo.get<TypeSourceInfo*>();
1582    // Allocate external info struct.
1583    DeclInfo = new (getASTContext()) ExtInfo;
1584    // Restore savedTInfo into (extended) decl info.
1585    getExtInfo()->TInfo = savedTInfo;
1586  }
1587  // Set the template parameter lists info.
1588  getExtInfo()->setTemplateParameterListsInfo(Context, NumTPLists, TPLists);
1589}
1590
1591SourceLocation DeclaratorDecl::getOuterLocStart() const {
1592  return getTemplateOrInnerLocStart(this);
1593}
1594
1595namespace {
1596
1597// Helper function: returns true if QT is or contains a type
1598// having a postfix component.
1599bool typeIsPostfix(clang::QualType QT) {
1600  while (true) {
1601    const Type* T = QT.getTypePtr();
1602    switch (T->getTypeClass()) {
1603    default:
1604      return false;
1605    case Type::Pointer:
1606      QT = cast<PointerType>(T)->getPointeeType();
1607      break;
1608    case Type::BlockPointer:
1609      QT = cast<BlockPointerType>(T)->getPointeeType();
1610      break;
1611    case Type::MemberPointer:
1612      QT = cast<MemberPointerType>(T)->getPointeeType();
1613      break;
1614    case Type::LValueReference:
1615    case Type::RValueReference:
1616      QT = cast<ReferenceType>(T)->getPointeeType();
1617      break;
1618    case Type::PackExpansion:
1619      QT = cast<PackExpansionType>(T)->getPattern();
1620      break;
1621    case Type::Paren:
1622    case Type::ConstantArray:
1623    case Type::DependentSizedArray:
1624    case Type::IncompleteArray:
1625    case Type::VariableArray:
1626    case Type::FunctionProto:
1627    case Type::FunctionNoProto:
1628      return true;
1629    }
1630  }
1631}
1632
1633} // namespace
1634
1635SourceRange DeclaratorDecl::getSourceRange() const {
1636  SourceLocation RangeEnd = getLocation();
1637  if (TypeSourceInfo *TInfo = getTypeSourceInfo()) {
1638    // If the declaration has no name or the type extends past the name take the
1639    // end location of the type.
1640    if (!getDeclName() || typeIsPostfix(TInfo->getType()))
1641      RangeEnd = TInfo->getTypeLoc().getSourceRange().getEnd();
1642  }
1643  return SourceRange(getOuterLocStart(), RangeEnd);
1644}
1645
1646void
1647QualifierInfo::setTemplateParameterListsInfo(ASTContext &Context,
1648                                             unsigned NumTPLists,
1649                                             TemplateParameterList **TPLists) {
1650  assert((NumTPLists == 0 || TPLists != nullptr) &&
1651         "Empty array of template parameters with positive size!");
1652
1653  // Free previous template parameters (if any).
1654  if (NumTemplParamLists > 0) {
1655    Context.Deallocate(TemplParamLists);
1656    TemplParamLists = nullptr;
1657    NumTemplParamLists = 0;
1658  }
1659  // Set info on matched template parameter lists (if any).
1660  if (NumTPLists > 0) {
1661    TemplParamLists = new (Context) TemplateParameterList*[NumTPLists];
1662    NumTemplParamLists = NumTPLists;
1663    for (unsigned i = NumTPLists; i-- > 0; )
1664      TemplParamLists[i] = TPLists[i];
1665  }
1666}
1667
1668//===----------------------------------------------------------------------===//
1669// VarDecl Implementation
1670//===----------------------------------------------------------------------===//
1671
1672const char *VarDecl::getStorageClassSpecifierString(StorageClass SC) {
1673  switch (SC) {
1674  case SC_None:                 break;
1675  case SC_Auto:                 return "auto";
1676  case SC_Extern:               return "extern";
1677  case SC_OpenCLWorkGroupLocal: return "<<work-group-local>>";
1678  case SC_PrivateExtern:        return "__private_extern__";
1679  case SC_Register:             return "register";
1680  case SC_Static:               return "static";
1681  }
1682
1683  llvm_unreachable("Invalid storage class");
1684}
1685
1686VarDecl::VarDecl(Kind DK, ASTContext &C, DeclContext *DC,
1687                 SourceLocation StartLoc, SourceLocation IdLoc,
1688                 IdentifierInfo *Id, QualType T, TypeSourceInfo *TInfo,
1689                 StorageClass SC)
1690    : DeclaratorDecl(DK, DC, IdLoc, Id, T, TInfo, StartLoc),
1691      redeclarable_base(C), Init() {
1692  static_assert(sizeof(VarDeclBitfields) <= sizeof(unsigned),
1693                "VarDeclBitfields too large!");
1694  static_assert(sizeof(ParmVarDeclBitfields) <= sizeof(unsigned),
1695                "ParmVarDeclBitfields too large!");
1696  AllBits = 0;
1697  VarDeclBits.SClass = SC;
1698  // Everything else is implicitly initialized to false.
1699}
1700
1701VarDecl *VarDecl::Create(ASTContext &C, DeclContext *DC,
1702                         SourceLocation StartL, SourceLocation IdL,
1703                         IdentifierInfo *Id, QualType T, TypeSourceInfo *TInfo,
1704                         StorageClass S) {
1705  return new (C, DC) VarDecl(Var, C, DC, StartL, IdL, Id, T, TInfo, S);
1706}
1707
1708VarDecl *VarDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
1709  return new (C, ID)
1710      VarDecl(Var, C, nullptr, SourceLocation(), SourceLocation(), nullptr,
1711              QualType(), nullptr, SC_None);
1712}
1713
1714void VarDecl::setStorageClass(StorageClass SC) {
1715  assert(isLegalForVariable(SC));
1716  VarDeclBits.SClass = SC;
1717}
1718
1719VarDecl::TLSKind VarDecl::getTLSKind() const {
1720  switch (VarDeclBits.TSCSpec) {
1721  case TSCS_unspecified:
1722    if (hasAttr<ThreadAttr>())
1723      return TLS_Static;
1724    return TLS_None;
1725  case TSCS___thread: // Fall through.
1726  case TSCS__Thread_local:
1727      return TLS_Static;
1728  case TSCS_thread_local:
1729    return TLS_Dynamic;
1730  }
1731  llvm_unreachable("Unknown thread storage class specifier!");
1732}
1733
1734SourceRange VarDecl::getSourceRange() const {
1735  if (const Expr *Init = getInit()) {
1736    SourceLocation InitEnd = Init->getLocEnd();
1737    // If Init is implicit, ignore its source range and fallback on
1738    // DeclaratorDecl::getSourceRange() to handle postfix elements.
1739    if (InitEnd.isValid() && InitEnd != getLocation())
1740      return SourceRange(getOuterLocStart(), InitEnd);
1741  }
1742  return DeclaratorDecl::getSourceRange();
1743}
1744
1745template<typename T>
1746static LanguageLinkage getDeclLanguageLinkage(const T &D) {
1747  // C++ [dcl.link]p1: All function types, function names with external linkage,
1748  // and variable names with external linkage have a language linkage.
1749  if (!D.hasExternalFormalLinkage())
1750    return NoLanguageLinkage;
1751
1752  // Language linkage is a C++ concept, but saying that everything else in C has
1753  // C language linkage fits the implementation nicely.
1754  ASTContext &Context = D.getASTContext();
1755  if (!Context.getLangOpts().CPlusPlus)
1756    return CLanguageLinkage;
1757
1758  // C++ [dcl.link]p4: A C language linkage is ignored in determining the
1759  // language linkage of the names of class members and the function type of
1760  // class member functions.
1761  const DeclContext *DC = D.getDeclContext();
1762  if (DC->isRecord())
1763    return CXXLanguageLinkage;
1764
1765  // If the first decl is in an extern "C" context, any other redeclaration
1766  // will have C language linkage. If the first one is not in an extern "C"
1767  // context, we would have reported an error for any other decl being in one.
1768  if (isFirstInExternCContext(&D))
1769    return CLanguageLinkage;
1770  return CXXLanguageLinkage;
1771}
1772
1773template<typename T>
1774static bool isDeclExternC(const T &D) {
1775  // Since the context is ignored for class members, they can only have C++
1776  // language linkage or no language linkage.
1777  const DeclContext *DC = D.getDeclContext();
1778  if (DC->isRecord()) {
1779    assert(D.getASTContext().getLangOpts().CPlusPlus);
1780    return false;
1781  }
1782
1783  return D.getLanguageLinkage() == CLanguageLinkage;
1784}
1785
1786LanguageLinkage VarDecl::getLanguageLinkage() const {
1787  return getDeclLanguageLinkage(*this);
1788}
1789
1790bool VarDecl::isExternC() const {
1791  return isDeclExternC(*this);
1792}
1793
1794bool VarDecl::isInExternCContext() const {
1795  return getLexicalDeclContext()->isExternCContext();
1796}
1797
1798bool VarDecl::isInExternCXXContext() const {
1799  return getLexicalDeclContext()->isExternCXXContext();
1800}
1801
1802VarDecl *VarDecl::getCanonicalDecl() { return getFirstDecl(); }
1803
1804VarDecl::DefinitionKind VarDecl::isThisDeclarationADefinition(
1805  ASTContext &C) const
1806{
1807  // C++ [basic.def]p2:
1808  //   A declaration is a definition unless [...] it contains the 'extern'
1809  //   specifier or a linkage-specification and neither an initializer [...],
1810  //   it declares a static data member in a class declaration [...].
1811  // C++1y [temp.expl.spec]p15:
1812  //   An explicit specialization of a static data member or an explicit
1813  //   specialization of a static data member template is a definition if the
1814  //   declaration includes an initializer; otherwise, it is a declaration.
1815  //
1816  // FIXME: How do you declare (but not define) a partial specialization of
1817  // a static data member template outside the containing class?
1818  if (isStaticDataMember()) {
1819    if (isOutOfLine() &&
1820        (hasInit() ||
1821         // If the first declaration is out-of-line, this may be an
1822         // instantiation of an out-of-line partial specialization of a variable
1823         // template for which we have not yet instantiated the initializer.
1824         (getFirstDecl()->isOutOfLine()
1825              ? getTemplateSpecializationKind() == TSK_Undeclared
1826              : getTemplateSpecializationKind() !=
1827                    TSK_ExplicitSpecialization) ||
1828         isa<VarTemplatePartialSpecializationDecl>(this)))
1829      return Definition;
1830    else
1831      return DeclarationOnly;
1832  }
1833  // C99 6.7p5:
1834  //   A definition of an identifier is a declaration for that identifier that
1835  //   [...] causes storage to be reserved for that object.
1836  // Note: that applies for all non-file-scope objects.
1837  // C99 6.9.2p1:
1838  //   If the declaration of an identifier for an object has file scope and an
1839  //   initializer, the declaration is an external definition for the identifier
1840  if (hasInit())
1841    return Definition;
1842
1843  if (hasAttr<AliasAttr>())
1844    return Definition;
1845
1846  // A variable template specialization (other than a static data member
1847  // template or an explicit specialization) is a declaration until we
1848  // instantiate its initializer.
1849  if (isa<VarTemplateSpecializationDecl>(this) &&
1850      getTemplateSpecializationKind() != TSK_ExplicitSpecialization)
1851    return DeclarationOnly;
1852
1853  if (hasExternalStorage())
1854    return DeclarationOnly;
1855
1856  // [dcl.link] p7:
1857  //   A declaration directly contained in a linkage-specification is treated
1858  //   as if it contains the extern specifier for the purpose of determining
1859  //   the linkage of the declared name and whether it is a definition.
1860  if (isSingleLineLanguageLinkage(*this))
1861    return DeclarationOnly;
1862
1863  // C99 6.9.2p2:
1864  //   A declaration of an object that has file scope without an initializer,
1865  //   and without a storage class specifier or the scs 'static', constitutes
1866  //   a tentative definition.
1867  // No such thing in C++.
1868  if (!C.getLangOpts().CPlusPlus && isFileVarDecl())
1869    return TentativeDefinition;
1870
1871  // What's left is (in C, block-scope) declarations without initializers or
1872  // external storage. These are definitions.
1873  return Definition;
1874}
1875
1876VarDecl *VarDecl::getActingDefinition() {
1877  DefinitionKind Kind = isThisDeclarationADefinition();
1878  if (Kind != TentativeDefinition)
1879    return nullptr;
1880
1881  VarDecl *LastTentative = nullptr;
1882  VarDecl *First = getFirstDecl();
1883  for (auto I : First->redecls()) {
1884    Kind = I->isThisDeclarationADefinition();
1885    if (Kind == Definition)
1886      return nullptr;
1887    else if (Kind == TentativeDefinition)
1888      LastTentative = I;
1889  }
1890  return LastTentative;
1891}
1892
1893VarDecl *VarDecl::getDefinition(ASTContext &C) {
1894  VarDecl *First = getFirstDecl();
1895  for (auto I : First->redecls()) {
1896    if (I->isThisDeclarationADefinition(C) == Definition)
1897      return I;
1898  }
1899  return nullptr;
1900}
1901
1902VarDecl::DefinitionKind VarDecl::hasDefinition(ASTContext &C) const {
1903  DefinitionKind Kind = DeclarationOnly;
1904
1905  const VarDecl *First = getFirstDecl();
1906  for (auto I : First->redecls()) {
1907    Kind = std::max(Kind, I->isThisDeclarationADefinition(C));
1908    if (Kind == Definition)
1909      break;
1910  }
1911
1912  return Kind;
1913}
1914
1915const Expr *VarDecl::getAnyInitializer(const VarDecl *&D) const {
1916  for (auto I : redecls()) {
1917    if (auto Expr = I->getInit()) {
1918      D = I;
1919      return Expr;
1920    }
1921  }
1922  return nullptr;
1923}
1924
1925bool VarDecl::isOutOfLine() const {
1926  if (Decl::isOutOfLine())
1927    return true;
1928
1929  if (!isStaticDataMember())
1930    return false;
1931
1932  // If this static data member was instantiated from a static data member of
1933  // a class template, check whether that static data member was defined
1934  // out-of-line.
1935  if (VarDecl *VD = getInstantiatedFromStaticDataMember())
1936    return VD->isOutOfLine();
1937
1938  return false;
1939}
1940
1941VarDecl *VarDecl::getOutOfLineDefinition() {
1942  if (!isStaticDataMember())
1943    return nullptr;
1944
1945  for (auto RD : redecls()) {
1946    if (RD->getLexicalDeclContext()->isFileContext())
1947      return RD;
1948  }
1949
1950  return nullptr;
1951}
1952
1953void VarDecl::setInit(Expr *I) {
1954  if (EvaluatedStmt *Eval = Init.dyn_cast<EvaluatedStmt *>()) {
1955    Eval->~EvaluatedStmt();
1956    getASTContext().Deallocate(Eval);
1957  }
1958
1959  Init = I;
1960}
1961
1962bool VarDecl::isUsableInConstantExpressions(ASTContext &C) const {
1963  const LangOptions &Lang = C.getLangOpts();
1964
1965  if (!Lang.CPlusPlus)
1966    return false;
1967
1968  // In C++11, any variable of reference type can be used in a constant
1969  // expression if it is initialized by a constant expression.
1970  if (Lang.CPlusPlus11 && getType()->isReferenceType())
1971    return true;
1972
1973  // Only const objects can be used in constant expressions in C++. C++98 does
1974  // not require the variable to be non-volatile, but we consider this to be a
1975  // defect.
1976  if (!getType().isConstQualified() || getType().isVolatileQualified())
1977    return false;
1978
1979  // In C++, const, non-volatile variables of integral or enumeration types
1980  // can be used in constant expressions.
1981  if (getType()->isIntegralOrEnumerationType())
1982    return true;
1983
1984  // Additionally, in C++11, non-volatile constexpr variables can be used in
1985  // constant expressions.
1986  return Lang.CPlusPlus11 && isConstexpr();
1987}
1988
1989/// Convert the initializer for this declaration to the elaborated EvaluatedStmt
1990/// form, which contains extra information on the evaluated value of the
1991/// initializer.
1992EvaluatedStmt *VarDecl::ensureEvaluatedStmt() const {
1993  EvaluatedStmt *Eval = Init.dyn_cast<EvaluatedStmt *>();
1994  if (!Eval) {
1995    Stmt *S = Init.get<Stmt *>();
1996    // Note: EvaluatedStmt contains an APValue, which usually holds
1997    // resources not allocated from the ASTContext.  We need to do some
1998    // work to avoid leaking those, but we do so in VarDecl::evaluateValue
1999    // where we can detect whether there's anything to clean up or not.
2000    Eval = new (getASTContext()) EvaluatedStmt;
2001    Eval->Value = S;
2002    Init = Eval;
2003  }
2004  return Eval;
2005}
2006
2007APValue *VarDecl::evaluateValue() const {
2008  SmallVector<PartialDiagnosticAt, 8> Notes;
2009  return evaluateValue(Notes);
2010}
2011
2012namespace {
2013// Destroy an APValue that was allocated in an ASTContext.
2014void DestroyAPValue(void* UntypedValue) {
2015  static_cast<APValue*>(UntypedValue)->~APValue();
2016}
2017} // namespace
2018
2019APValue *VarDecl::evaluateValue(
2020    SmallVectorImpl<PartialDiagnosticAt> &Notes) const {
2021  EvaluatedStmt *Eval = ensureEvaluatedStmt();
2022
2023  // We only produce notes indicating why an initializer is non-constant the
2024  // first time it is evaluated. FIXME: The notes won't always be emitted the
2025  // first time we try evaluation, so might not be produced at all.
2026  if (Eval->WasEvaluated)
2027    return Eval->Evaluated.isUninit() ? nullptr : &Eval->Evaluated;
2028
2029  const Expr *Init = cast<Expr>(Eval->Value);
2030  assert(!Init->isValueDependent());
2031
2032  if (Eval->IsEvaluating) {
2033    // FIXME: Produce a diagnostic for self-initialization.
2034    Eval->CheckedICE = true;
2035    Eval->IsICE = false;
2036    return nullptr;
2037  }
2038
2039  Eval->IsEvaluating = true;
2040
2041  bool Result = Init->EvaluateAsInitializer(Eval->Evaluated, getASTContext(),
2042                                            this, Notes);
2043
2044  // Ensure the computed APValue is cleaned up later if evaluation succeeded,
2045  // or that it's empty (so that there's nothing to clean up) if evaluation
2046  // failed.
2047  if (!Result)
2048    Eval->Evaluated = APValue();
2049  else if (Eval->Evaluated.needsCleanup())
2050    getASTContext().AddDeallocation(DestroyAPValue, &Eval->Evaluated);
2051
2052  Eval->IsEvaluating = false;
2053  Eval->WasEvaluated = true;
2054
2055  // In C++11, we have determined whether the initializer was a constant
2056  // expression as a side-effect.
2057  if (getASTContext().getLangOpts().CPlusPlus11 && !Eval->CheckedICE) {
2058    Eval->CheckedICE = true;
2059    Eval->IsICE = Result && Notes.empty();
2060  }
2061
2062  return Result ? &Eval->Evaluated : nullptr;
2063}
2064
2065bool VarDecl::checkInitIsICE() const {
2066  // Initializers of weak variables are never ICEs.
2067  if (isWeak())
2068    return false;
2069
2070  EvaluatedStmt *Eval = ensureEvaluatedStmt();
2071  if (Eval->CheckedICE)
2072    // We have already checked whether this subexpression is an
2073    // integral constant expression.
2074    return Eval->IsICE;
2075
2076  const Expr *Init = cast<Expr>(Eval->Value);
2077  assert(!Init->isValueDependent());
2078
2079  // In C++11, evaluate the initializer to check whether it's a constant
2080  // expression.
2081  if (getASTContext().getLangOpts().CPlusPlus11) {
2082    SmallVector<PartialDiagnosticAt, 8> Notes;
2083    evaluateValue(Notes);
2084    return Eval->IsICE;
2085  }
2086
2087  // It's an ICE whether or not the definition we found is
2088  // out-of-line.  See DR 721 and the discussion in Clang PR
2089  // 6206 for details.
2090
2091  if (Eval->CheckingICE)
2092    return false;
2093  Eval->CheckingICE = true;
2094
2095  Eval->IsICE = Init->isIntegerConstantExpr(getASTContext());
2096  Eval->CheckingICE = false;
2097  Eval->CheckedICE = true;
2098  return Eval->IsICE;
2099}
2100
2101VarDecl *VarDecl::getInstantiatedFromStaticDataMember() const {
2102  if (MemberSpecializationInfo *MSI = getMemberSpecializationInfo())
2103    return cast<VarDecl>(MSI->getInstantiatedFrom());
2104
2105  return nullptr;
2106}
2107
2108TemplateSpecializationKind VarDecl::getTemplateSpecializationKind() const {
2109  if (const VarTemplateSpecializationDecl *Spec =
2110          dyn_cast<VarTemplateSpecializationDecl>(this))
2111    return Spec->getSpecializationKind();
2112
2113  if (MemberSpecializationInfo *MSI = getMemberSpecializationInfo())
2114    return MSI->getTemplateSpecializationKind();
2115
2116  return TSK_Undeclared;
2117}
2118
2119SourceLocation VarDecl::getPointOfInstantiation() const {
2120  if (const VarTemplateSpecializationDecl *Spec =
2121          dyn_cast<VarTemplateSpecializationDecl>(this))
2122    return Spec->getPointOfInstantiation();
2123
2124  if (MemberSpecializationInfo *MSI = getMemberSpecializationInfo())
2125    return MSI->getPointOfInstantiation();
2126
2127  return SourceLocation();
2128}
2129
2130VarTemplateDecl *VarDecl::getDescribedVarTemplate() const {
2131  return getASTContext().getTemplateOrSpecializationInfo(this)
2132      .dyn_cast<VarTemplateDecl *>();
2133}
2134
2135void VarDecl::setDescribedVarTemplate(VarTemplateDecl *Template) {
2136  getASTContext().setTemplateOrSpecializationInfo(this, Template);
2137}
2138
2139MemberSpecializationInfo *VarDecl::getMemberSpecializationInfo() const {
2140  if (isStaticDataMember())
2141    // FIXME: Remove ?
2142    // return getASTContext().getInstantiatedFromStaticDataMember(this);
2143    return getASTContext().getTemplateOrSpecializationInfo(this)
2144        .dyn_cast<MemberSpecializationInfo *>();
2145  return nullptr;
2146}
2147
2148void VarDecl::setTemplateSpecializationKind(TemplateSpecializationKind TSK,
2149                                         SourceLocation PointOfInstantiation) {
2150  assert((isa<VarTemplateSpecializationDecl>(this) ||
2151          getMemberSpecializationInfo()) &&
2152         "not a variable or static data member template specialization");
2153
2154  if (VarTemplateSpecializationDecl *Spec =
2155          dyn_cast<VarTemplateSpecializationDecl>(this)) {
2156    Spec->setSpecializationKind(TSK);
2157    if (TSK != TSK_ExplicitSpecialization && PointOfInstantiation.isValid() &&
2158        Spec->getPointOfInstantiation().isInvalid())
2159      Spec->setPointOfInstantiation(PointOfInstantiation);
2160  }
2161
2162  if (MemberSpecializationInfo *MSI = getMemberSpecializationInfo()) {
2163    MSI->setTemplateSpecializationKind(TSK);
2164    if (TSK != TSK_ExplicitSpecialization && PointOfInstantiation.isValid() &&
2165        MSI->getPointOfInstantiation().isInvalid())
2166      MSI->setPointOfInstantiation(PointOfInstantiation);
2167  }
2168}
2169
2170void
2171VarDecl::setInstantiationOfStaticDataMember(VarDecl *VD,
2172                                            TemplateSpecializationKind TSK) {
2173  assert(getASTContext().getTemplateOrSpecializationInfo(this).isNull() &&
2174         "Previous template or instantiation?");
2175  getASTContext().setInstantiatedFromStaticDataMember(this, VD, TSK);
2176}
2177
2178//===----------------------------------------------------------------------===//
2179// ParmVarDecl Implementation
2180//===----------------------------------------------------------------------===//
2181
2182ParmVarDecl *ParmVarDecl::Create(ASTContext &C, DeclContext *DC,
2183                                 SourceLocation StartLoc,
2184                                 SourceLocation IdLoc, IdentifierInfo *Id,
2185                                 QualType T, TypeSourceInfo *TInfo,
2186                                 StorageClass S, Expr *DefArg) {
2187  return new (C, DC) ParmVarDecl(ParmVar, C, DC, StartLoc, IdLoc, Id, T, TInfo,
2188                                 S, DefArg);
2189}
2190
2191QualType ParmVarDecl::getOriginalType() const {
2192  TypeSourceInfo *TSI = getTypeSourceInfo();
2193  QualType T = TSI ? TSI->getType() : getType();
2194  if (const DecayedType *DT = dyn_cast<DecayedType>(T))
2195    return DT->getOriginalType();
2196  return T;
2197}
2198
2199ParmVarDecl *ParmVarDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
2200  return new (C, ID)
2201      ParmVarDecl(ParmVar, C, nullptr, SourceLocation(), SourceLocation(),
2202                  nullptr, QualType(), nullptr, SC_None, nullptr);
2203}
2204
2205SourceRange ParmVarDecl::getSourceRange() const {
2206  if (!hasInheritedDefaultArg()) {
2207    SourceRange ArgRange = getDefaultArgRange();
2208    if (ArgRange.isValid())
2209      return SourceRange(getOuterLocStart(), ArgRange.getEnd());
2210  }
2211
2212  // DeclaratorDecl considers the range of postfix types as overlapping with the
2213  // declaration name, but this is not the case with parameters in ObjC methods.
2214  if (isa<ObjCMethodDecl>(getDeclContext()))
2215    return SourceRange(DeclaratorDecl::getLocStart(), getLocation());
2216
2217  return DeclaratorDecl::getSourceRange();
2218}
2219
2220Expr *ParmVarDecl::getDefaultArg() {
2221  assert(!hasUnparsedDefaultArg() && "Default argument is not yet parsed!");
2222  assert(!hasUninstantiatedDefaultArg() &&
2223         "Default argument is not yet instantiated!");
2224
2225  Expr *Arg = getInit();
2226  if (ExprWithCleanups *E = dyn_cast_or_null<ExprWithCleanups>(Arg))
2227    return E->getSubExpr();
2228
2229  return Arg;
2230}
2231
2232SourceRange ParmVarDecl::getDefaultArgRange() const {
2233  if (const Expr *E = getInit())
2234    return E->getSourceRange();
2235
2236  if (hasUninstantiatedDefaultArg())
2237    return getUninstantiatedDefaultArg()->getSourceRange();
2238
2239  return SourceRange();
2240}
2241
2242bool ParmVarDecl::isParameterPack() const {
2243  return isa<PackExpansionType>(getType());
2244}
2245
2246void ParmVarDecl::setParameterIndexLarge(unsigned parameterIndex) {
2247  getASTContext().setParameterIndex(this, parameterIndex);
2248  ParmVarDeclBits.ParameterIndex = ParameterIndexSentinel;
2249}
2250
2251unsigned ParmVarDecl::getParameterIndexLarge() const {
2252  return getASTContext().getParameterIndex(this);
2253}
2254
2255//===----------------------------------------------------------------------===//
2256// FunctionDecl Implementation
2257//===----------------------------------------------------------------------===//
2258
2259void FunctionDecl::getNameForDiagnostic(
2260    raw_ostream &OS, const PrintingPolicy &Policy, bool Qualified) const {
2261  NamedDecl::getNameForDiagnostic(OS, Policy, Qualified);
2262  const TemplateArgumentList *TemplateArgs = getTemplateSpecializationArgs();
2263  if (TemplateArgs)
2264    TemplateSpecializationType::PrintTemplateArgumentList(
2265        OS, TemplateArgs->data(), TemplateArgs->size(), Policy);
2266}
2267
2268bool FunctionDecl::isVariadic() const {
2269  if (const FunctionProtoType *FT = getType()->getAs<FunctionProtoType>())
2270    return FT->isVariadic();
2271  return false;
2272}
2273
2274bool FunctionDecl::hasBody(const FunctionDecl *&Definition) const {
2275  for (auto I : redecls()) {
2276    if (I->Body || I->IsLateTemplateParsed) {
2277      Definition = I;
2278      return true;
2279    }
2280  }
2281
2282  return false;
2283}
2284
2285bool FunctionDecl::hasTrivialBody() const
2286{
2287  Stmt *S = getBody();
2288  if (!S) {
2289    // Since we don't have a body for this function, we don't know if it's
2290    // trivial or not.
2291    return false;
2292  }
2293
2294  if (isa<CompoundStmt>(S) && cast<CompoundStmt>(S)->body_empty())
2295    return true;
2296  return false;
2297}
2298
2299bool FunctionDecl::isDefined(const FunctionDecl *&Definition) const {
2300  for (auto I : redecls()) {
2301    if (I->IsDeleted || I->IsDefaulted || I->Body || I->IsLateTemplateParsed ||
2302        I->hasAttr<AliasAttr>()) {
2303      Definition = I->IsDeleted ? I->getCanonicalDecl() : I;
2304      return true;
2305    }
2306  }
2307
2308  return false;
2309}
2310
2311Stmt *FunctionDecl::getBody(const FunctionDecl *&Definition) const {
2312  if (!hasBody(Definition))
2313    return nullptr;
2314
2315  if (Definition->Body)
2316    return Definition->Body.get(getASTContext().getExternalSource());
2317
2318  return nullptr;
2319}
2320
2321void FunctionDecl::setBody(Stmt *B) {
2322  Body = B;
2323  if (B)
2324    EndRangeLoc = B->getLocEnd();
2325}
2326
2327void FunctionDecl::setPure(bool P) {
2328  IsPure = P;
2329  if (P)
2330    if (CXXRecordDecl *Parent = dyn_cast<CXXRecordDecl>(getDeclContext()))
2331      Parent->markedVirtualFunctionPure();
2332}
2333
2334template<std::size_t Len>
2335static bool isNamed(const NamedDecl *ND, const char (&Str)[Len]) {
2336  IdentifierInfo *II = ND->getIdentifier();
2337  return II && II->isStr(Str);
2338}
2339
2340bool FunctionDecl::isMain() const {
2341  const TranslationUnitDecl *tunit =
2342    dyn_cast<TranslationUnitDecl>(getDeclContext()->getRedeclContext());
2343  return tunit &&
2344         !tunit->getASTContext().getLangOpts().Freestanding &&
2345         isNamed(this, "main");
2346}
2347
2348bool FunctionDecl::isMSVCRTEntryPoint() const {
2349  const TranslationUnitDecl *TUnit =
2350      dyn_cast<TranslationUnitDecl>(getDeclContext()->getRedeclContext());
2351  if (!TUnit)
2352    return false;
2353
2354  // Even though we aren't really targeting MSVCRT if we are freestanding,
2355  // semantic analysis for these functions remains the same.
2356
2357  // MSVCRT entry points only exist on MSVCRT targets.
2358  if (!TUnit->getASTContext().getTargetInfo().getTriple().isOSMSVCRT())
2359    return false;
2360
2361  // Nameless functions like constructors cannot be entry points.
2362  if (!getIdentifier())
2363    return false;
2364
2365  return llvm::StringSwitch<bool>(getName())
2366      .Cases("main",     // an ANSI console app
2367             "wmain",    // a Unicode console App
2368             "WinMain",  // an ANSI GUI app
2369             "wWinMain", // a Unicode GUI app
2370             "DllMain",  // a DLL
2371             true)
2372      .Default(false);
2373}
2374
2375bool FunctionDecl::isReservedGlobalPlacementOperator() const {
2376  assert(getDeclName().getNameKind() == DeclarationName::CXXOperatorName);
2377  assert(getDeclName().getCXXOverloadedOperator() == OO_New ||
2378         getDeclName().getCXXOverloadedOperator() == OO_Delete ||
2379         getDeclName().getCXXOverloadedOperator() == OO_Array_New ||
2380         getDeclName().getCXXOverloadedOperator() == OO_Array_Delete);
2381
2382  if (!getDeclContext()->getRedeclContext()->isTranslationUnit())
2383    return false;
2384
2385  const FunctionProtoType *proto = getType()->castAs<FunctionProtoType>();
2386  if (proto->getNumParams() != 2 || proto->isVariadic())
2387    return false;
2388
2389  ASTContext &Context =
2390    cast<TranslationUnitDecl>(getDeclContext()->getRedeclContext())
2391      ->getASTContext();
2392
2393  // The result type and first argument type are constant across all
2394  // these operators.  The second argument must be exactly void*.
2395  return (proto->getParamType(1).getCanonicalType() == Context.VoidPtrTy);
2396}
2397
2398bool FunctionDecl::isReplaceableGlobalAllocationFunction() const {
2399  if (getDeclName().getNameKind() != DeclarationName::CXXOperatorName)
2400    return false;
2401  if (getDeclName().getCXXOverloadedOperator() != OO_New &&
2402      getDeclName().getCXXOverloadedOperator() != OO_Delete &&
2403      getDeclName().getCXXOverloadedOperator() != OO_Array_New &&
2404      getDeclName().getCXXOverloadedOperator() != OO_Array_Delete)
2405    return false;
2406
2407  if (isa<CXXRecordDecl>(getDeclContext()))
2408    return false;
2409
2410  // This can only fail for an invalid 'operator new' declaration.
2411  if (!getDeclContext()->getRedeclContext()->isTranslationUnit())
2412    return false;
2413
2414  const FunctionProtoType *FPT = getType()->castAs<FunctionProtoType>();
2415  if (FPT->getNumParams() == 0 || FPT->getNumParams() > 2 || FPT->isVariadic())
2416    return false;
2417
2418  // If this is a single-parameter function, it must be a replaceable global
2419  // allocation or deallocation function.
2420  if (FPT->getNumParams() == 1)
2421    return true;
2422
2423  // Otherwise, we're looking for a second parameter whose type is
2424  // 'const std::nothrow_t &', or, in C++1y, 'std::size_t'.
2425  QualType Ty = FPT->getParamType(1);
2426  ASTContext &Ctx = getASTContext();
2427  if (Ctx.getLangOpts().SizedDeallocation &&
2428      Ctx.hasSameType(Ty, Ctx.getSizeType()))
2429    return true;
2430  if (!Ty->isReferenceType())
2431    return false;
2432  Ty = Ty->getPointeeType();
2433  if (Ty.getCVRQualifiers() != Qualifiers::Const)
2434    return false;
2435  const CXXRecordDecl *RD = Ty->getAsCXXRecordDecl();
2436  return RD && isNamed(RD, "nothrow_t") && RD->isInStdNamespace();
2437}
2438
2439FunctionDecl *
2440FunctionDecl::getCorrespondingUnsizedGlobalDeallocationFunction() const {
2441  ASTContext &Ctx = getASTContext();
2442  if (!Ctx.getLangOpts().SizedDeallocation)
2443    return nullptr;
2444
2445  if (getDeclName().getNameKind() != DeclarationName::CXXOperatorName)
2446    return nullptr;
2447  if (getDeclName().getCXXOverloadedOperator() != OO_Delete &&
2448      getDeclName().getCXXOverloadedOperator() != OO_Array_Delete)
2449    return nullptr;
2450  if (isa<CXXRecordDecl>(getDeclContext()))
2451    return nullptr;
2452
2453  if (!getDeclContext()->getRedeclContext()->isTranslationUnit())
2454    return nullptr;
2455
2456  if (getNumParams() != 2 || isVariadic() ||
2457      !Ctx.hasSameType(getType()->castAs<FunctionProtoType>()->getParamType(1),
2458                       Ctx.getSizeType()))
2459    return nullptr;
2460
2461  // This is a sized deallocation function. Find the corresponding unsized
2462  // deallocation function.
2463  lookup_const_result R = getDeclContext()->lookup(getDeclName());
2464  for (lookup_const_result::iterator RI = R.begin(), RE = R.end(); RI != RE;
2465       ++RI)
2466    if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*RI))
2467      if (FD->getNumParams() == 1 && !FD->isVariadic())
2468        return FD;
2469  return nullptr;
2470}
2471
2472LanguageLinkage FunctionDecl::getLanguageLinkage() const {
2473  return getDeclLanguageLinkage(*this);
2474}
2475
2476bool FunctionDecl::isExternC() const {
2477  return isDeclExternC(*this);
2478}
2479
2480bool FunctionDecl::isInExternCContext() const {
2481  return getLexicalDeclContext()->isExternCContext();
2482}
2483
2484bool FunctionDecl::isInExternCXXContext() const {
2485  return getLexicalDeclContext()->isExternCXXContext();
2486}
2487
2488bool FunctionDecl::isGlobal() const {
2489  if (const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(this))
2490    return Method->isStatic();
2491
2492  if (getCanonicalDecl()->getStorageClass() == SC_Static)
2493    return false;
2494
2495  for (const DeclContext *DC = getDeclContext();
2496       DC->isNamespace();
2497       DC = DC->getParent()) {
2498    if (const NamespaceDecl *Namespace = cast<NamespaceDecl>(DC)) {
2499      if (!Namespace->getDeclName())
2500        return false;
2501      break;
2502    }
2503  }
2504
2505  return true;
2506}
2507
2508bool FunctionDecl::isNoReturn() const {
2509  return hasAttr<NoReturnAttr>() || hasAttr<CXX11NoReturnAttr>() ||
2510         hasAttr<C11NoReturnAttr>() ||
2511         getType()->getAs<FunctionType>()->getNoReturnAttr();
2512}
2513
2514void
2515FunctionDecl::setPreviousDeclaration(FunctionDecl *PrevDecl) {
2516  redeclarable_base::setPreviousDecl(PrevDecl);
2517
2518  if (FunctionTemplateDecl *FunTmpl = getDescribedFunctionTemplate()) {
2519    FunctionTemplateDecl *PrevFunTmpl
2520      = PrevDecl? PrevDecl->getDescribedFunctionTemplate() : nullptr;
2521    assert((!PrevDecl || PrevFunTmpl) && "Function/function template mismatch");
2522    FunTmpl->setPreviousDecl(PrevFunTmpl);
2523  }
2524
2525  if (PrevDecl && PrevDecl->IsInline)
2526    IsInline = true;
2527}
2528
2529const FunctionDecl *FunctionDecl::getCanonicalDecl() const {
2530  return getFirstDecl();
2531}
2532
2533FunctionDecl *FunctionDecl::getCanonicalDecl() { return getFirstDecl(); }
2534
2535/// \brief Returns a value indicating whether this function
2536/// corresponds to a builtin function.
2537///
2538/// The function corresponds to a built-in function if it is
2539/// declared at translation scope or within an extern "C" block and
2540/// its name matches with the name of a builtin. The returned value
2541/// will be 0 for functions that do not correspond to a builtin, a
2542/// value of type \c Builtin::ID if in the target-independent range
2543/// \c [1,Builtin::First), or a target-specific builtin value.
2544unsigned FunctionDecl::getBuiltinID() const {
2545  if (!getIdentifier())
2546    return 0;
2547
2548  unsigned BuiltinID = getIdentifier()->getBuiltinID();
2549  if (!BuiltinID)
2550    return 0;
2551
2552  ASTContext &Context = getASTContext();
2553  if (Context.getLangOpts().CPlusPlus) {
2554    const LinkageSpecDecl *LinkageDecl = dyn_cast<LinkageSpecDecl>(
2555        getFirstDecl()->getDeclContext());
2556    // In C++, the first declaration of a builtin is always inside an implicit
2557    // extern "C".
2558    // FIXME: A recognised library function may not be directly in an extern "C"
2559    // declaration, for instance "extern "C" { namespace std { decl } }".
2560    if (!LinkageDecl || LinkageDecl->getLanguage() != LinkageSpecDecl::lang_c)
2561      return 0;
2562  }
2563
2564  // If the function is marked "overloadable", it has a different mangled name
2565  // and is not the C library function.
2566  if (hasAttr<OverloadableAttr>())
2567    return 0;
2568
2569  if (!Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID))
2570    return BuiltinID;
2571
2572  // This function has the name of a known C library
2573  // function. Determine whether it actually refers to the C library
2574  // function or whether it just has the same name.
2575
2576  // If this is a static function, it's not a builtin.
2577  if (getStorageClass() == SC_Static)
2578    return 0;
2579
2580  return BuiltinID;
2581}
2582
2583
2584/// getNumParams - Return the number of parameters this function must have
2585/// based on its FunctionType.  This is the length of the ParamInfo array
2586/// after it has been created.
2587unsigned FunctionDecl::getNumParams() const {
2588  const FunctionProtoType *FPT = getType()->getAs<FunctionProtoType>();
2589  return FPT ? FPT->getNumParams() : 0;
2590}
2591
2592void FunctionDecl::setParams(ASTContext &C,
2593                             ArrayRef<ParmVarDecl *> NewParamInfo) {
2594  assert(!ParamInfo && "Already has param info!");
2595  assert(NewParamInfo.size() == getNumParams() && "Parameter count mismatch!");
2596
2597  // Zero params -> null pointer.
2598  if (!NewParamInfo.empty()) {
2599    ParamInfo = new (C) ParmVarDecl*[NewParamInfo.size()];
2600    std::copy(NewParamInfo.begin(), NewParamInfo.end(), ParamInfo);
2601  }
2602}
2603
2604void FunctionDecl::setDeclsInPrototypeScope(ArrayRef<NamedDecl *> NewDecls) {
2605  assert(DeclsInPrototypeScope.empty() && "Already has prototype decls!");
2606
2607  if (!NewDecls.empty()) {
2608    NamedDecl **A = new (getASTContext()) NamedDecl*[NewDecls.size()];
2609    std::copy(NewDecls.begin(), NewDecls.end(), A);
2610    DeclsInPrototypeScope = ArrayRef<NamedDecl *>(A, NewDecls.size());
2611    // Move declarations introduced in prototype to the function context.
2612    for (auto I : NewDecls) {
2613      DeclContext *DC = I->getDeclContext();
2614      // Forward-declared reference to an enumeration is not added to
2615      // declaration scope, so skip declaration that is absent from its
2616      // declaration contexts.
2617      if (DC->containsDecl(I)) {
2618          DC->removeDecl(I);
2619          I->setDeclContext(this);
2620          addDecl(I);
2621      }
2622    }
2623  }
2624}
2625
2626/// getMinRequiredArguments - Returns the minimum number of arguments
2627/// needed to call this function. This may be fewer than the number of
2628/// function parameters, if some of the parameters have default
2629/// arguments (in C++) or are parameter packs (C++11).
2630unsigned FunctionDecl::getMinRequiredArguments() const {
2631  if (!getASTContext().getLangOpts().CPlusPlus)
2632    return getNumParams();
2633
2634  unsigned NumRequiredArgs = 0;
2635  for (auto *Param : params())
2636    if (!Param->isParameterPack() && !Param->hasDefaultArg())
2637      ++NumRequiredArgs;
2638  return NumRequiredArgs;
2639}
2640
2641/// \brief The combination of the extern and inline keywords under MSVC forces
2642/// the function to be required.
2643///
2644/// Note: This function assumes that we will only get called when isInlined()
2645/// would return true for this FunctionDecl.
2646bool FunctionDecl::isMSExternInline() const {
2647  assert(isInlined() && "expected to get called on an inlined function!");
2648
2649  const ASTContext &Context = getASTContext();
2650  if (!Context.getLangOpts().MSVCCompat && !hasAttr<DLLExportAttr>())
2651    return false;
2652
2653  for (const FunctionDecl *FD = this; FD; FD = FD->getPreviousDecl())
2654    if (FD->getStorageClass() == SC_Extern)
2655      return true;
2656
2657  return false;
2658}
2659
2660static bool redeclForcesDefMSVC(const FunctionDecl *Redecl) {
2661  if (Redecl->getStorageClass() != SC_Extern)
2662    return false;
2663
2664  for (const FunctionDecl *FD = Redecl->getPreviousDecl(); FD;
2665       FD = FD->getPreviousDecl())
2666    if (FD->getStorageClass() == SC_Extern)
2667      return false;
2668
2669  return true;
2670}
2671
2672static bool RedeclForcesDefC99(const FunctionDecl *Redecl) {
2673  // Only consider file-scope declarations in this test.
2674  if (!Redecl->getLexicalDeclContext()->isTranslationUnit())
2675    return false;
2676
2677  // Only consider explicit declarations; the presence of a builtin for a
2678  // libcall shouldn't affect whether a definition is externally visible.
2679  if (Redecl->isImplicit())
2680    return false;
2681
2682  if (!Redecl->isInlineSpecified() || Redecl->getStorageClass() == SC_Extern)
2683    return true; // Not an inline definition
2684
2685  return false;
2686}
2687
2688/// \brief For a function declaration in C or C++, determine whether this
2689/// declaration causes the definition to be externally visible.
2690///
2691/// For instance, this determines if adding the current declaration to the set
2692/// of redeclarations of the given functions causes
2693/// isInlineDefinitionExternallyVisible to change from false to true.
2694bool FunctionDecl::doesDeclarationForceExternallyVisibleDefinition() const {
2695  assert(!doesThisDeclarationHaveABody() &&
2696         "Must have a declaration without a body.");
2697
2698  ASTContext &Context = getASTContext();
2699
2700  if (Context.getLangOpts().MSVCCompat) {
2701    const FunctionDecl *Definition;
2702    if (hasBody(Definition) && Definition->isInlined() &&
2703        redeclForcesDefMSVC(this))
2704      return true;
2705  }
2706
2707  if (Context.getLangOpts().GNUInline || hasAttr<GNUInlineAttr>()) {
2708    // With GNU inlining, a declaration with 'inline' but not 'extern', forces
2709    // an externally visible definition.
2710    //
2711    // FIXME: What happens if gnu_inline gets added on after the first
2712    // declaration?
2713    if (!isInlineSpecified() || getStorageClass() == SC_Extern)
2714      return false;
2715
2716    const FunctionDecl *Prev = this;
2717    bool FoundBody = false;
2718    while ((Prev = Prev->getPreviousDecl())) {
2719      FoundBody |= Prev->Body.isValid();
2720
2721      if (Prev->Body) {
2722        // If it's not the case that both 'inline' and 'extern' are
2723        // specified on the definition, then it is always externally visible.
2724        if (!Prev->isInlineSpecified() ||
2725            Prev->getStorageClass() != SC_Extern)
2726          return false;
2727      } else if (Prev->isInlineSpecified() &&
2728                 Prev->getStorageClass() != SC_Extern) {
2729        return false;
2730      }
2731    }
2732    return FoundBody;
2733  }
2734
2735  if (Context.getLangOpts().CPlusPlus)
2736    return false;
2737
2738  // C99 6.7.4p6:
2739  //   [...] If all of the file scope declarations for a function in a
2740  //   translation unit include the inline function specifier without extern,
2741  //   then the definition in that translation unit is an inline definition.
2742  if (isInlineSpecified() && getStorageClass() != SC_Extern)
2743    return false;
2744  const FunctionDecl *Prev = this;
2745  bool FoundBody = false;
2746  while ((Prev = Prev->getPreviousDecl())) {
2747    FoundBody |= Prev->Body.isValid();
2748    if (RedeclForcesDefC99(Prev))
2749      return false;
2750  }
2751  return FoundBody;
2752}
2753
2754SourceRange FunctionDecl::getReturnTypeSourceRange() const {
2755  const TypeSourceInfo *TSI = getTypeSourceInfo();
2756  if (!TSI)
2757    return SourceRange();
2758  FunctionTypeLoc FTL =
2759      TSI->getTypeLoc().IgnoreParens().getAs<FunctionTypeLoc>();
2760  if (!FTL)
2761    return SourceRange();
2762
2763  // Skip self-referential return types.
2764  const SourceManager &SM = getASTContext().getSourceManager();
2765  SourceRange RTRange = FTL.getReturnLoc().getSourceRange();
2766  SourceLocation Boundary = getNameInfo().getLocStart();
2767  if (RTRange.isInvalid() || Boundary.isInvalid() ||
2768      !SM.isBeforeInTranslationUnit(RTRange.getEnd(), Boundary))
2769    return SourceRange();
2770
2771  return RTRange;
2772}
2773
2774/// \brief For an inline function definition in C, or for a gnu_inline function
2775/// in C++, determine whether the definition will be externally visible.
2776///
2777/// Inline function definitions are always available for inlining optimizations.
2778/// However, depending on the language dialect, declaration specifiers, and
2779/// attributes, the definition of an inline function may or may not be
2780/// "externally" visible to other translation units in the program.
2781///
2782/// In C99, inline definitions are not externally visible by default. However,
2783/// if even one of the global-scope declarations is marked "extern inline", the
2784/// inline definition becomes externally visible (C99 6.7.4p6).
2785///
2786/// In GNU89 mode, or if the gnu_inline attribute is attached to the function
2787/// definition, we use the GNU semantics for inline, which are nearly the
2788/// opposite of C99 semantics. In particular, "inline" by itself will create
2789/// an externally visible symbol, but "extern inline" will not create an
2790/// externally visible symbol.
2791bool FunctionDecl::isInlineDefinitionExternallyVisible() const {
2792  assert(doesThisDeclarationHaveABody() && "Must have the function definition");
2793  assert(isInlined() && "Function must be inline");
2794  ASTContext &Context = getASTContext();
2795
2796  if (Context.getLangOpts().GNUInline || hasAttr<GNUInlineAttr>()) {
2797    // Note: If you change the logic here, please change
2798    // doesDeclarationForceExternallyVisibleDefinition as well.
2799    //
2800    // If it's not the case that both 'inline' and 'extern' are
2801    // specified on the definition, then this inline definition is
2802    // externally visible.
2803    if (!(isInlineSpecified() && getStorageClass() == SC_Extern))
2804      return true;
2805
2806    // If any declaration is 'inline' but not 'extern', then this definition
2807    // is externally visible.
2808    for (auto Redecl : redecls()) {
2809      if (Redecl->isInlineSpecified() &&
2810          Redecl->getStorageClass() != SC_Extern)
2811        return true;
2812    }
2813
2814    return false;
2815  }
2816
2817  // The rest of this function is C-only.
2818  assert(!Context.getLangOpts().CPlusPlus &&
2819         "should not use C inline rules in C++");
2820
2821  // C99 6.7.4p6:
2822  //   [...] If all of the file scope declarations for a function in a
2823  //   translation unit include the inline function specifier without extern,
2824  //   then the definition in that translation unit is an inline definition.
2825  for (auto Redecl : redecls()) {
2826    if (RedeclForcesDefC99(Redecl))
2827      return true;
2828  }
2829
2830  // C99 6.7.4p6:
2831  //   An inline definition does not provide an external definition for the
2832  //   function, and does not forbid an external definition in another
2833  //   translation unit.
2834  return false;
2835}
2836
2837/// getOverloadedOperator - Which C++ overloaded operator this
2838/// function represents, if any.
2839OverloadedOperatorKind FunctionDecl::getOverloadedOperator() const {
2840  if (getDeclName().getNameKind() == DeclarationName::CXXOperatorName)
2841    return getDeclName().getCXXOverloadedOperator();
2842  else
2843    return OO_None;
2844}
2845
2846/// getLiteralIdentifier - The literal suffix identifier this function
2847/// represents, if any.
2848const IdentifierInfo *FunctionDecl::getLiteralIdentifier() const {
2849  if (getDeclName().getNameKind() == DeclarationName::CXXLiteralOperatorName)
2850    return getDeclName().getCXXLiteralIdentifier();
2851  else
2852    return nullptr;
2853}
2854
2855FunctionDecl::TemplatedKind FunctionDecl::getTemplatedKind() const {
2856  if (TemplateOrSpecialization.isNull())
2857    return TK_NonTemplate;
2858  if (TemplateOrSpecialization.is<FunctionTemplateDecl *>())
2859    return TK_FunctionTemplate;
2860  if (TemplateOrSpecialization.is<MemberSpecializationInfo *>())
2861    return TK_MemberSpecialization;
2862  if (TemplateOrSpecialization.is<FunctionTemplateSpecializationInfo *>())
2863    return TK_FunctionTemplateSpecialization;
2864  if (TemplateOrSpecialization.is
2865                               <DependentFunctionTemplateSpecializationInfo*>())
2866    return TK_DependentFunctionTemplateSpecialization;
2867
2868  llvm_unreachable("Did we miss a TemplateOrSpecialization type?");
2869}
2870
2871FunctionDecl *FunctionDecl::getInstantiatedFromMemberFunction() const {
2872  if (MemberSpecializationInfo *Info = getMemberSpecializationInfo())
2873    return cast<FunctionDecl>(Info->getInstantiatedFrom());
2874
2875  return nullptr;
2876}
2877
2878void
2879FunctionDecl::setInstantiationOfMemberFunction(ASTContext &C,
2880                                               FunctionDecl *FD,
2881                                               TemplateSpecializationKind TSK) {
2882  assert(TemplateOrSpecialization.isNull() &&
2883         "Member function is already a specialization");
2884  MemberSpecializationInfo *Info
2885    = new (C) MemberSpecializationInfo(FD, TSK);
2886  TemplateOrSpecialization = Info;
2887}
2888
2889bool FunctionDecl::isImplicitlyInstantiable() const {
2890  // If the function is invalid, it can't be implicitly instantiated.
2891  if (isInvalidDecl())
2892    return false;
2893
2894  switch (getTemplateSpecializationKind()) {
2895  case TSK_Undeclared:
2896  case TSK_ExplicitInstantiationDefinition:
2897    return false;
2898
2899  case TSK_ImplicitInstantiation:
2900    return true;
2901
2902  // It is possible to instantiate TSK_ExplicitSpecialization kind
2903  // if the FunctionDecl has a class scope specialization pattern.
2904  case TSK_ExplicitSpecialization:
2905    return getClassScopeSpecializationPattern() != nullptr;
2906
2907  case TSK_ExplicitInstantiationDeclaration:
2908    // Handled below.
2909    break;
2910  }
2911
2912  // Find the actual template from which we will instantiate.
2913  const FunctionDecl *PatternDecl = getTemplateInstantiationPattern();
2914  bool HasPattern = false;
2915  if (PatternDecl)
2916    HasPattern = PatternDecl->hasBody(PatternDecl);
2917
2918  // C++0x [temp.explicit]p9:
2919  //   Except for inline functions, other explicit instantiation declarations
2920  //   have the effect of suppressing the implicit instantiation of the entity
2921  //   to which they refer.
2922  if (!HasPattern || !PatternDecl)
2923    return true;
2924
2925  return PatternDecl->isInlined();
2926}
2927
2928bool FunctionDecl::isTemplateInstantiation() const {
2929  switch (getTemplateSpecializationKind()) {
2930    case TSK_Undeclared:
2931    case TSK_ExplicitSpecialization:
2932      return false;
2933    case TSK_ImplicitInstantiation:
2934    case TSK_ExplicitInstantiationDeclaration:
2935    case TSK_ExplicitInstantiationDefinition:
2936      return true;
2937  }
2938  llvm_unreachable("All TSK values handled.");
2939}
2940
2941FunctionDecl *FunctionDecl::getTemplateInstantiationPattern() const {
2942  // Handle class scope explicit specialization special case.
2943  if (getTemplateSpecializationKind() == TSK_ExplicitSpecialization)
2944    return getClassScopeSpecializationPattern();
2945
2946  // If this is a generic lambda call operator specialization, its
2947  // instantiation pattern is always its primary template's pattern
2948  // even if its primary template was instantiated from another
2949  // member template (which happens with nested generic lambdas).
2950  // Since a lambda's call operator's body is transformed eagerly,
2951  // we don't have to go hunting for a prototype definition template
2952  // (i.e. instantiated-from-member-template) to use as an instantiation
2953  // pattern.
2954
2955  if (isGenericLambdaCallOperatorSpecialization(
2956          dyn_cast<CXXMethodDecl>(this))) {
2957    assert(getPrimaryTemplate() && "A generic lambda specialization must be "
2958                                   "generated from a primary call operator "
2959                                   "template");
2960    assert(getPrimaryTemplate()->getTemplatedDecl()->getBody() &&
2961           "A generic lambda call operator template must always have a body - "
2962           "even if instantiated from a prototype (i.e. as written) member "
2963           "template");
2964    return getPrimaryTemplate()->getTemplatedDecl();
2965  }
2966
2967  if (FunctionTemplateDecl *Primary = getPrimaryTemplate()) {
2968    while (Primary->getInstantiatedFromMemberTemplate()) {
2969      // If we have hit a point where the user provided a specialization of
2970      // this template, we're done looking.
2971      if (Primary->isMemberSpecialization())
2972        break;
2973      Primary = Primary->getInstantiatedFromMemberTemplate();
2974    }
2975
2976    return Primary->getTemplatedDecl();
2977  }
2978
2979  return getInstantiatedFromMemberFunction();
2980}
2981
2982FunctionTemplateDecl *FunctionDecl::getPrimaryTemplate() const {
2983  if (FunctionTemplateSpecializationInfo *Info
2984        = TemplateOrSpecialization
2985            .dyn_cast<FunctionTemplateSpecializationInfo*>()) {
2986    return Info->Template.getPointer();
2987  }
2988  return nullptr;
2989}
2990
2991FunctionDecl *FunctionDecl::getClassScopeSpecializationPattern() const {
2992    return getASTContext().getClassScopeSpecializationPattern(this);
2993}
2994
2995const TemplateArgumentList *
2996FunctionDecl::getTemplateSpecializationArgs() const {
2997  if (FunctionTemplateSpecializationInfo *Info
2998        = TemplateOrSpecialization
2999            .dyn_cast<FunctionTemplateSpecializationInfo*>()) {
3000    return Info->TemplateArguments;
3001  }
3002  return nullptr;
3003}
3004
3005const ASTTemplateArgumentListInfo *
3006FunctionDecl::getTemplateSpecializationArgsAsWritten() const {
3007  if (FunctionTemplateSpecializationInfo *Info
3008        = TemplateOrSpecialization
3009            .dyn_cast<FunctionTemplateSpecializationInfo*>()) {
3010    return Info->TemplateArgumentsAsWritten;
3011  }
3012  return nullptr;
3013}
3014
3015void
3016FunctionDecl::setFunctionTemplateSpecialization(ASTContext &C,
3017                                                FunctionTemplateDecl *Template,
3018                                     const TemplateArgumentList *TemplateArgs,
3019                                                void *InsertPos,
3020                                                TemplateSpecializationKind TSK,
3021                        const TemplateArgumentListInfo *TemplateArgsAsWritten,
3022                                          SourceLocation PointOfInstantiation) {
3023  assert(TSK != TSK_Undeclared &&
3024         "Must specify the type of function template specialization");
3025  FunctionTemplateSpecializationInfo *Info
3026    = TemplateOrSpecialization.dyn_cast<FunctionTemplateSpecializationInfo*>();
3027  if (!Info)
3028    Info = FunctionTemplateSpecializationInfo::Create(C, this, Template, TSK,
3029                                                      TemplateArgs,
3030                                                      TemplateArgsAsWritten,
3031                                                      PointOfInstantiation);
3032  TemplateOrSpecialization = Info;
3033  Template->addSpecialization(Info, InsertPos);
3034}
3035
3036void
3037FunctionDecl::setDependentTemplateSpecialization(ASTContext &Context,
3038                                    const UnresolvedSetImpl &Templates,
3039                             const TemplateArgumentListInfo &TemplateArgs) {
3040  assert(TemplateOrSpecialization.isNull());
3041  size_t Size = sizeof(DependentFunctionTemplateSpecializationInfo);
3042  Size += Templates.size() * sizeof(FunctionTemplateDecl*);
3043  Size += TemplateArgs.size() * sizeof(TemplateArgumentLoc);
3044  void *Buffer = Context.Allocate(Size);
3045  DependentFunctionTemplateSpecializationInfo *Info =
3046    new (Buffer) DependentFunctionTemplateSpecializationInfo(Templates,
3047                                                             TemplateArgs);
3048  TemplateOrSpecialization = Info;
3049}
3050
3051DependentFunctionTemplateSpecializationInfo::
3052DependentFunctionTemplateSpecializationInfo(const UnresolvedSetImpl &Ts,
3053                                      const TemplateArgumentListInfo &TArgs)
3054  : AngleLocs(TArgs.getLAngleLoc(), TArgs.getRAngleLoc()) {
3055
3056  d.NumTemplates = Ts.size();
3057  d.NumArgs = TArgs.size();
3058
3059  FunctionTemplateDecl **TsArray =
3060    const_cast<FunctionTemplateDecl**>(getTemplates());
3061  for (unsigned I = 0, E = Ts.size(); I != E; ++I)
3062    TsArray[I] = cast<FunctionTemplateDecl>(Ts[I]->getUnderlyingDecl());
3063
3064  TemplateArgumentLoc *ArgsArray =
3065    const_cast<TemplateArgumentLoc*>(getTemplateArgs());
3066  for (unsigned I = 0, E = TArgs.size(); I != E; ++I)
3067    new (&ArgsArray[I]) TemplateArgumentLoc(TArgs[I]);
3068}
3069
3070TemplateSpecializationKind FunctionDecl::getTemplateSpecializationKind() const {
3071  // For a function template specialization, query the specialization
3072  // information object.
3073  FunctionTemplateSpecializationInfo *FTSInfo
3074    = TemplateOrSpecialization.dyn_cast<FunctionTemplateSpecializationInfo*>();
3075  if (FTSInfo)
3076    return FTSInfo->getTemplateSpecializationKind();
3077
3078  MemberSpecializationInfo *MSInfo
3079    = TemplateOrSpecialization.dyn_cast<MemberSpecializationInfo*>();
3080  if (MSInfo)
3081    return MSInfo->getTemplateSpecializationKind();
3082
3083  return TSK_Undeclared;
3084}
3085
3086void
3087FunctionDecl::setTemplateSpecializationKind(TemplateSpecializationKind TSK,
3088                                          SourceLocation PointOfInstantiation) {
3089  if (FunctionTemplateSpecializationInfo *FTSInfo
3090        = TemplateOrSpecialization.dyn_cast<
3091                                    FunctionTemplateSpecializationInfo*>()) {
3092    FTSInfo->setTemplateSpecializationKind(TSK);
3093    if (TSK != TSK_ExplicitSpecialization &&
3094        PointOfInstantiation.isValid() &&
3095        FTSInfo->getPointOfInstantiation().isInvalid())
3096      FTSInfo->setPointOfInstantiation(PointOfInstantiation);
3097  } else if (MemberSpecializationInfo *MSInfo
3098             = TemplateOrSpecialization.dyn_cast<MemberSpecializationInfo*>()) {
3099    MSInfo->setTemplateSpecializationKind(TSK);
3100    if (TSK != TSK_ExplicitSpecialization &&
3101        PointOfInstantiation.isValid() &&
3102        MSInfo->getPointOfInstantiation().isInvalid())
3103      MSInfo->setPointOfInstantiation(PointOfInstantiation);
3104  } else
3105    llvm_unreachable("Function cannot have a template specialization kind");
3106}
3107
3108SourceLocation FunctionDecl::getPointOfInstantiation() const {
3109  if (FunctionTemplateSpecializationInfo *FTSInfo
3110        = TemplateOrSpecialization.dyn_cast<
3111                                        FunctionTemplateSpecializationInfo*>())
3112    return FTSInfo->getPointOfInstantiation();
3113  else if (MemberSpecializationInfo *MSInfo
3114             = TemplateOrSpecialization.dyn_cast<MemberSpecializationInfo*>())
3115    return MSInfo->getPointOfInstantiation();
3116
3117  return SourceLocation();
3118}
3119
3120bool FunctionDecl::isOutOfLine() const {
3121  if (Decl::isOutOfLine())
3122    return true;
3123
3124  // If this function was instantiated from a member function of a
3125  // class template, check whether that member function was defined out-of-line.
3126  if (FunctionDecl *FD = getInstantiatedFromMemberFunction()) {
3127    const FunctionDecl *Definition;
3128    if (FD->hasBody(Definition))
3129      return Definition->isOutOfLine();
3130  }
3131
3132  // If this function was instantiated from a function template,
3133  // check whether that function template was defined out-of-line.
3134  if (FunctionTemplateDecl *FunTmpl = getPrimaryTemplate()) {
3135    const FunctionDecl *Definition;
3136    if (FunTmpl->getTemplatedDecl()->hasBody(Definition))
3137      return Definition->isOutOfLine();
3138  }
3139
3140  return false;
3141}
3142
3143SourceRange FunctionDecl::getSourceRange() const {
3144  return SourceRange(getOuterLocStart(), EndRangeLoc);
3145}
3146
3147unsigned FunctionDecl::getMemoryFunctionKind() const {
3148  IdentifierInfo *FnInfo = getIdentifier();
3149
3150  if (!FnInfo)
3151    return 0;
3152
3153  // Builtin handling.
3154  switch (getBuiltinID()) {
3155  case Builtin::BI__builtin_memset:
3156  case Builtin::BI__builtin___memset_chk:
3157  case Builtin::BImemset:
3158    return Builtin::BImemset;
3159
3160  case Builtin::BI__builtin_memcpy:
3161  case Builtin::BI__builtin___memcpy_chk:
3162  case Builtin::BImemcpy:
3163    return Builtin::BImemcpy;
3164
3165  case Builtin::BI__builtin_memmove:
3166  case Builtin::BI__builtin___memmove_chk:
3167  case Builtin::BImemmove:
3168    return Builtin::BImemmove;
3169
3170  case Builtin::BIstrlcpy:
3171    return Builtin::BIstrlcpy;
3172  case Builtin::BIstrlcat:
3173    return Builtin::BIstrlcat;
3174
3175  case Builtin::BI__builtin_memcmp:
3176  case Builtin::BImemcmp:
3177    return Builtin::BImemcmp;
3178
3179  case Builtin::BI__builtin_strncpy:
3180  case Builtin::BI__builtin___strncpy_chk:
3181  case Builtin::BIstrncpy:
3182    return Builtin::BIstrncpy;
3183
3184  case Builtin::BI__builtin_strncmp:
3185  case Builtin::BIstrncmp:
3186    return Builtin::BIstrncmp;
3187
3188  case Builtin::BI__builtin_strncasecmp:
3189  case Builtin::BIstrncasecmp:
3190    return Builtin::BIstrncasecmp;
3191
3192  case Builtin::BI__builtin_strncat:
3193  case Builtin::BI__builtin___strncat_chk:
3194  case Builtin::BIstrncat:
3195    return Builtin::BIstrncat;
3196
3197  case Builtin::BI__builtin_strndup:
3198  case Builtin::BIstrndup:
3199    return Builtin::BIstrndup;
3200
3201  case Builtin::BI__builtin_strlen:
3202  case Builtin::BIstrlen:
3203    return Builtin::BIstrlen;
3204
3205  default:
3206    if (isExternC()) {
3207      if (FnInfo->isStr("memset"))
3208        return Builtin::BImemset;
3209      else if (FnInfo->isStr("memcpy"))
3210        return Builtin::BImemcpy;
3211      else if (FnInfo->isStr("memmove"))
3212        return Builtin::BImemmove;
3213      else if (FnInfo->isStr("memcmp"))
3214        return Builtin::BImemcmp;
3215      else if (FnInfo->isStr("strncpy"))
3216        return Builtin::BIstrncpy;
3217      else if (FnInfo->isStr("strncmp"))
3218        return Builtin::BIstrncmp;
3219      else if (FnInfo->isStr("strncasecmp"))
3220        return Builtin::BIstrncasecmp;
3221      else if (FnInfo->isStr("strncat"))
3222        return Builtin::BIstrncat;
3223      else if (FnInfo->isStr("strndup"))
3224        return Builtin::BIstrndup;
3225      else if (FnInfo->isStr("strlen"))
3226        return Builtin::BIstrlen;
3227    }
3228    break;
3229  }
3230  return 0;
3231}
3232
3233//===----------------------------------------------------------------------===//
3234// FieldDecl Implementation
3235//===----------------------------------------------------------------------===//
3236
3237FieldDecl *FieldDecl::Create(const ASTContext &C, DeclContext *DC,
3238                             SourceLocation StartLoc, SourceLocation IdLoc,
3239                             IdentifierInfo *Id, QualType T,
3240                             TypeSourceInfo *TInfo, Expr *BW, bool Mutable,
3241                             InClassInitStyle InitStyle) {
3242  return new (C, DC) FieldDecl(Decl::Field, DC, StartLoc, IdLoc, Id, T, TInfo,
3243                               BW, Mutable, InitStyle);
3244}
3245
3246FieldDecl *FieldDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
3247  return new (C, ID) FieldDecl(Field, nullptr, SourceLocation(),
3248                               SourceLocation(), nullptr, QualType(), nullptr,
3249                               nullptr, false, ICIS_NoInit);
3250}
3251
3252bool FieldDecl::isAnonymousStructOrUnion() const {
3253  if (!isImplicit() || getDeclName())
3254    return false;
3255
3256  if (const RecordType *Record = getType()->getAs<RecordType>())
3257    return Record->getDecl()->isAnonymousStructOrUnion();
3258
3259  return false;
3260}
3261
3262unsigned FieldDecl::getBitWidthValue(const ASTContext &Ctx) const {
3263  assert(isBitField() && "not a bitfield");
3264  Expr *BitWidth = InitializerOrBitWidth.getPointer();
3265  return BitWidth->EvaluateKnownConstInt(Ctx).getZExtValue();
3266}
3267
3268unsigned FieldDecl::getFieldIndex() const {
3269  const FieldDecl *Canonical = getCanonicalDecl();
3270  if (Canonical != this)
3271    return Canonical->getFieldIndex();
3272
3273  if (CachedFieldIndex) return CachedFieldIndex - 1;
3274
3275  unsigned Index = 0;
3276  const RecordDecl *RD = getParent();
3277
3278  for (RecordDecl::field_iterator I = RD->field_begin(), E = RD->field_end();
3279       I != E; ++I, ++Index)
3280    I->getCanonicalDecl()->CachedFieldIndex = Index + 1;
3281
3282  assert(CachedFieldIndex && "failed to find field in parent");
3283  return CachedFieldIndex - 1;
3284}
3285
3286SourceRange FieldDecl::getSourceRange() const {
3287  if (const Expr *E = InitializerOrBitWidth.getPointer())
3288    return SourceRange(getInnerLocStart(), E->getLocEnd());
3289  return DeclaratorDecl::getSourceRange();
3290}
3291
3292void FieldDecl::setBitWidth(Expr *Width) {
3293  assert(!InitializerOrBitWidth.getPointer() && !hasInClassInitializer() &&
3294         "bit width or initializer already set");
3295  InitializerOrBitWidth.setPointer(Width);
3296}
3297
3298void FieldDecl::setInClassInitializer(Expr *Init) {
3299  assert(!InitializerOrBitWidth.getPointer() && hasInClassInitializer() &&
3300         "bit width or initializer already set");
3301  InitializerOrBitWidth.setPointer(Init);
3302}
3303
3304//===----------------------------------------------------------------------===//
3305// TagDecl Implementation
3306//===----------------------------------------------------------------------===//
3307
3308SourceLocation TagDecl::getOuterLocStart() const {
3309  return getTemplateOrInnerLocStart(this);
3310}
3311
3312SourceRange TagDecl::getSourceRange() const {
3313  SourceLocation E = RBraceLoc.isValid() ? RBraceLoc : getLocation();
3314  return SourceRange(getOuterLocStart(), E);
3315}
3316
3317TagDecl *TagDecl::getCanonicalDecl() { return getFirstDecl(); }
3318
3319void TagDecl::setTypedefNameForAnonDecl(TypedefNameDecl *TDD) {
3320  NamedDeclOrQualifier = TDD;
3321  if (const Type *T = getTypeForDecl()) {
3322    (void)T;
3323    assert(T->isLinkageValid());
3324  }
3325  assert(isLinkageValid());
3326}
3327
3328void TagDecl::startDefinition() {
3329  IsBeingDefined = true;
3330
3331  if (CXXRecordDecl *D = dyn_cast<CXXRecordDecl>(this)) {
3332    struct CXXRecordDecl::DefinitionData *Data =
3333      new (getASTContext()) struct CXXRecordDecl::DefinitionData(D);
3334    for (auto I : redecls())
3335      cast<CXXRecordDecl>(I)->DefinitionData = Data;
3336  }
3337}
3338
3339void TagDecl::completeDefinition() {
3340  assert((!isa<CXXRecordDecl>(this) ||
3341          cast<CXXRecordDecl>(this)->hasDefinition()) &&
3342         "definition completed but not started");
3343
3344  IsCompleteDefinition = true;
3345  IsBeingDefined = false;
3346
3347  if (ASTMutationListener *L = getASTMutationListener())
3348    L->CompletedTagDefinition(this);
3349}
3350
3351TagDecl *TagDecl::getDefinition() const {
3352  if (isCompleteDefinition())
3353    return const_cast<TagDecl *>(this);
3354
3355  // If it's possible for us to have an out-of-date definition, check now.
3356  if (MayHaveOutOfDateDef) {
3357    if (IdentifierInfo *II = getIdentifier()) {
3358      if (II->isOutOfDate()) {
3359        updateOutOfDate(*II);
3360      }
3361    }
3362  }
3363
3364  if (const CXXRecordDecl *CXXRD = dyn_cast<CXXRecordDecl>(this))
3365    return CXXRD->getDefinition();
3366
3367  for (auto R : redecls())
3368    if (R->isCompleteDefinition())
3369      return R;
3370
3371  return nullptr;
3372}
3373
3374void TagDecl::setQualifierInfo(NestedNameSpecifierLoc QualifierLoc) {
3375  if (QualifierLoc) {
3376    // Make sure the extended qualifier info is allocated.
3377    if (!hasExtInfo())
3378      NamedDeclOrQualifier = new (getASTContext()) ExtInfo;
3379    // Set qualifier info.
3380    getExtInfo()->QualifierLoc = QualifierLoc;
3381  } else {
3382    // Here Qualifier == 0, i.e., we are removing the qualifier (if any).
3383    if (hasExtInfo()) {
3384      if (getExtInfo()->NumTemplParamLists == 0) {
3385        getASTContext().Deallocate(getExtInfo());
3386        NamedDeclOrQualifier = (TypedefNameDecl*)nullptr;
3387      }
3388      else
3389        getExtInfo()->QualifierLoc = QualifierLoc;
3390    }
3391  }
3392}
3393
3394void TagDecl::setTemplateParameterListsInfo(ASTContext &Context,
3395                                            unsigned NumTPLists,
3396                                            TemplateParameterList **TPLists) {
3397  assert(NumTPLists > 0);
3398  // Make sure the extended decl info is allocated.
3399  if (!hasExtInfo())
3400    // Allocate external info struct.
3401    NamedDeclOrQualifier = new (getASTContext()) ExtInfo;
3402  // Set the template parameter lists info.
3403  getExtInfo()->setTemplateParameterListsInfo(Context, NumTPLists, TPLists);
3404}
3405
3406//===----------------------------------------------------------------------===//
3407// EnumDecl Implementation
3408//===----------------------------------------------------------------------===//
3409
3410void EnumDecl::anchor() { }
3411
3412EnumDecl *EnumDecl::Create(ASTContext &C, DeclContext *DC,
3413                           SourceLocation StartLoc, SourceLocation IdLoc,
3414                           IdentifierInfo *Id,
3415                           EnumDecl *PrevDecl, bool IsScoped,
3416                           bool IsScopedUsingClassTag, bool IsFixed) {
3417  EnumDecl *Enum = new (C, DC) EnumDecl(C, DC, StartLoc, IdLoc, Id, PrevDecl,
3418                                        IsScoped, IsScopedUsingClassTag,
3419                                        IsFixed);
3420  Enum->MayHaveOutOfDateDef = C.getLangOpts().Modules;
3421  C.getTypeDeclType(Enum, PrevDecl);
3422  return Enum;
3423}
3424
3425EnumDecl *EnumDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
3426  EnumDecl *Enum =
3427      new (C, ID) EnumDecl(C, nullptr, SourceLocation(), SourceLocation(),
3428                           nullptr, nullptr, false, false, false);
3429  Enum->MayHaveOutOfDateDef = C.getLangOpts().Modules;
3430  return Enum;
3431}
3432
3433SourceRange EnumDecl::getIntegerTypeRange() const {
3434  if (const TypeSourceInfo *TI = getIntegerTypeSourceInfo())
3435    return TI->getTypeLoc().getSourceRange();
3436  return SourceRange();
3437}
3438
3439void EnumDecl::completeDefinition(QualType NewType,
3440                                  QualType NewPromotionType,
3441                                  unsigned NumPositiveBits,
3442                                  unsigned NumNegativeBits) {
3443  assert(!isCompleteDefinition() && "Cannot redefine enums!");
3444  if (!IntegerType)
3445    IntegerType = NewType.getTypePtr();
3446  PromotionType = NewPromotionType;
3447  setNumPositiveBits(NumPositiveBits);
3448  setNumNegativeBits(NumNegativeBits);
3449  TagDecl::completeDefinition();
3450}
3451
3452TemplateSpecializationKind EnumDecl::getTemplateSpecializationKind() const {
3453  if (MemberSpecializationInfo *MSI = getMemberSpecializationInfo())
3454    return MSI->getTemplateSpecializationKind();
3455
3456  return TSK_Undeclared;
3457}
3458
3459void EnumDecl::setTemplateSpecializationKind(TemplateSpecializationKind TSK,
3460                                         SourceLocation PointOfInstantiation) {
3461  MemberSpecializationInfo *MSI = getMemberSpecializationInfo();
3462  assert(MSI && "Not an instantiated member enumeration?");
3463  MSI->setTemplateSpecializationKind(TSK);
3464  if (TSK != TSK_ExplicitSpecialization &&
3465      PointOfInstantiation.isValid() &&
3466      MSI->getPointOfInstantiation().isInvalid())
3467    MSI->setPointOfInstantiation(PointOfInstantiation);
3468}
3469
3470EnumDecl *EnumDecl::getInstantiatedFromMemberEnum() const {
3471  if (SpecializationInfo)
3472    return cast<EnumDecl>(SpecializationInfo->getInstantiatedFrom());
3473
3474  return nullptr;
3475}
3476
3477void EnumDecl::setInstantiationOfMemberEnum(ASTContext &C, EnumDecl *ED,
3478                                            TemplateSpecializationKind TSK) {
3479  assert(!SpecializationInfo && "Member enum is already a specialization");
3480  SpecializationInfo = new (C) MemberSpecializationInfo(ED, TSK);
3481}
3482
3483//===----------------------------------------------------------------------===//
3484// RecordDecl Implementation
3485//===----------------------------------------------------------------------===//
3486
3487RecordDecl::RecordDecl(Kind DK, TagKind TK, const ASTContext &C,
3488                       DeclContext *DC, SourceLocation StartLoc,
3489                       SourceLocation IdLoc, IdentifierInfo *Id,
3490                       RecordDecl *PrevDecl)
3491    : TagDecl(DK, TK, C, DC, IdLoc, Id, PrevDecl, StartLoc) {
3492  HasFlexibleArrayMember = false;
3493  AnonymousStructOrUnion = false;
3494  HasObjectMember = false;
3495  HasVolatileMember = false;
3496  LoadedFieldsFromExternalStorage = false;
3497  assert(classof(static_cast<Decl*>(this)) && "Invalid Kind!");
3498}
3499
3500RecordDecl *RecordDecl::Create(const ASTContext &C, TagKind TK, DeclContext *DC,
3501                               SourceLocation StartLoc, SourceLocation IdLoc,
3502                               IdentifierInfo *Id, RecordDecl* PrevDecl) {
3503  RecordDecl *R = new (C, DC) RecordDecl(Record, TK, C, DC,
3504                                         StartLoc, IdLoc, Id, PrevDecl);
3505  R->MayHaveOutOfDateDef = C.getLangOpts().Modules;
3506
3507  C.getTypeDeclType(R, PrevDecl);
3508  return R;
3509}
3510
3511RecordDecl *RecordDecl::CreateDeserialized(const ASTContext &C, unsigned ID) {
3512  RecordDecl *R =
3513      new (C, ID) RecordDecl(Record, TTK_Struct, C, nullptr, SourceLocation(),
3514                             SourceLocation(), nullptr, nullptr);
3515  R->MayHaveOutOfDateDef = C.getLangOpts().Modules;
3516  return R;
3517}
3518
3519bool RecordDecl::isInjectedClassName() const {
3520  return isImplicit() && getDeclName() && getDeclContext()->isRecord() &&
3521    cast<RecordDecl>(getDeclContext())->getDeclName() == getDeclName();
3522}
3523
3524RecordDecl::field_iterator RecordDecl::field_begin() const {
3525  if (hasExternalLexicalStorage() && !LoadedFieldsFromExternalStorage)
3526    LoadFieldsFromExternalStorage();
3527
3528  return field_iterator(decl_iterator(FirstDecl));
3529}
3530
3531/// completeDefinition - Notes that the definition of this type is now
3532/// complete.
3533void RecordDecl::completeDefinition() {
3534  assert(!isCompleteDefinition() && "Cannot redefine record!");
3535  TagDecl::completeDefinition();
3536}
3537
3538/// isMsStruct - Get whether or not this record uses ms_struct layout.
3539/// This which can be turned on with an attribute, pragma, or the
3540/// -mms-bitfields command-line option.
3541bool RecordDecl::isMsStruct(const ASTContext &C) const {
3542  return hasAttr<MsStructAttr>() || C.getLangOpts().MSBitfields == 1;
3543}
3544
3545static bool isFieldOrIndirectField(Decl::Kind K) {
3546  return FieldDecl::classofKind(K) || IndirectFieldDecl::classofKind(K);
3547}
3548
3549void RecordDecl::LoadFieldsFromExternalStorage() const {
3550  ExternalASTSource *Source = getASTContext().getExternalSource();
3551  assert(hasExternalLexicalStorage() && Source && "No external storage?");
3552
3553  // Notify that we have a RecordDecl doing some initialization.
3554  ExternalASTSource::Deserializing TheFields(Source);
3555
3556  SmallVector<Decl*, 64> Decls;
3557  LoadedFieldsFromExternalStorage = true;
3558  switch (Source->FindExternalLexicalDecls(this, isFieldOrIndirectField,
3559                                           Decls)) {
3560  case ELR_Success:
3561    break;
3562
3563  case ELR_AlreadyLoaded:
3564  case ELR_Failure:
3565    return;
3566  }
3567
3568#ifndef NDEBUG
3569  // Check that all decls we got were FieldDecls.
3570  for (unsigned i=0, e=Decls.size(); i != e; ++i)
3571    assert(isa<FieldDecl>(Decls[i]) || isa<IndirectFieldDecl>(Decls[i]));
3572#endif
3573
3574  if (Decls.empty())
3575    return;
3576
3577  std::tie(FirstDecl, LastDecl) = BuildDeclChain(Decls,
3578                                                 /*FieldsAlreadyLoaded=*/false);
3579}
3580
3581//===----------------------------------------------------------------------===//
3582// BlockDecl Implementation
3583//===----------------------------------------------------------------------===//
3584
3585void BlockDecl::setParams(ArrayRef<ParmVarDecl *> NewParamInfo) {
3586  assert(!ParamInfo && "Already has param info!");
3587
3588  // Zero params -> null pointer.
3589  if (!NewParamInfo.empty()) {
3590    NumParams = NewParamInfo.size();
3591    ParamInfo = new (getASTContext()) ParmVarDecl*[NewParamInfo.size()];
3592    std::copy(NewParamInfo.begin(), NewParamInfo.end(), ParamInfo);
3593  }
3594}
3595
3596void BlockDecl::setCaptures(ASTContext &Context,
3597                            const Capture *begin,
3598                            const Capture *end,
3599                            bool capturesCXXThis) {
3600  CapturesCXXThis = capturesCXXThis;
3601
3602  if (begin == end) {
3603    NumCaptures = 0;
3604    Captures = nullptr;
3605    return;
3606  }
3607
3608  NumCaptures = end - begin;
3609
3610  // Avoid new Capture[] because we don't want to provide a default
3611  // constructor.
3612  size_t allocationSize = NumCaptures * sizeof(Capture);
3613  void *buffer = Context.Allocate(allocationSize, /*alignment*/sizeof(void*));
3614  memcpy(buffer, begin, allocationSize);
3615  Captures = static_cast<Capture*>(buffer);
3616}
3617
3618bool BlockDecl::capturesVariable(const VarDecl *variable) const {
3619  for (const auto &I : captures())
3620    // Only auto vars can be captured, so no redeclaration worries.
3621    if (I.getVariable() == variable)
3622      return true;
3623
3624  return false;
3625}
3626
3627SourceRange BlockDecl::getSourceRange() const {
3628  return SourceRange(getLocation(), Body? Body->getLocEnd() : getLocation());
3629}
3630
3631//===----------------------------------------------------------------------===//
3632// Other Decl Allocation/Deallocation Method Implementations
3633//===----------------------------------------------------------------------===//
3634
3635void TranslationUnitDecl::anchor() { }
3636
3637TranslationUnitDecl *TranslationUnitDecl::Create(ASTContext &C) {
3638  return new (C, (DeclContext *)nullptr) TranslationUnitDecl(C);
3639}
3640
3641void LabelDecl::anchor() { }
3642
3643LabelDecl *LabelDecl::Create(ASTContext &C, DeclContext *DC,
3644                             SourceLocation IdentL, IdentifierInfo *II) {
3645  return new (C, DC) LabelDecl(DC, IdentL, II, nullptr, IdentL);
3646}
3647
3648LabelDecl *LabelDecl::Create(ASTContext &C, DeclContext *DC,
3649                             SourceLocation IdentL, IdentifierInfo *II,
3650                             SourceLocation GnuLabelL) {
3651  assert(GnuLabelL != IdentL && "Use this only for GNU local labels");
3652  return new (C, DC) LabelDecl(DC, IdentL, II, nullptr, GnuLabelL);
3653}
3654
3655LabelDecl *LabelDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
3656  return new (C, ID) LabelDecl(nullptr, SourceLocation(), nullptr, nullptr,
3657                               SourceLocation());
3658}
3659
3660void ValueDecl::anchor() { }
3661
3662bool ValueDecl::isWeak() const {
3663  for (const auto *I : attrs())
3664    if (isa<WeakAttr>(I) || isa<WeakRefAttr>(I))
3665      return true;
3666
3667  return isWeakImported();
3668}
3669
3670void ImplicitParamDecl::anchor() { }
3671
3672ImplicitParamDecl *ImplicitParamDecl::Create(ASTContext &C, DeclContext *DC,
3673                                             SourceLocation IdLoc,
3674                                             IdentifierInfo *Id,
3675                                             QualType Type) {
3676  return new (C, DC) ImplicitParamDecl(C, DC, IdLoc, Id, Type);
3677}
3678
3679ImplicitParamDecl *ImplicitParamDecl::CreateDeserialized(ASTContext &C,
3680                                                         unsigned ID) {
3681  return new (C, ID) ImplicitParamDecl(C, nullptr, SourceLocation(), nullptr,
3682                                       QualType());
3683}
3684
3685FunctionDecl *FunctionDecl::Create(ASTContext &C, DeclContext *DC,
3686                                   SourceLocation StartLoc,
3687                                   const DeclarationNameInfo &NameInfo,
3688                                   QualType T, TypeSourceInfo *TInfo,
3689                                   StorageClass SC,
3690                                   bool isInlineSpecified,
3691                                   bool hasWrittenPrototype,
3692                                   bool isConstexprSpecified) {
3693  FunctionDecl *New =
3694      new (C, DC) FunctionDecl(Function, C, DC, StartLoc, NameInfo, T, TInfo,
3695                               SC, isInlineSpecified, isConstexprSpecified);
3696  New->HasWrittenPrototype = hasWrittenPrototype;
3697  return New;
3698}
3699
3700FunctionDecl *FunctionDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
3701  return new (C, ID) FunctionDecl(Function, C, nullptr, SourceLocation(),
3702                                  DeclarationNameInfo(), QualType(), nullptr,
3703                                  SC_None, false, false);
3704}
3705
3706BlockDecl *BlockDecl::Create(ASTContext &C, DeclContext *DC, SourceLocation L) {
3707  return new (C, DC) BlockDecl(DC, L);
3708}
3709
3710BlockDecl *BlockDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
3711  return new (C, ID) BlockDecl(nullptr, SourceLocation());
3712}
3713
3714CapturedDecl *CapturedDecl::Create(ASTContext &C, DeclContext *DC,
3715                                   unsigned NumParams) {
3716  return new (C, DC, NumParams * sizeof(ImplicitParamDecl *))
3717      CapturedDecl(DC, NumParams);
3718}
3719
3720CapturedDecl *CapturedDecl::CreateDeserialized(ASTContext &C, unsigned ID,
3721                                               unsigned NumParams) {
3722  return new (C, ID, NumParams * sizeof(ImplicitParamDecl *))
3723      CapturedDecl(nullptr, NumParams);
3724}
3725
3726EnumConstantDecl *EnumConstantDecl::Create(ASTContext &C, EnumDecl *CD,
3727                                           SourceLocation L,
3728                                           IdentifierInfo *Id, QualType T,
3729                                           Expr *E, const llvm::APSInt &V) {
3730  return new (C, CD) EnumConstantDecl(CD, L, Id, T, E, V);
3731}
3732
3733EnumConstantDecl *
3734EnumConstantDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
3735  return new (C, ID) EnumConstantDecl(nullptr, SourceLocation(), nullptr,
3736                                      QualType(), nullptr, llvm::APSInt());
3737}
3738
3739void IndirectFieldDecl::anchor() { }
3740
3741IndirectFieldDecl *
3742IndirectFieldDecl::Create(ASTContext &C, DeclContext *DC, SourceLocation L,
3743                          IdentifierInfo *Id, QualType T, NamedDecl **CH,
3744                          unsigned CHS) {
3745  return new (C, DC) IndirectFieldDecl(DC, L, Id, T, CH, CHS);
3746}
3747
3748IndirectFieldDecl *IndirectFieldDecl::CreateDeserialized(ASTContext &C,
3749                                                         unsigned ID) {
3750  return new (C, ID) IndirectFieldDecl(nullptr, SourceLocation(),
3751                                       DeclarationName(), QualType(), nullptr,
3752                                       0);
3753}
3754
3755SourceRange EnumConstantDecl::getSourceRange() const {
3756  SourceLocation End = getLocation();
3757  if (Init)
3758    End = Init->getLocEnd();
3759  return SourceRange(getLocation(), End);
3760}
3761
3762void TypeDecl::anchor() { }
3763
3764TypedefDecl *TypedefDecl::Create(ASTContext &C, DeclContext *DC,
3765                                 SourceLocation StartLoc, SourceLocation IdLoc,
3766                                 IdentifierInfo *Id, TypeSourceInfo *TInfo) {
3767  return new (C, DC) TypedefDecl(C, DC, StartLoc, IdLoc, Id, TInfo);
3768}
3769
3770void TypedefNameDecl::anchor() { }
3771
3772TypedefDecl *TypedefDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
3773  return new (C, ID) TypedefDecl(C, nullptr, SourceLocation(), SourceLocation(),
3774                                 nullptr, nullptr);
3775}
3776
3777TypeAliasDecl *TypeAliasDecl::Create(ASTContext &C, DeclContext *DC,
3778                                     SourceLocation StartLoc,
3779                                     SourceLocation IdLoc, IdentifierInfo *Id,
3780                                     TypeSourceInfo *TInfo) {
3781  return new (C, DC) TypeAliasDecl(C, DC, StartLoc, IdLoc, Id, TInfo);
3782}
3783
3784TypeAliasDecl *TypeAliasDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
3785  return new (C, ID) TypeAliasDecl(C, nullptr, SourceLocation(),
3786                                   SourceLocation(), nullptr, nullptr);
3787}
3788
3789SourceRange TypedefDecl::getSourceRange() const {
3790  SourceLocation RangeEnd = getLocation();
3791  if (TypeSourceInfo *TInfo = getTypeSourceInfo()) {
3792    if (typeIsPostfix(TInfo->getType()))
3793      RangeEnd = TInfo->getTypeLoc().getSourceRange().getEnd();
3794  }
3795  return SourceRange(getLocStart(), RangeEnd);
3796}
3797
3798SourceRange TypeAliasDecl::getSourceRange() const {
3799  SourceLocation RangeEnd = getLocStart();
3800  if (TypeSourceInfo *TInfo = getTypeSourceInfo())
3801    RangeEnd = TInfo->getTypeLoc().getSourceRange().getEnd();
3802  return SourceRange(getLocStart(), RangeEnd);
3803}
3804
3805void FileScopeAsmDecl::anchor() { }
3806
3807FileScopeAsmDecl *FileScopeAsmDecl::Create(ASTContext &C, DeclContext *DC,
3808                                           StringLiteral *Str,
3809                                           SourceLocation AsmLoc,
3810                                           SourceLocation RParenLoc) {
3811  return new (C, DC) FileScopeAsmDecl(DC, Str, AsmLoc, RParenLoc);
3812}
3813
3814FileScopeAsmDecl *FileScopeAsmDecl::CreateDeserialized(ASTContext &C,
3815                                                       unsigned ID) {
3816  return new (C, ID) FileScopeAsmDecl(nullptr, nullptr, SourceLocation(),
3817                                      SourceLocation());
3818}
3819
3820void EmptyDecl::anchor() {}
3821
3822EmptyDecl *EmptyDecl::Create(ASTContext &C, DeclContext *DC, SourceLocation L) {
3823  return new (C, DC) EmptyDecl(DC, L);
3824}
3825
3826EmptyDecl *EmptyDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
3827  return new (C, ID) EmptyDecl(nullptr, SourceLocation());
3828}
3829
3830//===----------------------------------------------------------------------===//
3831// ImportDecl Implementation
3832//===----------------------------------------------------------------------===//
3833
3834/// \brief Retrieve the number of module identifiers needed to name the given
3835/// module.
3836static unsigned getNumModuleIdentifiers(Module *Mod) {
3837  unsigned Result = 1;
3838  while (Mod->Parent) {
3839    Mod = Mod->Parent;
3840    ++Result;
3841  }
3842  return Result;
3843}
3844
3845ImportDecl::ImportDecl(DeclContext *DC, SourceLocation StartLoc,
3846                       Module *Imported,
3847                       ArrayRef<SourceLocation> IdentifierLocs)
3848  : Decl(Import, DC, StartLoc), ImportedAndComplete(Imported, true),
3849    NextLocalImport()
3850{
3851  assert(getNumModuleIdentifiers(Imported) == IdentifierLocs.size());
3852  SourceLocation *StoredLocs = reinterpret_cast<SourceLocation *>(this + 1);
3853  memcpy(StoredLocs, IdentifierLocs.data(),
3854         IdentifierLocs.size() * sizeof(SourceLocation));
3855}
3856
3857ImportDecl::ImportDecl(DeclContext *DC, SourceLocation StartLoc,
3858                       Module *Imported, SourceLocation EndLoc)
3859  : Decl(Import, DC, StartLoc), ImportedAndComplete(Imported, false),
3860    NextLocalImport()
3861{
3862  *reinterpret_cast<SourceLocation *>(this + 1) = EndLoc;
3863}
3864
3865ImportDecl *ImportDecl::Create(ASTContext &C, DeclContext *DC,
3866                               SourceLocation StartLoc, Module *Imported,
3867                               ArrayRef<SourceLocation> IdentifierLocs) {
3868  return new (C, DC, IdentifierLocs.size() * sizeof(SourceLocation))
3869      ImportDecl(DC, StartLoc, Imported, IdentifierLocs);
3870}
3871
3872ImportDecl *ImportDecl::CreateImplicit(ASTContext &C, DeclContext *DC,
3873                                       SourceLocation StartLoc,
3874                                       Module *Imported,
3875                                       SourceLocation EndLoc) {
3876  ImportDecl *Import =
3877      new (C, DC, sizeof(SourceLocation)) ImportDecl(DC, StartLoc,
3878                                                     Imported, EndLoc);
3879  Import->setImplicit();
3880  return Import;
3881}
3882
3883ImportDecl *ImportDecl::CreateDeserialized(ASTContext &C, unsigned ID,
3884                                           unsigned NumLocations) {
3885  return new (C, ID, NumLocations * sizeof(SourceLocation))
3886      ImportDecl(EmptyShell());
3887}
3888
3889ArrayRef<SourceLocation> ImportDecl::getIdentifierLocs() const {
3890  if (!ImportedAndComplete.getInt())
3891    return None;
3892
3893  const SourceLocation *StoredLocs
3894    = reinterpret_cast<const SourceLocation *>(this + 1);
3895  return ArrayRef<SourceLocation>(StoredLocs,
3896                                  getNumModuleIdentifiers(getImportedModule()));
3897}
3898
3899SourceRange ImportDecl::getSourceRange() const {
3900  if (!ImportedAndComplete.getInt())
3901    return SourceRange(getLocation(),
3902                       *reinterpret_cast<const SourceLocation *>(this + 1));
3903
3904  return SourceRange(getLocation(), getIdentifierLocs().back());
3905}
3906