SemaDecl.cpp revision d63b19ea855a66df8c58764604d48497c48829d9
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 "TypeLocBuilder.h"
16#include "clang/AST/ASTConsumer.h"
17#include "clang/AST/ASTContext.h"
18#include "clang/AST/CXXInheritance.h"
19#include "clang/AST/CharUnits.h"
20#include "clang/AST/CommentDiagnostic.h"
21#include "clang/AST/DeclCXX.h"
22#include "clang/AST/DeclObjC.h"
23#include "clang/AST/DeclTemplate.h"
24#include "clang/AST/EvaluatedExprVisitor.h"
25#include "clang/AST/ExprCXX.h"
26#include "clang/AST/StmtCXX.h"
27#include "clang/Basic/PartialDiagnostic.h"
28#include "clang/Basic/SourceManager.h"
29#include "clang/Basic/TargetInfo.h"
30#include "clang/Lex/HeaderSearch.h" // FIXME: Sema shouldn't depend on Lex
31#include "clang/Lex/ModuleLoader.h" // FIXME: Sema shouldn't depend on Lex
32#include "clang/Lex/Preprocessor.h" // FIXME: Sema shouldn't depend on Lex
33#include "clang/Parse/ParseDiagnostic.h"
34#include "clang/Sema/CXXFieldCollector.h"
35#include "clang/Sema/DeclSpec.h"
36#include "clang/Sema/DelayedDiagnostic.h"
37#include "clang/Sema/Initialization.h"
38#include "clang/Sema/Lookup.h"
39#include "clang/Sema/ParsedTemplate.h"
40#include "clang/Sema/Scope.h"
41#include "clang/Sema/ScopeInfo.h"
42#include "llvm/ADT/SmallString.h"
43#include "llvm/ADT/Triple.h"
44#include <algorithm>
45#include <cstring>
46#include <functional>
47using namespace clang;
48using namespace sema;
49
50Sema::DeclGroupPtrTy Sema::ConvertDeclToDeclGroup(Decl *Ptr, Decl *OwnedType) {
51  if (OwnedType) {
52    Decl *Group[2] = { OwnedType, Ptr };
53    return DeclGroupPtrTy::make(DeclGroupRef::Create(Context, Group, 2));
54  }
55
56  return DeclGroupPtrTy::make(DeclGroupRef(Ptr));
57}
58
59namespace {
60
61class TypeNameValidatorCCC : public CorrectionCandidateCallback {
62 public:
63  TypeNameValidatorCCC(bool AllowInvalid, bool WantClass=false)
64      : AllowInvalidDecl(AllowInvalid), WantClassName(WantClass) {
65    WantExpressionKeywords = false;
66    WantCXXNamedCasts = false;
67    WantRemainingKeywords = false;
68  }
69
70  virtual bool ValidateCandidate(const TypoCorrection &candidate) {
71    if (NamedDecl *ND = candidate.getCorrectionDecl())
72      return (isa<TypeDecl>(ND) || isa<ObjCInterfaceDecl>(ND)) &&
73          (AllowInvalidDecl || !ND->isInvalidDecl());
74    else
75      return !WantClassName && candidate.isKeyword();
76  }
77
78 private:
79  bool AllowInvalidDecl;
80  bool WantClassName;
81};
82
83}
84
85/// \brief Determine whether the token kind starts a simple-type-specifier.
86bool Sema::isSimpleTypeSpecifier(tok::TokenKind Kind) const {
87  switch (Kind) {
88  // FIXME: Take into account the current language when deciding whether a
89  // token kind is a valid type specifier
90  case tok::kw_short:
91  case tok::kw_long:
92  case tok::kw___int64:
93  case tok::kw___int128:
94  case tok::kw_signed:
95  case tok::kw_unsigned:
96  case tok::kw_void:
97  case tok::kw_char:
98  case tok::kw_int:
99  case tok::kw_half:
100  case tok::kw_float:
101  case tok::kw_double:
102  case tok::kw_wchar_t:
103  case tok::kw_bool:
104  case tok::kw___underlying_type:
105    return true;
106
107  case tok::annot_typename:
108  case tok::kw_char16_t:
109  case tok::kw_char32_t:
110  case tok::kw_typeof:
111  case tok::kw_decltype:
112    return getLangOpts().CPlusPlus;
113
114  default:
115    break;
116  }
117
118  return false;
119}
120
121/// \brief If the identifier refers to a type name within this scope,
122/// return the declaration of that type.
123///
124/// This routine performs ordinary name lookup of the identifier II
125/// within the given scope, with optional C++ scope specifier SS, to
126/// determine whether the name refers to a type. If so, returns an
127/// opaque pointer (actually a QualType) corresponding to that
128/// type. Otherwise, returns NULL.
129///
130/// If name lookup results in an ambiguity, this routine will complain
131/// and then return NULL.
132ParsedType Sema::getTypeName(IdentifierInfo &II, SourceLocation NameLoc,
133                             Scope *S, CXXScopeSpec *SS,
134                             bool isClassName, bool HasTrailingDot,
135                             ParsedType ObjectTypePtr,
136                             bool IsCtorOrDtorName,
137                             bool WantNontrivialTypeSourceInfo,
138                             IdentifierInfo **CorrectedII) {
139  // Determine where we will perform name lookup.
140  DeclContext *LookupCtx = 0;
141  if (ObjectTypePtr) {
142    QualType ObjectType = ObjectTypePtr.get();
143    if (ObjectType->isRecordType())
144      LookupCtx = computeDeclContext(ObjectType);
145  } else if (SS && SS->isNotEmpty()) {
146    LookupCtx = computeDeclContext(*SS, false);
147
148    if (!LookupCtx) {
149      if (isDependentScopeSpecifier(*SS)) {
150        // C++ [temp.res]p3:
151        //   A qualified-id that refers to a type and in which the
152        //   nested-name-specifier depends on a template-parameter (14.6.2)
153        //   shall be prefixed by the keyword typename to indicate that the
154        //   qualified-id denotes a type, forming an
155        //   elaborated-type-specifier (7.1.5.3).
156        //
157        // We therefore do not perform any name lookup if the result would
158        // refer to a member of an unknown specialization.
159        if (!isClassName && !IsCtorOrDtorName)
160          return ParsedType();
161
162        // We know from the grammar that this name refers to a type,
163        // so build a dependent node to describe the type.
164        if (WantNontrivialTypeSourceInfo)
165          return ActOnTypenameType(S, SourceLocation(), *SS, II, NameLoc).get();
166
167        NestedNameSpecifierLoc QualifierLoc = SS->getWithLocInContext(Context);
168        QualType T =
169          CheckTypenameType(ETK_None, SourceLocation(), QualifierLoc,
170                            II, NameLoc);
171
172          return ParsedType::make(T);
173      }
174
175      return ParsedType();
176    }
177
178    if (!LookupCtx->isDependentContext() &&
179        RequireCompleteDeclContext(*SS, LookupCtx))
180      return ParsedType();
181  }
182
183  // FIXME: LookupNestedNameSpecifierName isn't the right kind of
184  // lookup for class-names.
185  LookupNameKind Kind = isClassName ? LookupNestedNameSpecifierName :
186                                      LookupOrdinaryName;
187  LookupResult Result(*this, &II, NameLoc, Kind);
188  if (LookupCtx) {
189    // Perform "qualified" name lookup into the declaration context we
190    // computed, which is either the type of the base of a member access
191    // expression or the declaration context associated with a prior
192    // nested-name-specifier.
193    LookupQualifiedName(Result, LookupCtx);
194
195    if (ObjectTypePtr && Result.empty()) {
196      // C++ [basic.lookup.classref]p3:
197      //   If the unqualified-id is ~type-name, the type-name is looked up
198      //   in the context of the entire postfix-expression. If the type T of
199      //   the object expression is of a class type C, the type-name is also
200      //   looked up in the scope of class C. At least one of the lookups shall
201      //   find a name that refers to (possibly cv-qualified) T.
202      LookupName(Result, S);
203    }
204  } else {
205    // Perform unqualified name lookup.
206    LookupName(Result, S);
207  }
208
209  NamedDecl *IIDecl = 0;
210  switch (Result.getResultKind()) {
211  case LookupResult::NotFound:
212  case LookupResult::NotFoundInCurrentInstantiation:
213    if (CorrectedII) {
214      TypeNameValidatorCCC Validator(true, isClassName);
215      TypoCorrection Correction = CorrectTypo(Result.getLookupNameInfo(),
216                                              Kind, S, SS, Validator);
217      IdentifierInfo *NewII = Correction.getCorrectionAsIdentifierInfo();
218      TemplateTy Template;
219      bool MemberOfUnknownSpecialization;
220      UnqualifiedId TemplateName;
221      TemplateName.setIdentifier(NewII, NameLoc);
222      NestedNameSpecifier *NNS = Correction.getCorrectionSpecifier();
223      CXXScopeSpec NewSS, *NewSSPtr = SS;
224      if (SS && NNS) {
225        NewSS.MakeTrivial(Context, NNS, SourceRange(NameLoc));
226        NewSSPtr = &NewSS;
227      }
228      if (Correction && (NNS || NewII != &II) &&
229          // Ignore a correction to a template type as the to-be-corrected
230          // identifier is not a template (typo correction for template names
231          // is handled elsewhere).
232          !(getLangOpts().CPlusPlus && NewSSPtr &&
233            isTemplateName(S, *NewSSPtr, false, TemplateName, ParsedType(),
234                           false, Template, MemberOfUnknownSpecialization))) {
235        ParsedType Ty = getTypeName(*NewII, NameLoc, S, NewSSPtr,
236                                    isClassName, HasTrailingDot, ObjectTypePtr,
237                                    IsCtorOrDtorName,
238                                    WantNontrivialTypeSourceInfo);
239        if (Ty) {
240          std::string CorrectedStr(Correction.getAsString(getLangOpts()));
241          std::string CorrectedQuotedStr(
242              Correction.getQuoted(getLangOpts()));
243          Diag(NameLoc, diag::err_unknown_type_or_class_name_suggest)
244              << Result.getLookupName() << CorrectedQuotedStr << isClassName
245              << FixItHint::CreateReplacement(SourceRange(NameLoc),
246                                              CorrectedStr);
247          if (NamedDecl *FirstDecl = Correction.getCorrectionDecl())
248            Diag(FirstDecl->getLocation(), diag::note_previous_decl)
249              << CorrectedQuotedStr;
250
251          if (SS && NNS)
252            SS->MakeTrivial(Context, NNS, SourceRange(NameLoc));
253          *CorrectedII = NewII;
254          return Ty;
255        }
256      }
257    }
258    // If typo correction failed or was not performed, fall through
259  case LookupResult::FoundOverloaded:
260  case LookupResult::FoundUnresolvedValue:
261    Result.suppressDiagnostics();
262    return ParsedType();
263
264  case LookupResult::Ambiguous:
265    // Recover from type-hiding ambiguities by hiding the type.  We'll
266    // do the lookup again when looking for an object, and we can
267    // diagnose the error then.  If we don't do this, then the error
268    // about hiding the type will be immediately followed by an error
269    // that only makes sense if the identifier was treated like a type.
270    if (Result.getAmbiguityKind() == LookupResult::AmbiguousTagHiding) {
271      Result.suppressDiagnostics();
272      return ParsedType();
273    }
274
275    // Look to see if we have a type anywhere in the list of results.
276    for (LookupResult::iterator Res = Result.begin(), ResEnd = Result.end();
277         Res != ResEnd; ++Res) {
278      if (isa<TypeDecl>(*Res) || isa<ObjCInterfaceDecl>(*Res)) {
279        if (!IIDecl ||
280            (*Res)->getLocation().getRawEncoding() <
281              IIDecl->getLocation().getRawEncoding())
282          IIDecl = *Res;
283      }
284    }
285
286    if (!IIDecl) {
287      // None of the entities we found is a type, so there is no way
288      // to even assume that the result is a type. In this case, don't
289      // complain about the ambiguity. The parser will either try to
290      // perform this lookup again (e.g., as an object name), which
291      // will produce the ambiguity, or will complain that it expected
292      // a type name.
293      Result.suppressDiagnostics();
294      return ParsedType();
295    }
296
297    // We found a type within the ambiguous lookup; diagnose the
298    // ambiguity and then return that type. This might be the right
299    // answer, or it might not be, but it suppresses any attempt to
300    // perform the name lookup again.
301    break;
302
303  case LookupResult::Found:
304    IIDecl = Result.getFoundDecl();
305    break;
306  }
307
308  assert(IIDecl && "Didn't find decl");
309
310  QualType T;
311  if (TypeDecl *TD = dyn_cast<TypeDecl>(IIDecl)) {
312    DiagnoseUseOfDecl(IIDecl, NameLoc);
313
314    if (T.isNull())
315      T = Context.getTypeDeclType(TD);
316
317    // NOTE: avoid constructing an ElaboratedType(Loc) if this is a
318    // constructor or destructor name (in such a case, the scope specifier
319    // will be attached to the enclosing Expr or Decl node).
320    if (SS && SS->isNotEmpty() && !IsCtorOrDtorName) {
321      if (WantNontrivialTypeSourceInfo) {
322        // Construct a type with type-source information.
323        TypeLocBuilder Builder;
324        Builder.pushTypeSpec(T).setNameLoc(NameLoc);
325
326        T = getElaboratedType(ETK_None, *SS, T);
327        ElaboratedTypeLoc ElabTL = Builder.push<ElaboratedTypeLoc>(T);
328        ElabTL.setElaboratedKeywordLoc(SourceLocation());
329        ElabTL.setQualifierLoc(SS->getWithLocInContext(Context));
330        return CreateParsedType(T, Builder.getTypeSourceInfo(Context, T));
331      } else {
332        T = getElaboratedType(ETK_None, *SS, T);
333      }
334    }
335  } else if (ObjCInterfaceDecl *IDecl = dyn_cast<ObjCInterfaceDecl>(IIDecl)) {
336    (void)DiagnoseUseOfDecl(IDecl, NameLoc);
337    if (!HasTrailingDot)
338      T = Context.getObjCInterfaceType(IDecl);
339  }
340
341  if (T.isNull()) {
342    // If it's not plausibly a type, suppress diagnostics.
343    Result.suppressDiagnostics();
344    return ParsedType();
345  }
346  return ParsedType::make(T);
347}
348
349/// isTagName() - This method is called *for error recovery purposes only*
350/// to determine if the specified name is a valid tag name ("struct foo").  If
351/// so, this returns the TST for the tag corresponding to it (TST_enum,
352/// TST_union, TST_struct, TST_interface, TST_class).  This is used to diagnose
353/// cases in C where the user forgot to specify the tag.
354DeclSpec::TST Sema::isTagName(IdentifierInfo &II, Scope *S) {
355  // Do a tag name lookup in this scope.
356  LookupResult R(*this, &II, SourceLocation(), LookupTagName);
357  LookupName(R, S, false);
358  R.suppressDiagnostics();
359  if (R.getResultKind() == LookupResult::Found)
360    if (const TagDecl *TD = R.getAsSingle<TagDecl>()) {
361      switch (TD->getTagKind()) {
362      case TTK_Struct: return DeclSpec::TST_struct;
363      case TTK_Interface: return DeclSpec::TST_interface;
364      case TTK_Union:  return DeclSpec::TST_union;
365      case TTK_Class:  return DeclSpec::TST_class;
366      case TTK_Enum:   return DeclSpec::TST_enum;
367      }
368    }
369
370  return DeclSpec::TST_unspecified;
371}
372
373/// isMicrosoftMissingTypename - In Microsoft mode, within class scope,
374/// if a CXXScopeSpec's type is equal to the type of one of the base classes
375/// then downgrade the missing typename error to a warning.
376/// This is needed for MSVC compatibility; Example:
377/// @code
378/// template<class T> class A {
379/// public:
380///   typedef int TYPE;
381/// };
382/// template<class T> class B : public A<T> {
383/// public:
384///   A<T>::TYPE a; // no typename required because A<T> is a base class.
385/// };
386/// @endcode
387bool Sema::isMicrosoftMissingTypename(const CXXScopeSpec *SS, Scope *S) {
388  if (CurContext->isRecord()) {
389    const Type *Ty = SS->getScopeRep()->getAsType();
390
391    CXXRecordDecl *RD = cast<CXXRecordDecl>(CurContext);
392    for (CXXRecordDecl::base_class_const_iterator Base = RD->bases_begin(),
393          BaseEnd = RD->bases_end(); Base != BaseEnd; ++Base)
394      if (Context.hasSameUnqualifiedType(QualType(Ty, 1), Base->getType()))
395        return true;
396    return S->isFunctionPrototypeScope();
397  }
398  return CurContext->isFunctionOrMethod() || S->isFunctionPrototypeScope();
399}
400
401bool Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II,
402                                   SourceLocation IILoc,
403                                   Scope *S,
404                                   CXXScopeSpec *SS,
405                                   ParsedType &SuggestedType) {
406  // We don't have anything to suggest (yet).
407  SuggestedType = ParsedType();
408
409  // There may have been a typo in the name of the type. Look up typo
410  // results, in case we have something that we can suggest.
411  TypeNameValidatorCCC Validator(false);
412  if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(II, IILoc),
413                                             LookupOrdinaryName, S, SS,
414                                             Validator)) {
415    std::string CorrectedStr(Corrected.getAsString(getLangOpts()));
416    std::string CorrectedQuotedStr(Corrected.getQuoted(getLangOpts()));
417
418    if (Corrected.isKeyword()) {
419      // We corrected to a keyword.
420      IdentifierInfo *NewII = Corrected.getCorrectionAsIdentifierInfo();
421      if (!isSimpleTypeSpecifier(NewII->getTokenID()))
422        CorrectedQuotedStr = "the keyword " + CorrectedQuotedStr;
423      Diag(IILoc, diag::err_unknown_typename_suggest)
424        << II << CorrectedQuotedStr
425        << FixItHint::CreateReplacement(SourceRange(IILoc), CorrectedStr);
426      II = NewII;
427    } else {
428      NamedDecl *Result = Corrected.getCorrectionDecl();
429      // We found a similarly-named type or interface; suggest that.
430      if (!SS || !SS->isSet())
431        Diag(IILoc, diag::err_unknown_typename_suggest)
432          << II << CorrectedQuotedStr
433          << FixItHint::CreateReplacement(SourceRange(IILoc), CorrectedStr);
434      else if (DeclContext *DC = computeDeclContext(*SS, false))
435        Diag(IILoc, diag::err_unknown_nested_typename_suggest)
436          << II << DC << CorrectedQuotedStr << SS->getRange()
437          << FixItHint::CreateReplacement(Corrected.getCorrectionRange(),
438                                          CorrectedStr);
439      else
440        llvm_unreachable("could not have corrected a typo here");
441
442      Diag(Result->getLocation(), diag::note_previous_decl)
443        << CorrectedQuotedStr;
444
445      SuggestedType = getTypeName(*Result->getIdentifier(), IILoc, S, SS,
446                                  false, false, ParsedType(),
447                                  /*IsCtorOrDtorName=*/false,
448                                  /*NonTrivialTypeSourceInfo=*/true);
449    }
450    return true;
451  }
452
453  if (getLangOpts().CPlusPlus) {
454    // See if II is a class template that the user forgot to pass arguments to.
455    UnqualifiedId Name;
456    Name.setIdentifier(II, IILoc);
457    CXXScopeSpec EmptySS;
458    TemplateTy TemplateResult;
459    bool MemberOfUnknownSpecialization;
460    if (isTemplateName(S, SS ? *SS : EmptySS, /*hasTemplateKeyword=*/false,
461                       Name, ParsedType(), true, TemplateResult,
462                       MemberOfUnknownSpecialization) == TNK_Type_template) {
463      TemplateName TplName = TemplateResult.getAsVal<TemplateName>();
464      Diag(IILoc, diag::err_template_missing_args) << TplName;
465      if (TemplateDecl *TplDecl = TplName.getAsTemplateDecl()) {
466        Diag(TplDecl->getLocation(), diag::note_template_decl_here)
467          << TplDecl->getTemplateParameters()->getSourceRange();
468      }
469      return true;
470    }
471  }
472
473  // FIXME: Should we move the logic that tries to recover from a missing tag
474  // (struct, union, enum) from Parser::ParseImplicitInt here, instead?
475
476  if (!SS || (!SS->isSet() && !SS->isInvalid()))
477    Diag(IILoc, diag::err_unknown_typename) << II;
478  else if (DeclContext *DC = computeDeclContext(*SS, false))
479    Diag(IILoc, diag::err_typename_nested_not_found)
480      << II << DC << SS->getRange();
481  else if (isDependentScopeSpecifier(*SS)) {
482    unsigned DiagID = diag::err_typename_missing;
483    if (getLangOpts().MicrosoftMode && isMicrosoftMissingTypename(SS, S))
484      DiagID = diag::warn_typename_missing;
485
486    Diag(SS->getRange().getBegin(), DiagID)
487      << (NestedNameSpecifier *)SS->getScopeRep() << II->getName()
488      << SourceRange(SS->getRange().getBegin(), IILoc)
489      << FixItHint::CreateInsertion(SS->getRange().getBegin(), "typename ");
490    SuggestedType = ActOnTypenameType(S, SourceLocation(),
491                                      *SS, *II, IILoc).get();
492  } else {
493    assert(SS && SS->isInvalid() &&
494           "Invalid scope specifier has already been diagnosed");
495  }
496
497  return true;
498}
499
500/// \brief Determine whether the given result set contains either a type name
501/// or
502static bool isResultTypeOrTemplate(LookupResult &R, const Token &NextToken) {
503  bool CheckTemplate = R.getSema().getLangOpts().CPlusPlus &&
504                       NextToken.is(tok::less);
505
506  for (LookupResult::iterator I = R.begin(), IEnd = R.end(); I != IEnd; ++I) {
507    if (isa<TypeDecl>(*I) || isa<ObjCInterfaceDecl>(*I))
508      return true;
509
510    if (CheckTemplate && isa<TemplateDecl>(*I))
511      return true;
512  }
513
514  return false;
515}
516
517static bool isTagTypeWithMissingTag(Sema &SemaRef, LookupResult &Result,
518                                    Scope *S, CXXScopeSpec &SS,
519                                    IdentifierInfo *&Name,
520                                    SourceLocation NameLoc) {
521  LookupResult R(SemaRef, Name, NameLoc, Sema::LookupTagName);
522  SemaRef.LookupParsedName(R, S, &SS);
523  if (TagDecl *Tag = R.getAsSingle<TagDecl>()) {
524    const char *TagName = 0;
525    const char *FixItTagName = 0;
526    switch (Tag->getTagKind()) {
527      case TTK_Class:
528        TagName = "class";
529        FixItTagName = "class ";
530        break;
531
532      case TTK_Enum:
533        TagName = "enum";
534        FixItTagName = "enum ";
535        break;
536
537      case TTK_Struct:
538        TagName = "struct";
539        FixItTagName = "struct ";
540        break;
541
542      case TTK_Interface:
543        TagName = "__interface";
544        FixItTagName = "__interface ";
545        break;
546
547      case TTK_Union:
548        TagName = "union";
549        FixItTagName = "union ";
550        break;
551    }
552
553    SemaRef.Diag(NameLoc, diag::err_use_of_tag_name_without_tag)
554      << Name << TagName << SemaRef.getLangOpts().CPlusPlus
555      << FixItHint::CreateInsertion(NameLoc, FixItTagName);
556
557    for (LookupResult::iterator I = Result.begin(), IEnd = Result.end();
558         I != IEnd; ++I)
559      SemaRef.Diag((*I)->getLocation(), diag::note_decl_hiding_tag_type)
560        << Name << TagName;
561
562    // Replace lookup results with just the tag decl.
563    Result.clear(Sema::LookupTagName);
564    SemaRef.LookupParsedName(Result, S, &SS);
565    return true;
566  }
567
568  return false;
569}
570
571/// Build a ParsedType for a simple-type-specifier with a nested-name-specifier.
572static ParsedType buildNestedType(Sema &S, CXXScopeSpec &SS,
573                                  QualType T, SourceLocation NameLoc) {
574  ASTContext &Context = S.Context;
575
576  TypeLocBuilder Builder;
577  Builder.pushTypeSpec(T).setNameLoc(NameLoc);
578
579  T = S.getElaboratedType(ETK_None, SS, T);
580  ElaboratedTypeLoc ElabTL = Builder.push<ElaboratedTypeLoc>(T);
581  ElabTL.setElaboratedKeywordLoc(SourceLocation());
582  ElabTL.setQualifierLoc(SS.getWithLocInContext(Context));
583  return S.CreateParsedType(T, Builder.getTypeSourceInfo(Context, T));
584}
585
586Sema::NameClassification Sema::ClassifyName(Scope *S,
587                                            CXXScopeSpec &SS,
588                                            IdentifierInfo *&Name,
589                                            SourceLocation NameLoc,
590                                            const Token &NextToken,
591                                            bool IsAddressOfOperand,
592                                            CorrectionCandidateCallback *CCC) {
593  DeclarationNameInfo NameInfo(Name, NameLoc);
594  ObjCMethodDecl *CurMethod = getCurMethodDecl();
595
596  if (NextToken.is(tok::coloncolon)) {
597    BuildCXXNestedNameSpecifier(S, *Name, NameLoc, NextToken.getLocation(),
598                                QualType(), false, SS, 0, false);
599
600  }
601
602  LookupResult Result(*this, Name, NameLoc, LookupOrdinaryName);
603  LookupParsedName(Result, S, &SS, !CurMethod);
604
605  // Perform lookup for Objective-C instance variables (including automatically
606  // synthesized instance variables), if we're in an Objective-C method.
607  // FIXME: This lookup really, really needs to be folded in to the normal
608  // unqualified lookup mechanism.
609  if (!SS.isSet() && CurMethod && !isResultTypeOrTemplate(Result, NextToken)) {
610    ExprResult E = LookupInObjCMethod(Result, S, Name, true);
611    if (E.get() || E.isInvalid())
612      return E;
613  }
614
615  bool SecondTry = false;
616  bool IsFilteredTemplateName = false;
617
618Corrected:
619  switch (Result.getResultKind()) {
620  case LookupResult::NotFound:
621    // If an unqualified-id is followed by a '(', then we have a function
622    // call.
623    if (!SS.isSet() && NextToken.is(tok::l_paren)) {
624      // In C++, this is an ADL-only call.
625      // FIXME: Reference?
626      if (getLangOpts().CPlusPlus)
627        return BuildDeclarationNameExpr(SS, Result, /*ADL=*/true);
628
629      // C90 6.3.2.2:
630      //   If the expression that precedes the parenthesized argument list in a
631      //   function call consists solely of an identifier, and if no
632      //   declaration is visible for this identifier, the identifier is
633      //   implicitly declared exactly as if, in the innermost block containing
634      //   the function call, the declaration
635      //
636      //     extern int identifier ();
637      //
638      //   appeared.
639      //
640      // We also allow this in C99 as an extension.
641      if (NamedDecl *D = ImplicitlyDefineFunction(NameLoc, *Name, S)) {
642        Result.addDecl(D);
643        Result.resolveKind();
644        return BuildDeclarationNameExpr(SS, Result, /*ADL=*/false);
645      }
646    }
647
648    // In C, we first see whether there is a tag type by the same name, in
649    // which case it's likely that the user just forget to write "enum",
650    // "struct", or "union".
651    if (!getLangOpts().CPlusPlus && !SecondTry &&
652        isTagTypeWithMissingTag(*this, Result, S, SS, Name, NameLoc)) {
653      break;
654    }
655
656    // Perform typo correction to determine if there is another name that is
657    // close to this name.
658    if (!SecondTry && CCC) {
659      SecondTry = true;
660      if (TypoCorrection Corrected = CorrectTypo(Result.getLookupNameInfo(),
661                                                 Result.getLookupKind(), S,
662                                                 &SS, *CCC)) {
663        unsigned UnqualifiedDiag = diag::err_undeclared_var_use_suggest;
664        unsigned QualifiedDiag = diag::err_no_member_suggest;
665        std::string CorrectedStr(Corrected.getAsString(getLangOpts()));
666        std::string CorrectedQuotedStr(Corrected.getQuoted(getLangOpts()));
667
668        NamedDecl *FirstDecl = Corrected.getCorrectionDecl();
669        NamedDecl *UnderlyingFirstDecl
670          = FirstDecl? FirstDecl->getUnderlyingDecl() : 0;
671        if (getLangOpts().CPlusPlus && NextToken.is(tok::less) &&
672            UnderlyingFirstDecl && isa<TemplateDecl>(UnderlyingFirstDecl)) {
673          UnqualifiedDiag = diag::err_no_template_suggest;
674          QualifiedDiag = diag::err_no_member_template_suggest;
675        } else if (UnderlyingFirstDecl &&
676                   (isa<TypeDecl>(UnderlyingFirstDecl) ||
677                    isa<ObjCInterfaceDecl>(UnderlyingFirstDecl) ||
678                    isa<ObjCCompatibleAliasDecl>(UnderlyingFirstDecl))) {
679           UnqualifiedDiag = diag::err_unknown_typename_suggest;
680           QualifiedDiag = diag::err_unknown_nested_typename_suggest;
681         }
682
683        if (SS.isEmpty())
684          Diag(NameLoc, UnqualifiedDiag)
685            << Name << CorrectedQuotedStr
686            << FixItHint::CreateReplacement(NameLoc, CorrectedStr);
687        else // FIXME: is this even reachable? Test it.
688          Diag(NameLoc, QualifiedDiag)
689            << Name << computeDeclContext(SS, false) << CorrectedQuotedStr
690            << SS.getRange()
691            << FixItHint::CreateReplacement(Corrected.getCorrectionRange(),
692                                            CorrectedStr);
693
694        // Update the name, so that the caller has the new name.
695        Name = Corrected.getCorrectionAsIdentifierInfo();
696
697        // Typo correction corrected to a keyword.
698        if (Corrected.isKeyword())
699          return Corrected.getCorrectionAsIdentifierInfo();
700
701        // Also update the LookupResult...
702        // FIXME: This should probably go away at some point
703        Result.clear();
704        Result.setLookupName(Corrected.getCorrection());
705        if (FirstDecl) {
706          Result.addDecl(FirstDecl);
707          Diag(FirstDecl->getLocation(), diag::note_previous_decl)
708            << CorrectedQuotedStr;
709        }
710
711        // If we found an Objective-C instance variable, let
712        // LookupInObjCMethod build the appropriate expression to
713        // reference the ivar.
714        // FIXME: This is a gross hack.
715        if (ObjCIvarDecl *Ivar = Result.getAsSingle<ObjCIvarDecl>()) {
716          Result.clear();
717          ExprResult E(LookupInObjCMethod(Result, S, Ivar->getIdentifier()));
718          return E;
719        }
720
721        goto Corrected;
722      }
723    }
724
725    // We failed to correct; just fall through and let the parser deal with it.
726    Result.suppressDiagnostics();
727    return NameClassification::Unknown();
728
729  case LookupResult::NotFoundInCurrentInstantiation: {
730    // We performed name lookup into the current instantiation, and there were
731    // dependent bases, so we treat this result the same way as any other
732    // dependent nested-name-specifier.
733
734    // C++ [temp.res]p2:
735    //   A name used in a template declaration or definition and that is
736    //   dependent on a template-parameter is assumed not to name a type
737    //   unless the applicable name lookup finds a type name or the name is
738    //   qualified by the keyword typename.
739    //
740    // FIXME: If the next token is '<', we might want to ask the parser to
741    // perform some heroics to see if we actually have a
742    // template-argument-list, which would indicate a missing 'template'
743    // keyword here.
744    return ActOnDependentIdExpression(SS, /*TemplateKWLoc=*/SourceLocation(),
745                                      NameInfo, IsAddressOfOperand,
746                                      /*TemplateArgs=*/0);
747  }
748
749  case LookupResult::Found:
750  case LookupResult::FoundOverloaded:
751  case LookupResult::FoundUnresolvedValue:
752    break;
753
754  case LookupResult::Ambiguous:
755    if (getLangOpts().CPlusPlus && NextToken.is(tok::less) &&
756        hasAnyAcceptableTemplateNames(Result)) {
757      // C++ [temp.local]p3:
758      //   A lookup that finds an injected-class-name (10.2) can result in an
759      //   ambiguity in certain cases (for example, if it is found in more than
760      //   one base class). If all of the injected-class-names that are found
761      //   refer to specializations of the same class template, and if the name
762      //   is followed by a template-argument-list, the reference refers to the
763      //   class template itself and not a specialization thereof, and is not
764      //   ambiguous.
765      //
766      // This filtering can make an ambiguous result into an unambiguous one,
767      // so try again after filtering out template names.
768      FilterAcceptableTemplateNames(Result);
769      if (!Result.isAmbiguous()) {
770        IsFilteredTemplateName = true;
771        break;
772      }
773    }
774
775    // Diagnose the ambiguity and return an error.
776    return NameClassification::Error();
777  }
778
779  if (getLangOpts().CPlusPlus && NextToken.is(tok::less) &&
780      (IsFilteredTemplateName || hasAnyAcceptableTemplateNames(Result))) {
781    // C++ [temp.names]p3:
782    //   After name lookup (3.4) finds that a name is a template-name or that
783    //   an operator-function-id or a literal- operator-id refers to a set of
784    //   overloaded functions any member of which is a function template if
785    //   this is followed by a <, the < is always taken as the delimiter of a
786    //   template-argument-list and never as the less-than operator.
787    if (!IsFilteredTemplateName)
788      FilterAcceptableTemplateNames(Result);
789
790    if (!Result.empty()) {
791      bool IsFunctionTemplate;
792      TemplateName Template;
793      if (Result.end() - Result.begin() > 1) {
794        IsFunctionTemplate = true;
795        Template = Context.getOverloadedTemplateName(Result.begin(),
796                                                     Result.end());
797      } else {
798        TemplateDecl *TD
799          = cast<TemplateDecl>((*Result.begin())->getUnderlyingDecl());
800        IsFunctionTemplate = isa<FunctionTemplateDecl>(TD);
801
802        if (SS.isSet() && !SS.isInvalid())
803          Template = Context.getQualifiedTemplateName(SS.getScopeRep(),
804                                                    /*TemplateKeyword=*/false,
805                                                      TD);
806        else
807          Template = TemplateName(TD);
808      }
809
810      if (IsFunctionTemplate) {
811        // Function templates always go through overload resolution, at which
812        // point we'll perform the various checks (e.g., accessibility) we need
813        // to based on which function we selected.
814        Result.suppressDiagnostics();
815
816        return NameClassification::FunctionTemplate(Template);
817      }
818
819      return NameClassification::TypeTemplate(Template);
820    }
821  }
822
823  NamedDecl *FirstDecl = (*Result.begin())->getUnderlyingDecl();
824  if (TypeDecl *Type = dyn_cast<TypeDecl>(FirstDecl)) {
825    DiagnoseUseOfDecl(Type, NameLoc);
826    QualType T = Context.getTypeDeclType(Type);
827    if (SS.isNotEmpty())
828      return buildNestedType(*this, SS, T, NameLoc);
829    return ParsedType::make(T);
830  }
831
832  ObjCInterfaceDecl *Class = dyn_cast<ObjCInterfaceDecl>(FirstDecl);
833  if (!Class) {
834    // FIXME: It's unfortunate that we don't have a Type node for handling this.
835    if (ObjCCompatibleAliasDecl *Alias
836                                = dyn_cast<ObjCCompatibleAliasDecl>(FirstDecl))
837      Class = Alias->getClassInterface();
838  }
839
840  if (Class) {
841    DiagnoseUseOfDecl(Class, NameLoc);
842
843    if (NextToken.is(tok::period)) {
844      // Interface. <something> is parsed as a property reference expression.
845      // Just return "unknown" as a fall-through for now.
846      Result.suppressDiagnostics();
847      return NameClassification::Unknown();
848    }
849
850    QualType T = Context.getObjCInterfaceType(Class);
851    return ParsedType::make(T);
852  }
853
854  // We can have a type template here if we're classifying a template argument.
855  if (isa<TemplateDecl>(FirstDecl) && !isa<FunctionTemplateDecl>(FirstDecl))
856    return NameClassification::TypeTemplate(
857        TemplateName(cast<TemplateDecl>(FirstDecl)));
858
859  // Check for a tag type hidden by a non-type decl in a few cases where it
860  // seems likely a type is wanted instead of the non-type that was found.
861  if (!getLangOpts().ObjC1) {
862    bool NextIsOp = NextToken.is(tok::amp) || NextToken.is(tok::star);
863    if ((NextToken.is(tok::identifier) ||
864         (NextIsOp && FirstDecl->isFunctionOrFunctionTemplate())) &&
865        isTagTypeWithMissingTag(*this, Result, S, SS, Name, NameLoc)) {
866      TypeDecl *Type = Result.getAsSingle<TypeDecl>();
867      DiagnoseUseOfDecl(Type, NameLoc);
868      QualType T = Context.getTypeDeclType(Type);
869      if (SS.isNotEmpty())
870        return buildNestedType(*this, SS, T, NameLoc);
871      return ParsedType::make(T);
872    }
873  }
874
875  if (FirstDecl->isCXXClassMember())
876    return BuildPossibleImplicitMemberExpr(SS, SourceLocation(), Result, 0);
877
878  bool ADL = UseArgumentDependentLookup(SS, Result, NextToken.is(tok::l_paren));
879  return BuildDeclarationNameExpr(SS, Result, ADL);
880}
881
882// Determines the context to return to after temporarily entering a
883// context.  This depends in an unnecessarily complicated way on the
884// exact ordering of callbacks from the parser.
885DeclContext *Sema::getContainingDC(DeclContext *DC) {
886
887  // Functions defined inline within classes aren't parsed until we've
888  // finished parsing the top-level class, so the top-level class is
889  // the context we'll need to return to.
890  if (isa<FunctionDecl>(DC)) {
891    DC = DC->getLexicalParent();
892
893    // A function not defined within a class will always return to its
894    // lexical context.
895    if (!isa<CXXRecordDecl>(DC))
896      return DC;
897
898    // A C++ inline method/friend is parsed *after* the topmost class
899    // it was declared in is fully parsed ("complete");  the topmost
900    // class is the context we need to return to.
901    while (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC->getLexicalParent()))
902      DC = RD;
903
904    // Return the declaration context of the topmost class the inline method is
905    // declared in.
906    return DC;
907  }
908
909  return DC->getLexicalParent();
910}
911
912void Sema::PushDeclContext(Scope *S, DeclContext *DC) {
913  assert(getContainingDC(DC) == CurContext &&
914      "The next DeclContext should be lexically contained in the current one.");
915  CurContext = DC;
916  S->setEntity(DC);
917}
918
919void Sema::PopDeclContext() {
920  assert(CurContext && "DeclContext imbalance!");
921
922  CurContext = getContainingDC(CurContext);
923  assert(CurContext && "Popped translation unit!");
924}
925
926/// EnterDeclaratorContext - Used when we must lookup names in the context
927/// of a declarator's nested name specifier.
928///
929void Sema::EnterDeclaratorContext(Scope *S, DeclContext *DC) {
930  // C++0x [basic.lookup.unqual]p13:
931  //   A name used in the definition of a static data member of class
932  //   X (after the qualified-id of the static member) is looked up as
933  //   if the name was used in a member function of X.
934  // C++0x [basic.lookup.unqual]p14:
935  //   If a variable member of a namespace is defined outside of the
936  //   scope of its namespace then any name used in the definition of
937  //   the variable member (after the declarator-id) is looked up as
938  //   if the definition of the variable member occurred in its
939  //   namespace.
940  // Both of these imply that we should push a scope whose context
941  // is the semantic context of the declaration.  We can't use
942  // PushDeclContext here because that context is not necessarily
943  // lexically contained in the current context.  Fortunately,
944  // the containing scope should have the appropriate information.
945
946  assert(!S->getEntity() && "scope already has entity");
947
948#ifndef NDEBUG
949  Scope *Ancestor = S->getParent();
950  while (!Ancestor->getEntity()) Ancestor = Ancestor->getParent();
951  assert(Ancestor->getEntity() == CurContext && "ancestor context mismatch");
952#endif
953
954  CurContext = DC;
955  S->setEntity(DC);
956}
957
958void Sema::ExitDeclaratorContext(Scope *S) {
959  assert(S->getEntity() == CurContext && "Context imbalance!");
960
961  // Switch back to the lexical context.  The safety of this is
962  // enforced by an assert in EnterDeclaratorContext.
963  Scope *Ancestor = S->getParent();
964  while (!Ancestor->getEntity()) Ancestor = Ancestor->getParent();
965  CurContext = (DeclContext*) Ancestor->getEntity();
966
967  // We don't need to do anything with the scope, which is going to
968  // disappear.
969}
970
971
972void Sema::ActOnReenterFunctionContext(Scope* S, Decl *D) {
973  FunctionDecl *FD = dyn_cast<FunctionDecl>(D);
974  if (FunctionTemplateDecl *TFD = dyn_cast_or_null<FunctionTemplateDecl>(D)) {
975    // We assume that the caller has already called
976    // ActOnReenterTemplateScope
977    FD = TFD->getTemplatedDecl();
978  }
979  if (!FD)
980    return;
981
982  // Same implementation as PushDeclContext, but enters the context
983  // from the lexical parent, rather than the top-level class.
984  assert(CurContext == FD->getLexicalParent() &&
985    "The next DeclContext should be lexically contained in the current one.");
986  CurContext = FD;
987  S->setEntity(CurContext);
988
989  for (unsigned P = 0, NumParams = FD->getNumParams(); P < NumParams; ++P) {
990    ParmVarDecl *Param = FD->getParamDecl(P);
991    // If the parameter has an identifier, then add it to the scope
992    if (Param->getIdentifier()) {
993      S->AddDecl(Param);
994      IdResolver.AddDecl(Param);
995    }
996  }
997}
998
999
1000void Sema::ActOnExitFunctionContext() {
1001  // Same implementation as PopDeclContext, but returns to the lexical parent,
1002  // rather than the top-level class.
1003  assert(CurContext && "DeclContext imbalance!");
1004  CurContext = CurContext->getLexicalParent();
1005  assert(CurContext && "Popped translation unit!");
1006}
1007
1008
1009/// \brief Determine whether we allow overloading of the function
1010/// PrevDecl with another declaration.
1011///
1012/// This routine determines whether overloading is possible, not
1013/// whether some new function is actually an overload. It will return
1014/// true in C++ (where we can always provide overloads) or, as an
1015/// extension, in C when the previous function is already an
1016/// overloaded function declaration or has the "overloadable"
1017/// attribute.
1018static bool AllowOverloadingOfFunction(LookupResult &Previous,
1019                                       ASTContext &Context) {
1020  if (Context.getLangOpts().CPlusPlus)
1021    return true;
1022
1023  if (Previous.getResultKind() == LookupResult::FoundOverloaded)
1024    return true;
1025
1026  return (Previous.getResultKind() == LookupResult::Found
1027          && Previous.getFoundDecl()->hasAttr<OverloadableAttr>());
1028}
1029
1030/// Add this decl to the scope shadowed decl chains.
1031void Sema::PushOnScopeChains(NamedDecl *D, Scope *S, bool AddToContext) {
1032  // Move up the scope chain until we find the nearest enclosing
1033  // non-transparent context. The declaration will be introduced into this
1034  // scope.
1035  while (S->getEntity() &&
1036         ((DeclContext *)S->getEntity())->isTransparentContext())
1037    S = S->getParent();
1038
1039  // Add scoped declarations into their context, so that they can be
1040  // found later. Declarations without a context won't be inserted
1041  // into any context.
1042  if (AddToContext)
1043    CurContext->addDecl(D);
1044
1045  // Out-of-line definitions shouldn't be pushed into scope in C++.
1046  // Out-of-line variable and function definitions shouldn't even in C.
1047  if ((getLangOpts().CPlusPlus || isa<VarDecl>(D) || isa<FunctionDecl>(D)) &&
1048      D->isOutOfLine() &&
1049      !D->getDeclContext()->getRedeclContext()->Equals(
1050        D->getLexicalDeclContext()->getRedeclContext()))
1051    return;
1052
1053  // Template instantiations should also not be pushed into scope.
1054  if (isa<FunctionDecl>(D) &&
1055      cast<FunctionDecl>(D)->isFunctionTemplateSpecialization())
1056    return;
1057
1058  // If this replaces anything in the current scope,
1059  IdentifierResolver::iterator I = IdResolver.begin(D->getDeclName()),
1060                               IEnd = IdResolver.end();
1061  for (; I != IEnd; ++I) {
1062    if (S->isDeclScope(*I) && D->declarationReplaces(*I)) {
1063      S->RemoveDecl(*I);
1064      IdResolver.RemoveDecl(*I);
1065
1066      // Should only need to replace one decl.
1067      break;
1068    }
1069  }
1070
1071  S->AddDecl(D);
1072
1073  if (isa<LabelDecl>(D) && !cast<LabelDecl>(D)->isGnuLocal()) {
1074    // Implicitly-generated labels may end up getting generated in an order that
1075    // isn't strictly lexical, which breaks name lookup. Be careful to insert
1076    // the label at the appropriate place in the identifier chain.
1077    for (I = IdResolver.begin(D->getDeclName()); I != IEnd; ++I) {
1078      DeclContext *IDC = (*I)->getLexicalDeclContext()->getRedeclContext();
1079      if (IDC == CurContext) {
1080        if (!S->isDeclScope(*I))
1081          continue;
1082      } else if (IDC->Encloses(CurContext))
1083        break;
1084    }
1085
1086    IdResolver.InsertDeclAfter(I, D);
1087  } else {
1088    IdResolver.AddDecl(D);
1089  }
1090}
1091
1092void Sema::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
1093  if (IdResolver.tryAddTopLevelDecl(D, Name) && TUScope)
1094    TUScope->AddDecl(D);
1095}
1096
1097bool Sema::isDeclInScope(NamedDecl *&D, DeclContext *Ctx, Scope *S,
1098                         bool ExplicitInstantiationOrSpecialization) {
1099  return IdResolver.isDeclInScope(D, Ctx, S,
1100                                  ExplicitInstantiationOrSpecialization);
1101}
1102
1103Scope *Sema::getScopeForDeclContext(Scope *S, DeclContext *DC) {
1104  DeclContext *TargetDC = DC->getPrimaryContext();
1105  do {
1106    if (DeclContext *ScopeDC = (DeclContext*) S->getEntity())
1107      if (ScopeDC->getPrimaryContext() == TargetDC)
1108        return S;
1109  } while ((S = S->getParent()));
1110
1111  return 0;
1112}
1113
1114static bool isOutOfScopePreviousDeclaration(NamedDecl *,
1115                                            DeclContext*,
1116                                            ASTContext&);
1117
1118/// Filters out lookup results that don't fall within the given scope
1119/// as determined by isDeclInScope.
1120void Sema::FilterLookupForScope(LookupResult &R,
1121                                DeclContext *Ctx, Scope *S,
1122                                bool ConsiderLinkage,
1123                                bool ExplicitInstantiationOrSpecialization) {
1124  LookupResult::Filter F = R.makeFilter();
1125  while (F.hasNext()) {
1126    NamedDecl *D = F.next();
1127
1128    if (isDeclInScope(D, Ctx, S, ExplicitInstantiationOrSpecialization))
1129      continue;
1130
1131    if (ConsiderLinkage &&
1132        isOutOfScopePreviousDeclaration(D, Ctx, Context))
1133      continue;
1134
1135    F.erase();
1136  }
1137
1138  F.done();
1139}
1140
1141static bool isUsingDecl(NamedDecl *D) {
1142  return isa<UsingShadowDecl>(D) ||
1143         isa<UnresolvedUsingTypenameDecl>(D) ||
1144         isa<UnresolvedUsingValueDecl>(D);
1145}
1146
1147/// Removes using shadow declarations from the lookup results.
1148static void RemoveUsingDecls(LookupResult &R) {
1149  LookupResult::Filter F = R.makeFilter();
1150  while (F.hasNext())
1151    if (isUsingDecl(F.next()))
1152      F.erase();
1153
1154  F.done();
1155}
1156
1157/// \brief Check for this common pattern:
1158/// @code
1159/// class S {
1160///   S(const S&); // DO NOT IMPLEMENT
1161///   void operator=(const S&); // DO NOT IMPLEMENT
1162/// };
1163/// @endcode
1164static bool IsDisallowedCopyOrAssign(const CXXMethodDecl *D) {
1165  // FIXME: Should check for private access too but access is set after we get
1166  // the decl here.
1167  if (D->doesThisDeclarationHaveABody())
1168    return false;
1169
1170  if (const CXXConstructorDecl *CD = dyn_cast<CXXConstructorDecl>(D))
1171    return CD->isCopyConstructor();
1172  if (const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D))
1173    return Method->isCopyAssignmentOperator();
1174  return false;
1175}
1176
1177bool Sema::ShouldWarnIfUnusedFileScopedDecl(const DeclaratorDecl *D) const {
1178  assert(D);
1179
1180  if (D->isInvalidDecl() || D->isUsed() || D->hasAttr<UnusedAttr>())
1181    return false;
1182
1183  // Ignore class templates.
1184  if (D->getDeclContext()->isDependentContext() ||
1185      D->getLexicalDeclContext()->isDependentContext())
1186    return false;
1187
1188  if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
1189    if (FD->getTemplateSpecializationKind() == TSK_ImplicitInstantiation)
1190      return false;
1191
1192    if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD)) {
1193      if (MD->isVirtual() || IsDisallowedCopyOrAssign(MD))
1194        return false;
1195    } else {
1196      // 'static inline' functions are used in headers; don't warn.
1197      if (FD->getStorageClass() == SC_Static &&
1198          FD->isInlineSpecified())
1199        return false;
1200    }
1201
1202    if (FD->doesThisDeclarationHaveABody() &&
1203        Context.DeclMustBeEmitted(FD))
1204      return false;
1205  } else if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
1206    // Don't warn on variables of const-qualified or reference type, since their
1207    // values can be used even if though they're not odr-used, and because const
1208    // qualified variables can appear in headers in contexts where they're not
1209    // intended to be used.
1210    // FIXME: Use more principled rules for these exemptions.
1211    if (!VD->isFileVarDecl() ||
1212        VD->getType().isConstQualified() ||
1213        VD->getType()->isReferenceType() ||
1214        Context.DeclMustBeEmitted(VD))
1215      return false;
1216
1217    if (VD->isStaticDataMember() &&
1218        VD->getTemplateSpecializationKind() == TSK_ImplicitInstantiation)
1219      return false;
1220
1221  } else {
1222    return false;
1223  }
1224
1225  // Only warn for unused decls internal to the translation unit.
1226  if (D->getLinkage() == ExternalLinkage)
1227    return false;
1228
1229  return true;
1230}
1231
1232void Sema::MarkUnusedFileScopedDecl(const DeclaratorDecl *D) {
1233  if (!D)
1234    return;
1235
1236  if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
1237    const FunctionDecl *First = FD->getFirstDeclaration();
1238    if (FD != First && ShouldWarnIfUnusedFileScopedDecl(First))
1239      return; // First should already be in the vector.
1240  }
1241
1242  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
1243    const VarDecl *First = VD->getFirstDeclaration();
1244    if (VD != First && ShouldWarnIfUnusedFileScopedDecl(First))
1245      return; // First should already be in the vector.
1246  }
1247
1248  if (ShouldWarnIfUnusedFileScopedDecl(D))
1249    UnusedFileScopedDecls.push_back(D);
1250}
1251
1252static bool ShouldDiagnoseUnusedDecl(const NamedDecl *D) {
1253  if (D->isInvalidDecl())
1254    return false;
1255
1256  if (D->isReferenced() || D->isUsed() || D->hasAttr<UnusedAttr>())
1257    return false;
1258
1259  if (isa<LabelDecl>(D))
1260    return true;
1261
1262  // White-list anything that isn't a local variable.
1263  if (!isa<VarDecl>(D) || isa<ParmVarDecl>(D) || isa<ImplicitParamDecl>(D) ||
1264      !D->getDeclContext()->isFunctionOrMethod())
1265    return false;
1266
1267  // Types of valid local variables should be complete, so this should succeed.
1268  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
1269
1270    // White-list anything with an __attribute__((unused)) type.
1271    QualType Ty = VD->getType();
1272
1273    // Only look at the outermost level of typedef.
1274    if (const TypedefType *TT = Ty->getAs<TypedefType>()) {
1275      if (TT->getDecl()->hasAttr<UnusedAttr>())
1276        return false;
1277    }
1278
1279    // If we failed to complete the type for some reason, or if the type is
1280    // dependent, don't diagnose the variable.
1281    if (Ty->isIncompleteType() || Ty->isDependentType())
1282      return false;
1283
1284    if (const TagType *TT = Ty->getAs<TagType>()) {
1285      const TagDecl *Tag = TT->getDecl();
1286      if (Tag->hasAttr<UnusedAttr>())
1287        return false;
1288
1289      if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(Tag)) {
1290        if (!RD->hasTrivialDestructor())
1291          return false;
1292
1293        if (const Expr *Init = VD->getInit()) {
1294          if (const ExprWithCleanups *Cleanups = dyn_cast<ExprWithCleanups>(Init))
1295            Init = Cleanups->getSubExpr();
1296          const CXXConstructExpr *Construct =
1297            dyn_cast<CXXConstructExpr>(Init);
1298          if (Construct && !Construct->isElidable()) {
1299            CXXConstructorDecl *CD = Construct->getConstructor();
1300            if (!CD->isTrivial())
1301              return false;
1302          }
1303        }
1304      }
1305    }
1306
1307    // TODO: __attribute__((unused)) templates?
1308  }
1309
1310  return true;
1311}
1312
1313static void GenerateFixForUnusedDecl(const NamedDecl *D, ASTContext &Ctx,
1314                                     FixItHint &Hint) {
1315  if (isa<LabelDecl>(D)) {
1316    SourceLocation AfterColon = Lexer::findLocationAfterToken(D->getLocEnd(),
1317                tok::colon, Ctx.getSourceManager(), Ctx.getLangOpts(), true);
1318    if (AfterColon.isInvalid())
1319      return;
1320    Hint = FixItHint::CreateRemoval(CharSourceRange::
1321                                    getCharRange(D->getLocStart(), AfterColon));
1322  }
1323  return;
1324}
1325
1326/// DiagnoseUnusedDecl - Emit warnings about declarations that are not used
1327/// unless they are marked attr(unused).
1328void Sema::DiagnoseUnusedDecl(const NamedDecl *D) {
1329  FixItHint Hint;
1330  if (!ShouldDiagnoseUnusedDecl(D))
1331    return;
1332
1333  GenerateFixForUnusedDecl(D, Context, Hint);
1334
1335  unsigned DiagID;
1336  if (isa<VarDecl>(D) && cast<VarDecl>(D)->isExceptionVariable())
1337    DiagID = diag::warn_unused_exception_param;
1338  else if (isa<LabelDecl>(D))
1339    DiagID = diag::warn_unused_label;
1340  else
1341    DiagID = diag::warn_unused_variable;
1342
1343  Diag(D->getLocation(), DiagID) << D->getDeclName() << Hint;
1344}
1345
1346static void CheckPoppedLabel(LabelDecl *L, Sema &S) {
1347  // Verify that we have no forward references left.  If so, there was a goto
1348  // or address of a label taken, but no definition of it.  Label fwd
1349  // definitions are indicated with a null substmt.
1350  if (L->getStmt() == 0)
1351    S.Diag(L->getLocation(), diag::err_undeclared_label_use) <<L->getDeclName();
1352}
1353
1354void Sema::ActOnPopScope(SourceLocation Loc, Scope *S) {
1355  if (S->decl_empty()) return;
1356  assert((S->getFlags() & (Scope::DeclScope | Scope::TemplateParamScope)) &&
1357         "Scope shouldn't contain decls!");
1358
1359  for (Scope::decl_iterator I = S->decl_begin(), E = S->decl_end();
1360       I != E; ++I) {
1361    Decl *TmpD = (*I);
1362    assert(TmpD && "This decl didn't get pushed??");
1363
1364    assert(isa<NamedDecl>(TmpD) && "Decl isn't NamedDecl?");
1365    NamedDecl *D = cast<NamedDecl>(TmpD);
1366
1367    if (!D->getDeclName()) continue;
1368
1369    // Diagnose unused variables in this scope.
1370    if (!S->hasErrorOccurred())
1371      DiagnoseUnusedDecl(D);
1372
1373    // If this was a forward reference to a label, verify it was defined.
1374    if (LabelDecl *LD = dyn_cast<LabelDecl>(D))
1375      CheckPoppedLabel(LD, *this);
1376
1377    // Remove this name from our lexical scope.
1378    IdResolver.RemoveDecl(D);
1379  }
1380}
1381
1382void Sema::ActOnStartFunctionDeclarator() {
1383  ++InFunctionDeclarator;
1384}
1385
1386void Sema::ActOnEndFunctionDeclarator() {
1387  assert(InFunctionDeclarator);
1388  --InFunctionDeclarator;
1389}
1390
1391/// \brief Look for an Objective-C class in the translation unit.
1392///
1393/// \param Id The name of the Objective-C class we're looking for. If
1394/// typo-correction fixes this name, the Id will be updated
1395/// to the fixed name.
1396///
1397/// \param IdLoc The location of the name in the translation unit.
1398///
1399/// \param DoTypoCorrection If true, this routine will attempt typo correction
1400/// if there is no class with the given name.
1401///
1402/// \returns The declaration of the named Objective-C class, or NULL if the
1403/// class could not be found.
1404ObjCInterfaceDecl *Sema::getObjCInterfaceDecl(IdentifierInfo *&Id,
1405                                              SourceLocation IdLoc,
1406                                              bool DoTypoCorrection) {
1407  // The third "scope" argument is 0 since we aren't enabling lazy built-in
1408  // creation from this context.
1409  NamedDecl *IDecl = LookupSingleName(TUScope, Id, IdLoc, LookupOrdinaryName);
1410
1411  if (!IDecl && DoTypoCorrection) {
1412    // Perform typo correction at the given location, but only if we
1413    // find an Objective-C class name.
1414    DeclFilterCCC<ObjCInterfaceDecl> Validator;
1415    if (TypoCorrection C = CorrectTypo(DeclarationNameInfo(Id, IdLoc),
1416                                       LookupOrdinaryName, TUScope, NULL,
1417                                       Validator)) {
1418      IDecl = C.getCorrectionDeclAs<ObjCInterfaceDecl>();
1419      Diag(IdLoc, diag::err_undef_interface_suggest)
1420        << Id << IDecl->getDeclName()
1421        << FixItHint::CreateReplacement(IdLoc, IDecl->getNameAsString());
1422      Diag(IDecl->getLocation(), diag::note_previous_decl)
1423        << IDecl->getDeclName();
1424
1425      Id = IDecl->getIdentifier();
1426    }
1427  }
1428  ObjCInterfaceDecl *Def = dyn_cast_or_null<ObjCInterfaceDecl>(IDecl);
1429  // This routine must always return a class definition, if any.
1430  if (Def && Def->getDefinition())
1431      Def = Def->getDefinition();
1432  return Def;
1433}
1434
1435/// getNonFieldDeclScope - Retrieves the innermost scope, starting
1436/// from S, where a non-field would be declared. This routine copes
1437/// with the difference between C and C++ scoping rules in structs and
1438/// unions. For example, the following code is well-formed in C but
1439/// ill-formed in C++:
1440/// @code
1441/// struct S6 {
1442///   enum { BAR } e;
1443/// };
1444///
1445/// void test_S6() {
1446///   struct S6 a;
1447///   a.e = BAR;
1448/// }
1449/// @endcode
1450/// For the declaration of BAR, this routine will return a different
1451/// scope. The scope S will be the scope of the unnamed enumeration
1452/// within S6. In C++, this routine will return the scope associated
1453/// with S6, because the enumeration's scope is a transparent
1454/// context but structures can contain non-field names. In C, this
1455/// routine will return the translation unit scope, since the
1456/// enumeration's scope is a transparent context and structures cannot
1457/// contain non-field names.
1458Scope *Sema::getNonFieldDeclScope(Scope *S) {
1459  while (((S->getFlags() & Scope::DeclScope) == 0) ||
1460         (S->getEntity() &&
1461          ((DeclContext *)S->getEntity())->isTransparentContext()) ||
1462         (S->isClassScope() && !getLangOpts().CPlusPlus))
1463    S = S->getParent();
1464  return S;
1465}
1466
1467/// \brief Looks up the declaration of "struct objc_super" and
1468/// saves it for later use in building builtin declaration of
1469/// objc_msgSendSuper and objc_msgSendSuper_stret. If no such
1470/// pre-existing declaration exists no action takes place.
1471static void LookupPredefedObjCSuperType(Sema &ThisSema, Scope *S,
1472                                        IdentifierInfo *II) {
1473  if (!II->isStr("objc_msgSendSuper"))
1474    return;
1475  ASTContext &Context = ThisSema.Context;
1476
1477  LookupResult Result(ThisSema, &Context.Idents.get("objc_super"),
1478                      SourceLocation(), Sema::LookupTagName);
1479  ThisSema.LookupName(Result, S);
1480  if (Result.getResultKind() == LookupResult::Found)
1481    if (const TagDecl *TD = Result.getAsSingle<TagDecl>())
1482      Context.setObjCSuperType(Context.getTagDeclType(TD));
1483}
1484
1485/// LazilyCreateBuiltin - The specified Builtin-ID was first used at
1486/// file scope.  lazily create a decl for it. ForRedeclaration is true
1487/// if we're creating this built-in in anticipation of redeclaring the
1488/// built-in.
1489NamedDecl *Sema::LazilyCreateBuiltin(IdentifierInfo *II, unsigned bid,
1490                                     Scope *S, bool ForRedeclaration,
1491                                     SourceLocation Loc) {
1492  LookupPredefedObjCSuperType(*this, S, II);
1493
1494  Builtin::ID BID = (Builtin::ID)bid;
1495
1496  ASTContext::GetBuiltinTypeError Error;
1497  QualType R = Context.GetBuiltinType(BID, Error);
1498  switch (Error) {
1499  case ASTContext::GE_None:
1500    // Okay
1501    break;
1502
1503  case ASTContext::GE_Missing_stdio:
1504    if (ForRedeclaration)
1505      Diag(Loc, diag::warn_implicit_decl_requires_stdio)
1506        << Context.BuiltinInfo.GetName(BID);
1507    return 0;
1508
1509  case ASTContext::GE_Missing_setjmp:
1510    if (ForRedeclaration)
1511      Diag(Loc, diag::warn_implicit_decl_requires_setjmp)
1512        << Context.BuiltinInfo.GetName(BID);
1513    return 0;
1514
1515  case ASTContext::GE_Missing_ucontext:
1516    if (ForRedeclaration)
1517      Diag(Loc, diag::warn_implicit_decl_requires_ucontext)
1518        << Context.BuiltinInfo.GetName(BID);
1519    return 0;
1520  }
1521
1522  if (!ForRedeclaration && Context.BuiltinInfo.isPredefinedLibFunction(BID)) {
1523    Diag(Loc, diag::ext_implicit_lib_function_decl)
1524      << Context.BuiltinInfo.GetName(BID)
1525      << R;
1526    if (Context.BuiltinInfo.getHeaderName(BID) &&
1527        Diags.getDiagnosticLevel(diag::ext_implicit_lib_function_decl, Loc)
1528          != DiagnosticsEngine::Ignored)
1529      Diag(Loc, diag::note_please_include_header)
1530        << Context.BuiltinInfo.getHeaderName(BID)
1531        << Context.BuiltinInfo.GetName(BID);
1532  }
1533
1534  FunctionDecl *New = FunctionDecl::Create(Context,
1535                                           Context.getTranslationUnitDecl(),
1536                                           Loc, Loc, II, R, /*TInfo=*/0,
1537                                           SC_Extern,
1538                                           SC_None, false,
1539                                           /*hasPrototype=*/true);
1540  New->setImplicit();
1541
1542  // Create Decl objects for each parameter, adding them to the
1543  // FunctionDecl.
1544  if (const FunctionProtoType *FT = dyn_cast<FunctionProtoType>(R)) {
1545    SmallVector<ParmVarDecl*, 16> Params;
1546    for (unsigned i = 0, e = FT->getNumArgs(); i != e; ++i) {
1547      ParmVarDecl *parm =
1548        ParmVarDecl::Create(Context, New, SourceLocation(),
1549                            SourceLocation(), 0,
1550                            FT->getArgType(i), /*TInfo=*/0,
1551                            SC_None, SC_None, 0);
1552      parm->setScopeInfo(0, i);
1553      Params.push_back(parm);
1554    }
1555    New->setParams(Params);
1556  }
1557
1558  AddKnownFunctionAttributes(New);
1559
1560  // TUScope is the translation-unit scope to insert this function into.
1561  // FIXME: This is hideous. We need to teach PushOnScopeChains to
1562  // relate Scopes to DeclContexts, and probably eliminate CurContext
1563  // entirely, but we're not there yet.
1564  DeclContext *SavedContext = CurContext;
1565  CurContext = Context.getTranslationUnitDecl();
1566  PushOnScopeChains(New, TUScope);
1567  CurContext = SavedContext;
1568  return New;
1569}
1570
1571bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) {
1572  QualType OldType;
1573  if (TypedefNameDecl *OldTypedef = dyn_cast<TypedefNameDecl>(Old))
1574    OldType = OldTypedef->getUnderlyingType();
1575  else
1576    OldType = Context.getTypeDeclType(Old);
1577  QualType NewType = New->getUnderlyingType();
1578
1579  if (NewType->isVariablyModifiedType()) {
1580    // Must not redefine a typedef with a variably-modified type.
1581    int Kind = isa<TypeAliasDecl>(Old) ? 1 : 0;
1582    Diag(New->getLocation(), diag::err_redefinition_variably_modified_typedef)
1583      << Kind << NewType;
1584    if (Old->getLocation().isValid())
1585      Diag(Old->getLocation(), diag::note_previous_definition);
1586    New->setInvalidDecl();
1587    return true;
1588  }
1589
1590  if (OldType != NewType &&
1591      !OldType->isDependentType() &&
1592      !NewType->isDependentType() &&
1593      !Context.hasSameType(OldType, NewType)) {
1594    int Kind = isa<TypeAliasDecl>(Old) ? 1 : 0;
1595    Diag(New->getLocation(), diag::err_redefinition_different_typedef)
1596      << Kind << NewType << OldType;
1597    if (Old->getLocation().isValid())
1598      Diag(Old->getLocation(), diag::note_previous_definition);
1599    New->setInvalidDecl();
1600    return true;
1601  }
1602  return false;
1603}
1604
1605/// MergeTypedefNameDecl - We just parsed a typedef 'New' which has the
1606/// same name and scope as a previous declaration 'Old'.  Figure out
1607/// how to resolve this situation, merging decls or emitting
1608/// diagnostics as appropriate. If there was an error, set New to be invalid.
1609///
1610void Sema::MergeTypedefNameDecl(TypedefNameDecl *New, LookupResult &OldDecls) {
1611  // If the new decl is known invalid already, don't bother doing any
1612  // merging checks.
1613  if (New->isInvalidDecl()) return;
1614
1615  // Allow multiple definitions for ObjC built-in typedefs.
1616  // FIXME: Verify the underlying types are equivalent!
1617  if (getLangOpts().ObjC1) {
1618    const IdentifierInfo *TypeID = New->getIdentifier();
1619    switch (TypeID->getLength()) {
1620    default: break;
1621    case 2:
1622      {
1623        if (!TypeID->isStr("id"))
1624          break;
1625        QualType T = New->getUnderlyingType();
1626        if (!T->isPointerType())
1627          break;
1628        if (!T->isVoidPointerType()) {
1629          QualType PT = T->getAs<PointerType>()->getPointeeType();
1630          if (!PT->isStructureType())
1631            break;
1632        }
1633        Context.setObjCIdRedefinitionType(T);
1634        // Install the built-in type for 'id', ignoring the current definition.
1635        New->setTypeForDecl(Context.getObjCIdType().getTypePtr());
1636        return;
1637      }
1638    case 5:
1639      if (!TypeID->isStr("Class"))
1640        break;
1641      Context.setObjCClassRedefinitionType(New->getUnderlyingType());
1642      // Install the built-in type for 'Class', ignoring the current definition.
1643      New->setTypeForDecl(Context.getObjCClassType().getTypePtr());
1644      return;
1645    case 3:
1646      if (!TypeID->isStr("SEL"))
1647        break;
1648      Context.setObjCSelRedefinitionType(New->getUnderlyingType());
1649      // Install the built-in type for 'SEL', ignoring the current definition.
1650      New->setTypeForDecl(Context.getObjCSelType().getTypePtr());
1651      return;
1652    }
1653    // Fall through - the typedef name was not a builtin type.
1654  }
1655
1656  // Verify the old decl was also a type.
1657  TypeDecl *Old = OldDecls.getAsSingle<TypeDecl>();
1658  if (!Old) {
1659    Diag(New->getLocation(), diag::err_redefinition_different_kind)
1660      << New->getDeclName();
1661
1662    NamedDecl *OldD = OldDecls.getRepresentativeDecl();
1663    if (OldD->getLocation().isValid())
1664      Diag(OldD->getLocation(), diag::note_previous_definition);
1665
1666    return New->setInvalidDecl();
1667  }
1668
1669  // If the old declaration is invalid, just give up here.
1670  if (Old->isInvalidDecl())
1671    return New->setInvalidDecl();
1672
1673  // If the typedef types are not identical, reject them in all languages and
1674  // with any extensions enabled.
1675  if (isIncompatibleTypedef(Old, New))
1676    return;
1677
1678  // The types match.  Link up the redeclaration chain if the old
1679  // declaration was a typedef.
1680  if (TypedefNameDecl *Typedef = dyn_cast<TypedefNameDecl>(Old))
1681    New->setPreviousDeclaration(Typedef);
1682
1683  if (getLangOpts().MicrosoftExt)
1684    return;
1685
1686  if (getLangOpts().CPlusPlus) {
1687    // C++ [dcl.typedef]p2:
1688    //   In a given non-class scope, a typedef specifier can be used to
1689    //   redefine the name of any type declared in that scope to refer
1690    //   to the type to which it already refers.
1691    if (!isa<CXXRecordDecl>(CurContext))
1692      return;
1693
1694    // C++0x [dcl.typedef]p4:
1695    //   In a given class scope, a typedef specifier can be used to redefine
1696    //   any class-name declared in that scope that is not also a typedef-name
1697    //   to refer to the type to which it already refers.
1698    //
1699    // This wording came in via DR424, which was a correction to the
1700    // wording in DR56, which accidentally banned code like:
1701    //
1702    //   struct S {
1703    //     typedef struct A { } A;
1704    //   };
1705    //
1706    // in the C++03 standard. We implement the C++0x semantics, which
1707    // allow the above but disallow
1708    //
1709    //   struct S {
1710    //     typedef int I;
1711    //     typedef int I;
1712    //   };
1713    //
1714    // since that was the intent of DR56.
1715    if (!isa<TypedefNameDecl>(Old))
1716      return;
1717
1718    Diag(New->getLocation(), diag::err_redefinition)
1719      << New->getDeclName();
1720    Diag(Old->getLocation(), diag::note_previous_definition);
1721    return New->setInvalidDecl();
1722  }
1723
1724  // Modules always permit redefinition of typedefs, as does C11.
1725  if (getLangOpts().Modules || getLangOpts().C11)
1726    return;
1727
1728  // If we have a redefinition of a typedef in C, emit a warning.  This warning
1729  // is normally mapped to an error, but can be controlled with
1730  // -Wtypedef-redefinition.  If either the original or the redefinition is
1731  // in a system header, don't emit this for compatibility with GCC.
1732  if (getDiagnostics().getSuppressSystemWarnings() &&
1733      (Context.getSourceManager().isInSystemHeader(Old->getLocation()) ||
1734       Context.getSourceManager().isInSystemHeader(New->getLocation())))
1735    return;
1736
1737  Diag(New->getLocation(), diag::warn_redefinition_of_typedef)
1738    << New->getDeclName();
1739  Diag(Old->getLocation(), diag::note_previous_definition);
1740  return;
1741}
1742
1743/// DeclhasAttr - returns true if decl Declaration already has the target
1744/// attribute.
1745static bool
1746DeclHasAttr(const Decl *D, const Attr *A) {
1747  // There can be multiple AvailabilityAttr in a Decl. Make sure we copy
1748  // all of them. It is mergeAvailabilityAttr in SemaDeclAttr.cpp that is
1749  // responsible for making sure they are consistent.
1750  const AvailabilityAttr *AA = dyn_cast<AvailabilityAttr>(A);
1751  if (AA)
1752    return false;
1753
1754  // The following thread safety attributes can also be duplicated.
1755  switch (A->getKind()) {
1756    case attr::ExclusiveLocksRequired:
1757    case attr::SharedLocksRequired:
1758    case attr::LocksExcluded:
1759    case attr::ExclusiveLockFunction:
1760    case attr::SharedLockFunction:
1761    case attr::UnlockFunction:
1762    case attr::ExclusiveTrylockFunction:
1763    case attr::SharedTrylockFunction:
1764    case attr::GuardedBy:
1765    case attr::PtGuardedBy:
1766    case attr::AcquiredBefore:
1767    case attr::AcquiredAfter:
1768      return false;
1769    default:
1770      ;
1771  }
1772
1773  const OwnershipAttr *OA = dyn_cast<OwnershipAttr>(A);
1774  const AnnotateAttr *Ann = dyn_cast<AnnotateAttr>(A);
1775  for (Decl::attr_iterator i = D->attr_begin(), e = D->attr_end(); i != e; ++i)
1776    if ((*i)->getKind() == A->getKind()) {
1777      if (Ann) {
1778        if (Ann->getAnnotation() == cast<AnnotateAttr>(*i)->getAnnotation())
1779          return true;
1780        continue;
1781      }
1782      // FIXME: Don't hardcode this check
1783      if (OA && isa<OwnershipAttr>(*i))
1784        return OA->getOwnKind() == cast<OwnershipAttr>(*i)->getOwnKind();
1785      return true;
1786    }
1787
1788  return false;
1789}
1790
1791bool Sema::mergeDeclAttribute(Decl *D, InheritableAttr *Attr) {
1792  InheritableAttr *NewAttr = NULL;
1793  if (AvailabilityAttr *AA = dyn_cast<AvailabilityAttr>(Attr)) {
1794    NewAttr = mergeAvailabilityAttr(D, AA->getRange(), AA->getPlatform(),
1795                                    AA->getIntroduced(), AA->getDeprecated(),
1796                                    AA->getObsoleted(), AA->getUnavailable(),
1797                                    AA->getMessage());
1798    if (NewAttr) {
1799      NamedDecl *ND = cast<NamedDecl>(D);
1800      ND->ClearLVCache();
1801    }
1802  } else if (VisibilityAttr *VA = dyn_cast<VisibilityAttr>(Attr)) {
1803    NewAttr = mergeVisibilityAttr(D, VA->getRange(), VA->getVisibility());
1804    if (NewAttr) {
1805      NamedDecl *ND = cast<NamedDecl>(D);
1806      ND->ClearLVCache();
1807    }
1808  } else if (DLLImportAttr *ImportA = dyn_cast<DLLImportAttr>(Attr))
1809    NewAttr = mergeDLLImportAttr(D, ImportA->getRange());
1810  else if (DLLExportAttr *ExportA = dyn_cast<DLLExportAttr>(Attr))
1811    NewAttr = mergeDLLExportAttr(D, ExportA->getRange());
1812  else if (FormatAttr *FA = dyn_cast<FormatAttr>(Attr))
1813    NewAttr = mergeFormatAttr(D, FA->getRange(), FA->getType(),
1814                              FA->getFormatIdx(), FA->getFirstArg());
1815  else if (SectionAttr *SA = dyn_cast<SectionAttr>(Attr))
1816    NewAttr = mergeSectionAttr(D, SA->getRange(), SA->getName());
1817  else if (!DeclHasAttr(D, Attr))
1818    NewAttr = cast<InheritableAttr>(Attr->clone(Context));
1819
1820  if (NewAttr) {
1821    NewAttr->setInherited(true);
1822    D->addAttr(NewAttr);
1823    return true;
1824  }
1825
1826  return false;
1827}
1828
1829static const Decl *getDefinition(const Decl *D) {
1830  if (const TagDecl *TD = dyn_cast<TagDecl>(D))
1831    return TD->getDefinition();
1832  if (const VarDecl *VD = dyn_cast<VarDecl>(D))
1833    return VD->getDefinition();
1834  if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
1835    const FunctionDecl* Def;
1836    if (FD->hasBody(Def))
1837      return Def;
1838  }
1839  return NULL;
1840}
1841
1842static bool hasAttribute(const Decl *D, attr::Kind Kind) {
1843  for (Decl::attr_iterator I = D->attr_begin(), E = D->attr_end();
1844       I != E; ++I) {
1845    Attr *Attribute = *I;
1846    if (Attribute->getKind() == Kind)
1847      return true;
1848  }
1849  return false;
1850}
1851
1852/// checkNewAttributesAfterDef - If we already have a definition, check that
1853/// there are no new attributes in this declaration.
1854static void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) {
1855  if (!New->hasAttrs())
1856    return;
1857
1858  const Decl *Def = getDefinition(Old);
1859  if (!Def || Def == New)
1860    return;
1861
1862  AttrVec &NewAttributes = New->getAttrs();
1863  for (unsigned I = 0, E = NewAttributes.size(); I != E;) {
1864    const Attr *NewAttribute = NewAttributes[I];
1865    if (hasAttribute(Def, NewAttribute->getKind())) {
1866      ++I;
1867      continue; // regular attr merging will take care of validating this.
1868    }
1869    S.Diag(NewAttribute->getLocation(),
1870           diag::warn_attribute_precede_definition);
1871    S.Diag(Def->getLocation(), diag::note_previous_definition);
1872    NewAttributes.erase(NewAttributes.begin() + I);
1873    --E;
1874  }
1875}
1876
1877/// mergeDeclAttributes - Copy attributes from the Old decl to the New one.
1878void Sema::mergeDeclAttributes(Decl *New, Decl *Old,
1879                               bool MergeDeprecation) {
1880  // attributes declared post-definition are currently ignored
1881  checkNewAttributesAfterDef(*this, New, Old);
1882
1883  if (!Old->hasAttrs())
1884    return;
1885
1886  bool foundAny = New->hasAttrs();
1887
1888  // Ensure that any moving of objects within the allocated map is done before
1889  // we process them.
1890  if (!foundAny) New->setAttrs(AttrVec());
1891
1892  for (specific_attr_iterator<InheritableAttr>
1893         i = Old->specific_attr_begin<InheritableAttr>(),
1894         e = Old->specific_attr_end<InheritableAttr>();
1895       i != e; ++i) {
1896    // Ignore deprecated/unavailable/availability attributes if requested.
1897    if (!MergeDeprecation &&
1898        (isa<DeprecatedAttr>(*i) ||
1899         isa<UnavailableAttr>(*i) ||
1900         isa<AvailabilityAttr>(*i)))
1901      continue;
1902
1903    if (mergeDeclAttribute(New, *i))
1904      foundAny = true;
1905  }
1906
1907  if (!foundAny) New->dropAttrs();
1908}
1909
1910/// mergeParamDeclAttributes - Copy attributes from the old parameter
1911/// to the new one.
1912static void mergeParamDeclAttributes(ParmVarDecl *newDecl,
1913                                     const ParmVarDecl *oldDecl,
1914                                     ASTContext &C) {
1915  if (!oldDecl->hasAttrs())
1916    return;
1917
1918  bool foundAny = newDecl->hasAttrs();
1919
1920  // Ensure that any moving of objects within the allocated map is
1921  // done before we process them.
1922  if (!foundAny) newDecl->setAttrs(AttrVec());
1923
1924  for (specific_attr_iterator<InheritableParamAttr>
1925       i = oldDecl->specific_attr_begin<InheritableParamAttr>(),
1926       e = oldDecl->specific_attr_end<InheritableParamAttr>(); i != e; ++i) {
1927    if (!DeclHasAttr(newDecl, *i)) {
1928      InheritableAttr *newAttr = cast<InheritableParamAttr>((*i)->clone(C));
1929      newAttr->setInherited(true);
1930      newDecl->addAttr(newAttr);
1931      foundAny = true;
1932    }
1933  }
1934
1935  if (!foundAny) newDecl->dropAttrs();
1936}
1937
1938namespace {
1939
1940/// Used in MergeFunctionDecl to keep track of function parameters in
1941/// C.
1942struct GNUCompatibleParamWarning {
1943  ParmVarDecl *OldParm;
1944  ParmVarDecl *NewParm;
1945  QualType PromotedType;
1946};
1947
1948}
1949
1950/// getSpecialMember - get the special member enum for a method.
1951Sema::CXXSpecialMember Sema::getSpecialMember(const CXXMethodDecl *MD) {
1952  if (const CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(MD)) {
1953    if (Ctor->isDefaultConstructor())
1954      return Sema::CXXDefaultConstructor;
1955
1956    if (Ctor->isCopyConstructor())
1957      return Sema::CXXCopyConstructor;
1958
1959    if (Ctor->isMoveConstructor())
1960      return Sema::CXXMoveConstructor;
1961  } else if (isa<CXXDestructorDecl>(MD)) {
1962    return Sema::CXXDestructor;
1963  } else if (MD->isCopyAssignmentOperator()) {
1964    return Sema::CXXCopyAssignment;
1965  } else if (MD->isMoveAssignmentOperator()) {
1966    return Sema::CXXMoveAssignment;
1967  }
1968
1969  return Sema::CXXInvalid;
1970}
1971
1972/// canRedefineFunction - checks if a function can be redefined. Currently,
1973/// only extern inline functions can be redefined, and even then only in
1974/// GNU89 mode.
1975static bool canRedefineFunction(const FunctionDecl *FD,
1976                                const LangOptions& LangOpts) {
1977  return ((FD->hasAttr<GNUInlineAttr>() || LangOpts.GNUInline) &&
1978          !LangOpts.CPlusPlus &&
1979          FD->isInlineSpecified() &&
1980          FD->getStorageClass() == SC_Extern);
1981}
1982
1983/// Is the given calling convention the ABI default for the given
1984/// declaration?
1985static bool isABIDefaultCC(Sema &S, CallingConv CC, FunctionDecl *D) {
1986  CallingConv ABIDefaultCC;
1987  if (isa<CXXMethodDecl>(D) && cast<CXXMethodDecl>(D)->isInstance()) {
1988    ABIDefaultCC = S.Context.getDefaultCXXMethodCallConv(D->isVariadic());
1989  } else {
1990    // Free C function or a static method.
1991    ABIDefaultCC = (S.Context.getLangOpts().MRTD ? CC_X86StdCall : CC_C);
1992  }
1993  return ABIDefaultCC == CC;
1994}
1995
1996/// MergeFunctionDecl - We just parsed a function 'New' from
1997/// declarator D which has the same name and scope as a previous
1998/// declaration 'Old'.  Figure out how to resolve this situation,
1999/// merging decls or emitting diagnostics as appropriate.
2000///
2001/// In C++, New and Old must be declarations that are not
2002/// overloaded. Use IsOverload to determine whether New and Old are
2003/// overloaded, and to select the Old declaration that New should be
2004/// merged with.
2005///
2006/// Returns true if there was an error, false otherwise.
2007bool Sema::MergeFunctionDecl(FunctionDecl *New, Decl *OldD, Scope *S) {
2008  // Verify the old decl was also a function.
2009  FunctionDecl *Old = 0;
2010  if (FunctionTemplateDecl *OldFunctionTemplate
2011        = dyn_cast<FunctionTemplateDecl>(OldD))
2012    Old = OldFunctionTemplate->getTemplatedDecl();
2013  else
2014    Old = dyn_cast<FunctionDecl>(OldD);
2015  if (!Old) {
2016    if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) {
2017      Diag(New->getLocation(), diag::err_using_decl_conflict_reverse);
2018      Diag(Shadow->getTargetDecl()->getLocation(),
2019           diag::note_using_decl_target);
2020      Diag(Shadow->getUsingDecl()->getLocation(),
2021           diag::note_using_decl) << 0;
2022      return true;
2023    }
2024
2025    Diag(New->getLocation(), diag::err_redefinition_different_kind)
2026      << New->getDeclName();
2027    Diag(OldD->getLocation(), diag::note_previous_definition);
2028    return true;
2029  }
2030
2031  // Determine whether the previous declaration was a definition,
2032  // implicit declaration, or a declaration.
2033  diag::kind PrevDiag;
2034  if (Old->isThisDeclarationADefinition())
2035    PrevDiag = diag::note_previous_definition;
2036  else if (Old->isImplicit())
2037    PrevDiag = diag::note_previous_implicit_declaration;
2038  else
2039    PrevDiag = diag::note_previous_declaration;
2040
2041  QualType OldQType = Context.getCanonicalType(Old->getType());
2042  QualType NewQType = Context.getCanonicalType(New->getType());
2043
2044  // Don't complain about this if we're in GNU89 mode and the old function
2045  // is an extern inline function.
2046  if (!isa<CXXMethodDecl>(New) && !isa<CXXMethodDecl>(Old) &&
2047      New->getStorageClass() == SC_Static &&
2048      Old->getStorageClass() != SC_Static &&
2049      !canRedefineFunction(Old, getLangOpts())) {
2050    if (getLangOpts().MicrosoftExt) {
2051      Diag(New->getLocation(), diag::warn_static_non_static) << New;
2052      Diag(Old->getLocation(), PrevDiag);
2053    } else {
2054      Diag(New->getLocation(), diag::err_static_non_static) << New;
2055      Diag(Old->getLocation(), PrevDiag);
2056      return true;
2057    }
2058  }
2059
2060  // If a function is first declared with a calling convention, but is
2061  // later declared or defined without one, the second decl assumes the
2062  // calling convention of the first.
2063  //
2064  // It's OK if a function is first declared without a calling convention,
2065  // but is later declared or defined with the default calling convention.
2066  //
2067  // For the new decl, we have to look at the NON-canonical type to tell the
2068  // difference between a function that really doesn't have a calling
2069  // convention and one that is declared cdecl. That's because in
2070  // canonicalization (see ASTContext.cpp), cdecl is canonicalized away
2071  // because it is the default calling convention.
2072  //
2073  // Note also that we DO NOT return at this point, because we still have
2074  // other tests to run.
2075  const FunctionType *OldType = cast<FunctionType>(OldQType);
2076  const FunctionType *NewType = New->getType()->getAs<FunctionType>();
2077  FunctionType::ExtInfo OldTypeInfo = OldType->getExtInfo();
2078  FunctionType::ExtInfo NewTypeInfo = NewType->getExtInfo();
2079  bool RequiresAdjustment = false;
2080  if (OldTypeInfo.getCC() == NewTypeInfo.getCC()) {
2081    // Fast path: nothing to do.
2082
2083  // Inherit the CC from the previous declaration if it was specified
2084  // there but not here.
2085  } else if (NewTypeInfo.getCC() == CC_Default) {
2086    NewTypeInfo = NewTypeInfo.withCallingConv(OldTypeInfo.getCC());
2087    RequiresAdjustment = true;
2088
2089  // Don't complain about mismatches when the default CC is
2090  // effectively the same as the explict one.
2091  } else if (OldTypeInfo.getCC() == CC_Default &&
2092             isABIDefaultCC(*this, NewTypeInfo.getCC(), New)) {
2093    NewTypeInfo = NewTypeInfo.withCallingConv(OldTypeInfo.getCC());
2094    RequiresAdjustment = true;
2095
2096  } else if (!Context.isSameCallConv(OldTypeInfo.getCC(),
2097                                     NewTypeInfo.getCC())) {
2098    // Calling conventions really aren't compatible, so complain.
2099    Diag(New->getLocation(), diag::err_cconv_change)
2100      << FunctionType::getNameForCallConv(NewTypeInfo.getCC())
2101      << (OldTypeInfo.getCC() == CC_Default)
2102      << (OldTypeInfo.getCC() == CC_Default ? "" :
2103          FunctionType::getNameForCallConv(OldTypeInfo.getCC()));
2104    Diag(Old->getLocation(), diag::note_previous_declaration);
2105    return true;
2106  }
2107
2108  // FIXME: diagnose the other way around?
2109  if (OldTypeInfo.getNoReturn() && !NewTypeInfo.getNoReturn()) {
2110    NewTypeInfo = NewTypeInfo.withNoReturn(true);
2111    RequiresAdjustment = true;
2112  }
2113
2114  // Merge regparm attribute.
2115  if (OldTypeInfo.getHasRegParm() != NewTypeInfo.getHasRegParm() ||
2116      OldTypeInfo.getRegParm() != NewTypeInfo.getRegParm()) {
2117    if (NewTypeInfo.getHasRegParm()) {
2118      Diag(New->getLocation(), diag::err_regparm_mismatch)
2119        << NewType->getRegParmType()
2120        << OldType->getRegParmType();
2121      Diag(Old->getLocation(), diag::note_previous_declaration);
2122      return true;
2123    }
2124
2125    NewTypeInfo = NewTypeInfo.withRegParm(OldTypeInfo.getRegParm());
2126    RequiresAdjustment = true;
2127  }
2128
2129  // Merge ns_returns_retained attribute.
2130  if (OldTypeInfo.getProducesResult() != NewTypeInfo.getProducesResult()) {
2131    if (NewTypeInfo.getProducesResult()) {
2132      Diag(New->getLocation(), diag::err_returns_retained_mismatch);
2133      Diag(Old->getLocation(), diag::note_previous_declaration);
2134      return true;
2135    }
2136
2137    NewTypeInfo = NewTypeInfo.withProducesResult(true);
2138    RequiresAdjustment = true;
2139  }
2140
2141  if (RequiresAdjustment) {
2142    NewType = Context.adjustFunctionType(NewType, NewTypeInfo);
2143    New->setType(QualType(NewType, 0));
2144    NewQType = Context.getCanonicalType(New->getType());
2145  }
2146
2147  if (getLangOpts().CPlusPlus) {
2148    // (C++98 13.1p2):
2149    //   Certain function declarations cannot be overloaded:
2150    //     -- Function declarations that differ only in the return type
2151    //        cannot be overloaded.
2152    QualType OldReturnType = OldType->getResultType();
2153    QualType NewReturnType = cast<FunctionType>(NewQType)->getResultType();
2154    QualType ResQT;
2155    if (OldReturnType != NewReturnType) {
2156      if (NewReturnType->isObjCObjectPointerType()
2157          && OldReturnType->isObjCObjectPointerType())
2158        ResQT = Context.mergeObjCGCQualifiers(NewQType, OldQType);
2159      if (ResQT.isNull()) {
2160        if (New->isCXXClassMember() && New->isOutOfLine())
2161          Diag(New->getLocation(),
2162               diag::err_member_def_does_not_match_ret_type) << New;
2163        else
2164          Diag(New->getLocation(), diag::err_ovl_diff_return_type);
2165        Diag(Old->getLocation(), PrevDiag) << Old << Old->getType();
2166        return true;
2167      }
2168      else
2169        NewQType = ResQT;
2170    }
2171
2172    const CXXMethodDecl* OldMethod = dyn_cast<CXXMethodDecl>(Old);
2173    CXXMethodDecl* NewMethod = dyn_cast<CXXMethodDecl>(New);
2174    if (OldMethod && NewMethod) {
2175      // Preserve triviality.
2176      NewMethod->setTrivial(OldMethod->isTrivial());
2177
2178      // MSVC allows explicit template specialization at class scope:
2179      // 2 CXMethodDecls referring to the same function will be injected.
2180      // We don't want a redeclartion error.
2181      bool IsClassScopeExplicitSpecialization =
2182                              OldMethod->isFunctionTemplateSpecialization() &&
2183                              NewMethod->isFunctionTemplateSpecialization();
2184      bool isFriend = NewMethod->getFriendObjectKind();
2185
2186      if (!isFriend && NewMethod->getLexicalDeclContext()->isRecord() &&
2187          !IsClassScopeExplicitSpecialization) {
2188        //    -- Member function declarations with the same name and the
2189        //       same parameter types cannot be overloaded if any of them
2190        //       is a static member function declaration.
2191        if (OldMethod->isStatic() || NewMethod->isStatic()) {
2192          Diag(New->getLocation(), diag::err_ovl_static_nonstatic_member);
2193          Diag(Old->getLocation(), PrevDiag) << Old << Old->getType();
2194          return true;
2195        }
2196
2197        // C++ [class.mem]p1:
2198        //   [...] A member shall not be declared twice in the
2199        //   member-specification, except that a nested class or member
2200        //   class template can be declared and then later defined.
2201        if (ActiveTemplateInstantiations.empty()) {
2202          unsigned NewDiag;
2203          if (isa<CXXConstructorDecl>(OldMethod))
2204            NewDiag = diag::err_constructor_redeclared;
2205          else if (isa<CXXDestructorDecl>(NewMethod))
2206            NewDiag = diag::err_destructor_redeclared;
2207          else if (isa<CXXConversionDecl>(NewMethod))
2208            NewDiag = diag::err_conv_function_redeclared;
2209          else
2210            NewDiag = diag::err_member_redeclared;
2211
2212          Diag(New->getLocation(), NewDiag);
2213        } else {
2214          Diag(New->getLocation(), diag::err_member_redeclared_in_instantiation)
2215            << New << New->getType();
2216        }
2217        Diag(Old->getLocation(), PrevDiag) << Old << Old->getType();
2218
2219      // Complain if this is an explicit declaration of a special
2220      // member that was initially declared implicitly.
2221      //
2222      // As an exception, it's okay to befriend such methods in order
2223      // to permit the implicit constructor/destructor/operator calls.
2224      } else if (OldMethod->isImplicit()) {
2225        if (isFriend) {
2226          NewMethod->setImplicit();
2227        } else {
2228          Diag(NewMethod->getLocation(),
2229               diag::err_definition_of_implicitly_declared_member)
2230            << New << getSpecialMember(OldMethod);
2231          return true;
2232        }
2233      } else if (OldMethod->isExplicitlyDefaulted() && !isFriend) {
2234        Diag(NewMethod->getLocation(),
2235             diag::err_definition_of_explicitly_defaulted_member)
2236          << getSpecialMember(OldMethod);
2237        return true;
2238      }
2239    }
2240
2241    // (C++98 8.3.5p3):
2242    //   All declarations for a function shall agree exactly in both the
2243    //   return type and the parameter-type-list.
2244    // We also want to respect all the extended bits except noreturn.
2245
2246    // noreturn should now match unless the old type info didn't have it.
2247    QualType OldQTypeForComparison = OldQType;
2248    if (!OldTypeInfo.getNoReturn() && NewTypeInfo.getNoReturn()) {
2249      assert(OldQType == QualType(OldType, 0));
2250      const FunctionType *OldTypeForComparison
2251        = Context.adjustFunctionType(OldType, OldTypeInfo.withNoReturn(true));
2252      OldQTypeForComparison = QualType(OldTypeForComparison, 0);
2253      assert(OldQTypeForComparison.isCanonical());
2254    }
2255
2256    if (!Old->hasCLanguageLinkage() && New->hasCLanguageLinkage()) {
2257      Diag(New->getLocation(), diag::err_different_language_linkage) << New;
2258      Diag(Old->getLocation(), PrevDiag);
2259      return true;
2260    }
2261
2262    if (OldQTypeForComparison == NewQType)
2263      return MergeCompatibleFunctionDecls(New, Old, S);
2264
2265    // Fall through for conflicting redeclarations and redefinitions.
2266  }
2267
2268  // C: Function types need to be compatible, not identical. This handles
2269  // duplicate function decls like "void f(int); void f(enum X);" properly.
2270  if (!getLangOpts().CPlusPlus &&
2271      Context.typesAreCompatible(OldQType, NewQType)) {
2272    const FunctionType *OldFuncType = OldQType->getAs<FunctionType>();
2273    const FunctionType *NewFuncType = NewQType->getAs<FunctionType>();
2274    const FunctionProtoType *OldProto = 0;
2275    if (isa<FunctionNoProtoType>(NewFuncType) &&
2276        (OldProto = dyn_cast<FunctionProtoType>(OldFuncType))) {
2277      // The old declaration provided a function prototype, but the
2278      // new declaration does not. Merge in the prototype.
2279      assert(!OldProto->hasExceptionSpec() && "Exception spec in C");
2280      SmallVector<QualType, 16> ParamTypes(OldProto->arg_type_begin(),
2281                                                 OldProto->arg_type_end());
2282      NewQType = Context.getFunctionType(NewFuncType->getResultType(),
2283                                         ParamTypes.data(), ParamTypes.size(),
2284                                         OldProto->getExtProtoInfo());
2285      New->setType(NewQType);
2286      New->setHasInheritedPrototype();
2287
2288      // Synthesize a parameter for each argument type.
2289      SmallVector<ParmVarDecl*, 16> Params;
2290      for (FunctionProtoType::arg_type_iterator
2291             ParamType = OldProto->arg_type_begin(),
2292             ParamEnd = OldProto->arg_type_end();
2293           ParamType != ParamEnd; ++ParamType) {
2294        ParmVarDecl *Param = ParmVarDecl::Create(Context, New,
2295                                                 SourceLocation(),
2296                                                 SourceLocation(), 0,
2297                                                 *ParamType, /*TInfo=*/0,
2298                                                 SC_None, SC_None,
2299                                                 0);
2300        Param->setScopeInfo(0, Params.size());
2301        Param->setImplicit();
2302        Params.push_back(Param);
2303      }
2304
2305      New->setParams(Params);
2306    }
2307
2308    return MergeCompatibleFunctionDecls(New, Old, S);
2309  }
2310
2311  // GNU C permits a K&R definition to follow a prototype declaration
2312  // if the declared types of the parameters in the K&R definition
2313  // match the types in the prototype declaration, even when the
2314  // promoted types of the parameters from the K&R definition differ
2315  // from the types in the prototype. GCC then keeps the types from
2316  // the prototype.
2317  //
2318  // If a variadic prototype is followed by a non-variadic K&R definition,
2319  // the K&R definition becomes variadic.  This is sort of an edge case, but
2320  // it's legal per the standard depending on how you read C99 6.7.5.3p15 and
2321  // C99 6.9.1p8.
2322  if (!getLangOpts().CPlusPlus &&
2323      Old->hasPrototype() && !New->hasPrototype() &&
2324      New->getType()->getAs<FunctionProtoType>() &&
2325      Old->getNumParams() == New->getNumParams()) {
2326    SmallVector<QualType, 16> ArgTypes;
2327    SmallVector<GNUCompatibleParamWarning, 16> Warnings;
2328    const FunctionProtoType *OldProto
2329      = Old->getType()->getAs<FunctionProtoType>();
2330    const FunctionProtoType *NewProto
2331      = New->getType()->getAs<FunctionProtoType>();
2332
2333    // Determine whether this is the GNU C extension.
2334    QualType MergedReturn = Context.mergeTypes(OldProto->getResultType(),
2335                                               NewProto->getResultType());
2336    bool LooseCompatible = !MergedReturn.isNull();
2337    for (unsigned Idx = 0, End = Old->getNumParams();
2338         LooseCompatible && Idx != End; ++Idx) {
2339      ParmVarDecl *OldParm = Old->getParamDecl(Idx);
2340      ParmVarDecl *NewParm = New->getParamDecl(Idx);
2341      if (Context.typesAreCompatible(OldParm->getType(),
2342                                     NewProto->getArgType(Idx))) {
2343        ArgTypes.push_back(NewParm->getType());
2344      } else if (Context.typesAreCompatible(OldParm->getType(),
2345                                            NewParm->getType(),
2346                                            /*CompareUnqualified=*/true)) {
2347        GNUCompatibleParamWarning Warn
2348          = { OldParm, NewParm, NewProto->getArgType(Idx) };
2349        Warnings.push_back(Warn);
2350        ArgTypes.push_back(NewParm->getType());
2351      } else
2352        LooseCompatible = false;
2353    }
2354
2355    if (LooseCompatible) {
2356      for (unsigned Warn = 0; Warn < Warnings.size(); ++Warn) {
2357        Diag(Warnings[Warn].NewParm->getLocation(),
2358             diag::ext_param_promoted_not_compatible_with_prototype)
2359          << Warnings[Warn].PromotedType
2360          << Warnings[Warn].OldParm->getType();
2361        if (Warnings[Warn].OldParm->getLocation().isValid())
2362          Diag(Warnings[Warn].OldParm->getLocation(),
2363               diag::note_previous_declaration);
2364      }
2365
2366      New->setType(Context.getFunctionType(MergedReturn, &ArgTypes[0],
2367                                           ArgTypes.size(),
2368                                           OldProto->getExtProtoInfo()));
2369      return MergeCompatibleFunctionDecls(New, Old, S);
2370    }
2371
2372    // Fall through to diagnose conflicting types.
2373  }
2374
2375  // A function that has already been declared has been redeclared or defined
2376  // with a different type- show appropriate diagnostic
2377  if (unsigned BuiltinID = Old->getBuiltinID()) {
2378    // The user has declared a builtin function with an incompatible
2379    // signature.
2380    if (Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID)) {
2381      // The function the user is redeclaring is a library-defined
2382      // function like 'malloc' or 'printf'. Warn about the
2383      // redeclaration, then pretend that we don't know about this
2384      // library built-in.
2385      Diag(New->getLocation(), diag::warn_redecl_library_builtin) << New;
2386      Diag(Old->getLocation(), diag::note_previous_builtin_declaration)
2387        << Old << Old->getType();
2388      New->getIdentifier()->setBuiltinID(Builtin::NotBuiltin);
2389      Old->setInvalidDecl();
2390      return false;
2391    }
2392
2393    PrevDiag = diag::note_previous_builtin_declaration;
2394  }
2395
2396  Diag(New->getLocation(), diag::err_conflicting_types) << New->getDeclName();
2397  Diag(Old->getLocation(), PrevDiag) << Old << Old->getType();
2398  return true;
2399}
2400
2401/// \brief Completes the merge of two function declarations that are
2402/// known to be compatible.
2403///
2404/// This routine handles the merging of attributes and other
2405/// properties of function declarations form the old declaration to
2406/// the new declaration, once we know that New is in fact a
2407/// redeclaration of Old.
2408///
2409/// \returns false
2410bool Sema::MergeCompatibleFunctionDecls(FunctionDecl *New, FunctionDecl *Old,
2411                                        Scope *S) {
2412  // Merge the attributes
2413  mergeDeclAttributes(New, Old);
2414
2415  // Merge the storage class.
2416  if (Old->getStorageClass() != SC_Extern &&
2417      Old->getStorageClass() != SC_None)
2418    New->setStorageClass(Old->getStorageClass());
2419
2420  // Merge "pure" flag.
2421  if (Old->isPure())
2422    New->setPure();
2423
2424  // Merge "used" flag.
2425  if (Old->isUsed(false))
2426    New->setUsed();
2427
2428  // Merge attributes from the parameters.  These can mismatch with K&R
2429  // declarations.
2430  if (New->getNumParams() == Old->getNumParams())
2431    for (unsigned i = 0, e = New->getNumParams(); i != e; ++i)
2432      mergeParamDeclAttributes(New->getParamDecl(i), Old->getParamDecl(i),
2433                               Context);
2434
2435  if (getLangOpts().CPlusPlus)
2436    return MergeCXXFunctionDecl(New, Old, S);
2437
2438  // Merge the function types so the we get the composite types for the return
2439  // and argument types.
2440  QualType Merged = Context.mergeTypes(Old->getType(), New->getType());
2441  if (!Merged.isNull())
2442    New->setType(Merged);
2443
2444  return false;
2445}
2446
2447
2448void Sema::mergeObjCMethodDecls(ObjCMethodDecl *newMethod,
2449                                ObjCMethodDecl *oldMethod) {
2450
2451  // Merge the attributes, including deprecated/unavailable
2452  mergeDeclAttributes(newMethod, oldMethod, /* mergeDeprecation */true);
2453
2454  // Merge attributes from the parameters.
2455  ObjCMethodDecl::param_const_iterator oi = oldMethod->param_begin(),
2456                                       oe = oldMethod->param_end();
2457  for (ObjCMethodDecl::param_iterator
2458         ni = newMethod->param_begin(), ne = newMethod->param_end();
2459       ni != ne && oi != oe; ++ni, ++oi)
2460    mergeParamDeclAttributes(*ni, *oi, Context);
2461
2462  CheckObjCMethodOverride(newMethod, oldMethod, true);
2463}
2464
2465/// MergeVarDeclTypes - We parsed a variable 'New' which has the same name and
2466/// scope as a previous declaration 'Old'.  Figure out how to merge their types,
2467/// emitting diagnostics as appropriate.
2468///
2469/// Declarations using the auto type specifier (C++ [decl.spec.auto]) call back
2470/// to here in AddInitializerToDecl. We can't check them before the initializer
2471/// is attached.
2472void Sema::MergeVarDeclTypes(VarDecl *New, VarDecl *Old) {
2473  if (New->isInvalidDecl() || Old->isInvalidDecl())
2474    return;
2475
2476  QualType MergedT;
2477  if (getLangOpts().CPlusPlus) {
2478    AutoType *AT = New->getType()->getContainedAutoType();
2479    if (AT && !AT->isDeduced()) {
2480      // We don't know what the new type is until the initializer is attached.
2481      return;
2482    } else if (Context.hasSameType(New->getType(), Old->getType())) {
2483      // These could still be something that needs exception specs checked.
2484      return MergeVarDeclExceptionSpecs(New, Old);
2485    }
2486    // C++ [basic.link]p10:
2487    //   [...] the types specified by all declarations referring to a given
2488    //   object or function shall be identical, except that declarations for an
2489    //   array object can specify array types that differ by the presence or
2490    //   absence of a major array bound (8.3.4).
2491    else if (Old->getType()->isIncompleteArrayType() &&
2492             New->getType()->isArrayType()) {
2493      const ArrayType *OldArray = Context.getAsArrayType(Old->getType());
2494      const ArrayType *NewArray = Context.getAsArrayType(New->getType());
2495      if (Context.hasSameType(OldArray->getElementType(),
2496                              NewArray->getElementType()))
2497        MergedT = New->getType();
2498    } else if (Old->getType()->isArrayType() &&
2499             New->getType()->isIncompleteArrayType()) {
2500      const ArrayType *OldArray = Context.getAsArrayType(Old->getType());
2501      const ArrayType *NewArray = Context.getAsArrayType(New->getType());
2502      if (Context.hasSameType(OldArray->getElementType(),
2503                              NewArray->getElementType()))
2504        MergedT = Old->getType();
2505    } else if (New->getType()->isObjCObjectPointerType()
2506               && Old->getType()->isObjCObjectPointerType()) {
2507        MergedT = Context.mergeObjCGCQualifiers(New->getType(),
2508                                                        Old->getType());
2509    }
2510  } else {
2511    MergedT = Context.mergeTypes(New->getType(), Old->getType());
2512  }
2513  if (MergedT.isNull()) {
2514    Diag(New->getLocation(), diag::err_redefinition_different_type)
2515      << New->getDeclName() << New->getType() << Old->getType();
2516    Diag(Old->getLocation(), diag::note_previous_definition);
2517    return New->setInvalidDecl();
2518  }
2519  New->setType(MergedT);
2520}
2521
2522/// MergeVarDecl - We just parsed a variable 'New' which has the same name
2523/// and scope as a previous declaration 'Old'.  Figure out how to resolve this
2524/// situation, merging decls or emitting diagnostics as appropriate.
2525///
2526/// Tentative definition rules (C99 6.9.2p2) are checked by
2527/// FinalizeDeclaratorGroup. Unfortunately, we can't analyze tentative
2528/// definitions here, since the initializer hasn't been attached.
2529///
2530void Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {
2531  // If the new decl is already invalid, don't do any other checking.
2532  if (New->isInvalidDecl())
2533    return;
2534
2535  // Verify the old decl was also a variable.
2536  VarDecl *Old = 0;
2537  if (!Previous.isSingleResult() ||
2538      !(Old = dyn_cast<VarDecl>(Previous.getFoundDecl()))) {
2539    Diag(New->getLocation(), diag::err_redefinition_different_kind)
2540      << New->getDeclName();
2541    Diag(Previous.getRepresentativeDecl()->getLocation(),
2542         diag::note_previous_definition);
2543    return New->setInvalidDecl();
2544  }
2545
2546  // C++ [class.mem]p1:
2547  //   A member shall not be declared twice in the member-specification [...]
2548  //
2549  // Here, we need only consider static data members.
2550  if (Old->isStaticDataMember() && !New->isOutOfLine()) {
2551    Diag(New->getLocation(), diag::err_duplicate_member)
2552      << New->getIdentifier();
2553    Diag(Old->getLocation(), diag::note_previous_declaration);
2554    New->setInvalidDecl();
2555  }
2556
2557  mergeDeclAttributes(New, Old);
2558  // Warn if an already-declared variable is made a weak_import in a subsequent
2559  // declaration
2560  if (New->getAttr<WeakImportAttr>() &&
2561      Old->getStorageClass() == SC_None &&
2562      !Old->getAttr<WeakImportAttr>()) {
2563    Diag(New->getLocation(), diag::warn_weak_import) << New->getDeclName();
2564    Diag(Old->getLocation(), diag::note_previous_definition);
2565    // Remove weak_import attribute on new declaration.
2566    New->dropAttr<WeakImportAttr>();
2567  }
2568
2569  // Merge the types.
2570  MergeVarDeclTypes(New, Old);
2571  if (New->isInvalidDecl())
2572    return;
2573
2574  // C99 6.2.2p4: Check if we have a static decl followed by a non-static.
2575  if (New->getStorageClass() == SC_Static &&
2576      (Old->getStorageClass() == SC_None || Old->hasExternalStorage())) {
2577    Diag(New->getLocation(), diag::err_static_non_static) << New->getDeclName();
2578    Diag(Old->getLocation(), diag::note_previous_definition);
2579    return New->setInvalidDecl();
2580  }
2581  // C99 6.2.2p4:
2582  //   For an identifier declared with the storage-class specifier
2583  //   extern in a scope in which a prior declaration of that
2584  //   identifier is visible,23) if the prior declaration specifies
2585  //   internal or external linkage, the linkage of the identifier at
2586  //   the later declaration is the same as the linkage specified at
2587  //   the prior declaration. If no prior declaration is visible, or
2588  //   if the prior declaration specifies no linkage, then the
2589  //   identifier has external linkage.
2590  if (New->hasExternalStorage() && Old->hasLinkage())
2591    /* Okay */;
2592  else if (New->getStorageClass() != SC_Static &&
2593           Old->getStorageClass() == SC_Static) {
2594    Diag(New->getLocation(), diag::err_non_static_static) << New->getDeclName();
2595    Diag(Old->getLocation(), diag::note_previous_definition);
2596    return New->setInvalidDecl();
2597  }
2598
2599  // Check if extern is followed by non-extern and vice-versa.
2600  if (New->hasExternalStorage() &&
2601      !Old->hasLinkage() && Old->isLocalVarDecl()) {
2602    Diag(New->getLocation(), diag::err_extern_non_extern) << New->getDeclName();
2603    Diag(Old->getLocation(), diag::note_previous_definition);
2604    return New->setInvalidDecl();
2605  }
2606  if (Old->hasExternalStorage() &&
2607      !New->hasLinkage() && New->isLocalVarDecl()) {
2608    Diag(New->getLocation(), diag::err_non_extern_extern) << New->getDeclName();
2609    Diag(Old->getLocation(), diag::note_previous_definition);
2610    return New->setInvalidDecl();
2611  }
2612
2613  // Variables with external linkage are analyzed in FinalizeDeclaratorGroup.
2614
2615  // FIXME: The test for external storage here seems wrong? We still
2616  // need to check for mismatches.
2617  if (!New->hasExternalStorage() && !New->isFileVarDecl() &&
2618      // Don't complain about out-of-line definitions of static members.
2619      !(Old->getLexicalDeclContext()->isRecord() &&
2620        !New->getLexicalDeclContext()->isRecord())) {
2621    Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName();
2622    Diag(Old->getLocation(), diag::note_previous_definition);
2623    return New->setInvalidDecl();
2624  }
2625
2626  if (New->isThreadSpecified() && !Old->isThreadSpecified()) {
2627    Diag(New->getLocation(), diag::err_thread_non_thread) << New->getDeclName();
2628    Diag(Old->getLocation(), diag::note_previous_definition);
2629  } else if (!New->isThreadSpecified() && Old->isThreadSpecified()) {
2630    Diag(New->getLocation(), diag::err_non_thread_thread) << New->getDeclName();
2631    Diag(Old->getLocation(), diag::note_previous_definition);
2632  }
2633
2634  // C++ doesn't have tentative definitions, so go right ahead and check here.
2635  const VarDecl *Def;
2636  if (getLangOpts().CPlusPlus &&
2637      New->isThisDeclarationADefinition() == VarDecl::Definition &&
2638      (Def = Old->getDefinition())) {
2639    Diag(New->getLocation(), diag::err_redefinition)
2640      << New->getDeclName();
2641    Diag(Def->getLocation(), diag::note_previous_definition);
2642    New->setInvalidDecl();
2643    return;
2644  }
2645
2646  if (!Old->hasCLanguageLinkage() && New->hasCLanguageLinkage()) {
2647    Diag(New->getLocation(), diag::err_different_language_linkage) << New;
2648    Diag(Old->getLocation(), diag::note_previous_definition);
2649    New->setInvalidDecl();
2650    return;
2651  }
2652
2653  // c99 6.2.2 P4.
2654  // For an identifier declared with the storage-class specifier extern in a
2655  // scope in which a prior declaration of that identifier is visible, if
2656  // the prior declaration specifies internal or external linkage, the linkage
2657  // of the identifier at the later declaration is the same as the linkage
2658  // specified at the prior declaration.
2659  // FIXME. revisit this code.
2660  if (New->hasExternalStorage() &&
2661      Old->getLinkage() == InternalLinkage)
2662    New->setStorageClass(Old->getStorageClass());
2663
2664  // Merge "used" flag.
2665  if (Old->isUsed(false))
2666    New->setUsed();
2667
2668  // Keep a chain of previous declarations.
2669  New->setPreviousDeclaration(Old);
2670
2671  // Inherit access appropriately.
2672  New->setAccess(Old->getAccess());
2673}
2674
2675/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with
2676/// no declarator (e.g. "struct foo;") is parsed.
2677Decl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS,
2678                                       DeclSpec &DS) {
2679  return ParsedFreeStandingDeclSpec(S, AS, DS, MultiTemplateParamsArg());
2680}
2681
2682/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with
2683/// no declarator (e.g. "struct foo;") is parsed. It also accopts template
2684/// parameters to cope with template friend declarations.
2685Decl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS,
2686                                       DeclSpec &DS,
2687                                       MultiTemplateParamsArg TemplateParams) {
2688  Decl *TagD = 0;
2689  TagDecl *Tag = 0;
2690  if (DS.getTypeSpecType() == DeclSpec::TST_class ||
2691      DS.getTypeSpecType() == DeclSpec::TST_struct ||
2692      DS.getTypeSpecType() == DeclSpec::TST_interface ||
2693      DS.getTypeSpecType() == DeclSpec::TST_union ||
2694      DS.getTypeSpecType() == DeclSpec::TST_enum) {
2695    TagD = DS.getRepAsDecl();
2696
2697    if (!TagD) // We probably had an error
2698      return 0;
2699
2700    // Note that the above type specs guarantee that the
2701    // type rep is a Decl, whereas in many of the others
2702    // it's a Type.
2703    if (isa<TagDecl>(TagD))
2704      Tag = cast<TagDecl>(TagD);
2705    else if (ClassTemplateDecl *CTD = dyn_cast<ClassTemplateDecl>(TagD))
2706      Tag = CTD->getTemplatedDecl();
2707  }
2708
2709  if (Tag) {
2710    getASTContext().addUnnamedTag(Tag);
2711    Tag->setFreeStanding();
2712    if (Tag->isInvalidDecl())
2713      return Tag;
2714  }
2715
2716  if (unsigned TypeQuals = DS.getTypeQualifiers()) {
2717    // Enforce C99 6.7.3p2: "Types other than pointer types derived from object
2718    // or incomplete types shall not be restrict-qualified."
2719    if (TypeQuals & DeclSpec::TQ_restrict)
2720      Diag(DS.getRestrictSpecLoc(),
2721           diag::err_typecheck_invalid_restrict_not_pointer_noarg)
2722           << DS.getSourceRange();
2723  }
2724
2725  if (DS.isConstexprSpecified()) {
2726    // C++0x [dcl.constexpr]p1: constexpr can only be applied to declarations
2727    // and definitions of functions and variables.
2728    if (Tag)
2729      Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_tag)
2730        << (DS.getTypeSpecType() == DeclSpec::TST_class ? 0 :
2731            DS.getTypeSpecType() == DeclSpec::TST_struct ? 1 :
2732            DS.getTypeSpecType() == DeclSpec::TST_interface ? 2 :
2733            DS.getTypeSpecType() == DeclSpec::TST_union ? 3 : 4);
2734    else
2735      Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_no_declarators);
2736    // Don't emit warnings after this error.
2737    return TagD;
2738  }
2739
2740  if (DS.isFriendSpecified()) {
2741    // If we're dealing with a decl but not a TagDecl, assume that
2742    // whatever routines created it handled the friendship aspect.
2743    if (TagD && !Tag)
2744      return 0;
2745    return ActOnFriendTypeDecl(S, DS, TemplateParams);
2746  }
2747
2748  // Track whether we warned about the fact that there aren't any
2749  // declarators.
2750  bool emittedWarning = false;
2751
2752  if (RecordDecl *Record = dyn_cast_or_null<RecordDecl>(Tag)) {
2753    if (!Record->getDeclName() && Record->isCompleteDefinition() &&
2754        DS.getStorageClassSpec() != DeclSpec::SCS_typedef) {
2755      if (getLangOpts().CPlusPlus ||
2756          Record->getDeclContext()->isRecord())
2757        return BuildAnonymousStructOrUnion(S, DS, AS, Record);
2758
2759      Diag(DS.getLocStart(), diag::ext_no_declarators)
2760        << DS.getSourceRange();
2761      emittedWarning = true;
2762    }
2763  }
2764
2765  // Check for Microsoft C extension: anonymous struct.
2766  if (getLangOpts().MicrosoftExt && !getLangOpts().CPlusPlus &&
2767      CurContext->isRecord() &&
2768      DS.getStorageClassSpec() == DeclSpec::SCS_unspecified) {
2769    // Handle 2 kinds of anonymous struct:
2770    //   struct STRUCT;
2771    // and
2772    //   STRUCT_TYPE;  <- where STRUCT_TYPE is a typedef struct.
2773    RecordDecl *Record = dyn_cast_or_null<RecordDecl>(Tag);
2774    if ((Record && Record->getDeclName() && !Record->isCompleteDefinition()) ||
2775        (DS.getTypeSpecType() == DeclSpec::TST_typename &&
2776         DS.getRepAsType().get()->isStructureType())) {
2777      Diag(DS.getLocStart(), diag::ext_ms_anonymous_struct)
2778        << DS.getSourceRange();
2779      return BuildMicrosoftCAnonymousStruct(S, DS, Record);
2780    }
2781  }
2782
2783  if (getLangOpts().CPlusPlus &&
2784      DS.getStorageClassSpec() != DeclSpec::SCS_typedef)
2785    if (EnumDecl *Enum = dyn_cast_or_null<EnumDecl>(Tag))
2786      if (Enum->enumerator_begin() == Enum->enumerator_end() &&
2787          !Enum->getIdentifier() && !Enum->isInvalidDecl()) {
2788        Diag(Enum->getLocation(), diag::ext_no_declarators)
2789          << DS.getSourceRange();
2790        emittedWarning = true;
2791      }
2792
2793  // Skip all the checks below if we have a type error.
2794  if (DS.getTypeSpecType() == DeclSpec::TST_error) return TagD;
2795
2796  if (!DS.isMissingDeclaratorOk()) {
2797    // Warn about typedefs of enums without names, since this is an
2798    // extension in both Microsoft and GNU.
2799    if (DS.getStorageClassSpec() == DeclSpec::SCS_typedef &&
2800        Tag && isa<EnumDecl>(Tag)) {
2801      Diag(DS.getLocStart(), diag::ext_typedef_without_a_name)
2802        << DS.getSourceRange();
2803      return Tag;
2804    }
2805
2806    Diag(DS.getLocStart(), diag::ext_no_declarators)
2807      << DS.getSourceRange();
2808    emittedWarning = true;
2809  }
2810
2811  // We're going to complain about a bunch of spurious specifiers;
2812  // only do this if we're declaring a tag, because otherwise we
2813  // should be getting diag::ext_no_declarators.
2814  if (emittedWarning || (TagD && TagD->isInvalidDecl()))
2815    return TagD;
2816
2817  // Note that a linkage-specification sets a storage class, but
2818  // 'extern "C" struct foo;' is actually valid and not theoretically
2819  // useless.
2820  if (DeclSpec::SCS scs = DS.getStorageClassSpec())
2821    if (!DS.isExternInLinkageSpec())
2822      Diag(DS.getStorageClassSpecLoc(), diag::warn_standalone_specifier)
2823        << DeclSpec::getSpecifierName(scs);
2824
2825  if (DS.isThreadSpecified())
2826    Diag(DS.getThreadSpecLoc(), diag::warn_standalone_specifier) << "__thread";
2827  if (DS.getTypeQualifiers()) {
2828    if (DS.getTypeQualifiers() & DeclSpec::TQ_const)
2829      Diag(DS.getConstSpecLoc(), diag::warn_standalone_specifier) << "const";
2830    if (DS.getTypeQualifiers() & DeclSpec::TQ_volatile)
2831      Diag(DS.getConstSpecLoc(), diag::warn_standalone_specifier) << "volatile";
2832    // Restrict is covered above.
2833  }
2834  if (DS.isInlineSpecified())
2835    Diag(DS.getInlineSpecLoc(), diag::warn_standalone_specifier) << "inline";
2836  if (DS.isVirtualSpecified())
2837    Diag(DS.getVirtualSpecLoc(), diag::warn_standalone_specifier) << "virtual";
2838  if (DS.isExplicitSpecified())
2839    Diag(DS.getExplicitSpecLoc(), diag::warn_standalone_specifier) <<"explicit";
2840
2841  if (DS.isModulePrivateSpecified() &&
2842      Tag && Tag->getDeclContext()->isFunctionOrMethod())
2843    Diag(DS.getModulePrivateSpecLoc(), diag::err_module_private_local_class)
2844      << Tag->getTagKind()
2845      << FixItHint::CreateRemoval(DS.getModulePrivateSpecLoc());
2846
2847  // Warn about ignored type attributes, for example:
2848  // __attribute__((aligned)) struct A;
2849  // Attributes should be placed after tag to apply to type declaration.
2850  if (!DS.getAttributes().empty()) {
2851    DeclSpec::TST TypeSpecType = DS.getTypeSpecType();
2852    if (TypeSpecType == DeclSpec::TST_class ||
2853        TypeSpecType == DeclSpec::TST_struct ||
2854        TypeSpecType == DeclSpec::TST_interface ||
2855        TypeSpecType == DeclSpec::TST_union ||
2856        TypeSpecType == DeclSpec::TST_enum) {
2857      AttributeList* attrs = DS.getAttributes().getList();
2858      while (attrs) {
2859        Diag(attrs->getLoc(), diag::warn_declspec_attribute_ignored)
2860        << attrs->getName()
2861        << (TypeSpecType == DeclSpec::TST_class ? 0 :
2862            TypeSpecType == DeclSpec::TST_struct ? 1 :
2863            TypeSpecType == DeclSpec::TST_union ? 2 :
2864            TypeSpecType == DeclSpec::TST_interface ? 3 : 4);
2865        attrs = attrs->getNext();
2866      }
2867    }
2868  }
2869
2870  ActOnDocumentableDecl(TagD);
2871
2872  return TagD;
2873}
2874
2875/// We are trying to inject an anonymous member into the given scope;
2876/// check if there's an existing declaration that can't be overloaded.
2877///
2878/// \return true if this is a forbidden redeclaration
2879static bool CheckAnonMemberRedeclaration(Sema &SemaRef,
2880                                         Scope *S,
2881                                         DeclContext *Owner,
2882                                         DeclarationName Name,
2883                                         SourceLocation NameLoc,
2884                                         unsigned diagnostic) {
2885  LookupResult R(SemaRef, Name, NameLoc, Sema::LookupMemberName,
2886                 Sema::ForRedeclaration);
2887  if (!SemaRef.LookupName(R, S)) return false;
2888
2889  if (R.getAsSingle<TagDecl>())
2890    return false;
2891
2892  // Pick a representative declaration.
2893  NamedDecl *PrevDecl = R.getRepresentativeDecl()->getUnderlyingDecl();
2894  assert(PrevDecl && "Expected a non-null Decl");
2895
2896  if (!SemaRef.isDeclInScope(PrevDecl, Owner, S))
2897    return false;
2898
2899  SemaRef.Diag(NameLoc, diagnostic) << Name;
2900  SemaRef.Diag(PrevDecl->getLocation(), diag::note_previous_declaration);
2901
2902  return true;
2903}
2904
2905/// InjectAnonymousStructOrUnionMembers - Inject the members of the
2906/// anonymous struct or union AnonRecord into the owning context Owner
2907/// and scope S. This routine will be invoked just after we realize
2908/// that an unnamed union or struct is actually an anonymous union or
2909/// struct, e.g.,
2910///
2911/// @code
2912/// union {
2913///   int i;
2914///   float f;
2915/// }; // InjectAnonymousStructOrUnionMembers called here to inject i and
2916///    // f into the surrounding scope.x
2917/// @endcode
2918///
2919/// This routine is recursive, injecting the names of nested anonymous
2920/// structs/unions into the owning context and scope as well.
2921static bool InjectAnonymousStructOrUnionMembers(Sema &SemaRef, Scope *S,
2922                                                DeclContext *Owner,
2923                                                RecordDecl *AnonRecord,
2924                                                AccessSpecifier AS,
2925                              SmallVector<NamedDecl*, 2> &Chaining,
2926                                                      bool MSAnonStruct) {
2927  unsigned diagKind
2928    = AnonRecord->isUnion() ? diag::err_anonymous_union_member_redecl
2929                            : diag::err_anonymous_struct_member_redecl;
2930
2931  bool Invalid = false;
2932
2933  // Look every FieldDecl and IndirectFieldDecl with a name.
2934  for (RecordDecl::decl_iterator D = AnonRecord->decls_begin(),
2935                               DEnd = AnonRecord->decls_end();
2936       D != DEnd; ++D) {
2937    if ((isa<FieldDecl>(*D) || isa<IndirectFieldDecl>(*D)) &&
2938        cast<NamedDecl>(*D)->getDeclName()) {
2939      ValueDecl *VD = cast<ValueDecl>(*D);
2940      if (CheckAnonMemberRedeclaration(SemaRef, S, Owner, VD->getDeclName(),
2941                                       VD->getLocation(), diagKind)) {
2942        // C++ [class.union]p2:
2943        //   The names of the members of an anonymous union shall be
2944        //   distinct from the names of any other entity in the
2945        //   scope in which the anonymous union is declared.
2946        Invalid = true;
2947      } else {
2948        // C++ [class.union]p2:
2949        //   For the purpose of name lookup, after the anonymous union
2950        //   definition, the members of the anonymous union are
2951        //   considered to have been defined in the scope in which the
2952        //   anonymous union is declared.
2953        unsigned OldChainingSize = Chaining.size();
2954        if (IndirectFieldDecl *IF = dyn_cast<IndirectFieldDecl>(VD))
2955          for (IndirectFieldDecl::chain_iterator PI = IF->chain_begin(),
2956               PE = IF->chain_end(); PI != PE; ++PI)
2957            Chaining.push_back(*PI);
2958        else
2959          Chaining.push_back(VD);
2960
2961        assert(Chaining.size() >= 2);
2962        NamedDecl **NamedChain =
2963          new (SemaRef.Context)NamedDecl*[Chaining.size()];
2964        for (unsigned i = 0; i < Chaining.size(); i++)
2965          NamedChain[i] = Chaining[i];
2966
2967        IndirectFieldDecl* IndirectField =
2968          IndirectFieldDecl::Create(SemaRef.Context, Owner, VD->getLocation(),
2969                                    VD->getIdentifier(), VD->getType(),
2970                                    NamedChain, Chaining.size());
2971
2972        IndirectField->setAccess(AS);
2973        IndirectField->setImplicit();
2974        SemaRef.PushOnScopeChains(IndirectField, S);
2975
2976        // That includes picking up the appropriate access specifier.
2977        if (AS != AS_none) IndirectField->setAccess(AS);
2978
2979        Chaining.resize(OldChainingSize);
2980      }
2981    }
2982  }
2983
2984  return Invalid;
2985}
2986
2987/// StorageClassSpecToVarDeclStorageClass - Maps a DeclSpec::SCS to
2988/// a VarDecl::StorageClass. Any error reporting is up to the caller:
2989/// illegal input values are mapped to SC_None.
2990static StorageClass
2991StorageClassSpecToVarDeclStorageClass(DeclSpec::SCS StorageClassSpec) {
2992  switch (StorageClassSpec) {
2993  case DeclSpec::SCS_unspecified:    return SC_None;
2994  case DeclSpec::SCS_extern:         return SC_Extern;
2995  case DeclSpec::SCS_static:         return SC_Static;
2996  case DeclSpec::SCS_auto:           return SC_Auto;
2997  case DeclSpec::SCS_register:       return SC_Register;
2998  case DeclSpec::SCS_private_extern: return SC_PrivateExtern;
2999    // Illegal SCSs map to None: error reporting is up to the caller.
3000  case DeclSpec::SCS_mutable:        // Fall through.
3001  case DeclSpec::SCS_typedef:        return SC_None;
3002  }
3003  llvm_unreachable("unknown storage class specifier");
3004}
3005
3006/// StorageClassSpecToFunctionDeclStorageClass - Maps a DeclSpec::SCS to
3007/// a StorageClass. Any error reporting is up to the caller:
3008/// illegal input values are mapped to SC_None.
3009static StorageClass
3010StorageClassSpecToFunctionDeclStorageClass(DeclSpec::SCS StorageClassSpec) {
3011  switch (StorageClassSpec) {
3012  case DeclSpec::SCS_unspecified:    return SC_None;
3013  case DeclSpec::SCS_extern:         return SC_Extern;
3014  case DeclSpec::SCS_static:         return SC_Static;
3015  case DeclSpec::SCS_private_extern: return SC_PrivateExtern;
3016    // Illegal SCSs map to None: error reporting is up to the caller.
3017  case DeclSpec::SCS_auto:           // Fall through.
3018  case DeclSpec::SCS_mutable:        // Fall through.
3019  case DeclSpec::SCS_register:       // Fall through.
3020  case DeclSpec::SCS_typedef:        return SC_None;
3021  }
3022  llvm_unreachable("unknown storage class specifier");
3023}
3024
3025/// BuildAnonymousStructOrUnion - Handle the declaration of an
3026/// anonymous structure or union. Anonymous unions are a C++ feature
3027/// (C++ [class.union]) and a C11 feature; anonymous structures
3028/// are a C11 feature and GNU C++ extension.
3029Decl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS,
3030                                             AccessSpecifier AS,
3031                                             RecordDecl *Record) {
3032  DeclContext *Owner = Record->getDeclContext();
3033
3034  // Diagnose whether this anonymous struct/union is an extension.
3035  if (Record->isUnion() && !getLangOpts().CPlusPlus && !getLangOpts().C11)
3036    Diag(Record->getLocation(), diag::ext_anonymous_union);
3037  else if (!Record->isUnion() && getLangOpts().CPlusPlus)
3038    Diag(Record->getLocation(), diag::ext_gnu_anonymous_struct);
3039  else if (!Record->isUnion() && !getLangOpts().C11)
3040    Diag(Record->getLocation(), diag::ext_c11_anonymous_struct);
3041
3042  // C and C++ require different kinds of checks for anonymous
3043  // structs/unions.
3044  bool Invalid = false;
3045  if (getLangOpts().CPlusPlus) {
3046    const char* PrevSpec = 0;
3047    unsigned DiagID;
3048    if (Record->isUnion()) {
3049      // C++ [class.union]p6:
3050      //   Anonymous unions declared in a named namespace or in the
3051      //   global namespace shall be declared static.
3052      if (DS.getStorageClassSpec() != DeclSpec::SCS_static &&
3053          (isa<TranslationUnitDecl>(Owner) ||
3054           (isa<NamespaceDecl>(Owner) &&
3055            cast<NamespaceDecl>(Owner)->getDeclName()))) {
3056        Diag(Record->getLocation(), diag::err_anonymous_union_not_static)
3057          << FixItHint::CreateInsertion(Record->getLocation(), "static ");
3058
3059        // Recover by adding 'static'.
3060        DS.SetStorageClassSpec(*this, DeclSpec::SCS_static, SourceLocation(),
3061                               PrevSpec, DiagID);
3062      }
3063      // C++ [class.union]p6:
3064      //   A storage class is not allowed in a declaration of an
3065      //   anonymous union in a class scope.
3066      else if (DS.getStorageClassSpec() != DeclSpec::SCS_unspecified &&
3067               isa<RecordDecl>(Owner)) {
3068        Diag(DS.getStorageClassSpecLoc(),
3069             diag::err_anonymous_union_with_storage_spec)
3070          << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());
3071
3072        // Recover by removing the storage specifier.
3073        DS.SetStorageClassSpec(*this, DeclSpec::SCS_unspecified,
3074                               SourceLocation(),
3075                               PrevSpec, DiagID);
3076      }
3077    }
3078
3079    // Ignore const/volatile/restrict qualifiers.
3080    if (DS.getTypeQualifiers()) {
3081      if (DS.getTypeQualifiers() & DeclSpec::TQ_const)
3082        Diag(DS.getConstSpecLoc(), diag::ext_anonymous_struct_union_qualified)
3083          << Record->isUnion() << 0
3084          << FixItHint::CreateRemoval(DS.getConstSpecLoc());
3085      if (DS.getTypeQualifiers() & DeclSpec::TQ_volatile)
3086        Diag(DS.getVolatileSpecLoc(),
3087             diag::ext_anonymous_struct_union_qualified)
3088          << Record->isUnion() << 1
3089          << FixItHint::CreateRemoval(DS.getVolatileSpecLoc());
3090      if (DS.getTypeQualifiers() & DeclSpec::TQ_restrict)
3091        Diag(DS.getRestrictSpecLoc(),
3092             diag::ext_anonymous_struct_union_qualified)
3093          << Record->isUnion() << 2
3094          << FixItHint::CreateRemoval(DS.getRestrictSpecLoc());
3095
3096      DS.ClearTypeQualifiers();
3097    }
3098
3099    // C++ [class.union]p2:
3100    //   The member-specification of an anonymous union shall only
3101    //   define non-static data members. [Note: nested types and
3102    //   functions cannot be declared within an anonymous union. ]
3103    for (DeclContext::decl_iterator Mem = Record->decls_begin(),
3104                                 MemEnd = Record->decls_end();
3105         Mem != MemEnd; ++Mem) {
3106      if (FieldDecl *FD = dyn_cast<FieldDecl>(*Mem)) {
3107        // C++ [class.union]p3:
3108        //   An anonymous union shall not have private or protected
3109        //   members (clause 11).
3110        assert(FD->getAccess() != AS_none);
3111        if (FD->getAccess() != AS_public) {
3112          Diag(FD->getLocation(), diag::err_anonymous_record_nonpublic_member)
3113            << (int)Record->isUnion() << (int)(FD->getAccess() == AS_protected);
3114          Invalid = true;
3115        }
3116
3117        // C++ [class.union]p1
3118        //   An object of a class with a non-trivial constructor, a non-trivial
3119        //   copy constructor, a non-trivial destructor, or a non-trivial copy
3120        //   assignment operator cannot be a member of a union, nor can an
3121        //   array of such objects.
3122        if (CheckNontrivialField(FD))
3123          Invalid = true;
3124      } else if ((*Mem)->isImplicit()) {
3125        // Any implicit members are fine.
3126      } else if (isa<TagDecl>(*Mem) && (*Mem)->getDeclContext() != Record) {
3127        // This is a type that showed up in an
3128        // elaborated-type-specifier inside the anonymous struct or
3129        // union, but which actually declares a type outside of the
3130        // anonymous struct or union. It's okay.
3131      } else if (RecordDecl *MemRecord = dyn_cast<RecordDecl>(*Mem)) {
3132        if (!MemRecord->isAnonymousStructOrUnion() &&
3133            MemRecord->getDeclName()) {
3134          // Visual C++ allows type definition in anonymous struct or union.
3135          if (getLangOpts().MicrosoftExt)
3136            Diag(MemRecord->getLocation(), diag::ext_anonymous_record_with_type)
3137              << (int)Record->isUnion();
3138          else {
3139            // This is a nested type declaration.
3140            Diag(MemRecord->getLocation(), diag::err_anonymous_record_with_type)
3141              << (int)Record->isUnion();
3142            Invalid = true;
3143          }
3144        }
3145      } else if (isa<AccessSpecDecl>(*Mem)) {
3146        // Any access specifier is fine.
3147      } else {
3148        // We have something that isn't a non-static data
3149        // member. Complain about it.
3150        unsigned DK = diag::err_anonymous_record_bad_member;
3151        if (isa<TypeDecl>(*Mem))
3152          DK = diag::err_anonymous_record_with_type;
3153        else if (isa<FunctionDecl>(*Mem))
3154          DK = diag::err_anonymous_record_with_function;
3155        else if (isa<VarDecl>(*Mem))
3156          DK = diag::err_anonymous_record_with_static;
3157
3158        // Visual C++ allows type definition in anonymous struct or union.
3159        if (getLangOpts().MicrosoftExt &&
3160            DK == diag::err_anonymous_record_with_type)
3161          Diag((*Mem)->getLocation(), diag::ext_anonymous_record_with_type)
3162            << (int)Record->isUnion();
3163        else {
3164          Diag((*Mem)->getLocation(), DK)
3165              << (int)Record->isUnion();
3166          Invalid = true;
3167        }
3168      }
3169    }
3170  }
3171
3172  if (!Record->isUnion() && !Owner->isRecord()) {
3173    Diag(Record->getLocation(), diag::err_anonymous_struct_not_member)
3174      << (int)getLangOpts().CPlusPlus;
3175    Invalid = true;
3176  }
3177
3178  // Mock up a declarator.
3179  Declarator Dc(DS, Declarator::MemberContext);
3180  TypeSourceInfo *TInfo = GetTypeForDeclarator(Dc, S);
3181  assert(TInfo && "couldn't build declarator info for anonymous struct/union");
3182
3183  // Create a declaration for this anonymous struct/union.
3184  NamedDecl *Anon = 0;
3185  if (RecordDecl *OwningClass = dyn_cast<RecordDecl>(Owner)) {
3186    Anon = FieldDecl::Create(Context, OwningClass,
3187                             DS.getLocStart(),
3188                             Record->getLocation(),
3189                             /*IdentifierInfo=*/0,
3190                             Context.getTypeDeclType(Record),
3191                             TInfo,
3192                             /*BitWidth=*/0, /*Mutable=*/false,
3193                             /*InitStyle=*/ICIS_NoInit);
3194    Anon->setAccess(AS);
3195    if (getLangOpts().CPlusPlus)
3196      FieldCollector->Add(cast<FieldDecl>(Anon));
3197  } else {
3198    DeclSpec::SCS SCSpec = DS.getStorageClassSpec();
3199    assert(SCSpec != DeclSpec::SCS_typedef &&
3200           "Parser allowed 'typedef' as storage class VarDecl.");
3201    VarDecl::StorageClass SC = StorageClassSpecToVarDeclStorageClass(SCSpec);
3202    if (SCSpec == DeclSpec::SCS_mutable) {
3203      // mutable can only appear on non-static class members, so it's always
3204      // an error here
3205      Diag(Record->getLocation(), diag::err_mutable_nonmember);
3206      Invalid = true;
3207      SC = SC_None;
3208    }
3209    SCSpec = DS.getStorageClassSpecAsWritten();
3210    VarDecl::StorageClass SCAsWritten
3211      = StorageClassSpecToVarDeclStorageClass(SCSpec);
3212
3213    Anon = VarDecl::Create(Context, Owner,
3214                           DS.getLocStart(),
3215                           Record->getLocation(), /*IdentifierInfo=*/0,
3216                           Context.getTypeDeclType(Record),
3217                           TInfo, SC, SCAsWritten);
3218
3219    // Default-initialize the implicit variable. This initialization will be
3220    // trivial in almost all cases, except if a union member has an in-class
3221    // initializer:
3222    //   union { int n = 0; };
3223    ActOnUninitializedDecl(Anon, /*TypeMayContainAuto=*/false);
3224  }
3225  Anon->setImplicit();
3226
3227  // Add the anonymous struct/union object to the current
3228  // context. We'll be referencing this object when we refer to one of
3229  // its members.
3230  Owner->addDecl(Anon);
3231
3232  // Inject the members of the anonymous struct/union into the owning
3233  // context and into the identifier resolver chain for name lookup
3234  // purposes.
3235  SmallVector<NamedDecl*, 2> Chain;
3236  Chain.push_back(Anon);
3237
3238  if (InjectAnonymousStructOrUnionMembers(*this, S, Owner, Record, AS,
3239                                          Chain, false))
3240    Invalid = true;
3241
3242  // Mark this as an anonymous struct/union type. Note that we do not
3243  // do this until after we have already checked and injected the
3244  // members of this anonymous struct/union type, because otherwise
3245  // the members could be injected twice: once by DeclContext when it
3246  // builds its lookup table, and once by
3247  // InjectAnonymousStructOrUnionMembers.
3248  Record->setAnonymousStructOrUnion(true);
3249
3250  if (Invalid)
3251    Anon->setInvalidDecl();
3252
3253  return Anon;
3254}
3255
3256/// BuildMicrosoftCAnonymousStruct - Handle the declaration of an
3257/// Microsoft C anonymous structure.
3258/// Ref: http://msdn.microsoft.com/en-us/library/z2cx9y4f.aspx
3259/// Example:
3260///
3261/// struct A { int a; };
3262/// struct B { struct A; int b; };
3263///
3264/// void foo() {
3265///   B var;
3266///   var.a = 3;
3267/// }
3268///
3269Decl *Sema::BuildMicrosoftCAnonymousStruct(Scope *S, DeclSpec &DS,
3270                                           RecordDecl *Record) {
3271
3272  // If there is no Record, get the record via the typedef.
3273  if (!Record)
3274    Record = DS.getRepAsType().get()->getAsStructureType()->getDecl();
3275
3276  // Mock up a declarator.
3277  Declarator Dc(DS, Declarator::TypeNameContext);
3278  TypeSourceInfo *TInfo = GetTypeForDeclarator(Dc, S);
3279  assert(TInfo && "couldn't build declarator info for anonymous struct");
3280
3281  // Create a declaration for this anonymous struct.
3282  NamedDecl* Anon = FieldDecl::Create(Context,
3283                             cast<RecordDecl>(CurContext),
3284                             DS.getLocStart(),
3285                             DS.getLocStart(),
3286                             /*IdentifierInfo=*/0,
3287                             Context.getTypeDeclType(Record),
3288                             TInfo,
3289                             /*BitWidth=*/0, /*Mutable=*/false,
3290                             /*InitStyle=*/ICIS_NoInit);
3291  Anon->setImplicit();
3292
3293  // Add the anonymous struct object to the current context.
3294  CurContext->addDecl(Anon);
3295
3296  // Inject the members of the anonymous struct into the current
3297  // context and into the identifier resolver chain for name lookup
3298  // purposes.
3299  SmallVector<NamedDecl*, 2> Chain;
3300  Chain.push_back(Anon);
3301
3302  RecordDecl *RecordDef = Record->getDefinition();
3303  if (!RecordDef || InjectAnonymousStructOrUnionMembers(*this, S, CurContext,
3304                                                        RecordDef, AS_none,
3305                                                        Chain, true))
3306    Anon->setInvalidDecl();
3307
3308  return Anon;
3309}
3310
3311/// GetNameForDeclarator - Determine the full declaration name for the
3312/// given Declarator.
3313DeclarationNameInfo Sema::GetNameForDeclarator(Declarator &D) {
3314  return GetNameFromUnqualifiedId(D.getName());
3315}
3316
3317/// \brief Retrieves the declaration name from a parsed unqualified-id.
3318DeclarationNameInfo
3319Sema::GetNameFromUnqualifiedId(const UnqualifiedId &Name) {
3320  DeclarationNameInfo NameInfo;
3321  NameInfo.setLoc(Name.StartLocation);
3322
3323  switch (Name.getKind()) {
3324
3325  case UnqualifiedId::IK_ImplicitSelfParam:
3326  case UnqualifiedId::IK_Identifier:
3327    NameInfo.setName(Name.Identifier);
3328    NameInfo.setLoc(Name.StartLocation);
3329    return NameInfo;
3330
3331  case UnqualifiedId::IK_OperatorFunctionId:
3332    NameInfo.setName(Context.DeclarationNames.getCXXOperatorName(
3333                                           Name.OperatorFunctionId.Operator));
3334    NameInfo.setLoc(Name.StartLocation);
3335    NameInfo.getInfo().CXXOperatorName.BeginOpNameLoc
3336      = Name.OperatorFunctionId.SymbolLocations[0];
3337    NameInfo.getInfo().CXXOperatorName.EndOpNameLoc
3338      = Name.EndLocation.getRawEncoding();
3339    return NameInfo;
3340
3341  case UnqualifiedId::IK_LiteralOperatorId:
3342    NameInfo.setName(Context.DeclarationNames.getCXXLiteralOperatorName(
3343                                                           Name.Identifier));
3344    NameInfo.setLoc(Name.StartLocation);
3345    NameInfo.setCXXLiteralOperatorNameLoc(Name.EndLocation);
3346    return NameInfo;
3347
3348  case UnqualifiedId::IK_ConversionFunctionId: {
3349    TypeSourceInfo *TInfo;
3350    QualType Ty = GetTypeFromParser(Name.ConversionFunctionId, &TInfo);
3351    if (Ty.isNull())
3352      return DeclarationNameInfo();
3353    NameInfo.setName(Context.DeclarationNames.getCXXConversionFunctionName(
3354                                               Context.getCanonicalType(Ty)));
3355    NameInfo.setLoc(Name.StartLocation);
3356    NameInfo.setNamedTypeInfo(TInfo);
3357    return NameInfo;
3358  }
3359
3360  case UnqualifiedId::IK_ConstructorName: {
3361    TypeSourceInfo *TInfo;
3362    QualType Ty = GetTypeFromParser(Name.ConstructorName, &TInfo);
3363    if (Ty.isNull())
3364      return DeclarationNameInfo();
3365    NameInfo.setName(Context.DeclarationNames.getCXXConstructorName(
3366                                              Context.getCanonicalType(Ty)));
3367    NameInfo.setLoc(Name.StartLocation);
3368    NameInfo.setNamedTypeInfo(TInfo);
3369    return NameInfo;
3370  }
3371
3372  case UnqualifiedId::IK_ConstructorTemplateId: {
3373    // In well-formed code, we can only have a constructor
3374    // template-id that refers to the current context, so go there
3375    // to find the actual type being constructed.
3376    CXXRecordDecl *CurClass = dyn_cast<CXXRecordDecl>(CurContext);
3377    if (!CurClass || CurClass->getIdentifier() != Name.TemplateId->Name)
3378      return DeclarationNameInfo();
3379
3380    // Determine the type of the class being constructed.
3381    QualType CurClassType = Context.getTypeDeclType(CurClass);
3382
3383    // FIXME: Check two things: that the template-id names the same type as
3384    // CurClassType, and that the template-id does not occur when the name
3385    // was qualified.
3386
3387    NameInfo.setName(Context.DeclarationNames.getCXXConstructorName(
3388                                    Context.getCanonicalType(CurClassType)));
3389    NameInfo.setLoc(Name.StartLocation);
3390    // FIXME: should we retrieve TypeSourceInfo?
3391    NameInfo.setNamedTypeInfo(0);
3392    return NameInfo;
3393  }
3394
3395  case UnqualifiedId::IK_DestructorName: {
3396    TypeSourceInfo *TInfo;
3397    QualType Ty = GetTypeFromParser(Name.DestructorName, &TInfo);
3398    if (Ty.isNull())
3399      return DeclarationNameInfo();
3400    NameInfo.setName(Context.DeclarationNames.getCXXDestructorName(
3401                                              Context.getCanonicalType(Ty)));
3402    NameInfo.setLoc(Name.StartLocation);
3403    NameInfo.setNamedTypeInfo(TInfo);
3404    return NameInfo;
3405  }
3406
3407  case UnqualifiedId::IK_TemplateId: {
3408    TemplateName TName = Name.TemplateId->Template.get();
3409    SourceLocation TNameLoc = Name.TemplateId->TemplateNameLoc;
3410    return Context.getNameForTemplate(TName, TNameLoc);
3411  }
3412
3413  } // switch (Name.getKind())
3414
3415  llvm_unreachable("Unknown name kind");
3416}
3417
3418static QualType getCoreType(QualType Ty) {
3419  do {
3420    if (Ty->isPointerType() || Ty->isReferenceType())
3421      Ty = Ty->getPointeeType();
3422    else if (Ty->isArrayType())
3423      Ty = Ty->castAsArrayTypeUnsafe()->getElementType();
3424    else
3425      return Ty.withoutLocalFastQualifiers();
3426  } while (true);
3427}
3428
3429/// hasSimilarParameters - Determine whether the C++ functions Declaration
3430/// and Definition have "nearly" matching parameters. This heuristic is
3431/// used to improve diagnostics in the case where an out-of-line function
3432/// definition doesn't match any declaration within the class or namespace.
3433/// Also sets Params to the list of indices to the parameters that differ
3434/// between the declaration and the definition. If hasSimilarParameters
3435/// returns true and Params is empty, then all of the parameters match.
3436static bool hasSimilarParameters(ASTContext &Context,
3437                                     FunctionDecl *Declaration,
3438                                     FunctionDecl *Definition,
3439                                     llvm::SmallVectorImpl<unsigned> &Params) {
3440  Params.clear();
3441  if (Declaration->param_size() != Definition->param_size())
3442    return false;
3443  for (unsigned Idx = 0; Idx < Declaration->param_size(); ++Idx) {
3444    QualType DeclParamTy = Declaration->getParamDecl(Idx)->getType();
3445    QualType DefParamTy = Definition->getParamDecl(Idx)->getType();
3446
3447    // The parameter types are identical
3448    if (Context.hasSameType(DefParamTy, DeclParamTy))
3449      continue;
3450
3451    QualType DeclParamBaseTy = getCoreType(DeclParamTy);
3452    QualType DefParamBaseTy = getCoreType(DefParamTy);
3453    const IdentifierInfo *DeclTyName = DeclParamBaseTy.getBaseTypeIdentifier();
3454    const IdentifierInfo *DefTyName = DefParamBaseTy.getBaseTypeIdentifier();
3455
3456    if (Context.hasSameUnqualifiedType(DeclParamBaseTy, DefParamBaseTy) ||
3457        (DeclTyName && DeclTyName == DefTyName))
3458      Params.push_back(Idx);
3459    else  // The two parameters aren't even close
3460      return false;
3461  }
3462
3463  return true;
3464}
3465
3466/// NeedsRebuildingInCurrentInstantiation - Checks whether the given
3467/// declarator needs to be rebuilt in the current instantiation.
3468/// Any bits of declarator which appear before the name are valid for
3469/// consideration here.  That's specifically the type in the decl spec
3470/// and the base type in any member-pointer chunks.
3471static bool RebuildDeclaratorInCurrentInstantiation(Sema &S, Declarator &D,
3472                                                    DeclarationName Name) {
3473  // The types we specifically need to rebuild are:
3474  //   - typenames, typeofs, and decltypes
3475  //   - types which will become injected class names
3476  // Of course, we also need to rebuild any type referencing such a
3477  // type.  It's safest to just say "dependent", but we call out a
3478  // few cases here.
3479
3480  DeclSpec &DS = D.getMutableDeclSpec();
3481  switch (DS.getTypeSpecType()) {
3482  case DeclSpec::TST_typename:
3483  case DeclSpec::TST_typeofType:
3484  case DeclSpec::TST_underlyingType:
3485  case DeclSpec::TST_atomic: {
3486    // Grab the type from the parser.
3487    TypeSourceInfo *TSI = 0;
3488    QualType T = S.GetTypeFromParser(DS.getRepAsType(), &TSI);
3489    if (T.isNull() || !T->isDependentType()) break;
3490
3491    // Make sure there's a type source info.  This isn't really much
3492    // of a waste; most dependent types should have type source info
3493    // attached already.
3494    if (!TSI)
3495      TSI = S.Context.getTrivialTypeSourceInfo(T, DS.getTypeSpecTypeLoc());
3496
3497    // Rebuild the type in the current instantiation.
3498    TSI = S.RebuildTypeInCurrentInstantiation(TSI, D.getIdentifierLoc(), Name);
3499    if (!TSI) return true;
3500
3501    // Store the new type back in the decl spec.
3502    ParsedType LocType = S.CreateParsedType(TSI->getType(), TSI);
3503    DS.UpdateTypeRep(LocType);
3504    break;
3505  }
3506
3507  case DeclSpec::TST_decltype:
3508  case DeclSpec::TST_typeofExpr: {
3509    Expr *E = DS.getRepAsExpr();
3510    ExprResult Result = S.RebuildExprInCurrentInstantiation(E);
3511    if (Result.isInvalid()) return true;
3512    DS.UpdateExprRep(Result.get());
3513    break;
3514  }
3515
3516  default:
3517    // Nothing to do for these decl specs.
3518    break;
3519  }
3520
3521  // It doesn't matter what order we do this in.
3522  for (unsigned I = 0, E = D.getNumTypeObjects(); I != E; ++I) {
3523    DeclaratorChunk &Chunk = D.getTypeObject(I);
3524
3525    // The only type information in the declarator which can come
3526    // before the declaration name is the base type of a member
3527    // pointer.
3528    if (Chunk.Kind != DeclaratorChunk::MemberPointer)
3529      continue;
3530
3531    // Rebuild the scope specifier in-place.
3532    CXXScopeSpec &SS = Chunk.Mem.Scope();
3533    if (S.RebuildNestedNameSpecifierInCurrentInstantiation(SS))
3534      return true;
3535  }
3536
3537  return false;
3538}
3539
3540Decl *Sema::ActOnDeclarator(Scope *S, Declarator &D) {
3541  D.setFunctionDefinitionKind(FDK_Declaration);
3542  Decl *Dcl = HandleDeclarator(S, D, MultiTemplateParamsArg());
3543
3544  if (OriginalLexicalContext && OriginalLexicalContext->isObjCContainer() &&
3545      Dcl && Dcl->getDeclContext()->isFileContext())
3546    Dcl->setTopLevelDeclInObjCContainer();
3547
3548  return Dcl;
3549}
3550
3551/// DiagnoseClassNameShadow - Implement C++ [class.mem]p13:
3552///   If T is the name of a class, then each of the following shall have a
3553///   name different from T:
3554///     - every static data member of class T;
3555///     - every member function of class T
3556///     - every member of class T that is itself a type;
3557/// \returns true if the declaration name violates these rules.
3558bool Sema::DiagnoseClassNameShadow(DeclContext *DC,
3559                                   DeclarationNameInfo NameInfo) {
3560  DeclarationName Name = NameInfo.getName();
3561
3562  if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(DC))
3563    if (Record->getIdentifier() && Record->getDeclName() == Name) {
3564      Diag(NameInfo.getLoc(), diag::err_member_name_of_class) << Name;
3565      return true;
3566    }
3567
3568  return false;
3569}
3570
3571/// \brief Diagnose a declaration whose declarator-id has the given
3572/// nested-name-specifier.
3573///
3574/// \param SS The nested-name-specifier of the declarator-id.
3575///
3576/// \param DC The declaration context to which the nested-name-specifier
3577/// resolves.
3578///
3579/// \param Name The name of the entity being declared.
3580///
3581/// \param Loc The location of the name of the entity being declared.
3582///
3583/// \returns true if we cannot safely recover from this error, false otherwise.
3584bool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC,
3585                                        DeclarationName Name,
3586                                      SourceLocation Loc) {
3587  DeclContext *Cur = CurContext;
3588  while (isa<LinkageSpecDecl>(Cur))
3589    Cur = Cur->getParent();
3590
3591  // C++ [dcl.meaning]p1:
3592  //   A declarator-id shall not be qualified except for the definition
3593  //   of a member function (9.3) or static data member (9.4) outside of
3594  //   its class, the definition or explicit instantiation of a function
3595  //   or variable member of a namespace outside of its namespace, or the
3596  //   definition of an explicit specialization outside of its namespace,
3597  //   or the declaration of a friend function that is a member of
3598  //   another class or namespace (11.3). [...]
3599
3600  // The user provided a superfluous scope specifier that refers back to the
3601  // class or namespaces in which the entity is already declared.
3602  //
3603  // class X {
3604  //   void X::f();
3605  // };
3606  if (Cur->Equals(DC)) {
3607    Diag(Loc, LangOpts.MicrosoftExt? diag::warn_member_extra_qualification
3608                                   : diag::err_member_extra_qualification)
3609      << Name << FixItHint::CreateRemoval(SS.getRange());
3610    SS.clear();
3611    return false;
3612  }
3613
3614  // Check whether the qualifying scope encloses the scope of the original
3615  // declaration.
3616  if (!Cur->Encloses(DC)) {
3617    if (Cur->isRecord())
3618      Diag(Loc, diag::err_member_qualification)
3619        << Name << SS.getRange();
3620    else if (isa<TranslationUnitDecl>(DC))
3621      Diag(Loc, diag::err_invalid_declarator_global_scope)
3622        << Name << SS.getRange();
3623    else if (isa<FunctionDecl>(Cur))
3624      Diag(Loc, diag::err_invalid_declarator_in_function)
3625        << Name << SS.getRange();
3626    else
3627      Diag(Loc, diag::err_invalid_declarator_scope)
3628      << Name << cast<NamedDecl>(Cur) << cast<NamedDecl>(DC) << SS.getRange();
3629
3630    return true;
3631  }
3632
3633  if (Cur->isRecord()) {
3634    // Cannot qualify members within a class.
3635    Diag(Loc, diag::err_member_qualification)
3636      << Name << SS.getRange();
3637    SS.clear();
3638
3639    // C++ constructors and destructors with incorrect scopes can break
3640    // our AST invariants by having the wrong underlying types. If
3641    // that's the case, then drop this declaration entirely.
3642    if ((Name.getNameKind() == DeclarationName::CXXConstructorName ||
3643         Name.getNameKind() == DeclarationName::CXXDestructorName) &&
3644        !Context.hasSameType(Name.getCXXNameType(),
3645                             Context.getTypeDeclType(cast<CXXRecordDecl>(Cur))))
3646      return true;
3647
3648    return false;
3649  }
3650
3651  // C++11 [dcl.meaning]p1:
3652  //   [...] "The nested-name-specifier of the qualified declarator-id shall
3653  //   not begin with a decltype-specifer"
3654  NestedNameSpecifierLoc SpecLoc(SS.getScopeRep(), SS.location_data());
3655  while (SpecLoc.getPrefix())
3656    SpecLoc = SpecLoc.getPrefix();
3657  if (dyn_cast_or_null<DecltypeType>(
3658        SpecLoc.getNestedNameSpecifier()->getAsType()))
3659    Diag(Loc, diag::err_decltype_in_declarator)
3660      << SpecLoc.getTypeLoc().getSourceRange();
3661
3662  return false;
3663}
3664
3665Decl *Sema::HandleDeclarator(Scope *S, Declarator &D,
3666                             MultiTemplateParamsArg TemplateParamLists) {
3667  // TODO: consider using NameInfo for diagnostic.
3668  DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
3669  DeclarationName Name = NameInfo.getName();
3670
3671  // All of these full declarators require an identifier.  If it doesn't have
3672  // one, the ParsedFreeStandingDeclSpec action should be used.
3673  if (!Name) {
3674    if (!D.isInvalidType())  // Reject this if we think it is valid.
3675      Diag(D.getDeclSpec().getLocStart(),
3676           diag::err_declarator_need_ident)
3677        << D.getDeclSpec().getSourceRange() << D.getSourceRange();
3678    return 0;
3679  } else if (DiagnoseUnexpandedParameterPack(NameInfo, UPPC_DeclarationType))
3680    return 0;
3681
3682  // The scope passed in may not be a decl scope.  Zip up the scope tree until
3683  // we find one that is.
3684  while ((S->getFlags() & Scope::DeclScope) == 0 ||
3685         (S->getFlags() & Scope::TemplateParamScope) != 0)
3686    S = S->getParent();
3687
3688  DeclContext *DC = CurContext;
3689  if (D.getCXXScopeSpec().isInvalid())
3690    D.setInvalidType();
3691  else if (D.getCXXScopeSpec().isSet()) {
3692    if (DiagnoseUnexpandedParameterPack(D.getCXXScopeSpec(),
3693                                        UPPC_DeclarationQualifier))
3694      return 0;
3695
3696    bool EnteringContext = !D.getDeclSpec().isFriendSpecified();
3697    DC = computeDeclContext(D.getCXXScopeSpec(), EnteringContext);
3698    if (!DC) {
3699      // If we could not compute the declaration context, it's because the
3700      // declaration context is dependent but does not refer to a class,
3701      // class template, or class template partial specialization. Complain
3702      // and return early, to avoid the coming semantic disaster.
3703      Diag(D.getIdentifierLoc(),
3704           diag::err_template_qualified_declarator_no_match)
3705        << (NestedNameSpecifier*)D.getCXXScopeSpec().getScopeRep()
3706        << D.getCXXScopeSpec().getRange();
3707      return 0;
3708    }
3709    bool IsDependentContext = DC->isDependentContext();
3710
3711    if (!IsDependentContext &&
3712        RequireCompleteDeclContext(D.getCXXScopeSpec(), DC))
3713      return 0;
3714
3715    if (isa<CXXRecordDecl>(DC) && !cast<CXXRecordDecl>(DC)->hasDefinition()) {
3716      Diag(D.getIdentifierLoc(),
3717           diag::err_member_def_undefined_record)
3718        << Name << DC << D.getCXXScopeSpec().getRange();
3719      D.setInvalidType();
3720    } else if (!D.getDeclSpec().isFriendSpecified()) {
3721      if (diagnoseQualifiedDeclaration(D.getCXXScopeSpec(), DC,
3722                                      Name, D.getIdentifierLoc())) {
3723        if (DC->isRecord())
3724          return 0;
3725
3726        D.setInvalidType();
3727      }
3728    }
3729
3730    // Check whether we need to rebuild the type of the given
3731    // declaration in the current instantiation.
3732    if (EnteringContext && IsDependentContext &&
3733        TemplateParamLists.size() != 0) {
3734      ContextRAII SavedContext(*this, DC);
3735      if (RebuildDeclaratorInCurrentInstantiation(*this, D, Name))
3736        D.setInvalidType();
3737    }
3738  }
3739
3740  if (DiagnoseClassNameShadow(DC, NameInfo))
3741    // If this is a typedef, we'll end up spewing multiple diagnostics.
3742    // Just return early; it's safer.
3743    if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef)
3744      return 0;
3745
3746  TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
3747  QualType R = TInfo->getType();
3748
3749  if (DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo,
3750                                      UPPC_DeclarationType))
3751    D.setInvalidType();
3752
3753  LookupResult Previous(*this, NameInfo, LookupOrdinaryName,
3754                        ForRedeclaration);
3755
3756  // See if this is a redefinition of a variable in the same scope.
3757  if (!D.getCXXScopeSpec().isSet()) {
3758    bool IsLinkageLookup = false;
3759
3760    // If the declaration we're planning to build will be a function
3761    // or object with linkage, then look for another declaration with
3762    // linkage (C99 6.2.2p4-5 and C++ [basic.link]p6).
3763    if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef)
3764      /* Do nothing*/;
3765    else if (R->isFunctionType()) {
3766      if (CurContext->isFunctionOrMethod() ||
3767          D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_static)
3768        IsLinkageLookup = true;
3769    } else if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_extern)
3770      IsLinkageLookup = true;
3771    else if (CurContext->getRedeclContext()->isTranslationUnit() &&
3772             D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_static)
3773      IsLinkageLookup = true;
3774
3775    if (IsLinkageLookup)
3776      Previous.clear(LookupRedeclarationWithLinkage);
3777
3778    LookupName(Previous, S, /* CreateBuiltins = */ IsLinkageLookup);
3779  } else { // Something like "int foo::x;"
3780    LookupQualifiedName(Previous, DC);
3781
3782    // C++ [dcl.meaning]p1:
3783    //   When the declarator-id is qualified, the declaration shall refer to a
3784    //  previously declared member of the class or namespace to which the
3785    //  qualifier refers (or, in the case of a namespace, of an element of the
3786    //  inline namespace set of that namespace (7.3.1)) or to a specialization
3787    //  thereof; [...]
3788    //
3789    // Note that we already checked the context above, and that we do not have
3790    // enough information to make sure that Previous contains the declaration
3791    // we want to match. For example, given:
3792    //
3793    //   class X {
3794    //     void f();
3795    //     void f(float);
3796    //   };
3797    //
3798    //   void X::f(int) { } // ill-formed
3799    //
3800    // In this case, Previous will point to the overload set
3801    // containing the two f's declared in X, but neither of them
3802    // matches.
3803
3804    // C++ [dcl.meaning]p1:
3805    //   [...] the member shall not merely have been introduced by a
3806    //   using-declaration in the scope of the class or namespace nominated by
3807    //   the nested-name-specifier of the declarator-id.
3808    RemoveUsingDecls(Previous);
3809  }
3810
3811  if (Previous.isSingleResult() &&
3812      Previous.getFoundDecl()->isTemplateParameter()) {
3813    // Maybe we will complain about the shadowed template parameter.
3814    if (!D.isInvalidType())
3815      DiagnoseTemplateParameterShadow(D.getIdentifierLoc(),
3816                                      Previous.getFoundDecl());
3817
3818    // Just pretend that we didn't see the previous declaration.
3819    Previous.clear();
3820  }
3821
3822  // In C++, the previous declaration we find might be a tag type
3823  // (class or enum). In this case, the new declaration will hide the
3824  // tag type. Note that this does does not apply if we're declaring a
3825  // typedef (C++ [dcl.typedef]p4).
3826  if (Previous.isSingleTagDecl() &&
3827      D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_typedef)
3828    Previous.clear();
3829
3830  NamedDecl *New;
3831
3832  bool AddToScope = true;
3833  if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef) {
3834    if (TemplateParamLists.size()) {
3835      Diag(D.getIdentifierLoc(), diag::err_template_typedef);
3836      return 0;
3837    }
3838
3839    New = ActOnTypedefDeclarator(S, D, DC, TInfo, Previous);
3840  } else if (R->isFunctionType()) {
3841    New = ActOnFunctionDeclarator(S, D, DC, TInfo, Previous,
3842                                  TemplateParamLists,
3843                                  AddToScope);
3844  } else {
3845    New = ActOnVariableDeclarator(S, D, DC, TInfo, Previous,
3846                                  TemplateParamLists);
3847  }
3848
3849  if (New == 0)
3850    return 0;
3851
3852  // If this has an identifier and is not an invalid redeclaration or
3853  // function template specialization, add it to the scope stack.
3854  if (New->getDeclName() && AddToScope &&
3855       !(D.isRedeclaration() && New->isInvalidDecl()))
3856    PushOnScopeChains(New, S);
3857
3858  return New;
3859}
3860
3861/// Helper method to turn variable array types into constant array
3862/// types in certain situations which would otherwise be errors (for
3863/// GCC compatibility).
3864static QualType TryToFixInvalidVariablyModifiedType(QualType T,
3865                                                    ASTContext &Context,
3866                                                    bool &SizeIsNegative,
3867                                                    llvm::APSInt &Oversized) {
3868  // This method tries to turn a variable array into a constant
3869  // array even when the size isn't an ICE.  This is necessary
3870  // for compatibility with code that depends on gcc's buggy
3871  // constant expression folding, like struct {char x[(int)(char*)2];}
3872  SizeIsNegative = false;
3873  Oversized = 0;
3874
3875  if (T->isDependentType())
3876    return QualType();
3877
3878  QualifierCollector Qs;
3879  const Type *Ty = Qs.strip(T);
3880
3881  if (const PointerType* PTy = dyn_cast<PointerType>(Ty)) {
3882    QualType Pointee = PTy->getPointeeType();
3883    QualType FixedType =
3884        TryToFixInvalidVariablyModifiedType(Pointee, Context, SizeIsNegative,
3885                                            Oversized);
3886    if (FixedType.isNull()) return FixedType;
3887    FixedType = Context.getPointerType(FixedType);
3888    return Qs.apply(Context, FixedType);
3889  }
3890  if (const ParenType* PTy = dyn_cast<ParenType>(Ty)) {
3891    QualType Inner = PTy->getInnerType();
3892    QualType FixedType =
3893        TryToFixInvalidVariablyModifiedType(Inner, Context, SizeIsNegative,
3894                                            Oversized);
3895    if (FixedType.isNull()) return FixedType;
3896    FixedType = Context.getParenType(FixedType);
3897    return Qs.apply(Context, FixedType);
3898  }
3899
3900  const VariableArrayType* VLATy = dyn_cast<VariableArrayType>(T);
3901  if (!VLATy)
3902    return QualType();
3903  // FIXME: We should probably handle this case
3904  if (VLATy->getElementType()->isVariablyModifiedType())
3905    return QualType();
3906
3907  llvm::APSInt Res;
3908  if (!VLATy->getSizeExpr() ||
3909      !VLATy->getSizeExpr()->EvaluateAsInt(Res, Context))
3910    return QualType();
3911
3912  // Check whether the array size is negative.
3913  if (Res.isSigned() && Res.isNegative()) {
3914    SizeIsNegative = true;
3915    return QualType();
3916  }
3917
3918  // Check whether the array is too large to be addressed.
3919  unsigned ActiveSizeBits
3920    = ConstantArrayType::getNumAddressingBits(Context, VLATy->getElementType(),
3921                                              Res);
3922  if (ActiveSizeBits > ConstantArrayType::getMaxSizeBits(Context)) {
3923    Oversized = Res;
3924    return QualType();
3925  }
3926
3927  return Context.getConstantArrayType(VLATy->getElementType(),
3928                                      Res, ArrayType::Normal, 0);
3929}
3930
3931static void
3932FixInvalidVariablyModifiedTypeLoc(TypeLoc SrcTL, TypeLoc DstTL) {
3933  if (PointerTypeLoc* SrcPTL = dyn_cast<PointerTypeLoc>(&SrcTL)) {
3934    PointerTypeLoc* DstPTL = cast<PointerTypeLoc>(&DstTL);
3935    FixInvalidVariablyModifiedTypeLoc(SrcPTL->getPointeeLoc(),
3936                                      DstPTL->getPointeeLoc());
3937    DstPTL->setStarLoc(SrcPTL->getStarLoc());
3938    return;
3939  }
3940  if (ParenTypeLoc* SrcPTL = dyn_cast<ParenTypeLoc>(&SrcTL)) {
3941    ParenTypeLoc* DstPTL = cast<ParenTypeLoc>(&DstTL);
3942    FixInvalidVariablyModifiedTypeLoc(SrcPTL->getInnerLoc(),
3943                                      DstPTL->getInnerLoc());
3944    DstPTL->setLParenLoc(SrcPTL->getLParenLoc());
3945    DstPTL->setRParenLoc(SrcPTL->getRParenLoc());
3946    return;
3947  }
3948  ArrayTypeLoc* SrcATL = cast<ArrayTypeLoc>(&SrcTL);
3949  ArrayTypeLoc* DstATL = cast<ArrayTypeLoc>(&DstTL);
3950  TypeLoc SrcElemTL = SrcATL->getElementLoc();
3951  TypeLoc DstElemTL = DstATL->getElementLoc();
3952  DstElemTL.initializeFullCopy(SrcElemTL);
3953  DstATL->setLBracketLoc(SrcATL->getLBracketLoc());
3954  DstATL->setSizeExpr(SrcATL->getSizeExpr());
3955  DstATL->setRBracketLoc(SrcATL->getRBracketLoc());
3956}
3957
3958/// Helper method to turn variable array types into constant array
3959/// types in certain situations which would otherwise be errors (for
3960/// GCC compatibility).
3961static TypeSourceInfo*
3962TryToFixInvalidVariablyModifiedTypeSourceInfo(TypeSourceInfo *TInfo,
3963                                              ASTContext &Context,
3964                                              bool &SizeIsNegative,
3965                                              llvm::APSInt &Oversized) {
3966  QualType FixedTy
3967    = TryToFixInvalidVariablyModifiedType(TInfo->getType(), Context,
3968                                          SizeIsNegative, Oversized);
3969  if (FixedTy.isNull())
3970    return 0;
3971  TypeSourceInfo *FixedTInfo = Context.getTrivialTypeSourceInfo(FixedTy);
3972  FixInvalidVariablyModifiedTypeLoc(TInfo->getTypeLoc(),
3973                                    FixedTInfo->getTypeLoc());
3974  return FixedTInfo;
3975}
3976
3977/// \brief Register the given locally-scoped external C declaration so
3978/// that it can be found later for redeclarations
3979void
3980Sema::RegisterLocallyScopedExternCDecl(NamedDecl *ND,
3981                                       const LookupResult &Previous,
3982                                       Scope *S) {
3983  assert(ND->getLexicalDeclContext()->isFunctionOrMethod() &&
3984         "Decl is not a locally-scoped decl!");
3985  // Note that we have a locally-scoped external with this name.
3986  LocallyScopedExternalDecls[ND->getDeclName()] = ND;
3987
3988  if (!Previous.isSingleResult())
3989    return;
3990
3991  NamedDecl *PrevDecl = Previous.getFoundDecl();
3992
3993  // If there was a previous declaration of this variable, it may be
3994  // in our identifier chain. Update the identifier chain with the new
3995  // declaration.
3996  if (S && IdResolver.ReplaceDecl(PrevDecl, ND)) {
3997    // The previous declaration was found on the identifer resolver
3998    // chain, so remove it from its scope.
3999
4000    if (S->isDeclScope(PrevDecl)) {
4001      // Special case for redeclarations in the SAME scope.
4002      // Because this declaration is going to be added to the identifier chain
4003      // later, we should temporarily take it OFF the chain.
4004      IdResolver.RemoveDecl(ND);
4005
4006    } else {
4007      // Find the scope for the original declaration.
4008      while (S && !S->isDeclScope(PrevDecl))
4009        S = S->getParent();
4010    }
4011
4012    if (S)
4013      S->RemoveDecl(PrevDecl);
4014  }
4015}
4016
4017llvm::DenseMap<DeclarationName, NamedDecl *>::iterator
4018Sema::findLocallyScopedExternalDecl(DeclarationName Name) {
4019  if (ExternalSource) {
4020    // Load locally-scoped external decls from the external source.
4021    SmallVector<NamedDecl *, 4> Decls;
4022    ExternalSource->ReadLocallyScopedExternalDecls(Decls);
4023    for (unsigned I = 0, N = Decls.size(); I != N; ++I) {
4024      llvm::DenseMap<DeclarationName, NamedDecl *>::iterator Pos
4025        = LocallyScopedExternalDecls.find(Decls[I]->getDeclName());
4026      if (Pos == LocallyScopedExternalDecls.end())
4027        LocallyScopedExternalDecls[Decls[I]->getDeclName()] = Decls[I];
4028    }
4029  }
4030
4031  return LocallyScopedExternalDecls.find(Name);
4032}
4033
4034/// \brief Diagnose function specifiers on a declaration of an identifier that
4035/// does not identify a function.
4036void Sema::DiagnoseFunctionSpecifiers(Declarator& D) {
4037  // FIXME: We should probably indicate the identifier in question to avoid
4038  // confusion for constructs like "inline int a(), b;"
4039  if (D.getDeclSpec().isInlineSpecified())
4040    Diag(D.getDeclSpec().getInlineSpecLoc(),
4041         diag::err_inline_non_function);
4042
4043  if (D.getDeclSpec().isVirtualSpecified())
4044    Diag(D.getDeclSpec().getVirtualSpecLoc(),
4045         diag::err_virtual_non_function);
4046
4047  if (D.getDeclSpec().isExplicitSpecified())
4048    Diag(D.getDeclSpec().getExplicitSpecLoc(),
4049         diag::err_explicit_non_function);
4050}
4051
4052NamedDecl*
4053Sema::ActOnTypedefDeclarator(Scope* S, Declarator& D, DeclContext* DC,
4054                             TypeSourceInfo *TInfo, LookupResult &Previous) {
4055  // Typedef declarators cannot be qualified (C++ [dcl.meaning]p1).
4056  if (D.getCXXScopeSpec().isSet()) {
4057    Diag(D.getIdentifierLoc(), diag::err_qualified_typedef_declarator)
4058      << D.getCXXScopeSpec().getRange();
4059    D.setInvalidType();
4060    // Pretend we didn't see the scope specifier.
4061    DC = CurContext;
4062    Previous.clear();
4063  }
4064
4065  if (getLangOpts().CPlusPlus) {
4066    // Check that there are no default arguments (C++ only).
4067    CheckExtraCXXDefaultArguments(D);
4068  }
4069
4070  DiagnoseFunctionSpecifiers(D);
4071
4072  if (D.getDeclSpec().isThreadSpecified())
4073    Diag(D.getDeclSpec().getThreadSpecLoc(), diag::err_invalid_thread);
4074  if (D.getDeclSpec().isConstexprSpecified())
4075    Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_invalid_constexpr)
4076      << 1;
4077
4078  if (D.getName().Kind != UnqualifiedId::IK_Identifier) {
4079    Diag(D.getName().StartLocation, diag::err_typedef_not_identifier)
4080      << D.getName().getSourceRange();
4081    return 0;
4082  }
4083
4084  TypedefDecl *NewTD = ParseTypedefDecl(S, D, TInfo->getType(), TInfo);
4085  if (!NewTD) return 0;
4086
4087  // Handle attributes prior to checking for duplicates in MergeVarDecl
4088  ProcessDeclAttributes(S, NewTD, D);
4089
4090  CheckTypedefForVariablyModifiedType(S, NewTD);
4091
4092  bool Redeclaration = D.isRedeclaration();
4093  NamedDecl *ND = ActOnTypedefNameDecl(S, DC, NewTD, Previous, Redeclaration);
4094  D.setRedeclaration(Redeclaration);
4095  return ND;
4096}
4097
4098void
4099Sema::CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *NewTD) {
4100  // C99 6.7.7p2: If a typedef name specifies a variably modified type
4101  // then it shall have block scope.
4102  // Note that variably modified types must be fixed before merging the decl so
4103  // that redeclarations will match.
4104  TypeSourceInfo *TInfo = NewTD->getTypeSourceInfo();
4105  QualType T = TInfo->getType();
4106  if (T->isVariablyModifiedType()) {
4107    getCurFunction()->setHasBranchProtectedScope();
4108
4109    if (S->getFnParent() == 0) {
4110      bool SizeIsNegative;
4111      llvm::APSInt Oversized;
4112      TypeSourceInfo *FixedTInfo =
4113        TryToFixInvalidVariablyModifiedTypeSourceInfo(TInfo, Context,
4114                                                      SizeIsNegative,
4115                                                      Oversized);
4116      if (FixedTInfo) {
4117        Diag(NewTD->getLocation(), diag::warn_illegal_constant_array_size);
4118        NewTD->setTypeSourceInfo(FixedTInfo);
4119      } else {
4120        if (SizeIsNegative)
4121          Diag(NewTD->getLocation(), diag::err_typecheck_negative_array_size);
4122        else if (T->isVariableArrayType())
4123          Diag(NewTD->getLocation(), diag::err_vla_decl_in_file_scope);
4124        else if (Oversized.getBoolValue())
4125          Diag(NewTD->getLocation(), diag::err_array_too_large)
4126            << Oversized.toString(10);
4127        else
4128          Diag(NewTD->getLocation(), diag::err_vm_decl_in_file_scope);
4129        NewTD->setInvalidDecl();
4130      }
4131    }
4132  }
4133}
4134
4135
4136/// ActOnTypedefNameDecl - Perform semantic checking for a declaration which
4137/// declares a typedef-name, either using the 'typedef' type specifier or via
4138/// a C++0x [dcl.typedef]p2 alias-declaration: 'using T = A;'.
4139NamedDecl*
4140Sema::ActOnTypedefNameDecl(Scope *S, DeclContext *DC, TypedefNameDecl *NewTD,
4141                           LookupResult &Previous, bool &Redeclaration) {
4142  // Merge the decl with the existing one if appropriate. If the decl is
4143  // in an outer scope, it isn't the same thing.
4144  FilterLookupForScope(Previous, DC, S, /*ConsiderLinkage*/ false,
4145                       /*ExplicitInstantiationOrSpecialization=*/false);
4146  if (!Previous.empty()) {
4147    Redeclaration = true;
4148    MergeTypedefNameDecl(NewTD, Previous);
4149  }
4150
4151  // If this is the C FILE type, notify the AST context.
4152  if (IdentifierInfo *II = NewTD->getIdentifier())
4153    if (!NewTD->isInvalidDecl() &&
4154        NewTD->getDeclContext()->getRedeclContext()->isTranslationUnit()) {
4155      if (II->isStr("FILE"))
4156        Context.setFILEDecl(NewTD);
4157      else if (II->isStr("jmp_buf"))
4158        Context.setjmp_bufDecl(NewTD);
4159      else if (II->isStr("sigjmp_buf"))
4160        Context.setsigjmp_bufDecl(NewTD);
4161      else if (II->isStr("ucontext_t"))
4162        Context.setucontext_tDecl(NewTD);
4163    }
4164
4165  return NewTD;
4166}
4167
4168/// \brief Determines whether the given declaration is an out-of-scope
4169/// previous declaration.
4170///
4171/// This routine should be invoked when name lookup has found a
4172/// previous declaration (PrevDecl) that is not in the scope where a
4173/// new declaration by the same name is being introduced. If the new
4174/// declaration occurs in a local scope, previous declarations with
4175/// linkage may still be considered previous declarations (C99
4176/// 6.2.2p4-5, C++ [basic.link]p6).
4177///
4178/// \param PrevDecl the previous declaration found by name
4179/// lookup
4180///
4181/// \param DC the context in which the new declaration is being
4182/// declared.
4183///
4184/// \returns true if PrevDecl is an out-of-scope previous declaration
4185/// for a new delcaration with the same name.
4186static bool
4187isOutOfScopePreviousDeclaration(NamedDecl *PrevDecl, DeclContext *DC,
4188                                ASTContext &Context) {
4189  if (!PrevDecl)
4190    return false;
4191
4192  if (!PrevDecl->hasLinkage())
4193    return false;
4194
4195  if (Context.getLangOpts().CPlusPlus) {
4196    // C++ [basic.link]p6:
4197    //   If there is a visible declaration of an entity with linkage
4198    //   having the same name and type, ignoring entities declared
4199    //   outside the innermost enclosing namespace scope, the block
4200    //   scope declaration declares that same entity and receives the
4201    //   linkage of the previous declaration.
4202    DeclContext *OuterContext = DC->getRedeclContext();
4203    if (!OuterContext->isFunctionOrMethod())
4204      // This rule only applies to block-scope declarations.
4205      return false;
4206
4207    DeclContext *PrevOuterContext = PrevDecl->getDeclContext();
4208    if (PrevOuterContext->isRecord())
4209      // We found a member function: ignore it.
4210      return false;
4211
4212    // Find the innermost enclosing namespace for the new and
4213    // previous declarations.
4214    OuterContext = OuterContext->getEnclosingNamespaceContext();
4215    PrevOuterContext = PrevOuterContext->getEnclosingNamespaceContext();
4216
4217    // The previous declaration is in a different namespace, so it
4218    // isn't the same function.
4219    if (!OuterContext->Equals(PrevOuterContext))
4220      return false;
4221  }
4222
4223  return true;
4224}
4225
4226static void SetNestedNameSpecifier(DeclaratorDecl *DD, Declarator &D) {
4227  CXXScopeSpec &SS = D.getCXXScopeSpec();
4228  if (!SS.isSet()) return;
4229  DD->setQualifierInfo(SS.getWithLocInContext(DD->getASTContext()));
4230}
4231
4232bool Sema::inferObjCARCLifetime(ValueDecl *decl) {
4233  QualType type = decl->getType();
4234  Qualifiers::ObjCLifetime lifetime = type.getObjCLifetime();
4235  if (lifetime == Qualifiers::OCL_Autoreleasing) {
4236    // Various kinds of declaration aren't allowed to be __autoreleasing.
4237    unsigned kind = -1U;
4238    if (VarDecl *var = dyn_cast<VarDecl>(decl)) {
4239      if (var->hasAttr<BlocksAttr>())
4240        kind = 0; // __block
4241      else if (!var->hasLocalStorage())
4242        kind = 1; // global
4243    } else if (isa<ObjCIvarDecl>(decl)) {
4244      kind = 3; // ivar
4245    } else if (isa<FieldDecl>(decl)) {
4246      kind = 2; // field
4247    }
4248
4249    if (kind != -1U) {
4250      Diag(decl->getLocation(), diag::err_arc_autoreleasing_var)
4251        << kind;
4252    }
4253  } else if (lifetime == Qualifiers::OCL_None) {
4254    // Try to infer lifetime.
4255    if (!type->isObjCLifetimeType())
4256      return false;
4257
4258    lifetime = type->getObjCARCImplicitLifetime();
4259    type = Context.getLifetimeQualifiedType(type, lifetime);
4260    decl->setType(type);
4261  }
4262
4263  if (VarDecl *var = dyn_cast<VarDecl>(decl)) {
4264    // Thread-local variables cannot have lifetime.
4265    if (lifetime && lifetime != Qualifiers::OCL_ExplicitNone &&
4266        var->isThreadSpecified()) {
4267      Diag(var->getLocation(), diag::err_arc_thread_ownership)
4268        << var->getType();
4269      return true;
4270    }
4271  }
4272
4273  return false;
4274}
4275
4276NamedDecl*
4277Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC,
4278                              TypeSourceInfo *TInfo, LookupResult &Previous,
4279                              MultiTemplateParamsArg TemplateParamLists) {
4280  QualType R = TInfo->getType();
4281  DeclarationName Name = GetNameForDeclarator(D).getName();
4282
4283  // Check that there are no default arguments (C++ only).
4284  if (getLangOpts().CPlusPlus)
4285    CheckExtraCXXDefaultArguments(D);
4286
4287  DeclSpec::SCS SCSpec = D.getDeclSpec().getStorageClassSpec();
4288  assert(SCSpec != DeclSpec::SCS_typedef &&
4289         "Parser allowed 'typedef' as storage class VarDecl.");
4290  VarDecl::StorageClass SC = StorageClassSpecToVarDeclStorageClass(SCSpec);
4291  if (SCSpec == DeclSpec::SCS_mutable) {
4292    // mutable can only appear on non-static class members, so it's always
4293    // an error here
4294    Diag(D.getIdentifierLoc(), diag::err_mutable_nonmember);
4295    D.setInvalidType();
4296    SC = SC_None;
4297  }
4298  SCSpec = D.getDeclSpec().getStorageClassSpecAsWritten();
4299  VarDecl::StorageClass SCAsWritten
4300    = StorageClassSpecToVarDeclStorageClass(SCSpec);
4301
4302  IdentifierInfo *II = Name.getAsIdentifierInfo();
4303  if (!II) {
4304    Diag(D.getIdentifierLoc(), diag::err_bad_variable_name)
4305      << Name;
4306    return 0;
4307  }
4308
4309  DiagnoseFunctionSpecifiers(D);
4310
4311  if (!DC->isRecord() && S->getFnParent() == 0) {
4312    // C99 6.9p2: The storage-class specifiers auto and register shall not
4313    // appear in the declaration specifiers in an external declaration.
4314    if (SC == SC_Auto || SC == SC_Register) {
4315
4316      // If this is a register variable with an asm label specified, then this
4317      // is a GNU extension.
4318      if (SC == SC_Register && D.getAsmLabel())
4319        Diag(D.getIdentifierLoc(), diag::err_unsupported_global_register);
4320      else
4321        Diag(D.getIdentifierLoc(), diag::err_typecheck_sclass_fscope);
4322      D.setInvalidType();
4323    }
4324  }
4325
4326  if (getLangOpts().OpenCL) {
4327    // Set up the special work-group-local storage class for variables in the
4328    // OpenCL __local address space.
4329    if (R.getAddressSpace() == LangAS::opencl_local) {
4330      SC = SC_OpenCLWorkGroupLocal;
4331      SCAsWritten = SC_OpenCLWorkGroupLocal;
4332    }
4333  }
4334
4335  bool isExplicitSpecialization = false;
4336  VarDecl *NewVD;
4337  if (!getLangOpts().CPlusPlus) {
4338    NewVD = VarDecl::Create(Context, DC, D.getLocStart(),
4339                            D.getIdentifierLoc(), II,
4340                            R, TInfo, SC, SCAsWritten);
4341
4342    if (D.isInvalidType())
4343      NewVD->setInvalidDecl();
4344  } else {
4345    if (DC->isRecord() && !CurContext->isRecord()) {
4346      // This is an out-of-line definition of a static data member.
4347      if (SC == SC_Static) {
4348        Diag(D.getDeclSpec().getStorageClassSpecLoc(),
4349             diag::err_static_out_of_line)
4350          << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());
4351      } else if (SC == SC_None)
4352        SC = SC_Static;
4353    }
4354    if (SC == SC_Static && CurContext->isRecord()) {
4355      if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {
4356        if (RD->isLocalClass())
4357          Diag(D.getIdentifierLoc(),
4358               diag::err_static_data_member_not_allowed_in_local_class)
4359            << Name << RD->getDeclName();
4360
4361        // C++98 [class.union]p1: If a union contains a static data member,
4362        // the program is ill-formed. C++11 drops this restriction.
4363        if (RD->isUnion())
4364          Diag(D.getIdentifierLoc(),
4365               getLangOpts().CPlusPlus11
4366                 ? diag::warn_cxx98_compat_static_data_member_in_union
4367                 : diag::ext_static_data_member_in_union) << Name;
4368        // We conservatively disallow static data members in anonymous structs.
4369        else if (!RD->getDeclName())
4370          Diag(D.getIdentifierLoc(),
4371               diag::err_static_data_member_not_allowed_in_anon_struct)
4372            << Name << RD->isUnion();
4373      }
4374    }
4375
4376    // Match up the template parameter lists with the scope specifier, then
4377    // determine whether we have a template or a template specialization.
4378    isExplicitSpecialization = false;
4379    bool Invalid = false;
4380    if (TemplateParameterList *TemplateParams
4381        = MatchTemplateParametersToScopeSpecifier(
4382                                  D.getDeclSpec().getLocStart(),
4383                                                  D.getIdentifierLoc(),
4384                                                  D.getCXXScopeSpec(),
4385                                                  TemplateParamLists.data(),
4386                                                  TemplateParamLists.size(),
4387                                                  /*never a friend*/ false,
4388                                                  isExplicitSpecialization,
4389                                                  Invalid)) {
4390      if (TemplateParams->size() > 0) {
4391        // There is no such thing as a variable template.
4392        Diag(D.getIdentifierLoc(), diag::err_template_variable)
4393          << II
4394          << SourceRange(TemplateParams->getTemplateLoc(),
4395                         TemplateParams->getRAngleLoc());
4396        return 0;
4397      } else {
4398        // There is an extraneous 'template<>' for this variable. Complain
4399        // about it, but allow the declaration of the variable.
4400        Diag(TemplateParams->getTemplateLoc(),
4401             diag::err_template_variable_noparams)
4402          << II
4403          << SourceRange(TemplateParams->getTemplateLoc(),
4404                         TemplateParams->getRAngleLoc());
4405      }
4406    }
4407
4408    NewVD = VarDecl::Create(Context, DC, D.getLocStart(),
4409                            D.getIdentifierLoc(), II,
4410                            R, TInfo, SC, SCAsWritten);
4411
4412    // If this decl has an auto type in need of deduction, make a note of the
4413    // Decl so we can diagnose uses of it in its own initializer.
4414    if (D.getDeclSpec().getTypeSpecType() == DeclSpec::TST_auto &&
4415        R->getContainedAutoType())
4416      ParsingInitForAutoVars.insert(NewVD);
4417
4418    if (D.isInvalidType() || Invalid)
4419      NewVD->setInvalidDecl();
4420
4421    SetNestedNameSpecifier(NewVD, D);
4422
4423    if (TemplateParamLists.size() > 0 && D.getCXXScopeSpec().isSet()) {
4424      NewVD->setTemplateParameterListsInfo(Context,
4425                                           TemplateParamLists.size(),
4426                                           TemplateParamLists.data());
4427    }
4428
4429    if (D.getDeclSpec().isConstexprSpecified())
4430      NewVD->setConstexpr(true);
4431  }
4432
4433  // Set the lexical context. If the declarator has a C++ scope specifier, the
4434  // lexical context will be different from the semantic context.
4435  NewVD->setLexicalDeclContext(CurContext);
4436
4437  if (D.getDeclSpec().isThreadSpecified()) {
4438    if (NewVD->hasLocalStorage())
4439      Diag(D.getDeclSpec().getThreadSpecLoc(), diag::err_thread_non_global);
4440    else if (!Context.getTargetInfo().isTLSSupported())
4441      Diag(D.getDeclSpec().getThreadSpecLoc(), diag::err_thread_unsupported);
4442    else
4443      NewVD->setThreadSpecified(true);
4444  }
4445
4446  if (D.getDeclSpec().isModulePrivateSpecified()) {
4447    if (isExplicitSpecialization)
4448      Diag(NewVD->getLocation(), diag::err_module_private_specialization)
4449        << 2
4450        << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());
4451    else if (NewVD->hasLocalStorage())
4452      Diag(NewVD->getLocation(), diag::err_module_private_local)
4453        << 0 << NewVD->getDeclName()
4454        << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc())
4455        << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());
4456    else
4457      NewVD->setModulePrivate();
4458  }
4459
4460  // Handle attributes prior to checking for duplicates in MergeVarDecl
4461  ProcessDeclAttributes(S, NewVD, D);
4462
4463  if (getLangOpts().CUDA) {
4464    // CUDA B.2.5: "__shared__ and __constant__ variables have implied static
4465    // storage [duration]."
4466    if (SC == SC_None && S->getFnParent() != 0 &&
4467        (NewVD->hasAttr<CUDASharedAttr>() ||
4468         NewVD->hasAttr<CUDAConstantAttr>())) {
4469      NewVD->setStorageClass(SC_Static);
4470      NewVD->setStorageClassAsWritten(SC_Static);
4471    }
4472  }
4473
4474  // In auto-retain/release, infer strong retension for variables of
4475  // retainable type.
4476  if (getLangOpts().ObjCAutoRefCount && inferObjCARCLifetime(NewVD))
4477    NewVD->setInvalidDecl();
4478
4479  // Handle GNU asm-label extension (encoded as an attribute).
4480  if (Expr *E = (Expr*)D.getAsmLabel()) {
4481    // The parser guarantees this is a string.
4482    StringLiteral *SE = cast<StringLiteral>(E);
4483    StringRef Label = SE->getString();
4484    if (S->getFnParent() != 0) {
4485      switch (SC) {
4486      case SC_None:
4487      case SC_Auto:
4488        Diag(E->getExprLoc(), diag::warn_asm_label_on_auto_decl) << Label;
4489        break;
4490      case SC_Register:
4491        if (!Context.getTargetInfo().isValidGCCRegisterName(Label))
4492          Diag(E->getExprLoc(), diag::err_asm_unknown_register_name) << Label;
4493        break;
4494      case SC_Static:
4495      case SC_Extern:
4496      case SC_PrivateExtern:
4497      case SC_OpenCLWorkGroupLocal:
4498        break;
4499      }
4500    }
4501
4502    NewVD->addAttr(::new (Context) AsmLabelAttr(SE->getStrTokenLoc(0),
4503                                                Context, Label));
4504  } else if (!ExtnameUndeclaredIdentifiers.empty()) {
4505    llvm::DenseMap<IdentifierInfo*,AsmLabelAttr*>::iterator I =
4506      ExtnameUndeclaredIdentifiers.find(NewVD->getIdentifier());
4507    if (I != ExtnameUndeclaredIdentifiers.end()) {
4508      NewVD->addAttr(I->second);
4509      ExtnameUndeclaredIdentifiers.erase(I);
4510    }
4511  }
4512
4513  // Diagnose shadowed variables before filtering for scope.
4514  if (!D.getCXXScopeSpec().isSet())
4515    CheckShadow(S, NewVD, Previous);
4516
4517  // Don't consider existing declarations that are in a different
4518  // scope and are out-of-semantic-context declarations (if the new
4519  // declaration has linkage).
4520  FilterLookupForScope(Previous, DC, S, NewVD->hasLinkage(),
4521                       isExplicitSpecialization);
4522
4523  if (!getLangOpts().CPlusPlus) {
4524    D.setRedeclaration(CheckVariableDeclaration(NewVD, Previous));
4525  } else {
4526    // Merge the decl with the existing one if appropriate.
4527    if (!Previous.empty()) {
4528      if (Previous.isSingleResult() &&
4529          isa<FieldDecl>(Previous.getFoundDecl()) &&
4530          D.getCXXScopeSpec().isSet()) {
4531        // The user tried to define a non-static data member
4532        // out-of-line (C++ [dcl.meaning]p1).
4533        Diag(NewVD->getLocation(), diag::err_nonstatic_member_out_of_line)
4534          << D.getCXXScopeSpec().getRange();
4535        Previous.clear();
4536        NewVD->setInvalidDecl();
4537      }
4538    } else if (D.getCXXScopeSpec().isSet()) {
4539      // No previous declaration in the qualifying scope.
4540      Diag(D.getIdentifierLoc(), diag::err_no_member)
4541        << Name << computeDeclContext(D.getCXXScopeSpec(), true)
4542        << D.getCXXScopeSpec().getRange();
4543      NewVD->setInvalidDecl();
4544    }
4545
4546    D.setRedeclaration(CheckVariableDeclaration(NewVD, Previous));
4547
4548    // This is an explicit specialization of a static data member. Check it.
4549    if (isExplicitSpecialization && !NewVD->isInvalidDecl() &&
4550        CheckMemberSpecialization(NewVD, Previous))
4551      NewVD->setInvalidDecl();
4552  }
4553
4554  // If this is a locally-scoped extern C variable, update the map of
4555  // such variables.
4556  if (CurContext->isFunctionOrMethod() && NewVD->isExternC() &&
4557      !NewVD->isInvalidDecl())
4558    RegisterLocallyScopedExternCDecl(NewVD, Previous, S);
4559
4560  // If there's a #pragma GCC visibility in scope, and this isn't a class
4561  // member, set the visibility of this variable.
4562  if (NewVD->getLinkage() == ExternalLinkage && !DC->isRecord())
4563    AddPushedVisibilityAttribute(NewVD);
4564
4565  return NewVD;
4566}
4567
4568/// \brief Diagnose variable or built-in function shadowing.  Implements
4569/// -Wshadow.
4570///
4571/// This method is called whenever a VarDecl is added to a "useful"
4572/// scope.
4573///
4574/// \param S the scope in which the shadowing name is being declared
4575/// \param R the lookup of the name
4576///
4577void Sema::CheckShadow(Scope *S, VarDecl *D, const LookupResult& R) {
4578  // Return if warning is ignored.
4579  if (Diags.getDiagnosticLevel(diag::warn_decl_shadow, R.getNameLoc()) ==
4580        DiagnosticsEngine::Ignored)
4581    return;
4582
4583  // Don't diagnose declarations at file scope.
4584  if (D->hasGlobalStorage())
4585    return;
4586
4587  DeclContext *NewDC = D->getDeclContext();
4588
4589  // Only diagnose if we're shadowing an unambiguous field or variable.
4590  if (R.getResultKind() != LookupResult::Found)
4591    return;
4592
4593  NamedDecl* ShadowedDecl = R.getFoundDecl();
4594  if (!isa<VarDecl>(ShadowedDecl) && !isa<FieldDecl>(ShadowedDecl))
4595    return;
4596
4597  // Fields are not shadowed by variables in C++ static methods.
4598  if (isa<FieldDecl>(ShadowedDecl))
4599    if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewDC))
4600      if (MD->isStatic())
4601        return;
4602
4603  if (VarDecl *shadowedVar = dyn_cast<VarDecl>(ShadowedDecl))
4604    if (shadowedVar->isExternC()) {
4605      // For shadowing external vars, make sure that we point to the global
4606      // declaration, not a locally scoped extern declaration.
4607      for (VarDecl::redecl_iterator
4608             I = shadowedVar->redecls_begin(), E = shadowedVar->redecls_end();
4609           I != E; ++I)
4610        if (I->isFileVarDecl()) {
4611          ShadowedDecl = *I;
4612          break;
4613        }
4614    }
4615
4616  DeclContext *OldDC = ShadowedDecl->getDeclContext();
4617
4618  // Only warn about certain kinds of shadowing for class members.
4619  if (NewDC && NewDC->isRecord()) {
4620    // In particular, don't warn about shadowing non-class members.
4621    if (!OldDC->isRecord())
4622      return;
4623
4624    // TODO: should we warn about static data members shadowing
4625    // static data members from base classes?
4626
4627    // TODO: don't diagnose for inaccessible shadowed members.
4628    // This is hard to do perfectly because we might friend the
4629    // shadowing context, but that's just a false negative.
4630  }
4631
4632  // Determine what kind of declaration we're shadowing.
4633  unsigned Kind;
4634  if (isa<RecordDecl>(OldDC)) {
4635    if (isa<FieldDecl>(ShadowedDecl))
4636      Kind = 3; // field
4637    else
4638      Kind = 2; // static data member
4639  } else if (OldDC->isFileContext())
4640    Kind = 1; // global
4641  else
4642    Kind = 0; // local
4643
4644  DeclarationName Name = R.getLookupName();
4645
4646  // Emit warning and note.
4647  Diag(R.getNameLoc(), diag::warn_decl_shadow) << Name << Kind << OldDC;
4648  Diag(ShadowedDecl->getLocation(), diag::note_previous_declaration);
4649}
4650
4651/// \brief Check -Wshadow without the advantage of a previous lookup.
4652void Sema::CheckShadow(Scope *S, VarDecl *D) {
4653  if (Diags.getDiagnosticLevel(diag::warn_decl_shadow, D->getLocation()) ==
4654        DiagnosticsEngine::Ignored)
4655    return;
4656
4657  LookupResult R(*this, D->getDeclName(), D->getLocation(),
4658                 Sema::LookupOrdinaryName, Sema::ForRedeclaration);
4659  LookupName(R, S);
4660  CheckShadow(S, D, R);
4661}
4662
4663/// \brief Perform semantic checking on a newly-created variable
4664/// declaration.
4665///
4666/// This routine performs all of the type-checking required for a
4667/// variable declaration once it has been built. It is used both to
4668/// check variables after they have been parsed and their declarators
4669/// have been translated into a declaration, and to check variables
4670/// that have been instantiated from a template.
4671///
4672/// Sets NewVD->isInvalidDecl() if an error was encountered.
4673///
4674/// Returns true if the variable declaration is a redeclaration.
4675bool Sema::CheckVariableDeclaration(VarDecl *NewVD,
4676                                    LookupResult &Previous) {
4677  // If the decl is already known invalid, don't check it.
4678  if (NewVD->isInvalidDecl())
4679    return false;
4680
4681  TypeSourceInfo *TInfo = NewVD->getTypeSourceInfo();
4682  QualType T = TInfo->getType();
4683
4684  if (T->isObjCObjectType()) {
4685    Diag(NewVD->getLocation(), diag::err_statically_allocated_object)
4686      << FixItHint::CreateInsertion(NewVD->getLocation(), "*");
4687    T = Context.getObjCObjectPointerType(T);
4688    NewVD->setType(T);
4689  }
4690
4691  // Emit an error if an address space was applied to decl with local storage.
4692  // This includes arrays of objects with address space qualifiers, but not
4693  // automatic variables that point to other address spaces.
4694  // ISO/IEC TR 18037 S5.1.2
4695  if (NewVD->hasLocalStorage() && T.getAddressSpace() != 0) {
4696    Diag(NewVD->getLocation(), diag::err_as_qualified_auto_decl);
4697    NewVD->setInvalidDecl();
4698    return false;
4699  }
4700
4701  // OpenCL v1.2 s6.8 -- The static qualifier is valid only in program
4702  // scope.
4703  if ((getLangOpts().OpenCLVersion >= 120)
4704      && NewVD->isStaticLocal()) {
4705    Diag(NewVD->getLocation(), diag::err_static_function_scope);
4706    NewVD->setInvalidDecl();
4707    return false;
4708  }
4709
4710  if (NewVD->hasLocalStorage() && T.isObjCGCWeak()
4711      && !NewVD->hasAttr<BlocksAttr>()) {
4712    if (getLangOpts().getGC() != LangOptions::NonGC)
4713      Diag(NewVD->getLocation(), diag::warn_gc_attribute_weak_on_local);
4714    else {
4715      assert(!getLangOpts().ObjCAutoRefCount);
4716      Diag(NewVD->getLocation(), diag::warn_attribute_weak_on_local);
4717    }
4718  }
4719
4720  bool isVM = T->isVariablyModifiedType();
4721  if (isVM || NewVD->hasAttr<CleanupAttr>() ||
4722      NewVD->hasAttr<BlocksAttr>())
4723    getCurFunction()->setHasBranchProtectedScope();
4724
4725  if ((isVM && NewVD->hasLinkage()) ||
4726      (T->isVariableArrayType() && NewVD->hasGlobalStorage())) {
4727    bool SizeIsNegative;
4728    llvm::APSInt Oversized;
4729    TypeSourceInfo *FixedTInfo =
4730      TryToFixInvalidVariablyModifiedTypeSourceInfo(TInfo, Context,
4731                                                    SizeIsNegative, Oversized);
4732    if (FixedTInfo == 0 && T->isVariableArrayType()) {
4733      const VariableArrayType *VAT = Context.getAsVariableArrayType(T);
4734      // FIXME: This won't give the correct result for
4735      // int a[10][n];
4736      SourceRange SizeRange = VAT->getSizeExpr()->getSourceRange();
4737
4738      if (NewVD->isFileVarDecl())
4739        Diag(NewVD->getLocation(), diag::err_vla_decl_in_file_scope)
4740        << SizeRange;
4741      else if (NewVD->getStorageClass() == SC_Static)
4742        Diag(NewVD->getLocation(), diag::err_vla_decl_has_static_storage)
4743        << SizeRange;
4744      else
4745        Diag(NewVD->getLocation(), diag::err_vla_decl_has_extern_linkage)
4746        << SizeRange;
4747      NewVD->setInvalidDecl();
4748      return false;
4749    }
4750
4751    if (FixedTInfo == 0) {
4752      if (NewVD->isFileVarDecl())
4753        Diag(NewVD->getLocation(), diag::err_vm_decl_in_file_scope);
4754      else
4755        Diag(NewVD->getLocation(), diag::err_vm_decl_has_extern_linkage);
4756      NewVD->setInvalidDecl();
4757      return false;
4758    }
4759
4760    Diag(NewVD->getLocation(), diag::warn_illegal_constant_array_size);
4761    NewVD->setType(FixedTInfo->getType());
4762    NewVD->setTypeSourceInfo(FixedTInfo);
4763  }
4764
4765  if (Previous.empty() && NewVD->isExternC()) {
4766    // Since we did not find anything by this name and we're declaring
4767    // an extern "C" variable, look for a non-visible extern "C"
4768    // declaration with the same name.
4769    llvm::DenseMap<DeclarationName, NamedDecl *>::iterator Pos
4770      = findLocallyScopedExternalDecl(NewVD->getDeclName());
4771    if (Pos != LocallyScopedExternalDecls.end())
4772      Previous.addDecl(Pos->second);
4773  }
4774
4775  if (T->isVoidType() && !NewVD->hasExternalStorage()) {
4776    Diag(NewVD->getLocation(), diag::err_typecheck_decl_incomplete_type)
4777      << T;
4778    NewVD->setInvalidDecl();
4779    return false;
4780  }
4781
4782  if (!NewVD->hasLocalStorage() && NewVD->hasAttr<BlocksAttr>()) {
4783    Diag(NewVD->getLocation(), diag::err_block_on_nonlocal);
4784    NewVD->setInvalidDecl();
4785    return false;
4786  }
4787
4788  if (isVM && NewVD->hasAttr<BlocksAttr>()) {
4789    Diag(NewVD->getLocation(), diag::err_block_on_vm);
4790    NewVD->setInvalidDecl();
4791    return false;
4792  }
4793
4794  if (NewVD->isConstexpr() && !T->isDependentType() &&
4795      RequireLiteralType(NewVD->getLocation(), T,
4796                         diag::err_constexpr_var_non_literal)) {
4797    NewVD->setInvalidDecl();
4798    return false;
4799  }
4800
4801  if (!Previous.empty()) {
4802    MergeVarDecl(NewVD, Previous);
4803    return true;
4804  }
4805  return false;
4806}
4807
4808/// \brief Data used with FindOverriddenMethod
4809struct FindOverriddenMethodData {
4810  Sema *S;
4811  CXXMethodDecl *Method;
4812};
4813
4814/// \brief Member lookup function that determines whether a given C++
4815/// method overrides a method in a base class, to be used with
4816/// CXXRecordDecl::lookupInBases().
4817static bool FindOverriddenMethod(const CXXBaseSpecifier *Specifier,
4818                                 CXXBasePath &Path,
4819                                 void *UserData) {
4820  RecordDecl *BaseRecord = Specifier->getType()->getAs<RecordType>()->getDecl();
4821
4822  FindOverriddenMethodData *Data
4823    = reinterpret_cast<FindOverriddenMethodData*>(UserData);
4824
4825  DeclarationName Name = Data->Method->getDeclName();
4826
4827  // FIXME: Do we care about other names here too?
4828  if (Name.getNameKind() == DeclarationName::CXXDestructorName) {
4829    // We really want to find the base class destructor here.
4830    QualType T = Data->S->Context.getTypeDeclType(BaseRecord);
4831    CanQualType CT = Data->S->Context.getCanonicalType(T);
4832
4833    Name = Data->S->Context.DeclarationNames.getCXXDestructorName(CT);
4834  }
4835
4836  for (Path.Decls = BaseRecord->lookup(Name);
4837       !Path.Decls.empty();
4838       Path.Decls = Path.Decls.slice(1)) {
4839    NamedDecl *D = Path.Decls.front();
4840    if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D)) {
4841      if (MD->isVirtual() && !Data->S->IsOverload(Data->Method, MD, false))
4842        return true;
4843    }
4844  }
4845
4846  return false;
4847}
4848
4849namespace {
4850  enum OverrideErrorKind { OEK_All, OEK_NonDeleted, OEK_Deleted };
4851}
4852/// \brief Report an error regarding overriding, along with any relevant
4853/// overriden methods.
4854///
4855/// \param DiagID the primary error to report.
4856/// \param MD the overriding method.
4857/// \param OEK which overrides to include as notes.
4858static void ReportOverrides(Sema& S, unsigned DiagID, const CXXMethodDecl *MD,
4859                            OverrideErrorKind OEK = OEK_All) {
4860  S.Diag(MD->getLocation(), DiagID) << MD->getDeclName();
4861  for (CXXMethodDecl::method_iterator I = MD->begin_overridden_methods(),
4862                                      E = MD->end_overridden_methods();
4863       I != E; ++I) {
4864    // This check (& the OEK parameter) could be replaced by a predicate, but
4865    // without lambdas that would be overkill. This is still nicer than writing
4866    // out the diag loop 3 times.
4867    if ((OEK == OEK_All) ||
4868        (OEK == OEK_NonDeleted && !(*I)->isDeleted()) ||
4869        (OEK == OEK_Deleted && (*I)->isDeleted()))
4870      S.Diag((*I)->getLocation(), diag::note_overridden_virtual_function);
4871  }
4872}
4873
4874/// AddOverriddenMethods - See if a method overrides any in the base classes,
4875/// and if so, check that it's a valid override and remember it.
4876bool Sema::AddOverriddenMethods(CXXRecordDecl *DC, CXXMethodDecl *MD) {
4877  // Look for virtual methods in base classes that this method might override.
4878  CXXBasePaths Paths;
4879  FindOverriddenMethodData Data;
4880  Data.Method = MD;
4881  Data.S = this;
4882  bool hasDeletedOverridenMethods = false;
4883  bool hasNonDeletedOverridenMethods = false;
4884  bool AddedAny = false;
4885  if (DC->lookupInBases(&FindOverriddenMethod, &Data, Paths)) {
4886    for (CXXBasePaths::decl_iterator I = Paths.found_decls_begin(),
4887         E = Paths.found_decls_end(); I != E; ++I) {
4888      if (CXXMethodDecl *OldMD = dyn_cast<CXXMethodDecl>(*I)) {
4889        MD->addOverriddenMethod(OldMD->getCanonicalDecl());
4890        if (!CheckOverridingFunctionReturnType(MD, OldMD) &&
4891            !CheckOverridingFunctionAttributes(MD, OldMD) &&
4892            !CheckOverridingFunctionExceptionSpec(MD, OldMD) &&
4893            !CheckIfOverriddenFunctionIsMarkedFinal(MD, OldMD)) {
4894          hasDeletedOverridenMethods |= OldMD->isDeleted();
4895          hasNonDeletedOverridenMethods |= !OldMD->isDeleted();
4896          AddedAny = true;
4897        }
4898      }
4899    }
4900  }
4901
4902  if (hasDeletedOverridenMethods && !MD->isDeleted()) {
4903    ReportOverrides(*this, diag::err_non_deleted_override, MD, OEK_Deleted);
4904  }
4905  if (hasNonDeletedOverridenMethods && MD->isDeleted()) {
4906    ReportOverrides(*this, diag::err_deleted_override, MD, OEK_NonDeleted);
4907  }
4908
4909  return AddedAny;
4910}
4911
4912namespace {
4913  // Struct for holding all of the extra arguments needed by
4914  // DiagnoseInvalidRedeclaration to call Sema::ActOnFunctionDeclarator.
4915  struct ActOnFDArgs {
4916    Scope *S;
4917    Declarator &D;
4918    MultiTemplateParamsArg TemplateParamLists;
4919    bool AddToScope;
4920  };
4921}
4922
4923namespace {
4924
4925// Callback to only accept typo corrections that have a non-zero edit distance.
4926// Also only accept corrections that have the same parent decl.
4927class DifferentNameValidatorCCC : public CorrectionCandidateCallback {
4928 public:
4929  DifferentNameValidatorCCC(ASTContext &Context, FunctionDecl *TypoFD,
4930                            CXXRecordDecl *Parent)
4931      : Context(Context), OriginalFD(TypoFD),
4932        ExpectedParent(Parent ? Parent->getCanonicalDecl() : 0) {}
4933
4934  virtual bool ValidateCandidate(const TypoCorrection &candidate) {
4935    if (candidate.getEditDistance() == 0)
4936      return false;
4937
4938    llvm::SmallVector<unsigned, 1> MismatchedParams;
4939    for (TypoCorrection::const_decl_iterator CDecl = candidate.begin(),
4940                                          CDeclEnd = candidate.end();
4941         CDecl != CDeclEnd; ++CDecl) {
4942      FunctionDecl *FD = dyn_cast<FunctionDecl>(*CDecl);
4943
4944      if (FD && !FD->hasBody() &&
4945          hasSimilarParameters(Context, FD, OriginalFD, MismatchedParams)) {
4946        if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD)) {
4947          CXXRecordDecl *Parent = MD->getParent();
4948          if (Parent && Parent->getCanonicalDecl() == ExpectedParent)
4949            return true;
4950        } else if (!ExpectedParent) {
4951          return true;
4952        }
4953      }
4954    }
4955
4956    return false;
4957  }
4958
4959 private:
4960  ASTContext &Context;
4961  FunctionDecl *OriginalFD;
4962  CXXRecordDecl *ExpectedParent;
4963};
4964
4965}
4966
4967/// \brief Generate diagnostics for an invalid function redeclaration.
4968///
4969/// This routine handles generating the diagnostic messages for an invalid
4970/// function redeclaration, including finding possible similar declarations
4971/// or performing typo correction if there are no previous declarations with
4972/// the same name.
4973///
4974/// Returns a NamedDecl iff typo correction was performed and substituting in
4975/// the new declaration name does not cause new errors.
4976static NamedDecl* DiagnoseInvalidRedeclaration(
4977    Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD,
4978    ActOnFDArgs &ExtraArgs) {
4979  NamedDecl *Result = NULL;
4980  DeclarationName Name = NewFD->getDeclName();
4981  DeclContext *NewDC = NewFD->getDeclContext();
4982  LookupResult Prev(SemaRef, Name, NewFD->getLocation(),
4983                    Sema::LookupOrdinaryName, Sema::ForRedeclaration);
4984  llvm::SmallVector<unsigned, 1> MismatchedParams;
4985  llvm::SmallVector<std::pair<FunctionDecl*, unsigned>, 1> NearMatches;
4986  TypoCorrection Correction;
4987  bool isFriendDecl = (SemaRef.getLangOpts().CPlusPlus &&
4988                       ExtraArgs.D.getDeclSpec().isFriendSpecified());
4989  unsigned DiagMsg = isFriendDecl ? diag::err_no_matching_local_friend
4990                                  : diag::err_member_def_does_not_match;
4991
4992  NewFD->setInvalidDecl();
4993  SemaRef.LookupQualifiedName(Prev, NewDC);
4994  assert(!Prev.isAmbiguous() &&
4995         "Cannot have an ambiguity in previous-declaration lookup");
4996  CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewFD);
4997  DifferentNameValidatorCCC Validator(SemaRef.Context, NewFD,
4998                                      MD ? MD->getParent() : 0);
4999  if (!Prev.empty()) {
5000    for (LookupResult::iterator Func = Prev.begin(), FuncEnd = Prev.end();
5001         Func != FuncEnd; ++Func) {
5002      FunctionDecl *FD = dyn_cast<FunctionDecl>(*Func);
5003      if (FD &&
5004          hasSimilarParameters(SemaRef.Context, FD, NewFD, MismatchedParams)) {
5005        // Add 1 to the index so that 0 can mean the mismatch didn't
5006        // involve a parameter
5007        unsigned ParamNum =
5008            MismatchedParams.empty() ? 0 : MismatchedParams.front() + 1;
5009        NearMatches.push_back(std::make_pair(FD, ParamNum));
5010      }
5011    }
5012  // If the qualified name lookup yielded nothing, try typo correction
5013  } else if ((Correction = SemaRef.CorrectTypo(Prev.getLookupNameInfo(),
5014                                         Prev.getLookupKind(), 0, 0,
5015                                         Validator, NewDC))) {
5016    // Trap errors.
5017    Sema::SFINAETrap Trap(SemaRef);
5018
5019    // Set up everything for the call to ActOnFunctionDeclarator
5020    ExtraArgs.D.SetIdentifier(Correction.getCorrectionAsIdentifierInfo(),
5021                              ExtraArgs.D.getIdentifierLoc());
5022    Previous.clear();
5023    Previous.setLookupName(Correction.getCorrection());
5024    for (TypoCorrection::decl_iterator CDecl = Correction.begin(),
5025                                    CDeclEnd = Correction.end();
5026         CDecl != CDeclEnd; ++CDecl) {
5027      FunctionDecl *FD = dyn_cast<FunctionDecl>(*CDecl);
5028      if (FD && !FD->hasBody() &&
5029          hasSimilarParameters(SemaRef.Context, FD, NewFD, MismatchedParams)) {
5030        Previous.addDecl(FD);
5031      }
5032    }
5033    bool wasRedeclaration = ExtraArgs.D.isRedeclaration();
5034    // TODO: Refactor ActOnFunctionDeclarator so that we can call only the
5035    // pieces need to verify the typo-corrected C++ declaraction and hopefully
5036    // eliminate the need for the parameter pack ExtraArgs.
5037    Result = SemaRef.ActOnFunctionDeclarator(
5038        ExtraArgs.S, ExtraArgs.D,
5039        Correction.getCorrectionDecl()->getDeclContext(),
5040        NewFD->getTypeSourceInfo(), Previous, ExtraArgs.TemplateParamLists,
5041        ExtraArgs.AddToScope);
5042    if (Trap.hasErrorOccurred()) {
5043      // Pretend the typo correction never occurred
5044      ExtraArgs.D.SetIdentifier(Name.getAsIdentifierInfo(),
5045                                ExtraArgs.D.getIdentifierLoc());
5046      ExtraArgs.D.setRedeclaration(wasRedeclaration);
5047      Previous.clear();
5048      Previous.setLookupName(Name);
5049      Result = NULL;
5050    } else {
5051      for (LookupResult::iterator Func = Previous.begin(),
5052                               FuncEnd = Previous.end();
5053           Func != FuncEnd; ++Func) {
5054        if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*Func))
5055          NearMatches.push_back(std::make_pair(FD, 0));
5056      }
5057    }
5058    if (NearMatches.empty()) {
5059      // Ignore the correction if it didn't yield any close FunctionDecl matches
5060      Correction = TypoCorrection();
5061    } else {
5062      DiagMsg = isFriendDecl ? diag::err_no_matching_local_friend_suggest
5063                             : diag::err_member_def_does_not_match_suggest;
5064    }
5065  }
5066
5067  if (Correction) {
5068    // FIXME: use Correction.getCorrectionRange() instead of computing the range
5069    // here. This requires passing in the CXXScopeSpec to CorrectTypo which in
5070    // turn causes the correction to fully qualify the name. If we fix
5071    // CorrectTypo to minimally qualify then this change should be good.
5072    SourceRange FixItLoc(NewFD->getLocation());
5073    CXXScopeSpec &SS = ExtraArgs.D.getCXXScopeSpec();
5074    if (Correction.getCorrectionSpecifier() && SS.isValid())
5075      FixItLoc.setBegin(SS.getBeginLoc());
5076    SemaRef.Diag(NewFD->getLocStart(), DiagMsg)
5077        << Name << NewDC << Correction.getQuoted(SemaRef.getLangOpts())
5078        << FixItHint::CreateReplacement(
5079            FixItLoc, Correction.getAsString(SemaRef.getLangOpts()));
5080  } else {
5081    SemaRef.Diag(NewFD->getLocation(), DiagMsg)
5082        << Name << NewDC << NewFD->getLocation();
5083  }
5084
5085  bool NewFDisConst = false;
5086  if (CXXMethodDecl *NewMD = dyn_cast<CXXMethodDecl>(NewFD))
5087    NewFDisConst = NewMD->isConst();
5088
5089  for (llvm::SmallVector<std::pair<FunctionDecl*, unsigned>, 1>::iterator
5090       NearMatch = NearMatches.begin(), NearMatchEnd = NearMatches.end();
5091       NearMatch != NearMatchEnd; ++NearMatch) {
5092    FunctionDecl *FD = NearMatch->first;
5093    bool FDisConst = false;
5094    if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD))
5095      FDisConst = MD->isConst();
5096
5097    if (unsigned Idx = NearMatch->second) {
5098      ParmVarDecl *FDParam = FD->getParamDecl(Idx-1);
5099      SourceLocation Loc = FDParam->getTypeSpecStartLoc();
5100      if (Loc.isInvalid()) Loc = FD->getLocation();
5101      SemaRef.Diag(Loc, diag::note_member_def_close_param_match)
5102          << Idx << FDParam->getType() << NewFD->getParamDecl(Idx-1)->getType();
5103    } else if (Correction) {
5104      SemaRef.Diag(FD->getLocation(), diag::note_previous_decl)
5105          << Correction.getQuoted(SemaRef.getLangOpts());
5106    } else if (FDisConst != NewFDisConst) {
5107      SemaRef.Diag(FD->getLocation(), diag::note_member_def_close_const_match)
5108          << NewFDisConst << FD->getSourceRange().getEnd();
5109    } else
5110      SemaRef.Diag(FD->getLocation(), diag::note_member_def_close_match);
5111  }
5112  return Result;
5113}
5114
5115static FunctionDecl::StorageClass getFunctionStorageClass(Sema &SemaRef,
5116                                                          Declarator &D) {
5117  switch (D.getDeclSpec().getStorageClassSpec()) {
5118  default: llvm_unreachable("Unknown storage class!");
5119  case DeclSpec::SCS_auto:
5120  case DeclSpec::SCS_register:
5121  case DeclSpec::SCS_mutable:
5122    SemaRef.Diag(D.getDeclSpec().getStorageClassSpecLoc(),
5123                 diag::err_typecheck_sclass_func);
5124    D.setInvalidType();
5125    break;
5126  case DeclSpec::SCS_unspecified: break;
5127  case DeclSpec::SCS_extern: return SC_Extern;
5128  case DeclSpec::SCS_static: {
5129    if (SemaRef.CurContext->getRedeclContext()->isFunctionOrMethod()) {
5130      // C99 6.7.1p5:
5131      //   The declaration of an identifier for a function that has
5132      //   block scope shall have no explicit storage-class specifier
5133      //   other than extern
5134      // See also (C++ [dcl.stc]p4).
5135      SemaRef.Diag(D.getDeclSpec().getStorageClassSpecLoc(),
5136                   diag::err_static_block_func);
5137      break;
5138    } else
5139      return SC_Static;
5140  }
5141  case DeclSpec::SCS_private_extern: return SC_PrivateExtern;
5142  }
5143
5144  // No explicit storage class has already been returned
5145  return SC_None;
5146}
5147
5148static FunctionDecl* CreateNewFunctionDecl(Sema &SemaRef, Declarator &D,
5149                                           DeclContext *DC, QualType &R,
5150                                           TypeSourceInfo *TInfo,
5151                                           FunctionDecl::StorageClass SC,
5152                                           bool &IsVirtualOkay) {
5153  DeclarationNameInfo NameInfo = SemaRef.GetNameForDeclarator(D);
5154  DeclarationName Name = NameInfo.getName();
5155
5156  FunctionDecl *NewFD = 0;
5157  bool isInline = D.getDeclSpec().isInlineSpecified();
5158  DeclSpec::SCS SCSpec = D.getDeclSpec().getStorageClassSpecAsWritten();
5159  FunctionDecl::StorageClass SCAsWritten
5160    = StorageClassSpecToFunctionDeclStorageClass(SCSpec);
5161
5162  if (!SemaRef.getLangOpts().CPlusPlus) {
5163    // Determine whether the function was written with a
5164    // prototype. This true when:
5165    //   - there is a prototype in the declarator, or
5166    //   - the type R of the function is some kind of typedef or other reference
5167    //     to a type name (which eventually refers to a function type).
5168    bool HasPrototype =
5169      (D.isFunctionDeclarator() && D.getFunctionTypeInfo().hasPrototype) ||
5170      (!isa<FunctionType>(R.getTypePtr()) && R->isFunctionProtoType());
5171
5172    NewFD = FunctionDecl::Create(SemaRef.Context, DC,
5173                                 D.getLocStart(), NameInfo, R,
5174                                 TInfo, SC, SCAsWritten, isInline,
5175                                 HasPrototype);
5176    if (D.isInvalidType())
5177      NewFD->setInvalidDecl();
5178
5179    // Set the lexical context.
5180    NewFD->setLexicalDeclContext(SemaRef.CurContext);
5181
5182    return NewFD;
5183  }
5184
5185  bool isExplicit = D.getDeclSpec().isExplicitSpecified();
5186  bool isConstexpr = D.getDeclSpec().isConstexprSpecified();
5187
5188  // Check that the return type is not an abstract class type.
5189  // For record types, this is done by the AbstractClassUsageDiagnoser once
5190  // the class has been completely parsed.
5191  if (!DC->isRecord() &&
5192      SemaRef.RequireNonAbstractType(D.getIdentifierLoc(),
5193                                     R->getAs<FunctionType>()->getResultType(),
5194                                     diag::err_abstract_type_in_decl,
5195                                     SemaRef.AbstractReturnType))
5196    D.setInvalidType();
5197
5198  if (Name.getNameKind() == DeclarationName::CXXConstructorName) {
5199    // This is a C++ constructor declaration.
5200    assert(DC->isRecord() &&
5201           "Constructors can only be declared in a member context");
5202
5203    R = SemaRef.CheckConstructorDeclarator(D, R, SC);
5204    return CXXConstructorDecl::Create(SemaRef.Context, cast<CXXRecordDecl>(DC),
5205                                      D.getLocStart(), NameInfo,
5206                                      R, TInfo, isExplicit, isInline,
5207                                      /*isImplicitlyDeclared=*/false,
5208                                      isConstexpr);
5209
5210  } else if (Name.getNameKind() == DeclarationName::CXXDestructorName) {
5211    // This is a C++ destructor declaration.
5212    if (DC->isRecord()) {
5213      R = SemaRef.CheckDestructorDeclarator(D, R, SC);
5214      CXXRecordDecl *Record = cast<CXXRecordDecl>(DC);
5215      CXXDestructorDecl *NewDD = CXXDestructorDecl::Create(
5216                                        SemaRef.Context, Record,
5217                                        D.getLocStart(),
5218                                        NameInfo, R, TInfo, isInline,
5219                                        /*isImplicitlyDeclared=*/false);
5220
5221      // If the class is complete, then we now create the implicit exception
5222      // specification. If the class is incomplete or dependent, we can't do
5223      // it yet.
5224      if (SemaRef.getLangOpts().CPlusPlus11 && !Record->isDependentType() &&
5225          Record->getDefinition() && !Record->isBeingDefined() &&
5226          R->getAs<FunctionProtoType>()->getExceptionSpecType() == EST_None) {
5227        SemaRef.AdjustDestructorExceptionSpec(Record, NewDD);
5228      }
5229
5230      IsVirtualOkay = true;
5231      return NewDD;
5232
5233    } else {
5234      SemaRef.Diag(D.getIdentifierLoc(), diag::err_destructor_not_member);
5235      D.setInvalidType();
5236
5237      // Create a FunctionDecl to satisfy the function definition parsing
5238      // code path.
5239      return FunctionDecl::Create(SemaRef.Context, DC,
5240                                  D.getLocStart(),
5241                                  D.getIdentifierLoc(), Name, R, TInfo,
5242                                  SC, SCAsWritten, isInline,
5243                                  /*hasPrototype=*/true, isConstexpr);
5244    }
5245
5246  } else if (Name.getNameKind() == DeclarationName::CXXConversionFunctionName) {
5247    if (!DC->isRecord()) {
5248      SemaRef.Diag(D.getIdentifierLoc(),
5249           diag::err_conv_function_not_member);
5250      return 0;
5251    }
5252
5253    SemaRef.CheckConversionDeclarator(D, R, SC);
5254    IsVirtualOkay = true;
5255    return CXXConversionDecl::Create(SemaRef.Context, cast<CXXRecordDecl>(DC),
5256                                     D.getLocStart(), NameInfo,
5257                                     R, TInfo, isInline, isExplicit,
5258                                     isConstexpr, SourceLocation());
5259
5260  } else if (DC->isRecord()) {
5261    // If the name of the function is the same as the name of the record,
5262    // then this must be an invalid constructor that has a return type.
5263    // (The parser checks for a return type and makes the declarator a
5264    // constructor if it has no return type).
5265    if (Name.getAsIdentifierInfo() &&
5266        Name.getAsIdentifierInfo() == cast<CXXRecordDecl>(DC)->getIdentifier()){
5267      SemaRef.Diag(D.getIdentifierLoc(), diag::err_constructor_return_type)
5268        << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc())
5269        << SourceRange(D.getIdentifierLoc());
5270      return 0;
5271    }
5272
5273    bool isStatic = SC == SC_Static;
5274
5275    // [class.free]p1:
5276    // Any allocation function for a class T is a static member
5277    // (even if not explicitly declared static).
5278    if (Name.getCXXOverloadedOperator() == OO_New ||
5279        Name.getCXXOverloadedOperator() == OO_Array_New)
5280      isStatic = true;
5281
5282    // [class.free]p6 Any deallocation function for a class X is a static member
5283    // (even if not explicitly declared static).
5284    if (Name.getCXXOverloadedOperator() == OO_Delete ||
5285        Name.getCXXOverloadedOperator() == OO_Array_Delete)
5286      isStatic = true;
5287
5288    IsVirtualOkay = !isStatic;
5289
5290    // This is a C++ method declaration.
5291    return CXXMethodDecl::Create(SemaRef.Context, cast<CXXRecordDecl>(DC),
5292                                 D.getLocStart(), NameInfo, R,
5293                                 TInfo, isStatic, SCAsWritten, isInline,
5294                                 isConstexpr, SourceLocation());
5295
5296  } else {
5297    // Determine whether the function was written with a
5298    // prototype. This true when:
5299    //   - we're in C++ (where every function has a prototype),
5300    return FunctionDecl::Create(SemaRef.Context, DC,
5301                                D.getLocStart(),
5302                                NameInfo, R, TInfo, SC, SCAsWritten, isInline,
5303                                true/*HasPrototype*/, isConstexpr);
5304  }
5305}
5306
5307void Sema::checkVoidParamDecl(ParmVarDecl *Param) {
5308  // In C++, the empty parameter-type-list must be spelled "void"; a
5309  // typedef of void is not permitted.
5310  if (getLangOpts().CPlusPlus &&
5311      Param->getType().getUnqualifiedType() != Context.VoidTy) {
5312    bool IsTypeAlias = false;
5313    if (const TypedefType *TT = Param->getType()->getAs<TypedefType>())
5314      IsTypeAlias = isa<TypeAliasDecl>(TT->getDecl());
5315    else if (const TemplateSpecializationType *TST =
5316               Param->getType()->getAs<TemplateSpecializationType>())
5317      IsTypeAlias = TST->isTypeAlias();
5318    Diag(Param->getLocation(), diag::err_param_typedef_of_void)
5319      << IsTypeAlias;
5320  }
5321}
5322
5323NamedDecl*
5324Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC,
5325                              TypeSourceInfo *TInfo, LookupResult &Previous,
5326                              MultiTemplateParamsArg TemplateParamLists,
5327                              bool &AddToScope) {
5328  QualType R = TInfo->getType();
5329
5330  assert(R.getTypePtr()->isFunctionType());
5331
5332  // TODO: consider using NameInfo for diagnostic.
5333  DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
5334  DeclarationName Name = NameInfo.getName();
5335  FunctionDecl::StorageClass SC = getFunctionStorageClass(*this, D);
5336
5337  if (D.getDeclSpec().isThreadSpecified())
5338    Diag(D.getDeclSpec().getThreadSpecLoc(), diag::err_invalid_thread);
5339
5340  // Do not allow returning a objc interface by-value.
5341  if (R->getAs<FunctionType>()->getResultType()->isObjCObjectType()) {
5342    Diag(D.getIdentifierLoc(),
5343         diag::err_object_cannot_be_passed_returned_by_value) << 0
5344    << R->getAs<FunctionType>()->getResultType()
5345    << FixItHint::CreateInsertion(D.getIdentifierLoc(), "*");
5346
5347    QualType T = R->getAs<FunctionType>()->getResultType();
5348    T = Context.getObjCObjectPointerType(T);
5349    if (const FunctionProtoType *FPT = dyn_cast<FunctionProtoType>(R)) {
5350      FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
5351      R = Context.getFunctionType(T, FPT->arg_type_begin(),
5352                                  FPT->getNumArgs(), EPI);
5353    }
5354    else if (isa<FunctionNoProtoType>(R))
5355      R = Context.getFunctionNoProtoType(T);
5356  }
5357
5358  bool isFriend = false;
5359  FunctionTemplateDecl *FunctionTemplate = 0;
5360  bool isExplicitSpecialization = false;
5361  bool isFunctionTemplateSpecialization = false;
5362
5363  bool isDependentClassScopeExplicitSpecialization = false;
5364  bool HasExplicitTemplateArgs = false;
5365  TemplateArgumentListInfo TemplateArgs;
5366
5367  bool isVirtualOkay = false;
5368
5369  FunctionDecl *NewFD = CreateNewFunctionDecl(*this, D, DC, R, TInfo, SC,
5370                                              isVirtualOkay);
5371  if (!NewFD) return 0;
5372
5373  if (OriginalLexicalContext && OriginalLexicalContext->isObjCContainer())
5374    NewFD->setTopLevelDeclInObjCContainer();
5375
5376  if (getLangOpts().CPlusPlus) {
5377    bool isInline = D.getDeclSpec().isInlineSpecified();
5378    bool isVirtual = D.getDeclSpec().isVirtualSpecified();
5379    bool isExplicit = D.getDeclSpec().isExplicitSpecified();
5380    bool isConstexpr = D.getDeclSpec().isConstexprSpecified();
5381    isFriend = D.getDeclSpec().isFriendSpecified();
5382    if (isFriend && !isInline && D.isFunctionDefinition()) {
5383      // C++ [class.friend]p5
5384      //   A function can be defined in a friend declaration of a
5385      //   class . . . . Such a function is implicitly inline.
5386      NewFD->setImplicitlyInline();
5387    }
5388
5389    // If this is a method defined in an __interface, and is not a constructor
5390    // or an overloaded operator, then set the pure flag (isVirtual will already
5391    // return true).
5392    if (const CXXRecordDecl *Parent =
5393          dyn_cast<CXXRecordDecl>(NewFD->getDeclContext())) {
5394      if (Parent->isInterface() && cast<CXXMethodDecl>(NewFD)->isUserProvided())
5395        NewFD->setPure(true);
5396    }
5397
5398    SetNestedNameSpecifier(NewFD, D);
5399    isExplicitSpecialization = false;
5400    isFunctionTemplateSpecialization = false;
5401    if (D.isInvalidType())
5402      NewFD->setInvalidDecl();
5403
5404    // Set the lexical context. If the declarator has a C++
5405    // scope specifier, or is the object of a friend declaration, the
5406    // lexical context will be different from the semantic context.
5407    NewFD->setLexicalDeclContext(CurContext);
5408
5409    // Match up the template parameter lists with the scope specifier, then
5410    // determine whether we have a template or a template specialization.
5411    bool Invalid = false;
5412    if (TemplateParameterList *TemplateParams
5413          = MatchTemplateParametersToScopeSpecifier(
5414                                  D.getDeclSpec().getLocStart(),
5415                                  D.getIdentifierLoc(),
5416                                  D.getCXXScopeSpec(),
5417                                  TemplateParamLists.data(),
5418                                  TemplateParamLists.size(),
5419                                  isFriend,
5420                                  isExplicitSpecialization,
5421                                  Invalid)) {
5422      if (TemplateParams->size() > 0) {
5423        // This is a function template
5424
5425        // Check that we can declare a template here.
5426        if (CheckTemplateDeclScope(S, TemplateParams))
5427          return 0;
5428
5429        // A destructor cannot be a template.
5430        if (Name.getNameKind() == DeclarationName::CXXDestructorName) {
5431          Diag(NewFD->getLocation(), diag::err_destructor_template);
5432          return 0;
5433        }
5434
5435        // If we're adding a template to a dependent context, we may need to
5436        // rebuilding some of the types used within the template parameter list,
5437        // now that we know what the current instantiation is.
5438        if (DC->isDependentContext()) {
5439          ContextRAII SavedContext(*this, DC);
5440          if (RebuildTemplateParamsInCurrentInstantiation(TemplateParams))
5441            Invalid = true;
5442        }
5443
5444
5445        FunctionTemplate = FunctionTemplateDecl::Create(Context, DC,
5446                                                        NewFD->getLocation(),
5447                                                        Name, TemplateParams,
5448                                                        NewFD);
5449        FunctionTemplate->setLexicalDeclContext(CurContext);
5450        NewFD->setDescribedFunctionTemplate(FunctionTemplate);
5451
5452        // For source fidelity, store the other template param lists.
5453        if (TemplateParamLists.size() > 1) {
5454          NewFD->setTemplateParameterListsInfo(Context,
5455                                               TemplateParamLists.size() - 1,
5456                                               TemplateParamLists.data());
5457        }
5458      } else {
5459        // This is a function template specialization.
5460        isFunctionTemplateSpecialization = true;
5461        // For source fidelity, store all the template param lists.
5462        NewFD->setTemplateParameterListsInfo(Context,
5463                                             TemplateParamLists.size(),
5464                                             TemplateParamLists.data());
5465
5466        // C++0x [temp.expl.spec]p20 forbids "template<> friend void foo(int);".
5467        if (isFriend) {
5468          // We want to remove the "template<>", found here.
5469          SourceRange RemoveRange = TemplateParams->getSourceRange();
5470
5471          // If we remove the template<> and the name is not a
5472          // template-id, we're actually silently creating a problem:
5473          // the friend declaration will refer to an untemplated decl,
5474          // and clearly the user wants a template specialization.  So
5475          // we need to insert '<>' after the name.
5476          SourceLocation InsertLoc;
5477          if (D.getName().getKind() != UnqualifiedId::IK_TemplateId) {
5478            InsertLoc = D.getName().getSourceRange().getEnd();
5479            InsertLoc = PP.getLocForEndOfToken(InsertLoc);
5480          }
5481
5482          Diag(D.getIdentifierLoc(), diag::err_template_spec_decl_friend)
5483            << Name << RemoveRange
5484            << FixItHint::CreateRemoval(RemoveRange)
5485            << FixItHint::CreateInsertion(InsertLoc, "<>");
5486        }
5487      }
5488    }
5489    else {
5490      // All template param lists were matched against the scope specifier:
5491      // this is NOT (an explicit specialization of) a template.
5492      if (TemplateParamLists.size() > 0)
5493        // For source fidelity, store all the template param lists.
5494        NewFD->setTemplateParameterListsInfo(Context,
5495                                             TemplateParamLists.size(),
5496                                             TemplateParamLists.data());
5497    }
5498
5499    if (Invalid) {
5500      NewFD->setInvalidDecl();
5501      if (FunctionTemplate)
5502        FunctionTemplate->setInvalidDecl();
5503    }
5504
5505    // C++ [dcl.fct.spec]p5:
5506    //   The virtual specifier shall only be used in declarations of
5507    //   nonstatic class member functions that appear within a
5508    //   member-specification of a class declaration; see 10.3.
5509    //
5510    if (isVirtual && !NewFD->isInvalidDecl()) {
5511      if (!isVirtualOkay) {
5512        Diag(D.getDeclSpec().getVirtualSpecLoc(),
5513             diag::err_virtual_non_function);
5514      } else if (!CurContext->isRecord()) {
5515        // 'virtual' was specified outside of the class.
5516        Diag(D.getDeclSpec().getVirtualSpecLoc(),
5517             diag::err_virtual_out_of_class)
5518          << FixItHint::CreateRemoval(D.getDeclSpec().getVirtualSpecLoc());
5519      } else if (NewFD->getDescribedFunctionTemplate()) {
5520        // C++ [temp.mem]p3:
5521        //  A member function template shall not be virtual.
5522        Diag(D.getDeclSpec().getVirtualSpecLoc(),
5523             diag::err_virtual_member_function_template)
5524          << FixItHint::CreateRemoval(D.getDeclSpec().getVirtualSpecLoc());
5525      } else {
5526        // Okay: Add virtual to the method.
5527        NewFD->setVirtualAsWritten(true);
5528      }
5529    }
5530
5531    // C++ [dcl.fct.spec]p3:
5532    //  The inline specifier shall not appear on a block scope function
5533    //  declaration.
5534    if (isInline && !NewFD->isInvalidDecl()) {
5535      if (CurContext->isFunctionOrMethod()) {
5536        // 'inline' is not allowed on block scope function declaration.
5537        Diag(D.getDeclSpec().getInlineSpecLoc(),
5538             diag::err_inline_declaration_block_scope) << Name
5539          << FixItHint::CreateRemoval(D.getDeclSpec().getInlineSpecLoc());
5540      }
5541    }
5542
5543    // C++ [dcl.fct.spec]p6:
5544    //  The explicit specifier shall be used only in the declaration of a
5545    //  constructor or conversion function within its class definition;
5546    //  see 12.3.1 and 12.3.2.
5547    if (isExplicit && !NewFD->isInvalidDecl()) {
5548      if (!CurContext->isRecord()) {
5549        // 'explicit' was specified outside of the class.
5550        Diag(D.getDeclSpec().getExplicitSpecLoc(),
5551             diag::err_explicit_out_of_class)
5552          << FixItHint::CreateRemoval(D.getDeclSpec().getExplicitSpecLoc());
5553      } else if (!isa<CXXConstructorDecl>(NewFD) &&
5554                 !isa<CXXConversionDecl>(NewFD)) {
5555        // 'explicit' was specified on a function that wasn't a constructor
5556        // or conversion function.
5557        Diag(D.getDeclSpec().getExplicitSpecLoc(),
5558             diag::err_explicit_non_ctor_or_conv_function)
5559          << FixItHint::CreateRemoval(D.getDeclSpec().getExplicitSpecLoc());
5560      }
5561    }
5562
5563    if (isConstexpr) {
5564      // C++0x [dcl.constexpr]p2: constexpr functions and constexpr constructors
5565      // are implicitly inline.
5566      NewFD->setImplicitlyInline();
5567
5568      // C++0x [dcl.constexpr]p3: functions declared constexpr are required to
5569      // be either constructors or to return a literal type. Therefore,
5570      // destructors cannot be declared constexpr.
5571      if (isa<CXXDestructorDecl>(NewFD))
5572        Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_constexpr_dtor);
5573    }
5574
5575    // If __module_private__ was specified, mark the function accordingly.
5576    if (D.getDeclSpec().isModulePrivateSpecified()) {
5577      if (isFunctionTemplateSpecialization) {
5578        SourceLocation ModulePrivateLoc
5579          = D.getDeclSpec().getModulePrivateSpecLoc();
5580        Diag(ModulePrivateLoc, diag::err_module_private_specialization)
5581          << 0
5582          << FixItHint::CreateRemoval(ModulePrivateLoc);
5583      } else {
5584        NewFD->setModulePrivate();
5585        if (FunctionTemplate)
5586          FunctionTemplate->setModulePrivate();
5587      }
5588    }
5589
5590    if (isFriend) {
5591      // For now, claim that the objects have no previous declaration.
5592      if (FunctionTemplate) {
5593        FunctionTemplate->setObjectOfFriendDecl(false);
5594        FunctionTemplate->setAccess(AS_public);
5595      }
5596      NewFD->setObjectOfFriendDecl(false);
5597      NewFD->setAccess(AS_public);
5598    }
5599
5600    // If a function is defined as defaulted or deleted, mark it as such now.
5601    switch (D.getFunctionDefinitionKind()) {
5602      case FDK_Declaration:
5603      case FDK_Definition:
5604        break;
5605
5606      case FDK_Defaulted:
5607        NewFD->setDefaulted();
5608        break;
5609
5610      case FDK_Deleted:
5611        NewFD->setDeletedAsWritten();
5612        break;
5613    }
5614
5615    if (isa<CXXMethodDecl>(NewFD) && DC == CurContext &&
5616        D.isFunctionDefinition()) {
5617      // C++ [class.mfct]p2:
5618      //   A member function may be defined (8.4) in its class definition, in
5619      //   which case it is an inline member function (7.1.2)
5620      NewFD->setImplicitlyInline();
5621    }
5622
5623    if (SC == SC_Static && isa<CXXMethodDecl>(NewFD) &&
5624        !CurContext->isRecord()) {
5625      // C++ [class.static]p1:
5626      //   A data or function member of a class may be declared static
5627      //   in a class definition, in which case it is a static member of
5628      //   the class.
5629
5630      // Complain about the 'static' specifier if it's on an out-of-line
5631      // member function definition.
5632      Diag(D.getDeclSpec().getStorageClassSpecLoc(),
5633           diag::err_static_out_of_line)
5634        << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());
5635    }
5636
5637    // C++11 [except.spec]p15:
5638    //   A deallocation function with no exception-specification is treated
5639    //   as if it were specified with noexcept(true).
5640    const FunctionProtoType *FPT = R->getAs<FunctionProtoType>();
5641    if ((Name.getCXXOverloadedOperator() == OO_Delete ||
5642         Name.getCXXOverloadedOperator() == OO_Array_Delete) &&
5643        getLangOpts().CPlusPlus11 && FPT && !FPT->hasExceptionSpec()) {
5644      FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
5645      EPI.ExceptionSpecType = EST_BasicNoexcept;
5646      NewFD->setType(Context.getFunctionType(FPT->getResultType(),
5647                                             FPT->arg_type_begin(),
5648                                             FPT->getNumArgs(), EPI));
5649    }
5650  }
5651
5652  // Filter out previous declarations that don't match the scope.
5653  FilterLookupForScope(Previous, DC, S, NewFD->hasLinkage(),
5654                       isExplicitSpecialization ||
5655                       isFunctionTemplateSpecialization);
5656
5657  // Handle GNU asm-label extension (encoded as an attribute).
5658  if (Expr *E = (Expr*) D.getAsmLabel()) {
5659    // The parser guarantees this is a string.
5660    StringLiteral *SE = cast<StringLiteral>(E);
5661    NewFD->addAttr(::new (Context) AsmLabelAttr(SE->getStrTokenLoc(0), Context,
5662                                                SE->getString()));
5663  } else if (!ExtnameUndeclaredIdentifiers.empty()) {
5664    llvm::DenseMap<IdentifierInfo*,AsmLabelAttr*>::iterator I =
5665      ExtnameUndeclaredIdentifiers.find(NewFD->getIdentifier());
5666    if (I != ExtnameUndeclaredIdentifiers.end()) {
5667      NewFD->addAttr(I->second);
5668      ExtnameUndeclaredIdentifiers.erase(I);
5669    }
5670  }
5671
5672  // Copy the parameter declarations from the declarator D to the function
5673  // declaration NewFD, if they are available.  First scavenge them into Params.
5674  SmallVector<ParmVarDecl*, 16> Params;
5675  if (D.isFunctionDeclarator()) {
5676    DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
5677
5678    // Check for C99 6.7.5.3p10 - foo(void) is a non-varargs
5679    // function that takes no arguments, not a function that takes a
5680    // single void argument.
5681    // We let through "const void" here because Sema::GetTypeForDeclarator
5682    // already checks for that case.
5683    if (FTI.NumArgs == 1 && !FTI.isVariadic && FTI.ArgInfo[0].Ident == 0 &&
5684        FTI.ArgInfo[0].Param &&
5685        cast<ParmVarDecl>(FTI.ArgInfo[0].Param)->getType()->isVoidType()) {
5686      // Empty arg list, don't push any params.
5687      checkVoidParamDecl(cast<ParmVarDecl>(FTI.ArgInfo[0].Param));
5688    } else if (FTI.NumArgs > 0 && FTI.ArgInfo[0].Param != 0) {
5689      for (unsigned i = 0, e = FTI.NumArgs; i != e; ++i) {
5690        ParmVarDecl *Param = cast<ParmVarDecl>(FTI.ArgInfo[i].Param);
5691        assert(Param->getDeclContext() != NewFD && "Was set before ?");
5692        Param->setDeclContext(NewFD);
5693        Params.push_back(Param);
5694
5695        if (Param->isInvalidDecl())
5696          NewFD->setInvalidDecl();
5697      }
5698    }
5699
5700  } else if (const FunctionProtoType *FT = R->getAs<FunctionProtoType>()) {
5701    // When we're declaring a function with a typedef, typeof, etc as in the
5702    // following example, we'll need to synthesize (unnamed)
5703    // parameters for use in the declaration.
5704    //
5705    // @code
5706    // typedef void fn(int);
5707    // fn f;
5708    // @endcode
5709
5710    // Synthesize a parameter for each argument type.
5711    for (FunctionProtoType::arg_type_iterator AI = FT->arg_type_begin(),
5712         AE = FT->arg_type_end(); AI != AE; ++AI) {
5713      ParmVarDecl *Param =
5714        BuildParmVarDeclForTypedef(NewFD, D.getIdentifierLoc(), *AI);
5715      Param->setScopeInfo(0, Params.size());
5716      Params.push_back(Param);
5717    }
5718  } else {
5719    assert(R->isFunctionNoProtoType() && NewFD->getNumParams() == 0 &&
5720           "Should not need args for typedef of non-prototype fn");
5721  }
5722
5723  // Finally, we know we have the right number of parameters, install them.
5724  NewFD->setParams(Params);
5725
5726  // Find all anonymous symbols defined during the declaration of this function
5727  // and add to NewFD. This lets us track decls such 'enum Y' in:
5728  //
5729  //   void f(enum Y {AA} x) {}
5730  //
5731  // which would otherwise incorrectly end up in the translation unit scope.
5732  NewFD->setDeclsInPrototypeScope(DeclsInPrototypeScope);
5733  DeclsInPrototypeScope.clear();
5734
5735  // Process the non-inheritable attributes on this declaration.
5736  ProcessDeclAttributes(S, NewFD, D,
5737                        /*NonInheritable=*/true, /*Inheritable=*/false);
5738
5739  // Functions returning a variably modified type violate C99 6.7.5.2p2
5740  // because all functions have linkage.
5741  if (!NewFD->isInvalidDecl() &&
5742      NewFD->getResultType()->isVariablyModifiedType()) {
5743    Diag(NewFD->getLocation(), diag::err_vm_func_decl);
5744    NewFD->setInvalidDecl();
5745  }
5746
5747  // Handle attributes.
5748  ProcessDeclAttributes(S, NewFD, D,
5749                        /*NonInheritable=*/false, /*Inheritable=*/true);
5750
5751  QualType RetType = NewFD->getResultType();
5752  const CXXRecordDecl *Ret = RetType->isRecordType() ?
5753      RetType->getAsCXXRecordDecl() : RetType->getPointeeCXXRecordDecl();
5754  if (!NewFD->isInvalidDecl() && !NewFD->hasAttr<WarnUnusedResultAttr>() &&
5755      Ret && Ret->hasAttr<WarnUnusedResultAttr>()) {
5756    const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewFD);
5757    if (!(MD && MD->getCorrespondingMethodInClass(Ret, true))) {
5758      NewFD->addAttr(new (Context) WarnUnusedResultAttr(SourceRange(),
5759                                                        Context));
5760    }
5761  }
5762
5763  if (!getLangOpts().CPlusPlus) {
5764    // Perform semantic checking on the function declaration.
5765    bool isExplicitSpecialization=false;
5766    if (!NewFD->isInvalidDecl()) {
5767      if (NewFD->isMain())
5768        CheckMain(NewFD, D.getDeclSpec());
5769      D.setRedeclaration(CheckFunctionDeclaration(S, NewFD, Previous,
5770                                                  isExplicitSpecialization));
5771    }
5772    // Make graceful recovery from an invalid redeclaration.
5773    else if (!Previous.empty())
5774           D.setRedeclaration(true);
5775    assert((NewFD->isInvalidDecl() || !D.isRedeclaration() ||
5776            Previous.getResultKind() != LookupResult::FoundOverloaded) &&
5777           "previous declaration set still overloaded");
5778  } else {
5779    // If the declarator is a template-id, translate the parser's template
5780    // argument list into our AST format.
5781    if (D.getName().getKind() == UnqualifiedId::IK_TemplateId) {
5782      TemplateIdAnnotation *TemplateId = D.getName().TemplateId;
5783      TemplateArgs.setLAngleLoc(TemplateId->LAngleLoc);
5784      TemplateArgs.setRAngleLoc(TemplateId->RAngleLoc);
5785      ASTTemplateArgsPtr TemplateArgsPtr(TemplateId->getTemplateArgs(),
5786                                         TemplateId->NumArgs);
5787      translateTemplateArguments(TemplateArgsPtr,
5788                                 TemplateArgs);
5789
5790      HasExplicitTemplateArgs = true;
5791
5792      if (NewFD->isInvalidDecl()) {
5793        HasExplicitTemplateArgs = false;
5794      } else if (FunctionTemplate) {
5795        // Function template with explicit template arguments.
5796        Diag(D.getIdentifierLoc(), diag::err_function_template_partial_spec)
5797          << SourceRange(TemplateId->LAngleLoc, TemplateId->RAngleLoc);
5798
5799        HasExplicitTemplateArgs = false;
5800      } else if (!isFunctionTemplateSpecialization &&
5801                 !D.getDeclSpec().isFriendSpecified()) {
5802        // We have encountered something that the user meant to be a
5803        // specialization (because it has explicitly-specified template
5804        // arguments) but that was not introduced with a "template<>" (or had
5805        // too few of them).
5806        Diag(D.getIdentifierLoc(), diag::err_template_spec_needs_header)
5807          << SourceRange(TemplateId->LAngleLoc, TemplateId->RAngleLoc)
5808          << FixItHint::CreateInsertion(
5809                                    D.getDeclSpec().getLocStart(),
5810                                        "template<> ");
5811        isFunctionTemplateSpecialization = true;
5812      } else {
5813        // "friend void foo<>(int);" is an implicit specialization decl.
5814        isFunctionTemplateSpecialization = true;
5815      }
5816    } else if (isFriend && isFunctionTemplateSpecialization) {
5817      // This combination is only possible in a recovery case;  the user
5818      // wrote something like:
5819      //   template <> friend void foo(int);
5820      // which we're recovering from as if the user had written:
5821      //   friend void foo<>(int);
5822      // Go ahead and fake up a template id.
5823      HasExplicitTemplateArgs = true;
5824        TemplateArgs.setLAngleLoc(D.getIdentifierLoc());
5825      TemplateArgs.setRAngleLoc(D.getIdentifierLoc());
5826    }
5827
5828    // If it's a friend (and only if it's a friend), it's possible
5829    // that either the specialized function type or the specialized
5830    // template is dependent, and therefore matching will fail.  In
5831    // this case, don't check the specialization yet.
5832    bool InstantiationDependent = false;
5833    if (isFunctionTemplateSpecialization && isFriend &&
5834        (NewFD->getType()->isDependentType() || DC->isDependentContext() ||
5835         TemplateSpecializationType::anyDependentTemplateArguments(
5836            TemplateArgs.getArgumentArray(), TemplateArgs.size(),
5837            InstantiationDependent))) {
5838      assert(HasExplicitTemplateArgs &&
5839             "friend function specialization without template args");
5840      if (CheckDependentFunctionTemplateSpecialization(NewFD, TemplateArgs,
5841                                                       Previous))
5842        NewFD->setInvalidDecl();
5843    } else if (isFunctionTemplateSpecialization) {
5844      if (CurContext->isDependentContext() && CurContext->isRecord()
5845          && !isFriend) {
5846        isDependentClassScopeExplicitSpecialization = true;
5847        Diag(NewFD->getLocation(), getLangOpts().MicrosoftExt ?
5848          diag::ext_function_specialization_in_class :
5849          diag::err_function_specialization_in_class)
5850          << NewFD->getDeclName();
5851      } else if (CheckFunctionTemplateSpecialization(NewFD,
5852                                  (HasExplicitTemplateArgs ? &TemplateArgs : 0),
5853                                                     Previous))
5854        NewFD->setInvalidDecl();
5855
5856      // C++ [dcl.stc]p1:
5857      //   A storage-class-specifier shall not be specified in an explicit
5858      //   specialization (14.7.3)
5859      if (SC != SC_None) {
5860        if (SC != NewFD->getStorageClass())
5861          Diag(NewFD->getLocation(),
5862               diag::err_explicit_specialization_inconsistent_storage_class)
5863            << SC
5864            << FixItHint::CreateRemoval(
5865                                      D.getDeclSpec().getStorageClassSpecLoc());
5866
5867        else
5868          Diag(NewFD->getLocation(),
5869               diag::ext_explicit_specialization_storage_class)
5870            << FixItHint::CreateRemoval(
5871                                      D.getDeclSpec().getStorageClassSpecLoc());
5872      }
5873
5874    } else if (isExplicitSpecialization && isa<CXXMethodDecl>(NewFD)) {
5875      if (CheckMemberSpecialization(NewFD, Previous))
5876          NewFD->setInvalidDecl();
5877    }
5878
5879    // Perform semantic checking on the function declaration.
5880    if (!isDependentClassScopeExplicitSpecialization) {
5881      if (NewFD->isInvalidDecl()) {
5882        // If this is a class member, mark the class invalid immediately.
5883        // This avoids some consistency errors later.
5884        if (CXXMethodDecl* methodDecl = dyn_cast<CXXMethodDecl>(NewFD))
5885          methodDecl->getParent()->setInvalidDecl();
5886      } else {
5887        if (NewFD->isMain())
5888          CheckMain(NewFD, D.getDeclSpec());
5889        D.setRedeclaration(CheckFunctionDeclaration(S, NewFD, Previous,
5890                                                    isExplicitSpecialization));
5891      }
5892    }
5893
5894    assert((NewFD->isInvalidDecl() || !D.isRedeclaration() ||
5895            Previous.getResultKind() != LookupResult::FoundOverloaded) &&
5896           "previous declaration set still overloaded");
5897
5898    NamedDecl *PrincipalDecl = (FunctionTemplate
5899                                ? cast<NamedDecl>(FunctionTemplate)
5900                                : NewFD);
5901
5902    if (isFriend && D.isRedeclaration()) {
5903      AccessSpecifier Access = AS_public;
5904      if (!NewFD->isInvalidDecl())
5905        Access = NewFD->getPreviousDecl()->getAccess();
5906
5907      NewFD->setAccess(Access);
5908      if (FunctionTemplate) FunctionTemplate->setAccess(Access);
5909
5910      PrincipalDecl->setObjectOfFriendDecl(true);
5911    }
5912
5913    if (NewFD->isOverloadedOperator() && !DC->isRecord() &&
5914        PrincipalDecl->isInIdentifierNamespace(Decl::IDNS_Ordinary))
5915      PrincipalDecl->setNonMemberOperator();
5916
5917    // If we have a function template, check the template parameter
5918    // list. This will check and merge default template arguments.
5919    if (FunctionTemplate) {
5920      FunctionTemplateDecl *PrevTemplate =
5921                                     FunctionTemplate->getPreviousDecl();
5922      CheckTemplateParameterList(FunctionTemplate->getTemplateParameters(),
5923                       PrevTemplate ? PrevTemplate->getTemplateParameters() : 0,
5924                            D.getDeclSpec().isFriendSpecified()
5925                              ? (D.isFunctionDefinition()
5926                                   ? TPC_FriendFunctionTemplateDefinition
5927                                   : TPC_FriendFunctionTemplate)
5928                              : (D.getCXXScopeSpec().isSet() &&
5929                                 DC && DC->isRecord() &&
5930                                 DC->isDependentContext())
5931                                  ? TPC_ClassTemplateMember
5932                                  : TPC_FunctionTemplate);
5933    }
5934
5935    if (NewFD->isInvalidDecl()) {
5936      // Ignore all the rest of this.
5937    } else if (!D.isRedeclaration()) {
5938      struct ActOnFDArgs ExtraArgs = { S, D, TemplateParamLists,
5939                                       AddToScope };
5940      // Fake up an access specifier if it's supposed to be a class member.
5941      if (isa<CXXRecordDecl>(NewFD->getDeclContext()))
5942        NewFD->setAccess(AS_public);
5943
5944      // Qualified decls generally require a previous declaration.
5945      if (D.getCXXScopeSpec().isSet()) {
5946        // ...with the major exception of templated-scope or
5947        // dependent-scope friend declarations.
5948
5949        // TODO: we currently also suppress this check in dependent
5950        // contexts because (1) the parameter depth will be off when
5951        // matching friend templates and (2) we might actually be
5952        // selecting a friend based on a dependent factor.  But there
5953        // are situations where these conditions don't apply and we
5954        // can actually do this check immediately.
5955        if (isFriend &&
5956            (TemplateParamLists.size() ||
5957             D.getCXXScopeSpec().getScopeRep()->isDependent() ||
5958             CurContext->isDependentContext())) {
5959          // ignore these
5960        } else {
5961          // The user tried to provide an out-of-line definition for a
5962          // function that is a member of a class or namespace, but there
5963          // was no such member function declared (C++ [class.mfct]p2,
5964          // C++ [namespace.memdef]p2). For example:
5965          //
5966          // class X {
5967          //   void f() const;
5968          // };
5969          //
5970          // void X::f() { } // ill-formed
5971          //
5972          // Complain about this problem, and attempt to suggest close
5973          // matches (e.g., those that differ only in cv-qualifiers and
5974          // whether the parameter types are references).
5975
5976          if (NamedDecl *Result = DiagnoseInvalidRedeclaration(*this, Previous,
5977                                                               NewFD,
5978                                                               ExtraArgs)) {
5979            AddToScope = ExtraArgs.AddToScope;
5980            return Result;
5981          }
5982        }
5983
5984        // Unqualified local friend declarations are required to resolve
5985        // to something.
5986      } else if (isFriend && cast<CXXRecordDecl>(CurContext)->isLocalClass()) {
5987        if (NamedDecl *Result = DiagnoseInvalidRedeclaration(*this, Previous,
5988                                                             NewFD,
5989                                                             ExtraArgs)) {
5990          AddToScope = ExtraArgs.AddToScope;
5991          return Result;
5992        }
5993      }
5994
5995    } else if (!D.isFunctionDefinition() && D.getCXXScopeSpec().isSet() &&
5996               !isFriend && !isFunctionTemplateSpecialization &&
5997               !isExplicitSpecialization) {
5998      // An out-of-line member function declaration must also be a
5999      // definition (C++ [dcl.meaning]p1).
6000      // Note that this is not the case for explicit specializations of
6001      // function templates or member functions of class templates, per
6002      // C++ [temp.expl.spec]p2. We also allow these declarations as an
6003      // extension for compatibility with old SWIG code which likes to
6004      // generate them.
6005      Diag(NewFD->getLocation(), diag::ext_out_of_line_declaration)
6006        << D.getCXXScopeSpec().getRange();
6007    }
6008  }
6009
6010  AddKnownFunctionAttributes(NewFD);
6011
6012  if (NewFD->hasAttr<OverloadableAttr>() &&
6013      !NewFD->getType()->getAs<FunctionProtoType>()) {
6014    Diag(NewFD->getLocation(),
6015         diag::err_attribute_overloadable_no_prototype)
6016      << NewFD;
6017
6018    // Turn this into a variadic function with no parameters.
6019    const FunctionType *FT = NewFD->getType()->getAs<FunctionType>();
6020    FunctionProtoType::ExtProtoInfo EPI;
6021    EPI.Variadic = true;
6022    EPI.ExtInfo = FT->getExtInfo();
6023
6024    QualType R = Context.getFunctionType(FT->getResultType(), 0, 0, EPI);
6025    NewFD->setType(R);
6026  }
6027
6028  // If there's a #pragma GCC visibility in scope, and this isn't a class
6029  // member, set the visibility of this function.
6030  if (NewFD->getLinkage() == ExternalLinkage && !DC->isRecord())
6031    AddPushedVisibilityAttribute(NewFD);
6032
6033  // If there's a #pragma clang arc_cf_code_audited in scope, consider
6034  // marking the function.
6035  AddCFAuditedAttribute(NewFD);
6036
6037  // If this is a locally-scoped extern C function, update the
6038  // map of such names.
6039  if (CurContext->isFunctionOrMethod() && NewFD->isExternC()
6040      && !NewFD->isInvalidDecl())
6041    RegisterLocallyScopedExternCDecl(NewFD, Previous, S);
6042
6043  // Set this FunctionDecl's range up to the right paren.
6044  NewFD->setRangeEnd(D.getSourceRange().getEnd());
6045
6046  if (getLangOpts().CPlusPlus) {
6047    if (FunctionTemplate) {
6048      if (NewFD->isInvalidDecl())
6049        FunctionTemplate->setInvalidDecl();
6050      return FunctionTemplate;
6051    }
6052  }
6053
6054  // OpenCL v1.2 s6.8 static is invalid for kernel functions.
6055  if ((getLangOpts().OpenCLVersion >= 120)
6056      && NewFD->hasAttr<OpenCLKernelAttr>()
6057      && (SC == SC_Static)) {
6058    Diag(D.getIdentifierLoc(), diag::err_static_kernel);
6059    D.setInvalidType();
6060  }
6061
6062  MarkUnusedFileScopedDecl(NewFD);
6063
6064  if (getLangOpts().CUDA)
6065    if (IdentifierInfo *II = NewFD->getIdentifier())
6066      if (!NewFD->isInvalidDecl() &&
6067          NewFD->getDeclContext()->getRedeclContext()->isTranslationUnit()) {
6068        if (II->isStr("cudaConfigureCall")) {
6069          if (!R->getAs<FunctionType>()->getResultType()->isScalarType())
6070            Diag(NewFD->getLocation(), diag::err_config_scalar_return);
6071
6072          Context.setcudaConfigureCallDecl(NewFD);
6073        }
6074      }
6075
6076  // Here we have an function template explicit specialization at class scope.
6077  // The actually specialization will be postponed to template instatiation
6078  // time via the ClassScopeFunctionSpecializationDecl node.
6079  if (isDependentClassScopeExplicitSpecialization) {
6080    ClassScopeFunctionSpecializationDecl *NewSpec =
6081                         ClassScopeFunctionSpecializationDecl::Create(
6082                                Context, CurContext, SourceLocation(),
6083                                cast<CXXMethodDecl>(NewFD),
6084                                HasExplicitTemplateArgs, TemplateArgs);
6085    CurContext->addDecl(NewSpec);
6086    AddToScope = false;
6087  }
6088
6089  return NewFD;
6090}
6091
6092/// \brief Perform semantic checking of a new function declaration.
6093///
6094/// Performs semantic analysis of the new function declaration
6095/// NewFD. This routine performs all semantic checking that does not
6096/// require the actual declarator involved in the declaration, and is
6097/// used both for the declaration of functions as they are parsed
6098/// (called via ActOnDeclarator) and for the declaration of functions
6099/// that have been instantiated via C++ template instantiation (called
6100/// via InstantiateDecl).
6101///
6102/// \param IsExplicitSpecialization whether this new function declaration is
6103/// an explicit specialization of the previous declaration.
6104///
6105/// This sets NewFD->isInvalidDecl() to true if there was an error.
6106///
6107/// \returns true if the function declaration is a redeclaration.
6108bool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD,
6109                                    LookupResult &Previous,
6110                                    bool IsExplicitSpecialization) {
6111  assert(!NewFD->getResultType()->isVariablyModifiedType()
6112         && "Variably modified return types are not handled here");
6113
6114  // Check for a previous declaration of this name.
6115  if (Previous.empty() && NewFD->isExternC()) {
6116    // Since we did not find anything by this name and we're declaring
6117    // an extern "C" function, look for a non-visible extern "C"
6118    // declaration with the same name.
6119    llvm::DenseMap<DeclarationName, NamedDecl *>::iterator Pos
6120      = findLocallyScopedExternalDecl(NewFD->getDeclName());
6121    if (Pos != LocallyScopedExternalDecls.end())
6122      Previous.addDecl(Pos->second);
6123  }
6124
6125  bool Redeclaration = false;
6126
6127  // Merge or overload the declaration with an existing declaration of
6128  // the same name, if appropriate.
6129  if (!Previous.empty()) {
6130    // Determine whether NewFD is an overload of PrevDecl or
6131    // a declaration that requires merging. If it's an overload,
6132    // there's no more work to do here; we'll just add the new
6133    // function to the scope.
6134
6135    NamedDecl *OldDecl = 0;
6136    if (!AllowOverloadingOfFunction(Previous, Context)) {
6137      Redeclaration = true;
6138      OldDecl = Previous.getFoundDecl();
6139    } else {
6140      switch (CheckOverload(S, NewFD, Previous, OldDecl,
6141                            /*NewIsUsingDecl*/ false)) {
6142      case Ovl_Match:
6143        Redeclaration = true;
6144        break;
6145
6146      case Ovl_NonFunction:
6147        Redeclaration = true;
6148        break;
6149
6150      case Ovl_Overload:
6151        Redeclaration = false;
6152        break;
6153      }
6154
6155      if (!getLangOpts().CPlusPlus && !NewFD->hasAttr<OverloadableAttr>()) {
6156        // If a function name is overloadable in C, then every function
6157        // with that name must be marked "overloadable".
6158        Diag(NewFD->getLocation(), diag::err_attribute_overloadable_missing)
6159          << Redeclaration << NewFD;
6160        NamedDecl *OverloadedDecl = 0;
6161        if (Redeclaration)
6162          OverloadedDecl = OldDecl;
6163        else if (!Previous.empty())
6164          OverloadedDecl = Previous.getRepresentativeDecl();
6165        if (OverloadedDecl)
6166          Diag(OverloadedDecl->getLocation(),
6167               diag::note_attribute_overloadable_prev_overload);
6168        NewFD->addAttr(::new (Context) OverloadableAttr(SourceLocation(),
6169                                                        Context));
6170      }
6171    }
6172
6173    if (Redeclaration) {
6174      // NewFD and OldDecl represent declarations that need to be
6175      // merged.
6176      if (MergeFunctionDecl(NewFD, OldDecl, S)) {
6177        NewFD->setInvalidDecl();
6178        return Redeclaration;
6179      }
6180
6181      Previous.clear();
6182      Previous.addDecl(OldDecl);
6183
6184      if (FunctionTemplateDecl *OldTemplateDecl
6185                                    = dyn_cast<FunctionTemplateDecl>(OldDecl)) {
6186        NewFD->setPreviousDeclaration(OldTemplateDecl->getTemplatedDecl());
6187        FunctionTemplateDecl *NewTemplateDecl
6188          = NewFD->getDescribedFunctionTemplate();
6189        assert(NewTemplateDecl && "Template/non-template mismatch");
6190        if (CXXMethodDecl *Method
6191              = dyn_cast<CXXMethodDecl>(NewTemplateDecl->getTemplatedDecl())) {
6192          Method->setAccess(OldTemplateDecl->getAccess());
6193          NewTemplateDecl->setAccess(OldTemplateDecl->getAccess());
6194        }
6195
6196        // If this is an explicit specialization of a member that is a function
6197        // template, mark it as a member specialization.
6198        if (IsExplicitSpecialization &&
6199            NewTemplateDecl->getInstantiatedFromMemberTemplate()) {
6200          NewTemplateDecl->setMemberSpecialization();
6201          assert(OldTemplateDecl->isMemberSpecialization());
6202        }
6203
6204      } else {
6205        if (isa<CXXMethodDecl>(NewFD)) // Set access for out-of-line definitions
6206          NewFD->setAccess(OldDecl->getAccess());
6207        NewFD->setPreviousDeclaration(cast<FunctionDecl>(OldDecl));
6208      }
6209    }
6210  }
6211
6212  // Semantic checking for this function declaration (in isolation).
6213  if (getLangOpts().CPlusPlus) {
6214    // C++-specific checks.
6215    if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(NewFD)) {
6216      CheckConstructor(Constructor);
6217    } else if (CXXDestructorDecl *Destructor =
6218                dyn_cast<CXXDestructorDecl>(NewFD)) {
6219      CXXRecordDecl *Record = Destructor->getParent();
6220      QualType ClassType = Context.getTypeDeclType(Record);
6221
6222      // FIXME: Shouldn't we be able to perform this check even when the class
6223      // type is dependent? Both gcc and edg can handle that.
6224      if (!ClassType->isDependentType()) {
6225        DeclarationName Name
6226          = Context.DeclarationNames.getCXXDestructorName(
6227                                        Context.getCanonicalType(ClassType));
6228        if (NewFD->getDeclName() != Name) {
6229          Diag(NewFD->getLocation(), diag::err_destructor_name);
6230          NewFD->setInvalidDecl();
6231          return Redeclaration;
6232        }
6233      }
6234    } else if (CXXConversionDecl *Conversion
6235               = dyn_cast<CXXConversionDecl>(NewFD)) {
6236      ActOnConversionDeclarator(Conversion);
6237    }
6238
6239    // Find any virtual functions that this function overrides.
6240    if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(NewFD)) {
6241      if (!Method->isFunctionTemplateSpecialization() &&
6242          !Method->getDescribedFunctionTemplate() &&
6243          Method->isCanonicalDecl()) {
6244        if (AddOverriddenMethods(Method->getParent(), Method)) {
6245          // If the function was marked as "static", we have a problem.
6246          if (NewFD->getStorageClass() == SC_Static) {
6247            ReportOverrides(*this, diag::err_static_overrides_virtual, Method);
6248          }
6249        }
6250      }
6251
6252      if (Method->isStatic())
6253        checkThisInStaticMemberFunctionType(Method);
6254    }
6255
6256    // Extra checking for C++ overloaded operators (C++ [over.oper]).
6257    if (NewFD->isOverloadedOperator() &&
6258        CheckOverloadedOperatorDeclaration(NewFD)) {
6259      NewFD->setInvalidDecl();
6260      return Redeclaration;
6261    }
6262
6263    // Extra checking for C++0x literal operators (C++0x [over.literal]).
6264    if (NewFD->getLiteralIdentifier() &&
6265        CheckLiteralOperatorDeclaration(NewFD)) {
6266      NewFD->setInvalidDecl();
6267      return Redeclaration;
6268    }
6269
6270    // In C++, check default arguments now that we have merged decls. Unless
6271    // the lexical context is the class, because in this case this is done
6272    // during delayed parsing anyway.
6273    if (!CurContext->isRecord())
6274      CheckCXXDefaultArguments(NewFD);
6275
6276    // If this function declares a builtin function, check the type of this
6277    // declaration against the expected type for the builtin.
6278    if (unsigned BuiltinID = NewFD->getBuiltinID()) {
6279      ASTContext::GetBuiltinTypeError Error;
6280      LookupPredefedObjCSuperType(*this, S, NewFD->getIdentifier());
6281      QualType T = Context.GetBuiltinType(BuiltinID, Error);
6282      if (!T.isNull() && !Context.hasSameType(T, NewFD->getType())) {
6283        // The type of this function differs from the type of the builtin,
6284        // so forget about the builtin entirely.
6285        Context.BuiltinInfo.ForgetBuiltin(BuiltinID, Context.Idents);
6286      }
6287    }
6288
6289    // If this function is declared as being extern "C", then check to see if
6290    // the function returns a UDT (class, struct, or union type) that is not C
6291    // compatible, and if it does, warn the user.
6292    if (NewFD->hasCLanguageLinkage()) {
6293      QualType R = NewFD->getResultType();
6294      if (R->isIncompleteType() && !R->isVoidType())
6295        Diag(NewFD->getLocation(), diag::warn_return_value_udt_incomplete)
6296            << NewFD << R;
6297      else if (!R.isPODType(Context) && !R->isVoidType() &&
6298               !R->isObjCObjectPointerType())
6299        Diag(NewFD->getLocation(), diag::warn_return_value_udt) << NewFD << R;
6300    }
6301  }
6302  return Redeclaration;
6303}
6304
6305void Sema::CheckMain(FunctionDecl* FD, const DeclSpec& DS) {
6306  // C++11 [basic.start.main]p3:  A program that declares main to be inline,
6307  //   static or constexpr is ill-formed.
6308  // C99 6.7.4p4:  In a hosted environment, the inline function specifier
6309  //   shall not appear in a declaration of main.
6310  // static main is not an error under C99, but we should warn about it.
6311  if (FD->getStorageClass() == SC_Static)
6312    Diag(DS.getStorageClassSpecLoc(), getLangOpts().CPlusPlus
6313         ? diag::err_static_main : diag::warn_static_main)
6314      << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());
6315  if (FD->isInlineSpecified())
6316    Diag(DS.getInlineSpecLoc(), diag::err_inline_main)
6317      << FixItHint::CreateRemoval(DS.getInlineSpecLoc());
6318  if (FD->isConstexpr()) {
6319    Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_main)
6320      << FixItHint::CreateRemoval(DS.getConstexprSpecLoc());
6321    FD->setConstexpr(false);
6322  }
6323
6324  QualType T = FD->getType();
6325  assert(T->isFunctionType() && "function decl is not of function type");
6326  const FunctionType* FT = T->castAs<FunctionType>();
6327
6328  // All the standards say that main() should should return 'int'.
6329  if (Context.hasSameUnqualifiedType(FT->getResultType(), Context.IntTy)) {
6330    // In C and C++, main magically returns 0 if you fall off the end;
6331    // set the flag which tells us that.
6332    // This is C++ [basic.start.main]p5 and C99 5.1.2.2.3.
6333    FD->setHasImplicitReturnZero(true);
6334
6335  // In C with GNU extensions we allow main() to have non-integer return
6336  // type, but we should warn about the extension, and we disable the
6337  // implicit-return-zero rule.
6338  } else if (getLangOpts().GNUMode && !getLangOpts().CPlusPlus) {
6339    Diag(FD->getTypeSpecStartLoc(), diag::ext_main_returns_nonint);
6340
6341  // Otherwise, this is just a flat-out error.
6342  } else {
6343    Diag(FD->getTypeSpecStartLoc(), diag::err_main_returns_nonint);
6344    FD->setInvalidDecl(true);
6345  }
6346
6347  // Treat protoless main() as nullary.
6348  if (isa<FunctionNoProtoType>(FT)) return;
6349
6350  const FunctionProtoType* FTP = cast<const FunctionProtoType>(FT);
6351  unsigned nparams = FTP->getNumArgs();
6352  assert(FD->getNumParams() == nparams);
6353
6354  bool HasExtraParameters = (nparams > 3);
6355
6356  // Darwin passes an undocumented fourth argument of type char**.  If
6357  // other platforms start sprouting these, the logic below will start
6358  // getting shifty.
6359  if (nparams == 4 && Context.getTargetInfo().getTriple().isOSDarwin())
6360    HasExtraParameters = false;
6361
6362  if (HasExtraParameters) {
6363    Diag(FD->getLocation(), diag::err_main_surplus_args) << nparams;
6364    FD->setInvalidDecl(true);
6365    nparams = 3;
6366  }
6367
6368  // FIXME: a lot of the following diagnostics would be improved
6369  // if we had some location information about types.
6370
6371  QualType CharPP =
6372    Context.getPointerType(Context.getPointerType(Context.CharTy));
6373  QualType Expected[] = { Context.IntTy, CharPP, CharPP, CharPP };
6374
6375  for (unsigned i = 0; i < nparams; ++i) {
6376    QualType AT = FTP->getArgType(i);
6377
6378    bool mismatch = true;
6379
6380    if (Context.hasSameUnqualifiedType(AT, Expected[i]))
6381      mismatch = false;
6382    else if (Expected[i] == CharPP) {
6383      // As an extension, the following forms are okay:
6384      //   char const **
6385      //   char const * const *
6386      //   char * const *
6387
6388      QualifierCollector qs;
6389      const PointerType* PT;
6390      if ((PT = qs.strip(AT)->getAs<PointerType>()) &&
6391          (PT = qs.strip(PT->getPointeeType())->getAs<PointerType>()) &&
6392          (QualType(qs.strip(PT->getPointeeType()), 0) == Context.CharTy)) {
6393        qs.removeConst();
6394        mismatch = !qs.empty();
6395      }
6396    }
6397
6398    if (mismatch) {
6399      Diag(FD->getLocation(), diag::err_main_arg_wrong) << i << Expected[i];
6400      // TODO: suggest replacing given type with expected type
6401      FD->setInvalidDecl(true);
6402    }
6403  }
6404
6405  if (nparams == 1 && !FD->isInvalidDecl()) {
6406    Diag(FD->getLocation(), diag::warn_main_one_arg);
6407  }
6408
6409  if (!FD->isInvalidDecl() && FD->getDescribedFunctionTemplate()) {
6410    Diag(FD->getLocation(), diag::err_main_template_decl);
6411    FD->setInvalidDecl();
6412  }
6413}
6414
6415bool Sema::CheckForConstantInitializer(Expr *Init, QualType DclT) {
6416  // FIXME: Need strict checking.  In C89, we need to check for
6417  // any assignment, increment, decrement, function-calls, or
6418  // commas outside of a sizeof.  In C99, it's the same list,
6419  // except that the aforementioned are allowed in unevaluated
6420  // expressions.  Everything else falls under the
6421  // "may accept other forms of constant expressions" exception.
6422  // (We never end up here for C++, so the constant expression
6423  // rules there don't matter.)
6424  if (Init->isConstantInitializer(Context, false))
6425    return false;
6426  Diag(Init->getExprLoc(), diag::err_init_element_not_constant)
6427    << Init->getSourceRange();
6428  return true;
6429}
6430
6431namespace {
6432  // Visits an initialization expression to see if OrigDecl is evaluated in
6433  // its own initialization and throws a warning if it does.
6434  class SelfReferenceChecker
6435      : public EvaluatedExprVisitor<SelfReferenceChecker> {
6436    Sema &S;
6437    Decl *OrigDecl;
6438    bool isRecordType;
6439    bool isPODType;
6440    bool isReferenceType;
6441
6442  public:
6443    typedef EvaluatedExprVisitor<SelfReferenceChecker> Inherited;
6444
6445    SelfReferenceChecker(Sema &S, Decl *OrigDecl) : Inherited(S.Context),
6446                                                    S(S), OrigDecl(OrigDecl) {
6447      isPODType = false;
6448      isRecordType = false;
6449      isReferenceType = false;
6450      if (ValueDecl *VD = dyn_cast<ValueDecl>(OrigDecl)) {
6451        isPODType = VD->getType().isPODType(S.Context);
6452        isRecordType = VD->getType()->isRecordType();
6453        isReferenceType = VD->getType()->isReferenceType();
6454      }
6455    }
6456
6457    // For most expressions, the cast is directly above the DeclRefExpr.
6458    // For conditional operators, the cast can be outside the conditional
6459    // operator if both expressions are DeclRefExpr's.
6460    void HandleValue(Expr *E) {
6461      if (isReferenceType)
6462        return;
6463      E = E->IgnoreParenImpCasts();
6464      if (DeclRefExpr* DRE = dyn_cast<DeclRefExpr>(E)) {
6465        HandleDeclRefExpr(DRE);
6466        return;
6467      }
6468
6469      if (ConditionalOperator *CO = dyn_cast<ConditionalOperator>(E)) {
6470        HandleValue(CO->getTrueExpr());
6471        HandleValue(CO->getFalseExpr());
6472        return;
6473      }
6474
6475      if (isa<MemberExpr>(E)) {
6476        Expr *Base = E->IgnoreParenImpCasts();
6477        while (MemberExpr *ME = dyn_cast<MemberExpr>(Base)) {
6478          // Check for static member variables and don't warn on them.
6479          if (!isa<FieldDecl>(ME->getMemberDecl()))
6480            return;
6481          Base = ME->getBase()->IgnoreParenImpCasts();
6482        }
6483        if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Base))
6484          HandleDeclRefExpr(DRE);
6485        return;
6486      }
6487    }
6488
6489    // Reference types are handled here since all uses of references are
6490    // bad, not just r-value uses.
6491    void VisitDeclRefExpr(DeclRefExpr *E) {
6492      if (isReferenceType)
6493        HandleDeclRefExpr(E);
6494    }
6495
6496    void VisitImplicitCastExpr(ImplicitCastExpr *E) {
6497      if (E->getCastKind() == CK_LValueToRValue ||
6498          (isRecordType && E->getCastKind() == CK_NoOp))
6499        HandleValue(E->getSubExpr());
6500
6501      Inherited::VisitImplicitCastExpr(E);
6502    }
6503
6504    void VisitMemberExpr(MemberExpr *E) {
6505      // Don't warn on arrays since they can be treated as pointers.
6506      if (E->getType()->canDecayToPointerType()) return;
6507
6508      // Warn when a non-static method call is followed by non-static member
6509      // field accesses, which is followed by a DeclRefExpr.
6510      CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(E->getMemberDecl());
6511      bool Warn = (MD && !MD->isStatic());
6512      Expr *Base = E->getBase()->IgnoreParenImpCasts();
6513      while (MemberExpr *ME = dyn_cast<MemberExpr>(Base)) {
6514        if (!isa<FieldDecl>(ME->getMemberDecl()))
6515          Warn = false;
6516        Base = ME->getBase()->IgnoreParenImpCasts();
6517      }
6518
6519      if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Base)) {
6520        if (Warn)
6521          HandleDeclRefExpr(DRE);
6522        return;
6523      }
6524
6525      // The base of a MemberExpr is not a MemberExpr or a DeclRefExpr.
6526      // Visit that expression.
6527      Visit(Base);
6528    }
6529
6530    void VisitUnaryOperator(UnaryOperator *E) {
6531      // For POD record types, addresses of its own members are well-defined.
6532      if (E->getOpcode() == UO_AddrOf && isRecordType &&
6533          isa<MemberExpr>(E->getSubExpr()->IgnoreParens())) {
6534        if (!isPODType)
6535          HandleValue(E->getSubExpr());
6536        return;
6537      }
6538      Inherited::VisitUnaryOperator(E);
6539    }
6540
6541    void VisitObjCMessageExpr(ObjCMessageExpr *E) { return; }
6542
6543    void HandleDeclRefExpr(DeclRefExpr *DRE) {
6544      Decl* ReferenceDecl = DRE->getDecl();
6545      if (OrigDecl != ReferenceDecl) return;
6546      unsigned diag = isReferenceType
6547          ? diag::warn_uninit_self_reference_in_reference_init
6548          : diag::warn_uninit_self_reference_in_init;
6549      S.DiagRuntimeBehavior(DRE->getLocStart(), DRE,
6550                            S.PDiag(diag)
6551                              << DRE->getNameInfo().getName()
6552                              << OrigDecl->getLocation()
6553                              << DRE->getSourceRange());
6554    }
6555  };
6556
6557  /// CheckSelfReference - Warns if OrigDecl is used in expression E.
6558  static void CheckSelfReference(Sema &S, Decl* OrigDecl, Expr *E,
6559                                 bool DirectInit) {
6560    // Parameters arguments are occassionially constructed with itself,
6561    // for instance, in recursive functions.  Skip them.
6562    if (isa<ParmVarDecl>(OrigDecl))
6563      return;
6564
6565    E = E->IgnoreParens();
6566
6567    // Skip checking T a = a where T is not a record or reference type.
6568    // Doing so is a way to silence uninitialized warnings.
6569    if (!DirectInit && !cast<VarDecl>(OrigDecl)->getType()->isRecordType())
6570      if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E))
6571        if (ICE->getCastKind() == CK_LValueToRValue)
6572          if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(ICE->getSubExpr()))
6573            if (DRE->getDecl() == OrigDecl)
6574              return;
6575
6576    SelfReferenceChecker(S, OrigDecl).Visit(E);
6577  }
6578}
6579
6580/// AddInitializerToDecl - Adds the initializer Init to the
6581/// declaration dcl. If DirectInit is true, this is C++ direct
6582/// initialization rather than copy initialization.
6583void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init,
6584                                bool DirectInit, bool TypeMayContainAuto) {
6585  // If there is no declaration, there was an error parsing it.  Just ignore
6586  // the initializer.
6587  if (RealDecl == 0 || RealDecl->isInvalidDecl())
6588    return;
6589
6590  if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(RealDecl)) {
6591    // With declarators parsed the way they are, the parser cannot
6592    // distinguish between a normal initializer and a pure-specifier.
6593    // Thus this grotesque test.
6594    IntegerLiteral *IL;
6595    if ((IL = dyn_cast<IntegerLiteral>(Init)) && IL->getValue() == 0 &&
6596        Context.getCanonicalType(IL->getType()) == Context.IntTy)
6597      CheckPureMethod(Method, Init->getSourceRange());
6598    else {
6599      Diag(Method->getLocation(), diag::err_member_function_initialization)
6600        << Method->getDeclName() << Init->getSourceRange();
6601      Method->setInvalidDecl();
6602    }
6603    return;
6604  }
6605
6606  VarDecl *VDecl = dyn_cast<VarDecl>(RealDecl);
6607  if (!VDecl) {
6608    assert(!isa<FieldDecl>(RealDecl) && "field init shouldn't get here");
6609    Diag(RealDecl->getLocation(), diag::err_illegal_initializer);
6610    RealDecl->setInvalidDecl();
6611    return;
6612  }
6613
6614  ParenListExpr *CXXDirectInit = dyn_cast<ParenListExpr>(Init);
6615
6616  // C++11 [decl.spec.auto]p6. Deduce the type which 'auto' stands in for.
6617  AutoType *Auto = 0;
6618  if (TypeMayContainAuto &&
6619      (Auto = VDecl->getType()->getContainedAutoType()) &&
6620      !Auto->isDeduced()) {
6621    Expr *DeduceInit = Init;
6622    // Initializer could be a C++ direct-initializer. Deduction only works if it
6623    // contains exactly one expression.
6624    if (CXXDirectInit) {
6625      if (CXXDirectInit->getNumExprs() == 0) {
6626        // It isn't possible to write this directly, but it is possible to
6627        // end up in this situation with "auto x(some_pack...);"
6628        Diag(CXXDirectInit->getLocStart(),
6629             diag::err_auto_var_init_no_expression)
6630          << VDecl->getDeclName() << VDecl->getType()
6631          << VDecl->getSourceRange();
6632        RealDecl->setInvalidDecl();
6633        return;
6634      } else if (CXXDirectInit->getNumExprs() > 1) {
6635        Diag(CXXDirectInit->getExpr(1)->getLocStart(),
6636             diag::err_auto_var_init_multiple_expressions)
6637          << VDecl->getDeclName() << VDecl->getType()
6638          << VDecl->getSourceRange();
6639        RealDecl->setInvalidDecl();
6640        return;
6641      } else {
6642        DeduceInit = CXXDirectInit->getExpr(0);
6643      }
6644    }
6645    TypeSourceInfo *DeducedType = 0;
6646    if (DeduceAutoType(VDecl->getTypeSourceInfo(), DeduceInit, DeducedType) ==
6647            DAR_Failed)
6648      DiagnoseAutoDeductionFailure(VDecl, DeduceInit);
6649    if (!DeducedType) {
6650      RealDecl->setInvalidDecl();
6651      return;
6652    }
6653    VDecl->setTypeSourceInfo(DeducedType);
6654    VDecl->setType(DeducedType->getType());
6655    VDecl->ClearLVCache();
6656
6657    // In ARC, infer lifetime.
6658    if (getLangOpts().ObjCAutoRefCount && inferObjCARCLifetime(VDecl))
6659      VDecl->setInvalidDecl();
6660
6661    // Warn if we deduced 'id'. 'auto' usually implies type-safety, but using
6662    // 'id' instead of a specific object type prevents most of our usual checks.
6663    // We only want to warn outside of template instantiations, though:
6664    // inside a template, the 'id' could have come from a parameter.
6665    if (ActiveTemplateInstantiations.empty() &&
6666        DeducedType->getType()->isObjCIdType()) {
6667      SourceLocation Loc = DeducedType->getTypeLoc().getBeginLoc();
6668      Diag(Loc, diag::warn_auto_var_is_id)
6669        << VDecl->getDeclName() << DeduceInit->getSourceRange();
6670    }
6671
6672    // If this is a redeclaration, check that the type we just deduced matches
6673    // the previously declared type.
6674    if (VarDecl *Old = VDecl->getPreviousDecl())
6675      MergeVarDeclTypes(VDecl, Old);
6676  }
6677
6678  if (VDecl->isLocalVarDecl() && VDecl->hasExternalStorage()) {
6679    // C99 6.7.8p5. C++ has no such restriction, but that is a defect.
6680    Diag(VDecl->getLocation(), diag::err_block_extern_cant_init);
6681    VDecl->setInvalidDecl();
6682    return;
6683  }
6684
6685  if (!VDecl->getType()->isDependentType()) {
6686    // A definition must end up with a complete type, which means it must be
6687    // complete with the restriction that an array type might be completed by
6688    // the initializer; note that later code assumes this restriction.
6689    QualType BaseDeclType = VDecl->getType();
6690    if (const ArrayType *Array = Context.getAsIncompleteArrayType(BaseDeclType))
6691      BaseDeclType = Array->getElementType();
6692    if (RequireCompleteType(VDecl->getLocation(), BaseDeclType,
6693                            diag::err_typecheck_decl_incomplete_type)) {
6694      RealDecl->setInvalidDecl();
6695      return;
6696    }
6697
6698    // The variable can not have an abstract class type.
6699    if (RequireNonAbstractType(VDecl->getLocation(), VDecl->getType(),
6700                               diag::err_abstract_type_in_decl,
6701                               AbstractVariableType))
6702      VDecl->setInvalidDecl();
6703  }
6704
6705  const VarDecl *Def;
6706  if ((Def = VDecl->getDefinition()) && Def != VDecl) {
6707    Diag(VDecl->getLocation(), diag::err_redefinition)
6708      << VDecl->getDeclName();
6709    Diag(Def->getLocation(), diag::note_previous_definition);
6710    VDecl->setInvalidDecl();
6711    return;
6712  }
6713
6714  const VarDecl* PrevInit = 0;
6715  if (getLangOpts().CPlusPlus) {
6716    // C++ [class.static.data]p4
6717    //   If a static data member is of const integral or const
6718    //   enumeration type, its declaration in the class definition can
6719    //   specify a constant-initializer which shall be an integral
6720    //   constant expression (5.19). In that case, the member can appear
6721    //   in integral constant expressions. The member shall still be
6722    //   defined in a namespace scope if it is used in the program and the
6723    //   namespace scope definition shall not contain an initializer.
6724    //
6725    // We already performed a redefinition check above, but for static
6726    // data members we also need to check whether there was an in-class
6727    // declaration with an initializer.
6728    if (VDecl->isStaticDataMember() && VDecl->getAnyInitializer(PrevInit)) {
6729      Diag(VDecl->getLocation(), diag::err_redefinition)
6730        << VDecl->getDeclName();
6731      Diag(PrevInit->getLocation(), diag::note_previous_definition);
6732      return;
6733    }
6734
6735    if (VDecl->hasLocalStorage())
6736      getCurFunction()->setHasBranchProtectedScope();
6737
6738    if (DiagnoseUnexpandedParameterPack(Init, UPPC_Initializer)) {
6739      VDecl->setInvalidDecl();
6740      return;
6741    }
6742  }
6743
6744  // OpenCL 1.1 6.5.2: "Variables allocated in the __local address space inside
6745  // a kernel function cannot be initialized."
6746  if (VDecl->getStorageClass() == SC_OpenCLWorkGroupLocal) {
6747    Diag(VDecl->getLocation(), diag::err_local_cant_init);
6748    VDecl->setInvalidDecl();
6749    return;
6750  }
6751
6752  // Get the decls type and save a reference for later, since
6753  // CheckInitializerTypes may change it.
6754  QualType DclT = VDecl->getType(), SavT = DclT;
6755
6756  // Top-level message sends default to 'id' when we're in a debugger
6757  // and we are assigning it to a variable of 'id' type.
6758  if (getLangOpts().DebuggerCastResultToId && DclT->isObjCIdType())
6759    if (Init->getType() == Context.UnknownAnyTy && isa<ObjCMessageExpr>(Init)) {
6760      ExprResult Result = forceUnknownAnyToType(Init, Context.getObjCIdType());
6761      if (Result.isInvalid()) {
6762        VDecl->setInvalidDecl();
6763        return;
6764      }
6765      Init = Result.take();
6766    }
6767
6768  // Perform the initialization.
6769  if (!VDecl->isInvalidDecl()) {
6770    InitializedEntity Entity = InitializedEntity::InitializeVariable(VDecl);
6771    InitializationKind Kind
6772      = DirectInit ?
6773          CXXDirectInit ? InitializationKind::CreateDirect(VDecl->getLocation(),
6774                                                           Init->getLocStart(),
6775                                                           Init->getLocEnd())
6776                        : InitializationKind::CreateDirectList(
6777                                                          VDecl->getLocation())
6778                   : InitializationKind::CreateCopy(VDecl->getLocation(),
6779                                                    Init->getLocStart());
6780
6781    Expr **Args = &Init;
6782    unsigned NumArgs = 1;
6783    if (CXXDirectInit) {
6784      Args = CXXDirectInit->getExprs();
6785      NumArgs = CXXDirectInit->getNumExprs();
6786    }
6787    InitializationSequence InitSeq(*this, Entity, Kind, Args, NumArgs);
6788    ExprResult Result = InitSeq.Perform(*this, Entity, Kind,
6789                                        MultiExprArg(Args, NumArgs), &DclT);
6790    if (Result.isInvalid()) {
6791      VDecl->setInvalidDecl();
6792      return;
6793    }
6794
6795    Init = Result.takeAs<Expr>();
6796  }
6797
6798  // Check for self-references within variable initializers.
6799  // Variables declared within a function/method body (except for references)
6800  // are handled by a dataflow analysis.
6801  if (!VDecl->hasLocalStorage() || VDecl->getType()->isRecordType() ||
6802      VDecl->getType()->isReferenceType()) {
6803    CheckSelfReference(*this, RealDecl, Init, DirectInit);
6804  }
6805
6806  // If the type changed, it means we had an incomplete type that was
6807  // completed by the initializer. For example:
6808  //   int ary[] = { 1, 3, 5 };
6809  // "ary" transitions from an IncompleteArrayType to a ConstantArrayType.
6810  if (!VDecl->isInvalidDecl() && (DclT != SavT))
6811    VDecl->setType(DclT);
6812
6813  // Check any implicit conversions within the expression.
6814  CheckImplicitConversions(Init, VDecl->getLocation());
6815
6816  if (!VDecl->isInvalidDecl()) {
6817    checkUnsafeAssigns(VDecl->getLocation(), VDecl->getType(), Init);
6818
6819    if (VDecl->hasAttr<BlocksAttr>())
6820      checkRetainCycles(VDecl, Init);
6821
6822    // It is safe to assign a weak reference into a strong variable.
6823    // Although this code can still have problems:
6824    //   id x = self.weakProp;
6825    //   id y = self.weakProp;
6826    // we do not warn to warn spuriously when 'x' and 'y' are on separate
6827    // paths through the function. This should be revisited if
6828    // -Wrepeated-use-of-weak is made flow-sensitive.
6829    if (VDecl->getType().getObjCLifetime() == Qualifiers::OCL_Strong) {
6830      DiagnosticsEngine::Level Level =
6831        Diags.getDiagnosticLevel(diag::warn_arc_repeated_use_of_weak,
6832                                 Init->getLocStart());
6833      if (Level != DiagnosticsEngine::Ignored)
6834        getCurFunction()->markSafeWeakUse(Init);
6835    }
6836  }
6837
6838  Init = MaybeCreateExprWithCleanups(Init);
6839  // Attach the initializer to the decl.
6840  VDecl->setInit(Init);
6841
6842  if (VDecl->isLocalVarDecl()) {
6843    // C99 6.7.8p4: All the expressions in an initializer for an object that has
6844    // static storage duration shall be constant expressions or string literals.
6845    // C++ does not have this restriction.
6846    if (!getLangOpts().CPlusPlus && !VDecl->isInvalidDecl() &&
6847        VDecl->getStorageClass() == SC_Static)
6848      CheckForConstantInitializer(Init, DclT);
6849  } else if (VDecl->isStaticDataMember() &&
6850             VDecl->getLexicalDeclContext()->isRecord()) {
6851    // This is an in-class initialization for a static data member, e.g.,
6852    //
6853    // struct S {
6854    //   static const int value = 17;
6855    // };
6856
6857    // C++ [class.mem]p4:
6858    //   A member-declarator can contain a constant-initializer only
6859    //   if it declares a static member (9.4) of const integral or
6860    //   const enumeration type, see 9.4.2.
6861    //
6862    // C++11 [class.static.data]p3:
6863    //   If a non-volatile const static data member is of integral or
6864    //   enumeration type, its declaration in the class definition can
6865    //   specify a brace-or-equal-initializer in which every initalizer-clause
6866    //   that is an assignment-expression is a constant expression. A static
6867    //   data member of literal type can be declared in the class definition
6868    //   with the constexpr specifier; if so, its declaration shall specify a
6869    //   brace-or-equal-initializer in which every initializer-clause that is
6870    //   an assignment-expression is a constant expression.
6871
6872    // Do nothing on dependent types.
6873    if (DclT->isDependentType()) {
6874
6875    // Allow any 'static constexpr' members, whether or not they are of literal
6876    // type. We separately check that every constexpr variable is of literal
6877    // type.
6878    } else if (VDecl->isConstexpr()) {
6879
6880    // Require constness.
6881    } else if (!DclT.isConstQualified()) {
6882      Diag(VDecl->getLocation(), diag::err_in_class_initializer_non_const)
6883        << Init->getSourceRange();
6884      VDecl->setInvalidDecl();
6885
6886    // We allow integer constant expressions in all cases.
6887    } else if (DclT->isIntegralOrEnumerationType()) {
6888      // Check whether the expression is a constant expression.
6889      SourceLocation Loc;
6890      if (getLangOpts().CPlusPlus11 && DclT.isVolatileQualified())
6891        // In C++11, a non-constexpr const static data member with an
6892        // in-class initializer cannot be volatile.
6893        Diag(VDecl->getLocation(), diag::err_in_class_initializer_volatile);
6894      else if (Init->isValueDependent())
6895        ; // Nothing to check.
6896      else if (Init->isIntegerConstantExpr(Context, &Loc))
6897        ; // Ok, it's an ICE!
6898      else if (Init->isEvaluatable(Context)) {
6899        // If we can constant fold the initializer through heroics, accept it,
6900        // but report this as a use of an extension for -pedantic.
6901        Diag(Loc, diag::ext_in_class_initializer_non_constant)
6902          << Init->getSourceRange();
6903      } else {
6904        // Otherwise, this is some crazy unknown case.  Report the issue at the
6905        // location provided by the isIntegerConstantExpr failed check.
6906        Diag(Loc, diag::err_in_class_initializer_non_constant)
6907          << Init->getSourceRange();
6908        VDecl->setInvalidDecl();
6909      }
6910
6911    // We allow foldable floating-point constants as an extension.
6912    } else if (DclT->isFloatingType()) { // also permits complex, which is ok
6913      Diag(VDecl->getLocation(), diag::ext_in_class_initializer_float_type)
6914        << DclT << Init->getSourceRange();
6915      if (getLangOpts().CPlusPlus11)
6916        Diag(VDecl->getLocation(),
6917             diag::note_in_class_initializer_float_type_constexpr)
6918          << FixItHint::CreateInsertion(VDecl->getLocStart(), "constexpr ");
6919
6920      if (!Init->isValueDependent() && !Init->isEvaluatable(Context)) {
6921        Diag(Init->getExprLoc(), diag::err_in_class_initializer_non_constant)
6922          << Init->getSourceRange();
6923        VDecl->setInvalidDecl();
6924      }
6925
6926    // Suggest adding 'constexpr' in C++11 for literal types.
6927    } else if (getLangOpts().CPlusPlus11 && DclT->isLiteralType()) {
6928      Diag(VDecl->getLocation(), diag::err_in_class_initializer_literal_type)
6929        << DclT << Init->getSourceRange()
6930        << FixItHint::CreateInsertion(VDecl->getLocStart(), "constexpr ");
6931      VDecl->setConstexpr(true);
6932
6933    } else {
6934      Diag(VDecl->getLocation(), diag::err_in_class_initializer_bad_type)
6935        << DclT << Init->getSourceRange();
6936      VDecl->setInvalidDecl();
6937    }
6938  } else if (VDecl->isFileVarDecl()) {
6939    if (VDecl->getStorageClassAsWritten() == SC_Extern &&
6940        (!getLangOpts().CPlusPlus ||
6941         !Context.getBaseElementType(VDecl->getType()).isConstQualified()))
6942      Diag(VDecl->getLocation(), diag::warn_extern_init);
6943
6944    // C99 6.7.8p4. All file scoped initializers need to be constant.
6945    if (!getLangOpts().CPlusPlus && !VDecl->isInvalidDecl())
6946      CheckForConstantInitializer(Init, DclT);
6947  }
6948
6949  // We will represent direct-initialization similarly to copy-initialization:
6950  //    int x(1);  -as-> int x = 1;
6951  //    ClassType x(a,b,c); -as-> ClassType x = ClassType(a,b,c);
6952  //
6953  // Clients that want to distinguish between the two forms, can check for
6954  // direct initializer using VarDecl::getInitStyle().
6955  // A major benefit is that clients that don't particularly care about which
6956  // exactly form was it (like the CodeGen) can handle both cases without
6957  // special case code.
6958
6959  // C++ 8.5p11:
6960  // The form of initialization (using parentheses or '=') is generally
6961  // insignificant, but does matter when the entity being initialized has a
6962  // class type.
6963  if (CXXDirectInit) {
6964    assert(DirectInit && "Call-style initializer must be direct init.");
6965    VDecl->setInitStyle(VarDecl::CallInit);
6966  } else if (DirectInit) {
6967    // This must be list-initialization. No other way is direct-initialization.
6968    VDecl->setInitStyle(VarDecl::ListInit);
6969  }
6970
6971  CheckCompleteVariableDeclaration(VDecl);
6972}
6973
6974/// ActOnInitializerError - Given that there was an error parsing an
6975/// initializer for the given declaration, try to return to some form
6976/// of sanity.
6977void Sema::ActOnInitializerError(Decl *D) {
6978  // Our main concern here is re-establishing invariants like "a
6979  // variable's type is either dependent or complete".
6980  if (!D || D->isInvalidDecl()) return;
6981
6982  VarDecl *VD = dyn_cast<VarDecl>(D);
6983  if (!VD) return;
6984
6985  // Auto types are meaningless if we can't make sense of the initializer.
6986  if (ParsingInitForAutoVars.count(D)) {
6987    D->setInvalidDecl();
6988    return;
6989  }
6990
6991  QualType Ty = VD->getType();
6992  if (Ty->isDependentType()) return;
6993
6994  // Require a complete type.
6995  if (RequireCompleteType(VD->getLocation(),
6996                          Context.getBaseElementType(Ty),
6997                          diag::err_typecheck_decl_incomplete_type)) {
6998    VD->setInvalidDecl();
6999    return;
7000  }
7001
7002  // Require an abstract type.
7003  if (RequireNonAbstractType(VD->getLocation(), Ty,
7004                             diag::err_abstract_type_in_decl,
7005                             AbstractVariableType)) {
7006    VD->setInvalidDecl();
7007    return;
7008  }
7009
7010  // Don't bother complaining about constructors or destructors,
7011  // though.
7012}
7013
7014void Sema::ActOnUninitializedDecl(Decl *RealDecl,
7015                                  bool TypeMayContainAuto) {
7016  // If there is no declaration, there was an error parsing it. Just ignore it.
7017  if (RealDecl == 0)
7018    return;
7019
7020  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {
7021    QualType Type = Var->getType();
7022
7023    // C++11 [dcl.spec.auto]p3
7024    if (TypeMayContainAuto && Type->getContainedAutoType()) {
7025      Diag(Var->getLocation(), diag::err_auto_var_requires_init)
7026        << Var->getDeclName() << Type;
7027      Var->setInvalidDecl();
7028      return;
7029    }
7030
7031    // C++11 [class.static.data]p3: A static data member can be declared with
7032    // the constexpr specifier; if so, its declaration shall specify
7033    // a brace-or-equal-initializer.
7034    // C++11 [dcl.constexpr]p1: The constexpr specifier shall be applied only to
7035    // the definition of a variable [...] or the declaration of a static data
7036    // member.
7037    if (Var->isConstexpr() && !Var->isThisDeclarationADefinition()) {
7038      if (Var->isStaticDataMember())
7039        Diag(Var->getLocation(),
7040             diag::err_constexpr_static_mem_var_requires_init)
7041          << Var->getDeclName();
7042      else
7043        Diag(Var->getLocation(), diag::err_invalid_constexpr_var_decl);
7044      Var->setInvalidDecl();
7045      return;
7046    }
7047
7048    switch (Var->isThisDeclarationADefinition()) {
7049    case VarDecl::Definition:
7050      if (!Var->isStaticDataMember() || !Var->getAnyInitializer())
7051        break;
7052
7053      // We have an out-of-line definition of a static data member
7054      // that has an in-class initializer, so we type-check this like
7055      // a declaration.
7056      //
7057      // Fall through
7058
7059    case VarDecl::DeclarationOnly:
7060      // It's only a declaration.
7061
7062      // Block scope. C99 6.7p7: If an identifier for an object is
7063      // declared with no linkage (C99 6.2.2p6), the type for the
7064      // object shall be complete.
7065      if (!Type->isDependentType() && Var->isLocalVarDecl() &&
7066          !Var->getLinkage() && !Var->isInvalidDecl() &&
7067          RequireCompleteType(Var->getLocation(), Type,
7068                              diag::err_typecheck_decl_incomplete_type))
7069        Var->setInvalidDecl();
7070
7071      // Make sure that the type is not abstract.
7072      if (!Type->isDependentType() && !Var->isInvalidDecl() &&
7073          RequireNonAbstractType(Var->getLocation(), Type,
7074                                 diag::err_abstract_type_in_decl,
7075                                 AbstractVariableType))
7076        Var->setInvalidDecl();
7077      if (!Type->isDependentType() && !Var->isInvalidDecl() &&
7078          Var->getStorageClass() == SC_PrivateExtern) {
7079        Diag(Var->getLocation(), diag::warn_private_extern);
7080        Diag(Var->getLocation(), diag::note_private_extern);
7081      }
7082
7083      return;
7084
7085    case VarDecl::TentativeDefinition:
7086      // File scope. C99 6.9.2p2: A declaration of an identifier for an
7087      // object that has file scope without an initializer, and without a
7088      // storage-class specifier or with the storage-class specifier "static",
7089      // constitutes a tentative definition. Note: A tentative definition with
7090      // external linkage is valid (C99 6.2.2p5).
7091      if (!Var->isInvalidDecl()) {
7092        if (const IncompleteArrayType *ArrayT
7093                                    = Context.getAsIncompleteArrayType(Type)) {
7094          if (RequireCompleteType(Var->getLocation(),
7095                                  ArrayT->getElementType(),
7096                                  diag::err_illegal_decl_array_incomplete_type))
7097            Var->setInvalidDecl();
7098        } else if (Var->getStorageClass() == SC_Static) {
7099          // C99 6.9.2p3: If the declaration of an identifier for an object is
7100          // a tentative definition and has internal linkage (C99 6.2.2p3), the
7101          // declared type shall not be an incomplete type.
7102          // NOTE: code such as the following
7103          //     static struct s;
7104          //     struct s { int a; };
7105          // is accepted by gcc. Hence here we issue a warning instead of
7106          // an error and we do not invalidate the static declaration.
7107          // NOTE: to avoid multiple warnings, only check the first declaration.
7108          if (Var->getPreviousDecl() == 0)
7109            RequireCompleteType(Var->getLocation(), Type,
7110                                diag::ext_typecheck_decl_incomplete_type);
7111        }
7112      }
7113
7114      // Record the tentative definition; we're done.
7115      if (!Var->isInvalidDecl())
7116        TentativeDefinitions.push_back(Var);
7117      return;
7118    }
7119
7120    // Provide a specific diagnostic for uninitialized variable
7121    // definitions with incomplete array type.
7122    if (Type->isIncompleteArrayType()) {
7123      Diag(Var->getLocation(),
7124           diag::err_typecheck_incomplete_array_needs_initializer);
7125      Var->setInvalidDecl();
7126      return;
7127    }
7128
7129    // Provide a specific diagnostic for uninitialized variable
7130    // definitions with reference type.
7131    if (Type->isReferenceType()) {
7132      Diag(Var->getLocation(), diag::err_reference_var_requires_init)
7133        << Var->getDeclName()
7134        << SourceRange(Var->getLocation(), Var->getLocation());
7135      Var->setInvalidDecl();
7136      return;
7137    }
7138
7139    // Do not attempt to type-check the default initializer for a
7140    // variable with dependent type.
7141    if (Type->isDependentType())
7142      return;
7143
7144    if (Var->isInvalidDecl())
7145      return;
7146
7147    if (RequireCompleteType(Var->getLocation(),
7148                            Context.getBaseElementType(Type),
7149                            diag::err_typecheck_decl_incomplete_type)) {
7150      Var->setInvalidDecl();
7151      return;
7152    }
7153
7154    // The variable can not have an abstract class type.
7155    if (RequireNonAbstractType(Var->getLocation(), Type,
7156                               diag::err_abstract_type_in_decl,
7157                               AbstractVariableType)) {
7158      Var->setInvalidDecl();
7159      return;
7160    }
7161
7162    // Check for jumps past the implicit initializer.  C++0x
7163    // clarifies that this applies to a "variable with automatic
7164    // storage duration", not a "local variable".
7165    // C++11 [stmt.dcl]p3
7166    //   A program that jumps from a point where a variable with automatic
7167    //   storage duration is not in scope to a point where it is in scope is
7168    //   ill-formed unless the variable has scalar type, class type with a
7169    //   trivial default constructor and a trivial destructor, a cv-qualified
7170    //   version of one of these types, or an array of one of the preceding
7171    //   types and is declared without an initializer.
7172    if (getLangOpts().CPlusPlus && Var->hasLocalStorage()) {
7173      if (const RecordType *Record
7174            = Context.getBaseElementType(Type)->getAs<RecordType>()) {
7175        CXXRecordDecl *CXXRecord = cast<CXXRecordDecl>(Record->getDecl());
7176        // Mark the function for further checking even if the looser rules of
7177        // C++11 do not require such checks, so that we can diagnose
7178        // incompatibilities with C++98.
7179        if (!CXXRecord->isPOD())
7180          getCurFunction()->setHasBranchProtectedScope();
7181      }
7182    }
7183
7184    // C++03 [dcl.init]p9:
7185    //   If no initializer is specified for an object, and the
7186    //   object is of (possibly cv-qualified) non-POD class type (or
7187    //   array thereof), the object shall be default-initialized; if
7188    //   the object is of const-qualified type, the underlying class
7189    //   type shall have a user-declared default
7190    //   constructor. Otherwise, if no initializer is specified for
7191    //   a non- static object, the object and its subobjects, if
7192    //   any, have an indeterminate initial value); if the object
7193    //   or any of its subobjects are of const-qualified type, the
7194    //   program is ill-formed.
7195    // C++0x [dcl.init]p11:
7196    //   If no initializer is specified for an object, the object is
7197    //   default-initialized; [...].
7198    InitializedEntity Entity = InitializedEntity::InitializeVariable(Var);
7199    InitializationKind Kind
7200      = InitializationKind::CreateDefault(Var->getLocation());
7201
7202    InitializationSequence InitSeq(*this, Entity, Kind, 0, 0);
7203    ExprResult Init = InitSeq.Perform(*this, Entity, Kind, MultiExprArg());
7204    if (Init.isInvalid())
7205      Var->setInvalidDecl();
7206    else if (Init.get()) {
7207      Var->setInit(MaybeCreateExprWithCleanups(Init.get()));
7208      // This is important for template substitution.
7209      Var->setInitStyle(VarDecl::CallInit);
7210    }
7211
7212    CheckCompleteVariableDeclaration(Var);
7213  }
7214}
7215
7216void Sema::ActOnCXXForRangeDecl(Decl *D) {
7217  VarDecl *VD = dyn_cast<VarDecl>(D);
7218  if (!VD) {
7219    Diag(D->getLocation(), diag::err_for_range_decl_must_be_var);
7220    D->setInvalidDecl();
7221    return;
7222  }
7223
7224  VD->setCXXForRangeDecl(true);
7225
7226  // for-range-declaration cannot be given a storage class specifier.
7227  int Error = -1;
7228  switch (VD->getStorageClassAsWritten()) {
7229  case SC_None:
7230    break;
7231  case SC_Extern:
7232    Error = 0;
7233    break;
7234  case SC_Static:
7235    Error = 1;
7236    break;
7237  case SC_PrivateExtern:
7238    Error = 2;
7239    break;
7240  case SC_Auto:
7241    Error = 3;
7242    break;
7243  case SC_Register:
7244    Error = 4;
7245    break;
7246  case SC_OpenCLWorkGroupLocal:
7247    llvm_unreachable("Unexpected storage class");
7248  }
7249  if (VD->isConstexpr())
7250    Error = 5;
7251  if (Error != -1) {
7252    Diag(VD->getOuterLocStart(), diag::err_for_range_storage_class)
7253      << VD->getDeclName() << Error;
7254    D->setInvalidDecl();
7255  }
7256}
7257
7258void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {
7259  if (var->isInvalidDecl()) return;
7260
7261  // In ARC, don't allow jumps past the implicit initialization of a
7262  // local retaining variable.
7263  if (getLangOpts().ObjCAutoRefCount &&
7264      var->hasLocalStorage()) {
7265    switch (var->getType().getObjCLifetime()) {
7266    case Qualifiers::OCL_None:
7267    case Qualifiers::OCL_ExplicitNone:
7268    case Qualifiers::OCL_Autoreleasing:
7269      break;
7270
7271    case Qualifiers::OCL_Weak:
7272    case Qualifiers::OCL_Strong:
7273      getCurFunction()->setHasBranchProtectedScope();
7274      break;
7275    }
7276  }
7277
7278  if (var->isThisDeclarationADefinition() &&
7279      var->getLinkage() == ExternalLinkage &&
7280      getDiagnostics().getDiagnosticLevel(
7281                       diag::warn_missing_variable_declarations,
7282                       var->getLocation())) {
7283    // Find a previous declaration that's not a definition.
7284    VarDecl *prev = var->getPreviousDecl();
7285    while (prev && prev->isThisDeclarationADefinition())
7286      prev = prev->getPreviousDecl();
7287
7288    if (!prev)
7289      Diag(var->getLocation(), diag::warn_missing_variable_declarations) << var;
7290  }
7291
7292  // All the following checks are C++ only.
7293  if (!getLangOpts().CPlusPlus) return;
7294
7295  QualType type = var->getType();
7296  if (type->isDependentType()) return;
7297
7298  // __block variables might require us to capture a copy-initializer.
7299  if (var->hasAttr<BlocksAttr>()) {
7300    // It's currently invalid to ever have a __block variable with an
7301    // array type; should we diagnose that here?
7302
7303    // Regardless, we don't want to ignore array nesting when
7304    // constructing this copy.
7305    if (type->isStructureOrClassType()) {
7306      SourceLocation poi = var->getLocation();
7307      Expr *varRef =new (Context) DeclRefExpr(var, false, type, VK_LValue, poi);
7308      ExprResult result =
7309        PerformCopyInitialization(
7310                        InitializedEntity::InitializeBlock(poi, type, false),
7311                                  poi, Owned(varRef));
7312      if (!result.isInvalid()) {
7313        result = MaybeCreateExprWithCleanups(result);
7314        Expr *init = result.takeAs<Expr>();
7315        Context.setBlockVarCopyInits(var, init);
7316      }
7317    }
7318  }
7319
7320  Expr *Init = var->getInit();
7321  bool IsGlobal = var->hasGlobalStorage() && !var->isStaticLocal();
7322  QualType baseType = Context.getBaseElementType(type);
7323
7324  if (!var->getDeclContext()->isDependentContext() &&
7325      Init && !Init->isValueDependent()) {
7326    if (IsGlobal && !var->isConstexpr() &&
7327        getDiagnostics().getDiagnosticLevel(diag::warn_global_constructor,
7328                                            var->getLocation())
7329          != DiagnosticsEngine::Ignored &&
7330        !Init->isConstantInitializer(Context, baseType->isReferenceType()))
7331      Diag(var->getLocation(), diag::warn_global_constructor)
7332        << Init->getSourceRange();
7333
7334    if (var->isConstexpr()) {
7335      llvm::SmallVector<PartialDiagnosticAt, 8> Notes;
7336      if (!var->evaluateValue(Notes) || !var->isInitICE()) {
7337        SourceLocation DiagLoc = var->getLocation();
7338        // If the note doesn't add any useful information other than a source
7339        // location, fold it into the primary diagnostic.
7340        if (Notes.size() == 1 && Notes[0].second.getDiagID() ==
7341              diag::note_invalid_subexpr_in_const_expr) {
7342          DiagLoc = Notes[0].first;
7343          Notes.clear();
7344        }
7345        Diag(DiagLoc, diag::err_constexpr_var_requires_const_init)
7346          << var << Init->getSourceRange();
7347        for (unsigned I = 0, N = Notes.size(); I != N; ++I)
7348          Diag(Notes[I].first, Notes[I].second);
7349      }
7350    } else if (var->isUsableInConstantExpressions(Context)) {
7351      // Check whether the initializer of a const variable of integral or
7352      // enumeration type is an ICE now, since we can't tell whether it was
7353      // initialized by a constant expression if we check later.
7354      var->checkInitIsICE();
7355    }
7356  }
7357
7358  // Require the destructor.
7359  if (const RecordType *recordType = baseType->getAs<RecordType>())
7360    FinalizeVarWithDestructor(var, recordType);
7361}
7362
7363/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform
7364/// any semantic actions necessary after any initializer has been attached.
7365void
7366Sema::FinalizeDeclaration(Decl *ThisDecl) {
7367  // Note that we are no longer parsing the initializer for this declaration.
7368  ParsingInitForAutoVars.erase(ThisDecl);
7369
7370  const VarDecl *VD = dyn_cast_or_null<VarDecl>(ThisDecl);
7371  if (!VD)
7372    return;
7373
7374  if (VD->isFileVarDecl())
7375    MarkUnusedFileScopedDecl(VD);
7376
7377  // Now we have parsed the initializer and can update the table of magic
7378  // tag values.
7379  if (!VD->hasAttr<TypeTagForDatatypeAttr>() ||
7380      !VD->getType()->isIntegralOrEnumerationType())
7381    return;
7382
7383  for (specific_attr_iterator<TypeTagForDatatypeAttr>
7384         I = ThisDecl->specific_attr_begin<TypeTagForDatatypeAttr>(),
7385         E = ThisDecl->specific_attr_end<TypeTagForDatatypeAttr>();
7386       I != E; ++I) {
7387    const Expr *MagicValueExpr = VD->getInit();
7388    if (!MagicValueExpr) {
7389      continue;
7390    }
7391    llvm::APSInt MagicValueInt;
7392    if (!MagicValueExpr->isIntegerConstantExpr(MagicValueInt, Context)) {
7393      Diag(I->getRange().getBegin(),
7394           diag::err_type_tag_for_datatype_not_ice)
7395        << LangOpts.CPlusPlus << MagicValueExpr->getSourceRange();
7396      continue;
7397    }
7398    if (MagicValueInt.getActiveBits() > 64) {
7399      Diag(I->getRange().getBegin(),
7400           diag::err_type_tag_for_datatype_too_large)
7401        << LangOpts.CPlusPlus << MagicValueExpr->getSourceRange();
7402      continue;
7403    }
7404    uint64_t MagicValue = MagicValueInt.getZExtValue();
7405    RegisterTypeTagForDatatype(I->getArgumentKind(),
7406                               MagicValue,
7407                               I->getMatchingCType(),
7408                               I->getLayoutCompatible(),
7409                               I->getMustBeNull());
7410  }
7411}
7412
7413Sema::DeclGroupPtrTy
7414Sema::FinalizeDeclaratorGroup(Scope *S, const DeclSpec &DS,
7415                              Decl **Group, unsigned NumDecls) {
7416  SmallVector<Decl*, 8> Decls;
7417
7418  if (DS.isTypeSpecOwned())
7419    Decls.push_back(DS.getRepAsDecl());
7420
7421  for (unsigned i = 0; i != NumDecls; ++i)
7422    if (Decl *D = Group[i])
7423      Decls.push_back(D);
7424
7425  if (DeclSpec::isDeclRep(DS.getTypeSpecType()))
7426    if (const TagDecl *Tag = dyn_cast_or_null<TagDecl>(DS.getRepAsDecl()))
7427      getASTContext().addUnnamedTag(Tag);
7428
7429  return BuildDeclaratorGroup(Decls.data(), Decls.size(),
7430                              DS.getTypeSpecType() == DeclSpec::TST_auto);
7431}
7432
7433/// BuildDeclaratorGroup - convert a list of declarations into a declaration
7434/// group, performing any necessary semantic checking.
7435Sema::DeclGroupPtrTy
7436Sema::BuildDeclaratorGroup(Decl **Group, unsigned NumDecls,
7437                           bool TypeMayContainAuto) {
7438  // C++0x [dcl.spec.auto]p7:
7439  //   If the type deduced for the template parameter U is not the same in each
7440  //   deduction, the program is ill-formed.
7441  // FIXME: When initializer-list support is added, a distinction is needed
7442  // between the deduced type U and the deduced type which 'auto' stands for.
7443  //   auto a = 0, b = { 1, 2, 3 };
7444  // is legal because the deduced type U is 'int' in both cases.
7445  if (TypeMayContainAuto && NumDecls > 1) {
7446    QualType Deduced;
7447    CanQualType DeducedCanon;
7448    VarDecl *DeducedDecl = 0;
7449    for (unsigned i = 0; i != NumDecls; ++i) {
7450      if (VarDecl *D = dyn_cast<VarDecl>(Group[i])) {
7451        AutoType *AT = D->getType()->getContainedAutoType();
7452        // Don't reissue diagnostics when instantiating a template.
7453        if (AT && D->isInvalidDecl())
7454          break;
7455        if (AT && AT->isDeduced()) {
7456          QualType U = AT->getDeducedType();
7457          CanQualType UCanon = Context.getCanonicalType(U);
7458          if (Deduced.isNull()) {
7459            Deduced = U;
7460            DeducedCanon = UCanon;
7461            DeducedDecl = D;
7462          } else if (DeducedCanon != UCanon) {
7463            Diag(D->getTypeSourceInfo()->getTypeLoc().getBeginLoc(),
7464                 diag::err_auto_different_deductions)
7465              << Deduced << DeducedDecl->getDeclName()
7466              << U << D->getDeclName()
7467              << DeducedDecl->getInit()->getSourceRange()
7468              << D->getInit()->getSourceRange();
7469            D->setInvalidDecl();
7470            break;
7471          }
7472        }
7473      }
7474    }
7475  }
7476
7477  ActOnDocumentableDecls(Group, NumDecls);
7478
7479  return DeclGroupPtrTy::make(DeclGroupRef::Create(Context, Group, NumDecls));
7480}
7481
7482void Sema::ActOnDocumentableDecl(Decl *D) {
7483  ActOnDocumentableDecls(&D, 1);
7484}
7485
7486void Sema::ActOnDocumentableDecls(Decl **Group, unsigned NumDecls) {
7487  // Don't parse the comment if Doxygen diagnostics are ignored.
7488  if (NumDecls == 0 || !Group[0])
7489   return;
7490
7491  if (Diags.getDiagnosticLevel(diag::warn_doc_param_not_found,
7492                               Group[0]->getLocation())
7493        == DiagnosticsEngine::Ignored)
7494    return;
7495
7496  if (NumDecls >= 2) {
7497    // This is a decl group.  Normally it will contain only declarations
7498    // procuded from declarator list.  But in case we have any definitions or
7499    // additional declaration references:
7500    //   'typedef struct S {} S;'
7501    //   'typedef struct S *S;'
7502    //   'struct S *pS;'
7503    // FinalizeDeclaratorGroup adds these as separate declarations.
7504    Decl *MaybeTagDecl = Group[0];
7505    if (MaybeTagDecl && isa<TagDecl>(MaybeTagDecl)) {
7506      Group++;
7507      NumDecls--;
7508    }
7509  }
7510
7511  // See if there are any new comments that are not attached to a decl.
7512  ArrayRef<RawComment *> Comments = Context.getRawCommentList().getComments();
7513  if (!Comments.empty() &&
7514      !Comments.back()->isAttached()) {
7515    // There is at least one comment that not attached to a decl.
7516    // Maybe it should be attached to one of these decls?
7517    //
7518    // Note that this way we pick up not only comments that precede the
7519    // declaration, but also comments that *follow* the declaration -- thanks to
7520    // the lookahead in the lexer: we've consumed the semicolon and looked
7521    // ahead through comments.
7522    for (unsigned i = 0; i != NumDecls; ++i)
7523      Context.getCommentForDecl(Group[i], &PP);
7524  }
7525}
7526
7527/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()
7528/// to introduce parameters into function prototype scope.
7529Decl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {
7530  const DeclSpec &DS = D.getDeclSpec();
7531
7532  // Verify C99 6.7.5.3p2: The only SCS allowed is 'register'.
7533  // C++03 [dcl.stc]p2 also permits 'auto'.
7534  VarDecl::StorageClass StorageClass = SC_None;
7535  VarDecl::StorageClass StorageClassAsWritten = SC_None;
7536  if (DS.getStorageClassSpec() == DeclSpec::SCS_register) {
7537    StorageClass = SC_Register;
7538    StorageClassAsWritten = SC_Register;
7539  } else if (getLangOpts().CPlusPlus &&
7540             DS.getStorageClassSpec() == DeclSpec::SCS_auto) {
7541    StorageClass = SC_Auto;
7542    StorageClassAsWritten = SC_Auto;
7543  } else if (DS.getStorageClassSpec() != DeclSpec::SCS_unspecified) {
7544    Diag(DS.getStorageClassSpecLoc(),
7545         diag::err_invalid_storage_class_in_func_decl);
7546    D.getMutableDeclSpec().ClearStorageClassSpecs();
7547  }
7548
7549  if (D.getDeclSpec().isThreadSpecified())
7550    Diag(D.getDeclSpec().getThreadSpecLoc(), diag::err_invalid_thread);
7551  if (D.getDeclSpec().isConstexprSpecified())
7552    Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_invalid_constexpr)
7553      << 0;
7554
7555  DiagnoseFunctionSpecifiers(D);
7556
7557  TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
7558  QualType parmDeclType = TInfo->getType();
7559
7560  if (getLangOpts().CPlusPlus) {
7561    // Check that there are no default arguments inside the type of this
7562    // parameter.
7563    CheckExtraCXXDefaultArguments(D);
7564
7565    // Parameter declarators cannot be qualified (C++ [dcl.meaning]p1).
7566    if (D.getCXXScopeSpec().isSet()) {
7567      Diag(D.getIdentifierLoc(), diag::err_qualified_param_declarator)
7568        << D.getCXXScopeSpec().getRange();
7569      D.getCXXScopeSpec().clear();
7570    }
7571  }
7572
7573  // Ensure we have a valid name
7574  IdentifierInfo *II = 0;
7575  if (D.hasName()) {
7576    II = D.getIdentifier();
7577    if (!II) {
7578      Diag(D.getIdentifierLoc(), diag::err_bad_parameter_name)
7579        << GetNameForDeclarator(D).getName().getAsString();
7580      D.setInvalidType(true);
7581    }
7582  }
7583
7584  // Check for redeclaration of parameters, e.g. int foo(int x, int x);
7585  if (II) {
7586    LookupResult R(*this, II, D.getIdentifierLoc(), LookupOrdinaryName,
7587                   ForRedeclaration);
7588    LookupName(R, S);
7589    if (R.isSingleResult()) {
7590      NamedDecl *PrevDecl = R.getFoundDecl();
7591      if (PrevDecl->isTemplateParameter()) {
7592        // Maybe we will complain about the shadowed template parameter.
7593        DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
7594        // Just pretend that we didn't see the previous declaration.
7595        PrevDecl = 0;
7596      } else if (S->isDeclScope(PrevDecl)) {
7597        Diag(D.getIdentifierLoc(), diag::err_param_redefinition) << II;
7598        Diag(PrevDecl->getLocation(), diag::note_previous_declaration);
7599
7600        // Recover by removing the name
7601        II = 0;
7602        D.SetIdentifier(0, D.getIdentifierLoc());
7603        D.setInvalidType(true);
7604      }
7605    }
7606  }
7607
7608  // Temporarily put parameter variables in the translation unit, not
7609  // the enclosing context.  This prevents them from accidentally
7610  // looking like class members in C++.
7611  ParmVarDecl *New = CheckParameter(Context.getTranslationUnitDecl(),
7612                                    D.getLocStart(),
7613                                    D.getIdentifierLoc(), II,
7614                                    parmDeclType, TInfo,
7615                                    StorageClass, StorageClassAsWritten);
7616
7617  if (D.isInvalidType())
7618    New->setInvalidDecl();
7619
7620  assert(S->isFunctionPrototypeScope());
7621  assert(S->getFunctionPrototypeDepth() >= 1);
7622  New->setScopeInfo(S->getFunctionPrototypeDepth() - 1,
7623                    S->getNextFunctionPrototypeIndex());
7624
7625  // Add the parameter declaration into this scope.
7626  S->AddDecl(New);
7627  if (II)
7628    IdResolver.AddDecl(New);
7629
7630  ProcessDeclAttributes(S, New, D);
7631
7632  if (D.getDeclSpec().isModulePrivateSpecified())
7633    Diag(New->getLocation(), diag::err_module_private_local)
7634      << 1 << New->getDeclName()
7635      << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc())
7636      << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());
7637
7638  if (New->hasAttr<BlocksAttr>()) {
7639    Diag(New->getLocation(), diag::err_block_on_nonlocal);
7640  }
7641  return New;
7642}
7643
7644/// \brief Synthesizes a variable for a parameter arising from a
7645/// typedef.
7646ParmVarDecl *Sema::BuildParmVarDeclForTypedef(DeclContext *DC,
7647                                              SourceLocation Loc,
7648                                              QualType T) {
7649  /* FIXME: setting StartLoc == Loc.
7650     Would it be worth to modify callers so as to provide proper source
7651     location for the unnamed parameters, embedding the parameter's type? */
7652  ParmVarDecl *Param = ParmVarDecl::Create(Context, DC, Loc, Loc, 0,
7653                                T, Context.getTrivialTypeSourceInfo(T, Loc),
7654                                           SC_None, SC_None, 0);
7655  Param->setImplicit();
7656  return Param;
7657}
7658
7659void Sema::DiagnoseUnusedParameters(ParmVarDecl * const *Param,
7660                                    ParmVarDecl * const *ParamEnd) {
7661  // Don't diagnose unused-parameter errors in template instantiations; we
7662  // will already have done so in the template itself.
7663  if (!ActiveTemplateInstantiations.empty())
7664    return;
7665
7666  for (; Param != ParamEnd; ++Param) {
7667    if (!(*Param)->isReferenced() && (*Param)->getDeclName() &&
7668        !(*Param)->hasAttr<UnusedAttr>()) {
7669      Diag((*Param)->getLocation(), diag::warn_unused_parameter)
7670        << (*Param)->getDeclName();
7671    }
7672  }
7673}
7674
7675void Sema::DiagnoseSizeOfParametersAndReturnValue(ParmVarDecl * const *Param,
7676                                                  ParmVarDecl * const *ParamEnd,
7677                                                  QualType ReturnTy,
7678                                                  NamedDecl *D) {
7679  if (LangOpts.NumLargeByValueCopy == 0) // No check.
7680    return;
7681
7682  // Warn if the return value is pass-by-value and larger than the specified
7683  // threshold.
7684  if (!ReturnTy->isDependentType() && ReturnTy.isPODType(Context)) {
7685    unsigned Size = Context.getTypeSizeInChars(ReturnTy).getQuantity();
7686    if (Size > LangOpts.NumLargeByValueCopy)
7687      Diag(D->getLocation(), diag::warn_return_value_size)
7688          << D->getDeclName() << Size;
7689  }
7690
7691  // Warn if any parameter is pass-by-value and larger than the specified
7692  // threshold.
7693  for (; Param != ParamEnd; ++Param) {
7694    QualType T = (*Param)->getType();
7695    if (T->isDependentType() || !T.isPODType(Context))
7696      continue;
7697    unsigned Size = Context.getTypeSizeInChars(T).getQuantity();
7698    if (Size > LangOpts.NumLargeByValueCopy)
7699      Diag((*Param)->getLocation(), diag::warn_parameter_size)
7700          << (*Param)->getDeclName() << Size;
7701  }
7702}
7703
7704ParmVarDecl *Sema::CheckParameter(DeclContext *DC, SourceLocation StartLoc,
7705                                  SourceLocation NameLoc, IdentifierInfo *Name,
7706                                  QualType T, TypeSourceInfo *TSInfo,
7707                                  VarDecl::StorageClass StorageClass,
7708                                  VarDecl::StorageClass StorageClassAsWritten) {
7709  // In ARC, infer a lifetime qualifier for appropriate parameter types.
7710  if (getLangOpts().ObjCAutoRefCount &&
7711      T.getObjCLifetime() == Qualifiers::OCL_None &&
7712      T->isObjCLifetimeType()) {
7713
7714    Qualifiers::ObjCLifetime lifetime;
7715
7716    // Special cases for arrays:
7717    //   - if it's const, use __unsafe_unretained
7718    //   - otherwise, it's an error
7719    if (T->isArrayType()) {
7720      if (!T.isConstQualified()) {
7721        DelayedDiagnostics.add(
7722            sema::DelayedDiagnostic::makeForbiddenType(
7723            NameLoc, diag::err_arc_array_param_no_ownership, T, false));
7724      }
7725      lifetime = Qualifiers::OCL_ExplicitNone;
7726    } else {
7727      lifetime = T->getObjCARCImplicitLifetime();
7728    }
7729    T = Context.getLifetimeQualifiedType(T, lifetime);
7730  }
7731
7732  ParmVarDecl *New = ParmVarDecl::Create(Context, DC, StartLoc, NameLoc, Name,
7733                                         Context.getAdjustedParameterType(T),
7734                                         TSInfo,
7735                                         StorageClass, StorageClassAsWritten,
7736                                         0);
7737
7738  // Parameters can not be abstract class types.
7739  // For record types, this is done by the AbstractClassUsageDiagnoser once
7740  // the class has been completely parsed.
7741  if (!CurContext->isRecord() &&
7742      RequireNonAbstractType(NameLoc, T, diag::err_abstract_type_in_decl,
7743                             AbstractParamType))
7744    New->setInvalidDecl();
7745
7746  // Parameter declarators cannot be interface types. All ObjC objects are
7747  // passed by reference.
7748  if (T->isObjCObjectType()) {
7749    SourceLocation TypeEndLoc = TSInfo->getTypeLoc().getLocEnd();
7750    Diag(NameLoc,
7751         diag::err_object_cannot_be_passed_returned_by_value) << 1 << T
7752      << FixItHint::CreateInsertion(TypeEndLoc, "*");
7753    T = Context.getObjCObjectPointerType(T);
7754    New->setType(T);
7755  }
7756
7757  // ISO/IEC TR 18037 S6.7.3: "The type of an object with automatic storage
7758  // duration shall not be qualified by an address-space qualifier."
7759  // Since all parameters have automatic store duration, they can not have
7760  // an address space.
7761  if (T.getAddressSpace() != 0) {
7762    Diag(NameLoc, diag::err_arg_with_address_space);
7763    New->setInvalidDecl();
7764  }
7765
7766  return New;
7767}
7768
7769void Sema::ActOnFinishKNRParamDeclarations(Scope *S, Declarator &D,
7770                                           SourceLocation LocAfterDecls) {
7771  DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
7772
7773  // Verify 6.9.1p6: 'every identifier in the identifier list shall be declared'
7774  // for a K&R function.
7775  if (!FTI.hasPrototype) {
7776    for (int i = FTI.NumArgs; i != 0; /* decrement in loop */) {
7777      --i;
7778      if (FTI.ArgInfo[i].Param == 0) {
7779        SmallString<256> Code;
7780        llvm::raw_svector_ostream(Code) << "  int "
7781                                        << FTI.ArgInfo[i].Ident->getName()
7782                                        << ";\n";
7783        Diag(FTI.ArgInfo[i].IdentLoc, diag::ext_param_not_declared)
7784          << FTI.ArgInfo[i].Ident
7785          << FixItHint::CreateInsertion(LocAfterDecls, Code.str());
7786
7787        // Implicitly declare the argument as type 'int' for lack of a better
7788        // type.
7789        AttributeFactory attrs;
7790        DeclSpec DS(attrs);
7791        const char* PrevSpec; // unused
7792        unsigned DiagID; // unused
7793        DS.SetTypeSpecType(DeclSpec::TST_int, FTI.ArgInfo[i].IdentLoc,
7794                           PrevSpec, DiagID);
7795        // Use the identifier location for the type source range.
7796        DS.SetRangeStart(FTI.ArgInfo[i].IdentLoc);
7797        DS.SetRangeEnd(FTI.ArgInfo[i].IdentLoc);
7798        Declarator ParamD(DS, Declarator::KNRTypeListContext);
7799        ParamD.SetIdentifier(FTI.ArgInfo[i].Ident, FTI.ArgInfo[i].IdentLoc);
7800        FTI.ArgInfo[i].Param = ActOnParamDeclarator(S, ParamD);
7801      }
7802    }
7803  }
7804}
7805
7806Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Declarator &D) {
7807  assert(getCurFunctionDecl() == 0 && "Function parsing confused");
7808  assert(D.isFunctionDeclarator() && "Not a function declarator!");
7809  Scope *ParentScope = FnBodyScope->getParent();
7810
7811  D.setFunctionDefinitionKind(FDK_Definition);
7812  Decl *DP = HandleDeclarator(ParentScope, D, MultiTemplateParamsArg());
7813  return ActOnStartOfFunctionDef(FnBodyScope, DP);
7814}
7815
7816static bool ShouldWarnAboutMissingPrototype(const FunctionDecl *FD,
7817                             const FunctionDecl*& PossibleZeroParamPrototype) {
7818  // Don't warn about invalid declarations.
7819  if (FD->isInvalidDecl())
7820    return false;
7821
7822  // Or declarations that aren't global.
7823  if (!FD->isGlobal())
7824    return false;
7825
7826  // Don't warn about C++ member functions.
7827  if (isa<CXXMethodDecl>(FD))
7828    return false;
7829
7830  // Don't warn about 'main'.
7831  if (FD->isMain())
7832    return false;
7833
7834  // Don't warn about inline functions.
7835  if (FD->isInlined())
7836    return false;
7837
7838  // Don't warn about function templates.
7839  if (FD->getDescribedFunctionTemplate())
7840    return false;
7841
7842  // Don't warn about function template specializations.
7843  if (FD->isFunctionTemplateSpecialization())
7844    return false;
7845
7846  // Don't warn for OpenCL kernels.
7847  if (FD->hasAttr<OpenCLKernelAttr>())
7848    return false;
7849
7850  bool MissingPrototype = true;
7851  for (const FunctionDecl *Prev = FD->getPreviousDecl();
7852       Prev; Prev = Prev->getPreviousDecl()) {
7853    // Ignore any declarations that occur in function or method
7854    // scope, because they aren't visible from the header.
7855    if (Prev->getDeclContext()->isFunctionOrMethod())
7856      continue;
7857
7858    MissingPrototype = !Prev->getType()->isFunctionProtoType();
7859    if (FD->getNumParams() == 0)
7860      PossibleZeroParamPrototype = Prev;
7861    break;
7862  }
7863
7864  return MissingPrototype;
7865}
7866
7867void Sema::CheckForFunctionRedefinition(FunctionDecl *FD) {
7868  // Don't complain if we're in GNU89 mode and the previous definition
7869  // was an extern inline function.
7870  const FunctionDecl *Definition;
7871  if (FD->isDefined(Definition) &&
7872      !canRedefineFunction(Definition, getLangOpts())) {
7873    if (getLangOpts().GNUMode && Definition->isInlineSpecified() &&
7874        Definition->getStorageClass() == SC_Extern)
7875      Diag(FD->getLocation(), diag::err_redefinition_extern_inline)
7876        << FD->getDeclName() << getLangOpts().CPlusPlus;
7877    else
7878      Diag(FD->getLocation(), diag::err_redefinition) << FD->getDeclName();
7879    Diag(Definition->getLocation(), diag::note_previous_definition);
7880    FD->setInvalidDecl();
7881  }
7882}
7883
7884Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D) {
7885  // Clear the last template instantiation error context.
7886  LastTemplateInstantiationErrorContext = ActiveTemplateInstantiation();
7887
7888  if (!D)
7889    return D;
7890  FunctionDecl *FD = 0;
7891
7892  if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(D))
7893    FD = FunTmpl->getTemplatedDecl();
7894  else
7895    FD = cast<FunctionDecl>(D);
7896
7897  // Enter a new function scope
7898  PushFunctionScope();
7899
7900  // See if this is a redefinition.
7901  if (!FD->isLateTemplateParsed())
7902    CheckForFunctionRedefinition(FD);
7903
7904  // Builtin functions cannot be defined.
7905  if (unsigned BuiltinID = FD->getBuiltinID()) {
7906    if (!Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID)) {
7907      Diag(FD->getLocation(), diag::err_builtin_definition) << FD;
7908      FD->setInvalidDecl();
7909    }
7910  }
7911
7912  // The return type of a function definition must be complete
7913  // (C99 6.9.1p3, C++ [dcl.fct]p6).
7914  QualType ResultType = FD->getResultType();
7915  if (!ResultType->isDependentType() && !ResultType->isVoidType() &&
7916      !FD->isInvalidDecl() &&
7917      RequireCompleteType(FD->getLocation(), ResultType,
7918                          diag::err_func_def_incomplete_result))
7919    FD->setInvalidDecl();
7920
7921  // GNU warning -Wmissing-prototypes:
7922  //   Warn if a global function is defined without a previous
7923  //   prototype declaration. This warning is issued even if the
7924  //   definition itself provides a prototype. The aim is to detect
7925  //   global functions that fail to be declared in header files.
7926  const FunctionDecl *PossibleZeroParamPrototype = 0;
7927  if (ShouldWarnAboutMissingPrototype(FD, PossibleZeroParamPrototype)) {
7928    Diag(FD->getLocation(), diag::warn_missing_prototype) << FD;
7929
7930    if (PossibleZeroParamPrototype) {
7931      // We found a declaration that is not a prototype,
7932      // but that could be a zero-parameter prototype
7933      TypeSourceInfo* TI = PossibleZeroParamPrototype->getTypeSourceInfo();
7934      TypeLoc TL = TI->getTypeLoc();
7935      if (FunctionNoProtoTypeLoc* FTL = dyn_cast<FunctionNoProtoTypeLoc>(&TL))
7936        Diag(PossibleZeroParamPrototype->getLocation(),
7937             diag::note_declaration_not_a_prototype)
7938          << PossibleZeroParamPrototype
7939          << FixItHint::CreateInsertion(FTL->getRParenLoc(), "void");
7940    }
7941  }
7942
7943  if (FnBodyScope)
7944    PushDeclContext(FnBodyScope, FD);
7945
7946  // Check the validity of our function parameters
7947  CheckParmsForFunctionDef(FD->param_begin(), FD->param_end(),
7948                           /*CheckParameterNames=*/true);
7949
7950  // Introduce our parameters into the function scope
7951  for (unsigned p = 0, NumParams = FD->getNumParams(); p < NumParams; ++p) {
7952    ParmVarDecl *Param = FD->getParamDecl(p);
7953    Param->setOwningFunction(FD);
7954
7955    // If this has an identifier, add it to the scope stack.
7956    if (Param->getIdentifier() && FnBodyScope) {
7957      CheckShadow(FnBodyScope, Param);
7958
7959      PushOnScopeChains(Param, FnBodyScope);
7960    }
7961  }
7962
7963  // If we had any tags defined in the function prototype,
7964  // introduce them into the function scope.
7965  if (FnBodyScope) {
7966    for (llvm::ArrayRef<NamedDecl*>::iterator I = FD->getDeclsInPrototypeScope().begin(),
7967           E = FD->getDeclsInPrototypeScope().end(); I != E; ++I) {
7968      NamedDecl *D = *I;
7969
7970      // Some of these decls (like enums) may have been pinned to the translation unit
7971      // for lack of a real context earlier. If so, remove from the translation unit
7972      // and reattach to the current context.
7973      if (D->getLexicalDeclContext() == Context.getTranslationUnitDecl()) {
7974        // Is the decl actually in the context?
7975        for (DeclContext::decl_iterator DI = Context.getTranslationUnitDecl()->decls_begin(),
7976               DE = Context.getTranslationUnitDecl()->decls_end(); DI != DE; ++DI) {
7977          if (*DI == D) {
7978            Context.getTranslationUnitDecl()->removeDecl(D);
7979            break;
7980          }
7981        }
7982        // Either way, reassign the lexical decl context to our FunctionDecl.
7983        D->setLexicalDeclContext(CurContext);
7984      }
7985
7986      // If the decl has a non-null name, make accessible in the current scope.
7987      if (!D->getName().empty())
7988        PushOnScopeChains(D, FnBodyScope, /*AddToContext=*/false);
7989
7990      // Similarly, dive into enums and fish their constants out, making them
7991      // accessible in this scope.
7992      if (EnumDecl *ED = dyn_cast<EnumDecl>(D)) {
7993        for (EnumDecl::enumerator_iterator EI = ED->enumerator_begin(),
7994               EE = ED->enumerator_end(); EI != EE; ++EI)
7995          PushOnScopeChains(*EI, FnBodyScope, /*AddToContext=*/false);
7996      }
7997    }
7998  }
7999
8000  // Ensure that the function's exception specification is instantiated.
8001  if (const FunctionProtoType *FPT = FD->getType()->getAs<FunctionProtoType>())
8002    ResolveExceptionSpec(D->getLocation(), FPT);
8003
8004  // Checking attributes of current function definition
8005  // dllimport attribute.
8006  DLLImportAttr *DA = FD->getAttr<DLLImportAttr>();
8007  if (DA && (!FD->getAttr<DLLExportAttr>())) {
8008    // dllimport attribute cannot be directly applied to definition.
8009    // Microsoft accepts dllimport for functions defined within class scope.
8010    if (!DA->isInherited() &&
8011        !(LangOpts.MicrosoftExt && FD->getLexicalDeclContext()->isRecord())) {
8012      Diag(FD->getLocation(),
8013           diag::err_attribute_can_be_applied_only_to_symbol_declaration)
8014        << "dllimport";
8015      FD->setInvalidDecl();
8016      return D;
8017    }
8018
8019    // Visual C++ appears to not think this is an issue, so only issue
8020    // a warning when Microsoft extensions are disabled.
8021    if (!LangOpts.MicrosoftExt) {
8022      // If a symbol previously declared dllimport is later defined, the
8023      // attribute is ignored in subsequent references, and a warning is
8024      // emitted.
8025      Diag(FD->getLocation(),
8026           diag::warn_redeclaration_without_attribute_prev_attribute_ignored)
8027        << FD->getName() << "dllimport";
8028    }
8029  }
8030  // We want to attach documentation to original Decl (which might be
8031  // a function template).
8032  ActOnDocumentableDecl(D);
8033  return D;
8034}
8035
8036/// \brief Given the set of return statements within a function body,
8037/// compute the variables that are subject to the named return value
8038/// optimization.
8039///
8040/// Each of the variables that is subject to the named return value
8041/// optimization will be marked as NRVO variables in the AST, and any
8042/// return statement that has a marked NRVO variable as its NRVO candidate can
8043/// use the named return value optimization.
8044///
8045/// This function applies a very simplistic algorithm for NRVO: if every return
8046/// statement in the function has the same NRVO candidate, that candidate is
8047/// the NRVO variable.
8048///
8049/// FIXME: Employ a smarter algorithm that accounts for multiple return
8050/// statements and the lifetimes of the NRVO candidates. We should be able to
8051/// find a maximal set of NRVO variables.
8052void Sema::computeNRVO(Stmt *Body, FunctionScopeInfo *Scope) {
8053  ReturnStmt **Returns = Scope->Returns.data();
8054
8055  const VarDecl *NRVOCandidate = 0;
8056  for (unsigned I = 0, E = Scope->Returns.size(); I != E; ++I) {
8057    if (!Returns[I]->getNRVOCandidate())
8058      return;
8059
8060    if (!NRVOCandidate)
8061      NRVOCandidate = Returns[I]->getNRVOCandidate();
8062    else if (NRVOCandidate != Returns[I]->getNRVOCandidate())
8063      return;
8064  }
8065
8066  if (NRVOCandidate)
8067    const_cast<VarDecl*>(NRVOCandidate)->setNRVOVariable(true);
8068}
8069
8070bool Sema::canSkipFunctionBody(Decl *D) {
8071  if (!Consumer.shouldSkipFunctionBody(D))
8072    return false;
8073
8074  if (isa<ObjCMethodDecl>(D))
8075    return true;
8076
8077  FunctionDecl *FD = 0;
8078  if (FunctionTemplateDecl *FTD = dyn_cast<FunctionTemplateDecl>(D))
8079    FD = FTD->getTemplatedDecl();
8080  else
8081    FD = cast<FunctionDecl>(D);
8082
8083  // We cannot skip the body of a function (or function template) which is
8084  // constexpr, since we may need to evaluate its body in order to parse the
8085  // rest of the file.
8086  return !FD->isConstexpr();
8087}
8088
8089Decl *Sema::ActOnSkippedFunctionBody(Decl *Decl) {
8090  if (FunctionDecl *FD = dyn_cast<FunctionDecl>(Decl))
8091    FD->setHasSkippedBody();
8092  else if (ObjCMethodDecl *MD = dyn_cast<ObjCMethodDecl>(Decl))
8093    MD->setHasSkippedBody();
8094  return ActOnFinishFunctionBody(Decl, 0);
8095}
8096
8097Decl *Sema::ActOnFinishFunctionBody(Decl *D, Stmt *BodyArg) {
8098  return ActOnFinishFunctionBody(D, BodyArg, false);
8099}
8100
8101Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body,
8102                                    bool IsInstantiation) {
8103  FunctionDecl *FD = 0;
8104  FunctionTemplateDecl *FunTmpl = dyn_cast_or_null<FunctionTemplateDecl>(dcl);
8105  if (FunTmpl)
8106    FD = FunTmpl->getTemplatedDecl();
8107  else
8108    FD = dyn_cast_or_null<FunctionDecl>(dcl);
8109
8110  sema::AnalysisBasedWarnings::Policy WP = AnalysisWarnings.getDefaultPolicy();
8111  sema::AnalysisBasedWarnings::Policy *ActivePolicy = 0;
8112
8113  if (FD) {
8114    FD->setBody(Body);
8115
8116    // If the function implicitly returns zero (like 'main') or is naked,
8117    // don't complain about missing return statements.
8118    if (FD->hasImplicitReturnZero() || FD->hasAttr<NakedAttr>())
8119      WP.disableCheckFallThrough();
8120
8121    // MSVC permits the use of pure specifier (=0) on function definition,
8122    // defined at class scope, warn about this non standard construct.
8123    if (getLangOpts().MicrosoftExt && FD->isPure())
8124      Diag(FD->getLocation(), diag::warn_pure_function_definition);
8125
8126    if (!FD->isInvalidDecl()) {
8127      DiagnoseUnusedParameters(FD->param_begin(), FD->param_end());
8128      DiagnoseSizeOfParametersAndReturnValue(FD->param_begin(), FD->param_end(),
8129                                             FD->getResultType(), FD);
8130
8131      // If this is a constructor, we need a vtable.
8132      if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(FD))
8133        MarkVTableUsed(FD->getLocation(), Constructor->getParent());
8134
8135      // Try to apply the named return value optimization. We have to check
8136      // if we can do this here because lambdas keep return statements around
8137      // to deduce an implicit return type.
8138      if (getLangOpts().CPlusPlus && FD->getResultType()->isRecordType() &&
8139          !FD->isDependentContext())
8140        computeNRVO(Body, getCurFunction());
8141    }
8142
8143    assert((FD == getCurFunctionDecl() || getCurLambda()->CallOperator == FD) &&
8144           "Function parsing confused");
8145  } else if (ObjCMethodDecl *MD = dyn_cast_or_null<ObjCMethodDecl>(dcl)) {
8146    assert(MD == getCurMethodDecl() && "Method parsing confused");
8147    MD->setBody(Body);
8148    if (!MD->isInvalidDecl()) {
8149      DiagnoseUnusedParameters(MD->param_begin(), MD->param_end());
8150      DiagnoseSizeOfParametersAndReturnValue(MD->param_begin(), MD->param_end(),
8151                                             MD->getResultType(), MD);
8152
8153      if (Body)
8154        computeNRVO(Body, getCurFunction());
8155    }
8156    if (getCurFunction()->ObjCShouldCallSuper) {
8157      Diag(MD->getLocEnd(), diag::warn_objc_missing_super_call)
8158        << MD->getSelector().getAsString();
8159      getCurFunction()->ObjCShouldCallSuper = false;
8160    }
8161  } else {
8162    return 0;
8163  }
8164
8165  assert(!getCurFunction()->ObjCShouldCallSuper &&
8166         "This should only be set for ObjC methods, which should have been "
8167         "handled in the block above.");
8168
8169  // Verify and clean out per-function state.
8170  if (Body) {
8171    // C++ constructors that have function-try-blocks can't have return
8172    // statements in the handlers of that block. (C++ [except.handle]p14)
8173    // Verify this.
8174    if (FD && isa<CXXConstructorDecl>(FD) && isa<CXXTryStmt>(Body))
8175      DiagnoseReturnInConstructorExceptionHandler(cast<CXXTryStmt>(Body));
8176
8177    // Verify that gotos and switch cases don't jump into scopes illegally.
8178    if (getCurFunction()->NeedsScopeChecking() &&
8179        !dcl->isInvalidDecl() &&
8180        !hasAnyUnrecoverableErrorsInThisFunction() &&
8181        !PP.isCodeCompletionEnabled())
8182      DiagnoseInvalidJumps(Body);
8183
8184    if (CXXDestructorDecl *Destructor = dyn_cast<CXXDestructorDecl>(dcl)) {
8185      if (!Destructor->getParent()->isDependentType())
8186        CheckDestructor(Destructor);
8187
8188      MarkBaseAndMemberDestructorsReferenced(Destructor->getLocation(),
8189                                             Destructor->getParent());
8190    }
8191
8192    // If any errors have occurred, clear out any temporaries that may have
8193    // been leftover. This ensures that these temporaries won't be picked up for
8194    // deletion in some later function.
8195    if (PP.getDiagnostics().hasErrorOccurred() ||
8196        PP.getDiagnostics().getSuppressAllDiagnostics()) {
8197      DiscardCleanupsInEvaluationContext();
8198    }
8199    if (!PP.getDiagnostics().hasUncompilableErrorOccurred() &&
8200        !isa<FunctionTemplateDecl>(dcl)) {
8201      // Since the body is valid, issue any analysis-based warnings that are
8202      // enabled.
8203      ActivePolicy = &WP;
8204    }
8205
8206    if (!IsInstantiation && FD && FD->isConstexpr() && !FD->isInvalidDecl() &&
8207        (!CheckConstexprFunctionDecl(FD) ||
8208         !CheckConstexprFunctionBody(FD, Body)))
8209      FD->setInvalidDecl();
8210
8211    assert(ExprCleanupObjects.empty() && "Leftover temporaries in function");
8212    assert(!ExprNeedsCleanups && "Unaccounted cleanups in function");
8213    assert(MaybeODRUseExprs.empty() &&
8214           "Leftover expressions for odr-use checking");
8215  }
8216
8217  if (!IsInstantiation)
8218    PopDeclContext();
8219
8220  PopFunctionScopeInfo(ActivePolicy, dcl);
8221
8222  // If any errors have occurred, clear out any temporaries that may have
8223  // been leftover. This ensures that these temporaries won't be picked up for
8224  // deletion in some later function.
8225  if (getDiagnostics().hasErrorOccurred()) {
8226    DiscardCleanupsInEvaluationContext();
8227  }
8228
8229  return dcl;
8230}
8231
8232
8233/// When we finish delayed parsing of an attribute, we must attach it to the
8234/// relevant Decl.
8235void Sema::ActOnFinishDelayedAttribute(Scope *S, Decl *D,
8236                                       ParsedAttributes &Attrs) {
8237  // Always attach attributes to the underlying decl.
8238  if (TemplateDecl *TD = dyn_cast<TemplateDecl>(D))
8239    D = TD->getTemplatedDecl();
8240  ProcessDeclAttributeList(S, D, Attrs.getList());
8241
8242  if (CXXMethodDecl *Method = dyn_cast_or_null<CXXMethodDecl>(D))
8243    if (Method->isStatic())
8244      checkThisInStaticMemberFunctionAttributes(Method);
8245}
8246
8247
8248/// ImplicitlyDefineFunction - An undeclared identifier was used in a function
8249/// call, forming a call to an implicitly defined function (per C99 6.5.1p2).
8250NamedDecl *Sema::ImplicitlyDefineFunction(SourceLocation Loc,
8251                                          IdentifierInfo &II, Scope *S) {
8252  // Before we produce a declaration for an implicitly defined
8253  // function, see whether there was a locally-scoped declaration of
8254  // this name as a function or variable. If so, use that
8255  // (non-visible) declaration, and complain about it.
8256  llvm::DenseMap<DeclarationName, NamedDecl *>::iterator Pos
8257    = findLocallyScopedExternalDecl(&II);
8258  if (Pos != LocallyScopedExternalDecls.end()) {
8259    Diag(Loc, diag::warn_use_out_of_scope_declaration) << Pos->second;
8260    Diag(Pos->second->getLocation(), diag::note_previous_declaration);
8261    return Pos->second;
8262  }
8263
8264  // Extension in C99.  Legal in C90, but warn about it.
8265  unsigned diag_id;
8266  if (II.getName().startswith("__builtin_"))
8267    diag_id = diag::warn_builtin_unknown;
8268  else if (getLangOpts().C99)
8269    diag_id = diag::ext_implicit_function_decl;
8270  else
8271    diag_id = diag::warn_implicit_function_decl;
8272  Diag(Loc, diag_id) << &II;
8273
8274  // Because typo correction is expensive, only do it if the implicit
8275  // function declaration is going to be treated as an error.
8276  if (Diags.getDiagnosticLevel(diag_id, Loc) >= DiagnosticsEngine::Error) {
8277    TypoCorrection Corrected;
8278    DeclFilterCCC<FunctionDecl> Validator;
8279    if (S && (Corrected = CorrectTypo(DeclarationNameInfo(&II, Loc),
8280                                      LookupOrdinaryName, S, 0, Validator))) {
8281      std::string CorrectedStr = Corrected.getAsString(getLangOpts());
8282      std::string CorrectedQuotedStr = Corrected.getQuoted(getLangOpts());
8283      FunctionDecl *Func = Corrected.getCorrectionDeclAs<FunctionDecl>();
8284
8285      Diag(Loc, diag::note_function_suggestion) << CorrectedQuotedStr
8286          << FixItHint::CreateReplacement(Loc, CorrectedStr);
8287
8288      if (Func->getLocation().isValid()
8289          && !II.getName().startswith("__builtin_"))
8290        Diag(Func->getLocation(), diag::note_previous_decl)
8291            << CorrectedQuotedStr;
8292    }
8293  }
8294
8295  // Set a Declarator for the implicit definition: int foo();
8296  const char *Dummy;
8297  AttributeFactory attrFactory;
8298  DeclSpec DS(attrFactory);
8299  unsigned DiagID;
8300  bool Error = DS.SetTypeSpecType(DeclSpec::TST_int, Loc, Dummy, DiagID);
8301  (void)Error; // Silence warning.
8302  assert(!Error && "Error setting up implicit decl!");
8303  SourceLocation NoLoc;
8304  Declarator D(DS, Declarator::BlockContext);
8305  D.AddTypeInfo(DeclaratorChunk::getFunction(/*HasProto=*/false,
8306                                             /*IsAmbiguous=*/false,
8307                                             /*RParenLoc=*/NoLoc,
8308                                             /*ArgInfo=*/0,
8309                                             /*NumArgs=*/0,
8310                                             /*EllipsisLoc=*/NoLoc,
8311                                             /*RParenLoc=*/NoLoc,
8312                                             /*TypeQuals=*/0,
8313                                             /*RefQualifierIsLvalueRef=*/true,
8314                                             /*RefQualifierLoc=*/NoLoc,
8315                                             /*ConstQualifierLoc=*/NoLoc,
8316                                             /*VolatileQualifierLoc=*/NoLoc,
8317                                             /*MutableLoc=*/NoLoc,
8318                                             EST_None,
8319                                             /*ESpecLoc=*/NoLoc,
8320                                             /*Exceptions=*/0,
8321                                             /*ExceptionRanges=*/0,
8322                                             /*NumExceptions=*/0,
8323                                             /*NoexceptExpr=*/0,
8324                                             Loc, Loc, D),
8325                DS.getAttributes(),
8326                SourceLocation());
8327  D.SetIdentifier(&II, Loc);
8328
8329  // Insert this function into translation-unit scope.
8330
8331  DeclContext *PrevDC = CurContext;
8332  CurContext = Context.getTranslationUnitDecl();
8333
8334  FunctionDecl *FD = dyn_cast<FunctionDecl>(ActOnDeclarator(TUScope, D));
8335  FD->setImplicit();
8336
8337  CurContext = PrevDC;
8338
8339  AddKnownFunctionAttributes(FD);
8340
8341  return FD;
8342}
8343
8344/// \brief Adds any function attributes that we know a priori based on
8345/// the declaration of this function.
8346///
8347/// These attributes can apply both to implicitly-declared builtins
8348/// (like __builtin___printf_chk) or to library-declared functions
8349/// like NSLog or printf.
8350///
8351/// We need to check for duplicate attributes both here and where user-written
8352/// attributes are applied to declarations.
8353void Sema::AddKnownFunctionAttributes(FunctionDecl *FD) {
8354  if (FD->isInvalidDecl())
8355    return;
8356
8357  // If this is a built-in function, map its builtin attributes to
8358  // actual attributes.
8359  if (unsigned BuiltinID = FD->getBuiltinID()) {
8360    // Handle printf-formatting attributes.
8361    unsigned FormatIdx;
8362    bool HasVAListArg;
8363    if (Context.BuiltinInfo.isPrintfLike(BuiltinID, FormatIdx, HasVAListArg)) {
8364      if (!FD->getAttr<FormatAttr>()) {
8365        const char *fmt = "printf";
8366        unsigned int NumParams = FD->getNumParams();
8367        if (FormatIdx < NumParams && // NumParams may be 0 (e.g. vfprintf)
8368            FD->getParamDecl(FormatIdx)->getType()->isObjCObjectPointerType())
8369          fmt = "NSString";
8370        FD->addAttr(::new (Context) FormatAttr(FD->getLocation(), Context,
8371                                               fmt, FormatIdx+1,
8372                                               HasVAListArg ? 0 : FormatIdx+2));
8373      }
8374    }
8375    if (Context.BuiltinInfo.isScanfLike(BuiltinID, FormatIdx,
8376                                             HasVAListArg)) {
8377     if (!FD->getAttr<FormatAttr>())
8378       FD->addAttr(::new (Context) FormatAttr(FD->getLocation(), Context,
8379                                              "scanf", FormatIdx+1,
8380                                              HasVAListArg ? 0 : FormatIdx+2));
8381    }
8382
8383    // Mark const if we don't care about errno and that is the only
8384    // thing preventing the function from being const. This allows
8385    // IRgen to use LLVM intrinsics for such functions.
8386    if (!getLangOpts().MathErrno &&
8387        Context.BuiltinInfo.isConstWithoutErrno(BuiltinID)) {
8388      if (!FD->getAttr<ConstAttr>())
8389        FD->addAttr(::new (Context) ConstAttr(FD->getLocation(), Context));
8390    }
8391
8392    if (Context.BuiltinInfo.isReturnsTwice(BuiltinID) &&
8393        !FD->getAttr<ReturnsTwiceAttr>())
8394      FD->addAttr(::new (Context) ReturnsTwiceAttr(FD->getLocation(), Context));
8395    if (Context.BuiltinInfo.isNoThrow(BuiltinID) && !FD->getAttr<NoThrowAttr>())
8396      FD->addAttr(::new (Context) NoThrowAttr(FD->getLocation(), Context));
8397    if (Context.BuiltinInfo.isConst(BuiltinID) && !FD->getAttr<ConstAttr>())
8398      FD->addAttr(::new (Context) ConstAttr(FD->getLocation(), Context));
8399  }
8400
8401  IdentifierInfo *Name = FD->getIdentifier();
8402  if (!Name)
8403    return;
8404  if ((!getLangOpts().CPlusPlus &&
8405       FD->getDeclContext()->isTranslationUnit()) ||
8406      (isa<LinkageSpecDecl>(FD->getDeclContext()) &&
8407       cast<LinkageSpecDecl>(FD->getDeclContext())->getLanguage() ==
8408       LinkageSpecDecl::lang_c)) {
8409    // Okay: this could be a libc/libm/Objective-C function we know
8410    // about.
8411  } else
8412    return;
8413
8414  if (Name->isStr("asprintf") || Name->isStr("vasprintf")) {
8415    // FIXME: asprintf and vasprintf aren't C99 functions. Should they be
8416    // target-specific builtins, perhaps?
8417    if (!FD->getAttr<FormatAttr>())
8418      FD->addAttr(::new (Context) FormatAttr(FD->getLocation(), Context,
8419                                             "printf", 2,
8420                                             Name->isStr("vasprintf") ? 0 : 3));
8421  }
8422
8423  if (Name->isStr("__CFStringMakeConstantString")) {
8424    // We already have a __builtin___CFStringMakeConstantString,
8425    // but builds that use -fno-constant-cfstrings don't go through that.
8426    if (!FD->getAttr<FormatArgAttr>())
8427      FD->addAttr(::new (Context) FormatArgAttr(FD->getLocation(), Context, 1));
8428  }
8429}
8430
8431TypedefDecl *Sema::ParseTypedefDecl(Scope *S, Declarator &D, QualType T,
8432                                    TypeSourceInfo *TInfo) {
8433  assert(D.getIdentifier() && "Wrong callback for declspec without declarator");
8434  assert(!T.isNull() && "GetTypeForDeclarator() returned null type");
8435
8436  if (!TInfo) {
8437    assert(D.isInvalidType() && "no declarator info for valid type");
8438    TInfo = Context.getTrivialTypeSourceInfo(T);
8439  }
8440
8441  // Scope manipulation handled by caller.
8442  TypedefDecl *NewTD = TypedefDecl::Create(Context, CurContext,
8443                                           D.getLocStart(),
8444                                           D.getIdentifierLoc(),
8445                                           D.getIdentifier(),
8446                                           TInfo);
8447
8448  // Bail out immediately if we have an invalid declaration.
8449  if (D.isInvalidType()) {
8450    NewTD->setInvalidDecl();
8451    return NewTD;
8452  }
8453
8454  if (D.getDeclSpec().isModulePrivateSpecified()) {
8455    if (CurContext->isFunctionOrMethod())
8456      Diag(NewTD->getLocation(), diag::err_module_private_local)
8457        << 2 << NewTD->getDeclName()
8458        << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc())
8459        << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());
8460    else
8461      NewTD->setModulePrivate();
8462  }
8463
8464  // C++ [dcl.typedef]p8:
8465  //   If the typedef declaration defines an unnamed class (or
8466  //   enum), the first typedef-name declared by the declaration
8467  //   to be that class type (or enum type) is used to denote the
8468  //   class type (or enum type) for linkage purposes only.
8469  // We need to check whether the type was declared in the declaration.
8470  switch (D.getDeclSpec().getTypeSpecType()) {
8471  case TST_enum:
8472  case TST_struct:
8473  case TST_interface:
8474  case TST_union:
8475  case TST_class: {
8476    TagDecl *tagFromDeclSpec = cast<TagDecl>(D.getDeclSpec().getRepAsDecl());
8477
8478    // Do nothing if the tag is not anonymous or already has an
8479    // associated typedef (from an earlier typedef in this decl group).
8480    if (tagFromDeclSpec->getIdentifier()) break;
8481    if (tagFromDeclSpec->getTypedefNameForAnonDecl()) break;
8482
8483    // A well-formed anonymous tag must always be a TUK_Definition.
8484    assert(tagFromDeclSpec->isThisDeclarationADefinition());
8485
8486    // The type must match the tag exactly;  no qualifiers allowed.
8487    if (!Context.hasSameType(T, Context.getTagDeclType(tagFromDeclSpec)))
8488      break;
8489
8490    // Otherwise, set this is the anon-decl typedef for the tag.
8491    tagFromDeclSpec->setTypedefNameForAnonDecl(NewTD);
8492    break;
8493  }
8494
8495  default:
8496    break;
8497  }
8498
8499  return NewTD;
8500}
8501
8502
8503/// \brief Check that this is a valid underlying type for an enum declaration.
8504bool Sema::CheckEnumUnderlyingType(TypeSourceInfo *TI) {
8505  SourceLocation UnderlyingLoc = TI->getTypeLoc().getBeginLoc();
8506  QualType T = TI->getType();
8507
8508  if (T->isDependentType())
8509    return false;
8510
8511  if (const BuiltinType *BT = T->getAs<BuiltinType>())
8512    if (BT->isInteger())
8513      return false;
8514
8515  Diag(UnderlyingLoc, diag::err_enum_invalid_underlying) << T;
8516  return true;
8517}
8518
8519/// Check whether this is a valid redeclaration of a previous enumeration.
8520/// \return true if the redeclaration was invalid.
8521bool Sema::CheckEnumRedeclaration(SourceLocation EnumLoc, bool IsScoped,
8522                                  QualType EnumUnderlyingTy,
8523                                  const EnumDecl *Prev) {
8524  bool IsFixed = !EnumUnderlyingTy.isNull();
8525
8526  if (IsScoped != Prev->isScoped()) {
8527    Diag(EnumLoc, diag::err_enum_redeclare_scoped_mismatch)
8528      << Prev->isScoped();
8529    Diag(Prev->getLocation(), diag::note_previous_use);
8530    return true;
8531  }
8532
8533  if (IsFixed && Prev->isFixed()) {
8534    if (!EnumUnderlyingTy->isDependentType() &&
8535        !Prev->getIntegerType()->isDependentType() &&
8536        !Context.hasSameUnqualifiedType(EnumUnderlyingTy,
8537                                        Prev->getIntegerType())) {
8538      Diag(EnumLoc, diag::err_enum_redeclare_type_mismatch)
8539        << EnumUnderlyingTy << Prev->getIntegerType();
8540      Diag(Prev->getLocation(), diag::note_previous_use);
8541      return true;
8542    }
8543  } else if (IsFixed != Prev->isFixed()) {
8544    Diag(EnumLoc, diag::err_enum_redeclare_fixed_mismatch)
8545      << Prev->isFixed();
8546    Diag(Prev->getLocation(), diag::note_previous_use);
8547    return true;
8548  }
8549
8550  return false;
8551}
8552
8553/// \brief Get diagnostic %select index for tag kind for
8554/// redeclaration diagnostic message.
8555/// WARNING: Indexes apply to particular diagnostics only!
8556///
8557/// \returns diagnostic %select index.
8558static unsigned getRedeclDiagFromTagKind(TagTypeKind Tag) {
8559  switch (Tag) {
8560  case TTK_Struct: return 0;
8561  case TTK_Interface: return 1;
8562  case TTK_Class:  return 2;
8563  default: llvm_unreachable("Invalid tag kind for redecl diagnostic!");
8564  }
8565}
8566
8567/// \brief Determine if tag kind is a class-key compatible with
8568/// class for redeclaration (class, struct, or __interface).
8569///
8570/// \returns true iff the tag kind is compatible.
8571static bool isClassCompatTagKind(TagTypeKind Tag)
8572{
8573  return Tag == TTK_Struct || Tag == TTK_Class || Tag == TTK_Interface;
8574}
8575
8576/// \brief Determine whether a tag with a given kind is acceptable
8577/// as a redeclaration of the given tag declaration.
8578///
8579/// \returns true if the new tag kind is acceptable, false otherwise.
8580bool Sema::isAcceptableTagRedeclaration(const TagDecl *Previous,
8581                                        TagTypeKind NewTag, bool isDefinition,
8582                                        SourceLocation NewTagLoc,
8583                                        const IdentifierInfo &Name) {
8584  // C++ [dcl.type.elab]p3:
8585  //   The class-key or enum keyword present in the
8586  //   elaborated-type-specifier shall agree in kind with the
8587  //   declaration to which the name in the elaborated-type-specifier
8588  //   refers. This rule also applies to the form of
8589  //   elaborated-type-specifier that declares a class-name or
8590  //   friend class since it can be construed as referring to the
8591  //   definition of the class. Thus, in any
8592  //   elaborated-type-specifier, the enum keyword shall be used to
8593  //   refer to an enumeration (7.2), the union class-key shall be
8594  //   used to refer to a union (clause 9), and either the class or
8595  //   struct class-key shall be used to refer to a class (clause 9)
8596  //   declared using the class or struct class-key.
8597  TagTypeKind OldTag = Previous->getTagKind();
8598  if (!isDefinition || !isClassCompatTagKind(NewTag))
8599    if (OldTag == NewTag)
8600      return true;
8601
8602  if (isClassCompatTagKind(OldTag) && isClassCompatTagKind(NewTag)) {
8603    // Warn about the struct/class tag mismatch.
8604    bool isTemplate = false;
8605    if (const CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(Previous))
8606      isTemplate = Record->getDescribedClassTemplate();
8607
8608    if (!ActiveTemplateInstantiations.empty()) {
8609      // In a template instantiation, do not offer fix-its for tag mismatches
8610      // since they usually mess up the template instead of fixing the problem.
8611      Diag(NewTagLoc, diag::warn_struct_class_tag_mismatch)
8612        << getRedeclDiagFromTagKind(NewTag) << isTemplate << &Name
8613        << getRedeclDiagFromTagKind(OldTag);
8614      return true;
8615    }
8616
8617    if (isDefinition) {
8618      // On definitions, check previous tags and issue a fix-it for each
8619      // one that doesn't match the current tag.
8620      if (Previous->getDefinition()) {
8621        // Don't suggest fix-its for redefinitions.
8622        return true;
8623      }
8624
8625      bool previousMismatch = false;
8626      for (TagDecl::redecl_iterator I(Previous->redecls_begin()),
8627           E(Previous->redecls_end()); I != E; ++I) {
8628        if (I->getTagKind() != NewTag) {
8629          if (!previousMismatch) {
8630            previousMismatch = true;
8631            Diag(NewTagLoc, diag::warn_struct_class_previous_tag_mismatch)
8632              << getRedeclDiagFromTagKind(NewTag) << isTemplate << &Name
8633              << getRedeclDiagFromTagKind(I->getTagKind());
8634          }
8635          Diag(I->getInnerLocStart(), diag::note_struct_class_suggestion)
8636            << getRedeclDiagFromTagKind(NewTag)
8637            << FixItHint::CreateReplacement(I->getInnerLocStart(),
8638                 TypeWithKeyword::getTagTypeKindName(NewTag));
8639        }
8640      }
8641      return true;
8642    }
8643
8644    // Check for a previous definition.  If current tag and definition
8645    // are same type, do nothing.  If no definition, but disagree with
8646    // with previous tag type, give a warning, but no fix-it.
8647    const TagDecl *Redecl = Previous->getDefinition() ?
8648                            Previous->getDefinition() : Previous;
8649    if (Redecl->getTagKind() == NewTag) {
8650      return true;
8651    }
8652
8653    Diag(NewTagLoc, diag::warn_struct_class_tag_mismatch)
8654      << getRedeclDiagFromTagKind(NewTag) << isTemplate << &Name
8655      << getRedeclDiagFromTagKind(OldTag);
8656    Diag(Redecl->getLocation(), diag::note_previous_use);
8657
8658    // If there is a previous defintion, suggest a fix-it.
8659    if (Previous->getDefinition()) {
8660        Diag(NewTagLoc, diag::note_struct_class_suggestion)
8661          << getRedeclDiagFromTagKind(Redecl->getTagKind())
8662          << FixItHint::CreateReplacement(SourceRange(NewTagLoc),
8663               TypeWithKeyword::getTagTypeKindName(Redecl->getTagKind()));
8664    }
8665
8666    return true;
8667  }
8668  return false;
8669}
8670
8671/// ActOnTag - This is invoked when we see 'struct foo' or 'struct {'.  In the
8672/// former case, Name will be non-null.  In the later case, Name will be null.
8673/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a
8674/// reference/declaration/definition of a tag.
8675Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
8676                     SourceLocation KWLoc, CXXScopeSpec &SS,
8677                     IdentifierInfo *Name, SourceLocation NameLoc,
8678                     AttributeList *Attr, AccessSpecifier AS,
8679                     SourceLocation ModulePrivateLoc,
8680                     MultiTemplateParamsArg TemplateParameterLists,
8681                     bool &OwnedDecl, bool &IsDependent,
8682                     SourceLocation ScopedEnumKWLoc,
8683                     bool ScopedEnumUsesClassTag,
8684                     TypeResult UnderlyingType) {
8685  // If this is not a definition, it must have a name.
8686  IdentifierInfo *OrigName = Name;
8687  assert((Name != 0 || TUK == TUK_Definition) &&
8688         "Nameless record must be a definition!");
8689  assert(TemplateParameterLists.size() == 0 || TUK != TUK_Reference);
8690
8691  OwnedDecl = false;
8692  TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec);
8693  bool ScopedEnum = ScopedEnumKWLoc.isValid();
8694
8695  // FIXME: Check explicit specializations more carefully.
8696  bool isExplicitSpecialization = false;
8697  bool Invalid = false;
8698
8699  // We only need to do this matching if we have template parameters
8700  // or a scope specifier, which also conveniently avoids this work
8701  // for non-C++ cases.
8702  if (TemplateParameterLists.size() > 0 ||
8703      (SS.isNotEmpty() && TUK != TUK_Reference)) {
8704    if (TemplateParameterList *TemplateParams
8705          = MatchTemplateParametersToScopeSpecifier(KWLoc, NameLoc, SS,
8706                                                TemplateParameterLists.data(),
8707                                                TemplateParameterLists.size(),
8708                                                    TUK == TUK_Friend,
8709                                                    isExplicitSpecialization,
8710                                                    Invalid)) {
8711      if (TemplateParams->size() > 0) {
8712        // This is a declaration or definition of a class template (which may
8713        // be a member of another template).
8714
8715        if (Invalid)
8716          return 0;
8717
8718        OwnedDecl = false;
8719        DeclResult Result = CheckClassTemplate(S, TagSpec, TUK, KWLoc,
8720                                               SS, Name, NameLoc, Attr,
8721                                               TemplateParams, AS,
8722                                               ModulePrivateLoc,
8723                                               TemplateParameterLists.size()-1,
8724                                               TemplateParameterLists.data());
8725        return Result.get();
8726      } else {
8727        // The "template<>" header is extraneous.
8728        Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams)
8729          << TypeWithKeyword::getTagTypeKindName(Kind) << Name;
8730        isExplicitSpecialization = true;
8731      }
8732    }
8733  }
8734
8735  // Figure out the underlying type if this a enum declaration. We need to do
8736  // this early, because it's needed to detect if this is an incompatible
8737  // redeclaration.
8738  llvm::PointerUnion<const Type*, TypeSourceInfo*> EnumUnderlying;
8739
8740  if (Kind == TTK_Enum) {
8741    if (UnderlyingType.isInvalid() || (!UnderlyingType.get() && ScopedEnum))
8742      // No underlying type explicitly specified, or we failed to parse the
8743      // type, default to int.
8744      EnumUnderlying = Context.IntTy.getTypePtr();
8745    else if (UnderlyingType.get()) {
8746      // C++0x 7.2p2: The type-specifier-seq of an enum-base shall name an
8747      // integral type; any cv-qualification is ignored.
8748      TypeSourceInfo *TI = 0;
8749      GetTypeFromParser(UnderlyingType.get(), &TI);
8750      EnumUnderlying = TI;
8751
8752      if (CheckEnumUnderlyingType(TI))
8753        // Recover by falling back to int.
8754        EnumUnderlying = Context.IntTy.getTypePtr();
8755
8756      if (DiagnoseUnexpandedParameterPack(TI->getTypeLoc().getBeginLoc(), TI,
8757                                          UPPC_FixedUnderlyingType))
8758        EnumUnderlying = Context.IntTy.getTypePtr();
8759
8760    } else if (getLangOpts().MicrosoftMode)
8761      // Microsoft enums are always of int type.
8762      EnumUnderlying = Context.IntTy.getTypePtr();
8763  }
8764
8765  DeclContext *SearchDC = CurContext;
8766  DeclContext *DC = CurContext;
8767  bool isStdBadAlloc = false;
8768
8769  RedeclarationKind Redecl = ForRedeclaration;
8770  if (TUK == TUK_Friend || TUK == TUK_Reference)
8771    Redecl = NotForRedeclaration;
8772
8773  LookupResult Previous(*this, Name, NameLoc, LookupTagName, Redecl);
8774
8775  if (Name && SS.isNotEmpty()) {
8776    // We have a nested-name tag ('struct foo::bar').
8777
8778    // Check for invalid 'foo::'.
8779    if (SS.isInvalid()) {
8780      Name = 0;
8781      goto CreateNewDecl;
8782    }
8783
8784    // If this is a friend or a reference to a class in a dependent
8785    // context, don't try to make a decl for it.
8786    if (TUK == TUK_Friend || TUK == TUK_Reference) {
8787      DC = computeDeclContext(SS, false);
8788      if (!DC) {
8789        IsDependent = true;
8790        return 0;
8791      }
8792    } else {
8793      DC = computeDeclContext(SS, true);
8794      if (!DC) {
8795        Diag(SS.getRange().getBegin(), diag::err_dependent_nested_name_spec)
8796          << SS.getRange();
8797        return 0;
8798      }
8799    }
8800
8801    if (RequireCompleteDeclContext(SS, DC))
8802      return 0;
8803
8804    SearchDC = DC;
8805    // Look-up name inside 'foo::'.
8806    LookupQualifiedName(Previous, DC);
8807
8808    if (Previous.isAmbiguous())
8809      return 0;
8810
8811    if (Previous.empty()) {
8812      // Name lookup did not find anything. However, if the
8813      // nested-name-specifier refers to the current instantiation,
8814      // and that current instantiation has any dependent base
8815      // classes, we might find something at instantiation time: treat
8816      // this as a dependent elaborated-type-specifier.
8817      // But this only makes any sense for reference-like lookups.
8818      if (Previous.wasNotFoundInCurrentInstantiation() &&
8819          (TUK == TUK_Reference || TUK == TUK_Friend)) {
8820        IsDependent = true;
8821        return 0;
8822      }
8823
8824      // A tag 'foo::bar' must already exist.
8825      Diag(NameLoc, diag::err_not_tag_in_scope)
8826        << Kind << Name << DC << SS.getRange();
8827      Name = 0;
8828      Invalid = true;
8829      goto CreateNewDecl;
8830    }
8831  } else if (Name) {
8832    // If this is a named struct, check to see if there was a previous forward
8833    // declaration or definition.
8834    // FIXME: We're looking into outer scopes here, even when we
8835    // shouldn't be. Doing so can result in ambiguities that we
8836    // shouldn't be diagnosing.
8837    LookupName(Previous, S);
8838
8839    if (Previous.isAmbiguous() &&
8840        (TUK == TUK_Definition || TUK == TUK_Declaration)) {
8841      LookupResult::Filter F = Previous.makeFilter();
8842      while (F.hasNext()) {
8843        NamedDecl *ND = F.next();
8844        if (ND->getDeclContext()->getRedeclContext() != SearchDC)
8845          F.erase();
8846      }
8847      F.done();
8848    }
8849
8850    // Note:  there used to be some attempt at recovery here.
8851    if (Previous.isAmbiguous())
8852      return 0;
8853
8854    if (!getLangOpts().CPlusPlus && TUK != TUK_Reference) {
8855      // FIXME: This makes sure that we ignore the contexts associated
8856      // with C structs, unions, and enums when looking for a matching
8857      // tag declaration or definition. See the similar lookup tweak
8858      // in Sema::LookupName; is there a better way to deal with this?
8859      while (isa<RecordDecl>(SearchDC) || isa<EnumDecl>(SearchDC))
8860        SearchDC = SearchDC->getParent();
8861    }
8862  } else if (S->isFunctionPrototypeScope()) {
8863    // If this is an enum declaration in function prototype scope, set its
8864    // initial context to the translation unit.
8865    // FIXME: [citation needed]
8866    SearchDC = Context.getTranslationUnitDecl();
8867  }
8868
8869  if (Previous.isSingleResult() &&
8870      Previous.getFoundDecl()->isTemplateParameter()) {
8871    // Maybe we will complain about the shadowed template parameter.
8872    DiagnoseTemplateParameterShadow(NameLoc, Previous.getFoundDecl());
8873    // Just pretend that we didn't see the previous declaration.
8874    Previous.clear();
8875  }
8876
8877  if (getLangOpts().CPlusPlus && Name && DC && StdNamespace &&
8878      DC->Equals(getStdNamespace()) && Name->isStr("bad_alloc")) {
8879    // This is a declaration of or a reference to "std::bad_alloc".
8880    isStdBadAlloc = true;
8881
8882    if (Previous.empty() && StdBadAlloc) {
8883      // std::bad_alloc has been implicitly declared (but made invisible to
8884      // name lookup). Fill in this implicit declaration as the previous
8885      // declaration, so that the declarations get chained appropriately.
8886      Previous.addDecl(getStdBadAlloc());
8887    }
8888  }
8889
8890  // If we didn't find a previous declaration, and this is a reference
8891  // (or friend reference), move to the correct scope.  In C++, we
8892  // also need to do a redeclaration lookup there, just in case
8893  // there's a shadow friend decl.
8894  if (Name && Previous.empty() &&
8895      (TUK == TUK_Reference || TUK == TUK_Friend)) {
8896    if (Invalid) goto CreateNewDecl;
8897    assert(SS.isEmpty());
8898
8899    if (TUK == TUK_Reference) {
8900      // C++ [basic.scope.pdecl]p5:
8901      //   -- for an elaborated-type-specifier of the form
8902      //
8903      //          class-key identifier
8904      //
8905      //      if the elaborated-type-specifier is used in the
8906      //      decl-specifier-seq or parameter-declaration-clause of a
8907      //      function defined in namespace scope, the identifier is
8908      //      declared as a class-name in the namespace that contains
8909      //      the declaration; otherwise, except as a friend
8910      //      declaration, the identifier is declared in the smallest
8911      //      non-class, non-function-prototype scope that contains the
8912      //      declaration.
8913      //
8914      // C99 6.7.2.3p8 has a similar (but not identical!) provision for
8915      // C structs and unions.
8916      //
8917      // It is an error in C++ to declare (rather than define) an enum
8918      // type, including via an elaborated type specifier.  We'll
8919      // diagnose that later; for now, declare the enum in the same
8920      // scope as we would have picked for any other tag type.
8921      //
8922      // GNU C also supports this behavior as part of its incomplete
8923      // enum types extension, while GNU C++ does not.
8924      //
8925      // Find the context where we'll be declaring the tag.
8926      // FIXME: We would like to maintain the current DeclContext as the
8927      // lexical context,
8928      while (!SearchDC->isFileContext() && !SearchDC->isFunctionOrMethod())
8929        SearchDC = SearchDC->getParent();
8930
8931      // Find the scope where we'll be declaring the tag.
8932      while (S->isClassScope() ||
8933             (getLangOpts().CPlusPlus &&
8934              S->isFunctionPrototypeScope()) ||
8935             ((S->getFlags() & Scope::DeclScope) == 0) ||
8936             (S->getEntity() &&
8937              ((DeclContext *)S->getEntity())->isTransparentContext()))
8938        S = S->getParent();
8939    } else {
8940      assert(TUK == TUK_Friend);
8941      // C++ [namespace.memdef]p3:
8942      //   If a friend declaration in a non-local class first declares a
8943      //   class or function, the friend class or function is a member of
8944      //   the innermost enclosing namespace.
8945      SearchDC = SearchDC->getEnclosingNamespaceContext();
8946    }
8947
8948    // In C++, we need to do a redeclaration lookup to properly
8949    // diagnose some problems.
8950    if (getLangOpts().CPlusPlus) {
8951      Previous.setRedeclarationKind(ForRedeclaration);
8952      LookupQualifiedName(Previous, SearchDC);
8953    }
8954  }
8955
8956  if (!Previous.empty()) {
8957    NamedDecl *PrevDecl = (*Previous.begin())->getUnderlyingDecl();
8958
8959    // It's okay to have a tag decl in the same scope as a typedef
8960    // which hides a tag decl in the same scope.  Finding this
8961    // insanity with a redeclaration lookup can only actually happen
8962    // in C++.
8963    //
8964    // This is also okay for elaborated-type-specifiers, which is
8965    // technically forbidden by the current standard but which is
8966    // okay according to the likely resolution of an open issue;
8967    // see http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#407
8968    if (getLangOpts().CPlusPlus) {
8969      if (TypedefNameDecl *TD = dyn_cast<TypedefNameDecl>(PrevDecl)) {
8970        if (const TagType *TT = TD->getUnderlyingType()->getAs<TagType>()) {
8971          TagDecl *Tag = TT->getDecl();
8972          if (Tag->getDeclName() == Name &&
8973              Tag->getDeclContext()->getRedeclContext()
8974                          ->Equals(TD->getDeclContext()->getRedeclContext())) {
8975            PrevDecl = Tag;
8976            Previous.clear();
8977            Previous.addDecl(Tag);
8978            Previous.resolveKind();
8979          }
8980        }
8981      }
8982    }
8983
8984    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {
8985      // If this is a use of a previous tag, or if the tag is already declared
8986      // in the same scope (so that the definition/declaration completes or
8987      // rementions the tag), reuse the decl.
8988      if (TUK == TUK_Reference || TUK == TUK_Friend ||
8989          isDeclInScope(PrevDecl, SearchDC, S, isExplicitSpecialization)) {
8990        // Make sure that this wasn't declared as an enum and now used as a
8991        // struct or something similar.
8992        if (!isAcceptableTagRedeclaration(PrevTagDecl, Kind,
8993                                          TUK == TUK_Definition, KWLoc,
8994                                          *Name)) {
8995          bool SafeToContinue
8996            = (PrevTagDecl->getTagKind() != TTK_Enum &&
8997               Kind != TTK_Enum);
8998          if (SafeToContinue)
8999            Diag(KWLoc, diag::err_use_with_wrong_tag)
9000              << Name
9001              << FixItHint::CreateReplacement(SourceRange(KWLoc),
9002                                              PrevTagDecl->getKindName());
9003          else
9004            Diag(KWLoc, diag::err_use_with_wrong_tag) << Name;
9005          Diag(PrevTagDecl->getLocation(), diag::note_previous_use);
9006
9007          if (SafeToContinue)
9008            Kind = PrevTagDecl->getTagKind();
9009          else {
9010            // Recover by making this an anonymous redefinition.
9011            Name = 0;
9012            Previous.clear();
9013            Invalid = true;
9014          }
9015        }
9016
9017        if (Kind == TTK_Enum && PrevTagDecl->getTagKind() == TTK_Enum) {
9018          const EnumDecl *PrevEnum = cast<EnumDecl>(PrevTagDecl);
9019
9020          // If this is an elaborated-type-specifier for a scoped enumeration,
9021          // the 'class' keyword is not necessary and not permitted.
9022          if (TUK == TUK_Reference || TUK == TUK_Friend) {
9023            if (ScopedEnum)
9024              Diag(ScopedEnumKWLoc, diag::err_enum_class_reference)
9025                << PrevEnum->isScoped()
9026                << FixItHint::CreateRemoval(ScopedEnumKWLoc);
9027            return PrevTagDecl;
9028          }
9029
9030          QualType EnumUnderlyingTy;
9031          if (TypeSourceInfo *TI = EnumUnderlying.dyn_cast<TypeSourceInfo*>())
9032            EnumUnderlyingTy = TI->getType();
9033          else if (const Type *T = EnumUnderlying.dyn_cast<const Type*>())
9034            EnumUnderlyingTy = QualType(T, 0);
9035
9036          // All conflicts with previous declarations are recovered by
9037          // returning the previous declaration, unless this is a definition,
9038          // in which case we want the caller to bail out.
9039          if (CheckEnumRedeclaration(NameLoc.isValid() ? NameLoc : KWLoc,
9040                                     ScopedEnum, EnumUnderlyingTy, PrevEnum))
9041            return TUK == TUK_Declaration ? PrevTagDecl : 0;
9042        }
9043
9044        if (!Invalid) {
9045          // If this is a use, just return the declaration we found.
9046
9047          // FIXME: In the future, return a variant or some other clue
9048          // for the consumer of this Decl to know it doesn't own it.
9049          // For our current ASTs this shouldn't be a problem, but will
9050          // need to be changed with DeclGroups.
9051          if ((TUK == TUK_Reference && (!PrevTagDecl->getFriendObjectKind() ||
9052               getLangOpts().MicrosoftExt)) || TUK == TUK_Friend)
9053            return PrevTagDecl;
9054
9055          // Diagnose attempts to redefine a tag.
9056          if (TUK == TUK_Definition) {
9057            if (TagDecl *Def = PrevTagDecl->getDefinition()) {
9058              // If we're defining a specialization and the previous definition
9059              // is from an implicit instantiation, don't emit an error
9060              // here; we'll catch this in the general case below.
9061              bool IsExplicitSpecializationAfterInstantiation = false;
9062              if (isExplicitSpecialization) {
9063                if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(Def))
9064                  IsExplicitSpecializationAfterInstantiation =
9065                    RD->getTemplateSpecializationKind() !=
9066                    TSK_ExplicitSpecialization;
9067                else if (EnumDecl *ED = dyn_cast<EnumDecl>(Def))
9068                  IsExplicitSpecializationAfterInstantiation =
9069                    ED->getTemplateSpecializationKind() !=
9070                    TSK_ExplicitSpecialization;
9071              }
9072
9073              if (!IsExplicitSpecializationAfterInstantiation) {
9074                // A redeclaration in function prototype scope in C isn't
9075                // visible elsewhere, so merely issue a warning.
9076                if (!getLangOpts().CPlusPlus && S->containedInPrototypeScope())
9077                  Diag(NameLoc, diag::warn_redefinition_in_param_list) << Name;
9078                else
9079                  Diag(NameLoc, diag::err_redefinition) << Name;
9080                Diag(Def->getLocation(), diag::note_previous_definition);
9081                // If this is a redefinition, recover by making this
9082                // struct be anonymous, which will make any later
9083                // references get the previous definition.
9084                Name = 0;
9085                Previous.clear();
9086                Invalid = true;
9087              }
9088            } else {
9089              // If the type is currently being defined, complain
9090              // about a nested redefinition.
9091              const TagType *Tag
9092                = cast<TagType>(Context.getTagDeclType(PrevTagDecl));
9093              if (Tag->isBeingDefined()) {
9094                Diag(NameLoc, diag::err_nested_redefinition) << Name;
9095                Diag(PrevTagDecl->getLocation(),
9096                     diag::note_previous_definition);
9097                Name = 0;
9098                Previous.clear();
9099                Invalid = true;
9100              }
9101            }
9102
9103            // Okay, this is definition of a previously declared or referenced
9104            // tag PrevDecl. We're going to create a new Decl for it.
9105          }
9106        }
9107        // If we get here we have (another) forward declaration or we
9108        // have a definition.  Just create a new decl.
9109
9110      } else {
9111        // If we get here, this is a definition of a new tag type in a nested
9112        // scope, e.g. "struct foo; void bar() { struct foo; }", just create a
9113        // new decl/type.  We set PrevDecl to NULL so that the entities
9114        // have distinct types.
9115        Previous.clear();
9116      }
9117      // If we get here, we're going to create a new Decl. If PrevDecl
9118      // is non-NULL, it's a definition of the tag declared by
9119      // PrevDecl. If it's NULL, we have a new definition.
9120
9121
9122    // Otherwise, PrevDecl is not a tag, but was found with tag
9123    // lookup.  This is only actually possible in C++, where a few
9124    // things like templates still live in the tag namespace.
9125    } else {
9126      // Use a better diagnostic if an elaborated-type-specifier
9127      // found the wrong kind of type on the first
9128      // (non-redeclaration) lookup.
9129      if ((TUK == TUK_Reference || TUK == TUK_Friend) &&
9130          !Previous.isForRedeclaration()) {
9131        unsigned Kind = 0;
9132        if (isa<TypedefDecl>(PrevDecl)) Kind = 1;
9133        else if (isa<TypeAliasDecl>(PrevDecl)) Kind = 2;
9134        else if (isa<ClassTemplateDecl>(PrevDecl)) Kind = 3;
9135        Diag(NameLoc, diag::err_tag_reference_non_tag) << Kind;
9136        Diag(PrevDecl->getLocation(), diag::note_declared_at);
9137        Invalid = true;
9138
9139      // Otherwise, only diagnose if the declaration is in scope.
9140      } else if (!isDeclInScope(PrevDecl, SearchDC, S,
9141                                isExplicitSpecialization)) {
9142        // do nothing
9143
9144      // Diagnose implicit declarations introduced by elaborated types.
9145      } else if (TUK == TUK_Reference || TUK == TUK_Friend) {
9146        unsigned Kind = 0;
9147        if (isa<TypedefDecl>(PrevDecl)) Kind = 1;
9148        else if (isa<TypeAliasDecl>(PrevDecl)) Kind = 2;
9149        else if (isa<ClassTemplateDecl>(PrevDecl)) Kind = 3;
9150        Diag(NameLoc, diag::err_tag_reference_conflict) << Kind;
9151        Diag(PrevDecl->getLocation(), diag::note_previous_decl) << PrevDecl;
9152        Invalid = true;
9153
9154      // Otherwise it's a declaration.  Call out a particularly common
9155      // case here.
9156      } else if (TypedefNameDecl *TND = dyn_cast<TypedefNameDecl>(PrevDecl)) {
9157        unsigned Kind = 0;
9158        if (isa<TypeAliasDecl>(PrevDecl)) Kind = 1;
9159        Diag(NameLoc, diag::err_tag_definition_of_typedef)
9160          << Name << Kind << TND->getUnderlyingType();
9161        Diag(PrevDecl->getLocation(), diag::note_previous_decl) << PrevDecl;
9162        Invalid = true;
9163
9164      // Otherwise, diagnose.
9165      } else {
9166        // The tag name clashes with something else in the target scope,
9167        // issue an error and recover by making this tag be anonymous.
9168        Diag(NameLoc, diag::err_redefinition_different_kind) << Name;
9169        Diag(PrevDecl->getLocation(), diag::note_previous_definition);
9170        Name = 0;
9171        Invalid = true;
9172      }
9173
9174      // The existing declaration isn't relevant to us; we're in a
9175      // new scope, so clear out the previous declaration.
9176      Previous.clear();
9177    }
9178  }
9179
9180CreateNewDecl:
9181
9182  TagDecl *PrevDecl = 0;
9183  if (Previous.isSingleResult())
9184    PrevDecl = cast<TagDecl>(Previous.getFoundDecl());
9185
9186  // If there is an identifier, use the location of the identifier as the
9187  // location of the decl, otherwise use the location of the struct/union
9188  // keyword.
9189  SourceLocation Loc = NameLoc.isValid() ? NameLoc : KWLoc;
9190
9191  // Otherwise, create a new declaration. If there is a previous
9192  // declaration of the same entity, the two will be linked via
9193  // PrevDecl.
9194  TagDecl *New;
9195
9196  bool IsForwardReference = false;
9197  if (Kind == TTK_Enum) {
9198    // FIXME: Tag decls should be chained to any simultaneous vardecls, e.g.:
9199    // enum X { A, B, C } D;    D should chain to X.
9200    New = EnumDecl::Create(Context, SearchDC, KWLoc, Loc, Name,
9201                           cast_or_null<EnumDecl>(PrevDecl), ScopedEnum,
9202                           ScopedEnumUsesClassTag, !EnumUnderlying.isNull());
9203    // If this is an undefined enum, warn.
9204    if (TUK != TUK_Definition && !Invalid) {
9205      TagDecl *Def;
9206      if (getLangOpts().CPlusPlus11 && cast<EnumDecl>(New)->isFixed()) {
9207        // C++0x: 7.2p2: opaque-enum-declaration.
9208        // Conflicts are diagnosed above. Do nothing.
9209      }
9210      else if (PrevDecl && (Def = cast<EnumDecl>(PrevDecl)->getDefinition())) {
9211        Diag(Loc, diag::ext_forward_ref_enum_def)
9212          << New;
9213        Diag(Def->getLocation(), diag::note_previous_definition);
9214      } else {
9215        unsigned DiagID = diag::ext_forward_ref_enum;
9216        if (getLangOpts().MicrosoftMode)
9217          DiagID = diag::ext_ms_forward_ref_enum;
9218        else if (getLangOpts().CPlusPlus)
9219          DiagID = diag::err_forward_ref_enum;
9220        Diag(Loc, DiagID);
9221
9222        // If this is a forward-declared reference to an enumeration, make a
9223        // note of it; we won't actually be introducing the declaration into
9224        // the declaration context.
9225        if (TUK == TUK_Reference)
9226          IsForwardReference = true;
9227      }
9228    }
9229
9230    if (EnumUnderlying) {
9231      EnumDecl *ED = cast<EnumDecl>(New);
9232      if (TypeSourceInfo *TI = EnumUnderlying.dyn_cast<TypeSourceInfo*>())
9233        ED->setIntegerTypeSourceInfo(TI);
9234      else
9235        ED->setIntegerType(QualType(EnumUnderlying.get<const Type*>(), 0));
9236      ED->setPromotionType(ED->getIntegerType());
9237    }
9238
9239  } else {
9240    // struct/union/class
9241
9242    // FIXME: Tag decls should be chained to any simultaneous vardecls, e.g.:
9243    // struct X { int A; } D;    D should chain to X.
9244    if (getLangOpts().CPlusPlus) {
9245      // FIXME: Look for a way to use RecordDecl for simple structs.
9246      New = CXXRecordDecl::Create(Context, Kind, SearchDC, KWLoc, Loc, Name,
9247                                  cast_or_null<CXXRecordDecl>(PrevDecl));
9248
9249      if (isStdBadAlloc && (!StdBadAlloc || getStdBadAlloc()->isImplicit()))
9250        StdBadAlloc = cast<CXXRecordDecl>(New);
9251    } else
9252      New = RecordDecl::Create(Context, Kind, SearchDC, KWLoc, Loc, Name,
9253                               cast_or_null<RecordDecl>(PrevDecl));
9254  }
9255
9256  // Maybe add qualifier info.
9257  if (SS.isNotEmpty()) {
9258    if (SS.isSet()) {
9259      // If this is either a declaration or a definition, check the
9260      // nested-name-specifier against the current context. We don't do this
9261      // for explicit specializations, because they have similar checking
9262      // (with more specific diagnostics) in the call to
9263      // CheckMemberSpecialization, below.
9264      if (!isExplicitSpecialization &&
9265          (TUK == TUK_Definition || TUK == TUK_Declaration) &&
9266          diagnoseQualifiedDeclaration(SS, DC, OrigName, NameLoc))
9267        Invalid = true;
9268
9269      New->setQualifierInfo(SS.getWithLocInContext(Context));
9270      if (TemplateParameterLists.size() > 0) {
9271        New->setTemplateParameterListsInfo(Context,
9272                                           TemplateParameterLists.size(),
9273                                           TemplateParameterLists.data());
9274      }
9275    }
9276    else
9277      Invalid = true;
9278  }
9279
9280  if (RecordDecl *RD = dyn_cast<RecordDecl>(New)) {
9281    // Add alignment attributes if necessary; these attributes are checked when
9282    // the ASTContext lays out the structure.
9283    //
9284    // It is important for implementing the correct semantics that this
9285    // happen here (in act on tag decl). The #pragma pack stack is
9286    // maintained as a result of parser callbacks which can occur at
9287    // many points during the parsing of a struct declaration (because
9288    // the #pragma tokens are effectively skipped over during the
9289    // parsing of the struct).
9290    if (TUK == TUK_Definition) {
9291      AddAlignmentAttributesForRecord(RD);
9292      AddMsStructLayoutForRecord(RD);
9293    }
9294  }
9295
9296  if (ModulePrivateLoc.isValid()) {
9297    if (isExplicitSpecialization)
9298      Diag(New->getLocation(), diag::err_module_private_specialization)
9299        << 2
9300        << FixItHint::CreateRemoval(ModulePrivateLoc);
9301    // __module_private__ does not apply to local classes. However, we only
9302    // diagnose this as an error when the declaration specifiers are
9303    // freestanding. Here, we just ignore the __module_private__.
9304    else if (!SearchDC->isFunctionOrMethod())
9305      New->setModulePrivate();
9306  }
9307
9308  // If this is a specialization of a member class (of a class template),
9309  // check the specialization.
9310  if (isExplicitSpecialization && CheckMemberSpecialization(New, Previous))
9311    Invalid = true;
9312
9313  if (Invalid)
9314    New->setInvalidDecl();
9315
9316  if (Attr)
9317    ProcessDeclAttributeList(S, New, Attr);
9318
9319  // If we're declaring or defining a tag in function prototype scope
9320  // in C, note that this type can only be used within the function.
9321  if (Name && S->isFunctionPrototypeScope() && !getLangOpts().CPlusPlus)
9322    Diag(Loc, diag::warn_decl_in_param_list) << Context.getTagDeclType(New);
9323
9324  // Set the lexical context. If the tag has a C++ scope specifier, the
9325  // lexical context will be different from the semantic context.
9326  New->setLexicalDeclContext(CurContext);
9327
9328  // Mark this as a friend decl if applicable.
9329  // In Microsoft mode, a friend declaration also acts as a forward
9330  // declaration so we always pass true to setObjectOfFriendDecl to make
9331  // the tag name visible.
9332  if (TUK == TUK_Friend)
9333    New->setObjectOfFriendDecl(/* PreviouslyDeclared = */ !Previous.empty() ||
9334                               getLangOpts().MicrosoftExt);
9335
9336  // Set the access specifier.
9337  if (!Invalid && SearchDC->isRecord())
9338    SetMemberAccessSpecifier(New, PrevDecl, AS);
9339
9340  if (TUK == TUK_Definition)
9341    New->startDefinition();
9342
9343  // If this has an identifier, add it to the scope stack.
9344  if (TUK == TUK_Friend) {
9345    // We might be replacing an existing declaration in the lookup tables;
9346    // if so, borrow its access specifier.
9347    if (PrevDecl)
9348      New->setAccess(PrevDecl->getAccess());
9349
9350    DeclContext *DC = New->getDeclContext()->getRedeclContext();
9351    DC->makeDeclVisibleInContext(New);
9352    if (Name) // can be null along some error paths
9353      if (Scope *EnclosingScope = getScopeForDeclContext(S, DC))
9354        PushOnScopeChains(New, EnclosingScope, /* AddToContext = */ false);
9355  } else if (Name) {
9356    S = getNonFieldDeclScope(S);
9357    PushOnScopeChains(New, S, !IsForwardReference);
9358    if (IsForwardReference)
9359      SearchDC->makeDeclVisibleInContext(New);
9360
9361  } else {
9362    CurContext->addDecl(New);
9363  }
9364
9365  // If this is the C FILE type, notify the AST context.
9366  if (IdentifierInfo *II = New->getIdentifier())
9367    if (!New->isInvalidDecl() &&
9368        New->getDeclContext()->getRedeclContext()->isTranslationUnit() &&
9369        II->isStr("FILE"))
9370      Context.setFILEDecl(New);
9371
9372  // If we were in function prototype scope (and not in C++ mode), add this
9373  // tag to the list of decls to inject into the function definition scope.
9374  if (S->isFunctionPrototypeScope() && !getLangOpts().CPlusPlus &&
9375      InFunctionDeclarator && Name)
9376    DeclsInPrototypeScope.push_back(New);
9377
9378  if (PrevDecl)
9379    mergeDeclAttributes(New, PrevDecl);
9380
9381  // If there's a #pragma GCC visibility in scope, set the visibility of this
9382  // record.
9383  AddPushedVisibilityAttribute(New);
9384
9385  OwnedDecl = true;
9386  // In C++, don't return an invalid declaration. We can't recover well from
9387  // the cases where we make the type anonymous.
9388  return (Invalid && getLangOpts().CPlusPlus) ? 0 : New;
9389}
9390
9391void Sema::ActOnTagStartDefinition(Scope *S, Decl *TagD) {
9392  AdjustDeclIfTemplate(TagD);
9393  TagDecl *Tag = cast<TagDecl>(TagD);
9394
9395  // Enter the tag context.
9396  PushDeclContext(S, Tag);
9397
9398  ActOnDocumentableDecl(TagD);
9399
9400  // If there's a #pragma GCC visibility in scope, set the visibility of this
9401  // record.
9402  AddPushedVisibilityAttribute(Tag);
9403}
9404
9405Decl *Sema::ActOnObjCContainerStartDefinition(Decl *IDecl) {
9406  assert(isa<ObjCContainerDecl>(IDecl) &&
9407         "ActOnObjCContainerStartDefinition - Not ObjCContainerDecl");
9408  DeclContext *OCD = cast<DeclContext>(IDecl);
9409  assert(getContainingDC(OCD) == CurContext &&
9410      "The next DeclContext should be lexically contained in the current one.");
9411  CurContext = OCD;
9412  return IDecl;
9413}
9414
9415void Sema::ActOnStartCXXMemberDeclarations(Scope *S, Decl *TagD,
9416                                           SourceLocation FinalLoc,
9417                                           SourceLocation LBraceLoc) {
9418  AdjustDeclIfTemplate(TagD);
9419  CXXRecordDecl *Record = cast<CXXRecordDecl>(TagD);
9420
9421  FieldCollector->StartClass();
9422
9423  if (!Record->getIdentifier())
9424    return;
9425
9426  if (FinalLoc.isValid())
9427    Record->addAttr(new (Context) FinalAttr(FinalLoc, Context));
9428
9429  // C++ [class]p2:
9430  //   [...] The class-name is also inserted into the scope of the
9431  //   class itself; this is known as the injected-class-name. For
9432  //   purposes of access checking, the injected-class-name is treated
9433  //   as if it were a public member name.
9434  CXXRecordDecl *InjectedClassName
9435    = CXXRecordDecl::Create(Context, Record->getTagKind(), CurContext,
9436                            Record->getLocStart(), Record->getLocation(),
9437                            Record->getIdentifier(),
9438                            /*PrevDecl=*/0,
9439                            /*DelayTypeCreation=*/true);
9440  Context.getTypeDeclType(InjectedClassName, Record);
9441  InjectedClassName->setImplicit();
9442  InjectedClassName->setAccess(AS_public);
9443  if (ClassTemplateDecl *Template = Record->getDescribedClassTemplate())
9444      InjectedClassName->setDescribedClassTemplate(Template);
9445  PushOnScopeChains(InjectedClassName, S);
9446  assert(InjectedClassName->isInjectedClassName() &&
9447         "Broken injected-class-name");
9448}
9449
9450void Sema::ActOnTagFinishDefinition(Scope *S, Decl *TagD,
9451                                    SourceLocation RBraceLoc) {
9452  AdjustDeclIfTemplate(TagD);
9453  TagDecl *Tag = cast<TagDecl>(TagD);
9454  Tag->setRBraceLoc(RBraceLoc);
9455
9456  // Make sure we "complete" the definition even it is invalid.
9457  if (Tag->isBeingDefined()) {
9458    assert(Tag->isInvalidDecl() && "We should already have completed it");
9459    if (RecordDecl *RD = dyn_cast<RecordDecl>(Tag))
9460      RD->completeDefinition();
9461  }
9462
9463  if (isa<CXXRecordDecl>(Tag))
9464    FieldCollector->FinishClass();
9465
9466  // Exit this scope of this tag's definition.
9467  PopDeclContext();
9468
9469  // Notify the consumer that we've defined a tag.
9470  Consumer.HandleTagDeclDefinition(Tag);
9471}
9472
9473void Sema::ActOnObjCContainerFinishDefinition() {
9474  // Exit this scope of this interface definition.
9475  PopDeclContext();
9476}
9477
9478void Sema::ActOnObjCTemporaryExitContainerContext(DeclContext *DC) {
9479  assert(DC == CurContext && "Mismatch of container contexts");
9480  OriginalLexicalContext = DC;
9481  ActOnObjCContainerFinishDefinition();
9482}
9483
9484void Sema::ActOnObjCReenterContainerContext(DeclContext *DC) {
9485  ActOnObjCContainerStartDefinition(cast<Decl>(DC));
9486  OriginalLexicalContext = 0;
9487}
9488
9489void Sema::ActOnTagDefinitionError(Scope *S, Decl *TagD) {
9490  AdjustDeclIfTemplate(TagD);
9491  TagDecl *Tag = cast<TagDecl>(TagD);
9492  Tag->setInvalidDecl();
9493
9494  // Make sure we "complete" the definition even it is invalid.
9495  if (Tag->isBeingDefined()) {
9496    if (RecordDecl *RD = dyn_cast<RecordDecl>(Tag))
9497      RD->completeDefinition();
9498  }
9499
9500  // We're undoing ActOnTagStartDefinition here, not
9501  // ActOnStartCXXMemberDeclarations, so we don't have to mess with
9502  // the FieldCollector.
9503
9504  PopDeclContext();
9505}
9506
9507// Note that FieldName may be null for anonymous bitfields.
9508ExprResult Sema::VerifyBitField(SourceLocation FieldLoc,
9509                                IdentifierInfo *FieldName,
9510                                QualType FieldTy, Expr *BitWidth,
9511                                bool *ZeroWidth) {
9512  // Default to true; that shouldn't confuse checks for emptiness
9513  if (ZeroWidth)
9514    *ZeroWidth = true;
9515
9516  // C99 6.7.2.1p4 - verify the field type.
9517  // C++ 9.6p3: A bit-field shall have integral or enumeration type.
9518  if (!FieldTy->isDependentType() && !FieldTy->isIntegralOrEnumerationType()) {
9519    // Handle incomplete types with specific error.
9520    if (RequireCompleteType(FieldLoc, FieldTy, diag::err_field_incomplete))
9521      return ExprError();
9522    if (FieldName)
9523      return Diag(FieldLoc, diag::err_not_integral_type_bitfield)
9524        << FieldName << FieldTy << BitWidth->getSourceRange();
9525    return Diag(FieldLoc, diag::err_not_integral_type_anon_bitfield)
9526      << FieldTy << BitWidth->getSourceRange();
9527  } else if (DiagnoseUnexpandedParameterPack(const_cast<Expr *>(BitWidth),
9528                                             UPPC_BitFieldWidth))
9529    return ExprError();
9530
9531  // If the bit-width is type- or value-dependent, don't try to check
9532  // it now.
9533  if (BitWidth->isValueDependent() || BitWidth->isTypeDependent())
9534    return Owned(BitWidth);
9535
9536  llvm::APSInt Value;
9537  ExprResult ICE = VerifyIntegerConstantExpression(BitWidth, &Value);
9538  if (ICE.isInvalid())
9539    return ICE;
9540  BitWidth = ICE.take();
9541
9542  if (Value != 0 && ZeroWidth)
9543    *ZeroWidth = false;
9544
9545  // Zero-width bitfield is ok for anonymous field.
9546  if (Value == 0 && FieldName)
9547    return Diag(FieldLoc, diag::err_bitfield_has_zero_width) << FieldName;
9548
9549  if (Value.isSigned() && Value.isNegative()) {
9550    if (FieldName)
9551      return Diag(FieldLoc, diag::err_bitfield_has_negative_width)
9552               << FieldName << Value.toString(10);
9553    return Diag(FieldLoc, diag::err_anon_bitfield_has_negative_width)
9554      << Value.toString(10);
9555  }
9556
9557  if (!FieldTy->isDependentType()) {
9558    uint64_t TypeSize = Context.getTypeSize(FieldTy);
9559    if (Value.getZExtValue() > TypeSize) {
9560      if (!getLangOpts().CPlusPlus) {
9561        if (FieldName)
9562          return Diag(FieldLoc, diag::err_bitfield_width_exceeds_type_size)
9563            << FieldName << (unsigned)Value.getZExtValue()
9564            << (unsigned)TypeSize;
9565
9566        return Diag(FieldLoc, diag::err_anon_bitfield_width_exceeds_type_size)
9567          << (unsigned)Value.getZExtValue() << (unsigned)TypeSize;
9568      }
9569
9570      if (FieldName)
9571        Diag(FieldLoc, diag::warn_bitfield_width_exceeds_type_size)
9572          << FieldName << (unsigned)Value.getZExtValue()
9573          << (unsigned)TypeSize;
9574      else
9575        Diag(FieldLoc, diag::warn_anon_bitfield_width_exceeds_type_size)
9576          << (unsigned)Value.getZExtValue() << (unsigned)TypeSize;
9577    }
9578  }
9579
9580  return Owned(BitWidth);
9581}
9582
9583/// ActOnField - Each field of a C struct/union is passed into this in order
9584/// to create a FieldDecl object for it.
9585Decl *Sema::ActOnField(Scope *S, Decl *TagD, SourceLocation DeclStart,
9586                       Declarator &D, Expr *BitfieldWidth) {
9587  FieldDecl *Res = HandleField(S, cast_or_null<RecordDecl>(TagD),
9588                               DeclStart, D, static_cast<Expr*>(BitfieldWidth),
9589                               /*InitStyle=*/ICIS_NoInit, AS_public);
9590  return Res;
9591}
9592
9593/// HandleField - Analyze a field of a C struct or a C++ data member.
9594///
9595FieldDecl *Sema::HandleField(Scope *S, RecordDecl *Record,
9596                             SourceLocation DeclStart,
9597                             Declarator &D, Expr *BitWidth,
9598                             InClassInitStyle InitStyle,
9599                             AccessSpecifier AS) {
9600  IdentifierInfo *II = D.getIdentifier();
9601  SourceLocation Loc = DeclStart;
9602  if (II) Loc = D.getIdentifierLoc();
9603
9604  TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
9605  QualType T = TInfo->getType();
9606  if (getLangOpts().CPlusPlus) {
9607    CheckExtraCXXDefaultArguments(D);
9608
9609    if (DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo,
9610                                        UPPC_DataMemberType)) {
9611      D.setInvalidType();
9612      T = Context.IntTy;
9613      TInfo = Context.getTrivialTypeSourceInfo(T, Loc);
9614    }
9615  }
9616
9617  DiagnoseFunctionSpecifiers(D);
9618
9619  if (D.getDeclSpec().isThreadSpecified())
9620    Diag(D.getDeclSpec().getThreadSpecLoc(), diag::err_invalid_thread);
9621  if (D.getDeclSpec().isConstexprSpecified())
9622    Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_invalid_constexpr)
9623      << 2;
9624
9625  // Check to see if this name was declared as a member previously
9626  NamedDecl *PrevDecl = 0;
9627  LookupResult Previous(*this, II, Loc, LookupMemberName, ForRedeclaration);
9628  LookupName(Previous, S);
9629  switch (Previous.getResultKind()) {
9630    case LookupResult::Found:
9631    case LookupResult::FoundUnresolvedValue:
9632      PrevDecl = Previous.getAsSingle<NamedDecl>();
9633      break;
9634
9635    case LookupResult::FoundOverloaded:
9636      PrevDecl = Previous.getRepresentativeDecl();
9637      break;
9638
9639    case LookupResult::NotFound:
9640    case LookupResult::NotFoundInCurrentInstantiation:
9641    case LookupResult::Ambiguous:
9642      break;
9643  }
9644  Previous.suppressDiagnostics();
9645
9646  if (PrevDecl && PrevDecl->isTemplateParameter()) {
9647    // Maybe we will complain about the shadowed template parameter.
9648    DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
9649    // Just pretend that we didn't see the previous declaration.
9650    PrevDecl = 0;
9651  }
9652
9653  if (PrevDecl && !isDeclInScope(PrevDecl, Record, S))
9654    PrevDecl = 0;
9655
9656  bool Mutable
9657    = (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_mutable);
9658  SourceLocation TSSL = D.getLocStart();
9659  FieldDecl *NewFD
9660    = CheckFieldDecl(II, T, TInfo, Record, Loc, Mutable, BitWidth, InitStyle,
9661                     TSSL, AS, PrevDecl, &D);
9662
9663  if (NewFD->isInvalidDecl())
9664    Record->setInvalidDecl();
9665
9666  if (D.getDeclSpec().isModulePrivateSpecified())
9667    NewFD->setModulePrivate();
9668
9669  if (NewFD->isInvalidDecl() && PrevDecl) {
9670    // Don't introduce NewFD into scope; there's already something
9671    // with the same name in the same scope.
9672  } else if (II) {
9673    PushOnScopeChains(NewFD, S);
9674  } else
9675    Record->addDecl(NewFD);
9676
9677  return NewFD;
9678}
9679
9680/// \brief Build a new FieldDecl and check its well-formedness.
9681///
9682/// This routine builds a new FieldDecl given the fields name, type,
9683/// record, etc. \p PrevDecl should refer to any previous declaration
9684/// with the same name and in the same scope as the field to be
9685/// created.
9686///
9687/// \returns a new FieldDecl.
9688///
9689/// \todo The Declarator argument is a hack. It will be removed once
9690FieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T,
9691                                TypeSourceInfo *TInfo,
9692                                RecordDecl *Record, SourceLocation Loc,
9693                                bool Mutable, Expr *BitWidth,
9694                                InClassInitStyle InitStyle,
9695                                SourceLocation TSSL,
9696                                AccessSpecifier AS, NamedDecl *PrevDecl,
9697                                Declarator *D) {
9698  IdentifierInfo *II = Name.getAsIdentifierInfo();
9699  bool InvalidDecl = false;
9700  if (D) InvalidDecl = D->isInvalidType();
9701
9702  // If we receive a broken type, recover by assuming 'int' and
9703  // marking this declaration as invalid.
9704  if (T.isNull()) {
9705    InvalidDecl = true;
9706    T = Context.IntTy;
9707  }
9708
9709  QualType EltTy = Context.getBaseElementType(T);
9710  if (!EltTy->isDependentType()) {
9711    if (RequireCompleteType(Loc, EltTy, diag::err_field_incomplete)) {
9712      // Fields of incomplete type force their record to be invalid.
9713      Record->setInvalidDecl();
9714      InvalidDecl = true;
9715    } else {
9716      NamedDecl *Def;
9717      EltTy->isIncompleteType(&Def);
9718      if (Def && Def->isInvalidDecl()) {
9719        Record->setInvalidDecl();
9720        InvalidDecl = true;
9721      }
9722    }
9723  }
9724
9725  // C99 6.7.2.1p8: A member of a structure or union may have any type other
9726  // than a variably modified type.
9727  if (!InvalidDecl && T->isVariablyModifiedType()) {
9728    bool SizeIsNegative;
9729    llvm::APSInt Oversized;
9730
9731    TypeSourceInfo *FixedTInfo =
9732      TryToFixInvalidVariablyModifiedTypeSourceInfo(TInfo, Context,
9733                                                    SizeIsNegative,
9734                                                    Oversized);
9735    if (FixedTInfo) {
9736      Diag(Loc, diag::warn_illegal_constant_array_size);
9737      TInfo = FixedTInfo;
9738      T = FixedTInfo->getType();
9739    } else {
9740      if (SizeIsNegative)
9741        Diag(Loc, diag::err_typecheck_negative_array_size);
9742      else if (Oversized.getBoolValue())
9743        Diag(Loc, diag::err_array_too_large)
9744          << Oversized.toString(10);
9745      else
9746        Diag(Loc, diag::err_typecheck_field_variable_size);
9747      InvalidDecl = true;
9748    }
9749  }
9750
9751  // Fields can not have abstract class types
9752  if (!InvalidDecl && RequireNonAbstractType(Loc, T,
9753                                             diag::err_abstract_type_in_decl,
9754                                             AbstractFieldType))
9755    InvalidDecl = true;
9756
9757  bool ZeroWidth = false;
9758  // If this is declared as a bit-field, check the bit-field.
9759  if (!InvalidDecl && BitWidth) {
9760    BitWidth = VerifyBitField(Loc, II, T, BitWidth, &ZeroWidth).take();
9761    if (!BitWidth) {
9762      InvalidDecl = true;
9763      BitWidth = 0;
9764      ZeroWidth = false;
9765    }
9766  }
9767
9768  // Check that 'mutable' is consistent with the type of the declaration.
9769  if (!InvalidDecl && Mutable) {
9770    unsigned DiagID = 0;
9771    if (T->isReferenceType())
9772      DiagID = diag::err_mutable_reference;
9773    else if (T.isConstQualified())
9774      DiagID = diag::err_mutable_const;
9775
9776    if (DiagID) {
9777      SourceLocation ErrLoc = Loc;
9778      if (D && D->getDeclSpec().getStorageClassSpecLoc().isValid())
9779        ErrLoc = D->getDeclSpec().getStorageClassSpecLoc();
9780      Diag(ErrLoc, DiagID);
9781      Mutable = false;
9782      InvalidDecl = true;
9783    }
9784  }
9785
9786  FieldDecl *NewFD = FieldDecl::Create(Context, Record, TSSL, Loc, II, T, TInfo,
9787                                       BitWidth, Mutable, InitStyle);
9788  if (InvalidDecl)
9789    NewFD->setInvalidDecl();
9790
9791  if (PrevDecl && !isa<TagDecl>(PrevDecl)) {
9792    Diag(Loc, diag::err_duplicate_member) << II;
9793    Diag(PrevDecl->getLocation(), diag::note_previous_declaration);
9794    NewFD->setInvalidDecl();
9795  }
9796
9797  if (!InvalidDecl && getLangOpts().CPlusPlus) {
9798    if (Record->isUnion()) {
9799      if (const RecordType *RT = EltTy->getAs<RecordType>()) {
9800        CXXRecordDecl* RDecl = cast<CXXRecordDecl>(RT->getDecl());
9801        if (RDecl->getDefinition()) {
9802          // C++ [class.union]p1: An object of a class with a non-trivial
9803          // constructor, a non-trivial copy constructor, a non-trivial
9804          // destructor, or a non-trivial copy assignment operator
9805          // cannot be a member of a union, nor can an array of such
9806          // objects.
9807          if (CheckNontrivialField(NewFD))
9808            NewFD->setInvalidDecl();
9809        }
9810      }
9811
9812      // C++ [class.union]p1: If a union contains a member of reference type,
9813      // the program is ill-formed.
9814      if (EltTy->isReferenceType()) {
9815        Diag(NewFD->getLocation(), diag::err_union_member_of_reference_type)
9816          << NewFD->getDeclName() << EltTy;
9817        NewFD->setInvalidDecl();
9818      }
9819    }
9820  }
9821
9822  // FIXME: We need to pass in the attributes given an AST
9823  // representation, not a parser representation.
9824  if (D)
9825    // FIXME: What to pass instead of TUScope?
9826    ProcessDeclAttributes(TUScope, NewFD, *D);
9827
9828  // In auto-retain/release, infer strong retension for fields of
9829  // retainable type.
9830  if (getLangOpts().ObjCAutoRefCount && inferObjCARCLifetime(NewFD))
9831    NewFD->setInvalidDecl();
9832
9833  if (T.isObjCGCWeak())
9834    Diag(Loc, diag::warn_attribute_weak_on_field);
9835
9836  NewFD->setAccess(AS);
9837  return NewFD;
9838}
9839
9840bool Sema::CheckNontrivialField(FieldDecl *FD) {
9841  assert(FD);
9842  assert(getLangOpts().CPlusPlus && "valid check only for C++");
9843
9844  if (FD->isInvalidDecl())
9845    return true;
9846
9847  QualType EltTy = Context.getBaseElementType(FD->getType());
9848  if (const RecordType *RT = EltTy->getAs<RecordType>()) {
9849    CXXRecordDecl *RDecl = cast<CXXRecordDecl>(RT->getDecl());
9850    if (RDecl->getDefinition()) {
9851      // We check for copy constructors before constructors
9852      // because otherwise we'll never get complaints about
9853      // copy constructors.
9854
9855      CXXSpecialMember member = CXXInvalid;
9856      // We're required to check for any non-trivial constructors. Since the
9857      // implicit default constructor is suppressed if there are any
9858      // user-declared constructors, we just need to check that there is a
9859      // trivial default constructor and a trivial copy constructor. (We don't
9860      // worry about move constructors here, since this is a C++98 check.)
9861      if (RDecl->hasNonTrivialCopyConstructor())
9862        member = CXXCopyConstructor;
9863      else if (!RDecl->hasTrivialDefaultConstructor())
9864        member = CXXDefaultConstructor;
9865      else if (RDecl->hasNonTrivialCopyAssignment())
9866        member = CXXCopyAssignment;
9867      else if (RDecl->hasNonTrivialDestructor())
9868        member = CXXDestructor;
9869
9870      if (member != CXXInvalid) {
9871        if (!getLangOpts().CPlusPlus11 &&
9872            getLangOpts().ObjCAutoRefCount && RDecl->hasObjectMember()) {
9873          // Objective-C++ ARC: it is an error to have a non-trivial field of
9874          // a union. However, system headers in Objective-C programs
9875          // occasionally have Objective-C lifetime objects within unions,
9876          // and rather than cause the program to fail, we make those
9877          // members unavailable.
9878          SourceLocation Loc = FD->getLocation();
9879          if (getSourceManager().isInSystemHeader(Loc)) {
9880            if (!FD->hasAttr<UnavailableAttr>())
9881              FD->addAttr(new (Context) UnavailableAttr(Loc, Context,
9882                                  "this system field has retaining ownership"));
9883            return false;
9884          }
9885        }
9886
9887        Diag(FD->getLocation(), getLangOpts().CPlusPlus11 ?
9888               diag::warn_cxx98_compat_nontrivial_union_or_anon_struct_member :
9889               diag::err_illegal_union_or_anon_struct_member)
9890          << (int)FD->getParent()->isUnion() << FD->getDeclName() << member;
9891        DiagnoseNontrivial(RDecl, member);
9892        return !getLangOpts().CPlusPlus11;
9893      }
9894    }
9895  }
9896
9897  return false;
9898}
9899
9900/// TranslateIvarVisibility - Translate visibility from a token ID to an
9901///  AST enum value.
9902static ObjCIvarDecl::AccessControl
9903TranslateIvarVisibility(tok::ObjCKeywordKind ivarVisibility) {
9904  switch (ivarVisibility) {
9905  default: llvm_unreachable("Unknown visitibility kind");
9906  case tok::objc_private: return ObjCIvarDecl::Private;
9907  case tok::objc_public: return ObjCIvarDecl::Public;
9908  case tok::objc_protected: return ObjCIvarDecl::Protected;
9909  case tok::objc_package: return ObjCIvarDecl::Package;
9910  }
9911}
9912
9913/// ActOnIvar - Each ivar field of an objective-c class is passed into this
9914/// in order to create an IvarDecl object for it.
9915Decl *Sema::ActOnIvar(Scope *S,
9916                                SourceLocation DeclStart,
9917                                Declarator &D, Expr *BitfieldWidth,
9918                                tok::ObjCKeywordKind Visibility) {
9919
9920  IdentifierInfo *II = D.getIdentifier();
9921  Expr *BitWidth = (Expr*)BitfieldWidth;
9922  SourceLocation Loc = DeclStart;
9923  if (II) Loc = D.getIdentifierLoc();
9924
9925  // FIXME: Unnamed fields can be handled in various different ways, for
9926  // example, unnamed unions inject all members into the struct namespace!
9927
9928  TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
9929  QualType T = TInfo->getType();
9930
9931  if (BitWidth) {
9932    // 6.7.2.1p3, 6.7.2.1p4
9933    BitWidth = VerifyBitField(Loc, II, T, BitWidth).take();
9934    if (!BitWidth)
9935      D.setInvalidType();
9936  } else {
9937    // Not a bitfield.
9938
9939    // validate II.
9940
9941  }
9942  if (T->isReferenceType()) {
9943    Diag(Loc, diag::err_ivar_reference_type);
9944    D.setInvalidType();
9945  }
9946  // C99 6.7.2.1p8: A member of a structure or union may have any type other
9947  // than a variably modified type.
9948  else if (T->isVariablyModifiedType()) {
9949    Diag(Loc, diag::err_typecheck_ivar_variable_size);
9950    D.setInvalidType();
9951  }
9952
9953  // Get the visibility (access control) for this ivar.
9954  ObjCIvarDecl::AccessControl ac =
9955    Visibility != tok::objc_not_keyword ? TranslateIvarVisibility(Visibility)
9956                                        : ObjCIvarDecl::None;
9957  // Must set ivar's DeclContext to its enclosing interface.
9958  ObjCContainerDecl *EnclosingDecl = cast<ObjCContainerDecl>(CurContext);
9959  if (!EnclosingDecl || EnclosingDecl->isInvalidDecl())
9960    return 0;
9961  ObjCContainerDecl *EnclosingContext;
9962  if (ObjCImplementationDecl *IMPDecl =
9963      dyn_cast<ObjCImplementationDecl>(EnclosingDecl)) {
9964    if (LangOpts.ObjCRuntime.isFragile()) {
9965    // Case of ivar declared in an implementation. Context is that of its class.
9966      EnclosingContext = IMPDecl->getClassInterface();
9967      assert(EnclosingContext && "Implementation has no class interface!");
9968    }
9969    else
9970      EnclosingContext = EnclosingDecl;
9971  } else {
9972    if (ObjCCategoryDecl *CDecl =
9973        dyn_cast<ObjCCategoryDecl>(EnclosingDecl)) {
9974      if (LangOpts.ObjCRuntime.isFragile() || !CDecl->IsClassExtension()) {
9975        Diag(Loc, diag::err_misplaced_ivar) << CDecl->IsClassExtension();
9976        return 0;
9977      }
9978    }
9979    EnclosingContext = EnclosingDecl;
9980  }
9981
9982  // Construct the decl.
9983  ObjCIvarDecl *NewID = ObjCIvarDecl::Create(Context, EnclosingContext,
9984                                             DeclStart, Loc, II, T,
9985                                             TInfo, ac, (Expr *)BitfieldWidth);
9986
9987  if (II) {
9988    NamedDecl *PrevDecl = LookupSingleName(S, II, Loc, LookupMemberName,
9989                                           ForRedeclaration);
9990    if (PrevDecl && isDeclInScope(PrevDecl, EnclosingContext, S)
9991        && !isa<TagDecl>(PrevDecl)) {
9992      Diag(Loc, diag::err_duplicate_member) << II;
9993      Diag(PrevDecl->getLocation(), diag::note_previous_declaration);
9994      NewID->setInvalidDecl();
9995    }
9996  }
9997
9998  // Process attributes attached to the ivar.
9999  ProcessDeclAttributes(S, NewID, D);
10000
10001  if (D.isInvalidType())
10002    NewID->setInvalidDecl();
10003
10004  // In ARC, infer 'retaining' for ivars of retainable type.
10005  if (getLangOpts().ObjCAutoRefCount && inferObjCARCLifetime(NewID))
10006    NewID->setInvalidDecl();
10007
10008  if (D.getDeclSpec().isModulePrivateSpecified())
10009    NewID->setModulePrivate();
10010
10011  if (II) {
10012    // FIXME: When interfaces are DeclContexts, we'll need to add
10013    // these to the interface.
10014    S->AddDecl(NewID);
10015    IdResolver.AddDecl(NewID);
10016  }
10017
10018  if (LangOpts.ObjCRuntime.isNonFragile() &&
10019      !NewID->isInvalidDecl() && isa<ObjCInterfaceDecl>(EnclosingDecl))
10020    Diag(Loc, diag::warn_ivars_in_interface);
10021
10022  return NewID;
10023}
10024
10025/// ActOnLastBitfield - This routine handles synthesized bitfields rules for
10026/// class and class extensions. For every class @interface and class
10027/// extension @interface, if the last ivar is a bitfield of any type,
10028/// then add an implicit `char :0` ivar to the end of that interface.
10029void Sema::ActOnLastBitfield(SourceLocation DeclLoc,
10030                             SmallVectorImpl<Decl *> &AllIvarDecls) {
10031  if (LangOpts.ObjCRuntime.isFragile() || AllIvarDecls.empty())
10032    return;
10033
10034  Decl *ivarDecl = AllIvarDecls[AllIvarDecls.size()-1];
10035  ObjCIvarDecl *Ivar = cast<ObjCIvarDecl>(ivarDecl);
10036
10037  if (!Ivar->isBitField() || Ivar->getBitWidthValue(Context) == 0)
10038    return;
10039  ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(CurContext);
10040  if (!ID) {
10041    if (ObjCCategoryDecl *CD = dyn_cast<ObjCCategoryDecl>(CurContext)) {
10042      if (!CD->IsClassExtension())
10043        return;
10044    }
10045    // No need to add this to end of @implementation.
10046    else
10047      return;
10048  }
10049  // All conditions are met. Add a new bitfield to the tail end of ivars.
10050  llvm::APInt Zero(Context.getTypeSize(Context.IntTy), 0);
10051  Expr * BW = IntegerLiteral::Create(Context, Zero, Context.IntTy, DeclLoc);
10052
10053  Ivar = ObjCIvarDecl::Create(Context, cast<ObjCContainerDecl>(CurContext),
10054                              DeclLoc, DeclLoc, 0,
10055                              Context.CharTy,
10056                              Context.getTrivialTypeSourceInfo(Context.CharTy,
10057                                                               DeclLoc),
10058                              ObjCIvarDecl::Private, BW,
10059                              true);
10060  AllIvarDecls.push_back(Ivar);
10061}
10062
10063void Sema::ActOnFields(Scope* S,
10064                       SourceLocation RecLoc, Decl *EnclosingDecl,
10065                       llvm::ArrayRef<Decl *> Fields,
10066                       SourceLocation LBrac, SourceLocation RBrac,
10067                       AttributeList *Attr) {
10068  assert(EnclosingDecl && "missing record or interface decl");
10069
10070  // If this is an Objective-C @implementation or category and we have
10071  // new fields here we should reset the layout of the interface since
10072  // it will now change.
10073  if (!Fields.empty() && isa<ObjCContainerDecl>(EnclosingDecl)) {
10074    ObjCContainerDecl *DC = cast<ObjCContainerDecl>(EnclosingDecl);
10075    switch (DC->getKind()) {
10076    default: break;
10077    case Decl::ObjCCategory:
10078      Context.ResetObjCLayout(cast<ObjCCategoryDecl>(DC)->getClassInterface());
10079      break;
10080    case Decl::ObjCImplementation:
10081      Context.
10082        ResetObjCLayout(cast<ObjCImplementationDecl>(DC)->getClassInterface());
10083      break;
10084    }
10085  }
10086
10087  RecordDecl *Record = dyn_cast<RecordDecl>(EnclosingDecl);
10088
10089  // Start counting up the number of named members; make sure to include
10090  // members of anonymous structs and unions in the total.
10091  unsigned NumNamedMembers = 0;
10092  if (Record) {
10093    for (RecordDecl::decl_iterator i = Record->decls_begin(),
10094                                   e = Record->decls_end(); i != e; i++) {
10095      if (IndirectFieldDecl *IFD = dyn_cast<IndirectFieldDecl>(*i))
10096        if (IFD->getDeclName())
10097          ++NumNamedMembers;
10098    }
10099  }
10100
10101  // Verify that all the fields are okay.
10102  SmallVector<FieldDecl*, 32> RecFields;
10103
10104  bool ARCErrReported = false;
10105  for (llvm::ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end();
10106       i != end; ++i) {
10107    FieldDecl *FD = cast<FieldDecl>(*i);
10108
10109    // Get the type for the field.
10110    const Type *FDTy = FD->getType().getTypePtr();
10111
10112    if (!FD->isAnonymousStructOrUnion()) {
10113      // Remember all fields written by the user.
10114      RecFields.push_back(FD);
10115    }
10116
10117    // If the field is already invalid for some reason, don't emit more
10118    // diagnostics about it.
10119    if (FD->isInvalidDecl()) {
10120      EnclosingDecl->setInvalidDecl();
10121      continue;
10122    }
10123
10124    // C99 6.7.2.1p2:
10125    //   A structure or union shall not contain a member with
10126    //   incomplete or function type (hence, a structure shall not
10127    //   contain an instance of itself, but may contain a pointer to
10128    //   an instance of itself), except that the last member of a
10129    //   structure with more than one named member may have incomplete
10130    //   array type; such a structure (and any union containing,
10131    //   possibly recursively, a member that is such a structure)
10132    //   shall not be a member of a structure or an element of an
10133    //   array.
10134    if (FDTy->isFunctionType()) {
10135      // Field declared as a function.
10136      Diag(FD->getLocation(), diag::err_field_declared_as_function)
10137        << FD->getDeclName();
10138      FD->setInvalidDecl();
10139      EnclosingDecl->setInvalidDecl();
10140      continue;
10141    } else if (FDTy->isIncompleteArrayType() && Record &&
10142               ((i + 1 == Fields.end() && !Record->isUnion()) ||
10143                ((getLangOpts().MicrosoftExt ||
10144                  getLangOpts().CPlusPlus) &&
10145                 (i + 1 == Fields.end() || Record->isUnion())))) {
10146      // Flexible array member.
10147      // Microsoft and g++ is more permissive regarding flexible array.
10148      // It will accept flexible array in union and also
10149      // as the sole element of a struct/class.
10150      if (getLangOpts().MicrosoftExt) {
10151        if (Record->isUnion())
10152          Diag(FD->getLocation(), diag::ext_flexible_array_union_ms)
10153            << FD->getDeclName();
10154        else if (Fields.size() == 1)
10155          Diag(FD->getLocation(), diag::ext_flexible_array_empty_aggregate_ms)
10156            << FD->getDeclName() << Record->getTagKind();
10157      } else if (getLangOpts().CPlusPlus) {
10158        if (Record->isUnion())
10159          Diag(FD->getLocation(), diag::ext_flexible_array_union_gnu)
10160            << FD->getDeclName();
10161        else if (Fields.size() == 1)
10162          Diag(FD->getLocation(), diag::ext_flexible_array_empty_aggregate_gnu)
10163            << FD->getDeclName() << Record->getTagKind();
10164      } else if (!getLangOpts().C99) {
10165      if (Record->isUnion())
10166        Diag(FD->getLocation(), diag::ext_flexible_array_union_gnu)
10167          << FD->getDeclName();
10168      else
10169        Diag(FD->getLocation(), diag::ext_c99_flexible_array_member)
10170          << FD->getDeclName() << Record->getTagKind();
10171      } else if (NumNamedMembers < 1) {
10172        Diag(FD->getLocation(), diag::err_flexible_array_empty_struct)
10173          << FD->getDeclName();
10174        FD->setInvalidDecl();
10175        EnclosingDecl->setInvalidDecl();
10176        continue;
10177      }
10178      if (!FD->getType()->isDependentType() &&
10179          !Context.getBaseElementType(FD->getType()).isPODType(Context)) {
10180        Diag(FD->getLocation(), diag::err_flexible_array_has_nonpod_type)
10181          << FD->getDeclName() << FD->getType();
10182        FD->setInvalidDecl();
10183        EnclosingDecl->setInvalidDecl();
10184        continue;
10185      }
10186      // Okay, we have a legal flexible array member at the end of the struct.
10187      if (Record)
10188        Record->setHasFlexibleArrayMember(true);
10189    } else if (!FDTy->isDependentType() &&
10190               RequireCompleteType(FD->getLocation(), FD->getType(),
10191                                   diag::err_field_incomplete)) {
10192      // Incomplete type
10193      FD->setInvalidDecl();
10194      EnclosingDecl->setInvalidDecl();
10195      continue;
10196    } else if (const RecordType *FDTTy = FDTy->getAs<RecordType>()) {
10197      if (FDTTy->getDecl()->hasFlexibleArrayMember()) {
10198        // If this is a member of a union, then entire union becomes "flexible".
10199        if (Record && Record->isUnion()) {
10200          Record->setHasFlexibleArrayMember(true);
10201        } else {
10202          // If this is a struct/class and this is not the last element, reject
10203          // it.  Note that GCC supports variable sized arrays in the middle of
10204          // structures.
10205          if (i + 1 != Fields.end())
10206            Diag(FD->getLocation(), diag::ext_variable_sized_type_in_struct)
10207              << FD->getDeclName() << FD->getType();
10208          else {
10209            // We support flexible arrays at the end of structs in
10210            // other structs as an extension.
10211            Diag(FD->getLocation(), diag::ext_flexible_array_in_struct)
10212              << FD->getDeclName();
10213            if (Record)
10214              Record->setHasFlexibleArrayMember(true);
10215          }
10216        }
10217      }
10218      if (isa<ObjCContainerDecl>(EnclosingDecl) &&
10219          RequireNonAbstractType(FD->getLocation(), FD->getType(),
10220                                 diag::err_abstract_type_in_decl,
10221                                 AbstractIvarType)) {
10222        // Ivars can not have abstract class types
10223        FD->setInvalidDecl();
10224      }
10225      if (Record && FDTTy->getDecl()->hasObjectMember())
10226        Record->setHasObjectMember(true);
10227    } else if (FDTy->isObjCObjectType()) {
10228      /// A field cannot be an Objective-c object
10229      Diag(FD->getLocation(), diag::err_statically_allocated_object)
10230        << FixItHint::CreateInsertion(FD->getLocation(), "*");
10231      QualType T = Context.getObjCObjectPointerType(FD->getType());
10232      FD->setType(T);
10233    } else if (!getLangOpts().CPlusPlus) {
10234      if (getLangOpts().ObjCAutoRefCount && Record && !ARCErrReported) {
10235        // It's an error in ARC if a field has lifetime.
10236        // We don't want to report this in a system header, though,
10237        // so we just make the field unavailable.
10238        // FIXME: that's really not sufficient; we need to make the type
10239        // itself invalid to, say, initialize or copy.
10240        QualType T = FD->getType();
10241        Qualifiers::ObjCLifetime lifetime = T.getObjCLifetime();
10242        if (lifetime && lifetime != Qualifiers::OCL_ExplicitNone) {
10243          SourceLocation loc = FD->getLocation();
10244          if (getSourceManager().isInSystemHeader(loc)) {
10245            if (!FD->hasAttr<UnavailableAttr>()) {
10246              FD->addAttr(new (Context) UnavailableAttr(loc, Context,
10247                                "this system field has retaining ownership"));
10248            }
10249          } else {
10250            Diag(FD->getLocation(), diag::err_arc_objc_object_in_struct)
10251              << T->isBlockPointerType();
10252          }
10253          ARCErrReported = true;
10254        }
10255      }
10256      else if (getLangOpts().ObjC1 &&
10257               getLangOpts().getGC() != LangOptions::NonGC &&
10258               Record && !Record->hasObjectMember()) {
10259        if (FD->getType()->isObjCObjectPointerType() ||
10260            FD->getType().isObjCGCStrong())
10261          Record->setHasObjectMember(true);
10262        else if (Context.getAsArrayType(FD->getType())) {
10263          QualType BaseType = Context.getBaseElementType(FD->getType());
10264          if (BaseType->isRecordType() &&
10265              BaseType->getAs<RecordType>()->getDecl()->hasObjectMember())
10266            Record->setHasObjectMember(true);
10267          else if (BaseType->isObjCObjectPointerType() ||
10268                   BaseType.isObjCGCStrong())
10269                 Record->setHasObjectMember(true);
10270        }
10271      }
10272    }
10273    // Keep track of the number of named members.
10274    if (FD->getIdentifier())
10275      ++NumNamedMembers;
10276  }
10277
10278  // Okay, we successfully defined 'Record'.
10279  if (Record) {
10280    bool Completed = false;
10281    if (CXXRecordDecl *CXXRecord = dyn_cast<CXXRecordDecl>(Record)) {
10282      if (!CXXRecord->isInvalidDecl()) {
10283        // Set access bits correctly on the directly-declared conversions.
10284        for (CXXRecordDecl::conversion_iterator
10285               I = CXXRecord->conversion_begin(),
10286               E = CXXRecord->conversion_end(); I != E; ++I)
10287          I.setAccess((*I)->getAccess());
10288
10289        if (!CXXRecord->isDependentType()) {
10290          // Adjust user-defined destructor exception spec.
10291          if (getLangOpts().CPlusPlus11 &&
10292              CXXRecord->hasUserDeclaredDestructor())
10293            AdjustDestructorExceptionSpec(CXXRecord,CXXRecord->getDestructor());
10294
10295          // Add any implicitly-declared members to this class.
10296          AddImplicitlyDeclaredMembersToClass(CXXRecord);
10297
10298          // If we have virtual base classes, we may end up finding multiple
10299          // final overriders for a given virtual function. Check for this
10300          // problem now.
10301          if (CXXRecord->getNumVBases()) {
10302            CXXFinalOverriderMap FinalOverriders;
10303            CXXRecord->getFinalOverriders(FinalOverriders);
10304
10305            for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(),
10306                                             MEnd = FinalOverriders.end();
10307                 M != MEnd; ++M) {
10308              for (OverridingMethods::iterator SO = M->second.begin(),
10309                                            SOEnd = M->second.end();
10310                   SO != SOEnd; ++SO) {
10311                assert(SO->second.size() > 0 &&
10312                       "Virtual function without overridding functions?");
10313                if (SO->second.size() == 1)
10314                  continue;
10315
10316                // C++ [class.virtual]p2:
10317                //   In a derived class, if a virtual member function of a base
10318                //   class subobject has more than one final overrider the
10319                //   program is ill-formed.
10320                Diag(Record->getLocation(), diag::err_multiple_final_overriders)
10321                  << (const NamedDecl *)M->first << Record;
10322                Diag(M->first->getLocation(),
10323                     diag::note_overridden_virtual_function);
10324                for (OverridingMethods::overriding_iterator
10325                          OM = SO->second.begin(),
10326                       OMEnd = SO->second.end();
10327                     OM != OMEnd; ++OM)
10328                  Diag(OM->Method->getLocation(), diag::note_final_overrider)
10329                    << (const NamedDecl *)M->first << OM->Method->getParent();
10330
10331                Record->setInvalidDecl();
10332              }
10333            }
10334            CXXRecord->completeDefinition(&FinalOverriders);
10335            Completed = true;
10336          }
10337        }
10338      }
10339    }
10340
10341    if (!Completed)
10342      Record->completeDefinition();
10343
10344  } else {
10345    ObjCIvarDecl **ClsFields =
10346      reinterpret_cast<ObjCIvarDecl**>(RecFields.data());
10347    if (ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(EnclosingDecl)) {
10348      ID->setEndOfDefinitionLoc(RBrac);
10349      // Add ivar's to class's DeclContext.
10350      for (unsigned i = 0, e = RecFields.size(); i != e; ++i) {
10351        ClsFields[i]->setLexicalDeclContext(ID);
10352        ID->addDecl(ClsFields[i]);
10353      }
10354      // Must enforce the rule that ivars in the base classes may not be
10355      // duplicates.
10356      if (ID->getSuperClass())
10357        DiagnoseDuplicateIvars(ID, ID->getSuperClass());
10358    } else if (ObjCImplementationDecl *IMPDecl =
10359                  dyn_cast<ObjCImplementationDecl>(EnclosingDecl)) {
10360      assert(IMPDecl && "ActOnFields - missing ObjCImplementationDecl");
10361      for (unsigned I = 0, N = RecFields.size(); I != N; ++I)
10362        // Ivar declared in @implementation never belongs to the implementation.
10363        // Only it is in implementation's lexical context.
10364        ClsFields[I]->setLexicalDeclContext(IMPDecl);
10365      CheckImplementationIvars(IMPDecl, ClsFields, RecFields.size(), RBrac);
10366      IMPDecl->setIvarLBraceLoc(LBrac);
10367      IMPDecl->setIvarRBraceLoc(RBrac);
10368    } else if (ObjCCategoryDecl *CDecl =
10369                dyn_cast<ObjCCategoryDecl>(EnclosingDecl)) {
10370      // case of ivars in class extension; all other cases have been
10371      // reported as errors elsewhere.
10372      // FIXME. Class extension does not have a LocEnd field.
10373      // CDecl->setLocEnd(RBrac);
10374      // Add ivar's to class extension's DeclContext.
10375      // Diagnose redeclaration of private ivars.
10376      ObjCInterfaceDecl *IDecl = CDecl->getClassInterface();
10377      for (unsigned i = 0, e = RecFields.size(); i != e; ++i) {
10378        if (IDecl) {
10379          if (const ObjCIvarDecl *ClsIvar =
10380              IDecl->getIvarDecl(ClsFields[i]->getIdentifier())) {
10381            Diag(ClsFields[i]->getLocation(),
10382                 diag::err_duplicate_ivar_declaration);
10383            Diag(ClsIvar->getLocation(), diag::note_previous_definition);
10384            continue;
10385          }
10386          for (const ObjCCategoryDecl *ClsExtDecl =
10387                IDecl->getFirstClassExtension();
10388               ClsExtDecl; ClsExtDecl = ClsExtDecl->getNextClassExtension()) {
10389            if (const ObjCIvarDecl *ClsExtIvar =
10390                ClsExtDecl->getIvarDecl(ClsFields[i]->getIdentifier())) {
10391              Diag(ClsFields[i]->getLocation(),
10392                   diag::err_duplicate_ivar_declaration);
10393              Diag(ClsExtIvar->getLocation(), diag::note_previous_definition);
10394              continue;
10395            }
10396          }
10397        }
10398        ClsFields[i]->setLexicalDeclContext(CDecl);
10399        CDecl->addDecl(ClsFields[i]);
10400      }
10401      CDecl->setIvarLBraceLoc(LBrac);
10402      CDecl->setIvarRBraceLoc(RBrac);
10403    }
10404  }
10405
10406  if (Attr)
10407    ProcessDeclAttributeList(S, Record, Attr);
10408}
10409
10410/// \brief Determine whether the given integral value is representable within
10411/// the given type T.
10412static bool isRepresentableIntegerValue(ASTContext &Context,
10413                                        llvm::APSInt &Value,
10414                                        QualType T) {
10415  assert(T->isIntegralType(Context) && "Integral type required!");
10416  unsigned BitWidth = Context.getIntWidth(T);
10417
10418  if (Value.isUnsigned() || Value.isNonNegative()) {
10419    if (T->isSignedIntegerOrEnumerationType())
10420      --BitWidth;
10421    return Value.getActiveBits() <= BitWidth;
10422  }
10423  return Value.getMinSignedBits() <= BitWidth;
10424}
10425
10426// \brief Given an integral type, return the next larger integral type
10427// (or a NULL type of no such type exists).
10428static QualType getNextLargerIntegralType(ASTContext &Context, QualType T) {
10429  // FIXME: Int128/UInt128 support, which also needs to be introduced into
10430  // enum checking below.
10431  assert(T->isIntegralType(Context) && "Integral type required!");
10432  const unsigned NumTypes = 4;
10433  QualType SignedIntegralTypes[NumTypes] = {
10434    Context.ShortTy, Context.IntTy, Context.LongTy, Context.LongLongTy
10435  };
10436  QualType UnsignedIntegralTypes[NumTypes] = {
10437    Context.UnsignedShortTy, Context.UnsignedIntTy, Context.UnsignedLongTy,
10438    Context.UnsignedLongLongTy
10439  };
10440
10441  unsigned BitWidth = Context.getTypeSize(T);
10442  QualType *Types = T->isSignedIntegerOrEnumerationType()? SignedIntegralTypes
10443                                                        : UnsignedIntegralTypes;
10444  for (unsigned I = 0; I != NumTypes; ++I)
10445    if (Context.getTypeSize(Types[I]) > BitWidth)
10446      return Types[I];
10447
10448  return QualType();
10449}
10450
10451EnumConstantDecl *Sema::CheckEnumConstant(EnumDecl *Enum,
10452                                          EnumConstantDecl *LastEnumConst,
10453                                          SourceLocation IdLoc,
10454                                          IdentifierInfo *Id,
10455                                          Expr *Val) {
10456  unsigned IntWidth = Context.getTargetInfo().getIntWidth();
10457  llvm::APSInt EnumVal(IntWidth);
10458  QualType EltTy;
10459
10460  if (Val && DiagnoseUnexpandedParameterPack(Val, UPPC_EnumeratorValue))
10461    Val = 0;
10462
10463  if (Val)
10464    Val = DefaultLvalueConversion(Val).take();
10465
10466  if (Val) {
10467    if (Enum->isDependentType() || Val->isTypeDependent())
10468      EltTy = Context.DependentTy;
10469    else {
10470      SourceLocation ExpLoc;
10471      if (getLangOpts().CPlusPlus11 && Enum->isFixed() &&
10472          !getLangOpts().MicrosoftMode) {
10473        // C++11 [dcl.enum]p5: If the underlying type is fixed, [...] the
10474        // constant-expression in the enumerator-definition shall be a converted
10475        // constant expression of the underlying type.
10476        EltTy = Enum->getIntegerType();
10477        ExprResult Converted =
10478          CheckConvertedConstantExpression(Val, EltTy, EnumVal,
10479                                           CCEK_Enumerator);
10480        if (Converted.isInvalid())
10481          Val = 0;
10482        else
10483          Val = Converted.take();
10484      } else if (!Val->isValueDependent() &&
10485                 !(Val = VerifyIntegerConstantExpression(Val,
10486                                                         &EnumVal).take())) {
10487        // C99 6.7.2.2p2: Make sure we have an integer constant expression.
10488      } else {
10489        if (Enum->isFixed()) {
10490          EltTy = Enum->getIntegerType();
10491
10492          // In Obj-C and Microsoft mode, require the enumeration value to be
10493          // representable in the underlying type of the enumeration. In C++11,
10494          // we perform a non-narrowing conversion as part of converted constant
10495          // expression checking.
10496          if (!isRepresentableIntegerValue(Context, EnumVal, EltTy)) {
10497            if (getLangOpts().MicrosoftMode) {
10498              Diag(IdLoc, diag::ext_enumerator_too_large) << EltTy;
10499              Val = ImpCastExprToType(Val, EltTy, CK_IntegralCast).take();
10500            } else
10501              Diag(IdLoc, diag::err_enumerator_too_large) << EltTy;
10502          } else
10503            Val = ImpCastExprToType(Val, EltTy, CK_IntegralCast).take();
10504        } else if (getLangOpts().CPlusPlus) {
10505          // C++11 [dcl.enum]p5:
10506          //   If the underlying type is not fixed, the type of each enumerator
10507          //   is the type of its initializing value:
10508          //     - If an initializer is specified for an enumerator, the
10509          //       initializing value has the same type as the expression.
10510          EltTy = Val->getType();
10511        } else {
10512          // C99 6.7.2.2p2:
10513          //   The expression that defines the value of an enumeration constant
10514          //   shall be an integer constant expression that has a value
10515          //   representable as an int.
10516
10517          // Complain if the value is not representable in an int.
10518          if (!isRepresentableIntegerValue(Context, EnumVal, Context.IntTy))
10519            Diag(IdLoc, diag::ext_enum_value_not_int)
10520              << EnumVal.toString(10) << Val->getSourceRange()
10521              << (EnumVal.isUnsigned() || EnumVal.isNonNegative());
10522          else if (!Context.hasSameType(Val->getType(), Context.IntTy)) {
10523            // Force the type of the expression to 'int'.
10524            Val = ImpCastExprToType(Val, Context.IntTy, CK_IntegralCast).take();
10525          }
10526          EltTy = Val->getType();
10527        }
10528      }
10529    }
10530  }
10531
10532  if (!Val) {
10533    if (Enum->isDependentType())
10534      EltTy = Context.DependentTy;
10535    else if (!LastEnumConst) {
10536      // C++0x [dcl.enum]p5:
10537      //   If the underlying type is not fixed, the type of each enumerator
10538      //   is the type of its initializing value:
10539      //     - If no initializer is specified for the first enumerator, the
10540      //       initializing value has an unspecified integral type.
10541      //
10542      // GCC uses 'int' for its unspecified integral type, as does
10543      // C99 6.7.2.2p3.
10544      if (Enum->isFixed()) {
10545        EltTy = Enum->getIntegerType();
10546      }
10547      else {
10548        EltTy = Context.IntTy;
10549      }
10550    } else {
10551      // Assign the last value + 1.
10552      EnumVal = LastEnumConst->getInitVal();
10553      ++EnumVal;
10554      EltTy = LastEnumConst->getType();
10555
10556      // Check for overflow on increment.
10557      if (EnumVal < LastEnumConst->getInitVal()) {
10558        // C++0x [dcl.enum]p5:
10559        //   If the underlying type is not fixed, the type of each enumerator
10560        //   is the type of its initializing value:
10561        //
10562        //     - Otherwise the type of the initializing value is the same as
10563        //       the type of the initializing value of the preceding enumerator
10564        //       unless the incremented value is not representable in that type,
10565        //       in which case the type is an unspecified integral type
10566        //       sufficient to contain the incremented value. If no such type
10567        //       exists, the program is ill-formed.
10568        QualType T = getNextLargerIntegralType(Context, EltTy);
10569        if (T.isNull() || Enum->isFixed()) {
10570          // There is no integral type larger enough to represent this
10571          // value. Complain, then allow the value to wrap around.
10572          EnumVal = LastEnumConst->getInitVal();
10573          EnumVal = EnumVal.zext(EnumVal.getBitWidth() * 2);
10574          ++EnumVal;
10575          if (Enum->isFixed())
10576            // When the underlying type is fixed, this is ill-formed.
10577            Diag(IdLoc, diag::err_enumerator_wrapped)
10578              << EnumVal.toString(10)
10579              << EltTy;
10580          else
10581            Diag(IdLoc, diag::warn_enumerator_too_large)
10582              << EnumVal.toString(10);
10583        } else {
10584          EltTy = T;
10585        }
10586
10587        // Retrieve the last enumerator's value, extent that type to the
10588        // type that is supposed to be large enough to represent the incremented
10589        // value, then increment.
10590        EnumVal = LastEnumConst->getInitVal();
10591        EnumVal.setIsSigned(EltTy->isSignedIntegerOrEnumerationType());
10592        EnumVal = EnumVal.zextOrTrunc(Context.getIntWidth(EltTy));
10593        ++EnumVal;
10594
10595        // If we're not in C++, diagnose the overflow of enumerator values,
10596        // which in C99 means that the enumerator value is not representable in
10597        // an int (C99 6.7.2.2p2). However, we support GCC's extension that
10598        // permits enumerator values that are representable in some larger
10599        // integral type.
10600        if (!getLangOpts().CPlusPlus && !T.isNull())
10601          Diag(IdLoc, diag::warn_enum_value_overflow);
10602      } else if (!getLangOpts().CPlusPlus &&
10603                 !isRepresentableIntegerValue(Context, EnumVal, EltTy)) {
10604        // Enforce C99 6.7.2.2p2 even when we compute the next value.
10605        Diag(IdLoc, diag::ext_enum_value_not_int)
10606          << EnumVal.toString(10) << 1;
10607      }
10608    }
10609  }
10610
10611  if (!EltTy->isDependentType()) {
10612    // Make the enumerator value match the signedness and size of the
10613    // enumerator's type.
10614    EnumVal = EnumVal.extOrTrunc(Context.getIntWidth(EltTy));
10615    EnumVal.setIsSigned(EltTy->isSignedIntegerOrEnumerationType());
10616  }
10617
10618  return EnumConstantDecl::Create(Context, Enum, IdLoc, Id, EltTy,
10619                                  Val, EnumVal);
10620}
10621
10622
10623Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst,
10624                              SourceLocation IdLoc, IdentifierInfo *Id,
10625                              AttributeList *Attr,
10626                              SourceLocation EqualLoc, Expr *Val) {
10627  EnumDecl *TheEnumDecl = cast<EnumDecl>(theEnumDecl);
10628  EnumConstantDecl *LastEnumConst =
10629    cast_or_null<EnumConstantDecl>(lastEnumConst);
10630
10631  // The scope passed in may not be a decl scope.  Zip up the scope tree until
10632  // we find one that is.
10633  S = getNonFieldDeclScope(S);
10634
10635  // Verify that there isn't already something declared with this name in this
10636  // scope.
10637  NamedDecl *PrevDecl = LookupSingleName(S, Id, IdLoc, LookupOrdinaryName,
10638                                         ForRedeclaration);
10639  if (PrevDecl && PrevDecl->isTemplateParameter()) {
10640    // Maybe we will complain about the shadowed template parameter.
10641    DiagnoseTemplateParameterShadow(IdLoc, PrevDecl);
10642    // Just pretend that we didn't see the previous declaration.
10643    PrevDecl = 0;
10644  }
10645
10646  if (PrevDecl) {
10647    // When in C++, we may get a TagDecl with the same name; in this case the
10648    // enum constant will 'hide' the tag.
10649    assert((getLangOpts().CPlusPlus || !isa<TagDecl>(PrevDecl)) &&
10650           "Received TagDecl when not in C++!");
10651    if (!isa<TagDecl>(PrevDecl) && isDeclInScope(PrevDecl, CurContext, S)) {
10652      if (isa<EnumConstantDecl>(PrevDecl))
10653        Diag(IdLoc, diag::err_redefinition_of_enumerator) << Id;
10654      else
10655        Diag(IdLoc, diag::err_redefinition) << Id;
10656      Diag(PrevDecl->getLocation(), diag::note_previous_definition);
10657      return 0;
10658    }
10659  }
10660
10661  // C++ [class.mem]p15:
10662  // If T is the name of a class, then each of the following shall have a name
10663  // different from T:
10664  // - every enumerator of every member of class T that is an unscoped
10665  // enumerated type
10666  if (CXXRecordDecl *Record
10667                      = dyn_cast<CXXRecordDecl>(
10668                             TheEnumDecl->getDeclContext()->getRedeclContext()))
10669    if (!TheEnumDecl->isScoped() &&
10670        Record->getIdentifier() && Record->getIdentifier() == Id)
10671      Diag(IdLoc, diag::err_member_name_of_class) << Id;
10672
10673  EnumConstantDecl *New =
10674    CheckEnumConstant(TheEnumDecl, LastEnumConst, IdLoc, Id, Val);
10675
10676  if (New) {
10677    // Process attributes.
10678    if (Attr) ProcessDeclAttributeList(S, New, Attr);
10679
10680    // Register this decl in the current scope stack.
10681    New->setAccess(TheEnumDecl->getAccess());
10682    PushOnScopeChains(New, S);
10683  }
10684
10685  ActOnDocumentableDecl(New);
10686
10687  return New;
10688}
10689
10690// Returns true when the enum initial expression does not trigger the
10691// duplicate enum warning.  A few common cases are exempted as follows:
10692// Element2 = Element1
10693// Element2 = Element1 + 1
10694// Element2 = Element1 - 1
10695// Where Element2 and Element1 are from the same enum.
10696static bool ValidDuplicateEnum(EnumConstantDecl *ECD, EnumDecl *Enum) {
10697  Expr *InitExpr = ECD->getInitExpr();
10698  if (!InitExpr)
10699    return true;
10700  InitExpr = InitExpr->IgnoreImpCasts();
10701
10702  if (BinaryOperator *BO = dyn_cast<BinaryOperator>(InitExpr)) {
10703    if (!BO->isAdditiveOp())
10704      return true;
10705    IntegerLiteral *IL = dyn_cast<IntegerLiteral>(BO->getRHS());
10706    if (!IL)
10707      return true;
10708    if (IL->getValue() != 1)
10709      return true;
10710
10711    InitExpr = BO->getLHS();
10712  }
10713
10714  // This checks if the elements are from the same enum.
10715  DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(InitExpr);
10716  if (!DRE)
10717    return true;
10718
10719  EnumConstantDecl *EnumConstant = dyn_cast<EnumConstantDecl>(DRE->getDecl());
10720  if (!EnumConstant)
10721    return true;
10722
10723  if (cast<EnumDecl>(TagDecl::castFromDeclContext(ECD->getDeclContext())) !=
10724      Enum)
10725    return true;
10726
10727  return false;
10728}
10729
10730struct DupKey {
10731  int64_t val;
10732  bool isTombstoneOrEmptyKey;
10733  DupKey(int64_t val, bool isTombstoneOrEmptyKey)
10734    : val(val), isTombstoneOrEmptyKey(isTombstoneOrEmptyKey) {}
10735};
10736
10737static DupKey GetDupKey(const llvm::APSInt& Val) {
10738  return DupKey(Val.isSigned() ? Val.getSExtValue() : Val.getZExtValue(),
10739                false);
10740}
10741
10742struct DenseMapInfoDupKey {
10743  static DupKey getEmptyKey() { return DupKey(0, true); }
10744  static DupKey getTombstoneKey() { return DupKey(1, true); }
10745  static unsigned getHashValue(const DupKey Key) {
10746    return (unsigned)(Key.val * 37);
10747  }
10748  static bool isEqual(const DupKey& LHS, const DupKey& RHS) {
10749    return LHS.isTombstoneOrEmptyKey == RHS.isTombstoneOrEmptyKey &&
10750           LHS.val == RHS.val;
10751  }
10752};
10753
10754// Emits a warning when an element is implicitly set a value that
10755// a previous element has already been set to.
10756static void CheckForDuplicateEnumValues(Sema &S, Decl **Elements,
10757                                        unsigned NumElements, EnumDecl *Enum,
10758                                        QualType EnumType) {
10759  if (S.Diags.getDiagnosticLevel(diag::warn_duplicate_enum_values,
10760                                 Enum->getLocation()) ==
10761      DiagnosticsEngine::Ignored)
10762    return;
10763  // Avoid anonymous enums
10764  if (!Enum->getIdentifier())
10765    return;
10766
10767  // Only check for small enums.
10768  if (Enum->getNumPositiveBits() > 63 || Enum->getNumNegativeBits() > 64)
10769    return;
10770
10771  typedef llvm::SmallVector<EnumConstantDecl*, 3> ECDVector;
10772  typedef llvm::SmallVector<ECDVector*, 3> DuplicatesVector;
10773
10774  typedef llvm::PointerUnion<EnumConstantDecl*, ECDVector*> DeclOrVector;
10775  typedef llvm::DenseMap<DupKey, DeclOrVector, DenseMapInfoDupKey>
10776          ValueToVectorMap;
10777
10778  DuplicatesVector DupVector;
10779  ValueToVectorMap EnumMap;
10780
10781  // Populate the EnumMap with all values represented by enum constants without
10782  // an initialier.
10783  for (unsigned i = 0; i < NumElements; ++i) {
10784    EnumConstantDecl *ECD = cast<EnumConstantDecl>(Elements[i]);
10785
10786    // Null EnumConstantDecl means a previous diagnostic has been emitted for
10787    // this constant.  Skip this enum since it may be ill-formed.
10788    if (!ECD) {
10789      return;
10790    }
10791
10792    if (ECD->getInitExpr())
10793      continue;
10794
10795    DupKey Key = GetDupKey(ECD->getInitVal());
10796    DeclOrVector &Entry = EnumMap[Key];
10797
10798    // First time encountering this value.
10799    if (Entry.isNull())
10800      Entry = ECD;
10801  }
10802
10803  // Create vectors for any values that has duplicates.
10804  for (unsigned i = 0; i < NumElements; ++i) {
10805    EnumConstantDecl *ECD = cast<EnumConstantDecl>(Elements[i]);
10806    if (!ValidDuplicateEnum(ECD, Enum))
10807      continue;
10808
10809    DupKey Key = GetDupKey(ECD->getInitVal());
10810
10811    DeclOrVector& Entry = EnumMap[Key];
10812    if (Entry.isNull())
10813      continue;
10814
10815    if (EnumConstantDecl *D = Entry.dyn_cast<EnumConstantDecl*>()) {
10816      // Ensure constants are different.
10817      if (D == ECD)
10818        continue;
10819
10820      // Create new vector and push values onto it.
10821      ECDVector *Vec = new ECDVector();
10822      Vec->push_back(D);
10823      Vec->push_back(ECD);
10824
10825      // Update entry to point to the duplicates vector.
10826      Entry = Vec;
10827
10828      // Store the vector somewhere we can consult later for quick emission of
10829      // diagnostics.
10830      DupVector.push_back(Vec);
10831      continue;
10832    }
10833
10834    ECDVector *Vec = Entry.get<ECDVector*>();
10835    // Make sure constants are not added more than once.
10836    if (*Vec->begin() == ECD)
10837      continue;
10838
10839    Vec->push_back(ECD);
10840  }
10841
10842  // Emit diagnostics.
10843  for (DuplicatesVector::iterator DupVectorIter = DupVector.begin(),
10844                                  DupVectorEnd = DupVector.end();
10845       DupVectorIter != DupVectorEnd; ++DupVectorIter) {
10846    ECDVector *Vec = *DupVectorIter;
10847    assert(Vec->size() > 1 && "ECDVector should have at least 2 elements.");
10848
10849    // Emit warning for one enum constant.
10850    ECDVector::iterator I = Vec->begin();
10851    S.Diag((*I)->getLocation(), diag::warn_duplicate_enum_values)
10852      << (*I)->getName() << (*I)->getInitVal().toString(10)
10853      << (*I)->getSourceRange();
10854    ++I;
10855
10856    // Emit one note for each of the remaining enum constants with
10857    // the same value.
10858    for (ECDVector::iterator E = Vec->end(); I != E; ++I)
10859      S.Diag((*I)->getLocation(), diag::note_duplicate_element)
10860        << (*I)->getName() << (*I)->getInitVal().toString(10)
10861        << (*I)->getSourceRange();
10862    delete Vec;
10863  }
10864}
10865
10866void Sema::ActOnEnumBody(SourceLocation EnumLoc, SourceLocation LBraceLoc,
10867                         SourceLocation RBraceLoc, Decl *EnumDeclX,
10868                         Decl **Elements, unsigned NumElements,
10869                         Scope *S, AttributeList *Attr) {
10870  EnumDecl *Enum = cast<EnumDecl>(EnumDeclX);
10871  QualType EnumType = Context.getTypeDeclType(Enum);
10872
10873  if (Attr)
10874    ProcessDeclAttributeList(S, Enum, Attr);
10875
10876  if (Enum->isDependentType()) {
10877    for (unsigned i = 0; i != NumElements; ++i) {
10878      EnumConstantDecl *ECD =
10879        cast_or_null<EnumConstantDecl>(Elements[i]);
10880      if (!ECD) continue;
10881
10882      ECD->setType(EnumType);
10883    }
10884
10885    Enum->completeDefinition(Context.DependentTy, Context.DependentTy, 0, 0);
10886    return;
10887  }
10888
10889  // TODO: If the result value doesn't fit in an int, it must be a long or long
10890  // long value.  ISO C does not support this, but GCC does as an extension,
10891  // emit a warning.
10892  unsigned IntWidth = Context.getTargetInfo().getIntWidth();
10893  unsigned CharWidth = Context.getTargetInfo().getCharWidth();
10894  unsigned ShortWidth = Context.getTargetInfo().getShortWidth();
10895
10896  // Verify that all the values are okay, compute the size of the values, and
10897  // reverse the list.
10898  unsigned NumNegativeBits = 0;
10899  unsigned NumPositiveBits = 0;
10900
10901  // Keep track of whether all elements have type int.
10902  bool AllElementsInt = true;
10903
10904  for (unsigned i = 0; i != NumElements; ++i) {
10905    EnumConstantDecl *ECD =
10906      cast_or_null<EnumConstantDecl>(Elements[i]);
10907    if (!ECD) continue;  // Already issued a diagnostic.
10908
10909    const llvm::APSInt &InitVal = ECD->getInitVal();
10910
10911    // Keep track of the size of positive and negative values.
10912    if (InitVal.isUnsigned() || InitVal.isNonNegative())
10913      NumPositiveBits = std::max(NumPositiveBits,
10914                                 (unsigned)InitVal.getActiveBits());
10915    else
10916      NumNegativeBits = std::max(NumNegativeBits,
10917                                 (unsigned)InitVal.getMinSignedBits());
10918
10919    // Keep track of whether every enum element has type int (very commmon).
10920    if (AllElementsInt)
10921      AllElementsInt = ECD->getType() == Context.IntTy;
10922  }
10923
10924  // Figure out the type that should be used for this enum.
10925  QualType BestType;
10926  unsigned BestWidth;
10927
10928  // C++0x N3000 [conv.prom]p3:
10929  //   An rvalue of an unscoped enumeration type whose underlying
10930  //   type is not fixed can be converted to an rvalue of the first
10931  //   of the following types that can represent all the values of
10932  //   the enumeration: int, unsigned int, long int, unsigned long
10933  //   int, long long int, or unsigned long long int.
10934  // C99 6.4.4.3p2:
10935  //   An identifier declared as an enumeration constant has type int.
10936  // The C99 rule is modified by a gcc extension
10937  QualType BestPromotionType;
10938
10939  bool Packed = Enum->getAttr<PackedAttr>() ? true : false;
10940  // -fshort-enums is the equivalent to specifying the packed attribute on all
10941  // enum definitions.
10942  if (LangOpts.ShortEnums)
10943    Packed = true;
10944
10945  if (Enum->isFixed()) {
10946    BestType = Enum->getIntegerType();
10947    if (BestType->isPromotableIntegerType())
10948      BestPromotionType = Context.getPromotedIntegerType(BestType);
10949    else
10950      BestPromotionType = BestType;
10951    // We don't need to set BestWidth, because BestType is going to be the type
10952    // of the enumerators, but we do anyway because otherwise some compilers
10953    // warn that it might be used uninitialized.
10954    BestWidth = CharWidth;
10955  }
10956  else if (NumNegativeBits) {
10957    // If there is a negative value, figure out the smallest integer type (of
10958    // int/long/longlong) that fits.
10959    // If it's packed, check also if it fits a char or a short.
10960    if (Packed && NumNegativeBits <= CharWidth && NumPositiveBits < CharWidth) {
10961      BestType = Context.SignedCharTy;
10962      BestWidth = CharWidth;
10963    } else if (Packed && NumNegativeBits <= ShortWidth &&
10964               NumPositiveBits < ShortWidth) {
10965      BestType = Context.ShortTy;
10966      BestWidth = ShortWidth;
10967    } else if (NumNegativeBits <= IntWidth && NumPositiveBits < IntWidth) {
10968      BestType = Context.IntTy;
10969      BestWidth = IntWidth;
10970    } else {
10971      BestWidth = Context.getTargetInfo().getLongWidth();
10972
10973      if (NumNegativeBits <= BestWidth && NumPositiveBits < BestWidth) {
10974        BestType = Context.LongTy;
10975      } else {
10976        BestWidth = Context.getTargetInfo().getLongLongWidth();
10977
10978        if (NumNegativeBits > BestWidth || NumPositiveBits >= BestWidth)
10979          Diag(Enum->getLocation(), diag::warn_enum_too_large);
10980        BestType = Context.LongLongTy;
10981      }
10982    }
10983    BestPromotionType = (BestWidth <= IntWidth ? Context.IntTy : BestType);
10984  } else {
10985    // If there is no negative value, figure out the smallest type that fits
10986    // all of the enumerator values.
10987    // If it's packed, check also if it fits a char or a short.
10988    if (Packed && NumPositiveBits <= CharWidth) {
10989      BestType = Context.UnsignedCharTy;
10990      BestPromotionType = Context.IntTy;
10991      BestWidth = CharWidth;
10992    } else if (Packed && NumPositiveBits <= ShortWidth) {
10993      BestType = Context.UnsignedShortTy;
10994      BestPromotionType = Context.IntTy;
10995      BestWidth = ShortWidth;
10996    } else if (NumPositiveBits <= IntWidth) {
10997      BestType = Context.UnsignedIntTy;
10998      BestWidth = IntWidth;
10999      BestPromotionType
11000        = (NumPositiveBits == BestWidth || !getLangOpts().CPlusPlus)
11001                           ? Context.UnsignedIntTy : Context.IntTy;
11002    } else if (NumPositiveBits <=
11003               (BestWidth = Context.getTargetInfo().getLongWidth())) {
11004      BestType = Context.UnsignedLongTy;
11005      BestPromotionType
11006        = (NumPositiveBits == BestWidth || !getLangOpts().CPlusPlus)
11007                           ? Context.UnsignedLongTy : Context.LongTy;
11008    } else {
11009      BestWidth = Context.getTargetInfo().getLongLongWidth();
11010      assert(NumPositiveBits <= BestWidth &&
11011             "How could an initializer get larger than ULL?");
11012      BestType = Context.UnsignedLongLongTy;
11013      BestPromotionType
11014        = (NumPositiveBits == BestWidth || !getLangOpts().CPlusPlus)
11015                           ? Context.UnsignedLongLongTy : Context.LongLongTy;
11016    }
11017  }
11018
11019  // Loop over all of the enumerator constants, changing their types to match
11020  // the type of the enum if needed.
11021  for (unsigned i = 0; i != NumElements; ++i) {
11022    EnumConstantDecl *ECD = cast_or_null<EnumConstantDecl>(Elements[i]);
11023    if (!ECD) continue;  // Already issued a diagnostic.
11024
11025    // Standard C says the enumerators have int type, but we allow, as an
11026    // extension, the enumerators to be larger than int size.  If each
11027    // enumerator value fits in an int, type it as an int, otherwise type it the
11028    // same as the enumerator decl itself.  This means that in "enum { X = 1U }"
11029    // that X has type 'int', not 'unsigned'.
11030
11031    // Determine whether the value fits into an int.
11032    llvm::APSInt InitVal = ECD->getInitVal();
11033
11034    // If it fits into an integer type, force it.  Otherwise force it to match
11035    // the enum decl type.
11036    QualType NewTy;
11037    unsigned NewWidth;
11038    bool NewSign;
11039    if (!getLangOpts().CPlusPlus &&
11040        !Enum->isFixed() &&
11041        isRepresentableIntegerValue(Context, InitVal, Context.IntTy)) {
11042      NewTy = Context.IntTy;
11043      NewWidth = IntWidth;
11044      NewSign = true;
11045    } else if (ECD->getType() == BestType) {
11046      // Already the right type!
11047      if (getLangOpts().CPlusPlus)
11048        // C++ [dcl.enum]p4: Following the closing brace of an
11049        // enum-specifier, each enumerator has the type of its
11050        // enumeration.
11051        ECD->setType(EnumType);
11052      continue;
11053    } else {
11054      NewTy = BestType;
11055      NewWidth = BestWidth;
11056      NewSign = BestType->isSignedIntegerOrEnumerationType();
11057    }
11058
11059    // Adjust the APSInt value.
11060    InitVal = InitVal.extOrTrunc(NewWidth);
11061    InitVal.setIsSigned(NewSign);
11062    ECD->setInitVal(InitVal);
11063
11064    // Adjust the Expr initializer and type.
11065    if (ECD->getInitExpr() &&
11066        !Context.hasSameType(NewTy, ECD->getInitExpr()->getType()))
11067      ECD->setInitExpr(ImplicitCastExpr::Create(Context, NewTy,
11068                                                CK_IntegralCast,
11069                                                ECD->getInitExpr(),
11070                                                /*base paths*/ 0,
11071                                                VK_RValue));
11072    if (getLangOpts().CPlusPlus)
11073      // C++ [dcl.enum]p4: Following the closing brace of an
11074      // enum-specifier, each enumerator has the type of its
11075      // enumeration.
11076      ECD->setType(EnumType);
11077    else
11078      ECD->setType(NewTy);
11079  }
11080
11081  Enum->completeDefinition(BestType, BestPromotionType,
11082                           NumPositiveBits, NumNegativeBits);
11083
11084  // If we're declaring a function, ensure this decl isn't forgotten about -
11085  // it needs to go into the function scope.
11086  if (InFunctionDeclarator)
11087    DeclsInPrototypeScope.push_back(Enum);
11088
11089  CheckForDuplicateEnumValues(*this, Elements, NumElements, Enum, EnumType);
11090}
11091
11092Decl *Sema::ActOnFileScopeAsmDecl(Expr *expr,
11093                                  SourceLocation StartLoc,
11094                                  SourceLocation EndLoc) {
11095  StringLiteral *AsmString = cast<StringLiteral>(expr);
11096
11097  FileScopeAsmDecl *New = FileScopeAsmDecl::Create(Context, CurContext,
11098                                                   AsmString, StartLoc,
11099                                                   EndLoc);
11100  CurContext->addDecl(New);
11101  return New;
11102}
11103
11104DeclResult Sema::ActOnModuleImport(SourceLocation AtLoc,
11105                                   SourceLocation ImportLoc,
11106                                   ModuleIdPath Path) {
11107  Module *Mod = PP.getModuleLoader().loadModule(ImportLoc, Path,
11108                                                Module::AllVisible,
11109                                                /*IsIncludeDirective=*/false);
11110  if (!Mod)
11111    return true;
11112
11113  llvm::SmallVector<SourceLocation, 2> IdentifierLocs;
11114  Module *ModCheck = Mod;
11115  for (unsigned I = 0, N = Path.size(); I != N; ++I) {
11116    // If we've run out of module parents, just drop the remaining identifiers.
11117    // We need the length to be consistent.
11118    if (!ModCheck)
11119      break;
11120    ModCheck = ModCheck->Parent;
11121
11122    IdentifierLocs.push_back(Path[I].second);
11123  }
11124
11125  ImportDecl *Import = ImportDecl::Create(Context,
11126                                          Context.getTranslationUnitDecl(),
11127                                          AtLoc.isValid()? AtLoc : ImportLoc,
11128                                          Mod, IdentifierLocs);
11129  Context.getTranslationUnitDecl()->addDecl(Import);
11130  return Import;
11131}
11132
11133void Sema::ActOnPragmaRedefineExtname(IdentifierInfo* Name,
11134                                      IdentifierInfo* AliasName,
11135                                      SourceLocation PragmaLoc,
11136                                      SourceLocation NameLoc,
11137                                      SourceLocation AliasNameLoc) {
11138  Decl *PrevDecl = LookupSingleName(TUScope, Name, NameLoc,
11139                                    LookupOrdinaryName);
11140  AsmLabelAttr *Attr =
11141     ::new (Context) AsmLabelAttr(AliasNameLoc, Context, AliasName->getName());
11142
11143  if (PrevDecl)
11144    PrevDecl->addAttr(Attr);
11145  else
11146    (void)ExtnameUndeclaredIdentifiers.insert(
11147      std::pair<IdentifierInfo*,AsmLabelAttr*>(Name, Attr));
11148}
11149
11150void Sema::ActOnPragmaWeakID(IdentifierInfo* Name,
11151                             SourceLocation PragmaLoc,
11152                             SourceLocation NameLoc) {
11153  Decl *PrevDecl = LookupSingleName(TUScope, Name, NameLoc, LookupOrdinaryName);
11154
11155  if (PrevDecl) {
11156    PrevDecl->addAttr(::new (Context) WeakAttr(PragmaLoc, Context));
11157  } else {
11158    (void)WeakUndeclaredIdentifiers.insert(
11159      std::pair<IdentifierInfo*,WeakInfo>
11160        (Name, WeakInfo((IdentifierInfo*)0, NameLoc)));
11161  }
11162}
11163
11164void Sema::ActOnPragmaWeakAlias(IdentifierInfo* Name,
11165                                IdentifierInfo* AliasName,
11166                                SourceLocation PragmaLoc,
11167                                SourceLocation NameLoc,
11168                                SourceLocation AliasNameLoc) {
11169  Decl *PrevDecl = LookupSingleName(TUScope, AliasName, AliasNameLoc,
11170                                    LookupOrdinaryName);
11171  WeakInfo W = WeakInfo(Name, NameLoc);
11172
11173  if (PrevDecl) {
11174    if (!PrevDecl->hasAttr<AliasAttr>())
11175      if (NamedDecl *ND = dyn_cast<NamedDecl>(PrevDecl))
11176        DeclApplyPragmaWeak(TUScope, ND, W);
11177  } else {
11178    (void)WeakUndeclaredIdentifiers.insert(
11179      std::pair<IdentifierInfo*,WeakInfo>(AliasName, W));
11180  }
11181}
11182
11183Decl *Sema::getObjCDeclContext() const {
11184  return (dyn_cast_or_null<ObjCContainerDecl>(CurContext));
11185}
11186
11187AvailabilityResult Sema::getCurContextAvailability() const {
11188  const Decl *D = cast<Decl>(getCurObjCLexicalContext());
11189  return D->getAvailability();
11190}
11191