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