SemaDecl.cpp revision 2e510a0c0f7afa7951aa19c65a06c2da579535a8
1//===--- SemaDecl.cpp - Semantic Analysis for Declarations ----------------===//
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 semantic analysis for declarations.
11//
12//===----------------------------------------------------------------------===//
13
14#include "clang/Sema/SemaInternal.h"
15#include "clang/Sema/Initialization.h"
16#include "clang/Sema/Lookup.h"
17#include "clang/Sema/CXXFieldCollector.h"
18#include "clang/Sema/Scope.h"
19#include "clang/Sema/ScopeInfo.h"
20#include "TypeLocBuilder.h"
21#include "clang/AST/APValue.h"
22#include "clang/AST/ASTConsumer.h"
23#include "clang/AST/ASTContext.h"
24#include "clang/AST/CXXInheritance.h"
25#include "clang/AST/DeclCXX.h"
26#include "clang/AST/DeclObjC.h"
27#include "clang/AST/DeclTemplate.h"
28#include "clang/AST/EvaluatedExprVisitor.h"
29#include "clang/AST/ExprCXX.h"
30#include "clang/AST/StmtCXX.h"
31#include "clang/AST/CharUnits.h"
32#include "clang/Sema/DeclSpec.h"
33#include "clang/Sema/ParsedTemplate.h"
34#include "clang/Parse/ParseDiagnostic.h"
35#include "clang/Basic/PartialDiagnostic.h"
36#include "clang/Basic/SourceManager.h"
37#include "clang/Basic/TargetInfo.h"
38// FIXME: layering (ideally, Sema shouldn't be dependent on Lex API's)
39#include "clang/Lex/Preprocessor.h"
40#include "clang/Lex/HeaderSearch.h"
41#include "llvm/ADT/Triple.h"
42#include <algorithm>
43#include <cstring>
44#include <functional>
45using namespace clang;
46using namespace sema;
47
48Sema::DeclGroupPtrTy Sema::ConvertDeclToDeclGroup(Decl *Ptr) {
49  return DeclGroupPtrTy::make(DeclGroupRef(Ptr));
50}
51
52/// \brief If the identifier refers to a type name within this scope,
53/// return the declaration of that type.
54///
55/// This routine performs ordinary name lookup of the identifier II
56/// within the given scope, with optional C++ scope specifier SS, to
57/// determine whether the name refers to a type. If so, returns an
58/// opaque pointer (actually a QualType) corresponding to that
59/// type. Otherwise, returns NULL.
60///
61/// If name lookup results in an ambiguity, this routine will complain
62/// and then return NULL.
63ParsedType Sema::getTypeName(IdentifierInfo &II, SourceLocation NameLoc,
64                             Scope *S, CXXScopeSpec *SS,
65                             bool isClassName, bool HasTrailingDot,
66                             ParsedType ObjectTypePtr,
67                             bool WantNontrivialTypeSourceInfo) {
68  // Determine where we will perform name lookup.
69  DeclContext *LookupCtx = 0;
70  if (ObjectTypePtr) {
71    QualType ObjectType = ObjectTypePtr.get();
72    if (ObjectType->isRecordType())
73      LookupCtx = computeDeclContext(ObjectType);
74  } else if (SS && SS->isNotEmpty()) {
75    LookupCtx = computeDeclContext(*SS, false);
76
77    if (!LookupCtx) {
78      if (isDependentScopeSpecifier(*SS)) {
79        // C++ [temp.res]p3:
80        //   A qualified-id that refers to a type and in which the
81        //   nested-name-specifier depends on a template-parameter (14.6.2)
82        //   shall be prefixed by the keyword typename to indicate that the
83        //   qualified-id denotes a type, forming an
84        //   elaborated-type-specifier (7.1.5.3).
85        //
86        // We therefore do not perform any name lookup if the result would
87        // refer to a member of an unknown specialization.
88        if (!isClassName)
89          return ParsedType();
90
91        // We know from the grammar that this name refers to a type,
92        // so build a dependent node to describe the type.
93        if (WantNontrivialTypeSourceInfo)
94          return ActOnTypenameType(S, SourceLocation(), *SS, II, NameLoc).get();
95
96        NestedNameSpecifierLoc QualifierLoc = SS->getWithLocInContext(Context);
97        QualType T =
98          CheckTypenameType(ETK_None, SourceLocation(), QualifierLoc,
99                            II, NameLoc);
100
101          return ParsedType::make(T);
102      }
103
104      return ParsedType();
105    }
106
107    if (!LookupCtx->isDependentContext() &&
108        RequireCompleteDeclContext(*SS, LookupCtx))
109      return ParsedType();
110  }
111
112  // FIXME: LookupNestedNameSpecifierName isn't the right kind of
113  // lookup for class-names.
114  LookupNameKind Kind = isClassName ? LookupNestedNameSpecifierName :
115                                      LookupOrdinaryName;
116  LookupResult Result(*this, &II, NameLoc, Kind);
117  if (LookupCtx) {
118    // Perform "qualified" name lookup into the declaration context we
119    // computed, which is either the type of the base of a member access
120    // expression or the declaration context associated with a prior
121    // nested-name-specifier.
122    LookupQualifiedName(Result, LookupCtx);
123
124    if (ObjectTypePtr && Result.empty()) {
125      // C++ [basic.lookup.classref]p3:
126      //   If the unqualified-id is ~type-name, the type-name is looked up
127      //   in the context of the entire postfix-expression. If the type T of
128      //   the object expression is of a class type C, the type-name is also
129      //   looked up in the scope of class C. At least one of the lookups shall
130      //   find a name that refers to (possibly cv-qualified) T.
131      LookupName(Result, S);
132    }
133  } else {
134    // Perform unqualified name lookup.
135    LookupName(Result, S);
136  }
137
138  NamedDecl *IIDecl = 0;
139  switch (Result.getResultKind()) {
140  case LookupResult::NotFound:
141  case LookupResult::NotFoundInCurrentInstantiation:
142  case LookupResult::FoundOverloaded:
143  case LookupResult::FoundUnresolvedValue:
144    Result.suppressDiagnostics();
145    return ParsedType();
146
147  case LookupResult::Ambiguous:
148    // Recover from type-hiding ambiguities by hiding the type.  We'll
149    // do the lookup again when looking for an object, and we can
150    // diagnose the error then.  If we don't do this, then the error
151    // about hiding the type will be immediately followed by an error
152    // that only makes sense if the identifier was treated like a type.
153    if (Result.getAmbiguityKind() == LookupResult::AmbiguousTagHiding) {
154      Result.suppressDiagnostics();
155      return ParsedType();
156    }
157
158    // Look to see if we have a type anywhere in the list of results.
159    for (LookupResult::iterator Res = Result.begin(), ResEnd = Result.end();
160         Res != ResEnd; ++Res) {
161      if (isa<TypeDecl>(*Res) || isa<ObjCInterfaceDecl>(*Res)) {
162        if (!IIDecl ||
163            (*Res)->getLocation().getRawEncoding() <
164              IIDecl->getLocation().getRawEncoding())
165          IIDecl = *Res;
166      }
167    }
168
169    if (!IIDecl) {
170      // None of the entities we found is a type, so there is no way
171      // to even assume that the result is a type. In this case, don't
172      // complain about the ambiguity. The parser will either try to
173      // perform this lookup again (e.g., as an object name), which
174      // will produce the ambiguity, or will complain that it expected
175      // a type name.
176      Result.suppressDiagnostics();
177      return ParsedType();
178    }
179
180    // We found a type within the ambiguous lookup; diagnose the
181    // ambiguity and then return that type. This might be the right
182    // answer, or it might not be, but it suppresses any attempt to
183    // perform the name lookup again.
184    break;
185
186  case LookupResult::Found:
187    IIDecl = Result.getFoundDecl();
188    break;
189  }
190
191  assert(IIDecl && "Didn't find decl");
192
193  QualType T;
194  if (TypeDecl *TD = dyn_cast<TypeDecl>(IIDecl)) {
195    DiagnoseUseOfDecl(IIDecl, NameLoc);
196
197    if (T.isNull())
198      T = Context.getTypeDeclType(TD);
199
200    if (SS && SS->isNotEmpty()) {
201      if (WantNontrivialTypeSourceInfo) {
202        // Construct a type with type-source information.
203        TypeLocBuilder Builder;
204        Builder.pushTypeSpec(T).setNameLoc(NameLoc);
205
206        T = getElaboratedType(ETK_None, *SS, T);
207        ElaboratedTypeLoc ElabTL = Builder.push<ElaboratedTypeLoc>(T);
208        ElabTL.setKeywordLoc(SourceLocation());
209        ElabTL.setQualifierLoc(SS->getWithLocInContext(Context));
210        return CreateParsedType(T, Builder.getTypeSourceInfo(Context, T));
211      } else {
212        T = getElaboratedType(ETK_None, *SS, T);
213      }
214    }
215  } else if (ObjCInterfaceDecl *IDecl = dyn_cast<ObjCInterfaceDecl>(IIDecl)) {
216    (void)DiagnoseUseOfDecl(IDecl, NameLoc);
217    if (!HasTrailingDot)
218      T = Context.getObjCInterfaceType(IDecl);
219  }
220
221  if (T.isNull()) {
222    // If it's not plausibly a type, suppress diagnostics.
223    Result.suppressDiagnostics();
224    return ParsedType();
225  }
226  return ParsedType::make(T);
227}
228
229/// isTagName() - This method is called *for error recovery purposes only*
230/// to determine if the specified name is a valid tag name ("struct foo").  If
231/// so, this returns the TST for the tag corresponding to it (TST_enum,
232/// TST_union, TST_struct, TST_class).  This is used to diagnose cases in C
233/// where the user forgot to specify the tag.
234DeclSpec::TST Sema::isTagName(IdentifierInfo &II, Scope *S) {
235  // Do a tag name lookup in this scope.
236  LookupResult R(*this, &II, SourceLocation(), LookupTagName);
237  LookupName(R, S, false);
238  R.suppressDiagnostics();
239  if (R.getResultKind() == LookupResult::Found)
240    if (const TagDecl *TD = R.getAsSingle<TagDecl>()) {
241      switch (TD->getTagKind()) {
242      default:         return DeclSpec::TST_unspecified;
243      case TTK_Struct: return DeclSpec::TST_struct;
244      case TTK_Union:  return DeclSpec::TST_union;
245      case TTK_Class:  return DeclSpec::TST_class;
246      case TTK_Enum:   return DeclSpec::TST_enum;
247      }
248    }
249
250  return DeclSpec::TST_unspecified;
251}
252
253/// isMicrosoftMissingTypename - In Microsoft mode, within class scope,
254/// if a CXXScopeSpec's type is equal to the type of one of the base classes
255/// then downgrade the missing typename error to a warning.
256/// This is needed for MSVC compatibility; Example:
257/// @code
258/// template<class T> class A {
259/// public:
260///   typedef int TYPE;
261/// };
262/// template<class T> class B : public A<T> {
263/// public:
264///   A<T>::TYPE a; // no typename required because A<T> is a base class.
265/// };
266/// @endcode
267bool Sema::isMicrosoftMissingTypename(const CXXScopeSpec *SS) {
268  if (CurContext->isRecord()) {
269    const Type *Ty = SS->getScopeRep()->getAsType();
270
271    CXXRecordDecl *RD = cast<CXXRecordDecl>(CurContext);
272    for (CXXRecordDecl::base_class_const_iterator Base = RD->bases_begin(),
273          BaseEnd = RD->bases_end(); Base != BaseEnd; ++Base)
274      if (Context.hasSameUnqualifiedType(QualType(Ty, 1), Base->getType()))
275        return true;
276  }
277  return false;
278}
279
280bool Sema::DiagnoseUnknownTypeName(const IdentifierInfo &II,
281                                   SourceLocation IILoc,
282                                   Scope *S,
283                                   CXXScopeSpec *SS,
284                                   ParsedType &SuggestedType) {
285  // We don't have anything to suggest (yet).
286  SuggestedType = ParsedType();
287
288  // There may have been a typo in the name of the type. Look up typo
289  // results, in case we have something that we can suggest.
290  LookupResult Lookup(*this, &II, IILoc, LookupOrdinaryName,
291                      NotForRedeclaration);
292
293  if (DeclarationName Corrected = CorrectTypo(Lookup, S, SS, 0, 0, CTC_Type)) {
294    if (NamedDecl *Result = Lookup.getAsSingle<NamedDecl>()) {
295      if ((isa<TypeDecl>(Result) || isa<ObjCInterfaceDecl>(Result)) &&
296          !Result->isInvalidDecl()) {
297        // We found a similarly-named type or interface; suggest that.
298        if (!SS || !SS->isSet())
299          Diag(IILoc, diag::err_unknown_typename_suggest)
300            << &II << Lookup.getLookupName()
301            << FixItHint::CreateReplacement(SourceRange(IILoc),
302                                            Result->getNameAsString());
303        else if (DeclContext *DC = computeDeclContext(*SS, false))
304          Diag(IILoc, diag::err_unknown_nested_typename_suggest)
305            << &II << DC << Lookup.getLookupName() << SS->getRange()
306            << FixItHint::CreateReplacement(SourceRange(IILoc),
307                                            Result->getNameAsString());
308        else
309          llvm_unreachable("could not have corrected a typo here");
310
311        Diag(Result->getLocation(), diag::note_previous_decl)
312          << Result->getDeclName();
313
314        SuggestedType = getTypeName(*Result->getIdentifier(), IILoc, S, SS,
315                                    false, false, ParsedType(),
316                                    /*NonTrivialTypeSourceInfo=*/true);
317        return true;
318      }
319    } else if (Lookup.empty()) {
320      // We corrected to a keyword.
321      // FIXME: Actually recover with the keyword we suggest, and emit a fix-it.
322      Diag(IILoc, diag::err_unknown_typename_suggest)
323        << &II << Corrected;
324      return true;
325    }
326  }
327
328  if (getLangOptions().CPlusPlus) {
329    // See if II is a class template that the user forgot to pass arguments to.
330    UnqualifiedId Name;
331    Name.setIdentifier(&II, IILoc);
332    CXXScopeSpec EmptySS;
333    TemplateTy TemplateResult;
334    bool MemberOfUnknownSpecialization;
335    if (isTemplateName(S, SS ? *SS : EmptySS, /*hasTemplateKeyword=*/false,
336                       Name, ParsedType(), true, TemplateResult,
337                       MemberOfUnknownSpecialization) == TNK_Type_template) {
338      TemplateName TplName = TemplateResult.getAsVal<TemplateName>();
339      Diag(IILoc, diag::err_template_missing_args) << TplName;
340      if (TemplateDecl *TplDecl = TplName.getAsTemplateDecl()) {
341        Diag(TplDecl->getLocation(), diag::note_template_decl_here)
342          << TplDecl->getTemplateParameters()->getSourceRange();
343      }
344      return true;
345    }
346  }
347
348  // FIXME: Should we move the logic that tries to recover from a missing tag
349  // (struct, union, enum) from Parser::ParseImplicitInt here, instead?
350
351  if (!SS || (!SS->isSet() && !SS->isInvalid()))
352    Diag(IILoc, diag::err_unknown_typename) << &II;
353  else if (DeclContext *DC = computeDeclContext(*SS, false))
354    Diag(IILoc, diag::err_typename_nested_not_found)
355      << &II << DC << SS->getRange();
356  else if (isDependentScopeSpecifier(*SS)) {
357    unsigned DiagID = diag::err_typename_missing;
358    if (getLangOptions().Microsoft && isMicrosoftMissingTypename(SS))
359      DiagID = diag::war_typename_missing;
360
361    Diag(SS->getRange().getBegin(), DiagID)
362      << (NestedNameSpecifier *)SS->getScopeRep() << II.getName()
363      << SourceRange(SS->getRange().getBegin(), IILoc)
364      << FixItHint::CreateInsertion(SS->getRange().getBegin(), "typename ");
365    SuggestedType = ActOnTypenameType(S, SourceLocation(), *SS, II, IILoc).get();
366  } else {
367    assert(SS && SS->isInvalid() &&
368           "Invalid scope specifier has already been diagnosed");
369  }
370
371  return true;
372}
373
374// Determines the context to return to after temporarily entering a
375// context.  This depends in an unnecessarily complicated way on the
376// exact ordering of callbacks from the parser.
377DeclContext *Sema::getContainingDC(DeclContext *DC) {
378
379  // Functions defined inline within classes aren't parsed until we've
380  // finished parsing the top-level class, so the top-level class is
381  // the context we'll need to return to.
382  if (isa<FunctionDecl>(DC)) {
383    DC = DC->getLexicalParent();
384
385    // A function not defined within a class will always return to its
386    // lexical context.
387    if (!isa<CXXRecordDecl>(DC))
388      return DC;
389
390    // A C++ inline method/friend is parsed *after* the topmost class
391    // it was declared in is fully parsed ("complete");  the topmost
392    // class is the context we need to return to.
393    while (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC->getLexicalParent()))
394      DC = RD;
395
396    // Return the declaration context of the topmost class the inline method is
397    // declared in.
398    return DC;
399  }
400
401  // ObjCMethodDecls are parsed (for some reason) outside the context
402  // of the class.
403  if (isa<ObjCMethodDecl>(DC))
404    return DC->getLexicalParent()->getLexicalParent();
405
406  return DC->getLexicalParent();
407}
408
409void Sema::PushDeclContext(Scope *S, DeclContext *DC) {
410  assert(getContainingDC(DC) == CurContext &&
411      "The next DeclContext should be lexically contained in the current one.");
412  CurContext = DC;
413  S->setEntity(DC);
414}
415
416void Sema::PopDeclContext() {
417  assert(CurContext && "DeclContext imbalance!");
418
419  CurContext = getContainingDC(CurContext);
420  assert(CurContext && "Popped translation unit!");
421}
422
423/// EnterDeclaratorContext - Used when we must lookup names in the context
424/// of a declarator's nested name specifier.
425///
426void Sema::EnterDeclaratorContext(Scope *S, DeclContext *DC) {
427  // C++0x [basic.lookup.unqual]p13:
428  //   A name used in the definition of a static data member of class
429  //   X (after the qualified-id of the static member) is looked up as
430  //   if the name was used in a member function of X.
431  // C++0x [basic.lookup.unqual]p14:
432  //   If a variable member of a namespace is defined outside of the
433  //   scope of its namespace then any name used in the definition of
434  //   the variable member (after the declarator-id) is looked up as
435  //   if the definition of the variable member occurred in its
436  //   namespace.
437  // Both of these imply that we should push a scope whose context
438  // is the semantic context of the declaration.  We can't use
439  // PushDeclContext here because that context is not necessarily
440  // lexically contained in the current context.  Fortunately,
441  // the containing scope should have the appropriate information.
442
443  assert(!S->getEntity() && "scope already has entity");
444
445#ifndef NDEBUG
446  Scope *Ancestor = S->getParent();
447  while (!Ancestor->getEntity()) Ancestor = Ancestor->getParent();
448  assert(Ancestor->getEntity() == CurContext && "ancestor context mismatch");
449#endif
450
451  CurContext = DC;
452  S->setEntity(DC);
453}
454
455void Sema::ExitDeclaratorContext(Scope *S) {
456  assert(S->getEntity() == CurContext && "Context imbalance!");
457
458  // Switch back to the lexical context.  The safety of this is
459  // enforced by an assert in EnterDeclaratorContext.
460  Scope *Ancestor = S->getParent();
461  while (!Ancestor->getEntity()) Ancestor = Ancestor->getParent();
462  CurContext = (DeclContext*) Ancestor->getEntity();
463
464  // We don't need to do anything with the scope, which is going to
465  // disappear.
466}
467
468/// \brief Determine whether we allow overloading of the function
469/// PrevDecl with another declaration.
470///
471/// This routine determines whether overloading is possible, not
472/// whether some new function is actually an overload. It will return
473/// true in C++ (where we can always provide overloads) or, as an
474/// extension, in C when the previous function is already an
475/// overloaded function declaration or has the "overloadable"
476/// attribute.
477static bool AllowOverloadingOfFunction(LookupResult &Previous,
478                                       ASTContext &Context) {
479  if (Context.getLangOptions().CPlusPlus)
480    return true;
481
482  if (Previous.getResultKind() == LookupResult::FoundOverloaded)
483    return true;
484
485  return (Previous.getResultKind() == LookupResult::Found
486          && Previous.getFoundDecl()->hasAttr<OverloadableAttr>());
487}
488
489/// Add this decl to the scope shadowed decl chains.
490void Sema::PushOnScopeChains(NamedDecl *D, Scope *S, bool AddToContext) {
491  // Move up the scope chain until we find the nearest enclosing
492  // non-transparent context. The declaration will be introduced into this
493  // scope.
494  while (S->getEntity() &&
495         ((DeclContext *)S->getEntity())->isTransparentContext())
496    S = S->getParent();
497
498  // Add scoped declarations into their context, so that they can be
499  // found later. Declarations without a context won't be inserted
500  // into any context.
501  if (AddToContext)
502    CurContext->addDecl(D);
503
504  // Out-of-line definitions shouldn't be pushed into scope in C++.
505  // Out-of-line variable and function definitions shouldn't even in C.
506  if ((getLangOptions().CPlusPlus || isa<VarDecl>(D) || isa<FunctionDecl>(D)) &&
507      D->isOutOfLine())
508    return;
509
510  // Template instantiations should also not be pushed into scope.
511  if (isa<FunctionDecl>(D) &&
512      cast<FunctionDecl>(D)->isFunctionTemplateSpecialization())
513    return;
514
515  // If this replaces anything in the current scope,
516  IdentifierResolver::iterator I = IdResolver.begin(D->getDeclName()),
517                               IEnd = IdResolver.end();
518  for (; I != IEnd; ++I) {
519    if (S->isDeclScope(*I) && D->declarationReplaces(*I)) {
520      S->RemoveDecl(*I);
521      IdResolver.RemoveDecl(*I);
522
523      // Should only need to replace one decl.
524      break;
525    }
526  }
527
528  S->AddDecl(D);
529
530  if (isa<LabelDecl>(D) && !cast<LabelDecl>(D)->isGnuLocal()) {
531    // Implicitly-generated labels may end up getting generated in an order that
532    // isn't strictly lexical, which breaks name lookup. Be careful to insert
533    // the label at the appropriate place in the identifier chain.
534    for (I = IdResolver.begin(D->getDeclName()); I != IEnd; ++I) {
535      DeclContext *IDC = (*I)->getLexicalDeclContext()->getRedeclContext();
536      if (IDC == CurContext) {
537        if (!S->isDeclScope(*I))
538          continue;
539      } else if (IDC->Encloses(CurContext))
540        break;
541    }
542
543    IdResolver.InsertDeclAfter(I, D);
544  } else {
545    IdResolver.AddDecl(D);
546  }
547}
548
549bool Sema::isDeclInScope(NamedDecl *&D, DeclContext *Ctx, Scope *S,
550                         bool ExplicitInstantiationOrSpecialization) {
551  return IdResolver.isDeclInScope(D, Ctx, Context, S,
552                                  ExplicitInstantiationOrSpecialization);
553}
554
555Scope *Sema::getScopeForDeclContext(Scope *S, DeclContext *DC) {
556  DeclContext *TargetDC = DC->getPrimaryContext();
557  do {
558    if (DeclContext *ScopeDC = (DeclContext*) S->getEntity())
559      if (ScopeDC->getPrimaryContext() == TargetDC)
560        return S;
561  } while ((S = S->getParent()));
562
563  return 0;
564}
565
566static bool isOutOfScopePreviousDeclaration(NamedDecl *,
567                                            DeclContext*,
568                                            ASTContext&);
569
570/// Filters out lookup results that don't fall within the given scope
571/// as determined by isDeclInScope.
572static void FilterLookupForScope(Sema &SemaRef, LookupResult &R,
573                                 DeclContext *Ctx, Scope *S,
574                                 bool ConsiderLinkage,
575                                 bool ExplicitInstantiationOrSpecialization) {
576  LookupResult::Filter F = R.makeFilter();
577  while (F.hasNext()) {
578    NamedDecl *D = F.next();
579
580    if (SemaRef.isDeclInScope(D, Ctx, S, ExplicitInstantiationOrSpecialization))
581      continue;
582
583    if (ConsiderLinkage &&
584        isOutOfScopePreviousDeclaration(D, Ctx, SemaRef.Context))
585      continue;
586
587    F.erase();
588  }
589
590  F.done();
591}
592
593static bool isUsingDecl(NamedDecl *D) {
594  return isa<UsingShadowDecl>(D) ||
595         isa<UnresolvedUsingTypenameDecl>(D) ||
596         isa<UnresolvedUsingValueDecl>(D);
597}
598
599/// Removes using shadow declarations from the lookup results.
600static void RemoveUsingDecls(LookupResult &R) {
601  LookupResult::Filter F = R.makeFilter();
602  while (F.hasNext())
603    if (isUsingDecl(F.next()))
604      F.erase();
605
606  F.done();
607}
608
609/// \brief Check for this common pattern:
610/// @code
611/// class S {
612///   S(const S&); // DO NOT IMPLEMENT
613///   void operator=(const S&); // DO NOT IMPLEMENT
614/// };
615/// @endcode
616static bool IsDisallowedCopyOrAssign(const CXXMethodDecl *D) {
617  // FIXME: Should check for private access too but access is set after we get
618  // the decl here.
619  if (D->isThisDeclarationADefinition())
620    return false;
621
622  if (const CXXConstructorDecl *CD = dyn_cast<CXXConstructorDecl>(D))
623    return CD->isCopyConstructor();
624  if (const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D))
625    return Method->isCopyAssignmentOperator();
626  return false;
627}
628
629bool Sema::ShouldWarnIfUnusedFileScopedDecl(const DeclaratorDecl *D) const {
630  assert(D);
631
632  if (D->isInvalidDecl() || D->isUsed() || D->hasAttr<UnusedAttr>())
633    return false;
634
635  // Ignore class templates.
636  if (D->getDeclContext()->isDependentContext() ||
637      D->getLexicalDeclContext()->isDependentContext())
638    return false;
639
640  if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
641    if (FD->getTemplateSpecializationKind() == TSK_ImplicitInstantiation)
642      return false;
643
644    if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD)) {
645      if (MD->isVirtual() || IsDisallowedCopyOrAssign(MD))
646        return false;
647    } else {
648      // 'static inline' functions are used in headers; don't warn.
649      if (FD->getStorageClass() == SC_Static &&
650          FD->isInlineSpecified())
651        return false;
652    }
653
654    if (FD->isThisDeclarationADefinition() &&
655        Context.DeclMustBeEmitted(FD))
656      return false;
657
658  } else if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
659    if (!VD->isFileVarDecl() ||
660        VD->getType().isConstant(Context) ||
661        Context.DeclMustBeEmitted(VD))
662      return false;
663
664    if (VD->isStaticDataMember() &&
665        VD->getTemplateSpecializationKind() == TSK_ImplicitInstantiation)
666      return false;
667
668  } else {
669    return false;
670  }
671
672  // Only warn for unused decls internal to the translation unit.
673  if (D->getLinkage() == ExternalLinkage)
674    return false;
675
676  return true;
677}
678
679void Sema::MarkUnusedFileScopedDecl(const DeclaratorDecl *D) {
680  if (!D)
681    return;
682
683  if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
684    const FunctionDecl *First = FD->getFirstDeclaration();
685    if (FD != First && ShouldWarnIfUnusedFileScopedDecl(First))
686      return; // First should already be in the vector.
687  }
688
689  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
690    const VarDecl *First = VD->getFirstDeclaration();
691    if (VD != First && ShouldWarnIfUnusedFileScopedDecl(First))
692      return; // First should already be in the vector.
693  }
694
695   if (ShouldWarnIfUnusedFileScopedDecl(D))
696     UnusedFileScopedDecls.push_back(D);
697 }
698
699static bool ShouldDiagnoseUnusedDecl(const NamedDecl *D) {
700  if (D->isInvalidDecl())
701    return false;
702
703  if (D->isUsed() || D->hasAttr<UnusedAttr>())
704    return false;
705
706  if (isa<LabelDecl>(D))
707    return true;
708
709  // White-list anything that isn't a local variable.
710  if (!isa<VarDecl>(D) || isa<ParmVarDecl>(D) || isa<ImplicitParamDecl>(D) ||
711      !D->getDeclContext()->isFunctionOrMethod())
712    return false;
713
714  // Types of valid local variables should be complete, so this should succeed.
715  if (const ValueDecl *VD = dyn_cast<ValueDecl>(D)) {
716
717    // White-list anything with an __attribute__((unused)) type.
718    QualType Ty = VD->getType();
719
720    // Only look at the outermost level of typedef.
721    if (const TypedefType *TT = dyn_cast<TypedefType>(Ty)) {
722      if (TT->getDecl()->hasAttr<UnusedAttr>())
723        return false;
724    }
725
726    // If we failed to complete the type for some reason, or if the type is
727    // dependent, don't diagnose the variable.
728    if (Ty->isIncompleteType() || Ty->isDependentType())
729      return false;
730
731    if (const TagType *TT = Ty->getAs<TagType>()) {
732      const TagDecl *Tag = TT->getDecl();
733      if (Tag->hasAttr<UnusedAttr>())
734        return false;
735
736      if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(Tag)) {
737        // FIXME: Checking for the presence of a user-declared constructor
738        // isn't completely accurate; we'd prefer to check that the initializer
739        // has no side effects.
740        if (RD->hasUserDeclaredConstructor() || !RD->hasTrivialDestructor())
741          return false;
742      }
743    }
744
745    // TODO: __attribute__((unused)) templates?
746  }
747
748  return true;
749}
750
751/// DiagnoseUnusedDecl - Emit warnings about declarations that are not used
752/// unless they are marked attr(unused).
753void Sema::DiagnoseUnusedDecl(const NamedDecl *D) {
754  if (!ShouldDiagnoseUnusedDecl(D))
755    return;
756
757  unsigned DiagID;
758  if (isa<VarDecl>(D) && cast<VarDecl>(D)->isExceptionVariable())
759    DiagID = diag::warn_unused_exception_param;
760  else if (isa<LabelDecl>(D))
761    DiagID = diag::warn_unused_label;
762  else
763    DiagID = diag::warn_unused_variable;
764
765  Diag(D->getLocation(), DiagID) << D->getDeclName();
766}
767
768static void CheckPoppedLabel(LabelDecl *L, Sema &S) {
769  // Verify that we have no forward references left.  If so, there was a goto
770  // or address of a label taken, but no definition of it.  Label fwd
771  // definitions are indicated with a null substmt.
772  if (L->getStmt() == 0)
773    S.Diag(L->getLocation(), diag::err_undeclared_label_use) <<L->getDeclName();
774}
775
776void Sema::ActOnPopScope(SourceLocation Loc, Scope *S) {
777  if (S->decl_empty()) return;
778  assert((S->getFlags() & (Scope::DeclScope | Scope::TemplateParamScope)) &&
779         "Scope shouldn't contain decls!");
780
781  for (Scope::decl_iterator I = S->decl_begin(), E = S->decl_end();
782       I != E; ++I) {
783    Decl *TmpD = (*I);
784    assert(TmpD && "This decl didn't get pushed??");
785
786    assert(isa<NamedDecl>(TmpD) && "Decl isn't NamedDecl?");
787    NamedDecl *D = cast<NamedDecl>(TmpD);
788
789    if (!D->getDeclName()) continue;
790
791    // Diagnose unused variables in this scope.
792    if (!S->hasErrorOccurred())
793      DiagnoseUnusedDecl(D);
794
795    // If this was a forward reference to a label, verify it was defined.
796    if (LabelDecl *LD = dyn_cast<LabelDecl>(D))
797      CheckPoppedLabel(LD, *this);
798
799    // Remove this name from our lexical scope.
800    IdResolver.RemoveDecl(D);
801  }
802}
803
804/// \brief Look for an Objective-C class in the translation unit.
805///
806/// \param Id The name of the Objective-C class we're looking for. If
807/// typo-correction fixes this name, the Id will be updated
808/// to the fixed name.
809///
810/// \param IdLoc The location of the name in the translation unit.
811///
812/// \param TypoCorrection If true, this routine will attempt typo correction
813/// if there is no class with the given name.
814///
815/// \returns The declaration of the named Objective-C class, or NULL if the
816/// class could not be found.
817ObjCInterfaceDecl *Sema::getObjCInterfaceDecl(IdentifierInfo *&Id,
818                                              SourceLocation IdLoc,
819                                              bool TypoCorrection) {
820  // The third "scope" argument is 0 since we aren't enabling lazy built-in
821  // creation from this context.
822  NamedDecl *IDecl = LookupSingleName(TUScope, Id, IdLoc, LookupOrdinaryName);
823
824  if (!IDecl && TypoCorrection) {
825    // Perform typo correction at the given location, but only if we
826    // find an Objective-C class name.
827    LookupResult R(*this, Id, IdLoc, LookupOrdinaryName);
828    if (CorrectTypo(R, TUScope, 0, 0, false, CTC_NoKeywords) &&
829        (IDecl = R.getAsSingle<ObjCInterfaceDecl>())) {
830      Diag(IdLoc, diag::err_undef_interface_suggest)
831        << Id << IDecl->getDeclName()
832        << FixItHint::CreateReplacement(IdLoc, IDecl->getNameAsString());
833      Diag(IDecl->getLocation(), diag::note_previous_decl)
834        << IDecl->getDeclName();
835
836      Id = IDecl->getIdentifier();
837    }
838  }
839
840  return dyn_cast_or_null<ObjCInterfaceDecl>(IDecl);
841}
842
843/// getNonFieldDeclScope - Retrieves the innermost scope, starting
844/// from S, where a non-field would be declared. This routine copes
845/// with the difference between C and C++ scoping rules in structs and
846/// unions. For example, the following code is well-formed in C but
847/// ill-formed in C++:
848/// @code
849/// struct S6 {
850///   enum { BAR } e;
851/// };
852///
853/// void test_S6() {
854///   struct S6 a;
855///   a.e = BAR;
856/// }
857/// @endcode
858/// For the declaration of BAR, this routine will return a different
859/// scope. The scope S will be the scope of the unnamed enumeration
860/// within S6. In C++, this routine will return the scope associated
861/// with S6, because the enumeration's scope is a transparent
862/// context but structures can contain non-field names. In C, this
863/// routine will return the translation unit scope, since the
864/// enumeration's scope is a transparent context and structures cannot
865/// contain non-field names.
866Scope *Sema::getNonFieldDeclScope(Scope *S) {
867  while (((S->getFlags() & Scope::DeclScope) == 0) ||
868         (S->getEntity() &&
869          ((DeclContext *)S->getEntity())->isTransparentContext()) ||
870         (S->isClassScope() && !getLangOptions().CPlusPlus))
871    S = S->getParent();
872  return S;
873}
874
875/// LazilyCreateBuiltin - The specified Builtin-ID was first used at
876/// file scope.  lazily create a decl for it. ForRedeclaration is true
877/// if we're creating this built-in in anticipation of redeclaring the
878/// built-in.
879NamedDecl *Sema::LazilyCreateBuiltin(IdentifierInfo *II, unsigned bid,
880                                     Scope *S, bool ForRedeclaration,
881                                     SourceLocation Loc) {
882  Builtin::ID BID = (Builtin::ID)bid;
883
884  ASTContext::GetBuiltinTypeError Error;
885  QualType R = Context.GetBuiltinType(BID, Error);
886  switch (Error) {
887  case ASTContext::GE_None:
888    // Okay
889    break;
890
891  case ASTContext::GE_Missing_stdio:
892    if (ForRedeclaration)
893      Diag(Loc, diag::warn_implicit_decl_requires_stdio)
894        << Context.BuiltinInfo.GetName(BID);
895    return 0;
896
897  case ASTContext::GE_Missing_setjmp:
898    if (ForRedeclaration)
899      Diag(Loc, diag::warn_implicit_decl_requires_setjmp)
900        << Context.BuiltinInfo.GetName(BID);
901    return 0;
902  }
903
904  if (!ForRedeclaration && Context.BuiltinInfo.isPredefinedLibFunction(BID)) {
905    Diag(Loc, diag::ext_implicit_lib_function_decl)
906      << Context.BuiltinInfo.GetName(BID)
907      << R;
908    if (Context.BuiltinInfo.getHeaderName(BID) &&
909        Diags.getDiagnosticLevel(diag::ext_implicit_lib_function_decl, Loc)
910          != Diagnostic::Ignored)
911      Diag(Loc, diag::note_please_include_header)
912        << Context.BuiltinInfo.getHeaderName(BID)
913        << Context.BuiltinInfo.GetName(BID);
914  }
915
916  FunctionDecl *New = FunctionDecl::Create(Context,
917                                           Context.getTranslationUnitDecl(),
918                                           Loc, Loc, II, R, /*TInfo=*/0,
919                                           SC_Extern,
920                                           SC_None, false,
921                                           /*hasPrototype=*/true);
922  New->setImplicit();
923
924  // Create Decl objects for each parameter, adding them to the
925  // FunctionDecl.
926  if (const FunctionProtoType *FT = dyn_cast<FunctionProtoType>(R)) {
927    llvm::SmallVector<ParmVarDecl*, 16> Params;
928    for (unsigned i = 0, e = FT->getNumArgs(); i != e; ++i)
929      Params.push_back(ParmVarDecl::Create(Context, New, SourceLocation(),
930                                           SourceLocation(), 0,
931                                           FT->getArgType(i), /*TInfo=*/0,
932                                           SC_None, SC_None, 0));
933    New->setParams(Params.data(), Params.size());
934  }
935
936  AddKnownFunctionAttributes(New);
937
938  // TUScope is the translation-unit scope to insert this function into.
939  // FIXME: This is hideous. We need to teach PushOnScopeChains to
940  // relate Scopes to DeclContexts, and probably eliminate CurContext
941  // entirely, but we're not there yet.
942  DeclContext *SavedContext = CurContext;
943  CurContext = Context.getTranslationUnitDecl();
944  PushOnScopeChains(New, TUScope);
945  CurContext = SavedContext;
946  return New;
947}
948
949/// MergeTypedefNameDecl - We just parsed a typedef 'New' which has the
950/// same name and scope as a previous declaration 'Old'.  Figure out
951/// how to resolve this situation, merging decls or emitting
952/// diagnostics as appropriate. If there was an error, set New to be invalid.
953///
954void Sema::MergeTypedefNameDecl(TypedefNameDecl *New, LookupResult &OldDecls) {
955  // If the new decl is known invalid already, don't bother doing any
956  // merging checks.
957  if (New->isInvalidDecl()) return;
958
959  // Allow multiple definitions for ObjC built-in typedefs.
960  // FIXME: Verify the underlying types are equivalent!
961  if (getLangOptions().ObjC1) {
962    const IdentifierInfo *TypeID = New->getIdentifier();
963    switch (TypeID->getLength()) {
964    default: break;
965    case 2:
966      if (!TypeID->isStr("id"))
967        break;
968      Context.ObjCIdRedefinitionType = New->getUnderlyingType();
969      // Install the built-in type for 'id', ignoring the current definition.
970      New->setTypeForDecl(Context.getObjCIdType().getTypePtr());
971      return;
972    case 5:
973      if (!TypeID->isStr("Class"))
974        break;
975      Context.ObjCClassRedefinitionType = New->getUnderlyingType();
976      // Install the built-in type for 'Class', ignoring the current definition.
977      New->setTypeForDecl(Context.getObjCClassType().getTypePtr());
978      return;
979    case 3:
980      if (!TypeID->isStr("SEL"))
981        break;
982      Context.ObjCSelRedefinitionType = New->getUnderlyingType();
983      // Install the built-in type for 'SEL', ignoring the current definition.
984      New->setTypeForDecl(Context.getObjCSelType().getTypePtr());
985      return;
986    case 8:
987      if (!TypeID->isStr("Protocol"))
988        break;
989      Context.setObjCProtoType(New->getUnderlyingType());
990      return;
991    }
992    // Fall through - the typedef name was not a builtin type.
993  }
994
995  // Verify the old decl was also a type.
996  TypeDecl *Old = OldDecls.getAsSingle<TypeDecl>();
997  if (!Old) {
998    Diag(New->getLocation(), diag::err_redefinition_different_kind)
999      << New->getDeclName();
1000
1001    NamedDecl *OldD = OldDecls.getRepresentativeDecl();
1002    if (OldD->getLocation().isValid())
1003      Diag(OldD->getLocation(), diag::note_previous_definition);
1004
1005    return New->setInvalidDecl();
1006  }
1007
1008  // If the old declaration is invalid, just give up here.
1009  if (Old->isInvalidDecl())
1010    return New->setInvalidDecl();
1011
1012  // Determine the "old" type we'll use for checking and diagnostics.
1013  QualType OldType;
1014  if (TypedefNameDecl *OldTypedef = dyn_cast<TypedefNameDecl>(Old))
1015    OldType = OldTypedef->getUnderlyingType();
1016  else
1017    OldType = Context.getTypeDeclType(Old);
1018
1019  // If the typedef types are not identical, reject them in all languages and
1020  // with any extensions enabled.
1021
1022  if (OldType != New->getUnderlyingType() &&
1023      Context.getCanonicalType(OldType) !=
1024      Context.getCanonicalType(New->getUnderlyingType())) {
1025    int Kind = 0;
1026    if (isa<TypeAliasDecl>(Old))
1027      Kind = 1;
1028    Diag(New->getLocation(), diag::err_redefinition_different_typedef)
1029      << Kind << New->getUnderlyingType() << OldType;
1030    if (Old->getLocation().isValid())
1031      Diag(Old->getLocation(), diag::note_previous_definition);
1032    return New->setInvalidDecl();
1033  }
1034
1035  // The types match.  Link up the redeclaration chain if the old
1036  // declaration was a typedef.
1037  // FIXME: this is a potential source of wierdness if the type
1038  // spellings don't match exactly.
1039  if (TypedefNameDecl *Typedef = dyn_cast<TypedefNameDecl>(Old))
1040    New->setPreviousDeclaration(Typedef);
1041
1042  if (getLangOptions().Microsoft)
1043    return;
1044
1045  if (getLangOptions().CPlusPlus) {
1046    // C++ [dcl.typedef]p2:
1047    //   In a given non-class scope, a typedef specifier can be used to
1048    //   redefine the name of any type declared in that scope to refer
1049    //   to the type to which it already refers.
1050    if (!isa<CXXRecordDecl>(CurContext))
1051      return;
1052
1053    // C++0x [dcl.typedef]p4:
1054    //   In a given class scope, a typedef specifier can be used to redefine
1055    //   any class-name declared in that scope that is not also a typedef-name
1056    //   to refer to the type to which it already refers.
1057    //
1058    // This wording came in via DR424, which was a correction to the
1059    // wording in DR56, which accidentally banned code like:
1060    //
1061    //   struct S {
1062    //     typedef struct A { } A;
1063    //   };
1064    //
1065    // in the C++03 standard. We implement the C++0x semantics, which
1066    // allow the above but disallow
1067    //
1068    //   struct S {
1069    //     typedef int I;
1070    //     typedef int I;
1071    //   };
1072    //
1073    // since that was the intent of DR56.
1074    if (!isa<TypedefNameDecl>(Old))
1075      return;
1076
1077    Diag(New->getLocation(), diag::err_redefinition)
1078      << New->getDeclName();
1079    Diag(Old->getLocation(), diag::note_previous_definition);
1080    return New->setInvalidDecl();
1081  }
1082
1083  // If we have a redefinition of a typedef in C, emit a warning.  This warning
1084  // is normally mapped to an error, but can be controlled with
1085  // -Wtypedef-redefinition.  If either the original or the redefinition is
1086  // in a system header, don't emit this for compatibility with GCC.
1087  if (getDiagnostics().getSuppressSystemWarnings() &&
1088      (Context.getSourceManager().isInSystemHeader(Old->getLocation()) ||
1089       Context.getSourceManager().isInSystemHeader(New->getLocation())))
1090    return;
1091
1092  Diag(New->getLocation(), diag::warn_redefinition_of_typedef)
1093    << New->getDeclName();
1094  Diag(Old->getLocation(), diag::note_previous_definition);
1095  return;
1096}
1097
1098/// DeclhasAttr - returns true if decl Declaration already has the target
1099/// attribute.
1100static bool
1101DeclHasAttr(const Decl *D, const Attr *A) {
1102  const OwnershipAttr *OA = dyn_cast<OwnershipAttr>(A);
1103  for (Decl::attr_iterator i = D->attr_begin(), e = D->attr_end(); i != e; ++i)
1104    if ((*i)->getKind() == A->getKind()) {
1105      // FIXME: Don't hardcode this check
1106      if (OA && isa<OwnershipAttr>(*i))
1107        return OA->getOwnKind() == cast<OwnershipAttr>(*i)->getOwnKind();
1108      return true;
1109    }
1110
1111  return false;
1112}
1113
1114/// mergeDeclAttributes - Copy attributes from the Old decl to the New one.
1115static void mergeDeclAttributes(Decl *newDecl, const Decl *oldDecl,
1116                                ASTContext &C) {
1117  if (!oldDecl->hasAttrs())
1118    return;
1119
1120  bool foundAny = newDecl->hasAttrs();
1121
1122  // Ensure that any moving of objects within the allocated map is done before
1123  // we process them.
1124  if (!foundAny) newDecl->setAttrs(AttrVec());
1125
1126  for (specific_attr_iterator<InheritableAttr>
1127       i = oldDecl->specific_attr_begin<InheritableAttr>(),
1128       e = oldDecl->specific_attr_end<InheritableAttr>(); i != e; ++i) {
1129    if (!DeclHasAttr(newDecl, *i)) {
1130      InheritableAttr *newAttr = cast<InheritableAttr>((*i)->clone(C));
1131      newAttr->setInherited(true);
1132      newDecl->addAttr(newAttr);
1133      foundAny = true;
1134    }
1135  }
1136
1137  if (!foundAny) newDecl->dropAttrs();
1138}
1139
1140/// mergeParamDeclAttributes - Copy attributes from the old parameter
1141/// to the new one.
1142static void mergeParamDeclAttributes(ParmVarDecl *newDecl,
1143                                     const ParmVarDecl *oldDecl,
1144                                     ASTContext &C) {
1145  if (!oldDecl->hasAttrs())
1146    return;
1147
1148  bool foundAny = newDecl->hasAttrs();
1149
1150  // Ensure that any moving of objects within the allocated map is
1151  // done before we process them.
1152  if (!foundAny) newDecl->setAttrs(AttrVec());
1153
1154  for (specific_attr_iterator<InheritableParamAttr>
1155       i = oldDecl->specific_attr_begin<InheritableParamAttr>(),
1156       e = oldDecl->specific_attr_end<InheritableParamAttr>(); i != e; ++i) {
1157    if (!DeclHasAttr(newDecl, *i)) {
1158      InheritableAttr *newAttr = cast<InheritableParamAttr>((*i)->clone(C));
1159      newAttr->setInherited(true);
1160      newDecl->addAttr(newAttr);
1161      foundAny = true;
1162    }
1163  }
1164
1165  if (!foundAny) newDecl->dropAttrs();
1166}
1167
1168namespace {
1169
1170/// Used in MergeFunctionDecl to keep track of function parameters in
1171/// C.
1172struct GNUCompatibleParamWarning {
1173  ParmVarDecl *OldParm;
1174  ParmVarDecl *NewParm;
1175  QualType PromotedType;
1176};
1177
1178}
1179
1180/// getSpecialMember - get the special member enum for a method.
1181Sema::CXXSpecialMember Sema::getSpecialMember(const CXXMethodDecl *MD) {
1182  if (const CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(MD)) {
1183    if (Ctor->isCopyConstructor())
1184      return Sema::CXXCopyConstructor;
1185
1186    return Sema::CXXConstructor;
1187  }
1188
1189  if (isa<CXXDestructorDecl>(MD))
1190    return Sema::CXXDestructor;
1191
1192  assert(MD->isCopyAssignmentOperator() &&
1193         "Must have copy assignment operator");
1194  return Sema::CXXCopyAssignment;
1195}
1196
1197/// canRedefineFunction - checks if a function can be redefined. Currently,
1198/// only extern inline functions can be redefined, and even then only in
1199/// GNU89 mode.
1200static bool canRedefineFunction(const FunctionDecl *FD,
1201                                const LangOptions& LangOpts) {
1202  return (LangOpts.GNUMode && !LangOpts.C99 && !LangOpts.CPlusPlus &&
1203          FD->isInlineSpecified() &&
1204          FD->getStorageClass() == SC_Extern);
1205}
1206
1207/// MergeFunctionDecl - We just parsed a function 'New' from
1208/// declarator D which has the same name and scope as a previous
1209/// declaration 'Old'.  Figure out how to resolve this situation,
1210/// merging decls or emitting diagnostics as appropriate.
1211///
1212/// In C++, New and Old must be declarations that are not
1213/// overloaded. Use IsOverload to determine whether New and Old are
1214/// overloaded, and to select the Old declaration that New should be
1215/// merged with.
1216///
1217/// Returns true if there was an error, false otherwise.
1218bool Sema::MergeFunctionDecl(FunctionDecl *New, Decl *OldD) {
1219  // Verify the old decl was also a function.
1220  FunctionDecl *Old = 0;
1221  if (FunctionTemplateDecl *OldFunctionTemplate
1222        = dyn_cast<FunctionTemplateDecl>(OldD))
1223    Old = OldFunctionTemplate->getTemplatedDecl();
1224  else
1225    Old = dyn_cast<FunctionDecl>(OldD);
1226  if (!Old) {
1227    if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) {
1228      Diag(New->getLocation(), diag::err_using_decl_conflict_reverse);
1229      Diag(Shadow->getTargetDecl()->getLocation(),
1230           diag::note_using_decl_target);
1231      Diag(Shadow->getUsingDecl()->getLocation(),
1232           diag::note_using_decl) << 0;
1233      return true;
1234    }
1235
1236    Diag(New->getLocation(), diag::err_redefinition_different_kind)
1237      << New->getDeclName();
1238    Diag(OldD->getLocation(), diag::note_previous_definition);
1239    return true;
1240  }
1241
1242  // Determine whether the previous declaration was a definition,
1243  // implicit declaration, or a declaration.
1244  diag::kind PrevDiag;
1245  if (Old->isThisDeclarationADefinition())
1246    PrevDiag = diag::note_previous_definition;
1247  else if (Old->isImplicit())
1248    PrevDiag = diag::note_previous_implicit_declaration;
1249  else
1250    PrevDiag = diag::note_previous_declaration;
1251
1252  QualType OldQType = Context.getCanonicalType(Old->getType());
1253  QualType NewQType = Context.getCanonicalType(New->getType());
1254
1255  // Don't complain about this if we're in GNU89 mode and the old function
1256  // is an extern inline function.
1257  if (!isa<CXXMethodDecl>(New) && !isa<CXXMethodDecl>(Old) &&
1258      New->getStorageClass() == SC_Static &&
1259      Old->getStorageClass() != SC_Static &&
1260      !canRedefineFunction(Old, getLangOptions())) {
1261    unsigned DiagID = diag::err_static_non_static;
1262    if (getLangOptions().Microsoft)
1263      DiagID = diag::warn_static_non_static;
1264    Diag(New->getLocation(), DiagID) << New;
1265    Diag(Old->getLocation(), PrevDiag);
1266    return true;
1267  }
1268
1269  // If a function is first declared with a calling convention, but is
1270  // later declared or defined without one, the second decl assumes the
1271  // calling convention of the first.
1272  //
1273  // For the new decl, we have to look at the NON-canonical type to tell the
1274  // difference between a function that really doesn't have a calling
1275  // convention and one that is declared cdecl. That's because in
1276  // canonicalization (see ASTContext.cpp), cdecl is canonicalized away
1277  // because it is the default calling convention.
1278  //
1279  // Note also that we DO NOT return at this point, because we still have
1280  // other tests to run.
1281  const FunctionType *OldType = cast<FunctionType>(OldQType);
1282  const FunctionType *NewType = New->getType()->getAs<FunctionType>();
1283  FunctionType::ExtInfo OldTypeInfo = OldType->getExtInfo();
1284  FunctionType::ExtInfo NewTypeInfo = NewType->getExtInfo();
1285  bool RequiresAdjustment = false;
1286  if (OldTypeInfo.getCC() != CC_Default &&
1287      NewTypeInfo.getCC() == CC_Default) {
1288    NewTypeInfo = NewTypeInfo.withCallingConv(OldTypeInfo.getCC());
1289    RequiresAdjustment = true;
1290  } else if (!Context.isSameCallConv(OldTypeInfo.getCC(),
1291                                     NewTypeInfo.getCC())) {
1292    // Calling conventions really aren't compatible, so complain.
1293    Diag(New->getLocation(), diag::err_cconv_change)
1294      << FunctionType::getNameForCallConv(NewTypeInfo.getCC())
1295      << (OldTypeInfo.getCC() == CC_Default)
1296      << (OldTypeInfo.getCC() == CC_Default ? "" :
1297          FunctionType::getNameForCallConv(OldTypeInfo.getCC()));
1298    Diag(Old->getLocation(), diag::note_previous_declaration);
1299    return true;
1300  }
1301
1302  // FIXME: diagnose the other way around?
1303  if (OldTypeInfo.getNoReturn() && !NewTypeInfo.getNoReturn()) {
1304    NewTypeInfo = NewTypeInfo.withNoReturn(true);
1305    RequiresAdjustment = true;
1306  }
1307
1308  // Merge regparm attribute.
1309  if (OldTypeInfo.getHasRegParm() != NewTypeInfo.getHasRegParm() ||
1310      OldTypeInfo.getRegParm() != NewTypeInfo.getRegParm()) {
1311    if (NewTypeInfo.getHasRegParm()) {
1312      Diag(New->getLocation(), diag::err_regparm_mismatch)
1313        << NewType->getRegParmType()
1314        << OldType->getRegParmType();
1315      Diag(Old->getLocation(), diag::note_previous_declaration);
1316      return true;
1317    }
1318
1319    NewTypeInfo = NewTypeInfo.withRegParm(OldTypeInfo.getRegParm());
1320    RequiresAdjustment = true;
1321  }
1322
1323  if (RequiresAdjustment) {
1324    NewType = Context.adjustFunctionType(NewType, NewTypeInfo);
1325    New->setType(QualType(NewType, 0));
1326    NewQType = Context.getCanonicalType(New->getType());
1327  }
1328
1329  if (getLangOptions().CPlusPlus) {
1330    // (C++98 13.1p2):
1331    //   Certain function declarations cannot be overloaded:
1332    //     -- Function declarations that differ only in the return type
1333    //        cannot be overloaded.
1334    QualType OldReturnType = OldType->getResultType();
1335    QualType NewReturnType = cast<FunctionType>(NewQType)->getResultType();
1336    QualType ResQT;
1337    if (OldReturnType != NewReturnType) {
1338      if (NewReturnType->isObjCObjectPointerType()
1339          && OldReturnType->isObjCObjectPointerType())
1340        ResQT = Context.mergeObjCGCQualifiers(NewQType, OldQType);
1341      if (ResQT.isNull()) {
1342        if (New->isCXXClassMember() && New->isOutOfLine())
1343          Diag(New->getLocation(),
1344               diag::err_member_def_does_not_match_ret_type) << New;
1345        else
1346          Diag(New->getLocation(), diag::err_ovl_diff_return_type);
1347        Diag(Old->getLocation(), PrevDiag) << Old << Old->getType();
1348        return true;
1349      }
1350      else
1351        NewQType = ResQT;
1352    }
1353
1354    const CXXMethodDecl* OldMethod = dyn_cast<CXXMethodDecl>(Old);
1355    CXXMethodDecl* NewMethod = dyn_cast<CXXMethodDecl>(New);
1356    if (OldMethod && NewMethod) {
1357      // Preserve triviality.
1358      NewMethod->setTrivial(OldMethod->isTrivial());
1359
1360      bool isFriend = NewMethod->getFriendObjectKind();
1361
1362      if (!isFriend && NewMethod->getLexicalDeclContext()->isRecord()) {
1363        //    -- Member function declarations with the same name and the
1364        //       same parameter types cannot be overloaded if any of them
1365        //       is a static member function declaration.
1366        if (OldMethod->isStatic() || NewMethod->isStatic()) {
1367          Diag(New->getLocation(), diag::err_ovl_static_nonstatic_member);
1368          Diag(Old->getLocation(), PrevDiag) << Old << Old->getType();
1369          return true;
1370        }
1371
1372        // C++ [class.mem]p1:
1373        //   [...] A member shall not be declared twice in the
1374        //   member-specification, except that a nested class or member
1375        //   class template can be declared and then later defined.
1376        unsigned NewDiag;
1377        if (isa<CXXConstructorDecl>(OldMethod))
1378          NewDiag = diag::err_constructor_redeclared;
1379        else if (isa<CXXDestructorDecl>(NewMethod))
1380          NewDiag = diag::err_destructor_redeclared;
1381        else if (isa<CXXConversionDecl>(NewMethod))
1382          NewDiag = diag::err_conv_function_redeclared;
1383        else
1384          NewDiag = diag::err_member_redeclared;
1385
1386        Diag(New->getLocation(), NewDiag);
1387        Diag(Old->getLocation(), PrevDiag) << Old << Old->getType();
1388
1389      // Complain if this is an explicit declaration of a special
1390      // member that was initially declared implicitly.
1391      //
1392      // As an exception, it's okay to befriend such methods in order
1393      // to permit the implicit constructor/destructor/operator calls.
1394      } else if (OldMethod->isImplicit()) {
1395        if (isFriend) {
1396          NewMethod->setImplicit();
1397        } else {
1398          Diag(NewMethod->getLocation(),
1399               diag::err_definition_of_implicitly_declared_member)
1400            << New << getSpecialMember(OldMethod);
1401          return true;
1402        }
1403      }
1404    }
1405
1406    // (C++98 8.3.5p3):
1407    //   All declarations for a function shall agree exactly in both the
1408    //   return type and the parameter-type-list.
1409    // We also want to respect all the extended bits except noreturn.
1410
1411    // noreturn should now match unless the old type info didn't have it.
1412    QualType OldQTypeForComparison = OldQType;
1413    if (!OldTypeInfo.getNoReturn() && NewTypeInfo.getNoReturn()) {
1414      assert(OldQType == QualType(OldType, 0));
1415      const FunctionType *OldTypeForComparison
1416        = Context.adjustFunctionType(OldType, OldTypeInfo.withNoReturn(true));
1417      OldQTypeForComparison = QualType(OldTypeForComparison, 0);
1418      assert(OldQTypeForComparison.isCanonical());
1419    }
1420
1421    if (OldQTypeForComparison == NewQType)
1422      return MergeCompatibleFunctionDecls(New, Old);
1423
1424    // Fall through for conflicting redeclarations and redefinitions.
1425  }
1426
1427  // C: Function types need to be compatible, not identical. This handles
1428  // duplicate function decls like "void f(int); void f(enum X);" properly.
1429  if (!getLangOptions().CPlusPlus &&
1430      Context.typesAreCompatible(OldQType, NewQType)) {
1431    const FunctionType *OldFuncType = OldQType->getAs<FunctionType>();
1432    const FunctionType *NewFuncType = NewQType->getAs<FunctionType>();
1433    const FunctionProtoType *OldProto = 0;
1434    if (isa<FunctionNoProtoType>(NewFuncType) &&
1435        (OldProto = dyn_cast<FunctionProtoType>(OldFuncType))) {
1436      // The old declaration provided a function prototype, but the
1437      // new declaration does not. Merge in the prototype.
1438      assert(!OldProto->hasExceptionSpec() && "Exception spec in C");
1439      llvm::SmallVector<QualType, 16> ParamTypes(OldProto->arg_type_begin(),
1440                                                 OldProto->arg_type_end());
1441      NewQType = Context.getFunctionType(NewFuncType->getResultType(),
1442                                         ParamTypes.data(), ParamTypes.size(),
1443                                         OldProto->getExtProtoInfo());
1444      New->setType(NewQType);
1445      New->setHasInheritedPrototype();
1446
1447      // Synthesize a parameter for each argument type.
1448      llvm::SmallVector<ParmVarDecl*, 16> Params;
1449      for (FunctionProtoType::arg_type_iterator
1450             ParamType = OldProto->arg_type_begin(),
1451             ParamEnd = OldProto->arg_type_end();
1452           ParamType != ParamEnd; ++ParamType) {
1453        ParmVarDecl *Param = ParmVarDecl::Create(Context, New,
1454                                                 SourceLocation(),
1455                                                 SourceLocation(), 0,
1456                                                 *ParamType, /*TInfo=*/0,
1457                                                 SC_None, SC_None,
1458                                                 0);
1459        Param->setImplicit();
1460        Params.push_back(Param);
1461      }
1462
1463      New->setParams(Params.data(), Params.size());
1464    }
1465
1466    return MergeCompatibleFunctionDecls(New, Old);
1467  }
1468
1469  // GNU C permits a K&R definition to follow a prototype declaration
1470  // if the declared types of the parameters in the K&R definition
1471  // match the types in the prototype declaration, even when the
1472  // promoted types of the parameters from the K&R definition differ
1473  // from the types in the prototype. GCC then keeps the types from
1474  // the prototype.
1475  //
1476  // If a variadic prototype is followed by a non-variadic K&R definition,
1477  // the K&R definition becomes variadic.  This is sort of an edge case, but
1478  // it's legal per the standard depending on how you read C99 6.7.5.3p15 and
1479  // C99 6.9.1p8.
1480  if (!getLangOptions().CPlusPlus &&
1481      Old->hasPrototype() && !New->hasPrototype() &&
1482      New->getType()->getAs<FunctionProtoType>() &&
1483      Old->getNumParams() == New->getNumParams()) {
1484    llvm::SmallVector<QualType, 16> ArgTypes;
1485    llvm::SmallVector<GNUCompatibleParamWarning, 16> Warnings;
1486    const FunctionProtoType *OldProto
1487      = Old->getType()->getAs<FunctionProtoType>();
1488    const FunctionProtoType *NewProto
1489      = New->getType()->getAs<FunctionProtoType>();
1490
1491    // Determine whether this is the GNU C extension.
1492    QualType MergedReturn = Context.mergeTypes(OldProto->getResultType(),
1493                                               NewProto->getResultType());
1494    bool LooseCompatible = !MergedReturn.isNull();
1495    for (unsigned Idx = 0, End = Old->getNumParams();
1496         LooseCompatible && Idx != End; ++Idx) {
1497      ParmVarDecl *OldParm = Old->getParamDecl(Idx);
1498      ParmVarDecl *NewParm = New->getParamDecl(Idx);
1499      if (Context.typesAreCompatible(OldParm->getType(),
1500                                     NewProto->getArgType(Idx))) {
1501        ArgTypes.push_back(NewParm->getType());
1502      } else if (Context.typesAreCompatible(OldParm->getType(),
1503                                            NewParm->getType(),
1504                                            /*CompareUnqualified=*/true)) {
1505        GNUCompatibleParamWarning Warn
1506          = { OldParm, NewParm, NewProto->getArgType(Idx) };
1507        Warnings.push_back(Warn);
1508        ArgTypes.push_back(NewParm->getType());
1509      } else
1510        LooseCompatible = false;
1511    }
1512
1513    if (LooseCompatible) {
1514      for (unsigned Warn = 0; Warn < Warnings.size(); ++Warn) {
1515        Diag(Warnings[Warn].NewParm->getLocation(),
1516             diag::ext_param_promoted_not_compatible_with_prototype)
1517          << Warnings[Warn].PromotedType
1518          << Warnings[Warn].OldParm->getType();
1519        if (Warnings[Warn].OldParm->getLocation().isValid())
1520          Diag(Warnings[Warn].OldParm->getLocation(),
1521               diag::note_previous_declaration);
1522      }
1523
1524      New->setType(Context.getFunctionType(MergedReturn, &ArgTypes[0],
1525                                           ArgTypes.size(),
1526                                           OldProto->getExtProtoInfo()));
1527      return MergeCompatibleFunctionDecls(New, Old);
1528    }
1529
1530    // Fall through to diagnose conflicting types.
1531  }
1532
1533  // A function that has already been declared has been redeclared or defined
1534  // with a different type- show appropriate diagnostic
1535  if (unsigned BuiltinID = Old->getBuiltinID()) {
1536    // The user has declared a builtin function with an incompatible
1537    // signature.
1538    if (Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID)) {
1539      // The function the user is redeclaring is a library-defined
1540      // function like 'malloc' or 'printf'. Warn about the
1541      // redeclaration, then pretend that we don't know about this
1542      // library built-in.
1543      Diag(New->getLocation(), diag::warn_redecl_library_builtin) << New;
1544      Diag(Old->getLocation(), diag::note_previous_builtin_declaration)
1545        << Old << Old->getType();
1546      New->getIdentifier()->setBuiltinID(Builtin::NotBuiltin);
1547      Old->setInvalidDecl();
1548      return false;
1549    }
1550
1551    PrevDiag = diag::note_previous_builtin_declaration;
1552  }
1553
1554  Diag(New->getLocation(), diag::err_conflicting_types) << New->getDeclName();
1555  Diag(Old->getLocation(), PrevDiag) << Old << Old->getType();
1556  return true;
1557}
1558
1559/// \brief Completes the merge of two function declarations that are
1560/// known to be compatible.
1561///
1562/// This routine handles the merging of attributes and other
1563/// properties of function declarations form the old declaration to
1564/// the new declaration, once we know that New is in fact a
1565/// redeclaration of Old.
1566///
1567/// \returns false
1568bool Sema::MergeCompatibleFunctionDecls(FunctionDecl *New, FunctionDecl *Old) {
1569  // Merge the attributes
1570  mergeDeclAttributes(New, Old, Context);
1571
1572  // Merge the storage class.
1573  if (Old->getStorageClass() != SC_Extern &&
1574      Old->getStorageClass() != SC_None)
1575    New->setStorageClass(Old->getStorageClass());
1576
1577  // Merge "pure" flag.
1578  if (Old->isPure())
1579    New->setPure();
1580
1581  // Merge the "deleted" flag.
1582  if (Old->isDeleted())
1583    New->setDeleted();
1584
1585  // Merge attributes from the parameters.  These can mismatch with K&R
1586  // declarations.
1587  if (New->getNumParams() == Old->getNumParams())
1588    for (unsigned i = 0, e = New->getNumParams(); i != e; ++i)
1589      mergeParamDeclAttributes(New->getParamDecl(i), Old->getParamDecl(i),
1590                               Context);
1591
1592  if (getLangOptions().CPlusPlus)
1593    return MergeCXXFunctionDecl(New, Old);
1594
1595  return false;
1596}
1597
1598void Sema::mergeObjCMethodDecls(ObjCMethodDecl *newMethod,
1599                                const ObjCMethodDecl *oldMethod) {
1600  // Merge the attributes.
1601  mergeDeclAttributes(newMethod, oldMethod, Context);
1602
1603  // Merge attributes from the parameters.
1604  for (ObjCMethodDecl::param_iterator oi = oldMethod->param_begin(),
1605         ni = newMethod->param_begin(), ne = newMethod->param_end();
1606       ni != ne; ++ni, ++oi)
1607    mergeParamDeclAttributes(*ni, *oi, Context);
1608}
1609
1610/// MergeVarDeclTypes - We parsed a variable 'New' which has the same name and
1611/// scope as a previous declaration 'Old'.  Figure out how to merge their types,
1612/// emitting diagnostics as appropriate.
1613///
1614/// Declarations using the auto type specifier (C++ [decl.spec.auto]) call back
1615/// to here in AddInitializerToDecl and AddCXXDirectInitializerToDecl. We can't
1616/// check them before the initializer is attached.
1617///
1618void Sema::MergeVarDeclTypes(VarDecl *New, VarDecl *Old) {
1619  if (New->isInvalidDecl() || Old->isInvalidDecl())
1620    return;
1621
1622  QualType MergedT;
1623  if (getLangOptions().CPlusPlus) {
1624    AutoType *AT = New->getType()->getContainedAutoType();
1625    if (AT && !AT->isDeduced()) {
1626      // We don't know what the new type is until the initializer is attached.
1627      return;
1628    } else if (Context.hasSameType(New->getType(), Old->getType())) {
1629      // These could still be something that needs exception specs checked.
1630      return MergeVarDeclExceptionSpecs(New, Old);
1631    }
1632    // C++ [basic.link]p10:
1633    //   [...] the types specified by all declarations referring to a given
1634    //   object or function shall be identical, except that declarations for an
1635    //   array object can specify array types that differ by the presence or
1636    //   absence of a major array bound (8.3.4).
1637    else if (Old->getType()->isIncompleteArrayType() &&
1638             New->getType()->isArrayType()) {
1639      CanQual<ArrayType> OldArray
1640        = Context.getCanonicalType(Old->getType())->getAs<ArrayType>();
1641      CanQual<ArrayType> NewArray
1642        = Context.getCanonicalType(New->getType())->getAs<ArrayType>();
1643      if (OldArray->getElementType() == NewArray->getElementType())
1644        MergedT = New->getType();
1645    } else if (Old->getType()->isArrayType() &&
1646             New->getType()->isIncompleteArrayType()) {
1647      CanQual<ArrayType> OldArray
1648        = Context.getCanonicalType(Old->getType())->getAs<ArrayType>();
1649      CanQual<ArrayType> NewArray
1650        = Context.getCanonicalType(New->getType())->getAs<ArrayType>();
1651      if (OldArray->getElementType() == NewArray->getElementType())
1652        MergedT = Old->getType();
1653    } else if (New->getType()->isObjCObjectPointerType()
1654               && Old->getType()->isObjCObjectPointerType()) {
1655        MergedT = Context.mergeObjCGCQualifiers(New->getType(),
1656                                                        Old->getType());
1657    }
1658  } else {
1659    MergedT = Context.mergeTypes(New->getType(), Old->getType());
1660  }
1661  if (MergedT.isNull()) {
1662    Diag(New->getLocation(), diag::err_redefinition_different_type)
1663      << New->getDeclName();
1664    Diag(Old->getLocation(), diag::note_previous_definition);
1665    return New->setInvalidDecl();
1666  }
1667  New->setType(MergedT);
1668}
1669
1670/// MergeVarDecl - We just parsed a variable 'New' which has the same name
1671/// and scope as a previous declaration 'Old'.  Figure out how to resolve this
1672/// situation, merging decls or emitting diagnostics as appropriate.
1673///
1674/// Tentative definition rules (C99 6.9.2p2) are checked by
1675/// FinalizeDeclaratorGroup. Unfortunately, we can't analyze tentative
1676/// definitions here, since the initializer hasn't been attached.
1677///
1678void Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {
1679  // If the new decl is already invalid, don't do any other checking.
1680  if (New->isInvalidDecl())
1681    return;
1682
1683  // Verify the old decl was also a variable.
1684  VarDecl *Old = 0;
1685  if (!Previous.isSingleResult() ||
1686      !(Old = dyn_cast<VarDecl>(Previous.getFoundDecl()))) {
1687    Diag(New->getLocation(), diag::err_redefinition_different_kind)
1688      << New->getDeclName();
1689    Diag(Previous.getRepresentativeDecl()->getLocation(),
1690         diag::note_previous_definition);
1691    return New->setInvalidDecl();
1692  }
1693
1694  // C++ [class.mem]p1:
1695  //   A member shall not be declared twice in the member-specification [...]
1696  //
1697  // Here, we need only consider static data members.
1698  if (Old->isStaticDataMember() && !New->isOutOfLine()) {
1699    Diag(New->getLocation(), diag::err_duplicate_member)
1700      << New->getIdentifier();
1701    Diag(Old->getLocation(), diag::note_previous_declaration);
1702    New->setInvalidDecl();
1703  }
1704
1705  mergeDeclAttributes(New, Old, Context);
1706
1707  // Merge the types.
1708  MergeVarDeclTypes(New, Old);
1709  if (New->isInvalidDecl())
1710    return;
1711
1712  // C99 6.2.2p4: Check if we have a static decl followed by a non-static.
1713  if (New->getStorageClass() == SC_Static &&
1714      (Old->getStorageClass() == SC_None || Old->hasExternalStorage())) {
1715    Diag(New->getLocation(), diag::err_static_non_static) << New->getDeclName();
1716    Diag(Old->getLocation(), diag::note_previous_definition);
1717    return New->setInvalidDecl();
1718  }
1719  // C99 6.2.2p4:
1720  //   For an identifier declared with the storage-class specifier
1721  //   extern in a scope in which a prior declaration of that
1722  //   identifier is visible,23) if the prior declaration specifies
1723  //   internal or external linkage, the linkage of the identifier at
1724  //   the later declaration is the same as the linkage specified at
1725  //   the prior declaration. If no prior declaration is visible, or
1726  //   if the prior declaration specifies no linkage, then the
1727  //   identifier has external linkage.
1728  if (New->hasExternalStorage() && Old->hasLinkage())
1729    /* Okay */;
1730  else if (New->getStorageClass() != SC_Static &&
1731           Old->getStorageClass() == SC_Static) {
1732    Diag(New->getLocation(), diag::err_non_static_static) << New->getDeclName();
1733    Diag(Old->getLocation(), diag::note_previous_definition);
1734    return New->setInvalidDecl();
1735  }
1736
1737  // Check if extern is followed by non-extern and vice-versa.
1738  if (New->hasExternalStorage() &&
1739      !Old->hasLinkage() && Old->isLocalVarDecl()) {
1740    Diag(New->getLocation(), diag::err_extern_non_extern) << New->getDeclName();
1741    Diag(Old->getLocation(), diag::note_previous_definition);
1742    return New->setInvalidDecl();
1743  }
1744  if (Old->hasExternalStorage() &&
1745      !New->hasLinkage() && New->isLocalVarDecl()) {
1746    Diag(New->getLocation(), diag::err_non_extern_extern) << New->getDeclName();
1747    Diag(Old->getLocation(), diag::note_previous_definition);
1748    return New->setInvalidDecl();
1749  }
1750
1751  // Variables with external linkage are analyzed in FinalizeDeclaratorGroup.
1752
1753  // FIXME: The test for external storage here seems wrong? We still
1754  // need to check for mismatches.
1755  if (!New->hasExternalStorage() && !New->isFileVarDecl() &&
1756      // Don't complain about out-of-line definitions of static members.
1757      !(Old->getLexicalDeclContext()->isRecord() &&
1758        !New->getLexicalDeclContext()->isRecord())) {
1759    Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName();
1760    Diag(Old->getLocation(), diag::note_previous_definition);
1761    return New->setInvalidDecl();
1762  }
1763
1764  if (New->isThreadSpecified() && !Old->isThreadSpecified()) {
1765    Diag(New->getLocation(), diag::err_thread_non_thread) << New->getDeclName();
1766    Diag(Old->getLocation(), diag::note_previous_definition);
1767  } else if (!New->isThreadSpecified() && Old->isThreadSpecified()) {
1768    Diag(New->getLocation(), diag::err_non_thread_thread) << New->getDeclName();
1769    Diag(Old->getLocation(), diag::note_previous_definition);
1770  }
1771
1772  // C++ doesn't have tentative definitions, so go right ahead and check here.
1773  const VarDecl *Def;
1774  if (getLangOptions().CPlusPlus &&
1775      New->isThisDeclarationADefinition() == VarDecl::Definition &&
1776      (Def = Old->getDefinition())) {
1777    Diag(New->getLocation(), diag::err_redefinition)
1778      << New->getDeclName();
1779    Diag(Def->getLocation(), diag::note_previous_definition);
1780    New->setInvalidDecl();
1781    return;
1782  }
1783  // c99 6.2.2 P4.
1784  // For an identifier declared with the storage-class specifier extern in a
1785  // scope in which a prior declaration of that identifier is visible, if
1786  // the prior declaration specifies internal or external linkage, the linkage
1787  // of the identifier at the later declaration is the same as the linkage
1788  // specified at the prior declaration.
1789  // FIXME. revisit this code.
1790  if (New->hasExternalStorage() &&
1791      Old->getLinkage() == InternalLinkage &&
1792      New->getDeclContext() == Old->getDeclContext())
1793    New->setStorageClass(Old->getStorageClass());
1794
1795  // Keep a chain of previous declarations.
1796  New->setPreviousDeclaration(Old);
1797
1798  // Inherit access appropriately.
1799  New->setAccess(Old->getAccess());
1800}
1801
1802/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with
1803/// no declarator (e.g. "struct foo;") is parsed.
1804Decl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS,
1805                                       DeclSpec &DS) {
1806  Decl *TagD = 0;
1807  TagDecl *Tag = 0;
1808  if (DS.getTypeSpecType() == DeclSpec::TST_class ||
1809      DS.getTypeSpecType() == DeclSpec::TST_struct ||
1810      DS.getTypeSpecType() == DeclSpec::TST_union ||
1811      DS.getTypeSpecType() == DeclSpec::TST_enum) {
1812    TagD = DS.getRepAsDecl();
1813
1814    if (!TagD) // We probably had an error
1815      return 0;
1816
1817    // Note that the above type specs guarantee that the
1818    // type rep is a Decl, whereas in many of the others
1819    // it's a Type.
1820    Tag = dyn_cast<TagDecl>(TagD);
1821  }
1822
1823  if (unsigned TypeQuals = DS.getTypeQualifiers()) {
1824    // Enforce C99 6.7.3p2: "Types other than pointer types derived from object
1825    // or incomplete types shall not be restrict-qualified."
1826    if (TypeQuals & DeclSpec::TQ_restrict)
1827      Diag(DS.getRestrictSpecLoc(),
1828           diag::err_typecheck_invalid_restrict_not_pointer_noarg)
1829           << DS.getSourceRange();
1830  }
1831
1832  if (DS.isFriendSpecified()) {
1833    // If we're dealing with a decl but not a TagDecl, assume that
1834    // whatever routines created it handled the friendship aspect.
1835    if (TagD && !Tag)
1836      return 0;
1837    return ActOnFriendTypeDecl(S, DS, MultiTemplateParamsArg(*this, 0, 0));
1838  }
1839
1840  // Track whether we warned about the fact that there aren't any
1841  // declarators.
1842  bool emittedWarning = false;
1843
1844  if (RecordDecl *Record = dyn_cast_or_null<RecordDecl>(Tag)) {
1845    ProcessDeclAttributeList(S, Record, DS.getAttributes().getList());
1846
1847    if (!Record->getDeclName() && Record->isDefinition() &&
1848        DS.getStorageClassSpec() != DeclSpec::SCS_typedef) {
1849      if (getLangOptions().CPlusPlus ||
1850          Record->getDeclContext()->isRecord())
1851        return BuildAnonymousStructOrUnion(S, DS, AS, Record);
1852
1853      Diag(DS.getSourceRange().getBegin(), diag::ext_no_declarators)
1854        << DS.getSourceRange();
1855      emittedWarning = true;
1856    }
1857  }
1858
1859  // Check for Microsoft C extension: anonymous struct.
1860  if (getLangOptions().Microsoft && !getLangOptions().CPlusPlus &&
1861      CurContext->isRecord() &&
1862      DS.getStorageClassSpec() == DeclSpec::SCS_unspecified) {
1863    // Handle 2 kinds of anonymous struct:
1864    //   struct STRUCT;
1865    // and
1866    //   STRUCT_TYPE;  <- where STRUCT_TYPE is a typedef struct.
1867    RecordDecl *Record = dyn_cast_or_null<RecordDecl>(Tag);
1868    if ((Record && Record->getDeclName() && !Record->isDefinition()) ||
1869        (DS.getTypeSpecType() == DeclSpec::TST_typename &&
1870         DS.getRepAsType().get()->isStructureType())) {
1871      Diag(DS.getSourceRange().getBegin(), diag::ext_ms_anonymous_struct)
1872        << DS.getSourceRange();
1873      return BuildMicrosoftCAnonymousStruct(S, DS, Record);
1874    }
1875  }
1876
1877  if (getLangOptions().CPlusPlus &&
1878      DS.getStorageClassSpec() != DeclSpec::SCS_typedef)
1879    if (EnumDecl *Enum = dyn_cast_or_null<EnumDecl>(Tag))
1880      if (Enum->enumerator_begin() == Enum->enumerator_end() &&
1881          !Enum->getIdentifier() && !Enum->isInvalidDecl()) {
1882        Diag(Enum->getLocation(), diag::ext_no_declarators)
1883          << DS.getSourceRange();
1884        emittedWarning = true;
1885      }
1886
1887  // Skip all the checks below if we have a type error.
1888  if (DS.getTypeSpecType() == DeclSpec::TST_error) return TagD;
1889
1890  if (!DS.isMissingDeclaratorOk()) {
1891    // Warn about typedefs of enums without names, since this is an
1892    // extension in both Microsoft and GNU.
1893    if (DS.getStorageClassSpec() == DeclSpec::SCS_typedef &&
1894        Tag && isa<EnumDecl>(Tag)) {
1895      Diag(DS.getSourceRange().getBegin(), diag::ext_typedef_without_a_name)
1896        << DS.getSourceRange();
1897      return Tag;
1898    }
1899
1900    Diag(DS.getSourceRange().getBegin(), diag::ext_no_declarators)
1901      << DS.getSourceRange();
1902    emittedWarning = true;
1903  }
1904
1905  // We're going to complain about a bunch of spurious specifiers;
1906  // only do this if we're declaring a tag, because otherwise we
1907  // should be getting diag::ext_no_declarators.
1908  if (emittedWarning || (TagD && TagD->isInvalidDecl()))
1909    return TagD;
1910
1911  // Note that a linkage-specification sets a storage class, but
1912  // 'extern "C" struct foo;' is actually valid and not theoretically
1913  // useless.
1914  if (DeclSpec::SCS scs = DS.getStorageClassSpec())
1915    if (!DS.isExternInLinkageSpec())
1916      Diag(DS.getStorageClassSpecLoc(), diag::warn_standalone_specifier)
1917        << DeclSpec::getSpecifierName(scs);
1918
1919  if (DS.isThreadSpecified())
1920    Diag(DS.getThreadSpecLoc(), diag::warn_standalone_specifier) << "__thread";
1921  if (DS.getTypeQualifiers()) {
1922    if (DS.getTypeQualifiers() & DeclSpec::TQ_const)
1923      Diag(DS.getConstSpecLoc(), diag::warn_standalone_specifier) << "const";
1924    if (DS.getTypeQualifiers() & DeclSpec::TQ_volatile)
1925      Diag(DS.getConstSpecLoc(), diag::warn_standalone_specifier) << "volatile";
1926    // Restrict is covered above.
1927  }
1928  if (DS.isInlineSpecified())
1929    Diag(DS.getInlineSpecLoc(), diag::warn_standalone_specifier) << "inline";
1930  if (DS.isVirtualSpecified())
1931    Diag(DS.getVirtualSpecLoc(), diag::warn_standalone_specifier) << "virtual";
1932  if (DS.isExplicitSpecified())
1933    Diag(DS.getExplicitSpecLoc(), diag::warn_standalone_specifier) <<"explicit";
1934
1935  // FIXME: Warn on useless attributes
1936
1937  return TagD;
1938}
1939
1940/// ActOnVlaStmt - This rouine if finds a vla expression in a decl spec.
1941/// builds a statement for it and returns it so it is evaluated.
1942StmtResult Sema::ActOnVlaStmt(const DeclSpec &DS) {
1943  StmtResult R;
1944  if (DS.getTypeSpecType() == DeclSpec::TST_typeofExpr) {
1945    Expr *Exp = DS.getRepAsExpr();
1946    QualType Ty = Exp->getType();
1947    if (Ty->isPointerType()) {
1948      do
1949        Ty = Ty->getAs<PointerType>()->getPointeeType();
1950      while (Ty->isPointerType());
1951    }
1952    if (Ty->isVariableArrayType()) {
1953      R = ActOnExprStmt(MakeFullExpr(Exp));
1954    }
1955  }
1956  return R;
1957}
1958
1959/// We are trying to inject an anonymous member into the given scope;
1960/// check if there's an existing declaration that can't be overloaded.
1961///
1962/// \return true if this is a forbidden redeclaration
1963static bool CheckAnonMemberRedeclaration(Sema &SemaRef,
1964                                         Scope *S,
1965                                         DeclContext *Owner,
1966                                         DeclarationName Name,
1967                                         SourceLocation NameLoc,
1968                                         unsigned diagnostic) {
1969  LookupResult R(SemaRef, Name, NameLoc, Sema::LookupMemberName,
1970                 Sema::ForRedeclaration);
1971  if (!SemaRef.LookupName(R, S)) return false;
1972
1973  if (R.getAsSingle<TagDecl>())
1974    return false;
1975
1976  // Pick a representative declaration.
1977  NamedDecl *PrevDecl = R.getRepresentativeDecl()->getUnderlyingDecl();
1978  assert(PrevDecl && "Expected a non-null Decl");
1979
1980  if (!SemaRef.isDeclInScope(PrevDecl, Owner, S))
1981    return false;
1982
1983  SemaRef.Diag(NameLoc, diagnostic) << Name;
1984  SemaRef.Diag(PrevDecl->getLocation(), diag::note_previous_declaration);
1985
1986  return true;
1987}
1988
1989/// InjectAnonymousStructOrUnionMembers - Inject the members of the
1990/// anonymous struct or union AnonRecord into the owning context Owner
1991/// and scope S. This routine will be invoked just after we realize
1992/// that an unnamed union or struct is actually an anonymous union or
1993/// struct, e.g.,
1994///
1995/// @code
1996/// union {
1997///   int i;
1998///   float f;
1999/// }; // InjectAnonymousStructOrUnionMembers called here to inject i and
2000///    // f into the surrounding scope.x
2001/// @endcode
2002///
2003/// This routine is recursive, injecting the names of nested anonymous
2004/// structs/unions into the owning context and scope as well.
2005static bool InjectAnonymousStructOrUnionMembers(Sema &SemaRef, Scope *S,
2006                                                DeclContext *Owner,
2007                                                RecordDecl *AnonRecord,
2008                                                AccessSpecifier AS,
2009                              llvm::SmallVector<NamedDecl*, 2> &Chaining,
2010                                                      bool MSAnonStruct) {
2011  unsigned diagKind
2012    = AnonRecord->isUnion() ? diag::err_anonymous_union_member_redecl
2013                            : diag::err_anonymous_struct_member_redecl;
2014
2015  bool Invalid = false;
2016
2017  // Look every FieldDecl and IndirectFieldDecl with a name.
2018  for (RecordDecl::decl_iterator D = AnonRecord->decls_begin(),
2019                               DEnd = AnonRecord->decls_end();
2020       D != DEnd; ++D) {
2021    if ((isa<FieldDecl>(*D) || isa<IndirectFieldDecl>(*D)) &&
2022        cast<NamedDecl>(*D)->getDeclName()) {
2023      ValueDecl *VD = cast<ValueDecl>(*D);
2024      if (CheckAnonMemberRedeclaration(SemaRef, S, Owner, VD->getDeclName(),
2025                                       VD->getLocation(), diagKind)) {
2026        // C++ [class.union]p2:
2027        //   The names of the members of an anonymous union shall be
2028        //   distinct from the names of any other entity in the
2029        //   scope in which the anonymous union is declared.
2030        Invalid = true;
2031      } else {
2032        // C++ [class.union]p2:
2033        //   For the purpose of name lookup, after the anonymous union
2034        //   definition, the members of the anonymous union are
2035        //   considered to have been defined in the scope in which the
2036        //   anonymous union is declared.
2037        unsigned OldChainingSize = Chaining.size();
2038        if (IndirectFieldDecl *IF = dyn_cast<IndirectFieldDecl>(VD))
2039          for (IndirectFieldDecl::chain_iterator PI = IF->chain_begin(),
2040               PE = IF->chain_end(); PI != PE; ++PI)
2041            Chaining.push_back(*PI);
2042        else
2043          Chaining.push_back(VD);
2044
2045        assert(Chaining.size() >= 2);
2046        NamedDecl **NamedChain =
2047          new (SemaRef.Context)NamedDecl*[Chaining.size()];
2048        for (unsigned i = 0; i < Chaining.size(); i++)
2049          NamedChain[i] = Chaining[i];
2050
2051        IndirectFieldDecl* IndirectField =
2052          IndirectFieldDecl::Create(SemaRef.Context, Owner, VD->getLocation(),
2053                                    VD->getIdentifier(), VD->getType(),
2054                                    NamedChain, Chaining.size());
2055
2056        IndirectField->setAccess(AS);
2057        IndirectField->setImplicit();
2058        SemaRef.PushOnScopeChains(IndirectField, S);
2059
2060        // That includes picking up the appropriate access specifier.
2061        if (AS != AS_none) IndirectField->setAccess(AS);
2062
2063        Chaining.resize(OldChainingSize);
2064      }
2065    }
2066  }
2067
2068  return Invalid;
2069}
2070
2071/// StorageClassSpecToVarDeclStorageClass - Maps a DeclSpec::SCS to
2072/// a VarDecl::StorageClass. Any error reporting is up to the caller:
2073/// illegal input values are mapped to SC_None.
2074static StorageClass
2075StorageClassSpecToVarDeclStorageClass(DeclSpec::SCS StorageClassSpec) {
2076  switch (StorageClassSpec) {
2077  case DeclSpec::SCS_unspecified:    return SC_None;
2078  case DeclSpec::SCS_extern:         return SC_Extern;
2079  case DeclSpec::SCS_static:         return SC_Static;
2080  case DeclSpec::SCS_auto:           return SC_Auto;
2081  case DeclSpec::SCS_register:       return SC_Register;
2082  case DeclSpec::SCS_private_extern: return SC_PrivateExtern;
2083    // Illegal SCSs map to None: error reporting is up to the caller.
2084  case DeclSpec::SCS_mutable:        // Fall through.
2085  case DeclSpec::SCS_typedef:        return SC_None;
2086  }
2087  llvm_unreachable("unknown storage class specifier");
2088}
2089
2090/// StorageClassSpecToFunctionDeclStorageClass - Maps a DeclSpec::SCS to
2091/// a StorageClass. Any error reporting is up to the caller:
2092/// illegal input values are mapped to SC_None.
2093static StorageClass
2094StorageClassSpecToFunctionDeclStorageClass(DeclSpec::SCS StorageClassSpec) {
2095  switch (StorageClassSpec) {
2096  case DeclSpec::SCS_unspecified:    return SC_None;
2097  case DeclSpec::SCS_extern:         return SC_Extern;
2098  case DeclSpec::SCS_static:         return SC_Static;
2099  case DeclSpec::SCS_private_extern: return SC_PrivateExtern;
2100    // Illegal SCSs map to None: error reporting is up to the caller.
2101  case DeclSpec::SCS_auto:           // Fall through.
2102  case DeclSpec::SCS_mutable:        // Fall through.
2103  case DeclSpec::SCS_register:       // Fall through.
2104  case DeclSpec::SCS_typedef:        return SC_None;
2105  }
2106  llvm_unreachable("unknown storage class specifier");
2107}
2108
2109/// BuildAnonymousStructOrUnion - Handle the declaration of an
2110/// anonymous structure or union. Anonymous unions are a C++ feature
2111/// (C++ [class.union]) and a GNU C extension; anonymous structures
2112/// are a GNU C and GNU C++ extension.
2113Decl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS,
2114                                             AccessSpecifier AS,
2115                                             RecordDecl *Record) {
2116  DeclContext *Owner = Record->getDeclContext();
2117
2118  // Diagnose whether this anonymous struct/union is an extension.
2119  if (Record->isUnion() && !getLangOptions().CPlusPlus)
2120    Diag(Record->getLocation(), diag::ext_anonymous_union);
2121  else if (!Record->isUnion())
2122    Diag(Record->getLocation(), diag::ext_anonymous_struct);
2123
2124  // C and C++ require different kinds of checks for anonymous
2125  // structs/unions.
2126  bool Invalid = false;
2127  if (getLangOptions().CPlusPlus) {
2128    const char* PrevSpec = 0;
2129    unsigned DiagID;
2130    // C++ [class.union]p3:
2131    //   Anonymous unions declared in a named namespace or in the
2132    //   global namespace shall be declared static.
2133    if (DS.getStorageClassSpec() != DeclSpec::SCS_static &&
2134        (isa<TranslationUnitDecl>(Owner) ||
2135         (isa<NamespaceDecl>(Owner) &&
2136          cast<NamespaceDecl>(Owner)->getDeclName()))) {
2137      Diag(Record->getLocation(), diag::err_anonymous_union_not_static);
2138      Invalid = true;
2139
2140      // Recover by adding 'static'.
2141      DS.SetStorageClassSpec(DeclSpec::SCS_static, SourceLocation(),
2142                             PrevSpec, DiagID, getLangOptions());
2143    }
2144    // C++ [class.union]p3:
2145    //   A storage class is not allowed in a declaration of an
2146    //   anonymous union in a class scope.
2147    else if (DS.getStorageClassSpec() != DeclSpec::SCS_unspecified &&
2148             isa<RecordDecl>(Owner)) {
2149      Diag(DS.getStorageClassSpecLoc(),
2150           diag::err_anonymous_union_with_storage_spec);
2151      Invalid = true;
2152
2153      // Recover by removing the storage specifier.
2154      DS.SetStorageClassSpec(DeclSpec::SCS_unspecified, SourceLocation(),
2155                             PrevSpec, DiagID, getLangOptions());
2156    }
2157
2158    // C++ [class.union]p2:
2159    //   The member-specification of an anonymous union shall only
2160    //   define non-static data members. [Note: nested types and
2161    //   functions cannot be declared within an anonymous union. ]
2162    for (DeclContext::decl_iterator Mem = Record->decls_begin(),
2163                                 MemEnd = Record->decls_end();
2164         Mem != MemEnd; ++Mem) {
2165      if (FieldDecl *FD = dyn_cast<FieldDecl>(*Mem)) {
2166        // C++ [class.union]p3:
2167        //   An anonymous union shall not have private or protected
2168        //   members (clause 11).
2169        assert(FD->getAccess() != AS_none);
2170        if (FD->getAccess() != AS_public) {
2171          Diag(FD->getLocation(), diag::err_anonymous_record_nonpublic_member)
2172            << (int)Record->isUnion() << (int)(FD->getAccess() == AS_protected);
2173          Invalid = true;
2174        }
2175
2176        if (CheckNontrivialField(FD))
2177          Invalid = true;
2178      } else if ((*Mem)->isImplicit()) {
2179        // Any implicit members are fine.
2180      } else if (isa<TagDecl>(*Mem) && (*Mem)->getDeclContext() != Record) {
2181        // This is a type that showed up in an
2182        // elaborated-type-specifier inside the anonymous struct or
2183        // union, but which actually declares a type outside of the
2184        // anonymous struct or union. It's okay.
2185      } else if (RecordDecl *MemRecord = dyn_cast<RecordDecl>(*Mem)) {
2186        if (!MemRecord->isAnonymousStructOrUnion() &&
2187            MemRecord->getDeclName()) {
2188          // Visual C++ allows type definition in anonymous struct or union.
2189          if (getLangOptions().Microsoft)
2190            Diag(MemRecord->getLocation(), diag::ext_anonymous_record_with_type)
2191              << (int)Record->isUnion();
2192          else {
2193            // This is a nested type declaration.
2194            Diag(MemRecord->getLocation(), diag::err_anonymous_record_with_type)
2195              << (int)Record->isUnion();
2196            Invalid = true;
2197          }
2198        }
2199      } else if (isa<AccessSpecDecl>(*Mem)) {
2200        // Any access specifier is fine.
2201      } else {
2202        // We have something that isn't a non-static data
2203        // member. Complain about it.
2204        unsigned DK = diag::err_anonymous_record_bad_member;
2205        if (isa<TypeDecl>(*Mem))
2206          DK = diag::err_anonymous_record_with_type;
2207        else if (isa<FunctionDecl>(*Mem))
2208          DK = diag::err_anonymous_record_with_function;
2209        else if (isa<VarDecl>(*Mem))
2210          DK = diag::err_anonymous_record_with_static;
2211
2212        // Visual C++ allows type definition in anonymous struct or union.
2213        if (getLangOptions().Microsoft &&
2214            DK == diag::err_anonymous_record_with_type)
2215          Diag((*Mem)->getLocation(), diag::ext_anonymous_record_with_type)
2216            << (int)Record->isUnion();
2217        else {
2218          Diag((*Mem)->getLocation(), DK)
2219              << (int)Record->isUnion();
2220          Invalid = true;
2221        }
2222      }
2223    }
2224  }
2225
2226  if (!Record->isUnion() && !Owner->isRecord()) {
2227    Diag(Record->getLocation(), diag::err_anonymous_struct_not_member)
2228      << (int)getLangOptions().CPlusPlus;
2229    Invalid = true;
2230  }
2231
2232  // Mock up a declarator.
2233  Declarator Dc(DS, Declarator::TypeNameContext);
2234  TypeSourceInfo *TInfo = GetTypeForDeclarator(Dc, S);
2235  assert(TInfo && "couldn't build declarator info for anonymous struct/union");
2236
2237  // Create a declaration for this anonymous struct/union.
2238  NamedDecl *Anon = 0;
2239  if (RecordDecl *OwningClass = dyn_cast<RecordDecl>(Owner)) {
2240    Anon = FieldDecl::Create(Context, OwningClass,
2241                             DS.getSourceRange().getBegin(),
2242                             Record->getLocation(),
2243                             /*IdentifierInfo=*/0,
2244                             Context.getTypeDeclType(Record),
2245                             TInfo,
2246                             /*BitWidth=*/0, /*Mutable=*/false);
2247    Anon->setAccess(AS);
2248    if (getLangOptions().CPlusPlus)
2249      FieldCollector->Add(cast<FieldDecl>(Anon));
2250  } else {
2251    DeclSpec::SCS SCSpec = DS.getStorageClassSpec();
2252    assert(SCSpec != DeclSpec::SCS_typedef &&
2253           "Parser allowed 'typedef' as storage class VarDecl.");
2254    VarDecl::StorageClass SC = StorageClassSpecToVarDeclStorageClass(SCSpec);
2255    if (SCSpec == DeclSpec::SCS_mutable) {
2256      // mutable can only appear on non-static class members, so it's always
2257      // an error here
2258      Diag(Record->getLocation(), diag::err_mutable_nonmember);
2259      Invalid = true;
2260      SC = SC_None;
2261    }
2262    SCSpec = DS.getStorageClassSpecAsWritten();
2263    VarDecl::StorageClass SCAsWritten
2264      = StorageClassSpecToVarDeclStorageClass(SCSpec);
2265
2266    Anon = VarDecl::Create(Context, Owner,
2267                           DS.getSourceRange().getBegin(),
2268                           Record->getLocation(), /*IdentifierInfo=*/0,
2269                           Context.getTypeDeclType(Record),
2270                           TInfo, SC, SCAsWritten);
2271  }
2272  Anon->setImplicit();
2273
2274  // Add the anonymous struct/union object to the current
2275  // context. We'll be referencing this object when we refer to one of
2276  // its members.
2277  Owner->addDecl(Anon);
2278
2279  // Inject the members of the anonymous struct/union into the owning
2280  // context and into the identifier resolver chain for name lookup
2281  // purposes.
2282  llvm::SmallVector<NamedDecl*, 2> Chain;
2283  Chain.push_back(Anon);
2284
2285  if (InjectAnonymousStructOrUnionMembers(*this, S, Owner, Record, AS,
2286                                          Chain, false))
2287    Invalid = true;
2288
2289  // Mark this as an anonymous struct/union type. Note that we do not
2290  // do this until after we have already checked and injected the
2291  // members of this anonymous struct/union type, because otherwise
2292  // the members could be injected twice: once by DeclContext when it
2293  // builds its lookup table, and once by
2294  // InjectAnonymousStructOrUnionMembers.
2295  Record->setAnonymousStructOrUnion(true);
2296
2297  if (Invalid)
2298    Anon->setInvalidDecl();
2299
2300  return Anon;
2301}
2302
2303/// BuildMicrosoftCAnonymousStruct - Handle the declaration of an
2304/// Microsoft C anonymous structure.
2305/// Ref: http://msdn.microsoft.com/en-us/library/z2cx9y4f.aspx
2306/// Example:
2307///
2308/// struct A { int a; };
2309/// struct B { struct A; int b; };
2310///
2311/// void foo() {
2312///   B var;
2313///   var.a = 3;
2314/// }
2315///
2316Decl *Sema::BuildMicrosoftCAnonymousStruct(Scope *S, DeclSpec &DS,
2317                                           RecordDecl *Record) {
2318
2319  // If there is no Record, get the record via the typedef.
2320  if (!Record)
2321    Record = DS.getRepAsType().get()->getAsStructureType()->getDecl();
2322
2323  // Mock up a declarator.
2324  Declarator Dc(DS, Declarator::TypeNameContext);
2325  TypeSourceInfo *TInfo = GetTypeForDeclarator(Dc, S);
2326  assert(TInfo && "couldn't build declarator info for anonymous struct");
2327
2328  // Create a declaration for this anonymous struct.
2329  NamedDecl* Anon = FieldDecl::Create(Context,
2330                             cast<RecordDecl>(CurContext),
2331                             DS.getSourceRange().getBegin(),
2332                             DS.getSourceRange().getBegin(),
2333                             /*IdentifierInfo=*/0,
2334                             Context.getTypeDeclType(Record),
2335                             TInfo,
2336                             /*BitWidth=*/0, /*Mutable=*/false);
2337  Anon->setImplicit();
2338
2339  // Add the anonymous struct object to the current context.
2340  CurContext->addDecl(Anon);
2341
2342  // Inject the members of the anonymous struct into the current
2343  // context and into the identifier resolver chain for name lookup
2344  // purposes.
2345  llvm::SmallVector<NamedDecl*, 2> Chain;
2346  Chain.push_back(Anon);
2347
2348  if (InjectAnonymousStructOrUnionMembers(*this, S, CurContext,
2349                                          Record->getDefinition(),
2350                                          AS_none, Chain, true))
2351    Anon->setInvalidDecl();
2352
2353  return Anon;
2354}
2355
2356/// GetNameForDeclarator - Determine the full declaration name for the
2357/// given Declarator.
2358DeclarationNameInfo Sema::GetNameForDeclarator(Declarator &D) {
2359  return GetNameFromUnqualifiedId(D.getName());
2360}
2361
2362/// \brief Retrieves the declaration name from a parsed unqualified-id.
2363DeclarationNameInfo
2364Sema::GetNameFromUnqualifiedId(const UnqualifiedId &Name) {
2365  DeclarationNameInfo NameInfo;
2366  NameInfo.setLoc(Name.StartLocation);
2367
2368  switch (Name.getKind()) {
2369
2370  case UnqualifiedId::IK_Identifier:
2371    NameInfo.setName(Name.Identifier);
2372    NameInfo.setLoc(Name.StartLocation);
2373    return NameInfo;
2374
2375  case UnqualifiedId::IK_OperatorFunctionId:
2376    NameInfo.setName(Context.DeclarationNames.getCXXOperatorName(
2377                                           Name.OperatorFunctionId.Operator));
2378    NameInfo.setLoc(Name.StartLocation);
2379    NameInfo.getInfo().CXXOperatorName.BeginOpNameLoc
2380      = Name.OperatorFunctionId.SymbolLocations[0];
2381    NameInfo.getInfo().CXXOperatorName.EndOpNameLoc
2382      = Name.EndLocation.getRawEncoding();
2383    return NameInfo;
2384
2385  case UnqualifiedId::IK_LiteralOperatorId:
2386    NameInfo.setName(Context.DeclarationNames.getCXXLiteralOperatorName(
2387                                                           Name.Identifier));
2388    NameInfo.setLoc(Name.StartLocation);
2389    NameInfo.setCXXLiteralOperatorNameLoc(Name.EndLocation);
2390    return NameInfo;
2391
2392  case UnqualifiedId::IK_ConversionFunctionId: {
2393    TypeSourceInfo *TInfo;
2394    QualType Ty = GetTypeFromParser(Name.ConversionFunctionId, &TInfo);
2395    if (Ty.isNull())
2396      return DeclarationNameInfo();
2397    NameInfo.setName(Context.DeclarationNames.getCXXConversionFunctionName(
2398                                               Context.getCanonicalType(Ty)));
2399    NameInfo.setLoc(Name.StartLocation);
2400    NameInfo.setNamedTypeInfo(TInfo);
2401    return NameInfo;
2402  }
2403
2404  case UnqualifiedId::IK_ConstructorName: {
2405    TypeSourceInfo *TInfo;
2406    QualType Ty = GetTypeFromParser(Name.ConstructorName, &TInfo);
2407    if (Ty.isNull())
2408      return DeclarationNameInfo();
2409    NameInfo.setName(Context.DeclarationNames.getCXXConstructorName(
2410                                              Context.getCanonicalType(Ty)));
2411    NameInfo.setLoc(Name.StartLocation);
2412    NameInfo.setNamedTypeInfo(TInfo);
2413    return NameInfo;
2414  }
2415
2416  case UnqualifiedId::IK_ConstructorTemplateId: {
2417    // In well-formed code, we can only have a constructor
2418    // template-id that refers to the current context, so go there
2419    // to find the actual type being constructed.
2420    CXXRecordDecl *CurClass = dyn_cast<CXXRecordDecl>(CurContext);
2421    if (!CurClass || CurClass->getIdentifier() != Name.TemplateId->Name)
2422      return DeclarationNameInfo();
2423
2424    // Determine the type of the class being constructed.
2425    QualType CurClassType = Context.getTypeDeclType(CurClass);
2426
2427    // FIXME: Check two things: that the template-id names the same type as
2428    // CurClassType, and that the template-id does not occur when the name
2429    // was qualified.
2430
2431    NameInfo.setName(Context.DeclarationNames.getCXXConstructorName(
2432                                    Context.getCanonicalType(CurClassType)));
2433    NameInfo.setLoc(Name.StartLocation);
2434    // FIXME: should we retrieve TypeSourceInfo?
2435    NameInfo.setNamedTypeInfo(0);
2436    return NameInfo;
2437  }
2438
2439  case UnqualifiedId::IK_DestructorName: {
2440    TypeSourceInfo *TInfo;
2441    QualType Ty = GetTypeFromParser(Name.DestructorName, &TInfo);
2442    if (Ty.isNull())
2443      return DeclarationNameInfo();
2444    NameInfo.setName(Context.DeclarationNames.getCXXDestructorName(
2445                                              Context.getCanonicalType(Ty)));
2446    NameInfo.setLoc(Name.StartLocation);
2447    NameInfo.setNamedTypeInfo(TInfo);
2448    return NameInfo;
2449  }
2450
2451  case UnqualifiedId::IK_TemplateId: {
2452    TemplateName TName = Name.TemplateId->Template.get();
2453    SourceLocation TNameLoc = Name.TemplateId->TemplateNameLoc;
2454    return Context.getNameForTemplate(TName, TNameLoc);
2455  }
2456
2457  } // switch (Name.getKind())
2458
2459  assert(false && "Unknown name kind");
2460  return DeclarationNameInfo();
2461}
2462
2463/// isNearlyMatchingFunction - Determine whether the C++ functions
2464/// Declaration and Definition are "nearly" matching. This heuristic
2465/// is used to improve diagnostics in the case where an out-of-line
2466/// function definition doesn't match any declaration within
2467/// the class or namespace.
2468static bool isNearlyMatchingFunction(ASTContext &Context,
2469                                     FunctionDecl *Declaration,
2470                                     FunctionDecl *Definition) {
2471  if (Declaration->param_size() != Definition->param_size())
2472    return false;
2473  for (unsigned Idx = 0; Idx < Declaration->param_size(); ++Idx) {
2474    QualType DeclParamTy = Declaration->getParamDecl(Idx)->getType();
2475    QualType DefParamTy = Definition->getParamDecl(Idx)->getType();
2476
2477    if (!Context.hasSameUnqualifiedType(DeclParamTy.getNonReferenceType(),
2478                                        DefParamTy.getNonReferenceType()))
2479      return false;
2480  }
2481
2482  return true;
2483}
2484
2485/// NeedsRebuildingInCurrentInstantiation - Checks whether the given
2486/// declarator needs to be rebuilt in the current instantiation.
2487/// Any bits of declarator which appear before the name are valid for
2488/// consideration here.  That's specifically the type in the decl spec
2489/// and the base type in any member-pointer chunks.
2490static bool RebuildDeclaratorInCurrentInstantiation(Sema &S, Declarator &D,
2491                                                    DeclarationName Name) {
2492  // The types we specifically need to rebuild are:
2493  //   - typenames, typeofs, and decltypes
2494  //   - types which will become injected class names
2495  // Of course, we also need to rebuild any type referencing such a
2496  // type.  It's safest to just say "dependent", but we call out a
2497  // few cases here.
2498
2499  DeclSpec &DS = D.getMutableDeclSpec();
2500  switch (DS.getTypeSpecType()) {
2501  case DeclSpec::TST_typename:
2502  case DeclSpec::TST_typeofType:
2503  case DeclSpec::TST_decltype: {
2504    // Grab the type from the parser.
2505    TypeSourceInfo *TSI = 0;
2506    QualType T = S.GetTypeFromParser(DS.getRepAsType(), &TSI);
2507    if (T.isNull() || !T->isDependentType()) break;
2508
2509    // Make sure there's a type source info.  This isn't really much
2510    // of a waste; most dependent types should have type source info
2511    // attached already.
2512    if (!TSI)
2513      TSI = S.Context.getTrivialTypeSourceInfo(T, DS.getTypeSpecTypeLoc());
2514
2515    // Rebuild the type in the current instantiation.
2516    TSI = S.RebuildTypeInCurrentInstantiation(TSI, D.getIdentifierLoc(), Name);
2517    if (!TSI) return true;
2518
2519    // Store the new type back in the decl spec.
2520    ParsedType LocType = S.CreateParsedType(TSI->getType(), TSI);
2521    DS.UpdateTypeRep(LocType);
2522    break;
2523  }
2524
2525  case DeclSpec::TST_typeofExpr: {
2526    Expr *E = DS.getRepAsExpr();
2527    ExprResult Result = S.RebuildExprInCurrentInstantiation(E);
2528    if (Result.isInvalid()) return true;
2529    DS.UpdateExprRep(Result.get());
2530    break;
2531  }
2532
2533  default:
2534    // Nothing to do for these decl specs.
2535    break;
2536  }
2537
2538  // It doesn't matter what order we do this in.
2539  for (unsigned I = 0, E = D.getNumTypeObjects(); I != E; ++I) {
2540    DeclaratorChunk &Chunk = D.getTypeObject(I);
2541
2542    // The only type information in the declarator which can come
2543    // before the declaration name is the base type of a member
2544    // pointer.
2545    if (Chunk.Kind != DeclaratorChunk::MemberPointer)
2546      continue;
2547
2548    // Rebuild the scope specifier in-place.
2549    CXXScopeSpec &SS = Chunk.Mem.Scope();
2550    if (S.RebuildNestedNameSpecifierInCurrentInstantiation(SS))
2551      return true;
2552  }
2553
2554  return false;
2555}
2556
2557Decl *Sema::ActOnDeclarator(Scope *S, Declarator &D) {
2558  return HandleDeclarator(S, D, MultiTemplateParamsArg(*this), false);
2559}
2560
2561/// DiagnoseClassNameShadow - Implement C++ [class.mem]p13:
2562///   If T is the name of a class, then each of the following shall have a
2563///   name different from T:
2564///     - every static data member of class T;
2565///     - every member function of class T
2566///     - every member of class T that is itself a type;
2567/// \returns true if the declaration name violates these rules.
2568bool Sema::DiagnoseClassNameShadow(DeclContext *DC,
2569                                   DeclarationNameInfo NameInfo) {
2570  DeclarationName Name = NameInfo.getName();
2571
2572  if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(DC))
2573    if (Record->getIdentifier() && Record->getDeclName() == Name) {
2574      Diag(NameInfo.getLoc(), diag::err_member_name_of_class) << Name;
2575      return true;
2576    }
2577
2578  return false;
2579}
2580
2581Decl *Sema::HandleDeclarator(Scope *S, Declarator &D,
2582                             MultiTemplateParamsArg TemplateParamLists,
2583                             bool IsFunctionDefinition) {
2584  // TODO: consider using NameInfo for diagnostic.
2585  DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
2586  DeclarationName Name = NameInfo.getName();
2587
2588  // All of these full declarators require an identifier.  If it doesn't have
2589  // one, the ParsedFreeStandingDeclSpec action should be used.
2590  if (!Name) {
2591    if (!D.isInvalidType())  // Reject this if we think it is valid.
2592      Diag(D.getDeclSpec().getSourceRange().getBegin(),
2593           diag::err_declarator_need_ident)
2594        << D.getDeclSpec().getSourceRange() << D.getSourceRange();
2595    return 0;
2596  } else if (DiagnoseUnexpandedParameterPack(NameInfo, UPPC_DeclarationType))
2597    return 0;
2598
2599  // The scope passed in may not be a decl scope.  Zip up the scope tree until
2600  // we find one that is.
2601  while ((S->getFlags() & Scope::DeclScope) == 0 ||
2602         (S->getFlags() & Scope::TemplateParamScope) != 0)
2603    S = S->getParent();
2604
2605  DeclContext *DC = CurContext;
2606  if (D.getCXXScopeSpec().isInvalid())
2607    D.setInvalidType();
2608  else if (D.getCXXScopeSpec().isSet()) {
2609    if (DiagnoseUnexpandedParameterPack(D.getCXXScopeSpec(),
2610                                        UPPC_DeclarationQualifier))
2611      return 0;
2612
2613    bool EnteringContext = !D.getDeclSpec().isFriendSpecified();
2614    DC = computeDeclContext(D.getCXXScopeSpec(), EnteringContext);
2615    if (!DC) {
2616      // If we could not compute the declaration context, it's because the
2617      // declaration context is dependent but does not refer to a class,
2618      // class template, or class template partial specialization. Complain
2619      // and return early, to avoid the coming semantic disaster.
2620      Diag(D.getIdentifierLoc(),
2621           diag::err_template_qualified_declarator_no_match)
2622        << (NestedNameSpecifier*)D.getCXXScopeSpec().getScopeRep()
2623        << D.getCXXScopeSpec().getRange();
2624      return 0;
2625    }
2626
2627    bool IsDependentContext = DC->isDependentContext();
2628
2629    if (!IsDependentContext &&
2630        RequireCompleteDeclContext(D.getCXXScopeSpec(), DC))
2631      return 0;
2632
2633    if (isa<CXXRecordDecl>(DC)) {
2634      if (!cast<CXXRecordDecl>(DC)->hasDefinition()) {
2635        Diag(D.getIdentifierLoc(),
2636             diag::err_member_def_undefined_record)
2637          << Name << DC << D.getCXXScopeSpec().getRange();
2638        D.setInvalidType();
2639      } else if (isa<CXXRecordDecl>(CurContext) &&
2640                 !D.getDeclSpec().isFriendSpecified()) {
2641        // The user provided a superfluous scope specifier inside a class
2642        // definition:
2643        //
2644        // class X {
2645        //   void X::f();
2646        // };
2647        if (CurContext->Equals(DC))
2648          Diag(D.getIdentifierLoc(), diag::warn_member_extra_qualification)
2649            << Name << FixItHint::CreateRemoval(D.getCXXScopeSpec().getRange());
2650        else
2651          Diag(D.getIdentifierLoc(), diag::err_member_qualification)
2652            << Name << D.getCXXScopeSpec().getRange();
2653
2654        // Pretend that this qualifier was not here.
2655        D.getCXXScopeSpec().clear();
2656      }
2657    }
2658
2659    // Check whether we need to rebuild the type of the given
2660    // declaration in the current instantiation.
2661    if (EnteringContext && IsDependentContext &&
2662        TemplateParamLists.size() != 0) {
2663      ContextRAII SavedContext(*this, DC);
2664      if (RebuildDeclaratorInCurrentInstantiation(*this, D, Name))
2665        D.setInvalidType();
2666    }
2667  }
2668
2669  if (DiagnoseClassNameShadow(DC, NameInfo))
2670    // If this is a typedef, we'll end up spewing multiple diagnostics.
2671    // Just return early; it's safer.
2672    if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef)
2673      return 0;
2674
2675  NamedDecl *New;
2676
2677  TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
2678  QualType R = TInfo->getType();
2679
2680  if (DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo,
2681                                      UPPC_DeclarationType))
2682    D.setInvalidType();
2683
2684  LookupResult Previous(*this, NameInfo, LookupOrdinaryName,
2685                        ForRedeclaration);
2686
2687  // See if this is a redefinition of a variable in the same scope.
2688  if (!D.getCXXScopeSpec().isSet()) {
2689    bool IsLinkageLookup = false;
2690
2691    // If the declaration we're planning to build will be a function
2692    // or object with linkage, then look for another declaration with
2693    // linkage (C99 6.2.2p4-5 and C++ [basic.link]p6).
2694    if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef)
2695      /* Do nothing*/;
2696    else if (R->isFunctionType()) {
2697      if (CurContext->isFunctionOrMethod() ||
2698          D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_static)
2699        IsLinkageLookup = true;
2700    } else if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_extern)
2701      IsLinkageLookup = true;
2702    else if (CurContext->getRedeclContext()->isTranslationUnit() &&
2703             D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_static)
2704      IsLinkageLookup = true;
2705
2706    if (IsLinkageLookup)
2707      Previous.clear(LookupRedeclarationWithLinkage);
2708
2709    LookupName(Previous, S, /* CreateBuiltins = */ IsLinkageLookup);
2710  } else { // Something like "int foo::x;"
2711    LookupQualifiedName(Previous, DC);
2712
2713    // Don't consider using declarations as previous declarations for
2714    // out-of-line members.
2715    RemoveUsingDecls(Previous);
2716
2717    // C++ 7.3.1.2p2:
2718    // Members (including explicit specializations of templates) of a named
2719    // namespace can also be defined outside that namespace by explicit
2720    // qualification of the name being defined, provided that the entity being
2721    // defined was already declared in the namespace and the definition appears
2722    // after the point of declaration in a namespace that encloses the
2723    // declarations namespace.
2724    //
2725    // Note that we only check the context at this point. We don't yet
2726    // have enough information to make sure that PrevDecl is actually
2727    // the declaration we want to match. For example, given:
2728    //
2729    //   class X {
2730    //     void f();
2731    //     void f(float);
2732    //   };
2733    //
2734    //   void X::f(int) { } // ill-formed
2735    //
2736    // In this case, PrevDecl will point to the overload set
2737    // containing the two f's declared in X, but neither of them
2738    // matches.
2739
2740    // First check whether we named the global scope.
2741    if (isa<TranslationUnitDecl>(DC)) {
2742      Diag(D.getIdentifierLoc(), diag::err_invalid_declarator_global_scope)
2743        << Name << D.getCXXScopeSpec().getRange();
2744    } else {
2745      DeclContext *Cur = CurContext;
2746      while (isa<LinkageSpecDecl>(Cur))
2747        Cur = Cur->getParent();
2748      if (!Cur->Encloses(DC)) {
2749        // The qualifying scope doesn't enclose the original declaration.
2750        // Emit diagnostic based on current scope.
2751        SourceLocation L = D.getIdentifierLoc();
2752        SourceRange R = D.getCXXScopeSpec().getRange();
2753        if (isa<FunctionDecl>(Cur))
2754          Diag(L, diag::err_invalid_declarator_in_function) << Name << R;
2755        else
2756          Diag(L, diag::err_invalid_declarator_scope)
2757            << Name << cast<NamedDecl>(DC) << R;
2758        D.setInvalidType();
2759      }
2760    }
2761  }
2762
2763  if (Previous.isSingleResult() &&
2764      Previous.getFoundDecl()->isTemplateParameter()) {
2765    // Maybe we will complain about the shadowed template parameter.
2766    if (!D.isInvalidType())
2767      if (DiagnoseTemplateParameterShadow(D.getIdentifierLoc(),
2768                                          Previous.getFoundDecl()))
2769        D.setInvalidType();
2770
2771    // Just pretend that we didn't see the previous declaration.
2772    Previous.clear();
2773  }
2774
2775  // In C++, the previous declaration we find might be a tag type
2776  // (class or enum). In this case, the new declaration will hide the
2777  // tag type. Note that this does does not apply if we're declaring a
2778  // typedef (C++ [dcl.typedef]p4).
2779  if (Previous.isSingleTagDecl() &&
2780      D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_typedef)
2781    Previous.clear();
2782
2783  bool Redeclaration = false;
2784  if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef) {
2785    if (TemplateParamLists.size()) {
2786      Diag(D.getIdentifierLoc(), diag::err_template_typedef);
2787      return 0;
2788    }
2789
2790    New = ActOnTypedefDeclarator(S, D, DC, R, TInfo, Previous, Redeclaration);
2791  } else if (R->isFunctionType()) {
2792    New = ActOnFunctionDeclarator(S, D, DC, R, TInfo, Previous,
2793                                  move(TemplateParamLists),
2794                                  IsFunctionDefinition, Redeclaration);
2795  } else {
2796    New = ActOnVariableDeclarator(S, D, DC, R, TInfo, Previous,
2797                                  move(TemplateParamLists),
2798                                  Redeclaration);
2799  }
2800
2801  if (New == 0)
2802    return 0;
2803
2804  // If this has an identifier and is not an invalid redeclaration or
2805  // function template specialization, add it to the scope stack.
2806  if (New->getDeclName() && !(Redeclaration && New->isInvalidDecl()))
2807    PushOnScopeChains(New, S);
2808
2809  return New;
2810}
2811
2812/// TryToFixInvalidVariablyModifiedType - Helper method to turn variable array
2813/// types into constant array types in certain situations which would otherwise
2814/// be errors (for GCC compatibility).
2815static QualType TryToFixInvalidVariablyModifiedType(QualType T,
2816                                                    ASTContext &Context,
2817                                                    bool &SizeIsNegative,
2818                                                    llvm::APSInt &Oversized) {
2819  // This method tries to turn a variable array into a constant
2820  // array even when the size isn't an ICE.  This is necessary
2821  // for compatibility with code that depends on gcc's buggy
2822  // constant expression folding, like struct {char x[(int)(char*)2];}
2823  SizeIsNegative = false;
2824  Oversized = 0;
2825
2826  if (T->isDependentType())
2827    return QualType();
2828
2829  QualifierCollector Qs;
2830  const Type *Ty = Qs.strip(T);
2831
2832  if (const PointerType* PTy = dyn_cast<PointerType>(Ty)) {
2833    QualType Pointee = PTy->getPointeeType();
2834    QualType FixedType =
2835        TryToFixInvalidVariablyModifiedType(Pointee, Context, SizeIsNegative,
2836                                            Oversized);
2837    if (FixedType.isNull()) return FixedType;
2838    FixedType = Context.getPointerType(FixedType);
2839    return Qs.apply(Context, FixedType);
2840  }
2841  if (const ParenType* PTy = dyn_cast<ParenType>(Ty)) {
2842    QualType Inner = PTy->getInnerType();
2843    QualType FixedType =
2844        TryToFixInvalidVariablyModifiedType(Inner, Context, SizeIsNegative,
2845                                            Oversized);
2846    if (FixedType.isNull()) return FixedType;
2847    FixedType = Context.getParenType(FixedType);
2848    return Qs.apply(Context, FixedType);
2849  }
2850
2851  const VariableArrayType* VLATy = dyn_cast<VariableArrayType>(T);
2852  if (!VLATy)
2853    return QualType();
2854  // FIXME: We should probably handle this case
2855  if (VLATy->getElementType()->isVariablyModifiedType())
2856    return QualType();
2857
2858  Expr::EvalResult EvalResult;
2859  if (!VLATy->getSizeExpr() ||
2860      !VLATy->getSizeExpr()->Evaluate(EvalResult, Context) ||
2861      !EvalResult.Val.isInt())
2862    return QualType();
2863
2864  // Check whether the array size is negative.
2865  llvm::APSInt &Res = EvalResult.Val.getInt();
2866  if (Res.isSigned() && Res.isNegative()) {
2867    SizeIsNegative = true;
2868    return QualType();
2869  }
2870
2871  // Check whether the array is too large to be addressed.
2872  unsigned ActiveSizeBits
2873    = ConstantArrayType::getNumAddressingBits(Context, VLATy->getElementType(),
2874                                              Res);
2875  if (ActiveSizeBits > ConstantArrayType::getMaxSizeBits(Context)) {
2876    Oversized = Res;
2877    return QualType();
2878  }
2879
2880  return Context.getConstantArrayType(VLATy->getElementType(),
2881                                      Res, ArrayType::Normal, 0);
2882}
2883
2884/// \brief Register the given locally-scoped external C declaration so
2885/// that it can be found later for redeclarations
2886void
2887Sema::RegisterLocallyScopedExternCDecl(NamedDecl *ND,
2888                                       const LookupResult &Previous,
2889                                       Scope *S) {
2890  assert(ND->getLexicalDeclContext()->isFunctionOrMethod() &&
2891         "Decl is not a locally-scoped decl!");
2892  // Note that we have a locally-scoped external with this name.
2893  LocallyScopedExternalDecls[ND->getDeclName()] = ND;
2894
2895  if (!Previous.isSingleResult())
2896    return;
2897
2898  NamedDecl *PrevDecl = Previous.getFoundDecl();
2899
2900  // If there was a previous declaration of this variable, it may be
2901  // in our identifier chain. Update the identifier chain with the new
2902  // declaration.
2903  if (S && IdResolver.ReplaceDecl(PrevDecl, ND)) {
2904    // The previous declaration was found on the identifer resolver
2905    // chain, so remove it from its scope.
2906    while (S && !S->isDeclScope(PrevDecl))
2907      S = S->getParent();
2908
2909    if (S)
2910      S->RemoveDecl(PrevDecl);
2911  }
2912}
2913
2914/// \brief Diagnose function specifiers on a declaration of an identifier that
2915/// does not identify a function.
2916void Sema::DiagnoseFunctionSpecifiers(Declarator& D) {
2917  // FIXME: We should probably indicate the identifier in question to avoid
2918  // confusion for constructs like "inline int a(), b;"
2919  if (D.getDeclSpec().isInlineSpecified())
2920    Diag(D.getDeclSpec().getInlineSpecLoc(),
2921         diag::err_inline_non_function);
2922
2923  if (D.getDeclSpec().isVirtualSpecified())
2924    Diag(D.getDeclSpec().getVirtualSpecLoc(),
2925         diag::err_virtual_non_function);
2926
2927  if (D.getDeclSpec().isExplicitSpecified())
2928    Diag(D.getDeclSpec().getExplicitSpecLoc(),
2929         diag::err_explicit_non_function);
2930}
2931
2932NamedDecl*
2933Sema::ActOnTypedefDeclarator(Scope* S, Declarator& D, DeclContext* DC,
2934                             QualType R,  TypeSourceInfo *TInfo,
2935                             LookupResult &Previous, bool &Redeclaration) {
2936  // Typedef declarators cannot be qualified (C++ [dcl.meaning]p1).
2937  if (D.getCXXScopeSpec().isSet()) {
2938    Diag(D.getIdentifierLoc(), diag::err_qualified_typedef_declarator)
2939      << D.getCXXScopeSpec().getRange();
2940    D.setInvalidType();
2941    // Pretend we didn't see the scope specifier.
2942    DC = CurContext;
2943    Previous.clear();
2944  }
2945
2946  if (getLangOptions().CPlusPlus) {
2947    // Check that there are no default arguments (C++ only).
2948    CheckExtraCXXDefaultArguments(D);
2949  }
2950
2951  DiagnoseFunctionSpecifiers(D);
2952
2953  if (D.getDeclSpec().isThreadSpecified())
2954    Diag(D.getDeclSpec().getThreadSpecLoc(), diag::err_invalid_thread);
2955
2956  if (D.getName().Kind != UnqualifiedId::IK_Identifier) {
2957    Diag(D.getName().StartLocation, diag::err_typedef_not_identifier)
2958      << D.getName().getSourceRange();
2959    return 0;
2960  }
2961
2962  TypedefDecl *NewTD = ParseTypedefDecl(S, D, R, TInfo);
2963  if (!NewTD) return 0;
2964
2965  // Handle attributes prior to checking for duplicates in MergeVarDecl
2966  ProcessDeclAttributes(S, NewTD, D);
2967
2968  return ActOnTypedefNameDecl(S, DC, NewTD, Previous, Redeclaration);
2969}
2970
2971/// ActOnTypedefNameDecl - Perform semantic checking for a declaration which
2972/// declares a typedef-name, either using the 'typedef' type specifier or via
2973/// a C++0x [dcl.typedef]p2 alias-declaration: 'using T = A;'.
2974NamedDecl*
2975Sema::ActOnTypedefNameDecl(Scope *S, DeclContext *DC, TypedefNameDecl *NewTD,
2976                           LookupResult &Previous, bool &Redeclaration) {
2977  // C99 6.7.7p2: If a typedef name specifies a variably modified type
2978  // then it shall have block scope.
2979  // Note that variably modified types must be fixed before merging the decl so
2980  // that redeclarations will match.
2981  QualType T = NewTD->getUnderlyingType();
2982  if (T->isVariablyModifiedType()) {
2983    getCurFunction()->setHasBranchProtectedScope();
2984
2985    if (S->getFnParent() == 0) {
2986      bool SizeIsNegative;
2987      llvm::APSInt Oversized;
2988      QualType FixedTy =
2989          TryToFixInvalidVariablyModifiedType(T, Context, SizeIsNegative,
2990                                              Oversized);
2991      if (!FixedTy.isNull()) {
2992        Diag(NewTD->getLocation(), diag::warn_illegal_constant_array_size);
2993        NewTD->setTypeSourceInfo(Context.getTrivialTypeSourceInfo(FixedTy));
2994      } else {
2995        if (SizeIsNegative)
2996          Diag(NewTD->getLocation(), diag::err_typecheck_negative_array_size);
2997        else if (T->isVariableArrayType())
2998          Diag(NewTD->getLocation(), diag::err_vla_decl_in_file_scope);
2999        else if (Oversized.getBoolValue())
3000          Diag(NewTD->getLocation(), diag::err_array_too_large) << Oversized.toString(10);
3001        else
3002          Diag(NewTD->getLocation(), diag::err_vm_decl_in_file_scope);
3003        NewTD->setInvalidDecl();
3004      }
3005    }
3006  }
3007
3008  // Merge the decl with the existing one if appropriate. If the decl is
3009  // in an outer scope, it isn't the same thing.
3010  FilterLookupForScope(*this, Previous, DC, S, /*ConsiderLinkage*/ false,
3011                       /*ExplicitInstantiationOrSpecialization=*/false);
3012  if (!Previous.empty()) {
3013    Redeclaration = true;
3014    MergeTypedefNameDecl(NewTD, Previous);
3015  }
3016
3017  // If this is the C FILE type, notify the AST context.
3018  if (IdentifierInfo *II = NewTD->getIdentifier())
3019    if (!NewTD->isInvalidDecl() &&
3020        NewTD->getDeclContext()->getRedeclContext()->isTranslationUnit()) {
3021      if (II->isStr("FILE"))
3022        Context.setFILEDecl(NewTD);
3023      else if (II->isStr("jmp_buf"))
3024        Context.setjmp_bufDecl(NewTD);
3025      else if (II->isStr("sigjmp_buf"))
3026        Context.setsigjmp_bufDecl(NewTD);
3027      else if (II->isStr("__builtin_va_list"))
3028        Context.setBuiltinVaListType(Context.getTypedefType(NewTD));
3029    }
3030
3031  return NewTD;
3032}
3033
3034/// \brief Determines whether the given declaration is an out-of-scope
3035/// previous declaration.
3036///
3037/// This routine should be invoked when name lookup has found a
3038/// previous declaration (PrevDecl) that is not in the scope where a
3039/// new declaration by the same name is being introduced. If the new
3040/// declaration occurs in a local scope, previous declarations with
3041/// linkage may still be considered previous declarations (C99
3042/// 6.2.2p4-5, C++ [basic.link]p6).
3043///
3044/// \param PrevDecl the previous declaration found by name
3045/// lookup
3046///
3047/// \param DC the context in which the new declaration is being
3048/// declared.
3049///
3050/// \returns true if PrevDecl is an out-of-scope previous declaration
3051/// for a new delcaration with the same name.
3052static bool
3053isOutOfScopePreviousDeclaration(NamedDecl *PrevDecl, DeclContext *DC,
3054                                ASTContext &Context) {
3055  if (!PrevDecl)
3056    return false;
3057
3058  if (!PrevDecl->hasLinkage())
3059    return false;
3060
3061  if (Context.getLangOptions().CPlusPlus) {
3062    // C++ [basic.link]p6:
3063    //   If there is a visible declaration of an entity with linkage
3064    //   having the same name and type, ignoring entities declared
3065    //   outside the innermost enclosing namespace scope, the block
3066    //   scope declaration declares that same entity and receives the
3067    //   linkage of the previous declaration.
3068    DeclContext *OuterContext = DC->getRedeclContext();
3069    if (!OuterContext->isFunctionOrMethod())
3070      // This rule only applies to block-scope declarations.
3071      return false;
3072
3073    DeclContext *PrevOuterContext = PrevDecl->getDeclContext();
3074    if (PrevOuterContext->isRecord())
3075      // We found a member function: ignore it.
3076      return false;
3077
3078    // Find the innermost enclosing namespace for the new and
3079    // previous declarations.
3080    OuterContext = OuterContext->getEnclosingNamespaceContext();
3081    PrevOuterContext = PrevOuterContext->getEnclosingNamespaceContext();
3082
3083    // The previous declaration is in a different namespace, so it
3084    // isn't the same function.
3085    if (!OuterContext->Equals(PrevOuterContext))
3086      return false;
3087  }
3088
3089  return true;
3090}
3091
3092static void SetNestedNameSpecifier(DeclaratorDecl *DD, Declarator &D) {
3093  CXXScopeSpec &SS = D.getCXXScopeSpec();
3094  if (!SS.isSet()) return;
3095  DD->setQualifierInfo(SS.getWithLocInContext(DD->getASTContext()));
3096}
3097
3098NamedDecl*
3099Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC,
3100                              QualType R, TypeSourceInfo *TInfo,
3101                              LookupResult &Previous,
3102                              MultiTemplateParamsArg TemplateParamLists,
3103                              bool &Redeclaration) {
3104  DeclarationName Name = GetNameForDeclarator(D).getName();
3105
3106  // Check that there are no default arguments (C++ only).
3107  if (getLangOptions().CPlusPlus)
3108    CheckExtraCXXDefaultArguments(D);
3109
3110  DeclSpec::SCS SCSpec = D.getDeclSpec().getStorageClassSpec();
3111  assert(SCSpec != DeclSpec::SCS_typedef &&
3112         "Parser allowed 'typedef' as storage class VarDecl.");
3113  VarDecl::StorageClass SC = StorageClassSpecToVarDeclStorageClass(SCSpec);
3114  if (SCSpec == DeclSpec::SCS_mutable) {
3115    // mutable can only appear on non-static class members, so it's always
3116    // an error here
3117    Diag(D.getIdentifierLoc(), diag::err_mutable_nonmember);
3118    D.setInvalidType();
3119    SC = SC_None;
3120  }
3121  SCSpec = D.getDeclSpec().getStorageClassSpecAsWritten();
3122  VarDecl::StorageClass SCAsWritten
3123    = StorageClassSpecToVarDeclStorageClass(SCSpec);
3124
3125  IdentifierInfo *II = Name.getAsIdentifierInfo();
3126  if (!II) {
3127    Diag(D.getIdentifierLoc(), diag::err_bad_variable_name)
3128      << Name.getAsString();
3129    return 0;
3130  }
3131
3132  DiagnoseFunctionSpecifiers(D);
3133
3134  if (!DC->isRecord() && S->getFnParent() == 0) {
3135    // C99 6.9p2: The storage-class specifiers auto and register shall not
3136    // appear in the declaration specifiers in an external declaration.
3137    if (SC == SC_Auto || SC == SC_Register) {
3138
3139      // If this is a register variable with an asm label specified, then this
3140      // is a GNU extension.
3141      if (SC == SC_Register && D.getAsmLabel())
3142        Diag(D.getIdentifierLoc(), diag::err_unsupported_global_register);
3143      else
3144        Diag(D.getIdentifierLoc(), diag::err_typecheck_sclass_fscope);
3145      D.setInvalidType();
3146    }
3147  }
3148
3149  bool isExplicitSpecialization = false;
3150  VarDecl *NewVD;
3151  if (!getLangOptions().CPlusPlus) {
3152    NewVD = VarDecl::Create(Context, DC, D.getSourceRange().getBegin(),
3153                            D.getIdentifierLoc(), II,
3154                            R, TInfo, SC, SCAsWritten);
3155
3156    if (D.isInvalidType())
3157      NewVD->setInvalidDecl();
3158  } else {
3159    if (DC->isRecord() && !CurContext->isRecord()) {
3160      // This is an out-of-line definition of a static data member.
3161      if (SC == SC_Static) {
3162        Diag(D.getDeclSpec().getStorageClassSpecLoc(),
3163             diag::err_static_out_of_line)
3164          << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());
3165      } else if (SC == SC_None)
3166        SC = SC_Static;
3167    }
3168    if (SC == SC_Static) {
3169      if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {
3170        if (RD->isLocalClass())
3171          Diag(D.getIdentifierLoc(),
3172               diag::err_static_data_member_not_allowed_in_local_class)
3173            << Name << RD->getDeclName();
3174
3175        // C++ [class.union]p1: If a union contains a static data member,
3176        // the program is ill-formed.
3177        //
3178        // We also disallow static data members in anonymous structs.
3179        if (CurContext->isRecord() && (RD->isUnion() || !RD->getDeclName()))
3180          Diag(D.getIdentifierLoc(),
3181               diag::err_static_data_member_not_allowed_in_union_or_anon_struct)
3182            << Name << RD->isUnion();
3183      }
3184    }
3185
3186    // Match up the template parameter lists with the scope specifier, then
3187    // determine whether we have a template or a template specialization.
3188    isExplicitSpecialization = false;
3189    bool Invalid = false;
3190    if (TemplateParameterList *TemplateParams
3191        = MatchTemplateParametersToScopeSpecifier(
3192                                                  D.getDeclSpec().getSourceRange().getBegin(),
3193                                                  D.getCXXScopeSpec(),
3194                                                  TemplateParamLists.get(),
3195                                                  TemplateParamLists.size(),
3196                                                  /*never a friend*/ false,
3197                                                  isExplicitSpecialization,
3198                                                  Invalid)) {
3199      if (TemplateParams->size() > 0) {
3200        // There is no such thing as a variable template.
3201        Diag(D.getIdentifierLoc(), diag::err_template_variable)
3202          << II
3203          << SourceRange(TemplateParams->getTemplateLoc(),
3204                         TemplateParams->getRAngleLoc());
3205        return 0;
3206      } else {
3207        // There is an extraneous 'template<>' for this variable. Complain
3208        // about it, but allow the declaration of the variable.
3209        Diag(TemplateParams->getTemplateLoc(),
3210             diag::err_template_variable_noparams)
3211          << II
3212          << SourceRange(TemplateParams->getTemplateLoc(),
3213                         TemplateParams->getRAngleLoc());
3214        isExplicitSpecialization = true;
3215      }
3216    }
3217
3218    NewVD = VarDecl::Create(Context, DC, D.getSourceRange().getBegin(),
3219                            D.getIdentifierLoc(), II,
3220                            R, TInfo, SC, SCAsWritten);
3221
3222    // If this decl has an auto type in need of deduction, make a note of the
3223    // Decl so we can diagnose uses of it in its own initializer.
3224    if (D.getDeclSpec().getTypeSpecType() == DeclSpec::TST_auto &&
3225        R->getContainedAutoType())
3226      ParsingInitForAutoVars.insert(NewVD);
3227
3228    if (D.isInvalidType() || Invalid)
3229      NewVD->setInvalidDecl();
3230
3231    SetNestedNameSpecifier(NewVD, D);
3232
3233    if (TemplateParamLists.size() > 0 && D.getCXXScopeSpec().isSet()) {
3234      NewVD->setTemplateParameterListsInfo(Context,
3235                                           TemplateParamLists.size(),
3236                                           TemplateParamLists.release());
3237    }
3238  }
3239
3240  if (D.getDeclSpec().isThreadSpecified()) {
3241    if (NewVD->hasLocalStorage())
3242      Diag(D.getDeclSpec().getThreadSpecLoc(), diag::err_thread_non_global);
3243    else if (!Context.Target.isTLSSupported())
3244      Diag(D.getDeclSpec().getThreadSpecLoc(), diag::err_thread_unsupported);
3245    else
3246      NewVD->setThreadSpecified(true);
3247  }
3248
3249  // Set the lexical context. If the declarator has a C++ scope specifier, the
3250  // lexical context will be different from the semantic context.
3251  NewVD->setLexicalDeclContext(CurContext);
3252
3253  // Handle attributes prior to checking for duplicates in MergeVarDecl
3254  ProcessDeclAttributes(S, NewVD, D);
3255
3256  // Handle GNU asm-label extension (encoded as an attribute).
3257  if (Expr *E = (Expr*)D.getAsmLabel()) {
3258    // The parser guarantees this is a string.
3259    StringLiteral *SE = cast<StringLiteral>(E);
3260    llvm::StringRef Label = SE->getString();
3261    if (S->getFnParent() != 0) {
3262      switch (SC) {
3263      case SC_None:
3264      case SC_Auto:
3265        Diag(E->getExprLoc(), diag::warn_asm_label_on_auto_decl) << Label;
3266        break;
3267      case SC_Register:
3268        if (!Context.Target.isValidGCCRegisterName(Label))
3269          Diag(E->getExprLoc(), diag::err_asm_unknown_register_name) << Label;
3270        break;
3271      case SC_Static:
3272      case SC_Extern:
3273      case SC_PrivateExtern:
3274        break;
3275      }
3276    }
3277
3278    NewVD->addAttr(::new (Context) AsmLabelAttr(SE->getStrTokenLoc(0),
3279                                                Context, Label));
3280  }
3281
3282  // Diagnose shadowed variables before filtering for scope.
3283  if (!D.getCXXScopeSpec().isSet())
3284    CheckShadow(S, NewVD, Previous);
3285
3286  // Don't consider existing declarations that are in a different
3287  // scope and are out-of-semantic-context declarations (if the new
3288  // declaration has linkage).
3289  FilterLookupForScope(*this, Previous, DC, S, NewVD->hasLinkage(),
3290                       isExplicitSpecialization);
3291
3292  if (!getLangOptions().CPlusPlus)
3293    CheckVariableDeclaration(NewVD, Previous, Redeclaration);
3294  else {
3295    // Merge the decl with the existing one if appropriate.
3296    if (!Previous.empty()) {
3297      if (Previous.isSingleResult() &&
3298          isa<FieldDecl>(Previous.getFoundDecl()) &&
3299          D.getCXXScopeSpec().isSet()) {
3300        // The user tried to define a non-static data member
3301        // out-of-line (C++ [dcl.meaning]p1).
3302        Diag(NewVD->getLocation(), diag::err_nonstatic_member_out_of_line)
3303          << D.getCXXScopeSpec().getRange();
3304        Previous.clear();
3305        NewVD->setInvalidDecl();
3306      }
3307    } else if (D.getCXXScopeSpec().isSet()) {
3308      // No previous declaration in the qualifying scope.
3309      Diag(D.getIdentifierLoc(), diag::err_no_member)
3310        << Name << computeDeclContext(D.getCXXScopeSpec(), true)
3311        << D.getCXXScopeSpec().getRange();
3312      NewVD->setInvalidDecl();
3313    }
3314
3315    CheckVariableDeclaration(NewVD, Previous, Redeclaration);
3316
3317    // This is an explicit specialization of a static data member. Check it.
3318    if (isExplicitSpecialization && !NewVD->isInvalidDecl() &&
3319        CheckMemberSpecialization(NewVD, Previous))
3320      NewVD->setInvalidDecl();
3321  }
3322
3323  // attributes declared post-definition are currently ignored
3324  // FIXME: This should be handled in attribute merging, not
3325  // here.
3326  if (Previous.isSingleResult()) {
3327    VarDecl *Def = dyn_cast<VarDecl>(Previous.getFoundDecl());
3328    if (Def && (Def = Def->getDefinition()) &&
3329        Def != NewVD && D.hasAttributes()) {
3330      Diag(NewVD->getLocation(), diag::warn_attribute_precede_definition);
3331      Diag(Def->getLocation(), diag::note_previous_definition);
3332    }
3333  }
3334
3335  // If this is a locally-scoped extern C variable, update the map of
3336  // such variables.
3337  if (CurContext->isFunctionOrMethod() && NewVD->isExternC() &&
3338      !NewVD->isInvalidDecl())
3339    RegisterLocallyScopedExternCDecl(NewVD, Previous, S);
3340
3341  // If there's a #pragma GCC visibility in scope, and this isn't a class
3342  // member, set the visibility of this variable.
3343  if (NewVD->getLinkage() == ExternalLinkage && !DC->isRecord())
3344    AddPushedVisibilityAttribute(NewVD);
3345
3346  MarkUnusedFileScopedDecl(NewVD);
3347
3348  return NewVD;
3349}
3350
3351/// \brief Diagnose variable or built-in function shadowing.  Implements
3352/// -Wshadow.
3353///
3354/// This method is called whenever a VarDecl is added to a "useful"
3355/// scope.
3356///
3357/// \param S the scope in which the shadowing name is being declared
3358/// \param R the lookup of the name
3359///
3360void Sema::CheckShadow(Scope *S, VarDecl *D, const LookupResult& R) {
3361  // Return if warning is ignored.
3362  if (Diags.getDiagnosticLevel(diag::warn_decl_shadow, R.getNameLoc()) ==
3363        Diagnostic::Ignored)
3364    return;
3365
3366  // Don't diagnose declarations at file scope.
3367  DeclContext *NewDC = D->getDeclContext();
3368  if (NewDC->isFileContext())
3369    return;
3370
3371  // Only diagnose if we're shadowing an unambiguous field or variable.
3372  if (R.getResultKind() != LookupResult::Found)
3373    return;
3374
3375  NamedDecl* ShadowedDecl = R.getFoundDecl();
3376  if (!isa<VarDecl>(ShadowedDecl) && !isa<FieldDecl>(ShadowedDecl))
3377    return;
3378
3379  // Fields are not shadowed by variables in C++ static methods.
3380  if (isa<FieldDecl>(ShadowedDecl))
3381    if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewDC))
3382      if (MD->isStatic())
3383        return;
3384
3385  if (VarDecl *shadowedVar = dyn_cast<VarDecl>(ShadowedDecl))
3386    if (shadowedVar->isExternC()) {
3387      // Don't warn for this case:
3388      //
3389      // @code
3390      // extern int bob;
3391      // void f() {
3392      //   extern int bob;
3393      // }
3394      // @endcode
3395      if (D->isExternC())
3396        return;
3397
3398      // For shadowing external vars, make sure that we point to the global
3399      // declaration, not a locally scoped extern declaration.
3400      for (VarDecl::redecl_iterator
3401             I = shadowedVar->redecls_begin(), E = shadowedVar->redecls_end();
3402           I != E; ++I)
3403        if (I->isFileVarDecl()) {
3404          ShadowedDecl = *I;
3405          break;
3406        }
3407    }
3408
3409  DeclContext *OldDC = ShadowedDecl->getDeclContext();
3410
3411  // Only warn about certain kinds of shadowing for class members.
3412  if (NewDC && NewDC->isRecord()) {
3413    // In particular, don't warn about shadowing non-class members.
3414    if (!OldDC->isRecord())
3415      return;
3416
3417    // TODO: should we warn about static data members shadowing
3418    // static data members from base classes?
3419
3420    // TODO: don't diagnose for inaccessible shadowed members.
3421    // This is hard to do perfectly because we might friend the
3422    // shadowing context, but that's just a false negative.
3423  }
3424
3425  // Determine what kind of declaration we're shadowing.
3426  unsigned Kind;
3427  if (isa<RecordDecl>(OldDC)) {
3428    if (isa<FieldDecl>(ShadowedDecl))
3429      Kind = 3; // field
3430    else
3431      Kind = 2; // static data member
3432  } else if (OldDC->isFileContext())
3433    Kind = 1; // global
3434  else
3435    Kind = 0; // local
3436
3437  DeclarationName Name = R.getLookupName();
3438
3439  // Emit warning and note.
3440  Diag(R.getNameLoc(), diag::warn_decl_shadow) << Name << Kind << OldDC;
3441  Diag(ShadowedDecl->getLocation(), diag::note_previous_declaration);
3442}
3443
3444/// \brief Check -Wshadow without the advantage of a previous lookup.
3445void Sema::CheckShadow(Scope *S, VarDecl *D) {
3446  if (Diags.getDiagnosticLevel(diag::warn_decl_shadow, D->getLocation()) ==
3447        Diagnostic::Ignored)
3448    return;
3449
3450  LookupResult R(*this, D->getDeclName(), D->getLocation(),
3451                 Sema::LookupOrdinaryName, Sema::ForRedeclaration);
3452  LookupName(R, S);
3453  CheckShadow(S, D, R);
3454}
3455
3456/// \brief Perform semantic checking on a newly-created variable
3457/// declaration.
3458///
3459/// This routine performs all of the type-checking required for a
3460/// variable declaration once it has been built. It is used both to
3461/// check variables after they have been parsed and their declarators
3462/// have been translated into a declaration, and to check variables
3463/// that have been instantiated from a template.
3464///
3465/// Sets NewVD->isInvalidDecl() if an error was encountered.
3466void Sema::CheckVariableDeclaration(VarDecl *NewVD,
3467                                    LookupResult &Previous,
3468                                    bool &Redeclaration) {
3469  // If the decl is already known invalid, don't check it.
3470  if (NewVD->isInvalidDecl())
3471    return;
3472
3473  QualType T = NewVD->getType();
3474
3475  if (T->isObjCObjectType()) {
3476    Diag(NewVD->getLocation(), diag::err_statically_allocated_object);
3477    return NewVD->setInvalidDecl();
3478  }
3479
3480  // Emit an error if an address space was applied to decl with local storage.
3481  // This includes arrays of objects with address space qualifiers, but not
3482  // automatic variables that point to other address spaces.
3483  // ISO/IEC TR 18037 S5.1.2
3484  if (NewVD->hasLocalStorage() && T.getAddressSpace() != 0) {
3485    Diag(NewVD->getLocation(), diag::err_as_qualified_auto_decl);
3486    return NewVD->setInvalidDecl();
3487  }
3488
3489  if (NewVD->hasLocalStorage() && T.isObjCGCWeak()
3490      && !NewVD->hasAttr<BlocksAttr>())
3491    Diag(NewVD->getLocation(), diag::warn_attribute_weak_on_local);
3492
3493  bool isVM = T->isVariablyModifiedType();
3494  if (isVM || NewVD->hasAttr<CleanupAttr>() ||
3495      NewVD->hasAttr<BlocksAttr>())
3496    getCurFunction()->setHasBranchProtectedScope();
3497
3498  if ((isVM && NewVD->hasLinkage()) ||
3499      (T->isVariableArrayType() && NewVD->hasGlobalStorage())) {
3500    bool SizeIsNegative;
3501    llvm::APSInt Oversized;
3502    QualType FixedTy =
3503        TryToFixInvalidVariablyModifiedType(T, Context, SizeIsNegative,
3504                                            Oversized);
3505
3506    if (FixedTy.isNull() && T->isVariableArrayType()) {
3507      const VariableArrayType *VAT = Context.getAsVariableArrayType(T);
3508      // FIXME: This won't give the correct result for
3509      // int a[10][n];
3510      SourceRange SizeRange = VAT->getSizeExpr()->getSourceRange();
3511
3512      if (NewVD->isFileVarDecl())
3513        Diag(NewVD->getLocation(), diag::err_vla_decl_in_file_scope)
3514        << SizeRange;
3515      else if (NewVD->getStorageClass() == SC_Static)
3516        Diag(NewVD->getLocation(), diag::err_vla_decl_has_static_storage)
3517        << SizeRange;
3518      else
3519        Diag(NewVD->getLocation(), diag::err_vla_decl_has_extern_linkage)
3520        << SizeRange;
3521      return NewVD->setInvalidDecl();
3522    }
3523
3524    if (FixedTy.isNull()) {
3525      if (NewVD->isFileVarDecl())
3526        Diag(NewVD->getLocation(), diag::err_vm_decl_in_file_scope);
3527      else
3528        Diag(NewVD->getLocation(), diag::err_vm_decl_has_extern_linkage);
3529      return NewVD->setInvalidDecl();
3530    }
3531
3532    Diag(NewVD->getLocation(), diag::warn_illegal_constant_array_size);
3533    NewVD->setType(FixedTy);
3534  }
3535
3536  if (Previous.empty() && NewVD->isExternC()) {
3537    // Since we did not find anything by this name and we're declaring
3538    // an extern "C" variable, look for a non-visible extern "C"
3539    // declaration with the same name.
3540    llvm::DenseMap<DeclarationName, NamedDecl *>::iterator Pos
3541      = LocallyScopedExternalDecls.find(NewVD->getDeclName());
3542    if (Pos != LocallyScopedExternalDecls.end())
3543      Previous.addDecl(Pos->second);
3544  }
3545
3546  if (T->isVoidType() && !NewVD->hasExternalStorage()) {
3547    Diag(NewVD->getLocation(), diag::err_typecheck_decl_incomplete_type)
3548      << T;
3549    return NewVD->setInvalidDecl();
3550  }
3551
3552  if (!NewVD->hasLocalStorage() && NewVD->hasAttr<BlocksAttr>()) {
3553    Diag(NewVD->getLocation(), diag::err_block_on_nonlocal);
3554    return NewVD->setInvalidDecl();
3555  }
3556
3557  if (isVM && NewVD->hasAttr<BlocksAttr>()) {
3558    Diag(NewVD->getLocation(), diag::err_block_on_vm);
3559    return NewVD->setInvalidDecl();
3560  }
3561
3562  // Function pointers and references cannot have qualified function type, only
3563  // function pointer-to-members can do that.
3564  QualType Pointee;
3565  unsigned PtrOrRef = 0;
3566  if (const PointerType *Ptr = T->getAs<PointerType>())
3567    Pointee = Ptr->getPointeeType();
3568  else if (const ReferenceType *Ref = T->getAs<ReferenceType>()) {
3569    Pointee = Ref->getPointeeType();
3570    PtrOrRef = 1;
3571  }
3572  if (!Pointee.isNull() && Pointee->isFunctionProtoType() &&
3573      Pointee->getAs<FunctionProtoType>()->getTypeQuals() != 0) {
3574    Diag(NewVD->getLocation(), diag::err_invalid_qualified_function_pointer)
3575        << PtrOrRef;
3576    return NewVD->setInvalidDecl();
3577  }
3578
3579  if (!Previous.empty()) {
3580    Redeclaration = true;
3581    MergeVarDecl(NewVD, Previous);
3582  }
3583}
3584
3585/// \brief Data used with FindOverriddenMethod
3586struct FindOverriddenMethodData {
3587  Sema *S;
3588  CXXMethodDecl *Method;
3589};
3590
3591/// \brief Member lookup function that determines whether a given C++
3592/// method overrides a method in a base class, to be used with
3593/// CXXRecordDecl::lookupInBases().
3594static bool FindOverriddenMethod(const CXXBaseSpecifier *Specifier,
3595                                 CXXBasePath &Path,
3596                                 void *UserData) {
3597  RecordDecl *BaseRecord = Specifier->getType()->getAs<RecordType>()->getDecl();
3598
3599  FindOverriddenMethodData *Data
3600    = reinterpret_cast<FindOverriddenMethodData*>(UserData);
3601
3602  DeclarationName Name = Data->Method->getDeclName();
3603
3604  // FIXME: Do we care about other names here too?
3605  if (Name.getNameKind() == DeclarationName::CXXDestructorName) {
3606    // We really want to find the base class destructor here.
3607    QualType T = Data->S->Context.getTypeDeclType(BaseRecord);
3608    CanQualType CT = Data->S->Context.getCanonicalType(T);
3609
3610    Name = Data->S->Context.DeclarationNames.getCXXDestructorName(CT);
3611  }
3612
3613  for (Path.Decls = BaseRecord->lookup(Name);
3614       Path.Decls.first != Path.Decls.second;
3615       ++Path.Decls.first) {
3616    NamedDecl *D = *Path.Decls.first;
3617    if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D)) {
3618      if (MD->isVirtual() && !Data->S->IsOverload(Data->Method, MD, false))
3619        return true;
3620    }
3621  }
3622
3623  return false;
3624}
3625
3626/// AddOverriddenMethods - See if a method overrides any in the base classes,
3627/// and if so, check that it's a valid override and remember it.
3628bool Sema::AddOverriddenMethods(CXXRecordDecl *DC, CXXMethodDecl *MD) {
3629  // Look for virtual methods in base classes that this method might override.
3630  CXXBasePaths Paths;
3631  FindOverriddenMethodData Data;
3632  Data.Method = MD;
3633  Data.S = this;
3634  bool AddedAny = false;
3635  if (DC->lookupInBases(&FindOverriddenMethod, &Data, Paths)) {
3636    for (CXXBasePaths::decl_iterator I = Paths.found_decls_begin(),
3637         E = Paths.found_decls_end(); I != E; ++I) {
3638      if (CXXMethodDecl *OldMD = dyn_cast<CXXMethodDecl>(*I)) {
3639        if (!CheckOverridingFunctionReturnType(MD, OldMD) &&
3640            !CheckOverridingFunctionExceptionSpec(MD, OldMD) &&
3641            !CheckIfOverriddenFunctionIsMarkedFinal(MD, OldMD)) {
3642          MD->addOverriddenMethod(OldMD->getCanonicalDecl());
3643          AddedAny = true;
3644        }
3645      }
3646    }
3647  }
3648
3649  return AddedAny;
3650}
3651
3652static void DiagnoseInvalidRedeclaration(Sema &S, FunctionDecl *NewFD) {
3653  LookupResult Prev(S, NewFD->getDeclName(), NewFD->getLocation(),
3654                    Sema::LookupOrdinaryName, Sema::ForRedeclaration);
3655  S.LookupQualifiedName(Prev, NewFD->getDeclContext());
3656  assert(!Prev.isAmbiguous() &&
3657         "Cannot have an ambiguity in previous-declaration lookup");
3658  for (LookupResult::iterator Func = Prev.begin(), FuncEnd = Prev.end();
3659       Func != FuncEnd; ++Func) {
3660    if (isa<FunctionDecl>(*Func) &&
3661        isNearlyMatchingFunction(S.Context, cast<FunctionDecl>(*Func), NewFD))
3662      S.Diag((*Func)->getLocation(), diag::note_member_def_close_match);
3663  }
3664}
3665
3666NamedDecl*
3667Sema::ActOnFunctionDeclarator(Scope* S, Declarator& D, DeclContext* DC,
3668                              QualType R, TypeSourceInfo *TInfo,
3669                              LookupResult &Previous,
3670                              MultiTemplateParamsArg TemplateParamLists,
3671                              bool IsFunctionDefinition, bool &Redeclaration) {
3672  assert(R.getTypePtr()->isFunctionType());
3673
3674  // TODO: consider using NameInfo for diagnostic.
3675  DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
3676  DeclarationName Name = NameInfo.getName();
3677  FunctionDecl::StorageClass SC = SC_None;
3678  switch (D.getDeclSpec().getStorageClassSpec()) {
3679  default: assert(0 && "Unknown storage class!");
3680  case DeclSpec::SCS_auto:
3681  case DeclSpec::SCS_register:
3682  case DeclSpec::SCS_mutable:
3683    Diag(D.getDeclSpec().getStorageClassSpecLoc(),
3684         diag::err_typecheck_sclass_func);
3685    D.setInvalidType();
3686    break;
3687  case DeclSpec::SCS_unspecified: SC = SC_None; break;
3688  case DeclSpec::SCS_extern:      SC = SC_Extern; break;
3689  case DeclSpec::SCS_static: {
3690    if (CurContext->getRedeclContext()->isFunctionOrMethod()) {
3691      // C99 6.7.1p5:
3692      //   The declaration of an identifier for a function that has
3693      //   block scope shall have no explicit storage-class specifier
3694      //   other than extern
3695      // See also (C++ [dcl.stc]p4).
3696      Diag(D.getDeclSpec().getStorageClassSpecLoc(),
3697           diag::err_static_block_func);
3698      SC = SC_None;
3699    } else
3700      SC = SC_Static;
3701    break;
3702  }
3703  case DeclSpec::SCS_private_extern: SC = SC_PrivateExtern; break;
3704  }
3705
3706  if (D.getDeclSpec().isThreadSpecified())
3707    Diag(D.getDeclSpec().getThreadSpecLoc(), diag::err_invalid_thread);
3708
3709  // Do not allow returning a objc interface by-value.
3710  if (R->getAs<FunctionType>()->getResultType()->isObjCObjectType()) {
3711    Diag(D.getIdentifierLoc(),
3712         diag::err_object_cannot_be_passed_returned_by_value) << 0
3713    << R->getAs<FunctionType>()->getResultType();
3714    D.setInvalidType();
3715  }
3716
3717  FunctionDecl *NewFD;
3718  bool isInline = D.getDeclSpec().isInlineSpecified();
3719  bool isFriend = false;
3720  DeclSpec::SCS SCSpec = D.getDeclSpec().getStorageClassSpecAsWritten();
3721  FunctionDecl::StorageClass SCAsWritten
3722    = StorageClassSpecToFunctionDeclStorageClass(SCSpec);
3723  FunctionTemplateDecl *FunctionTemplate = 0;
3724  bool isExplicitSpecialization = false;
3725  bool isFunctionTemplateSpecialization = false;
3726
3727  if (!getLangOptions().CPlusPlus) {
3728    // Determine whether the function was written with a
3729    // prototype. This true when:
3730    //   - there is a prototype in the declarator, or
3731    //   - the type R of the function is some kind of typedef or other reference
3732    //     to a type name (which eventually refers to a function type).
3733    bool HasPrototype =
3734    (D.isFunctionDeclarator() && D.getFunctionTypeInfo().hasPrototype) ||
3735    (!isa<FunctionType>(R.getTypePtr()) && R->isFunctionProtoType());
3736
3737    NewFD = FunctionDecl::Create(Context, DC, D.getSourceRange().getBegin(),
3738                                 NameInfo, R, TInfo, SC, SCAsWritten, isInline,
3739                                 HasPrototype);
3740    if (D.isInvalidType())
3741      NewFD->setInvalidDecl();
3742
3743    // Set the lexical context.
3744    NewFD->setLexicalDeclContext(CurContext);
3745    // Filter out previous declarations that don't match the scope.
3746    FilterLookupForScope(*this, Previous, DC, S, NewFD->hasLinkage(),
3747                         /*ExplicitInstantiationOrSpecialization=*/false);
3748  } else {
3749    isFriend = D.getDeclSpec().isFriendSpecified();
3750    bool isVirtual = D.getDeclSpec().isVirtualSpecified();
3751    bool isExplicit = D.getDeclSpec().isExplicitSpecified();
3752    bool isVirtualOkay = false;
3753
3754    // Check that the return type is not an abstract class type.
3755    // For record types, this is done by the AbstractClassUsageDiagnoser once
3756    // the class has been completely parsed.
3757    if (!DC->isRecord() &&
3758      RequireNonAbstractType(D.getIdentifierLoc(),
3759                             R->getAs<FunctionType>()->getResultType(),
3760                             diag::err_abstract_type_in_decl,
3761                             AbstractReturnType))
3762      D.setInvalidType();
3763
3764    if (Name.getNameKind() == DeclarationName::CXXConstructorName) {
3765      // This is a C++ constructor declaration.
3766      assert(DC->isRecord() &&
3767             "Constructors can only be declared in a member context");
3768
3769      R = CheckConstructorDeclarator(D, R, SC);
3770
3771      // Create the new declaration
3772      NewFD = CXXConstructorDecl::Create(Context,
3773                                         cast<CXXRecordDecl>(DC),
3774                                         D.getSourceRange().getBegin(),
3775                                         NameInfo, R, TInfo,
3776                                         isExplicit, isInline,
3777                                         /*isImplicitlyDeclared=*/false);
3778    } else if (Name.getNameKind() == DeclarationName::CXXDestructorName) {
3779      // This is a C++ destructor declaration.
3780      if (DC->isRecord()) {
3781        R = CheckDestructorDeclarator(D, R, SC);
3782
3783        NewFD = CXXDestructorDecl::Create(Context,
3784                                          cast<CXXRecordDecl>(DC),
3785                                          D.getSourceRange().getBegin(),
3786                                          NameInfo, R, TInfo,
3787                                          isInline,
3788                                          /*isImplicitlyDeclared=*/false);
3789        isVirtualOkay = true;
3790      } else {
3791        Diag(D.getIdentifierLoc(), diag::err_destructor_not_member);
3792
3793        // Create a FunctionDecl to satisfy the function definition parsing
3794        // code path.
3795        NewFD = FunctionDecl::Create(Context, DC, D.getSourceRange().getBegin(),
3796                                     D.getIdentifierLoc(), Name, R, TInfo,
3797                                     SC, SCAsWritten, isInline,
3798                                     /*hasPrototype=*/true);
3799        D.setInvalidType();
3800      }
3801    } else if (Name.getNameKind() == DeclarationName::CXXConversionFunctionName) {
3802      if (!DC->isRecord()) {
3803        Diag(D.getIdentifierLoc(),
3804             diag::err_conv_function_not_member);
3805        return 0;
3806      }
3807
3808      CheckConversionDeclarator(D, R, SC);
3809      NewFD = CXXConversionDecl::Create(Context, cast<CXXRecordDecl>(DC),
3810                                        D.getSourceRange().getBegin(),
3811                                        NameInfo, R, TInfo,
3812                                        isInline, isExplicit,
3813                                        SourceLocation());
3814
3815      isVirtualOkay = true;
3816    } else if (DC->isRecord()) {
3817      // If the of the function is the same as the name of the record, then this
3818      // must be an invalid constructor that has a return type.
3819      // (The parser checks for a return type and makes the declarator a
3820      // constructor if it has no return type).
3821      // must have an invalid constructor that has a return type
3822      if (Name.getAsIdentifierInfo() &&
3823          Name.getAsIdentifierInfo() == cast<CXXRecordDecl>(DC)->getIdentifier()){
3824        Diag(D.getIdentifierLoc(), diag::err_constructor_return_type)
3825          << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc())
3826          << SourceRange(D.getIdentifierLoc());
3827        return 0;
3828      }
3829
3830      bool isStatic = SC == SC_Static;
3831
3832      // [class.free]p1:
3833      // Any allocation function for a class T is a static member
3834      // (even if not explicitly declared static).
3835      if (Name.getCXXOverloadedOperator() == OO_New ||
3836          Name.getCXXOverloadedOperator() == OO_Array_New)
3837        isStatic = true;
3838
3839      // [class.free]p6 Any deallocation function for a class X is a static member
3840      // (even if not explicitly declared static).
3841      if (Name.getCXXOverloadedOperator() == OO_Delete ||
3842          Name.getCXXOverloadedOperator() == OO_Array_Delete)
3843        isStatic = true;
3844
3845      // This is a C++ method declaration.
3846      NewFD = CXXMethodDecl::Create(Context, cast<CXXRecordDecl>(DC),
3847                                    D.getSourceRange().getBegin(),
3848                                    NameInfo, R, TInfo,
3849                                    isStatic, SCAsWritten, isInline,
3850                                    SourceLocation());
3851
3852      isVirtualOkay = !isStatic;
3853    } else {
3854      // Determine whether the function was written with a
3855      // prototype. This true when:
3856      //   - we're in C++ (where every function has a prototype),
3857      NewFD = FunctionDecl::Create(Context, DC, D.getSourceRange().getBegin(),
3858                                   NameInfo, R, TInfo, SC, SCAsWritten, isInline,
3859                                   true/*HasPrototype*/);
3860    }
3861
3862    if (isFriend && !isInline && IsFunctionDefinition) {
3863      // C++ [class.friend]p5
3864      //   A function can be defined in a friend declaration of a
3865      //   class . . . . Such a function is implicitly inline.
3866      NewFD->setImplicitlyInline();
3867    }
3868
3869    SetNestedNameSpecifier(NewFD, D);
3870    isExplicitSpecialization = false;
3871    isFunctionTemplateSpecialization = false;
3872    if (D.isInvalidType())
3873      NewFD->setInvalidDecl();
3874
3875    // Set the lexical context. If the declarator has a C++
3876    // scope specifier, or is the object of a friend declaration, the
3877    // lexical context will be different from the semantic context.
3878    NewFD->setLexicalDeclContext(CurContext);
3879
3880    // Match up the template parameter lists with the scope specifier, then
3881    // determine whether we have a template or a template specialization.
3882    bool Invalid = false;
3883    if (TemplateParameterList *TemplateParams
3884          = MatchTemplateParametersToScopeSpecifier(
3885                                  D.getDeclSpec().getSourceRange().getBegin(),
3886                                  D.getCXXScopeSpec(),
3887                                  TemplateParamLists.get(),
3888                                  TemplateParamLists.size(),
3889                                  isFriend,
3890                                  isExplicitSpecialization,
3891                                  Invalid)) {
3892      if (TemplateParams->size() > 0) {
3893        // This is a function template
3894
3895        // Check that we can declare a template here.
3896        if (CheckTemplateDeclScope(S, TemplateParams))
3897          return 0;
3898
3899        // A destructor cannot be a template.
3900        if (Name.getNameKind() == DeclarationName::CXXDestructorName) {
3901          Diag(NewFD->getLocation(), diag::err_destructor_template);
3902          return 0;
3903        }
3904
3905        FunctionTemplate = FunctionTemplateDecl::Create(Context, DC,
3906                                                        NewFD->getLocation(),
3907                                                        Name, TemplateParams,
3908                                                        NewFD);
3909        FunctionTemplate->setLexicalDeclContext(CurContext);
3910        NewFD->setDescribedFunctionTemplate(FunctionTemplate);
3911
3912        // For source fidelity, store the other template param lists.
3913        if (TemplateParamLists.size() > 1) {
3914          NewFD->setTemplateParameterListsInfo(Context,
3915                                               TemplateParamLists.size() - 1,
3916                                               TemplateParamLists.release());
3917        }
3918      } else {
3919        // This is a function template specialization.
3920        isFunctionTemplateSpecialization = true;
3921        // For source fidelity, store all the template param lists.
3922        NewFD->setTemplateParameterListsInfo(Context,
3923                                             TemplateParamLists.size(),
3924                                             TemplateParamLists.release());
3925
3926        // C++0x [temp.expl.spec]p20 forbids "template<> friend void foo(int);".
3927        if (isFriend) {
3928          // We want to remove the "template<>", found here.
3929          SourceRange RemoveRange = TemplateParams->getSourceRange();
3930
3931          // If we remove the template<> and the name is not a
3932          // template-id, we're actually silently creating a problem:
3933          // the friend declaration will refer to an untemplated decl,
3934          // and clearly the user wants a template specialization.  So
3935          // we need to insert '<>' after the name.
3936          SourceLocation InsertLoc;
3937          if (D.getName().getKind() != UnqualifiedId::IK_TemplateId) {
3938            InsertLoc = D.getName().getSourceRange().getEnd();
3939            InsertLoc = PP.getLocForEndOfToken(InsertLoc);
3940          }
3941
3942          Diag(D.getIdentifierLoc(), diag::err_template_spec_decl_friend)
3943            << Name << RemoveRange
3944            << FixItHint::CreateRemoval(RemoveRange)
3945            << FixItHint::CreateInsertion(InsertLoc, "<>");
3946        }
3947      }
3948    }
3949    else {
3950      // All template param lists were matched against the scope specifier:
3951      // this is NOT (an explicit specialization of) a template.
3952      if (TemplateParamLists.size() > 0)
3953        // For source fidelity, store all the template param lists.
3954        NewFD->setTemplateParameterListsInfo(Context,
3955                                             TemplateParamLists.size(),
3956                                             TemplateParamLists.release());
3957    }
3958
3959    if (Invalid) {
3960      NewFD->setInvalidDecl();
3961      if (FunctionTemplate)
3962        FunctionTemplate->setInvalidDecl();
3963    }
3964
3965    // C++ [dcl.fct.spec]p5:
3966    //   The virtual specifier shall only be used in declarations of
3967    //   nonstatic class member functions that appear within a
3968    //   member-specification of a class declaration; see 10.3.
3969    //
3970    if (isVirtual && !NewFD->isInvalidDecl()) {
3971      if (!isVirtualOkay) {
3972        Diag(D.getDeclSpec().getVirtualSpecLoc(),
3973             diag::err_virtual_non_function);
3974      } else if (!CurContext->isRecord()) {
3975        // 'virtual' was specified outside of the class.
3976        Diag(D.getDeclSpec().getVirtualSpecLoc(),
3977             diag::err_virtual_out_of_class)
3978          << FixItHint::CreateRemoval(D.getDeclSpec().getVirtualSpecLoc());
3979      } else if (NewFD->getDescribedFunctionTemplate()) {
3980        // C++ [temp.mem]p3:
3981        //  A member function template shall not be virtual.
3982        Diag(D.getDeclSpec().getVirtualSpecLoc(),
3983             diag::err_virtual_member_function_template)
3984          << FixItHint::CreateRemoval(D.getDeclSpec().getVirtualSpecLoc());
3985      } else {
3986        // Okay: Add virtual to the method.
3987        NewFD->setVirtualAsWritten(true);
3988      }
3989    }
3990
3991    // C++ [dcl.fct.spec]p3:
3992    //  The inline specifier shall not appear on a block scope function declaration.
3993    if (isInline && !NewFD->isInvalidDecl()) {
3994      if (CurContext->isFunctionOrMethod()) {
3995        // 'inline' is not allowed on block scope function declaration.
3996        Diag(D.getDeclSpec().getInlineSpecLoc(),
3997             diag::err_inline_declaration_block_scope) << Name
3998          << FixItHint::CreateRemoval(D.getDeclSpec().getInlineSpecLoc());
3999      }
4000    }
4001
4002    // C++ [dcl.fct.spec]p6:
4003    //  The explicit specifier shall be used only in the declaration of a
4004    //  constructor or conversion function within its class definition; see 12.3.1
4005    //  and 12.3.2.
4006    if (isExplicit && !NewFD->isInvalidDecl()) {
4007      if (!CurContext->isRecord()) {
4008        // 'explicit' was specified outside of the class.
4009        Diag(D.getDeclSpec().getExplicitSpecLoc(),
4010             diag::err_explicit_out_of_class)
4011          << FixItHint::CreateRemoval(D.getDeclSpec().getExplicitSpecLoc());
4012      } else if (!isa<CXXConstructorDecl>(NewFD) &&
4013                 !isa<CXXConversionDecl>(NewFD)) {
4014        // 'explicit' was specified on a function that wasn't a constructor
4015        // or conversion function.
4016        Diag(D.getDeclSpec().getExplicitSpecLoc(),
4017             diag::err_explicit_non_ctor_or_conv_function)
4018          << FixItHint::CreateRemoval(D.getDeclSpec().getExplicitSpecLoc());
4019      }
4020    }
4021
4022    // Filter out previous declarations that don't match the scope.
4023    FilterLookupForScope(*this, Previous, DC, S, NewFD->hasLinkage(),
4024                         isExplicitSpecialization ||
4025                         isFunctionTemplateSpecialization);
4026
4027    if (isFriend) {
4028      // For now, claim that the objects have no previous declaration.
4029      if (FunctionTemplate) {
4030        FunctionTemplate->setObjectOfFriendDecl(false);
4031        FunctionTemplate->setAccess(AS_public);
4032      }
4033      NewFD->setObjectOfFriendDecl(false);
4034      NewFD->setAccess(AS_public);
4035    }
4036
4037    if (isa<CXXMethodDecl>(NewFD) && DC == CurContext && IsFunctionDefinition) {
4038      // A method is implicitly inline if it's defined in its class
4039      // definition.
4040      NewFD->setImplicitlyInline();
4041    }
4042
4043    if (SC == SC_Static && isa<CXXMethodDecl>(NewFD) &&
4044        !CurContext->isRecord()) {
4045      // C++ [class.static]p1:
4046      //   A data or function member of a class may be declared static
4047      //   in a class definition, in which case it is a static member of
4048      //   the class.
4049
4050      // Complain about the 'static' specifier if it's on an out-of-line
4051      // member function definition.
4052      Diag(D.getDeclSpec().getStorageClassSpecLoc(),
4053           diag::err_static_out_of_line)
4054        << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());
4055    }
4056  }
4057
4058  // Handle GNU asm-label extension (encoded as an attribute).
4059  if (Expr *E = (Expr*) D.getAsmLabel()) {
4060    // The parser guarantees this is a string.
4061    StringLiteral *SE = cast<StringLiteral>(E);
4062    NewFD->addAttr(::new (Context) AsmLabelAttr(SE->getStrTokenLoc(0), Context,
4063                                                SE->getString()));
4064  }
4065
4066  // Copy the parameter declarations from the declarator D to the function
4067  // declaration NewFD, if they are available.  First scavenge them into Params.
4068  llvm::SmallVector<ParmVarDecl*, 16> Params;
4069  if (D.isFunctionDeclarator()) {
4070    DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
4071
4072    // Check for C99 6.7.5.3p10 - foo(void) is a non-varargs
4073    // function that takes no arguments, not a function that takes a
4074    // single void argument.
4075    // We let through "const void" here because Sema::GetTypeForDeclarator
4076    // already checks for that case.
4077    if (FTI.NumArgs == 1 && !FTI.isVariadic && FTI.ArgInfo[0].Ident == 0 &&
4078        FTI.ArgInfo[0].Param &&
4079        cast<ParmVarDecl>(FTI.ArgInfo[0].Param)->getType()->isVoidType()) {
4080      // Empty arg list, don't push any params.
4081      ParmVarDecl *Param = cast<ParmVarDecl>(FTI.ArgInfo[0].Param);
4082
4083      // In C++, the empty parameter-type-list must be spelled "void"; a
4084      // typedef of void is not permitted.
4085      if (getLangOptions().CPlusPlus &&
4086          Param->getType().getUnqualifiedType() != Context.VoidTy) {
4087        bool IsTypeAlias = false;
4088        if (const TypedefType *TT = Param->getType()->getAs<TypedefType>())
4089          IsTypeAlias = isa<TypeAliasDecl>(TT->getDecl());
4090        Diag(Param->getLocation(), diag::err_param_typedef_of_void)
4091          << IsTypeAlias;
4092      }
4093    } else if (FTI.NumArgs > 0 && FTI.ArgInfo[0].Param != 0) {
4094      for (unsigned i = 0, e = FTI.NumArgs; i != e; ++i) {
4095        ParmVarDecl *Param = cast<ParmVarDecl>(FTI.ArgInfo[i].Param);
4096        assert(Param->getDeclContext() != NewFD && "Was set before ?");
4097        Param->setDeclContext(NewFD);
4098        Params.push_back(Param);
4099
4100        if (Param->isInvalidDecl())
4101          NewFD->setInvalidDecl();
4102      }
4103    }
4104
4105  } else if (const FunctionProtoType *FT = R->getAs<FunctionProtoType>()) {
4106    // When we're declaring a function with a typedef, typeof, etc as in the
4107    // following example, we'll need to synthesize (unnamed)
4108    // parameters for use in the declaration.
4109    //
4110    // @code
4111    // typedef void fn(int);
4112    // fn f;
4113    // @endcode
4114
4115    // Synthesize a parameter for each argument type.
4116    for (FunctionProtoType::arg_type_iterator AI = FT->arg_type_begin(),
4117         AE = FT->arg_type_end(); AI != AE; ++AI) {
4118      ParmVarDecl *Param =
4119        BuildParmVarDeclForTypedef(NewFD, D.getIdentifierLoc(), *AI);
4120      Params.push_back(Param);
4121    }
4122  } else {
4123    assert(R->isFunctionNoProtoType() && NewFD->getNumParams() == 0 &&
4124           "Should not need args for typedef of non-prototype fn");
4125  }
4126  // Finally, we know we have the right number of parameters, install them.
4127  NewFD->setParams(Params.data(), Params.size());
4128
4129  // Process the non-inheritable attributes on this declaration.
4130  ProcessDeclAttributes(S, NewFD, D,
4131                        /*NonInheritable=*/true, /*Inheritable=*/false);
4132
4133  if (!getLangOptions().CPlusPlus) {
4134    // Perform semantic checking on the function declaration.
4135    bool isExplctSpecialization=false;
4136    CheckFunctionDeclaration(S, NewFD, Previous, isExplctSpecialization,
4137                             Redeclaration);
4138    assert((NewFD->isInvalidDecl() || !Redeclaration ||
4139            Previous.getResultKind() != LookupResult::FoundOverloaded) &&
4140           "previous declaration set still overloaded");
4141  } else {
4142    // If the declarator is a template-id, translate the parser's template
4143    // argument list into our AST format.
4144    bool HasExplicitTemplateArgs = false;
4145    TemplateArgumentListInfo TemplateArgs;
4146    if (D.getName().getKind() == UnqualifiedId::IK_TemplateId) {
4147      TemplateIdAnnotation *TemplateId = D.getName().TemplateId;
4148      TemplateArgs.setLAngleLoc(TemplateId->LAngleLoc);
4149      TemplateArgs.setRAngleLoc(TemplateId->RAngleLoc);
4150      ASTTemplateArgsPtr TemplateArgsPtr(*this,
4151                                         TemplateId->getTemplateArgs(),
4152                                         TemplateId->NumArgs);
4153      translateTemplateArguments(TemplateArgsPtr,
4154                                 TemplateArgs);
4155      TemplateArgsPtr.release();
4156
4157      HasExplicitTemplateArgs = true;
4158
4159      if (FunctionTemplate) {
4160        // Function template with explicit template arguments.
4161        Diag(D.getIdentifierLoc(), diag::err_function_template_partial_spec)
4162          << SourceRange(TemplateId->LAngleLoc, TemplateId->RAngleLoc);
4163
4164        HasExplicitTemplateArgs = false;
4165      } else if (!isFunctionTemplateSpecialization &&
4166                 !D.getDeclSpec().isFriendSpecified()) {
4167        // We have encountered something that the user meant to be a
4168        // specialization (because it has explicitly-specified template
4169        // arguments) but that was not introduced with a "template<>" (or had
4170        // too few of them).
4171        Diag(D.getIdentifierLoc(), diag::err_template_spec_needs_header)
4172          << SourceRange(TemplateId->LAngleLoc, TemplateId->RAngleLoc)
4173          << FixItHint::CreateInsertion(
4174                                        D.getDeclSpec().getSourceRange().getBegin(),
4175                                                  "template<> ");
4176        isFunctionTemplateSpecialization = true;
4177      } else {
4178        // "friend void foo<>(int);" is an implicit specialization decl.
4179        isFunctionTemplateSpecialization = true;
4180      }
4181    } else if (isFriend && isFunctionTemplateSpecialization) {
4182      // This combination is only possible in a recovery case;  the user
4183      // wrote something like:
4184      //   template <> friend void foo(int);
4185      // which we're recovering from as if the user had written:
4186      //   friend void foo<>(int);
4187      // Go ahead and fake up a template id.
4188      HasExplicitTemplateArgs = true;
4189        TemplateArgs.setLAngleLoc(D.getIdentifierLoc());
4190      TemplateArgs.setRAngleLoc(D.getIdentifierLoc());
4191    }
4192
4193    // If it's a friend (and only if it's a friend), it's possible
4194    // that either the specialized function type or the specialized
4195    // template is dependent, and therefore matching will fail.  In
4196    // this case, don't check the specialization yet.
4197    if (isFunctionTemplateSpecialization && isFriend &&
4198        (NewFD->getType()->isDependentType() || DC->isDependentContext())) {
4199      assert(HasExplicitTemplateArgs &&
4200             "friend function specialization without template args");
4201      if (CheckDependentFunctionTemplateSpecialization(NewFD, TemplateArgs,
4202                                                       Previous))
4203        NewFD->setInvalidDecl();
4204    } else if (isFunctionTemplateSpecialization) {
4205      if (CurContext->isDependentContext() && CurContext->isRecord()
4206          && !isFriend) {
4207        Diag(NewFD->getLocation(), diag::err_function_specialization_in_class)
4208          << NewFD->getDeclName();
4209        NewFD->setInvalidDecl();
4210        return 0;
4211      } else if (CheckFunctionTemplateSpecialization(NewFD,
4212                                  (HasExplicitTemplateArgs ? &TemplateArgs : 0),
4213                                                     Previous))
4214        NewFD->setInvalidDecl();
4215    } else if (isExplicitSpecialization && isa<CXXMethodDecl>(NewFD)) {
4216      if (CheckMemberSpecialization(NewFD, Previous))
4217          NewFD->setInvalidDecl();
4218    }
4219
4220    // Perform semantic checking on the function declaration.
4221    CheckFunctionDeclaration(S, NewFD, Previous, isExplicitSpecialization,
4222                             Redeclaration);
4223
4224    assert((NewFD->isInvalidDecl() || !Redeclaration ||
4225            Previous.getResultKind() != LookupResult::FoundOverloaded) &&
4226           "previous declaration set still overloaded");
4227
4228    NamedDecl *PrincipalDecl = (FunctionTemplate
4229                                ? cast<NamedDecl>(FunctionTemplate)
4230                                : NewFD);
4231
4232    if (isFriend && Redeclaration) {
4233      AccessSpecifier Access = AS_public;
4234      if (!NewFD->isInvalidDecl())
4235        Access = NewFD->getPreviousDeclaration()->getAccess();
4236
4237      NewFD->setAccess(Access);
4238      if (FunctionTemplate) FunctionTemplate->setAccess(Access);
4239
4240      PrincipalDecl->setObjectOfFriendDecl(true);
4241    }
4242
4243    if (NewFD->isOverloadedOperator() && !DC->isRecord() &&
4244        PrincipalDecl->isInIdentifierNamespace(Decl::IDNS_Ordinary))
4245      PrincipalDecl->setNonMemberOperator();
4246
4247    // If we have a function template, check the template parameter
4248    // list. This will check and merge default template arguments.
4249    if (FunctionTemplate) {
4250      FunctionTemplateDecl *PrevTemplate = FunctionTemplate->getPreviousDeclaration();
4251      CheckTemplateParameterList(FunctionTemplate->getTemplateParameters(),
4252                                 PrevTemplate? PrevTemplate->getTemplateParameters() : 0,
4253                            D.getDeclSpec().isFriendSpecified()
4254                              ? (IsFunctionDefinition
4255                                   ? TPC_FriendFunctionTemplateDefinition
4256                                   : TPC_FriendFunctionTemplate)
4257                              : (D.getCXXScopeSpec().isSet() &&
4258                                 DC && DC->isRecord() &&
4259                                 DC->isDependentContext())
4260                                  ? TPC_ClassTemplateMember
4261                                  : TPC_FunctionTemplate);
4262    }
4263
4264    if (NewFD->isInvalidDecl()) {
4265      // Ignore all the rest of this.
4266    } else if (!Redeclaration) {
4267      // Fake up an access specifier if it's supposed to be a class member.
4268      if (isa<CXXRecordDecl>(NewFD->getDeclContext()))
4269        NewFD->setAccess(AS_public);
4270
4271      // Qualified decls generally require a previous declaration.
4272      if (D.getCXXScopeSpec().isSet()) {
4273        // ...with the major exception of templated-scope or
4274        // dependent-scope friend declarations.
4275
4276        // TODO: we currently also suppress this check in dependent
4277        // contexts because (1) the parameter depth will be off when
4278        // matching friend templates and (2) we might actually be
4279        // selecting a friend based on a dependent factor.  But there
4280        // are situations where these conditions don't apply and we
4281        // can actually do this check immediately.
4282        if (isFriend &&
4283            (TemplateParamLists.size() ||
4284             D.getCXXScopeSpec().getScopeRep()->isDependent() ||
4285             CurContext->isDependentContext())) {
4286              // ignore these
4287            } else {
4288              // The user tried to provide an out-of-line definition for a
4289              // function that is a member of a class or namespace, but there
4290              // was no such member function declared (C++ [class.mfct]p2,
4291              // C++ [namespace.memdef]p2). For example:
4292              //
4293              // class X {
4294              //   void f() const;
4295              // };
4296              //
4297              // void X::f() { } // ill-formed
4298              //
4299              // Complain about this problem, and attempt to suggest close
4300              // matches (e.g., those that differ only in cv-qualifiers and
4301              // whether the parameter types are references).
4302              Diag(D.getIdentifierLoc(), diag::err_member_def_does_not_match)
4303              << Name << DC << D.getCXXScopeSpec().getRange();
4304              NewFD->setInvalidDecl();
4305
4306              DiagnoseInvalidRedeclaration(*this, NewFD);
4307            }
4308
4309        // Unqualified local friend declarations are required to resolve
4310        // to something.
4311        } else if (isFriend && cast<CXXRecordDecl>(CurContext)->isLocalClass()) {
4312          Diag(D.getIdentifierLoc(), diag::err_no_matching_local_friend);
4313          NewFD->setInvalidDecl();
4314          DiagnoseInvalidRedeclaration(*this, NewFD);
4315        }
4316
4317    } else if (!IsFunctionDefinition && D.getCXXScopeSpec().isSet() &&
4318               !isFriend && !isFunctionTemplateSpecialization &&
4319               !isExplicitSpecialization) {
4320      // An out-of-line member function declaration must also be a
4321      // definition (C++ [dcl.meaning]p1).
4322      // Note that this is not the case for explicit specializations of
4323      // function templates or member functions of class templates, per
4324      // C++ [temp.expl.spec]p2. We also allow these declarations as an extension
4325      // for compatibility with old SWIG code which likes to generate them.
4326      Diag(NewFD->getLocation(), diag::ext_out_of_line_declaration)
4327        << D.getCXXScopeSpec().getRange();
4328    }
4329  }
4330
4331
4332  // Handle attributes. We need to have merged decls when handling attributes
4333  // (for example to check for conflicts, etc).
4334  // FIXME: This needs to happen before we merge declarations. Then,
4335  // let attribute merging cope with attribute conflicts.
4336  ProcessDeclAttributes(S, NewFD, D,
4337                        /*NonInheritable=*/false, /*Inheritable=*/true);
4338
4339  // attributes declared post-definition are currently ignored
4340  // FIXME: This should happen during attribute merging
4341  if (Redeclaration && Previous.isSingleResult()) {
4342    const FunctionDecl *Def;
4343    FunctionDecl *PrevFD = dyn_cast<FunctionDecl>(Previous.getFoundDecl());
4344    if (PrevFD && PrevFD->hasBody(Def) && D.hasAttributes()) {
4345      Diag(NewFD->getLocation(), diag::warn_attribute_precede_definition);
4346      Diag(Def->getLocation(), diag::note_previous_definition);
4347    }
4348  }
4349
4350  AddKnownFunctionAttributes(NewFD);
4351
4352  if (NewFD->hasAttr<OverloadableAttr>() &&
4353      !NewFD->getType()->getAs<FunctionProtoType>()) {
4354    Diag(NewFD->getLocation(),
4355         diag::err_attribute_overloadable_no_prototype)
4356      << NewFD;
4357
4358    // Turn this into a variadic function with no parameters.
4359    const FunctionType *FT = NewFD->getType()->getAs<FunctionType>();
4360    FunctionProtoType::ExtProtoInfo EPI;
4361    EPI.Variadic = true;
4362    EPI.ExtInfo = FT->getExtInfo();
4363
4364    QualType R = Context.getFunctionType(FT->getResultType(), 0, 0, EPI);
4365    NewFD->setType(R);
4366  }
4367
4368  // If there's a #pragma GCC visibility in scope, and this isn't a class
4369  // member, set the visibility of this function.
4370  if (NewFD->getLinkage() == ExternalLinkage && !DC->isRecord())
4371    AddPushedVisibilityAttribute(NewFD);
4372
4373  // If this is a locally-scoped extern C function, update the
4374  // map of such names.
4375  if (CurContext->isFunctionOrMethod() && NewFD->isExternC()
4376      && !NewFD->isInvalidDecl())
4377    RegisterLocallyScopedExternCDecl(NewFD, Previous, S);
4378
4379  // Set this FunctionDecl's range up to the right paren.
4380  NewFD->setRangeEnd(D.getSourceRange().getEnd());
4381
4382  if (getLangOptions().CPlusPlus) {
4383    if (FunctionTemplate) {
4384      if (NewFD->isInvalidDecl())
4385        FunctionTemplate->setInvalidDecl();
4386      return FunctionTemplate;
4387    }
4388  }
4389
4390  MarkUnusedFileScopedDecl(NewFD);
4391
4392  if (getLangOptions().CUDA)
4393    if (IdentifierInfo *II = NewFD->getIdentifier())
4394      if (!NewFD->isInvalidDecl() &&
4395          NewFD->getDeclContext()->getRedeclContext()->isTranslationUnit()) {
4396        if (II->isStr("cudaConfigureCall")) {
4397          if (!R->getAs<FunctionType>()->getResultType()->isScalarType())
4398            Diag(NewFD->getLocation(), diag::err_config_scalar_return);
4399
4400          Context.setcudaConfigureCallDecl(NewFD);
4401        }
4402      }
4403
4404  return NewFD;
4405}
4406
4407/// \brief Perform semantic checking of a new function declaration.
4408///
4409/// Performs semantic analysis of the new function declaration
4410/// NewFD. This routine performs all semantic checking that does not
4411/// require the actual declarator involved in the declaration, and is
4412/// used both for the declaration of functions as they are parsed
4413/// (called via ActOnDeclarator) and for the declaration of functions
4414/// that have been instantiated via C++ template instantiation (called
4415/// via InstantiateDecl).
4416///
4417/// \param IsExplicitSpecialiation whether this new function declaration is
4418/// an explicit specialization of the previous declaration.
4419///
4420/// This sets NewFD->isInvalidDecl() to true if there was an error.
4421void Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD,
4422                                    LookupResult &Previous,
4423                                    bool IsExplicitSpecialization,
4424                                    bool &Redeclaration) {
4425  // If NewFD is already known erroneous, don't do any of this checking.
4426  if (NewFD->isInvalidDecl()) {
4427    // If this is a class member, mark the class invalid immediately.
4428    // This avoids some consistency errors later.
4429    if (isa<CXXMethodDecl>(NewFD))
4430      cast<CXXMethodDecl>(NewFD)->getParent()->setInvalidDecl();
4431
4432    return;
4433  }
4434
4435  if (NewFD->getResultType()->isVariablyModifiedType()) {
4436    // Functions returning a variably modified type violate C99 6.7.5.2p2
4437    // because all functions have linkage.
4438    Diag(NewFD->getLocation(), diag::err_vm_func_decl);
4439    return NewFD->setInvalidDecl();
4440  }
4441
4442  if (NewFD->isMain())
4443    CheckMain(NewFD);
4444
4445  // Check for a previous declaration of this name.
4446  if (Previous.empty() && NewFD->isExternC()) {
4447    // Since we did not find anything by this name and we're declaring
4448    // an extern "C" function, look for a non-visible extern "C"
4449    // declaration with the same name.
4450    llvm::DenseMap<DeclarationName, NamedDecl *>::iterator Pos
4451      = LocallyScopedExternalDecls.find(NewFD->getDeclName());
4452    if (Pos != LocallyScopedExternalDecls.end())
4453      Previous.addDecl(Pos->second);
4454  }
4455
4456  // Merge or overload the declaration with an existing declaration of
4457  // the same name, if appropriate.
4458  if (!Previous.empty()) {
4459    // Determine whether NewFD is an overload of PrevDecl or
4460    // a declaration that requires merging. If it's an overload,
4461    // there's no more work to do here; we'll just add the new
4462    // function to the scope.
4463
4464    NamedDecl *OldDecl = 0;
4465    if (!AllowOverloadingOfFunction(Previous, Context)) {
4466      Redeclaration = true;
4467      OldDecl = Previous.getFoundDecl();
4468    } else {
4469      switch (CheckOverload(S, NewFD, Previous, OldDecl,
4470                            /*NewIsUsingDecl*/ false)) {
4471      case Ovl_Match:
4472        Redeclaration = true;
4473        break;
4474
4475      case Ovl_NonFunction:
4476        Redeclaration = true;
4477        break;
4478
4479      case Ovl_Overload:
4480        Redeclaration = false;
4481        break;
4482      }
4483
4484      if (!getLangOptions().CPlusPlus && !NewFD->hasAttr<OverloadableAttr>()) {
4485        // If a function name is overloadable in C, then every function
4486        // with that name must be marked "overloadable".
4487        Diag(NewFD->getLocation(), diag::err_attribute_overloadable_missing)
4488          << Redeclaration << NewFD;
4489        NamedDecl *OverloadedDecl = 0;
4490        if (Redeclaration)
4491          OverloadedDecl = OldDecl;
4492        else if (!Previous.empty())
4493          OverloadedDecl = Previous.getRepresentativeDecl();
4494        if (OverloadedDecl)
4495          Diag(OverloadedDecl->getLocation(),
4496               diag::note_attribute_overloadable_prev_overload);
4497        NewFD->addAttr(::new (Context) OverloadableAttr(SourceLocation(),
4498                                                        Context));
4499      }
4500    }
4501
4502    if (Redeclaration) {
4503      // NewFD and OldDecl represent declarations that need to be
4504      // merged.
4505      if (MergeFunctionDecl(NewFD, OldDecl))
4506        return NewFD->setInvalidDecl();
4507
4508      Previous.clear();
4509      Previous.addDecl(OldDecl);
4510
4511      if (FunctionTemplateDecl *OldTemplateDecl
4512                                    = dyn_cast<FunctionTemplateDecl>(OldDecl)) {
4513        NewFD->setPreviousDeclaration(OldTemplateDecl->getTemplatedDecl());
4514        FunctionTemplateDecl *NewTemplateDecl
4515          = NewFD->getDescribedFunctionTemplate();
4516        assert(NewTemplateDecl && "Template/non-template mismatch");
4517        if (CXXMethodDecl *Method
4518              = dyn_cast<CXXMethodDecl>(NewTemplateDecl->getTemplatedDecl())) {
4519          Method->setAccess(OldTemplateDecl->getAccess());
4520          NewTemplateDecl->setAccess(OldTemplateDecl->getAccess());
4521        }
4522
4523        // If this is an explicit specialization of a member that is a function
4524        // template, mark it as a member specialization.
4525        if (IsExplicitSpecialization &&
4526            NewTemplateDecl->getInstantiatedFromMemberTemplate()) {
4527          NewTemplateDecl->setMemberSpecialization();
4528          assert(OldTemplateDecl->isMemberSpecialization());
4529        }
4530      } else {
4531        if (isa<CXXMethodDecl>(NewFD)) // Set access for out-of-line definitions
4532          NewFD->setAccess(OldDecl->getAccess());
4533        NewFD->setPreviousDeclaration(cast<FunctionDecl>(OldDecl));
4534      }
4535    }
4536  }
4537
4538  // Semantic checking for this function declaration (in isolation).
4539  if (getLangOptions().CPlusPlus) {
4540    // C++-specific checks.
4541    if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(NewFD)) {
4542      CheckConstructor(Constructor);
4543    } else if (CXXDestructorDecl *Destructor =
4544                dyn_cast<CXXDestructorDecl>(NewFD)) {
4545      CXXRecordDecl *Record = Destructor->getParent();
4546      QualType ClassType = Context.getTypeDeclType(Record);
4547
4548      // FIXME: Shouldn't we be able to perform this check even when the class
4549      // type is dependent? Both gcc and edg can handle that.
4550      if (!ClassType->isDependentType()) {
4551        DeclarationName Name
4552          = Context.DeclarationNames.getCXXDestructorName(
4553                                        Context.getCanonicalType(ClassType));
4554        if (NewFD->getDeclName() != Name) {
4555          Diag(NewFD->getLocation(), diag::err_destructor_name);
4556          return NewFD->setInvalidDecl();
4557        }
4558      }
4559    } else if (CXXConversionDecl *Conversion
4560               = dyn_cast<CXXConversionDecl>(NewFD)) {
4561      ActOnConversionDeclarator(Conversion);
4562    }
4563
4564    // Find any virtual functions that this function overrides.
4565    if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(NewFD)) {
4566      if (!Method->isFunctionTemplateSpecialization() &&
4567          !Method->getDescribedFunctionTemplate()) {
4568        if (AddOverriddenMethods(Method->getParent(), Method)) {
4569          // If the function was marked as "static", we have a problem.
4570          if (NewFD->getStorageClass() == SC_Static) {
4571            Diag(NewFD->getLocation(), diag::err_static_overrides_virtual)
4572              << NewFD->getDeclName();
4573            for (CXXMethodDecl::method_iterator
4574                      Overridden = Method->begin_overridden_methods(),
4575                   OverriddenEnd = Method->end_overridden_methods();
4576                 Overridden != OverriddenEnd;
4577                 ++Overridden) {
4578              Diag((*Overridden)->getLocation(),
4579                   diag::note_overridden_virtual_function);
4580            }
4581          }
4582        }
4583      }
4584    }
4585
4586    // Extra checking for C++ overloaded operators (C++ [over.oper]).
4587    if (NewFD->isOverloadedOperator() &&
4588        CheckOverloadedOperatorDeclaration(NewFD))
4589      return NewFD->setInvalidDecl();
4590
4591    // Extra checking for C++0x literal operators (C++0x [over.literal]).
4592    if (NewFD->getLiteralIdentifier() &&
4593        CheckLiteralOperatorDeclaration(NewFD))
4594      return NewFD->setInvalidDecl();
4595
4596    // In C++, check default arguments now that we have merged decls. Unless
4597    // the lexical context is the class, because in this case this is done
4598    // during delayed parsing anyway.
4599    if (!CurContext->isRecord())
4600      CheckCXXDefaultArguments(NewFD);
4601
4602    // If this function declares a builtin function, check the type of this
4603    // declaration against the expected type for the builtin.
4604    if (unsigned BuiltinID = NewFD->getBuiltinID()) {
4605      ASTContext::GetBuiltinTypeError Error;
4606      QualType T = Context.GetBuiltinType(BuiltinID, Error);
4607      if (!T.isNull() && !Context.hasSameType(T, NewFD->getType())) {
4608        // The type of this function differs from the type of the builtin,
4609        // so forget about the builtin entirely.
4610        Context.BuiltinInfo.ForgetBuiltin(BuiltinID, Context.Idents);
4611      }
4612    }
4613  }
4614}
4615
4616void Sema::CheckMain(FunctionDecl* FD) {
4617  // C++ [basic.start.main]p3:  A program that declares main to be inline
4618  //   or static is ill-formed.
4619  // C99 6.7.4p4:  In a hosted environment, the inline function specifier
4620  //   shall not appear in a declaration of main.
4621  // static main is not an error under C99, but we should warn about it.
4622  bool isInline = FD->isInlineSpecified();
4623  bool isStatic = FD->getStorageClass() == SC_Static;
4624  if (isInline || isStatic) {
4625    unsigned diagID = diag::warn_unusual_main_decl;
4626    if (isInline || getLangOptions().CPlusPlus)
4627      diagID = diag::err_unusual_main_decl;
4628
4629    int which = isStatic + (isInline << 1) - 1;
4630    Diag(FD->getLocation(), diagID) << which;
4631  }
4632
4633  QualType T = FD->getType();
4634  assert(T->isFunctionType() && "function decl is not of function type");
4635  const FunctionType* FT = T->getAs<FunctionType>();
4636
4637  if (!Context.hasSameUnqualifiedType(FT->getResultType(), Context.IntTy)) {
4638    Diag(FD->getTypeSpecStartLoc(), diag::err_main_returns_nonint);
4639    FD->setInvalidDecl(true);
4640  }
4641
4642  // Treat protoless main() as nullary.
4643  if (isa<FunctionNoProtoType>(FT)) return;
4644
4645  const FunctionProtoType* FTP = cast<const FunctionProtoType>(FT);
4646  unsigned nparams = FTP->getNumArgs();
4647  assert(FD->getNumParams() == nparams);
4648
4649  bool HasExtraParameters = (nparams > 3);
4650
4651  // Darwin passes an undocumented fourth argument of type char**.  If
4652  // other platforms start sprouting these, the logic below will start
4653  // getting shifty.
4654  if (nparams == 4 && Context.Target.getTriple().isOSDarwin())
4655    HasExtraParameters = false;
4656
4657  if (HasExtraParameters) {
4658    Diag(FD->getLocation(), diag::err_main_surplus_args) << nparams;
4659    FD->setInvalidDecl(true);
4660    nparams = 3;
4661  }
4662
4663  // FIXME: a lot of the following diagnostics would be improved
4664  // if we had some location information about types.
4665
4666  QualType CharPP =
4667    Context.getPointerType(Context.getPointerType(Context.CharTy));
4668  QualType Expected[] = { Context.IntTy, CharPP, CharPP, CharPP };
4669
4670  for (unsigned i = 0; i < nparams; ++i) {
4671    QualType AT = FTP->getArgType(i);
4672
4673    bool mismatch = true;
4674
4675    if (Context.hasSameUnqualifiedType(AT, Expected[i]))
4676      mismatch = false;
4677    else if (Expected[i] == CharPP) {
4678      // As an extension, the following forms are okay:
4679      //   char const **
4680      //   char const * const *
4681      //   char * const *
4682
4683      QualifierCollector qs;
4684      const PointerType* PT;
4685      if ((PT = qs.strip(AT)->getAs<PointerType>()) &&
4686          (PT = qs.strip(PT->getPointeeType())->getAs<PointerType>()) &&
4687          (QualType(qs.strip(PT->getPointeeType()), 0) == Context.CharTy)) {
4688        qs.removeConst();
4689        mismatch = !qs.empty();
4690      }
4691    }
4692
4693    if (mismatch) {
4694      Diag(FD->getLocation(), diag::err_main_arg_wrong) << i << Expected[i];
4695      // TODO: suggest replacing given type with expected type
4696      FD->setInvalidDecl(true);
4697    }
4698  }
4699
4700  if (nparams == 1 && !FD->isInvalidDecl()) {
4701    Diag(FD->getLocation(), diag::warn_main_one_arg);
4702  }
4703
4704  if (!FD->isInvalidDecl() && FD->getDescribedFunctionTemplate()) {
4705    Diag(FD->getLocation(), diag::err_main_template_decl);
4706    FD->setInvalidDecl();
4707  }
4708}
4709
4710bool Sema::CheckForConstantInitializer(Expr *Init, QualType DclT) {
4711  // FIXME: Need strict checking.  In C89, we need to check for
4712  // any assignment, increment, decrement, function-calls, or
4713  // commas outside of a sizeof.  In C99, it's the same list,
4714  // except that the aforementioned are allowed in unevaluated
4715  // expressions.  Everything else falls under the
4716  // "may accept other forms of constant expressions" exception.
4717  // (We never end up here for C++, so the constant expression
4718  // rules there don't matter.)
4719  if (Init->isConstantInitializer(Context, false))
4720    return false;
4721  Diag(Init->getExprLoc(), diag::err_init_element_not_constant)
4722    << Init->getSourceRange();
4723  return true;
4724}
4725
4726namespace {
4727  // Visits an initialization expression to see if OrigDecl is evaluated in
4728  // its own initialization and throws a warning if it does.
4729  class SelfReferenceChecker
4730      : public EvaluatedExprVisitor<SelfReferenceChecker> {
4731    Sema &S;
4732    Decl *OrigDecl;
4733
4734  public:
4735    typedef EvaluatedExprVisitor<SelfReferenceChecker> Inherited;
4736
4737    SelfReferenceChecker(Sema &S, Decl *OrigDecl) : Inherited(S.Context),
4738                                                    S(S), OrigDecl(OrigDecl) { }
4739
4740    void VisitExpr(Expr *E) {
4741      if (isa<ObjCMessageExpr>(*E)) return;
4742      Inherited::VisitExpr(E);
4743    }
4744
4745    void VisitImplicitCastExpr(ImplicitCastExpr *E) {
4746      CheckForSelfReference(E);
4747      Inherited::VisitImplicitCastExpr(E);
4748    }
4749
4750    void CheckForSelfReference(ImplicitCastExpr *E) {
4751      if (E->getCastKind() != CK_LValueToRValue) return;
4752      Expr* SubExpr = E->getSubExpr()->IgnoreParenImpCasts();
4753      DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(SubExpr);
4754      if (!DRE) return;
4755      Decl* ReferenceDecl = DRE->getDecl();
4756      if (OrigDecl != ReferenceDecl) return;
4757      LookupResult Result(S, DRE->getNameInfo(), Sema::LookupOrdinaryName,
4758                          Sema::NotForRedeclaration);
4759      S.Diag(SubExpr->getLocStart(), diag::warn_uninit_self_reference_in_init)
4760        << Result.getLookupName() << OrigDecl->getLocation()
4761        << SubExpr->getSourceRange();
4762    }
4763  };
4764}
4765
4766/// AddInitializerToDecl - Adds the initializer Init to the
4767/// declaration dcl. If DirectInit is true, this is C++ direct
4768/// initialization rather than copy initialization.
4769void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init,
4770                                bool DirectInit, bool TypeMayContainAuto) {
4771  // If there is no declaration, there was an error parsing it.  Just ignore
4772  // the initializer.
4773  if (RealDecl == 0 || RealDecl->isInvalidDecl())
4774    return;
4775
4776  // Check for self-references within variable initializers.
4777  if (VarDecl *vd = dyn_cast<VarDecl>(RealDecl)) {
4778    // Variables declared within a function/method body are handled
4779    // by a dataflow analysis.
4780    if (!vd->hasLocalStorage() && !vd->isStaticLocal())
4781      SelfReferenceChecker(*this, RealDecl).VisitExpr(Init);
4782  }
4783  else {
4784    SelfReferenceChecker(*this, RealDecl).VisitExpr(Init);
4785  }
4786
4787  if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(RealDecl)) {
4788    // With declarators parsed the way they are, the parser cannot
4789    // distinguish between a normal initializer and a pure-specifier.
4790    // Thus this grotesque test.
4791    IntegerLiteral *IL;
4792    if ((IL = dyn_cast<IntegerLiteral>(Init)) && IL->getValue() == 0 &&
4793        Context.getCanonicalType(IL->getType()) == Context.IntTy)
4794      CheckPureMethod(Method, Init->getSourceRange());
4795    else {
4796      Diag(Method->getLocation(), diag::err_member_function_initialization)
4797        << Method->getDeclName() << Init->getSourceRange();
4798      Method->setInvalidDecl();
4799    }
4800    return;
4801  }
4802
4803  VarDecl *VDecl = dyn_cast<VarDecl>(RealDecl);
4804  if (!VDecl) {
4805    if (getLangOptions().CPlusPlus &&
4806        RealDecl->getLexicalDeclContext()->isRecord() &&
4807        isa<NamedDecl>(RealDecl))
4808      Diag(RealDecl->getLocation(), diag::err_member_initialization);
4809    else
4810      Diag(RealDecl->getLocation(), diag::err_illegal_initializer);
4811    RealDecl->setInvalidDecl();
4812    return;
4813  }
4814
4815  // C++0x [decl.spec.auto]p6. Deduce the type which 'auto' stands in for.
4816  if (TypeMayContainAuto && VDecl->getType()->getContainedAutoType()) {
4817    TypeSourceInfo *DeducedType = 0;
4818    if (!DeduceAutoType(VDecl->getTypeSourceInfo(), Init, DeducedType))
4819      Diag(VDecl->getLocation(), diag::err_auto_var_deduction_failure)
4820        << VDecl->getDeclName() << VDecl->getType() << Init->getType()
4821        << Init->getSourceRange();
4822    if (!DeducedType) {
4823      RealDecl->setInvalidDecl();
4824      return;
4825    }
4826    VDecl->setTypeSourceInfo(DeducedType);
4827    VDecl->setType(DeducedType->getType());
4828
4829    // If this is a redeclaration, check that the type we just deduced matches
4830    // the previously declared type.
4831    if (VarDecl *Old = VDecl->getPreviousDeclaration())
4832      MergeVarDeclTypes(VDecl, Old);
4833  }
4834
4835
4836  // A definition must end up with a complete type, which means it must be
4837  // complete with the restriction that an array type might be completed by the
4838  // initializer; note that later code assumes this restriction.
4839  QualType BaseDeclType = VDecl->getType();
4840  if (const ArrayType *Array = Context.getAsIncompleteArrayType(BaseDeclType))
4841    BaseDeclType = Array->getElementType();
4842  if (RequireCompleteType(VDecl->getLocation(), BaseDeclType,
4843                          diag::err_typecheck_decl_incomplete_type)) {
4844    RealDecl->setInvalidDecl();
4845    return;
4846  }
4847
4848  // The variable can not have an abstract class type.
4849  if (RequireNonAbstractType(VDecl->getLocation(), VDecl->getType(),
4850                             diag::err_abstract_type_in_decl,
4851                             AbstractVariableType))
4852    VDecl->setInvalidDecl();
4853
4854  const VarDecl *Def;
4855  if ((Def = VDecl->getDefinition()) && Def != VDecl) {
4856    Diag(VDecl->getLocation(), diag::err_redefinition)
4857      << VDecl->getDeclName();
4858    Diag(Def->getLocation(), diag::note_previous_definition);
4859    VDecl->setInvalidDecl();
4860    return;
4861  }
4862
4863  const VarDecl* PrevInit = 0;
4864  if (getLangOptions().CPlusPlus) {
4865    // C++ [class.static.data]p4
4866    //   If a static data member is of const integral or const
4867    //   enumeration type, its declaration in the class definition can
4868    //   specify a constant-initializer which shall be an integral
4869    //   constant expression (5.19). In that case, the member can appear
4870    //   in integral constant expressions. The member shall still be
4871    //   defined in a namespace scope if it is used in the program and the
4872    //   namespace scope definition shall not contain an initializer.
4873    //
4874    // We already performed a redefinition check above, but for static
4875    // data members we also need to check whether there was an in-class
4876    // declaration with an initializer.
4877    if (VDecl->isStaticDataMember() && VDecl->getAnyInitializer(PrevInit)) {
4878      Diag(VDecl->getLocation(), diag::err_redefinition) << VDecl->getDeclName();
4879      Diag(PrevInit->getLocation(), diag::note_previous_definition);
4880      return;
4881    }
4882
4883    if (VDecl->hasLocalStorage())
4884      getCurFunction()->setHasBranchProtectedScope();
4885
4886    if (DiagnoseUnexpandedParameterPack(Init, UPPC_Initializer)) {
4887      VDecl->setInvalidDecl();
4888      return;
4889    }
4890  }
4891
4892  // Capture the variable that is being initialized and the style of
4893  // initialization.
4894  InitializedEntity Entity = InitializedEntity::InitializeVariable(VDecl);
4895
4896  // FIXME: Poor source location information.
4897  InitializationKind Kind
4898    = DirectInit? InitializationKind::CreateDirect(VDecl->getLocation(),
4899                                                   Init->getLocStart(),
4900                                                   Init->getLocEnd())
4901                : InitializationKind::CreateCopy(VDecl->getLocation(),
4902                                                 Init->getLocStart());
4903
4904  // Get the decls type and save a reference for later, since
4905  // CheckInitializerTypes may change it.
4906  QualType DclT = VDecl->getType(), SavT = DclT;
4907  if (VDecl->isLocalVarDecl()) {
4908    if (VDecl->hasExternalStorage()) { // C99 6.7.8p5
4909      Diag(VDecl->getLocation(), diag::err_block_extern_cant_init);
4910      VDecl->setInvalidDecl();
4911    } else if (!VDecl->isInvalidDecl()) {
4912      InitializationSequence InitSeq(*this, Entity, Kind, &Init, 1);
4913      ExprResult Result = InitSeq.Perform(*this, Entity, Kind,
4914                                                MultiExprArg(*this, &Init, 1),
4915                                                &DclT);
4916      if (Result.isInvalid()) {
4917        VDecl->setInvalidDecl();
4918        return;
4919      }
4920
4921      Init = Result.takeAs<Expr>();
4922
4923      // C++ 3.6.2p2, allow dynamic initialization of static initializers.
4924      // Don't check invalid declarations to avoid emitting useless diagnostics.
4925      if (!getLangOptions().CPlusPlus && !VDecl->isInvalidDecl()) {
4926        if (VDecl->getStorageClass() == SC_Static) // C99 6.7.8p4.
4927          CheckForConstantInitializer(Init, DclT);
4928      }
4929    }
4930  } else if (VDecl->isStaticDataMember() &&
4931             VDecl->getLexicalDeclContext()->isRecord()) {
4932    // This is an in-class initialization for a static data member, e.g.,
4933    //
4934    // struct S {
4935    //   static const int value = 17;
4936    // };
4937
4938    // Try to perform the initialization regardless.
4939    if (!VDecl->isInvalidDecl()) {
4940      InitializationSequence InitSeq(*this, Entity, Kind, &Init, 1);
4941      ExprResult Result = InitSeq.Perform(*this, Entity, Kind,
4942                                          MultiExprArg(*this, &Init, 1),
4943                                          &DclT);
4944      if (Result.isInvalid()) {
4945        VDecl->setInvalidDecl();
4946        return;
4947      }
4948
4949      Init = Result.takeAs<Expr>();
4950    }
4951
4952    // C++ [class.mem]p4:
4953    //   A member-declarator can contain a constant-initializer only
4954    //   if it declares a static member (9.4) of const integral or
4955    //   const enumeration type, see 9.4.2.
4956    QualType T = VDecl->getType();
4957
4958    // Do nothing on dependent types.
4959    if (T->isDependentType()) {
4960
4961    // Require constness.
4962    } else if (!T.isConstQualified()) {
4963      Diag(VDecl->getLocation(), diag::err_in_class_initializer_non_const)
4964        << Init->getSourceRange();
4965      VDecl->setInvalidDecl();
4966
4967    // We allow integer constant expressions in all cases.
4968    } else if (T->isIntegralOrEnumerationType()) {
4969      if (!Init->isValueDependent()) {
4970        // Check whether the expression is a constant expression.
4971        llvm::APSInt Value;
4972        SourceLocation Loc;
4973        if (!Init->isIntegerConstantExpr(Value, Context, &Loc)) {
4974          Diag(Loc, diag::err_in_class_initializer_non_constant)
4975            << Init->getSourceRange();
4976          VDecl->setInvalidDecl();
4977        }
4978      }
4979
4980    // We allow floating-point constants as an extension in C++03, and
4981    // C++0x has far more complicated rules that we don't really
4982    // implement fully.
4983    } else {
4984      bool Allowed = false;
4985      if (getLangOptions().CPlusPlus0x) {
4986        Allowed = T->isLiteralType();
4987      } else if (T->isFloatingType()) { // also permits complex, which is ok
4988        Diag(VDecl->getLocation(), diag::ext_in_class_initializer_float_type)
4989          << T << Init->getSourceRange();
4990        Allowed = true;
4991      }
4992
4993      if (!Allowed) {
4994        Diag(VDecl->getLocation(), diag::err_in_class_initializer_bad_type)
4995          << T << Init->getSourceRange();
4996        VDecl->setInvalidDecl();
4997
4998      // TODO: there are probably expressions that pass here that shouldn't.
4999      } else if (!Init->isValueDependent() &&
5000                 !Init->isConstantInitializer(Context, false)) {
5001        Diag(Init->getExprLoc(), diag::err_in_class_initializer_non_constant)
5002          << Init->getSourceRange();
5003        VDecl->setInvalidDecl();
5004      }
5005    }
5006  } else if (VDecl->isFileVarDecl()) {
5007    if (VDecl->getStorageClassAsWritten() == SC_Extern &&
5008        (!getLangOptions().CPlusPlus ||
5009         !Context.getBaseElementType(VDecl->getType()).isConstQualified()))
5010      Diag(VDecl->getLocation(), diag::warn_extern_init);
5011    if (!VDecl->isInvalidDecl()) {
5012      InitializationSequence InitSeq(*this, Entity, Kind, &Init, 1);
5013      ExprResult Result = InitSeq.Perform(*this, Entity, Kind,
5014                                                MultiExprArg(*this, &Init, 1),
5015                                                &DclT);
5016      if (Result.isInvalid()) {
5017        VDecl->setInvalidDecl();
5018        return;
5019      }
5020
5021      Init = Result.takeAs<Expr>();
5022    }
5023
5024    // C++ 3.6.2p2, allow dynamic initialization of static initializers.
5025    // Don't check invalid declarations to avoid emitting useless diagnostics.
5026    if (!getLangOptions().CPlusPlus && !VDecl->isInvalidDecl()) {
5027      // C99 6.7.8p4. All file scoped initializers need to be constant.
5028      CheckForConstantInitializer(Init, DclT);
5029    }
5030  }
5031  // If the type changed, it means we had an incomplete type that was
5032  // completed by the initializer. For example:
5033  //   int ary[] = { 1, 3, 5 };
5034  // "ary" transitions from a VariableArrayType to a ConstantArrayType.
5035  if (!VDecl->isInvalidDecl() && (DclT != SavT)) {
5036    VDecl->setType(DclT);
5037    Init->setType(DclT);
5038  }
5039
5040
5041  // If this variable is a local declaration with record type, make sure it
5042  // doesn't have a flexible member initialization.  We only support this as a
5043  // global/static definition.
5044  if (VDecl->hasLocalStorage())
5045    if (const RecordType *RT = VDecl->getType()->getAs<RecordType>())
5046      if (RT->getDecl()->hasFlexibleArrayMember()) {
5047        // Check whether the initializer tries to initialize the flexible
5048        // array member itself to anything other than an empty initializer list.
5049        if (InitListExpr *ILE = dyn_cast<InitListExpr>(Init)) {
5050          unsigned Index = std::distance(RT->getDecl()->field_begin(),
5051                                         RT->getDecl()->field_end()) - 1;
5052          if (Index < ILE->getNumInits() &&
5053              !(isa<InitListExpr>(ILE->getInit(Index)) &&
5054                cast<InitListExpr>(ILE->getInit(Index))->getNumInits() == 0)) {
5055            Diag(VDecl->getLocation(), diag::err_nonstatic_flexible_variable);
5056            VDecl->setInvalidDecl();
5057          }
5058        }
5059      }
5060
5061  // Check any implicit conversions within the expression.
5062  CheckImplicitConversions(Init, VDecl->getLocation());
5063
5064  Init = MaybeCreateExprWithCleanups(Init);
5065  // Attach the initializer to the decl.
5066  VDecl->setInit(Init);
5067
5068  CheckCompleteVariableDeclaration(VDecl);
5069}
5070
5071/// ActOnInitializerError - Given that there was an error parsing an
5072/// initializer for the given declaration, try to return to some form
5073/// of sanity.
5074void Sema::ActOnInitializerError(Decl *D) {
5075  // Our main concern here is re-establishing invariants like "a
5076  // variable's type is either dependent or complete".
5077  if (!D || D->isInvalidDecl()) return;
5078
5079  VarDecl *VD = dyn_cast<VarDecl>(D);
5080  if (!VD) return;
5081
5082  // Auto types are meaningless if we can't make sense of the initializer.
5083  if (ParsingInitForAutoVars.count(D)) {
5084    D->setInvalidDecl();
5085    return;
5086  }
5087
5088  QualType Ty = VD->getType();
5089  if (Ty->isDependentType()) return;
5090
5091  // Require a complete type.
5092  if (RequireCompleteType(VD->getLocation(),
5093                          Context.getBaseElementType(Ty),
5094                          diag::err_typecheck_decl_incomplete_type)) {
5095    VD->setInvalidDecl();
5096    return;
5097  }
5098
5099  // Require an abstract type.
5100  if (RequireNonAbstractType(VD->getLocation(), Ty,
5101                             diag::err_abstract_type_in_decl,
5102                             AbstractVariableType)) {
5103    VD->setInvalidDecl();
5104    return;
5105  }
5106
5107  // Don't bother complaining about constructors or destructors,
5108  // though.
5109}
5110
5111void Sema::ActOnUninitializedDecl(Decl *RealDecl,
5112                                  bool TypeMayContainAuto) {
5113  // If there is no declaration, there was an error parsing it. Just ignore it.
5114  if (RealDecl == 0)
5115    return;
5116
5117  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {
5118    QualType Type = Var->getType();
5119
5120    // C++0x [dcl.spec.auto]p3
5121    if (TypeMayContainAuto && Type->getContainedAutoType()) {
5122      Diag(Var->getLocation(), diag::err_auto_var_requires_init)
5123        << Var->getDeclName() << Type;
5124      Var->setInvalidDecl();
5125      return;
5126    }
5127
5128    switch (Var->isThisDeclarationADefinition()) {
5129    case VarDecl::Definition:
5130      if (!Var->isStaticDataMember() || !Var->getAnyInitializer())
5131        break;
5132
5133      // We have an out-of-line definition of a static data member
5134      // that has an in-class initializer, so we type-check this like
5135      // a declaration.
5136      //
5137      // Fall through
5138
5139    case VarDecl::DeclarationOnly:
5140      // It's only a declaration.
5141
5142      // Block scope. C99 6.7p7: If an identifier for an object is
5143      // declared with no linkage (C99 6.2.2p6), the type for the
5144      // object shall be complete.
5145      if (!Type->isDependentType() && Var->isLocalVarDecl() &&
5146          !Var->getLinkage() && !Var->isInvalidDecl() &&
5147          RequireCompleteType(Var->getLocation(), Type,
5148                              diag::err_typecheck_decl_incomplete_type))
5149        Var->setInvalidDecl();
5150
5151      // Make sure that the type is not abstract.
5152      if (!Type->isDependentType() && !Var->isInvalidDecl() &&
5153          RequireNonAbstractType(Var->getLocation(), Type,
5154                                 diag::err_abstract_type_in_decl,
5155                                 AbstractVariableType))
5156        Var->setInvalidDecl();
5157      return;
5158
5159    case VarDecl::TentativeDefinition:
5160      // File scope. C99 6.9.2p2: A declaration of an identifier for an
5161      // object that has file scope without an initializer, and without a
5162      // storage-class specifier or with the storage-class specifier "static",
5163      // constitutes a tentative definition. Note: A tentative definition with
5164      // external linkage is valid (C99 6.2.2p5).
5165      if (!Var->isInvalidDecl()) {
5166        if (const IncompleteArrayType *ArrayT
5167                                    = Context.getAsIncompleteArrayType(Type)) {
5168          if (RequireCompleteType(Var->getLocation(),
5169                                  ArrayT->getElementType(),
5170                                  diag::err_illegal_decl_array_incomplete_type))
5171            Var->setInvalidDecl();
5172        } else if (Var->getStorageClass() == SC_Static) {
5173          // C99 6.9.2p3: If the declaration of an identifier for an object is
5174          // a tentative definition and has internal linkage (C99 6.2.2p3), the
5175          // declared type shall not be an incomplete type.
5176          // NOTE: code such as the following
5177          //     static struct s;
5178          //     struct s { int a; };
5179          // is accepted by gcc. Hence here we issue a warning instead of
5180          // an error and we do not invalidate the static declaration.
5181          // NOTE: to avoid multiple warnings, only check the first declaration.
5182          if (Var->getPreviousDeclaration() == 0)
5183            RequireCompleteType(Var->getLocation(), Type,
5184                                diag::ext_typecheck_decl_incomplete_type);
5185        }
5186      }
5187
5188      // Record the tentative definition; we're done.
5189      if (!Var->isInvalidDecl())
5190        TentativeDefinitions.push_back(Var);
5191      return;
5192    }
5193
5194    // Provide a specific diagnostic for uninitialized variable
5195    // definitions with incomplete array type.
5196    if (Type->isIncompleteArrayType()) {
5197      Diag(Var->getLocation(),
5198           diag::err_typecheck_incomplete_array_needs_initializer);
5199      Var->setInvalidDecl();
5200      return;
5201    }
5202
5203    // Provide a specific diagnostic for uninitialized variable
5204    // definitions with reference type.
5205    if (Type->isReferenceType()) {
5206      Diag(Var->getLocation(), diag::err_reference_var_requires_init)
5207        << Var->getDeclName()
5208        << SourceRange(Var->getLocation(), Var->getLocation());
5209      Var->setInvalidDecl();
5210      return;
5211    }
5212
5213    // Do not attempt to type-check the default initializer for a
5214    // variable with dependent type.
5215    if (Type->isDependentType())
5216      return;
5217
5218    if (Var->isInvalidDecl())
5219      return;
5220
5221    if (RequireCompleteType(Var->getLocation(),
5222                            Context.getBaseElementType(Type),
5223                            diag::err_typecheck_decl_incomplete_type)) {
5224      Var->setInvalidDecl();
5225      return;
5226    }
5227
5228    // The variable can not have an abstract class type.
5229    if (RequireNonAbstractType(Var->getLocation(), Type,
5230                               diag::err_abstract_type_in_decl,
5231                               AbstractVariableType)) {
5232      Var->setInvalidDecl();
5233      return;
5234    }
5235
5236    const RecordType *Record
5237      = Context.getBaseElementType(Type)->getAs<RecordType>();
5238    if (Record && getLangOptions().CPlusPlus && !getLangOptions().CPlusPlus0x &&
5239        cast<CXXRecordDecl>(Record->getDecl())->isPOD()) {
5240      // C++03 [dcl.init]p9:
5241      //   If no initializer is specified for an object, and the
5242      //   object is of (possibly cv-qualified) non-POD class type (or
5243      //   array thereof), the object shall be default-initialized; if
5244      //   the object is of const-qualified type, the underlying class
5245      //   type shall have a user-declared default
5246      //   constructor. Otherwise, if no initializer is specified for
5247      //   a non- static object, the object and its subobjects, if
5248      //   any, have an indeterminate initial value); if the object
5249      //   or any of its subobjects are of const-qualified type, the
5250      //   program is ill-formed.
5251      // FIXME: DPG thinks it is very fishy that C++0x disables this.
5252    } else {
5253      // Check for jumps past the implicit initializer.  C++0x
5254      // clarifies that this applies to a "variable with automatic
5255      // storage duration", not a "local variable".
5256      if (getLangOptions().CPlusPlus && Var->hasLocalStorage())
5257        getCurFunction()->setHasBranchProtectedScope();
5258
5259      InitializedEntity Entity = InitializedEntity::InitializeVariable(Var);
5260      InitializationKind Kind
5261        = InitializationKind::CreateDefault(Var->getLocation());
5262
5263      InitializationSequence InitSeq(*this, Entity, Kind, 0, 0);
5264      ExprResult Init = InitSeq.Perform(*this, Entity, Kind,
5265                                        MultiExprArg(*this, 0, 0));
5266      if (Init.isInvalid())
5267        Var->setInvalidDecl();
5268      else if (Init.get())
5269        Var->setInit(MaybeCreateExprWithCleanups(Init.get()));
5270    }
5271
5272    CheckCompleteVariableDeclaration(Var);
5273  }
5274}
5275
5276void Sema::ActOnCXXForRangeDecl(Decl *D) {
5277  VarDecl *VD = dyn_cast<VarDecl>(D);
5278  if (!VD) {
5279    Diag(D->getLocation(), diag::err_for_range_decl_must_be_var);
5280    D->setInvalidDecl();
5281    return;
5282  }
5283
5284  VD->setCXXForRangeDecl(true);
5285
5286  // for-range-declaration cannot be given a storage class specifier.
5287  int Error = -1;
5288  switch (VD->getStorageClassAsWritten()) {
5289  case SC_None:
5290    break;
5291  case SC_Extern:
5292    Error = 0;
5293    break;
5294  case SC_Static:
5295    Error = 1;
5296    break;
5297  case SC_PrivateExtern:
5298    Error = 2;
5299    break;
5300  case SC_Auto:
5301    Error = 3;
5302    break;
5303  case SC_Register:
5304    Error = 4;
5305    break;
5306  }
5307  // FIXME: constexpr isn't allowed here.
5308  //if (DS.isConstexprSpecified())
5309  //  Error = 5;
5310  if (Error != -1) {
5311    Diag(VD->getOuterLocStart(), diag::err_for_range_storage_class)
5312      << VD->getDeclName() << Error;
5313    D->setInvalidDecl();
5314  }
5315}
5316
5317void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {
5318  if (var->isInvalidDecl()) return;
5319
5320  // All the following checks are C++ only.
5321  if (!getLangOptions().CPlusPlus) return;
5322
5323  QualType baseType = Context.getBaseElementType(var->getType());
5324  if (baseType->isDependentType()) return;
5325
5326  // __block variables might require us to capture a copy-initializer.
5327  if (var->hasAttr<BlocksAttr>()) {
5328    // It's currently invalid to ever have a __block variable with an
5329    // array type; should we diagnose that here?
5330
5331    // Regardless, we don't want to ignore array nesting when
5332    // constructing this copy.
5333    QualType type = var->getType();
5334
5335    if (type->isStructureOrClassType()) {
5336      SourceLocation poi = var->getLocation();
5337      Expr *varRef = new (Context) DeclRefExpr(var, type, VK_LValue, poi);
5338      ExprResult result =
5339        PerformCopyInitialization(
5340                        InitializedEntity::InitializeBlock(poi, type, false),
5341                                  poi, Owned(varRef));
5342      if (!result.isInvalid()) {
5343        result = MaybeCreateExprWithCleanups(result);
5344        Expr *init = result.takeAs<Expr>();
5345        Context.setBlockVarCopyInits(var, init);
5346      }
5347    }
5348  }
5349
5350  // Check for global constructors.
5351  if (!var->getDeclContext()->isDependentContext() &&
5352      var->hasGlobalStorage() &&
5353      !var->isStaticLocal() &&
5354      var->getInit() &&
5355      !var->getInit()->isConstantInitializer(Context,
5356                                             baseType->isReferenceType()))
5357    Diag(var->getLocation(), diag::warn_global_constructor)
5358      << var->getInit()->getSourceRange();
5359
5360  // Require the destructor.
5361  if (const RecordType *recordType = baseType->getAs<RecordType>())
5362    FinalizeVarWithDestructor(var, recordType);
5363}
5364
5365/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform
5366/// any semantic actions necessary after any initializer has been attached.
5367void
5368Sema::FinalizeDeclaration(Decl *ThisDecl) {
5369  // Note that we are no longer parsing the initializer for this declaration.
5370  ParsingInitForAutoVars.erase(ThisDecl);
5371}
5372
5373Sema::DeclGroupPtrTy
5374Sema::FinalizeDeclaratorGroup(Scope *S, const DeclSpec &DS,
5375                              Decl **Group, unsigned NumDecls) {
5376  llvm::SmallVector<Decl*, 8> Decls;
5377
5378  if (DS.isTypeSpecOwned())
5379    Decls.push_back(DS.getRepAsDecl());
5380
5381  for (unsigned i = 0; i != NumDecls; ++i)
5382    if (Decl *D = Group[i])
5383      Decls.push_back(D);
5384
5385  return BuildDeclaratorGroup(Decls.data(), Decls.size(),
5386                              DS.getTypeSpecType() == DeclSpec::TST_auto);
5387}
5388
5389/// BuildDeclaratorGroup - convert a list of declarations into a declaration
5390/// group, performing any necessary semantic checking.
5391Sema::DeclGroupPtrTy
5392Sema::BuildDeclaratorGroup(Decl **Group, unsigned NumDecls,
5393                           bool TypeMayContainAuto) {
5394  // C++0x [dcl.spec.auto]p7:
5395  //   If the type deduced for the template parameter U is not the same in each
5396  //   deduction, the program is ill-formed.
5397  // FIXME: When initializer-list support is added, a distinction is needed
5398  // between the deduced type U and the deduced type which 'auto' stands for.
5399  //   auto a = 0, b = { 1, 2, 3 };
5400  // is legal because the deduced type U is 'int' in both cases.
5401  if (TypeMayContainAuto && NumDecls > 1) {
5402    QualType Deduced;
5403    CanQualType DeducedCanon;
5404    VarDecl *DeducedDecl = 0;
5405    for (unsigned i = 0; i != NumDecls; ++i) {
5406      if (VarDecl *D = dyn_cast<VarDecl>(Group[i])) {
5407        AutoType *AT = D->getType()->getContainedAutoType();
5408        // Don't reissue diagnostics when instantiating a template.
5409        if (AT && D->isInvalidDecl())
5410          break;
5411        if (AT && AT->isDeduced()) {
5412          QualType U = AT->getDeducedType();
5413          CanQualType UCanon = Context.getCanonicalType(U);
5414          if (Deduced.isNull()) {
5415            Deduced = U;
5416            DeducedCanon = UCanon;
5417            DeducedDecl = D;
5418          } else if (DeducedCanon != UCanon) {
5419            Diag(D->getTypeSourceInfo()->getTypeLoc().getBeginLoc(),
5420                 diag::err_auto_different_deductions)
5421              << Deduced << DeducedDecl->getDeclName()
5422              << U << D->getDeclName()
5423              << DeducedDecl->getInit()->getSourceRange()
5424              << D->getInit()->getSourceRange();
5425            D->setInvalidDecl();
5426            break;
5427          }
5428        }
5429      }
5430    }
5431  }
5432
5433  return DeclGroupPtrTy::make(DeclGroupRef::Create(Context, Group, NumDecls));
5434}
5435
5436
5437/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()
5438/// to introduce parameters into function prototype scope.
5439Decl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {
5440  const DeclSpec &DS = D.getDeclSpec();
5441
5442  // Verify C99 6.7.5.3p2: The only SCS allowed is 'register'.
5443  VarDecl::StorageClass StorageClass = SC_None;
5444  VarDecl::StorageClass StorageClassAsWritten = SC_None;
5445  if (DS.getStorageClassSpec() == DeclSpec::SCS_register) {
5446    StorageClass = SC_Register;
5447    StorageClassAsWritten = SC_Register;
5448  } else if (DS.getStorageClassSpec() != DeclSpec::SCS_unspecified) {
5449    Diag(DS.getStorageClassSpecLoc(),
5450         diag::err_invalid_storage_class_in_func_decl);
5451    D.getMutableDeclSpec().ClearStorageClassSpecs();
5452  }
5453
5454  if (D.getDeclSpec().isThreadSpecified())
5455    Diag(D.getDeclSpec().getThreadSpecLoc(), diag::err_invalid_thread);
5456
5457  DiagnoseFunctionSpecifiers(D);
5458
5459  TagDecl *OwnedDecl = 0;
5460  TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S, &OwnedDecl);
5461  QualType parmDeclType = TInfo->getType();
5462
5463  if (getLangOptions().CPlusPlus) {
5464    // Check that there are no default arguments inside the type of this
5465    // parameter.
5466    CheckExtraCXXDefaultArguments(D);
5467
5468    if (OwnedDecl && OwnedDecl->isDefinition()) {
5469      // C++ [dcl.fct]p6:
5470      //   Types shall not be defined in return or parameter types.
5471      Diag(OwnedDecl->getLocation(), diag::err_type_defined_in_param_type)
5472        << Context.getTypeDeclType(OwnedDecl);
5473    }
5474
5475    // Parameter declarators cannot be qualified (C++ [dcl.meaning]p1).
5476    if (D.getCXXScopeSpec().isSet()) {
5477      Diag(D.getIdentifierLoc(), diag::err_qualified_param_declarator)
5478        << D.getCXXScopeSpec().getRange();
5479      D.getCXXScopeSpec().clear();
5480    }
5481  }
5482
5483  // Ensure we have a valid name
5484  IdentifierInfo *II = 0;
5485  if (D.hasName()) {
5486    II = D.getIdentifier();
5487    if (!II) {
5488      Diag(D.getIdentifierLoc(), diag::err_bad_parameter_name)
5489        << GetNameForDeclarator(D).getName().getAsString();
5490      D.setInvalidType(true);
5491    }
5492  }
5493
5494  // Check for redeclaration of parameters, e.g. int foo(int x, int x);
5495  if (II) {
5496    LookupResult R(*this, II, D.getIdentifierLoc(), LookupOrdinaryName,
5497                   ForRedeclaration);
5498    LookupName(R, S);
5499    if (R.isSingleResult()) {
5500      NamedDecl *PrevDecl = R.getFoundDecl();
5501      if (PrevDecl->isTemplateParameter()) {
5502        // Maybe we will complain about the shadowed template parameter.
5503        DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
5504        // Just pretend that we didn't see the previous declaration.
5505        PrevDecl = 0;
5506      } else if (S->isDeclScope(PrevDecl)) {
5507        Diag(D.getIdentifierLoc(), diag::err_param_redefinition) << II;
5508        Diag(PrevDecl->getLocation(), diag::note_previous_declaration);
5509
5510        // Recover by removing the name
5511        II = 0;
5512        D.SetIdentifier(0, D.getIdentifierLoc());
5513        D.setInvalidType(true);
5514      }
5515    }
5516  }
5517
5518  // Temporarily put parameter variables in the translation unit, not
5519  // the enclosing context.  This prevents them from accidentally
5520  // looking like class members in C++.
5521  ParmVarDecl *New = CheckParameter(Context.getTranslationUnitDecl(),
5522                                    D.getSourceRange().getBegin(),
5523                                    D.getIdentifierLoc(), II,
5524                                    parmDeclType, TInfo,
5525                                    StorageClass, StorageClassAsWritten);
5526
5527  if (D.isInvalidType())
5528    New->setInvalidDecl();
5529
5530  // Add the parameter declaration into this scope.
5531  S->AddDecl(New);
5532  if (II)
5533    IdResolver.AddDecl(New);
5534
5535  ProcessDeclAttributes(S, New, D);
5536
5537  if (New->hasAttr<BlocksAttr>()) {
5538    Diag(New->getLocation(), diag::err_block_on_nonlocal);
5539  }
5540  return New;
5541}
5542
5543/// \brief Synthesizes a variable for a parameter arising from a
5544/// typedef.
5545ParmVarDecl *Sema::BuildParmVarDeclForTypedef(DeclContext *DC,
5546                                              SourceLocation Loc,
5547                                              QualType T) {
5548  /* FIXME: setting StartLoc == Loc.
5549     Would it be worth to modify callers so as to provide proper source
5550     location for the unnamed parameters, embedding the parameter's type? */
5551  ParmVarDecl *Param = ParmVarDecl::Create(Context, DC, Loc, Loc, 0,
5552                                T, Context.getTrivialTypeSourceInfo(T, Loc),
5553                                           SC_None, SC_None, 0);
5554  Param->setImplicit();
5555  return Param;
5556}
5557
5558void Sema::DiagnoseUnusedParameters(ParmVarDecl * const *Param,
5559                                    ParmVarDecl * const *ParamEnd) {
5560  // Don't diagnose unused-parameter errors in template instantiations; we
5561  // will already have done so in the template itself.
5562  if (!ActiveTemplateInstantiations.empty())
5563    return;
5564
5565  for (; Param != ParamEnd; ++Param) {
5566    if (!(*Param)->isUsed() && (*Param)->getDeclName() &&
5567        !(*Param)->hasAttr<UnusedAttr>()) {
5568      Diag((*Param)->getLocation(), diag::warn_unused_parameter)
5569        << (*Param)->getDeclName();
5570    }
5571  }
5572}
5573
5574void Sema::DiagnoseSizeOfParametersAndReturnValue(ParmVarDecl * const *Param,
5575                                                  ParmVarDecl * const *ParamEnd,
5576                                                  QualType ReturnTy,
5577                                                  NamedDecl *D) {
5578  if (LangOpts.NumLargeByValueCopy == 0) // No check.
5579    return;
5580
5581  // Warn if the return value is pass-by-value and larger than the specified
5582  // threshold.
5583  if (ReturnTy->isPODType()) {
5584    unsigned Size = Context.getTypeSizeInChars(ReturnTy).getQuantity();
5585    if (Size > LangOpts.NumLargeByValueCopy)
5586      Diag(D->getLocation(), diag::warn_return_value_size)
5587          << D->getDeclName() << Size;
5588  }
5589
5590  // Warn if any parameter is pass-by-value and larger than the specified
5591  // threshold.
5592  for (; Param != ParamEnd; ++Param) {
5593    QualType T = (*Param)->getType();
5594    if (!T->isPODType())
5595      continue;
5596    unsigned Size = Context.getTypeSizeInChars(T).getQuantity();
5597    if (Size > LangOpts.NumLargeByValueCopy)
5598      Diag((*Param)->getLocation(), diag::warn_parameter_size)
5599          << (*Param)->getDeclName() << Size;
5600  }
5601}
5602
5603ParmVarDecl *Sema::CheckParameter(DeclContext *DC, SourceLocation StartLoc,
5604                                  SourceLocation NameLoc, IdentifierInfo *Name,
5605                                  QualType T, TypeSourceInfo *TSInfo,
5606                                  VarDecl::StorageClass StorageClass,
5607                                  VarDecl::StorageClass StorageClassAsWritten) {
5608  ParmVarDecl *New = ParmVarDecl::Create(Context, DC, StartLoc, NameLoc, Name,
5609                                         adjustParameterType(T), TSInfo,
5610                                         StorageClass, StorageClassAsWritten,
5611                                         0);
5612
5613  // Parameters can not be abstract class types.
5614  // For record types, this is done by the AbstractClassUsageDiagnoser once
5615  // the class has been completely parsed.
5616  if (!CurContext->isRecord() &&
5617      RequireNonAbstractType(NameLoc, T, diag::err_abstract_type_in_decl,
5618                             AbstractParamType))
5619    New->setInvalidDecl();
5620
5621  // Parameter declarators cannot be interface types. All ObjC objects are
5622  // passed by reference.
5623  if (T->isObjCObjectType()) {
5624    Diag(NameLoc,
5625         diag::err_object_cannot_be_passed_returned_by_value) << 1 << T;
5626    New->setInvalidDecl();
5627  }
5628
5629  // ISO/IEC TR 18037 S6.7.3: "The type of an object with automatic storage
5630  // duration shall not be qualified by an address-space qualifier."
5631  // Since all parameters have automatic store duration, they can not have
5632  // an address space.
5633  if (T.getAddressSpace() != 0) {
5634    Diag(NameLoc, diag::err_arg_with_address_space);
5635    New->setInvalidDecl();
5636  }
5637
5638  return New;
5639}
5640
5641void Sema::ActOnFinishKNRParamDeclarations(Scope *S, Declarator &D,
5642                                           SourceLocation LocAfterDecls) {
5643  DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
5644
5645  // Verify 6.9.1p6: 'every identifier in the identifier list shall be declared'
5646  // for a K&R function.
5647  if (!FTI.hasPrototype) {
5648    for (int i = FTI.NumArgs; i != 0; /* decrement in loop */) {
5649      --i;
5650      if (FTI.ArgInfo[i].Param == 0) {
5651        llvm::SmallString<256> Code;
5652        llvm::raw_svector_ostream(Code) << "  int "
5653                                        << FTI.ArgInfo[i].Ident->getName()
5654                                        << ";\n";
5655        Diag(FTI.ArgInfo[i].IdentLoc, diag::ext_param_not_declared)
5656          << FTI.ArgInfo[i].Ident
5657          << FixItHint::CreateInsertion(LocAfterDecls, Code.str());
5658
5659        // Implicitly declare the argument as type 'int' for lack of a better
5660        // type.
5661        AttributeFactory attrs;
5662        DeclSpec DS(attrs);
5663        const char* PrevSpec; // unused
5664        unsigned DiagID; // unused
5665        DS.SetTypeSpecType(DeclSpec::TST_int, FTI.ArgInfo[i].IdentLoc,
5666                           PrevSpec, DiagID);
5667        Declarator ParamD(DS, Declarator::KNRTypeListContext);
5668        ParamD.SetIdentifier(FTI.ArgInfo[i].Ident, FTI.ArgInfo[i].IdentLoc);
5669        FTI.ArgInfo[i].Param = ActOnParamDeclarator(S, ParamD);
5670      }
5671    }
5672  }
5673}
5674
5675Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope,
5676                                         Declarator &D) {
5677  assert(getCurFunctionDecl() == 0 && "Function parsing confused");
5678  assert(D.isFunctionDeclarator() && "Not a function declarator!");
5679  Scope *ParentScope = FnBodyScope->getParent();
5680
5681  Decl *DP = HandleDeclarator(ParentScope, D,
5682                              MultiTemplateParamsArg(*this),
5683                              /*IsFunctionDefinition=*/true);
5684  return ActOnStartOfFunctionDef(FnBodyScope, DP);
5685}
5686
5687static bool ShouldWarnAboutMissingPrototype(const FunctionDecl *FD) {
5688  // Don't warn about invalid declarations.
5689  if (FD->isInvalidDecl())
5690    return false;
5691
5692  // Or declarations that aren't global.
5693  if (!FD->isGlobal())
5694    return false;
5695
5696  // Don't warn about C++ member functions.
5697  if (isa<CXXMethodDecl>(FD))
5698    return false;
5699
5700  // Don't warn about 'main'.
5701  if (FD->isMain())
5702    return false;
5703
5704  // Don't warn about inline functions.
5705  if (FD->isInlined())
5706    return false;
5707
5708  // Don't warn about function templates.
5709  if (FD->getDescribedFunctionTemplate())
5710    return false;
5711
5712  // Don't warn about function template specializations.
5713  if (FD->isFunctionTemplateSpecialization())
5714    return false;
5715
5716  bool MissingPrototype = true;
5717  for (const FunctionDecl *Prev = FD->getPreviousDeclaration();
5718       Prev; Prev = Prev->getPreviousDeclaration()) {
5719    // Ignore any declarations that occur in function or method
5720    // scope, because they aren't visible from the header.
5721    if (Prev->getDeclContext()->isFunctionOrMethod())
5722      continue;
5723
5724    MissingPrototype = !Prev->getType()->isFunctionProtoType();
5725    break;
5726  }
5727
5728  return MissingPrototype;
5729}
5730
5731Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D) {
5732  // Clear the last template instantiation error context.
5733  LastTemplateInstantiationErrorContext = ActiveTemplateInstantiation();
5734
5735  if (!D)
5736    return D;
5737  FunctionDecl *FD = 0;
5738
5739  if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(D))
5740    FD = FunTmpl->getTemplatedDecl();
5741  else
5742    FD = cast<FunctionDecl>(D);
5743
5744  // Enter a new function scope
5745  PushFunctionScope();
5746
5747  // See if this is a redefinition.
5748  // But don't complain if we're in GNU89 mode and the previous definition
5749  // was an extern inline function.
5750  const FunctionDecl *Definition;
5751  if (FD->hasBody(Definition) &&
5752      !canRedefineFunction(Definition, getLangOptions())) {
5753    if (getLangOptions().GNUMode && Definition->isInlineSpecified() &&
5754        Definition->getStorageClass() == SC_Extern)
5755      Diag(FD->getLocation(), diag::err_redefinition_extern_inline)
5756        << FD->getDeclName() << getLangOptions().CPlusPlus;
5757    else
5758      Diag(FD->getLocation(), diag::err_redefinition) << FD->getDeclName();
5759    Diag(Definition->getLocation(), diag::note_previous_definition);
5760  }
5761
5762  // Builtin functions cannot be defined.
5763  if (unsigned BuiltinID = FD->getBuiltinID()) {
5764    if (!Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID)) {
5765      Diag(FD->getLocation(), diag::err_builtin_definition) << FD;
5766      FD->setInvalidDecl();
5767    }
5768  }
5769
5770  // The return type of a function definition must be complete
5771  // (C99 6.9.1p3, C++ [dcl.fct]p6).
5772  QualType ResultType = FD->getResultType();
5773  if (!ResultType->isDependentType() && !ResultType->isVoidType() &&
5774      !FD->isInvalidDecl() &&
5775      RequireCompleteType(FD->getLocation(), ResultType,
5776                          diag::err_func_def_incomplete_result))
5777    FD->setInvalidDecl();
5778
5779  // GNU warning -Wmissing-prototypes:
5780  //   Warn if a global function is defined without a previous
5781  //   prototype declaration. This warning is issued even if the
5782  //   definition itself provides a prototype. The aim is to detect
5783  //   global functions that fail to be declared in header files.
5784  if (ShouldWarnAboutMissingPrototype(FD))
5785    Diag(FD->getLocation(), diag::warn_missing_prototype) << FD;
5786
5787  if (FnBodyScope)
5788    PushDeclContext(FnBodyScope, FD);
5789
5790  // Check the validity of our function parameters
5791  CheckParmsForFunctionDef(FD->param_begin(), FD->param_end(),
5792                           /*CheckParameterNames=*/true);
5793
5794  // Introduce our parameters into the function scope
5795  for (unsigned p = 0, NumParams = FD->getNumParams(); p < NumParams; ++p) {
5796    ParmVarDecl *Param = FD->getParamDecl(p);
5797    Param->setOwningFunction(FD);
5798
5799    // If this has an identifier, add it to the scope stack.
5800    if (Param->getIdentifier() && FnBodyScope) {
5801      CheckShadow(FnBodyScope, Param);
5802
5803      PushOnScopeChains(Param, FnBodyScope);
5804    }
5805  }
5806
5807  // Checking attributes of current function definition
5808  // dllimport attribute.
5809  DLLImportAttr *DA = FD->getAttr<DLLImportAttr>();
5810  if (DA && (!FD->getAttr<DLLExportAttr>())) {
5811    // dllimport attribute cannot be directly applied to definition.
5812    // Microsoft accepts dllimport for functions defined within class scope.
5813    if (!DA->isInherited() &&
5814        !(LangOpts.Microsoft && FD->getLexicalDeclContext()->isRecord())) {
5815      Diag(FD->getLocation(),
5816           diag::err_attribute_can_be_applied_only_to_symbol_declaration)
5817        << "dllimport";
5818      FD->setInvalidDecl();
5819      return FD;
5820    }
5821
5822    // Visual C++ appears to not think this is an issue, so only issue
5823    // a warning when Microsoft extensions are disabled.
5824    if (!LangOpts.Microsoft) {
5825      // If a symbol previously declared dllimport is later defined, the
5826      // attribute is ignored in subsequent references, and a warning is
5827      // emitted.
5828      Diag(FD->getLocation(),
5829           diag::warn_redeclaration_without_attribute_prev_attribute_ignored)
5830        << FD->getName() << "dllimport";
5831    }
5832  }
5833  return FD;
5834}
5835
5836/// \brief Given the set of return statements within a function body,
5837/// compute the variables that are subject to the named return value
5838/// optimization.
5839///
5840/// Each of the variables that is subject to the named return value
5841/// optimization will be marked as NRVO variables in the AST, and any
5842/// return statement that has a marked NRVO variable as its NRVO candidate can
5843/// use the named return value optimization.
5844///
5845/// This function applies a very simplistic algorithm for NRVO: if every return
5846/// statement in the function has the same NRVO candidate, that candidate is
5847/// the NRVO variable.
5848///
5849/// FIXME: Employ a smarter algorithm that accounts for multiple return
5850/// statements and the lifetimes of the NRVO candidates. We should be able to
5851/// find a maximal set of NRVO variables.
5852static void ComputeNRVO(Stmt *Body, FunctionScopeInfo *Scope) {
5853  ReturnStmt **Returns = Scope->Returns.data();
5854
5855  const VarDecl *NRVOCandidate = 0;
5856  for (unsigned I = 0, E = Scope->Returns.size(); I != E; ++I) {
5857    if (!Returns[I]->getNRVOCandidate())
5858      return;
5859
5860    if (!NRVOCandidate)
5861      NRVOCandidate = Returns[I]->getNRVOCandidate();
5862    else if (NRVOCandidate != Returns[I]->getNRVOCandidate())
5863      return;
5864  }
5865
5866  if (NRVOCandidate)
5867    const_cast<VarDecl*>(NRVOCandidate)->setNRVOVariable(true);
5868}
5869
5870Decl *Sema::ActOnFinishFunctionBody(Decl *D, Stmt *BodyArg) {
5871  return ActOnFinishFunctionBody(D, move(BodyArg), false);
5872}
5873
5874Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body,
5875                                    bool IsInstantiation) {
5876  FunctionDecl *FD = 0;
5877  FunctionTemplateDecl *FunTmpl = dyn_cast_or_null<FunctionTemplateDecl>(dcl);
5878  if (FunTmpl)
5879    FD = FunTmpl->getTemplatedDecl();
5880  else
5881    FD = dyn_cast_or_null<FunctionDecl>(dcl);
5882
5883  sema::AnalysisBasedWarnings::Policy WP = AnalysisWarnings.getDefaultPolicy();
5884  sema::AnalysisBasedWarnings::Policy *ActivePolicy = 0;
5885
5886  if (FD) {
5887    FD->setBody(Body);
5888    if (FD->isMain()) {
5889      // C and C++ allow for main to automagically return 0.
5890      // Implements C++ [basic.start.main]p5 and C99 5.1.2.2.3.
5891      FD->setHasImplicitReturnZero(true);
5892      WP.disableCheckFallThrough();
5893    }
5894
5895    if (!FD->isInvalidDecl()) {
5896      DiagnoseUnusedParameters(FD->param_begin(), FD->param_end());
5897      DiagnoseSizeOfParametersAndReturnValue(FD->param_begin(), FD->param_end(),
5898                                             FD->getResultType(), FD);
5899
5900      // If this is a constructor, we need a vtable.
5901      if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(FD))
5902        MarkVTableUsed(FD->getLocation(), Constructor->getParent());
5903
5904      ComputeNRVO(Body, getCurFunction());
5905    }
5906
5907    assert(FD == getCurFunctionDecl() && "Function parsing confused");
5908  } else if (ObjCMethodDecl *MD = dyn_cast_or_null<ObjCMethodDecl>(dcl)) {
5909    assert(MD == getCurMethodDecl() && "Method parsing confused");
5910    MD->setBody(Body);
5911    if (Body)
5912      MD->setEndLoc(Body->getLocEnd());
5913    if (!MD->isInvalidDecl()) {
5914      DiagnoseUnusedParameters(MD->param_begin(), MD->param_end());
5915      DiagnoseSizeOfParametersAndReturnValue(MD->param_begin(), MD->param_end(),
5916                                             MD->getResultType(), MD);
5917    }
5918  } else {
5919    return 0;
5920  }
5921
5922  // Verify and clean out per-function state.
5923  if (Body) {
5924    // C++ constructors that have function-try-blocks can't have return
5925    // statements in the handlers of that block. (C++ [except.handle]p14)
5926    // Verify this.
5927    if (FD && isa<CXXConstructorDecl>(FD) && isa<CXXTryStmt>(Body))
5928      DiagnoseReturnInConstructorExceptionHandler(cast<CXXTryStmt>(Body));
5929
5930    // Verify that that gotos and switch cases don't jump into scopes illegally.
5931    // Verify that that gotos and switch cases don't jump into scopes illegally.
5932    if (getCurFunction()->NeedsScopeChecking() &&
5933        !dcl->isInvalidDecl() &&
5934        !hasAnyErrorsInThisFunction())
5935      DiagnoseInvalidJumps(Body);
5936
5937    if (CXXDestructorDecl *Destructor = dyn_cast<CXXDestructorDecl>(dcl)) {
5938      if (!Destructor->getParent()->isDependentType())
5939        CheckDestructor(Destructor);
5940
5941      MarkBaseAndMemberDestructorsReferenced(Destructor->getLocation(),
5942                                             Destructor->getParent());
5943    }
5944
5945    // If any errors have occurred, clear out any temporaries that may have
5946    // been leftover. This ensures that these temporaries won't be picked up for
5947    // deletion in some later function.
5948    if (PP.getDiagnostics().hasErrorOccurred() ||
5949        PP.getDiagnostics().getSuppressAllDiagnostics())
5950      ExprTemporaries.clear();
5951    else if (!isa<FunctionTemplateDecl>(dcl)) {
5952      // Since the body is valid, issue any analysis-based warnings that are
5953      // enabled.
5954      ActivePolicy = &WP;
5955    }
5956
5957    assert(ExprTemporaries.empty() && "Leftover temporaries in function");
5958  }
5959
5960  if (!IsInstantiation)
5961    PopDeclContext();
5962
5963  PopFunctionOrBlockScope(ActivePolicy, dcl);
5964
5965  // If any errors have occurred, clear out any temporaries that may have
5966  // been leftover. This ensures that these temporaries won't be picked up for
5967  // deletion in some later function.
5968  if (getDiagnostics().hasErrorOccurred())
5969    ExprTemporaries.clear();
5970
5971  return dcl;
5972}
5973
5974/// ImplicitlyDefineFunction - An undeclared identifier was used in a function
5975/// call, forming a call to an implicitly defined function (per C99 6.5.1p2).
5976NamedDecl *Sema::ImplicitlyDefineFunction(SourceLocation Loc,
5977                                          IdentifierInfo &II, Scope *S) {
5978  // Before we produce a declaration for an implicitly defined
5979  // function, see whether there was a locally-scoped declaration of
5980  // this name as a function or variable. If so, use that
5981  // (non-visible) declaration, and complain about it.
5982  llvm::DenseMap<DeclarationName, NamedDecl *>::iterator Pos
5983    = LocallyScopedExternalDecls.find(&II);
5984  if (Pos != LocallyScopedExternalDecls.end()) {
5985    Diag(Loc, diag::warn_use_out_of_scope_declaration) << Pos->second;
5986    Diag(Pos->second->getLocation(), diag::note_previous_declaration);
5987    return Pos->second;
5988  }
5989
5990  // Extension in C99.  Legal in C90, but warn about it.
5991  if (II.getName().startswith("__builtin_"))
5992    Diag(Loc, diag::warn_builtin_unknown) << &II;
5993  else if (getLangOptions().C99)
5994    Diag(Loc, diag::ext_implicit_function_decl) << &II;
5995  else
5996    Diag(Loc, diag::warn_implicit_function_decl) << &II;
5997
5998  // Set a Declarator for the implicit definition: int foo();
5999  const char *Dummy;
6000  AttributeFactory attrFactory;
6001  DeclSpec DS(attrFactory);
6002  unsigned DiagID;
6003  bool Error = DS.SetTypeSpecType(DeclSpec::TST_int, Loc, Dummy, DiagID);
6004  (void)Error; // Silence warning.
6005  assert(!Error && "Error setting up implicit decl!");
6006  Declarator D(DS, Declarator::BlockContext);
6007  D.AddTypeInfo(DeclaratorChunk::getFunction(false, false, SourceLocation(), 0,
6008                                             0, 0, true, SourceLocation(),
6009                                             EST_None, SourceLocation(),
6010                                             0, 0, 0, 0, Loc, Loc, D),
6011                DS.getAttributes(),
6012                SourceLocation());
6013  D.SetIdentifier(&II, Loc);
6014
6015  // Insert this function into translation-unit scope.
6016
6017  DeclContext *PrevDC = CurContext;
6018  CurContext = Context.getTranslationUnitDecl();
6019
6020  FunctionDecl *FD = dyn_cast<FunctionDecl>(ActOnDeclarator(TUScope, D));
6021  FD->setImplicit();
6022
6023  CurContext = PrevDC;
6024
6025  AddKnownFunctionAttributes(FD);
6026
6027  return FD;
6028}
6029
6030/// \brief Adds any function attributes that we know a priori based on
6031/// the declaration of this function.
6032///
6033/// These attributes can apply both to implicitly-declared builtins
6034/// (like __builtin___printf_chk) or to library-declared functions
6035/// like NSLog or printf.
6036void Sema::AddKnownFunctionAttributes(FunctionDecl *FD) {
6037  if (FD->isInvalidDecl())
6038    return;
6039
6040  // If this is a built-in function, map its builtin attributes to
6041  // actual attributes.
6042  if (unsigned BuiltinID = FD->getBuiltinID()) {
6043    // Handle printf-formatting attributes.
6044    unsigned FormatIdx;
6045    bool HasVAListArg;
6046    if (Context.BuiltinInfo.isPrintfLike(BuiltinID, FormatIdx, HasVAListArg)) {
6047      if (!FD->getAttr<FormatAttr>())
6048        FD->addAttr(::new (Context) FormatAttr(FD->getLocation(), Context,
6049                                                "printf", FormatIdx+1,
6050                                               HasVAListArg ? 0 : FormatIdx+2));
6051    }
6052    if (Context.BuiltinInfo.isScanfLike(BuiltinID, FormatIdx,
6053                                             HasVAListArg)) {
6054     if (!FD->getAttr<FormatAttr>())
6055       FD->addAttr(::new (Context) FormatAttr(FD->getLocation(), Context,
6056                                              "scanf", FormatIdx+1,
6057                                              HasVAListArg ? 0 : FormatIdx+2));
6058    }
6059
6060    // Mark const if we don't care about errno and that is the only
6061    // thing preventing the function from being const. This allows
6062    // IRgen to use LLVM intrinsics for such functions.
6063    if (!getLangOptions().MathErrno &&
6064        Context.BuiltinInfo.isConstWithoutErrno(BuiltinID)) {
6065      if (!FD->getAttr<ConstAttr>())
6066        FD->addAttr(::new (Context) ConstAttr(FD->getLocation(), Context));
6067    }
6068
6069    if (Context.BuiltinInfo.isNoThrow(BuiltinID))
6070      FD->addAttr(::new (Context) NoThrowAttr(FD->getLocation(), Context));
6071    if (Context.BuiltinInfo.isConst(BuiltinID))
6072      FD->addAttr(::new (Context) ConstAttr(FD->getLocation(), Context));
6073  }
6074
6075  IdentifierInfo *Name = FD->getIdentifier();
6076  if (!Name)
6077    return;
6078  if ((!getLangOptions().CPlusPlus &&
6079       FD->getDeclContext()->isTranslationUnit()) ||
6080      (isa<LinkageSpecDecl>(FD->getDeclContext()) &&
6081       cast<LinkageSpecDecl>(FD->getDeclContext())->getLanguage() ==
6082       LinkageSpecDecl::lang_c)) {
6083    // Okay: this could be a libc/libm/Objective-C function we know
6084    // about.
6085  } else
6086    return;
6087
6088  if (Name->isStr("NSLog") || Name->isStr("NSLogv")) {
6089    // FIXME: NSLog and NSLogv should be target specific
6090    if (const FormatAttr *Format = FD->getAttr<FormatAttr>()) {
6091      // FIXME: We known better than our headers.
6092      const_cast<FormatAttr *>(Format)->setType(Context, "printf");
6093    } else
6094      FD->addAttr(::new (Context) FormatAttr(FD->getLocation(), Context,
6095                                             "printf", 1,
6096                                             Name->isStr("NSLogv") ? 0 : 2));
6097  } else if (Name->isStr("asprintf") || Name->isStr("vasprintf")) {
6098    // FIXME: asprintf and vasprintf aren't C99 functions. Should they be
6099    // target-specific builtins, perhaps?
6100    if (!FD->getAttr<FormatAttr>())
6101      FD->addAttr(::new (Context) FormatAttr(FD->getLocation(), Context,
6102                                             "printf", 2,
6103                                             Name->isStr("vasprintf") ? 0 : 3));
6104  }
6105}
6106
6107TypedefDecl *Sema::ParseTypedefDecl(Scope *S, Declarator &D, QualType T,
6108                                    TypeSourceInfo *TInfo) {
6109  assert(D.getIdentifier() && "Wrong callback for declspec without declarator");
6110  assert(!T.isNull() && "GetTypeForDeclarator() returned null type");
6111
6112  if (!TInfo) {
6113    assert(D.isInvalidType() && "no declarator info for valid type");
6114    TInfo = Context.getTrivialTypeSourceInfo(T);
6115  }
6116
6117  // Scope manipulation handled by caller.
6118  TypedefDecl *NewTD = TypedefDecl::Create(Context, CurContext,
6119                                           D.getSourceRange().getBegin(),
6120                                           D.getIdentifierLoc(),
6121                                           D.getIdentifier(),
6122                                           TInfo);
6123
6124  // Bail out immediately if we have an invalid declaration.
6125  if (D.isInvalidType()) {
6126    NewTD->setInvalidDecl();
6127    return NewTD;
6128  }
6129
6130  // C++ [dcl.typedef]p8:
6131  //   If the typedef declaration defines an unnamed class (or
6132  //   enum), the first typedef-name declared by the declaration
6133  //   to be that class type (or enum type) is used to denote the
6134  //   class type (or enum type) for linkage purposes only.
6135  // We need to check whether the type was declared in the declaration.
6136  switch (D.getDeclSpec().getTypeSpecType()) {
6137  case TST_enum:
6138  case TST_struct:
6139  case TST_union:
6140  case TST_class: {
6141    TagDecl *tagFromDeclSpec = cast<TagDecl>(D.getDeclSpec().getRepAsDecl());
6142
6143    // Do nothing if the tag is not anonymous or already has an
6144    // associated typedef (from an earlier typedef in this decl group).
6145    if (tagFromDeclSpec->getIdentifier()) break;
6146    if (tagFromDeclSpec->getTypedefNameForAnonDecl()) break;
6147
6148    // A well-formed anonymous tag must always be a TUK_Definition.
6149    assert(tagFromDeclSpec->isThisDeclarationADefinition());
6150
6151    // The type must match the tag exactly;  no qualifiers allowed.
6152    if (!Context.hasSameType(T, Context.getTagDeclType(tagFromDeclSpec)))
6153      break;
6154
6155    // Otherwise, set this is the anon-decl typedef for the tag.
6156    tagFromDeclSpec->setTypedefNameForAnonDecl(NewTD);
6157    break;
6158  }
6159
6160  default:
6161    break;
6162  }
6163
6164  return NewTD;
6165}
6166
6167
6168/// \brief Determine whether a tag with a given kind is acceptable
6169/// as a redeclaration of the given tag declaration.
6170///
6171/// \returns true if the new tag kind is acceptable, false otherwise.
6172bool Sema::isAcceptableTagRedeclaration(const TagDecl *Previous,
6173                                        TagTypeKind NewTag,
6174                                        SourceLocation NewTagLoc,
6175                                        const IdentifierInfo &Name) {
6176  // C++ [dcl.type.elab]p3:
6177  //   The class-key or enum keyword present in the
6178  //   elaborated-type-specifier shall agree in kind with the
6179  //   declaration to which the name in the elaborated-type-specifier
6180  //   refers. This rule also applies to the form of
6181  //   elaborated-type-specifier that declares a class-name or
6182  //   friend class since it can be construed as referring to the
6183  //   definition of the class. Thus, in any
6184  //   elaborated-type-specifier, the enum keyword shall be used to
6185  //   refer to an enumeration (7.2), the union class-key shall be
6186  //   used to refer to a union (clause 9), and either the class or
6187  //   struct class-key shall be used to refer to a class (clause 9)
6188  //   declared using the class or struct class-key.
6189  TagTypeKind OldTag = Previous->getTagKind();
6190  if (OldTag == NewTag)
6191    return true;
6192
6193  if ((OldTag == TTK_Struct || OldTag == TTK_Class) &&
6194      (NewTag == TTK_Struct || NewTag == TTK_Class)) {
6195    // Warn about the struct/class tag mismatch.
6196    bool isTemplate = false;
6197    if (const CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(Previous))
6198      isTemplate = Record->getDescribedClassTemplate();
6199
6200    Diag(NewTagLoc, diag::warn_struct_class_tag_mismatch)
6201      << (NewTag == TTK_Class)
6202      << isTemplate << &Name
6203      << FixItHint::CreateReplacement(SourceRange(NewTagLoc),
6204                              OldTag == TTK_Class? "class" : "struct");
6205    Diag(Previous->getLocation(), diag::note_previous_use);
6206    return true;
6207  }
6208  return false;
6209}
6210
6211/// ActOnTag - This is invoked when we see 'struct foo' or 'struct {'.  In the
6212/// former case, Name will be non-null.  In the later case, Name will be null.
6213/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a
6214/// reference/declaration/definition of a tag.
6215Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
6216                     SourceLocation KWLoc, CXXScopeSpec &SS,
6217                     IdentifierInfo *Name, SourceLocation NameLoc,
6218                     AttributeList *Attr, AccessSpecifier AS,
6219                     MultiTemplateParamsArg TemplateParameterLists,
6220                     bool &OwnedDecl, bool &IsDependent,
6221                     bool ScopedEnum, bool ScopedEnumUsesClassTag,
6222                     TypeResult UnderlyingType) {
6223  // If this is not a definition, it must have a name.
6224  assert((Name != 0 || TUK == TUK_Definition) &&
6225         "Nameless record must be a definition!");
6226  assert(TemplateParameterLists.size() == 0 || TUK != TUK_Reference);
6227
6228  OwnedDecl = false;
6229  TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec);
6230
6231  // FIXME: Check explicit specializations more carefully.
6232  bool isExplicitSpecialization = false;
6233  bool Invalid = false;
6234
6235  // We only need to do this matching if we have template parameters
6236  // or a scope specifier, which also conveniently avoids this work
6237  // for non-C++ cases.
6238  if (TemplateParameterLists.size() > 0 ||
6239      (SS.isNotEmpty() && TUK != TUK_Reference)) {
6240    if (TemplateParameterList *TemplateParams
6241          = MatchTemplateParametersToScopeSpecifier(KWLoc, SS,
6242                                                TemplateParameterLists.get(),
6243                                                TemplateParameterLists.size(),
6244                                                    TUK == TUK_Friend,
6245                                                    isExplicitSpecialization,
6246                                                    Invalid)) {
6247      if (TemplateParams->size() > 0) {
6248        // This is a declaration or definition of a class template (which may
6249        // be a member of another template).
6250
6251        if (Invalid)
6252          return 0;
6253
6254        OwnedDecl = false;
6255        DeclResult Result = CheckClassTemplate(S, TagSpec, TUK, KWLoc,
6256                                               SS, Name, NameLoc, Attr,
6257                                               TemplateParams, AS,
6258                                           TemplateParameterLists.size() - 1,
6259                 (TemplateParameterList**) TemplateParameterLists.release());
6260        return Result.get();
6261      } else {
6262        // The "template<>" header is extraneous.
6263        Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams)
6264          << TypeWithKeyword::getTagTypeKindName(Kind) << Name;
6265        isExplicitSpecialization = true;
6266      }
6267    }
6268  }
6269
6270  // Figure out the underlying type if this a enum declaration. We need to do
6271  // this early, because it's needed to detect if this is an incompatible
6272  // redeclaration.
6273  llvm::PointerUnion<const Type*, TypeSourceInfo*> EnumUnderlying;
6274
6275  if (Kind == TTK_Enum) {
6276    if (UnderlyingType.isInvalid() || (!UnderlyingType.get() && ScopedEnum))
6277      // No underlying type explicitly specified, or we failed to parse the
6278      // type, default to int.
6279      EnumUnderlying = Context.IntTy.getTypePtr();
6280    else if (UnderlyingType.get()) {
6281      // C++0x 7.2p2: The type-specifier-seq of an enum-base shall name an
6282      // integral type; any cv-qualification is ignored.
6283      TypeSourceInfo *TI = 0;
6284      QualType T = GetTypeFromParser(UnderlyingType.get(), &TI);
6285      EnumUnderlying = TI;
6286
6287      SourceLocation UnderlyingLoc = TI->getTypeLoc().getBeginLoc();
6288
6289      if (!T->isDependentType() && !T->isIntegralType(Context)) {
6290        Diag(UnderlyingLoc, diag::err_enum_invalid_underlying)
6291          << T;
6292        // Recover by falling back to int.
6293        EnumUnderlying = Context.IntTy.getTypePtr();
6294      }
6295
6296      if (DiagnoseUnexpandedParameterPack(UnderlyingLoc, TI,
6297                                          UPPC_FixedUnderlyingType))
6298        EnumUnderlying = Context.IntTy.getTypePtr();
6299
6300    } else if (getLangOptions().Microsoft)
6301      // Microsoft enums are always of int type.
6302      EnumUnderlying = Context.IntTy.getTypePtr();
6303  }
6304
6305  DeclContext *SearchDC = CurContext;
6306  DeclContext *DC = CurContext;
6307  bool isStdBadAlloc = false;
6308
6309  RedeclarationKind Redecl = ForRedeclaration;
6310  if (TUK == TUK_Friend || TUK == TUK_Reference)
6311    Redecl = NotForRedeclaration;
6312
6313  LookupResult Previous(*this, Name, NameLoc, LookupTagName, Redecl);
6314
6315  if (Name && SS.isNotEmpty()) {
6316    // We have a nested-name tag ('struct foo::bar').
6317
6318    // Check for invalid 'foo::'.
6319    if (SS.isInvalid()) {
6320      Name = 0;
6321      goto CreateNewDecl;
6322    }
6323
6324    // If this is a friend or a reference to a class in a dependent
6325    // context, don't try to make a decl for it.
6326    if (TUK == TUK_Friend || TUK == TUK_Reference) {
6327      DC = computeDeclContext(SS, false);
6328      if (!DC) {
6329        IsDependent = true;
6330        return 0;
6331      }
6332    } else {
6333      DC = computeDeclContext(SS, true);
6334      if (!DC) {
6335        Diag(SS.getRange().getBegin(), diag::err_dependent_nested_name_spec)
6336          << SS.getRange();
6337        return 0;
6338      }
6339    }
6340
6341    if (RequireCompleteDeclContext(SS, DC))
6342      return 0;
6343
6344    SearchDC = DC;
6345    // Look-up name inside 'foo::'.
6346    LookupQualifiedName(Previous, DC);
6347
6348    if (Previous.isAmbiguous())
6349      return 0;
6350
6351    if (Previous.empty()) {
6352      // Name lookup did not find anything. However, if the
6353      // nested-name-specifier refers to the current instantiation,
6354      // and that current instantiation has any dependent base
6355      // classes, we might find something at instantiation time: treat
6356      // this as a dependent elaborated-type-specifier.
6357      // But this only makes any sense for reference-like lookups.
6358      if (Previous.wasNotFoundInCurrentInstantiation() &&
6359          (TUK == TUK_Reference || TUK == TUK_Friend)) {
6360        IsDependent = true;
6361        return 0;
6362      }
6363
6364      // A tag 'foo::bar' must already exist.
6365      Diag(NameLoc, diag::err_not_tag_in_scope)
6366        << Kind << Name << DC << SS.getRange();
6367      Name = 0;
6368      Invalid = true;
6369      goto CreateNewDecl;
6370    }
6371  } else if (Name) {
6372    // If this is a named struct, check to see if there was a previous forward
6373    // declaration or definition.
6374    // FIXME: We're looking into outer scopes here, even when we
6375    // shouldn't be. Doing so can result in ambiguities that we
6376    // shouldn't be diagnosing.
6377    LookupName(Previous, S);
6378
6379    // Note:  there used to be some attempt at recovery here.
6380    if (Previous.isAmbiguous())
6381      return 0;
6382
6383    if (!getLangOptions().CPlusPlus && TUK != TUK_Reference) {
6384      // FIXME: This makes sure that we ignore the contexts associated
6385      // with C structs, unions, and enums when looking for a matching
6386      // tag declaration or definition. See the similar lookup tweak
6387      // in Sema::LookupName; is there a better way to deal with this?
6388      while (isa<RecordDecl>(SearchDC) || isa<EnumDecl>(SearchDC))
6389        SearchDC = SearchDC->getParent();
6390    }
6391  } else if (S->isFunctionPrototypeScope()) {
6392    // If this is an enum declaration in function prototype scope, set its
6393    // initial context to the translation unit.
6394    SearchDC = Context.getTranslationUnitDecl();
6395  }
6396
6397  if (Previous.isSingleResult() &&
6398      Previous.getFoundDecl()->isTemplateParameter()) {
6399    // Maybe we will complain about the shadowed template parameter.
6400    DiagnoseTemplateParameterShadow(NameLoc, Previous.getFoundDecl());
6401    // Just pretend that we didn't see the previous declaration.
6402    Previous.clear();
6403  }
6404
6405  if (getLangOptions().CPlusPlus && Name && DC && StdNamespace &&
6406      DC->Equals(getStdNamespace()) && Name->isStr("bad_alloc")) {
6407    // This is a declaration of or a reference to "std::bad_alloc".
6408    isStdBadAlloc = true;
6409
6410    if (Previous.empty() && StdBadAlloc) {
6411      // std::bad_alloc has been implicitly declared (but made invisible to
6412      // name lookup). Fill in this implicit declaration as the previous
6413      // declaration, so that the declarations get chained appropriately.
6414      Previous.addDecl(getStdBadAlloc());
6415    }
6416  }
6417
6418  // If we didn't find a previous declaration, and this is a reference
6419  // (or friend reference), move to the correct scope.  In C++, we
6420  // also need to do a redeclaration lookup there, just in case
6421  // there's a shadow friend decl.
6422  if (Name && Previous.empty() &&
6423      (TUK == TUK_Reference || TUK == TUK_Friend)) {
6424    if (Invalid) goto CreateNewDecl;
6425    assert(SS.isEmpty());
6426
6427    if (TUK == TUK_Reference) {
6428      // C++ [basic.scope.pdecl]p5:
6429      //   -- for an elaborated-type-specifier of the form
6430      //
6431      //          class-key identifier
6432      //
6433      //      if the elaborated-type-specifier is used in the
6434      //      decl-specifier-seq or parameter-declaration-clause of a
6435      //      function defined in namespace scope, the identifier is
6436      //      declared as a class-name in the namespace that contains
6437      //      the declaration; otherwise, except as a friend
6438      //      declaration, the identifier is declared in the smallest
6439      //      non-class, non-function-prototype scope that contains the
6440      //      declaration.
6441      //
6442      // C99 6.7.2.3p8 has a similar (but not identical!) provision for
6443      // C structs and unions.
6444      //
6445      // It is an error in C++ to declare (rather than define) an enum
6446      // type, including via an elaborated type specifier.  We'll
6447      // diagnose that later; for now, declare the enum in the same
6448      // scope as we would have picked for any other tag type.
6449      //
6450      // GNU C also supports this behavior as part of its incomplete
6451      // enum types extension, while GNU C++ does not.
6452      //
6453      // Find the context where we'll be declaring the tag.
6454      // FIXME: We would like to maintain the current DeclContext as the
6455      // lexical context,
6456      while (SearchDC->isRecord() || SearchDC->isTransparentContext())
6457        SearchDC = SearchDC->getParent();
6458
6459      // Find the scope where we'll be declaring the tag.
6460      while (S->isClassScope() ||
6461             (getLangOptions().CPlusPlus &&
6462              S->isFunctionPrototypeScope()) ||
6463             ((S->getFlags() & Scope::DeclScope) == 0) ||
6464             (S->getEntity() &&
6465              ((DeclContext *)S->getEntity())->isTransparentContext()))
6466        S = S->getParent();
6467    } else {
6468      assert(TUK == TUK_Friend);
6469      // C++ [namespace.memdef]p3:
6470      //   If a friend declaration in a non-local class first declares a
6471      //   class or function, the friend class or function is a member of
6472      //   the innermost enclosing namespace.
6473      SearchDC = SearchDC->getEnclosingNamespaceContext();
6474    }
6475
6476    // In C++, we need to do a redeclaration lookup to properly
6477    // diagnose some problems.
6478    if (getLangOptions().CPlusPlus) {
6479      Previous.setRedeclarationKind(ForRedeclaration);
6480      LookupQualifiedName(Previous, SearchDC);
6481    }
6482  }
6483
6484  if (!Previous.empty()) {
6485    NamedDecl *PrevDecl = (*Previous.begin())->getUnderlyingDecl();
6486
6487    // It's okay to have a tag decl in the same scope as a typedef
6488    // which hides a tag decl in the same scope.  Finding this
6489    // insanity with a redeclaration lookup can only actually happen
6490    // in C++.
6491    //
6492    // This is also okay for elaborated-type-specifiers, which is
6493    // technically forbidden by the current standard but which is
6494    // okay according to the likely resolution of an open issue;
6495    // see http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#407
6496    if (getLangOptions().CPlusPlus) {
6497      if (TypedefNameDecl *TD = dyn_cast<TypedefNameDecl>(PrevDecl)) {
6498        if (const TagType *TT = TD->getUnderlyingType()->getAs<TagType>()) {
6499          TagDecl *Tag = TT->getDecl();
6500          if (Tag->getDeclName() == Name &&
6501              Tag->getDeclContext()->getRedeclContext()
6502                          ->Equals(TD->getDeclContext()->getRedeclContext())) {
6503            PrevDecl = Tag;
6504            Previous.clear();
6505            Previous.addDecl(Tag);
6506            Previous.resolveKind();
6507          }
6508        }
6509      }
6510    }
6511
6512    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {
6513      // If this is a use of a previous tag, or if the tag is already declared
6514      // in the same scope (so that the definition/declaration completes or
6515      // rementions the tag), reuse the decl.
6516      if (TUK == TUK_Reference || TUK == TUK_Friend ||
6517          isDeclInScope(PrevDecl, SearchDC, S, isExplicitSpecialization)) {
6518        // Make sure that this wasn't declared as an enum and now used as a
6519        // struct or something similar.
6520        if (!isAcceptableTagRedeclaration(PrevTagDecl, Kind, KWLoc, *Name)) {
6521          bool SafeToContinue
6522            = (PrevTagDecl->getTagKind() != TTK_Enum &&
6523               Kind != TTK_Enum);
6524          if (SafeToContinue)
6525            Diag(KWLoc, diag::err_use_with_wrong_tag)
6526              << Name
6527              << FixItHint::CreateReplacement(SourceRange(KWLoc),
6528                                              PrevTagDecl->getKindName());
6529          else
6530            Diag(KWLoc, diag::err_use_with_wrong_tag) << Name;
6531          Diag(PrevTagDecl->getLocation(), diag::note_previous_use);
6532
6533          if (SafeToContinue)
6534            Kind = PrevTagDecl->getTagKind();
6535          else {
6536            // Recover by making this an anonymous redefinition.
6537            Name = 0;
6538            Previous.clear();
6539            Invalid = true;
6540          }
6541        }
6542
6543        if (Kind == TTK_Enum && PrevTagDecl->getTagKind() == TTK_Enum) {
6544          const EnumDecl *PrevEnum = cast<EnumDecl>(PrevTagDecl);
6545
6546          // All conflicts with previous declarations are recovered by
6547          // returning the previous declaration.
6548          if (ScopedEnum != PrevEnum->isScoped()) {
6549            Diag(KWLoc, diag::err_enum_redeclare_scoped_mismatch)
6550              << PrevEnum->isScoped();
6551            Diag(PrevTagDecl->getLocation(), diag::note_previous_use);
6552            return PrevTagDecl;
6553          }
6554          else if (EnumUnderlying && PrevEnum->isFixed()) {
6555            QualType T;
6556            if (TypeSourceInfo *TI = EnumUnderlying.dyn_cast<TypeSourceInfo*>())
6557                T = TI->getType();
6558            else
6559                T = QualType(EnumUnderlying.get<const Type*>(), 0);
6560
6561            if (!Context.hasSameUnqualifiedType(T, PrevEnum->getIntegerType())) {
6562              Diag(NameLoc.isValid() ? NameLoc : KWLoc,
6563                   diag::err_enum_redeclare_type_mismatch)
6564                << T
6565                << PrevEnum->getIntegerType();
6566              Diag(PrevTagDecl->getLocation(), diag::note_previous_use);
6567              return PrevTagDecl;
6568            }
6569          }
6570          else if (!EnumUnderlying.isNull() != PrevEnum->isFixed()) {
6571            Diag(KWLoc, diag::err_enum_redeclare_fixed_mismatch)
6572              << PrevEnum->isFixed();
6573            Diag(PrevTagDecl->getLocation(), diag::note_previous_use);
6574            return PrevTagDecl;
6575          }
6576        }
6577
6578        if (!Invalid) {
6579          // If this is a use, just return the declaration we found.
6580
6581          // FIXME: In the future, return a variant or some other clue
6582          // for the consumer of this Decl to know it doesn't own it.
6583          // For our current ASTs this shouldn't be a problem, but will
6584          // need to be changed with DeclGroups.
6585          if ((TUK == TUK_Reference && !PrevTagDecl->getFriendObjectKind()) ||
6586              TUK == TUK_Friend)
6587            return PrevTagDecl;
6588
6589          // Diagnose attempts to redefine a tag.
6590          if (TUK == TUK_Definition) {
6591            if (TagDecl *Def = PrevTagDecl->getDefinition()) {
6592              // If we're defining a specialization and the previous definition
6593              // is from an implicit instantiation, don't emit an error
6594              // here; we'll catch this in the general case below.
6595              if (!isExplicitSpecialization ||
6596                  !isa<CXXRecordDecl>(Def) ||
6597                  cast<CXXRecordDecl>(Def)->getTemplateSpecializationKind()
6598                                               == TSK_ExplicitSpecialization) {
6599                Diag(NameLoc, diag::err_redefinition) << Name;
6600                Diag(Def->getLocation(), diag::note_previous_definition);
6601                // If this is a redefinition, recover by making this
6602                // struct be anonymous, which will make any later
6603                // references get the previous definition.
6604                Name = 0;
6605                Previous.clear();
6606                Invalid = true;
6607              }
6608            } else {
6609              // If the type is currently being defined, complain
6610              // about a nested redefinition.
6611              const TagType *Tag
6612                = cast<TagType>(Context.getTagDeclType(PrevTagDecl));
6613              if (Tag->isBeingDefined()) {
6614                Diag(NameLoc, diag::err_nested_redefinition) << Name;
6615                Diag(PrevTagDecl->getLocation(),
6616                     diag::note_previous_definition);
6617                Name = 0;
6618                Previous.clear();
6619                Invalid = true;
6620              }
6621            }
6622
6623            // Okay, this is definition of a previously declared or referenced
6624            // tag PrevDecl. We're going to create a new Decl for it.
6625          }
6626        }
6627        // If we get here we have (another) forward declaration or we
6628        // have a definition.  Just create a new decl.
6629
6630      } else {
6631        // If we get here, this is a definition of a new tag type in a nested
6632        // scope, e.g. "struct foo; void bar() { struct foo; }", just create a
6633        // new decl/type.  We set PrevDecl to NULL so that the entities
6634        // have distinct types.
6635        Previous.clear();
6636      }
6637      // If we get here, we're going to create a new Decl. If PrevDecl
6638      // is non-NULL, it's a definition of the tag declared by
6639      // PrevDecl. If it's NULL, we have a new definition.
6640
6641
6642    // Otherwise, PrevDecl is not a tag, but was found with tag
6643    // lookup.  This is only actually possible in C++, where a few
6644    // things like templates still live in the tag namespace.
6645    } else {
6646      assert(getLangOptions().CPlusPlus);
6647
6648      // Use a better diagnostic if an elaborated-type-specifier
6649      // found the wrong kind of type on the first
6650      // (non-redeclaration) lookup.
6651      if ((TUK == TUK_Reference || TUK == TUK_Friend) &&
6652          !Previous.isForRedeclaration()) {
6653        unsigned Kind = 0;
6654        if (isa<TypedefDecl>(PrevDecl)) Kind = 1;
6655        else if (isa<TypeAliasDecl>(PrevDecl)) Kind = 2;
6656        else if (isa<ClassTemplateDecl>(PrevDecl)) Kind = 3;
6657        Diag(NameLoc, diag::err_tag_reference_non_tag) << Kind;
6658        Diag(PrevDecl->getLocation(), diag::note_declared_at);
6659        Invalid = true;
6660
6661      // Otherwise, only diagnose if the declaration is in scope.
6662      } else if (!isDeclInScope(PrevDecl, SearchDC, S,
6663                                isExplicitSpecialization)) {
6664        // do nothing
6665
6666      // Diagnose implicit declarations introduced by elaborated types.
6667      } else if (TUK == TUK_Reference || TUK == TUK_Friend) {
6668        unsigned Kind = 0;
6669        if (isa<TypedefDecl>(PrevDecl)) Kind = 1;
6670        else if (isa<TypeAliasDecl>(PrevDecl)) Kind = 2;
6671        else if (isa<ClassTemplateDecl>(PrevDecl)) Kind = 3;
6672        Diag(NameLoc, diag::err_tag_reference_conflict) << Kind;
6673        Diag(PrevDecl->getLocation(), diag::note_previous_decl) << PrevDecl;
6674        Invalid = true;
6675
6676      // Otherwise it's a declaration.  Call out a particularly common
6677      // case here.
6678      } else if (TypedefNameDecl *TND = dyn_cast<TypedefNameDecl>(PrevDecl)) {
6679        unsigned Kind = 0;
6680        if (isa<TypeAliasDecl>(PrevDecl)) Kind = 1;
6681        Diag(NameLoc, diag::err_tag_definition_of_typedef)
6682          << Name << Kind << TND->getUnderlyingType();
6683        Diag(PrevDecl->getLocation(), diag::note_previous_decl) << PrevDecl;
6684        Invalid = true;
6685
6686      // Otherwise, diagnose.
6687      } else {
6688        // The tag name clashes with something else in the target scope,
6689        // issue an error and recover by making this tag be anonymous.
6690        Diag(NameLoc, diag::err_redefinition_different_kind) << Name;
6691        Diag(PrevDecl->getLocation(), diag::note_previous_definition);
6692        Name = 0;
6693        Invalid = true;
6694      }
6695
6696      // The existing declaration isn't relevant to us; we're in a
6697      // new scope, so clear out the previous declaration.
6698      Previous.clear();
6699    }
6700  }
6701
6702CreateNewDecl:
6703
6704  TagDecl *PrevDecl = 0;
6705  if (Previous.isSingleResult())
6706    PrevDecl = cast<TagDecl>(Previous.getFoundDecl());
6707
6708  // If there is an identifier, use the location of the identifier as the
6709  // location of the decl, otherwise use the location of the struct/union
6710  // keyword.
6711  SourceLocation Loc = NameLoc.isValid() ? NameLoc : KWLoc;
6712
6713  // Otherwise, create a new declaration. If there is a previous
6714  // declaration of the same entity, the two will be linked via
6715  // PrevDecl.
6716  TagDecl *New;
6717
6718  bool IsForwardReference = false;
6719  if (Kind == TTK_Enum) {
6720    // FIXME: Tag decls should be chained to any simultaneous vardecls, e.g.:
6721    // enum X { A, B, C } D;    D should chain to X.
6722    New = EnumDecl::Create(Context, SearchDC, KWLoc, Loc, Name,
6723                           cast_or_null<EnumDecl>(PrevDecl), ScopedEnum,
6724                           ScopedEnumUsesClassTag, !EnumUnderlying.isNull());
6725    // If this is an undefined enum, warn.
6726    if (TUK != TUK_Definition && !Invalid) {
6727      TagDecl *Def;
6728      if (getLangOptions().CPlusPlus0x && cast<EnumDecl>(New)->isFixed()) {
6729        // C++0x: 7.2p2: opaque-enum-declaration.
6730        // Conflicts are diagnosed above. Do nothing.
6731      }
6732      else if (PrevDecl && (Def = cast<EnumDecl>(PrevDecl)->getDefinition())) {
6733        Diag(Loc, diag::ext_forward_ref_enum_def)
6734          << New;
6735        Diag(Def->getLocation(), diag::note_previous_definition);
6736      } else {
6737        unsigned DiagID = diag::ext_forward_ref_enum;
6738        if (getLangOptions().Microsoft)
6739          DiagID = diag::ext_ms_forward_ref_enum;
6740        else if (getLangOptions().CPlusPlus)
6741          DiagID = diag::err_forward_ref_enum;
6742        Diag(Loc, DiagID);
6743
6744        // If this is a forward-declared reference to an enumeration, make a
6745        // note of it; we won't actually be introducing the declaration into
6746        // the declaration context.
6747        if (TUK == TUK_Reference)
6748          IsForwardReference = true;
6749      }
6750    }
6751
6752    if (EnumUnderlying) {
6753      EnumDecl *ED = cast<EnumDecl>(New);
6754      if (TypeSourceInfo *TI = EnumUnderlying.dyn_cast<TypeSourceInfo*>())
6755        ED->setIntegerTypeSourceInfo(TI);
6756      else
6757        ED->setIntegerType(QualType(EnumUnderlying.get<const Type*>(), 0));
6758      ED->setPromotionType(ED->getIntegerType());
6759    }
6760
6761  } else {
6762    // struct/union/class
6763
6764    // FIXME: Tag decls should be chained to any simultaneous vardecls, e.g.:
6765    // struct X { int A; } D;    D should chain to X.
6766    if (getLangOptions().CPlusPlus) {
6767      // FIXME: Look for a way to use RecordDecl for simple structs.
6768      New = CXXRecordDecl::Create(Context, Kind, SearchDC, KWLoc, Loc, Name,
6769                                  cast_or_null<CXXRecordDecl>(PrevDecl));
6770
6771      if (isStdBadAlloc && (!StdBadAlloc || getStdBadAlloc()->isImplicit()))
6772        StdBadAlloc = cast<CXXRecordDecl>(New);
6773    } else
6774      New = RecordDecl::Create(Context, Kind, SearchDC, KWLoc, Loc, Name,
6775                               cast_or_null<RecordDecl>(PrevDecl));
6776  }
6777
6778  // Maybe add qualifier info.
6779  if (SS.isNotEmpty()) {
6780    if (SS.isSet()) {
6781      New->setQualifierInfo(SS.getWithLocInContext(Context));
6782      if (TemplateParameterLists.size() > 0) {
6783        New->setTemplateParameterListsInfo(Context,
6784                                           TemplateParameterLists.size(),
6785                    (TemplateParameterList**) TemplateParameterLists.release());
6786      }
6787    }
6788    else
6789      Invalid = true;
6790  }
6791
6792  if (RecordDecl *RD = dyn_cast<RecordDecl>(New)) {
6793    // Add alignment attributes if necessary; these attributes are checked when
6794    // the ASTContext lays out the structure.
6795    //
6796    // It is important for implementing the correct semantics that this
6797    // happen here (in act on tag decl). The #pragma pack stack is
6798    // maintained as a result of parser callbacks which can occur at
6799    // many points during the parsing of a struct declaration (because
6800    // the #pragma tokens are effectively skipped over during the
6801    // parsing of the struct).
6802    AddAlignmentAttributesForRecord(RD);
6803  }
6804
6805  // If this is a specialization of a member class (of a class template),
6806  // check the specialization.
6807  if (isExplicitSpecialization && CheckMemberSpecialization(New, Previous))
6808    Invalid = true;
6809
6810  if (Invalid)
6811    New->setInvalidDecl();
6812
6813  if (Attr)
6814    ProcessDeclAttributeList(S, New, Attr);
6815
6816  // If we're declaring or defining a tag in function prototype scope
6817  // in C, note that this type can only be used within the function.
6818  if (Name && S->isFunctionPrototypeScope() && !getLangOptions().CPlusPlus)
6819    Diag(Loc, diag::warn_decl_in_param_list) << Context.getTagDeclType(New);
6820
6821  // Set the lexical context. If the tag has a C++ scope specifier, the
6822  // lexical context will be different from the semantic context.
6823  New->setLexicalDeclContext(CurContext);
6824
6825  // Mark this as a friend decl if applicable.
6826  if (TUK == TUK_Friend)
6827    New->setObjectOfFriendDecl(/* PreviouslyDeclared = */ !Previous.empty());
6828
6829  // Set the access specifier.
6830  if (!Invalid && SearchDC->isRecord())
6831    SetMemberAccessSpecifier(New, PrevDecl, AS);
6832
6833  if (TUK == TUK_Definition)
6834    New->startDefinition();
6835
6836  // If this has an identifier, add it to the scope stack.
6837  if (TUK == TUK_Friend) {
6838    // We might be replacing an existing declaration in the lookup tables;
6839    // if so, borrow its access specifier.
6840    if (PrevDecl)
6841      New->setAccess(PrevDecl->getAccess());
6842
6843    DeclContext *DC = New->getDeclContext()->getRedeclContext();
6844    DC->makeDeclVisibleInContext(New, /* Recoverable = */ false);
6845    if (Name) // can be null along some error paths
6846      if (Scope *EnclosingScope = getScopeForDeclContext(S, DC))
6847        PushOnScopeChains(New, EnclosingScope, /* AddToContext = */ false);
6848  } else if (Name) {
6849    S = getNonFieldDeclScope(S);
6850    PushOnScopeChains(New, S, !IsForwardReference);
6851    if (IsForwardReference)
6852      SearchDC->makeDeclVisibleInContext(New, /* Recoverable = */ false);
6853
6854  } else {
6855    CurContext->addDecl(New);
6856  }
6857
6858  // If this is the C FILE type, notify the AST context.
6859  if (IdentifierInfo *II = New->getIdentifier())
6860    if (!New->isInvalidDecl() &&
6861        New->getDeclContext()->getRedeclContext()->isTranslationUnit() &&
6862        II->isStr("FILE"))
6863      Context.setFILEDecl(New);
6864
6865  OwnedDecl = true;
6866  return New;
6867}
6868
6869void Sema::ActOnTagStartDefinition(Scope *S, Decl *TagD) {
6870  AdjustDeclIfTemplate(TagD);
6871  TagDecl *Tag = cast<TagDecl>(TagD);
6872
6873  // Enter the tag context.
6874  PushDeclContext(S, Tag);
6875}
6876
6877void Sema::ActOnStartCXXMemberDeclarations(Scope *S, Decl *TagD,
6878                                           SourceLocation FinalLoc,
6879                                           SourceLocation LBraceLoc) {
6880  AdjustDeclIfTemplate(TagD);
6881  CXXRecordDecl *Record = cast<CXXRecordDecl>(TagD);
6882
6883  FieldCollector->StartClass();
6884
6885  if (!Record->getIdentifier())
6886    return;
6887
6888  if (FinalLoc.isValid())
6889    Record->addAttr(new (Context) FinalAttr(FinalLoc, Context));
6890
6891  // C++ [class]p2:
6892  //   [...] The class-name is also inserted into the scope of the
6893  //   class itself; this is known as the injected-class-name. For
6894  //   purposes of access checking, the injected-class-name is treated
6895  //   as if it were a public member name.
6896  CXXRecordDecl *InjectedClassName
6897    = CXXRecordDecl::Create(Context, Record->getTagKind(), CurContext,
6898                            Record->getLocStart(), Record->getLocation(),
6899                            Record->getIdentifier(),
6900                            /*PrevDecl=*/0,
6901                            /*DelayTypeCreation=*/true);
6902  Context.getTypeDeclType(InjectedClassName, Record);
6903  InjectedClassName->setImplicit();
6904  InjectedClassName->setAccess(AS_public);
6905  if (ClassTemplateDecl *Template = Record->getDescribedClassTemplate())
6906      InjectedClassName->setDescribedClassTemplate(Template);
6907  PushOnScopeChains(InjectedClassName, S);
6908  assert(InjectedClassName->isInjectedClassName() &&
6909         "Broken injected-class-name");
6910}
6911
6912void Sema::ActOnTagFinishDefinition(Scope *S, Decl *TagD,
6913                                    SourceLocation RBraceLoc) {
6914  AdjustDeclIfTemplate(TagD);
6915  TagDecl *Tag = cast<TagDecl>(TagD);
6916  Tag->setRBraceLoc(RBraceLoc);
6917
6918  if (isa<CXXRecordDecl>(Tag))
6919    FieldCollector->FinishClass();
6920
6921  // Exit this scope of this tag's definition.
6922  PopDeclContext();
6923
6924  // Notify the consumer that we've defined a tag.
6925  Consumer.HandleTagDeclDefinition(Tag);
6926}
6927
6928void Sema::ActOnTagDefinitionError(Scope *S, Decl *TagD) {
6929  AdjustDeclIfTemplate(TagD);
6930  TagDecl *Tag = cast<TagDecl>(TagD);
6931  Tag->setInvalidDecl();
6932
6933  // We're undoing ActOnTagStartDefinition here, not
6934  // ActOnStartCXXMemberDeclarations, so we don't have to mess with
6935  // the FieldCollector.
6936
6937  PopDeclContext();
6938}
6939
6940// Note that FieldName may be null for anonymous bitfields.
6941bool Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName,
6942                          QualType FieldTy, const Expr *BitWidth,
6943                          bool *ZeroWidth) {
6944  // Default to true; that shouldn't confuse checks for emptiness
6945  if (ZeroWidth)
6946    *ZeroWidth = true;
6947
6948  // C99 6.7.2.1p4 - verify the field type.
6949  // C++ 9.6p3: A bit-field shall have integral or enumeration type.
6950  if (!FieldTy->isDependentType() && !FieldTy->isIntegralOrEnumerationType()) {
6951    // Handle incomplete types with specific error.
6952    if (RequireCompleteType(FieldLoc, FieldTy, diag::err_field_incomplete))
6953      return true;
6954    if (FieldName)
6955      return Diag(FieldLoc, diag::err_not_integral_type_bitfield)
6956        << FieldName << FieldTy << BitWidth->getSourceRange();
6957    return Diag(FieldLoc, diag::err_not_integral_type_anon_bitfield)
6958      << FieldTy << BitWidth->getSourceRange();
6959  } else if (DiagnoseUnexpandedParameterPack(const_cast<Expr *>(BitWidth),
6960                                             UPPC_BitFieldWidth))
6961    return true;
6962
6963  // If the bit-width is type- or value-dependent, don't try to check
6964  // it now.
6965  if (BitWidth->isValueDependent() || BitWidth->isTypeDependent())
6966    return false;
6967
6968  llvm::APSInt Value;
6969  if (VerifyIntegerConstantExpression(BitWidth, &Value))
6970    return true;
6971
6972  if (Value != 0 && ZeroWidth)
6973    *ZeroWidth = false;
6974
6975  // Zero-width bitfield is ok for anonymous field.
6976  if (Value == 0 && FieldName)
6977    return Diag(FieldLoc, diag::err_bitfield_has_zero_width) << FieldName;
6978
6979  if (Value.isSigned() && Value.isNegative()) {
6980    if (FieldName)
6981      return Diag(FieldLoc, diag::err_bitfield_has_negative_width)
6982               << FieldName << Value.toString(10);
6983    return Diag(FieldLoc, diag::err_anon_bitfield_has_negative_width)
6984      << Value.toString(10);
6985  }
6986
6987  if (!FieldTy->isDependentType()) {
6988    uint64_t TypeSize = Context.getTypeSize(FieldTy);
6989    if (Value.getZExtValue() > TypeSize) {
6990      if (!getLangOptions().CPlusPlus) {
6991        if (FieldName)
6992          return Diag(FieldLoc, diag::err_bitfield_width_exceeds_type_size)
6993            << FieldName << (unsigned)Value.getZExtValue()
6994            << (unsigned)TypeSize;
6995
6996        return Diag(FieldLoc, diag::err_anon_bitfield_width_exceeds_type_size)
6997          << (unsigned)Value.getZExtValue() << (unsigned)TypeSize;
6998      }
6999
7000      if (FieldName)
7001        Diag(FieldLoc, diag::warn_bitfield_width_exceeds_type_size)
7002          << FieldName << (unsigned)Value.getZExtValue()
7003          << (unsigned)TypeSize;
7004      else
7005        Diag(FieldLoc, diag::warn_anon_bitfield_width_exceeds_type_size)
7006          << (unsigned)Value.getZExtValue() << (unsigned)TypeSize;
7007    }
7008  }
7009
7010  return false;
7011}
7012
7013/// ActOnField - Each field of a struct/union/class is passed into this in order
7014/// to create a FieldDecl object for it.
7015Decl *Sema::ActOnField(Scope *S, Decl *TagD,
7016                                 SourceLocation DeclStart,
7017                                 Declarator &D, ExprTy *BitfieldWidth) {
7018  FieldDecl *Res = HandleField(S, cast_or_null<RecordDecl>(TagD),
7019                               DeclStart, D, static_cast<Expr*>(BitfieldWidth),
7020                               AS_public);
7021  return Res;
7022}
7023
7024/// HandleField - Analyze a field of a C struct or a C++ data member.
7025///
7026FieldDecl *Sema::HandleField(Scope *S, RecordDecl *Record,
7027                             SourceLocation DeclStart,
7028                             Declarator &D, Expr *BitWidth,
7029                             AccessSpecifier AS) {
7030  IdentifierInfo *II = D.getIdentifier();
7031  SourceLocation Loc = DeclStart;
7032  if (II) Loc = D.getIdentifierLoc();
7033
7034  TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
7035  QualType T = TInfo->getType();
7036  if (getLangOptions().CPlusPlus) {
7037    CheckExtraCXXDefaultArguments(D);
7038
7039    if (DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo,
7040                                        UPPC_DataMemberType)) {
7041      D.setInvalidType();
7042      T = Context.IntTy;
7043      TInfo = Context.getTrivialTypeSourceInfo(T, Loc);
7044    }
7045  }
7046
7047  DiagnoseFunctionSpecifiers(D);
7048
7049  if (D.getDeclSpec().isThreadSpecified())
7050    Diag(D.getDeclSpec().getThreadSpecLoc(), diag::err_invalid_thread);
7051
7052  // Check to see if this name was declared as a member previously
7053  LookupResult Previous(*this, II, Loc, LookupMemberName, ForRedeclaration);
7054  LookupName(Previous, S);
7055  assert((Previous.empty() || Previous.isOverloadedResult() ||
7056          Previous.isSingleResult())
7057    && "Lookup of member name should be either overloaded, single or null");
7058
7059  // If the name is overloaded then get any declaration else get the single result
7060  NamedDecl *PrevDecl = Previous.isOverloadedResult() ?
7061    Previous.getRepresentativeDecl() : Previous.getAsSingle<NamedDecl>();
7062
7063  if (PrevDecl && PrevDecl->isTemplateParameter()) {
7064    // Maybe we will complain about the shadowed template parameter.
7065    DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
7066    // Just pretend that we didn't see the previous declaration.
7067    PrevDecl = 0;
7068  }
7069
7070  if (PrevDecl && !isDeclInScope(PrevDecl, Record, S))
7071    PrevDecl = 0;
7072
7073  bool Mutable
7074    = (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_mutable);
7075  SourceLocation TSSL = D.getSourceRange().getBegin();
7076  FieldDecl *NewFD
7077    = CheckFieldDecl(II, T, TInfo, Record, Loc, Mutable, BitWidth, TSSL,
7078                     AS, PrevDecl, &D);
7079
7080  if (NewFD->isInvalidDecl())
7081    Record->setInvalidDecl();
7082
7083  if (NewFD->isInvalidDecl() && PrevDecl) {
7084    // Don't introduce NewFD into scope; there's already something
7085    // with the same name in the same scope.
7086  } else if (II) {
7087    PushOnScopeChains(NewFD, S);
7088  } else
7089    Record->addDecl(NewFD);
7090
7091  return NewFD;
7092}
7093
7094/// \brief Build a new FieldDecl and check its well-formedness.
7095///
7096/// This routine builds a new FieldDecl given the fields name, type,
7097/// record, etc. \p PrevDecl should refer to any previous declaration
7098/// with the same name and in the same scope as the field to be
7099/// created.
7100///
7101/// \returns a new FieldDecl.
7102///
7103/// \todo The Declarator argument is a hack. It will be removed once
7104FieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T,
7105                                TypeSourceInfo *TInfo,
7106                                RecordDecl *Record, SourceLocation Loc,
7107                                bool Mutable, Expr *BitWidth,
7108                                SourceLocation TSSL,
7109                                AccessSpecifier AS, NamedDecl *PrevDecl,
7110                                Declarator *D) {
7111  IdentifierInfo *II = Name.getAsIdentifierInfo();
7112  bool InvalidDecl = false;
7113  if (D) InvalidDecl = D->isInvalidType();
7114
7115  // If we receive a broken type, recover by assuming 'int' and
7116  // marking this declaration as invalid.
7117  if (T.isNull()) {
7118    InvalidDecl = true;
7119    T = Context.IntTy;
7120  }
7121
7122  QualType EltTy = Context.getBaseElementType(T);
7123  if (!EltTy->isDependentType() &&
7124      RequireCompleteType(Loc, EltTy, diag::err_field_incomplete)) {
7125    // Fields of incomplete type force their record to be invalid.
7126    Record->setInvalidDecl();
7127    InvalidDecl = true;
7128  }
7129
7130  // C99 6.7.2.1p8: A member of a structure or union may have any type other
7131  // than a variably modified type.
7132  if (!InvalidDecl && T->isVariablyModifiedType()) {
7133    bool SizeIsNegative;
7134    llvm::APSInt Oversized;
7135    QualType FixedTy = TryToFixInvalidVariablyModifiedType(T, Context,
7136                                                           SizeIsNegative,
7137                                                           Oversized);
7138    if (!FixedTy.isNull()) {
7139      Diag(Loc, diag::warn_illegal_constant_array_size);
7140      T = FixedTy;
7141    } else {
7142      if (SizeIsNegative)
7143        Diag(Loc, diag::err_typecheck_negative_array_size);
7144      else if (Oversized.getBoolValue())
7145        Diag(Loc, diag::err_array_too_large)
7146          << Oversized.toString(10);
7147      else
7148        Diag(Loc, diag::err_typecheck_field_variable_size);
7149      InvalidDecl = true;
7150    }
7151  }
7152
7153  // Fields can not have abstract class types
7154  if (!InvalidDecl && RequireNonAbstractType(Loc, T,
7155                                             diag::err_abstract_type_in_decl,
7156                                             AbstractFieldType))
7157    InvalidDecl = true;
7158
7159  bool ZeroWidth = false;
7160  // If this is declared as a bit-field, check the bit-field.
7161  if (!InvalidDecl && BitWidth &&
7162      VerifyBitField(Loc, II, T, BitWidth, &ZeroWidth)) {
7163    InvalidDecl = true;
7164    BitWidth = 0;
7165    ZeroWidth = false;
7166  }
7167
7168  // Check that 'mutable' is consistent with the type of the declaration.
7169  if (!InvalidDecl && Mutable) {
7170    unsigned DiagID = 0;
7171    if (T->isReferenceType())
7172      DiagID = diag::err_mutable_reference;
7173    else if (T.isConstQualified())
7174      DiagID = diag::err_mutable_const;
7175
7176    if (DiagID) {
7177      SourceLocation ErrLoc = Loc;
7178      if (D && D->getDeclSpec().getStorageClassSpecLoc().isValid())
7179        ErrLoc = D->getDeclSpec().getStorageClassSpecLoc();
7180      Diag(ErrLoc, DiagID);
7181      Mutable = false;
7182      InvalidDecl = true;
7183    }
7184  }
7185
7186  FieldDecl *NewFD = FieldDecl::Create(Context, Record, TSSL, Loc, II, T, TInfo,
7187                                       BitWidth, Mutable);
7188  if (InvalidDecl)
7189    NewFD->setInvalidDecl();
7190
7191  if (PrevDecl && !isa<TagDecl>(PrevDecl)) {
7192    Diag(Loc, diag::err_duplicate_member) << II;
7193    Diag(PrevDecl->getLocation(), diag::note_previous_declaration);
7194    NewFD->setInvalidDecl();
7195  }
7196
7197  if (!InvalidDecl && getLangOptions().CPlusPlus) {
7198    if (Record->isUnion()) {
7199      if (const RecordType *RT = EltTy->getAs<RecordType>()) {
7200        CXXRecordDecl* RDecl = cast<CXXRecordDecl>(RT->getDecl());
7201        if (RDecl->getDefinition()) {
7202          // C++ [class.union]p1: An object of a class with a non-trivial
7203          // constructor, a non-trivial copy constructor, a non-trivial
7204          // destructor, or a non-trivial copy assignment operator
7205          // cannot be a member of a union, nor can an array of such
7206          // objects.
7207          // TODO: C++0x alters this restriction significantly.
7208          if (CheckNontrivialField(NewFD))
7209            NewFD->setInvalidDecl();
7210        }
7211      }
7212
7213      // C++ [class.union]p1: If a union contains a member of reference type,
7214      // the program is ill-formed.
7215      if (EltTy->isReferenceType()) {
7216        Diag(NewFD->getLocation(), diag::err_union_member_of_reference_type)
7217          << NewFD->getDeclName() << EltTy;
7218        NewFD->setInvalidDecl();
7219      }
7220    }
7221  }
7222
7223  // FIXME: We need to pass in the attributes given an AST
7224  // representation, not a parser representation.
7225  if (D)
7226    // FIXME: What to pass instead of TUScope?
7227    ProcessDeclAttributes(TUScope, NewFD, *D);
7228
7229  if (T.isObjCGCWeak())
7230    Diag(Loc, diag::warn_attribute_weak_on_field);
7231
7232  NewFD->setAccess(AS);
7233  return NewFD;
7234}
7235
7236bool Sema::CheckNontrivialField(FieldDecl *FD) {
7237  assert(FD);
7238  assert(getLangOptions().CPlusPlus && "valid check only for C++");
7239
7240  if (FD->isInvalidDecl())
7241    return true;
7242
7243  QualType EltTy = Context.getBaseElementType(FD->getType());
7244  if (const RecordType *RT = EltTy->getAs<RecordType>()) {
7245    CXXRecordDecl* RDecl = cast<CXXRecordDecl>(RT->getDecl());
7246    if (RDecl->getDefinition()) {
7247      // We check for copy constructors before constructors
7248      // because otherwise we'll never get complaints about
7249      // copy constructors.
7250
7251      CXXSpecialMember member = CXXInvalid;
7252      if (!RDecl->hasTrivialCopyConstructor())
7253        member = CXXCopyConstructor;
7254      else if (!RDecl->hasTrivialConstructor())
7255        member = CXXConstructor;
7256      else if (!RDecl->hasTrivialCopyAssignment())
7257        member = CXXCopyAssignment;
7258      else if (!RDecl->hasTrivialDestructor())
7259        member = CXXDestructor;
7260
7261      if (member != CXXInvalid) {
7262        Diag(FD->getLocation(), diag::err_illegal_union_or_anon_struct_member)
7263              << (int)FD->getParent()->isUnion() << FD->getDeclName() << member;
7264        DiagnoseNontrivial(RT, member);
7265        return true;
7266      }
7267    }
7268  }
7269
7270  return false;
7271}
7272
7273/// DiagnoseNontrivial - Given that a class has a non-trivial
7274/// special member, figure out why.
7275void Sema::DiagnoseNontrivial(const RecordType* T, CXXSpecialMember member) {
7276  QualType QT(T, 0U);
7277  CXXRecordDecl* RD = cast<CXXRecordDecl>(T->getDecl());
7278
7279  // Check whether the member was user-declared.
7280  switch (member) {
7281  case CXXInvalid:
7282    break;
7283
7284  case CXXConstructor:
7285    if (RD->hasUserDeclaredConstructor()) {
7286      typedef CXXRecordDecl::ctor_iterator ctor_iter;
7287      for (ctor_iter ci = RD->ctor_begin(), ce = RD->ctor_end(); ci != ce;++ci){
7288        const FunctionDecl *body = 0;
7289        ci->hasBody(body);
7290        if (!body || !cast<CXXConstructorDecl>(body)->isImplicitlyDefined()) {
7291          SourceLocation CtorLoc = ci->getLocation();
7292          Diag(CtorLoc, diag::note_nontrivial_user_defined) << QT << member;
7293          return;
7294        }
7295      }
7296
7297      assert(0 && "found no user-declared constructors");
7298      return;
7299    }
7300    break;
7301
7302  case CXXCopyConstructor:
7303    if (RD->hasUserDeclaredCopyConstructor()) {
7304      SourceLocation CtorLoc =
7305        RD->getCopyConstructor(Context, 0)->getLocation();
7306      Diag(CtorLoc, diag::note_nontrivial_user_defined) << QT << member;
7307      return;
7308    }
7309    break;
7310
7311  case CXXCopyAssignment:
7312    if (RD->hasUserDeclaredCopyAssignment()) {
7313      // FIXME: this should use the location of the copy
7314      // assignment, not the type.
7315      SourceLocation TyLoc = RD->getSourceRange().getBegin();
7316      Diag(TyLoc, diag::note_nontrivial_user_defined) << QT << member;
7317      return;
7318    }
7319    break;
7320
7321  case CXXDestructor:
7322    if (RD->hasUserDeclaredDestructor()) {
7323      SourceLocation DtorLoc = LookupDestructor(RD)->getLocation();
7324      Diag(DtorLoc, diag::note_nontrivial_user_defined) << QT << member;
7325      return;
7326    }
7327    break;
7328  }
7329
7330  typedef CXXRecordDecl::base_class_iterator base_iter;
7331
7332  // Virtual bases and members inhibit trivial copying/construction,
7333  // but not trivial destruction.
7334  if (member != CXXDestructor) {
7335    // Check for virtual bases.  vbases includes indirect virtual bases,
7336    // so we just iterate through the direct bases.
7337    for (base_iter bi = RD->bases_begin(), be = RD->bases_end(); bi != be; ++bi)
7338      if (bi->isVirtual()) {
7339        SourceLocation BaseLoc = bi->getSourceRange().getBegin();
7340        Diag(BaseLoc, diag::note_nontrivial_has_virtual) << QT << 1;
7341        return;
7342      }
7343
7344    // Check for virtual methods.
7345    typedef CXXRecordDecl::method_iterator meth_iter;
7346    for (meth_iter mi = RD->method_begin(), me = RD->method_end(); mi != me;
7347         ++mi) {
7348      if (mi->isVirtual()) {
7349        SourceLocation MLoc = mi->getSourceRange().getBegin();
7350        Diag(MLoc, diag::note_nontrivial_has_virtual) << QT << 0;
7351        return;
7352      }
7353    }
7354  }
7355
7356  bool (CXXRecordDecl::*hasTrivial)() const;
7357  switch (member) {
7358  case CXXConstructor:
7359    hasTrivial = &CXXRecordDecl::hasTrivialConstructor; break;
7360  case CXXCopyConstructor:
7361    hasTrivial = &CXXRecordDecl::hasTrivialCopyConstructor; break;
7362  case CXXCopyAssignment:
7363    hasTrivial = &CXXRecordDecl::hasTrivialCopyAssignment; break;
7364  case CXXDestructor:
7365    hasTrivial = &CXXRecordDecl::hasTrivialDestructor; break;
7366  default:
7367    assert(0 && "unexpected special member"); return;
7368  }
7369
7370  // Check for nontrivial bases (and recurse).
7371  for (base_iter bi = RD->bases_begin(), be = RD->bases_end(); bi != be; ++bi) {
7372    const RecordType *BaseRT = bi->getType()->getAs<RecordType>();
7373    assert(BaseRT && "Don't know how to handle dependent bases");
7374    CXXRecordDecl *BaseRecTy = cast<CXXRecordDecl>(BaseRT->getDecl());
7375    if (!(BaseRecTy->*hasTrivial)()) {
7376      SourceLocation BaseLoc = bi->getSourceRange().getBegin();
7377      Diag(BaseLoc, diag::note_nontrivial_has_nontrivial) << QT << 1 << member;
7378      DiagnoseNontrivial(BaseRT, member);
7379      return;
7380    }
7381  }
7382
7383  // Check for nontrivial members (and recurse).
7384  typedef RecordDecl::field_iterator field_iter;
7385  for (field_iter fi = RD->field_begin(), fe = RD->field_end(); fi != fe;
7386       ++fi) {
7387    QualType EltTy = Context.getBaseElementType((*fi)->getType());
7388    if (const RecordType *EltRT = EltTy->getAs<RecordType>()) {
7389      CXXRecordDecl* EltRD = cast<CXXRecordDecl>(EltRT->getDecl());
7390
7391      if (!(EltRD->*hasTrivial)()) {
7392        SourceLocation FLoc = (*fi)->getLocation();
7393        Diag(FLoc, diag::note_nontrivial_has_nontrivial) << QT << 0 << member;
7394        DiagnoseNontrivial(EltRT, member);
7395        return;
7396      }
7397    }
7398  }
7399
7400  assert(0 && "found no explanation for non-trivial member");
7401}
7402
7403/// TranslateIvarVisibility - Translate visibility from a token ID to an
7404///  AST enum value.
7405static ObjCIvarDecl::AccessControl
7406TranslateIvarVisibility(tok::ObjCKeywordKind ivarVisibility) {
7407  switch (ivarVisibility) {
7408  default: assert(0 && "Unknown visitibility kind");
7409  case tok::objc_private: return ObjCIvarDecl::Private;
7410  case tok::objc_public: return ObjCIvarDecl::Public;
7411  case tok::objc_protected: return ObjCIvarDecl::Protected;
7412  case tok::objc_package: return ObjCIvarDecl::Package;
7413  }
7414}
7415
7416/// ActOnIvar - Each ivar field of an objective-c class is passed into this
7417/// in order to create an IvarDecl object for it.
7418Decl *Sema::ActOnIvar(Scope *S,
7419                                SourceLocation DeclStart,
7420                                Decl *IntfDecl,
7421                                Declarator &D, ExprTy *BitfieldWidth,
7422                                tok::ObjCKeywordKind Visibility) {
7423
7424  IdentifierInfo *II = D.getIdentifier();
7425  Expr *BitWidth = (Expr*)BitfieldWidth;
7426  SourceLocation Loc = DeclStart;
7427  if (II) Loc = D.getIdentifierLoc();
7428
7429  // FIXME: Unnamed fields can be handled in various different ways, for
7430  // example, unnamed unions inject all members into the struct namespace!
7431
7432  TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
7433  QualType T = TInfo->getType();
7434
7435  if (BitWidth) {
7436    // 6.7.2.1p3, 6.7.2.1p4
7437    if (VerifyBitField(Loc, II, T, BitWidth)) {
7438      D.setInvalidType();
7439      BitWidth = 0;
7440    }
7441  } else {
7442    // Not a bitfield.
7443
7444    // validate II.
7445
7446  }
7447  if (T->isReferenceType()) {
7448    Diag(Loc, diag::err_ivar_reference_type);
7449    D.setInvalidType();
7450  }
7451  // C99 6.7.2.1p8: A member of a structure or union may have any type other
7452  // than a variably modified type.
7453  else if (T->isVariablyModifiedType()) {
7454    Diag(Loc, diag::err_typecheck_ivar_variable_size);
7455    D.setInvalidType();
7456  }
7457
7458  // Get the visibility (access control) for this ivar.
7459  ObjCIvarDecl::AccessControl ac =
7460    Visibility != tok::objc_not_keyword ? TranslateIvarVisibility(Visibility)
7461                                        : ObjCIvarDecl::None;
7462  // Must set ivar's DeclContext to its enclosing interface.
7463  ObjCContainerDecl *EnclosingDecl = cast<ObjCContainerDecl>(IntfDecl);
7464  ObjCContainerDecl *EnclosingContext;
7465  if (ObjCImplementationDecl *IMPDecl =
7466      dyn_cast<ObjCImplementationDecl>(EnclosingDecl)) {
7467    if (!LangOpts.ObjCNonFragileABI2) {
7468    // Case of ivar declared in an implementation. Context is that of its class.
7469      EnclosingContext = IMPDecl->getClassInterface();
7470      assert(EnclosingContext && "Implementation has no class interface!");
7471    }
7472    else
7473      EnclosingContext = EnclosingDecl;
7474  } else {
7475    if (ObjCCategoryDecl *CDecl =
7476        dyn_cast<ObjCCategoryDecl>(EnclosingDecl)) {
7477      if (!LangOpts.ObjCNonFragileABI2 || !CDecl->IsClassExtension()) {
7478        Diag(Loc, diag::err_misplaced_ivar) << CDecl->IsClassExtension();
7479        return 0;
7480      }
7481    }
7482    EnclosingContext = EnclosingDecl;
7483  }
7484
7485  // Construct the decl.
7486  ObjCIvarDecl *NewID = ObjCIvarDecl::Create(Context, EnclosingContext,
7487                                             DeclStart, Loc, II, T,
7488                                             TInfo, ac, (Expr *)BitfieldWidth);
7489
7490  if (II) {
7491    NamedDecl *PrevDecl = LookupSingleName(S, II, Loc, LookupMemberName,
7492                                           ForRedeclaration);
7493    if (PrevDecl && isDeclInScope(PrevDecl, EnclosingContext, S)
7494        && !isa<TagDecl>(PrevDecl)) {
7495      Diag(Loc, diag::err_duplicate_member) << II;
7496      Diag(PrevDecl->getLocation(), diag::note_previous_declaration);
7497      NewID->setInvalidDecl();
7498    }
7499  }
7500
7501  // Process attributes attached to the ivar.
7502  ProcessDeclAttributes(S, NewID, D);
7503
7504  if (D.isInvalidType())
7505    NewID->setInvalidDecl();
7506
7507  if (II) {
7508    // FIXME: When interfaces are DeclContexts, we'll need to add
7509    // these to the interface.
7510    S->AddDecl(NewID);
7511    IdResolver.AddDecl(NewID);
7512  }
7513
7514  return NewID;
7515}
7516
7517/// ActOnLastBitfield - This routine handles synthesized bitfields rules for
7518/// class and class extensions. For every class @interface and class
7519/// extension @interface, if the last ivar is a bitfield of any type,
7520/// then add an implicit `char :0` ivar to the end of that interface.
7521void Sema::ActOnLastBitfield(SourceLocation DeclLoc, Decl *EnclosingDecl,
7522                             llvm::SmallVectorImpl<Decl *> &AllIvarDecls) {
7523  if (!LangOpts.ObjCNonFragileABI2 || AllIvarDecls.empty())
7524    return;
7525
7526  Decl *ivarDecl = AllIvarDecls[AllIvarDecls.size()-1];
7527  ObjCIvarDecl *Ivar = cast<ObjCIvarDecl>(ivarDecl);
7528
7529  if (!Ivar->isBitField())
7530    return;
7531  uint64_t BitFieldSize =
7532    Ivar->getBitWidth()->EvaluateAsInt(Context).getZExtValue();
7533  if (BitFieldSize == 0)
7534    return;
7535  ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(EnclosingDecl);
7536  if (!ID) {
7537    if (ObjCCategoryDecl *CD = dyn_cast<ObjCCategoryDecl>(EnclosingDecl)) {
7538      if (!CD->IsClassExtension())
7539        return;
7540    }
7541    // No need to add this to end of @implementation.
7542    else
7543      return;
7544  }
7545  // All conditions are met. Add a new bitfield to the tail end of ivars.
7546  llvm::APInt Zero(Context.getTypeSize(Context.CharTy), 0);
7547  Expr * BW = IntegerLiteral::Create(Context, Zero, Context.CharTy, DeclLoc);
7548
7549  Ivar = ObjCIvarDecl::Create(Context, cast<ObjCContainerDecl>(EnclosingDecl),
7550                              DeclLoc, DeclLoc, 0,
7551                              Context.CharTy,
7552                              Context.CreateTypeSourceInfo(Context.CharTy),
7553                              ObjCIvarDecl::Private, BW,
7554                              true);
7555  AllIvarDecls.push_back(Ivar);
7556}
7557
7558void Sema::ActOnFields(Scope* S,
7559                       SourceLocation RecLoc, Decl *EnclosingDecl,
7560                       Decl **Fields, unsigned NumFields,
7561                       SourceLocation LBrac, SourceLocation RBrac,
7562                       AttributeList *Attr) {
7563  assert(EnclosingDecl && "missing record or interface decl");
7564
7565  // If the decl this is being inserted into is invalid, then it may be a
7566  // redeclaration or some other bogus case.  Don't try to add fields to it.
7567  if (EnclosingDecl->isInvalidDecl()) {
7568    // FIXME: Deallocate fields?
7569    return;
7570  }
7571
7572
7573  // Verify that all the fields are okay.
7574  unsigned NumNamedMembers = 0;
7575  llvm::SmallVector<FieldDecl*, 32> RecFields;
7576
7577  RecordDecl *Record = dyn_cast<RecordDecl>(EnclosingDecl);
7578  for (unsigned i = 0; i != NumFields; ++i) {
7579    FieldDecl *FD = cast<FieldDecl>(Fields[i]);
7580
7581    // Get the type for the field.
7582    const Type *FDTy = FD->getType().getTypePtr();
7583
7584    if (!FD->isAnonymousStructOrUnion()) {
7585      // Remember all fields written by the user.
7586      RecFields.push_back(FD);
7587    }
7588
7589    // If the field is already invalid for some reason, don't emit more
7590    // diagnostics about it.
7591    if (FD->isInvalidDecl()) {
7592      EnclosingDecl->setInvalidDecl();
7593      continue;
7594    }
7595
7596    // C99 6.7.2.1p2:
7597    //   A structure or union shall not contain a member with
7598    //   incomplete or function type (hence, a structure shall not
7599    //   contain an instance of itself, but may contain a pointer to
7600    //   an instance of itself), except that the last member of a
7601    //   structure with more than one named member may have incomplete
7602    //   array type; such a structure (and any union containing,
7603    //   possibly recursively, a member that is such a structure)
7604    //   shall not be a member of a structure or an element of an
7605    //   array.
7606    if (FDTy->isFunctionType()) {
7607      // Field declared as a function.
7608      Diag(FD->getLocation(), diag::err_field_declared_as_function)
7609        << FD->getDeclName();
7610      FD->setInvalidDecl();
7611      EnclosingDecl->setInvalidDecl();
7612      continue;
7613    } else if (FDTy->isIncompleteArrayType() && Record &&
7614               ((i == NumFields - 1 && !Record->isUnion()) ||
7615                ((getLangOptions().Microsoft || getLangOptions().CPlusPlus) &&
7616                 (i == NumFields - 1 || Record->isUnion())))) {
7617      // Flexible array member.
7618      // Microsoft and g++ is more permissive regarding flexible array.
7619      // It will accept flexible array in union and also
7620      // as the sole element of a struct/class.
7621      if (getLangOptions().Microsoft) {
7622        if (Record->isUnion())
7623          Diag(FD->getLocation(), diag::ext_flexible_array_union_ms)
7624            << FD->getDeclName();
7625        else if (NumFields == 1)
7626          Diag(FD->getLocation(), diag::ext_flexible_array_empty_aggregate_ms)
7627            << FD->getDeclName() << Record->getTagKind();
7628      } else if (getLangOptions().CPlusPlus) {
7629        if (Record->isUnion())
7630          Diag(FD->getLocation(), diag::ext_flexible_array_union_gnu)
7631            << FD->getDeclName();
7632        else if (NumFields == 1)
7633          Diag(FD->getLocation(), diag::ext_flexible_array_empty_aggregate_gnu)
7634            << FD->getDeclName() << Record->getTagKind();
7635      } else if (NumNamedMembers < 1) {
7636        Diag(FD->getLocation(), diag::err_flexible_array_empty_struct)
7637          << FD->getDeclName();
7638        FD->setInvalidDecl();
7639        EnclosingDecl->setInvalidDecl();
7640        continue;
7641      }
7642      if (!FD->getType()->isDependentType() &&
7643          !Context.getBaseElementType(FD->getType())->isPODType()) {
7644        Diag(FD->getLocation(), diag::err_flexible_array_has_nonpod_type)
7645          << FD->getDeclName() << FD->getType();
7646        FD->setInvalidDecl();
7647        EnclosingDecl->setInvalidDecl();
7648        continue;
7649      }
7650      // Okay, we have a legal flexible array member at the end of the struct.
7651      if (Record)
7652        Record->setHasFlexibleArrayMember(true);
7653    } else if (!FDTy->isDependentType() &&
7654               RequireCompleteType(FD->getLocation(), FD->getType(),
7655                                   diag::err_field_incomplete)) {
7656      // Incomplete type
7657      FD->setInvalidDecl();
7658      EnclosingDecl->setInvalidDecl();
7659      continue;
7660    } else if (const RecordType *FDTTy = FDTy->getAs<RecordType>()) {
7661      if (FDTTy->getDecl()->hasFlexibleArrayMember()) {
7662        // If this is a member of a union, then entire union becomes "flexible".
7663        if (Record && Record->isUnion()) {
7664          Record->setHasFlexibleArrayMember(true);
7665        } else {
7666          // If this is a struct/class and this is not the last element, reject
7667          // it.  Note that GCC supports variable sized arrays in the middle of
7668          // structures.
7669          if (i != NumFields-1)
7670            Diag(FD->getLocation(), diag::ext_variable_sized_type_in_struct)
7671              << FD->getDeclName() << FD->getType();
7672          else {
7673            // We support flexible arrays at the end of structs in
7674            // other structs as an extension.
7675            Diag(FD->getLocation(), diag::ext_flexible_array_in_struct)
7676              << FD->getDeclName();
7677            if (Record)
7678              Record->setHasFlexibleArrayMember(true);
7679          }
7680        }
7681      }
7682      if (Record && FDTTy->getDecl()->hasObjectMember())
7683        Record->setHasObjectMember(true);
7684    } else if (FDTy->isObjCObjectType()) {
7685      /// A field cannot be an Objective-c object
7686      Diag(FD->getLocation(), diag::err_statically_allocated_object);
7687      FD->setInvalidDecl();
7688      EnclosingDecl->setInvalidDecl();
7689      continue;
7690    } else if (getLangOptions().ObjC1 &&
7691               getLangOptions().getGCMode() != LangOptions::NonGC &&
7692               Record &&
7693               (FD->getType()->isObjCObjectPointerType() ||
7694                FD->getType().isObjCGCStrong()))
7695      Record->setHasObjectMember(true);
7696    else if (Context.getAsArrayType(FD->getType())) {
7697      QualType BaseType = Context.getBaseElementType(FD->getType());
7698      if (Record && BaseType->isRecordType() &&
7699          BaseType->getAs<RecordType>()->getDecl()->hasObjectMember())
7700        Record->setHasObjectMember(true);
7701    }
7702    // Keep track of the number of named members.
7703    if (FD->getIdentifier())
7704      ++NumNamedMembers;
7705  }
7706
7707  // Okay, we successfully defined 'Record'.
7708  if (Record) {
7709    bool Completed = false;
7710    if (CXXRecordDecl *CXXRecord = dyn_cast<CXXRecordDecl>(Record)) {
7711      if (!CXXRecord->isInvalidDecl()) {
7712        // Set access bits correctly on the directly-declared conversions.
7713        UnresolvedSetImpl *Convs = CXXRecord->getConversionFunctions();
7714        for (UnresolvedSetIterator I = Convs->begin(), E = Convs->end();
7715             I != E; ++I)
7716          Convs->setAccess(I, (*I)->getAccess());
7717
7718        if (!CXXRecord->isDependentType()) {
7719          // Add any implicitly-declared members to this class.
7720          AddImplicitlyDeclaredMembersToClass(CXXRecord);
7721
7722          // If we have virtual base classes, we may end up finding multiple
7723          // final overriders for a given virtual function. Check for this
7724          // problem now.
7725          if (CXXRecord->getNumVBases()) {
7726            CXXFinalOverriderMap FinalOverriders;
7727            CXXRecord->getFinalOverriders(FinalOverriders);
7728
7729            for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(),
7730                                             MEnd = FinalOverriders.end();
7731                 M != MEnd; ++M) {
7732              for (OverridingMethods::iterator SO = M->second.begin(),
7733                                            SOEnd = M->second.end();
7734                   SO != SOEnd; ++SO) {
7735                assert(SO->second.size() > 0 &&
7736                       "Virtual function without overridding functions?");
7737                if (SO->second.size() == 1)
7738                  continue;
7739
7740                // C++ [class.virtual]p2:
7741                //   In a derived class, if a virtual member function of a base
7742                //   class subobject has more than one final overrider the
7743                //   program is ill-formed.
7744                Diag(Record->getLocation(), diag::err_multiple_final_overriders)
7745                  << (NamedDecl *)M->first << Record;
7746                Diag(M->first->getLocation(),
7747                     diag::note_overridden_virtual_function);
7748                for (OverridingMethods::overriding_iterator
7749                          OM = SO->second.begin(),
7750                       OMEnd = SO->second.end();
7751                     OM != OMEnd; ++OM)
7752                  Diag(OM->Method->getLocation(), diag::note_final_overrider)
7753                    << (NamedDecl *)M->first << OM->Method->getParent();
7754
7755                Record->setInvalidDecl();
7756              }
7757            }
7758            CXXRecord->completeDefinition(&FinalOverriders);
7759            Completed = true;
7760          }
7761        }
7762      }
7763    }
7764
7765    if (!Completed)
7766      Record->completeDefinition();
7767  } else {
7768    ObjCIvarDecl **ClsFields =
7769      reinterpret_cast<ObjCIvarDecl**>(RecFields.data());
7770    if (ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(EnclosingDecl)) {
7771      ID->setLocEnd(RBrac);
7772      // Add ivar's to class's DeclContext.
7773      for (unsigned i = 0, e = RecFields.size(); i != e; ++i) {
7774        ClsFields[i]->setLexicalDeclContext(ID);
7775        ID->addDecl(ClsFields[i]);
7776      }
7777      // Must enforce the rule that ivars in the base classes may not be
7778      // duplicates.
7779      if (ID->getSuperClass())
7780        DiagnoseDuplicateIvars(ID, ID->getSuperClass());
7781    } else if (ObjCImplementationDecl *IMPDecl =
7782                  dyn_cast<ObjCImplementationDecl>(EnclosingDecl)) {
7783      assert(IMPDecl && "ActOnFields - missing ObjCImplementationDecl");
7784      for (unsigned I = 0, N = RecFields.size(); I != N; ++I)
7785        // Ivar declared in @implementation never belongs to the implementation.
7786        // Only it is in implementation's lexical context.
7787        ClsFields[I]->setLexicalDeclContext(IMPDecl);
7788      CheckImplementationIvars(IMPDecl, ClsFields, RecFields.size(), RBrac);
7789    } else if (ObjCCategoryDecl *CDecl =
7790                dyn_cast<ObjCCategoryDecl>(EnclosingDecl)) {
7791      // case of ivars in class extension; all other cases have been
7792      // reported as errors elsewhere.
7793      // FIXME. Class extension does not have a LocEnd field.
7794      // CDecl->setLocEnd(RBrac);
7795      // Add ivar's to class extension's DeclContext.
7796      for (unsigned i = 0, e = RecFields.size(); i != e; ++i) {
7797        ClsFields[i]->setLexicalDeclContext(CDecl);
7798        CDecl->addDecl(ClsFields[i]);
7799      }
7800    }
7801  }
7802
7803  if (Attr)
7804    ProcessDeclAttributeList(S, Record, Attr);
7805
7806  // If there's a #pragma GCC visibility in scope, and this isn't a subclass,
7807  // set the visibility of this record.
7808  if (Record && !Record->getDeclContext()->isRecord())
7809    AddPushedVisibilityAttribute(Record);
7810}
7811
7812/// \brief Determine whether the given integral value is representable within
7813/// the given type T.
7814static bool isRepresentableIntegerValue(ASTContext &Context,
7815                                        llvm::APSInt &Value,
7816                                        QualType T) {
7817  assert(T->isIntegralType(Context) && "Integral type required!");
7818  unsigned BitWidth = Context.getIntWidth(T);
7819
7820  if (Value.isUnsigned() || Value.isNonNegative()) {
7821    if (T->isSignedIntegerType())
7822      --BitWidth;
7823    return Value.getActiveBits() <= BitWidth;
7824  }
7825  return Value.getMinSignedBits() <= BitWidth;
7826}
7827
7828// \brief Given an integral type, return the next larger integral type
7829// (or a NULL type of no such type exists).
7830static QualType getNextLargerIntegralType(ASTContext &Context, QualType T) {
7831  // FIXME: Int128/UInt128 support, which also needs to be introduced into
7832  // enum checking below.
7833  assert(T->isIntegralType(Context) && "Integral type required!");
7834  const unsigned NumTypes = 4;
7835  QualType SignedIntegralTypes[NumTypes] = {
7836    Context.ShortTy, Context.IntTy, Context.LongTy, Context.LongLongTy
7837  };
7838  QualType UnsignedIntegralTypes[NumTypes] = {
7839    Context.UnsignedShortTy, Context.UnsignedIntTy, Context.UnsignedLongTy,
7840    Context.UnsignedLongLongTy
7841  };
7842
7843  unsigned BitWidth = Context.getTypeSize(T);
7844  QualType *Types = T->isSignedIntegerType()? SignedIntegralTypes
7845                                            : UnsignedIntegralTypes;
7846  for (unsigned I = 0; I != NumTypes; ++I)
7847    if (Context.getTypeSize(Types[I]) > BitWidth)
7848      return Types[I];
7849
7850  return QualType();
7851}
7852
7853EnumConstantDecl *Sema::CheckEnumConstant(EnumDecl *Enum,
7854                                          EnumConstantDecl *LastEnumConst,
7855                                          SourceLocation IdLoc,
7856                                          IdentifierInfo *Id,
7857                                          Expr *Val) {
7858  unsigned IntWidth = Context.Target.getIntWidth();
7859  llvm::APSInt EnumVal(IntWidth);
7860  QualType EltTy;
7861
7862  if (Val && DiagnoseUnexpandedParameterPack(Val, UPPC_EnumeratorValue))
7863    Val = 0;
7864
7865  if (Val) {
7866    if (Enum->isDependentType() || Val->isTypeDependent())
7867      EltTy = Context.DependentTy;
7868    else {
7869      // C99 6.7.2.2p2: Make sure we have an integer constant expression.
7870      SourceLocation ExpLoc;
7871      if (!Val->isValueDependent() &&
7872          VerifyIntegerConstantExpression(Val, &EnumVal)) {
7873        Val = 0;
7874      } else {
7875        if (!getLangOptions().CPlusPlus) {
7876          // C99 6.7.2.2p2:
7877          //   The expression that defines the value of an enumeration constant
7878          //   shall be an integer constant expression that has a value
7879          //   representable as an int.
7880
7881          // Complain if the value is not representable in an int.
7882          if (!isRepresentableIntegerValue(Context, EnumVal, Context.IntTy))
7883            Diag(IdLoc, diag::ext_enum_value_not_int)
7884              << EnumVal.toString(10) << Val->getSourceRange()
7885              << (EnumVal.isUnsigned() || EnumVal.isNonNegative());
7886          else if (!Context.hasSameType(Val->getType(), Context.IntTy)) {
7887            // Force the type of the expression to 'int'.
7888            Val = ImpCastExprToType(Val, Context.IntTy, CK_IntegralCast).take();
7889          }
7890        }
7891
7892        if (Enum->isFixed()) {
7893          EltTy = Enum->getIntegerType();
7894
7895          // C++0x [dcl.enum]p5:
7896          //   ... if the initializing value of an enumerator cannot be
7897          //   represented by the underlying type, the program is ill-formed.
7898          if (!isRepresentableIntegerValue(Context, EnumVal, EltTy)) {
7899            if (getLangOptions().Microsoft) {
7900              Diag(IdLoc, diag::ext_enumerator_too_large) << EltTy;
7901              Val = ImpCastExprToType(Val, EltTy, CK_IntegralCast).take();
7902            } else
7903              Diag(IdLoc, diag::err_enumerator_too_large)
7904                << EltTy;
7905          } else
7906            Val = ImpCastExprToType(Val, EltTy, CK_IntegralCast).take();
7907        }
7908        else {
7909          // C++0x [dcl.enum]p5:
7910          //   If the underlying type is not fixed, the type of each enumerator
7911          //   is the type of its initializing value:
7912          //     - If an initializer is specified for an enumerator, the
7913          //       initializing value has the same type as the expression.
7914          EltTy = Val->getType();
7915        }
7916      }
7917    }
7918  }
7919
7920  if (!Val) {
7921    if (Enum->isDependentType())
7922      EltTy = Context.DependentTy;
7923    else if (!LastEnumConst) {
7924      // C++0x [dcl.enum]p5:
7925      //   If the underlying type is not fixed, the type of each enumerator
7926      //   is the type of its initializing value:
7927      //     - If no initializer is specified for the first enumerator, the
7928      //       initializing value has an unspecified integral type.
7929      //
7930      // GCC uses 'int' for its unspecified integral type, as does
7931      // C99 6.7.2.2p3.
7932      if (Enum->isFixed()) {
7933        EltTy = Enum->getIntegerType();
7934      }
7935      else {
7936        EltTy = Context.IntTy;
7937      }
7938    } else {
7939      // Assign the last value + 1.
7940      EnumVal = LastEnumConst->getInitVal();
7941      ++EnumVal;
7942      EltTy = LastEnumConst->getType();
7943
7944      // Check for overflow on increment.
7945      if (EnumVal < LastEnumConst->getInitVal()) {
7946        // C++0x [dcl.enum]p5:
7947        //   If the underlying type is not fixed, the type of each enumerator
7948        //   is the type of its initializing value:
7949        //
7950        //     - Otherwise the type of the initializing value is the same as
7951        //       the type of the initializing value of the preceding enumerator
7952        //       unless the incremented value is not representable in that type,
7953        //       in which case the type is an unspecified integral type
7954        //       sufficient to contain the incremented value. If no such type
7955        //       exists, the program is ill-formed.
7956        QualType T = getNextLargerIntegralType(Context, EltTy);
7957        if (T.isNull() || Enum->isFixed()) {
7958          // There is no integral type larger enough to represent this
7959          // value. Complain, then allow the value to wrap around.
7960          EnumVal = LastEnumConst->getInitVal();
7961          EnumVal = EnumVal.zext(EnumVal.getBitWidth() * 2);
7962          ++EnumVal;
7963          if (Enum->isFixed())
7964            // When the underlying type is fixed, this is ill-formed.
7965            Diag(IdLoc, diag::err_enumerator_wrapped)
7966              << EnumVal.toString(10)
7967              << EltTy;
7968          else
7969            Diag(IdLoc, diag::warn_enumerator_too_large)
7970              << EnumVal.toString(10);
7971        } else {
7972          EltTy = T;
7973        }
7974
7975        // Retrieve the last enumerator's value, extent that type to the
7976        // type that is supposed to be large enough to represent the incremented
7977        // value, then increment.
7978        EnumVal = LastEnumConst->getInitVal();
7979        EnumVal.setIsSigned(EltTy->isSignedIntegerType());
7980        EnumVal = EnumVal.zextOrTrunc(Context.getIntWidth(EltTy));
7981        ++EnumVal;
7982
7983        // If we're not in C++, diagnose the overflow of enumerator values,
7984        // which in C99 means that the enumerator value is not representable in
7985        // an int (C99 6.7.2.2p2). However, we support GCC's extension that
7986        // permits enumerator values that are representable in some larger
7987        // integral type.
7988        if (!getLangOptions().CPlusPlus && !T.isNull())
7989          Diag(IdLoc, diag::warn_enum_value_overflow);
7990      } else if (!getLangOptions().CPlusPlus &&
7991                 !isRepresentableIntegerValue(Context, EnumVal, EltTy)) {
7992        // Enforce C99 6.7.2.2p2 even when we compute the next value.
7993        Diag(IdLoc, diag::ext_enum_value_not_int)
7994          << EnumVal.toString(10) << 1;
7995      }
7996    }
7997  }
7998
7999  if (!EltTy->isDependentType()) {
8000    // Make the enumerator value match the signedness and size of the
8001    // enumerator's type.
8002    EnumVal = EnumVal.zextOrTrunc(Context.getIntWidth(EltTy));
8003    EnumVal.setIsSigned(EltTy->isSignedIntegerType());
8004  }
8005
8006  return EnumConstantDecl::Create(Context, Enum, IdLoc, Id, EltTy,
8007                                  Val, EnumVal);
8008}
8009
8010
8011Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst,
8012                              SourceLocation IdLoc, IdentifierInfo *Id,
8013                              AttributeList *Attr,
8014                              SourceLocation EqualLoc, ExprTy *val) {
8015  EnumDecl *TheEnumDecl = cast<EnumDecl>(theEnumDecl);
8016  EnumConstantDecl *LastEnumConst =
8017    cast_or_null<EnumConstantDecl>(lastEnumConst);
8018  Expr *Val = static_cast<Expr*>(val);
8019
8020  // The scope passed in may not be a decl scope.  Zip up the scope tree until
8021  // we find one that is.
8022  S = getNonFieldDeclScope(S);
8023
8024  // Verify that there isn't already something declared with this name in this
8025  // scope.
8026  NamedDecl *PrevDecl = LookupSingleName(S, Id, IdLoc, LookupOrdinaryName,
8027                                         ForRedeclaration);
8028  if (PrevDecl && PrevDecl->isTemplateParameter()) {
8029    // Maybe we will complain about the shadowed template parameter.
8030    DiagnoseTemplateParameterShadow(IdLoc, PrevDecl);
8031    // Just pretend that we didn't see the previous declaration.
8032    PrevDecl = 0;
8033  }
8034
8035  if (PrevDecl) {
8036    // When in C++, we may get a TagDecl with the same name; in this case the
8037    // enum constant will 'hide' the tag.
8038    assert((getLangOptions().CPlusPlus || !isa<TagDecl>(PrevDecl)) &&
8039           "Received TagDecl when not in C++!");
8040    if (!isa<TagDecl>(PrevDecl) && isDeclInScope(PrevDecl, CurContext, S)) {
8041      if (isa<EnumConstantDecl>(PrevDecl))
8042        Diag(IdLoc, diag::err_redefinition_of_enumerator) << Id;
8043      else
8044        Diag(IdLoc, diag::err_redefinition) << Id;
8045      Diag(PrevDecl->getLocation(), diag::note_previous_definition);
8046      return 0;
8047    }
8048  }
8049
8050  // C++ [class.mem]p13:
8051  //   If T is the name of a class, then each of the following shall have a
8052  //   name different from T:
8053  //     - every enumerator of every member of class T that is an enumerated
8054  //       type
8055  if (CXXRecordDecl *Record
8056                      = dyn_cast<CXXRecordDecl>(
8057                             TheEnumDecl->getDeclContext()->getRedeclContext()))
8058    if (Record->getIdentifier() && Record->getIdentifier() == Id)
8059      Diag(IdLoc, diag::err_member_name_of_class) << Id;
8060
8061  EnumConstantDecl *New =
8062    CheckEnumConstant(TheEnumDecl, LastEnumConst, IdLoc, Id, Val);
8063
8064  if (New) {
8065    // Process attributes.
8066    if (Attr) ProcessDeclAttributeList(S, New, Attr);
8067
8068    // Register this decl in the current scope stack.
8069    New->setAccess(TheEnumDecl->getAccess());
8070    PushOnScopeChains(New, S);
8071  }
8072
8073  return New;
8074}
8075
8076void Sema::ActOnEnumBody(SourceLocation EnumLoc, SourceLocation LBraceLoc,
8077                         SourceLocation RBraceLoc, Decl *EnumDeclX,
8078                         Decl **Elements, unsigned NumElements,
8079                         Scope *S, AttributeList *Attr) {
8080  EnumDecl *Enum = cast<EnumDecl>(EnumDeclX);
8081  QualType EnumType = Context.getTypeDeclType(Enum);
8082
8083  if (Attr)
8084    ProcessDeclAttributeList(S, Enum, Attr);
8085
8086  if (Enum->isDependentType()) {
8087    for (unsigned i = 0; i != NumElements; ++i) {
8088      EnumConstantDecl *ECD =
8089        cast_or_null<EnumConstantDecl>(Elements[i]);
8090      if (!ECD) continue;
8091
8092      ECD->setType(EnumType);
8093    }
8094
8095    Enum->completeDefinition(Context.DependentTy, Context.DependentTy, 0, 0);
8096    return;
8097  }
8098
8099  // TODO: If the result value doesn't fit in an int, it must be a long or long
8100  // long value.  ISO C does not support this, but GCC does as an extension,
8101  // emit a warning.
8102  unsigned IntWidth = Context.Target.getIntWidth();
8103  unsigned CharWidth = Context.Target.getCharWidth();
8104  unsigned ShortWidth = Context.Target.getShortWidth();
8105
8106  // Verify that all the values are okay, compute the size of the values, and
8107  // reverse the list.
8108  unsigned NumNegativeBits = 0;
8109  unsigned NumPositiveBits = 0;
8110
8111  // Keep track of whether all elements have type int.
8112  bool AllElementsInt = true;
8113
8114  for (unsigned i = 0; i != NumElements; ++i) {
8115    EnumConstantDecl *ECD =
8116      cast_or_null<EnumConstantDecl>(Elements[i]);
8117    if (!ECD) continue;  // Already issued a diagnostic.
8118
8119    const llvm::APSInt &InitVal = ECD->getInitVal();
8120
8121    // Keep track of the size of positive and negative values.
8122    if (InitVal.isUnsigned() || InitVal.isNonNegative())
8123      NumPositiveBits = std::max(NumPositiveBits,
8124                                 (unsigned)InitVal.getActiveBits());
8125    else
8126      NumNegativeBits = std::max(NumNegativeBits,
8127                                 (unsigned)InitVal.getMinSignedBits());
8128
8129    // Keep track of whether every enum element has type int (very commmon).
8130    if (AllElementsInt)
8131      AllElementsInt = ECD->getType() == Context.IntTy;
8132  }
8133
8134  // Figure out the type that should be used for this enum.
8135  QualType BestType;
8136  unsigned BestWidth;
8137
8138  // C++0x N3000 [conv.prom]p3:
8139  //   An rvalue of an unscoped enumeration type whose underlying
8140  //   type is not fixed can be converted to an rvalue of the first
8141  //   of the following types that can represent all the values of
8142  //   the enumeration: int, unsigned int, long int, unsigned long
8143  //   int, long long int, or unsigned long long int.
8144  // C99 6.4.4.3p2:
8145  //   An identifier declared as an enumeration constant has type int.
8146  // The C99 rule is modified by a gcc extension
8147  QualType BestPromotionType;
8148
8149  bool Packed = Enum->getAttr<PackedAttr>() ? true : false;
8150  // -fshort-enums is the equivalent to specifying the packed attribute on all
8151  // enum definitions.
8152  if (LangOpts.ShortEnums)
8153    Packed = true;
8154
8155  if (Enum->isFixed()) {
8156    BestType = BestPromotionType = Enum->getIntegerType();
8157    // We don't need to set BestWidth, because BestType is going to be the type
8158    // of the enumerators, but we do anyway because otherwise some compilers
8159    // warn that it might be used uninitialized.
8160    BestWidth = CharWidth;
8161  }
8162  else if (NumNegativeBits) {
8163    // If there is a negative value, figure out the smallest integer type (of
8164    // int/long/longlong) that fits.
8165    // If it's packed, check also if it fits a char or a short.
8166    if (Packed && NumNegativeBits <= CharWidth && NumPositiveBits < CharWidth) {
8167      BestType = Context.SignedCharTy;
8168      BestWidth = CharWidth;
8169    } else if (Packed && NumNegativeBits <= ShortWidth &&
8170               NumPositiveBits < ShortWidth) {
8171      BestType = Context.ShortTy;
8172      BestWidth = ShortWidth;
8173    } else if (NumNegativeBits <= IntWidth && NumPositiveBits < IntWidth) {
8174      BestType = Context.IntTy;
8175      BestWidth = IntWidth;
8176    } else {
8177      BestWidth = Context.Target.getLongWidth();
8178
8179      if (NumNegativeBits <= BestWidth && NumPositiveBits < BestWidth) {
8180        BestType = Context.LongTy;
8181      } else {
8182        BestWidth = Context.Target.getLongLongWidth();
8183
8184        if (NumNegativeBits > BestWidth || NumPositiveBits >= BestWidth)
8185          Diag(Enum->getLocation(), diag::warn_enum_too_large);
8186        BestType = Context.LongLongTy;
8187      }
8188    }
8189    BestPromotionType = (BestWidth <= IntWidth ? Context.IntTy : BestType);
8190  } else {
8191    // If there is no negative value, figure out the smallest type that fits
8192    // all of the enumerator values.
8193    // If it's packed, check also if it fits a char or a short.
8194    if (Packed && NumPositiveBits <= CharWidth) {
8195      BestType = Context.UnsignedCharTy;
8196      BestPromotionType = Context.IntTy;
8197      BestWidth = CharWidth;
8198    } else if (Packed && NumPositiveBits <= ShortWidth) {
8199      BestType = Context.UnsignedShortTy;
8200      BestPromotionType = Context.IntTy;
8201      BestWidth = ShortWidth;
8202    } else if (NumPositiveBits <= IntWidth) {
8203      BestType = Context.UnsignedIntTy;
8204      BestWidth = IntWidth;
8205      BestPromotionType
8206        = (NumPositiveBits == BestWidth || !getLangOptions().CPlusPlus)
8207                           ? Context.UnsignedIntTy : Context.IntTy;
8208    } else if (NumPositiveBits <=
8209               (BestWidth = Context.Target.getLongWidth())) {
8210      BestType = Context.UnsignedLongTy;
8211      BestPromotionType
8212        = (NumPositiveBits == BestWidth || !getLangOptions().CPlusPlus)
8213                           ? Context.UnsignedLongTy : Context.LongTy;
8214    } else {
8215      BestWidth = Context.Target.getLongLongWidth();
8216      assert(NumPositiveBits <= BestWidth &&
8217             "How could an initializer get larger than ULL?");
8218      BestType = Context.UnsignedLongLongTy;
8219      BestPromotionType
8220        = (NumPositiveBits == BestWidth || !getLangOptions().CPlusPlus)
8221                           ? Context.UnsignedLongLongTy : Context.LongLongTy;
8222    }
8223  }
8224
8225  // Loop over all of the enumerator constants, changing their types to match
8226  // the type of the enum if needed.
8227  for (unsigned i = 0; i != NumElements; ++i) {
8228    EnumConstantDecl *ECD = cast_or_null<EnumConstantDecl>(Elements[i]);
8229    if (!ECD) continue;  // Already issued a diagnostic.
8230
8231    // Standard C says the enumerators have int type, but we allow, as an
8232    // extension, the enumerators to be larger than int size.  If each
8233    // enumerator value fits in an int, type it as an int, otherwise type it the
8234    // same as the enumerator decl itself.  This means that in "enum { X = 1U }"
8235    // that X has type 'int', not 'unsigned'.
8236
8237    // Determine whether the value fits into an int.
8238    llvm::APSInt InitVal = ECD->getInitVal();
8239
8240    // If it fits into an integer type, force it.  Otherwise force it to match
8241    // the enum decl type.
8242    QualType NewTy;
8243    unsigned NewWidth;
8244    bool NewSign;
8245    if (!getLangOptions().CPlusPlus &&
8246        isRepresentableIntegerValue(Context, InitVal, Context.IntTy)) {
8247      NewTy = Context.IntTy;
8248      NewWidth = IntWidth;
8249      NewSign = true;
8250    } else if (ECD->getType() == BestType) {
8251      // Already the right type!
8252      if (getLangOptions().CPlusPlus)
8253        // C++ [dcl.enum]p4: Following the closing brace of an
8254        // enum-specifier, each enumerator has the type of its
8255        // enumeration.
8256        ECD->setType(EnumType);
8257      continue;
8258    } else {
8259      NewTy = BestType;
8260      NewWidth = BestWidth;
8261      NewSign = BestType->isSignedIntegerType();
8262    }
8263
8264    // Adjust the APSInt value.
8265    InitVal = InitVal.extOrTrunc(NewWidth);
8266    InitVal.setIsSigned(NewSign);
8267    ECD->setInitVal(InitVal);
8268
8269    // Adjust the Expr initializer and type.
8270    if (ECD->getInitExpr() &&
8271	!Context.hasSameType(NewTy, ECD->getInitExpr()->getType()))
8272      ECD->setInitExpr(ImplicitCastExpr::Create(Context, NewTy,
8273                                                CK_IntegralCast,
8274                                                ECD->getInitExpr(),
8275                                                /*base paths*/ 0,
8276                                                VK_RValue));
8277    if (getLangOptions().CPlusPlus)
8278      // C++ [dcl.enum]p4: Following the closing brace of an
8279      // enum-specifier, each enumerator has the type of its
8280      // enumeration.
8281      ECD->setType(EnumType);
8282    else
8283      ECD->setType(NewTy);
8284  }
8285
8286  Enum->completeDefinition(BestType, BestPromotionType,
8287                           NumPositiveBits, NumNegativeBits);
8288}
8289
8290Decl *Sema::ActOnFileScopeAsmDecl(Expr *expr,
8291                                  SourceLocation StartLoc,
8292                                  SourceLocation EndLoc) {
8293  StringLiteral *AsmString = cast<StringLiteral>(expr);
8294
8295  FileScopeAsmDecl *New = FileScopeAsmDecl::Create(Context, CurContext,
8296                                                   AsmString, StartLoc,
8297                                                   EndLoc);
8298  CurContext->addDecl(New);
8299  return New;
8300}
8301
8302void Sema::ActOnPragmaWeakID(IdentifierInfo* Name,
8303                             SourceLocation PragmaLoc,
8304                             SourceLocation NameLoc) {
8305  Decl *PrevDecl = LookupSingleName(TUScope, Name, NameLoc, LookupOrdinaryName);
8306
8307  if (PrevDecl) {
8308    PrevDecl->addAttr(::new (Context) WeakAttr(PragmaLoc, Context));
8309  } else {
8310    (void)WeakUndeclaredIdentifiers.insert(
8311      std::pair<IdentifierInfo*,WeakInfo>
8312        (Name, WeakInfo((IdentifierInfo*)0, NameLoc)));
8313  }
8314}
8315
8316void Sema::ActOnPragmaWeakAlias(IdentifierInfo* Name,
8317                                IdentifierInfo* AliasName,
8318                                SourceLocation PragmaLoc,
8319                                SourceLocation NameLoc,
8320                                SourceLocation AliasNameLoc) {
8321  Decl *PrevDecl = LookupSingleName(TUScope, AliasName, AliasNameLoc,
8322                                    LookupOrdinaryName);
8323  WeakInfo W = WeakInfo(Name, NameLoc);
8324
8325  if (PrevDecl) {
8326    if (!PrevDecl->hasAttr<AliasAttr>())
8327      if (NamedDecl *ND = dyn_cast<NamedDecl>(PrevDecl))
8328        DeclApplyPragmaWeak(TUScope, ND, W);
8329  } else {
8330    (void)WeakUndeclaredIdentifiers.insert(
8331      std::pair<IdentifierInfo*,WeakInfo>(AliasName, W));
8332  }
8333}
8334