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