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/ASTConsumer.h"
22 #include "clang/AST/ASTContext.h"
23 #include "clang/AST/CXXInheritance.h"
24 #include "clang/AST/CommentDiagnostic.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/Sema/DelayedDiagnostic.h"
37 #include "clang/Basic/SourceManager.h"
38 #include "clang/Basic/TargetInfo.h"
39 // FIXME: layering (ideally, Sema shouldn't be dependent on Lex API's)
40 #include "clang/Lex/Preprocessor.h"
41 #include "clang/Lex/HeaderSearch.h"
42 #include "clang/Lex/ModuleLoader.h"
43 #include "llvm/ADT/SmallString.h"
44 #include "llvm/ADT/Triple.h"
45 #include <algorithm>
46 #include <cstring>
47 #include <functional>
48 using namespace clang;
49 using namespace sema;
50 
51 Sema::DeclGroupPtrTy Sema::ConvertDeclToDeclGroup(Decl *Ptr, Decl *OwnedType) {
52   if (OwnedType) {
53     Decl *Group[2] = { OwnedType, Ptr };
54     return DeclGroupPtrTy::make(DeclGroupRef::Create(Context, Group, 2));
55   }
56 
57   return DeclGroupPtrTy::make(DeclGroupRef(Ptr));
58 }
59 
60 namespace {
61 
62 class TypeNameValidatorCCC : public CorrectionCandidateCallback {
63  public:
64   TypeNameValidatorCCC(bool AllowInvalid, bool WantClass=false)
65       : AllowInvalidDecl(AllowInvalid), WantClassName(WantClass) {
66     WantExpressionKeywords = false;
67     WantCXXNamedCasts = false;
68     WantRemainingKeywords = false;
69   }
70 
71   virtual bool ValidateCandidate(const TypoCorrection &candidate) {
72     if (NamedDecl *ND = candidate.getCorrectionDecl())
73       return (isa<TypeDecl>(ND) || isa<ObjCInterfaceDecl>(ND)) &&
74           (AllowInvalidDecl || !ND->isInvalidDecl());
75     else
76       return !WantClassName && candidate.isKeyword();
77   }
78 
79  private:
80   bool AllowInvalidDecl;
81   bool WantClassName;
82 };
83 
84 }
85 
86 /// \brief Determine whether the token kind starts a simple-type-specifier.
87 bool Sema::isSimpleTypeSpecifier(tok::TokenKind Kind) const {
88   switch (Kind) {
89   // FIXME: Take into account the current language when deciding whether a
90   // token kind is a valid type specifier
91   case tok::kw_short:
92   case tok::kw_long:
93   case tok::kw___int64:
94   case tok::kw___int128:
95   case tok::kw_signed:
96   case tok::kw_unsigned:
97   case tok::kw_void:
98   case tok::kw_char:
99   case tok::kw_int:
100   case tok::kw_half:
101   case tok::kw_float:
102   case tok::kw_double:
103   case tok::kw_wchar_t:
104   case tok::kw_bool:
105   case tok::kw___underlying_type:
106     return true;
107 
108   case tok::annot_typename:
109   case tok::kw_char16_t:
110   case tok::kw_char32_t:
111   case tok::kw_typeof:
112   case tok::kw_decltype:
113     return getLangOpts().CPlusPlus;
114 
115   default:
116     break;
117   }
118 
119   return false;
120 }
121 
122 /// \brief If the identifier refers to a type name within this scope,
123 /// return the declaration of that type.
124 ///
125 /// This routine performs ordinary name lookup of the identifier II
126 /// within the given scope, with optional C++ scope specifier SS, to
127 /// determine whether the name refers to a type. If so, returns an
128 /// opaque pointer (actually a QualType) corresponding to that
129 /// type. Otherwise, returns NULL.
130 ///
131 /// If name lookup results in an ambiguity, this routine will complain
132 /// and then return NULL.
133 ParsedType Sema::getTypeName(IdentifierInfo &II, SourceLocation NameLoc,
134                              Scope *S, CXXScopeSpec *SS,
135                              bool isClassName, bool HasTrailingDot,
136                              ParsedType ObjectTypePtr,
137                              bool IsCtorOrDtorName,
138                              bool WantNontrivialTypeSourceInfo,
139                              IdentifierInfo **CorrectedII) {
140   // Determine where we will perform name lookup.
141   DeclContext *LookupCtx = 0;
142   if (ObjectTypePtr) {
143     QualType ObjectType = ObjectTypePtr.get();
144     if (ObjectType->isRecordType())
145       LookupCtx = computeDeclContext(ObjectType);
146   } else if (SS && SS->isNotEmpty()) {
147     LookupCtx = computeDeclContext(*SS, false);
148 
149     if (!LookupCtx) {
150       if (isDependentScopeSpecifier(*SS)) {
151         // C++ [temp.res]p3:
152         //   A qualified-id that refers to a type and in which the
153         //   nested-name-specifier depends on a template-parameter (14.6.2)
154         //   shall be prefixed by the keyword typename to indicate that the
155         //   qualified-id denotes a type, forming an
156         //   elaborated-type-specifier (7.1.5.3).
157         //
158         // We therefore do not perform any name lookup if the result would
159         // refer to a member of an unknown specialization.
160         if (!isClassName && !IsCtorOrDtorName)
161           return ParsedType();
162 
163         // We know from the grammar that this name refers to a type,
164         // so build a dependent node to describe the type.
165         if (WantNontrivialTypeSourceInfo)
166           return ActOnTypenameType(S, SourceLocation(), *SS, II, NameLoc).get();
167 
168         NestedNameSpecifierLoc QualifierLoc = SS->getWithLocInContext(Context);
169         QualType T =
170           CheckTypenameType(ETK_None, SourceLocation(), QualifierLoc,
171                             II, NameLoc);
172 
173           return ParsedType::make(T);
174       }
175 
176       return ParsedType();
177     }
178 
179     if (!LookupCtx->isDependentContext() &&
180         RequireCompleteDeclContext(*SS, LookupCtx))
181       return ParsedType();
182   }
183 
184   // FIXME: LookupNestedNameSpecifierName isn't the right kind of
185   // lookup for class-names.
186   LookupNameKind Kind = isClassName ? LookupNestedNameSpecifierName :
187                                       LookupOrdinaryName;
188   LookupResult Result(*this, &II, NameLoc, Kind);
189   if (LookupCtx) {
190     // Perform "qualified" name lookup into the declaration context we
191     // computed, which is either the type of the base of a member access
192     // expression or the declaration context associated with a prior
193     // nested-name-specifier.
194     LookupQualifiedName(Result, LookupCtx);
195 
196     if (ObjectTypePtr && Result.empty()) {
197       // C++ [basic.lookup.classref]p3:
198       //   If the unqualified-id is ~type-name, the type-name is looked up
199       //   in the context of the entire postfix-expression. If the type T of
200       //   the object expression is of a class type C, the type-name is also
201       //   looked up in the scope of class C. At least one of the lookups shall
202       //   find a name that refers to (possibly cv-qualified) T.
203       LookupName(Result, S);
204     }
205   } else {
206     // Perform unqualified name lookup.
207     LookupName(Result, S);
208   }
209 
210   NamedDecl *IIDecl = 0;
211   switch (Result.getResultKind()) {
212   case LookupResult::NotFound:
213   case LookupResult::NotFoundInCurrentInstantiation:
214     if (CorrectedII) {
215       TypeNameValidatorCCC Validator(true, isClassName);
216       TypoCorrection Correction = CorrectTypo(Result.getLookupNameInfo(),
217                                               Kind, S, SS, Validator);
218       IdentifierInfo *NewII = Correction.getCorrectionAsIdentifierInfo();
219       TemplateTy Template;
220       bool MemberOfUnknownSpecialization;
221       UnqualifiedId TemplateName;
222       TemplateName.setIdentifier(NewII, NameLoc);
223       NestedNameSpecifier *NNS = Correction.getCorrectionSpecifier();
224       CXXScopeSpec NewSS, *NewSSPtr = SS;
225       if (SS && NNS) {
226         NewSS.MakeTrivial(Context, NNS, SourceRange(NameLoc));
227         NewSSPtr = &NewSS;
228       }
229       if (Correction && (NNS || NewII != &II) &&
230           // Ignore a correction to a template type as the to-be-corrected
231           // identifier is not a template (typo correction for template names
232           // is handled elsewhere).
233           !(getLangOpts().CPlusPlus && NewSSPtr &&
234             isTemplateName(S, *NewSSPtr, false, TemplateName, ParsedType(),
235                            false, Template, MemberOfUnknownSpecialization))) {
236         ParsedType Ty = getTypeName(*NewII, NameLoc, S, NewSSPtr,
237                                     isClassName, HasTrailingDot, ObjectTypePtr,
238                                     IsCtorOrDtorName,
239                                     WantNontrivialTypeSourceInfo);
240         if (Ty) {
241           std::string CorrectedStr(Correction.getAsString(getLangOpts()));
242           std::string CorrectedQuotedStr(
243               Correction.getQuoted(getLangOpts()));
244           Diag(NameLoc, diag::err_unknown_type_or_class_name_suggest)
245               << Result.getLookupName() << CorrectedQuotedStr << isClassName
246               << FixItHint::CreateReplacement(SourceRange(NameLoc),
247                                               CorrectedStr);
248           if (NamedDecl *FirstDecl = Correction.getCorrectionDecl())
249             Diag(FirstDecl->getLocation(), diag::note_previous_decl)
250               << CorrectedQuotedStr;
251 
252           if (SS && NNS)
253             SS->MakeTrivial(Context, NNS, SourceRange(NameLoc));
254           *CorrectedII = NewII;
255           return Ty;
256         }
257       }
258     }
259     // If typo correction failed or was not performed, fall through
260   case LookupResult::FoundOverloaded:
261   case LookupResult::FoundUnresolvedValue:
262     Result.suppressDiagnostics();
263     return ParsedType();
264 
265   case LookupResult::Ambiguous:
266     // Recover from type-hiding ambiguities by hiding the type.  We'll
267     // do the lookup again when looking for an object, and we can
268     // diagnose the error then.  If we don't do this, then the error
269     // about hiding the type will be immediately followed by an error
270     // that only makes sense if the identifier was treated like a type.
271     if (Result.getAmbiguityKind() == LookupResult::AmbiguousTagHiding) {
272       Result.suppressDiagnostics();
273       return ParsedType();
274     }
275 
276     // Look to see if we have a type anywhere in the list of results.
277     for (LookupResult::iterator Res = Result.begin(), ResEnd = Result.end();
278          Res != ResEnd; ++Res) {
279       if (isa<TypeDecl>(*Res) || isa<ObjCInterfaceDecl>(*Res)) {
280         if (!IIDecl ||
281             (*Res)->getLocation().getRawEncoding() <
282               IIDecl->getLocation().getRawEncoding())
283           IIDecl = *Res;
284       }
285     }
286 
287     if (!IIDecl) {
288       // None of the entities we found is a type, so there is no way
289       // to even assume that the result is a type. In this case, don't
290       // complain about the ambiguity. The parser will either try to
291       // perform this lookup again (e.g., as an object name), which
292       // will produce the ambiguity, or will complain that it expected
293       // a type name.
294       Result.suppressDiagnostics();
295       return ParsedType();
296     }
297 
298     // We found a type within the ambiguous lookup; diagnose the
299     // ambiguity and then return that type. This might be the right
300     // answer, or it might not be, but it suppresses any attempt to
301     // perform the name lookup again.
302     break;
303 
304   case LookupResult::Found:
305     IIDecl = Result.getFoundDecl();
306     break;
307   }
308 
309   assert(IIDecl && "Didn't find decl");
310 
311   QualType T;
312   if (TypeDecl *TD = dyn_cast<TypeDecl>(IIDecl)) {
313     DiagnoseUseOfDecl(IIDecl, NameLoc);
314 
315     if (T.isNull())
316       T = Context.getTypeDeclType(TD);
317 
318     // NOTE: avoid constructing an ElaboratedType(Loc) if this is a
319     // constructor or destructor name (in such a case, the scope specifier
320     // will be attached to the enclosing Expr or Decl node).
321     if (SS && SS->isNotEmpty() && !IsCtorOrDtorName) {
322       if (WantNontrivialTypeSourceInfo) {
323         // Construct a type with type-source information.
324         TypeLocBuilder Builder;
325         Builder.pushTypeSpec(T).setNameLoc(NameLoc);
326 
327         T = getElaboratedType(ETK_None, *SS, T);
328         ElaboratedTypeLoc ElabTL = Builder.push<ElaboratedTypeLoc>(T);
329         ElabTL.setElaboratedKeywordLoc(SourceLocation());
330         ElabTL.setQualifierLoc(SS->getWithLocInContext(Context));
331         return CreateParsedType(T, Builder.getTypeSourceInfo(Context, T));
332       } else {
333         T = getElaboratedType(ETK_None, *SS, T);
334       }
335     }
336   } else if (ObjCInterfaceDecl *IDecl = dyn_cast<ObjCInterfaceDecl>(IIDecl)) {
337     (void)DiagnoseUseOfDecl(IDecl, NameLoc);
338     if (!HasTrailingDot)
339       T = Context.getObjCInterfaceType(IDecl);
340   }
341 
342   if (T.isNull()) {
343     // If it's not plausibly a type, suppress diagnostics.
344     Result.suppressDiagnostics();
345     return ParsedType();
346   }
347   return ParsedType::make(T);
348 }
349 
350 /// isTagName() - This method is called *for error recovery purposes only*
351 /// to determine if the specified name is a valid tag name ("struct foo").  If
352 /// so, this returns the TST for the tag corresponding to it (TST_enum,
353 /// TST_union, TST_struct, TST_class).  This is used to diagnose cases in C
354 /// where the user forgot to specify the tag.
355 DeclSpec::TST Sema::isTagName(IdentifierInfo &II, Scope *S) {
356   // Do a tag name lookup in this scope.
357   LookupResult R(*this, &II, SourceLocation(), LookupTagName);
358   LookupName(R, S, false);
359   R.suppressDiagnostics();
360   if (R.getResultKind() == LookupResult::Found)
361     if (const TagDecl *TD = R.getAsSingle<TagDecl>()) {
362       switch (TD->getTagKind()) {
363       case TTK_Struct: return DeclSpec::TST_struct;
364       case TTK_Union:  return DeclSpec::TST_union;
365       case TTK_Class:  return DeclSpec::TST_class;
366       case TTK_Enum:   return DeclSpec::TST_enum;
367       }
368     }
369 
370   return DeclSpec::TST_unspecified;
371 }
372 
373 /// isMicrosoftMissingTypename - In Microsoft mode, within class scope,
374 /// if a CXXScopeSpec's type is equal to the type of one of the base classes
375 /// then downgrade the missing typename error to a warning.
376 /// This is needed for MSVC compatibility; Example:
377 /// @code
378 /// template<class T> class A {
379 /// public:
380 ///   typedef int TYPE;
381 /// };
382 /// template<class T> class B : public A<T> {
383 /// public:
384 ///   A<T>::TYPE a; // no typename required because A<T> is a base class.
385 /// };
386 /// @endcode
387 bool Sema::isMicrosoftMissingTypename(const CXXScopeSpec *SS, Scope *S) {
388   if (CurContext->isRecord()) {
389     const Type *Ty = SS->getScopeRep()->getAsType();
390 
391     CXXRecordDecl *RD = cast<CXXRecordDecl>(CurContext);
392     for (CXXRecordDecl::base_class_const_iterator Base = RD->bases_begin(),
393           BaseEnd = RD->bases_end(); Base != BaseEnd; ++Base)
394       if (Context.hasSameUnqualifiedType(QualType(Ty, 1), Base->getType()))
395         return true;
396     return S->isFunctionPrototypeScope();
397   }
398   return CurContext->isFunctionOrMethod() || S->isFunctionPrototypeScope();
399 }
400 
401 bool Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II,
402                                    SourceLocation IILoc,
403                                    Scope *S,
404                                    CXXScopeSpec *SS,
405                                    ParsedType &SuggestedType) {
406   // We don't have anything to suggest (yet).
407   SuggestedType = ParsedType();
408 
409   // There may have been a typo in the name of the type. Look up typo
410   // results, in case we have something that we can suggest.
411   TypeNameValidatorCCC Validator(false);
412   if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(II, IILoc),
413                                              LookupOrdinaryName, S, SS,
414                                              Validator)) {
415     std::string CorrectedStr(Corrected.getAsString(getLangOpts()));
416     std::string CorrectedQuotedStr(Corrected.getQuoted(getLangOpts()));
417 
418     if (Corrected.isKeyword()) {
419       // We corrected to a keyword.
420       IdentifierInfo *NewII = Corrected.getCorrectionAsIdentifierInfo();
421       if (!isSimpleTypeSpecifier(NewII->getTokenID()))
422         CorrectedQuotedStr = "the keyword " + CorrectedQuotedStr;
423       Diag(IILoc, diag::err_unknown_typename_suggest)
424         << II << CorrectedQuotedStr
425         << FixItHint::CreateReplacement(SourceRange(IILoc), CorrectedStr);
426       II = NewII;
427     } else {
428       NamedDecl *Result = Corrected.getCorrectionDecl();
429       // We found a similarly-named type or interface; suggest that.
430       if (!SS || !SS->isSet())
431         Diag(IILoc, diag::err_unknown_typename_suggest)
432           << II << CorrectedQuotedStr
433           << FixItHint::CreateReplacement(SourceRange(IILoc), CorrectedStr);
434       else if (DeclContext *DC = computeDeclContext(*SS, false))
435         Diag(IILoc, diag::err_unknown_nested_typename_suggest)
436           << II << DC << CorrectedQuotedStr << SS->getRange()
437           << FixItHint::CreateReplacement(SourceRange(IILoc), CorrectedStr);
438       else
439         llvm_unreachable("could not have corrected a typo here");
440 
441       Diag(Result->getLocation(), diag::note_previous_decl)
442         << CorrectedQuotedStr;
443 
444       SuggestedType = getTypeName(*Result->getIdentifier(), IILoc, S, SS,
445                                   false, false, ParsedType(),
446                                   /*IsCtorOrDtorName=*/false,
447                                   /*NonTrivialTypeSourceInfo=*/true);
448     }
449     return true;
450   }
451 
452   if (getLangOpts().CPlusPlus) {
453     // See if II is a class template that the user forgot to pass arguments to.
454     UnqualifiedId Name;
455     Name.setIdentifier(II, IILoc);
456     CXXScopeSpec EmptySS;
457     TemplateTy TemplateResult;
458     bool MemberOfUnknownSpecialization;
459     if (isTemplateName(S, SS ? *SS : EmptySS, /*hasTemplateKeyword=*/false,
460                        Name, ParsedType(), true, TemplateResult,
461                        MemberOfUnknownSpecialization) == TNK_Type_template) {
462       TemplateName TplName = TemplateResult.getAsVal<TemplateName>();
463       Diag(IILoc, diag::err_template_missing_args) << TplName;
464       if (TemplateDecl *TplDecl = TplName.getAsTemplateDecl()) {
465         Diag(TplDecl->getLocation(), diag::note_template_decl_here)
466           << TplDecl->getTemplateParameters()->getSourceRange();
467       }
468       return true;
469     }
470   }
471 
472   // FIXME: Should we move the logic that tries to recover from a missing tag
473   // (struct, union, enum) from Parser::ParseImplicitInt here, instead?
474 
475   if (!SS || (!SS->isSet() && !SS->isInvalid()))
476     Diag(IILoc, diag::err_unknown_typename) << II;
477   else if (DeclContext *DC = computeDeclContext(*SS, false))
478     Diag(IILoc, diag::err_typename_nested_not_found)
479       << II << DC << SS->getRange();
480   else if (isDependentScopeSpecifier(*SS)) {
481     unsigned DiagID = diag::err_typename_missing;
482     if (getLangOpts().MicrosoftMode && isMicrosoftMissingTypename(SS, S))
483       DiagID = diag::warn_typename_missing;
484 
485     Diag(SS->getRange().getBegin(), DiagID)
486       << (NestedNameSpecifier *)SS->getScopeRep() << II->getName()
487       << SourceRange(SS->getRange().getBegin(), IILoc)
488       << FixItHint::CreateInsertion(SS->getRange().getBegin(), "typename ");
489     SuggestedType = ActOnTypenameType(S, SourceLocation(),
490                                       *SS, *II, IILoc).get();
491   } else {
492     assert(SS && SS->isInvalid() &&
493            "Invalid scope specifier has already been diagnosed");
494   }
495 
496   return true;
497 }
498 
499 /// \brief Determine whether the given result set contains either a type name
500 /// or
501 static bool isResultTypeOrTemplate(LookupResult &R, const Token &NextToken) {
502   bool CheckTemplate = R.getSema().getLangOpts().CPlusPlus &&
503                        NextToken.is(tok::less);
504 
505   for (LookupResult::iterator I = R.begin(), IEnd = R.end(); I != IEnd; ++I) {
506     if (isa<TypeDecl>(*I) || isa<ObjCInterfaceDecl>(*I))
507       return true;
508 
509     if (CheckTemplate && isa<TemplateDecl>(*I))
510       return true;
511   }
512 
513   return false;
514 }
515 
516 static bool isTagTypeWithMissingTag(Sema &SemaRef, LookupResult &Result,
517                                     Scope *S, CXXScopeSpec &SS,
518                                     IdentifierInfo *&Name,
519                                     SourceLocation NameLoc) {
520   Result.clear(Sema::LookupTagName);
521   SemaRef.LookupParsedName(Result, S, &SS);
522   if (TagDecl *Tag = Result.getAsSingle<TagDecl>()) {
523     const char *TagName = 0;
524     const char *FixItTagName = 0;
525     switch (Tag->getTagKind()) {
526       case TTK_Class:
527         TagName = "class";
528         FixItTagName = "class ";
529         break;
530 
531       case TTK_Enum:
532         TagName = "enum";
533         FixItTagName = "enum ";
534         break;
535 
536       case TTK_Struct:
537         TagName = "struct";
538         FixItTagName = "struct ";
539         break;
540 
541       case TTK_Union:
542         TagName = "union";
543         FixItTagName = "union ";
544         break;
545     }
546 
547     SemaRef.Diag(NameLoc, diag::err_use_of_tag_name_without_tag)
548       << Name << TagName << SemaRef.getLangOpts().CPlusPlus
549       << FixItHint::CreateInsertion(NameLoc, FixItTagName);
550 
551     LookupResult R(SemaRef, Name, NameLoc, Sema::LookupOrdinaryName);
552     if (SemaRef.LookupParsedName(R, S, &SS)) {
553       for (LookupResult::iterator I = R.begin(), IEnd = R.end();
554            I != IEnd; ++I)
555         SemaRef.Diag((*I)->getLocation(), diag::note_decl_hiding_tag_type)
556           << Name << TagName;
557     }
558     return true;
559   }
560 
561   Result.clear(Sema::LookupOrdinaryName);
562   return false;
563 }
564 
565 Sema::NameClassification Sema::ClassifyName(Scope *S,
566                                             CXXScopeSpec &SS,
567                                             IdentifierInfo *&Name,
568                                             SourceLocation NameLoc,
569                                             const Token &NextToken) {
570   DeclarationNameInfo NameInfo(Name, NameLoc);
571   ObjCMethodDecl *CurMethod = getCurMethodDecl();
572 
573   if (NextToken.is(tok::coloncolon)) {
574     BuildCXXNestedNameSpecifier(S, *Name, NameLoc, NextToken.getLocation(),
575                                 QualType(), false, SS, 0, false);
576 
577   }
578 
579   LookupResult Result(*this, Name, NameLoc, LookupOrdinaryName);
580   LookupParsedName(Result, S, &SS, !CurMethod);
581 
582   // Perform lookup for Objective-C instance variables (including automatically
583   // synthesized instance variables), if we're in an Objective-C method.
584   // FIXME: This lookup really, really needs to be folded in to the normal
585   // unqualified lookup mechanism.
586   if (!SS.isSet() && CurMethod && !isResultTypeOrTemplate(Result, NextToken)) {
587     ExprResult E = LookupInObjCMethod(Result, S, Name, true);
588     if (E.get() || E.isInvalid())
589       return E;
590   }
591 
592   bool SecondTry = false;
593   bool IsFilteredTemplateName = false;
594 
595 Corrected:
596   switch (Result.getResultKind()) {
597   case LookupResult::NotFound:
598     // If an unqualified-id is followed by a '(', then we have a function
599     // call.
600     if (!SS.isSet() && NextToken.is(tok::l_paren)) {
601       // In C++, this is an ADL-only call.
602       // FIXME: Reference?
603       if (getLangOpts().CPlusPlus)
604         return BuildDeclarationNameExpr(SS, Result, /*ADL=*/true);
605 
606       // C90 6.3.2.2:
607       //   If the expression that precedes the parenthesized argument list in a
608       //   function call consists solely of an identifier, and if no
609       //   declaration is visible for this identifier, the identifier is
610       //   implicitly declared exactly as if, in the innermost block containing
611       //   the function call, the declaration
612       //
613       //     extern int identifier ();
614       //
615       //   appeared.
616       //
617       // We also allow this in C99 as an extension.
618       if (NamedDecl *D = ImplicitlyDefineFunction(NameLoc, *Name, S)) {
619         Result.addDecl(D);
620         Result.resolveKind();
621         return BuildDeclarationNameExpr(SS, Result, /*ADL=*/false);
622       }
623     }
624 
625     // In C, we first see whether there is a tag type by the same name, in
626     // which case it's likely that the user just forget to write "enum",
627     // "struct", or "union".
628     if (!getLangOpts().CPlusPlus && !SecondTry &&
629         isTagTypeWithMissingTag(*this, Result, S, SS, Name, NameLoc)) {
630       break;
631     }
632 
633     // Perform typo correction to determine if there is another name that is
634     // close to this name.
635     if (!SecondTry) {
636       SecondTry = true;
637       CorrectionCandidateCallback DefaultValidator;
638       // Try to limit which sets of keywords should be included in typo
639       // correction based on what the next token is.
640       DefaultValidator.WantTypeSpecifiers =
641           NextToken.is(tok::l_paren) || NextToken.is(tok::less) ||
642           NextToken.is(tok::identifier) || NextToken.is(tok::star) ||
643           NextToken.is(tok::amp) || NextToken.is(tok::l_square);
644       DefaultValidator.WantExpressionKeywords =
645           NextToken.is(tok::l_paren) || NextToken.is(tok::identifier) ||
646           NextToken.is(tok::arrow) || NextToken.is(tok::period);
647       DefaultValidator.WantRemainingKeywords =
648           NextToken.is(tok::l_paren) || NextToken.is(tok::semi) ||
649           NextToken.is(tok::identifier) || NextToken.is(tok::l_brace);
650       DefaultValidator.WantCXXNamedCasts = false;
651       if (TypoCorrection Corrected = CorrectTypo(Result.getLookupNameInfo(),
652                                                  Result.getLookupKind(), S,
653                                                  &SS, DefaultValidator)) {
654         unsigned UnqualifiedDiag = diag::err_undeclared_var_use_suggest;
655         unsigned QualifiedDiag = diag::err_no_member_suggest;
656         std::string CorrectedStr(Corrected.getAsString(getLangOpts()));
657         std::string CorrectedQuotedStr(Corrected.getQuoted(getLangOpts()));
658 
659         NamedDecl *FirstDecl = Corrected.getCorrectionDecl();
660         NamedDecl *UnderlyingFirstDecl
661           = FirstDecl? FirstDecl->getUnderlyingDecl() : 0;
662         if (getLangOpts().CPlusPlus && NextToken.is(tok::less) &&
663             UnderlyingFirstDecl && isa<TemplateDecl>(UnderlyingFirstDecl)) {
664           UnqualifiedDiag = diag::err_no_template_suggest;
665           QualifiedDiag = diag::err_no_member_template_suggest;
666         } else if (UnderlyingFirstDecl &&
667                    (isa<TypeDecl>(UnderlyingFirstDecl) ||
668                     isa<ObjCInterfaceDecl>(UnderlyingFirstDecl) ||
669                     isa<ObjCCompatibleAliasDecl>(UnderlyingFirstDecl))) {
670            UnqualifiedDiag = diag::err_unknown_typename_suggest;
671            QualifiedDiag = diag::err_unknown_nested_typename_suggest;
672          }
673 
674         if (SS.isEmpty())
675           Diag(NameLoc, UnqualifiedDiag)
676             << Name << CorrectedQuotedStr
677             << FixItHint::CreateReplacement(NameLoc, CorrectedStr);
678         else
679           Diag(NameLoc, QualifiedDiag)
680             << Name << computeDeclContext(SS, false) << CorrectedQuotedStr
681             << SS.getRange()
682             << FixItHint::CreateReplacement(NameLoc, CorrectedStr);
683 
684         // Update the name, so that the caller has the new name.
685         Name = Corrected.getCorrectionAsIdentifierInfo();
686 
687         // Typo correction corrected to a keyword.
688         if (Corrected.isKeyword())
689           return Corrected.getCorrectionAsIdentifierInfo();
690 
691         // Also update the LookupResult...
692         // FIXME: This should probably go away at some point
693         Result.clear();
694         Result.setLookupName(Corrected.getCorrection());
695         if (FirstDecl) {
696           Result.addDecl(FirstDecl);
697           Diag(FirstDecl->getLocation(), diag::note_previous_decl)
698             << CorrectedQuotedStr;
699         }
700 
701         // If we found an Objective-C instance variable, let
702         // LookupInObjCMethod build the appropriate expression to
703         // reference the ivar.
704         // FIXME: This is a gross hack.
705         if (ObjCIvarDecl *Ivar = Result.getAsSingle<ObjCIvarDecl>()) {
706           Result.clear();
707           ExprResult E(LookupInObjCMethod(Result, S, Ivar->getIdentifier()));
708           return move(E);
709         }
710 
711         goto Corrected;
712       }
713     }
714 
715     // We failed to correct; just fall through and let the parser deal with it.
716     Result.suppressDiagnostics();
717     return NameClassification::Unknown();
718 
719   case LookupResult::NotFoundInCurrentInstantiation: {
720     // We performed name lookup into the current instantiation, and there were
721     // dependent bases, so we treat this result the same way as any other
722     // dependent nested-name-specifier.
723 
724     // C++ [temp.res]p2:
725     //   A name used in a template declaration or definition and that is
726     //   dependent on a template-parameter is assumed not to name a type
727     //   unless the applicable name lookup finds a type name or the name is
728     //   qualified by the keyword typename.
729     //
730     // FIXME: If the next token is '<', we might want to ask the parser to
731     // perform some heroics to see if we actually have a
732     // template-argument-list, which would indicate a missing 'template'
733     // keyword here.
734     return BuildDependentDeclRefExpr(SS, /*TemplateKWLoc=*/SourceLocation(),
735                                      NameInfo, /*TemplateArgs=*/0);
736   }
737 
738   case LookupResult::Found:
739   case LookupResult::FoundOverloaded:
740   case LookupResult::FoundUnresolvedValue:
741     break;
742 
743   case LookupResult::Ambiguous:
744     if (getLangOpts().CPlusPlus && NextToken.is(tok::less) &&
745         hasAnyAcceptableTemplateNames(Result)) {
746       // C++ [temp.local]p3:
747       //   A lookup that finds an injected-class-name (10.2) can result in an
748       //   ambiguity in certain cases (for example, if it is found in more than
749       //   one base class). If all of the injected-class-names that are found
750       //   refer to specializations of the same class template, and if the name
751       //   is followed by a template-argument-list, the reference refers to the
752       //   class template itself and not a specialization thereof, and is not
753       //   ambiguous.
754       //
755       // This filtering can make an ambiguous result into an unambiguous one,
756       // so try again after filtering out template names.
757       FilterAcceptableTemplateNames(Result);
758       if (!Result.isAmbiguous()) {
759         IsFilteredTemplateName = true;
760         break;
761       }
762     }
763 
764     // Diagnose the ambiguity and return an error.
765     return NameClassification::Error();
766   }
767 
768   if (getLangOpts().CPlusPlus && NextToken.is(tok::less) &&
769       (IsFilteredTemplateName || hasAnyAcceptableTemplateNames(Result))) {
770     // C++ [temp.names]p3:
771     //   After name lookup (3.4) finds that a name is a template-name or that
772     //   an operator-function-id or a literal- operator-id refers to a set of
773     //   overloaded functions any member of which is a function template if
774     //   this is followed by a <, the < is always taken as the delimiter of a
775     //   template-argument-list and never as the less-than operator.
776     if (!IsFilteredTemplateName)
777       FilterAcceptableTemplateNames(Result);
778 
779     if (!Result.empty()) {
780       bool IsFunctionTemplate;
781       TemplateName Template;
782       if (Result.end() - Result.begin() > 1) {
783         IsFunctionTemplate = true;
784         Template = Context.getOverloadedTemplateName(Result.begin(),
785                                                      Result.end());
786       } else {
787         TemplateDecl *TD
788           = cast<TemplateDecl>((*Result.begin())->getUnderlyingDecl());
789         IsFunctionTemplate = isa<FunctionTemplateDecl>(TD);
790 
791         if (SS.isSet() && !SS.isInvalid())
792           Template = Context.getQualifiedTemplateName(SS.getScopeRep(),
793                                                     /*TemplateKeyword=*/false,
794                                                       TD);
795         else
796           Template = TemplateName(TD);
797       }
798 
799       if (IsFunctionTemplate) {
800         // Function templates always go through overload resolution, at which
801         // point we'll perform the various checks (e.g., accessibility) we need
802         // to based on which function we selected.
803         Result.suppressDiagnostics();
804 
805         return NameClassification::FunctionTemplate(Template);
806       }
807 
808       return NameClassification::TypeTemplate(Template);
809     }
810   }
811 
812   NamedDecl *FirstDecl = (*Result.begin())->getUnderlyingDecl();
813   if (TypeDecl *Type = dyn_cast<TypeDecl>(FirstDecl)) {
814     DiagnoseUseOfDecl(Type, NameLoc);
815     QualType T = Context.getTypeDeclType(Type);
816     return ParsedType::make(T);
817   }
818 
819   ObjCInterfaceDecl *Class = dyn_cast<ObjCInterfaceDecl>(FirstDecl);
820   if (!Class) {
821     // FIXME: It's unfortunate that we don't have a Type node for handling this.
822     if (ObjCCompatibleAliasDecl *Alias
823                                 = dyn_cast<ObjCCompatibleAliasDecl>(FirstDecl))
824       Class = Alias->getClassInterface();
825   }
826 
827   if (Class) {
828     DiagnoseUseOfDecl(Class, NameLoc);
829 
830     if (NextToken.is(tok::period)) {
831       // Interface. <something> is parsed as a property reference expression.
832       // Just return "unknown" as a fall-through for now.
833       Result.suppressDiagnostics();
834       return NameClassification::Unknown();
835     }
836 
837     QualType T = Context.getObjCInterfaceType(Class);
838     return ParsedType::make(T);
839   }
840 
841   // Check for a tag type hidden by a non-type decl in a few cases where it
842   // seems likely a type is wanted instead of the non-type that was found.
843   if (!getLangOpts().ObjC1 && FirstDecl && !isa<ClassTemplateDecl>(FirstDecl) &&
844       !isa<TypeAliasTemplateDecl>(FirstDecl)) {
845     bool NextIsOp = NextToken.is(tok::amp) || NextToken.is(tok::star);
846     if ((NextToken.is(tok::identifier) ||
847          (NextIsOp && FirstDecl->isFunctionOrFunctionTemplate())) &&
848         isTagTypeWithMissingTag(*this, Result, S, SS, Name, NameLoc)) {
849       FirstDecl = (*Result.begin())->getUnderlyingDecl();
850       if (TypeDecl *Type = dyn_cast<TypeDecl>(FirstDecl)) {
851         DiagnoseUseOfDecl(Type, NameLoc);
852         QualType T = Context.getTypeDeclType(Type);
853         return ParsedType::make(T);
854       }
855     }
856   }
857 
858   if (!Result.empty() && (*Result.begin())->isCXXClassMember())
859     return BuildPossibleImplicitMemberExpr(SS, SourceLocation(), Result, 0);
860 
861   bool ADL = UseArgumentDependentLookup(SS, Result, NextToken.is(tok::l_paren));
862   return BuildDeclarationNameExpr(SS, Result, ADL);
863 }
864 
865 // Determines the context to return to after temporarily entering a
866 // context.  This depends in an unnecessarily complicated way on the
867 // exact ordering of callbacks from the parser.
868 DeclContext *Sema::getContainingDC(DeclContext *DC) {
869 
870   // Functions defined inline within classes aren't parsed until we've
871   // finished parsing the top-level class, so the top-level class is
872   // the context we'll need to return to.
873   if (isa<FunctionDecl>(DC)) {
874     DC = DC->getLexicalParent();
875 
876     // A function not defined within a class will always return to its
877     // lexical context.
878     if (!isa<CXXRecordDecl>(DC))
879       return DC;
880 
881     // A C++ inline method/friend is parsed *after* the topmost class
882     // it was declared in is fully parsed ("complete");  the topmost
883     // class is the context we need to return to.
884     while (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC->getLexicalParent()))
885       DC = RD;
886 
887     // Return the declaration context of the topmost class the inline method is
888     // declared in.
889     return DC;
890   }
891 
892   return DC->getLexicalParent();
893 }
894 
895 void Sema::PushDeclContext(Scope *S, DeclContext *DC) {
896   assert(getContainingDC(DC) == CurContext &&
897       "The next DeclContext should be lexically contained in the current one.");
898   CurContext = DC;
899   S->setEntity(DC);
900 }
901 
902 void Sema::PopDeclContext() {
903   assert(CurContext && "DeclContext imbalance!");
904 
905   CurContext = getContainingDC(CurContext);
906   assert(CurContext && "Popped translation unit!");
907 }
908 
909 /// EnterDeclaratorContext - Used when we must lookup names in the context
910 /// of a declarator's nested name specifier.
911 ///
912 void Sema::EnterDeclaratorContext(Scope *S, DeclContext *DC) {
913   // C++0x [basic.lookup.unqual]p13:
914   //   A name used in the definition of a static data member of class
915   //   X (after the qualified-id of the static member) is looked up as
916   //   if the name was used in a member function of X.
917   // C++0x [basic.lookup.unqual]p14:
918   //   If a variable member of a namespace is defined outside of the
919   //   scope of its namespace then any name used in the definition of
920   //   the variable member (after the declarator-id) is looked up as
921   //   if the definition of the variable member occurred in its
922   //   namespace.
923   // Both of these imply that we should push a scope whose context
924   // is the semantic context of the declaration.  We can't use
925   // PushDeclContext here because that context is not necessarily
926   // lexically contained in the current context.  Fortunately,
927   // the containing scope should have the appropriate information.
928 
929   assert(!S->getEntity() && "scope already has entity");
930 
931 #ifndef NDEBUG
932   Scope *Ancestor = S->getParent();
933   while (!Ancestor->getEntity()) Ancestor = Ancestor->getParent();
934   assert(Ancestor->getEntity() == CurContext && "ancestor context mismatch");
935 #endif
936 
937   CurContext = DC;
938   S->setEntity(DC);
939 }
940 
941 void Sema::ExitDeclaratorContext(Scope *S) {
942   assert(S->getEntity() == CurContext && "Context imbalance!");
943 
944   // Switch back to the lexical context.  The safety of this is
945   // enforced by an assert in EnterDeclaratorContext.
946   Scope *Ancestor = S->getParent();
947   while (!Ancestor->getEntity()) Ancestor = Ancestor->getParent();
948   CurContext = (DeclContext*) Ancestor->getEntity();
949 
950   // We don't need to do anything with the scope, which is going to
951   // disappear.
952 }
953 
954 
955 void Sema::ActOnReenterFunctionContext(Scope* S, Decl *D) {
956   FunctionDecl *FD = dyn_cast<FunctionDecl>(D);
957   if (FunctionTemplateDecl *TFD = dyn_cast_or_null<FunctionTemplateDecl>(D)) {
958     // We assume that the caller has already called
959     // ActOnReenterTemplateScope
960     FD = TFD->getTemplatedDecl();
961   }
962   if (!FD)
963     return;
964 
965   // Same implementation as PushDeclContext, but enters the context
966   // from the lexical parent, rather than the top-level class.
967   assert(CurContext == FD->getLexicalParent() &&
968     "The next DeclContext should be lexically contained in the current one.");
969   CurContext = FD;
970   S->setEntity(CurContext);
971 
972   for (unsigned P = 0, NumParams = FD->getNumParams(); P < NumParams; ++P) {
973     ParmVarDecl *Param = FD->getParamDecl(P);
974     // If the parameter has an identifier, then add it to the scope
975     if (Param->getIdentifier()) {
976       S->AddDecl(Param);
977       IdResolver.AddDecl(Param);
978     }
979   }
980 }
981 
982 
983 void Sema::ActOnExitFunctionContext() {
984   // Same implementation as PopDeclContext, but returns to the lexical parent,
985   // rather than the top-level class.
986   assert(CurContext && "DeclContext imbalance!");
987   CurContext = CurContext->getLexicalParent();
988   assert(CurContext && "Popped translation unit!");
989 }
990 
991 
992 /// \brief Determine whether we allow overloading of the function
993 /// PrevDecl with another declaration.
994 ///
995 /// This routine determines whether overloading is possible, not
996 /// whether some new function is actually an overload. It will return
997 /// true in C++ (where we can always provide overloads) or, as an
998 /// extension, in C when the previous function is already an
999 /// overloaded function declaration or has the "overloadable"
1000 /// attribute.
1001 static bool AllowOverloadingOfFunction(LookupResult &Previous,
1002                                        ASTContext &Context) {
1003   if (Context.getLangOpts().CPlusPlus)
1004     return true;
1005 
1006   if (Previous.getResultKind() == LookupResult::FoundOverloaded)
1007     return true;
1008 
1009   return (Previous.getResultKind() == LookupResult::Found
1010           && Previous.getFoundDecl()->hasAttr<OverloadableAttr>());
1011 }
1012 
1013 /// Add this decl to the scope shadowed decl chains.
1014 void Sema::PushOnScopeChains(NamedDecl *D, Scope *S, bool AddToContext) {
1015   // Move up the scope chain until we find the nearest enclosing
1016   // non-transparent context. The declaration will be introduced into this
1017   // scope.
1018   while (S->getEntity() &&
1019          ((DeclContext *)S->getEntity())->isTransparentContext())
1020     S = S->getParent();
1021 
1022   // Add scoped declarations into their context, so that they can be
1023   // found later. Declarations without a context won't be inserted
1024   // into any context.
1025   if (AddToContext)
1026     CurContext->addDecl(D);
1027 
1028   // Out-of-line definitions shouldn't be pushed into scope in C++.
1029   // Out-of-line variable and function definitions shouldn't even in C.
1030   if ((getLangOpts().CPlusPlus || isa<VarDecl>(D) || isa<FunctionDecl>(D)) &&
1031       D->isOutOfLine() &&
1032       !D->getDeclContext()->getRedeclContext()->Equals(
1033         D->getLexicalDeclContext()->getRedeclContext()))
1034     return;
1035 
1036   // Template instantiations should also not be pushed into scope.
1037   if (isa<FunctionDecl>(D) &&
1038       cast<FunctionDecl>(D)->isFunctionTemplateSpecialization())
1039     return;
1040 
1041   // If this replaces anything in the current scope,
1042   IdentifierResolver::iterator I = IdResolver.begin(D->getDeclName()),
1043                                IEnd = IdResolver.end();
1044   for (; I != IEnd; ++I) {
1045     if (S->isDeclScope(*I) && D->declarationReplaces(*I)) {
1046       S->RemoveDecl(*I);
1047       IdResolver.RemoveDecl(*I);
1048 
1049       // Should only need to replace one decl.
1050       break;
1051     }
1052   }
1053 
1054   S->AddDecl(D);
1055 
1056   if (isa<LabelDecl>(D) && !cast<LabelDecl>(D)->isGnuLocal()) {
1057     // Implicitly-generated labels may end up getting generated in an order that
1058     // isn't strictly lexical, which breaks name lookup. Be careful to insert
1059     // the label at the appropriate place in the identifier chain.
1060     for (I = IdResolver.begin(D->getDeclName()); I != IEnd; ++I) {
1061       DeclContext *IDC = (*I)->getLexicalDeclContext()->getRedeclContext();
1062       if (IDC == CurContext) {
1063         if (!S->isDeclScope(*I))
1064           continue;
1065       } else if (IDC->Encloses(CurContext))
1066         break;
1067     }
1068 
1069     IdResolver.InsertDeclAfter(I, D);
1070   } else {
1071     IdResolver.AddDecl(D);
1072   }
1073 }
1074 
1075 void Sema::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
1076   if (IdResolver.tryAddTopLevelDecl(D, Name) && TUScope)
1077     TUScope->AddDecl(D);
1078 }
1079 
1080 bool Sema::isDeclInScope(NamedDecl *&D, DeclContext *Ctx, Scope *S,
1081                          bool ExplicitInstantiationOrSpecialization) {
1082   return IdResolver.isDeclInScope(D, Ctx, Context, S,
1083                                   ExplicitInstantiationOrSpecialization);
1084 }
1085 
1086 Scope *Sema::getScopeForDeclContext(Scope *S, DeclContext *DC) {
1087   DeclContext *TargetDC = DC->getPrimaryContext();
1088   do {
1089     if (DeclContext *ScopeDC = (DeclContext*) S->getEntity())
1090       if (ScopeDC->getPrimaryContext() == TargetDC)
1091         return S;
1092   } while ((S = S->getParent()));
1093 
1094   return 0;
1095 }
1096 
1097 static bool isOutOfScopePreviousDeclaration(NamedDecl *,
1098                                             DeclContext*,
1099                                             ASTContext&);
1100 
1101 /// Filters out lookup results that don't fall within the given scope
1102 /// as determined by isDeclInScope.
1103 void Sema::FilterLookupForScope(LookupResult &R,
1104                                 DeclContext *Ctx, Scope *S,
1105                                 bool ConsiderLinkage,
1106                                 bool ExplicitInstantiationOrSpecialization) {
1107   LookupResult::Filter F = R.makeFilter();
1108   while (F.hasNext()) {
1109     NamedDecl *D = F.next();
1110 
1111     if (isDeclInScope(D, Ctx, S, ExplicitInstantiationOrSpecialization))
1112       continue;
1113 
1114     if (ConsiderLinkage &&
1115         isOutOfScopePreviousDeclaration(D, Ctx, Context))
1116       continue;
1117 
1118     F.erase();
1119   }
1120 
1121   F.done();
1122 }
1123 
1124 static bool isUsingDecl(NamedDecl *D) {
1125   return isa<UsingShadowDecl>(D) ||
1126          isa<UnresolvedUsingTypenameDecl>(D) ||
1127          isa<UnresolvedUsingValueDecl>(D);
1128 }
1129 
1130 /// Removes using shadow declarations from the lookup results.
1131 static void RemoveUsingDecls(LookupResult &R) {
1132   LookupResult::Filter F = R.makeFilter();
1133   while (F.hasNext())
1134     if (isUsingDecl(F.next()))
1135       F.erase();
1136 
1137   F.done();
1138 }
1139 
1140 /// \brief Check for this common pattern:
1141 /// @code
1142 /// class S {
1143 ///   S(const S&); // DO NOT IMPLEMENT
1144 ///   void operator=(const S&); // DO NOT IMPLEMENT
1145 /// };
1146 /// @endcode
1147 static bool IsDisallowedCopyOrAssign(const CXXMethodDecl *D) {
1148   // FIXME: Should check for private access too but access is set after we get
1149   // the decl here.
1150   if (D->doesThisDeclarationHaveABody())
1151     return false;
1152 
1153   if (const CXXConstructorDecl *CD = dyn_cast<CXXConstructorDecl>(D))
1154     return CD->isCopyConstructor();
1155   if (const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D))
1156     return Method->isCopyAssignmentOperator();
1157   return false;
1158 }
1159 
1160 bool Sema::ShouldWarnIfUnusedFileScopedDecl(const DeclaratorDecl *D) const {
1161   assert(D);
1162 
1163   if (D->isInvalidDecl() || D->isUsed() || D->hasAttr<UnusedAttr>())
1164     return false;
1165 
1166   // Ignore class templates.
1167   if (D->getDeclContext()->isDependentContext() ||
1168       D->getLexicalDeclContext()->isDependentContext())
1169     return false;
1170 
1171   if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
1172     if (FD->getTemplateSpecializationKind() == TSK_ImplicitInstantiation)
1173       return false;
1174 
1175     if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD)) {
1176       if (MD->isVirtual() || IsDisallowedCopyOrAssign(MD))
1177         return false;
1178     } else {
1179       // 'static inline' functions are used in headers; don't warn.
1180       if (FD->getStorageClass() == SC_Static &&
1181           FD->isInlineSpecified())
1182         return false;
1183     }
1184 
1185     if (FD->doesThisDeclarationHaveABody() &&
1186         Context.DeclMustBeEmitted(FD))
1187       return false;
1188   } else if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
1189     if (!VD->isFileVarDecl() ||
1190         VD->getType().isConstant(Context) ||
1191         Context.DeclMustBeEmitted(VD))
1192       return false;
1193 
1194     if (VD->isStaticDataMember() &&
1195         VD->getTemplateSpecializationKind() == TSK_ImplicitInstantiation)
1196       return false;
1197 
1198   } else {
1199     return false;
1200   }
1201 
1202   // Only warn for unused decls internal to the translation unit.
1203   if (D->getLinkage() == ExternalLinkage)
1204     return false;
1205 
1206   return true;
1207 }
1208 
1209 void Sema::MarkUnusedFileScopedDecl(const DeclaratorDecl *D) {
1210   if (!D)
1211     return;
1212 
1213   if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
1214     const FunctionDecl *First = FD->getFirstDeclaration();
1215     if (FD != First && ShouldWarnIfUnusedFileScopedDecl(First))
1216       return; // First should already be in the vector.
1217   }
1218 
1219   if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
1220     const VarDecl *First = VD->getFirstDeclaration();
1221     if (VD != First && ShouldWarnIfUnusedFileScopedDecl(First))
1222       return; // First should already be in the vector.
1223   }
1224 
1225   if (ShouldWarnIfUnusedFileScopedDecl(D))
1226     UnusedFileScopedDecls.push_back(D);
1227 }
1228 
1229 static bool ShouldDiagnoseUnusedDecl(const NamedDecl *D) {
1230   if (D->isInvalidDecl())
1231     return false;
1232 
1233   if (D->isReferenced() || D->isUsed() || D->hasAttr<UnusedAttr>())
1234     return false;
1235 
1236   if (isa<LabelDecl>(D))
1237     return true;
1238 
1239   // White-list anything that isn't a local variable.
1240   if (!isa<VarDecl>(D) || isa<ParmVarDecl>(D) || isa<ImplicitParamDecl>(D) ||
1241       !D->getDeclContext()->isFunctionOrMethod())
1242     return false;
1243 
1244   // Types of valid local variables should be complete, so this should succeed.
1245   if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
1246 
1247     // White-list anything with an __attribute__((unused)) type.
1248     QualType Ty = VD->getType();
1249 
1250     // Only look at the outermost level of typedef.
1251     if (const TypedefType *TT = dyn_cast<TypedefType>(Ty)) {
1252       if (TT->getDecl()->hasAttr<UnusedAttr>())
1253         return false;
1254     }
1255 
1256     // If we failed to complete the type for some reason, or if the type is
1257     // dependent, don't diagnose the variable.
1258     if (Ty->isIncompleteType() || Ty->isDependentType())
1259       return false;
1260 
1261     if (const TagType *TT = Ty->getAs<TagType>()) {
1262       const TagDecl *Tag = TT->getDecl();
1263       if (Tag->hasAttr<UnusedAttr>())
1264         return false;
1265 
1266       if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(Tag)) {
1267         if (!RD->hasTrivialDestructor())
1268           return false;
1269 
1270         if (const Expr *Init = VD->getInit()) {
1271           const CXXConstructExpr *Construct =
1272             dyn_cast<CXXConstructExpr>(Init);
1273           if (Construct && !Construct->isElidable()) {
1274             CXXConstructorDecl *CD = Construct->getConstructor();
1275             if (!CD->isTrivial())
1276               return false;
1277           }
1278         }
1279       }
1280     }
1281 
1282     // TODO: __attribute__((unused)) templates?
1283   }
1284 
1285   return true;
1286 }
1287 
1288 static void GenerateFixForUnusedDecl(const NamedDecl *D, ASTContext &Ctx,
1289                                      FixItHint &Hint) {
1290   if (isa<LabelDecl>(D)) {
1291     SourceLocation AfterColon = Lexer::findLocationAfterToken(D->getLocEnd(),
1292                 tok::colon, Ctx.getSourceManager(), Ctx.getLangOpts(), true);
1293     if (AfterColon.isInvalid())
1294       return;
1295     Hint = FixItHint::CreateRemoval(CharSourceRange::
1296                                     getCharRange(D->getLocStart(), AfterColon));
1297   }
1298   return;
1299 }
1300 
1301 /// DiagnoseUnusedDecl - Emit warnings about declarations that are not used
1302 /// unless they are marked attr(unused).
1303 void Sema::DiagnoseUnusedDecl(const NamedDecl *D) {
1304   FixItHint Hint;
1305   if (!ShouldDiagnoseUnusedDecl(D))
1306     return;
1307 
1308   GenerateFixForUnusedDecl(D, Context, Hint);
1309 
1310   unsigned DiagID;
1311   if (isa<VarDecl>(D) && cast<VarDecl>(D)->isExceptionVariable())
1312     DiagID = diag::warn_unused_exception_param;
1313   else if (isa<LabelDecl>(D))
1314     DiagID = diag::warn_unused_label;
1315   else
1316     DiagID = diag::warn_unused_variable;
1317 
1318   Diag(D->getLocation(), DiagID) << D->getDeclName() << Hint;
1319 }
1320 
1321 static void CheckPoppedLabel(LabelDecl *L, Sema &S) {
1322   // Verify that we have no forward references left.  If so, there was a goto
1323   // or address of a label taken, but no definition of it.  Label fwd
1324   // definitions are indicated with a null substmt.
1325   if (L->getStmt() == 0)
1326     S.Diag(L->getLocation(), diag::err_undeclared_label_use) <<L->getDeclName();
1327 }
1328 
1329 void Sema::ActOnPopScope(SourceLocation Loc, Scope *S) {
1330   if (S->decl_empty()) return;
1331   assert((S->getFlags() & (Scope::DeclScope | Scope::TemplateParamScope)) &&
1332          "Scope shouldn't contain decls!");
1333 
1334   for (Scope::decl_iterator I = S->decl_begin(), E = S->decl_end();
1335        I != E; ++I) {
1336     Decl *TmpD = (*I);
1337     assert(TmpD && "This decl didn't get pushed??");
1338 
1339     assert(isa<NamedDecl>(TmpD) && "Decl isn't NamedDecl?");
1340     NamedDecl *D = cast<NamedDecl>(TmpD);
1341 
1342     if (!D->getDeclName()) continue;
1343 
1344     // Diagnose unused variables in this scope.
1345     if (!S->hasErrorOccurred())
1346       DiagnoseUnusedDecl(D);
1347 
1348     // If this was a forward reference to a label, verify it was defined.
1349     if (LabelDecl *LD = dyn_cast<LabelDecl>(D))
1350       CheckPoppedLabel(LD, *this);
1351 
1352     // Remove this name from our lexical scope.
1353     IdResolver.RemoveDecl(D);
1354   }
1355 }
1356 
1357 void Sema::ActOnStartFunctionDeclarator() {
1358   ++InFunctionDeclarator;
1359 }
1360 
1361 void Sema::ActOnEndFunctionDeclarator() {
1362   assert(InFunctionDeclarator);
1363   --InFunctionDeclarator;
1364 }
1365 
1366 /// \brief Look for an Objective-C class in the translation unit.
1367 ///
1368 /// \param Id The name of the Objective-C class we're looking for. If
1369 /// typo-correction fixes this name, the Id will be updated
1370 /// to the fixed name.
1371 ///
1372 /// \param IdLoc The location of the name in the translation unit.
1373 ///
1374 /// \param DoTypoCorrection If true, this routine will attempt typo correction
1375 /// if there is no class with the given name.
1376 ///
1377 /// \returns The declaration of the named Objective-C class, or NULL if the
1378 /// class could not be found.
1379 ObjCInterfaceDecl *Sema::getObjCInterfaceDecl(IdentifierInfo *&Id,
1380                                               SourceLocation IdLoc,
1381                                               bool DoTypoCorrection) {
1382   // The third "scope" argument is 0 since we aren't enabling lazy built-in
1383   // creation from this context.
1384   NamedDecl *IDecl = LookupSingleName(TUScope, Id, IdLoc, LookupOrdinaryName);
1385 
1386   if (!IDecl && DoTypoCorrection) {
1387     // Perform typo correction at the given location, but only if we
1388     // find an Objective-C class name.
1389     DeclFilterCCC<ObjCInterfaceDecl> Validator;
1390     if (TypoCorrection C = CorrectTypo(DeclarationNameInfo(Id, IdLoc),
1391                                        LookupOrdinaryName, TUScope, NULL,
1392                                        Validator)) {
1393       IDecl = C.getCorrectionDeclAs<ObjCInterfaceDecl>();
1394       Diag(IdLoc, diag::err_undef_interface_suggest)
1395         << Id << IDecl->getDeclName()
1396         << FixItHint::CreateReplacement(IdLoc, IDecl->getNameAsString());
1397       Diag(IDecl->getLocation(), diag::note_previous_decl)
1398         << IDecl->getDeclName();
1399 
1400       Id = IDecl->getIdentifier();
1401     }
1402   }
1403   ObjCInterfaceDecl *Def = dyn_cast_or_null<ObjCInterfaceDecl>(IDecl);
1404   // This routine must always return a class definition, if any.
1405   if (Def && Def->getDefinition())
1406       Def = Def->getDefinition();
1407   return Def;
1408 }
1409 
1410 /// getNonFieldDeclScope - Retrieves the innermost scope, starting
1411 /// from S, where a non-field would be declared. This routine copes
1412 /// with the difference between C and C++ scoping rules in structs and
1413 /// unions. For example, the following code is well-formed in C but
1414 /// ill-formed in C++:
1415 /// @code
1416 /// struct S6 {
1417 ///   enum { BAR } e;
1418 /// };
1419 ///
1420 /// void test_S6() {
1421 ///   struct S6 a;
1422 ///   a.e = BAR;
1423 /// }
1424 /// @endcode
1425 /// For the declaration of BAR, this routine will return a different
1426 /// scope. The scope S will be the scope of the unnamed enumeration
1427 /// within S6. In C++, this routine will return the scope associated
1428 /// with S6, because the enumeration's scope is a transparent
1429 /// context but structures can contain non-field names. In C, this
1430 /// routine will return the translation unit scope, since the
1431 /// enumeration's scope is a transparent context and structures cannot
1432 /// contain non-field names.
1433 Scope *Sema::getNonFieldDeclScope(Scope *S) {
1434   while (((S->getFlags() & Scope::DeclScope) == 0) ||
1435          (S->getEntity() &&
1436           ((DeclContext *)S->getEntity())->isTransparentContext()) ||
1437          (S->isClassScope() && !getLangOpts().CPlusPlus))
1438     S = S->getParent();
1439   return S;
1440 }
1441 
1442 /// LazilyCreateBuiltin - The specified Builtin-ID was first used at
1443 /// file scope.  lazily create a decl for it. ForRedeclaration is true
1444 /// if we're creating this built-in in anticipation of redeclaring the
1445 /// built-in.
1446 NamedDecl *Sema::LazilyCreateBuiltin(IdentifierInfo *II, unsigned bid,
1447                                      Scope *S, bool ForRedeclaration,
1448                                      SourceLocation Loc) {
1449   Builtin::ID BID = (Builtin::ID)bid;
1450 
1451   ASTContext::GetBuiltinTypeError Error;
1452   QualType R = Context.GetBuiltinType(BID, Error);
1453   switch (Error) {
1454   case ASTContext::GE_None:
1455     // Okay
1456     break;
1457 
1458   case ASTContext::GE_Missing_stdio:
1459     if (ForRedeclaration)
1460       Diag(Loc, diag::warn_implicit_decl_requires_stdio)
1461         << Context.BuiltinInfo.GetName(BID);
1462     return 0;
1463 
1464   case ASTContext::GE_Missing_setjmp:
1465     if (ForRedeclaration)
1466       Diag(Loc, diag::warn_implicit_decl_requires_setjmp)
1467         << Context.BuiltinInfo.GetName(BID);
1468     return 0;
1469 
1470   case ASTContext::GE_Missing_ucontext:
1471     if (ForRedeclaration)
1472       Diag(Loc, diag::warn_implicit_decl_requires_ucontext)
1473         << Context.BuiltinInfo.GetName(BID);
1474     return 0;
1475   }
1476 
1477   if (!ForRedeclaration && Context.BuiltinInfo.isPredefinedLibFunction(BID)) {
1478     Diag(Loc, diag::ext_implicit_lib_function_decl)
1479       << Context.BuiltinInfo.GetName(BID)
1480       << R;
1481     if (Context.BuiltinInfo.getHeaderName(BID) &&
1482         Diags.getDiagnosticLevel(diag::ext_implicit_lib_function_decl, Loc)
1483           != DiagnosticsEngine::Ignored)
1484       Diag(Loc, diag::note_please_include_header)
1485         << Context.BuiltinInfo.getHeaderName(BID)
1486         << Context.BuiltinInfo.GetName(BID);
1487   }
1488 
1489   FunctionDecl *New = FunctionDecl::Create(Context,
1490                                            Context.getTranslationUnitDecl(),
1491                                            Loc, Loc, II, R, /*TInfo=*/0,
1492                                            SC_Extern,
1493                                            SC_None, false,
1494                                            /*hasPrototype=*/true);
1495   New->setImplicit();
1496 
1497   // Create Decl objects for each parameter, adding them to the
1498   // FunctionDecl.
1499   if (const FunctionProtoType *FT = dyn_cast<FunctionProtoType>(R)) {
1500     SmallVector<ParmVarDecl*, 16> Params;
1501     for (unsigned i = 0, e = FT->getNumArgs(); i != e; ++i) {
1502       ParmVarDecl *parm =
1503         ParmVarDecl::Create(Context, New, SourceLocation(),
1504                             SourceLocation(), 0,
1505                             FT->getArgType(i), /*TInfo=*/0,
1506                             SC_None, SC_None, 0);
1507       parm->setScopeInfo(0, i);
1508       Params.push_back(parm);
1509     }
1510     New->setParams(Params);
1511   }
1512 
1513   AddKnownFunctionAttributes(New);
1514 
1515   // TUScope is the translation-unit scope to insert this function into.
1516   // FIXME: This is hideous. We need to teach PushOnScopeChains to
1517   // relate Scopes to DeclContexts, and probably eliminate CurContext
1518   // entirely, but we're not there yet.
1519   DeclContext *SavedContext = CurContext;
1520   CurContext = Context.getTranslationUnitDecl();
1521   PushOnScopeChains(New, TUScope);
1522   CurContext = SavedContext;
1523   return New;
1524 }
1525 
1526 bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) {
1527   QualType OldType;
1528   if (TypedefNameDecl *OldTypedef = dyn_cast<TypedefNameDecl>(Old))
1529     OldType = OldTypedef->getUnderlyingType();
1530   else
1531     OldType = Context.getTypeDeclType(Old);
1532   QualType NewType = New->getUnderlyingType();
1533 
1534   if (NewType->isVariablyModifiedType()) {
1535     // Must not redefine a typedef with a variably-modified type.
1536     int Kind = isa<TypeAliasDecl>(Old) ? 1 : 0;
1537     Diag(New->getLocation(), diag::err_redefinition_variably_modified_typedef)
1538       << Kind << NewType;
1539     if (Old->getLocation().isValid())
1540       Diag(Old->getLocation(), diag::note_previous_definition);
1541     New->setInvalidDecl();
1542     return true;
1543   }
1544 
1545   if (OldType != NewType &&
1546       !OldType->isDependentType() &&
1547       !NewType->isDependentType() &&
1548       !Context.hasSameType(OldType, NewType)) {
1549     int Kind = isa<TypeAliasDecl>(Old) ? 1 : 0;
1550     Diag(New->getLocation(), diag::err_redefinition_different_typedef)
1551       << Kind << NewType << OldType;
1552     if (Old->getLocation().isValid())
1553       Diag(Old->getLocation(), diag::note_previous_definition);
1554     New->setInvalidDecl();
1555     return true;
1556   }
1557   return false;
1558 }
1559 
1560 /// MergeTypedefNameDecl - We just parsed a typedef 'New' which has the
1561 /// same name and scope as a previous declaration 'Old'.  Figure out
1562 /// how to resolve this situation, merging decls or emitting
1563 /// diagnostics as appropriate. If there was an error, set New to be invalid.
1564 ///
1565 void Sema::MergeTypedefNameDecl(TypedefNameDecl *New, LookupResult &OldDecls) {
1566   // If the new decl is known invalid already, don't bother doing any
1567   // merging checks.
1568   if (New->isInvalidDecl()) return;
1569 
1570   // Allow multiple definitions for ObjC built-in typedefs.
1571   // FIXME: Verify the underlying types are equivalent!
1572   if (getLangOpts().ObjC1) {
1573     const IdentifierInfo *TypeID = New->getIdentifier();
1574     switch (TypeID->getLength()) {
1575     default: break;
1576     case 2:
1577       {
1578         if (!TypeID->isStr("id"))
1579           break;
1580         QualType T = New->getUnderlyingType();
1581         if (!T->isPointerType())
1582           break;
1583         if (!T->isVoidPointerType()) {
1584           QualType PT = T->getAs<PointerType>()->getPointeeType();
1585           if (!PT->isStructureType())
1586             break;
1587         }
1588         Context.setObjCIdRedefinitionType(T);
1589         // Install the built-in type for 'id', ignoring the current definition.
1590         New->setTypeForDecl(Context.getObjCIdType().getTypePtr());
1591         return;
1592       }
1593     case 5:
1594       if (!TypeID->isStr("Class"))
1595         break;
1596       Context.setObjCClassRedefinitionType(New->getUnderlyingType());
1597       // Install the built-in type for 'Class', ignoring the current definition.
1598       New->setTypeForDecl(Context.getObjCClassType().getTypePtr());
1599       return;
1600     case 3:
1601       if (!TypeID->isStr("SEL"))
1602         break;
1603       Context.setObjCSelRedefinitionType(New->getUnderlyingType());
1604       // Install the built-in type for 'SEL', ignoring the current definition.
1605       New->setTypeForDecl(Context.getObjCSelType().getTypePtr());
1606       return;
1607     }
1608     // Fall through - the typedef name was not a builtin type.
1609   }
1610 
1611   // Verify the old decl was also a type.
1612   TypeDecl *Old = OldDecls.getAsSingle<TypeDecl>();
1613   if (!Old) {
1614     Diag(New->getLocation(), diag::err_redefinition_different_kind)
1615       << New->getDeclName();
1616 
1617     NamedDecl *OldD = OldDecls.getRepresentativeDecl();
1618     if (OldD->getLocation().isValid())
1619       Diag(OldD->getLocation(), diag::note_previous_definition);
1620 
1621     return New->setInvalidDecl();
1622   }
1623 
1624   // If the old declaration is invalid, just give up here.
1625   if (Old->isInvalidDecl())
1626     return New->setInvalidDecl();
1627 
1628   // If the typedef types are not identical, reject them in all languages and
1629   // with any extensions enabled.
1630   if (isIncompatibleTypedef(Old, New))
1631     return;
1632 
1633   // The types match.  Link up the redeclaration chain if the old
1634   // declaration was a typedef.
1635   if (TypedefNameDecl *Typedef = dyn_cast<TypedefNameDecl>(Old))
1636     New->setPreviousDeclaration(Typedef);
1637 
1638   if (getLangOpts().MicrosoftExt)
1639     return;
1640 
1641   if (getLangOpts().CPlusPlus) {
1642     // C++ [dcl.typedef]p2:
1643     //   In a given non-class scope, a typedef specifier can be used to
1644     //   redefine the name of any type declared in that scope to refer
1645     //   to the type to which it already refers.
1646     if (!isa<CXXRecordDecl>(CurContext))
1647       return;
1648 
1649     // C++0x [dcl.typedef]p4:
1650     //   In a given class scope, a typedef specifier can be used to redefine
1651     //   any class-name declared in that scope that is not also a typedef-name
1652     //   to refer to the type to which it already refers.
1653     //
1654     // This wording came in via DR424, which was a correction to the
1655     // wording in DR56, which accidentally banned code like:
1656     //
1657     //   struct S {
1658     //     typedef struct A { } A;
1659     //   };
1660     //
1661     // in the C++03 standard. We implement the C++0x semantics, which
1662     // allow the above but disallow
1663     //
1664     //   struct S {
1665     //     typedef int I;
1666     //     typedef int I;
1667     //   };
1668     //
1669     // since that was the intent of DR56.
1670     if (!isa<TypedefNameDecl>(Old))
1671       return;
1672 
1673     Diag(New->getLocation(), diag::err_redefinition)
1674       << New->getDeclName();
1675     Diag(Old->getLocation(), diag::note_previous_definition);
1676     return New->setInvalidDecl();
1677   }
1678 
1679   // Modules always permit redefinition of typedefs, as does C11.
1680   if (getLangOpts().Modules || getLangOpts().C11)
1681     return;
1682 
1683   // If we have a redefinition of a typedef in C, emit a warning.  This warning
1684   // is normally mapped to an error, but can be controlled with
1685   // -Wtypedef-redefinition.  If either the original or the redefinition is
1686   // in a system header, don't emit this for compatibility with GCC.
1687   if (getDiagnostics().getSuppressSystemWarnings() &&
1688       (Context.getSourceManager().isInSystemHeader(Old->getLocation()) ||
1689        Context.getSourceManager().isInSystemHeader(New->getLocation())))
1690     return;
1691 
1692   Diag(New->getLocation(), diag::warn_redefinition_of_typedef)
1693     << New->getDeclName();
1694   Diag(Old->getLocation(), diag::note_previous_definition);
1695   return;
1696 }
1697 
1698 /// DeclhasAttr - returns true if decl Declaration already has the target
1699 /// attribute.
1700 static bool
1701 DeclHasAttr(const Decl *D, const Attr *A) {
1702   // There can be multiple AvailabilityAttr in a Decl. Make sure we copy
1703   // all of them. It is mergeAvailabilityAttr in SemaDeclAttr.cpp that is
1704   // responsible for making sure they are consistent.
1705   const AvailabilityAttr *AA = dyn_cast<AvailabilityAttr>(A);
1706   if (AA)
1707     return false;
1708 
1709   const OwnershipAttr *OA = dyn_cast<OwnershipAttr>(A);
1710   const AnnotateAttr *Ann = dyn_cast<AnnotateAttr>(A);
1711   for (Decl::attr_iterator i = D->attr_begin(), e = D->attr_end(); i != e; ++i)
1712     if ((*i)->getKind() == A->getKind()) {
1713       if (Ann) {
1714         if (Ann->getAnnotation() == cast<AnnotateAttr>(*i)->getAnnotation())
1715           return true;
1716         continue;
1717       }
1718       // FIXME: Don't hardcode this check
1719       if (OA && isa<OwnershipAttr>(*i))
1720         return OA->getOwnKind() == cast<OwnershipAttr>(*i)->getOwnKind();
1721       return true;
1722     }
1723 
1724   return false;
1725 }
1726 
1727 bool Sema::mergeDeclAttribute(Decl *D, InheritableAttr *Attr) {
1728   InheritableAttr *NewAttr = NULL;
1729   if (AvailabilityAttr *AA = dyn_cast<AvailabilityAttr>(Attr))
1730     NewAttr = mergeAvailabilityAttr(D, AA->getRange(), AA->getPlatform(),
1731                                     AA->getIntroduced(), AA->getDeprecated(),
1732                                     AA->getObsoleted(), AA->getUnavailable(),
1733                                     AA->getMessage());
1734   else if (VisibilityAttr *VA = dyn_cast<VisibilityAttr>(Attr))
1735     NewAttr = mergeVisibilityAttr(D, VA->getRange(), VA->getVisibility());
1736   else if (DLLImportAttr *ImportA = dyn_cast<DLLImportAttr>(Attr))
1737     NewAttr = mergeDLLImportAttr(D, ImportA->getRange());
1738   else if (DLLExportAttr *ExportA = dyn_cast<DLLExportAttr>(Attr))
1739     NewAttr = mergeDLLExportAttr(D, ExportA->getRange());
1740   else if (FormatAttr *FA = dyn_cast<FormatAttr>(Attr))
1741     NewAttr = mergeFormatAttr(D, FA->getRange(), FA->getType(),
1742                               FA->getFormatIdx(), FA->getFirstArg());
1743   else if (SectionAttr *SA = dyn_cast<SectionAttr>(Attr))
1744     NewAttr = mergeSectionAttr(D, SA->getRange(), SA->getName());
1745   else if (!DeclHasAttr(D, Attr))
1746     NewAttr = cast<InheritableAttr>(Attr->clone(Context));
1747 
1748   if (NewAttr) {
1749     NewAttr->setInherited(true);
1750     D->addAttr(NewAttr);
1751     return true;
1752   }
1753 
1754   return false;
1755 }
1756 
1757 static const Decl *getDefinition(const Decl *D) {
1758   if (const TagDecl *TD = dyn_cast<TagDecl>(D))
1759     return TD->getDefinition();
1760   if (const VarDecl *VD = dyn_cast<VarDecl>(D))
1761     return VD->getDefinition();
1762   if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
1763     const FunctionDecl* Def;
1764     if (FD->hasBody(Def))
1765       return Def;
1766   }
1767   return NULL;
1768 }
1769 
1770 static bool hasAttribute(const Decl *D, attr::Kind Kind) {
1771   for (Decl::attr_iterator I = D->attr_begin(), E = D->attr_end();
1772        I != E; ++I) {
1773     Attr *Attribute = *I;
1774     if (Attribute->getKind() == Kind)
1775       return true;
1776   }
1777   return false;
1778 }
1779 
1780 /// checkNewAttributesAfterDef - If we already have a definition, check that
1781 /// there are no new attributes in this declaration.
1782 static void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) {
1783   if (!New->hasAttrs())
1784     return;
1785 
1786   const Decl *Def = getDefinition(Old);
1787   if (!Def || Def == New)
1788     return;
1789 
1790   AttrVec &NewAttributes = New->getAttrs();
1791   for (unsigned I = 0, E = NewAttributes.size(); I != E;) {
1792     const Attr *NewAttribute = NewAttributes[I];
1793     if (hasAttribute(Def, NewAttribute->getKind())) {
1794       ++I;
1795       continue; // regular attr merging will take care of validating this.
1796     }
1797     S.Diag(NewAttribute->getLocation(),
1798            diag::warn_attribute_precede_definition);
1799     S.Diag(Def->getLocation(), diag::note_previous_definition);
1800     NewAttributes.erase(NewAttributes.begin() + I);
1801     --E;
1802   }
1803 }
1804 
1805 /// mergeDeclAttributes - Copy attributes from the Old decl to the New one.
1806 void Sema::mergeDeclAttributes(Decl *New, Decl *Old,
1807                                bool MergeDeprecation) {
1808   // attributes declared post-definition are currently ignored
1809   checkNewAttributesAfterDef(*this, New, Old);
1810 
1811   if (!Old->hasAttrs())
1812     return;
1813 
1814   bool foundAny = New->hasAttrs();
1815 
1816   // Ensure that any moving of objects within the allocated map is done before
1817   // we process them.
1818   if (!foundAny) New->setAttrs(AttrVec());
1819 
1820   for (specific_attr_iterator<InheritableAttr>
1821          i = Old->specific_attr_begin<InheritableAttr>(),
1822          e = Old->specific_attr_end<InheritableAttr>();
1823        i != e; ++i) {
1824     // Ignore deprecated/unavailable/availability attributes if requested.
1825     if (!MergeDeprecation &&
1826         (isa<DeprecatedAttr>(*i) ||
1827          isa<UnavailableAttr>(*i) ||
1828          isa<AvailabilityAttr>(*i)))
1829       continue;
1830 
1831     if (mergeDeclAttribute(New, *i))
1832       foundAny = true;
1833   }
1834 
1835   if (!foundAny) New->dropAttrs();
1836 }
1837 
1838 /// mergeParamDeclAttributes - Copy attributes from the old parameter
1839 /// to the new one.
1840 static void mergeParamDeclAttributes(ParmVarDecl *newDecl,
1841                                      const ParmVarDecl *oldDecl,
1842                                      ASTContext &C) {
1843   if (!oldDecl->hasAttrs())
1844     return;
1845 
1846   bool foundAny = newDecl->hasAttrs();
1847 
1848   // Ensure that any moving of objects within the allocated map is
1849   // done before we process them.
1850   if (!foundAny) newDecl->setAttrs(AttrVec());
1851 
1852   for (specific_attr_iterator<InheritableParamAttr>
1853        i = oldDecl->specific_attr_begin<InheritableParamAttr>(),
1854        e = oldDecl->specific_attr_end<InheritableParamAttr>(); i != e; ++i) {
1855     if (!DeclHasAttr(newDecl, *i)) {
1856       InheritableAttr *newAttr = cast<InheritableParamAttr>((*i)->clone(C));
1857       newAttr->setInherited(true);
1858       newDecl->addAttr(newAttr);
1859       foundAny = true;
1860     }
1861   }
1862 
1863   if (!foundAny) newDecl->dropAttrs();
1864 }
1865 
1866 namespace {
1867 
1868 /// Used in MergeFunctionDecl to keep track of function parameters in
1869 /// C.
1870 struct GNUCompatibleParamWarning {
1871   ParmVarDecl *OldParm;
1872   ParmVarDecl *NewParm;
1873   QualType PromotedType;
1874 };
1875 
1876 }
1877 
1878 /// getSpecialMember - get the special member enum for a method.
1879 Sema::CXXSpecialMember Sema::getSpecialMember(const CXXMethodDecl *MD) {
1880   if (const CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(MD)) {
1881     if (Ctor->isDefaultConstructor())
1882       return Sema::CXXDefaultConstructor;
1883 
1884     if (Ctor->isCopyConstructor())
1885       return Sema::CXXCopyConstructor;
1886 
1887     if (Ctor->isMoveConstructor())
1888       return Sema::CXXMoveConstructor;
1889   } else if (isa<CXXDestructorDecl>(MD)) {
1890     return Sema::CXXDestructor;
1891   } else if (MD->isCopyAssignmentOperator()) {
1892     return Sema::CXXCopyAssignment;
1893   } else if (MD->isMoveAssignmentOperator()) {
1894     return Sema::CXXMoveAssignment;
1895   }
1896 
1897   return Sema::CXXInvalid;
1898 }
1899 
1900 /// canRedefineFunction - checks if a function can be redefined. Currently,
1901 /// only extern inline functions can be redefined, and even then only in
1902 /// GNU89 mode.
1903 static bool canRedefineFunction(const FunctionDecl *FD,
1904                                 const LangOptions& LangOpts) {
1905   return ((FD->hasAttr<GNUInlineAttr>() || LangOpts.GNUInline) &&
1906           !LangOpts.CPlusPlus &&
1907           FD->isInlineSpecified() &&
1908           FD->getStorageClass() == SC_Extern);
1909 }
1910 
1911 /// MergeFunctionDecl - We just parsed a function 'New' from
1912 /// declarator D which has the same name and scope as a previous
1913 /// declaration 'Old'.  Figure out how to resolve this situation,
1914 /// merging decls or emitting diagnostics as appropriate.
1915 ///
1916 /// In C++, New and Old must be declarations that are not
1917 /// overloaded. Use IsOverload to determine whether New and Old are
1918 /// overloaded, and to select the Old declaration that New should be
1919 /// merged with.
1920 ///
1921 /// Returns true if there was an error, false otherwise.
1922 bool Sema::MergeFunctionDecl(FunctionDecl *New, Decl *OldD, Scope *S) {
1923   // Verify the old decl was also a function.
1924   FunctionDecl *Old = 0;
1925   if (FunctionTemplateDecl *OldFunctionTemplate
1926         = dyn_cast<FunctionTemplateDecl>(OldD))
1927     Old = OldFunctionTemplate->getTemplatedDecl();
1928   else
1929     Old = dyn_cast<FunctionDecl>(OldD);
1930   if (!Old) {
1931     if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) {
1932       Diag(New->getLocation(), diag::err_using_decl_conflict_reverse);
1933       Diag(Shadow->getTargetDecl()->getLocation(),
1934            diag::note_using_decl_target);
1935       Diag(Shadow->getUsingDecl()->getLocation(),
1936            diag::note_using_decl) << 0;
1937       return true;
1938     }
1939 
1940     Diag(New->getLocation(), diag::err_redefinition_different_kind)
1941       << New->getDeclName();
1942     Diag(OldD->getLocation(), diag::note_previous_definition);
1943     return true;
1944   }
1945 
1946   // Determine whether the previous declaration was a definition,
1947   // implicit declaration, or a declaration.
1948   diag::kind PrevDiag;
1949   if (Old->isThisDeclarationADefinition())
1950     PrevDiag = diag::note_previous_definition;
1951   else if (Old->isImplicit())
1952     PrevDiag = diag::note_previous_implicit_declaration;
1953   else
1954     PrevDiag = diag::note_previous_declaration;
1955 
1956   QualType OldQType = Context.getCanonicalType(Old->getType());
1957   QualType NewQType = Context.getCanonicalType(New->getType());
1958 
1959   // Don't complain about this if we're in GNU89 mode and the old function
1960   // is an extern inline function.
1961   if (!isa<CXXMethodDecl>(New) && !isa<CXXMethodDecl>(Old) &&
1962       New->getStorageClass() == SC_Static &&
1963       Old->getStorageClass() != SC_Static &&
1964       !canRedefineFunction(Old, getLangOpts())) {
1965     if (getLangOpts().MicrosoftExt) {
1966       Diag(New->getLocation(), diag::warn_static_non_static) << New;
1967       Diag(Old->getLocation(), PrevDiag);
1968     } else {
1969       Diag(New->getLocation(), diag::err_static_non_static) << New;
1970       Diag(Old->getLocation(), PrevDiag);
1971       return true;
1972     }
1973   }
1974 
1975   // If a function is first declared with a calling convention, but is
1976   // later declared or defined without one, the second decl assumes the
1977   // calling convention of the first.
1978   //
1979   // For the new decl, we have to look at the NON-canonical type to tell the
1980   // difference between a function that really doesn't have a calling
1981   // convention and one that is declared cdecl. That's because in
1982   // canonicalization (see ASTContext.cpp), cdecl is canonicalized away
1983   // because it is the default calling convention.
1984   //
1985   // Note also that we DO NOT return at this point, because we still have
1986   // other tests to run.
1987   const FunctionType *OldType = cast<FunctionType>(OldQType);
1988   const FunctionType *NewType = New->getType()->getAs<FunctionType>();
1989   FunctionType::ExtInfo OldTypeInfo = OldType->getExtInfo();
1990   FunctionType::ExtInfo NewTypeInfo = NewType->getExtInfo();
1991   bool RequiresAdjustment = false;
1992   if (OldTypeInfo.getCC() != CC_Default &&
1993       NewTypeInfo.getCC() == CC_Default) {
1994     NewTypeInfo = NewTypeInfo.withCallingConv(OldTypeInfo.getCC());
1995     RequiresAdjustment = true;
1996   } else if (!Context.isSameCallConv(OldTypeInfo.getCC(),
1997                                      NewTypeInfo.getCC())) {
1998     // Calling conventions really aren't compatible, so complain.
1999     Diag(New->getLocation(), diag::err_cconv_change)
2000       << FunctionType::getNameForCallConv(NewTypeInfo.getCC())
2001       << (OldTypeInfo.getCC() == CC_Default)
2002       << (OldTypeInfo.getCC() == CC_Default ? "" :
2003           FunctionType::getNameForCallConv(OldTypeInfo.getCC()));
2004     Diag(Old->getLocation(), diag::note_previous_declaration);
2005     return true;
2006   }
2007 
2008   // FIXME: diagnose the other way around?
2009   if (OldTypeInfo.getNoReturn() && !NewTypeInfo.getNoReturn()) {
2010     NewTypeInfo = NewTypeInfo.withNoReturn(true);
2011     RequiresAdjustment = true;
2012   }
2013 
2014   // Merge regparm attribute.
2015   if (OldTypeInfo.getHasRegParm() != NewTypeInfo.getHasRegParm() ||
2016       OldTypeInfo.getRegParm() != NewTypeInfo.getRegParm()) {
2017     if (NewTypeInfo.getHasRegParm()) {
2018       Diag(New->getLocation(), diag::err_regparm_mismatch)
2019         << NewType->getRegParmType()
2020         << OldType->getRegParmType();
2021       Diag(Old->getLocation(), diag::note_previous_declaration);
2022       return true;
2023     }
2024 
2025     NewTypeInfo = NewTypeInfo.withRegParm(OldTypeInfo.getRegParm());
2026     RequiresAdjustment = true;
2027   }
2028 
2029   // Merge ns_returns_retained attribute.
2030   if (OldTypeInfo.getProducesResult() != NewTypeInfo.getProducesResult()) {
2031     if (NewTypeInfo.getProducesResult()) {
2032       Diag(New->getLocation(), diag::err_returns_retained_mismatch);
2033       Diag(Old->getLocation(), diag::note_previous_declaration);
2034       return true;
2035     }
2036 
2037     NewTypeInfo = NewTypeInfo.withProducesResult(true);
2038     RequiresAdjustment = true;
2039   }
2040 
2041   if (RequiresAdjustment) {
2042     NewType = Context.adjustFunctionType(NewType, NewTypeInfo);
2043     New->setType(QualType(NewType, 0));
2044     NewQType = Context.getCanonicalType(New->getType());
2045   }
2046 
2047   if (getLangOpts().CPlusPlus) {
2048     // (C++98 13.1p2):
2049     //   Certain function declarations cannot be overloaded:
2050     //     -- Function declarations that differ only in the return type
2051     //        cannot be overloaded.
2052     QualType OldReturnType = OldType->getResultType();
2053     QualType NewReturnType = cast<FunctionType>(NewQType)->getResultType();
2054     QualType ResQT;
2055     if (OldReturnType != NewReturnType) {
2056       if (NewReturnType->isObjCObjectPointerType()
2057           && OldReturnType->isObjCObjectPointerType())
2058         ResQT = Context.mergeObjCGCQualifiers(NewQType, OldQType);
2059       if (ResQT.isNull()) {
2060         if (New->isCXXClassMember() && New->isOutOfLine())
2061           Diag(New->getLocation(),
2062                diag::err_member_def_does_not_match_ret_type) << New;
2063         else
2064           Diag(New->getLocation(), diag::err_ovl_diff_return_type);
2065         Diag(Old->getLocation(), PrevDiag) << Old << Old->getType();
2066         return true;
2067       }
2068       else
2069         NewQType = ResQT;
2070     }
2071 
2072     const CXXMethodDecl* OldMethod = dyn_cast<CXXMethodDecl>(Old);
2073     CXXMethodDecl* NewMethod = dyn_cast<CXXMethodDecl>(New);
2074     if (OldMethod && NewMethod) {
2075       // Preserve triviality.
2076       NewMethod->setTrivial(OldMethod->isTrivial());
2077 
2078       // MSVC allows explicit template specialization at class scope:
2079       // 2 CXMethodDecls referring to the same function will be injected.
2080       // We don't want a redeclartion error.
2081       bool IsClassScopeExplicitSpecialization =
2082                               OldMethod->isFunctionTemplateSpecialization() &&
2083                               NewMethod->isFunctionTemplateSpecialization();
2084       bool isFriend = NewMethod->getFriendObjectKind();
2085 
2086       if (!isFriend && NewMethod->getLexicalDeclContext()->isRecord() &&
2087           !IsClassScopeExplicitSpecialization) {
2088         //    -- Member function declarations with the same name and the
2089         //       same parameter types cannot be overloaded if any of them
2090         //       is a static member function declaration.
2091         if (OldMethod->isStatic() || NewMethod->isStatic()) {
2092           Diag(New->getLocation(), diag::err_ovl_static_nonstatic_member);
2093           Diag(Old->getLocation(), PrevDiag) << Old << Old->getType();
2094           return true;
2095         }
2096 
2097         // C++ [class.mem]p1:
2098         //   [...] A member shall not be declared twice in the
2099         //   member-specification, except that a nested class or member
2100         //   class template can be declared and then later defined.
2101         if (ActiveTemplateInstantiations.empty()) {
2102           unsigned NewDiag;
2103           if (isa<CXXConstructorDecl>(OldMethod))
2104             NewDiag = diag::err_constructor_redeclared;
2105           else if (isa<CXXDestructorDecl>(NewMethod))
2106             NewDiag = diag::err_destructor_redeclared;
2107           else if (isa<CXXConversionDecl>(NewMethod))
2108             NewDiag = diag::err_conv_function_redeclared;
2109           else
2110             NewDiag = diag::err_member_redeclared;
2111 
2112           Diag(New->getLocation(), NewDiag);
2113         } else {
2114           Diag(New->getLocation(), diag::err_member_redeclared_in_instantiation)
2115             << New << New->getType();
2116         }
2117         Diag(Old->getLocation(), PrevDiag) << Old << Old->getType();
2118 
2119       // Complain if this is an explicit declaration of a special
2120       // member that was initially declared implicitly.
2121       //
2122       // As an exception, it's okay to befriend such methods in order
2123       // to permit the implicit constructor/destructor/operator calls.
2124       } else if (OldMethod->isImplicit()) {
2125         if (isFriend) {
2126           NewMethod->setImplicit();
2127         } else {
2128           Diag(NewMethod->getLocation(),
2129                diag::err_definition_of_implicitly_declared_member)
2130             << New << getSpecialMember(OldMethod);
2131           return true;
2132         }
2133       } else if (OldMethod->isExplicitlyDefaulted() && !isFriend) {
2134         Diag(NewMethod->getLocation(),
2135              diag::err_definition_of_explicitly_defaulted_member)
2136           << getSpecialMember(OldMethod);
2137         return true;
2138       }
2139     }
2140 
2141     // (C++98 8.3.5p3):
2142     //   All declarations for a function shall agree exactly in both the
2143     //   return type and the parameter-type-list.
2144     // We also want to respect all the extended bits except noreturn.
2145 
2146     // noreturn should now match unless the old type info didn't have it.
2147     QualType OldQTypeForComparison = OldQType;
2148     if (!OldTypeInfo.getNoReturn() && NewTypeInfo.getNoReturn()) {
2149       assert(OldQType == QualType(OldType, 0));
2150       const FunctionType *OldTypeForComparison
2151         = Context.adjustFunctionType(OldType, OldTypeInfo.withNoReturn(true));
2152       OldQTypeForComparison = QualType(OldTypeForComparison, 0);
2153       assert(OldQTypeForComparison.isCanonical());
2154     }
2155 
2156     if (OldQTypeForComparison == NewQType)
2157       return MergeCompatibleFunctionDecls(New, Old, S);
2158 
2159     // Fall through for conflicting redeclarations and redefinitions.
2160   }
2161 
2162   // C: Function types need to be compatible, not identical. This handles
2163   // duplicate function decls like "void f(int); void f(enum X);" properly.
2164   if (!getLangOpts().CPlusPlus &&
2165       Context.typesAreCompatible(OldQType, NewQType)) {
2166     const FunctionType *OldFuncType = OldQType->getAs<FunctionType>();
2167     const FunctionType *NewFuncType = NewQType->getAs<FunctionType>();
2168     const FunctionProtoType *OldProto = 0;
2169     if (isa<FunctionNoProtoType>(NewFuncType) &&
2170         (OldProto = dyn_cast<FunctionProtoType>(OldFuncType))) {
2171       // The old declaration provided a function prototype, but the
2172       // new declaration does not. Merge in the prototype.
2173       assert(!OldProto->hasExceptionSpec() && "Exception spec in C");
2174       SmallVector<QualType, 16> ParamTypes(OldProto->arg_type_begin(),
2175                                                  OldProto->arg_type_end());
2176       NewQType = Context.getFunctionType(NewFuncType->getResultType(),
2177                                          ParamTypes.data(), ParamTypes.size(),
2178                                          OldProto->getExtProtoInfo());
2179       New->setType(NewQType);
2180       New->setHasInheritedPrototype();
2181 
2182       // Synthesize a parameter for each argument type.
2183       SmallVector<ParmVarDecl*, 16> Params;
2184       for (FunctionProtoType::arg_type_iterator
2185              ParamType = OldProto->arg_type_begin(),
2186              ParamEnd = OldProto->arg_type_end();
2187            ParamType != ParamEnd; ++ParamType) {
2188         ParmVarDecl *Param = ParmVarDecl::Create(Context, New,
2189                                                  SourceLocation(),
2190                                                  SourceLocation(), 0,
2191                                                  *ParamType, /*TInfo=*/0,
2192                                                  SC_None, SC_None,
2193                                                  0);
2194         Param->setScopeInfo(0, Params.size());
2195         Param->setImplicit();
2196         Params.push_back(Param);
2197       }
2198 
2199       New->setParams(Params);
2200     }
2201 
2202     return MergeCompatibleFunctionDecls(New, Old, S);
2203   }
2204 
2205   // GNU C permits a K&R definition to follow a prototype declaration
2206   // if the declared types of the parameters in the K&R definition
2207   // match the types in the prototype declaration, even when the
2208   // promoted types of the parameters from the K&R definition differ
2209   // from the types in the prototype. GCC then keeps the types from
2210   // the prototype.
2211   //
2212   // If a variadic prototype is followed by a non-variadic K&R definition,
2213   // the K&R definition becomes variadic.  This is sort of an edge case, but
2214   // it's legal per the standard depending on how you read C99 6.7.5.3p15 and
2215   // C99 6.9.1p8.
2216   if (!getLangOpts().CPlusPlus &&
2217       Old->hasPrototype() && !New->hasPrototype() &&
2218       New->getType()->getAs<FunctionProtoType>() &&
2219       Old->getNumParams() == New->getNumParams()) {
2220     SmallVector<QualType, 16> ArgTypes;
2221     SmallVector<GNUCompatibleParamWarning, 16> Warnings;
2222     const FunctionProtoType *OldProto
2223       = Old->getType()->getAs<FunctionProtoType>();
2224     const FunctionProtoType *NewProto
2225       = New->getType()->getAs<FunctionProtoType>();
2226 
2227     // Determine whether this is the GNU C extension.
2228     QualType MergedReturn = Context.mergeTypes(OldProto->getResultType(),
2229                                                NewProto->getResultType());
2230     bool LooseCompatible = !MergedReturn.isNull();
2231     for (unsigned Idx = 0, End = Old->getNumParams();
2232          LooseCompatible && Idx != End; ++Idx) {
2233       ParmVarDecl *OldParm = Old->getParamDecl(Idx);
2234       ParmVarDecl *NewParm = New->getParamDecl(Idx);
2235       if (Context.typesAreCompatible(OldParm->getType(),
2236                                      NewProto->getArgType(Idx))) {
2237         ArgTypes.push_back(NewParm->getType());
2238       } else if (Context.typesAreCompatible(OldParm->getType(),
2239                                             NewParm->getType(),
2240                                             /*CompareUnqualified=*/true)) {
2241         GNUCompatibleParamWarning Warn
2242           = { OldParm, NewParm, NewProto->getArgType(Idx) };
2243         Warnings.push_back(Warn);
2244         ArgTypes.push_back(NewParm->getType());
2245       } else
2246         LooseCompatible = false;
2247     }
2248 
2249     if (LooseCompatible) {
2250       for (unsigned Warn = 0; Warn < Warnings.size(); ++Warn) {
2251         Diag(Warnings[Warn].NewParm->getLocation(),
2252              diag::ext_param_promoted_not_compatible_with_prototype)
2253           << Warnings[Warn].PromotedType
2254           << Warnings[Warn].OldParm->getType();
2255         if (Warnings[Warn].OldParm->getLocation().isValid())
2256           Diag(Warnings[Warn].OldParm->getLocation(),
2257                diag::note_previous_declaration);
2258       }
2259 
2260       New->setType(Context.getFunctionType(MergedReturn, &ArgTypes[0],
2261                                            ArgTypes.size(),
2262                                            OldProto->getExtProtoInfo()));
2263       return MergeCompatibleFunctionDecls(New, Old, S);
2264     }
2265 
2266     // Fall through to diagnose conflicting types.
2267   }
2268 
2269   // A function that has already been declared has been redeclared or defined
2270   // with a different type- show appropriate diagnostic
2271   if (unsigned BuiltinID = Old->getBuiltinID()) {
2272     // The user has declared a builtin function with an incompatible
2273     // signature.
2274     if (Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID)) {
2275       // The function the user is redeclaring is a library-defined
2276       // function like 'malloc' or 'printf'. Warn about the
2277       // redeclaration, then pretend that we don't know about this
2278       // library built-in.
2279       Diag(New->getLocation(), diag::warn_redecl_library_builtin) << New;
2280       Diag(Old->getLocation(), diag::note_previous_builtin_declaration)
2281         << Old << Old->getType();
2282       New->getIdentifier()->setBuiltinID(Builtin::NotBuiltin);
2283       Old->setInvalidDecl();
2284       return false;
2285     }
2286 
2287     PrevDiag = diag::note_previous_builtin_declaration;
2288   }
2289 
2290   Diag(New->getLocation(), diag::err_conflicting_types) << New->getDeclName();
2291   Diag(Old->getLocation(), PrevDiag) << Old << Old->getType();
2292   return true;
2293 }
2294 
2295 /// \brief Completes the merge of two function declarations that are
2296 /// known to be compatible.
2297 ///
2298 /// This routine handles the merging of attributes and other
2299 /// properties of function declarations form the old declaration to
2300 /// the new declaration, once we know that New is in fact a
2301 /// redeclaration of Old.
2302 ///
2303 /// \returns false
2304 bool Sema::MergeCompatibleFunctionDecls(FunctionDecl *New, FunctionDecl *Old,
2305                                         Scope *S) {
2306   // Merge the attributes
2307   mergeDeclAttributes(New, Old);
2308 
2309   // Merge the storage class.
2310   if (Old->getStorageClass() != SC_Extern &&
2311       Old->getStorageClass() != SC_None)
2312     New->setStorageClass(Old->getStorageClass());
2313 
2314   // Merge "pure" flag.
2315   if (Old->isPure())
2316     New->setPure();
2317 
2318   // Merge attributes from the parameters.  These can mismatch with K&R
2319   // declarations.
2320   if (New->getNumParams() == Old->getNumParams())
2321     for (unsigned i = 0, e = New->getNumParams(); i != e; ++i)
2322       mergeParamDeclAttributes(New->getParamDecl(i), Old->getParamDecl(i),
2323                                Context);
2324 
2325   if (getLangOpts().CPlusPlus)
2326     return MergeCXXFunctionDecl(New, Old, S);
2327 
2328   return false;
2329 }
2330 
2331 
2332 void Sema::mergeObjCMethodDecls(ObjCMethodDecl *newMethod,
2333                                 ObjCMethodDecl *oldMethod) {
2334 
2335   // Merge the attributes, including deprecated/unavailable
2336   mergeDeclAttributes(newMethod, oldMethod, /* mergeDeprecation */true);
2337 
2338   // Merge attributes from the parameters.
2339   ObjCMethodDecl::param_const_iterator oi = oldMethod->param_begin(),
2340                                        oe = oldMethod->param_end();
2341   for (ObjCMethodDecl::param_iterator
2342          ni = newMethod->param_begin(), ne = newMethod->param_end();
2343        ni != ne && oi != oe; ++ni, ++oi)
2344     mergeParamDeclAttributes(*ni, *oi, Context);
2345 
2346   CheckObjCMethodOverride(newMethod, oldMethod, true);
2347 }
2348 
2349 /// MergeVarDeclTypes - We parsed a variable 'New' which has the same name and
2350 /// scope as a previous declaration 'Old'.  Figure out how to merge their types,
2351 /// emitting diagnostics as appropriate.
2352 ///
2353 /// Declarations using the auto type specifier (C++ [decl.spec.auto]) call back
2354 /// to here in AddInitializerToDecl. We can't check them before the initializer
2355 /// is attached.
2356 void Sema::MergeVarDeclTypes(VarDecl *New, VarDecl *Old) {
2357   if (New->isInvalidDecl() || Old->isInvalidDecl())
2358     return;
2359 
2360   QualType MergedT;
2361   if (getLangOpts().CPlusPlus) {
2362     AutoType *AT = New->getType()->getContainedAutoType();
2363     if (AT && !AT->isDeduced()) {
2364       // We don't know what the new type is until the initializer is attached.
2365       return;
2366     } else if (Context.hasSameType(New->getType(), Old->getType())) {
2367       // These could still be something that needs exception specs checked.
2368       return MergeVarDeclExceptionSpecs(New, Old);
2369     }
2370     // C++ [basic.link]p10:
2371     //   [...] the types specified by all declarations referring to a given
2372     //   object or function shall be identical, except that declarations for an
2373     //   array object can specify array types that differ by the presence or
2374     //   absence of a major array bound (8.3.4).
2375     else if (Old->getType()->isIncompleteArrayType() &&
2376              New->getType()->isArrayType()) {
2377       CanQual<ArrayType> OldArray
2378         = Context.getCanonicalType(Old->getType())->getAs<ArrayType>();
2379       CanQual<ArrayType> NewArray
2380         = Context.getCanonicalType(New->getType())->getAs<ArrayType>();
2381       if (OldArray->getElementType() == NewArray->getElementType())
2382         MergedT = New->getType();
2383     } else if (Old->getType()->isArrayType() &&
2384              New->getType()->isIncompleteArrayType()) {
2385       CanQual<ArrayType> OldArray
2386         = Context.getCanonicalType(Old->getType())->getAs<ArrayType>();
2387       CanQual<ArrayType> NewArray
2388         = Context.getCanonicalType(New->getType())->getAs<ArrayType>();
2389       if (OldArray->getElementType() == NewArray->getElementType())
2390         MergedT = Old->getType();
2391     } else if (New->getType()->isObjCObjectPointerType()
2392                && Old->getType()->isObjCObjectPointerType()) {
2393         MergedT = Context.mergeObjCGCQualifiers(New->getType(),
2394                                                         Old->getType());
2395     }
2396   } else {
2397     MergedT = Context.mergeTypes(New->getType(), Old->getType());
2398   }
2399   if (MergedT.isNull()) {
2400     Diag(New->getLocation(), diag::err_redefinition_different_type)
2401       << New->getDeclName();
2402     Diag(Old->getLocation(), diag::note_previous_definition);
2403     return New->setInvalidDecl();
2404   }
2405   New->setType(MergedT);
2406 }
2407 
2408 /// MergeVarDecl - We just parsed a variable 'New' which has the same name
2409 /// and scope as a previous declaration 'Old'.  Figure out how to resolve this
2410 /// situation, merging decls or emitting diagnostics as appropriate.
2411 ///
2412 /// Tentative definition rules (C99 6.9.2p2) are checked by
2413 /// FinalizeDeclaratorGroup. Unfortunately, we can't analyze tentative
2414 /// definitions here, since the initializer hasn't been attached.
2415 ///
2416 void Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {
2417   // If the new decl is already invalid, don't do any other checking.
2418   if (New->isInvalidDecl())
2419     return;
2420 
2421   // Verify the old decl was also a variable.
2422   VarDecl *Old = 0;
2423   if (!Previous.isSingleResult() ||
2424       !(Old = dyn_cast<VarDecl>(Previous.getFoundDecl()))) {
2425     Diag(New->getLocation(), diag::err_redefinition_different_kind)
2426       << New->getDeclName();
2427     Diag(Previous.getRepresentativeDecl()->getLocation(),
2428          diag::note_previous_definition);
2429     return New->setInvalidDecl();
2430   }
2431 
2432   // C++ [class.mem]p1:
2433   //   A member shall not be declared twice in the member-specification [...]
2434   //
2435   // Here, we need only consider static data members.
2436   if (Old->isStaticDataMember() && !New->isOutOfLine()) {
2437     Diag(New->getLocation(), diag::err_duplicate_member)
2438       << New->getIdentifier();
2439     Diag(Old->getLocation(), diag::note_previous_declaration);
2440     New->setInvalidDecl();
2441   }
2442 
2443   mergeDeclAttributes(New, Old);
2444   // Warn if an already-declared variable is made a weak_import in a subsequent
2445   // declaration
2446   if (New->getAttr<WeakImportAttr>() &&
2447       Old->getStorageClass() == SC_None &&
2448       !Old->getAttr<WeakImportAttr>()) {
2449     Diag(New->getLocation(), diag::warn_weak_import) << New->getDeclName();
2450     Diag(Old->getLocation(), diag::note_previous_definition);
2451     // Remove weak_import attribute on new declaration.
2452     New->dropAttr<WeakImportAttr>();
2453   }
2454 
2455   // Merge the types.
2456   MergeVarDeclTypes(New, Old);
2457   if (New->isInvalidDecl())
2458     return;
2459 
2460   // C99 6.2.2p4: Check if we have a static decl followed by a non-static.
2461   if (New->getStorageClass() == SC_Static &&
2462       (Old->getStorageClass() == SC_None || Old->hasExternalStorage())) {
2463     Diag(New->getLocation(), diag::err_static_non_static) << New->getDeclName();
2464     Diag(Old->getLocation(), diag::note_previous_definition);
2465     return New->setInvalidDecl();
2466   }
2467   // C99 6.2.2p4:
2468   //   For an identifier declared with the storage-class specifier
2469   //   extern in a scope in which a prior declaration of that
2470   //   identifier is visible,23) if the prior declaration specifies
2471   //   internal or external linkage, the linkage of the identifier at
2472   //   the later declaration is the same as the linkage specified at
2473   //   the prior declaration. If no prior declaration is visible, or
2474   //   if the prior declaration specifies no linkage, then the
2475   //   identifier has external linkage.
2476   if (New->hasExternalStorage() && Old->hasLinkage())
2477     /* Okay */;
2478   else if (New->getStorageClass() != SC_Static &&
2479            Old->getStorageClass() == SC_Static) {
2480     Diag(New->getLocation(), diag::err_non_static_static) << New->getDeclName();
2481     Diag(Old->getLocation(), diag::note_previous_definition);
2482     return New->setInvalidDecl();
2483   }
2484 
2485   // Check if extern is followed by non-extern and vice-versa.
2486   if (New->hasExternalStorage() &&
2487       !Old->hasLinkage() && Old->isLocalVarDecl()) {
2488     Diag(New->getLocation(), diag::err_extern_non_extern) << New->getDeclName();
2489     Diag(Old->getLocation(), diag::note_previous_definition);
2490     return New->setInvalidDecl();
2491   }
2492   if (Old->hasExternalStorage() &&
2493       !New->hasLinkage() && New->isLocalVarDecl()) {
2494     Diag(New->getLocation(), diag::err_non_extern_extern) << New->getDeclName();
2495     Diag(Old->getLocation(), diag::note_previous_definition);
2496     return New->setInvalidDecl();
2497   }
2498 
2499   // Variables with external linkage are analyzed in FinalizeDeclaratorGroup.
2500 
2501   // FIXME: The test for external storage here seems wrong? We still
2502   // need to check for mismatches.
2503   if (!New->hasExternalStorage() && !New->isFileVarDecl() &&
2504       // Don't complain about out-of-line definitions of static members.
2505       !(Old->getLexicalDeclContext()->isRecord() &&
2506         !New->getLexicalDeclContext()->isRecord())) {
2507     Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName();
2508     Diag(Old->getLocation(), diag::note_previous_definition);
2509     return New->setInvalidDecl();
2510   }
2511 
2512   if (New->isThreadSpecified() && !Old->isThreadSpecified()) {
2513     Diag(New->getLocation(), diag::err_thread_non_thread) << New->getDeclName();
2514     Diag(Old->getLocation(), diag::note_previous_definition);
2515   } else if (!New->isThreadSpecified() && Old->isThreadSpecified()) {
2516     Diag(New->getLocation(), diag::err_non_thread_thread) << New->getDeclName();
2517     Diag(Old->getLocation(), diag::note_previous_definition);
2518   }
2519 
2520   // C++ doesn't have tentative definitions, so go right ahead and check here.
2521   const VarDecl *Def;
2522   if (getLangOpts().CPlusPlus &&
2523       New->isThisDeclarationADefinition() == VarDecl::Definition &&
2524       (Def = Old->getDefinition())) {
2525     Diag(New->getLocation(), diag::err_redefinition)
2526       << New->getDeclName();
2527     Diag(Def->getLocation(), diag::note_previous_definition);
2528     New->setInvalidDecl();
2529     return;
2530   }
2531   // c99 6.2.2 P4.
2532   // For an identifier declared with the storage-class specifier extern in a
2533   // scope in which a prior declaration of that identifier is visible, if
2534   // the prior declaration specifies internal or external linkage, the linkage
2535   // of the identifier at the later declaration is the same as the linkage
2536   // specified at the prior declaration.
2537   // FIXME. revisit this code.
2538   if (New->hasExternalStorage() &&
2539       Old->getLinkage() == InternalLinkage &&
2540       New->getDeclContext() == Old->getDeclContext())
2541     New->setStorageClass(Old->getStorageClass());
2542 
2543   // Keep a chain of previous declarations.
2544   New->setPreviousDeclaration(Old);
2545 
2546   // Inherit access appropriately.
2547   New->setAccess(Old->getAccess());
2548 }
2549 
2550 /// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with
2551 /// no declarator (e.g. "struct foo;") is parsed.
2552 Decl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS,
2553                                        DeclSpec &DS) {
2554   return ParsedFreeStandingDeclSpec(S, AS, DS,
2555                                     MultiTemplateParamsArg(*this, 0, 0));
2556 }
2557 
2558 /// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with
2559 /// no declarator (e.g. "struct foo;") is parsed. It also accopts template
2560 /// parameters to cope with template friend declarations.
2561 Decl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS,
2562                                        DeclSpec &DS,
2563                                        MultiTemplateParamsArg TemplateParams) {
2564   Decl *TagD = 0;
2565   TagDecl *Tag = 0;
2566   if (DS.getTypeSpecType() == DeclSpec::TST_class ||
2567       DS.getTypeSpecType() == DeclSpec::TST_struct ||
2568       DS.getTypeSpecType() == DeclSpec::TST_union ||
2569       DS.getTypeSpecType() == DeclSpec::TST_enum) {
2570     TagD = DS.getRepAsDecl();
2571 
2572     if (!TagD) // We probably had an error
2573       return 0;
2574 
2575     // Note that the above type specs guarantee that the
2576     // type rep is a Decl, whereas in many of the others
2577     // it's a Type.
2578     if (isa<TagDecl>(TagD))
2579       Tag = cast<TagDecl>(TagD);
2580     else if (ClassTemplateDecl *CTD = dyn_cast<ClassTemplateDecl>(TagD))
2581       Tag = CTD->getTemplatedDecl();
2582   }
2583 
2584   if (Tag) {
2585     Tag->setFreeStanding();
2586     if (Tag->isInvalidDecl())
2587       return Tag;
2588   }
2589 
2590   if (unsigned TypeQuals = DS.getTypeQualifiers()) {
2591     // Enforce C99 6.7.3p2: "Types other than pointer types derived from object
2592     // or incomplete types shall not be restrict-qualified."
2593     if (TypeQuals & DeclSpec::TQ_restrict)
2594       Diag(DS.getRestrictSpecLoc(),
2595            diag::err_typecheck_invalid_restrict_not_pointer_noarg)
2596            << DS.getSourceRange();
2597   }
2598 
2599   if (DS.isConstexprSpecified()) {
2600     // C++0x [dcl.constexpr]p1: constexpr can only be applied to declarations
2601     // and definitions of functions and variables.
2602     if (Tag)
2603       Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_tag)
2604         << (DS.getTypeSpecType() == DeclSpec::TST_class ? 0 :
2605             DS.getTypeSpecType() == DeclSpec::TST_struct ? 1 :
2606             DS.getTypeSpecType() == DeclSpec::TST_union ? 2 : 3);
2607     else
2608       Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_no_declarators);
2609     // Don't emit warnings after this error.
2610     return TagD;
2611   }
2612 
2613   if (DS.isFriendSpecified()) {
2614     // If we're dealing with a decl but not a TagDecl, assume that
2615     // whatever routines created it handled the friendship aspect.
2616     if (TagD && !Tag)
2617       return 0;
2618     return ActOnFriendTypeDecl(S, DS, TemplateParams);
2619   }
2620 
2621   // Track whether we warned about the fact that there aren't any
2622   // declarators.
2623   bool emittedWarning = false;
2624 
2625   if (RecordDecl *Record = dyn_cast_or_null<RecordDecl>(Tag)) {
2626     if (!Record->getDeclName() && Record->isCompleteDefinition() &&
2627         DS.getStorageClassSpec() != DeclSpec::SCS_typedef) {
2628       if (getLangOpts().CPlusPlus ||
2629           Record->getDeclContext()->isRecord())
2630         return BuildAnonymousStructOrUnion(S, DS, AS, Record);
2631 
2632       Diag(DS.getLocStart(), diag::ext_no_declarators)
2633         << DS.getSourceRange();
2634       emittedWarning = true;
2635     }
2636   }
2637 
2638   // Check for Microsoft C extension: anonymous struct.
2639   if (getLangOpts().MicrosoftExt && !getLangOpts().CPlusPlus &&
2640       CurContext->isRecord() &&
2641       DS.getStorageClassSpec() == DeclSpec::SCS_unspecified) {
2642     // Handle 2 kinds of anonymous struct:
2643     //   struct STRUCT;
2644     // and
2645     //   STRUCT_TYPE;  <- where STRUCT_TYPE is a typedef struct.
2646     RecordDecl *Record = dyn_cast_or_null<RecordDecl>(Tag);
2647     if ((Record && Record->getDeclName() && !Record->isCompleteDefinition()) ||
2648         (DS.getTypeSpecType() == DeclSpec::TST_typename &&
2649          DS.getRepAsType().get()->isStructureType())) {
2650       Diag(DS.getLocStart(), diag::ext_ms_anonymous_struct)
2651         << DS.getSourceRange();
2652       return BuildMicrosoftCAnonymousStruct(S, DS, Record);
2653     }
2654   }
2655 
2656   if (getLangOpts().CPlusPlus &&
2657       DS.getStorageClassSpec() != DeclSpec::SCS_typedef)
2658     if (EnumDecl *Enum = dyn_cast_or_null<EnumDecl>(Tag))
2659       if (Enum->enumerator_begin() == Enum->enumerator_end() &&
2660           !Enum->getIdentifier() && !Enum->isInvalidDecl()) {
2661         Diag(Enum->getLocation(), diag::ext_no_declarators)
2662           << DS.getSourceRange();
2663         emittedWarning = true;
2664       }
2665 
2666   // Skip all the checks below if we have a type error.
2667   if (DS.getTypeSpecType() == DeclSpec::TST_error) return TagD;
2668 
2669   if (!DS.isMissingDeclaratorOk()) {
2670     // Warn about typedefs of enums without names, since this is an
2671     // extension in both Microsoft and GNU.
2672     if (DS.getStorageClassSpec() == DeclSpec::SCS_typedef &&
2673         Tag && isa<EnumDecl>(Tag)) {
2674       Diag(DS.getLocStart(), diag::ext_typedef_without_a_name)
2675         << DS.getSourceRange();
2676       return Tag;
2677     }
2678 
2679     Diag(DS.getLocStart(), diag::ext_no_declarators)
2680       << DS.getSourceRange();
2681     emittedWarning = true;
2682   }
2683 
2684   // We're going to complain about a bunch of spurious specifiers;
2685   // only do this if we're declaring a tag, because otherwise we
2686   // should be getting diag::ext_no_declarators.
2687   if (emittedWarning || (TagD && TagD->isInvalidDecl()))
2688     return TagD;
2689 
2690   // Note that a linkage-specification sets a storage class, but
2691   // 'extern "C" struct foo;' is actually valid and not theoretically
2692   // useless.
2693   if (DeclSpec::SCS scs = DS.getStorageClassSpec())
2694     if (!DS.isExternInLinkageSpec())
2695       Diag(DS.getStorageClassSpecLoc(), diag::warn_standalone_specifier)
2696         << DeclSpec::getSpecifierName(scs);
2697 
2698   if (DS.isThreadSpecified())
2699     Diag(DS.getThreadSpecLoc(), diag::warn_standalone_specifier) << "__thread";
2700   if (DS.getTypeQualifiers()) {
2701     if (DS.getTypeQualifiers() & DeclSpec::TQ_const)
2702       Diag(DS.getConstSpecLoc(), diag::warn_standalone_specifier) << "const";
2703     if (DS.getTypeQualifiers() & DeclSpec::TQ_volatile)
2704       Diag(DS.getConstSpecLoc(), diag::warn_standalone_specifier) << "volatile";
2705     // Restrict is covered above.
2706   }
2707   if (DS.isInlineSpecified())
2708     Diag(DS.getInlineSpecLoc(), diag::warn_standalone_specifier) << "inline";
2709   if (DS.isVirtualSpecified())
2710     Diag(DS.getVirtualSpecLoc(), diag::warn_standalone_specifier) << "virtual";
2711   if (DS.isExplicitSpecified())
2712     Diag(DS.getExplicitSpecLoc(), diag::warn_standalone_specifier) <<"explicit";
2713 
2714   if (DS.isModulePrivateSpecified() &&
2715       Tag && Tag->getDeclContext()->isFunctionOrMethod())
2716     Diag(DS.getModulePrivateSpecLoc(), diag::err_module_private_local_class)
2717       << Tag->getTagKind()
2718       << FixItHint::CreateRemoval(DS.getModulePrivateSpecLoc());
2719 
2720   // Warn about ignored type attributes, for example:
2721   // __attribute__((aligned)) struct A;
2722   // Attributes should be placed after tag to apply to type declaration.
2723   if (!DS.getAttributes().empty()) {
2724     DeclSpec::TST TypeSpecType = DS.getTypeSpecType();
2725     if (TypeSpecType == DeclSpec::TST_class ||
2726         TypeSpecType == DeclSpec::TST_struct ||
2727         TypeSpecType == DeclSpec::TST_union ||
2728         TypeSpecType == DeclSpec::TST_enum) {
2729       AttributeList* attrs = DS.getAttributes().getList();
2730       while (attrs) {
2731         Diag(attrs->getScopeLoc(),
2732              diag::warn_declspec_attribute_ignored)
2733         << attrs->getName()
2734         << (TypeSpecType == DeclSpec::TST_class ? 0 :
2735             TypeSpecType == DeclSpec::TST_struct ? 1 :
2736             TypeSpecType == DeclSpec::TST_union ? 2 : 3);
2737         attrs = attrs->getNext();
2738       }
2739     }
2740   }
2741 
2742   ActOnDocumentableDecl(TagD);
2743 
2744   return TagD;
2745 }
2746 
2747 /// We are trying to inject an anonymous member into the given scope;
2748 /// check if there's an existing declaration that can't be overloaded.
2749 ///
2750 /// \return true if this is a forbidden redeclaration
2751 static bool CheckAnonMemberRedeclaration(Sema &SemaRef,
2752                                          Scope *S,
2753                                          DeclContext *Owner,
2754                                          DeclarationName Name,
2755                                          SourceLocation NameLoc,
2756                                          unsigned diagnostic) {
2757   LookupResult R(SemaRef, Name, NameLoc, Sema::LookupMemberName,
2758                  Sema::ForRedeclaration);
2759   if (!SemaRef.LookupName(R, S)) return false;
2760 
2761   if (R.getAsSingle<TagDecl>())
2762     return false;
2763 
2764   // Pick a representative declaration.
2765   NamedDecl *PrevDecl = R.getRepresentativeDecl()->getUnderlyingDecl();
2766   assert(PrevDecl && "Expected a non-null Decl");
2767 
2768   if (!SemaRef.isDeclInScope(PrevDecl, Owner, S))
2769     return false;
2770 
2771   SemaRef.Diag(NameLoc, diagnostic) << Name;
2772   SemaRef.Diag(PrevDecl->getLocation(), diag::note_previous_declaration);
2773 
2774   return true;
2775 }
2776 
2777 /// InjectAnonymousStructOrUnionMembers - Inject the members of the
2778 /// anonymous struct or union AnonRecord into the owning context Owner
2779 /// and scope S. This routine will be invoked just after we realize
2780 /// that an unnamed union or struct is actually an anonymous union or
2781 /// struct, e.g.,
2782 ///
2783 /// @code
2784 /// union {
2785 ///   int i;
2786 ///   float f;
2787 /// }; // InjectAnonymousStructOrUnionMembers called here to inject i and
2788 ///    // f into the surrounding scope.x
2789 /// @endcode
2790 ///
2791 /// This routine is recursive, injecting the names of nested anonymous
2792 /// structs/unions into the owning context and scope as well.
2793 static bool InjectAnonymousStructOrUnionMembers(Sema &SemaRef, Scope *S,
2794                                                 DeclContext *Owner,
2795                                                 RecordDecl *AnonRecord,
2796                                                 AccessSpecifier AS,
2797                               SmallVector<NamedDecl*, 2> &Chaining,
2798                                                       bool MSAnonStruct) {
2799   unsigned diagKind
2800     = AnonRecord->isUnion() ? diag::err_anonymous_union_member_redecl
2801                             : diag::err_anonymous_struct_member_redecl;
2802 
2803   bool Invalid = false;
2804 
2805   // Look every FieldDecl and IndirectFieldDecl with a name.
2806   for (RecordDecl::decl_iterator D = AnonRecord->decls_begin(),
2807                                DEnd = AnonRecord->decls_end();
2808        D != DEnd; ++D) {
2809     if ((isa<FieldDecl>(*D) || isa<IndirectFieldDecl>(*D)) &&
2810         cast<NamedDecl>(*D)->getDeclName()) {
2811       ValueDecl *VD = cast<ValueDecl>(*D);
2812       if (CheckAnonMemberRedeclaration(SemaRef, S, Owner, VD->getDeclName(),
2813                                        VD->getLocation(), diagKind)) {
2814         // C++ [class.union]p2:
2815         //   The names of the members of an anonymous union shall be
2816         //   distinct from the names of any other entity in the
2817         //   scope in which the anonymous union is declared.
2818         Invalid = true;
2819       } else {
2820         // C++ [class.union]p2:
2821         //   For the purpose of name lookup, after the anonymous union
2822         //   definition, the members of the anonymous union are
2823         //   considered to have been defined in the scope in which the
2824         //   anonymous union is declared.
2825         unsigned OldChainingSize = Chaining.size();
2826         if (IndirectFieldDecl *IF = dyn_cast<IndirectFieldDecl>(VD))
2827           for (IndirectFieldDecl::chain_iterator PI = IF->chain_begin(),
2828                PE = IF->chain_end(); PI != PE; ++PI)
2829             Chaining.push_back(*PI);
2830         else
2831           Chaining.push_back(VD);
2832 
2833         assert(Chaining.size() >= 2);
2834         NamedDecl **NamedChain =
2835           new (SemaRef.Context)NamedDecl*[Chaining.size()];
2836         for (unsigned i = 0; i < Chaining.size(); i++)
2837           NamedChain[i] = Chaining[i];
2838 
2839         IndirectFieldDecl* IndirectField =
2840           IndirectFieldDecl::Create(SemaRef.Context, Owner, VD->getLocation(),
2841                                     VD->getIdentifier(), VD->getType(),
2842                                     NamedChain, Chaining.size());
2843 
2844         IndirectField->setAccess(AS);
2845         IndirectField->setImplicit();
2846         SemaRef.PushOnScopeChains(IndirectField, S);
2847 
2848         // That includes picking up the appropriate access specifier.
2849         if (AS != AS_none) IndirectField->setAccess(AS);
2850 
2851         Chaining.resize(OldChainingSize);
2852       }
2853     }
2854   }
2855 
2856   return Invalid;
2857 }
2858 
2859 /// StorageClassSpecToVarDeclStorageClass - Maps a DeclSpec::SCS to
2860 /// a VarDecl::StorageClass. Any error reporting is up to the caller:
2861 /// illegal input values are mapped to SC_None.
2862 static StorageClass
2863 StorageClassSpecToVarDeclStorageClass(DeclSpec::SCS StorageClassSpec) {
2864   switch (StorageClassSpec) {
2865   case DeclSpec::SCS_unspecified:    return SC_None;
2866   case DeclSpec::SCS_extern:         return SC_Extern;
2867   case DeclSpec::SCS_static:         return SC_Static;
2868   case DeclSpec::SCS_auto:           return SC_Auto;
2869   case DeclSpec::SCS_register:       return SC_Register;
2870   case DeclSpec::SCS_private_extern: return SC_PrivateExtern;
2871     // Illegal SCSs map to None: error reporting is up to the caller.
2872   case DeclSpec::SCS_mutable:        // Fall through.
2873   case DeclSpec::SCS_typedef:        return SC_None;
2874   }
2875   llvm_unreachable("unknown storage class specifier");
2876 }
2877 
2878 /// StorageClassSpecToFunctionDeclStorageClass - Maps a DeclSpec::SCS to
2879 /// a StorageClass. Any error reporting is up to the caller:
2880 /// illegal input values are mapped to SC_None.
2881 static StorageClass
2882 StorageClassSpecToFunctionDeclStorageClass(DeclSpec::SCS StorageClassSpec) {
2883   switch (StorageClassSpec) {
2884   case DeclSpec::SCS_unspecified:    return SC_None;
2885   case DeclSpec::SCS_extern:         return SC_Extern;
2886   case DeclSpec::SCS_static:         return SC_Static;
2887   case DeclSpec::SCS_private_extern: return SC_PrivateExtern;
2888     // Illegal SCSs map to None: error reporting is up to the caller.
2889   case DeclSpec::SCS_auto:           // Fall through.
2890   case DeclSpec::SCS_mutable:        // Fall through.
2891   case DeclSpec::SCS_register:       // Fall through.
2892   case DeclSpec::SCS_typedef:        return SC_None;
2893   }
2894   llvm_unreachable("unknown storage class specifier");
2895 }
2896 
2897 /// BuildAnonymousStructOrUnion - Handle the declaration of an
2898 /// anonymous structure or union. Anonymous unions are a C++ feature
2899 /// (C++ [class.union]) and a C11 feature; anonymous structures
2900 /// are a C11 feature and GNU C++ extension.
2901 Decl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS,
2902                                              AccessSpecifier AS,
2903                                              RecordDecl *Record) {
2904   DeclContext *Owner = Record->getDeclContext();
2905 
2906   // Diagnose whether this anonymous struct/union is an extension.
2907   if (Record->isUnion() && !getLangOpts().CPlusPlus && !getLangOpts().C11)
2908     Diag(Record->getLocation(), diag::ext_anonymous_union);
2909   else if (!Record->isUnion() && getLangOpts().CPlusPlus)
2910     Diag(Record->getLocation(), diag::ext_gnu_anonymous_struct);
2911   else if (!Record->isUnion() && !getLangOpts().C11)
2912     Diag(Record->getLocation(), diag::ext_c11_anonymous_struct);
2913 
2914   // C and C++ require different kinds of checks for anonymous
2915   // structs/unions.
2916   bool Invalid = false;
2917   if (getLangOpts().CPlusPlus) {
2918     const char* PrevSpec = 0;
2919     unsigned DiagID;
2920     if (Record->isUnion()) {
2921       // C++ [class.union]p6:
2922       //   Anonymous unions declared in a named namespace or in the
2923       //   global namespace shall be declared static.
2924       if (DS.getStorageClassSpec() != DeclSpec::SCS_static &&
2925           (isa<TranslationUnitDecl>(Owner) ||
2926            (isa<NamespaceDecl>(Owner) &&
2927             cast<NamespaceDecl>(Owner)->getDeclName()))) {
2928         Diag(Record->getLocation(), diag::err_anonymous_union_not_static)
2929           << FixItHint::CreateInsertion(Record->getLocation(), "static ");
2930 
2931         // Recover by adding 'static'.
2932         DS.SetStorageClassSpec(*this, DeclSpec::SCS_static, SourceLocation(),
2933                                PrevSpec, DiagID);
2934       }
2935       // C++ [class.union]p6:
2936       //   A storage class is not allowed in a declaration of an
2937       //   anonymous union in a class scope.
2938       else if (DS.getStorageClassSpec() != DeclSpec::SCS_unspecified &&
2939                isa<RecordDecl>(Owner)) {
2940         Diag(DS.getStorageClassSpecLoc(),
2941              diag::err_anonymous_union_with_storage_spec)
2942           << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());
2943 
2944         // Recover by removing the storage specifier.
2945         DS.SetStorageClassSpec(*this, DeclSpec::SCS_unspecified,
2946                                SourceLocation(),
2947                                PrevSpec, DiagID);
2948       }
2949     }
2950 
2951     // Ignore const/volatile/restrict qualifiers.
2952     if (DS.getTypeQualifiers()) {
2953       if (DS.getTypeQualifiers() & DeclSpec::TQ_const)
2954         Diag(DS.getConstSpecLoc(), diag::ext_anonymous_struct_union_qualified)
2955           << Record->isUnion() << 0
2956           << FixItHint::CreateRemoval(DS.getConstSpecLoc());
2957       if (DS.getTypeQualifiers() & DeclSpec::TQ_volatile)
2958         Diag(DS.getVolatileSpecLoc(),
2959              diag::ext_anonymous_struct_union_qualified)
2960           << Record->isUnion() << 1
2961           << FixItHint::CreateRemoval(DS.getVolatileSpecLoc());
2962       if (DS.getTypeQualifiers() & DeclSpec::TQ_restrict)
2963         Diag(DS.getRestrictSpecLoc(),
2964              diag::ext_anonymous_struct_union_qualified)
2965           << Record->isUnion() << 2
2966           << FixItHint::CreateRemoval(DS.getRestrictSpecLoc());
2967 
2968       DS.ClearTypeQualifiers();
2969     }
2970 
2971     // C++ [class.union]p2:
2972     //   The member-specification of an anonymous union shall only
2973     //   define non-static data members. [Note: nested types and
2974     //   functions cannot be declared within an anonymous union. ]
2975     for (DeclContext::decl_iterator Mem = Record->decls_begin(),
2976                                  MemEnd = Record->decls_end();
2977          Mem != MemEnd; ++Mem) {
2978       if (FieldDecl *FD = dyn_cast<FieldDecl>(*Mem)) {
2979         // C++ [class.union]p3:
2980         //   An anonymous union shall not have private or protected
2981         //   members (clause 11).
2982         assert(FD->getAccess() != AS_none);
2983         if (FD->getAccess() != AS_public) {
2984           Diag(FD->getLocation(), diag::err_anonymous_record_nonpublic_member)
2985             << (int)Record->isUnion() << (int)(FD->getAccess() == AS_protected);
2986           Invalid = true;
2987         }
2988 
2989         // C++ [class.union]p1
2990         //   An object of a class with a non-trivial constructor, a non-trivial
2991         //   copy constructor, a non-trivial destructor, or a non-trivial copy
2992         //   assignment operator cannot be a member of a union, nor can an
2993         //   array of such objects.
2994         if (CheckNontrivialField(FD))
2995           Invalid = true;
2996       } else if ((*Mem)->isImplicit()) {
2997         // Any implicit members are fine.
2998       } else if (isa<TagDecl>(*Mem) && (*Mem)->getDeclContext() != Record) {
2999         // This is a type that showed up in an
3000         // elaborated-type-specifier inside the anonymous struct or
3001         // union, but which actually declares a type outside of the
3002         // anonymous struct or union. It's okay.
3003       } else if (RecordDecl *MemRecord = dyn_cast<RecordDecl>(*Mem)) {
3004         if (!MemRecord->isAnonymousStructOrUnion() &&
3005             MemRecord->getDeclName()) {
3006           // Visual C++ allows type definition in anonymous struct or union.
3007           if (getLangOpts().MicrosoftExt)
3008             Diag(MemRecord->getLocation(), diag::ext_anonymous_record_with_type)
3009               << (int)Record->isUnion();
3010           else {
3011             // This is a nested type declaration.
3012             Diag(MemRecord->getLocation(), diag::err_anonymous_record_with_type)
3013               << (int)Record->isUnion();
3014             Invalid = true;
3015           }
3016         }
3017       } else if (isa<AccessSpecDecl>(*Mem)) {
3018         // Any access specifier is fine.
3019       } else {
3020         // We have something that isn't a non-static data
3021         // member. Complain about it.
3022         unsigned DK = diag::err_anonymous_record_bad_member;
3023         if (isa<TypeDecl>(*Mem))
3024           DK = diag::err_anonymous_record_with_type;
3025         else if (isa<FunctionDecl>(*Mem))
3026           DK = diag::err_anonymous_record_with_function;
3027         else if (isa<VarDecl>(*Mem))
3028           DK = diag::err_anonymous_record_with_static;
3029 
3030         // Visual C++ allows type definition in anonymous struct or union.
3031         if (getLangOpts().MicrosoftExt &&
3032             DK == diag::err_anonymous_record_with_type)
3033           Diag((*Mem)->getLocation(), diag::ext_anonymous_record_with_type)
3034             << (int)Record->isUnion();
3035         else {
3036           Diag((*Mem)->getLocation(), DK)
3037               << (int)Record->isUnion();
3038           Invalid = true;
3039         }
3040       }
3041     }
3042   }
3043 
3044   if (!Record->isUnion() && !Owner->isRecord()) {
3045     Diag(Record->getLocation(), diag::err_anonymous_struct_not_member)
3046       << (int)getLangOpts().CPlusPlus;
3047     Invalid = true;
3048   }
3049 
3050   // Mock up a declarator.
3051   Declarator Dc(DS, Declarator::MemberContext);
3052   TypeSourceInfo *TInfo = GetTypeForDeclarator(Dc, S);
3053   assert(TInfo && "couldn't build declarator info for anonymous struct/union");
3054 
3055   // Create a declaration for this anonymous struct/union.
3056   NamedDecl *Anon = 0;
3057   if (RecordDecl *OwningClass = dyn_cast<RecordDecl>(Owner)) {
3058     Anon = FieldDecl::Create(Context, OwningClass,
3059                              DS.getLocStart(),
3060                              Record->getLocation(),
3061                              /*IdentifierInfo=*/0,
3062                              Context.getTypeDeclType(Record),
3063                              TInfo,
3064                              /*BitWidth=*/0, /*Mutable=*/false,
3065                              /*InitStyle=*/ICIS_NoInit);
3066     Anon->setAccess(AS);
3067     if (getLangOpts().CPlusPlus)
3068       FieldCollector->Add(cast<FieldDecl>(Anon));
3069   } else {
3070     DeclSpec::SCS SCSpec = DS.getStorageClassSpec();
3071     assert(SCSpec != DeclSpec::SCS_typedef &&
3072            "Parser allowed 'typedef' as storage class VarDecl.");
3073     VarDecl::StorageClass SC = StorageClassSpecToVarDeclStorageClass(SCSpec);
3074     if (SCSpec == DeclSpec::SCS_mutable) {
3075       // mutable can only appear on non-static class members, so it's always
3076       // an error here
3077       Diag(Record->getLocation(), diag::err_mutable_nonmember);
3078       Invalid = true;
3079       SC = SC_None;
3080     }
3081     SCSpec = DS.getStorageClassSpecAsWritten();
3082     VarDecl::StorageClass SCAsWritten
3083       = StorageClassSpecToVarDeclStorageClass(SCSpec);
3084 
3085     Anon = VarDecl::Create(Context, Owner,
3086                            DS.getLocStart(),
3087                            Record->getLocation(), /*IdentifierInfo=*/0,
3088                            Context.getTypeDeclType(Record),
3089                            TInfo, SC, SCAsWritten);
3090 
3091     // Default-initialize the implicit variable. This initialization will be
3092     // trivial in almost all cases, except if a union member has an in-class
3093     // initializer:
3094     //   union { int n = 0; };
3095     ActOnUninitializedDecl(Anon, /*TypeMayContainAuto=*/false);
3096   }
3097   Anon->setImplicit();
3098 
3099   // Add the anonymous struct/union object to the current
3100   // context. We'll be referencing this object when we refer to one of
3101   // its members.
3102   Owner->addDecl(Anon);
3103 
3104   // Inject the members of the anonymous struct/union into the owning
3105   // context and into the identifier resolver chain for name lookup
3106   // purposes.
3107   SmallVector<NamedDecl*, 2> Chain;
3108   Chain.push_back(Anon);
3109 
3110   if (InjectAnonymousStructOrUnionMembers(*this, S, Owner, Record, AS,
3111                                           Chain, false))
3112     Invalid = true;
3113 
3114   // Mark this as an anonymous struct/union type. Note that we do not
3115   // do this until after we have already checked and injected the
3116   // members of this anonymous struct/union type, because otherwise
3117   // the members could be injected twice: once by DeclContext when it
3118   // builds its lookup table, and once by
3119   // InjectAnonymousStructOrUnionMembers.
3120   Record->setAnonymousStructOrUnion(true);
3121 
3122   if (Invalid)
3123     Anon->setInvalidDecl();
3124 
3125   return Anon;
3126 }
3127 
3128 /// BuildMicrosoftCAnonymousStruct - Handle the declaration of an
3129 /// Microsoft C anonymous structure.
3130 /// Ref: http://msdn.microsoft.com/en-us/library/z2cx9y4f.aspx
3131 /// Example:
3132 ///
3133 /// struct A { int a; };
3134 /// struct B { struct A; int b; };
3135 ///
3136 /// void foo() {
3137 ///   B var;
3138 ///   var.a = 3;
3139 /// }
3140 ///
3141 Decl *Sema::BuildMicrosoftCAnonymousStruct(Scope *S, DeclSpec &DS,
3142                                            RecordDecl *Record) {
3143 
3144   // If there is no Record, get the record via the typedef.
3145   if (!Record)
3146     Record = DS.getRepAsType().get()->getAsStructureType()->getDecl();
3147 
3148   // Mock up a declarator.
3149   Declarator Dc(DS, Declarator::TypeNameContext);
3150   TypeSourceInfo *TInfo = GetTypeForDeclarator(Dc, S);
3151   assert(TInfo && "couldn't build declarator info for anonymous struct");
3152 
3153   // Create a declaration for this anonymous struct.
3154   NamedDecl* Anon = FieldDecl::Create(Context,
3155                              cast<RecordDecl>(CurContext),
3156                              DS.getLocStart(),
3157                              DS.getLocStart(),
3158                              /*IdentifierInfo=*/0,
3159                              Context.getTypeDeclType(Record),
3160                              TInfo,
3161                              /*BitWidth=*/0, /*Mutable=*/false,
3162                              /*InitStyle=*/ICIS_NoInit);
3163   Anon->setImplicit();
3164 
3165   // Add the anonymous struct object to the current context.
3166   CurContext->addDecl(Anon);
3167 
3168   // Inject the members of the anonymous struct into the current
3169   // context and into the identifier resolver chain for name lookup
3170   // purposes.
3171   SmallVector<NamedDecl*, 2> Chain;
3172   Chain.push_back(Anon);
3173 
3174   RecordDecl *RecordDef = Record->getDefinition();
3175   if (!RecordDef || InjectAnonymousStructOrUnionMembers(*this, S, CurContext,
3176                                                         RecordDef, AS_none,
3177                                                         Chain, true))
3178     Anon->setInvalidDecl();
3179 
3180   return Anon;
3181 }
3182 
3183 /// GetNameForDeclarator - Determine the full declaration name for the
3184 /// given Declarator.
3185 DeclarationNameInfo Sema::GetNameForDeclarator(Declarator &D) {
3186   return GetNameFromUnqualifiedId(D.getName());
3187 }
3188 
3189 /// \brief Retrieves the declaration name from a parsed unqualified-id.
3190 DeclarationNameInfo
3191 Sema::GetNameFromUnqualifiedId(const UnqualifiedId &Name) {
3192   DeclarationNameInfo NameInfo;
3193   NameInfo.setLoc(Name.StartLocation);
3194 
3195   switch (Name.getKind()) {
3196 
3197   case UnqualifiedId::IK_ImplicitSelfParam:
3198   case UnqualifiedId::IK_Identifier:
3199     NameInfo.setName(Name.Identifier);
3200     NameInfo.setLoc(Name.StartLocation);
3201     return NameInfo;
3202 
3203   case UnqualifiedId::IK_OperatorFunctionId:
3204     NameInfo.setName(Context.DeclarationNames.getCXXOperatorName(
3205                                            Name.OperatorFunctionId.Operator));
3206     NameInfo.setLoc(Name.StartLocation);
3207     NameInfo.getInfo().CXXOperatorName.BeginOpNameLoc
3208       = Name.OperatorFunctionId.SymbolLocations[0];
3209     NameInfo.getInfo().CXXOperatorName.EndOpNameLoc
3210       = Name.EndLocation.getRawEncoding();
3211     return NameInfo;
3212 
3213   case UnqualifiedId::IK_LiteralOperatorId:
3214     NameInfo.setName(Context.DeclarationNames.getCXXLiteralOperatorName(
3215                                                            Name.Identifier));
3216     NameInfo.setLoc(Name.StartLocation);
3217     NameInfo.setCXXLiteralOperatorNameLoc(Name.EndLocation);
3218     return NameInfo;
3219 
3220   case UnqualifiedId::IK_ConversionFunctionId: {
3221     TypeSourceInfo *TInfo;
3222     QualType Ty = GetTypeFromParser(Name.ConversionFunctionId, &TInfo);
3223     if (Ty.isNull())
3224       return DeclarationNameInfo();
3225     NameInfo.setName(Context.DeclarationNames.getCXXConversionFunctionName(
3226                                                Context.getCanonicalType(Ty)));
3227     NameInfo.setLoc(Name.StartLocation);
3228     NameInfo.setNamedTypeInfo(TInfo);
3229     return NameInfo;
3230   }
3231 
3232   case UnqualifiedId::IK_ConstructorName: {
3233     TypeSourceInfo *TInfo;
3234     QualType Ty = GetTypeFromParser(Name.ConstructorName, &TInfo);
3235     if (Ty.isNull())
3236       return DeclarationNameInfo();
3237     NameInfo.setName(Context.DeclarationNames.getCXXConstructorName(
3238                                               Context.getCanonicalType(Ty)));
3239     NameInfo.setLoc(Name.StartLocation);
3240     NameInfo.setNamedTypeInfo(TInfo);
3241     return NameInfo;
3242   }
3243 
3244   case UnqualifiedId::IK_ConstructorTemplateId: {
3245     // In well-formed code, we can only have a constructor
3246     // template-id that refers to the current context, so go there
3247     // to find the actual type being constructed.
3248     CXXRecordDecl *CurClass = dyn_cast<CXXRecordDecl>(CurContext);
3249     if (!CurClass || CurClass->getIdentifier() != Name.TemplateId->Name)
3250       return DeclarationNameInfo();
3251 
3252     // Determine the type of the class being constructed.
3253     QualType CurClassType = Context.getTypeDeclType(CurClass);
3254 
3255     // FIXME: Check two things: that the template-id names the same type as
3256     // CurClassType, and that the template-id does not occur when the name
3257     // was qualified.
3258 
3259     NameInfo.setName(Context.DeclarationNames.getCXXConstructorName(
3260                                     Context.getCanonicalType(CurClassType)));
3261     NameInfo.setLoc(Name.StartLocation);
3262     // FIXME: should we retrieve TypeSourceInfo?
3263     NameInfo.setNamedTypeInfo(0);
3264     return NameInfo;
3265   }
3266 
3267   case UnqualifiedId::IK_DestructorName: {
3268     TypeSourceInfo *TInfo;
3269     QualType Ty = GetTypeFromParser(Name.DestructorName, &TInfo);
3270     if (Ty.isNull())
3271       return DeclarationNameInfo();
3272     NameInfo.setName(Context.DeclarationNames.getCXXDestructorName(
3273                                               Context.getCanonicalType(Ty)));
3274     NameInfo.setLoc(Name.StartLocation);
3275     NameInfo.setNamedTypeInfo(TInfo);
3276     return NameInfo;
3277   }
3278 
3279   case UnqualifiedId::IK_TemplateId: {
3280     TemplateName TName = Name.TemplateId->Template.get();
3281     SourceLocation TNameLoc = Name.TemplateId->TemplateNameLoc;
3282     return Context.getNameForTemplate(TName, TNameLoc);
3283   }
3284 
3285   } // switch (Name.getKind())
3286 
3287   llvm_unreachable("Unknown name kind");
3288 }
3289 
3290 static QualType getCoreType(QualType Ty) {
3291   do {
3292     if (Ty->isPointerType() || Ty->isReferenceType())
3293       Ty = Ty->getPointeeType();
3294     else if (Ty->isArrayType())
3295       Ty = Ty->castAsArrayTypeUnsafe()->getElementType();
3296     else
3297       return Ty.withoutLocalFastQualifiers();
3298   } while (true);
3299 }
3300 
3301 /// hasSimilarParameters - Determine whether the C++ functions Declaration
3302 /// and Definition have "nearly" matching parameters. This heuristic is
3303 /// used to improve diagnostics in the case where an out-of-line function
3304 /// definition doesn't match any declaration within the class or namespace.
3305 /// Also sets Params to the list of indices to the parameters that differ
3306 /// between the declaration and the definition. If hasSimilarParameters
3307 /// returns true and Params is empty, then all of the parameters match.
3308 static bool hasSimilarParameters(ASTContext &Context,
3309                                      FunctionDecl *Declaration,
3310                                      FunctionDecl *Definition,
3311                                      llvm::SmallVectorImpl<unsigned> &Params) {
3312   Params.clear();
3313   if (Declaration->param_size() != Definition->param_size())
3314     return false;
3315   for (unsigned Idx = 0; Idx < Declaration->param_size(); ++Idx) {
3316     QualType DeclParamTy = Declaration->getParamDecl(Idx)->getType();
3317     QualType DefParamTy = Definition->getParamDecl(Idx)->getType();
3318 
3319     // The parameter types are identical
3320     if (Context.hasSameType(DefParamTy, DeclParamTy))
3321       continue;
3322 
3323     QualType DeclParamBaseTy = getCoreType(DeclParamTy);
3324     QualType DefParamBaseTy = getCoreType(DefParamTy);
3325     const IdentifierInfo *DeclTyName = DeclParamBaseTy.getBaseTypeIdentifier();
3326     const IdentifierInfo *DefTyName = DefParamBaseTy.getBaseTypeIdentifier();
3327 
3328     if (Context.hasSameUnqualifiedType(DeclParamBaseTy, DefParamBaseTy) ||
3329         (DeclTyName && DeclTyName == DefTyName))
3330       Params.push_back(Idx);
3331     else  // The two parameters aren't even close
3332       return false;
3333   }
3334 
3335   return true;
3336 }
3337 
3338 /// NeedsRebuildingInCurrentInstantiation - Checks whether the given
3339 /// declarator needs to be rebuilt in the current instantiation.
3340 /// Any bits of declarator which appear before the name are valid for
3341 /// consideration here.  That's specifically the type in the decl spec
3342 /// and the base type in any member-pointer chunks.
3343 static bool RebuildDeclaratorInCurrentInstantiation(Sema &S, Declarator &D,
3344                                                     DeclarationName Name) {
3345   // The types we specifically need to rebuild are:
3346   //   - typenames, typeofs, and decltypes
3347   //   - types which will become injected class names
3348   // Of course, we also need to rebuild any type referencing such a
3349   // type.  It's safest to just say "dependent", but we call out a
3350   // few cases here.
3351 
3352   DeclSpec &DS = D.getMutableDeclSpec();
3353   switch (DS.getTypeSpecType()) {
3354   case DeclSpec::TST_typename:
3355   case DeclSpec::TST_typeofType:
3356   case DeclSpec::TST_decltype:
3357   case DeclSpec::TST_underlyingType:
3358   case DeclSpec::TST_atomic: {
3359     // Grab the type from the parser.
3360     TypeSourceInfo *TSI = 0;
3361     QualType T = S.GetTypeFromParser(DS.getRepAsType(), &TSI);
3362     if (T.isNull() || !T->isDependentType()) break;
3363 
3364     // Make sure there's a type source info.  This isn't really much
3365     // of a waste; most dependent types should have type source info
3366     // attached already.
3367     if (!TSI)
3368       TSI = S.Context.getTrivialTypeSourceInfo(T, DS.getTypeSpecTypeLoc());
3369 
3370     // Rebuild the type in the current instantiation.
3371     TSI = S.RebuildTypeInCurrentInstantiation(TSI, D.getIdentifierLoc(), Name);
3372     if (!TSI) return true;
3373 
3374     // Store the new type back in the decl spec.
3375     ParsedType LocType = S.CreateParsedType(TSI->getType(), TSI);
3376     DS.UpdateTypeRep(LocType);
3377     break;
3378   }
3379 
3380   case DeclSpec::TST_typeofExpr: {
3381     Expr *E = DS.getRepAsExpr();
3382     ExprResult Result = S.RebuildExprInCurrentInstantiation(E);
3383     if (Result.isInvalid()) return true;
3384     DS.UpdateExprRep(Result.get());
3385     break;
3386   }
3387 
3388   default:
3389     // Nothing to do for these decl specs.
3390     break;
3391   }
3392 
3393   // It doesn't matter what order we do this in.
3394   for (unsigned I = 0, E = D.getNumTypeObjects(); I != E; ++I) {
3395     DeclaratorChunk &Chunk = D.getTypeObject(I);
3396 
3397     // The only type information in the declarator which can come
3398     // before the declaration name is the base type of a member
3399     // pointer.
3400     if (Chunk.Kind != DeclaratorChunk::MemberPointer)
3401       continue;
3402 
3403     // Rebuild the scope specifier in-place.
3404     CXXScopeSpec &SS = Chunk.Mem.Scope();
3405     if (S.RebuildNestedNameSpecifierInCurrentInstantiation(SS))
3406       return true;
3407   }
3408 
3409   return false;
3410 }
3411 
3412 Decl *Sema::ActOnDeclarator(Scope *S, Declarator &D) {
3413   D.setFunctionDefinitionKind(FDK_Declaration);
3414   Decl *Dcl = HandleDeclarator(S, D, MultiTemplateParamsArg(*this));
3415 
3416   if (OriginalLexicalContext && OriginalLexicalContext->isObjCContainer() &&
3417       Dcl && Dcl->getDeclContext()->isFileContext())
3418     Dcl->setTopLevelDeclInObjCContainer();
3419 
3420   return Dcl;
3421 }
3422 
3423 /// DiagnoseClassNameShadow - Implement C++ [class.mem]p13:
3424 ///   If T is the name of a class, then each of the following shall have a
3425 ///   name different from T:
3426 ///     - every static data member of class T;
3427 ///     - every member function of class T
3428 ///     - every member of class T that is itself a type;
3429 /// \returns true if the declaration name violates these rules.
3430 bool Sema::DiagnoseClassNameShadow(DeclContext *DC,
3431                                    DeclarationNameInfo NameInfo) {
3432   DeclarationName Name = NameInfo.getName();
3433 
3434   if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(DC))
3435     if (Record->getIdentifier() && Record->getDeclName() == Name) {
3436       Diag(NameInfo.getLoc(), diag::err_member_name_of_class) << Name;
3437       return true;
3438     }
3439 
3440   return false;
3441 }
3442 
3443 /// \brief Diagnose a declaration whose declarator-id has the given
3444 /// nested-name-specifier.
3445 ///
3446 /// \param SS The nested-name-specifier of the declarator-id.
3447 ///
3448 /// \param DC The declaration context to which the nested-name-specifier
3449 /// resolves.
3450 ///
3451 /// \param Name The name of the entity being declared.
3452 ///
3453 /// \param Loc The location of the name of the entity being declared.
3454 ///
3455 /// \returns true if we cannot safely recover from this error, false otherwise.
3456 bool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC,
3457                                         DeclarationName Name,
3458                                       SourceLocation Loc) {
3459   DeclContext *Cur = CurContext;
3460   while (isa<LinkageSpecDecl>(Cur))
3461     Cur = Cur->getParent();
3462 
3463   // C++ [dcl.meaning]p1:
3464   //   A declarator-id shall not be qualified except for the definition
3465   //   of a member function (9.3) or static data member (9.4) outside of
3466   //   its class, the definition or explicit instantiation of a function
3467   //   or variable member of a namespace outside of its namespace, or the
3468   //   definition of an explicit specialization outside of its namespace,
3469   //   or the declaration of a friend function that is a member of
3470   //   another class or namespace (11.3). [...]
3471 
3472   // The user provided a superfluous scope specifier that refers back to the
3473   // class or namespaces in which the entity is already declared.
3474   //
3475   // class X {
3476   //   void X::f();
3477   // };
3478   if (Cur->Equals(DC)) {
3479     Diag(Loc, diag::warn_member_extra_qualification)
3480       << Name << FixItHint::CreateRemoval(SS.getRange());
3481     SS.clear();
3482     return false;
3483   }
3484 
3485   // Check whether the qualifying scope encloses the scope of the original
3486   // declaration.
3487   if (!Cur->Encloses(DC)) {
3488     if (Cur->isRecord())
3489       Diag(Loc, diag::err_member_qualification)
3490         << Name << SS.getRange();
3491     else if (isa<TranslationUnitDecl>(DC))
3492       Diag(Loc, diag::err_invalid_declarator_global_scope)
3493         << Name << SS.getRange();
3494     else if (isa<FunctionDecl>(Cur))
3495       Diag(Loc, diag::err_invalid_declarator_in_function)
3496         << Name << SS.getRange();
3497     else
3498       Diag(Loc, diag::err_invalid_declarator_scope)
3499       << Name << cast<NamedDecl>(Cur) << cast<NamedDecl>(DC) << SS.getRange();
3500 
3501     return true;
3502   }
3503 
3504   if (Cur->isRecord()) {
3505     // Cannot qualify members within a class.
3506     Diag(Loc, diag::err_member_qualification)
3507       << Name << SS.getRange();
3508     SS.clear();
3509 
3510     // C++ constructors and destructors with incorrect scopes can break
3511     // our AST invariants by having the wrong underlying types. If
3512     // that's the case, then drop this declaration entirely.
3513     if ((Name.getNameKind() == DeclarationName::CXXConstructorName ||
3514          Name.getNameKind() == DeclarationName::CXXDestructorName) &&
3515         !Context.hasSameType(Name.getCXXNameType(),
3516                              Context.getTypeDeclType(cast<CXXRecordDecl>(Cur))))
3517       return true;
3518 
3519     return false;
3520   }
3521 
3522   // C++11 [dcl.meaning]p1:
3523   //   [...] "The nested-name-specifier of the qualified declarator-id shall
3524   //   not begin with a decltype-specifer"
3525   NestedNameSpecifierLoc SpecLoc(SS.getScopeRep(), SS.location_data());
3526   while (SpecLoc.getPrefix())
3527     SpecLoc = SpecLoc.getPrefix();
3528   if (dyn_cast_or_null<DecltypeType>(
3529         SpecLoc.getNestedNameSpecifier()->getAsType()))
3530     Diag(Loc, diag::err_decltype_in_declarator)
3531       << SpecLoc.getTypeLoc().getSourceRange();
3532 
3533   return false;
3534 }
3535 
3536 Decl *Sema::HandleDeclarator(Scope *S, Declarator &D,
3537                              MultiTemplateParamsArg TemplateParamLists) {
3538   // TODO: consider using NameInfo for diagnostic.
3539   DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
3540   DeclarationName Name = NameInfo.getName();
3541 
3542   // All of these full declarators require an identifier.  If it doesn't have
3543   // one, the ParsedFreeStandingDeclSpec action should be used.
3544   if (!Name) {
3545     if (!D.isInvalidType())  // Reject this if we think it is valid.
3546       Diag(D.getDeclSpec().getLocStart(),
3547            diag::err_declarator_need_ident)
3548         << D.getDeclSpec().getSourceRange() << D.getSourceRange();
3549     return 0;
3550   } else if (DiagnoseUnexpandedParameterPack(NameInfo, UPPC_DeclarationType))
3551     return 0;
3552 
3553   // The scope passed in may not be a decl scope.  Zip up the scope tree until
3554   // we find one that is.
3555   while ((S->getFlags() & Scope::DeclScope) == 0 ||
3556          (S->getFlags() & Scope::TemplateParamScope) != 0)
3557     S = S->getParent();
3558 
3559   DeclContext *DC = CurContext;
3560   if (D.getCXXScopeSpec().isInvalid())
3561     D.setInvalidType();
3562   else if (D.getCXXScopeSpec().isSet()) {
3563     if (DiagnoseUnexpandedParameterPack(D.getCXXScopeSpec(),
3564                                         UPPC_DeclarationQualifier))
3565       return 0;
3566 
3567     bool EnteringContext = !D.getDeclSpec().isFriendSpecified();
3568     DC = computeDeclContext(D.getCXXScopeSpec(), EnteringContext);
3569     if (!DC) {
3570       // If we could not compute the declaration context, it's because the
3571       // declaration context is dependent but does not refer to a class,
3572       // class template, or class template partial specialization. Complain
3573       // and return early, to avoid the coming semantic disaster.
3574       Diag(D.getIdentifierLoc(),
3575            diag::err_template_qualified_declarator_no_match)
3576         << (NestedNameSpecifier*)D.getCXXScopeSpec().getScopeRep()
3577         << D.getCXXScopeSpec().getRange();
3578       return 0;
3579     }
3580     bool IsDependentContext = DC->isDependentContext();
3581 
3582     if (!IsDependentContext &&
3583         RequireCompleteDeclContext(D.getCXXScopeSpec(), DC))
3584       return 0;
3585 
3586     if (isa<CXXRecordDecl>(DC) && !cast<CXXRecordDecl>(DC)->hasDefinition()) {
3587       Diag(D.getIdentifierLoc(),
3588            diag::err_member_def_undefined_record)
3589         << Name << DC << D.getCXXScopeSpec().getRange();
3590       D.setInvalidType();
3591     } else if (!D.getDeclSpec().isFriendSpecified()) {
3592       if (diagnoseQualifiedDeclaration(D.getCXXScopeSpec(), DC,
3593                                       Name, D.getIdentifierLoc())) {
3594         if (DC->isRecord())
3595           return 0;
3596 
3597         D.setInvalidType();
3598       }
3599     }
3600 
3601     // Check whether we need to rebuild the type of the given
3602     // declaration in the current instantiation.
3603     if (EnteringContext && IsDependentContext &&
3604         TemplateParamLists.size() != 0) {
3605       ContextRAII SavedContext(*this, DC);
3606       if (RebuildDeclaratorInCurrentInstantiation(*this, D, Name))
3607         D.setInvalidType();
3608     }
3609   }
3610 
3611   if (DiagnoseClassNameShadow(DC, NameInfo))
3612     // If this is a typedef, we'll end up spewing multiple diagnostics.
3613     // Just return early; it's safer.
3614     if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef)
3615       return 0;
3616 
3617   NamedDecl *New;
3618 
3619   TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
3620   QualType R = TInfo->getType();
3621 
3622   if (DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo,
3623                                       UPPC_DeclarationType))
3624     D.setInvalidType();
3625 
3626   LookupResult Previous(*this, NameInfo, LookupOrdinaryName,
3627                         ForRedeclaration);
3628 
3629   // See if this is a redefinition of a variable in the same scope.
3630   if (!D.getCXXScopeSpec().isSet()) {
3631     bool IsLinkageLookup = false;
3632 
3633     // If the declaration we're planning to build will be a function
3634     // or object with linkage, then look for another declaration with
3635     // linkage (C99 6.2.2p4-5 and C++ [basic.link]p6).
3636     if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef)
3637       /* Do nothing*/;
3638     else if (R->isFunctionType()) {
3639       if (CurContext->isFunctionOrMethod() ||
3640           D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_static)
3641         IsLinkageLookup = true;
3642     } else if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_extern)
3643       IsLinkageLookup = true;
3644     else if (CurContext->getRedeclContext()->isTranslationUnit() &&
3645              D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_static)
3646       IsLinkageLookup = true;
3647 
3648     if (IsLinkageLookup)
3649       Previous.clear(LookupRedeclarationWithLinkage);
3650 
3651     LookupName(Previous, S, /* CreateBuiltins = */ IsLinkageLookup);
3652   } else { // Something like "int foo::x;"
3653     LookupQualifiedName(Previous, DC);
3654 
3655     // C++ [dcl.meaning]p1:
3656     //   When the declarator-id is qualified, the declaration shall refer to a
3657     //  previously declared member of the class or namespace to which the
3658     //  qualifier refers (or, in the case of a namespace, of an element of the
3659     //  inline namespace set of that namespace (7.3.1)) or to a specialization
3660     //  thereof; [...]
3661     //
3662     // Note that we already checked the context above, and that we do not have
3663     // enough information to make sure that Previous contains the declaration
3664     // we want to match. For example, given:
3665     //
3666     //   class X {
3667     //     void f();
3668     //     void f(float);
3669     //   };
3670     //
3671     //   void X::f(int) { } // ill-formed
3672     //
3673     // In this case, Previous will point to the overload set
3674     // containing the two f's declared in X, but neither of them
3675     // matches.
3676 
3677     // C++ [dcl.meaning]p1:
3678     //   [...] the member shall not merely have been introduced by a
3679     //   using-declaration in the scope of the class or namespace nominated by
3680     //   the nested-name-specifier of the declarator-id.
3681     RemoveUsingDecls(Previous);
3682   }
3683 
3684   if (Previous.isSingleResult() &&
3685       Previous.getFoundDecl()->isTemplateParameter()) {
3686     // Maybe we will complain about the shadowed template parameter.
3687     if (!D.isInvalidType())
3688       DiagnoseTemplateParameterShadow(D.getIdentifierLoc(),
3689                                       Previous.getFoundDecl());
3690 
3691     // Just pretend that we didn't see the previous declaration.
3692     Previous.clear();
3693   }
3694 
3695   // In C++, the previous declaration we find might be a tag type
3696   // (class or enum). In this case, the new declaration will hide the
3697   // tag type. Note that this does does not apply if we're declaring a
3698   // typedef (C++ [dcl.typedef]p4).
3699   if (Previous.isSingleTagDecl() &&
3700       D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_typedef)
3701     Previous.clear();
3702 
3703   bool AddToScope = true;
3704   if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef) {
3705     if (TemplateParamLists.size()) {
3706       Diag(D.getIdentifierLoc(), diag::err_template_typedef);
3707       return 0;
3708     }
3709 
3710     New = ActOnTypedefDeclarator(S, D, DC, TInfo, Previous);
3711   } else if (R->isFunctionType()) {
3712     New = ActOnFunctionDeclarator(S, D, DC, TInfo, Previous,
3713                                   move(TemplateParamLists),
3714                                   AddToScope);
3715   } else {
3716     New = ActOnVariableDeclarator(S, D, DC, TInfo, Previous,
3717                                   move(TemplateParamLists));
3718   }
3719 
3720   if (New == 0)
3721     return 0;
3722 
3723   // If this has an identifier and is not an invalid redeclaration or
3724   // function template specialization, add it to the scope stack.
3725   if (New->getDeclName() && AddToScope &&
3726        !(D.isRedeclaration() && New->isInvalidDecl()))
3727     PushOnScopeChains(New, S);
3728 
3729   return New;
3730 }
3731 
3732 /// TryToFixInvalidVariablyModifiedType - Helper method to turn variable array
3733 /// types into constant array types in certain situations which would otherwise
3734 /// be errors (for GCC compatibility).
3735 static QualType TryToFixInvalidVariablyModifiedType(QualType T,
3736                                                     ASTContext &Context,
3737                                                     bool &SizeIsNegative,
3738                                                     llvm::APSInt &Oversized) {
3739   // This method tries to turn a variable array into a constant
3740   // array even when the size isn't an ICE.  This is necessary
3741   // for compatibility with code that depends on gcc's buggy
3742   // constant expression folding, like struct {char x[(int)(char*)2];}
3743   SizeIsNegative = false;
3744   Oversized = 0;
3745 
3746   if (T->isDependentType())
3747     return QualType();
3748 
3749   QualifierCollector Qs;
3750   const Type *Ty = Qs.strip(T);
3751 
3752   if (const PointerType* PTy = dyn_cast<PointerType>(Ty)) {
3753     QualType Pointee = PTy->getPointeeType();
3754     QualType FixedType =
3755         TryToFixInvalidVariablyModifiedType(Pointee, Context, SizeIsNegative,
3756                                             Oversized);
3757     if (FixedType.isNull()) return FixedType;
3758     FixedType = Context.getPointerType(FixedType);
3759     return Qs.apply(Context, FixedType);
3760   }
3761   if (const ParenType* PTy = dyn_cast<ParenType>(Ty)) {
3762     QualType Inner = PTy->getInnerType();
3763     QualType FixedType =
3764         TryToFixInvalidVariablyModifiedType(Inner, Context, SizeIsNegative,
3765                                             Oversized);
3766     if (FixedType.isNull()) return FixedType;
3767     FixedType = Context.getParenType(FixedType);
3768     return Qs.apply(Context, FixedType);
3769   }
3770 
3771   const VariableArrayType* VLATy = dyn_cast<VariableArrayType>(T);
3772   if (!VLATy)
3773     return QualType();
3774   // FIXME: We should probably handle this case
3775   if (VLATy->getElementType()->isVariablyModifiedType())
3776     return QualType();
3777 
3778   llvm::APSInt Res;
3779   if (!VLATy->getSizeExpr() ||
3780       !VLATy->getSizeExpr()->EvaluateAsInt(Res, Context))
3781     return QualType();
3782 
3783   // Check whether the array size is negative.
3784   if (Res.isSigned() && Res.isNegative()) {
3785     SizeIsNegative = true;
3786     return QualType();
3787   }
3788 
3789   // Check whether the array is too large to be addressed.
3790   unsigned ActiveSizeBits
3791     = ConstantArrayType::getNumAddressingBits(Context, VLATy->getElementType(),
3792                                               Res);
3793   if (ActiveSizeBits > ConstantArrayType::getMaxSizeBits(Context)) {
3794     Oversized = Res;
3795     return QualType();
3796   }
3797 
3798   return Context.getConstantArrayType(VLATy->getElementType(),
3799                                       Res, ArrayType::Normal, 0);
3800 }
3801 
3802 /// \brief Register the given locally-scoped external C declaration so
3803 /// that it can be found later for redeclarations
3804 void
3805 Sema::RegisterLocallyScopedExternCDecl(NamedDecl *ND,
3806                                        const LookupResult &Previous,
3807                                        Scope *S) {
3808   assert(ND->getLexicalDeclContext()->isFunctionOrMethod() &&
3809          "Decl is not a locally-scoped decl!");
3810   // Note that we have a locally-scoped external with this name.
3811   LocallyScopedExternalDecls[ND->getDeclName()] = ND;
3812 
3813   if (!Previous.isSingleResult())
3814     return;
3815 
3816   NamedDecl *PrevDecl = Previous.getFoundDecl();
3817 
3818   // If there was a previous declaration of this variable, it may be
3819   // in our identifier chain. Update the identifier chain with the new
3820   // declaration.
3821   if (S && IdResolver.ReplaceDecl(PrevDecl, ND)) {
3822     // The previous declaration was found on the identifer resolver
3823     // chain, so remove it from its scope.
3824 
3825     if (S->isDeclScope(PrevDecl)) {
3826       // Special case for redeclarations in the SAME scope.
3827       // Because this declaration is going to be added to the identifier chain
3828       // later, we should temporarily take it OFF the chain.
3829       IdResolver.RemoveDecl(ND);
3830 
3831     } else {
3832       // Find the scope for the original declaration.
3833       while (S && !S->isDeclScope(PrevDecl))
3834         S = S->getParent();
3835     }
3836 
3837     if (S)
3838       S->RemoveDecl(PrevDecl);
3839   }
3840 }
3841 
3842 llvm::DenseMap<DeclarationName, NamedDecl *>::iterator
3843 Sema::findLocallyScopedExternalDecl(DeclarationName Name) {
3844   if (ExternalSource) {
3845     // Load locally-scoped external decls from the external source.
3846     SmallVector<NamedDecl *, 4> Decls;
3847     ExternalSource->ReadLocallyScopedExternalDecls(Decls);
3848     for (unsigned I = 0, N = Decls.size(); I != N; ++I) {
3849       llvm::DenseMap<DeclarationName, NamedDecl *>::iterator Pos
3850         = LocallyScopedExternalDecls.find(Decls[I]->getDeclName());
3851       if (Pos == LocallyScopedExternalDecls.end())
3852         LocallyScopedExternalDecls[Decls[I]->getDeclName()] = Decls[I];
3853     }
3854   }
3855 
3856   return LocallyScopedExternalDecls.find(Name);
3857 }
3858 
3859 /// \brief Diagnose function specifiers on a declaration of an identifier that
3860 /// does not identify a function.
3861 void Sema::DiagnoseFunctionSpecifiers(Declarator& D) {
3862   // FIXME: We should probably indicate the identifier in question to avoid
3863   // confusion for constructs like "inline int a(), b;"
3864   if (D.getDeclSpec().isInlineSpecified())
3865     Diag(D.getDeclSpec().getInlineSpecLoc(),
3866          diag::err_inline_non_function);
3867 
3868   if (D.getDeclSpec().isVirtualSpecified())
3869     Diag(D.getDeclSpec().getVirtualSpecLoc(),
3870          diag::err_virtual_non_function);
3871 
3872   if (D.getDeclSpec().isExplicitSpecified())
3873     Diag(D.getDeclSpec().getExplicitSpecLoc(),
3874          diag::err_explicit_non_function);
3875 }
3876 
3877 NamedDecl*
3878 Sema::ActOnTypedefDeclarator(Scope* S, Declarator& D, DeclContext* DC,
3879                              TypeSourceInfo *TInfo, LookupResult &Previous) {
3880   // Typedef declarators cannot be qualified (C++ [dcl.meaning]p1).
3881   if (D.getCXXScopeSpec().isSet()) {
3882     Diag(D.getIdentifierLoc(), diag::err_qualified_typedef_declarator)
3883       << D.getCXXScopeSpec().getRange();
3884     D.setInvalidType();
3885     // Pretend we didn't see the scope specifier.
3886     DC = CurContext;
3887     Previous.clear();
3888   }
3889 
3890   if (getLangOpts().CPlusPlus) {
3891     // Check that there are no default arguments (C++ only).
3892     CheckExtraCXXDefaultArguments(D);
3893   }
3894 
3895   DiagnoseFunctionSpecifiers(D);
3896 
3897   if (D.getDeclSpec().isThreadSpecified())
3898     Diag(D.getDeclSpec().getThreadSpecLoc(), diag::err_invalid_thread);
3899   if (D.getDeclSpec().isConstexprSpecified())
3900     Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_invalid_constexpr)
3901       << 1;
3902 
3903   if (D.getName().Kind != UnqualifiedId::IK_Identifier) {
3904     Diag(D.getName().StartLocation, diag::err_typedef_not_identifier)
3905       << D.getName().getSourceRange();
3906     return 0;
3907   }
3908 
3909   TypedefDecl *NewTD = ParseTypedefDecl(S, D, TInfo->getType(), TInfo);
3910   if (!NewTD) return 0;
3911 
3912   // Handle attributes prior to checking for duplicates in MergeVarDecl
3913   ProcessDeclAttributes(S, NewTD, D);
3914 
3915   CheckTypedefForVariablyModifiedType(S, NewTD);
3916 
3917   bool Redeclaration = D.isRedeclaration();
3918   NamedDecl *ND = ActOnTypedefNameDecl(S, DC, NewTD, Previous, Redeclaration);
3919   D.setRedeclaration(Redeclaration);
3920   return ND;
3921 }
3922 
3923 void
3924 Sema::CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *NewTD) {
3925   // C99 6.7.7p2: If a typedef name specifies a variably modified type
3926   // then it shall have block scope.
3927   // Note that variably modified types must be fixed before merging the decl so
3928   // that redeclarations will match.
3929   QualType T = NewTD->getUnderlyingType();
3930   if (T->isVariablyModifiedType()) {
3931     getCurFunction()->setHasBranchProtectedScope();
3932 
3933     if (S->getFnParent() == 0) {
3934       bool SizeIsNegative;
3935       llvm::APSInt Oversized;
3936       QualType FixedTy =
3937           TryToFixInvalidVariablyModifiedType(T, Context, SizeIsNegative,
3938                                               Oversized);
3939       if (!FixedTy.isNull()) {
3940         Diag(NewTD->getLocation(), diag::warn_illegal_constant_array_size);
3941         NewTD->setTypeSourceInfo(Context.getTrivialTypeSourceInfo(FixedTy));
3942       } else {
3943         if (SizeIsNegative)
3944           Diag(NewTD->getLocation(), diag::err_typecheck_negative_array_size);
3945         else if (T->isVariableArrayType())
3946           Diag(NewTD->getLocation(), diag::err_vla_decl_in_file_scope);
3947         else if (Oversized.getBoolValue())
3948           Diag(NewTD->getLocation(), diag::err_array_too_large)
3949             << Oversized.toString(10);
3950         else
3951           Diag(NewTD->getLocation(), diag::err_vm_decl_in_file_scope);
3952         NewTD->setInvalidDecl();
3953       }
3954     }
3955   }
3956 }
3957 
3958 
3959 /// ActOnTypedefNameDecl - Perform semantic checking for a declaration which
3960 /// declares a typedef-name, either using the 'typedef' type specifier or via
3961 /// a C++0x [dcl.typedef]p2 alias-declaration: 'using T = A;'.
3962 NamedDecl*
3963 Sema::ActOnTypedefNameDecl(Scope *S, DeclContext *DC, TypedefNameDecl *NewTD,
3964                            LookupResult &Previous, bool &Redeclaration) {
3965   // Merge the decl with the existing one if appropriate. If the decl is
3966   // in an outer scope, it isn't the same thing.
3967   FilterLookupForScope(Previous, DC, S, /*ConsiderLinkage*/ false,
3968                        /*ExplicitInstantiationOrSpecialization=*/false);
3969   if (!Previous.empty()) {
3970     Redeclaration = true;
3971     MergeTypedefNameDecl(NewTD, Previous);
3972   }
3973 
3974   // If this is the C FILE type, notify the AST context.
3975   if (IdentifierInfo *II = NewTD->getIdentifier())
3976     if (!NewTD->isInvalidDecl() &&
3977         NewTD->getDeclContext()->getRedeclContext()->isTranslationUnit()) {
3978       if (II->isStr("FILE"))
3979         Context.setFILEDecl(NewTD);
3980       else if (II->isStr("jmp_buf"))
3981         Context.setjmp_bufDecl(NewTD);
3982       else if (II->isStr("sigjmp_buf"))
3983         Context.setsigjmp_bufDecl(NewTD);
3984       else if (II->isStr("ucontext_t"))
3985         Context.setucontext_tDecl(NewTD);
3986     }
3987 
3988   return NewTD;
3989 }
3990 
3991 /// \brief Determines whether the given declaration is an out-of-scope
3992 /// previous declaration.
3993 ///
3994 /// This routine should be invoked when name lookup has found a
3995 /// previous declaration (PrevDecl) that is not in the scope where a
3996 /// new declaration by the same name is being introduced. If the new
3997 /// declaration occurs in a local scope, previous declarations with
3998 /// linkage may still be considered previous declarations (C99
3999 /// 6.2.2p4-5, C++ [basic.link]p6).
4000 ///
4001 /// \param PrevDecl the previous declaration found by name
4002 /// lookup
4003 ///
4004 /// \param DC the context in which the new declaration is being
4005 /// declared.
4006 ///
4007 /// \returns true if PrevDecl is an out-of-scope previous declaration
4008 /// for a new delcaration with the same name.
4009 static bool
4010 isOutOfScopePreviousDeclaration(NamedDecl *PrevDecl, DeclContext *DC,
4011                                 ASTContext &Context) {
4012   if (!PrevDecl)
4013     return false;
4014 
4015   if (!PrevDecl->hasLinkage())
4016     return false;
4017 
4018   if (Context.getLangOpts().CPlusPlus) {
4019     // C++ [basic.link]p6:
4020     //   If there is a visible declaration of an entity with linkage
4021     //   having the same name and type, ignoring entities declared
4022     //   outside the innermost enclosing namespace scope, the block
4023     //   scope declaration declares that same entity and receives the
4024     //   linkage of the previous declaration.
4025     DeclContext *OuterContext = DC->getRedeclContext();
4026     if (!OuterContext->isFunctionOrMethod())
4027       // This rule only applies to block-scope declarations.
4028       return false;
4029 
4030     DeclContext *PrevOuterContext = PrevDecl->getDeclContext();
4031     if (PrevOuterContext->isRecord())
4032       // We found a member function: ignore it.
4033       return false;
4034 
4035     // Find the innermost enclosing namespace for the new and
4036     // previous declarations.
4037     OuterContext = OuterContext->getEnclosingNamespaceContext();
4038     PrevOuterContext = PrevOuterContext->getEnclosingNamespaceContext();
4039 
4040     // The previous declaration is in a different namespace, so it
4041     // isn't the same function.
4042     if (!OuterContext->Equals(PrevOuterContext))
4043       return false;
4044   }
4045 
4046   return true;
4047 }
4048 
4049 static void SetNestedNameSpecifier(DeclaratorDecl *DD, Declarator &D) {
4050   CXXScopeSpec &SS = D.getCXXScopeSpec();
4051   if (!SS.isSet()) return;
4052   DD->setQualifierInfo(SS.getWithLocInContext(DD->getASTContext()));
4053 }
4054 
4055 bool Sema::inferObjCARCLifetime(ValueDecl *decl) {
4056   QualType type = decl->getType();
4057   Qualifiers::ObjCLifetime lifetime = type.getObjCLifetime();
4058   if (lifetime == Qualifiers::OCL_Autoreleasing) {
4059     // Various kinds of declaration aren't allowed to be __autoreleasing.
4060     unsigned kind = -1U;
4061     if (VarDecl *var = dyn_cast<VarDecl>(decl)) {
4062       if (var->hasAttr<BlocksAttr>())
4063         kind = 0; // __block
4064       else if (!var->hasLocalStorage())
4065         kind = 1; // global
4066     } else if (isa<ObjCIvarDecl>(decl)) {
4067       kind = 3; // ivar
4068     } else if (isa<FieldDecl>(decl)) {
4069       kind = 2; // field
4070     }
4071 
4072     if (kind != -1U) {
4073       Diag(decl->getLocation(), diag::err_arc_autoreleasing_var)
4074         << kind;
4075     }
4076   } else if (lifetime == Qualifiers::OCL_None) {
4077     // Try to infer lifetime.
4078     if (!type->isObjCLifetimeType())
4079       return false;
4080 
4081     lifetime = type->getObjCARCImplicitLifetime();
4082     type = Context.getLifetimeQualifiedType(type, lifetime);
4083     decl->setType(type);
4084   }
4085 
4086   if (VarDecl *var = dyn_cast<VarDecl>(decl)) {
4087     // Thread-local variables cannot have lifetime.
4088     if (lifetime && lifetime != Qualifiers::OCL_ExplicitNone &&
4089         var->isThreadSpecified()) {
4090       Diag(var->getLocation(), diag::err_arc_thread_ownership)
4091         << var->getType();
4092       return true;
4093     }
4094   }
4095 
4096   return false;
4097 }
4098 
4099 NamedDecl*
4100 Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC,
4101                               TypeSourceInfo *TInfo, LookupResult &Previous,
4102                               MultiTemplateParamsArg TemplateParamLists) {
4103   QualType R = TInfo->getType();
4104   DeclarationName Name = GetNameForDeclarator(D).getName();
4105 
4106   // Check that there are no default arguments (C++ only).
4107   if (getLangOpts().CPlusPlus)
4108     CheckExtraCXXDefaultArguments(D);
4109 
4110   DeclSpec::SCS SCSpec = D.getDeclSpec().getStorageClassSpec();
4111   assert(SCSpec != DeclSpec::SCS_typedef &&
4112          "Parser allowed 'typedef' as storage class VarDecl.");
4113   VarDecl::StorageClass SC = StorageClassSpecToVarDeclStorageClass(SCSpec);
4114   if (SCSpec == DeclSpec::SCS_mutable) {
4115     // mutable can only appear on non-static class members, so it's always
4116     // an error here
4117     Diag(D.getIdentifierLoc(), diag::err_mutable_nonmember);
4118     D.setInvalidType();
4119     SC = SC_None;
4120   }
4121   SCSpec = D.getDeclSpec().getStorageClassSpecAsWritten();
4122   VarDecl::StorageClass SCAsWritten
4123     = StorageClassSpecToVarDeclStorageClass(SCSpec);
4124 
4125   IdentifierInfo *II = Name.getAsIdentifierInfo();
4126   if (!II) {
4127     Diag(D.getIdentifierLoc(), diag::err_bad_variable_name)
4128       << Name;
4129     return 0;
4130   }
4131 
4132   DiagnoseFunctionSpecifiers(D);
4133 
4134   if (!DC->isRecord() && S->getFnParent() == 0) {
4135     // C99 6.9p2: The storage-class specifiers auto and register shall not
4136     // appear in the declaration specifiers in an external declaration.
4137     if (SC == SC_Auto || SC == SC_Register) {
4138 
4139       // If this is a register variable with an asm label specified, then this
4140       // is a GNU extension.
4141       if (SC == SC_Register && D.getAsmLabel())
4142         Diag(D.getIdentifierLoc(), diag::err_unsupported_global_register);
4143       else
4144         Diag(D.getIdentifierLoc(), diag::err_typecheck_sclass_fscope);
4145       D.setInvalidType();
4146     }
4147   }
4148 
4149   if (getLangOpts().OpenCL) {
4150     // Set up the special work-group-local storage class for variables in the
4151     // OpenCL __local address space.
4152     if (R.getAddressSpace() == LangAS::opencl_local)
4153       SC = SC_OpenCLWorkGroupLocal;
4154   }
4155 
4156   bool isExplicitSpecialization = false;
4157   VarDecl *NewVD;
4158   if (!getLangOpts().CPlusPlus) {
4159     NewVD = VarDecl::Create(Context, DC, D.getLocStart(),
4160                             D.getIdentifierLoc(), II,
4161                             R, TInfo, SC, SCAsWritten);
4162 
4163     if (D.isInvalidType())
4164       NewVD->setInvalidDecl();
4165   } else {
4166     if (DC->isRecord() && !CurContext->isRecord()) {
4167       // This is an out-of-line definition of a static data member.
4168       if (SC == SC_Static) {
4169         Diag(D.getDeclSpec().getStorageClassSpecLoc(),
4170              diag::err_static_out_of_line)
4171           << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());
4172       } else if (SC == SC_None)
4173         SC = SC_Static;
4174     }
4175     if (SC == SC_Static && CurContext->isRecord()) {
4176       if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {
4177         if (RD->isLocalClass())
4178           Diag(D.getIdentifierLoc(),
4179                diag::err_static_data_member_not_allowed_in_local_class)
4180             << Name << RD->getDeclName();
4181 
4182         // C++98 [class.union]p1: If a union contains a static data member,
4183         // the program is ill-formed. C++11 drops this restriction.
4184         if (RD->isUnion())
4185           Diag(D.getIdentifierLoc(),
4186                getLangOpts().CPlusPlus0x
4187                  ? diag::warn_cxx98_compat_static_data_member_in_union
4188                  : diag::ext_static_data_member_in_union) << Name;
4189         // We conservatively disallow static data members in anonymous structs.
4190         else if (!RD->getDeclName())
4191           Diag(D.getIdentifierLoc(),
4192                diag::err_static_data_member_not_allowed_in_anon_struct)
4193             << Name << RD->isUnion();
4194       }
4195     }
4196 
4197     // Match up the template parameter lists with the scope specifier, then
4198     // determine whether we have a template or a template specialization.
4199     isExplicitSpecialization = false;
4200     bool Invalid = false;
4201     if (TemplateParameterList *TemplateParams
4202         = MatchTemplateParametersToScopeSpecifier(
4203                                   D.getDeclSpec().getLocStart(),
4204                                                   D.getIdentifierLoc(),
4205                                                   D.getCXXScopeSpec(),
4206                                                   TemplateParamLists.get(),
4207                                                   TemplateParamLists.size(),
4208                                                   /*never a friend*/ false,
4209                                                   isExplicitSpecialization,
4210                                                   Invalid)) {
4211       if (TemplateParams->size() > 0) {
4212         // There is no such thing as a variable template.
4213         Diag(D.getIdentifierLoc(), diag::err_template_variable)
4214           << II
4215           << SourceRange(TemplateParams->getTemplateLoc(),
4216                          TemplateParams->getRAngleLoc());
4217         return 0;
4218       } else {
4219         // There is an extraneous 'template<>' for this variable. Complain
4220         // about it, but allow the declaration of the variable.
4221         Diag(TemplateParams->getTemplateLoc(),
4222              diag::err_template_variable_noparams)
4223           << II
4224           << SourceRange(TemplateParams->getTemplateLoc(),
4225                          TemplateParams->getRAngleLoc());
4226       }
4227     }
4228 
4229     NewVD = VarDecl::Create(Context, DC, D.getLocStart(),
4230                             D.getIdentifierLoc(), II,
4231                             R, TInfo, SC, SCAsWritten);
4232 
4233     // If this decl has an auto type in need of deduction, make a note of the
4234     // Decl so we can diagnose uses of it in its own initializer.
4235     if (D.getDeclSpec().getTypeSpecType() == DeclSpec::TST_auto &&
4236         R->getContainedAutoType())
4237       ParsingInitForAutoVars.insert(NewVD);
4238 
4239     if (D.isInvalidType() || Invalid)
4240       NewVD->setInvalidDecl();
4241 
4242     SetNestedNameSpecifier(NewVD, D);
4243 
4244     if (TemplateParamLists.size() > 0 && D.getCXXScopeSpec().isSet()) {
4245       NewVD->setTemplateParameterListsInfo(Context,
4246                                            TemplateParamLists.size(),
4247                                            TemplateParamLists.release());
4248     }
4249 
4250     if (D.getDeclSpec().isConstexprSpecified())
4251       NewVD->setConstexpr(true);
4252   }
4253 
4254   // Set the lexical context. If the declarator has a C++ scope specifier, the
4255   // lexical context will be different from the semantic context.
4256   NewVD->setLexicalDeclContext(CurContext);
4257 
4258   if (D.getDeclSpec().isThreadSpecified()) {
4259     if (NewVD->hasLocalStorage())
4260       Diag(D.getDeclSpec().getThreadSpecLoc(), diag::err_thread_non_global);
4261     else if (!Context.getTargetInfo().isTLSSupported())
4262       Diag(D.getDeclSpec().getThreadSpecLoc(), diag::err_thread_unsupported);
4263     else
4264       NewVD->setThreadSpecified(true);
4265   }
4266 
4267   if (D.getDeclSpec().isModulePrivateSpecified()) {
4268     if (isExplicitSpecialization)
4269       Diag(NewVD->getLocation(), diag::err_module_private_specialization)
4270         << 2
4271         << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());
4272     else if (NewVD->hasLocalStorage())
4273       Diag(NewVD->getLocation(), diag::err_module_private_local)
4274         << 0 << NewVD->getDeclName()
4275         << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc())
4276         << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());
4277     else
4278       NewVD->setModulePrivate();
4279   }
4280 
4281   // Handle attributes prior to checking for duplicates in MergeVarDecl
4282   ProcessDeclAttributes(S, NewVD, D);
4283 
4284   // In auto-retain/release, infer strong retension for variables of
4285   // retainable type.
4286   if (getLangOpts().ObjCAutoRefCount && inferObjCARCLifetime(NewVD))
4287     NewVD->setInvalidDecl();
4288 
4289   // Handle GNU asm-label extension (encoded as an attribute).
4290   if (Expr *E = (Expr*)D.getAsmLabel()) {
4291     // The parser guarantees this is a string.
4292     StringLiteral *SE = cast<StringLiteral>(E);
4293     StringRef Label = SE->getString();
4294     if (S->getFnParent() != 0) {
4295       switch (SC) {
4296       case SC_None:
4297       case SC_Auto:
4298         Diag(E->getExprLoc(), diag::warn_asm_label_on_auto_decl) << Label;
4299         break;
4300       case SC_Register:
4301         if (!Context.getTargetInfo().isValidGCCRegisterName(Label))
4302           Diag(E->getExprLoc(), diag::err_asm_unknown_register_name) << Label;
4303         break;
4304       case SC_Static:
4305       case SC_Extern:
4306       case SC_PrivateExtern:
4307       case SC_OpenCLWorkGroupLocal:
4308         break;
4309       }
4310     }
4311 
4312     NewVD->addAttr(::new (Context) AsmLabelAttr(SE->getStrTokenLoc(0),
4313                                                 Context, Label));
4314   } else if (!ExtnameUndeclaredIdentifiers.empty()) {
4315     llvm::DenseMap<IdentifierInfo*,AsmLabelAttr*>::iterator I =
4316       ExtnameUndeclaredIdentifiers.find(NewVD->getIdentifier());
4317     if (I != ExtnameUndeclaredIdentifiers.end()) {
4318       NewVD->addAttr(I->second);
4319       ExtnameUndeclaredIdentifiers.erase(I);
4320     }
4321   }
4322 
4323   // Diagnose shadowed variables before filtering for scope.
4324   if (!D.getCXXScopeSpec().isSet())
4325     CheckShadow(S, NewVD, Previous);
4326 
4327   // Don't consider existing declarations that are in a different
4328   // scope and are out-of-semantic-context declarations (if the new
4329   // declaration has linkage).
4330   FilterLookupForScope(Previous, DC, S, NewVD->hasLinkage(),
4331                        isExplicitSpecialization);
4332 
4333   if (!getLangOpts().CPlusPlus) {
4334     D.setRedeclaration(CheckVariableDeclaration(NewVD, Previous));
4335   } else {
4336     // Merge the decl with the existing one if appropriate.
4337     if (!Previous.empty()) {
4338       if (Previous.isSingleResult() &&
4339           isa<FieldDecl>(Previous.getFoundDecl()) &&
4340           D.getCXXScopeSpec().isSet()) {
4341         // The user tried to define a non-static data member
4342         // out-of-line (C++ [dcl.meaning]p1).
4343         Diag(NewVD->getLocation(), diag::err_nonstatic_member_out_of_line)
4344           << D.getCXXScopeSpec().getRange();
4345         Previous.clear();
4346         NewVD->setInvalidDecl();
4347       }
4348     } else if (D.getCXXScopeSpec().isSet()) {
4349       // No previous declaration in the qualifying scope.
4350       Diag(D.getIdentifierLoc(), diag::err_no_member)
4351         << Name << computeDeclContext(D.getCXXScopeSpec(), true)
4352         << D.getCXXScopeSpec().getRange();
4353       NewVD->setInvalidDecl();
4354     }
4355 
4356     D.setRedeclaration(CheckVariableDeclaration(NewVD, Previous));
4357 
4358     // This is an explicit specialization of a static data member. Check it.
4359     if (isExplicitSpecialization && !NewVD->isInvalidDecl() &&
4360         CheckMemberSpecialization(NewVD, Previous))
4361       NewVD->setInvalidDecl();
4362   }
4363 
4364   // If this is a locally-scoped extern C variable, update the map of
4365   // such variables.
4366   if (CurContext->isFunctionOrMethod() && NewVD->isExternC() &&
4367       !NewVD->isInvalidDecl())
4368     RegisterLocallyScopedExternCDecl(NewVD, Previous, S);
4369 
4370   // If there's a #pragma GCC visibility in scope, and this isn't a class
4371   // member, set the visibility of this variable.
4372   if (NewVD->getLinkage() == ExternalLinkage && !DC->isRecord())
4373     AddPushedVisibilityAttribute(NewVD);
4374 
4375   MarkUnusedFileScopedDecl(NewVD);
4376 
4377   return NewVD;
4378 }
4379 
4380 /// \brief Diagnose variable or built-in function shadowing.  Implements
4381 /// -Wshadow.
4382 ///
4383 /// This method is called whenever a VarDecl is added to a "useful"
4384 /// scope.
4385 ///
4386 /// \param S the scope in which the shadowing name is being declared
4387 /// \param R the lookup of the name
4388 ///
4389 void Sema::CheckShadow(Scope *S, VarDecl *D, const LookupResult& R) {
4390   // Return if warning is ignored.
4391   if (Diags.getDiagnosticLevel(diag::warn_decl_shadow, R.getNameLoc()) ==
4392         DiagnosticsEngine::Ignored)
4393     return;
4394 
4395   // Don't diagnose declarations at file scope.
4396   if (D->hasGlobalStorage())
4397     return;
4398 
4399   DeclContext *NewDC = D->getDeclContext();
4400 
4401   // Only diagnose if we're shadowing an unambiguous field or variable.
4402   if (R.getResultKind() != LookupResult::Found)
4403     return;
4404 
4405   NamedDecl* ShadowedDecl = R.getFoundDecl();
4406   if (!isa<VarDecl>(ShadowedDecl) && !isa<FieldDecl>(ShadowedDecl))
4407     return;
4408 
4409   // Fields are not shadowed by variables in C++ static methods.
4410   if (isa<FieldDecl>(ShadowedDecl))
4411     if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewDC))
4412       if (MD->isStatic())
4413         return;
4414 
4415   if (VarDecl *shadowedVar = dyn_cast<VarDecl>(ShadowedDecl))
4416     if (shadowedVar->isExternC()) {
4417       // For shadowing external vars, make sure that we point to the global
4418       // declaration, not a locally scoped extern declaration.
4419       for (VarDecl::redecl_iterator
4420              I = shadowedVar->redecls_begin(), E = shadowedVar->redecls_end();
4421            I != E; ++I)
4422         if (I->isFileVarDecl()) {
4423           ShadowedDecl = *I;
4424           break;
4425         }
4426     }
4427 
4428   DeclContext *OldDC = ShadowedDecl->getDeclContext();
4429 
4430   // Only warn about certain kinds of shadowing for class members.
4431   if (NewDC && NewDC->isRecord()) {
4432     // In particular, don't warn about shadowing non-class members.
4433     if (!OldDC->isRecord())
4434       return;
4435 
4436     // TODO: should we warn about static data members shadowing
4437     // static data members from base classes?
4438 
4439     // TODO: don't diagnose for inaccessible shadowed members.
4440     // This is hard to do perfectly because we might friend the
4441     // shadowing context, but that's just a false negative.
4442   }
4443 
4444   // Determine what kind of declaration we're shadowing.
4445   unsigned Kind;
4446   if (isa<RecordDecl>(OldDC)) {
4447     if (isa<FieldDecl>(ShadowedDecl))
4448       Kind = 3; // field
4449     else
4450       Kind = 2; // static data member
4451   } else if (OldDC->isFileContext())
4452     Kind = 1; // global
4453   else
4454     Kind = 0; // local
4455 
4456   DeclarationName Name = R.getLookupName();
4457 
4458   // Emit warning and note.
4459   Diag(R.getNameLoc(), diag::warn_decl_shadow) << Name << Kind << OldDC;
4460   Diag(ShadowedDecl->getLocation(), diag::note_previous_declaration);
4461 }
4462 
4463 /// \brief Check -Wshadow without the advantage of a previous lookup.
4464 void Sema::CheckShadow(Scope *S, VarDecl *D) {
4465   if (Diags.getDiagnosticLevel(diag::warn_decl_shadow, D->getLocation()) ==
4466         DiagnosticsEngine::Ignored)
4467     return;
4468 
4469   LookupResult R(*this, D->getDeclName(), D->getLocation(),
4470                  Sema::LookupOrdinaryName, Sema::ForRedeclaration);
4471   LookupName(R, S);
4472   CheckShadow(S, D, R);
4473 }
4474 
4475 /// \brief Perform semantic checking on a newly-created variable
4476 /// declaration.
4477 ///
4478 /// This routine performs all of the type-checking required for a
4479 /// variable declaration once it has been built. It is used both to
4480 /// check variables after they have been parsed and their declarators
4481 /// have been translated into a declaration, and to check variables
4482 /// that have been instantiated from a template.
4483 ///
4484 /// Sets NewVD->isInvalidDecl() if an error was encountered.
4485 ///
4486 /// Returns true if the variable declaration is a redeclaration.
4487 bool Sema::CheckVariableDeclaration(VarDecl *NewVD,
4488                                     LookupResult &Previous) {
4489   // If the decl is already known invalid, don't check it.
4490   if (NewVD->isInvalidDecl())
4491     return false;
4492 
4493   QualType T = NewVD->getType();
4494 
4495   if (T->isObjCObjectType()) {
4496     Diag(NewVD->getLocation(), diag::err_statically_allocated_object)
4497       << FixItHint::CreateInsertion(NewVD->getLocation(), "*");
4498     T = Context.getObjCObjectPointerType(T);
4499     NewVD->setType(T);
4500   }
4501 
4502   // Emit an error if an address space was applied to decl with local storage.
4503   // This includes arrays of objects with address space qualifiers, but not
4504   // automatic variables that point to other address spaces.
4505   // ISO/IEC TR 18037 S5.1.2
4506   if (NewVD->hasLocalStorage() && T.getAddressSpace() != 0) {
4507     Diag(NewVD->getLocation(), diag::err_as_qualified_auto_decl);
4508     NewVD->setInvalidDecl();
4509     return false;
4510   }
4511 
4512   // OpenCL v1.2 s6.8 -- The static qualifier is valid only in program
4513   // scope.
4514   if ((getLangOpts().OpenCLVersion >= 120)
4515       && NewVD->isStaticLocal()) {
4516     Diag(NewVD->getLocation(), diag::err_static_function_scope);
4517     NewVD->setInvalidDecl();
4518     return false;
4519   }
4520 
4521   if (NewVD->hasLocalStorage() && T.isObjCGCWeak()
4522       && !NewVD->hasAttr<BlocksAttr>()) {
4523     if (getLangOpts().getGC() != LangOptions::NonGC)
4524       Diag(NewVD->getLocation(), diag::warn_gc_attribute_weak_on_local);
4525     else
4526       Diag(NewVD->getLocation(), diag::warn_attribute_weak_on_local);
4527   }
4528 
4529   bool isVM = T->isVariablyModifiedType();
4530   if (isVM || NewVD->hasAttr<CleanupAttr>() ||
4531       NewVD->hasAttr<BlocksAttr>())
4532     getCurFunction()->setHasBranchProtectedScope();
4533 
4534   if ((isVM && NewVD->hasLinkage()) ||
4535       (T->isVariableArrayType() && NewVD->hasGlobalStorage())) {
4536     bool SizeIsNegative;
4537     llvm::APSInt Oversized;
4538     QualType FixedTy =
4539         TryToFixInvalidVariablyModifiedType(T, Context, SizeIsNegative,
4540                                             Oversized);
4541 
4542     if (FixedTy.isNull() && T->isVariableArrayType()) {
4543       const VariableArrayType *VAT = Context.getAsVariableArrayType(T);
4544       // FIXME: This won't give the correct result for
4545       // int a[10][n];
4546       SourceRange SizeRange = VAT->getSizeExpr()->getSourceRange();
4547 
4548       if (NewVD->isFileVarDecl())
4549         Diag(NewVD->getLocation(), diag::err_vla_decl_in_file_scope)
4550         << SizeRange;
4551       else if (NewVD->getStorageClass() == SC_Static)
4552         Diag(NewVD->getLocation(), diag::err_vla_decl_has_static_storage)
4553         << SizeRange;
4554       else
4555         Diag(NewVD->getLocation(), diag::err_vla_decl_has_extern_linkage)
4556         << SizeRange;
4557       NewVD->setInvalidDecl();
4558       return false;
4559     }
4560 
4561     if (FixedTy.isNull()) {
4562       if (NewVD->isFileVarDecl())
4563         Diag(NewVD->getLocation(), diag::err_vm_decl_in_file_scope);
4564       else
4565         Diag(NewVD->getLocation(), diag::err_vm_decl_has_extern_linkage);
4566       NewVD->setInvalidDecl();
4567       return false;
4568     }
4569 
4570     Diag(NewVD->getLocation(), diag::warn_illegal_constant_array_size);
4571     NewVD->setType(FixedTy);
4572   }
4573 
4574   if (Previous.empty() && NewVD->isExternC()) {
4575     // Since we did not find anything by this name and we're declaring
4576     // an extern "C" variable, look for a non-visible extern "C"
4577     // declaration with the same name.
4578     llvm::DenseMap<DeclarationName, NamedDecl *>::iterator Pos
4579       = findLocallyScopedExternalDecl(NewVD->getDeclName());
4580     if (Pos != LocallyScopedExternalDecls.end())
4581       Previous.addDecl(Pos->second);
4582   }
4583 
4584   if (T->isVoidType() && !NewVD->hasExternalStorage()) {
4585     Diag(NewVD->getLocation(), diag::err_typecheck_decl_incomplete_type)
4586       << T;
4587     NewVD->setInvalidDecl();
4588     return false;
4589   }
4590 
4591   if (!NewVD->hasLocalStorage() && NewVD->hasAttr<BlocksAttr>()) {
4592     Diag(NewVD->getLocation(), diag::err_block_on_nonlocal);
4593     NewVD->setInvalidDecl();
4594     return false;
4595   }
4596 
4597   if (isVM && NewVD->hasAttr<BlocksAttr>()) {
4598     Diag(NewVD->getLocation(), diag::err_block_on_vm);
4599     NewVD->setInvalidDecl();
4600     return false;
4601   }
4602 
4603   if (NewVD->isConstexpr() && !T->isDependentType() &&
4604       RequireLiteralType(NewVD->getLocation(), T,
4605                          diag::err_constexpr_var_non_literal)) {
4606     NewVD->setInvalidDecl();
4607     return false;
4608   }
4609 
4610   if (!Previous.empty()) {
4611     MergeVarDecl(NewVD, Previous);
4612     return true;
4613   }
4614   return false;
4615 }
4616 
4617 /// \brief Data used with FindOverriddenMethod
4618 struct FindOverriddenMethodData {
4619   Sema *S;
4620   CXXMethodDecl *Method;
4621 };
4622 
4623 /// \brief Member lookup function that determines whether a given C++
4624 /// method overrides a method in a base class, to be used with
4625 /// CXXRecordDecl::lookupInBases().
4626 static bool FindOverriddenMethod(const CXXBaseSpecifier *Specifier,
4627                                  CXXBasePath &Path,
4628                                  void *UserData) {
4629   RecordDecl *BaseRecord = Specifier->getType()->getAs<RecordType>()->getDecl();
4630 
4631   FindOverriddenMethodData *Data
4632     = reinterpret_cast<FindOverriddenMethodData*>(UserData);
4633 
4634   DeclarationName Name = Data->Method->getDeclName();
4635 
4636   // FIXME: Do we care about other names here too?
4637   if (Name.getNameKind() == DeclarationName::CXXDestructorName) {
4638     // We really want to find the base class destructor here.
4639     QualType T = Data->S->Context.getTypeDeclType(BaseRecord);
4640     CanQualType CT = Data->S->Context.getCanonicalType(T);
4641 
4642     Name = Data->S->Context.DeclarationNames.getCXXDestructorName(CT);
4643   }
4644 
4645   for (Path.Decls = BaseRecord->lookup(Name);
4646        Path.Decls.first != Path.Decls.second;
4647        ++Path.Decls.first) {
4648     NamedDecl *D = *Path.Decls.first;
4649     if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D)) {
4650       if (MD->isVirtual() && !Data->S->IsOverload(Data->Method, MD, false))
4651         return true;
4652     }
4653   }
4654 
4655   return false;
4656 }
4657 
4658 /// AddOverriddenMethods - See if a method overrides any in the base classes,
4659 /// and if so, check that it's a valid override and remember it.
4660 bool Sema::AddOverriddenMethods(CXXRecordDecl *DC, CXXMethodDecl *MD) {
4661   // Look for virtual methods in base classes that this method might override.
4662   CXXBasePaths Paths;
4663   FindOverriddenMethodData Data;
4664   Data.Method = MD;
4665   Data.S = this;
4666   bool AddedAny = false;
4667   if (DC->lookupInBases(&FindOverriddenMethod, &Data, Paths)) {
4668     for (CXXBasePaths::decl_iterator I = Paths.found_decls_begin(),
4669          E = Paths.found_decls_end(); I != E; ++I) {
4670       if (CXXMethodDecl *OldMD = dyn_cast<CXXMethodDecl>(*I)) {
4671         MD->addOverriddenMethod(OldMD->getCanonicalDecl());
4672         if (!CheckOverridingFunctionReturnType(MD, OldMD) &&
4673             !CheckOverridingFunctionExceptionSpec(MD, OldMD) &&
4674             !CheckIfOverriddenFunctionIsMarkedFinal(MD, OldMD)) {
4675           AddedAny = true;
4676         }
4677       }
4678     }
4679   }
4680 
4681   return AddedAny;
4682 }
4683 
4684 namespace {
4685   // Struct for holding all of the extra arguments needed by
4686   // DiagnoseInvalidRedeclaration to call Sema::ActOnFunctionDeclarator.
4687   struct ActOnFDArgs {
4688     Scope *S;
4689     Declarator &D;
4690     MultiTemplateParamsArg TemplateParamLists;
4691     bool AddToScope;
4692   };
4693 }
4694 
4695 namespace {
4696 
4697 // Callback to only accept typo corrections that have a non-zero edit distance.
4698 // Also only accept corrections that have the same parent decl.
4699 class DifferentNameValidatorCCC : public CorrectionCandidateCallback {
4700  public:
4701   DifferentNameValidatorCCC(ASTContext &Context, FunctionDecl *TypoFD,
4702                             CXXRecordDecl *Parent)
4703       : Context(Context), OriginalFD(TypoFD),
4704         ExpectedParent(Parent ? Parent->getCanonicalDecl() : 0) {}
4705 
4706   virtual bool ValidateCandidate(const TypoCorrection &candidate) {
4707     if (candidate.getEditDistance() == 0)
4708       return false;
4709 
4710     llvm::SmallVector<unsigned, 1> MismatchedParams;
4711     for (TypoCorrection::const_decl_iterator CDecl = candidate.begin(),
4712                                           CDeclEnd = candidate.end();
4713          CDecl != CDeclEnd; ++CDecl) {
4714       FunctionDecl *FD = dyn_cast<FunctionDecl>(*CDecl);
4715 
4716       if (FD && !FD->hasBody() &&
4717           hasSimilarParameters(Context, FD, OriginalFD, MismatchedParams)) {
4718         if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD)) {
4719           CXXRecordDecl *Parent = MD->getParent();
4720           if (Parent && Parent->getCanonicalDecl() == ExpectedParent)
4721             return true;
4722         } else if (!ExpectedParent) {
4723           return true;
4724         }
4725       }
4726     }
4727 
4728     return false;
4729   }
4730 
4731  private:
4732   ASTContext &Context;
4733   FunctionDecl *OriginalFD;
4734   CXXRecordDecl *ExpectedParent;
4735 };
4736 
4737 }
4738 
4739 /// \brief Generate diagnostics for an invalid function redeclaration.
4740 ///
4741 /// This routine handles generating the diagnostic messages for an invalid
4742 /// function redeclaration, including finding possible similar declarations
4743 /// or performing typo correction if there are no previous declarations with
4744 /// the same name.
4745 ///
4746 /// Returns a NamedDecl iff typo correction was performed and substituting in
4747 /// the new declaration name does not cause new errors.
4748 static NamedDecl* DiagnoseInvalidRedeclaration(
4749     Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD,
4750     ActOnFDArgs &ExtraArgs) {
4751   NamedDecl *Result = NULL;
4752   DeclarationName Name = NewFD->getDeclName();
4753   DeclContext *NewDC = NewFD->getDeclContext();
4754   LookupResult Prev(SemaRef, Name, NewFD->getLocation(),
4755                     Sema::LookupOrdinaryName, Sema::ForRedeclaration);
4756   llvm::SmallVector<unsigned, 1> MismatchedParams;
4757   llvm::SmallVector<std::pair<FunctionDecl*, unsigned>, 1> NearMatches;
4758   TypoCorrection Correction;
4759   bool isFriendDecl = (SemaRef.getLangOpts().CPlusPlus &&
4760                        ExtraArgs.D.getDeclSpec().isFriendSpecified());
4761   unsigned DiagMsg = isFriendDecl ? diag::err_no_matching_local_friend
4762                                   : diag::err_member_def_does_not_match;
4763 
4764   NewFD->setInvalidDecl();
4765   SemaRef.LookupQualifiedName(Prev, NewDC);
4766   assert(!Prev.isAmbiguous() &&
4767          "Cannot have an ambiguity in previous-declaration lookup");
4768   CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewFD);
4769   DifferentNameValidatorCCC Validator(SemaRef.Context, NewFD,
4770                                       MD ? MD->getParent() : 0);
4771   if (!Prev.empty()) {
4772     for (LookupResult::iterator Func = Prev.begin(), FuncEnd = Prev.end();
4773          Func != FuncEnd; ++Func) {
4774       FunctionDecl *FD = dyn_cast<FunctionDecl>(*Func);
4775       if (FD &&
4776           hasSimilarParameters(SemaRef.Context, FD, NewFD, MismatchedParams)) {
4777         // Add 1 to the index so that 0 can mean the mismatch didn't
4778         // involve a parameter
4779         unsigned ParamNum =
4780             MismatchedParams.empty() ? 0 : MismatchedParams.front() + 1;
4781         NearMatches.push_back(std::make_pair(FD, ParamNum));
4782       }
4783     }
4784   // If the qualified name lookup yielded nothing, try typo correction
4785   } else if ((Correction = SemaRef.CorrectTypo(Prev.getLookupNameInfo(),
4786                                          Prev.getLookupKind(), 0, 0,
4787                                          Validator, NewDC))) {
4788     // Trap errors.
4789     Sema::SFINAETrap Trap(SemaRef);
4790 
4791     // Set up everything for the call to ActOnFunctionDeclarator
4792     ExtraArgs.D.SetIdentifier(Correction.getCorrectionAsIdentifierInfo(),
4793                               ExtraArgs.D.getIdentifierLoc());
4794     Previous.clear();
4795     Previous.setLookupName(Correction.getCorrection());
4796     for (TypoCorrection::decl_iterator CDecl = Correction.begin(),
4797                                     CDeclEnd = Correction.end();
4798          CDecl != CDeclEnd; ++CDecl) {
4799       FunctionDecl *FD = dyn_cast<FunctionDecl>(*CDecl);
4800       if (FD && !FD->hasBody() &&
4801           hasSimilarParameters(SemaRef.Context, FD, NewFD, MismatchedParams)) {
4802         Previous.addDecl(FD);
4803       }
4804     }
4805     bool wasRedeclaration = ExtraArgs.D.isRedeclaration();
4806     // TODO: Refactor ActOnFunctionDeclarator so that we can call only the
4807     // pieces need to verify the typo-corrected C++ declaraction and hopefully
4808     // eliminate the need for the parameter pack ExtraArgs.
4809     Result = SemaRef.ActOnFunctionDeclarator(
4810         ExtraArgs.S, ExtraArgs.D,
4811         Correction.getCorrectionDecl()->getDeclContext(),
4812         NewFD->getTypeSourceInfo(), Previous, ExtraArgs.TemplateParamLists,
4813         ExtraArgs.AddToScope);
4814     if (Trap.hasErrorOccurred()) {
4815       // Pretend the typo correction never occurred
4816       ExtraArgs.D.SetIdentifier(Name.getAsIdentifierInfo(),
4817                                 ExtraArgs.D.getIdentifierLoc());
4818       ExtraArgs.D.setRedeclaration(wasRedeclaration);
4819       Previous.clear();
4820       Previous.setLookupName(Name);
4821       Result = NULL;
4822     } else {
4823       for (LookupResult::iterator Func = Previous.begin(),
4824                                FuncEnd = Previous.end();
4825            Func != FuncEnd; ++Func) {
4826         if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*Func))
4827           NearMatches.push_back(std::make_pair(FD, 0));
4828       }
4829     }
4830     if (NearMatches.empty()) {
4831       // Ignore the correction if it didn't yield any close FunctionDecl matches
4832       Correction = TypoCorrection();
4833     } else {
4834       DiagMsg = isFriendDecl ? diag::err_no_matching_local_friend_suggest
4835                              : diag::err_member_def_does_not_match_suggest;
4836     }
4837   }
4838 
4839   if (Correction) {
4840     SourceRange FixItLoc(NewFD->getLocation());
4841     CXXScopeSpec &SS = ExtraArgs.D.getCXXScopeSpec();
4842     if (Correction.getCorrectionSpecifier() && SS.isValid())
4843       FixItLoc.setBegin(SS.getBeginLoc());
4844     SemaRef.Diag(NewFD->getLocStart(), DiagMsg)
4845         << Name << NewDC << Correction.getQuoted(SemaRef.getLangOpts())
4846         << FixItHint::CreateReplacement(
4847             FixItLoc, Correction.getAsString(SemaRef.getLangOpts()));
4848   } else {
4849     SemaRef.Diag(NewFD->getLocation(), DiagMsg)
4850         << Name << NewDC << NewFD->getLocation();
4851   }
4852 
4853   bool NewFDisConst = false;
4854   if (CXXMethodDecl *NewMD = dyn_cast<CXXMethodDecl>(NewFD))
4855     NewFDisConst = NewMD->getTypeQualifiers() & Qualifiers::Const;
4856 
4857   for (llvm::SmallVector<std::pair<FunctionDecl*, unsigned>, 1>::iterator
4858        NearMatch = NearMatches.begin(), NearMatchEnd = NearMatches.end();
4859        NearMatch != NearMatchEnd; ++NearMatch) {
4860     FunctionDecl *FD = NearMatch->first;
4861     bool FDisConst = false;
4862     if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD))
4863       FDisConst = MD->getTypeQualifiers() & Qualifiers::Const;
4864 
4865     if (unsigned Idx = NearMatch->second) {
4866       ParmVarDecl *FDParam = FD->getParamDecl(Idx-1);
4867       SourceLocation Loc = FDParam->getTypeSpecStartLoc();
4868       if (Loc.isInvalid()) Loc = FD->getLocation();
4869       SemaRef.Diag(Loc, diag::note_member_def_close_param_match)
4870           << Idx << FDParam->getType() << NewFD->getParamDecl(Idx-1)->getType();
4871     } else if (Correction) {
4872       SemaRef.Diag(FD->getLocation(), diag::note_previous_decl)
4873           << Correction.getQuoted(SemaRef.getLangOpts());
4874     } else if (FDisConst != NewFDisConst) {
4875       SemaRef.Diag(FD->getLocation(), diag::note_member_def_close_const_match)
4876           << NewFDisConst << FD->getSourceRange().getEnd();
4877     } else
4878       SemaRef.Diag(FD->getLocation(), diag::note_member_def_close_match);
4879   }
4880   return Result;
4881 }
4882 
4883 static FunctionDecl::StorageClass getFunctionStorageClass(Sema &SemaRef,
4884                                                           Declarator &D) {
4885   switch (D.getDeclSpec().getStorageClassSpec()) {
4886   default: llvm_unreachable("Unknown storage class!");
4887   case DeclSpec::SCS_auto:
4888   case DeclSpec::SCS_register:
4889   case DeclSpec::SCS_mutable:
4890     SemaRef.Diag(D.getDeclSpec().getStorageClassSpecLoc(),
4891                  diag::err_typecheck_sclass_func);
4892     D.setInvalidType();
4893     break;
4894   case DeclSpec::SCS_unspecified: break;
4895   case DeclSpec::SCS_extern: return SC_Extern;
4896   case DeclSpec::SCS_static: {
4897     if (SemaRef.CurContext->getRedeclContext()->isFunctionOrMethod()) {
4898       // C99 6.7.1p5:
4899       //   The declaration of an identifier for a function that has
4900       //   block scope shall have no explicit storage-class specifier
4901       //   other than extern
4902       // See also (C++ [dcl.stc]p4).
4903       SemaRef.Diag(D.getDeclSpec().getStorageClassSpecLoc(),
4904                    diag::err_static_block_func);
4905       break;
4906     } else
4907       return SC_Static;
4908   }
4909   case DeclSpec::SCS_private_extern: return SC_PrivateExtern;
4910   }
4911 
4912   // No explicit storage class has already been returned
4913   return SC_None;
4914 }
4915 
4916 static FunctionDecl* CreateNewFunctionDecl(Sema &SemaRef, Declarator &D,
4917                                            DeclContext *DC, QualType &R,
4918                                            TypeSourceInfo *TInfo,
4919                                            FunctionDecl::StorageClass SC,
4920                                            bool &IsVirtualOkay) {
4921   DeclarationNameInfo NameInfo = SemaRef.GetNameForDeclarator(D);
4922   DeclarationName Name = NameInfo.getName();
4923 
4924   FunctionDecl *NewFD = 0;
4925   bool isInline = D.getDeclSpec().isInlineSpecified();
4926   DeclSpec::SCS SCSpec = D.getDeclSpec().getStorageClassSpecAsWritten();
4927   FunctionDecl::StorageClass SCAsWritten
4928     = StorageClassSpecToFunctionDeclStorageClass(SCSpec);
4929 
4930   if (!SemaRef.getLangOpts().CPlusPlus) {
4931     // Determine whether the function was written with a
4932     // prototype. This true when:
4933     //   - there is a prototype in the declarator, or
4934     //   - the type R of the function is some kind of typedef or other reference
4935     //     to a type name (which eventually refers to a function type).
4936     bool HasPrototype =
4937       (D.isFunctionDeclarator() && D.getFunctionTypeInfo().hasPrototype) ||
4938       (!isa<FunctionType>(R.getTypePtr()) && R->isFunctionProtoType());
4939 
4940     NewFD = FunctionDecl::Create(SemaRef.Context, DC,
4941                                  D.getLocStart(), NameInfo, R,
4942                                  TInfo, SC, SCAsWritten, isInline,
4943                                  HasPrototype);
4944     if (D.isInvalidType())
4945       NewFD->setInvalidDecl();
4946 
4947     // Set the lexical context.
4948     NewFD->setLexicalDeclContext(SemaRef.CurContext);
4949 
4950     return NewFD;
4951   }
4952 
4953   bool isExplicit = D.getDeclSpec().isExplicitSpecified();
4954   bool isConstexpr = D.getDeclSpec().isConstexprSpecified();
4955 
4956   // Check that the return type is not an abstract class type.
4957   // For record types, this is done by the AbstractClassUsageDiagnoser once
4958   // the class has been completely parsed.
4959   if (!DC->isRecord() &&
4960       SemaRef.RequireNonAbstractType(D.getIdentifierLoc(),
4961                                      R->getAs<FunctionType>()->getResultType(),
4962                                      diag::err_abstract_type_in_decl,
4963                                      SemaRef.AbstractReturnType))
4964     D.setInvalidType();
4965 
4966   if (Name.getNameKind() == DeclarationName::CXXConstructorName) {
4967     // This is a C++ constructor declaration.
4968     assert(DC->isRecord() &&
4969            "Constructors can only be declared in a member context");
4970 
4971     R = SemaRef.CheckConstructorDeclarator(D, R, SC);
4972     return CXXConstructorDecl::Create(SemaRef.Context, cast<CXXRecordDecl>(DC),
4973                                       D.getLocStart(), NameInfo,
4974                                       R, TInfo, isExplicit, isInline,
4975                                       /*isImplicitlyDeclared=*/false,
4976                                       isConstexpr);
4977 
4978   } else if (Name.getNameKind() == DeclarationName::CXXDestructorName) {
4979     // This is a C++ destructor declaration.
4980     if (DC->isRecord()) {
4981       R = SemaRef.CheckDestructorDeclarator(D, R, SC);
4982       CXXRecordDecl *Record = cast<CXXRecordDecl>(DC);
4983       CXXDestructorDecl *NewDD = CXXDestructorDecl::Create(
4984                                         SemaRef.Context, Record,
4985                                         D.getLocStart(),
4986                                         NameInfo, R, TInfo, isInline,
4987                                         /*isImplicitlyDeclared=*/false);
4988 
4989       // If the class is complete, then we now create the implicit exception
4990       // specification. If the class is incomplete or dependent, we can't do
4991       // it yet.
4992       if (SemaRef.getLangOpts().CPlusPlus0x && !Record->isDependentType() &&
4993           Record->getDefinition() && !Record->isBeingDefined() &&
4994           R->getAs<FunctionProtoType>()->getExceptionSpecType() == EST_None) {
4995         SemaRef.AdjustDestructorExceptionSpec(Record, NewDD);
4996       }
4997 
4998       IsVirtualOkay = true;
4999       return NewDD;
5000 
5001     } else {
5002       SemaRef.Diag(D.getIdentifierLoc(), diag::err_destructor_not_member);
5003       D.setInvalidType();
5004 
5005       // Create a FunctionDecl to satisfy the function definition parsing
5006       // code path.
5007       return FunctionDecl::Create(SemaRef.Context, DC,
5008                                   D.getLocStart(),
5009                                   D.getIdentifierLoc(), Name, R, TInfo,
5010                                   SC, SCAsWritten, isInline,
5011                                   /*hasPrototype=*/true, isConstexpr);
5012     }
5013 
5014   } else if (Name.getNameKind() == DeclarationName::CXXConversionFunctionName) {
5015     if (!DC->isRecord()) {
5016       SemaRef.Diag(D.getIdentifierLoc(),
5017            diag::err_conv_function_not_member);
5018       return 0;
5019     }
5020 
5021     SemaRef.CheckConversionDeclarator(D, R, SC);
5022     IsVirtualOkay = true;
5023     return CXXConversionDecl::Create(SemaRef.Context, cast<CXXRecordDecl>(DC),
5024                                      D.getLocStart(), NameInfo,
5025                                      R, TInfo, isInline, isExplicit,
5026                                      isConstexpr, SourceLocation());
5027 
5028   } else if (DC->isRecord()) {
5029     // If the name of the function is the same as the name of the record,
5030     // then this must be an invalid constructor that has a return type.
5031     // (The parser checks for a return type and makes the declarator a
5032     // constructor if it has no return type).
5033     if (Name.getAsIdentifierInfo() &&
5034         Name.getAsIdentifierInfo() == cast<CXXRecordDecl>(DC)->getIdentifier()){
5035       SemaRef.Diag(D.getIdentifierLoc(), diag::err_constructor_return_type)
5036         << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc())
5037         << SourceRange(D.getIdentifierLoc());
5038       return 0;
5039     }
5040 
5041     bool isStatic = SC == SC_Static;
5042 
5043     // [class.free]p1:
5044     // Any allocation function for a class T is a static member
5045     // (even if not explicitly declared static).
5046     if (Name.getCXXOverloadedOperator() == OO_New ||
5047         Name.getCXXOverloadedOperator() == OO_Array_New)
5048       isStatic = true;
5049 
5050     // [class.free]p6 Any deallocation function for a class X is a static member
5051     // (even if not explicitly declared static).
5052     if (Name.getCXXOverloadedOperator() == OO_Delete ||
5053         Name.getCXXOverloadedOperator() == OO_Array_Delete)
5054       isStatic = true;
5055 
5056     IsVirtualOkay = !isStatic;
5057 
5058     // This is a C++ method declaration.
5059     return CXXMethodDecl::Create(SemaRef.Context, cast<CXXRecordDecl>(DC),
5060                                  D.getLocStart(), NameInfo, R,
5061                                  TInfo, isStatic, SCAsWritten, isInline,
5062                                  isConstexpr, SourceLocation());
5063 
5064   } else {
5065     // Determine whether the function was written with a
5066     // prototype. This true when:
5067     //   - we're in C++ (where every function has a prototype),
5068     return FunctionDecl::Create(SemaRef.Context, DC,
5069                                 D.getLocStart(),
5070                                 NameInfo, R, TInfo, SC, SCAsWritten, isInline,
5071                                 true/*HasPrototype*/, isConstexpr);
5072   }
5073 }
5074 
5075 NamedDecl*
5076 Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC,
5077                               TypeSourceInfo *TInfo, LookupResult &Previous,
5078                               MultiTemplateParamsArg TemplateParamLists,
5079                               bool &AddToScope) {
5080   QualType R = TInfo->getType();
5081 
5082   assert(R.getTypePtr()->isFunctionType());
5083 
5084   // TODO: consider using NameInfo for diagnostic.
5085   DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
5086   DeclarationName Name = NameInfo.getName();
5087   FunctionDecl::StorageClass SC = getFunctionStorageClass(*this, D);
5088 
5089   if (D.getDeclSpec().isThreadSpecified())
5090     Diag(D.getDeclSpec().getThreadSpecLoc(), diag::err_invalid_thread);
5091 
5092   // Do not allow returning a objc interface by-value.
5093   if (R->getAs<FunctionType>()->getResultType()->isObjCObjectType()) {
5094     Diag(D.getIdentifierLoc(),
5095          diag::err_object_cannot_be_passed_returned_by_value) << 0
5096     << R->getAs<FunctionType>()->getResultType()
5097     << FixItHint::CreateInsertion(D.getIdentifierLoc(), "*");
5098 
5099     QualType T = R->getAs<FunctionType>()->getResultType();
5100     T = Context.getObjCObjectPointerType(T);
5101     if (const FunctionProtoType *FPT = dyn_cast<FunctionProtoType>(R)) {
5102       FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
5103       R = Context.getFunctionType(T, FPT->arg_type_begin(),
5104                                   FPT->getNumArgs(), EPI);
5105     }
5106     else if (isa<FunctionNoProtoType>(R))
5107       R = Context.getFunctionNoProtoType(T);
5108   }
5109 
5110   bool isFriend = false;
5111   FunctionTemplateDecl *FunctionTemplate = 0;
5112   bool isExplicitSpecialization = false;
5113   bool isFunctionTemplateSpecialization = false;
5114 
5115   bool isDependentClassScopeExplicitSpecialization = false;
5116   bool HasExplicitTemplateArgs = false;
5117   TemplateArgumentListInfo TemplateArgs;
5118 
5119   bool isVirtualOkay = false;
5120 
5121   FunctionDecl *NewFD = CreateNewFunctionDecl(*this, D, DC, R, TInfo, SC,
5122                                               isVirtualOkay);
5123   if (!NewFD) return 0;
5124 
5125   if (OriginalLexicalContext && OriginalLexicalContext->isObjCContainer())
5126     NewFD->setTopLevelDeclInObjCContainer();
5127 
5128   if (getLangOpts().CPlusPlus) {
5129     bool isInline = D.getDeclSpec().isInlineSpecified();
5130     bool isVirtual = D.getDeclSpec().isVirtualSpecified();
5131     bool isExplicit = D.getDeclSpec().isExplicitSpecified();
5132     bool isConstexpr = D.getDeclSpec().isConstexprSpecified();
5133     isFriend = D.getDeclSpec().isFriendSpecified();
5134     if (isFriend && !isInline && D.isFunctionDefinition()) {
5135       // C++ [class.friend]p5
5136       //   A function can be defined in a friend declaration of a
5137       //   class . . . . Such a function is implicitly inline.
5138       NewFD->setImplicitlyInline();
5139     }
5140 
5141     SetNestedNameSpecifier(NewFD, D);
5142     isExplicitSpecialization = false;
5143     isFunctionTemplateSpecialization = false;
5144     if (D.isInvalidType())
5145       NewFD->setInvalidDecl();
5146 
5147     // Set the lexical context. If the declarator has a C++
5148     // scope specifier, or is the object of a friend declaration, the
5149     // lexical context will be different from the semantic context.
5150     NewFD->setLexicalDeclContext(CurContext);
5151 
5152     // Match up the template parameter lists with the scope specifier, then
5153     // determine whether we have a template or a template specialization.
5154     bool Invalid = false;
5155     if (TemplateParameterList *TemplateParams
5156           = MatchTemplateParametersToScopeSpecifier(
5157                                   D.getDeclSpec().getLocStart(),
5158                                   D.getIdentifierLoc(),
5159                                   D.getCXXScopeSpec(),
5160                                   TemplateParamLists.get(),
5161                                   TemplateParamLists.size(),
5162                                   isFriend,
5163                                   isExplicitSpecialization,
5164                                   Invalid)) {
5165       if (TemplateParams->size() > 0) {
5166         // This is a function template
5167 
5168         // Check that we can declare a template here.
5169         if (CheckTemplateDeclScope(S, TemplateParams))
5170           return 0;
5171 
5172         // A destructor cannot be a template.
5173         if (Name.getNameKind() == DeclarationName::CXXDestructorName) {
5174           Diag(NewFD->getLocation(), diag::err_destructor_template);
5175           return 0;
5176         }
5177 
5178         // If we're adding a template to a dependent context, we may need to
5179         // rebuilding some of the types used within the template parameter list,
5180         // now that we know what the current instantiation is.
5181         if (DC->isDependentContext()) {
5182           ContextRAII SavedContext(*this, DC);
5183           if (RebuildTemplateParamsInCurrentInstantiation(TemplateParams))
5184             Invalid = true;
5185         }
5186 
5187 
5188         FunctionTemplate = FunctionTemplateDecl::Create(Context, DC,
5189                                                         NewFD->getLocation(),
5190                                                         Name, TemplateParams,
5191                                                         NewFD);
5192         FunctionTemplate->setLexicalDeclContext(CurContext);
5193         NewFD->setDescribedFunctionTemplate(FunctionTemplate);
5194 
5195         // For source fidelity, store the other template param lists.
5196         if (TemplateParamLists.size() > 1) {
5197           NewFD->setTemplateParameterListsInfo(Context,
5198                                                TemplateParamLists.size() - 1,
5199                                                TemplateParamLists.release());
5200         }
5201       } else {
5202         // This is a function template specialization.
5203         isFunctionTemplateSpecialization = true;
5204         // For source fidelity, store all the template param lists.
5205         NewFD->setTemplateParameterListsInfo(Context,
5206                                              TemplateParamLists.size(),
5207                                              TemplateParamLists.release());
5208 
5209         // C++0x [temp.expl.spec]p20 forbids "template<> friend void foo(int);".
5210         if (isFriend) {
5211           // We want to remove the "template<>", found here.
5212           SourceRange RemoveRange = TemplateParams->getSourceRange();
5213 
5214           // If we remove the template<> and the name is not a
5215           // template-id, we're actually silently creating a problem:
5216           // the friend declaration will refer to an untemplated decl,
5217           // and clearly the user wants a template specialization.  So
5218           // we need to insert '<>' after the name.
5219           SourceLocation InsertLoc;
5220           if (D.getName().getKind() != UnqualifiedId::IK_TemplateId) {
5221             InsertLoc = D.getName().getSourceRange().getEnd();
5222             InsertLoc = PP.getLocForEndOfToken(InsertLoc);
5223           }
5224 
5225           Diag(D.getIdentifierLoc(), diag::err_template_spec_decl_friend)
5226             << Name << RemoveRange
5227             << FixItHint::CreateRemoval(RemoveRange)
5228             << FixItHint::CreateInsertion(InsertLoc, "<>");
5229         }
5230       }
5231     }
5232     else {
5233       // All template param lists were matched against the scope specifier:
5234       // this is NOT (an explicit specialization of) a template.
5235       if (TemplateParamLists.size() > 0)
5236         // For source fidelity, store all the template param lists.
5237         NewFD->setTemplateParameterListsInfo(Context,
5238                                              TemplateParamLists.size(),
5239                                              TemplateParamLists.release());
5240     }
5241 
5242     if (Invalid) {
5243       NewFD->setInvalidDecl();
5244       if (FunctionTemplate)
5245         FunctionTemplate->setInvalidDecl();
5246     }
5247 
5248     // C++ [dcl.fct.spec]p5:
5249     //   The virtual specifier shall only be used in declarations of
5250     //   nonstatic class member functions that appear within a
5251     //   member-specification of a class declaration; see 10.3.
5252     //
5253     if (isVirtual && !NewFD->isInvalidDecl()) {
5254       if (!isVirtualOkay) {
5255         Diag(D.getDeclSpec().getVirtualSpecLoc(),
5256              diag::err_virtual_non_function);
5257       } else if (!CurContext->isRecord()) {
5258         // 'virtual' was specified outside of the class.
5259         Diag(D.getDeclSpec().getVirtualSpecLoc(),
5260              diag::err_virtual_out_of_class)
5261           << FixItHint::CreateRemoval(D.getDeclSpec().getVirtualSpecLoc());
5262       } else if (NewFD->getDescribedFunctionTemplate()) {
5263         // C++ [temp.mem]p3:
5264         //  A member function template shall not be virtual.
5265         Diag(D.getDeclSpec().getVirtualSpecLoc(),
5266              diag::err_virtual_member_function_template)
5267           << FixItHint::CreateRemoval(D.getDeclSpec().getVirtualSpecLoc());
5268       } else {
5269         // Okay: Add virtual to the method.
5270         NewFD->setVirtualAsWritten(true);
5271       }
5272     }
5273 
5274     // C++ [dcl.fct.spec]p3:
5275     //  The inline specifier shall not appear on a block scope function
5276     //  declaration.
5277     if (isInline && !NewFD->isInvalidDecl()) {
5278       if (CurContext->isFunctionOrMethod()) {
5279         // 'inline' is not allowed on block scope function declaration.
5280         Diag(D.getDeclSpec().getInlineSpecLoc(),
5281              diag::err_inline_declaration_block_scope) << Name
5282           << FixItHint::CreateRemoval(D.getDeclSpec().getInlineSpecLoc());
5283       }
5284     }
5285 
5286     // C++ [dcl.fct.spec]p6:
5287     //  The explicit specifier shall be used only in the declaration of a
5288     //  constructor or conversion function within its class definition;
5289     //  see 12.3.1 and 12.3.2.
5290     if (isExplicit && !NewFD->isInvalidDecl()) {
5291       if (!CurContext->isRecord()) {
5292         // 'explicit' was specified outside of the class.
5293         Diag(D.getDeclSpec().getExplicitSpecLoc(),
5294              diag::err_explicit_out_of_class)
5295           << FixItHint::CreateRemoval(D.getDeclSpec().getExplicitSpecLoc());
5296       } else if (!isa<CXXConstructorDecl>(NewFD) &&
5297                  !isa<CXXConversionDecl>(NewFD)) {
5298         // 'explicit' was specified on a function that wasn't a constructor
5299         // or conversion function.
5300         Diag(D.getDeclSpec().getExplicitSpecLoc(),
5301              diag::err_explicit_non_ctor_or_conv_function)
5302           << FixItHint::CreateRemoval(D.getDeclSpec().getExplicitSpecLoc());
5303       }
5304     }
5305 
5306     if (isConstexpr) {
5307       // C++0x [dcl.constexpr]p2: constexpr functions and constexpr constructors
5308       // are implicitly inline.
5309       NewFD->setImplicitlyInline();
5310 
5311       // C++0x [dcl.constexpr]p3: functions declared constexpr are required to
5312       // be either constructors or to return a literal type. Therefore,
5313       // destructors cannot be declared constexpr.
5314       if (isa<CXXDestructorDecl>(NewFD))
5315         Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_constexpr_dtor);
5316     }
5317 
5318     // If __module_private__ was specified, mark the function accordingly.
5319     if (D.getDeclSpec().isModulePrivateSpecified()) {
5320       if (isFunctionTemplateSpecialization) {
5321         SourceLocation ModulePrivateLoc
5322           = D.getDeclSpec().getModulePrivateSpecLoc();
5323         Diag(ModulePrivateLoc, diag::err_module_private_specialization)
5324           << 0
5325           << FixItHint::CreateRemoval(ModulePrivateLoc);
5326       } else {
5327         NewFD->setModulePrivate();
5328         if (FunctionTemplate)
5329           FunctionTemplate->setModulePrivate();
5330       }
5331     }
5332 
5333     if (isFriend) {
5334       // For now, claim that the objects have no previous declaration.
5335       if (FunctionTemplate) {
5336         FunctionTemplate->setObjectOfFriendDecl(false);
5337         FunctionTemplate->setAccess(AS_public);
5338       }
5339       NewFD->setObjectOfFriendDecl(false);
5340       NewFD->setAccess(AS_public);
5341     }
5342 
5343     // If a function is defined as defaulted or deleted, mark it as such now.
5344     switch (D.getFunctionDefinitionKind()) {
5345       case FDK_Declaration:
5346       case FDK_Definition:
5347         break;
5348 
5349       case FDK_Defaulted:
5350         NewFD->setDefaulted();
5351         break;
5352 
5353       case FDK_Deleted:
5354         NewFD->setDeletedAsWritten();
5355         break;
5356     }
5357 
5358     if (isa<CXXMethodDecl>(NewFD) && DC == CurContext &&
5359         D.isFunctionDefinition()) {
5360       // C++ [class.mfct]p2:
5361       //   A member function may be defined (8.4) in its class definition, in
5362       //   which case it is an inline member function (7.1.2)
5363       NewFD->setImplicitlyInline();
5364     }
5365 
5366     if (SC == SC_Static && isa<CXXMethodDecl>(NewFD) &&
5367         !CurContext->isRecord()) {
5368       // C++ [class.static]p1:
5369       //   A data or function member of a class may be declared static
5370       //   in a class definition, in which case it is a static member of
5371       //   the class.
5372 
5373       // Complain about the 'static' specifier if it's on an out-of-line
5374       // member function definition.
5375       Diag(D.getDeclSpec().getStorageClassSpecLoc(),
5376            diag::err_static_out_of_line)
5377         << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());
5378     }
5379   }
5380 
5381   // Filter out previous declarations that don't match the scope.
5382   FilterLookupForScope(Previous, DC, S, NewFD->hasLinkage(),
5383                        isExplicitSpecialization ||
5384                        isFunctionTemplateSpecialization);
5385 
5386   // Handle GNU asm-label extension (encoded as an attribute).
5387   if (Expr *E = (Expr*) D.getAsmLabel()) {
5388     // The parser guarantees this is a string.
5389     StringLiteral *SE = cast<StringLiteral>(E);
5390     NewFD->addAttr(::new (Context) AsmLabelAttr(SE->getStrTokenLoc(0), Context,
5391                                                 SE->getString()));
5392   } else if (!ExtnameUndeclaredIdentifiers.empty()) {
5393     llvm::DenseMap<IdentifierInfo*,AsmLabelAttr*>::iterator I =
5394       ExtnameUndeclaredIdentifiers.find(NewFD->getIdentifier());
5395     if (I != ExtnameUndeclaredIdentifiers.end()) {
5396       NewFD->addAttr(I->second);
5397       ExtnameUndeclaredIdentifiers.erase(I);
5398     }
5399   }
5400 
5401   // Copy the parameter declarations from the declarator D to the function
5402   // declaration NewFD, if they are available.  First scavenge them into Params.
5403   SmallVector<ParmVarDecl*, 16> Params;
5404   if (D.isFunctionDeclarator()) {
5405     DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
5406 
5407     // Check for C99 6.7.5.3p10 - foo(void) is a non-varargs
5408     // function that takes no arguments, not a function that takes a
5409     // single void argument.
5410     // We let through "const void" here because Sema::GetTypeForDeclarator
5411     // already checks for that case.
5412     if (FTI.NumArgs == 1 && !FTI.isVariadic && FTI.ArgInfo[0].Ident == 0 &&
5413         FTI.ArgInfo[0].Param &&
5414         cast<ParmVarDecl>(FTI.ArgInfo[0].Param)->getType()->isVoidType()) {
5415       // Empty arg list, don't push any params.
5416       ParmVarDecl *Param = cast<ParmVarDecl>(FTI.ArgInfo[0].Param);
5417 
5418       // In C++, the empty parameter-type-list must be spelled "void"; a
5419       // typedef of void is not permitted.
5420       if (getLangOpts().CPlusPlus &&
5421           Param->getType().getUnqualifiedType() != Context.VoidTy) {
5422         bool IsTypeAlias = false;
5423         if (const TypedefType *TT = Param->getType()->getAs<TypedefType>())
5424           IsTypeAlias = isa<TypeAliasDecl>(TT->getDecl());
5425         else if (const TemplateSpecializationType *TST =
5426                    Param->getType()->getAs<TemplateSpecializationType>())
5427           IsTypeAlias = TST->isTypeAlias();
5428         Diag(Param->getLocation(), diag::err_param_typedef_of_void)
5429           << IsTypeAlias;
5430       }
5431     } else if (FTI.NumArgs > 0 && FTI.ArgInfo[0].Param != 0) {
5432       for (unsigned i = 0, e = FTI.NumArgs; i != e; ++i) {
5433         ParmVarDecl *Param = cast<ParmVarDecl>(FTI.ArgInfo[i].Param);
5434         assert(Param->getDeclContext() != NewFD && "Was set before ?");
5435         Param->setDeclContext(NewFD);
5436         Params.push_back(Param);
5437 
5438         if (Param->isInvalidDecl())
5439           NewFD->setInvalidDecl();
5440       }
5441     }
5442 
5443   } else if (const FunctionProtoType *FT = R->getAs<FunctionProtoType>()) {
5444     // When we're declaring a function with a typedef, typeof, etc as in the
5445     // following example, we'll need to synthesize (unnamed)
5446     // parameters for use in the declaration.
5447     //
5448     // @code
5449     // typedef void fn(int);
5450     // fn f;
5451     // @endcode
5452 
5453     // Synthesize a parameter for each argument type.
5454     for (FunctionProtoType::arg_type_iterator AI = FT->arg_type_begin(),
5455          AE = FT->arg_type_end(); AI != AE; ++AI) {
5456       ParmVarDecl *Param =
5457         BuildParmVarDeclForTypedef(NewFD, D.getIdentifierLoc(), *AI);
5458       Param->setScopeInfo(0, Params.size());
5459       Params.push_back(Param);
5460     }
5461   } else {
5462     assert(R->isFunctionNoProtoType() && NewFD->getNumParams() == 0 &&
5463            "Should not need args for typedef of non-prototype fn");
5464   }
5465 
5466   // Finally, we know we have the right number of parameters, install them.
5467   NewFD->setParams(Params);
5468 
5469   // Find all anonymous symbols defined during the declaration of this function
5470   // and add to NewFD. This lets us track decls such 'enum Y' in:
5471   //
5472   //   void f(enum Y {AA} x) {}
5473   //
5474   // which would otherwise incorrectly end up in the translation unit scope.
5475   NewFD->setDeclsInPrototypeScope(DeclsInPrototypeScope);
5476   DeclsInPrototypeScope.clear();
5477 
5478   // Process the non-inheritable attributes on this declaration.
5479   ProcessDeclAttributes(S, NewFD, D,
5480                         /*NonInheritable=*/true, /*Inheritable=*/false);
5481 
5482   // Functions returning a variably modified type violate C99 6.7.5.2p2
5483   // because all functions have linkage.
5484   if (!NewFD->isInvalidDecl() &&
5485       NewFD->getResultType()->isVariablyModifiedType()) {
5486     Diag(NewFD->getLocation(), diag::err_vm_func_decl);
5487     NewFD->setInvalidDecl();
5488   }
5489 
5490   // Handle attributes.
5491   ProcessDeclAttributes(S, NewFD, D,
5492                         /*NonInheritable=*/false, /*Inheritable=*/true);
5493 
5494   if (!getLangOpts().CPlusPlus) {
5495     // Perform semantic checking on the function declaration.
5496     bool isExplicitSpecialization=false;
5497     if (!NewFD->isInvalidDecl()) {
5498       if (NewFD->isMain())
5499         CheckMain(NewFD, D.getDeclSpec());
5500       D.setRedeclaration(CheckFunctionDeclaration(S, NewFD, Previous,
5501                                                   isExplicitSpecialization));
5502     }
5503     assert((NewFD->isInvalidDecl() || !D.isRedeclaration() ||
5504             Previous.getResultKind() != LookupResult::FoundOverloaded) &&
5505            "previous declaration set still overloaded");
5506   } else {
5507     // If the declarator is a template-id, translate the parser's template
5508     // argument list into our AST format.
5509     if (D.getName().getKind() == UnqualifiedId::IK_TemplateId) {
5510       TemplateIdAnnotation *TemplateId = D.getName().TemplateId;
5511       TemplateArgs.setLAngleLoc(TemplateId->LAngleLoc);
5512       TemplateArgs.setRAngleLoc(TemplateId->RAngleLoc);
5513       ASTTemplateArgsPtr TemplateArgsPtr(*this,
5514                                          TemplateId->getTemplateArgs(),
5515                                          TemplateId->NumArgs);
5516       translateTemplateArguments(TemplateArgsPtr,
5517                                  TemplateArgs);
5518       TemplateArgsPtr.release();
5519 
5520       HasExplicitTemplateArgs = true;
5521 
5522       if (NewFD->isInvalidDecl()) {
5523         HasExplicitTemplateArgs = false;
5524       } else if (FunctionTemplate) {
5525         // Function template with explicit template arguments.
5526         Diag(D.getIdentifierLoc(), diag::err_function_template_partial_spec)
5527           << SourceRange(TemplateId->LAngleLoc, TemplateId->RAngleLoc);
5528 
5529         HasExplicitTemplateArgs = false;
5530       } else if (!isFunctionTemplateSpecialization &&
5531                  !D.getDeclSpec().isFriendSpecified()) {
5532         // We have encountered something that the user meant to be a
5533         // specialization (because it has explicitly-specified template
5534         // arguments) but that was not introduced with a "template<>" (or had
5535         // too few of them).
5536         Diag(D.getIdentifierLoc(), diag::err_template_spec_needs_header)
5537           << SourceRange(TemplateId->LAngleLoc, TemplateId->RAngleLoc)
5538           << FixItHint::CreateInsertion(
5539                                     D.getDeclSpec().getLocStart(),
5540                                         "template<> ");
5541         isFunctionTemplateSpecialization = true;
5542       } else {
5543         // "friend void foo<>(int);" is an implicit specialization decl.
5544         isFunctionTemplateSpecialization = true;
5545       }
5546     } else if (isFriend && isFunctionTemplateSpecialization) {
5547       // This combination is only possible in a recovery case;  the user
5548       // wrote something like:
5549       //   template <> friend void foo(int);
5550       // which we're recovering from as if the user had written:
5551       //   friend void foo<>(int);
5552       // Go ahead and fake up a template id.
5553       HasExplicitTemplateArgs = true;
5554         TemplateArgs.setLAngleLoc(D.getIdentifierLoc());
5555       TemplateArgs.setRAngleLoc(D.getIdentifierLoc());
5556     }
5557 
5558     // If it's a friend (and only if it's a friend), it's possible
5559     // that either the specialized function type or the specialized
5560     // template is dependent, and therefore matching will fail.  In
5561     // this case, don't check the specialization yet.
5562     bool InstantiationDependent = false;
5563     if (isFunctionTemplateSpecialization && isFriend &&
5564         (NewFD->getType()->isDependentType() || DC->isDependentContext() ||
5565          TemplateSpecializationType::anyDependentTemplateArguments(
5566             TemplateArgs.getArgumentArray(), TemplateArgs.size(),
5567             InstantiationDependent))) {
5568       assert(HasExplicitTemplateArgs &&
5569              "friend function specialization without template args");
5570       if (CheckDependentFunctionTemplateSpecialization(NewFD, TemplateArgs,
5571                                                        Previous))
5572         NewFD->setInvalidDecl();
5573     } else if (isFunctionTemplateSpecialization) {
5574       if (CurContext->isDependentContext() && CurContext->isRecord()
5575           && !isFriend) {
5576         isDependentClassScopeExplicitSpecialization = true;
5577         Diag(NewFD->getLocation(), getLangOpts().MicrosoftExt ?
5578           diag::ext_function_specialization_in_class :
5579           diag::err_function_specialization_in_class)
5580           << NewFD->getDeclName();
5581       } else if (CheckFunctionTemplateSpecialization(NewFD,
5582                                   (HasExplicitTemplateArgs ? &TemplateArgs : 0),
5583                                                      Previous))
5584         NewFD->setInvalidDecl();
5585 
5586       // C++ [dcl.stc]p1:
5587       //   A storage-class-specifier shall not be specified in an explicit
5588       //   specialization (14.7.3)
5589       if (SC != SC_None) {
5590         if (SC != NewFD->getStorageClass())
5591           Diag(NewFD->getLocation(),
5592                diag::err_explicit_specialization_inconsistent_storage_class)
5593             << SC
5594             << FixItHint::CreateRemoval(
5595                                       D.getDeclSpec().getStorageClassSpecLoc());
5596 
5597         else
5598           Diag(NewFD->getLocation(),
5599                diag::ext_explicit_specialization_storage_class)
5600             << FixItHint::CreateRemoval(
5601                                       D.getDeclSpec().getStorageClassSpecLoc());
5602       }
5603 
5604     } else if (isExplicitSpecialization && isa<CXXMethodDecl>(NewFD)) {
5605       if (CheckMemberSpecialization(NewFD, Previous))
5606           NewFD->setInvalidDecl();
5607     }
5608 
5609     // Perform semantic checking on the function declaration.
5610     if (!isDependentClassScopeExplicitSpecialization) {
5611       if (NewFD->isInvalidDecl()) {
5612         // If this is a class member, mark the class invalid immediately.
5613         // This avoids some consistency errors later.
5614         if (CXXMethodDecl* methodDecl = dyn_cast<CXXMethodDecl>(NewFD))
5615           methodDecl->getParent()->setInvalidDecl();
5616       } else {
5617         if (NewFD->isMain())
5618           CheckMain(NewFD, D.getDeclSpec());
5619         D.setRedeclaration(CheckFunctionDeclaration(S, NewFD, Previous,
5620                                                     isExplicitSpecialization));
5621       }
5622     }
5623 
5624     assert((NewFD->isInvalidDecl() || !D.isRedeclaration() ||
5625             Previous.getResultKind() != LookupResult::FoundOverloaded) &&
5626            "previous declaration set still overloaded");
5627 
5628     NamedDecl *PrincipalDecl = (FunctionTemplate
5629                                 ? cast<NamedDecl>(FunctionTemplate)
5630                                 : NewFD);
5631 
5632     if (isFriend && D.isRedeclaration()) {
5633       AccessSpecifier Access = AS_public;
5634       if (!NewFD->isInvalidDecl())
5635         Access = NewFD->getPreviousDecl()->getAccess();
5636 
5637       NewFD->setAccess(Access);
5638       if (FunctionTemplate) FunctionTemplate->setAccess(Access);
5639 
5640       PrincipalDecl->setObjectOfFriendDecl(true);
5641     }
5642 
5643     if (NewFD->isOverloadedOperator() && !DC->isRecord() &&
5644         PrincipalDecl->isInIdentifierNamespace(Decl::IDNS_Ordinary))
5645       PrincipalDecl->setNonMemberOperator();
5646 
5647     // If we have a function template, check the template parameter
5648     // list. This will check and merge default template arguments.
5649     if (FunctionTemplate) {
5650       FunctionTemplateDecl *PrevTemplate =
5651                                      FunctionTemplate->getPreviousDecl();
5652       CheckTemplateParameterList(FunctionTemplate->getTemplateParameters(),
5653                        PrevTemplate ? PrevTemplate->getTemplateParameters() : 0,
5654                             D.getDeclSpec().isFriendSpecified()
5655                               ? (D.isFunctionDefinition()
5656                                    ? TPC_FriendFunctionTemplateDefinition
5657                                    : TPC_FriendFunctionTemplate)
5658                               : (D.getCXXScopeSpec().isSet() &&
5659                                  DC && DC->isRecord() &&
5660                                  DC->isDependentContext())
5661                                   ? TPC_ClassTemplateMember
5662                                   : TPC_FunctionTemplate);
5663     }
5664 
5665     if (NewFD->isInvalidDecl()) {
5666       // Ignore all the rest of this.
5667     } else if (!D.isRedeclaration()) {
5668       struct ActOnFDArgs ExtraArgs = { S, D, TemplateParamLists,
5669                                        AddToScope };
5670       // Fake up an access specifier if it's supposed to be a class member.
5671       if (isa<CXXRecordDecl>(NewFD->getDeclContext()))
5672         NewFD->setAccess(AS_public);
5673 
5674       // Qualified decls generally require a previous declaration.
5675       if (D.getCXXScopeSpec().isSet()) {
5676         // ...with the major exception of templated-scope or
5677         // dependent-scope friend declarations.
5678 
5679         // TODO: we currently also suppress this check in dependent
5680         // contexts because (1) the parameter depth will be off when
5681         // matching friend templates and (2) we might actually be
5682         // selecting a friend based on a dependent factor.  But there
5683         // are situations where these conditions don't apply and we
5684         // can actually do this check immediately.
5685         if (isFriend &&
5686             (TemplateParamLists.size() ||
5687              D.getCXXScopeSpec().getScopeRep()->isDependent() ||
5688              CurContext->isDependentContext())) {
5689           // ignore these
5690         } else {
5691           // The user tried to provide an out-of-line definition for a
5692           // function that is a member of a class or namespace, but there
5693           // was no such member function declared (C++ [class.mfct]p2,
5694           // C++ [namespace.memdef]p2). For example:
5695           //
5696           // class X {
5697           //   void f() const;
5698           // };
5699           //
5700           // void X::f() { } // ill-formed
5701           //
5702           // Complain about this problem, and attempt to suggest close
5703           // matches (e.g., those that differ only in cv-qualifiers and
5704           // whether the parameter types are references).
5705 
5706           if (NamedDecl *Result = DiagnoseInvalidRedeclaration(*this, Previous,
5707                                                                NewFD,
5708                                                                ExtraArgs)) {
5709             AddToScope = ExtraArgs.AddToScope;
5710             return Result;
5711           }
5712         }
5713 
5714         // Unqualified local friend declarations are required to resolve
5715         // to something.
5716       } else if (isFriend && cast<CXXRecordDecl>(CurContext)->isLocalClass()) {
5717         if (NamedDecl *Result = DiagnoseInvalidRedeclaration(*this, Previous,
5718                                                              NewFD,
5719                                                              ExtraArgs)) {
5720           AddToScope = ExtraArgs.AddToScope;
5721           return Result;
5722         }
5723       }
5724 
5725     } else if (!D.isFunctionDefinition() && D.getCXXScopeSpec().isSet() &&
5726                !isFriend && !isFunctionTemplateSpecialization &&
5727                !isExplicitSpecialization) {
5728       // An out-of-line member function declaration must also be a
5729       // definition (C++ [dcl.meaning]p1).
5730       // Note that this is not the case for explicit specializations of
5731       // function templates or member functions of class templates, per
5732       // C++ [temp.expl.spec]p2. We also allow these declarations as an
5733       // extension for compatibility with old SWIG code which likes to
5734       // generate them.
5735       Diag(NewFD->getLocation(), diag::ext_out_of_line_declaration)
5736         << D.getCXXScopeSpec().getRange();
5737     }
5738   }
5739 
5740   AddKnownFunctionAttributes(NewFD);
5741 
5742   if (NewFD->hasAttr<OverloadableAttr>() &&
5743       !NewFD->getType()->getAs<FunctionProtoType>()) {
5744     Diag(NewFD->getLocation(),
5745          diag::err_attribute_overloadable_no_prototype)
5746       << NewFD;
5747 
5748     // Turn this into a variadic function with no parameters.
5749     const FunctionType *FT = NewFD->getType()->getAs<FunctionType>();
5750     FunctionProtoType::ExtProtoInfo EPI;
5751     EPI.Variadic = true;
5752     EPI.ExtInfo = FT->getExtInfo();
5753 
5754     QualType R = Context.getFunctionType(FT->getResultType(), 0, 0, EPI);
5755     NewFD->setType(R);
5756   }
5757 
5758   // If there's a #pragma GCC visibility in scope, and this isn't a class
5759   // member, set the visibility of this function.
5760   if (NewFD->getLinkage() == ExternalLinkage && !DC->isRecord())
5761     AddPushedVisibilityAttribute(NewFD);
5762 
5763   // If there's a #pragma clang arc_cf_code_audited in scope, consider
5764   // marking the function.
5765   AddCFAuditedAttribute(NewFD);
5766 
5767   // If this is a locally-scoped extern C function, update the
5768   // map of such names.
5769   if (CurContext->isFunctionOrMethod() && NewFD->isExternC()
5770       && !NewFD->isInvalidDecl())
5771     RegisterLocallyScopedExternCDecl(NewFD, Previous, S);
5772 
5773   // Set this FunctionDecl's range up to the right paren.
5774   NewFD->setRangeEnd(D.getSourceRange().getEnd());
5775 
5776   if (getLangOpts().CPlusPlus) {
5777     if (FunctionTemplate) {
5778       if (NewFD->isInvalidDecl())
5779         FunctionTemplate->setInvalidDecl();
5780       return FunctionTemplate;
5781     }
5782   }
5783 
5784   // OpenCL v1.2 s6.8 static is invalid for kernel functions.
5785   if ((getLangOpts().OpenCLVersion >= 120)
5786       && NewFD->hasAttr<OpenCLKernelAttr>()
5787       && (SC == SC_Static)) {
5788     Diag(D.getIdentifierLoc(), diag::err_static_kernel);
5789     D.setInvalidType();
5790   }
5791 
5792   MarkUnusedFileScopedDecl(NewFD);
5793 
5794   if (getLangOpts().CUDA)
5795     if (IdentifierInfo *II = NewFD->getIdentifier())
5796       if (!NewFD->isInvalidDecl() &&
5797           NewFD->getDeclContext()->getRedeclContext()->isTranslationUnit()) {
5798         if (II->isStr("cudaConfigureCall")) {
5799           if (!R->getAs<FunctionType>()->getResultType()->isScalarType())
5800             Diag(NewFD->getLocation(), diag::err_config_scalar_return);
5801 
5802           Context.setcudaConfigureCallDecl(NewFD);
5803         }
5804       }
5805 
5806   // Here we have an function template explicit specialization at class scope.
5807   // The actually specialization will be postponed to template instatiation
5808   // time via the ClassScopeFunctionSpecializationDecl node.
5809   if (isDependentClassScopeExplicitSpecialization) {
5810     ClassScopeFunctionSpecializationDecl *NewSpec =
5811                          ClassScopeFunctionSpecializationDecl::Create(
5812                                 Context, CurContext, SourceLocation(),
5813                                 cast<CXXMethodDecl>(NewFD),
5814                                 HasExplicitTemplateArgs, TemplateArgs);
5815     CurContext->addDecl(NewSpec);
5816     AddToScope = false;
5817   }
5818 
5819   return NewFD;
5820 }
5821 
5822 /// \brief Perform semantic checking of a new function declaration.
5823 ///
5824 /// Performs semantic analysis of the new function declaration
5825 /// NewFD. This routine performs all semantic checking that does not
5826 /// require the actual declarator involved in the declaration, and is
5827 /// used both for the declaration of functions as they are parsed
5828 /// (called via ActOnDeclarator) and for the declaration of functions
5829 /// that have been instantiated via C++ template instantiation (called
5830 /// via InstantiateDecl).
5831 ///
5832 /// \param IsExplicitSpecialization whether this new function declaration is
5833 /// an explicit specialization of the previous declaration.
5834 ///
5835 /// This sets NewFD->isInvalidDecl() to true if there was an error.
5836 ///
5837 /// \returns true if the function declaration is a redeclaration.
5838 bool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD,
5839                                     LookupResult &Previous,
5840                                     bool IsExplicitSpecialization) {
5841   assert(!NewFD->getResultType()->isVariablyModifiedType()
5842          && "Variably modified return types are not handled here");
5843 
5844   // Check for a previous declaration of this name.
5845   if (Previous.empty() && NewFD->isExternC()) {
5846     // Since we did not find anything by this name and we're declaring
5847     // an extern "C" function, look for a non-visible extern "C"
5848     // declaration with the same name.
5849     llvm::DenseMap<DeclarationName, NamedDecl *>::iterator Pos
5850       = findLocallyScopedExternalDecl(NewFD->getDeclName());
5851     if (Pos != LocallyScopedExternalDecls.end())
5852       Previous.addDecl(Pos->second);
5853   }
5854 
5855   bool Redeclaration = false;
5856 
5857   // Merge or overload the declaration with an existing declaration of
5858   // the same name, if appropriate.
5859   if (!Previous.empty()) {
5860     // Determine whether NewFD is an overload of PrevDecl or
5861     // a declaration that requires merging. If it's an overload,
5862     // there's no more work to do here; we'll just add the new
5863     // function to the scope.
5864 
5865     NamedDecl *OldDecl = 0;
5866     if (!AllowOverloadingOfFunction(Previous, Context)) {
5867       Redeclaration = true;
5868       OldDecl = Previous.getFoundDecl();
5869     } else {
5870       switch (CheckOverload(S, NewFD, Previous, OldDecl,
5871                             /*NewIsUsingDecl*/ false)) {
5872       case Ovl_Match:
5873         Redeclaration = true;
5874         break;
5875 
5876       case Ovl_NonFunction:
5877         Redeclaration = true;
5878         break;
5879 
5880       case Ovl_Overload:
5881         Redeclaration = false;
5882         break;
5883       }
5884 
5885       if (!getLangOpts().CPlusPlus && !NewFD->hasAttr<OverloadableAttr>()) {
5886         // If a function name is overloadable in C, then every function
5887         // with that name must be marked "overloadable".
5888         Diag(NewFD->getLocation(), diag::err_attribute_overloadable_missing)
5889           << Redeclaration << NewFD;
5890         NamedDecl *OverloadedDecl = 0;
5891         if (Redeclaration)
5892           OverloadedDecl = OldDecl;
5893         else if (!Previous.empty())
5894           OverloadedDecl = Previous.getRepresentativeDecl();
5895         if (OverloadedDecl)
5896           Diag(OverloadedDecl->getLocation(),
5897                diag::note_attribute_overloadable_prev_overload);
5898         NewFD->addAttr(::new (Context) OverloadableAttr(SourceLocation(),
5899                                                         Context));
5900       }
5901     }
5902 
5903     if (Redeclaration) {
5904       // NewFD and OldDecl represent declarations that need to be
5905       // merged.
5906       if (MergeFunctionDecl(NewFD, OldDecl, S)) {
5907         NewFD->setInvalidDecl();
5908         return Redeclaration;
5909       }
5910 
5911       Previous.clear();
5912       Previous.addDecl(OldDecl);
5913 
5914       if (FunctionTemplateDecl *OldTemplateDecl
5915                                     = dyn_cast<FunctionTemplateDecl>(OldDecl)) {
5916         NewFD->setPreviousDeclaration(OldTemplateDecl->getTemplatedDecl());
5917         FunctionTemplateDecl *NewTemplateDecl
5918           = NewFD->getDescribedFunctionTemplate();
5919         assert(NewTemplateDecl && "Template/non-template mismatch");
5920         if (CXXMethodDecl *Method
5921               = dyn_cast<CXXMethodDecl>(NewTemplateDecl->getTemplatedDecl())) {
5922           Method->setAccess(OldTemplateDecl->getAccess());
5923           NewTemplateDecl->setAccess(OldTemplateDecl->getAccess());
5924         }
5925 
5926         // If this is an explicit specialization of a member that is a function
5927         // template, mark it as a member specialization.
5928         if (IsExplicitSpecialization &&
5929             NewTemplateDecl->getInstantiatedFromMemberTemplate()) {
5930           NewTemplateDecl->setMemberSpecialization();
5931           assert(OldTemplateDecl->isMemberSpecialization());
5932         }
5933 
5934       } else {
5935         if (isa<CXXMethodDecl>(NewFD)) // Set access for out-of-line definitions
5936           NewFD->setAccess(OldDecl->getAccess());
5937         NewFD->setPreviousDeclaration(cast<FunctionDecl>(OldDecl));
5938       }
5939     }
5940   }
5941 
5942   // Semantic checking for this function declaration (in isolation).
5943   if (getLangOpts().CPlusPlus) {
5944     // C++-specific checks.
5945     if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(NewFD)) {
5946       CheckConstructor(Constructor);
5947     } else if (CXXDestructorDecl *Destructor =
5948                 dyn_cast<CXXDestructorDecl>(NewFD)) {
5949       CXXRecordDecl *Record = Destructor->getParent();
5950       QualType ClassType = Context.getTypeDeclType(Record);
5951 
5952       // FIXME: Shouldn't we be able to perform this check even when the class
5953       // type is dependent? Both gcc and edg can handle that.
5954       if (!ClassType->isDependentType()) {
5955         DeclarationName Name
5956           = Context.DeclarationNames.getCXXDestructorName(
5957                                         Context.getCanonicalType(ClassType));
5958         if (NewFD->getDeclName() != Name) {
5959           Diag(NewFD->getLocation(), diag::err_destructor_name);
5960           NewFD->setInvalidDecl();
5961           return Redeclaration;
5962         }
5963       }
5964     } else if (CXXConversionDecl *Conversion
5965                = dyn_cast<CXXConversionDecl>(NewFD)) {
5966       ActOnConversionDeclarator(Conversion);
5967     }
5968 
5969     // Find any virtual functions that this function overrides.
5970     if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(NewFD)) {
5971       if (!Method->isFunctionTemplateSpecialization() &&
5972           !Method->getDescribedFunctionTemplate()) {
5973         if (AddOverriddenMethods(Method->getParent(), Method)) {
5974           // If the function was marked as "static", we have a problem.
5975           if (NewFD->getStorageClass() == SC_Static) {
5976             Diag(NewFD->getLocation(), diag::err_static_overrides_virtual)
5977               << NewFD->getDeclName();
5978             for (CXXMethodDecl::method_iterator
5979                       Overridden = Method->begin_overridden_methods(),
5980                    OverriddenEnd = Method->end_overridden_methods();
5981                  Overridden != OverriddenEnd;
5982                  ++Overridden) {
5983               Diag((*Overridden)->getLocation(),
5984                    diag::note_overridden_virtual_function);
5985             }
5986           }
5987         }
5988       }
5989 
5990       if (Method->isStatic())
5991         checkThisInStaticMemberFunctionType(Method);
5992     }
5993 
5994     // Extra checking for C++ overloaded operators (C++ [over.oper]).
5995     if (NewFD->isOverloadedOperator() &&
5996         CheckOverloadedOperatorDeclaration(NewFD)) {
5997       NewFD->setInvalidDecl();
5998       return Redeclaration;
5999     }
6000 
6001     // Extra checking for C++0x literal operators (C++0x [over.literal]).
6002     if (NewFD->getLiteralIdentifier() &&
6003         CheckLiteralOperatorDeclaration(NewFD)) {
6004       NewFD->setInvalidDecl();
6005       return Redeclaration;
6006     }
6007 
6008     // In C++, check default arguments now that we have merged decls. Unless
6009     // the lexical context is the class, because in this case this is done
6010     // during delayed parsing anyway.
6011     if (!CurContext->isRecord())
6012       CheckCXXDefaultArguments(NewFD);
6013 
6014     // If this function declares a builtin function, check the type of this
6015     // declaration against the expected type for the builtin.
6016     if (unsigned BuiltinID = NewFD->getBuiltinID()) {
6017       ASTContext::GetBuiltinTypeError Error;
6018       QualType T = Context.GetBuiltinType(BuiltinID, Error);
6019       if (!T.isNull() && !Context.hasSameType(T, NewFD->getType())) {
6020         // The type of this function differs from the type of the builtin,
6021         // so forget about the builtin entirely.
6022         Context.BuiltinInfo.ForgetBuiltin(BuiltinID, Context.Idents);
6023       }
6024     }
6025 
6026     // If this function is declared as being extern "C", then check to see if
6027     // the function returns a UDT (class, struct, or union type) that is not C
6028     // compatible, and if it does, warn the user.
6029     if (NewFD->isExternC()) {
6030       QualType R = NewFD->getResultType();
6031       if (R->isIncompleteType() && !R->isVoidType())
6032         Diag(NewFD->getLocation(), diag::warn_return_value_udt_incomplete)
6033             << NewFD << R;
6034       else if (!R.isPODType(Context) && !R->isVoidType())
6035         Diag(NewFD->getLocation(), diag::warn_return_value_udt) << NewFD << R;
6036     }
6037   }
6038   return Redeclaration;
6039 }
6040 
6041 void Sema::CheckMain(FunctionDecl* FD, const DeclSpec& DS) {
6042   // C++11 [basic.start.main]p3:  A program that declares main to be inline,
6043   //   static or constexpr is ill-formed.
6044   // C99 6.7.4p4:  In a hosted environment, the inline function specifier
6045   //   shall not appear in a declaration of main.
6046   // static main is not an error under C99, but we should warn about it.
6047   if (FD->getStorageClass() == SC_Static)
6048     Diag(DS.getStorageClassSpecLoc(), getLangOpts().CPlusPlus
6049          ? diag::err_static_main : diag::warn_static_main)
6050       << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());
6051   if (FD->isInlineSpecified())
6052     Diag(DS.getInlineSpecLoc(), diag::err_inline_main)
6053       << FixItHint::CreateRemoval(DS.getInlineSpecLoc());
6054   if (FD->isConstexpr()) {
6055     Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_main)
6056       << FixItHint::CreateRemoval(DS.getConstexprSpecLoc());
6057     FD->setConstexpr(false);
6058   }
6059 
6060   QualType T = FD->getType();
6061   assert(T->isFunctionType() && "function decl is not of function type");
6062   const FunctionType* FT = T->castAs<FunctionType>();
6063 
6064   // All the standards say that main() should should return 'int'.
6065   if (Context.hasSameUnqualifiedType(FT->getResultType(), Context.IntTy)) {
6066     // In C and C++, main magically returns 0 if you fall off the end;
6067     // set the flag which tells us that.
6068     // This is C++ [basic.start.main]p5 and C99 5.1.2.2.3.
6069     FD->setHasImplicitReturnZero(true);
6070 
6071   // In C with GNU extensions we allow main() to have non-integer return
6072   // type, but we should warn about the extension, and we disable the
6073   // implicit-return-zero rule.
6074   } else if (getLangOpts().GNUMode && !getLangOpts().CPlusPlus) {
6075     Diag(FD->getTypeSpecStartLoc(), diag::ext_main_returns_nonint);
6076 
6077   // Otherwise, this is just a flat-out error.
6078   } else {
6079     Diag(FD->getTypeSpecStartLoc(), diag::err_main_returns_nonint);
6080     FD->setInvalidDecl(true);
6081   }
6082 
6083   // Treat protoless main() as nullary.
6084   if (isa<FunctionNoProtoType>(FT)) return;
6085 
6086   const FunctionProtoType* FTP = cast<const FunctionProtoType>(FT);
6087   unsigned nparams = FTP->getNumArgs();
6088   assert(FD->getNumParams() == nparams);
6089 
6090   bool HasExtraParameters = (nparams > 3);
6091 
6092   // Darwin passes an undocumented fourth argument of type char**.  If
6093   // other platforms start sprouting these, the logic below will start
6094   // getting shifty.
6095   if (nparams == 4 && Context.getTargetInfo().getTriple().isOSDarwin())
6096     HasExtraParameters = false;
6097 
6098   if (HasExtraParameters) {
6099     Diag(FD->getLocation(), diag::err_main_surplus_args) << nparams;
6100     FD->setInvalidDecl(true);
6101     nparams = 3;
6102   }
6103 
6104   // FIXME: a lot of the following diagnostics would be improved
6105   // if we had some location information about types.
6106 
6107   QualType CharPP =
6108     Context.getPointerType(Context.getPointerType(Context.CharTy));
6109   QualType Expected[] = { Context.IntTy, CharPP, CharPP, CharPP };
6110 
6111   for (unsigned i = 0; i < nparams; ++i) {
6112     QualType AT = FTP->getArgType(i);
6113 
6114     bool mismatch = true;
6115 
6116     if (Context.hasSameUnqualifiedType(AT, Expected[i]))
6117       mismatch = false;
6118     else if (Expected[i] == CharPP) {
6119       // As an extension, the following forms are okay:
6120       //   char const **
6121       //   char const * const *
6122       //   char * const *
6123 
6124       QualifierCollector qs;
6125       const PointerType* PT;
6126       if ((PT = qs.strip(AT)->getAs<PointerType>()) &&
6127           (PT = qs.strip(PT->getPointeeType())->getAs<PointerType>()) &&
6128           (QualType(qs.strip(PT->getPointeeType()), 0) == Context.CharTy)) {
6129         qs.removeConst();
6130         mismatch = !qs.empty();
6131       }
6132     }
6133 
6134     if (mismatch) {
6135       Diag(FD->getLocation(), diag::err_main_arg_wrong) << i << Expected[i];
6136       // TODO: suggest replacing given type with expected type
6137       FD->setInvalidDecl(true);
6138     }
6139   }
6140 
6141   if (nparams == 1 && !FD->isInvalidDecl()) {
6142     Diag(FD->getLocation(), diag::warn_main_one_arg);
6143   }
6144 
6145   if (!FD->isInvalidDecl() && FD->getDescribedFunctionTemplate()) {
6146     Diag(FD->getLocation(), diag::err_main_template_decl);
6147     FD->setInvalidDecl();
6148   }
6149 }
6150 
6151 bool Sema::CheckForConstantInitializer(Expr *Init, QualType DclT) {
6152   // FIXME: Need strict checking.  In C89, we need to check for
6153   // any assignment, increment, decrement, function-calls, or
6154   // commas outside of a sizeof.  In C99, it's the same list,
6155   // except that the aforementioned are allowed in unevaluated
6156   // expressions.  Everything else falls under the
6157   // "may accept other forms of constant expressions" exception.
6158   // (We never end up here for C++, so the constant expression
6159   // rules there don't matter.)
6160   if (Init->isConstantInitializer(Context, false))
6161     return false;
6162   Diag(Init->getExprLoc(), diag::err_init_element_not_constant)
6163     << Init->getSourceRange();
6164   return true;
6165 }
6166 
6167 namespace {
6168   // Visits an initialization expression to see if OrigDecl is evaluated in
6169   // its own initialization and throws a warning if it does.
6170   class SelfReferenceChecker
6171       : public EvaluatedExprVisitor<SelfReferenceChecker> {
6172     Sema &S;
6173     Decl *OrigDecl;
6174     bool isRecordType;
6175     bool isPODType;
6176 
6177   public:
6178     typedef EvaluatedExprVisitor<SelfReferenceChecker> Inherited;
6179 
6180     SelfReferenceChecker(Sema &S, Decl *OrigDecl) : Inherited(S.Context),
6181                                                     S(S), OrigDecl(OrigDecl) {
6182       isPODType = false;
6183       isRecordType = false;
6184       if (ValueDecl *VD = dyn_cast<ValueDecl>(OrigDecl)) {
6185         isPODType = VD->getType().isPODType(S.Context);
6186         isRecordType = VD->getType()->isRecordType();
6187       }
6188     }
6189 
6190     // Sometimes, the expression passed in lacks the casts that are used
6191     // to determine which DeclRefExpr's to check.  Assume that the casts
6192     // are present and continue visiting the expression.
6193     void HandleExpr(Expr *E) {
6194       // Skip checking T a = a where T is not a record type.  Doing so is a
6195       // way to silence uninitialized warnings.
6196       if (isRecordType)
6197         if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E))
6198           HandleDeclRefExpr(DRE);
6199 
6200       if (ConditionalOperator *CO = dyn_cast<ConditionalOperator>(E)) {
6201         HandleValue(CO->getTrueExpr());
6202         HandleValue(CO->getFalseExpr());
6203       }
6204 
6205       Visit(E);
6206     }
6207 
6208     // For most expressions, the cast is directly above the DeclRefExpr.
6209     // For conditional operators, the cast can be outside the conditional
6210     // operator if both expressions are DeclRefExpr's.
6211     void HandleValue(Expr *E) {
6212       E = E->IgnoreParenImpCasts();
6213       if (DeclRefExpr* DRE = dyn_cast<DeclRefExpr>(E)) {
6214         HandleDeclRefExpr(DRE);
6215         return;
6216       }
6217 
6218       if (ConditionalOperator *CO = dyn_cast<ConditionalOperator>(E)) {
6219         HandleValue(CO->getTrueExpr());
6220         HandleValue(CO->getFalseExpr());
6221       }
6222     }
6223 
6224     void VisitImplicitCastExpr(ImplicitCastExpr *E) {
6225       if ((!isRecordType && E->getCastKind() == CK_LValueToRValue) ||
6226           (isRecordType && E->getCastKind() == CK_NoOp))
6227         HandleValue(E->getSubExpr());
6228 
6229       Inherited::VisitImplicitCastExpr(E);
6230     }
6231 
6232     void VisitMemberExpr(MemberExpr *E) {
6233       // Don't warn on arrays since they can be treated as pointers.
6234       if (E->getType()->canDecayToPointerType()) return;
6235 
6236       ValueDecl *VD = E->getMemberDecl();
6237       CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(VD);
6238       if (isa<FieldDecl>(VD) || (MD && !MD->isStatic()))
6239         if (DeclRefExpr *DRE
6240               = dyn_cast<DeclRefExpr>(E->getBase()->IgnoreParenImpCasts())) {
6241           HandleDeclRefExpr(DRE);
6242           return;
6243         }
6244 
6245       Inherited::VisitMemberExpr(E);
6246     }
6247 
6248     void VisitUnaryOperator(UnaryOperator *E) {
6249       // For POD record types, addresses of its own members are well-defined.
6250       if (E->getOpcode() == UO_AddrOf && isRecordType && isPODType &&
6251           isa<MemberExpr>(E->getSubExpr()->IgnoreParens())) return;
6252       Inherited::VisitUnaryOperator(E);
6253     }
6254 
6255     void VisitObjCMessageExpr(ObjCMessageExpr *E) { return; }
6256 
6257     void HandleDeclRefExpr(DeclRefExpr *DRE) {
6258       Decl* ReferenceDecl = DRE->getDecl();
6259       if (OrigDecl != ReferenceDecl) return;
6260       LookupResult Result(S, DRE->getNameInfo(), Sema::LookupOrdinaryName,
6261                           Sema::NotForRedeclaration);
6262       S.DiagRuntimeBehavior(DRE->getLocStart(), DRE,
6263                             S.PDiag(diag::warn_uninit_self_reference_in_init)
6264                               << Result.getLookupName()
6265                               << OrigDecl->getLocation()
6266                               << DRE->getSourceRange());
6267     }
6268   };
6269 }
6270 
6271 /// CheckSelfReference - Warns if OrigDecl is used in expression E.
6272 void Sema::CheckSelfReference(Decl* OrigDecl, Expr *E) {
6273   SelfReferenceChecker(*this, OrigDecl).HandleExpr(E);
6274 }
6275 
6276 /// AddInitializerToDecl - Adds the initializer Init to the
6277 /// declaration dcl. If DirectInit is true, this is C++ direct
6278 /// initialization rather than copy initialization.
6279 void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init,
6280                                 bool DirectInit, bool TypeMayContainAuto) {
6281   // If there is no declaration, there was an error parsing it.  Just ignore
6282   // the initializer.
6283   if (RealDecl == 0 || RealDecl->isInvalidDecl())
6284     return;
6285 
6286   if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(RealDecl)) {
6287     // With declarators parsed the way they are, the parser cannot
6288     // distinguish between a normal initializer and a pure-specifier.
6289     // Thus this grotesque test.
6290     IntegerLiteral *IL;
6291     if ((IL = dyn_cast<IntegerLiteral>(Init)) && IL->getValue() == 0 &&
6292         Context.getCanonicalType(IL->getType()) == Context.IntTy)
6293       CheckPureMethod(Method, Init->getSourceRange());
6294     else {
6295       Diag(Method->getLocation(), diag::err_member_function_initialization)
6296         << Method->getDeclName() << Init->getSourceRange();
6297       Method->setInvalidDecl();
6298     }
6299     return;
6300   }
6301 
6302   VarDecl *VDecl = dyn_cast<VarDecl>(RealDecl);
6303   if (!VDecl) {
6304     assert(!isa<FieldDecl>(RealDecl) && "field init shouldn't get here");
6305     Diag(RealDecl->getLocation(), diag::err_illegal_initializer);
6306     RealDecl->setInvalidDecl();
6307     return;
6308   }
6309 
6310   // Check for self-references within variable initializers.
6311   // Variables declared within a function/method body are handled
6312   // by a dataflow analysis.
6313   if (!VDecl->hasLocalStorage() && !VDecl->isStaticLocal())
6314     CheckSelfReference(RealDecl, Init);
6315 
6316   ParenListExpr *CXXDirectInit = dyn_cast<ParenListExpr>(Init);
6317 
6318   // C++11 [decl.spec.auto]p6. Deduce the type which 'auto' stands in for.
6319   AutoType *Auto = 0;
6320   if (TypeMayContainAuto &&
6321       (Auto = VDecl->getType()->getContainedAutoType()) &&
6322       !Auto->isDeduced()) {
6323     Expr *DeduceInit = Init;
6324     // Initializer could be a C++ direct-initializer. Deduction only works if it
6325     // contains exactly one expression.
6326     if (CXXDirectInit) {
6327       if (CXXDirectInit->getNumExprs() == 0) {
6328         // It isn't possible to write this directly, but it is possible to
6329         // end up in this situation with "auto x(some_pack...);"
6330         Diag(CXXDirectInit->getLocStart(),
6331              diag::err_auto_var_init_no_expression)
6332           << VDecl->getDeclName() << VDecl->getType()
6333           << VDecl->getSourceRange();
6334         RealDecl->setInvalidDecl();
6335         return;
6336       } else if (CXXDirectInit->getNumExprs() > 1) {
6337         Diag(CXXDirectInit->getExpr(1)->getLocStart(),
6338              diag::err_auto_var_init_multiple_expressions)
6339           << VDecl->getDeclName() << VDecl->getType()
6340           << VDecl->getSourceRange();
6341         RealDecl->setInvalidDecl();
6342         return;
6343       } else {
6344         DeduceInit = CXXDirectInit->getExpr(0);
6345       }
6346     }
6347     TypeSourceInfo *DeducedType = 0;
6348     if (DeduceAutoType(VDecl->getTypeSourceInfo(), DeduceInit, DeducedType) ==
6349             DAR_Failed)
6350       DiagnoseAutoDeductionFailure(VDecl, DeduceInit);
6351     if (!DeducedType) {
6352       RealDecl->setInvalidDecl();
6353       return;
6354     }
6355     VDecl->setTypeSourceInfo(DeducedType);
6356     VDecl->setType(DeducedType->getType());
6357     VDecl->ClearLinkageCache();
6358 
6359     // In ARC, infer lifetime.
6360     if (getLangOpts().ObjCAutoRefCount && inferObjCARCLifetime(VDecl))
6361       VDecl->setInvalidDecl();
6362 
6363     // Warn if we deduced 'id'. 'auto' usually implies type-safety, but using
6364     // 'id' instead of a specific object type prevents most of our usual checks.
6365     // We only want to warn outside of template instantiations, though:
6366     // inside a template, the 'id' could have come from a parameter.
6367     if (ActiveTemplateInstantiations.empty() &&
6368         DeducedType->getType()->isObjCIdType()) {
6369       SourceLocation Loc = DeducedType->getTypeLoc().getBeginLoc();
6370       Diag(Loc, diag::warn_auto_var_is_id)
6371         << VDecl->getDeclName() << DeduceInit->getSourceRange();
6372     }
6373 
6374     // If this is a redeclaration, check that the type we just deduced matches
6375     // the previously declared type.
6376     if (VarDecl *Old = VDecl->getPreviousDecl())
6377       MergeVarDeclTypes(VDecl, Old);
6378   }
6379 
6380   if (VDecl->isLocalVarDecl() && VDecl->hasExternalStorage()) {
6381     // C99 6.7.8p5. C++ has no such restriction, but that is a defect.
6382     Diag(VDecl->getLocation(), diag::err_block_extern_cant_init);
6383     VDecl->setInvalidDecl();
6384     return;
6385   }
6386 
6387   if (!VDecl->getType()->isDependentType()) {
6388     // A definition must end up with a complete type, which means it must be
6389     // complete with the restriction that an array type might be completed by
6390     // the initializer; note that later code assumes this restriction.
6391     QualType BaseDeclType = VDecl->getType();
6392     if (const ArrayType *Array = Context.getAsIncompleteArrayType(BaseDeclType))
6393       BaseDeclType = Array->getElementType();
6394     if (RequireCompleteType(VDecl->getLocation(), BaseDeclType,
6395                             diag::err_typecheck_decl_incomplete_type)) {
6396       RealDecl->setInvalidDecl();
6397       return;
6398     }
6399 
6400     // The variable can not have an abstract class type.
6401     if (RequireNonAbstractType(VDecl->getLocation(), VDecl->getType(),
6402                                diag::err_abstract_type_in_decl,
6403                                AbstractVariableType))
6404       VDecl->setInvalidDecl();
6405   }
6406 
6407   const VarDecl *Def;
6408   if ((Def = VDecl->getDefinition()) && Def != VDecl) {
6409     Diag(VDecl->getLocation(), diag::err_redefinition)
6410       << VDecl->getDeclName();
6411     Diag(Def->getLocation(), diag::note_previous_definition);
6412     VDecl->setInvalidDecl();
6413     return;
6414   }
6415 
6416   const VarDecl* PrevInit = 0;
6417   if (getLangOpts().CPlusPlus) {
6418     // C++ [class.static.data]p4
6419     //   If a static data member is of const integral or const
6420     //   enumeration type, its declaration in the class definition can
6421     //   specify a constant-initializer which shall be an integral
6422     //   constant expression (5.19). In that case, the member can appear
6423     //   in integral constant expressions. The member shall still be
6424     //   defined in a namespace scope if it is used in the program and the
6425     //   namespace scope definition shall not contain an initializer.
6426     //
6427     // We already performed a redefinition check above, but for static
6428     // data members we also need to check whether there was an in-class
6429     // declaration with an initializer.
6430     if (VDecl->isStaticDataMember() && VDecl->getAnyInitializer(PrevInit)) {
6431       Diag(VDecl->getLocation(), diag::err_redefinition)
6432         << VDecl->getDeclName();
6433       Diag(PrevInit->getLocation(), diag::note_previous_definition);
6434       return;
6435     }
6436 
6437     if (VDecl->hasLocalStorage())
6438       getCurFunction()->setHasBranchProtectedScope();
6439 
6440     if (DiagnoseUnexpandedParameterPack(Init, UPPC_Initializer)) {
6441       VDecl->setInvalidDecl();
6442       return;
6443     }
6444   }
6445 
6446   // OpenCL 1.1 6.5.2: "Variables allocated in the __local address space inside
6447   // a kernel function cannot be initialized."
6448   if (VDecl->getStorageClass() == SC_OpenCLWorkGroupLocal) {
6449     Diag(VDecl->getLocation(), diag::err_local_cant_init);
6450     VDecl->setInvalidDecl();
6451     return;
6452   }
6453 
6454   // Get the decls type and save a reference for later, since
6455   // CheckInitializerTypes may change it.
6456   QualType DclT = VDecl->getType(), SavT = DclT;
6457 
6458   // Top-level message sends default to 'id' when we're in a debugger
6459   // and we are assigning it to a variable of 'id' type.
6460   if (getLangOpts().DebuggerCastResultToId && DclT->isObjCIdType())
6461     if (Init->getType() == Context.UnknownAnyTy && isa<ObjCMessageExpr>(Init)) {
6462       ExprResult Result = forceUnknownAnyToType(Init, Context.getObjCIdType());
6463       if (Result.isInvalid()) {
6464         VDecl->setInvalidDecl();
6465         return;
6466       }
6467       Init = Result.take();
6468     }
6469 
6470   // Perform the initialization.
6471   if (!VDecl->isInvalidDecl()) {
6472     InitializedEntity Entity = InitializedEntity::InitializeVariable(VDecl);
6473     InitializationKind Kind
6474       = DirectInit ?
6475           CXXDirectInit ? InitializationKind::CreateDirect(VDecl->getLocation(),
6476                                                            Init->getLocStart(),
6477                                                            Init->getLocEnd())
6478                         : InitializationKind::CreateDirectList(
6479                                                           VDecl->getLocation())
6480                    : InitializationKind::CreateCopy(VDecl->getLocation(),
6481                                                     Init->getLocStart());
6482 
6483     Expr **Args = &Init;
6484     unsigned NumArgs = 1;
6485     if (CXXDirectInit) {
6486       Args = CXXDirectInit->getExprs();
6487       NumArgs = CXXDirectInit->getNumExprs();
6488     }
6489     InitializationSequence InitSeq(*this, Entity, Kind, Args, NumArgs);
6490     ExprResult Result = InitSeq.Perform(*this, Entity, Kind,
6491                                               MultiExprArg(*this, Args,NumArgs),
6492                                               &DclT);
6493     if (Result.isInvalid()) {
6494       VDecl->setInvalidDecl();
6495       return;
6496     }
6497 
6498     Init = Result.takeAs<Expr>();
6499   }
6500 
6501   // If the type changed, it means we had an incomplete type that was
6502   // completed by the initializer. For example:
6503   //   int ary[] = { 1, 3, 5 };
6504   // "ary" transitions from an IncompleteArrayType to a ConstantArrayType.
6505   if (!VDecl->isInvalidDecl() && (DclT != SavT))
6506     VDecl->setType(DclT);
6507 
6508   // Check any implicit conversions within the expression.
6509   CheckImplicitConversions(Init, VDecl->getLocation());
6510 
6511   if (!VDecl->isInvalidDecl())
6512     checkUnsafeAssigns(VDecl->getLocation(), VDecl->getType(), Init);
6513 
6514   Init = MaybeCreateExprWithCleanups(Init);
6515   // Attach the initializer to the decl.
6516   VDecl->setInit(Init);
6517 
6518   if (VDecl->isLocalVarDecl()) {
6519     // C99 6.7.8p4: All the expressions in an initializer for an object that has
6520     // static storage duration shall be constant expressions or string literals.
6521     // C++ does not have this restriction.
6522     if (!getLangOpts().CPlusPlus && !VDecl->isInvalidDecl() &&
6523         VDecl->getStorageClass() == SC_Static)
6524       CheckForConstantInitializer(Init, DclT);
6525   } else if (VDecl->isStaticDataMember() &&
6526              VDecl->getLexicalDeclContext()->isRecord()) {
6527     // This is an in-class initialization for a static data member, e.g.,
6528     //
6529     // struct S {
6530     //   static const int value = 17;
6531     // };
6532 
6533     // C++ [class.mem]p4:
6534     //   A member-declarator can contain a constant-initializer only
6535     //   if it declares a static member (9.4) of const integral or
6536     //   const enumeration type, see 9.4.2.
6537     //
6538     // C++11 [class.static.data]p3:
6539     //   If a non-volatile const static data member is of integral or
6540     //   enumeration type, its declaration in the class definition can
6541     //   specify a brace-or-equal-initializer in which every initalizer-clause
6542     //   that is an assignment-expression is a constant expression. A static
6543     //   data member of literal type can be declared in the class definition
6544     //   with the constexpr specifier; if so, its declaration shall specify a
6545     //   brace-or-equal-initializer in which every initializer-clause that is
6546     //   an assignment-expression is a constant expression.
6547 
6548     // Do nothing on dependent types.
6549     if (DclT->isDependentType()) {
6550 
6551     // Allow any 'static constexpr' members, whether or not they are of literal
6552     // type. We separately check that every constexpr variable is of literal
6553     // type.
6554     } else if (VDecl->isConstexpr()) {
6555 
6556     // Require constness.
6557     } else if (!DclT.isConstQualified()) {
6558       Diag(VDecl->getLocation(), diag::err_in_class_initializer_non_const)
6559         << Init->getSourceRange();
6560       VDecl->setInvalidDecl();
6561 
6562     // We allow integer constant expressions in all cases.
6563     } else if (DclT->isIntegralOrEnumerationType()) {
6564       // Check whether the expression is a constant expression.
6565       SourceLocation Loc;
6566       if (getLangOpts().CPlusPlus0x && DclT.isVolatileQualified())
6567         // In C++11, a non-constexpr const static data member with an
6568         // in-class initializer cannot be volatile.
6569         Diag(VDecl->getLocation(), diag::err_in_class_initializer_volatile);
6570       else if (Init->isValueDependent())
6571         ; // Nothing to check.
6572       else if (Init->isIntegerConstantExpr(Context, &Loc))
6573         ; // Ok, it's an ICE!
6574       else if (Init->isEvaluatable(Context)) {
6575         // If we can constant fold the initializer through heroics, accept it,
6576         // but report this as a use of an extension for -pedantic.
6577         Diag(Loc, diag::ext_in_class_initializer_non_constant)
6578           << Init->getSourceRange();
6579       } else {
6580         // Otherwise, this is some crazy unknown case.  Report the issue at the
6581         // location provided by the isIntegerConstantExpr failed check.
6582         Diag(Loc, diag::err_in_class_initializer_non_constant)
6583           << Init->getSourceRange();
6584         VDecl->setInvalidDecl();
6585       }
6586 
6587     // We allow foldable floating-point constants as an extension.
6588     } else if (DclT->isFloatingType()) { // also permits complex, which is ok
6589       Diag(VDecl->getLocation(), diag::ext_in_class_initializer_float_type)
6590         << DclT << Init->getSourceRange();
6591       if (getLangOpts().CPlusPlus0x)
6592         Diag(VDecl->getLocation(),
6593              diag::note_in_class_initializer_float_type_constexpr)
6594           << FixItHint::CreateInsertion(VDecl->getLocStart(), "constexpr ");
6595 
6596       if (!Init->isValueDependent() && !Init->isEvaluatable(Context)) {
6597         Diag(Init->getExprLoc(), diag::err_in_class_initializer_non_constant)
6598           << Init->getSourceRange();
6599         VDecl->setInvalidDecl();
6600       }
6601 
6602     // Suggest adding 'constexpr' in C++11 for literal types.
6603     } else if (getLangOpts().CPlusPlus0x && DclT->isLiteralType()) {
6604       Diag(VDecl->getLocation(), diag::err_in_class_initializer_literal_type)
6605         << DclT << Init->getSourceRange()
6606         << FixItHint::CreateInsertion(VDecl->getLocStart(), "constexpr ");
6607       VDecl->setConstexpr(true);
6608 
6609     } else {
6610       Diag(VDecl->getLocation(), diag::err_in_class_initializer_bad_type)
6611         << DclT << Init->getSourceRange();
6612       VDecl->setInvalidDecl();
6613     }
6614   } else if (VDecl->isFileVarDecl()) {
6615     if (VDecl->getStorageClassAsWritten() == SC_Extern &&
6616         (!getLangOpts().CPlusPlus ||
6617          !Context.getBaseElementType(VDecl->getType()).isConstQualified()))
6618       Diag(VDecl->getLocation(), diag::warn_extern_init);
6619 
6620     // C99 6.7.8p4. All file scoped initializers need to be constant.
6621     if (!getLangOpts().CPlusPlus && !VDecl->isInvalidDecl())
6622       CheckForConstantInitializer(Init, DclT);
6623   }
6624 
6625   // We will represent direct-initialization similarly to copy-initialization:
6626   //    int x(1);  -as-> int x = 1;
6627   //    ClassType x(a,b,c); -as-> ClassType x = ClassType(a,b,c);
6628   //
6629   // Clients that want to distinguish between the two forms, can check for
6630   // direct initializer using VarDecl::getInitStyle().
6631   // A major benefit is that clients that don't particularly care about which
6632   // exactly form was it (like the CodeGen) can handle both cases without
6633   // special case code.
6634 
6635   // C++ 8.5p11:
6636   // The form of initialization (using parentheses or '=') is generally
6637   // insignificant, but does matter when the entity being initialized has a
6638   // class type.
6639   if (CXXDirectInit) {
6640     assert(DirectInit && "Call-style initializer must be direct init.");
6641     VDecl->setInitStyle(VarDecl::CallInit);
6642   } else if (DirectInit) {
6643     // This must be list-initialization. No other way is direct-initialization.
6644     VDecl->setInitStyle(VarDecl::ListInit);
6645   }
6646 
6647   CheckCompleteVariableDeclaration(VDecl);
6648 }
6649 
6650 /// ActOnInitializerError - Given that there was an error parsing an
6651 /// initializer for the given declaration, try to return to some form
6652 /// of sanity.
6653 void Sema::ActOnInitializerError(Decl *D) {
6654   // Our main concern here is re-establishing invariants like "a
6655   // variable's type is either dependent or complete".
6656   if (!D || D->isInvalidDecl()) return;
6657 
6658   VarDecl *VD = dyn_cast<VarDecl>(D);
6659   if (!VD) return;
6660 
6661   // Auto types are meaningless if we can't make sense of the initializer.
6662   if (ParsingInitForAutoVars.count(D)) {
6663     D->setInvalidDecl();
6664     return;
6665   }
6666 
6667   QualType Ty = VD->getType();
6668   if (Ty->isDependentType()) return;
6669 
6670   // Require a complete type.
6671   if (RequireCompleteType(VD->getLocation(),
6672                           Context.getBaseElementType(Ty),
6673                           diag::err_typecheck_decl_incomplete_type)) {
6674     VD->setInvalidDecl();
6675     return;
6676   }
6677 
6678   // Require an abstract type.
6679   if (RequireNonAbstractType(VD->getLocation(), Ty,
6680                              diag::err_abstract_type_in_decl,
6681                              AbstractVariableType)) {
6682     VD->setInvalidDecl();
6683     return;
6684   }
6685 
6686   // Don't bother complaining about constructors or destructors,
6687   // though.
6688 }
6689 
6690 void Sema::ActOnUninitializedDecl(Decl *RealDecl,
6691                                   bool TypeMayContainAuto) {
6692   // If there is no declaration, there was an error parsing it. Just ignore it.
6693   if (RealDecl == 0)
6694     return;
6695 
6696   if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {
6697     QualType Type = Var->getType();
6698 
6699     // C++11 [dcl.spec.auto]p3
6700     if (TypeMayContainAuto && Type->getContainedAutoType()) {
6701       Diag(Var->getLocation(), diag::err_auto_var_requires_init)
6702         << Var->getDeclName() << Type;
6703       Var->setInvalidDecl();
6704       return;
6705     }
6706 
6707     // C++11 [class.static.data]p3: A static data member can be declared with
6708     // the constexpr specifier; if so, its declaration shall specify
6709     // a brace-or-equal-initializer.
6710     // C++11 [dcl.constexpr]p1: The constexpr specifier shall be applied only to
6711     // the definition of a variable [...] or the declaration of a static data
6712     // member.
6713     if (Var->isConstexpr() && !Var->isThisDeclarationADefinition()) {
6714       if (Var->isStaticDataMember())
6715         Diag(Var->getLocation(),
6716              diag::err_constexpr_static_mem_var_requires_init)
6717           << Var->getDeclName();
6718       else
6719         Diag(Var->getLocation(), diag::err_invalid_constexpr_var_decl);
6720       Var->setInvalidDecl();
6721       return;
6722     }
6723 
6724     switch (Var->isThisDeclarationADefinition()) {
6725     case VarDecl::Definition:
6726       if (!Var->isStaticDataMember() || !Var->getAnyInitializer())
6727         break;
6728 
6729       // We have an out-of-line definition of a static data member
6730       // that has an in-class initializer, so we type-check this like
6731       // a declaration.
6732       //
6733       // Fall through
6734 
6735     case VarDecl::DeclarationOnly:
6736       // It's only a declaration.
6737 
6738       // Block scope. C99 6.7p7: If an identifier for an object is
6739       // declared with no linkage (C99 6.2.2p6), the type for the
6740       // object shall be complete.
6741       if (!Type->isDependentType() && Var->isLocalVarDecl() &&
6742           !Var->getLinkage() && !Var->isInvalidDecl() &&
6743           RequireCompleteType(Var->getLocation(), Type,
6744                               diag::err_typecheck_decl_incomplete_type))
6745         Var->setInvalidDecl();
6746 
6747       // Make sure that the type is not abstract.
6748       if (!Type->isDependentType() && !Var->isInvalidDecl() &&
6749           RequireNonAbstractType(Var->getLocation(), Type,
6750                                  diag::err_abstract_type_in_decl,
6751                                  AbstractVariableType))
6752         Var->setInvalidDecl();
6753       return;
6754 
6755     case VarDecl::TentativeDefinition:
6756       // File scope. C99 6.9.2p2: A declaration of an identifier for an
6757       // object that has file scope without an initializer, and without a
6758       // storage-class specifier or with the storage-class specifier "static",
6759       // constitutes a tentative definition. Note: A tentative definition with
6760       // external linkage is valid (C99 6.2.2p5).
6761       if (!Var->isInvalidDecl()) {
6762         if (const IncompleteArrayType *ArrayT
6763                                     = Context.getAsIncompleteArrayType(Type)) {
6764           if (RequireCompleteType(Var->getLocation(),
6765                                   ArrayT->getElementType(),
6766                                   diag::err_illegal_decl_array_incomplete_type))
6767             Var->setInvalidDecl();
6768         } else if (Var->getStorageClass() == SC_Static) {
6769           // C99 6.9.2p3: If the declaration of an identifier for an object is
6770           // a tentative definition and has internal linkage (C99 6.2.2p3), the
6771           // declared type shall not be an incomplete type.
6772           // NOTE: code such as the following
6773           //     static struct s;
6774           //     struct s { int a; };
6775           // is accepted by gcc. Hence here we issue a warning instead of
6776           // an error and we do not invalidate the static declaration.
6777           // NOTE: to avoid multiple warnings, only check the first declaration.
6778           if (Var->getPreviousDecl() == 0)
6779             RequireCompleteType(Var->getLocation(), Type,
6780                                 diag::ext_typecheck_decl_incomplete_type);
6781         }
6782       }
6783 
6784       // Record the tentative definition; we're done.
6785       if (!Var->isInvalidDecl())
6786         TentativeDefinitions.push_back(Var);
6787       return;
6788     }
6789 
6790     // Provide a specific diagnostic for uninitialized variable
6791     // definitions with incomplete array type.
6792     if (Type->isIncompleteArrayType()) {
6793       Diag(Var->getLocation(),
6794            diag::err_typecheck_incomplete_array_needs_initializer);
6795       Var->setInvalidDecl();
6796       return;
6797     }
6798 
6799     // Provide a specific diagnostic for uninitialized variable
6800     // definitions with reference type.
6801     if (Type->isReferenceType()) {
6802       Diag(Var->getLocation(), diag::err_reference_var_requires_init)
6803         << Var->getDeclName()
6804         << SourceRange(Var->getLocation(), Var->getLocation());
6805       Var->setInvalidDecl();
6806       return;
6807     }
6808 
6809     // Do not attempt to type-check the default initializer for a
6810     // variable with dependent type.
6811     if (Type->isDependentType())
6812       return;
6813 
6814     if (Var->isInvalidDecl())
6815       return;
6816 
6817     if (RequireCompleteType(Var->getLocation(),
6818                             Context.getBaseElementType(Type),
6819                             diag::err_typecheck_decl_incomplete_type)) {
6820       Var->setInvalidDecl();
6821       return;
6822     }
6823 
6824     // The variable can not have an abstract class type.
6825     if (RequireNonAbstractType(Var->getLocation(), Type,
6826                                diag::err_abstract_type_in_decl,
6827                                AbstractVariableType)) {
6828       Var->setInvalidDecl();
6829       return;
6830     }
6831 
6832     // Check for jumps past the implicit initializer.  C++0x
6833     // clarifies that this applies to a "variable with automatic
6834     // storage duration", not a "local variable".
6835     // C++11 [stmt.dcl]p3
6836     //   A program that jumps from a point where a variable with automatic
6837     //   storage duration is not in scope to a point where it is in scope is
6838     //   ill-formed unless the variable has scalar type, class type with a
6839     //   trivial default constructor and a trivial destructor, a cv-qualified
6840     //   version of one of these types, or an array of one of the preceding
6841     //   types and is declared without an initializer.
6842     if (getLangOpts().CPlusPlus && Var->hasLocalStorage()) {
6843       if (const RecordType *Record
6844             = Context.getBaseElementType(Type)->getAs<RecordType>()) {
6845         CXXRecordDecl *CXXRecord = cast<CXXRecordDecl>(Record->getDecl());
6846         // Mark the function for further checking even if the looser rules of
6847         // C++11 do not require such checks, so that we can diagnose
6848         // incompatibilities with C++98.
6849         if (!CXXRecord->isPOD())
6850           getCurFunction()->setHasBranchProtectedScope();
6851       }
6852     }
6853 
6854     // C++03 [dcl.init]p9:
6855     //   If no initializer is specified for an object, and the
6856     //   object is of (possibly cv-qualified) non-POD class type (or
6857     //   array thereof), the object shall be default-initialized; if
6858     //   the object is of const-qualified type, the underlying class
6859     //   type shall have a user-declared default
6860     //   constructor. Otherwise, if no initializer is specified for
6861     //   a non- static object, the object and its subobjects, if
6862     //   any, have an indeterminate initial value); if the object
6863     //   or any of its subobjects are of const-qualified type, the
6864     //   program is ill-formed.
6865     // C++0x [dcl.init]p11:
6866     //   If no initializer is specified for an object, the object is
6867     //   default-initialized; [...].
6868     InitializedEntity Entity = InitializedEntity::InitializeVariable(Var);
6869     InitializationKind Kind
6870       = InitializationKind::CreateDefault(Var->getLocation());
6871 
6872     InitializationSequence InitSeq(*this, Entity, Kind, 0, 0);
6873     ExprResult Init = InitSeq.Perform(*this, Entity, Kind,
6874                                       MultiExprArg(*this, 0, 0));
6875     if (Init.isInvalid())
6876       Var->setInvalidDecl();
6877     else if (Init.get()) {
6878       Var->setInit(MaybeCreateExprWithCleanups(Init.get()));
6879       // This is important for template substitution.
6880       Var->setInitStyle(VarDecl::CallInit);
6881     }
6882 
6883     CheckCompleteVariableDeclaration(Var);
6884   }
6885 }
6886 
6887 void Sema::ActOnCXXForRangeDecl(Decl *D) {
6888   VarDecl *VD = dyn_cast<VarDecl>(D);
6889   if (!VD) {
6890     Diag(D->getLocation(), diag::err_for_range_decl_must_be_var);
6891     D->setInvalidDecl();
6892     return;
6893   }
6894 
6895   VD->setCXXForRangeDecl(true);
6896 
6897   // for-range-declaration cannot be given a storage class specifier.
6898   int Error = -1;
6899   switch (VD->getStorageClassAsWritten()) {
6900   case SC_None:
6901     break;
6902   case SC_Extern:
6903     Error = 0;
6904     break;
6905   case SC_Static:
6906     Error = 1;
6907     break;
6908   case SC_PrivateExtern:
6909     Error = 2;
6910     break;
6911   case SC_Auto:
6912     Error = 3;
6913     break;
6914   case SC_Register:
6915     Error = 4;
6916     break;
6917   case SC_OpenCLWorkGroupLocal:
6918     llvm_unreachable("Unexpected storage class");
6919   }
6920   if (VD->isConstexpr())
6921     Error = 5;
6922   if (Error != -1) {
6923     Diag(VD->getOuterLocStart(), diag::err_for_range_storage_class)
6924       << VD->getDeclName() << Error;
6925     D->setInvalidDecl();
6926   }
6927 }
6928 
6929 void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {
6930   if (var->isInvalidDecl()) return;
6931 
6932   // In ARC, don't allow jumps past the implicit initialization of a
6933   // local retaining variable.
6934   if (getLangOpts().ObjCAutoRefCount &&
6935       var->hasLocalStorage()) {
6936     switch (var->getType().getObjCLifetime()) {
6937     case Qualifiers::OCL_None:
6938     case Qualifiers::OCL_ExplicitNone:
6939     case Qualifiers::OCL_Autoreleasing:
6940       break;
6941 
6942     case Qualifiers::OCL_Weak:
6943     case Qualifiers::OCL_Strong:
6944       getCurFunction()->setHasBranchProtectedScope();
6945       break;
6946     }
6947   }
6948 
6949   // All the following checks are C++ only.
6950   if (!getLangOpts().CPlusPlus) return;
6951 
6952   QualType baseType = Context.getBaseElementType(var->getType());
6953   if (baseType->isDependentType()) return;
6954 
6955   // __block variables might require us to capture a copy-initializer.
6956   if (var->hasAttr<BlocksAttr>()) {
6957     // It's currently invalid to ever have a __block variable with an
6958     // array type; should we diagnose that here?
6959 
6960     // Regardless, we don't want to ignore array nesting when
6961     // constructing this copy.
6962     QualType type = var->getType();
6963 
6964     if (type->isStructureOrClassType()) {
6965       SourceLocation poi = var->getLocation();
6966       Expr *varRef =new (Context) DeclRefExpr(var, false, type, VK_LValue, poi);
6967       ExprResult result =
6968         PerformCopyInitialization(
6969                         InitializedEntity::InitializeBlock(poi, type, false),
6970                                   poi, Owned(varRef));
6971       if (!result.isInvalid()) {
6972         result = MaybeCreateExprWithCleanups(result);
6973         Expr *init = result.takeAs<Expr>();
6974         Context.setBlockVarCopyInits(var, init);
6975       }
6976     }
6977   }
6978 
6979   Expr *Init = var->getInit();
6980   bool IsGlobal = var->hasGlobalStorage() && !var->isStaticLocal();
6981 
6982   if (!var->getDeclContext()->isDependentContext() && Init) {
6983     if (IsGlobal && !var->isConstexpr() &&
6984         getDiagnostics().getDiagnosticLevel(diag::warn_global_constructor,
6985                                             var->getLocation())
6986           != DiagnosticsEngine::Ignored &&
6987         !Init->isConstantInitializer(Context, baseType->isReferenceType()))
6988       Diag(var->getLocation(), diag::warn_global_constructor)
6989         << Init->getSourceRange();
6990 
6991     if (var->isConstexpr()) {
6992       llvm::SmallVector<PartialDiagnosticAt, 8> Notes;
6993       if (!var->evaluateValue(Notes) || !var->isInitICE()) {
6994         SourceLocation DiagLoc = var->getLocation();
6995         // If the note doesn't add any useful information other than a source
6996         // location, fold it into the primary diagnostic.
6997         if (Notes.size() == 1 && Notes[0].second.getDiagID() ==
6998               diag::note_invalid_subexpr_in_const_expr) {
6999           DiagLoc = Notes[0].first;
7000           Notes.clear();
7001         }
7002         Diag(DiagLoc, diag::err_constexpr_var_requires_const_init)
7003           << var << Init->getSourceRange();
7004         for (unsigned I = 0, N = Notes.size(); I != N; ++I)
7005           Diag(Notes[I].first, Notes[I].second);
7006       }
7007     } else if (var->isUsableInConstantExpressions(Context)) {
7008       // Check whether the initializer of a const variable of integral or
7009       // enumeration type is an ICE now, since we can't tell whether it was
7010       // initialized by a constant expression if we check later.
7011       var->checkInitIsICE();
7012     }
7013   }
7014 
7015   // Require the destructor.
7016   if (const RecordType *recordType = baseType->getAs<RecordType>())
7017     FinalizeVarWithDestructor(var, recordType);
7018 }
7019 
7020 /// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform
7021 /// any semantic actions necessary after any initializer has been attached.
7022 void
7023 Sema::FinalizeDeclaration(Decl *ThisDecl) {
7024   // Note that we are no longer parsing the initializer for this declaration.
7025   ParsingInitForAutoVars.erase(ThisDecl);
7026 }
7027 
7028 Sema::DeclGroupPtrTy
7029 Sema::FinalizeDeclaratorGroup(Scope *S, const DeclSpec &DS,
7030                               Decl **Group, unsigned NumDecls) {
7031   SmallVector<Decl*, 8> Decls;
7032 
7033   if (DS.isTypeSpecOwned())
7034     Decls.push_back(DS.getRepAsDecl());
7035 
7036   for (unsigned i = 0; i != NumDecls; ++i)
7037     if (Decl *D = Group[i])
7038       Decls.push_back(D);
7039 
7040   return BuildDeclaratorGroup(Decls.data(), Decls.size(),
7041                               DS.getTypeSpecType() == DeclSpec::TST_auto);
7042 }
7043 
7044 /// BuildDeclaratorGroup - convert a list of declarations into a declaration
7045 /// group, performing any necessary semantic checking.
7046 Sema::DeclGroupPtrTy
7047 Sema::BuildDeclaratorGroup(Decl **Group, unsigned NumDecls,
7048                            bool TypeMayContainAuto) {
7049   // C++0x [dcl.spec.auto]p7:
7050   //   If the type deduced for the template parameter U is not the same in each
7051   //   deduction, the program is ill-formed.
7052   // FIXME: When initializer-list support is added, a distinction is needed
7053   // between the deduced type U and the deduced type which 'auto' stands for.
7054   //   auto a = 0, b = { 1, 2, 3 };
7055   // is legal because the deduced type U is 'int' in both cases.
7056   if (TypeMayContainAuto && NumDecls > 1) {
7057     QualType Deduced;
7058     CanQualType DeducedCanon;
7059     VarDecl *DeducedDecl = 0;
7060     for (unsigned i = 0; i != NumDecls; ++i) {
7061       if (VarDecl *D = dyn_cast<VarDecl>(Group[i])) {
7062         AutoType *AT = D->getType()->getContainedAutoType();
7063         // Don't reissue diagnostics when instantiating a template.
7064         if (AT && D->isInvalidDecl())
7065           break;
7066         if (AT && AT->isDeduced()) {
7067           QualType U = AT->getDeducedType();
7068           CanQualType UCanon = Context.getCanonicalType(U);
7069           if (Deduced.isNull()) {
7070             Deduced = U;
7071             DeducedCanon = UCanon;
7072             DeducedDecl = D;
7073           } else if (DeducedCanon != UCanon) {
7074             Diag(D->getTypeSourceInfo()->getTypeLoc().getBeginLoc(),
7075                  diag::err_auto_different_deductions)
7076               << Deduced << DeducedDecl->getDeclName()
7077               << U << D->getDeclName()
7078               << DeducedDecl->getInit()->getSourceRange()
7079               << D->getInit()->getSourceRange();
7080             D->setInvalidDecl();
7081             break;
7082           }
7083         }
7084       }
7085     }
7086   }
7087 
7088   ActOnDocumentableDecls(Group, NumDecls);
7089 
7090   return DeclGroupPtrTy::make(DeclGroupRef::Create(Context, Group, NumDecls));
7091 }
7092 
7093 void Sema::ActOnDocumentableDecl(Decl *D) {
7094   ActOnDocumentableDecls(&D, 1);
7095 }
7096 
7097 void Sema::ActOnDocumentableDecls(Decl **Group, unsigned NumDecls) {
7098   // Don't parse the comment if Doxygen diagnostics are ignored.
7099   if (NumDecls == 0 || !Group[0])
7100    return;
7101 
7102   if (Diags.getDiagnosticLevel(diag::warn_doc_param_not_found,
7103                                Group[0]->getLocation())
7104         == DiagnosticsEngine::Ignored)
7105     return;
7106 
7107   if (NumDecls >= 2) {
7108     // This is a decl group.  Normally it will contain only declarations
7109     // procuded from declarator list.  But in case we have any definitions or
7110     // additional declaration references:
7111     //   'typedef struct S {} S;'
7112     //   'typedef struct S *S;'
7113     //   'struct S *pS;'
7114     // FinalizeDeclaratorGroup adds these as separate declarations.
7115     Decl *MaybeTagDecl = Group[0];
7116     if (MaybeTagDecl && isa<TagDecl>(MaybeTagDecl)) {
7117       Group++;
7118       NumDecls--;
7119     }
7120   }
7121 
7122   // See if there are any new comments that are not attached to a decl.
7123   ArrayRef<RawComment *> Comments = Context.getRawCommentList().getComments();
7124   if (!Comments.empty() &&
7125       !Comments.back()->isAttached()) {
7126     // There is at least one comment that not attached to a decl.
7127     // Maybe it should be attached to one of these decls?
7128     //
7129     // Note that this way we pick up not only comments that precede the
7130     // declaration, but also comments that *follow* the declaration -- thanks to
7131     // the lookahead in the lexer: we've consumed the semicolon and looked
7132     // ahead through comments.
7133     for (unsigned i = 0; i != NumDecls; ++i)
7134       Context.getCommentForDecl(Group[i]);
7135   }
7136 }
7137 
7138 /// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()
7139 /// to introduce parameters into function prototype scope.
7140 Decl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {
7141   const DeclSpec &DS = D.getDeclSpec();
7142 
7143   // Verify C99 6.7.5.3p2: The only SCS allowed is 'register'.
7144   // C++03 [dcl.stc]p2 also permits 'auto'.
7145   VarDecl::StorageClass StorageClass = SC_None;
7146   VarDecl::StorageClass StorageClassAsWritten = SC_None;
7147   if (DS.getStorageClassSpec() == DeclSpec::SCS_register) {
7148     StorageClass = SC_Register;
7149     StorageClassAsWritten = SC_Register;
7150   } else if (getLangOpts().CPlusPlus &&
7151              DS.getStorageClassSpec() == DeclSpec::SCS_auto) {
7152     StorageClass = SC_Auto;
7153     StorageClassAsWritten = SC_Auto;
7154   } else if (DS.getStorageClassSpec() != DeclSpec::SCS_unspecified) {
7155     Diag(DS.getStorageClassSpecLoc(),
7156          diag::err_invalid_storage_class_in_func_decl);
7157     D.getMutableDeclSpec().ClearStorageClassSpecs();
7158   }
7159 
7160   if (D.getDeclSpec().isThreadSpecified())
7161     Diag(D.getDeclSpec().getThreadSpecLoc(), diag::err_invalid_thread);
7162   if (D.getDeclSpec().isConstexprSpecified())
7163     Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_invalid_constexpr)
7164       << 0;
7165 
7166   DiagnoseFunctionSpecifiers(D);
7167 
7168   TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
7169   QualType parmDeclType = TInfo->getType();
7170 
7171   if (getLangOpts().CPlusPlus) {
7172     // Check that there are no default arguments inside the type of this
7173     // parameter.
7174     CheckExtraCXXDefaultArguments(D);
7175 
7176     // Parameter declarators cannot be qualified (C++ [dcl.meaning]p1).
7177     if (D.getCXXScopeSpec().isSet()) {
7178       Diag(D.getIdentifierLoc(), diag::err_qualified_param_declarator)
7179         << D.getCXXScopeSpec().getRange();
7180       D.getCXXScopeSpec().clear();
7181     }
7182   }
7183 
7184   // Ensure we have a valid name
7185   IdentifierInfo *II = 0;
7186   if (D.hasName()) {
7187     II = D.getIdentifier();
7188     if (!II) {
7189       Diag(D.getIdentifierLoc(), diag::err_bad_parameter_name)
7190         << GetNameForDeclarator(D).getName().getAsString();
7191       D.setInvalidType(true);
7192     }
7193   }
7194 
7195   // Check for redeclaration of parameters, e.g. int foo(int x, int x);
7196   if (II) {
7197     LookupResult R(*this, II, D.getIdentifierLoc(), LookupOrdinaryName,
7198                    ForRedeclaration);
7199     LookupName(R, S);
7200     if (R.isSingleResult()) {
7201       NamedDecl *PrevDecl = R.getFoundDecl();
7202       if (PrevDecl->isTemplateParameter()) {
7203         // Maybe we will complain about the shadowed template parameter.
7204         DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
7205         // Just pretend that we didn't see the previous declaration.
7206         PrevDecl = 0;
7207       } else if (S->isDeclScope(PrevDecl)) {
7208         Diag(D.getIdentifierLoc(), diag::err_param_redefinition) << II;
7209         Diag(PrevDecl->getLocation(), diag::note_previous_declaration);
7210 
7211         // Recover by removing the name
7212         II = 0;
7213         D.SetIdentifier(0, D.getIdentifierLoc());
7214         D.setInvalidType(true);
7215       }
7216     }
7217   }
7218 
7219   // Temporarily put parameter variables in the translation unit, not
7220   // the enclosing context.  This prevents them from accidentally
7221   // looking like class members in C++.
7222   ParmVarDecl *New = CheckParameter(Context.getTranslationUnitDecl(),
7223                                     D.getLocStart(),
7224                                     D.getIdentifierLoc(), II,
7225                                     parmDeclType, TInfo,
7226                                     StorageClass, StorageClassAsWritten);
7227 
7228   if (D.isInvalidType())
7229     New->setInvalidDecl();
7230 
7231   assert(S->isFunctionPrototypeScope());
7232   assert(S->getFunctionPrototypeDepth() >= 1);
7233   New->setScopeInfo(S->getFunctionPrototypeDepth() - 1,
7234                     S->getNextFunctionPrototypeIndex());
7235 
7236   // Add the parameter declaration into this scope.
7237   S->AddDecl(New);
7238   if (II)
7239     IdResolver.AddDecl(New);
7240 
7241   ProcessDeclAttributes(S, New, D);
7242 
7243   if (D.getDeclSpec().isModulePrivateSpecified())
7244     Diag(New->getLocation(), diag::err_module_private_local)
7245       << 1 << New->getDeclName()
7246       << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc())
7247       << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());
7248 
7249   if (New->hasAttr<BlocksAttr>()) {
7250     Diag(New->getLocation(), diag::err_block_on_nonlocal);
7251   }
7252   return New;
7253 }
7254 
7255 /// \brief Synthesizes a variable for a parameter arising from a
7256 /// typedef.
7257 ParmVarDecl *Sema::BuildParmVarDeclForTypedef(DeclContext *DC,
7258                                               SourceLocation Loc,
7259                                               QualType T) {
7260   /* FIXME: setting StartLoc == Loc.
7261      Would it be worth to modify callers so as to provide proper source
7262      location for the unnamed parameters, embedding the parameter's type? */
7263   ParmVarDecl *Param = ParmVarDecl::Create(Context, DC, Loc, Loc, 0,
7264                                 T, Context.getTrivialTypeSourceInfo(T, Loc),
7265                                            SC_None, SC_None, 0);
7266   Param->setImplicit();
7267   return Param;
7268 }
7269 
7270 void Sema::DiagnoseUnusedParameters(ParmVarDecl * const *Param,
7271                                     ParmVarDecl * const *ParamEnd) {
7272   // Don't diagnose unused-parameter errors in template instantiations; we
7273   // will already have done so in the template itself.
7274   if (!ActiveTemplateInstantiations.empty())
7275     return;
7276 
7277   for (; Param != ParamEnd; ++Param) {
7278     if (!(*Param)->isReferenced() && (*Param)->getDeclName() &&
7279         !(*Param)->hasAttr<UnusedAttr>()) {
7280       Diag((*Param)->getLocation(), diag::warn_unused_parameter)
7281         << (*Param)->getDeclName();
7282     }
7283   }
7284 }
7285 
7286 void Sema::DiagnoseSizeOfParametersAndReturnValue(ParmVarDecl * const *Param,
7287                                                   ParmVarDecl * const *ParamEnd,
7288                                                   QualType ReturnTy,
7289                                                   NamedDecl *D) {
7290   if (LangOpts.NumLargeByValueCopy == 0) // No check.
7291     return;
7292 
7293   // Warn if the return value is pass-by-value and larger than the specified
7294   // threshold.
7295   if (!ReturnTy->isDependentType() && ReturnTy.isPODType(Context)) {
7296     unsigned Size = Context.getTypeSizeInChars(ReturnTy).getQuantity();
7297     if (Size > LangOpts.NumLargeByValueCopy)
7298       Diag(D->getLocation(), diag::warn_return_value_size)
7299           << D->getDeclName() << Size;
7300   }
7301 
7302   // Warn if any parameter is pass-by-value and larger than the specified
7303   // threshold.
7304   for (; Param != ParamEnd; ++Param) {
7305     QualType T = (*Param)->getType();
7306     if (T->isDependentType() || !T.isPODType(Context))
7307       continue;
7308     unsigned Size = Context.getTypeSizeInChars(T).getQuantity();
7309     if (Size > LangOpts.NumLargeByValueCopy)
7310       Diag((*Param)->getLocation(), diag::warn_parameter_size)
7311           << (*Param)->getDeclName() << Size;
7312   }
7313 }
7314 
7315 ParmVarDecl *Sema::CheckParameter(DeclContext *DC, SourceLocation StartLoc,
7316                                   SourceLocation NameLoc, IdentifierInfo *Name,
7317                                   QualType T, TypeSourceInfo *TSInfo,
7318                                   VarDecl::StorageClass StorageClass,
7319                                   VarDecl::StorageClass StorageClassAsWritten) {
7320   // In ARC, infer a lifetime qualifier for appropriate parameter types.
7321   if (getLangOpts().ObjCAutoRefCount &&
7322       T.getObjCLifetime() == Qualifiers::OCL_None &&
7323       T->isObjCLifetimeType()) {
7324 
7325     Qualifiers::ObjCLifetime lifetime;
7326 
7327     // Special cases for arrays:
7328     //   - if it's const, use __unsafe_unretained
7329     //   - otherwise, it's an error
7330     if (T->isArrayType()) {
7331       if (!T.isConstQualified()) {
7332         DelayedDiagnostics.add(
7333             sema::DelayedDiagnostic::makeForbiddenType(
7334             NameLoc, diag::err_arc_array_param_no_ownership, T, false));
7335       }
7336       lifetime = Qualifiers::OCL_ExplicitNone;
7337     } else {
7338       lifetime = T->getObjCARCImplicitLifetime();
7339     }
7340     T = Context.getLifetimeQualifiedType(T, lifetime);
7341   }
7342 
7343   ParmVarDecl *New = ParmVarDecl::Create(Context, DC, StartLoc, NameLoc, Name,
7344                                          Context.getAdjustedParameterType(T),
7345                                          TSInfo,
7346                                          StorageClass, StorageClassAsWritten,
7347                                          0);
7348 
7349   // Parameters can not be abstract class types.
7350   // For record types, this is done by the AbstractClassUsageDiagnoser once
7351   // the class has been completely parsed.
7352   if (!CurContext->isRecord() &&
7353       RequireNonAbstractType(NameLoc, T, diag::err_abstract_type_in_decl,
7354                              AbstractParamType))
7355     New->setInvalidDecl();
7356 
7357   // Parameter declarators cannot be interface types. All ObjC objects are
7358   // passed by reference.
7359   if (T->isObjCObjectType()) {
7360     SourceLocation TypeEndLoc = TSInfo->getTypeLoc().getLocEnd();
7361     Diag(NameLoc,
7362          diag::err_object_cannot_be_passed_returned_by_value) << 1 << T
7363       << FixItHint::CreateInsertion(TypeEndLoc, "*");
7364     T = Context.getObjCObjectPointerType(T);
7365     New->setType(T);
7366   }
7367 
7368   // ISO/IEC TR 18037 S6.7.3: "The type of an object with automatic storage
7369   // duration shall not be qualified by an address-space qualifier."
7370   // Since all parameters have automatic store duration, they can not have
7371   // an address space.
7372   if (T.getAddressSpace() != 0) {
7373     Diag(NameLoc, diag::err_arg_with_address_space);
7374     New->setInvalidDecl();
7375   }
7376 
7377   return New;
7378 }
7379 
7380 void Sema::ActOnFinishKNRParamDeclarations(Scope *S, Declarator &D,
7381                                            SourceLocation LocAfterDecls) {
7382   DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
7383 
7384   // Verify 6.9.1p6: 'every identifier in the identifier list shall be declared'
7385   // for a K&R function.
7386   if (!FTI.hasPrototype) {
7387     for (int i = FTI.NumArgs; i != 0; /* decrement in loop */) {
7388       --i;
7389       if (FTI.ArgInfo[i].Param == 0) {
7390         SmallString<256> Code;
7391         llvm::raw_svector_ostream(Code) << "  int "
7392                                         << FTI.ArgInfo[i].Ident->getName()
7393                                         << ";\n";
7394         Diag(FTI.ArgInfo[i].IdentLoc, diag::ext_param_not_declared)
7395           << FTI.ArgInfo[i].Ident
7396           << FixItHint::CreateInsertion(LocAfterDecls, Code.str());
7397 
7398         // Implicitly declare the argument as type 'int' for lack of a better
7399         // type.
7400         AttributeFactory attrs;
7401         DeclSpec DS(attrs);
7402         const char* PrevSpec; // unused
7403         unsigned DiagID; // unused
7404         DS.SetTypeSpecType(DeclSpec::TST_int, FTI.ArgInfo[i].IdentLoc,
7405                            PrevSpec, DiagID);
7406         Declarator ParamD(DS, Declarator::KNRTypeListContext);
7407         ParamD.SetIdentifier(FTI.ArgInfo[i].Ident, FTI.ArgInfo[i].IdentLoc);
7408         FTI.ArgInfo[i].Param = ActOnParamDeclarator(S, ParamD);
7409       }
7410     }
7411   }
7412 }
7413 
7414 Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Declarator &D) {
7415   assert(getCurFunctionDecl() == 0 && "Function parsing confused");
7416   assert(D.isFunctionDeclarator() && "Not a function declarator!");
7417   Scope *ParentScope = FnBodyScope->getParent();
7418 
7419   D.setFunctionDefinitionKind(FDK_Definition);
7420   Decl *DP = HandleDeclarator(ParentScope, D,
7421                               MultiTemplateParamsArg(*this));
7422   return ActOnStartOfFunctionDef(FnBodyScope, DP);
7423 }
7424 
7425 static bool ShouldWarnAboutMissingPrototype(const FunctionDecl *FD) {
7426   // Don't warn about invalid declarations.
7427   if (FD->isInvalidDecl())
7428     return false;
7429 
7430   // Or declarations that aren't global.
7431   if (!FD->isGlobal())
7432     return false;
7433 
7434   // Don't warn about C++ member functions.
7435   if (isa<CXXMethodDecl>(FD))
7436     return false;
7437 
7438   // Don't warn about 'main'.
7439   if (FD->isMain())
7440     return false;
7441 
7442   // Don't warn about inline functions.
7443   if (FD->isInlined())
7444     return false;
7445 
7446   // Don't warn about function templates.
7447   if (FD->getDescribedFunctionTemplate())
7448     return false;
7449 
7450   // Don't warn about function template specializations.
7451   if (FD->isFunctionTemplateSpecialization())
7452     return false;
7453 
7454   // Don't warn for OpenCL kernels.
7455   if (FD->hasAttr<OpenCLKernelAttr>())
7456     return false;
7457 
7458   bool MissingPrototype = true;
7459   for (const FunctionDecl *Prev = FD->getPreviousDecl();
7460        Prev; Prev = Prev->getPreviousDecl()) {
7461     // Ignore any declarations that occur in function or method
7462     // scope, because they aren't visible from the header.
7463     if (Prev->getDeclContext()->isFunctionOrMethod())
7464       continue;
7465 
7466     MissingPrototype = !Prev->getType()->isFunctionProtoType();
7467     break;
7468   }
7469 
7470   return MissingPrototype;
7471 }
7472 
7473 void Sema::CheckForFunctionRedefinition(FunctionDecl *FD) {
7474   // Don't complain if we're in GNU89 mode and the previous definition
7475   // was an extern inline function.
7476   const FunctionDecl *Definition;
7477   if (FD->isDefined(Definition) &&
7478       !canRedefineFunction(Definition, getLangOpts())) {
7479     if (getLangOpts().GNUMode && Definition->isInlineSpecified() &&
7480         Definition->getStorageClass() == SC_Extern)
7481       Diag(FD->getLocation(), diag::err_redefinition_extern_inline)
7482         << FD->getDeclName() << getLangOpts().CPlusPlus;
7483     else
7484       Diag(FD->getLocation(), diag::err_redefinition) << FD->getDeclName();
7485     Diag(Definition->getLocation(), diag::note_previous_definition);
7486   }
7487 }
7488 
7489 Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D) {
7490   // Clear the last template instantiation error context.
7491   LastTemplateInstantiationErrorContext = ActiveTemplateInstantiation();
7492 
7493   if (!D)
7494     return D;
7495   FunctionDecl *FD = 0;
7496 
7497   if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(D))
7498     FD = FunTmpl->getTemplatedDecl();
7499   else
7500     FD = cast<FunctionDecl>(D);
7501 
7502   // Enter a new function scope
7503   PushFunctionScope();
7504 
7505   // See if this is a redefinition.
7506   if (!FD->isLateTemplateParsed())
7507     CheckForFunctionRedefinition(FD);
7508 
7509   // Builtin functions cannot be defined.
7510   if (unsigned BuiltinID = FD->getBuiltinID()) {
7511     if (!Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID)) {
7512       Diag(FD->getLocation(), diag::err_builtin_definition) << FD;
7513       FD->setInvalidDecl();
7514     }
7515   }
7516 
7517   // The return type of a function definition must be complete
7518   // (C99 6.9.1p3, C++ [dcl.fct]p6).
7519   QualType ResultType = FD->getResultType();
7520   if (!ResultType->isDependentType() && !ResultType->isVoidType() &&
7521       !FD->isInvalidDecl() &&
7522       RequireCompleteType(FD->getLocation(), ResultType,
7523                           diag::err_func_def_incomplete_result))
7524     FD->setInvalidDecl();
7525 
7526   // GNU warning -Wmissing-prototypes:
7527   //   Warn if a global function is defined without a previous
7528   //   prototype declaration. This warning is issued even if the
7529   //   definition itself provides a prototype. The aim is to detect
7530   //   global functions that fail to be declared in header files.
7531   if (ShouldWarnAboutMissingPrototype(FD))
7532     Diag(FD->getLocation(), diag::warn_missing_prototype) << FD;
7533 
7534   if (FnBodyScope)
7535     PushDeclContext(FnBodyScope, FD);
7536 
7537   // Check the validity of our function parameters
7538   CheckParmsForFunctionDef(FD->param_begin(), FD->param_end(),
7539                            /*CheckParameterNames=*/true);
7540 
7541   // Introduce our parameters into the function scope
7542   for (unsigned p = 0, NumParams = FD->getNumParams(); p < NumParams; ++p) {
7543     ParmVarDecl *Param = FD->getParamDecl(p);
7544     Param->setOwningFunction(FD);
7545 
7546     // If this has an identifier, add it to the scope stack.
7547     if (Param->getIdentifier() && FnBodyScope) {
7548       CheckShadow(FnBodyScope, Param);
7549 
7550       PushOnScopeChains(Param, FnBodyScope);
7551     }
7552   }
7553 
7554   // If we had any tags defined in the function prototype,
7555   // introduce them into the function scope.
7556   if (FnBodyScope) {
7557     for (llvm::ArrayRef<NamedDecl*>::iterator I = FD->getDeclsInPrototypeScope().begin(),
7558            E = FD->getDeclsInPrototypeScope().end(); I != E; ++I) {
7559       NamedDecl *D = *I;
7560 
7561       // Some of these decls (like enums) may have been pinned to the translation unit
7562       // for lack of a real context earlier. If so, remove from the translation unit
7563       // and reattach to the current context.
7564       if (D->getLexicalDeclContext() == Context.getTranslationUnitDecl()) {
7565         // Is the decl actually in the context?
7566         for (DeclContext::decl_iterator DI = Context.getTranslationUnitDecl()->decls_begin(),
7567                DE = Context.getTranslationUnitDecl()->decls_end(); DI != DE; ++DI) {
7568           if (*DI == D) {
7569             Context.getTranslationUnitDecl()->removeDecl(D);
7570             break;
7571           }
7572         }
7573         // Either way, reassign the lexical decl context to our FunctionDecl.
7574         D->setLexicalDeclContext(CurContext);
7575       }
7576 
7577       // If the decl has a non-null name, make accessible in the current scope.
7578       if (!D->getName().empty())
7579         PushOnScopeChains(D, FnBodyScope, /*AddToContext=*/false);
7580 
7581       // Similarly, dive into enums and fish their constants out, making them
7582       // accessible in this scope.
7583       if (EnumDecl *ED = dyn_cast<EnumDecl>(D)) {
7584         for (EnumDecl::enumerator_iterator EI = ED->enumerator_begin(),
7585                EE = ED->enumerator_end(); EI != EE; ++EI)
7586           PushOnScopeChains(*EI, FnBodyScope, /*AddToContext=*/false);
7587       }
7588     }
7589   }
7590 
7591   // Ensure that the function's exception specification is instantiated.
7592   if (const FunctionProtoType *FPT = FD->getType()->getAs<FunctionProtoType>())
7593     ResolveExceptionSpec(D->getLocation(), FPT);
7594 
7595   // Checking attributes of current function definition
7596   // dllimport attribute.
7597   DLLImportAttr *DA = FD->getAttr<DLLImportAttr>();
7598   if (DA && (!FD->getAttr<DLLExportAttr>())) {
7599     // dllimport attribute cannot be directly applied to definition.
7600     // Microsoft accepts dllimport for functions defined within class scope.
7601     if (!DA->isInherited() &&
7602         !(LangOpts.MicrosoftExt && FD->getLexicalDeclContext()->isRecord())) {
7603       Diag(FD->getLocation(),
7604            diag::err_attribute_can_be_applied_only_to_symbol_declaration)
7605         << "dllimport";
7606       FD->setInvalidDecl();
7607       return FD;
7608     }
7609 
7610     // Visual C++ appears to not think this is an issue, so only issue
7611     // a warning when Microsoft extensions are disabled.
7612     if (!LangOpts.MicrosoftExt) {
7613       // If a symbol previously declared dllimport is later defined, the
7614       // attribute is ignored in subsequent references, and a warning is
7615       // emitted.
7616       Diag(FD->getLocation(),
7617            diag::warn_redeclaration_without_attribute_prev_attribute_ignored)
7618         << FD->getName() << "dllimport";
7619     }
7620   }
7621   ActOnDocumentableDecl(FD);
7622   return FD;
7623 }
7624 
7625 /// \brief Given the set of return statements within a function body,
7626 /// compute the variables that are subject to the named return value
7627 /// optimization.
7628 ///
7629 /// Each of the variables that is subject to the named return value
7630 /// optimization will be marked as NRVO variables in the AST, and any
7631 /// return statement that has a marked NRVO variable as its NRVO candidate can
7632 /// use the named return value optimization.
7633 ///
7634 /// This function applies a very simplistic algorithm for NRVO: if every return
7635 /// statement in the function has the same NRVO candidate, that candidate is
7636 /// the NRVO variable.
7637 ///
7638 /// FIXME: Employ a smarter algorithm that accounts for multiple return
7639 /// statements and the lifetimes of the NRVO candidates. We should be able to
7640 /// find a maximal set of NRVO variables.
7641 void Sema::computeNRVO(Stmt *Body, FunctionScopeInfo *Scope) {
7642   ReturnStmt **Returns = Scope->Returns.data();
7643 
7644   const VarDecl *NRVOCandidate = 0;
7645   for (unsigned I = 0, E = Scope->Returns.size(); I != E; ++I) {
7646     if (!Returns[I]->getNRVOCandidate())
7647       return;
7648 
7649     if (!NRVOCandidate)
7650       NRVOCandidate = Returns[I]->getNRVOCandidate();
7651     else if (NRVOCandidate != Returns[I]->getNRVOCandidate())
7652       return;
7653   }
7654 
7655   if (NRVOCandidate)
7656     const_cast<VarDecl*>(NRVOCandidate)->setNRVOVariable(true);
7657 }
7658 
7659 Decl *Sema::ActOnFinishFunctionBody(Decl *D, Stmt *BodyArg) {
7660   return ActOnFinishFunctionBody(D, move(BodyArg), false);
7661 }
7662 
7663 Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body,
7664                                     bool IsInstantiation) {
7665   FunctionDecl *FD = 0;
7666   FunctionTemplateDecl *FunTmpl = dyn_cast_or_null<FunctionTemplateDecl>(dcl);
7667   if (FunTmpl)
7668     FD = FunTmpl->getTemplatedDecl();
7669   else
7670     FD = dyn_cast_or_null<FunctionDecl>(dcl);
7671 
7672   sema::AnalysisBasedWarnings::Policy WP = AnalysisWarnings.getDefaultPolicy();
7673   sema::AnalysisBasedWarnings::Policy *ActivePolicy = 0;
7674 
7675   if (FD) {
7676     FD->setBody(Body);
7677 
7678     // If the function implicitly returns zero (like 'main') or is naked,
7679     // don't complain about missing return statements.
7680     if (FD->hasImplicitReturnZero() || FD->hasAttr<NakedAttr>())
7681       WP.disableCheckFallThrough();
7682 
7683     // MSVC permits the use of pure specifier (=0) on function definition,
7684     // defined at class scope, warn about this non standard construct.
7685     if (getLangOpts().MicrosoftExt && FD->isPure())
7686       Diag(FD->getLocation(), diag::warn_pure_function_definition);
7687 
7688     if (!FD->isInvalidDecl()) {
7689       DiagnoseUnusedParameters(FD->param_begin(), FD->param_end());
7690       DiagnoseSizeOfParametersAndReturnValue(FD->param_begin(), FD->param_end(),
7691                                              FD->getResultType(), FD);
7692 
7693       // If this is a constructor, we need a vtable.
7694       if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(FD))
7695         MarkVTableUsed(FD->getLocation(), Constructor->getParent());
7696 
7697       // Try to apply the named return value optimization. We have to check
7698       // if we can do this here because lambdas keep return statements around
7699       // to deduce an implicit return type.
7700       if (getLangOpts().CPlusPlus && FD->getResultType()->isRecordType() &&
7701           !FD->isDependentContext())
7702         computeNRVO(Body, getCurFunction());
7703     }
7704 
7705     assert((FD == getCurFunctionDecl() || getCurLambda()->CallOperator == FD) &&
7706            "Function parsing confused");
7707   } else if (ObjCMethodDecl *MD = dyn_cast_or_null<ObjCMethodDecl>(dcl)) {
7708     assert(MD == getCurMethodDecl() && "Method parsing confused");
7709     MD->setBody(Body);
7710     if (!MD->isInvalidDecl()) {
7711       DiagnoseUnusedParameters(MD->param_begin(), MD->param_end());
7712       DiagnoseSizeOfParametersAndReturnValue(MD->param_begin(), MD->param_end(),
7713                                              MD->getResultType(), MD);
7714 
7715       if (Body)
7716         computeNRVO(Body, getCurFunction());
7717     }
7718     if (getCurFunction()->ObjCShouldCallSuperDealloc) {
7719       Diag(MD->getLocEnd(), diag::warn_objc_missing_super_dealloc);
7720       getCurFunction()->ObjCShouldCallSuperDealloc = false;
7721     }
7722     if (getCurFunction()->ObjCShouldCallSuperFinalize) {
7723       Diag(MD->getLocEnd(), diag::warn_objc_missing_super_finalize);
7724       getCurFunction()->ObjCShouldCallSuperFinalize = false;
7725     }
7726   } else {
7727     return 0;
7728   }
7729 
7730   assert(!getCurFunction()->ObjCShouldCallSuperDealloc &&
7731          "This should only be set for ObjC methods, which should have been "
7732          "handled in the block above.");
7733   assert(!getCurFunction()->ObjCShouldCallSuperFinalize &&
7734          "This should only be set for ObjC methods, which should have been "
7735          "handled in the block above.");
7736 
7737   // Verify and clean out per-function state.
7738   if (Body) {
7739     // C++ constructors that have function-try-blocks can't have return
7740     // statements in the handlers of that block. (C++ [except.handle]p14)
7741     // Verify this.
7742     if (FD && isa<CXXConstructorDecl>(FD) && isa<CXXTryStmt>(Body))
7743       DiagnoseReturnInConstructorExceptionHandler(cast<CXXTryStmt>(Body));
7744 
7745     // Verify that gotos and switch cases don't jump into scopes illegally.
7746     if (getCurFunction()->NeedsScopeChecking() &&
7747         !dcl->isInvalidDecl() &&
7748         !hasAnyUnrecoverableErrorsInThisFunction())
7749       DiagnoseInvalidJumps(Body);
7750 
7751     if (CXXDestructorDecl *Destructor = dyn_cast<CXXDestructorDecl>(dcl)) {
7752       if (!Destructor->getParent()->isDependentType())
7753         CheckDestructor(Destructor);
7754 
7755       MarkBaseAndMemberDestructorsReferenced(Destructor->getLocation(),
7756                                              Destructor->getParent());
7757     }
7758 
7759     // If any errors have occurred, clear out any temporaries that may have
7760     // been leftover. This ensures that these temporaries won't be picked up for
7761     // deletion in some later function.
7762     if (PP.getDiagnostics().hasErrorOccurred() ||
7763         PP.getDiagnostics().getSuppressAllDiagnostics()) {
7764       DiscardCleanupsInEvaluationContext();
7765     } else if (!isa<FunctionTemplateDecl>(dcl)) {
7766       // Since the body is valid, issue any analysis-based warnings that are
7767       // enabled.
7768       ActivePolicy = &WP;
7769     }
7770 
7771     if (!IsInstantiation && FD && FD->isConstexpr() && !FD->isInvalidDecl() &&
7772         (!CheckConstexprFunctionDecl(FD) ||
7773          !CheckConstexprFunctionBody(FD, Body)))
7774       FD->setInvalidDecl();
7775 
7776     assert(ExprCleanupObjects.empty() && "Leftover temporaries in function");
7777     assert(!ExprNeedsCleanups && "Unaccounted cleanups in function");
7778     assert(MaybeODRUseExprs.empty() &&
7779            "Leftover expressions for odr-use checking");
7780   }
7781 
7782   if (!IsInstantiation)
7783     PopDeclContext();
7784 
7785   PopFunctionScopeInfo(ActivePolicy, dcl);
7786 
7787   // If any errors have occurred, clear out any temporaries that may have
7788   // been leftover. This ensures that these temporaries won't be picked up for
7789   // deletion in some later function.
7790   if (getDiagnostics().hasErrorOccurred()) {
7791     DiscardCleanupsInEvaluationContext();
7792   }
7793 
7794   return dcl;
7795 }
7796 
7797 
7798 /// When we finish delayed parsing of an attribute, we must attach it to the
7799 /// relevant Decl.
7800 void Sema::ActOnFinishDelayedAttribute(Scope *S, Decl *D,
7801                                        ParsedAttributes &Attrs) {
7802   // Always attach attributes to the underlying decl.
7803   if (TemplateDecl *TD = dyn_cast<TemplateDecl>(D))
7804     D = TD->getTemplatedDecl();
7805   ProcessDeclAttributeList(S, D, Attrs.getList());
7806 
7807   if (CXXMethodDecl *Method = dyn_cast_or_null<CXXMethodDecl>(D))
7808     if (Method->isStatic())
7809       checkThisInStaticMemberFunctionAttributes(Method);
7810 }
7811 
7812 
7813 /// ImplicitlyDefineFunction - An undeclared identifier was used in a function
7814 /// call, forming a call to an implicitly defined function (per C99 6.5.1p2).
7815 NamedDecl *Sema::ImplicitlyDefineFunction(SourceLocation Loc,
7816                                           IdentifierInfo &II, Scope *S) {
7817   // Before we produce a declaration for an implicitly defined
7818   // function, see whether there was a locally-scoped declaration of
7819   // this name as a function or variable. If so, use that
7820   // (non-visible) declaration, and complain about it.
7821   llvm::DenseMap<DeclarationName, NamedDecl *>::iterator Pos
7822     = findLocallyScopedExternalDecl(&II);
7823   if (Pos != LocallyScopedExternalDecls.end()) {
7824     Diag(Loc, diag::warn_use_out_of_scope_declaration) << Pos->second;
7825     Diag(Pos->second->getLocation(), diag::note_previous_declaration);
7826     return Pos->second;
7827   }
7828 
7829   // Extension in C99.  Legal in C90, but warn about it.
7830   unsigned diag_id;
7831   if (II.getName().startswith("__builtin_"))
7832     diag_id = diag::warn_builtin_unknown;
7833   else if (getLangOpts().C99)
7834     diag_id = diag::ext_implicit_function_decl;
7835   else
7836     diag_id = diag::warn_implicit_function_decl;
7837   Diag(Loc, diag_id) << &II;
7838 
7839   // Because typo correction is expensive, only do it if the implicit
7840   // function declaration is going to be treated as an error.
7841   if (Diags.getDiagnosticLevel(diag_id, Loc) >= DiagnosticsEngine::Error) {
7842     TypoCorrection Corrected;
7843     DeclFilterCCC<FunctionDecl> Validator;
7844     if (S && (Corrected = CorrectTypo(DeclarationNameInfo(&II, Loc),
7845                                       LookupOrdinaryName, S, 0, Validator))) {
7846       std::string CorrectedStr = Corrected.getAsString(getLangOpts());
7847       std::string CorrectedQuotedStr = Corrected.getQuoted(getLangOpts());
7848       FunctionDecl *Func = Corrected.getCorrectionDeclAs<FunctionDecl>();
7849 
7850       Diag(Loc, diag::note_function_suggestion) << CorrectedQuotedStr
7851           << FixItHint::CreateReplacement(Loc, CorrectedStr);
7852 
7853       if (Func->getLocation().isValid()
7854           && !II.getName().startswith("__builtin_"))
7855         Diag(Func->getLocation(), diag::note_previous_decl)
7856             << CorrectedQuotedStr;
7857     }
7858   }
7859 
7860   // Set a Declarator for the implicit definition: int foo();
7861   const char *Dummy;
7862   AttributeFactory attrFactory;
7863   DeclSpec DS(attrFactory);
7864   unsigned DiagID;
7865   bool Error = DS.SetTypeSpecType(DeclSpec::TST_int, Loc, Dummy, DiagID);
7866   (void)Error; // Silence warning.
7867   assert(!Error && "Error setting up implicit decl!");
7868   Declarator D(DS, Declarator::BlockContext);
7869   D.AddTypeInfo(DeclaratorChunk::getFunction(false, false, false,
7870                                              SourceLocation(), 0, 0, 0, true,
7871                                              SourceLocation(), SourceLocation(),
7872                                              SourceLocation(), SourceLocation(),
7873                                              EST_None, SourceLocation(),
7874                                              0, 0, 0, 0, Loc, Loc, D),
7875                 DS.getAttributes(),
7876                 SourceLocation());
7877   D.SetIdentifier(&II, Loc);
7878 
7879   // Insert this function into translation-unit scope.
7880 
7881   DeclContext *PrevDC = CurContext;
7882   CurContext = Context.getTranslationUnitDecl();
7883 
7884   FunctionDecl *FD = dyn_cast<FunctionDecl>(ActOnDeclarator(TUScope, D));
7885   FD->setImplicit();
7886 
7887   CurContext = PrevDC;
7888 
7889   AddKnownFunctionAttributes(FD);
7890 
7891   return FD;
7892 }
7893 
7894 /// \brief Adds any function attributes that we know a priori based on
7895 /// the declaration of this function.
7896 ///
7897 /// These attributes can apply both to implicitly-declared builtins
7898 /// (like __builtin___printf_chk) or to library-declared functions
7899 /// like NSLog or printf.
7900 ///
7901 /// We need to check for duplicate attributes both here and where user-written
7902 /// attributes are applied to declarations.
7903 void Sema::AddKnownFunctionAttributes(FunctionDecl *FD) {
7904   if (FD->isInvalidDecl())
7905     return;
7906 
7907   // If this is a built-in function, map its builtin attributes to
7908   // actual attributes.
7909   if (unsigned BuiltinID = FD->getBuiltinID()) {
7910     // Handle printf-formatting attributes.
7911     unsigned FormatIdx;
7912     bool HasVAListArg;
7913     if (Context.BuiltinInfo.isPrintfLike(BuiltinID, FormatIdx, HasVAListArg)) {
7914       if (!FD->getAttr<FormatAttr>()) {
7915         const char *fmt = "printf";
7916         unsigned int NumParams = FD->getNumParams();
7917         if (FormatIdx < NumParams && // NumParams may be 0 (e.g. vfprintf)
7918             FD->getParamDecl(FormatIdx)->getType()->isObjCObjectPointerType())
7919           fmt = "NSString";
7920         FD->addAttr(::new (Context) FormatAttr(FD->getLocation(), Context,
7921                                                fmt, FormatIdx+1,
7922                                                HasVAListArg ? 0 : FormatIdx+2));
7923       }
7924     }
7925     if (Context.BuiltinInfo.isScanfLike(BuiltinID, FormatIdx,
7926                                              HasVAListArg)) {
7927      if (!FD->getAttr<FormatAttr>())
7928        FD->addAttr(::new (Context) FormatAttr(FD->getLocation(), Context,
7929                                               "scanf", FormatIdx+1,
7930                                               HasVAListArg ? 0 : FormatIdx+2));
7931     }
7932 
7933     // Mark const if we don't care about errno and that is the only
7934     // thing preventing the function from being const. This allows
7935     // IRgen to use LLVM intrinsics for such functions.
7936     if (!getLangOpts().MathErrno &&
7937         Context.BuiltinInfo.isConstWithoutErrno(BuiltinID)) {
7938       if (!FD->getAttr<ConstAttr>())
7939         FD->addAttr(::new (Context) ConstAttr(FD->getLocation(), Context));
7940     }
7941 
7942     if (Context.BuiltinInfo.isReturnsTwice(BuiltinID) &&
7943         !FD->getAttr<ReturnsTwiceAttr>())
7944       FD->addAttr(::new (Context) ReturnsTwiceAttr(FD->getLocation(), Context));
7945     if (Context.BuiltinInfo.isNoThrow(BuiltinID) && !FD->getAttr<NoThrowAttr>())
7946       FD->addAttr(::new (Context) NoThrowAttr(FD->getLocation(), Context));
7947     if (Context.BuiltinInfo.isConst(BuiltinID) && !FD->getAttr<ConstAttr>())
7948       FD->addAttr(::new (Context) ConstAttr(FD->getLocation(), Context));
7949   }
7950 
7951   IdentifierInfo *Name = FD->getIdentifier();
7952   if (!Name)
7953     return;
7954   if ((!getLangOpts().CPlusPlus &&
7955        FD->getDeclContext()->isTranslationUnit()) ||
7956       (isa<LinkageSpecDecl>(FD->getDeclContext()) &&
7957        cast<LinkageSpecDecl>(FD->getDeclContext())->getLanguage() ==
7958        LinkageSpecDecl::lang_c)) {
7959     // Okay: this could be a libc/libm/Objective-C function we know
7960     // about.
7961   } else
7962     return;
7963 
7964   if (Name->isStr("asprintf") || Name->isStr("vasprintf")) {
7965     // FIXME: asprintf and vasprintf aren't C99 functions. Should they be
7966     // target-specific builtins, perhaps?
7967     if (!FD->getAttr<FormatAttr>())
7968       FD->addAttr(::new (Context) FormatAttr(FD->getLocation(), Context,
7969                                              "printf", 2,
7970                                              Name->isStr("vasprintf") ? 0 : 3));
7971   }
7972 }
7973 
7974 TypedefDecl *Sema::ParseTypedefDecl(Scope *S, Declarator &D, QualType T,
7975                                     TypeSourceInfo *TInfo) {
7976   assert(D.getIdentifier() && "Wrong callback for declspec without declarator");
7977   assert(!T.isNull() && "GetTypeForDeclarator() returned null type");
7978 
7979   if (!TInfo) {
7980     assert(D.isInvalidType() && "no declarator info for valid type");
7981     TInfo = Context.getTrivialTypeSourceInfo(T);
7982   }
7983 
7984   // Scope manipulation handled by caller.
7985   TypedefDecl *NewTD = TypedefDecl::Create(Context, CurContext,
7986                                            D.getLocStart(),
7987                                            D.getIdentifierLoc(),
7988                                            D.getIdentifier(),
7989                                            TInfo);
7990 
7991   // Bail out immediately if we have an invalid declaration.
7992   if (D.isInvalidType()) {
7993     NewTD->setInvalidDecl();
7994     return NewTD;
7995   }
7996 
7997   if (D.getDeclSpec().isModulePrivateSpecified()) {
7998     if (CurContext->isFunctionOrMethod())
7999       Diag(NewTD->getLocation(), diag::err_module_private_local)
8000         << 2 << NewTD->getDeclName()
8001         << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc())
8002         << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());
8003     else
8004       NewTD->setModulePrivate();
8005   }
8006 
8007   // C++ [dcl.typedef]p8:
8008   //   If the typedef declaration defines an unnamed class (or
8009   //   enum), the first typedef-name declared by the declaration
8010   //   to be that class type (or enum type) is used to denote the
8011   //   class type (or enum type) for linkage purposes only.
8012   // We need to check whether the type was declared in the declaration.
8013   switch (D.getDeclSpec().getTypeSpecType()) {
8014   case TST_enum:
8015   case TST_struct:
8016   case TST_union:
8017   case TST_class: {
8018     TagDecl *tagFromDeclSpec = cast<TagDecl>(D.getDeclSpec().getRepAsDecl());
8019 
8020     // Do nothing if the tag is not anonymous or already has an
8021     // associated typedef (from an earlier typedef in this decl group).
8022     if (tagFromDeclSpec->getIdentifier()) break;
8023     if (tagFromDeclSpec->getTypedefNameForAnonDecl()) break;
8024 
8025     // A well-formed anonymous tag must always be a TUK_Definition.
8026     assert(tagFromDeclSpec->isThisDeclarationADefinition());
8027 
8028     // The type must match the tag exactly;  no qualifiers allowed.
8029     if (!Context.hasSameType(T, Context.getTagDeclType(tagFromDeclSpec)))
8030       break;
8031 
8032     // Otherwise, set this is the anon-decl typedef for the tag.
8033     tagFromDeclSpec->setTypedefNameForAnonDecl(NewTD);
8034     break;
8035   }
8036 
8037   default:
8038     break;
8039   }
8040 
8041   return NewTD;
8042 }
8043 
8044 
8045 /// \brief Check that this is a valid underlying type for an enum declaration.
8046 bool Sema::CheckEnumUnderlyingType(TypeSourceInfo *TI) {
8047   SourceLocation UnderlyingLoc = TI->getTypeLoc().getBeginLoc();
8048   QualType T = TI->getType();
8049 
8050   if (T->isDependentType() || T->isIntegralType(Context))
8051     return false;
8052 
8053   Diag(UnderlyingLoc, diag::err_enum_invalid_underlying) << T;
8054   return true;
8055 }
8056 
8057 /// Check whether this is a valid redeclaration of a previous enumeration.
8058 /// \return true if the redeclaration was invalid.
8059 bool Sema::CheckEnumRedeclaration(SourceLocation EnumLoc, bool IsScoped,
8060                                   QualType EnumUnderlyingTy,
8061                                   const EnumDecl *Prev) {
8062   bool IsFixed = !EnumUnderlyingTy.isNull();
8063 
8064   if (IsScoped != Prev->isScoped()) {
8065     Diag(EnumLoc, diag::err_enum_redeclare_scoped_mismatch)
8066       << Prev->isScoped();
8067     Diag(Prev->getLocation(), diag::note_previous_use);
8068     return true;
8069   }
8070 
8071   if (IsFixed && Prev->isFixed()) {
8072     if (!EnumUnderlyingTy->isDependentType() &&
8073         !Prev->getIntegerType()->isDependentType() &&
8074         !Context.hasSameUnqualifiedType(EnumUnderlyingTy,
8075                                         Prev->getIntegerType())) {
8076       Diag(EnumLoc, diag::err_enum_redeclare_type_mismatch)
8077         << EnumUnderlyingTy << Prev->getIntegerType();
8078       Diag(Prev->getLocation(), diag::note_previous_use);
8079       return true;
8080     }
8081   } else if (IsFixed != Prev->isFixed()) {
8082     Diag(EnumLoc, diag::err_enum_redeclare_fixed_mismatch)
8083       << Prev->isFixed();
8084     Diag(Prev->getLocation(), diag::note_previous_use);
8085     return true;
8086   }
8087 
8088   return false;
8089 }
8090 
8091 /// \brief Determine whether a tag with a given kind is acceptable
8092 /// as a redeclaration of the given tag declaration.
8093 ///
8094 /// \returns true if the new tag kind is acceptable, false otherwise.
8095 bool Sema::isAcceptableTagRedeclaration(const TagDecl *Previous,
8096                                         TagTypeKind NewTag, bool isDefinition,
8097                                         SourceLocation NewTagLoc,
8098                                         const IdentifierInfo &Name) {
8099   // C++ [dcl.type.elab]p3:
8100   //   The class-key or enum keyword present in the
8101   //   elaborated-type-specifier shall agree in kind with the
8102   //   declaration to which the name in the elaborated-type-specifier
8103   //   refers. This rule also applies to the form of
8104   //   elaborated-type-specifier that declares a class-name or
8105   //   friend class since it can be construed as referring to the
8106   //   definition of the class. Thus, in any
8107   //   elaborated-type-specifier, the enum keyword shall be used to
8108   //   refer to an enumeration (7.2), the union class-key shall be
8109   //   used to refer to a union (clause 9), and either the class or
8110   //   struct class-key shall be used to refer to a class (clause 9)
8111   //   declared using the class or struct class-key.
8112   TagTypeKind OldTag = Previous->getTagKind();
8113   if (!isDefinition || (NewTag != TTK_Class && NewTag != TTK_Struct))
8114     if (OldTag == NewTag)
8115       return true;
8116 
8117   if ((OldTag == TTK_Struct || OldTag == TTK_Class) &&
8118       (NewTag == TTK_Struct || NewTag == TTK_Class)) {
8119     // Warn about the struct/class tag mismatch.
8120     bool isTemplate = false;
8121     if (const CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(Previous))
8122       isTemplate = Record->getDescribedClassTemplate();
8123 
8124     if (!ActiveTemplateInstantiations.empty()) {
8125       // In a template instantiation, do not offer fix-its for tag mismatches
8126       // since they usually mess up the template instead of fixing the problem.
8127       Diag(NewTagLoc, diag::warn_struct_class_tag_mismatch)
8128         << (NewTag == TTK_Class) << isTemplate << &Name;
8129       return true;
8130     }
8131 
8132     if (isDefinition) {
8133       // On definitions, check previous tags and issue a fix-it for each
8134       // one that doesn't match the current tag.
8135       if (Previous->getDefinition()) {
8136         // Don't suggest fix-its for redefinitions.
8137         return true;
8138       }
8139 
8140       bool previousMismatch = false;
8141       for (TagDecl::redecl_iterator I(Previous->redecls_begin()),
8142            E(Previous->redecls_end()); I != E; ++I) {
8143         if (I->getTagKind() != NewTag) {
8144           if (!previousMismatch) {
8145             previousMismatch = true;
8146             Diag(NewTagLoc, diag::warn_struct_class_previous_tag_mismatch)
8147               << (NewTag == TTK_Class) << isTemplate << &Name;
8148           }
8149           Diag(I->getInnerLocStart(), diag::note_struct_class_suggestion)
8150             << (NewTag == TTK_Class)
8151             << FixItHint::CreateReplacement(I->getInnerLocStart(),
8152                                             NewTag == TTK_Class?
8153                                             "class" : "struct");
8154         }
8155       }
8156       return true;
8157     }
8158 
8159     // Check for a previous definition.  If current tag and definition
8160     // are same type, do nothing.  If no definition, but disagree with
8161     // with previous tag type, give a warning, but no fix-it.
8162     const TagDecl *Redecl = Previous->getDefinition() ?
8163                             Previous->getDefinition() : Previous;
8164     if (Redecl->getTagKind() == NewTag) {
8165       return true;
8166     }
8167 
8168     Diag(NewTagLoc, diag::warn_struct_class_tag_mismatch)
8169       << (NewTag == TTK_Class)
8170       << isTemplate << &Name;
8171     Diag(Redecl->getLocation(), diag::note_previous_use);
8172 
8173     // If there is a previous defintion, suggest a fix-it.
8174     if (Previous->getDefinition()) {
8175         Diag(NewTagLoc, diag::note_struct_class_suggestion)
8176           << (Redecl->getTagKind() == TTK_Class)
8177           << FixItHint::CreateReplacement(SourceRange(NewTagLoc),
8178                         Redecl->getTagKind() == TTK_Class? "class" : "struct");
8179     }
8180 
8181     return true;
8182   }
8183   return false;
8184 }
8185 
8186 /// ActOnTag - This is invoked when we see 'struct foo' or 'struct {'.  In the
8187 /// former case, Name will be non-null.  In the later case, Name will be null.
8188 /// TagSpec indicates what kind of tag this is. TUK indicates whether this is a
8189 /// reference/declaration/definition of a tag.
8190 Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
8191                      SourceLocation KWLoc, CXXScopeSpec &SS,
8192                      IdentifierInfo *Name, SourceLocation NameLoc,
8193                      AttributeList *Attr, AccessSpecifier AS,
8194                      SourceLocation ModulePrivateLoc,
8195                      MultiTemplateParamsArg TemplateParameterLists,
8196                      bool &OwnedDecl, bool &IsDependent,
8197                      SourceLocation ScopedEnumKWLoc,
8198                      bool ScopedEnumUsesClassTag,
8199                      TypeResult UnderlyingType) {
8200   // If this is not a definition, it must have a name.
8201   IdentifierInfo *OrigName = Name;
8202   assert((Name != 0 || TUK == TUK_Definition) &&
8203          "Nameless record must be a definition!");
8204   assert(TemplateParameterLists.size() == 0 || TUK != TUK_Reference);
8205 
8206   OwnedDecl = false;
8207   TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec);
8208   bool ScopedEnum = ScopedEnumKWLoc.isValid();
8209 
8210   // FIXME: Check explicit specializations more carefully.
8211   bool isExplicitSpecialization = false;
8212   bool Invalid = false;
8213 
8214   // We only need to do this matching if we have template parameters
8215   // or a scope specifier, which also conveniently avoids this work
8216   // for non-C++ cases.
8217   if (TemplateParameterLists.size() > 0 ||
8218       (SS.isNotEmpty() && TUK != TUK_Reference)) {
8219     if (TemplateParameterList *TemplateParams
8220           = MatchTemplateParametersToScopeSpecifier(KWLoc, NameLoc, SS,
8221                                                 TemplateParameterLists.get(),
8222                                                 TemplateParameterLists.size(),
8223                                                     TUK == TUK_Friend,
8224                                                     isExplicitSpecialization,
8225                                                     Invalid)) {
8226       if (TemplateParams->size() > 0) {
8227         // This is a declaration or definition of a class template (which may
8228         // be a member of another template).
8229 
8230         if (Invalid)
8231           return 0;
8232 
8233         OwnedDecl = false;
8234         DeclResult Result = CheckClassTemplate(S, TagSpec, TUK, KWLoc,
8235                                                SS, Name, NameLoc, Attr,
8236                                                TemplateParams, AS,
8237                                                ModulePrivateLoc,
8238                                            TemplateParameterLists.size() - 1,
8239                  (TemplateParameterList**) TemplateParameterLists.release());
8240         return Result.get();
8241       } else {
8242         // The "template<>" header is extraneous.
8243         Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams)
8244           << TypeWithKeyword::getTagTypeKindName(Kind) << Name;
8245         isExplicitSpecialization = true;
8246       }
8247     }
8248   }
8249 
8250   // Figure out the underlying type if this a enum declaration. We need to do
8251   // this early, because it's needed to detect if this is an incompatible
8252   // redeclaration.
8253   llvm::PointerUnion<const Type*, TypeSourceInfo*> EnumUnderlying;
8254 
8255   if (Kind == TTK_Enum) {
8256     if (UnderlyingType.isInvalid() || (!UnderlyingType.get() && ScopedEnum))
8257       // No underlying type explicitly specified, or we failed to parse the
8258       // type, default to int.
8259       EnumUnderlying = Context.IntTy.getTypePtr();
8260     else if (UnderlyingType.get()) {
8261       // C++0x 7.2p2: The type-specifier-seq of an enum-base shall name an
8262       // integral type; any cv-qualification is ignored.
8263       TypeSourceInfo *TI = 0;
8264       GetTypeFromParser(UnderlyingType.get(), &TI);
8265       EnumUnderlying = TI;
8266 
8267       if (CheckEnumUnderlyingType(TI))
8268         // Recover by falling back to int.
8269         EnumUnderlying = Context.IntTy.getTypePtr();
8270 
8271       if (DiagnoseUnexpandedParameterPack(TI->getTypeLoc().getBeginLoc(), TI,
8272                                           UPPC_FixedUnderlyingType))
8273         EnumUnderlying = Context.IntTy.getTypePtr();
8274 
8275     } else if (getLangOpts().MicrosoftMode)
8276       // Microsoft enums are always of int type.
8277       EnumUnderlying = Context.IntTy.getTypePtr();
8278   }
8279 
8280   DeclContext *SearchDC = CurContext;
8281   DeclContext *DC = CurContext;
8282   bool isStdBadAlloc = false;
8283 
8284   RedeclarationKind Redecl = ForRedeclaration;
8285   if (TUK == TUK_Friend || TUK == TUK_Reference)
8286     Redecl = NotForRedeclaration;
8287 
8288   LookupResult Previous(*this, Name, NameLoc, LookupTagName, Redecl);
8289 
8290   if (Name && SS.isNotEmpty()) {
8291     // We have a nested-name tag ('struct foo::bar').
8292 
8293     // Check for invalid 'foo::'.
8294     if (SS.isInvalid()) {
8295       Name = 0;
8296       goto CreateNewDecl;
8297     }
8298 
8299     // If this is a friend or a reference to a class in a dependent
8300     // context, don't try to make a decl for it.
8301     if (TUK == TUK_Friend || TUK == TUK_Reference) {
8302       DC = computeDeclContext(SS, false);
8303       if (!DC) {
8304         IsDependent = true;
8305         return 0;
8306       }
8307     } else {
8308       DC = computeDeclContext(SS, true);
8309       if (!DC) {
8310         Diag(SS.getRange().getBegin(), diag::err_dependent_nested_name_spec)
8311           << SS.getRange();
8312         return 0;
8313       }
8314     }
8315 
8316     if (RequireCompleteDeclContext(SS, DC))
8317       return 0;
8318 
8319     SearchDC = DC;
8320     // Look-up name inside 'foo::'.
8321     LookupQualifiedName(Previous, DC);
8322 
8323     if (Previous.isAmbiguous())
8324       return 0;
8325 
8326     if (Previous.empty()) {
8327       // Name lookup did not find anything. However, if the
8328       // nested-name-specifier refers to the current instantiation,
8329       // and that current instantiation has any dependent base
8330       // classes, we might find something at instantiation time: treat
8331       // this as a dependent elaborated-type-specifier.
8332       // But this only makes any sense for reference-like lookups.
8333       if (Previous.wasNotFoundInCurrentInstantiation() &&
8334           (TUK == TUK_Reference || TUK == TUK_Friend)) {
8335         IsDependent = true;
8336         return 0;
8337       }
8338 
8339       // A tag 'foo::bar' must already exist.
8340       Diag(NameLoc, diag::err_not_tag_in_scope)
8341         << Kind << Name << DC << SS.getRange();
8342       Name = 0;
8343       Invalid = true;
8344       goto CreateNewDecl;
8345     }
8346   } else if (Name) {
8347     // If this is a named struct, check to see if there was a previous forward
8348     // declaration or definition.
8349     // FIXME: We're looking into outer scopes here, even when we
8350     // shouldn't be. Doing so can result in ambiguities that we
8351     // shouldn't be diagnosing.
8352     LookupName(Previous, S);
8353 
8354     if (Previous.isAmbiguous() &&
8355         (TUK == TUK_Definition || TUK == TUK_Declaration)) {
8356       LookupResult::Filter F = Previous.makeFilter();
8357       while (F.hasNext()) {
8358         NamedDecl *ND = F.next();
8359         if (ND->getDeclContext()->getRedeclContext() != SearchDC)
8360           F.erase();
8361       }
8362       F.done();
8363     }
8364 
8365     // Note:  there used to be some attempt at recovery here.
8366     if (Previous.isAmbiguous())
8367       return 0;
8368 
8369     if (!getLangOpts().CPlusPlus && TUK != TUK_Reference) {
8370       // FIXME: This makes sure that we ignore the contexts associated
8371       // with C structs, unions, and enums when looking for a matching
8372       // tag declaration or definition. See the similar lookup tweak
8373       // in Sema::LookupName; is there a better way to deal with this?
8374       while (isa<RecordDecl>(SearchDC) || isa<EnumDecl>(SearchDC))
8375         SearchDC = SearchDC->getParent();
8376     }
8377   } else if (S->isFunctionPrototypeScope()) {
8378     // If this is an enum declaration in function prototype scope, set its
8379     // initial context to the translation unit.
8380     // FIXME: [citation needed]
8381     SearchDC = Context.getTranslationUnitDecl();
8382   }
8383 
8384   if (Previous.isSingleResult() &&
8385       Previous.getFoundDecl()->isTemplateParameter()) {
8386     // Maybe we will complain about the shadowed template parameter.
8387     DiagnoseTemplateParameterShadow(NameLoc, Previous.getFoundDecl());
8388     // Just pretend that we didn't see the previous declaration.
8389     Previous.clear();
8390   }
8391 
8392   if (getLangOpts().CPlusPlus && Name && DC && StdNamespace &&
8393       DC->Equals(getStdNamespace()) && Name->isStr("bad_alloc")) {
8394     // This is a declaration of or a reference to "std::bad_alloc".
8395     isStdBadAlloc = true;
8396 
8397     if (Previous.empty() && StdBadAlloc) {
8398       // std::bad_alloc has been implicitly declared (but made invisible to
8399       // name lookup). Fill in this implicit declaration as the previous
8400       // declaration, so that the declarations get chained appropriately.
8401       Previous.addDecl(getStdBadAlloc());
8402     }
8403   }
8404 
8405   // If we didn't find a previous declaration, and this is a reference
8406   // (or friend reference), move to the correct scope.  In C++, we
8407   // also need to do a redeclaration lookup there, just in case
8408   // there's a shadow friend decl.
8409   if (Name && Previous.empty() &&
8410       (TUK == TUK_Reference || TUK == TUK_Friend)) {
8411     if (Invalid) goto CreateNewDecl;
8412     assert(SS.isEmpty());
8413 
8414     if (TUK == TUK_Reference) {
8415       // C++ [basic.scope.pdecl]p5:
8416       //   -- for an elaborated-type-specifier of the form
8417       //
8418       //          class-key identifier
8419       //
8420       //      if the elaborated-type-specifier is used in the
8421       //      decl-specifier-seq or parameter-declaration-clause of a
8422       //      function defined in namespace scope, the identifier is
8423       //      declared as a class-name in the namespace that contains
8424       //      the declaration; otherwise, except as a friend
8425       //      declaration, the identifier is declared in the smallest
8426       //      non-class, non-function-prototype scope that contains the
8427       //      declaration.
8428       //
8429       // C99 6.7.2.3p8 has a similar (but not identical!) provision for
8430       // C structs and unions.
8431       //
8432       // It is an error in C++ to declare (rather than define) an enum
8433       // type, including via an elaborated type specifier.  We'll
8434       // diagnose that later; for now, declare the enum in the same
8435       // scope as we would have picked for any other tag type.
8436       //
8437       // GNU C also supports this behavior as part of its incomplete
8438       // enum types extension, while GNU C++ does not.
8439       //
8440       // Find the context where we'll be declaring the tag.
8441       // FIXME: We would like to maintain the current DeclContext as the
8442       // lexical context,
8443       while (!SearchDC->isFileContext() && !SearchDC->isFunctionOrMethod())
8444         SearchDC = SearchDC->getParent();
8445 
8446       // Find the scope where we'll be declaring the tag.
8447       while (S->isClassScope() ||
8448              (getLangOpts().CPlusPlus &&
8449               S->isFunctionPrototypeScope()) ||
8450              ((S->getFlags() & Scope::DeclScope) == 0) ||
8451              (S->getEntity() &&
8452               ((DeclContext *)S->getEntity())->isTransparentContext()))
8453         S = S->getParent();
8454     } else {
8455       assert(TUK == TUK_Friend);
8456       // C++ [namespace.memdef]p3:
8457       //   If a friend declaration in a non-local class first declares a
8458       //   class or function, the friend class or function is a member of
8459       //   the innermost enclosing namespace.
8460       SearchDC = SearchDC->getEnclosingNamespaceContext();
8461     }
8462 
8463     // In C++, we need to do a redeclaration lookup to properly
8464     // diagnose some problems.
8465     if (getLangOpts().CPlusPlus) {
8466       Previous.setRedeclarationKind(ForRedeclaration);
8467       LookupQualifiedName(Previous, SearchDC);
8468     }
8469   }
8470 
8471   if (!Previous.empty()) {
8472     NamedDecl *PrevDecl = (*Previous.begin())->getUnderlyingDecl();
8473 
8474     // It's okay to have a tag decl in the same scope as a typedef
8475     // which hides a tag decl in the same scope.  Finding this
8476     // insanity with a redeclaration lookup can only actually happen
8477     // in C++.
8478     //
8479     // This is also okay for elaborated-type-specifiers, which is
8480     // technically forbidden by the current standard but which is
8481     // okay according to the likely resolution of an open issue;
8482     // see http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#407
8483     if (getLangOpts().CPlusPlus) {
8484       if (TypedefNameDecl *TD = dyn_cast<TypedefNameDecl>(PrevDecl)) {
8485         if (const TagType *TT = TD->getUnderlyingType()->getAs<TagType>()) {
8486           TagDecl *Tag = TT->getDecl();
8487           if (Tag->getDeclName() == Name &&
8488               Tag->getDeclContext()->getRedeclContext()
8489                           ->Equals(TD->getDeclContext()->getRedeclContext())) {
8490             PrevDecl = Tag;
8491             Previous.clear();
8492             Previous.addDecl(Tag);
8493             Previous.resolveKind();
8494           }
8495         }
8496       }
8497     }
8498 
8499     if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {
8500       // If this is a use of a previous tag, or if the tag is already declared
8501       // in the same scope (so that the definition/declaration completes or
8502       // rementions the tag), reuse the decl.
8503       if (TUK == TUK_Reference || TUK == TUK_Friend ||
8504           isDeclInScope(PrevDecl, SearchDC, S, isExplicitSpecialization)) {
8505         // Make sure that this wasn't declared as an enum and now used as a
8506         // struct or something similar.
8507         if (!isAcceptableTagRedeclaration(PrevTagDecl, Kind,
8508                                           TUK == TUK_Definition, KWLoc,
8509                                           *Name)) {
8510           bool SafeToContinue
8511             = (PrevTagDecl->getTagKind() != TTK_Enum &&
8512                Kind != TTK_Enum);
8513           if (SafeToContinue)
8514             Diag(KWLoc, diag::err_use_with_wrong_tag)
8515               << Name
8516               << FixItHint::CreateReplacement(SourceRange(KWLoc),
8517                                               PrevTagDecl->getKindName());
8518           else
8519             Diag(KWLoc, diag::err_use_with_wrong_tag) << Name;
8520           Diag(PrevTagDecl->getLocation(), diag::note_previous_use);
8521 
8522           if (SafeToContinue)
8523             Kind = PrevTagDecl->getTagKind();
8524           else {
8525             // Recover by making this an anonymous redefinition.
8526             Name = 0;
8527             Previous.clear();
8528             Invalid = true;
8529           }
8530         }
8531 
8532         if (Kind == TTK_Enum && PrevTagDecl->getTagKind() == TTK_Enum) {
8533           const EnumDecl *PrevEnum = cast<EnumDecl>(PrevTagDecl);
8534 
8535           // If this is an elaborated-type-specifier for a scoped enumeration,
8536           // the 'class' keyword is not necessary and not permitted.
8537           if (TUK == TUK_Reference || TUK == TUK_Friend) {
8538             if (ScopedEnum)
8539               Diag(ScopedEnumKWLoc, diag::err_enum_class_reference)
8540                 << PrevEnum->isScoped()
8541                 << FixItHint::CreateRemoval(ScopedEnumKWLoc);
8542             return PrevTagDecl;
8543           }
8544 
8545           QualType EnumUnderlyingTy;
8546           if (TypeSourceInfo *TI = EnumUnderlying.dyn_cast<TypeSourceInfo*>())
8547             EnumUnderlyingTy = TI->getType();
8548           else if (const Type *T = EnumUnderlying.dyn_cast<const Type*>())
8549             EnumUnderlyingTy = QualType(T, 0);
8550 
8551           // All conflicts with previous declarations are recovered by
8552           // returning the previous declaration, unless this is a definition,
8553           // in which case we want the caller to bail out.
8554           if (CheckEnumRedeclaration(NameLoc.isValid() ? NameLoc : KWLoc,
8555                                      ScopedEnum, EnumUnderlyingTy, PrevEnum))
8556             return TUK == TUK_Declaration ? PrevTagDecl : 0;
8557         }
8558 
8559         if (!Invalid) {
8560           // If this is a use, just return the declaration we found.
8561 
8562           // FIXME: In the future, return a variant or some other clue
8563           // for the consumer of this Decl to know it doesn't own it.
8564           // For our current ASTs this shouldn't be a problem, but will
8565           // need to be changed with DeclGroups.
8566           if ((TUK == TUK_Reference && (!PrevTagDecl->getFriendObjectKind() ||
8567                getLangOpts().MicrosoftExt)) || TUK == TUK_Friend)
8568             return PrevTagDecl;
8569 
8570           // Diagnose attempts to redefine a tag.
8571           if (TUK == TUK_Definition) {
8572             if (TagDecl *Def = PrevTagDecl->getDefinition()) {
8573               // If we're defining a specialization and the previous definition
8574               // is from an implicit instantiation, don't emit an error
8575               // here; we'll catch this in the general case below.
8576               bool IsExplicitSpecializationAfterInstantiation = false;
8577               if (isExplicitSpecialization) {
8578                 if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(Def))
8579                   IsExplicitSpecializationAfterInstantiation =
8580                     RD->getTemplateSpecializationKind() !=
8581                     TSK_ExplicitSpecialization;
8582                 else if (EnumDecl *ED = dyn_cast<EnumDecl>(Def))
8583                   IsExplicitSpecializationAfterInstantiation =
8584                     ED->getTemplateSpecializationKind() !=
8585                     TSK_ExplicitSpecialization;
8586               }
8587 
8588               if (!IsExplicitSpecializationAfterInstantiation) {
8589                 // A redeclaration in function prototype scope in C isn't
8590                 // visible elsewhere, so merely issue a warning.
8591                 if (!getLangOpts().CPlusPlus && S->containedInPrototypeScope())
8592                   Diag(NameLoc, diag::warn_redefinition_in_param_list) << Name;
8593                 else
8594                   Diag(NameLoc, diag::err_redefinition) << Name;
8595                 Diag(Def->getLocation(), diag::note_previous_definition);
8596                 // If this is a redefinition, recover by making this
8597                 // struct be anonymous, which will make any later
8598                 // references get the previous definition.
8599                 Name = 0;
8600                 Previous.clear();
8601                 Invalid = true;
8602               }
8603             } else {
8604               // If the type is currently being defined, complain
8605               // about a nested redefinition.
8606               const TagType *Tag
8607                 = cast<TagType>(Context.getTagDeclType(PrevTagDecl));
8608               if (Tag->isBeingDefined()) {
8609                 Diag(NameLoc, diag::err_nested_redefinition) << Name;
8610                 Diag(PrevTagDecl->getLocation(),
8611                      diag::note_previous_definition);
8612                 Name = 0;
8613                 Previous.clear();
8614                 Invalid = true;
8615               }
8616             }
8617 
8618             // Okay, this is definition of a previously declared or referenced
8619             // tag PrevDecl. We're going to create a new Decl for it.
8620           }
8621         }
8622         // If we get here we have (another) forward declaration or we
8623         // have a definition.  Just create a new decl.
8624 
8625       } else {
8626         // If we get here, this is a definition of a new tag type in a nested
8627         // scope, e.g. "struct foo; void bar() { struct foo; }", just create a
8628         // new decl/type.  We set PrevDecl to NULL so that the entities
8629         // have distinct types.
8630         Previous.clear();
8631       }
8632       // If we get here, we're going to create a new Decl. If PrevDecl
8633       // is non-NULL, it's a definition of the tag declared by
8634       // PrevDecl. If it's NULL, we have a new definition.
8635 
8636 
8637     // Otherwise, PrevDecl is not a tag, but was found with tag
8638     // lookup.  This is only actually possible in C++, where a few
8639     // things like templates still live in the tag namespace.
8640     } else {
8641       // Use a better diagnostic if an elaborated-type-specifier
8642       // found the wrong kind of type on the first
8643       // (non-redeclaration) lookup.
8644       if ((TUK == TUK_Reference || TUK == TUK_Friend) &&
8645           !Previous.isForRedeclaration()) {
8646         unsigned Kind = 0;
8647         if (isa<TypedefDecl>(PrevDecl)) Kind = 1;
8648         else if (isa<TypeAliasDecl>(PrevDecl)) Kind = 2;
8649         else if (isa<ClassTemplateDecl>(PrevDecl)) Kind = 3;
8650         Diag(NameLoc, diag::err_tag_reference_non_tag) << Kind;
8651         Diag(PrevDecl->getLocation(), diag::note_declared_at);
8652         Invalid = true;
8653 
8654       // Otherwise, only diagnose if the declaration is in scope.
8655       } else if (!isDeclInScope(PrevDecl, SearchDC, S,
8656                                 isExplicitSpecialization)) {
8657         // do nothing
8658 
8659       // Diagnose implicit declarations introduced by elaborated types.
8660       } else if (TUK == TUK_Reference || TUK == TUK_Friend) {
8661         unsigned Kind = 0;
8662         if (isa<TypedefDecl>(PrevDecl)) Kind = 1;
8663         else if (isa<TypeAliasDecl>(PrevDecl)) Kind = 2;
8664         else if (isa<ClassTemplateDecl>(PrevDecl)) Kind = 3;
8665         Diag(NameLoc, diag::err_tag_reference_conflict) << Kind;
8666         Diag(PrevDecl->getLocation(), diag::note_previous_decl) << PrevDecl;
8667         Invalid = true;
8668 
8669       // Otherwise it's a declaration.  Call out a particularly common
8670       // case here.
8671       } else if (TypedefNameDecl *TND = dyn_cast<TypedefNameDecl>(PrevDecl)) {
8672         unsigned Kind = 0;
8673         if (isa<TypeAliasDecl>(PrevDecl)) Kind = 1;
8674         Diag(NameLoc, diag::err_tag_definition_of_typedef)
8675           << Name << Kind << TND->getUnderlyingType();
8676         Diag(PrevDecl->getLocation(), diag::note_previous_decl) << PrevDecl;
8677         Invalid = true;
8678 
8679       // Otherwise, diagnose.
8680       } else {
8681         // The tag name clashes with something else in the target scope,
8682         // issue an error and recover by making this tag be anonymous.
8683         Diag(NameLoc, diag::err_redefinition_different_kind) << Name;
8684         Diag(PrevDecl->getLocation(), diag::note_previous_definition);
8685         Name = 0;
8686         Invalid = true;
8687       }
8688 
8689       // The existing declaration isn't relevant to us; we're in a
8690       // new scope, so clear out the previous declaration.
8691       Previous.clear();
8692     }
8693   }
8694 
8695 CreateNewDecl:
8696 
8697   TagDecl *PrevDecl = 0;
8698   if (Previous.isSingleResult())
8699     PrevDecl = cast<TagDecl>(Previous.getFoundDecl());
8700 
8701   // If there is an identifier, use the location of the identifier as the
8702   // location of the decl, otherwise use the location of the struct/union
8703   // keyword.
8704   SourceLocation Loc = NameLoc.isValid() ? NameLoc : KWLoc;
8705 
8706   // Otherwise, create a new declaration. If there is a previous
8707   // declaration of the same entity, the two will be linked via
8708   // PrevDecl.
8709   TagDecl *New;
8710 
8711   bool IsForwardReference = false;
8712   if (Kind == TTK_Enum) {
8713     // FIXME: Tag decls should be chained to any simultaneous vardecls, e.g.:
8714     // enum X { A, B, C } D;    D should chain to X.
8715     New = EnumDecl::Create(Context, SearchDC, KWLoc, Loc, Name,
8716                            cast_or_null<EnumDecl>(PrevDecl), ScopedEnum,
8717                            ScopedEnumUsesClassTag, !EnumUnderlying.isNull());
8718     // If this is an undefined enum, warn.
8719     if (TUK != TUK_Definition && !Invalid) {
8720       TagDecl *Def;
8721       if (getLangOpts().CPlusPlus0x && cast<EnumDecl>(New)->isFixed()) {
8722         // C++0x: 7.2p2: opaque-enum-declaration.
8723         // Conflicts are diagnosed above. Do nothing.
8724       }
8725       else if (PrevDecl && (Def = cast<EnumDecl>(PrevDecl)->getDefinition())) {
8726         Diag(Loc, diag::ext_forward_ref_enum_def)
8727           << New;
8728         Diag(Def->getLocation(), diag::note_previous_definition);
8729       } else {
8730         unsigned DiagID = diag::ext_forward_ref_enum;
8731         if (getLangOpts().MicrosoftMode)
8732           DiagID = diag::ext_ms_forward_ref_enum;
8733         else if (getLangOpts().CPlusPlus)
8734           DiagID = diag::err_forward_ref_enum;
8735         Diag(Loc, DiagID);
8736 
8737         // If this is a forward-declared reference to an enumeration, make a
8738         // note of it; we won't actually be introducing the declaration into
8739         // the declaration context.
8740         if (TUK == TUK_Reference)
8741           IsForwardReference = true;
8742       }
8743     }
8744 
8745     if (EnumUnderlying) {
8746       EnumDecl *ED = cast<EnumDecl>(New);
8747       if (TypeSourceInfo *TI = EnumUnderlying.dyn_cast<TypeSourceInfo*>())
8748         ED->setIntegerTypeSourceInfo(TI);
8749       else
8750         ED->setIntegerType(QualType(EnumUnderlying.get<const Type*>(), 0));
8751       ED->setPromotionType(ED->getIntegerType());
8752     }
8753 
8754   } else {
8755     // struct/union/class
8756 
8757     // FIXME: Tag decls should be chained to any simultaneous vardecls, e.g.:
8758     // struct X { int A; } D;    D should chain to X.
8759     if (getLangOpts().CPlusPlus) {
8760       // FIXME: Look for a way to use RecordDecl for simple structs.
8761       New = CXXRecordDecl::Create(Context, Kind, SearchDC, KWLoc, Loc, Name,
8762                                   cast_or_null<CXXRecordDecl>(PrevDecl));
8763 
8764       if (isStdBadAlloc && (!StdBadAlloc || getStdBadAlloc()->isImplicit()))
8765         StdBadAlloc = cast<CXXRecordDecl>(New);
8766     } else
8767       New = RecordDecl::Create(Context, Kind, SearchDC, KWLoc, Loc, Name,
8768                                cast_or_null<RecordDecl>(PrevDecl));
8769   }
8770 
8771   // Maybe add qualifier info.
8772   if (SS.isNotEmpty()) {
8773     if (SS.isSet()) {
8774       // If this is either a declaration or a definition, check the
8775       // nested-name-specifier against the current context. We don't do this
8776       // for explicit specializations, because they have similar checking
8777       // (with more specific diagnostics) in the call to
8778       // CheckMemberSpecialization, below.
8779       if (!isExplicitSpecialization &&
8780           (TUK == TUK_Definition || TUK == TUK_Declaration) &&
8781           diagnoseQualifiedDeclaration(SS, DC, OrigName, NameLoc))
8782         Invalid = true;
8783 
8784       New->setQualifierInfo(SS.getWithLocInContext(Context));
8785       if (TemplateParameterLists.size() > 0) {
8786         New->setTemplateParameterListsInfo(Context,
8787                                            TemplateParameterLists.size(),
8788                     (TemplateParameterList**) TemplateParameterLists.release());
8789       }
8790     }
8791     else
8792       Invalid = true;
8793   }
8794 
8795   if (RecordDecl *RD = dyn_cast<RecordDecl>(New)) {
8796     // Add alignment attributes if necessary; these attributes are checked when
8797     // the ASTContext lays out the structure.
8798     //
8799     // It is important for implementing the correct semantics that this
8800     // happen here (in act on tag decl). The #pragma pack stack is
8801     // maintained as a result of parser callbacks which can occur at
8802     // many points during the parsing of a struct declaration (because
8803     // the #pragma tokens are effectively skipped over during the
8804     // parsing of the struct).
8805     AddAlignmentAttributesForRecord(RD);
8806 
8807     AddMsStructLayoutForRecord(RD);
8808   }
8809 
8810   if (ModulePrivateLoc.isValid()) {
8811     if (isExplicitSpecialization)
8812       Diag(New->getLocation(), diag::err_module_private_specialization)
8813         << 2
8814         << FixItHint::CreateRemoval(ModulePrivateLoc);
8815     // __module_private__ does not apply to local classes. However, we only
8816     // diagnose this as an error when the declaration specifiers are
8817     // freestanding. Here, we just ignore the __module_private__.
8818     else if (!SearchDC->isFunctionOrMethod())
8819       New->setModulePrivate();
8820   }
8821 
8822   // If this is a specialization of a member class (of a class template),
8823   // check the specialization.
8824   if (isExplicitSpecialization && CheckMemberSpecialization(New, Previous))
8825     Invalid = true;
8826 
8827   if (Invalid)
8828     New->setInvalidDecl();
8829 
8830   if (Attr)
8831     ProcessDeclAttributeList(S, New, Attr);
8832 
8833   // If we're declaring or defining a tag in function prototype scope
8834   // in C, note that this type can only be used within the function.
8835   if (Name && S->isFunctionPrototypeScope() && !getLangOpts().CPlusPlus)
8836     Diag(Loc, diag::warn_decl_in_param_list) << Context.getTagDeclType(New);
8837 
8838   // Set the lexical context. If the tag has a C++ scope specifier, the
8839   // lexical context will be different from the semantic context.
8840   New->setLexicalDeclContext(CurContext);
8841 
8842   // Mark this as a friend decl if applicable.
8843   // In Microsoft mode, a friend declaration also acts as a forward
8844   // declaration so we always pass true to setObjectOfFriendDecl to make
8845   // the tag name visible.
8846   if (TUK == TUK_Friend)
8847     New->setObjectOfFriendDecl(/* PreviouslyDeclared = */ !Previous.empty() ||
8848                                getLangOpts().MicrosoftExt);
8849 
8850   // Set the access specifier.
8851   if (!Invalid && SearchDC->isRecord())
8852     SetMemberAccessSpecifier(New, PrevDecl, AS);
8853 
8854   if (TUK == TUK_Definition)
8855     New->startDefinition();
8856 
8857   // If this has an identifier, add it to the scope stack.
8858   if (TUK == TUK_Friend) {
8859     // We might be replacing an existing declaration in the lookup tables;
8860     // if so, borrow its access specifier.
8861     if (PrevDecl)
8862       New->setAccess(PrevDecl->getAccess());
8863 
8864     DeclContext *DC = New->getDeclContext()->getRedeclContext();
8865     DC->makeDeclVisibleInContext(New);
8866     if (Name) // can be null along some error paths
8867       if (Scope *EnclosingScope = getScopeForDeclContext(S, DC))
8868         PushOnScopeChains(New, EnclosingScope, /* AddToContext = */ false);
8869   } else if (Name) {
8870     S = getNonFieldDeclScope(S);
8871     PushOnScopeChains(New, S, !IsForwardReference);
8872     if (IsForwardReference)
8873       SearchDC->makeDeclVisibleInContext(New);
8874 
8875   } else {
8876     CurContext->addDecl(New);
8877   }
8878 
8879   // If this is the C FILE type, notify the AST context.
8880   if (IdentifierInfo *II = New->getIdentifier())
8881     if (!New->isInvalidDecl() &&
8882         New->getDeclContext()->getRedeclContext()->isTranslationUnit() &&
8883         II->isStr("FILE"))
8884       Context.setFILEDecl(New);
8885 
8886   // If we were in function prototype scope (and not in C++ mode), add this
8887   // tag to the list of decls to inject into the function definition scope.
8888   if (S->isFunctionPrototypeScope() && !getLangOpts().CPlusPlus &&
8889       InFunctionDeclarator && Name)
8890     DeclsInPrototypeScope.push_back(New);
8891 
8892   if (PrevDecl)
8893     mergeDeclAttributes(New, PrevDecl);
8894 
8895   // If there's a #pragma GCC visibility in scope, set the visibility of this
8896   // record.
8897   AddPushedVisibilityAttribute(New);
8898 
8899   OwnedDecl = true;
8900   return New;
8901 }
8902 
8903 void Sema::ActOnTagStartDefinition(Scope *S, Decl *TagD) {
8904   AdjustDeclIfTemplate(TagD);
8905   TagDecl *Tag = cast<TagDecl>(TagD);
8906 
8907   // Enter the tag context.
8908   PushDeclContext(S, Tag);
8909 
8910   ActOnDocumentableDecl(TagD);
8911 
8912   // If there's a #pragma GCC visibility in scope, set the visibility of this
8913   // record.
8914   AddPushedVisibilityAttribute(Tag);
8915 }
8916 
8917 Decl *Sema::ActOnObjCContainerStartDefinition(Decl *IDecl) {
8918   assert(isa<ObjCContainerDecl>(IDecl) &&
8919          "ActOnObjCContainerStartDefinition - Not ObjCContainerDecl");
8920   DeclContext *OCD = cast<DeclContext>(IDecl);
8921   assert(getContainingDC(OCD) == CurContext &&
8922       "The next DeclContext should be lexically contained in the current one.");
8923   CurContext = OCD;
8924   return IDecl;
8925 }
8926 
8927 void Sema::ActOnStartCXXMemberDeclarations(Scope *S, Decl *TagD,
8928                                            SourceLocation FinalLoc,
8929                                            SourceLocation LBraceLoc) {
8930   AdjustDeclIfTemplate(TagD);
8931   CXXRecordDecl *Record = cast<CXXRecordDecl>(TagD);
8932 
8933   FieldCollector->StartClass();
8934 
8935   if (!Record->getIdentifier())
8936     return;
8937 
8938   if (FinalLoc.isValid())
8939     Record->addAttr(new (Context) FinalAttr(FinalLoc, Context));
8940 
8941   // C++ [class]p2:
8942   //   [...] The class-name is also inserted into the scope of the
8943   //   class itself; this is known as the injected-class-name. For
8944   //   purposes of access checking, the injected-class-name is treated
8945   //   as if it were a public member name.
8946   CXXRecordDecl *InjectedClassName
8947     = CXXRecordDecl::Create(Context, Record->getTagKind(), CurContext,
8948                             Record->getLocStart(), Record->getLocation(),
8949                             Record->getIdentifier(),
8950                             /*PrevDecl=*/0,
8951                             /*DelayTypeCreation=*/true);
8952   Context.getTypeDeclType(InjectedClassName, Record);
8953   InjectedClassName->setImplicit();
8954   InjectedClassName->setAccess(AS_public);
8955   if (ClassTemplateDecl *Template = Record->getDescribedClassTemplate())
8956       InjectedClassName->setDescribedClassTemplate(Template);
8957   PushOnScopeChains(InjectedClassName, S);
8958   assert(InjectedClassName->isInjectedClassName() &&
8959          "Broken injected-class-name");
8960 }
8961 
8962 void Sema::ActOnTagFinishDefinition(Scope *S, Decl *TagD,
8963                                     SourceLocation RBraceLoc) {
8964   AdjustDeclIfTemplate(TagD);
8965   TagDecl *Tag = cast<TagDecl>(TagD);
8966   Tag->setRBraceLoc(RBraceLoc);
8967 
8968   // Make sure we "complete" the definition even it is invalid.
8969   if (Tag->isBeingDefined()) {
8970     assert(Tag->isInvalidDecl() && "We should already have completed it");
8971     if (RecordDecl *RD = dyn_cast<RecordDecl>(Tag))
8972       RD->completeDefinition();
8973   }
8974 
8975   if (isa<CXXRecordDecl>(Tag))
8976     FieldCollector->FinishClass();
8977 
8978   // Exit this scope of this tag's definition.
8979   PopDeclContext();
8980 
8981   // Notify the consumer that we've defined a tag.
8982   Consumer.HandleTagDeclDefinition(Tag);
8983 }
8984 
8985 void Sema::ActOnObjCContainerFinishDefinition() {
8986   // Exit this scope of this interface definition.
8987   PopDeclContext();
8988 }
8989 
8990 void Sema::ActOnObjCTemporaryExitContainerContext(DeclContext *DC) {
8991   assert(DC == CurContext && "Mismatch of container contexts");
8992   OriginalLexicalContext = DC;
8993   ActOnObjCContainerFinishDefinition();
8994 }
8995 
8996 void Sema::ActOnObjCReenterContainerContext(DeclContext *DC) {
8997   ActOnObjCContainerStartDefinition(cast<Decl>(DC));
8998   OriginalLexicalContext = 0;
8999 }
9000 
9001 void Sema::ActOnTagDefinitionError(Scope *S, Decl *TagD) {
9002   AdjustDeclIfTemplate(TagD);
9003   TagDecl *Tag = cast<TagDecl>(TagD);
9004   Tag->setInvalidDecl();
9005 
9006   // Make sure we "complete" the definition even it is invalid.
9007   if (Tag->isBeingDefined()) {
9008     if (RecordDecl *RD = dyn_cast<RecordDecl>(Tag))
9009       RD->completeDefinition();
9010   }
9011 
9012   // We're undoing ActOnTagStartDefinition here, not
9013   // ActOnStartCXXMemberDeclarations, so we don't have to mess with
9014   // the FieldCollector.
9015 
9016   PopDeclContext();
9017 }
9018 
9019 // Note that FieldName may be null for anonymous bitfields.
9020 ExprResult Sema::VerifyBitField(SourceLocation FieldLoc,
9021                                 IdentifierInfo *FieldName,
9022                                 QualType FieldTy, Expr *BitWidth,
9023                                 bool *ZeroWidth) {
9024   // Default to true; that shouldn't confuse checks for emptiness
9025   if (ZeroWidth)
9026     *ZeroWidth = true;
9027 
9028   // C99 6.7.2.1p4 - verify the field type.
9029   // C++ 9.6p3: A bit-field shall have integral or enumeration type.
9030   if (!FieldTy->isDependentType() && !FieldTy->isIntegralOrEnumerationType()) {
9031     // Handle incomplete types with specific error.
9032     if (RequireCompleteType(FieldLoc, FieldTy, diag::err_field_incomplete))
9033       return ExprError();
9034     if (FieldName)
9035       return Diag(FieldLoc, diag::err_not_integral_type_bitfield)
9036         << FieldName << FieldTy << BitWidth->getSourceRange();
9037     return Diag(FieldLoc, diag::err_not_integral_type_anon_bitfield)
9038       << FieldTy << BitWidth->getSourceRange();
9039   } else if (DiagnoseUnexpandedParameterPack(const_cast<Expr *>(BitWidth),
9040                                              UPPC_BitFieldWidth))
9041     return ExprError();
9042 
9043   // If the bit-width is type- or value-dependent, don't try to check
9044   // it now.
9045   if (BitWidth->isValueDependent() || BitWidth->isTypeDependent())
9046     return Owned(BitWidth);
9047 
9048   llvm::APSInt Value;
9049   ExprResult ICE = VerifyIntegerConstantExpression(BitWidth, &Value);
9050   if (ICE.isInvalid())
9051     return ICE;
9052   BitWidth = ICE.take();
9053 
9054   if (Value != 0 && ZeroWidth)
9055     *ZeroWidth = false;
9056 
9057   // Zero-width bitfield is ok for anonymous field.
9058   if (Value == 0 && FieldName)
9059     return Diag(FieldLoc, diag::err_bitfield_has_zero_width) << FieldName;
9060 
9061   if (Value.isSigned() && Value.isNegative()) {
9062     if (FieldName)
9063       return Diag(FieldLoc, diag::err_bitfield_has_negative_width)
9064                << FieldName << Value.toString(10);
9065     return Diag(FieldLoc, diag::err_anon_bitfield_has_negative_width)
9066       << Value.toString(10);
9067   }
9068 
9069   if (!FieldTy->isDependentType()) {
9070     uint64_t TypeSize = Context.getTypeSize(FieldTy);
9071     if (Value.getZExtValue() > TypeSize) {
9072       if (!getLangOpts().CPlusPlus) {
9073         if (FieldName)
9074           return Diag(FieldLoc, diag::err_bitfield_width_exceeds_type_size)
9075             << FieldName << (unsigned)Value.getZExtValue()
9076             << (unsigned)TypeSize;
9077 
9078         return Diag(FieldLoc, diag::err_anon_bitfield_width_exceeds_type_size)
9079           << (unsigned)Value.getZExtValue() << (unsigned)TypeSize;
9080       }
9081 
9082       if (FieldName)
9083         Diag(FieldLoc, diag::warn_bitfield_width_exceeds_type_size)
9084           << FieldName << (unsigned)Value.getZExtValue()
9085           << (unsigned)TypeSize;
9086       else
9087         Diag(FieldLoc, diag::warn_anon_bitfield_width_exceeds_type_size)
9088           << (unsigned)Value.getZExtValue() << (unsigned)TypeSize;
9089     }
9090   }
9091 
9092   return Owned(BitWidth);
9093 }
9094 
9095 /// ActOnField - Each field of a C struct/union is passed into this in order
9096 /// to create a FieldDecl object for it.
9097 Decl *Sema::ActOnField(Scope *S, Decl *TagD, SourceLocation DeclStart,
9098                        Declarator &D, Expr *BitfieldWidth) {
9099   FieldDecl *Res = HandleField(S, cast_or_null<RecordDecl>(TagD),
9100                                DeclStart, D, static_cast<Expr*>(BitfieldWidth),
9101                                /*InitStyle=*/ICIS_NoInit, AS_public);
9102   return Res;
9103 }
9104 
9105 /// HandleField - Analyze a field of a C struct or a C++ data member.
9106 ///
9107 FieldDecl *Sema::HandleField(Scope *S, RecordDecl *Record,
9108                              SourceLocation DeclStart,
9109                              Declarator &D, Expr *BitWidth,
9110                              InClassInitStyle InitStyle,
9111                              AccessSpecifier AS) {
9112   IdentifierInfo *II = D.getIdentifier();
9113   SourceLocation Loc = DeclStart;
9114   if (II) Loc = D.getIdentifierLoc();
9115 
9116   TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
9117   QualType T = TInfo->getType();
9118   if (getLangOpts().CPlusPlus) {
9119     CheckExtraCXXDefaultArguments(D);
9120 
9121     if (DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo,
9122                                         UPPC_DataMemberType)) {
9123       D.setInvalidType();
9124       T = Context.IntTy;
9125       TInfo = Context.getTrivialTypeSourceInfo(T, Loc);
9126     }
9127   }
9128 
9129   DiagnoseFunctionSpecifiers(D);
9130 
9131   if (D.getDeclSpec().isThreadSpecified())
9132     Diag(D.getDeclSpec().getThreadSpecLoc(), diag::err_invalid_thread);
9133   if (D.getDeclSpec().isConstexprSpecified())
9134     Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_invalid_constexpr)
9135       << 2;
9136 
9137   // Check to see if this name was declared as a member previously
9138   NamedDecl *PrevDecl = 0;
9139   LookupResult Previous(*this, II, Loc, LookupMemberName, ForRedeclaration);
9140   LookupName(Previous, S);
9141   switch (Previous.getResultKind()) {
9142     case LookupResult::Found:
9143     case LookupResult::FoundUnresolvedValue:
9144       PrevDecl = Previous.getAsSingle<NamedDecl>();
9145       break;
9146 
9147     case LookupResult::FoundOverloaded:
9148       PrevDecl = Previous.getRepresentativeDecl();
9149       break;
9150 
9151     case LookupResult::NotFound:
9152     case LookupResult::NotFoundInCurrentInstantiation:
9153     case LookupResult::Ambiguous:
9154       break;
9155   }
9156   Previous.suppressDiagnostics();
9157 
9158   if (PrevDecl && PrevDecl->isTemplateParameter()) {
9159     // Maybe we will complain about the shadowed template parameter.
9160     DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
9161     // Just pretend that we didn't see the previous declaration.
9162     PrevDecl = 0;
9163   }
9164 
9165   if (PrevDecl && !isDeclInScope(PrevDecl, Record, S))
9166     PrevDecl = 0;
9167 
9168   bool Mutable
9169     = (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_mutable);
9170   SourceLocation TSSL = D.getLocStart();
9171   FieldDecl *NewFD
9172     = CheckFieldDecl(II, T, TInfo, Record, Loc, Mutable, BitWidth, InitStyle,
9173                      TSSL, AS, PrevDecl, &D);
9174 
9175   if (NewFD->isInvalidDecl())
9176     Record->setInvalidDecl();
9177 
9178   if (D.getDeclSpec().isModulePrivateSpecified())
9179     NewFD->setModulePrivate();
9180 
9181   if (NewFD->isInvalidDecl() && PrevDecl) {
9182     // Don't introduce NewFD into scope; there's already something
9183     // with the same name in the same scope.
9184   } else if (II) {
9185     PushOnScopeChains(NewFD, S);
9186   } else
9187     Record->addDecl(NewFD);
9188 
9189   return NewFD;
9190 }
9191 
9192 /// \brief Build a new FieldDecl and check its well-formedness.
9193 ///
9194 /// This routine builds a new FieldDecl given the fields name, type,
9195 /// record, etc. \p PrevDecl should refer to any previous declaration
9196 /// with the same name and in the same scope as the field to be
9197 /// created.
9198 ///
9199 /// \returns a new FieldDecl.
9200 ///
9201 /// \todo The Declarator argument is a hack. It will be removed once
9202 FieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T,
9203                                 TypeSourceInfo *TInfo,
9204                                 RecordDecl *Record, SourceLocation Loc,
9205                                 bool Mutable, Expr *BitWidth,
9206                                 InClassInitStyle InitStyle,
9207                                 SourceLocation TSSL,
9208                                 AccessSpecifier AS, NamedDecl *PrevDecl,
9209                                 Declarator *D) {
9210   IdentifierInfo *II = Name.getAsIdentifierInfo();
9211   bool InvalidDecl = false;
9212   if (D) InvalidDecl = D->isInvalidType();
9213 
9214   // If we receive a broken type, recover by assuming 'int' and
9215   // marking this declaration as invalid.
9216   if (T.isNull()) {
9217     InvalidDecl = true;
9218     T = Context.IntTy;
9219   }
9220 
9221   QualType EltTy = Context.getBaseElementType(T);
9222   if (!EltTy->isDependentType()) {
9223     if (RequireCompleteType(Loc, EltTy, diag::err_field_incomplete)) {
9224       // Fields of incomplete type force their record to be invalid.
9225       Record->setInvalidDecl();
9226       InvalidDecl = true;
9227     } else {
9228       NamedDecl *Def;
9229       EltTy->isIncompleteType(&Def);
9230       if (Def && Def->isInvalidDecl()) {
9231         Record->setInvalidDecl();
9232         InvalidDecl = true;
9233       }
9234     }
9235   }
9236 
9237   // C99 6.7.2.1p8: A member of a structure or union may have any type other
9238   // than a variably modified type.
9239   if (!InvalidDecl && T->isVariablyModifiedType()) {
9240     bool SizeIsNegative;
9241     llvm::APSInt Oversized;
9242     QualType FixedTy = TryToFixInvalidVariablyModifiedType(T, Context,
9243                                                            SizeIsNegative,
9244                                                            Oversized);
9245     if (!FixedTy.isNull()) {
9246       Diag(Loc, diag::warn_illegal_constant_array_size);
9247       T = FixedTy;
9248     } else {
9249       if (SizeIsNegative)
9250         Diag(Loc, diag::err_typecheck_negative_array_size);
9251       else if (Oversized.getBoolValue())
9252         Diag(Loc, diag::err_array_too_large)
9253           << Oversized.toString(10);
9254       else
9255         Diag(Loc, diag::err_typecheck_field_variable_size);
9256       InvalidDecl = true;
9257     }
9258   }
9259 
9260   // Fields can not have abstract class types
9261   if (!InvalidDecl && RequireNonAbstractType(Loc, T,
9262                                              diag::err_abstract_type_in_decl,
9263                                              AbstractFieldType))
9264     InvalidDecl = true;
9265 
9266   bool ZeroWidth = false;
9267   // If this is declared as a bit-field, check the bit-field.
9268   if (!InvalidDecl && BitWidth) {
9269     BitWidth = VerifyBitField(Loc, II, T, BitWidth, &ZeroWidth).take();
9270     if (!BitWidth) {
9271       InvalidDecl = true;
9272       BitWidth = 0;
9273       ZeroWidth = false;
9274     }
9275   }
9276 
9277   // Check that 'mutable' is consistent with the type of the declaration.
9278   if (!InvalidDecl && Mutable) {
9279     unsigned DiagID = 0;
9280     if (T->isReferenceType())
9281       DiagID = diag::err_mutable_reference;
9282     else if (T.isConstQualified())
9283       DiagID = diag::err_mutable_const;
9284 
9285     if (DiagID) {
9286       SourceLocation ErrLoc = Loc;
9287       if (D && D->getDeclSpec().getStorageClassSpecLoc().isValid())
9288         ErrLoc = D->getDeclSpec().getStorageClassSpecLoc();
9289       Diag(ErrLoc, DiagID);
9290       Mutable = false;
9291       InvalidDecl = true;
9292     }
9293   }
9294 
9295   FieldDecl *NewFD = FieldDecl::Create(Context, Record, TSSL, Loc, II, T, TInfo,
9296                                        BitWidth, Mutable, InitStyle);
9297   if (InvalidDecl)
9298     NewFD->setInvalidDecl();
9299 
9300   if (PrevDecl && !isa<TagDecl>(PrevDecl)) {
9301     Diag(Loc, diag::err_duplicate_member) << II;
9302     Diag(PrevDecl->getLocation(), diag::note_previous_declaration);
9303     NewFD->setInvalidDecl();
9304   }
9305 
9306   if (!InvalidDecl && getLangOpts().CPlusPlus) {
9307     if (Record->isUnion()) {
9308       if (const RecordType *RT = EltTy->getAs<RecordType>()) {
9309         CXXRecordDecl* RDecl = cast<CXXRecordDecl>(RT->getDecl());
9310         if (RDecl->getDefinition()) {
9311           // C++ [class.union]p1: An object of a class with a non-trivial
9312           // constructor, a non-trivial copy constructor, a non-trivial
9313           // destructor, or a non-trivial copy assignment operator
9314           // cannot be a member of a union, nor can an array of such
9315           // objects.
9316           if (CheckNontrivialField(NewFD))
9317             NewFD->setInvalidDecl();
9318         }
9319       }
9320 
9321       // C++ [class.union]p1: If a union contains a member of reference type,
9322       // the program is ill-formed.
9323       if (EltTy->isReferenceType()) {
9324         Diag(NewFD->getLocation(), diag::err_union_member_of_reference_type)
9325           << NewFD->getDeclName() << EltTy;
9326         NewFD->setInvalidDecl();
9327       }
9328     }
9329   }
9330 
9331   // FIXME: We need to pass in the attributes given an AST
9332   // representation, not a parser representation.
9333   if (D)
9334     // FIXME: What to pass instead of TUScope?
9335     ProcessDeclAttributes(TUScope, NewFD, *D);
9336 
9337   // In auto-retain/release, infer strong retension for fields of
9338   // retainable type.
9339   if (getLangOpts().ObjCAutoRefCount && inferObjCARCLifetime(NewFD))
9340     NewFD->setInvalidDecl();
9341 
9342   if (T.isObjCGCWeak())
9343     Diag(Loc, diag::warn_attribute_weak_on_field);
9344 
9345   NewFD->setAccess(AS);
9346   return NewFD;
9347 }
9348 
9349 bool Sema::CheckNontrivialField(FieldDecl *FD) {
9350   assert(FD);
9351   assert(getLangOpts().CPlusPlus && "valid check only for C++");
9352 
9353   if (FD->isInvalidDecl())
9354     return true;
9355 
9356   QualType EltTy = Context.getBaseElementType(FD->getType());
9357   if (const RecordType *RT = EltTy->getAs<RecordType>()) {
9358     CXXRecordDecl* RDecl = cast<CXXRecordDecl>(RT->getDecl());
9359     if (RDecl->getDefinition()) {
9360       // We check for copy constructors before constructors
9361       // because otherwise we'll never get complaints about
9362       // copy constructors.
9363 
9364       CXXSpecialMember member = CXXInvalid;
9365       if (!RDecl->hasTrivialCopyConstructor())
9366         member = CXXCopyConstructor;
9367       else if (!RDecl->hasTrivialDefaultConstructor())
9368         member = CXXDefaultConstructor;
9369       else if (!RDecl->hasTrivialCopyAssignment())
9370         member = CXXCopyAssignment;
9371       else if (!RDecl->hasTrivialDestructor())
9372         member = CXXDestructor;
9373 
9374       if (member != CXXInvalid) {
9375         if (!getLangOpts().CPlusPlus0x &&
9376             getLangOpts().ObjCAutoRefCount && RDecl->hasObjectMember()) {
9377           // Objective-C++ ARC: it is an error to have a non-trivial field of
9378           // a union. However, system headers in Objective-C programs
9379           // occasionally have Objective-C lifetime objects within unions,
9380           // and rather than cause the program to fail, we make those
9381           // members unavailable.
9382           SourceLocation Loc = FD->getLocation();
9383           if (getSourceManager().isInSystemHeader(Loc)) {
9384             if (!FD->hasAttr<UnavailableAttr>())
9385               FD->addAttr(new (Context) UnavailableAttr(Loc, Context,
9386                                   "this system field has retaining ownership"));
9387             return false;
9388           }
9389         }
9390 
9391         Diag(FD->getLocation(), getLangOpts().CPlusPlus0x ?
9392                diag::warn_cxx98_compat_nontrivial_union_or_anon_struct_member :
9393                diag::err_illegal_union_or_anon_struct_member)
9394           << (int)FD->getParent()->isUnion() << FD->getDeclName() << member;
9395         DiagnoseNontrivial(RT, member);
9396         return !getLangOpts().CPlusPlus0x;
9397       }
9398     }
9399   }
9400 
9401   return false;
9402 }
9403 
9404 /// If the given constructor is user-provided, produce a diagnostic explaining
9405 /// that it makes the class non-trivial.
9406 static bool DiagnoseNontrivialUserProvidedCtor(Sema &S, QualType QT,
9407                                                CXXConstructorDecl *CD,
9408                                                Sema::CXXSpecialMember CSM) {
9409   if (!CD->isUserProvided())
9410     return false;
9411 
9412   SourceLocation CtorLoc = CD->getLocation();
9413   S.Diag(CtorLoc, diag::note_nontrivial_user_defined) << QT << CSM;
9414   return true;
9415 }
9416 
9417 /// DiagnoseNontrivial - Given that a class has a non-trivial
9418 /// special member, figure out why.
9419 void Sema::DiagnoseNontrivial(const RecordType* T, CXXSpecialMember member) {
9420   QualType QT(T, 0U);
9421   CXXRecordDecl* RD = cast<CXXRecordDecl>(T->getDecl());
9422 
9423   // Check whether the member was user-declared.
9424   switch (member) {
9425   case CXXInvalid:
9426     break;
9427 
9428   case CXXDefaultConstructor:
9429     if (RD->hasUserDeclaredConstructor()) {
9430       typedef CXXRecordDecl::ctor_iterator ctor_iter;
9431       for (ctor_iter CI = RD->ctor_begin(), CE = RD->ctor_end(); CI != CE; ++CI)
9432         if (DiagnoseNontrivialUserProvidedCtor(*this, QT, *CI, member))
9433           return;
9434 
9435       // No user-provided constructors; look for constructor templates.
9436       typedef CXXRecordDecl::specific_decl_iterator<FunctionTemplateDecl>
9437           tmpl_iter;
9438       for (tmpl_iter TI(RD->decls_begin()), TE(RD->decls_end());
9439            TI != TE; ++TI) {
9440         CXXConstructorDecl *CD =
9441             dyn_cast<CXXConstructorDecl>(TI->getTemplatedDecl());
9442         if (CD && DiagnoseNontrivialUserProvidedCtor(*this, QT, CD, member))
9443           return;
9444       }
9445     }
9446     break;
9447 
9448   case CXXCopyConstructor:
9449     if (RD->hasUserDeclaredCopyConstructor()) {
9450       SourceLocation CtorLoc =
9451         RD->getCopyConstructor(0)->getLocation();
9452       Diag(CtorLoc, diag::note_nontrivial_user_defined) << QT << member;
9453       return;
9454     }
9455     break;
9456 
9457   case CXXMoveConstructor:
9458     if (RD->hasUserDeclaredMoveConstructor()) {
9459       SourceLocation CtorLoc = RD->getMoveConstructor()->getLocation();
9460       Diag(CtorLoc, diag::note_nontrivial_user_defined) << QT << member;
9461       return;
9462     }
9463     break;
9464 
9465   case CXXCopyAssignment:
9466     if (RD->hasUserDeclaredCopyAssignment()) {
9467       SourceLocation AssignLoc =
9468         RD->getCopyAssignmentOperator(0)->getLocation();
9469       Diag(AssignLoc, diag::note_nontrivial_user_defined) << QT << member;
9470       return;
9471     }
9472     break;
9473 
9474   case CXXMoveAssignment:
9475     if (RD->hasUserDeclaredMoveAssignment()) {
9476       SourceLocation AssignLoc = RD->getMoveAssignmentOperator()->getLocation();
9477       Diag(AssignLoc, diag::note_nontrivial_user_defined) << QT << member;
9478       return;
9479     }
9480     break;
9481 
9482   case CXXDestructor:
9483     if (RD->hasUserDeclaredDestructor()) {
9484       SourceLocation DtorLoc = LookupDestructor(RD)->getLocation();
9485       Diag(DtorLoc, diag::note_nontrivial_user_defined) << QT << member;
9486       return;
9487     }
9488     break;
9489   }
9490 
9491   typedef CXXRecordDecl::base_class_iterator base_iter;
9492 
9493   // Virtual bases and members inhibit trivial copying/construction,
9494   // but not trivial destruction.
9495   if (member != CXXDestructor) {
9496     // Check for virtual bases.  vbases includes indirect virtual bases,
9497     // so we just iterate through the direct bases.
9498     for (base_iter bi = RD->bases_begin(), be = RD->bases_end(); bi != be; ++bi)
9499       if (bi->isVirtual()) {
9500         SourceLocation BaseLoc = bi->getLocStart();
9501         Diag(BaseLoc, diag::note_nontrivial_has_virtual) << QT << 1;
9502         return;
9503       }
9504 
9505     // Check for virtual methods.
9506     typedef CXXRecordDecl::method_iterator meth_iter;
9507     for (meth_iter mi = RD->method_begin(), me = RD->method_end(); mi != me;
9508          ++mi) {
9509       if (mi->isVirtual()) {
9510         SourceLocation MLoc = mi->getLocStart();
9511         Diag(MLoc, diag::note_nontrivial_has_virtual) << QT << 0;
9512         return;
9513       }
9514     }
9515   }
9516 
9517   bool (CXXRecordDecl::*hasTrivial)() const;
9518   switch (member) {
9519   case CXXDefaultConstructor:
9520     hasTrivial = &CXXRecordDecl::hasTrivialDefaultConstructor; break;
9521   case CXXCopyConstructor:
9522     hasTrivial = &CXXRecordDecl::hasTrivialCopyConstructor; break;
9523   case CXXCopyAssignment:
9524     hasTrivial = &CXXRecordDecl::hasTrivialCopyAssignment; break;
9525   case CXXDestructor:
9526     hasTrivial = &CXXRecordDecl::hasTrivialDestructor; break;
9527   default:
9528     llvm_unreachable("unexpected special member");
9529   }
9530 
9531   // Check for nontrivial bases (and recurse).
9532   for (base_iter bi = RD->bases_begin(), be = RD->bases_end(); bi != be; ++bi) {
9533     const RecordType *BaseRT = bi->getType()->getAs<RecordType>();
9534     assert(BaseRT && "Don't know how to handle dependent bases");
9535     CXXRecordDecl *BaseRecTy = cast<CXXRecordDecl>(BaseRT->getDecl());
9536     if (!(BaseRecTy->*hasTrivial)()) {
9537       SourceLocation BaseLoc = bi->getLocStart();
9538       Diag(BaseLoc, diag::note_nontrivial_has_nontrivial) << QT << 1 << member;
9539       DiagnoseNontrivial(BaseRT, member);
9540       return;
9541     }
9542   }
9543 
9544   // Check for nontrivial members (and recurse).
9545   typedef RecordDecl::field_iterator field_iter;
9546   for (field_iter fi = RD->field_begin(), fe = RD->field_end(); fi != fe;
9547        ++fi) {
9548     QualType EltTy = Context.getBaseElementType(fi->getType());
9549     if (const RecordType *EltRT = EltTy->getAs<RecordType>()) {
9550       CXXRecordDecl* EltRD = cast<CXXRecordDecl>(EltRT->getDecl());
9551 
9552       if (!(EltRD->*hasTrivial)()) {
9553         SourceLocation FLoc = fi->getLocation();
9554         Diag(FLoc, diag::note_nontrivial_has_nontrivial) << QT << 0 << member;
9555         DiagnoseNontrivial(EltRT, member);
9556         return;
9557       }
9558     }
9559 
9560     if (EltTy->isObjCLifetimeType()) {
9561       switch (EltTy.getObjCLifetime()) {
9562       case Qualifiers::OCL_None:
9563       case Qualifiers::OCL_ExplicitNone:
9564         break;
9565 
9566       case Qualifiers::OCL_Autoreleasing:
9567       case Qualifiers::OCL_Weak:
9568       case Qualifiers::OCL_Strong:
9569         Diag(fi->getLocation(), diag::note_nontrivial_objc_ownership)
9570           << QT << EltTy.getObjCLifetime();
9571         return;
9572       }
9573     }
9574   }
9575 
9576   llvm_unreachable("found no explanation for non-trivial member");
9577 }
9578 
9579 /// TranslateIvarVisibility - Translate visibility from a token ID to an
9580 ///  AST enum value.
9581 static ObjCIvarDecl::AccessControl
9582 TranslateIvarVisibility(tok::ObjCKeywordKind ivarVisibility) {
9583   switch (ivarVisibility) {
9584   default: llvm_unreachable("Unknown visitibility kind");
9585   case tok::objc_private: return ObjCIvarDecl::Private;
9586   case tok::objc_public: return ObjCIvarDecl::Public;
9587   case tok::objc_protected: return ObjCIvarDecl::Protected;
9588   case tok::objc_package: return ObjCIvarDecl::Package;
9589   }
9590 }
9591 
9592 /// ActOnIvar - Each ivar field of an objective-c class is passed into this
9593 /// in order to create an IvarDecl object for it.
9594 Decl *Sema::ActOnIvar(Scope *S,
9595                                 SourceLocation DeclStart,
9596                                 Declarator &D, Expr *BitfieldWidth,
9597                                 tok::ObjCKeywordKind Visibility) {
9598 
9599   IdentifierInfo *II = D.getIdentifier();
9600   Expr *BitWidth = (Expr*)BitfieldWidth;
9601   SourceLocation Loc = DeclStart;
9602   if (II) Loc = D.getIdentifierLoc();
9603 
9604   // FIXME: Unnamed fields can be handled in various different ways, for
9605   // example, unnamed unions inject all members into the struct namespace!
9606 
9607   TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
9608   QualType T = TInfo->getType();
9609 
9610   if (BitWidth) {
9611     // 6.7.2.1p3, 6.7.2.1p4
9612     BitWidth = VerifyBitField(Loc, II, T, BitWidth).take();
9613     if (!BitWidth)
9614       D.setInvalidType();
9615   } else {
9616     // Not a bitfield.
9617 
9618     // validate II.
9619 
9620   }
9621   if (T->isReferenceType()) {
9622     Diag(Loc, diag::err_ivar_reference_type);
9623     D.setInvalidType();
9624   }
9625   // C99 6.7.2.1p8: A member of a structure or union may have any type other
9626   // than a variably modified type.
9627   else if (T->isVariablyModifiedType()) {
9628     Diag(Loc, diag::err_typecheck_ivar_variable_size);
9629     D.setInvalidType();
9630   }
9631 
9632   // Get the visibility (access control) for this ivar.
9633   ObjCIvarDecl::AccessControl ac =
9634     Visibility != tok::objc_not_keyword ? TranslateIvarVisibility(Visibility)
9635                                         : ObjCIvarDecl::None;
9636   // Must set ivar's DeclContext to its enclosing interface.
9637   ObjCContainerDecl *EnclosingDecl = cast<ObjCContainerDecl>(CurContext);
9638   if (!EnclosingDecl || EnclosingDecl->isInvalidDecl())
9639     return 0;
9640   ObjCContainerDecl *EnclosingContext;
9641   if (ObjCImplementationDecl *IMPDecl =
9642       dyn_cast<ObjCImplementationDecl>(EnclosingDecl)) {
9643     if (LangOpts.ObjCRuntime.isFragile()) {
9644     // Case of ivar declared in an implementation. Context is that of its class.
9645       EnclosingContext = IMPDecl->getClassInterface();
9646       assert(EnclosingContext && "Implementation has no class interface!");
9647     }
9648     else
9649       EnclosingContext = EnclosingDecl;
9650   } else {
9651     if (ObjCCategoryDecl *CDecl =
9652         dyn_cast<ObjCCategoryDecl>(EnclosingDecl)) {
9653       if (LangOpts.ObjCRuntime.isFragile() || !CDecl->IsClassExtension()) {
9654         Diag(Loc, diag::err_misplaced_ivar) << CDecl->IsClassExtension();
9655         return 0;
9656       }
9657     }
9658     EnclosingContext = EnclosingDecl;
9659   }
9660 
9661   // Construct the decl.
9662   ObjCIvarDecl *NewID = ObjCIvarDecl::Create(Context, EnclosingContext,
9663                                              DeclStart, Loc, II, T,
9664                                              TInfo, ac, (Expr *)BitfieldWidth);
9665 
9666   if (II) {
9667     NamedDecl *PrevDecl = LookupSingleName(S, II, Loc, LookupMemberName,
9668                                            ForRedeclaration);
9669     if (PrevDecl && isDeclInScope(PrevDecl, EnclosingContext, S)
9670         && !isa<TagDecl>(PrevDecl)) {
9671       Diag(Loc, diag::err_duplicate_member) << II;
9672       Diag(PrevDecl->getLocation(), diag::note_previous_declaration);
9673       NewID->setInvalidDecl();
9674     }
9675   }
9676 
9677   // Process attributes attached to the ivar.
9678   ProcessDeclAttributes(S, NewID, D);
9679 
9680   if (D.isInvalidType())
9681     NewID->setInvalidDecl();
9682 
9683   // In ARC, infer 'retaining' for ivars of retainable type.
9684   if (getLangOpts().ObjCAutoRefCount && inferObjCARCLifetime(NewID))
9685     NewID->setInvalidDecl();
9686 
9687   if (D.getDeclSpec().isModulePrivateSpecified())
9688     NewID->setModulePrivate();
9689 
9690   if (II) {
9691     // FIXME: When interfaces are DeclContexts, we'll need to add
9692     // these to the interface.
9693     S->AddDecl(NewID);
9694     IdResolver.AddDecl(NewID);
9695   }
9696 
9697   if (LangOpts.ObjCRuntime.isNonFragile() &&
9698       !NewID->isInvalidDecl() && isa<ObjCInterfaceDecl>(EnclosingDecl))
9699     Diag(Loc, diag::warn_ivars_in_interface);
9700 
9701   return NewID;
9702 }
9703 
9704 /// ActOnLastBitfield - This routine handles synthesized bitfields rules for
9705 /// class and class extensions. For every class @interface and class
9706 /// extension @interface, if the last ivar is a bitfield of any type,
9707 /// then add an implicit `char :0` ivar to the end of that interface.
9708 void Sema::ActOnLastBitfield(SourceLocation DeclLoc,
9709                              SmallVectorImpl<Decl *> &AllIvarDecls) {
9710   if (LangOpts.ObjCRuntime.isFragile() || AllIvarDecls.empty())
9711     return;
9712 
9713   Decl *ivarDecl = AllIvarDecls[AllIvarDecls.size()-1];
9714   ObjCIvarDecl *Ivar = cast<ObjCIvarDecl>(ivarDecl);
9715 
9716   if (!Ivar->isBitField() || Ivar->getBitWidthValue(Context) == 0)
9717     return;
9718   ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(CurContext);
9719   if (!ID) {
9720     if (ObjCCategoryDecl *CD = dyn_cast<ObjCCategoryDecl>(CurContext)) {
9721       if (!CD->IsClassExtension())
9722         return;
9723     }
9724     // No need to add this to end of @implementation.
9725     else
9726       return;
9727   }
9728   // All conditions are met. Add a new bitfield to the tail end of ivars.
9729   llvm::APInt Zero(Context.getTypeSize(Context.IntTy), 0);
9730   Expr * BW = IntegerLiteral::Create(Context, Zero, Context.IntTy, DeclLoc);
9731 
9732   Ivar = ObjCIvarDecl::Create(Context, cast<ObjCContainerDecl>(CurContext),
9733                               DeclLoc, DeclLoc, 0,
9734                               Context.CharTy,
9735                               Context.getTrivialTypeSourceInfo(Context.CharTy,
9736                                                                DeclLoc),
9737                               ObjCIvarDecl::Private, BW,
9738                               true);
9739   AllIvarDecls.push_back(Ivar);
9740 }
9741 
9742 void Sema::ActOnFields(Scope* S,
9743                        SourceLocation RecLoc, Decl *EnclosingDecl,
9744                        llvm::ArrayRef<Decl *> Fields,
9745                        SourceLocation LBrac, SourceLocation RBrac,
9746                        AttributeList *Attr) {
9747   assert(EnclosingDecl && "missing record or interface decl");
9748 
9749   // If the decl this is being inserted into is invalid, then it may be a
9750   // redeclaration or some other bogus case.  Don't try to add fields to it.
9751   if (EnclosingDecl->isInvalidDecl())
9752     return;
9753 
9754   // If this is an Objective-C @implementation or category and we have
9755   // new fields here we should reset the layout of the interface since
9756   // it will now change.
9757   if (!Fields.empty() && isa<ObjCContainerDecl>(EnclosingDecl)) {
9758     ObjCContainerDecl *DC = cast<ObjCContainerDecl>(EnclosingDecl);
9759     switch (DC->getKind()) {
9760     default: break;
9761     case Decl::ObjCCategory:
9762       Context.ResetObjCLayout(cast<ObjCCategoryDecl>(DC)->getClassInterface());
9763       break;
9764     case Decl::ObjCImplementation:
9765       Context.
9766         ResetObjCLayout(cast<ObjCImplementationDecl>(DC)->getClassInterface());
9767       break;
9768     }
9769   }
9770 
9771   RecordDecl *Record = dyn_cast<RecordDecl>(EnclosingDecl);
9772 
9773   // Start counting up the number of named members; make sure to include
9774   // members of anonymous structs and unions in the total.
9775   unsigned NumNamedMembers = 0;
9776   if (Record) {
9777     for (RecordDecl::decl_iterator i = Record->decls_begin(),
9778                                    e = Record->decls_end(); i != e; i++) {
9779       if (IndirectFieldDecl *IFD = dyn_cast<IndirectFieldDecl>(*i))
9780         if (IFD->getDeclName())
9781           ++NumNamedMembers;
9782     }
9783   }
9784 
9785   // Verify that all the fields are okay.
9786   SmallVector<FieldDecl*, 32> RecFields;
9787 
9788   bool ARCErrReported = false;
9789   for (llvm::ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end();
9790        i != end; ++i) {
9791     FieldDecl *FD = cast<FieldDecl>(*i);
9792 
9793     // Get the type for the field.
9794     const Type *FDTy = FD->getType().getTypePtr();
9795 
9796     if (!FD->isAnonymousStructOrUnion()) {
9797       // Remember all fields written by the user.
9798       RecFields.push_back(FD);
9799     }
9800 
9801     // If the field is already invalid for some reason, don't emit more
9802     // diagnostics about it.
9803     if (FD->isInvalidDecl()) {
9804       EnclosingDecl->setInvalidDecl();
9805       continue;
9806     }
9807 
9808     // C99 6.7.2.1p2:
9809     //   A structure or union shall not contain a member with
9810     //   incomplete or function type (hence, a structure shall not
9811     //   contain an instance of itself, but may contain a pointer to
9812     //   an instance of itself), except that the last member of a
9813     //   structure with more than one named member may have incomplete
9814     //   array type; such a structure (and any union containing,
9815     //   possibly recursively, a member that is such a structure)
9816     //   shall not be a member of a structure or an element of an
9817     //   array.
9818     if (FDTy->isFunctionType()) {
9819       // Field declared as a function.
9820       Diag(FD->getLocation(), diag::err_field_declared_as_function)
9821         << FD->getDeclName();
9822       FD->setInvalidDecl();
9823       EnclosingDecl->setInvalidDecl();
9824       continue;
9825     } else if (FDTy->isIncompleteArrayType() && Record &&
9826                ((i + 1 == Fields.end() && !Record->isUnion()) ||
9827                 ((getLangOpts().MicrosoftExt ||
9828                   getLangOpts().CPlusPlus) &&
9829                  (i + 1 == Fields.end() || Record->isUnion())))) {
9830       // Flexible array member.
9831       // Microsoft and g++ is more permissive regarding flexible array.
9832       // It will accept flexible array in union and also
9833       // as the sole element of a struct/class.
9834       if (getLangOpts().MicrosoftExt) {
9835         if (Record->isUnion())
9836           Diag(FD->getLocation(), diag::ext_flexible_array_union_ms)
9837             << FD->getDeclName();
9838         else if (Fields.size() == 1)
9839           Diag(FD->getLocation(), diag::ext_flexible_array_empty_aggregate_ms)
9840             << FD->getDeclName() << Record->getTagKind();
9841       } else if (getLangOpts().CPlusPlus) {
9842         if (Record->isUnion())
9843           Diag(FD->getLocation(), diag::ext_flexible_array_union_gnu)
9844             << FD->getDeclName();
9845         else if (Fields.size() == 1)
9846           Diag(FD->getLocation(), diag::ext_flexible_array_empty_aggregate_gnu)
9847             << FD->getDeclName() << Record->getTagKind();
9848       } else if (!getLangOpts().C99) {
9849       if (Record->isUnion())
9850         Diag(FD->getLocation(), diag::ext_flexible_array_union_gnu)
9851           << FD->getDeclName();
9852       else
9853         Diag(FD->getLocation(), diag::ext_c99_flexible_array_member)
9854           << FD->getDeclName() << Record->getTagKind();
9855       } else if (NumNamedMembers < 1) {
9856         Diag(FD->getLocation(), diag::err_flexible_array_empty_struct)
9857           << FD->getDeclName();
9858         FD->setInvalidDecl();
9859         EnclosingDecl->setInvalidDecl();
9860         continue;
9861       }
9862       if (!FD->getType()->isDependentType() &&
9863           !Context.getBaseElementType(FD->getType()).isPODType(Context)) {
9864         Diag(FD->getLocation(), diag::err_flexible_array_has_nonpod_type)
9865           << FD->getDeclName() << FD->getType();
9866         FD->setInvalidDecl();
9867         EnclosingDecl->setInvalidDecl();
9868         continue;
9869       }
9870       // Okay, we have a legal flexible array member at the end of the struct.
9871       if (Record)
9872         Record->setHasFlexibleArrayMember(true);
9873     } else if (!FDTy->isDependentType() &&
9874                RequireCompleteType(FD->getLocation(), FD->getType(),
9875                                    diag::err_field_incomplete)) {
9876       // Incomplete type
9877       FD->setInvalidDecl();
9878       EnclosingDecl->setInvalidDecl();
9879       continue;
9880     } else if (const RecordType *FDTTy = FDTy->getAs<RecordType>()) {
9881       if (FDTTy->getDecl()->hasFlexibleArrayMember()) {
9882         // If this is a member of a union, then entire union becomes "flexible".
9883         if (Record && Record->isUnion()) {
9884           Record->setHasFlexibleArrayMember(true);
9885         } else {
9886           // If this is a struct/class and this is not the last element, reject
9887           // it.  Note that GCC supports variable sized arrays in the middle of
9888           // structures.
9889           if (i + 1 != Fields.end())
9890             Diag(FD->getLocation(), diag::ext_variable_sized_type_in_struct)
9891               << FD->getDeclName() << FD->getType();
9892           else {
9893             // We support flexible arrays at the end of structs in
9894             // other structs as an extension.
9895             Diag(FD->getLocation(), diag::ext_flexible_array_in_struct)
9896               << FD->getDeclName();
9897             if (Record)
9898               Record->setHasFlexibleArrayMember(true);
9899           }
9900         }
9901       }
9902       if (Record && FDTTy->getDecl()->hasObjectMember())
9903         Record->setHasObjectMember(true);
9904     } else if (FDTy->isObjCObjectType()) {
9905       /// A field cannot be an Objective-c object
9906       Diag(FD->getLocation(), diag::err_statically_allocated_object)
9907         << FixItHint::CreateInsertion(FD->getLocation(), "*");
9908       QualType T = Context.getObjCObjectPointerType(FD->getType());
9909       FD->setType(T);
9910     }
9911     else if (!getLangOpts().CPlusPlus) {
9912       if (getLangOpts().ObjCAutoRefCount && Record && !ARCErrReported) {
9913         // It's an error in ARC if a field has lifetime.
9914         // We don't want to report this in a system header, though,
9915         // so we just make the field unavailable.
9916         // FIXME: that's really not sufficient; we need to make the type
9917         // itself invalid to, say, initialize or copy.
9918         QualType T = FD->getType();
9919         Qualifiers::ObjCLifetime lifetime = T.getObjCLifetime();
9920         if (lifetime && lifetime != Qualifiers::OCL_ExplicitNone) {
9921           SourceLocation loc = FD->getLocation();
9922           if (getSourceManager().isInSystemHeader(loc)) {
9923             if (!FD->hasAttr<UnavailableAttr>()) {
9924               FD->addAttr(new (Context) UnavailableAttr(loc, Context,
9925                                 "this system field has retaining ownership"));
9926             }
9927           } else {
9928             Diag(FD->getLocation(), diag::err_arc_objc_object_in_struct)
9929               << T->isBlockPointerType();
9930           }
9931           ARCErrReported = true;
9932         }
9933       }
9934       else if (getLangOpts().ObjC1 &&
9935                getLangOpts().getGC() != LangOptions::NonGC &&
9936                Record && !Record->hasObjectMember()) {
9937         if (FD->getType()->isObjCObjectPointerType() ||
9938             FD->getType().isObjCGCStrong())
9939           Record->setHasObjectMember(true);
9940         else if (Context.getAsArrayType(FD->getType())) {
9941           QualType BaseType = Context.getBaseElementType(FD->getType());
9942           if (BaseType->isRecordType() &&
9943               BaseType->getAs<RecordType>()->getDecl()->hasObjectMember())
9944             Record->setHasObjectMember(true);
9945           else if (BaseType->isObjCObjectPointerType() ||
9946                    BaseType.isObjCGCStrong())
9947                  Record->setHasObjectMember(true);
9948         }
9949       }
9950     }
9951     // Keep track of the number of named members.
9952     if (FD->getIdentifier())
9953       ++NumNamedMembers;
9954   }
9955 
9956   // Okay, we successfully defined 'Record'.
9957   if (Record) {
9958     bool Completed = false;
9959     if (CXXRecordDecl *CXXRecord = dyn_cast<CXXRecordDecl>(Record)) {
9960       if (!CXXRecord->isInvalidDecl()) {
9961         // Set access bits correctly on the directly-declared conversions.
9962         UnresolvedSetImpl *Convs = CXXRecord->getConversionFunctions();
9963         for (UnresolvedSetIterator I = Convs->begin(), E = Convs->end();
9964              I != E; ++I)
9965           Convs->setAccess(I, (*I)->getAccess());
9966 
9967         if (!CXXRecord->isDependentType()) {
9968           // Objective-C Automatic Reference Counting:
9969           //   If a class has a non-static data member of Objective-C pointer
9970           //   type (or array thereof), it is a non-POD type and its
9971           //   default constructor (if any), copy constructor, copy assignment
9972           //   operator, and destructor are non-trivial.
9973           //
9974           // This rule is also handled by CXXRecordDecl::completeDefinition().
9975           // However, here we check whether this particular class is only
9976           // non-POD because of the presence of an Objective-C pointer member.
9977           // If so, objects of this type cannot be shared between code compiled
9978           // with ARC and code compiled with manual retain/release.
9979           if (getLangOpts().ObjCAutoRefCount &&
9980               CXXRecord->hasObjectMember() &&
9981               CXXRecord->getLinkage() == ExternalLinkage) {
9982             if (CXXRecord->isPOD()) {
9983               Diag(CXXRecord->getLocation(),
9984                    diag::warn_arc_non_pod_class_with_object_member)
9985                << CXXRecord;
9986             } else {
9987               // FIXME: Fix-Its would be nice here, but finding a good location
9988               // for them is going to be tricky.
9989               if (CXXRecord->hasTrivialCopyConstructor())
9990                 Diag(CXXRecord->getLocation(),
9991                      diag::warn_arc_trivial_member_function_with_object_member)
9992                   << CXXRecord << 0;
9993               if (CXXRecord->hasTrivialCopyAssignment())
9994                 Diag(CXXRecord->getLocation(),
9995                      diag::warn_arc_trivial_member_function_with_object_member)
9996                 << CXXRecord << 1;
9997               if (CXXRecord->hasTrivialDestructor())
9998                 Diag(CXXRecord->getLocation(),
9999                      diag::warn_arc_trivial_member_function_with_object_member)
10000                 << CXXRecord << 2;
10001             }
10002           }
10003 
10004           // Adjust user-defined destructor exception spec.
10005           if (getLangOpts().CPlusPlus0x &&
10006               CXXRecord->hasUserDeclaredDestructor())
10007             AdjustDestructorExceptionSpec(CXXRecord,CXXRecord->getDestructor());
10008 
10009           // Add any implicitly-declared members to this class.
10010           AddImplicitlyDeclaredMembersToClass(CXXRecord);
10011 
10012           // If we have virtual base classes, we may end up finding multiple
10013           // final overriders for a given virtual function. Check for this
10014           // problem now.
10015           if (CXXRecord->getNumVBases()) {
10016             CXXFinalOverriderMap FinalOverriders;
10017             CXXRecord->getFinalOverriders(FinalOverriders);
10018 
10019             for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(),
10020                                              MEnd = FinalOverriders.end();
10021                  M != MEnd; ++M) {
10022               for (OverridingMethods::iterator SO = M->second.begin(),
10023                                             SOEnd = M->second.end();
10024                    SO != SOEnd; ++SO) {
10025                 assert(SO->second.size() > 0 &&
10026                        "Virtual function without overridding functions?");
10027                 if (SO->second.size() == 1)
10028                   continue;
10029 
10030                 // C++ [class.virtual]p2:
10031                 //   In a derived class, if a virtual member function of a base
10032                 //   class subobject has more than one final overrider the
10033                 //   program is ill-formed.
10034                 Diag(Record->getLocation(), diag::err_multiple_final_overriders)
10035                   << (NamedDecl *)M->first << Record;
10036                 Diag(M->first->getLocation(),
10037                      diag::note_overridden_virtual_function);
10038                 for (OverridingMethods::overriding_iterator
10039                           OM = SO->second.begin(),
10040                        OMEnd = SO->second.end();
10041                      OM != OMEnd; ++OM)
10042                   Diag(OM->Method->getLocation(), diag::note_final_overrider)
10043                     << (NamedDecl *)M->first << OM->Method->getParent();
10044 
10045                 Record->setInvalidDecl();
10046               }
10047             }
10048             CXXRecord->completeDefinition(&FinalOverriders);
10049             Completed = true;
10050           }
10051         }
10052       }
10053     }
10054 
10055     if (!Completed)
10056       Record->completeDefinition();
10057 
10058   } else {
10059     ObjCIvarDecl **ClsFields =
10060       reinterpret_cast<ObjCIvarDecl**>(RecFields.data());
10061     if (ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(EnclosingDecl)) {
10062       ID->setEndOfDefinitionLoc(RBrac);
10063       // Add ivar's to class's DeclContext.
10064       for (unsigned i = 0, e = RecFields.size(); i != e; ++i) {
10065         ClsFields[i]->setLexicalDeclContext(ID);
10066         ID->addDecl(ClsFields[i]);
10067       }
10068       // Must enforce the rule that ivars in the base classes may not be
10069       // duplicates.
10070       if (ID->getSuperClass())
10071         DiagnoseDuplicateIvars(ID, ID->getSuperClass());
10072     } else if (ObjCImplementationDecl *IMPDecl =
10073                   dyn_cast<ObjCImplementationDecl>(EnclosingDecl)) {
10074       assert(IMPDecl && "ActOnFields - missing ObjCImplementationDecl");
10075       for (unsigned I = 0, N = RecFields.size(); I != N; ++I)
10076         // Ivar declared in @implementation never belongs to the implementation.
10077         // Only it is in implementation's lexical context.
10078         ClsFields[I]->setLexicalDeclContext(IMPDecl);
10079       CheckImplementationIvars(IMPDecl, ClsFields, RecFields.size(), RBrac);
10080       IMPDecl->setIvarLBraceLoc(LBrac);
10081       IMPDecl->setIvarRBraceLoc(RBrac);
10082     } else if (ObjCCategoryDecl *CDecl =
10083                 dyn_cast<ObjCCategoryDecl>(EnclosingDecl)) {
10084       // case of ivars in class extension; all other cases have been
10085       // reported as errors elsewhere.
10086       // FIXME. Class extension does not have a LocEnd field.
10087       // CDecl->setLocEnd(RBrac);
10088       // Add ivar's to class extension's DeclContext.
10089       // Diagnose redeclaration of private ivars.
10090       ObjCInterfaceDecl *IDecl = CDecl->getClassInterface();
10091       for (unsigned i = 0, e = RecFields.size(); i != e; ++i) {
10092         if (IDecl) {
10093           if (const ObjCIvarDecl *ClsIvar =
10094               IDecl->getIvarDecl(ClsFields[i]->getIdentifier())) {
10095             Diag(ClsFields[i]->getLocation(),
10096                  diag::err_duplicate_ivar_declaration);
10097             Diag(ClsIvar->getLocation(), diag::note_previous_definition);
10098             continue;
10099           }
10100           for (const ObjCCategoryDecl *ClsExtDecl =
10101                 IDecl->getFirstClassExtension();
10102                ClsExtDecl; ClsExtDecl = ClsExtDecl->getNextClassExtension()) {
10103             if (const ObjCIvarDecl *ClsExtIvar =
10104                 ClsExtDecl->getIvarDecl(ClsFields[i]->getIdentifier())) {
10105               Diag(ClsFields[i]->getLocation(),
10106                    diag::err_duplicate_ivar_declaration);
10107               Diag(ClsExtIvar->getLocation(), diag::note_previous_definition);
10108               continue;
10109             }
10110           }
10111         }
10112         ClsFields[i]->setLexicalDeclContext(CDecl);
10113         CDecl->addDecl(ClsFields[i]);
10114       }
10115       CDecl->setIvarLBraceLoc(LBrac);
10116       CDecl->setIvarRBraceLoc(RBrac);
10117     }
10118   }
10119 
10120   if (Attr)
10121     ProcessDeclAttributeList(S, Record, Attr);
10122 }
10123 
10124 /// \brief Determine whether the given integral value is representable within
10125 /// the given type T.
10126 static bool isRepresentableIntegerValue(ASTContext &Context,
10127                                         llvm::APSInt &Value,
10128                                         QualType T) {
10129   assert(T->isIntegralType(Context) && "Integral type required!");
10130   unsigned BitWidth = Context.getIntWidth(T);
10131 
10132   if (Value.isUnsigned() || Value.isNonNegative()) {
10133     if (T->isSignedIntegerOrEnumerationType())
10134       --BitWidth;
10135     return Value.getActiveBits() <= BitWidth;
10136   }
10137   return Value.getMinSignedBits() <= BitWidth;
10138 }
10139 
10140 // \brief Given an integral type, return the next larger integral type
10141 // (or a NULL type of no such type exists).
10142 static QualType getNextLargerIntegralType(ASTContext &Context, QualType T) {
10143   // FIXME: Int128/UInt128 support, which also needs to be introduced into
10144   // enum checking below.
10145   assert(T->isIntegralType(Context) && "Integral type required!");
10146   const unsigned NumTypes = 4;
10147   QualType SignedIntegralTypes[NumTypes] = {
10148     Context.ShortTy, Context.IntTy, Context.LongTy, Context.LongLongTy
10149   };
10150   QualType UnsignedIntegralTypes[NumTypes] = {
10151     Context.UnsignedShortTy, Context.UnsignedIntTy, Context.UnsignedLongTy,
10152     Context.UnsignedLongLongTy
10153   };
10154 
10155   unsigned BitWidth = Context.getTypeSize(T);
10156   QualType *Types = T->isSignedIntegerOrEnumerationType()? SignedIntegralTypes
10157                                                         : UnsignedIntegralTypes;
10158   for (unsigned I = 0; I != NumTypes; ++I)
10159     if (Context.getTypeSize(Types[I]) > BitWidth)
10160       return Types[I];
10161 
10162   return QualType();
10163 }
10164 
10165 EnumConstantDecl *Sema::CheckEnumConstant(EnumDecl *Enum,
10166                                           EnumConstantDecl *LastEnumConst,
10167                                           SourceLocation IdLoc,
10168                                           IdentifierInfo *Id,
10169                                           Expr *Val) {
10170   unsigned IntWidth = Context.getTargetInfo().getIntWidth();
10171   llvm::APSInt EnumVal(IntWidth);
10172   QualType EltTy;
10173 
10174   if (Val && DiagnoseUnexpandedParameterPack(Val, UPPC_EnumeratorValue))
10175     Val = 0;
10176 
10177   if (Val)
10178     Val = DefaultLvalueConversion(Val).take();
10179 
10180   if (Val) {
10181     if (Enum->isDependentType() || Val->isTypeDependent())
10182       EltTy = Context.DependentTy;
10183     else {
10184       SourceLocation ExpLoc;
10185       if (getLangOpts().CPlusPlus0x && Enum->isFixed() &&
10186           !getLangOpts().MicrosoftMode) {
10187         // C++11 [dcl.enum]p5: If the underlying type is fixed, [...] the
10188         // constant-expression in the enumerator-definition shall be a converted
10189         // constant expression of the underlying type.
10190         EltTy = Enum->getIntegerType();
10191         ExprResult Converted =
10192           CheckConvertedConstantExpression(Val, EltTy, EnumVal,
10193                                            CCEK_Enumerator);
10194         if (Converted.isInvalid())
10195           Val = 0;
10196         else
10197           Val = Converted.take();
10198       } else if (!Val->isValueDependent() &&
10199                  !(Val = VerifyIntegerConstantExpression(Val,
10200                                                          &EnumVal).take())) {
10201         // C99 6.7.2.2p2: Make sure we have an integer constant expression.
10202       } else {
10203         if (Enum->isFixed()) {
10204           EltTy = Enum->getIntegerType();
10205 
10206           // In Obj-C and Microsoft mode, require the enumeration value to be
10207           // representable in the underlying type of the enumeration. In C++11,
10208           // we perform a non-narrowing conversion as part of converted constant
10209           // expression checking.
10210           if (!isRepresentableIntegerValue(Context, EnumVal, EltTy)) {
10211             if (getLangOpts().MicrosoftMode) {
10212               Diag(IdLoc, diag::ext_enumerator_too_large) << EltTy;
10213               Val = ImpCastExprToType(Val, EltTy, CK_IntegralCast).take();
10214             } else
10215               Diag(IdLoc, diag::err_enumerator_too_large) << EltTy;
10216           } else
10217             Val = ImpCastExprToType(Val, EltTy, CK_IntegralCast).take();
10218         } else if (getLangOpts().CPlusPlus) {
10219           // C++11 [dcl.enum]p5:
10220           //   If the underlying type is not fixed, the type of each enumerator
10221           //   is the type of its initializing value:
10222           //     - If an initializer is specified for an enumerator, the
10223           //       initializing value has the same type as the expression.
10224           EltTy = Val->getType();
10225         } else {
10226           // C99 6.7.2.2p2:
10227           //   The expression that defines the value of an enumeration constant
10228           //   shall be an integer constant expression that has a value
10229           //   representable as an int.
10230 
10231           // Complain if the value is not representable in an int.
10232           if (!isRepresentableIntegerValue(Context, EnumVal, Context.IntTy))
10233             Diag(IdLoc, diag::ext_enum_value_not_int)
10234               << EnumVal.toString(10) << Val->getSourceRange()
10235               << (EnumVal.isUnsigned() || EnumVal.isNonNegative());
10236           else if (!Context.hasSameType(Val->getType(), Context.IntTy)) {
10237             // Force the type of the expression to 'int'.
10238             Val = ImpCastExprToType(Val, Context.IntTy, CK_IntegralCast).take();
10239           }
10240           EltTy = Val->getType();
10241         }
10242       }
10243     }
10244   }
10245 
10246   if (!Val) {
10247     if (Enum->isDependentType())
10248       EltTy = Context.DependentTy;
10249     else if (!LastEnumConst) {
10250       // C++0x [dcl.enum]p5:
10251       //   If the underlying type is not fixed, the type of each enumerator
10252       //   is the type of its initializing value:
10253       //     - If no initializer is specified for the first enumerator, the
10254       //       initializing value has an unspecified integral type.
10255       //
10256       // GCC uses 'int' for its unspecified integral type, as does
10257       // C99 6.7.2.2p3.
10258       if (Enum->isFixed()) {
10259         EltTy = Enum->getIntegerType();
10260       }
10261       else {
10262         EltTy = Context.IntTy;
10263       }
10264     } else {
10265       // Assign the last value + 1.
10266       EnumVal = LastEnumConst->getInitVal();
10267       ++EnumVal;
10268       EltTy = LastEnumConst->getType();
10269 
10270       // Check for overflow on increment.
10271       if (EnumVal < LastEnumConst->getInitVal()) {
10272         // C++0x [dcl.enum]p5:
10273         //   If the underlying type is not fixed, the type of each enumerator
10274         //   is the type of its initializing value:
10275         //
10276         //     - Otherwise the type of the initializing value is the same as
10277         //       the type of the initializing value of the preceding enumerator
10278         //       unless the incremented value is not representable in that type,
10279         //       in which case the type is an unspecified integral type
10280         //       sufficient to contain the incremented value. If no such type
10281         //       exists, the program is ill-formed.
10282         QualType T = getNextLargerIntegralType(Context, EltTy);
10283         if (T.isNull() || Enum->isFixed()) {
10284           // There is no integral type larger enough to represent this
10285           // value. Complain, then allow the value to wrap around.
10286           EnumVal = LastEnumConst->getInitVal();
10287           EnumVal = EnumVal.zext(EnumVal.getBitWidth() * 2);
10288           ++EnumVal;
10289           if (Enum->isFixed())
10290             // When the underlying type is fixed, this is ill-formed.
10291             Diag(IdLoc, diag::err_enumerator_wrapped)
10292               << EnumVal.toString(10)
10293               << EltTy;
10294           else
10295             Diag(IdLoc, diag::warn_enumerator_too_large)
10296               << EnumVal.toString(10);
10297         } else {
10298           EltTy = T;
10299         }
10300 
10301         // Retrieve the last enumerator's value, extent that type to the
10302         // type that is supposed to be large enough to represent the incremented
10303         // value, then increment.
10304         EnumVal = LastEnumConst->getInitVal();
10305         EnumVal.setIsSigned(EltTy->isSignedIntegerOrEnumerationType());
10306         EnumVal = EnumVal.zextOrTrunc(Context.getIntWidth(EltTy));
10307         ++EnumVal;
10308 
10309         // If we're not in C++, diagnose the overflow of enumerator values,
10310         // which in C99 means that the enumerator value is not representable in
10311         // an int (C99 6.7.2.2p2). However, we support GCC's extension that
10312         // permits enumerator values that are representable in some larger
10313         // integral type.
10314         if (!getLangOpts().CPlusPlus && !T.isNull())
10315           Diag(IdLoc, diag::warn_enum_value_overflow);
10316       } else if (!getLangOpts().CPlusPlus &&
10317                  !isRepresentableIntegerValue(Context, EnumVal, EltTy)) {
10318         // Enforce C99 6.7.2.2p2 even when we compute the next value.
10319         Diag(IdLoc, diag::ext_enum_value_not_int)
10320           << EnumVal.toString(10) << 1;
10321       }
10322     }
10323   }
10324 
10325   if (!EltTy->isDependentType()) {
10326     // Make the enumerator value match the signedness and size of the
10327     // enumerator's type.
10328     EnumVal = EnumVal.extOrTrunc(Context.getIntWidth(EltTy));
10329     EnumVal.setIsSigned(EltTy->isSignedIntegerOrEnumerationType());
10330   }
10331 
10332   return EnumConstantDecl::Create(Context, Enum, IdLoc, Id, EltTy,
10333                                   Val, EnumVal);
10334 }
10335 
10336 
10337 Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst,
10338                               SourceLocation IdLoc, IdentifierInfo *Id,
10339                               AttributeList *Attr,
10340                               SourceLocation EqualLoc, Expr *Val) {
10341   EnumDecl *TheEnumDecl = cast<EnumDecl>(theEnumDecl);
10342   EnumConstantDecl *LastEnumConst =
10343     cast_or_null<EnumConstantDecl>(lastEnumConst);
10344 
10345   // The scope passed in may not be a decl scope.  Zip up the scope tree until
10346   // we find one that is.
10347   S = getNonFieldDeclScope(S);
10348 
10349   // Verify that there isn't already something declared with this name in this
10350   // scope.
10351   NamedDecl *PrevDecl = LookupSingleName(S, Id, IdLoc, LookupOrdinaryName,
10352                                          ForRedeclaration);
10353   if (PrevDecl && PrevDecl->isTemplateParameter()) {
10354     // Maybe we will complain about the shadowed template parameter.
10355     DiagnoseTemplateParameterShadow(IdLoc, PrevDecl);
10356     // Just pretend that we didn't see the previous declaration.
10357     PrevDecl = 0;
10358   }
10359 
10360   if (PrevDecl) {
10361     // When in C++, we may get a TagDecl with the same name; in this case the
10362     // enum constant will 'hide' the tag.
10363     assert((getLangOpts().CPlusPlus || !isa<TagDecl>(PrevDecl)) &&
10364            "Received TagDecl when not in C++!");
10365     if (!isa<TagDecl>(PrevDecl) && isDeclInScope(PrevDecl, CurContext, S)) {
10366       if (isa<EnumConstantDecl>(PrevDecl))
10367         Diag(IdLoc, diag::err_redefinition_of_enumerator) << Id;
10368       else
10369         Diag(IdLoc, diag::err_redefinition) << Id;
10370       Diag(PrevDecl->getLocation(), diag::note_previous_definition);
10371       return 0;
10372     }
10373   }
10374 
10375   // C++ [class.mem]p15:
10376   // If T is the name of a class, then each of the following shall have a name
10377   // different from T:
10378   // - every enumerator of every member of class T that is an unscoped
10379   // enumerated type
10380   if (CXXRecordDecl *Record
10381                       = dyn_cast<CXXRecordDecl>(
10382                              TheEnumDecl->getDeclContext()->getRedeclContext()))
10383     if (!TheEnumDecl->isScoped() &&
10384         Record->getIdentifier() && Record->getIdentifier() == Id)
10385       Diag(IdLoc, diag::err_member_name_of_class) << Id;
10386 
10387   EnumConstantDecl *New =
10388     CheckEnumConstant(TheEnumDecl, LastEnumConst, IdLoc, Id, Val);
10389 
10390   if (New) {
10391     // Process attributes.
10392     if (Attr) ProcessDeclAttributeList(S, New, Attr);
10393 
10394     // Register this decl in the current scope stack.
10395     New->setAccess(TheEnumDecl->getAccess());
10396     PushOnScopeChains(New, S);
10397   }
10398 
10399   ActOnDocumentableDecl(New);
10400 
10401   return New;
10402 }
10403 
10404 // Emits a warning if every element in the enum is the same value and if
10405 // every element is initialized with a integer or boolean literal.
10406 static void CheckForUniqueEnumValues(Sema &S, Decl **Elements,
10407                                      unsigned NumElements, EnumDecl *Enum,
10408                                      QualType EnumType) {
10409   if (S.Diags.getDiagnosticLevel(diag::warn_identical_enum_values,
10410                                  Enum->getLocation()) ==
10411       DiagnosticsEngine::Ignored)
10412     return;
10413 
10414   if (NumElements < 2)
10415     return;
10416 
10417   if (!Enum->getIdentifier())
10418     return;
10419 
10420   llvm::APSInt FirstVal;
10421 
10422   for (unsigned i = 0; i != NumElements; ++i) {
10423     EnumConstantDecl *ECD = cast_or_null<EnumConstantDecl>(Elements[i]);
10424     if (!ECD)
10425       return;
10426 
10427     Expr *InitExpr = ECD->getInitExpr();
10428     if (!InitExpr)
10429       return;
10430     InitExpr = InitExpr->IgnoreImpCasts();
10431     if (!isa<IntegerLiteral>(InitExpr) && !isa<CXXBoolLiteralExpr>(InitExpr))
10432       return;
10433 
10434     if (i == 0) {
10435       FirstVal = ECD->getInitVal();
10436       continue;
10437     }
10438 
10439     if (!llvm::APSInt::isSameValue(FirstVal, ECD->getInitVal()))
10440       return;
10441   }
10442 
10443   S.Diag(Enum->getLocation(), diag::warn_identical_enum_values)
10444       << EnumType << FirstVal.toString(10)
10445       << Enum->getSourceRange();
10446 
10447   EnumConstantDecl *Last = cast<EnumConstantDecl>(Elements[NumElements - 1]),
10448                    *Next = cast<EnumConstantDecl>(Elements[NumElements - 2]);
10449 
10450   S.Diag(Last->getLocation(), diag::note_identical_enum_values)
10451     << FixItHint::CreateReplacement(Last->getInitExpr()->getSourceRange(),
10452                                     Next->getName());
10453 }
10454 
10455 void Sema::ActOnEnumBody(SourceLocation EnumLoc, SourceLocation LBraceLoc,
10456                          SourceLocation RBraceLoc, Decl *EnumDeclX,
10457                          Decl **Elements, unsigned NumElements,
10458                          Scope *S, AttributeList *Attr) {
10459   EnumDecl *Enum = cast<EnumDecl>(EnumDeclX);
10460   QualType EnumType = Context.getTypeDeclType(Enum);
10461 
10462   if (Attr)
10463     ProcessDeclAttributeList(S, Enum, Attr);
10464 
10465   if (Enum->isDependentType()) {
10466     for (unsigned i = 0; i != NumElements; ++i) {
10467       EnumConstantDecl *ECD =
10468         cast_or_null<EnumConstantDecl>(Elements[i]);
10469       if (!ECD) continue;
10470 
10471       ECD->setType(EnumType);
10472     }
10473 
10474     Enum->completeDefinition(Context.DependentTy, Context.DependentTy, 0, 0);
10475     return;
10476   }
10477 
10478   // TODO: If the result value doesn't fit in an int, it must be a long or long
10479   // long value.  ISO C does not support this, but GCC does as an extension,
10480   // emit a warning.
10481   unsigned IntWidth = Context.getTargetInfo().getIntWidth();
10482   unsigned CharWidth = Context.getTargetInfo().getCharWidth();
10483   unsigned ShortWidth = Context.getTargetInfo().getShortWidth();
10484 
10485   // Verify that all the values are okay, compute the size of the values, and
10486   // reverse the list.
10487   unsigned NumNegativeBits = 0;
10488   unsigned NumPositiveBits = 0;
10489 
10490   // Keep track of whether all elements have type int.
10491   bool AllElementsInt = true;
10492 
10493   for (unsigned i = 0; i != NumElements; ++i) {
10494     EnumConstantDecl *ECD =
10495       cast_or_null<EnumConstantDecl>(Elements[i]);
10496     if (!ECD) continue;  // Already issued a diagnostic.
10497 
10498     const llvm::APSInt &InitVal = ECD->getInitVal();
10499 
10500     // Keep track of the size of positive and negative values.
10501     if (InitVal.isUnsigned() || InitVal.isNonNegative())
10502       NumPositiveBits = std::max(NumPositiveBits,
10503                                  (unsigned)InitVal.getActiveBits());
10504     else
10505       NumNegativeBits = std::max(NumNegativeBits,
10506                                  (unsigned)InitVal.getMinSignedBits());
10507 
10508     // Keep track of whether every enum element has type int (very commmon).
10509     if (AllElementsInt)
10510       AllElementsInt = ECD->getType() == Context.IntTy;
10511   }
10512 
10513   // Figure out the type that should be used for this enum.
10514   QualType BestType;
10515   unsigned BestWidth;
10516 
10517   // C++0x N3000 [conv.prom]p3:
10518   //   An rvalue of an unscoped enumeration type whose underlying
10519   //   type is not fixed can be converted to an rvalue of the first
10520   //   of the following types that can represent all the values of
10521   //   the enumeration: int, unsigned int, long int, unsigned long
10522   //   int, long long int, or unsigned long long int.
10523   // C99 6.4.4.3p2:
10524   //   An identifier declared as an enumeration constant has type int.
10525   // The C99 rule is modified by a gcc extension
10526   QualType BestPromotionType;
10527 
10528   bool Packed = Enum->getAttr<PackedAttr>() ? true : false;
10529   // -fshort-enums is the equivalent to specifying the packed attribute on all
10530   // enum definitions.
10531   if (LangOpts.ShortEnums)
10532     Packed = true;
10533 
10534   if (Enum->isFixed()) {
10535     BestType = Enum->getIntegerType();
10536     if (BestType->isPromotableIntegerType())
10537       BestPromotionType = Context.getPromotedIntegerType(BestType);
10538     else
10539       BestPromotionType = BestType;
10540     // We don't need to set BestWidth, because BestType is going to be the type
10541     // of the enumerators, but we do anyway because otherwise some compilers
10542     // warn that it might be used uninitialized.
10543     BestWidth = CharWidth;
10544   }
10545   else if (NumNegativeBits) {
10546     // If there is a negative value, figure out the smallest integer type (of
10547     // int/long/longlong) that fits.
10548     // If it's packed, check also if it fits a char or a short.
10549     if (Packed && NumNegativeBits <= CharWidth && NumPositiveBits < CharWidth) {
10550       BestType = Context.SignedCharTy;
10551       BestWidth = CharWidth;
10552     } else if (Packed && NumNegativeBits <= ShortWidth &&
10553                NumPositiveBits < ShortWidth) {
10554       BestType = Context.ShortTy;
10555       BestWidth = ShortWidth;
10556     } else if (NumNegativeBits <= IntWidth && NumPositiveBits < IntWidth) {
10557       BestType = Context.IntTy;
10558       BestWidth = IntWidth;
10559     } else {
10560       BestWidth = Context.getTargetInfo().getLongWidth();
10561 
10562       if (NumNegativeBits <= BestWidth && NumPositiveBits < BestWidth) {
10563         BestType = Context.LongTy;
10564       } else {
10565         BestWidth = Context.getTargetInfo().getLongLongWidth();
10566 
10567         if (NumNegativeBits > BestWidth || NumPositiveBits >= BestWidth)
10568           Diag(Enum->getLocation(), diag::warn_enum_too_large);
10569         BestType = Context.LongLongTy;
10570       }
10571     }
10572     BestPromotionType = (BestWidth <= IntWidth ? Context.IntTy : BestType);
10573   } else {
10574     // If there is no negative value, figure out the smallest type that fits
10575     // all of the enumerator values.
10576     // If it's packed, check also if it fits a char or a short.
10577     if (Packed && NumPositiveBits <= CharWidth) {
10578       BestType = Context.UnsignedCharTy;
10579       BestPromotionType = Context.IntTy;
10580       BestWidth = CharWidth;
10581     } else if (Packed && NumPositiveBits <= ShortWidth) {
10582       BestType = Context.UnsignedShortTy;
10583       BestPromotionType = Context.IntTy;
10584       BestWidth = ShortWidth;
10585     } else if (NumPositiveBits <= IntWidth) {
10586       BestType = Context.UnsignedIntTy;
10587       BestWidth = IntWidth;
10588       BestPromotionType
10589         = (NumPositiveBits == BestWidth || !getLangOpts().CPlusPlus)
10590                            ? Context.UnsignedIntTy : Context.IntTy;
10591     } else if (NumPositiveBits <=
10592                (BestWidth = Context.getTargetInfo().getLongWidth())) {
10593       BestType = Context.UnsignedLongTy;
10594       BestPromotionType
10595         = (NumPositiveBits == BestWidth || !getLangOpts().CPlusPlus)
10596                            ? Context.UnsignedLongTy : Context.LongTy;
10597     } else {
10598       BestWidth = Context.getTargetInfo().getLongLongWidth();
10599       assert(NumPositiveBits <= BestWidth &&
10600              "How could an initializer get larger than ULL?");
10601       BestType = Context.UnsignedLongLongTy;
10602       BestPromotionType
10603         = (NumPositiveBits == BestWidth || !getLangOpts().CPlusPlus)
10604                            ? Context.UnsignedLongLongTy : Context.LongLongTy;
10605     }
10606   }
10607 
10608   // Loop over all of the enumerator constants, changing their types to match
10609   // the type of the enum if needed.
10610   for (unsigned i = 0; i != NumElements; ++i) {
10611     EnumConstantDecl *ECD = cast_or_null<EnumConstantDecl>(Elements[i]);
10612     if (!ECD) continue;  // Already issued a diagnostic.
10613 
10614     // Standard C says the enumerators have int type, but we allow, as an
10615     // extension, the enumerators to be larger than int size.  If each
10616     // enumerator value fits in an int, type it as an int, otherwise type it the
10617     // same as the enumerator decl itself.  This means that in "enum { X = 1U }"
10618     // that X has type 'int', not 'unsigned'.
10619 
10620     // Determine whether the value fits into an int.
10621     llvm::APSInt InitVal = ECD->getInitVal();
10622 
10623     // If it fits into an integer type, force it.  Otherwise force it to match
10624     // the enum decl type.
10625     QualType NewTy;
10626     unsigned NewWidth;
10627     bool NewSign;
10628     if (!getLangOpts().CPlusPlus &&
10629         !Enum->isFixed() &&
10630         isRepresentableIntegerValue(Context, InitVal, Context.IntTy)) {
10631       NewTy = Context.IntTy;
10632       NewWidth = IntWidth;
10633       NewSign = true;
10634     } else if (ECD->getType() == BestType) {
10635       // Already the right type!
10636       if (getLangOpts().CPlusPlus)
10637         // C++ [dcl.enum]p4: Following the closing brace of an
10638         // enum-specifier, each enumerator has the type of its
10639         // enumeration.
10640         ECD->setType(EnumType);
10641       continue;
10642     } else {
10643       NewTy = BestType;
10644       NewWidth = BestWidth;
10645       NewSign = BestType->isSignedIntegerOrEnumerationType();
10646     }
10647 
10648     // Adjust the APSInt value.
10649     InitVal = InitVal.extOrTrunc(NewWidth);
10650     InitVal.setIsSigned(NewSign);
10651     ECD->setInitVal(InitVal);
10652 
10653     // Adjust the Expr initializer and type.
10654     if (ECD->getInitExpr() &&
10655         !Context.hasSameType(NewTy, ECD->getInitExpr()->getType()))
10656       ECD->setInitExpr(ImplicitCastExpr::Create(Context, NewTy,
10657                                                 CK_IntegralCast,
10658                                                 ECD->getInitExpr(),
10659                                                 /*base paths*/ 0,
10660                                                 VK_RValue));
10661     if (getLangOpts().CPlusPlus)
10662       // C++ [dcl.enum]p4: Following the closing brace of an
10663       // enum-specifier, each enumerator has the type of its
10664       // enumeration.
10665       ECD->setType(EnumType);
10666     else
10667       ECD->setType(NewTy);
10668   }
10669 
10670   Enum->completeDefinition(BestType, BestPromotionType,
10671                            NumPositiveBits, NumNegativeBits);
10672 
10673   // If we're declaring a function, ensure this decl isn't forgotten about -
10674   // it needs to go into the function scope.
10675   if (InFunctionDeclarator)
10676     DeclsInPrototypeScope.push_back(Enum);
10677 
10678   CheckForUniqueEnumValues(*this, Elements, NumElements, Enum, EnumType);
10679 }
10680 
10681 Decl *Sema::ActOnFileScopeAsmDecl(Expr *expr,
10682                                   SourceLocation StartLoc,
10683                                   SourceLocation EndLoc) {
10684   StringLiteral *AsmString = cast<StringLiteral>(expr);
10685 
10686   FileScopeAsmDecl *New = FileScopeAsmDecl::Create(Context, CurContext,
10687                                                    AsmString, StartLoc,
10688                                                    EndLoc);
10689   CurContext->addDecl(New);
10690   return New;
10691 }
10692 
10693 DeclResult Sema::ActOnModuleImport(SourceLocation AtLoc,
10694                                    SourceLocation ImportLoc,
10695                                    ModuleIdPath Path) {
10696   Module *Mod = PP.getModuleLoader().loadModule(ImportLoc, Path,
10697                                                 Module::AllVisible,
10698                                                 /*IsIncludeDirective=*/false);
10699   if (!Mod)
10700     return true;
10701 
10702   llvm::SmallVector<SourceLocation, 2> IdentifierLocs;
10703   Module *ModCheck = Mod;
10704   for (unsigned I = 0, N = Path.size(); I != N; ++I) {
10705     // If we've run out of module parents, just drop the remaining identifiers.
10706     // We need the length to be consistent.
10707     if (!ModCheck)
10708       break;
10709     ModCheck = ModCheck->Parent;
10710 
10711     IdentifierLocs.push_back(Path[I].second);
10712   }
10713 
10714   ImportDecl *Import = ImportDecl::Create(Context,
10715                                           Context.getTranslationUnitDecl(),
10716                                           AtLoc.isValid()? AtLoc : ImportLoc,
10717                                           Mod, IdentifierLocs);
10718   Context.getTranslationUnitDecl()->addDecl(Import);
10719   return Import;
10720 }
10721 
10722 void Sema::ActOnPragmaRedefineExtname(IdentifierInfo* Name,
10723                                       IdentifierInfo* AliasName,
10724                                       SourceLocation PragmaLoc,
10725                                       SourceLocation NameLoc,
10726                                       SourceLocation AliasNameLoc) {
10727   Decl *PrevDecl = LookupSingleName(TUScope, Name, NameLoc,
10728                                     LookupOrdinaryName);
10729   AsmLabelAttr *Attr =
10730      ::new (Context) AsmLabelAttr(AliasNameLoc, Context, AliasName->getName());
10731 
10732   if (PrevDecl)
10733     PrevDecl->addAttr(Attr);
10734   else
10735     (void)ExtnameUndeclaredIdentifiers.insert(
10736       std::pair<IdentifierInfo*,AsmLabelAttr*>(Name, Attr));
10737 }
10738 
10739 void Sema::ActOnPragmaWeakID(IdentifierInfo* Name,
10740                              SourceLocation PragmaLoc,
10741                              SourceLocation NameLoc) {
10742   Decl *PrevDecl = LookupSingleName(TUScope, Name, NameLoc, LookupOrdinaryName);
10743 
10744   if (PrevDecl) {
10745     PrevDecl->addAttr(::new (Context) WeakAttr(PragmaLoc, Context));
10746   } else {
10747     (void)WeakUndeclaredIdentifiers.insert(
10748       std::pair<IdentifierInfo*,WeakInfo>
10749         (Name, WeakInfo((IdentifierInfo*)0, NameLoc)));
10750   }
10751 }
10752 
10753 void Sema::ActOnPragmaWeakAlias(IdentifierInfo* Name,
10754                                 IdentifierInfo* AliasName,
10755                                 SourceLocation PragmaLoc,
10756                                 SourceLocation NameLoc,
10757                                 SourceLocation AliasNameLoc) {
10758   Decl *PrevDecl = LookupSingleName(TUScope, AliasName, AliasNameLoc,
10759                                     LookupOrdinaryName);
10760   WeakInfo W = WeakInfo(Name, NameLoc);
10761 
10762   if (PrevDecl) {
10763     if (!PrevDecl->hasAttr<AliasAttr>())
10764       if (NamedDecl *ND = dyn_cast<NamedDecl>(PrevDecl))
10765         DeclApplyPragmaWeak(TUScope, ND, W);
10766   } else {
10767     (void)WeakUndeclaredIdentifiers.insert(
10768       std::pair<IdentifierInfo*,WeakInfo>(AliasName, W));
10769   }
10770 }
10771 
10772 Decl *Sema::getObjCDeclContext() const {
10773   return (dyn_cast_or_null<ObjCContainerDecl>(CurContext));
10774 }
10775 
10776 AvailabilityResult Sema::getCurContextAvailability() const {
10777   const Decl *D = cast<Decl>(getCurLexicalContext());
10778   // A category implicitly has the availability of the interface.
10779   if (const ObjCCategoryDecl *CatD = dyn_cast<ObjCCategoryDecl>(D))
10780     D = CatD->getClassInterface();
10781 
10782   return D->getAvailability();
10783 }
10784