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