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