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