1 //===--- SemaDecl.cpp - Semantic Analysis for Declarations ----------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file implements semantic analysis for declarations. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "clang/Sema/SemaInternal.h" 15 #include "clang/Sema/Initialization.h" 16 #include "clang/Sema/Lookup.h" 17 #include "clang/Sema/CXXFieldCollector.h" 18 #include "clang/Sema/Scope.h" 19 #include "clang/Sema/ScopeInfo.h" 20 #include "TypeLocBuilder.h" 21 #include "clang/AST/ASTConsumer.h" 22 #include "clang/AST/ASTContext.h" 23 #include "clang/AST/CXXInheritance.h" 24 #include "clang/AST/CommentDiagnostic.h" 25 #include "clang/AST/DeclCXX.h" 26 #include "clang/AST/DeclObjC.h" 27 #include "clang/AST/DeclTemplate.h" 28 #include "clang/AST/EvaluatedExprVisitor.h" 29 #include "clang/AST/ExprCXX.h" 30 #include "clang/AST/StmtCXX.h" 31 #include "clang/AST/CharUnits.h" 32 #include "clang/Sema/DeclSpec.h" 33 #include "clang/Sema/ParsedTemplate.h" 34 #include "clang/Parse/ParseDiagnostic.h" 35 #include "clang/Basic/PartialDiagnostic.h" 36 #include "clang/Sema/DelayedDiagnostic.h" 37 #include "clang/Basic/SourceManager.h" 38 #include "clang/Basic/TargetInfo.h" 39 // FIXME: layering (ideally, Sema shouldn't be dependent on Lex API's) 40 #include "clang/Lex/Preprocessor.h" 41 #include "clang/Lex/HeaderSearch.h" 42 #include "clang/Lex/ModuleLoader.h" 43 #include "llvm/ADT/SmallString.h" 44 #include "llvm/ADT/Triple.h" 45 #include <algorithm> 46 #include <cstring> 47 #include <functional> 48 using namespace clang; 49 using namespace sema; 50 51 Sema::DeclGroupPtrTy Sema::ConvertDeclToDeclGroup(Decl *Ptr, Decl *OwnedType) { 52 if (OwnedType) { 53 Decl *Group[2] = { OwnedType, Ptr }; 54 return DeclGroupPtrTy::make(DeclGroupRef::Create(Context, Group, 2)); 55 } 56 57 return DeclGroupPtrTy::make(DeclGroupRef(Ptr)); 58 } 59 60 namespace { 61 62 class TypeNameValidatorCCC : public CorrectionCandidateCallback { 63 public: 64 TypeNameValidatorCCC(bool AllowInvalid, bool WantClass=false) 65 : AllowInvalidDecl(AllowInvalid), WantClassName(WantClass) { 66 WantExpressionKeywords = false; 67 WantCXXNamedCasts = false; 68 WantRemainingKeywords = false; 69 } 70 71 virtual bool ValidateCandidate(const TypoCorrection &candidate) { 72 if (NamedDecl *ND = candidate.getCorrectionDecl()) 73 return (isa<TypeDecl>(ND) || isa<ObjCInterfaceDecl>(ND)) && 74 (AllowInvalidDecl || !ND->isInvalidDecl()); 75 else 76 return !WantClassName && candidate.isKeyword(); 77 } 78 79 private: 80 bool AllowInvalidDecl; 81 bool WantClassName; 82 }; 83 84 } 85 86 /// \brief Determine whether the token kind starts a simple-type-specifier. 87 bool Sema::isSimpleTypeSpecifier(tok::TokenKind Kind) const { 88 switch (Kind) { 89 // FIXME: Take into account the current language when deciding whether a 90 // token kind is a valid type specifier 91 case tok::kw_short: 92 case tok::kw_long: 93 case tok::kw___int64: 94 case tok::kw___int128: 95 case tok::kw_signed: 96 case tok::kw_unsigned: 97 case tok::kw_void: 98 case tok::kw_char: 99 case tok::kw_int: 100 case tok::kw_half: 101 case tok::kw_float: 102 case tok::kw_double: 103 case tok::kw_wchar_t: 104 case tok::kw_bool: 105 case tok::kw___underlying_type: 106 return true; 107 108 case tok::annot_typename: 109 case tok::kw_char16_t: 110 case tok::kw_char32_t: 111 case tok::kw_typeof: 112 case tok::kw_decltype: 113 return getLangOpts().CPlusPlus; 114 115 default: 116 break; 117 } 118 119 return false; 120 } 121 122 /// \brief If the identifier refers to a type name within this scope, 123 /// return the declaration of that type. 124 /// 125 /// This routine performs ordinary name lookup of the identifier II 126 /// within the given scope, with optional C++ scope specifier SS, to 127 /// determine whether the name refers to a type. If so, returns an 128 /// opaque pointer (actually a QualType) corresponding to that 129 /// type. Otherwise, returns NULL. 130 /// 131 /// If name lookup results in an ambiguity, this routine will complain 132 /// and then return NULL. 133 ParsedType Sema::getTypeName(IdentifierInfo &II, SourceLocation NameLoc, 134 Scope *S, CXXScopeSpec *SS, 135 bool isClassName, bool HasTrailingDot, 136 ParsedType ObjectTypePtr, 137 bool IsCtorOrDtorName, 138 bool WantNontrivialTypeSourceInfo, 139 IdentifierInfo **CorrectedII) { 140 // Determine where we will perform name lookup. 141 DeclContext *LookupCtx = 0; 142 if (ObjectTypePtr) { 143 QualType ObjectType = ObjectTypePtr.get(); 144 if (ObjectType->isRecordType()) 145 LookupCtx = computeDeclContext(ObjectType); 146 } else if (SS && SS->isNotEmpty()) { 147 LookupCtx = computeDeclContext(*SS, false); 148 149 if (!LookupCtx) { 150 if (isDependentScopeSpecifier(*SS)) { 151 // C++ [temp.res]p3: 152 // A qualified-id that refers to a type and in which the 153 // nested-name-specifier depends on a template-parameter (14.6.2) 154 // shall be prefixed by the keyword typename to indicate that the 155 // qualified-id denotes a type, forming an 156 // elaborated-type-specifier (7.1.5.3). 157 // 158 // We therefore do not perform any name lookup if the result would 159 // refer to a member of an unknown specialization. 160 if (!isClassName && !IsCtorOrDtorName) 161 return ParsedType(); 162 163 // We know from the grammar that this name refers to a type, 164 // so build a dependent node to describe the type. 165 if (WantNontrivialTypeSourceInfo) 166 return ActOnTypenameType(S, SourceLocation(), *SS, II, NameLoc).get(); 167 168 NestedNameSpecifierLoc QualifierLoc = SS->getWithLocInContext(Context); 169 QualType T = 170 CheckTypenameType(ETK_None, SourceLocation(), QualifierLoc, 171 II, NameLoc); 172 173 return ParsedType::make(T); 174 } 175 176 return ParsedType(); 177 } 178 179 if (!LookupCtx->isDependentContext() && 180 RequireCompleteDeclContext(*SS, LookupCtx)) 181 return ParsedType(); 182 } 183 184 // FIXME: LookupNestedNameSpecifierName isn't the right kind of 185 // lookup for class-names. 186 LookupNameKind Kind = isClassName ? LookupNestedNameSpecifierName : 187 LookupOrdinaryName; 188 LookupResult Result(*this, &II, NameLoc, Kind); 189 if (LookupCtx) { 190 // Perform "qualified" name lookup into the declaration context we 191 // computed, which is either the type of the base of a member access 192 // expression or the declaration context associated with a prior 193 // nested-name-specifier. 194 LookupQualifiedName(Result, LookupCtx); 195 196 if (ObjectTypePtr && Result.empty()) { 197 // C++ [basic.lookup.classref]p3: 198 // If the unqualified-id is ~type-name, the type-name is looked up 199 // in the context of the entire postfix-expression. If the type T of 200 // the object expression is of a class type C, the type-name is also 201 // looked up in the scope of class C. At least one of the lookups shall 202 // find a name that refers to (possibly cv-qualified) T. 203 LookupName(Result, S); 204 } 205 } else { 206 // Perform unqualified name lookup. 207 LookupName(Result, S); 208 } 209 210 NamedDecl *IIDecl = 0; 211 switch (Result.getResultKind()) { 212 case LookupResult::NotFound: 213 case LookupResult::NotFoundInCurrentInstantiation: 214 if (CorrectedII) { 215 TypeNameValidatorCCC Validator(true, isClassName); 216 TypoCorrection Correction = CorrectTypo(Result.getLookupNameInfo(), 217 Kind, S, SS, Validator); 218 IdentifierInfo *NewII = Correction.getCorrectionAsIdentifierInfo(); 219 TemplateTy Template; 220 bool MemberOfUnknownSpecialization; 221 UnqualifiedId TemplateName; 222 TemplateName.setIdentifier(NewII, NameLoc); 223 NestedNameSpecifier *NNS = Correction.getCorrectionSpecifier(); 224 CXXScopeSpec NewSS, *NewSSPtr = SS; 225 if (SS && NNS) { 226 NewSS.MakeTrivial(Context, NNS, SourceRange(NameLoc)); 227 NewSSPtr = &NewSS; 228 } 229 if (Correction && (NNS || NewII != &II) && 230 // Ignore a correction to a template type as the to-be-corrected 231 // identifier is not a template (typo correction for template names 232 // is handled elsewhere). 233 !(getLangOpts().CPlusPlus && NewSSPtr && 234 isTemplateName(S, *NewSSPtr, false, TemplateName, ParsedType(), 235 false, Template, MemberOfUnknownSpecialization))) { 236 ParsedType Ty = getTypeName(*NewII, NameLoc, S, NewSSPtr, 237 isClassName, HasTrailingDot, ObjectTypePtr, 238 IsCtorOrDtorName, 239 WantNontrivialTypeSourceInfo); 240 if (Ty) { 241 std::string CorrectedStr(Correction.getAsString(getLangOpts())); 242 std::string CorrectedQuotedStr( 243 Correction.getQuoted(getLangOpts())); 244 Diag(NameLoc, diag::err_unknown_type_or_class_name_suggest) 245 << Result.getLookupName() << CorrectedQuotedStr << isClassName 246 << FixItHint::CreateReplacement(SourceRange(NameLoc), 247 CorrectedStr); 248 if (NamedDecl *FirstDecl = Correction.getCorrectionDecl()) 249 Diag(FirstDecl->getLocation(), diag::note_previous_decl) 250 << CorrectedQuotedStr; 251 252 if (SS && NNS) 253 SS->MakeTrivial(Context, NNS, SourceRange(NameLoc)); 254 *CorrectedII = NewII; 255 return Ty; 256 } 257 } 258 } 259 // If typo correction failed or was not performed, fall through 260 case LookupResult::FoundOverloaded: 261 case LookupResult::FoundUnresolvedValue: 262 Result.suppressDiagnostics(); 263 return ParsedType(); 264 265 case LookupResult::Ambiguous: 266 // Recover from type-hiding ambiguities by hiding the type. We'll 267 // do the lookup again when looking for an object, and we can 268 // diagnose the error then. If we don't do this, then the error 269 // about hiding the type will be immediately followed by an error 270 // that only makes sense if the identifier was treated like a type. 271 if (Result.getAmbiguityKind() == LookupResult::AmbiguousTagHiding) { 272 Result.suppressDiagnostics(); 273 return ParsedType(); 274 } 275 276 // Look to see if we have a type anywhere in the list of results. 277 for (LookupResult::iterator Res = Result.begin(), ResEnd = Result.end(); 278 Res != ResEnd; ++Res) { 279 if (isa<TypeDecl>(*Res) || isa<ObjCInterfaceDecl>(*Res)) { 280 if (!IIDecl || 281 (*Res)->getLocation().getRawEncoding() < 282 IIDecl->getLocation().getRawEncoding()) 283 IIDecl = *Res; 284 } 285 } 286 287 if (!IIDecl) { 288 // None of the entities we found is a type, so there is no way 289 // to even assume that the result is a type. In this case, don't 290 // complain about the ambiguity. The parser will either try to 291 // perform this lookup again (e.g., as an object name), which 292 // will produce the ambiguity, or will complain that it expected 293 // a type name. 294 Result.suppressDiagnostics(); 295 return ParsedType(); 296 } 297 298 // We found a type within the ambiguous lookup; diagnose the 299 // ambiguity and then return that type. This might be the right 300 // answer, or it might not be, but it suppresses any attempt to 301 // perform the name lookup again. 302 break; 303 304 case LookupResult::Found: 305 IIDecl = Result.getFoundDecl(); 306 break; 307 } 308 309 assert(IIDecl && "Didn't find decl"); 310 311 QualType T; 312 if (TypeDecl *TD = dyn_cast<TypeDecl>(IIDecl)) { 313 DiagnoseUseOfDecl(IIDecl, NameLoc); 314 315 if (T.isNull()) 316 T = Context.getTypeDeclType(TD); 317 318 // NOTE: avoid constructing an ElaboratedType(Loc) if this is a 319 // constructor or destructor name (in such a case, the scope specifier 320 // will be attached to the enclosing Expr or Decl node). 321 if (SS && SS->isNotEmpty() && !IsCtorOrDtorName) { 322 if (WantNontrivialTypeSourceInfo) { 323 // Construct a type with type-source information. 324 TypeLocBuilder Builder; 325 Builder.pushTypeSpec(T).setNameLoc(NameLoc); 326 327 T = getElaboratedType(ETK_None, *SS, T); 328 ElaboratedTypeLoc ElabTL = Builder.push<ElaboratedTypeLoc>(T); 329 ElabTL.setElaboratedKeywordLoc(SourceLocation()); 330 ElabTL.setQualifierLoc(SS->getWithLocInContext(Context)); 331 return CreateParsedType(T, Builder.getTypeSourceInfo(Context, T)); 332 } else { 333 T = getElaboratedType(ETK_None, *SS, T); 334 } 335 } 336 } else if (ObjCInterfaceDecl *IDecl = dyn_cast<ObjCInterfaceDecl>(IIDecl)) { 337 (void)DiagnoseUseOfDecl(IDecl, NameLoc); 338 if (!HasTrailingDot) 339 T = Context.getObjCInterfaceType(IDecl); 340 } 341 342 if (T.isNull()) { 343 // If it's not plausibly a type, suppress diagnostics. 344 Result.suppressDiagnostics(); 345 return ParsedType(); 346 } 347 return ParsedType::make(T); 348 } 349 350 /// isTagName() - This method is called *for error recovery purposes only* 351 /// to determine if the specified name is a valid tag name ("struct foo"). If 352 /// so, this returns the TST for the tag corresponding to it (TST_enum, 353 /// TST_union, TST_struct, TST_interface, TST_class). This is used to diagnose 354 /// cases in C where the user forgot to specify the tag. 355 DeclSpec::TST Sema::isTagName(IdentifierInfo &II, Scope *S) { 356 // Do a tag name lookup in this scope. 357 LookupResult R(*this, &II, SourceLocation(), LookupTagName); 358 LookupName(R, S, false); 359 R.suppressDiagnostics(); 360 if (R.getResultKind() == LookupResult::Found) 361 if (const TagDecl *TD = R.getAsSingle<TagDecl>()) { 362 switch (TD->getTagKind()) { 363 case TTK_Struct: return DeclSpec::TST_struct; 364 case TTK_Interface: return DeclSpec::TST_interface; 365 case TTK_Union: return DeclSpec::TST_union; 366 case TTK_Class: return DeclSpec::TST_class; 367 case TTK_Enum: return DeclSpec::TST_enum; 368 } 369 } 370 371 return DeclSpec::TST_unspecified; 372 } 373 374 /// isMicrosoftMissingTypename - In Microsoft mode, within class scope, 375 /// if a CXXScopeSpec's type is equal to the type of one of the base classes 376 /// then downgrade the missing typename error to a warning. 377 /// This is needed for MSVC compatibility; Example: 378 /// @code 379 /// template<class T> class A { 380 /// public: 381 /// typedef int TYPE; 382 /// }; 383 /// template<class T> class B : public A<T> { 384 /// public: 385 /// A<T>::TYPE a; // no typename required because A<T> is a base class. 386 /// }; 387 /// @endcode 388 bool Sema::isMicrosoftMissingTypename(const CXXScopeSpec *SS, Scope *S) { 389 if (CurContext->isRecord()) { 390 const Type *Ty = SS->getScopeRep()->getAsType(); 391 392 CXXRecordDecl *RD = cast<CXXRecordDecl>(CurContext); 393 for (CXXRecordDecl::base_class_const_iterator Base = RD->bases_begin(), 394 BaseEnd = RD->bases_end(); Base != BaseEnd; ++Base) 395 if (Context.hasSameUnqualifiedType(QualType(Ty, 1), Base->getType())) 396 return true; 397 return S->isFunctionPrototypeScope(); 398 } 399 return CurContext->isFunctionOrMethod() || S->isFunctionPrototypeScope(); 400 } 401 402 bool Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, 403 SourceLocation IILoc, 404 Scope *S, 405 CXXScopeSpec *SS, 406 ParsedType &SuggestedType) { 407 // We don't have anything to suggest (yet). 408 SuggestedType = ParsedType(); 409 410 // There may have been a typo in the name of the type. Look up typo 411 // results, in case we have something that we can suggest. 412 TypeNameValidatorCCC Validator(false); 413 if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(II, IILoc), 414 LookupOrdinaryName, S, SS, 415 Validator)) { 416 std::string CorrectedStr(Corrected.getAsString(getLangOpts())); 417 std::string CorrectedQuotedStr(Corrected.getQuoted(getLangOpts())); 418 419 if (Corrected.isKeyword()) { 420 // We corrected to a keyword. 421 IdentifierInfo *NewII = Corrected.getCorrectionAsIdentifierInfo(); 422 if (!isSimpleTypeSpecifier(NewII->getTokenID())) 423 CorrectedQuotedStr = "the keyword " + CorrectedQuotedStr; 424 Diag(IILoc, diag::err_unknown_typename_suggest) 425 << II << CorrectedQuotedStr 426 << FixItHint::CreateReplacement(SourceRange(IILoc), CorrectedStr); 427 II = NewII; 428 } else { 429 NamedDecl *Result = Corrected.getCorrectionDecl(); 430 // We found a similarly-named type or interface; suggest that. 431 if (!SS || !SS->isSet()) 432 Diag(IILoc, diag::err_unknown_typename_suggest) 433 << II << CorrectedQuotedStr 434 << FixItHint::CreateReplacement(SourceRange(IILoc), CorrectedStr); 435 else if (DeclContext *DC = computeDeclContext(*SS, false)) 436 Diag(IILoc, diag::err_unknown_nested_typename_suggest) 437 << II << DC << CorrectedQuotedStr << SS->getRange() 438 << FixItHint::CreateReplacement(Corrected.getCorrectionRange(), 439 CorrectedStr); 440 else 441 llvm_unreachable("could not have corrected a typo here"); 442 443 Diag(Result->getLocation(), diag::note_previous_decl) 444 << CorrectedQuotedStr; 445 446 SuggestedType = getTypeName(*Result->getIdentifier(), IILoc, S, SS, 447 false, false, ParsedType(), 448 /*IsCtorOrDtorName=*/false, 449 /*NonTrivialTypeSourceInfo=*/true); 450 } 451 return true; 452 } 453 454 if (getLangOpts().CPlusPlus) { 455 // See if II is a class template that the user forgot to pass arguments to. 456 UnqualifiedId Name; 457 Name.setIdentifier(II, IILoc); 458 CXXScopeSpec EmptySS; 459 TemplateTy TemplateResult; 460 bool MemberOfUnknownSpecialization; 461 if (isTemplateName(S, SS ? *SS : EmptySS, /*hasTemplateKeyword=*/false, 462 Name, ParsedType(), true, TemplateResult, 463 MemberOfUnknownSpecialization) == TNK_Type_template) { 464 TemplateName TplName = TemplateResult.getAsVal<TemplateName>(); 465 Diag(IILoc, diag::err_template_missing_args) << TplName; 466 if (TemplateDecl *TplDecl = TplName.getAsTemplateDecl()) { 467 Diag(TplDecl->getLocation(), diag::note_template_decl_here) 468 << TplDecl->getTemplateParameters()->getSourceRange(); 469 } 470 return true; 471 } 472 } 473 474 // FIXME: Should we move the logic that tries to recover from a missing tag 475 // (struct, union, enum) from Parser::ParseImplicitInt here, instead? 476 477 if (!SS || (!SS->isSet() && !SS->isInvalid())) 478 Diag(IILoc, diag::err_unknown_typename) << II; 479 else if (DeclContext *DC = computeDeclContext(*SS, false)) 480 Diag(IILoc, diag::err_typename_nested_not_found) 481 << II << DC << SS->getRange(); 482 else if (isDependentScopeSpecifier(*SS)) { 483 unsigned DiagID = diag::err_typename_missing; 484 if (getLangOpts().MicrosoftMode && isMicrosoftMissingTypename(SS, S)) 485 DiagID = diag::warn_typename_missing; 486 487 Diag(SS->getRange().getBegin(), DiagID) 488 << (NestedNameSpecifier *)SS->getScopeRep() << II->getName() 489 << SourceRange(SS->getRange().getBegin(), IILoc) 490 << FixItHint::CreateInsertion(SS->getRange().getBegin(), "typename "); 491 SuggestedType = ActOnTypenameType(S, SourceLocation(), 492 *SS, *II, IILoc).get(); 493 } else { 494 assert(SS && SS->isInvalid() && 495 "Invalid scope specifier has already been diagnosed"); 496 } 497 498 return true; 499 } 500 501 /// \brief Determine whether the given result set contains either a type name 502 /// or 503 static bool isResultTypeOrTemplate(LookupResult &R, const Token &NextToken) { 504 bool CheckTemplate = R.getSema().getLangOpts().CPlusPlus && 505 NextToken.is(tok::less); 506 507 for (LookupResult::iterator I = R.begin(), IEnd = R.end(); I != IEnd; ++I) { 508 if (isa<TypeDecl>(*I) || isa<ObjCInterfaceDecl>(*I)) 509 return true; 510 511 if (CheckTemplate && isa<TemplateDecl>(*I)) 512 return true; 513 } 514 515 return false; 516 } 517 518 static bool isTagTypeWithMissingTag(Sema &SemaRef, LookupResult &Result, 519 Scope *S, CXXScopeSpec &SS, 520 IdentifierInfo *&Name, 521 SourceLocation NameLoc) { 522 LookupResult R(SemaRef, Name, NameLoc, Sema::LookupTagName); 523 SemaRef.LookupParsedName(R, S, &SS); 524 if (TagDecl *Tag = R.getAsSingle<TagDecl>()) { 525 const char *TagName = 0; 526 const char *FixItTagName = 0; 527 switch (Tag->getTagKind()) { 528 case TTK_Class: 529 TagName = "class"; 530 FixItTagName = "class "; 531 break; 532 533 case TTK_Enum: 534 TagName = "enum"; 535 FixItTagName = "enum "; 536 break; 537 538 case TTK_Struct: 539 TagName = "struct"; 540 FixItTagName = "struct "; 541 break; 542 543 case TTK_Interface: 544 TagName = "__interface"; 545 FixItTagName = "__interface "; 546 break; 547 548 case TTK_Union: 549 TagName = "union"; 550 FixItTagName = "union "; 551 break; 552 } 553 554 SemaRef.Diag(NameLoc, diag::err_use_of_tag_name_without_tag) 555 << Name << TagName << SemaRef.getLangOpts().CPlusPlus 556 << FixItHint::CreateInsertion(NameLoc, FixItTagName); 557 558 for (LookupResult::iterator I = Result.begin(), IEnd = Result.end(); 559 I != IEnd; ++I) 560 SemaRef.Diag((*I)->getLocation(), diag::note_decl_hiding_tag_type) 561 << Name << TagName; 562 563 // Replace lookup results with just the tag decl. 564 Result.clear(Sema::LookupTagName); 565 SemaRef.LookupParsedName(Result, S, &SS); 566 return true; 567 } 568 569 return false; 570 } 571 572 /// Build a ParsedType for a simple-type-specifier with a nested-name-specifier. 573 static ParsedType buildNestedType(Sema &S, CXXScopeSpec &SS, 574 QualType T, SourceLocation NameLoc) { 575 ASTContext &Context = S.Context; 576 577 TypeLocBuilder Builder; 578 Builder.pushTypeSpec(T).setNameLoc(NameLoc); 579 580 T = S.getElaboratedType(ETK_None, SS, T); 581 ElaboratedTypeLoc ElabTL = Builder.push<ElaboratedTypeLoc>(T); 582 ElabTL.setElaboratedKeywordLoc(SourceLocation()); 583 ElabTL.setQualifierLoc(SS.getWithLocInContext(Context)); 584 return S.CreateParsedType(T, Builder.getTypeSourceInfo(Context, T)); 585 } 586 587 Sema::NameClassification Sema::ClassifyName(Scope *S, 588 CXXScopeSpec &SS, 589 IdentifierInfo *&Name, 590 SourceLocation NameLoc, 591 const Token &NextToken, 592 bool IsAddressOfOperand, 593 CorrectionCandidateCallback *CCC) { 594 DeclarationNameInfo NameInfo(Name, NameLoc); 595 ObjCMethodDecl *CurMethod = getCurMethodDecl(); 596 597 if (NextToken.is(tok::coloncolon)) { 598 BuildCXXNestedNameSpecifier(S, *Name, NameLoc, NextToken.getLocation(), 599 QualType(), false, SS, 0, false); 600 601 } 602 603 LookupResult Result(*this, Name, NameLoc, LookupOrdinaryName); 604 LookupParsedName(Result, S, &SS, !CurMethod); 605 606 // Perform lookup for Objective-C instance variables (including automatically 607 // synthesized instance variables), if we're in an Objective-C method. 608 // FIXME: This lookup really, really needs to be folded in to the normal 609 // unqualified lookup mechanism. 610 if (!SS.isSet() && CurMethod && !isResultTypeOrTemplate(Result, NextToken)) { 611 ExprResult E = LookupInObjCMethod(Result, S, Name, true); 612 if (E.get() || E.isInvalid()) 613 return E; 614 } 615 616 bool SecondTry = false; 617 bool IsFilteredTemplateName = false; 618 619 Corrected: 620 switch (Result.getResultKind()) { 621 case LookupResult::NotFound: 622 // If an unqualified-id is followed by a '(', then we have a function 623 // call. 624 if (!SS.isSet() && NextToken.is(tok::l_paren)) { 625 // In C++, this is an ADL-only call. 626 // FIXME: Reference? 627 if (getLangOpts().CPlusPlus) 628 return BuildDeclarationNameExpr(SS, Result, /*ADL=*/true); 629 630 // C90 6.3.2.2: 631 // If the expression that precedes the parenthesized argument list in a 632 // function call consists solely of an identifier, and if no 633 // declaration is visible for this identifier, the identifier is 634 // implicitly declared exactly as if, in the innermost block containing 635 // the function call, the declaration 636 // 637 // extern int identifier (); 638 // 639 // appeared. 640 // 641 // We also allow this in C99 as an extension. 642 if (NamedDecl *D = ImplicitlyDefineFunction(NameLoc, *Name, S)) { 643 Result.addDecl(D); 644 Result.resolveKind(); 645 return BuildDeclarationNameExpr(SS, Result, /*ADL=*/false); 646 } 647 } 648 649 // In C, we first see whether there is a tag type by the same name, in 650 // which case it's likely that the user just forget to write "enum", 651 // "struct", or "union". 652 if (!getLangOpts().CPlusPlus && !SecondTry && 653 isTagTypeWithMissingTag(*this, Result, S, SS, Name, NameLoc)) { 654 break; 655 } 656 657 // Perform typo correction to determine if there is another name that is 658 // close to this name. 659 if (!SecondTry && CCC) { 660 SecondTry = true; 661 if (TypoCorrection Corrected = CorrectTypo(Result.getLookupNameInfo(), 662 Result.getLookupKind(), S, 663 &SS, *CCC)) { 664 unsigned UnqualifiedDiag = diag::err_undeclared_var_use_suggest; 665 unsigned QualifiedDiag = diag::err_no_member_suggest; 666 std::string CorrectedStr(Corrected.getAsString(getLangOpts())); 667 std::string CorrectedQuotedStr(Corrected.getQuoted(getLangOpts())); 668 669 NamedDecl *FirstDecl = Corrected.getCorrectionDecl(); 670 NamedDecl *UnderlyingFirstDecl 671 = FirstDecl? FirstDecl->getUnderlyingDecl() : 0; 672 if (getLangOpts().CPlusPlus && NextToken.is(tok::less) && 673 UnderlyingFirstDecl && isa<TemplateDecl>(UnderlyingFirstDecl)) { 674 UnqualifiedDiag = diag::err_no_template_suggest; 675 QualifiedDiag = diag::err_no_member_template_suggest; 676 } else if (UnderlyingFirstDecl && 677 (isa<TypeDecl>(UnderlyingFirstDecl) || 678 isa<ObjCInterfaceDecl>(UnderlyingFirstDecl) || 679 isa<ObjCCompatibleAliasDecl>(UnderlyingFirstDecl))) { 680 UnqualifiedDiag = diag::err_unknown_typename_suggest; 681 QualifiedDiag = diag::err_unknown_nested_typename_suggest; 682 } 683 684 if (SS.isEmpty()) 685 Diag(NameLoc, UnqualifiedDiag) 686 << Name << CorrectedQuotedStr 687 << FixItHint::CreateReplacement(NameLoc, CorrectedStr); 688 else // FIXME: is this even reachable? Test it. 689 Diag(NameLoc, QualifiedDiag) 690 << Name << computeDeclContext(SS, false) << CorrectedQuotedStr 691 << SS.getRange() 692 << FixItHint::CreateReplacement(Corrected.getCorrectionRange(), 693 CorrectedStr); 694 695 // Update the name, so that the caller has the new name. 696 Name = Corrected.getCorrectionAsIdentifierInfo(); 697 698 // Typo correction corrected to a keyword. 699 if (Corrected.isKeyword()) 700 return Corrected.getCorrectionAsIdentifierInfo(); 701 702 // Also update the LookupResult... 703 // FIXME: This should probably go away at some point 704 Result.clear(); 705 Result.setLookupName(Corrected.getCorrection()); 706 if (FirstDecl) { 707 Result.addDecl(FirstDecl); 708 Diag(FirstDecl->getLocation(), diag::note_previous_decl) 709 << CorrectedQuotedStr; 710 } 711 712 // If we found an Objective-C instance variable, let 713 // LookupInObjCMethod build the appropriate expression to 714 // reference the ivar. 715 // FIXME: This is a gross hack. 716 if (ObjCIvarDecl *Ivar = Result.getAsSingle<ObjCIvarDecl>()) { 717 Result.clear(); 718 ExprResult E(LookupInObjCMethod(Result, S, Ivar->getIdentifier())); 719 return E; 720 } 721 722 goto Corrected; 723 } 724 } 725 726 // We failed to correct; just fall through and let the parser deal with it. 727 Result.suppressDiagnostics(); 728 return NameClassification::Unknown(); 729 730 case LookupResult::NotFoundInCurrentInstantiation: { 731 // We performed name lookup into the current instantiation, and there were 732 // dependent bases, so we treat this result the same way as any other 733 // dependent nested-name-specifier. 734 735 // C++ [temp.res]p2: 736 // A name used in a template declaration or definition and that is 737 // dependent on a template-parameter is assumed not to name a type 738 // unless the applicable name lookup finds a type name or the name is 739 // qualified by the keyword typename. 740 // 741 // FIXME: If the next token is '<', we might want to ask the parser to 742 // perform some heroics to see if we actually have a 743 // template-argument-list, which would indicate a missing 'template' 744 // keyword here. 745 return ActOnDependentIdExpression(SS, /*TemplateKWLoc=*/SourceLocation(), 746 NameInfo, IsAddressOfOperand, 747 /*TemplateArgs=*/0); 748 } 749 750 case LookupResult::Found: 751 case LookupResult::FoundOverloaded: 752 case LookupResult::FoundUnresolvedValue: 753 break; 754 755 case LookupResult::Ambiguous: 756 if (getLangOpts().CPlusPlus && NextToken.is(tok::less) && 757 hasAnyAcceptableTemplateNames(Result)) { 758 // C++ [temp.local]p3: 759 // A lookup that finds an injected-class-name (10.2) can result in an 760 // ambiguity in certain cases (for example, if it is found in more than 761 // one base class). If all of the injected-class-names that are found 762 // refer to specializations of the same class template, and if the name 763 // is followed by a template-argument-list, the reference refers to the 764 // class template itself and not a specialization thereof, and is not 765 // ambiguous. 766 // 767 // This filtering can make an ambiguous result into an unambiguous one, 768 // so try again after filtering out template names. 769 FilterAcceptableTemplateNames(Result); 770 if (!Result.isAmbiguous()) { 771 IsFilteredTemplateName = true; 772 break; 773 } 774 } 775 776 // Diagnose the ambiguity and return an error. 777 return NameClassification::Error(); 778 } 779 780 if (getLangOpts().CPlusPlus && NextToken.is(tok::less) && 781 (IsFilteredTemplateName || hasAnyAcceptableTemplateNames(Result))) { 782 // C++ [temp.names]p3: 783 // After name lookup (3.4) finds that a name is a template-name or that 784 // an operator-function-id or a literal- operator-id refers to a set of 785 // overloaded functions any member of which is a function template if 786 // this is followed by a <, the < is always taken as the delimiter of a 787 // template-argument-list and never as the less-than operator. 788 if (!IsFilteredTemplateName) 789 FilterAcceptableTemplateNames(Result); 790 791 if (!Result.empty()) { 792 bool IsFunctionTemplate; 793 TemplateName Template; 794 if (Result.end() - Result.begin() > 1) { 795 IsFunctionTemplate = true; 796 Template = Context.getOverloadedTemplateName(Result.begin(), 797 Result.end()); 798 } else { 799 TemplateDecl *TD 800 = cast<TemplateDecl>((*Result.begin())->getUnderlyingDecl()); 801 IsFunctionTemplate = isa<FunctionTemplateDecl>(TD); 802 803 if (SS.isSet() && !SS.isInvalid()) 804 Template = Context.getQualifiedTemplateName(SS.getScopeRep(), 805 /*TemplateKeyword=*/false, 806 TD); 807 else 808 Template = TemplateName(TD); 809 } 810 811 if (IsFunctionTemplate) { 812 // Function templates always go through overload resolution, at which 813 // point we'll perform the various checks (e.g., accessibility) we need 814 // to based on which function we selected. 815 Result.suppressDiagnostics(); 816 817 return NameClassification::FunctionTemplate(Template); 818 } 819 820 return NameClassification::TypeTemplate(Template); 821 } 822 } 823 824 NamedDecl *FirstDecl = (*Result.begin())->getUnderlyingDecl(); 825 if (TypeDecl *Type = dyn_cast<TypeDecl>(FirstDecl)) { 826 DiagnoseUseOfDecl(Type, NameLoc); 827 QualType T = Context.getTypeDeclType(Type); 828 if (SS.isNotEmpty()) 829 return buildNestedType(*this, SS, T, NameLoc); 830 return ParsedType::make(T); 831 } 832 833 ObjCInterfaceDecl *Class = dyn_cast<ObjCInterfaceDecl>(FirstDecl); 834 if (!Class) { 835 // FIXME: It's unfortunate that we don't have a Type node for handling this. 836 if (ObjCCompatibleAliasDecl *Alias 837 = dyn_cast<ObjCCompatibleAliasDecl>(FirstDecl)) 838 Class = Alias->getClassInterface(); 839 } 840 841 if (Class) { 842 DiagnoseUseOfDecl(Class, NameLoc); 843 844 if (NextToken.is(tok::period)) { 845 // Interface. <something> is parsed as a property reference expression. 846 // Just return "unknown" as a fall-through for now. 847 Result.suppressDiagnostics(); 848 return NameClassification::Unknown(); 849 } 850 851 QualType T = Context.getObjCInterfaceType(Class); 852 return ParsedType::make(T); 853 } 854 855 // We can have a type template here if we're classifying a template argument. 856 if (isa<TemplateDecl>(FirstDecl) && !isa<FunctionTemplateDecl>(FirstDecl)) 857 return NameClassification::TypeTemplate( 858 TemplateName(cast<TemplateDecl>(FirstDecl))); 859 860 // Check for a tag type hidden by a non-type decl in a few cases where it 861 // seems likely a type is wanted instead of the non-type that was found. 862 if (!getLangOpts().ObjC1) { 863 bool NextIsOp = NextToken.is(tok::amp) || NextToken.is(tok::star); 864 if ((NextToken.is(tok::identifier) || 865 (NextIsOp && FirstDecl->isFunctionOrFunctionTemplate())) && 866 isTagTypeWithMissingTag(*this, Result, S, SS, Name, NameLoc)) { 867 TypeDecl *Type = Result.getAsSingle<TypeDecl>(); 868 DiagnoseUseOfDecl(Type, NameLoc); 869 QualType T = Context.getTypeDeclType(Type); 870 if (SS.isNotEmpty()) 871 return buildNestedType(*this, SS, T, NameLoc); 872 return ParsedType::make(T); 873 } 874 } 875 876 if (FirstDecl->isCXXClassMember()) 877 return BuildPossibleImplicitMemberExpr(SS, SourceLocation(), Result, 0); 878 879 bool ADL = UseArgumentDependentLookup(SS, Result, NextToken.is(tok::l_paren)); 880 return BuildDeclarationNameExpr(SS, Result, ADL); 881 } 882 883 // Determines the context to return to after temporarily entering a 884 // context. This depends in an unnecessarily complicated way on the 885 // exact ordering of callbacks from the parser. 886 DeclContext *Sema::getContainingDC(DeclContext *DC) { 887 888 // Functions defined inline within classes aren't parsed until we've 889 // finished parsing the top-level class, so the top-level class is 890 // the context we'll need to return to. 891 if (isa<FunctionDecl>(DC)) { 892 DC = DC->getLexicalParent(); 893 894 // A function not defined within a class will always return to its 895 // lexical context. 896 if (!isa<CXXRecordDecl>(DC)) 897 return DC; 898 899 // A C++ inline method/friend is parsed *after* the topmost class 900 // it was declared in is fully parsed ("complete"); the topmost 901 // class is the context we need to return to. 902 while (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC->getLexicalParent())) 903 DC = RD; 904 905 // Return the declaration context of the topmost class the inline method is 906 // declared in. 907 return DC; 908 } 909 910 return DC->getLexicalParent(); 911 } 912 913 void Sema::PushDeclContext(Scope *S, DeclContext *DC) { 914 assert(getContainingDC(DC) == CurContext && 915 "The next DeclContext should be lexically contained in the current one."); 916 CurContext = DC; 917 S->setEntity(DC); 918 } 919 920 void Sema::PopDeclContext() { 921 assert(CurContext && "DeclContext imbalance!"); 922 923 CurContext = getContainingDC(CurContext); 924 assert(CurContext && "Popped translation unit!"); 925 } 926 927 /// EnterDeclaratorContext - Used when we must lookup names in the context 928 /// of a declarator's nested name specifier. 929 /// 930 void Sema::EnterDeclaratorContext(Scope *S, DeclContext *DC) { 931 // C++0x [basic.lookup.unqual]p13: 932 // A name used in the definition of a static data member of class 933 // X (after the qualified-id of the static member) is looked up as 934 // if the name was used in a member function of X. 935 // C++0x [basic.lookup.unqual]p14: 936 // If a variable member of a namespace is defined outside of the 937 // scope of its namespace then any name used in the definition of 938 // the variable member (after the declarator-id) is looked up as 939 // if the definition of the variable member occurred in its 940 // namespace. 941 // Both of these imply that we should push a scope whose context 942 // is the semantic context of the declaration. We can't use 943 // PushDeclContext here because that context is not necessarily 944 // lexically contained in the current context. Fortunately, 945 // the containing scope should have the appropriate information. 946 947 assert(!S->getEntity() && "scope already has entity"); 948 949 #ifndef NDEBUG 950 Scope *Ancestor = S->getParent(); 951 while (!Ancestor->getEntity()) Ancestor = Ancestor->getParent(); 952 assert(Ancestor->getEntity() == CurContext && "ancestor context mismatch"); 953 #endif 954 955 CurContext = DC; 956 S->setEntity(DC); 957 } 958 959 void Sema::ExitDeclaratorContext(Scope *S) { 960 assert(S->getEntity() == CurContext && "Context imbalance!"); 961 962 // Switch back to the lexical context. The safety of this is 963 // enforced by an assert in EnterDeclaratorContext. 964 Scope *Ancestor = S->getParent(); 965 while (!Ancestor->getEntity()) Ancestor = Ancestor->getParent(); 966 CurContext = (DeclContext*) Ancestor->getEntity(); 967 968 // We don't need to do anything with the scope, which is going to 969 // disappear. 970 } 971 972 973 void Sema::ActOnReenterFunctionContext(Scope* S, Decl *D) { 974 FunctionDecl *FD = dyn_cast<FunctionDecl>(D); 975 if (FunctionTemplateDecl *TFD = dyn_cast_or_null<FunctionTemplateDecl>(D)) { 976 // We assume that the caller has already called 977 // ActOnReenterTemplateScope 978 FD = TFD->getTemplatedDecl(); 979 } 980 if (!FD) 981 return; 982 983 // Same implementation as PushDeclContext, but enters the context 984 // from the lexical parent, rather than the top-level class. 985 assert(CurContext == FD->getLexicalParent() && 986 "The next DeclContext should be lexically contained in the current one."); 987 CurContext = FD; 988 S->setEntity(CurContext); 989 990 for (unsigned P = 0, NumParams = FD->getNumParams(); P < NumParams; ++P) { 991 ParmVarDecl *Param = FD->getParamDecl(P); 992 // If the parameter has an identifier, then add it to the scope 993 if (Param->getIdentifier()) { 994 S->AddDecl(Param); 995 IdResolver.AddDecl(Param); 996 } 997 } 998 } 999 1000 1001 void Sema::ActOnExitFunctionContext() { 1002 // Same implementation as PopDeclContext, but returns to the lexical parent, 1003 // rather than the top-level class. 1004 assert(CurContext && "DeclContext imbalance!"); 1005 CurContext = CurContext->getLexicalParent(); 1006 assert(CurContext && "Popped translation unit!"); 1007 } 1008 1009 1010 /// \brief Determine whether we allow overloading of the function 1011 /// PrevDecl with another declaration. 1012 /// 1013 /// This routine determines whether overloading is possible, not 1014 /// whether some new function is actually an overload. It will return 1015 /// true in C++ (where we can always provide overloads) or, as an 1016 /// extension, in C when the previous function is already an 1017 /// overloaded function declaration or has the "overloadable" 1018 /// attribute. 1019 static bool AllowOverloadingOfFunction(LookupResult &Previous, 1020 ASTContext &Context) { 1021 if (Context.getLangOpts().CPlusPlus) 1022 return true; 1023 1024 if (Previous.getResultKind() == LookupResult::FoundOverloaded) 1025 return true; 1026 1027 return (Previous.getResultKind() == LookupResult::Found 1028 && Previous.getFoundDecl()->hasAttr<OverloadableAttr>()); 1029 } 1030 1031 /// Add this decl to the scope shadowed decl chains. 1032 void Sema::PushOnScopeChains(NamedDecl *D, Scope *S, bool AddToContext) { 1033 // Move up the scope chain until we find the nearest enclosing 1034 // non-transparent context. The declaration will be introduced into this 1035 // scope. 1036 while (S->getEntity() && 1037 ((DeclContext *)S->getEntity())->isTransparentContext()) 1038 S = S->getParent(); 1039 1040 // Add scoped declarations into their context, so that they can be 1041 // found later. Declarations without a context won't be inserted 1042 // into any context. 1043 if (AddToContext) 1044 CurContext->addDecl(D); 1045 1046 // Out-of-line definitions shouldn't be pushed into scope in C++. 1047 // Out-of-line variable and function definitions shouldn't even in C. 1048 if ((getLangOpts().CPlusPlus || isa<VarDecl>(D) || isa<FunctionDecl>(D)) && 1049 D->isOutOfLine() && 1050 !D->getDeclContext()->getRedeclContext()->Equals( 1051 D->getLexicalDeclContext()->getRedeclContext())) 1052 return; 1053 1054 // Template instantiations should also not be pushed into scope. 1055 if (isa<FunctionDecl>(D) && 1056 cast<FunctionDecl>(D)->isFunctionTemplateSpecialization()) 1057 return; 1058 1059 // If this replaces anything in the current scope, 1060 IdentifierResolver::iterator I = IdResolver.begin(D->getDeclName()), 1061 IEnd = IdResolver.end(); 1062 for (; I != IEnd; ++I) { 1063 if (S->isDeclScope(*I) && D->declarationReplaces(*I)) { 1064 S->RemoveDecl(*I); 1065 IdResolver.RemoveDecl(*I); 1066 1067 // Should only need to replace one decl. 1068 break; 1069 } 1070 } 1071 1072 S->AddDecl(D); 1073 1074 if (isa<LabelDecl>(D) && !cast<LabelDecl>(D)->isGnuLocal()) { 1075 // Implicitly-generated labels may end up getting generated in an order that 1076 // isn't strictly lexical, which breaks name lookup. Be careful to insert 1077 // the label at the appropriate place in the identifier chain. 1078 for (I = IdResolver.begin(D->getDeclName()); I != IEnd; ++I) { 1079 DeclContext *IDC = (*I)->getLexicalDeclContext()->getRedeclContext(); 1080 if (IDC == CurContext) { 1081 if (!S->isDeclScope(*I)) 1082 continue; 1083 } else if (IDC->Encloses(CurContext)) 1084 break; 1085 } 1086 1087 IdResolver.InsertDeclAfter(I, D); 1088 } else { 1089 IdResolver.AddDecl(D); 1090 } 1091 } 1092 1093 void Sema::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) { 1094 if (IdResolver.tryAddTopLevelDecl(D, Name) && TUScope) 1095 TUScope->AddDecl(D); 1096 } 1097 1098 bool Sema::isDeclInScope(NamedDecl *&D, DeclContext *Ctx, Scope *S, 1099 bool ExplicitInstantiationOrSpecialization) { 1100 return IdResolver.isDeclInScope(D, Ctx, Context, S, 1101 ExplicitInstantiationOrSpecialization); 1102 } 1103 1104 Scope *Sema::getScopeForDeclContext(Scope *S, DeclContext *DC) { 1105 DeclContext *TargetDC = DC->getPrimaryContext(); 1106 do { 1107 if (DeclContext *ScopeDC = (DeclContext*) S->getEntity()) 1108 if (ScopeDC->getPrimaryContext() == TargetDC) 1109 return S; 1110 } while ((S = S->getParent())); 1111 1112 return 0; 1113 } 1114 1115 static bool isOutOfScopePreviousDeclaration(NamedDecl *, 1116 DeclContext*, 1117 ASTContext&); 1118 1119 /// Filters out lookup results that don't fall within the given scope 1120 /// as determined by isDeclInScope. 1121 void Sema::FilterLookupForScope(LookupResult &R, 1122 DeclContext *Ctx, Scope *S, 1123 bool ConsiderLinkage, 1124 bool ExplicitInstantiationOrSpecialization) { 1125 LookupResult::Filter F = R.makeFilter(); 1126 while (F.hasNext()) { 1127 NamedDecl *D = F.next(); 1128 1129 if (isDeclInScope(D, Ctx, S, ExplicitInstantiationOrSpecialization)) 1130 continue; 1131 1132 if (ConsiderLinkage && 1133 isOutOfScopePreviousDeclaration(D, Ctx, Context)) 1134 continue; 1135 1136 F.erase(); 1137 } 1138 1139 F.done(); 1140 } 1141 1142 static bool isUsingDecl(NamedDecl *D) { 1143 return isa<UsingShadowDecl>(D) || 1144 isa<UnresolvedUsingTypenameDecl>(D) || 1145 isa<UnresolvedUsingValueDecl>(D); 1146 } 1147 1148 /// Removes using shadow declarations from the lookup results. 1149 static void RemoveUsingDecls(LookupResult &R) { 1150 LookupResult::Filter F = R.makeFilter(); 1151 while (F.hasNext()) 1152 if (isUsingDecl(F.next())) 1153 F.erase(); 1154 1155 F.done(); 1156 } 1157 1158 /// \brief Check for this common pattern: 1159 /// @code 1160 /// class S { 1161 /// S(const S&); // DO NOT IMPLEMENT 1162 /// void operator=(const S&); // DO NOT IMPLEMENT 1163 /// }; 1164 /// @endcode 1165 static bool IsDisallowedCopyOrAssign(const CXXMethodDecl *D) { 1166 // FIXME: Should check for private access too but access is set after we get 1167 // the decl here. 1168 if (D->doesThisDeclarationHaveABody()) 1169 return false; 1170 1171 if (const CXXConstructorDecl *CD = dyn_cast<CXXConstructorDecl>(D)) 1172 return CD->isCopyConstructor(); 1173 if (const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D)) 1174 return Method->isCopyAssignmentOperator(); 1175 return false; 1176 } 1177 1178 bool Sema::ShouldWarnIfUnusedFileScopedDecl(const DeclaratorDecl *D) const { 1179 assert(D); 1180 1181 if (D->isInvalidDecl() || D->isUsed() || D->hasAttr<UnusedAttr>()) 1182 return false; 1183 1184 // Ignore class templates. 1185 if (D->getDeclContext()->isDependentContext() || 1186 D->getLexicalDeclContext()->isDependentContext()) 1187 return false; 1188 1189 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { 1190 if (FD->getTemplateSpecializationKind() == TSK_ImplicitInstantiation) 1191 return false; 1192 1193 if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD)) { 1194 if (MD->isVirtual() || IsDisallowedCopyOrAssign(MD)) 1195 return false; 1196 } else { 1197 // 'static inline' functions are used in headers; don't warn. 1198 if (FD->getStorageClass() == SC_Static && 1199 FD->isInlineSpecified()) 1200 return false; 1201 } 1202 1203 if (FD->doesThisDeclarationHaveABody() && 1204 Context.DeclMustBeEmitted(FD)) 1205 return false; 1206 } else if (const VarDecl *VD = dyn_cast<VarDecl>(D)) { 1207 if (!VD->isFileVarDecl() || 1208 VD->getType().isConstant(Context) || 1209 Context.DeclMustBeEmitted(VD)) 1210 return false; 1211 1212 if (VD->isStaticDataMember() && 1213 VD->getTemplateSpecializationKind() == TSK_ImplicitInstantiation) 1214 return false; 1215 1216 } else { 1217 return false; 1218 } 1219 1220 // Only warn for unused decls internal to the translation unit. 1221 if (D->getLinkage() == ExternalLinkage) 1222 return false; 1223 1224 return true; 1225 } 1226 1227 void Sema::MarkUnusedFileScopedDecl(const DeclaratorDecl *D) { 1228 if (!D) 1229 return; 1230 1231 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { 1232 const FunctionDecl *First = FD->getFirstDeclaration(); 1233 if (FD != First && ShouldWarnIfUnusedFileScopedDecl(First)) 1234 return; // First should already be in the vector. 1235 } 1236 1237 if (const VarDecl *VD = dyn_cast<VarDecl>(D)) { 1238 const VarDecl *First = VD->getFirstDeclaration(); 1239 if (VD != First && ShouldWarnIfUnusedFileScopedDecl(First)) 1240 return; // First should already be in the vector. 1241 } 1242 1243 if (ShouldWarnIfUnusedFileScopedDecl(D)) 1244 UnusedFileScopedDecls.push_back(D); 1245 } 1246 1247 static bool ShouldDiagnoseUnusedDecl(const NamedDecl *D) { 1248 if (D->isInvalidDecl()) 1249 return false; 1250 1251 if (D->isReferenced() || D->isUsed() || D->hasAttr<UnusedAttr>()) 1252 return false; 1253 1254 if (isa<LabelDecl>(D)) 1255 return true; 1256 1257 // White-list anything that isn't a local variable. 1258 if (!isa<VarDecl>(D) || isa<ParmVarDecl>(D) || isa<ImplicitParamDecl>(D) || 1259 !D->getDeclContext()->isFunctionOrMethod()) 1260 return false; 1261 1262 // Types of valid local variables should be complete, so this should succeed. 1263 if (const VarDecl *VD = dyn_cast<VarDecl>(D)) { 1264 1265 // White-list anything with an __attribute__((unused)) type. 1266 QualType Ty = VD->getType(); 1267 1268 // Only look at the outermost level of typedef. 1269 if (const TypedefType *TT = Ty->getAs<TypedefType>()) { 1270 if (TT->getDecl()->hasAttr<UnusedAttr>()) 1271 return false; 1272 } 1273 1274 // If we failed to complete the type for some reason, or if the type is 1275 // dependent, don't diagnose the variable. 1276 if (Ty->isIncompleteType() || Ty->isDependentType()) 1277 return false; 1278 1279 if (const TagType *TT = Ty->getAs<TagType>()) { 1280 const TagDecl *Tag = TT->getDecl(); 1281 if (Tag->hasAttr<UnusedAttr>()) 1282 return false; 1283 1284 if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(Tag)) { 1285 if (!RD->hasTrivialDestructor()) 1286 return false; 1287 1288 if (const Expr *Init = VD->getInit()) { 1289 const CXXConstructExpr *Construct = 1290 dyn_cast<CXXConstructExpr>(Init); 1291 if (Construct && !Construct->isElidable()) { 1292 CXXConstructorDecl *CD = Construct->getConstructor(); 1293 if (!CD->isTrivial()) 1294 return false; 1295 } 1296 } 1297 } 1298 } 1299 1300 // TODO: __attribute__((unused)) templates? 1301 } 1302 1303 return true; 1304 } 1305 1306 static void GenerateFixForUnusedDecl(const NamedDecl *D, ASTContext &Ctx, 1307 FixItHint &Hint) { 1308 if (isa<LabelDecl>(D)) { 1309 SourceLocation AfterColon = Lexer::findLocationAfterToken(D->getLocEnd(), 1310 tok::colon, Ctx.getSourceManager(), Ctx.getLangOpts(), true); 1311 if (AfterColon.isInvalid()) 1312 return; 1313 Hint = FixItHint::CreateRemoval(CharSourceRange:: 1314 getCharRange(D->getLocStart(), AfterColon)); 1315 } 1316 return; 1317 } 1318 1319 /// DiagnoseUnusedDecl - Emit warnings about declarations that are not used 1320 /// unless they are marked attr(unused). 1321 void Sema::DiagnoseUnusedDecl(const NamedDecl *D) { 1322 FixItHint Hint; 1323 if (!ShouldDiagnoseUnusedDecl(D)) 1324 return; 1325 1326 GenerateFixForUnusedDecl(D, Context, Hint); 1327 1328 unsigned DiagID; 1329 if (isa<VarDecl>(D) && cast<VarDecl>(D)->isExceptionVariable()) 1330 DiagID = diag::warn_unused_exception_param; 1331 else if (isa<LabelDecl>(D)) 1332 DiagID = diag::warn_unused_label; 1333 else 1334 DiagID = diag::warn_unused_variable; 1335 1336 Diag(D->getLocation(), DiagID) << D->getDeclName() << Hint; 1337 } 1338 1339 static void CheckPoppedLabel(LabelDecl *L, Sema &S) { 1340 // Verify that we have no forward references left. If so, there was a goto 1341 // or address of a label taken, but no definition of it. Label fwd 1342 // definitions are indicated with a null substmt. 1343 if (L->getStmt() == 0) 1344 S.Diag(L->getLocation(), diag::err_undeclared_label_use) <<L->getDeclName(); 1345 } 1346 1347 void Sema::ActOnPopScope(SourceLocation Loc, Scope *S) { 1348 if (S->decl_empty()) return; 1349 assert((S->getFlags() & (Scope::DeclScope | Scope::TemplateParamScope)) && 1350 "Scope shouldn't contain decls!"); 1351 1352 for (Scope::decl_iterator I = S->decl_begin(), E = S->decl_end(); 1353 I != E; ++I) { 1354 Decl *TmpD = (*I); 1355 assert(TmpD && "This decl didn't get pushed??"); 1356 1357 assert(isa<NamedDecl>(TmpD) && "Decl isn't NamedDecl?"); 1358 NamedDecl *D = cast<NamedDecl>(TmpD); 1359 1360 if (!D->getDeclName()) continue; 1361 1362 // Diagnose unused variables in this scope. 1363 if (!S->hasErrorOccurred()) 1364 DiagnoseUnusedDecl(D); 1365 1366 // If this was a forward reference to a label, verify it was defined. 1367 if (LabelDecl *LD = dyn_cast<LabelDecl>(D)) 1368 CheckPoppedLabel(LD, *this); 1369 1370 // Remove this name from our lexical scope. 1371 IdResolver.RemoveDecl(D); 1372 } 1373 } 1374 1375 void Sema::ActOnStartFunctionDeclarator() { 1376 ++InFunctionDeclarator; 1377 } 1378 1379 void Sema::ActOnEndFunctionDeclarator() { 1380 assert(InFunctionDeclarator); 1381 --InFunctionDeclarator; 1382 } 1383 1384 /// \brief Look for an Objective-C class in the translation unit. 1385 /// 1386 /// \param Id The name of the Objective-C class we're looking for. If 1387 /// typo-correction fixes this name, the Id will be updated 1388 /// to the fixed name. 1389 /// 1390 /// \param IdLoc The location of the name in the translation unit. 1391 /// 1392 /// \param DoTypoCorrection If true, this routine will attempt typo correction 1393 /// if there is no class with the given name. 1394 /// 1395 /// \returns The declaration of the named Objective-C class, or NULL if the 1396 /// class could not be found. 1397 ObjCInterfaceDecl *Sema::getObjCInterfaceDecl(IdentifierInfo *&Id, 1398 SourceLocation IdLoc, 1399 bool DoTypoCorrection) { 1400 // The third "scope" argument is 0 since we aren't enabling lazy built-in 1401 // creation from this context. 1402 NamedDecl *IDecl = LookupSingleName(TUScope, Id, IdLoc, LookupOrdinaryName); 1403 1404 if (!IDecl && DoTypoCorrection) { 1405 // Perform typo correction at the given location, but only if we 1406 // find an Objective-C class name. 1407 DeclFilterCCC<ObjCInterfaceDecl> Validator; 1408 if (TypoCorrection C = CorrectTypo(DeclarationNameInfo(Id, IdLoc), 1409 LookupOrdinaryName, TUScope, NULL, 1410 Validator)) { 1411 IDecl = C.getCorrectionDeclAs<ObjCInterfaceDecl>(); 1412 Diag(IdLoc, diag::err_undef_interface_suggest) 1413 << Id << IDecl->getDeclName() 1414 << FixItHint::CreateReplacement(IdLoc, IDecl->getNameAsString()); 1415 Diag(IDecl->getLocation(), diag::note_previous_decl) 1416 << IDecl->getDeclName(); 1417 1418 Id = IDecl->getIdentifier(); 1419 } 1420 } 1421 ObjCInterfaceDecl *Def = dyn_cast_or_null<ObjCInterfaceDecl>(IDecl); 1422 // This routine must always return a class definition, if any. 1423 if (Def && Def->getDefinition()) 1424 Def = Def->getDefinition(); 1425 return Def; 1426 } 1427 1428 /// getNonFieldDeclScope - Retrieves the innermost scope, starting 1429 /// from S, where a non-field would be declared. This routine copes 1430 /// with the difference between C and C++ scoping rules in structs and 1431 /// unions. For example, the following code is well-formed in C but 1432 /// ill-formed in C++: 1433 /// @code 1434 /// struct S6 { 1435 /// enum { BAR } e; 1436 /// }; 1437 /// 1438 /// void test_S6() { 1439 /// struct S6 a; 1440 /// a.e = BAR; 1441 /// } 1442 /// @endcode 1443 /// For the declaration of BAR, this routine will return a different 1444 /// scope. The scope S will be the scope of the unnamed enumeration 1445 /// within S6. In C++, this routine will return the scope associated 1446 /// with S6, because the enumeration's scope is a transparent 1447 /// context but structures can contain non-field names. In C, this 1448 /// routine will return the translation unit scope, since the 1449 /// enumeration's scope is a transparent context and structures cannot 1450 /// contain non-field names. 1451 Scope *Sema::getNonFieldDeclScope(Scope *S) { 1452 while (((S->getFlags() & Scope::DeclScope) == 0) || 1453 (S->getEntity() && 1454 ((DeclContext *)S->getEntity())->isTransparentContext()) || 1455 (S->isClassScope() && !getLangOpts().CPlusPlus)) 1456 S = S->getParent(); 1457 return S; 1458 } 1459 1460 /// LazilyCreateBuiltin - The specified Builtin-ID was first used at 1461 /// file scope. lazily create a decl for it. ForRedeclaration is true 1462 /// if we're creating this built-in in anticipation of redeclaring the 1463 /// built-in. 1464 NamedDecl *Sema::LazilyCreateBuiltin(IdentifierInfo *II, unsigned bid, 1465 Scope *S, bool ForRedeclaration, 1466 SourceLocation Loc) { 1467 Builtin::ID BID = (Builtin::ID)bid; 1468 1469 ASTContext::GetBuiltinTypeError Error; 1470 QualType R = Context.GetBuiltinType(BID, Error); 1471 switch (Error) { 1472 case ASTContext::GE_None: 1473 // Okay 1474 break; 1475 1476 case ASTContext::GE_Missing_stdio: 1477 if (ForRedeclaration) 1478 Diag(Loc, diag::warn_implicit_decl_requires_stdio) 1479 << Context.BuiltinInfo.GetName(BID); 1480 return 0; 1481 1482 case ASTContext::GE_Missing_setjmp: 1483 if (ForRedeclaration) 1484 Diag(Loc, diag::warn_implicit_decl_requires_setjmp) 1485 << Context.BuiltinInfo.GetName(BID); 1486 return 0; 1487 1488 case ASTContext::GE_Missing_ucontext: 1489 if (ForRedeclaration) 1490 Diag(Loc, diag::warn_implicit_decl_requires_ucontext) 1491 << Context.BuiltinInfo.GetName(BID); 1492 return 0; 1493 } 1494 1495 if (!ForRedeclaration && Context.BuiltinInfo.isPredefinedLibFunction(BID)) { 1496 Diag(Loc, diag::ext_implicit_lib_function_decl) 1497 << Context.BuiltinInfo.GetName(BID) 1498 << R; 1499 if (Context.BuiltinInfo.getHeaderName(BID) && 1500 Diags.getDiagnosticLevel(diag::ext_implicit_lib_function_decl, Loc) 1501 != DiagnosticsEngine::Ignored) 1502 Diag(Loc, diag::note_please_include_header) 1503 << Context.BuiltinInfo.getHeaderName(BID) 1504 << Context.BuiltinInfo.GetName(BID); 1505 } 1506 1507 FunctionDecl *New = FunctionDecl::Create(Context, 1508 Context.getTranslationUnitDecl(), 1509 Loc, Loc, II, R, /*TInfo=*/0, 1510 SC_Extern, 1511 SC_None, false, 1512 /*hasPrototype=*/true); 1513 New->setImplicit(); 1514 1515 // Create Decl objects for each parameter, adding them to the 1516 // FunctionDecl. 1517 if (const FunctionProtoType *FT = dyn_cast<FunctionProtoType>(R)) { 1518 SmallVector<ParmVarDecl*, 16> Params; 1519 for (unsigned i = 0, e = FT->getNumArgs(); i != e; ++i) { 1520 ParmVarDecl *parm = 1521 ParmVarDecl::Create(Context, New, SourceLocation(), 1522 SourceLocation(), 0, 1523 FT->getArgType(i), /*TInfo=*/0, 1524 SC_None, SC_None, 0); 1525 parm->setScopeInfo(0, i); 1526 Params.push_back(parm); 1527 } 1528 New->setParams(Params); 1529 } 1530 1531 AddKnownFunctionAttributes(New); 1532 1533 // TUScope is the translation-unit scope to insert this function into. 1534 // FIXME: This is hideous. We need to teach PushOnScopeChains to 1535 // relate Scopes to DeclContexts, and probably eliminate CurContext 1536 // entirely, but we're not there yet. 1537 DeclContext *SavedContext = CurContext; 1538 CurContext = Context.getTranslationUnitDecl(); 1539 PushOnScopeChains(New, TUScope); 1540 CurContext = SavedContext; 1541 return New; 1542 } 1543 1544 bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) { 1545 QualType OldType; 1546 if (TypedefNameDecl *OldTypedef = dyn_cast<TypedefNameDecl>(Old)) 1547 OldType = OldTypedef->getUnderlyingType(); 1548 else 1549 OldType = Context.getTypeDeclType(Old); 1550 QualType NewType = New->getUnderlyingType(); 1551 1552 if (NewType->isVariablyModifiedType()) { 1553 // Must not redefine a typedef with a variably-modified type. 1554 int Kind = isa<TypeAliasDecl>(Old) ? 1 : 0; 1555 Diag(New->getLocation(), diag::err_redefinition_variably_modified_typedef) 1556 << Kind << NewType; 1557 if (Old->getLocation().isValid()) 1558 Diag(Old->getLocation(), diag::note_previous_definition); 1559 New->setInvalidDecl(); 1560 return true; 1561 } 1562 1563 if (OldType != NewType && 1564 !OldType->isDependentType() && 1565 !NewType->isDependentType() && 1566 !Context.hasSameType(OldType, NewType)) { 1567 int Kind = isa<TypeAliasDecl>(Old) ? 1 : 0; 1568 Diag(New->getLocation(), diag::err_redefinition_different_typedef) 1569 << Kind << NewType << OldType; 1570 if (Old->getLocation().isValid()) 1571 Diag(Old->getLocation(), diag::note_previous_definition); 1572 New->setInvalidDecl(); 1573 return true; 1574 } 1575 return false; 1576 } 1577 1578 /// MergeTypedefNameDecl - We just parsed a typedef 'New' which has the 1579 /// same name and scope as a previous declaration 'Old'. Figure out 1580 /// how to resolve this situation, merging decls or emitting 1581 /// diagnostics as appropriate. If there was an error, set New to be invalid. 1582 /// 1583 void Sema::MergeTypedefNameDecl(TypedefNameDecl *New, LookupResult &OldDecls) { 1584 // If the new decl is known invalid already, don't bother doing any 1585 // merging checks. 1586 if (New->isInvalidDecl()) return; 1587 1588 // Allow multiple definitions for ObjC built-in typedefs. 1589 // FIXME: Verify the underlying types are equivalent! 1590 if (getLangOpts().ObjC1) { 1591 const IdentifierInfo *TypeID = New->getIdentifier(); 1592 switch (TypeID->getLength()) { 1593 default: break; 1594 case 2: 1595 { 1596 if (!TypeID->isStr("id")) 1597 break; 1598 QualType T = New->getUnderlyingType(); 1599 if (!T->isPointerType()) 1600 break; 1601 if (!T->isVoidPointerType()) { 1602 QualType PT = T->getAs<PointerType>()->getPointeeType(); 1603 if (!PT->isStructureType()) 1604 break; 1605 } 1606 Context.setObjCIdRedefinitionType(T); 1607 // Install the built-in type for 'id', ignoring the current definition. 1608 New->setTypeForDecl(Context.getObjCIdType().getTypePtr()); 1609 return; 1610 } 1611 case 5: 1612 if (!TypeID->isStr("Class")) 1613 break; 1614 Context.setObjCClassRedefinitionType(New->getUnderlyingType()); 1615 // Install the built-in type for 'Class', ignoring the current definition. 1616 New->setTypeForDecl(Context.getObjCClassType().getTypePtr()); 1617 return; 1618 case 3: 1619 if (!TypeID->isStr("SEL")) 1620 break; 1621 Context.setObjCSelRedefinitionType(New->getUnderlyingType()); 1622 // Install the built-in type for 'SEL', ignoring the current definition. 1623 New->setTypeForDecl(Context.getObjCSelType().getTypePtr()); 1624 return; 1625 } 1626 // Fall through - the typedef name was not a builtin type. 1627 } 1628 1629 // Verify the old decl was also a type. 1630 TypeDecl *Old = OldDecls.getAsSingle<TypeDecl>(); 1631 if (!Old) { 1632 Diag(New->getLocation(), diag::err_redefinition_different_kind) 1633 << New->getDeclName(); 1634 1635 NamedDecl *OldD = OldDecls.getRepresentativeDecl(); 1636 if (OldD->getLocation().isValid()) 1637 Diag(OldD->getLocation(), diag::note_previous_definition); 1638 1639 return New->setInvalidDecl(); 1640 } 1641 1642 // If the old declaration is invalid, just give up here. 1643 if (Old->isInvalidDecl()) 1644 return New->setInvalidDecl(); 1645 1646 // If the typedef types are not identical, reject them in all languages and 1647 // with any extensions enabled. 1648 if (isIncompatibleTypedef(Old, New)) 1649 return; 1650 1651 // The types match. Link up the redeclaration chain if the old 1652 // declaration was a typedef. 1653 if (TypedefNameDecl *Typedef = dyn_cast<TypedefNameDecl>(Old)) 1654 New->setPreviousDeclaration(Typedef); 1655 1656 if (getLangOpts().MicrosoftExt) 1657 return; 1658 1659 if (getLangOpts().CPlusPlus) { 1660 // C++ [dcl.typedef]p2: 1661 // In a given non-class scope, a typedef specifier can be used to 1662 // redefine the name of any type declared in that scope to refer 1663 // to the type to which it already refers. 1664 if (!isa<CXXRecordDecl>(CurContext)) 1665 return; 1666 1667 // C++0x [dcl.typedef]p4: 1668 // In a given class scope, a typedef specifier can be used to redefine 1669 // any class-name declared in that scope that is not also a typedef-name 1670 // to refer to the type to which it already refers. 1671 // 1672 // This wording came in via DR424, which was a correction to the 1673 // wording in DR56, which accidentally banned code like: 1674 // 1675 // struct S { 1676 // typedef struct A { } A; 1677 // }; 1678 // 1679 // in the C++03 standard. We implement the C++0x semantics, which 1680 // allow the above but disallow 1681 // 1682 // struct S { 1683 // typedef int I; 1684 // typedef int I; 1685 // }; 1686 // 1687 // since that was the intent of DR56. 1688 if (!isa<TypedefNameDecl>(Old)) 1689 return; 1690 1691 Diag(New->getLocation(), diag::err_redefinition) 1692 << New->getDeclName(); 1693 Diag(Old->getLocation(), diag::note_previous_definition); 1694 return New->setInvalidDecl(); 1695 } 1696 1697 // Modules always permit redefinition of typedefs, as does C11. 1698 if (getLangOpts().Modules || getLangOpts().C11) 1699 return; 1700 1701 // If we have a redefinition of a typedef in C, emit a warning. This warning 1702 // is normally mapped to an error, but can be controlled with 1703 // -Wtypedef-redefinition. If either the original or the redefinition is 1704 // in a system header, don't emit this for compatibility with GCC. 1705 if (getDiagnostics().getSuppressSystemWarnings() && 1706 (Context.getSourceManager().isInSystemHeader(Old->getLocation()) || 1707 Context.getSourceManager().isInSystemHeader(New->getLocation()))) 1708 return; 1709 1710 Diag(New->getLocation(), diag::warn_redefinition_of_typedef) 1711 << New->getDeclName(); 1712 Diag(Old->getLocation(), diag::note_previous_definition); 1713 return; 1714 } 1715 1716 /// DeclhasAttr - returns true if decl Declaration already has the target 1717 /// attribute. 1718 static bool 1719 DeclHasAttr(const Decl *D, const Attr *A) { 1720 // There can be multiple AvailabilityAttr in a Decl. Make sure we copy 1721 // all of them. It is mergeAvailabilityAttr in SemaDeclAttr.cpp that is 1722 // responsible for making sure they are consistent. 1723 const AvailabilityAttr *AA = dyn_cast<AvailabilityAttr>(A); 1724 if (AA) 1725 return false; 1726 1727 const OwnershipAttr *OA = dyn_cast<OwnershipAttr>(A); 1728 const AnnotateAttr *Ann = dyn_cast<AnnotateAttr>(A); 1729 for (Decl::attr_iterator i = D->attr_begin(), e = D->attr_end(); i != e; ++i) 1730 if ((*i)->getKind() == A->getKind()) { 1731 if (Ann) { 1732 if (Ann->getAnnotation() == cast<AnnotateAttr>(*i)->getAnnotation()) 1733 return true; 1734 continue; 1735 } 1736 // FIXME: Don't hardcode this check 1737 if (OA && isa<OwnershipAttr>(*i)) 1738 return OA->getOwnKind() == cast<OwnershipAttr>(*i)->getOwnKind(); 1739 return true; 1740 } 1741 1742 return false; 1743 } 1744 1745 bool Sema::mergeDeclAttribute(Decl *D, InheritableAttr *Attr) { 1746 InheritableAttr *NewAttr = NULL; 1747 if (AvailabilityAttr *AA = dyn_cast<AvailabilityAttr>(Attr)) 1748 NewAttr = mergeAvailabilityAttr(D, AA->getRange(), AA->getPlatform(), 1749 AA->getIntroduced(), AA->getDeprecated(), 1750 AA->getObsoleted(), AA->getUnavailable(), 1751 AA->getMessage()); 1752 else if (VisibilityAttr *VA = dyn_cast<VisibilityAttr>(Attr)) 1753 NewAttr = mergeVisibilityAttr(D, VA->getRange(), VA->getVisibility()); 1754 else if (DLLImportAttr *ImportA = dyn_cast<DLLImportAttr>(Attr)) 1755 NewAttr = mergeDLLImportAttr(D, ImportA->getRange()); 1756 else if (DLLExportAttr *ExportA = dyn_cast<DLLExportAttr>(Attr)) 1757 NewAttr = mergeDLLExportAttr(D, ExportA->getRange()); 1758 else if (FormatAttr *FA = dyn_cast<FormatAttr>(Attr)) 1759 NewAttr = mergeFormatAttr(D, FA->getRange(), FA->getType(), 1760 FA->getFormatIdx(), FA->getFirstArg()); 1761 else if (SectionAttr *SA = dyn_cast<SectionAttr>(Attr)) 1762 NewAttr = mergeSectionAttr(D, SA->getRange(), SA->getName()); 1763 else if (!DeclHasAttr(D, Attr)) 1764 NewAttr = cast<InheritableAttr>(Attr->clone(Context)); 1765 1766 if (NewAttr) { 1767 NewAttr->setInherited(true); 1768 D->addAttr(NewAttr); 1769 return true; 1770 } 1771 1772 return false; 1773 } 1774 1775 static const Decl *getDefinition(const Decl *D) { 1776 if (const TagDecl *TD = dyn_cast<TagDecl>(D)) 1777 return TD->getDefinition(); 1778 if (const VarDecl *VD = dyn_cast<VarDecl>(D)) 1779 return VD->getDefinition(); 1780 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { 1781 const FunctionDecl* Def; 1782 if (FD->hasBody(Def)) 1783 return Def; 1784 } 1785 return NULL; 1786 } 1787 1788 static bool hasAttribute(const Decl *D, attr::Kind Kind) { 1789 for (Decl::attr_iterator I = D->attr_begin(), E = D->attr_end(); 1790 I != E; ++I) { 1791 Attr *Attribute = *I; 1792 if (Attribute->getKind() == Kind) 1793 return true; 1794 } 1795 return false; 1796 } 1797 1798 /// checkNewAttributesAfterDef - If we already have a definition, check that 1799 /// there are no new attributes in this declaration. 1800 static void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) { 1801 if (!New->hasAttrs()) 1802 return; 1803 1804 const Decl *Def = getDefinition(Old); 1805 if (!Def || Def == New) 1806 return; 1807 1808 AttrVec &NewAttributes = New->getAttrs(); 1809 for (unsigned I = 0, E = NewAttributes.size(); I != E;) { 1810 const Attr *NewAttribute = NewAttributes[I]; 1811 if (hasAttribute(Def, NewAttribute->getKind())) { 1812 ++I; 1813 continue; // regular attr merging will take care of validating this. 1814 } 1815 S.Diag(NewAttribute->getLocation(), 1816 diag::warn_attribute_precede_definition); 1817 S.Diag(Def->getLocation(), diag::note_previous_definition); 1818 NewAttributes.erase(NewAttributes.begin() + I); 1819 --E; 1820 } 1821 } 1822 1823 /// mergeDeclAttributes - Copy attributes from the Old decl to the New one. 1824 void Sema::mergeDeclAttributes(Decl *New, Decl *Old, 1825 bool MergeDeprecation) { 1826 // attributes declared post-definition are currently ignored 1827 checkNewAttributesAfterDef(*this, New, Old); 1828 1829 if (!Old->hasAttrs()) 1830 return; 1831 1832 bool foundAny = New->hasAttrs(); 1833 1834 // Ensure that any moving of objects within the allocated map is done before 1835 // we process them. 1836 if (!foundAny) New->setAttrs(AttrVec()); 1837 1838 for (specific_attr_iterator<InheritableAttr> 1839 i = Old->specific_attr_begin<InheritableAttr>(), 1840 e = Old->specific_attr_end<InheritableAttr>(); 1841 i != e; ++i) { 1842 // Ignore deprecated/unavailable/availability attributes if requested. 1843 if (!MergeDeprecation && 1844 (isa<DeprecatedAttr>(*i) || 1845 isa<UnavailableAttr>(*i) || 1846 isa<AvailabilityAttr>(*i))) 1847 continue; 1848 1849 if (mergeDeclAttribute(New, *i)) 1850 foundAny = true; 1851 } 1852 1853 if (!foundAny) New->dropAttrs(); 1854 } 1855 1856 /// mergeParamDeclAttributes - Copy attributes from the old parameter 1857 /// to the new one. 1858 static void mergeParamDeclAttributes(ParmVarDecl *newDecl, 1859 const ParmVarDecl *oldDecl, 1860 ASTContext &C) { 1861 if (!oldDecl->hasAttrs()) 1862 return; 1863 1864 bool foundAny = newDecl->hasAttrs(); 1865 1866 // Ensure that any moving of objects within the allocated map is 1867 // done before we process them. 1868 if (!foundAny) newDecl->setAttrs(AttrVec()); 1869 1870 for (specific_attr_iterator<InheritableParamAttr> 1871 i = oldDecl->specific_attr_begin<InheritableParamAttr>(), 1872 e = oldDecl->specific_attr_end<InheritableParamAttr>(); i != e; ++i) { 1873 if (!DeclHasAttr(newDecl, *i)) { 1874 InheritableAttr *newAttr = cast<InheritableParamAttr>((*i)->clone(C)); 1875 newAttr->setInherited(true); 1876 newDecl->addAttr(newAttr); 1877 foundAny = true; 1878 } 1879 } 1880 1881 if (!foundAny) newDecl->dropAttrs(); 1882 } 1883 1884 namespace { 1885 1886 /// Used in MergeFunctionDecl to keep track of function parameters in 1887 /// C. 1888 struct GNUCompatibleParamWarning { 1889 ParmVarDecl *OldParm; 1890 ParmVarDecl *NewParm; 1891 QualType PromotedType; 1892 }; 1893 1894 } 1895 1896 /// getSpecialMember - get the special member enum for a method. 1897 Sema::CXXSpecialMember Sema::getSpecialMember(const CXXMethodDecl *MD) { 1898 if (const CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(MD)) { 1899 if (Ctor->isDefaultConstructor()) 1900 return Sema::CXXDefaultConstructor; 1901 1902 if (Ctor->isCopyConstructor()) 1903 return Sema::CXXCopyConstructor; 1904 1905 if (Ctor->isMoveConstructor()) 1906 return Sema::CXXMoveConstructor; 1907 } else if (isa<CXXDestructorDecl>(MD)) { 1908 return Sema::CXXDestructor; 1909 } else if (MD->isCopyAssignmentOperator()) { 1910 return Sema::CXXCopyAssignment; 1911 } else if (MD->isMoveAssignmentOperator()) { 1912 return Sema::CXXMoveAssignment; 1913 } 1914 1915 return Sema::CXXInvalid; 1916 } 1917 1918 /// canRedefineFunction - checks if a function can be redefined. Currently, 1919 /// only extern inline functions can be redefined, and even then only in 1920 /// GNU89 mode. 1921 static bool canRedefineFunction(const FunctionDecl *FD, 1922 const LangOptions& LangOpts) { 1923 return ((FD->hasAttr<GNUInlineAttr>() || LangOpts.GNUInline) && 1924 !LangOpts.CPlusPlus && 1925 FD->isInlineSpecified() && 1926 FD->getStorageClass() == SC_Extern); 1927 } 1928 1929 /// Is the given calling convention the ABI default for the given 1930 /// declaration? 1931 static bool isABIDefaultCC(Sema &S, CallingConv CC, FunctionDecl *D) { 1932 CallingConv ABIDefaultCC; 1933 if (isa<CXXMethodDecl>(D) && cast<CXXMethodDecl>(D)->isInstance()) { 1934 ABIDefaultCC = S.Context.getDefaultCXXMethodCallConv(D->isVariadic()); 1935 } else { 1936 // Free C function or a static method. 1937 ABIDefaultCC = (S.Context.getLangOpts().MRTD ? CC_X86StdCall : CC_C); 1938 } 1939 return ABIDefaultCC == CC; 1940 } 1941 1942 /// MergeFunctionDecl - We just parsed a function 'New' from 1943 /// declarator D which has the same name and scope as a previous 1944 /// declaration 'Old'. Figure out how to resolve this situation, 1945 /// merging decls or emitting diagnostics as appropriate. 1946 /// 1947 /// In C++, New and Old must be declarations that are not 1948 /// overloaded. Use IsOverload to determine whether New and Old are 1949 /// overloaded, and to select the Old declaration that New should be 1950 /// merged with. 1951 /// 1952 /// Returns true if there was an error, false otherwise. 1953 bool Sema::MergeFunctionDecl(FunctionDecl *New, Decl *OldD, Scope *S) { 1954 // Verify the old decl was also a function. 1955 FunctionDecl *Old = 0; 1956 if (FunctionTemplateDecl *OldFunctionTemplate 1957 = dyn_cast<FunctionTemplateDecl>(OldD)) 1958 Old = OldFunctionTemplate->getTemplatedDecl(); 1959 else 1960 Old = dyn_cast<FunctionDecl>(OldD); 1961 if (!Old) { 1962 if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) { 1963 Diag(New->getLocation(), diag::err_using_decl_conflict_reverse); 1964 Diag(Shadow->getTargetDecl()->getLocation(), 1965 diag::note_using_decl_target); 1966 Diag(Shadow->getUsingDecl()->getLocation(), 1967 diag::note_using_decl) << 0; 1968 return true; 1969 } 1970 1971 Diag(New->getLocation(), diag::err_redefinition_different_kind) 1972 << New->getDeclName(); 1973 Diag(OldD->getLocation(), diag::note_previous_definition); 1974 return true; 1975 } 1976 1977 // Determine whether the previous declaration was a definition, 1978 // implicit declaration, or a declaration. 1979 diag::kind PrevDiag; 1980 if (Old->isThisDeclarationADefinition()) 1981 PrevDiag = diag::note_previous_definition; 1982 else if (Old->isImplicit()) 1983 PrevDiag = diag::note_previous_implicit_declaration; 1984 else 1985 PrevDiag = diag::note_previous_declaration; 1986 1987 QualType OldQType = Context.getCanonicalType(Old->getType()); 1988 QualType NewQType = Context.getCanonicalType(New->getType()); 1989 1990 // Don't complain about this if we're in GNU89 mode and the old function 1991 // is an extern inline function. 1992 if (!isa<CXXMethodDecl>(New) && !isa<CXXMethodDecl>(Old) && 1993 New->getStorageClass() == SC_Static && 1994 Old->getStorageClass() != SC_Static && 1995 !canRedefineFunction(Old, getLangOpts())) { 1996 if (getLangOpts().MicrosoftExt) { 1997 Diag(New->getLocation(), diag::warn_static_non_static) << New; 1998 Diag(Old->getLocation(), PrevDiag); 1999 } else { 2000 Diag(New->getLocation(), diag::err_static_non_static) << New; 2001 Diag(Old->getLocation(), PrevDiag); 2002 return true; 2003 } 2004 } 2005 2006 // If a function is first declared with a calling convention, but is 2007 // later declared or defined without one, the second decl assumes the 2008 // calling convention of the first. 2009 // 2010 // It's OK if a function is first declared without a calling convention, 2011 // but is later declared or defined with the default calling convention. 2012 // 2013 // For the new decl, we have to look at the NON-canonical type to tell the 2014 // difference between a function that really doesn't have a calling 2015 // convention and one that is declared cdecl. That's because in 2016 // canonicalization (see ASTContext.cpp), cdecl is canonicalized away 2017 // because it is the default calling convention. 2018 // 2019 // Note also that we DO NOT return at this point, because we still have 2020 // other tests to run. 2021 const FunctionType *OldType = cast<FunctionType>(OldQType); 2022 const FunctionType *NewType = New->getType()->getAs<FunctionType>(); 2023 FunctionType::ExtInfo OldTypeInfo = OldType->getExtInfo(); 2024 FunctionType::ExtInfo NewTypeInfo = NewType->getExtInfo(); 2025 bool RequiresAdjustment = false; 2026 if (OldTypeInfo.getCC() == NewTypeInfo.getCC()) { 2027 // Fast path: nothing to do. 2028 2029 // Inherit the CC from the previous declaration if it was specified 2030 // there but not here. 2031 } else if (NewTypeInfo.getCC() == CC_Default) { 2032 NewTypeInfo = NewTypeInfo.withCallingConv(OldTypeInfo.getCC()); 2033 RequiresAdjustment = true; 2034 2035 // Don't complain about mismatches when the default CC is 2036 // effectively the same as the explict one. 2037 } else if (OldTypeInfo.getCC() == CC_Default && 2038 isABIDefaultCC(*this, NewTypeInfo.getCC(), New)) { 2039 NewTypeInfo = NewTypeInfo.withCallingConv(OldTypeInfo.getCC()); 2040 RequiresAdjustment = true; 2041 2042 } else if (!Context.isSameCallConv(OldTypeInfo.getCC(), 2043 NewTypeInfo.getCC())) { 2044 // Calling conventions really aren't compatible, so complain. 2045 Diag(New->getLocation(), diag::err_cconv_change) 2046 << FunctionType::getNameForCallConv(NewTypeInfo.getCC()) 2047 << (OldTypeInfo.getCC() == CC_Default) 2048 << (OldTypeInfo.getCC() == CC_Default ? "" : 2049 FunctionType::getNameForCallConv(OldTypeInfo.getCC())); 2050 Diag(Old->getLocation(), diag::note_previous_declaration); 2051 return true; 2052 } 2053 2054 // FIXME: diagnose the other way around? 2055 if (OldTypeInfo.getNoReturn() && !NewTypeInfo.getNoReturn()) { 2056 NewTypeInfo = NewTypeInfo.withNoReturn(true); 2057 RequiresAdjustment = true; 2058 } 2059 2060 // Merge regparm attribute. 2061 if (OldTypeInfo.getHasRegParm() != NewTypeInfo.getHasRegParm() || 2062 OldTypeInfo.getRegParm() != NewTypeInfo.getRegParm()) { 2063 if (NewTypeInfo.getHasRegParm()) { 2064 Diag(New->getLocation(), diag::err_regparm_mismatch) 2065 << NewType->getRegParmType() 2066 << OldType->getRegParmType(); 2067 Diag(Old->getLocation(), diag::note_previous_declaration); 2068 return true; 2069 } 2070 2071 NewTypeInfo = NewTypeInfo.withRegParm(OldTypeInfo.getRegParm()); 2072 RequiresAdjustment = true; 2073 } 2074 2075 // Merge ns_returns_retained attribute. 2076 if (OldTypeInfo.getProducesResult() != NewTypeInfo.getProducesResult()) { 2077 if (NewTypeInfo.getProducesResult()) { 2078 Diag(New->getLocation(), diag::err_returns_retained_mismatch); 2079 Diag(Old->getLocation(), diag::note_previous_declaration); 2080 return true; 2081 } 2082 2083 NewTypeInfo = NewTypeInfo.withProducesResult(true); 2084 RequiresAdjustment = true; 2085 } 2086 2087 if (RequiresAdjustment) { 2088 NewType = Context.adjustFunctionType(NewType, NewTypeInfo); 2089 New->setType(QualType(NewType, 0)); 2090 NewQType = Context.getCanonicalType(New->getType()); 2091 } 2092 2093 if (getLangOpts().CPlusPlus) { 2094 // (C++98 13.1p2): 2095 // Certain function declarations cannot be overloaded: 2096 // -- Function declarations that differ only in the return type 2097 // cannot be overloaded. 2098 QualType OldReturnType = OldType->getResultType(); 2099 QualType NewReturnType = cast<FunctionType>(NewQType)->getResultType(); 2100 QualType ResQT; 2101 if (OldReturnType != NewReturnType) { 2102 if (NewReturnType->isObjCObjectPointerType() 2103 && OldReturnType->isObjCObjectPointerType()) 2104 ResQT = Context.mergeObjCGCQualifiers(NewQType, OldQType); 2105 if (ResQT.isNull()) { 2106 if (New->isCXXClassMember() && New->isOutOfLine()) 2107 Diag(New->getLocation(), 2108 diag::err_member_def_does_not_match_ret_type) << New; 2109 else 2110 Diag(New->getLocation(), diag::err_ovl_diff_return_type); 2111 Diag(Old->getLocation(), PrevDiag) << Old << Old->getType(); 2112 return true; 2113 } 2114 else 2115 NewQType = ResQT; 2116 } 2117 2118 const CXXMethodDecl* OldMethod = dyn_cast<CXXMethodDecl>(Old); 2119 CXXMethodDecl* NewMethod = dyn_cast<CXXMethodDecl>(New); 2120 if (OldMethod && NewMethod) { 2121 // Preserve triviality. 2122 NewMethod->setTrivial(OldMethod->isTrivial()); 2123 2124 // MSVC allows explicit template specialization at class scope: 2125 // 2 CXMethodDecls referring to the same function will be injected. 2126 // We don't want a redeclartion error. 2127 bool IsClassScopeExplicitSpecialization = 2128 OldMethod->isFunctionTemplateSpecialization() && 2129 NewMethod->isFunctionTemplateSpecialization(); 2130 bool isFriend = NewMethod->getFriendObjectKind(); 2131 2132 if (!isFriend && NewMethod->getLexicalDeclContext()->isRecord() && 2133 !IsClassScopeExplicitSpecialization) { 2134 // -- Member function declarations with the same name and the 2135 // same parameter types cannot be overloaded if any of them 2136 // is a static member function declaration. 2137 if (OldMethod->isStatic() || NewMethod->isStatic()) { 2138 Diag(New->getLocation(), diag::err_ovl_static_nonstatic_member); 2139 Diag(Old->getLocation(), PrevDiag) << Old << Old->getType(); 2140 return true; 2141 } 2142 2143 // C++ [class.mem]p1: 2144 // [...] A member shall not be declared twice in the 2145 // member-specification, except that a nested class or member 2146 // class template can be declared and then later defined. 2147 if (ActiveTemplateInstantiations.empty()) { 2148 unsigned NewDiag; 2149 if (isa<CXXConstructorDecl>(OldMethod)) 2150 NewDiag = diag::err_constructor_redeclared; 2151 else if (isa<CXXDestructorDecl>(NewMethod)) 2152 NewDiag = diag::err_destructor_redeclared; 2153 else if (isa<CXXConversionDecl>(NewMethod)) 2154 NewDiag = diag::err_conv_function_redeclared; 2155 else 2156 NewDiag = diag::err_member_redeclared; 2157 2158 Diag(New->getLocation(), NewDiag); 2159 } else { 2160 Diag(New->getLocation(), diag::err_member_redeclared_in_instantiation) 2161 << New << New->getType(); 2162 } 2163 Diag(Old->getLocation(), PrevDiag) << Old << Old->getType(); 2164 2165 // Complain if this is an explicit declaration of a special 2166 // member that was initially declared implicitly. 2167 // 2168 // As an exception, it's okay to befriend such methods in order 2169 // to permit the implicit constructor/destructor/operator calls. 2170 } else if (OldMethod->isImplicit()) { 2171 if (isFriend) { 2172 NewMethod->setImplicit(); 2173 } else { 2174 Diag(NewMethod->getLocation(), 2175 diag::err_definition_of_implicitly_declared_member) 2176 << New << getSpecialMember(OldMethod); 2177 return true; 2178 } 2179 } else if (OldMethod->isExplicitlyDefaulted() && !isFriend) { 2180 Diag(NewMethod->getLocation(), 2181 diag::err_definition_of_explicitly_defaulted_member) 2182 << getSpecialMember(OldMethod); 2183 return true; 2184 } 2185 } 2186 2187 // (C++98 8.3.5p3): 2188 // All declarations for a function shall agree exactly in both the 2189 // return type and the parameter-type-list. 2190 // We also want to respect all the extended bits except noreturn. 2191 2192 // noreturn should now match unless the old type info didn't have it. 2193 QualType OldQTypeForComparison = OldQType; 2194 if (!OldTypeInfo.getNoReturn() && NewTypeInfo.getNoReturn()) { 2195 assert(OldQType == QualType(OldType, 0)); 2196 const FunctionType *OldTypeForComparison 2197 = Context.adjustFunctionType(OldType, OldTypeInfo.withNoReturn(true)); 2198 OldQTypeForComparison = QualType(OldTypeForComparison, 0); 2199 assert(OldQTypeForComparison.isCanonical()); 2200 } 2201 2202 if (OldQTypeForComparison == NewQType) 2203 return MergeCompatibleFunctionDecls(New, Old, S); 2204 2205 // Fall through for conflicting redeclarations and redefinitions. 2206 } 2207 2208 // C: Function types need to be compatible, not identical. This handles 2209 // duplicate function decls like "void f(int); void f(enum X);" properly. 2210 if (!getLangOpts().CPlusPlus && 2211 Context.typesAreCompatible(OldQType, NewQType)) { 2212 const FunctionType *OldFuncType = OldQType->getAs<FunctionType>(); 2213 const FunctionType *NewFuncType = NewQType->getAs<FunctionType>(); 2214 const FunctionProtoType *OldProto = 0; 2215 if (isa<FunctionNoProtoType>(NewFuncType) && 2216 (OldProto = dyn_cast<FunctionProtoType>(OldFuncType))) { 2217 // The old declaration provided a function prototype, but the 2218 // new declaration does not. Merge in the prototype. 2219 assert(!OldProto->hasExceptionSpec() && "Exception spec in C"); 2220 SmallVector<QualType, 16> ParamTypes(OldProto->arg_type_begin(), 2221 OldProto->arg_type_end()); 2222 NewQType = Context.getFunctionType(NewFuncType->getResultType(), 2223 ParamTypes.data(), ParamTypes.size(), 2224 OldProto->getExtProtoInfo()); 2225 New->setType(NewQType); 2226 New->setHasInheritedPrototype(); 2227 2228 // Synthesize a parameter for each argument type. 2229 SmallVector<ParmVarDecl*, 16> Params; 2230 for (FunctionProtoType::arg_type_iterator 2231 ParamType = OldProto->arg_type_begin(), 2232 ParamEnd = OldProto->arg_type_end(); 2233 ParamType != ParamEnd; ++ParamType) { 2234 ParmVarDecl *Param = ParmVarDecl::Create(Context, New, 2235 SourceLocation(), 2236 SourceLocation(), 0, 2237 *ParamType, /*TInfo=*/0, 2238 SC_None, SC_None, 2239 0); 2240 Param->setScopeInfo(0, Params.size()); 2241 Param->setImplicit(); 2242 Params.push_back(Param); 2243 } 2244 2245 New->setParams(Params); 2246 } 2247 2248 return MergeCompatibleFunctionDecls(New, Old, S); 2249 } 2250 2251 // GNU C permits a K&R definition to follow a prototype declaration 2252 // if the declared types of the parameters in the K&R definition 2253 // match the types in the prototype declaration, even when the 2254 // promoted types of the parameters from the K&R definition differ 2255 // from the types in the prototype. GCC then keeps the types from 2256 // the prototype. 2257 // 2258 // If a variadic prototype is followed by a non-variadic K&R definition, 2259 // the K&R definition becomes variadic. This is sort of an edge case, but 2260 // it's legal per the standard depending on how you read C99 6.7.5.3p15 and 2261 // C99 6.9.1p8. 2262 if (!getLangOpts().CPlusPlus && 2263 Old->hasPrototype() && !New->hasPrototype() && 2264 New->getType()->getAs<FunctionProtoType>() && 2265 Old->getNumParams() == New->getNumParams()) { 2266 SmallVector<QualType, 16> ArgTypes; 2267 SmallVector<GNUCompatibleParamWarning, 16> Warnings; 2268 const FunctionProtoType *OldProto 2269 = Old->getType()->getAs<FunctionProtoType>(); 2270 const FunctionProtoType *NewProto 2271 = New->getType()->getAs<FunctionProtoType>(); 2272 2273 // Determine whether this is the GNU C extension. 2274 QualType MergedReturn = Context.mergeTypes(OldProto->getResultType(), 2275 NewProto->getResultType()); 2276 bool LooseCompatible = !MergedReturn.isNull(); 2277 for (unsigned Idx = 0, End = Old->getNumParams(); 2278 LooseCompatible && Idx != End; ++Idx) { 2279 ParmVarDecl *OldParm = Old->getParamDecl(Idx); 2280 ParmVarDecl *NewParm = New->getParamDecl(Idx); 2281 if (Context.typesAreCompatible(OldParm->getType(), 2282 NewProto->getArgType(Idx))) { 2283 ArgTypes.push_back(NewParm->getType()); 2284 } else if (Context.typesAreCompatible(OldParm->getType(), 2285 NewParm->getType(), 2286 /*CompareUnqualified=*/true)) { 2287 GNUCompatibleParamWarning Warn 2288 = { OldParm, NewParm, NewProto->getArgType(Idx) }; 2289 Warnings.push_back(Warn); 2290 ArgTypes.push_back(NewParm->getType()); 2291 } else 2292 LooseCompatible = false; 2293 } 2294 2295 if (LooseCompatible) { 2296 for (unsigned Warn = 0; Warn < Warnings.size(); ++Warn) { 2297 Diag(Warnings[Warn].NewParm->getLocation(), 2298 diag::ext_param_promoted_not_compatible_with_prototype) 2299 << Warnings[Warn].PromotedType 2300 << Warnings[Warn].OldParm->getType(); 2301 if (Warnings[Warn].OldParm->getLocation().isValid()) 2302 Diag(Warnings[Warn].OldParm->getLocation(), 2303 diag::note_previous_declaration); 2304 } 2305 2306 New->setType(Context.getFunctionType(MergedReturn, &ArgTypes[0], 2307 ArgTypes.size(), 2308 OldProto->getExtProtoInfo())); 2309 return MergeCompatibleFunctionDecls(New, Old, S); 2310 } 2311 2312 // Fall through to diagnose conflicting types. 2313 } 2314 2315 // A function that has already been declared has been redeclared or defined 2316 // with a different type- show appropriate diagnostic 2317 if (unsigned BuiltinID = Old->getBuiltinID()) { 2318 // The user has declared a builtin function with an incompatible 2319 // signature. 2320 if (Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID)) { 2321 // The function the user is redeclaring is a library-defined 2322 // function like 'malloc' or 'printf'. Warn about the 2323 // redeclaration, then pretend that we don't know about this 2324 // library built-in. 2325 Diag(New->getLocation(), diag::warn_redecl_library_builtin) << New; 2326 Diag(Old->getLocation(), diag::note_previous_builtin_declaration) 2327 << Old << Old->getType(); 2328 New->getIdentifier()->setBuiltinID(Builtin::NotBuiltin); 2329 Old->setInvalidDecl(); 2330 return false; 2331 } 2332 2333 PrevDiag = diag::note_previous_builtin_declaration; 2334 } 2335 2336 Diag(New->getLocation(), diag::err_conflicting_types) << New->getDeclName(); 2337 Diag(Old->getLocation(), PrevDiag) << Old << Old->getType(); 2338 return true; 2339 } 2340 2341 /// \brief Completes the merge of two function declarations that are 2342 /// known to be compatible. 2343 /// 2344 /// This routine handles the merging of attributes and other 2345 /// properties of function declarations form the old declaration to 2346 /// the new declaration, once we know that New is in fact a 2347 /// redeclaration of Old. 2348 /// 2349 /// \returns false 2350 bool Sema::MergeCompatibleFunctionDecls(FunctionDecl *New, FunctionDecl *Old, 2351 Scope *S) { 2352 // Merge the attributes 2353 mergeDeclAttributes(New, Old); 2354 2355 // Merge the storage class. 2356 if (Old->getStorageClass() != SC_Extern && 2357 Old->getStorageClass() != SC_None) 2358 New->setStorageClass(Old->getStorageClass()); 2359 2360 // Merge "pure" flag. 2361 if (Old->isPure()) 2362 New->setPure(); 2363 2364 // Merge attributes from the parameters. These can mismatch with K&R 2365 // declarations. 2366 if (New->getNumParams() == Old->getNumParams()) 2367 for (unsigned i = 0, e = New->getNumParams(); i != e; ++i) 2368 mergeParamDeclAttributes(New->getParamDecl(i), Old->getParamDecl(i), 2369 Context); 2370 2371 if (getLangOpts().CPlusPlus) 2372 return MergeCXXFunctionDecl(New, Old, S); 2373 2374 return false; 2375 } 2376 2377 2378 void Sema::mergeObjCMethodDecls(ObjCMethodDecl *newMethod, 2379 ObjCMethodDecl *oldMethod) { 2380 2381 // Merge the attributes, including deprecated/unavailable 2382 mergeDeclAttributes(newMethod, oldMethod, /* mergeDeprecation */true); 2383 2384 // Merge attributes from the parameters. 2385 ObjCMethodDecl::param_const_iterator oi = oldMethod->param_begin(), 2386 oe = oldMethod->param_end(); 2387 for (ObjCMethodDecl::param_iterator 2388 ni = newMethod->param_begin(), ne = newMethod->param_end(); 2389 ni != ne && oi != oe; ++ni, ++oi) 2390 mergeParamDeclAttributes(*ni, *oi, Context); 2391 2392 CheckObjCMethodOverride(newMethod, oldMethod, true); 2393 } 2394 2395 /// MergeVarDeclTypes - We parsed a variable 'New' which has the same name and 2396 /// scope as a previous declaration 'Old'. Figure out how to merge their types, 2397 /// emitting diagnostics as appropriate. 2398 /// 2399 /// Declarations using the auto type specifier (C++ [decl.spec.auto]) call back 2400 /// to here in AddInitializerToDecl. We can't check them before the initializer 2401 /// is attached. 2402 void Sema::MergeVarDeclTypes(VarDecl *New, VarDecl *Old) { 2403 if (New->isInvalidDecl() || Old->isInvalidDecl()) 2404 return; 2405 2406 QualType MergedT; 2407 if (getLangOpts().CPlusPlus) { 2408 AutoType *AT = New->getType()->getContainedAutoType(); 2409 if (AT && !AT->isDeduced()) { 2410 // We don't know what the new type is until the initializer is attached. 2411 return; 2412 } else if (Context.hasSameType(New->getType(), Old->getType())) { 2413 // These could still be something that needs exception specs checked. 2414 return MergeVarDeclExceptionSpecs(New, Old); 2415 } 2416 // C++ [basic.link]p10: 2417 // [...] the types specified by all declarations referring to a given 2418 // object or function shall be identical, except that declarations for an 2419 // array object can specify array types that differ by the presence or 2420 // absence of a major array bound (8.3.4). 2421 else if (Old->getType()->isIncompleteArrayType() && 2422 New->getType()->isArrayType()) { 2423 CanQual<ArrayType> OldArray 2424 = Context.getCanonicalType(Old->getType())->getAs<ArrayType>(); 2425 CanQual<ArrayType> NewArray 2426 = Context.getCanonicalType(New->getType())->getAs<ArrayType>(); 2427 if (OldArray->getElementType() == NewArray->getElementType()) 2428 MergedT = New->getType(); 2429 } else if (Old->getType()->isArrayType() && 2430 New->getType()->isIncompleteArrayType()) { 2431 CanQual<ArrayType> OldArray 2432 = Context.getCanonicalType(Old->getType())->getAs<ArrayType>(); 2433 CanQual<ArrayType> NewArray 2434 = Context.getCanonicalType(New->getType())->getAs<ArrayType>(); 2435 if (OldArray->getElementType() == NewArray->getElementType()) 2436 MergedT = Old->getType(); 2437 } else if (New->getType()->isObjCObjectPointerType() 2438 && Old->getType()->isObjCObjectPointerType()) { 2439 MergedT = Context.mergeObjCGCQualifiers(New->getType(), 2440 Old->getType()); 2441 } 2442 } else { 2443 MergedT = Context.mergeTypes(New->getType(), Old->getType()); 2444 } 2445 if (MergedT.isNull()) { 2446 Diag(New->getLocation(), diag::err_redefinition_different_type) 2447 << New->getDeclName() << New->getType() << Old->getType(); 2448 Diag(Old->getLocation(), diag::note_previous_definition); 2449 return New->setInvalidDecl(); 2450 } 2451 New->setType(MergedT); 2452 } 2453 2454 /// MergeVarDecl - We just parsed a variable 'New' which has the same name 2455 /// and scope as a previous declaration 'Old'. Figure out how to resolve this 2456 /// situation, merging decls or emitting diagnostics as appropriate. 2457 /// 2458 /// Tentative definition rules (C99 6.9.2p2) are checked by 2459 /// FinalizeDeclaratorGroup. Unfortunately, we can't analyze tentative 2460 /// definitions here, since the initializer hasn't been attached. 2461 /// 2462 void Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) { 2463 // If the new decl is already invalid, don't do any other checking. 2464 if (New->isInvalidDecl()) 2465 return; 2466 2467 // Verify the old decl was also a variable. 2468 VarDecl *Old = 0; 2469 if (!Previous.isSingleResult() || 2470 !(Old = dyn_cast<VarDecl>(Previous.getFoundDecl()))) { 2471 Diag(New->getLocation(), diag::err_redefinition_different_kind) 2472 << New->getDeclName(); 2473 Diag(Previous.getRepresentativeDecl()->getLocation(), 2474 diag::note_previous_definition); 2475 return New->setInvalidDecl(); 2476 } 2477 2478 // C++ [class.mem]p1: 2479 // A member shall not be declared twice in the member-specification [...] 2480 // 2481 // Here, we need only consider static data members. 2482 if (Old->isStaticDataMember() && !New->isOutOfLine()) { 2483 Diag(New->getLocation(), diag::err_duplicate_member) 2484 << New->getIdentifier(); 2485 Diag(Old->getLocation(), diag::note_previous_declaration); 2486 New->setInvalidDecl(); 2487 } 2488 2489 mergeDeclAttributes(New, Old); 2490 // Warn if an already-declared variable is made a weak_import in a subsequent 2491 // declaration 2492 if (New->getAttr<WeakImportAttr>() && 2493 Old->getStorageClass() == SC_None && 2494 !Old->getAttr<WeakImportAttr>()) { 2495 Diag(New->getLocation(), diag::warn_weak_import) << New->getDeclName(); 2496 Diag(Old->getLocation(), diag::note_previous_definition); 2497 // Remove weak_import attribute on new declaration. 2498 New->dropAttr<WeakImportAttr>(); 2499 } 2500 2501 // Merge the types. 2502 MergeVarDeclTypes(New, Old); 2503 if (New->isInvalidDecl()) 2504 return; 2505 2506 // C99 6.2.2p4: Check if we have a static decl followed by a non-static. 2507 if (New->getStorageClass() == SC_Static && 2508 (Old->getStorageClass() == SC_None || Old->hasExternalStorage())) { 2509 Diag(New->getLocation(), diag::err_static_non_static) << New->getDeclName(); 2510 Diag(Old->getLocation(), diag::note_previous_definition); 2511 return New->setInvalidDecl(); 2512 } 2513 // C99 6.2.2p4: 2514 // For an identifier declared with the storage-class specifier 2515 // extern in a scope in which a prior declaration of that 2516 // identifier is visible,23) if the prior declaration specifies 2517 // internal or external linkage, the linkage of the identifier at 2518 // the later declaration is the same as the linkage specified at 2519 // the prior declaration. If no prior declaration is visible, or 2520 // if the prior declaration specifies no linkage, then the 2521 // identifier has external linkage. 2522 if (New->hasExternalStorage() && Old->hasLinkage()) 2523 /* Okay */; 2524 else if (New->getStorageClass() != SC_Static && 2525 Old->getStorageClass() == SC_Static) { 2526 Diag(New->getLocation(), diag::err_non_static_static) << New->getDeclName(); 2527 Diag(Old->getLocation(), diag::note_previous_definition); 2528 return New->setInvalidDecl(); 2529 } 2530 2531 // Check if extern is followed by non-extern and vice-versa. 2532 if (New->hasExternalStorage() && 2533 !Old->hasLinkage() && Old->isLocalVarDecl()) { 2534 Diag(New->getLocation(), diag::err_extern_non_extern) << New->getDeclName(); 2535 Diag(Old->getLocation(), diag::note_previous_definition); 2536 return New->setInvalidDecl(); 2537 } 2538 if (Old->hasExternalStorage() && 2539 !New->hasLinkage() && New->isLocalVarDecl()) { 2540 Diag(New->getLocation(), diag::err_non_extern_extern) << New->getDeclName(); 2541 Diag(Old->getLocation(), diag::note_previous_definition); 2542 return New->setInvalidDecl(); 2543 } 2544 2545 // Variables with external linkage are analyzed in FinalizeDeclaratorGroup. 2546 2547 // FIXME: The test for external storage here seems wrong? We still 2548 // need to check for mismatches. 2549 if (!New->hasExternalStorage() && !New->isFileVarDecl() && 2550 // Don't complain about out-of-line definitions of static members. 2551 !(Old->getLexicalDeclContext()->isRecord() && 2552 !New->getLexicalDeclContext()->isRecord())) { 2553 Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName(); 2554 Diag(Old->getLocation(), diag::note_previous_definition); 2555 return New->setInvalidDecl(); 2556 } 2557 2558 if (New->isThreadSpecified() && !Old->isThreadSpecified()) { 2559 Diag(New->getLocation(), diag::err_thread_non_thread) << New->getDeclName(); 2560 Diag(Old->getLocation(), diag::note_previous_definition); 2561 } else if (!New->isThreadSpecified() && Old->isThreadSpecified()) { 2562 Diag(New->getLocation(), diag::err_non_thread_thread) << New->getDeclName(); 2563 Diag(Old->getLocation(), diag::note_previous_definition); 2564 } 2565 2566 // C++ doesn't have tentative definitions, so go right ahead and check here. 2567 const VarDecl *Def; 2568 if (getLangOpts().CPlusPlus && 2569 New->isThisDeclarationADefinition() == VarDecl::Definition && 2570 (Def = Old->getDefinition())) { 2571 Diag(New->getLocation(), diag::err_redefinition) 2572 << New->getDeclName(); 2573 Diag(Def->getLocation(), diag::note_previous_definition); 2574 New->setInvalidDecl(); 2575 return; 2576 } 2577 // c99 6.2.2 P4. 2578 // For an identifier declared with the storage-class specifier extern in a 2579 // scope in which a prior declaration of that identifier is visible, if 2580 // the prior declaration specifies internal or external linkage, the linkage 2581 // of the identifier at the later declaration is the same as the linkage 2582 // specified at the prior declaration. 2583 // FIXME. revisit this code. 2584 if (New->hasExternalStorage() && 2585 Old->getLinkage() == InternalLinkage && 2586 New->getDeclContext() == Old->getDeclContext()) 2587 New->setStorageClass(Old->getStorageClass()); 2588 2589 // Keep a chain of previous declarations. 2590 New->setPreviousDeclaration(Old); 2591 2592 // Inherit access appropriately. 2593 New->setAccess(Old->getAccess()); 2594 } 2595 2596 /// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with 2597 /// no declarator (e.g. "struct foo;") is parsed. 2598 Decl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, 2599 DeclSpec &DS) { 2600 return ParsedFreeStandingDeclSpec(S, AS, DS, MultiTemplateParamsArg()); 2601 } 2602 2603 /// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with 2604 /// no declarator (e.g. "struct foo;") is parsed. It also accopts template 2605 /// parameters to cope with template friend declarations. 2606 Decl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, 2607 DeclSpec &DS, 2608 MultiTemplateParamsArg TemplateParams) { 2609 Decl *TagD = 0; 2610 TagDecl *Tag = 0; 2611 if (DS.getTypeSpecType() == DeclSpec::TST_class || 2612 DS.getTypeSpecType() == DeclSpec::TST_struct || 2613 DS.getTypeSpecType() == DeclSpec::TST_interface || 2614 DS.getTypeSpecType() == DeclSpec::TST_union || 2615 DS.getTypeSpecType() == DeclSpec::TST_enum) { 2616 TagD = DS.getRepAsDecl(); 2617 2618 if (!TagD) // We probably had an error 2619 return 0; 2620 2621 // Note that the above type specs guarantee that the 2622 // type rep is a Decl, whereas in many of the others 2623 // it's a Type. 2624 if (isa<TagDecl>(TagD)) 2625 Tag = cast<TagDecl>(TagD); 2626 else if (ClassTemplateDecl *CTD = dyn_cast<ClassTemplateDecl>(TagD)) 2627 Tag = CTD->getTemplatedDecl(); 2628 } 2629 2630 if (Tag) { 2631 Tag->setFreeStanding(); 2632 if (Tag->isInvalidDecl()) 2633 return Tag; 2634 } 2635 2636 if (unsigned TypeQuals = DS.getTypeQualifiers()) { 2637 // Enforce C99 6.7.3p2: "Types other than pointer types derived from object 2638 // or incomplete types shall not be restrict-qualified." 2639 if (TypeQuals & DeclSpec::TQ_restrict) 2640 Diag(DS.getRestrictSpecLoc(), 2641 diag::err_typecheck_invalid_restrict_not_pointer_noarg) 2642 << DS.getSourceRange(); 2643 } 2644 2645 if (DS.isConstexprSpecified()) { 2646 // C++0x [dcl.constexpr]p1: constexpr can only be applied to declarations 2647 // and definitions of functions and variables. 2648 if (Tag) 2649 Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_tag) 2650 << (DS.getTypeSpecType() == DeclSpec::TST_class ? 0 : 2651 DS.getTypeSpecType() == DeclSpec::TST_struct ? 1 : 2652 DS.getTypeSpecType() == DeclSpec::TST_interface ? 2 : 2653 DS.getTypeSpecType() == DeclSpec::TST_union ? 3 : 4); 2654 else 2655 Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_no_declarators); 2656 // Don't emit warnings after this error. 2657 return TagD; 2658 } 2659 2660 if (DS.isFriendSpecified()) { 2661 // If we're dealing with a decl but not a TagDecl, assume that 2662 // whatever routines created it handled the friendship aspect. 2663 if (TagD && !Tag) 2664 return 0; 2665 return ActOnFriendTypeDecl(S, DS, TemplateParams); 2666 } 2667 2668 // Track whether we warned about the fact that there aren't any 2669 // declarators. 2670 bool emittedWarning = false; 2671 2672 if (RecordDecl *Record = dyn_cast_or_null<RecordDecl>(Tag)) { 2673 if (!Record->getDeclName() && Record->isCompleteDefinition() && 2674 DS.getStorageClassSpec() != DeclSpec::SCS_typedef) { 2675 if (getLangOpts().CPlusPlus || 2676 Record->getDeclContext()->isRecord()) 2677 return BuildAnonymousStructOrUnion(S, DS, AS, Record); 2678 2679 Diag(DS.getLocStart(), diag::ext_no_declarators) 2680 << DS.getSourceRange(); 2681 emittedWarning = true; 2682 } 2683 } 2684 2685 // Check for Microsoft C extension: anonymous struct. 2686 if (getLangOpts().MicrosoftExt && !getLangOpts().CPlusPlus && 2687 CurContext->isRecord() && 2688 DS.getStorageClassSpec() == DeclSpec::SCS_unspecified) { 2689 // Handle 2 kinds of anonymous struct: 2690 // struct STRUCT; 2691 // and 2692 // STRUCT_TYPE; <- where STRUCT_TYPE is a typedef struct. 2693 RecordDecl *Record = dyn_cast_or_null<RecordDecl>(Tag); 2694 if ((Record && Record->getDeclName() && !Record->isCompleteDefinition()) || 2695 (DS.getTypeSpecType() == DeclSpec::TST_typename && 2696 DS.getRepAsType().get()->isStructureType())) { 2697 Diag(DS.getLocStart(), diag::ext_ms_anonymous_struct) 2698 << DS.getSourceRange(); 2699 return BuildMicrosoftCAnonymousStruct(S, DS, Record); 2700 } 2701 } 2702 2703 if (getLangOpts().CPlusPlus && 2704 DS.getStorageClassSpec() != DeclSpec::SCS_typedef) 2705 if (EnumDecl *Enum = dyn_cast_or_null<EnumDecl>(Tag)) 2706 if (Enum->enumerator_begin() == Enum->enumerator_end() && 2707 !Enum->getIdentifier() && !Enum->isInvalidDecl()) { 2708 Diag(Enum->getLocation(), diag::ext_no_declarators) 2709 << DS.getSourceRange(); 2710 emittedWarning = true; 2711 } 2712 2713 // Skip all the checks below if we have a type error. 2714 if (DS.getTypeSpecType() == DeclSpec::TST_error) return TagD; 2715 2716 if (!DS.isMissingDeclaratorOk()) { 2717 // Warn about typedefs of enums without names, since this is an 2718 // extension in both Microsoft and GNU. 2719 if (DS.getStorageClassSpec() == DeclSpec::SCS_typedef && 2720 Tag && isa<EnumDecl>(Tag)) { 2721 Diag(DS.getLocStart(), diag::ext_typedef_without_a_name) 2722 << DS.getSourceRange(); 2723 return Tag; 2724 } 2725 2726 Diag(DS.getLocStart(), diag::ext_no_declarators) 2727 << DS.getSourceRange(); 2728 emittedWarning = true; 2729 } 2730 2731 // We're going to complain about a bunch of spurious specifiers; 2732 // only do this if we're declaring a tag, because otherwise we 2733 // should be getting diag::ext_no_declarators. 2734 if (emittedWarning || (TagD && TagD->isInvalidDecl())) 2735 return TagD; 2736 2737 // Note that a linkage-specification sets a storage class, but 2738 // 'extern "C" struct foo;' is actually valid and not theoretically 2739 // useless. 2740 if (DeclSpec::SCS scs = DS.getStorageClassSpec()) 2741 if (!DS.isExternInLinkageSpec()) 2742 Diag(DS.getStorageClassSpecLoc(), diag::warn_standalone_specifier) 2743 << DeclSpec::getSpecifierName(scs); 2744 2745 if (DS.isThreadSpecified()) 2746 Diag(DS.getThreadSpecLoc(), diag::warn_standalone_specifier) << "__thread"; 2747 if (DS.getTypeQualifiers()) { 2748 if (DS.getTypeQualifiers() & DeclSpec::TQ_const) 2749 Diag(DS.getConstSpecLoc(), diag::warn_standalone_specifier) << "const"; 2750 if (DS.getTypeQualifiers() & DeclSpec::TQ_volatile) 2751 Diag(DS.getConstSpecLoc(), diag::warn_standalone_specifier) << "volatile"; 2752 // Restrict is covered above. 2753 } 2754 if (DS.isInlineSpecified()) 2755 Diag(DS.getInlineSpecLoc(), diag::warn_standalone_specifier) << "inline"; 2756 if (DS.isVirtualSpecified()) 2757 Diag(DS.getVirtualSpecLoc(), diag::warn_standalone_specifier) << "virtual"; 2758 if (DS.isExplicitSpecified()) 2759 Diag(DS.getExplicitSpecLoc(), diag::warn_standalone_specifier) <<"explicit"; 2760 2761 if (DS.isModulePrivateSpecified() && 2762 Tag && Tag->getDeclContext()->isFunctionOrMethod()) 2763 Diag(DS.getModulePrivateSpecLoc(), diag::err_module_private_local_class) 2764 << Tag->getTagKind() 2765 << FixItHint::CreateRemoval(DS.getModulePrivateSpecLoc()); 2766 2767 // Warn about ignored type attributes, for example: 2768 // __attribute__((aligned)) struct A; 2769 // Attributes should be placed after tag to apply to type declaration. 2770 if (!DS.getAttributes().empty()) { 2771 DeclSpec::TST TypeSpecType = DS.getTypeSpecType(); 2772 if (TypeSpecType == DeclSpec::TST_class || 2773 TypeSpecType == DeclSpec::TST_struct || 2774 TypeSpecType == DeclSpec::TST_interface || 2775 TypeSpecType == DeclSpec::TST_union || 2776 TypeSpecType == DeclSpec::TST_enum) { 2777 AttributeList* attrs = DS.getAttributes().getList(); 2778 while (attrs) { 2779 Diag(attrs->getLoc(), diag::warn_declspec_attribute_ignored) 2780 << attrs->getName() 2781 << (TypeSpecType == DeclSpec::TST_class ? 0 : 2782 TypeSpecType == DeclSpec::TST_struct ? 1 : 2783 TypeSpecType == DeclSpec::TST_union ? 2 : 2784 TypeSpecType == DeclSpec::TST_interface ? 3 : 4); 2785 attrs = attrs->getNext(); 2786 } 2787 } 2788 } 2789 2790 ActOnDocumentableDecl(TagD); 2791 2792 return TagD; 2793 } 2794 2795 /// We are trying to inject an anonymous member into the given scope; 2796 /// check if there's an existing declaration that can't be overloaded. 2797 /// 2798 /// \return true if this is a forbidden redeclaration 2799 static bool CheckAnonMemberRedeclaration(Sema &SemaRef, 2800 Scope *S, 2801 DeclContext *Owner, 2802 DeclarationName Name, 2803 SourceLocation NameLoc, 2804 unsigned diagnostic) { 2805 LookupResult R(SemaRef, Name, NameLoc, Sema::LookupMemberName, 2806 Sema::ForRedeclaration); 2807 if (!SemaRef.LookupName(R, S)) return false; 2808 2809 if (R.getAsSingle<TagDecl>()) 2810 return false; 2811 2812 // Pick a representative declaration. 2813 NamedDecl *PrevDecl = R.getRepresentativeDecl()->getUnderlyingDecl(); 2814 assert(PrevDecl && "Expected a non-null Decl"); 2815 2816 if (!SemaRef.isDeclInScope(PrevDecl, Owner, S)) 2817 return false; 2818 2819 SemaRef.Diag(NameLoc, diagnostic) << Name; 2820 SemaRef.Diag(PrevDecl->getLocation(), diag::note_previous_declaration); 2821 2822 return true; 2823 } 2824 2825 /// InjectAnonymousStructOrUnionMembers - Inject the members of the 2826 /// anonymous struct or union AnonRecord into the owning context Owner 2827 /// and scope S. This routine will be invoked just after we realize 2828 /// that an unnamed union or struct is actually an anonymous union or 2829 /// struct, e.g., 2830 /// 2831 /// @code 2832 /// union { 2833 /// int i; 2834 /// float f; 2835 /// }; // InjectAnonymousStructOrUnionMembers called here to inject i and 2836 /// // f into the surrounding scope.x 2837 /// @endcode 2838 /// 2839 /// This routine is recursive, injecting the names of nested anonymous 2840 /// structs/unions into the owning context and scope as well. 2841 static bool InjectAnonymousStructOrUnionMembers(Sema &SemaRef, Scope *S, 2842 DeclContext *Owner, 2843 RecordDecl *AnonRecord, 2844 AccessSpecifier AS, 2845 SmallVector<NamedDecl*, 2> &Chaining, 2846 bool MSAnonStruct) { 2847 unsigned diagKind 2848 = AnonRecord->isUnion() ? diag::err_anonymous_union_member_redecl 2849 : diag::err_anonymous_struct_member_redecl; 2850 2851 bool Invalid = false; 2852 2853 // Look every FieldDecl and IndirectFieldDecl with a name. 2854 for (RecordDecl::decl_iterator D = AnonRecord->decls_begin(), 2855 DEnd = AnonRecord->decls_end(); 2856 D != DEnd; ++D) { 2857 if ((isa<FieldDecl>(*D) || isa<IndirectFieldDecl>(*D)) && 2858 cast<NamedDecl>(*D)->getDeclName()) { 2859 ValueDecl *VD = cast<ValueDecl>(*D); 2860 if (CheckAnonMemberRedeclaration(SemaRef, S, Owner, VD->getDeclName(), 2861 VD->getLocation(), diagKind)) { 2862 // C++ [class.union]p2: 2863 // The names of the members of an anonymous union shall be 2864 // distinct from the names of any other entity in the 2865 // scope in which the anonymous union is declared. 2866 Invalid = true; 2867 } else { 2868 // C++ [class.union]p2: 2869 // For the purpose of name lookup, after the anonymous union 2870 // definition, the members of the anonymous union are 2871 // considered to have been defined in the scope in which the 2872 // anonymous union is declared. 2873 unsigned OldChainingSize = Chaining.size(); 2874 if (IndirectFieldDecl *IF = dyn_cast<IndirectFieldDecl>(VD)) 2875 for (IndirectFieldDecl::chain_iterator PI = IF->chain_begin(), 2876 PE = IF->chain_end(); PI != PE; ++PI) 2877 Chaining.push_back(*PI); 2878 else 2879 Chaining.push_back(VD); 2880 2881 assert(Chaining.size() >= 2); 2882 NamedDecl **NamedChain = 2883 new (SemaRef.Context)NamedDecl*[Chaining.size()]; 2884 for (unsigned i = 0; i < Chaining.size(); i++) 2885 NamedChain[i] = Chaining[i]; 2886 2887 IndirectFieldDecl* IndirectField = 2888 IndirectFieldDecl::Create(SemaRef.Context, Owner, VD->getLocation(), 2889 VD->getIdentifier(), VD->getType(), 2890 NamedChain, Chaining.size()); 2891 2892 IndirectField->setAccess(AS); 2893 IndirectField->setImplicit(); 2894 SemaRef.PushOnScopeChains(IndirectField, S); 2895 2896 // That includes picking up the appropriate access specifier. 2897 if (AS != AS_none) IndirectField->setAccess(AS); 2898 2899 Chaining.resize(OldChainingSize); 2900 } 2901 } 2902 } 2903 2904 return Invalid; 2905 } 2906 2907 /// StorageClassSpecToVarDeclStorageClass - Maps a DeclSpec::SCS to 2908 /// a VarDecl::StorageClass. Any error reporting is up to the caller: 2909 /// illegal input values are mapped to SC_None. 2910 static StorageClass 2911 StorageClassSpecToVarDeclStorageClass(DeclSpec::SCS StorageClassSpec) { 2912 switch (StorageClassSpec) { 2913 case DeclSpec::SCS_unspecified: return SC_None; 2914 case DeclSpec::SCS_extern: return SC_Extern; 2915 case DeclSpec::SCS_static: return SC_Static; 2916 case DeclSpec::SCS_auto: return SC_Auto; 2917 case DeclSpec::SCS_register: return SC_Register; 2918 case DeclSpec::SCS_private_extern: return SC_PrivateExtern; 2919 // Illegal SCSs map to None: error reporting is up to the caller. 2920 case DeclSpec::SCS_mutable: // Fall through. 2921 case DeclSpec::SCS_typedef: return SC_None; 2922 } 2923 llvm_unreachable("unknown storage class specifier"); 2924 } 2925 2926 /// StorageClassSpecToFunctionDeclStorageClass - Maps a DeclSpec::SCS to 2927 /// a StorageClass. Any error reporting is up to the caller: 2928 /// illegal input values are mapped to SC_None. 2929 static StorageClass 2930 StorageClassSpecToFunctionDeclStorageClass(DeclSpec::SCS StorageClassSpec) { 2931 switch (StorageClassSpec) { 2932 case DeclSpec::SCS_unspecified: return SC_None; 2933 case DeclSpec::SCS_extern: return SC_Extern; 2934 case DeclSpec::SCS_static: return SC_Static; 2935 case DeclSpec::SCS_private_extern: return SC_PrivateExtern; 2936 // Illegal SCSs map to None: error reporting is up to the caller. 2937 case DeclSpec::SCS_auto: // Fall through. 2938 case DeclSpec::SCS_mutable: // Fall through. 2939 case DeclSpec::SCS_register: // Fall through. 2940 case DeclSpec::SCS_typedef: return SC_None; 2941 } 2942 llvm_unreachable("unknown storage class specifier"); 2943 } 2944 2945 /// BuildAnonymousStructOrUnion - Handle the declaration of an 2946 /// anonymous structure or union. Anonymous unions are a C++ feature 2947 /// (C++ [class.union]) and a C11 feature; anonymous structures 2948 /// are a C11 feature and GNU C++ extension. 2949 Decl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, 2950 AccessSpecifier AS, 2951 RecordDecl *Record) { 2952 DeclContext *Owner = Record->getDeclContext(); 2953 2954 // Diagnose whether this anonymous struct/union is an extension. 2955 if (Record->isUnion() && !getLangOpts().CPlusPlus && !getLangOpts().C11) 2956 Diag(Record->getLocation(), diag::ext_anonymous_union); 2957 else if (!Record->isUnion() && getLangOpts().CPlusPlus) 2958 Diag(Record->getLocation(), diag::ext_gnu_anonymous_struct); 2959 else if (!Record->isUnion() && !getLangOpts().C11) 2960 Diag(Record->getLocation(), diag::ext_c11_anonymous_struct); 2961 2962 // C and C++ require different kinds of checks for anonymous 2963 // structs/unions. 2964 bool Invalid = false; 2965 if (getLangOpts().CPlusPlus) { 2966 const char* PrevSpec = 0; 2967 unsigned DiagID; 2968 if (Record->isUnion()) { 2969 // C++ [class.union]p6: 2970 // Anonymous unions declared in a named namespace or in the 2971 // global namespace shall be declared static. 2972 if (DS.getStorageClassSpec() != DeclSpec::SCS_static && 2973 (isa<TranslationUnitDecl>(Owner) || 2974 (isa<NamespaceDecl>(Owner) && 2975 cast<NamespaceDecl>(Owner)->getDeclName()))) { 2976 Diag(Record->getLocation(), diag::err_anonymous_union_not_static) 2977 << FixItHint::CreateInsertion(Record->getLocation(), "static "); 2978 2979 // Recover by adding 'static'. 2980 DS.SetStorageClassSpec(*this, DeclSpec::SCS_static, SourceLocation(), 2981 PrevSpec, DiagID); 2982 } 2983 // C++ [class.union]p6: 2984 // A storage class is not allowed in a declaration of an 2985 // anonymous union in a class scope. 2986 else if (DS.getStorageClassSpec() != DeclSpec::SCS_unspecified && 2987 isa<RecordDecl>(Owner)) { 2988 Diag(DS.getStorageClassSpecLoc(), 2989 diag::err_anonymous_union_with_storage_spec) 2990 << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc()); 2991 2992 // Recover by removing the storage specifier. 2993 DS.SetStorageClassSpec(*this, DeclSpec::SCS_unspecified, 2994 SourceLocation(), 2995 PrevSpec, DiagID); 2996 } 2997 } 2998 2999 // Ignore const/volatile/restrict qualifiers. 3000 if (DS.getTypeQualifiers()) { 3001 if (DS.getTypeQualifiers() & DeclSpec::TQ_const) 3002 Diag(DS.getConstSpecLoc(), diag::ext_anonymous_struct_union_qualified) 3003 << Record->isUnion() << 0 3004 << FixItHint::CreateRemoval(DS.getConstSpecLoc()); 3005 if (DS.getTypeQualifiers() & DeclSpec::TQ_volatile) 3006 Diag(DS.getVolatileSpecLoc(), 3007 diag::ext_anonymous_struct_union_qualified) 3008 << Record->isUnion() << 1 3009 << FixItHint::CreateRemoval(DS.getVolatileSpecLoc()); 3010 if (DS.getTypeQualifiers() & DeclSpec::TQ_restrict) 3011 Diag(DS.getRestrictSpecLoc(), 3012 diag::ext_anonymous_struct_union_qualified) 3013 << Record->isUnion() << 2 3014 << FixItHint::CreateRemoval(DS.getRestrictSpecLoc()); 3015 3016 DS.ClearTypeQualifiers(); 3017 } 3018 3019 // C++ [class.union]p2: 3020 // The member-specification of an anonymous union shall only 3021 // define non-static data members. [Note: nested types and 3022 // functions cannot be declared within an anonymous union. ] 3023 for (DeclContext::decl_iterator Mem = Record->decls_begin(), 3024 MemEnd = Record->decls_end(); 3025 Mem != MemEnd; ++Mem) { 3026 if (FieldDecl *FD = dyn_cast<FieldDecl>(*Mem)) { 3027 // C++ [class.union]p3: 3028 // An anonymous union shall not have private or protected 3029 // members (clause 11). 3030 assert(FD->getAccess() != AS_none); 3031 if (FD->getAccess() != AS_public) { 3032 Diag(FD->getLocation(), diag::err_anonymous_record_nonpublic_member) 3033 << (int)Record->isUnion() << (int)(FD->getAccess() == AS_protected); 3034 Invalid = true; 3035 } 3036 3037 // C++ [class.union]p1 3038 // An object of a class with a non-trivial constructor, a non-trivial 3039 // copy constructor, a non-trivial destructor, or a non-trivial copy 3040 // assignment operator cannot be a member of a union, nor can an 3041 // array of such objects. 3042 if (CheckNontrivialField(FD)) 3043 Invalid = true; 3044 } else if ((*Mem)->isImplicit()) { 3045 // Any implicit members are fine. 3046 } else if (isa<TagDecl>(*Mem) && (*Mem)->getDeclContext() != Record) { 3047 // This is a type that showed up in an 3048 // elaborated-type-specifier inside the anonymous struct or 3049 // union, but which actually declares a type outside of the 3050 // anonymous struct or union. It's okay. 3051 } else if (RecordDecl *MemRecord = dyn_cast<RecordDecl>(*Mem)) { 3052 if (!MemRecord->isAnonymousStructOrUnion() && 3053 MemRecord->getDeclName()) { 3054 // Visual C++ allows type definition in anonymous struct or union. 3055 if (getLangOpts().MicrosoftExt) 3056 Diag(MemRecord->getLocation(), diag::ext_anonymous_record_with_type) 3057 << (int)Record->isUnion(); 3058 else { 3059 // This is a nested type declaration. 3060 Diag(MemRecord->getLocation(), diag::err_anonymous_record_with_type) 3061 << (int)Record->isUnion(); 3062 Invalid = true; 3063 } 3064 } 3065 } else if (isa<AccessSpecDecl>(*Mem)) { 3066 // Any access specifier is fine. 3067 } else { 3068 // We have something that isn't a non-static data 3069 // member. Complain about it. 3070 unsigned DK = diag::err_anonymous_record_bad_member; 3071 if (isa<TypeDecl>(*Mem)) 3072 DK = diag::err_anonymous_record_with_type; 3073 else if (isa<FunctionDecl>(*Mem)) 3074 DK = diag::err_anonymous_record_with_function; 3075 else if (isa<VarDecl>(*Mem)) 3076 DK = diag::err_anonymous_record_with_static; 3077 3078 // Visual C++ allows type definition in anonymous struct or union. 3079 if (getLangOpts().MicrosoftExt && 3080 DK == diag::err_anonymous_record_with_type) 3081 Diag((*Mem)->getLocation(), diag::ext_anonymous_record_with_type) 3082 << (int)Record->isUnion(); 3083 else { 3084 Diag((*Mem)->getLocation(), DK) 3085 << (int)Record->isUnion(); 3086 Invalid = true; 3087 } 3088 } 3089 } 3090 } 3091 3092 if (!Record->isUnion() && !Owner->isRecord()) { 3093 Diag(Record->getLocation(), diag::err_anonymous_struct_not_member) 3094 << (int)getLangOpts().CPlusPlus; 3095 Invalid = true; 3096 } 3097 3098 // Mock up a declarator. 3099 Declarator Dc(DS, Declarator::MemberContext); 3100 TypeSourceInfo *TInfo = GetTypeForDeclarator(Dc, S); 3101 assert(TInfo && "couldn't build declarator info for anonymous struct/union"); 3102 3103 // Create a declaration for this anonymous struct/union. 3104 NamedDecl *Anon = 0; 3105 if (RecordDecl *OwningClass = dyn_cast<RecordDecl>(Owner)) { 3106 Anon = FieldDecl::Create(Context, OwningClass, 3107 DS.getLocStart(), 3108 Record->getLocation(), 3109 /*IdentifierInfo=*/0, 3110 Context.getTypeDeclType(Record), 3111 TInfo, 3112 /*BitWidth=*/0, /*Mutable=*/false, 3113 /*InitStyle=*/ICIS_NoInit); 3114 Anon->setAccess(AS); 3115 if (getLangOpts().CPlusPlus) 3116 FieldCollector->Add(cast<FieldDecl>(Anon)); 3117 } else { 3118 DeclSpec::SCS SCSpec = DS.getStorageClassSpec(); 3119 assert(SCSpec != DeclSpec::SCS_typedef && 3120 "Parser allowed 'typedef' as storage class VarDecl."); 3121 VarDecl::StorageClass SC = StorageClassSpecToVarDeclStorageClass(SCSpec); 3122 if (SCSpec == DeclSpec::SCS_mutable) { 3123 // mutable can only appear on non-static class members, so it's always 3124 // an error here 3125 Diag(Record->getLocation(), diag::err_mutable_nonmember); 3126 Invalid = true; 3127 SC = SC_None; 3128 } 3129 SCSpec = DS.getStorageClassSpecAsWritten(); 3130 VarDecl::StorageClass SCAsWritten 3131 = StorageClassSpecToVarDeclStorageClass(SCSpec); 3132 3133 Anon = VarDecl::Create(Context, Owner, 3134 DS.getLocStart(), 3135 Record->getLocation(), /*IdentifierInfo=*/0, 3136 Context.getTypeDeclType(Record), 3137 TInfo, SC, SCAsWritten); 3138 3139 // Default-initialize the implicit variable. This initialization will be 3140 // trivial in almost all cases, except if a union member has an in-class 3141 // initializer: 3142 // union { int n = 0; }; 3143 ActOnUninitializedDecl(Anon, /*TypeMayContainAuto=*/false); 3144 } 3145 Anon->setImplicit(); 3146 3147 // Add the anonymous struct/union object to the current 3148 // context. We'll be referencing this object when we refer to one of 3149 // its members. 3150 Owner->addDecl(Anon); 3151 3152 // Inject the members of the anonymous struct/union into the owning 3153 // context and into the identifier resolver chain for name lookup 3154 // purposes. 3155 SmallVector<NamedDecl*, 2> Chain; 3156 Chain.push_back(Anon); 3157 3158 if (InjectAnonymousStructOrUnionMembers(*this, S, Owner, Record, AS, 3159 Chain, false)) 3160 Invalid = true; 3161 3162 // Mark this as an anonymous struct/union type. Note that we do not 3163 // do this until after we have already checked and injected the 3164 // members of this anonymous struct/union type, because otherwise 3165 // the members could be injected twice: once by DeclContext when it 3166 // builds its lookup table, and once by 3167 // InjectAnonymousStructOrUnionMembers. 3168 Record->setAnonymousStructOrUnion(true); 3169 3170 if (Invalid) 3171 Anon->setInvalidDecl(); 3172 3173 return Anon; 3174 } 3175 3176 /// BuildMicrosoftCAnonymousStruct - Handle the declaration of an 3177 /// Microsoft C anonymous structure. 3178 /// Ref: http://msdn.microsoft.com/en-us/library/z2cx9y4f.aspx 3179 /// Example: 3180 /// 3181 /// struct A { int a; }; 3182 /// struct B { struct A; int b; }; 3183 /// 3184 /// void foo() { 3185 /// B var; 3186 /// var.a = 3; 3187 /// } 3188 /// 3189 Decl *Sema::BuildMicrosoftCAnonymousStruct(Scope *S, DeclSpec &DS, 3190 RecordDecl *Record) { 3191 3192 // If there is no Record, get the record via the typedef. 3193 if (!Record) 3194 Record = DS.getRepAsType().get()->getAsStructureType()->getDecl(); 3195 3196 // Mock up a declarator. 3197 Declarator Dc(DS, Declarator::TypeNameContext); 3198 TypeSourceInfo *TInfo = GetTypeForDeclarator(Dc, S); 3199 assert(TInfo && "couldn't build declarator info for anonymous struct"); 3200 3201 // Create a declaration for this anonymous struct. 3202 NamedDecl* Anon = FieldDecl::Create(Context, 3203 cast<RecordDecl>(CurContext), 3204 DS.getLocStart(), 3205 DS.getLocStart(), 3206 /*IdentifierInfo=*/0, 3207 Context.getTypeDeclType(Record), 3208 TInfo, 3209 /*BitWidth=*/0, /*Mutable=*/false, 3210 /*InitStyle=*/ICIS_NoInit); 3211 Anon->setImplicit(); 3212 3213 // Add the anonymous struct object to the current context. 3214 CurContext->addDecl(Anon); 3215 3216 // Inject the members of the anonymous struct into the current 3217 // context and into the identifier resolver chain for name lookup 3218 // purposes. 3219 SmallVector<NamedDecl*, 2> Chain; 3220 Chain.push_back(Anon); 3221 3222 RecordDecl *RecordDef = Record->getDefinition(); 3223 if (!RecordDef || InjectAnonymousStructOrUnionMembers(*this, S, CurContext, 3224 RecordDef, AS_none, 3225 Chain, true)) 3226 Anon->setInvalidDecl(); 3227 3228 return Anon; 3229 } 3230 3231 /// GetNameForDeclarator - Determine the full declaration name for the 3232 /// given Declarator. 3233 DeclarationNameInfo Sema::GetNameForDeclarator(Declarator &D) { 3234 return GetNameFromUnqualifiedId(D.getName()); 3235 } 3236 3237 /// \brief Retrieves the declaration name from a parsed unqualified-id. 3238 DeclarationNameInfo 3239 Sema::GetNameFromUnqualifiedId(const UnqualifiedId &Name) { 3240 DeclarationNameInfo NameInfo; 3241 NameInfo.setLoc(Name.StartLocation); 3242 3243 switch (Name.getKind()) { 3244 3245 case UnqualifiedId::IK_ImplicitSelfParam: 3246 case UnqualifiedId::IK_Identifier: 3247 NameInfo.setName(Name.Identifier); 3248 NameInfo.setLoc(Name.StartLocation); 3249 return NameInfo; 3250 3251 case UnqualifiedId::IK_OperatorFunctionId: 3252 NameInfo.setName(Context.DeclarationNames.getCXXOperatorName( 3253 Name.OperatorFunctionId.Operator)); 3254 NameInfo.setLoc(Name.StartLocation); 3255 NameInfo.getInfo().CXXOperatorName.BeginOpNameLoc 3256 = Name.OperatorFunctionId.SymbolLocations[0]; 3257 NameInfo.getInfo().CXXOperatorName.EndOpNameLoc 3258 = Name.EndLocation.getRawEncoding(); 3259 return NameInfo; 3260 3261 case UnqualifiedId::IK_LiteralOperatorId: 3262 NameInfo.setName(Context.DeclarationNames.getCXXLiteralOperatorName( 3263 Name.Identifier)); 3264 NameInfo.setLoc(Name.StartLocation); 3265 NameInfo.setCXXLiteralOperatorNameLoc(Name.EndLocation); 3266 return NameInfo; 3267 3268 case UnqualifiedId::IK_ConversionFunctionId: { 3269 TypeSourceInfo *TInfo; 3270 QualType Ty = GetTypeFromParser(Name.ConversionFunctionId, &TInfo); 3271 if (Ty.isNull()) 3272 return DeclarationNameInfo(); 3273 NameInfo.setName(Context.DeclarationNames.getCXXConversionFunctionName( 3274 Context.getCanonicalType(Ty))); 3275 NameInfo.setLoc(Name.StartLocation); 3276 NameInfo.setNamedTypeInfo(TInfo); 3277 return NameInfo; 3278 } 3279 3280 case UnqualifiedId::IK_ConstructorName: { 3281 TypeSourceInfo *TInfo; 3282 QualType Ty = GetTypeFromParser(Name.ConstructorName, &TInfo); 3283 if (Ty.isNull()) 3284 return DeclarationNameInfo(); 3285 NameInfo.setName(Context.DeclarationNames.getCXXConstructorName( 3286 Context.getCanonicalType(Ty))); 3287 NameInfo.setLoc(Name.StartLocation); 3288 NameInfo.setNamedTypeInfo(TInfo); 3289 return NameInfo; 3290 } 3291 3292 case UnqualifiedId::IK_ConstructorTemplateId: { 3293 // In well-formed code, we can only have a constructor 3294 // template-id that refers to the current context, so go there 3295 // to find the actual type being constructed. 3296 CXXRecordDecl *CurClass = dyn_cast<CXXRecordDecl>(CurContext); 3297 if (!CurClass || CurClass->getIdentifier() != Name.TemplateId->Name) 3298 return DeclarationNameInfo(); 3299 3300 // Determine the type of the class being constructed. 3301 QualType CurClassType = Context.getTypeDeclType(CurClass); 3302 3303 // FIXME: Check two things: that the template-id names the same type as 3304 // CurClassType, and that the template-id does not occur when the name 3305 // was qualified. 3306 3307 NameInfo.setName(Context.DeclarationNames.getCXXConstructorName( 3308 Context.getCanonicalType(CurClassType))); 3309 NameInfo.setLoc(Name.StartLocation); 3310 // FIXME: should we retrieve TypeSourceInfo? 3311 NameInfo.setNamedTypeInfo(0); 3312 return NameInfo; 3313 } 3314 3315 case UnqualifiedId::IK_DestructorName: { 3316 TypeSourceInfo *TInfo; 3317 QualType Ty = GetTypeFromParser(Name.DestructorName, &TInfo); 3318 if (Ty.isNull()) 3319 return DeclarationNameInfo(); 3320 NameInfo.setName(Context.DeclarationNames.getCXXDestructorName( 3321 Context.getCanonicalType(Ty))); 3322 NameInfo.setLoc(Name.StartLocation); 3323 NameInfo.setNamedTypeInfo(TInfo); 3324 return NameInfo; 3325 } 3326 3327 case UnqualifiedId::IK_TemplateId: { 3328 TemplateName TName = Name.TemplateId->Template.get(); 3329 SourceLocation TNameLoc = Name.TemplateId->TemplateNameLoc; 3330 return Context.getNameForTemplate(TName, TNameLoc); 3331 } 3332 3333 } // switch (Name.getKind()) 3334 3335 llvm_unreachable("Unknown name kind"); 3336 } 3337 3338 static QualType getCoreType(QualType Ty) { 3339 do { 3340 if (Ty->isPointerType() || Ty->isReferenceType()) 3341 Ty = Ty->getPointeeType(); 3342 else if (Ty->isArrayType()) 3343 Ty = Ty->castAsArrayTypeUnsafe()->getElementType(); 3344 else 3345 return Ty.withoutLocalFastQualifiers(); 3346 } while (true); 3347 } 3348 3349 /// hasSimilarParameters - Determine whether the C++ functions Declaration 3350 /// and Definition have "nearly" matching parameters. This heuristic is 3351 /// used to improve diagnostics in the case where an out-of-line function 3352 /// definition doesn't match any declaration within the class or namespace. 3353 /// Also sets Params to the list of indices to the parameters that differ 3354 /// between the declaration and the definition. If hasSimilarParameters 3355 /// returns true and Params is empty, then all of the parameters match. 3356 static bool hasSimilarParameters(ASTContext &Context, 3357 FunctionDecl *Declaration, 3358 FunctionDecl *Definition, 3359 llvm::SmallVectorImpl<unsigned> &Params) { 3360 Params.clear(); 3361 if (Declaration->param_size() != Definition->param_size()) 3362 return false; 3363 for (unsigned Idx = 0; Idx < Declaration->param_size(); ++Idx) { 3364 QualType DeclParamTy = Declaration->getParamDecl(Idx)->getType(); 3365 QualType DefParamTy = Definition->getParamDecl(Idx)->getType(); 3366 3367 // The parameter types are identical 3368 if (Context.hasSameType(DefParamTy, DeclParamTy)) 3369 continue; 3370 3371 QualType DeclParamBaseTy = getCoreType(DeclParamTy); 3372 QualType DefParamBaseTy = getCoreType(DefParamTy); 3373 const IdentifierInfo *DeclTyName = DeclParamBaseTy.getBaseTypeIdentifier(); 3374 const IdentifierInfo *DefTyName = DefParamBaseTy.getBaseTypeIdentifier(); 3375 3376 if (Context.hasSameUnqualifiedType(DeclParamBaseTy, DefParamBaseTy) || 3377 (DeclTyName && DeclTyName == DefTyName)) 3378 Params.push_back(Idx); 3379 else // The two parameters aren't even close 3380 return false; 3381 } 3382 3383 return true; 3384 } 3385 3386 /// NeedsRebuildingInCurrentInstantiation - Checks whether the given 3387 /// declarator needs to be rebuilt in the current instantiation. 3388 /// Any bits of declarator which appear before the name are valid for 3389 /// consideration here. That's specifically the type in the decl spec 3390 /// and the base type in any member-pointer chunks. 3391 static bool RebuildDeclaratorInCurrentInstantiation(Sema &S, Declarator &D, 3392 DeclarationName Name) { 3393 // The types we specifically need to rebuild are: 3394 // - typenames, typeofs, and decltypes 3395 // - types which will become injected class names 3396 // Of course, we also need to rebuild any type referencing such a 3397 // type. It's safest to just say "dependent", but we call out a 3398 // few cases here. 3399 3400 DeclSpec &DS = D.getMutableDeclSpec(); 3401 switch (DS.getTypeSpecType()) { 3402 case DeclSpec::TST_typename: 3403 case DeclSpec::TST_typeofType: 3404 case DeclSpec::TST_underlyingType: 3405 case DeclSpec::TST_atomic: { 3406 // Grab the type from the parser. 3407 TypeSourceInfo *TSI = 0; 3408 QualType T = S.GetTypeFromParser(DS.getRepAsType(), &TSI); 3409 if (T.isNull() || !T->isDependentType()) break; 3410 3411 // Make sure there's a type source info. This isn't really much 3412 // of a waste; most dependent types should have type source info 3413 // attached already. 3414 if (!TSI) 3415 TSI = S.Context.getTrivialTypeSourceInfo(T, DS.getTypeSpecTypeLoc()); 3416 3417 // Rebuild the type in the current instantiation. 3418 TSI = S.RebuildTypeInCurrentInstantiation(TSI, D.getIdentifierLoc(), Name); 3419 if (!TSI) return true; 3420 3421 // Store the new type back in the decl spec. 3422 ParsedType LocType = S.CreateParsedType(TSI->getType(), TSI); 3423 DS.UpdateTypeRep(LocType); 3424 break; 3425 } 3426 3427 case DeclSpec::TST_decltype: 3428 case DeclSpec::TST_typeofExpr: { 3429 Expr *E = DS.getRepAsExpr(); 3430 ExprResult Result = S.RebuildExprInCurrentInstantiation(E); 3431 if (Result.isInvalid()) return true; 3432 DS.UpdateExprRep(Result.get()); 3433 break; 3434 } 3435 3436 default: 3437 // Nothing to do for these decl specs. 3438 break; 3439 } 3440 3441 // It doesn't matter what order we do this in. 3442 for (unsigned I = 0, E = D.getNumTypeObjects(); I != E; ++I) { 3443 DeclaratorChunk &Chunk = D.getTypeObject(I); 3444 3445 // The only type information in the declarator which can come 3446 // before the declaration name is the base type of a member 3447 // pointer. 3448 if (Chunk.Kind != DeclaratorChunk::MemberPointer) 3449 continue; 3450 3451 // Rebuild the scope specifier in-place. 3452 CXXScopeSpec &SS = Chunk.Mem.Scope(); 3453 if (S.RebuildNestedNameSpecifierInCurrentInstantiation(SS)) 3454 return true; 3455 } 3456 3457 return false; 3458 } 3459 3460 Decl *Sema::ActOnDeclarator(Scope *S, Declarator &D) { 3461 D.setFunctionDefinitionKind(FDK_Declaration); 3462 Decl *Dcl = HandleDeclarator(S, D, MultiTemplateParamsArg()); 3463 3464 if (OriginalLexicalContext && OriginalLexicalContext->isObjCContainer() && 3465 Dcl && Dcl->getDeclContext()->isFileContext()) 3466 Dcl->setTopLevelDeclInObjCContainer(); 3467 3468 return Dcl; 3469 } 3470 3471 /// DiagnoseClassNameShadow - Implement C++ [class.mem]p13: 3472 /// If T is the name of a class, then each of the following shall have a 3473 /// name different from T: 3474 /// - every static data member of class T; 3475 /// - every member function of class T 3476 /// - every member of class T that is itself a type; 3477 /// \returns true if the declaration name violates these rules. 3478 bool Sema::DiagnoseClassNameShadow(DeclContext *DC, 3479 DeclarationNameInfo NameInfo) { 3480 DeclarationName Name = NameInfo.getName(); 3481 3482 if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(DC)) 3483 if (Record->getIdentifier() && Record->getDeclName() == Name) { 3484 Diag(NameInfo.getLoc(), diag::err_member_name_of_class) << Name; 3485 return true; 3486 } 3487 3488 return false; 3489 } 3490 3491 /// \brief Diagnose a declaration whose declarator-id has the given 3492 /// nested-name-specifier. 3493 /// 3494 /// \param SS The nested-name-specifier of the declarator-id. 3495 /// 3496 /// \param DC The declaration context to which the nested-name-specifier 3497 /// resolves. 3498 /// 3499 /// \param Name The name of the entity being declared. 3500 /// 3501 /// \param Loc The location of the name of the entity being declared. 3502 /// 3503 /// \returns true if we cannot safely recover from this error, false otherwise. 3504 bool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, 3505 DeclarationName Name, 3506 SourceLocation Loc) { 3507 DeclContext *Cur = CurContext; 3508 while (isa<LinkageSpecDecl>(Cur)) 3509 Cur = Cur->getParent(); 3510 3511 // C++ [dcl.meaning]p1: 3512 // A declarator-id shall not be qualified except for the definition 3513 // of a member function (9.3) or static data member (9.4) outside of 3514 // its class, the definition or explicit instantiation of a function 3515 // or variable member of a namespace outside of its namespace, or the 3516 // definition of an explicit specialization outside of its namespace, 3517 // or the declaration of a friend function that is a member of 3518 // another class or namespace (11.3). [...] 3519 3520 // The user provided a superfluous scope specifier that refers back to the 3521 // class or namespaces in which the entity is already declared. 3522 // 3523 // class X { 3524 // void X::f(); 3525 // }; 3526 if (Cur->Equals(DC)) { 3527 Diag(Loc, LangOpts.MicrosoftExt? diag::warn_member_extra_qualification 3528 : diag::err_member_extra_qualification) 3529 << Name << FixItHint::CreateRemoval(SS.getRange()); 3530 SS.clear(); 3531 return false; 3532 } 3533 3534 // Check whether the qualifying scope encloses the scope of the original 3535 // declaration. 3536 if (!Cur->Encloses(DC)) { 3537 if (Cur->isRecord()) 3538 Diag(Loc, diag::err_member_qualification) 3539 << Name << SS.getRange(); 3540 else if (isa<TranslationUnitDecl>(DC)) 3541 Diag(Loc, diag::err_invalid_declarator_global_scope) 3542 << Name << SS.getRange(); 3543 else if (isa<FunctionDecl>(Cur)) 3544 Diag(Loc, diag::err_invalid_declarator_in_function) 3545 << Name << SS.getRange(); 3546 else 3547 Diag(Loc, diag::err_invalid_declarator_scope) 3548 << Name << cast<NamedDecl>(Cur) << cast<NamedDecl>(DC) << SS.getRange(); 3549 3550 return true; 3551 } 3552 3553 if (Cur->isRecord()) { 3554 // Cannot qualify members within a class. 3555 Diag(Loc, diag::err_member_qualification) 3556 << Name << SS.getRange(); 3557 SS.clear(); 3558 3559 // C++ constructors and destructors with incorrect scopes can break 3560 // our AST invariants by having the wrong underlying types. If 3561 // that's the case, then drop this declaration entirely. 3562 if ((Name.getNameKind() == DeclarationName::CXXConstructorName || 3563 Name.getNameKind() == DeclarationName::CXXDestructorName) && 3564 !Context.hasSameType(Name.getCXXNameType(), 3565 Context.getTypeDeclType(cast<CXXRecordDecl>(Cur)))) 3566 return true; 3567 3568 return false; 3569 } 3570 3571 // C++11 [dcl.meaning]p1: 3572 // [...] "The nested-name-specifier of the qualified declarator-id shall 3573 // not begin with a decltype-specifer" 3574 NestedNameSpecifierLoc SpecLoc(SS.getScopeRep(), SS.location_data()); 3575 while (SpecLoc.getPrefix()) 3576 SpecLoc = SpecLoc.getPrefix(); 3577 if (dyn_cast_or_null<DecltypeType>( 3578 SpecLoc.getNestedNameSpecifier()->getAsType())) 3579 Diag(Loc, diag::err_decltype_in_declarator) 3580 << SpecLoc.getTypeLoc().getSourceRange(); 3581 3582 return false; 3583 } 3584 3585 Decl *Sema::HandleDeclarator(Scope *S, Declarator &D, 3586 MultiTemplateParamsArg TemplateParamLists) { 3587 // TODO: consider using NameInfo for diagnostic. 3588 DeclarationNameInfo NameInfo = GetNameForDeclarator(D); 3589 DeclarationName Name = NameInfo.getName(); 3590 3591 // All of these full declarators require an identifier. If it doesn't have 3592 // one, the ParsedFreeStandingDeclSpec action should be used. 3593 if (!Name) { 3594 if (!D.isInvalidType()) // Reject this if we think it is valid. 3595 Diag(D.getDeclSpec().getLocStart(), 3596 diag::err_declarator_need_ident) 3597 << D.getDeclSpec().getSourceRange() << D.getSourceRange(); 3598 return 0; 3599 } else if (DiagnoseUnexpandedParameterPack(NameInfo, UPPC_DeclarationType)) 3600 return 0; 3601 3602 // The scope passed in may not be a decl scope. Zip up the scope tree until 3603 // we find one that is. 3604 while ((S->getFlags() & Scope::DeclScope) == 0 || 3605 (S->getFlags() & Scope::TemplateParamScope) != 0) 3606 S = S->getParent(); 3607 3608 DeclContext *DC = CurContext; 3609 if (D.getCXXScopeSpec().isInvalid()) 3610 D.setInvalidType(); 3611 else if (D.getCXXScopeSpec().isSet()) { 3612 if (DiagnoseUnexpandedParameterPack(D.getCXXScopeSpec(), 3613 UPPC_DeclarationQualifier)) 3614 return 0; 3615 3616 bool EnteringContext = !D.getDeclSpec().isFriendSpecified(); 3617 DC = computeDeclContext(D.getCXXScopeSpec(), EnteringContext); 3618 if (!DC) { 3619 // If we could not compute the declaration context, it's because the 3620 // declaration context is dependent but does not refer to a class, 3621 // class template, or class template partial specialization. Complain 3622 // and return early, to avoid the coming semantic disaster. 3623 Diag(D.getIdentifierLoc(), 3624 diag::err_template_qualified_declarator_no_match) 3625 << (NestedNameSpecifier*)D.getCXXScopeSpec().getScopeRep() 3626 << D.getCXXScopeSpec().getRange(); 3627 return 0; 3628 } 3629 bool IsDependentContext = DC->isDependentContext(); 3630 3631 if (!IsDependentContext && 3632 RequireCompleteDeclContext(D.getCXXScopeSpec(), DC)) 3633 return 0; 3634 3635 if (isa<CXXRecordDecl>(DC) && !cast<CXXRecordDecl>(DC)->hasDefinition()) { 3636 Diag(D.getIdentifierLoc(), 3637 diag::err_member_def_undefined_record) 3638 << Name << DC << D.getCXXScopeSpec().getRange(); 3639 D.setInvalidType(); 3640 } else if (!D.getDeclSpec().isFriendSpecified()) { 3641 if (diagnoseQualifiedDeclaration(D.getCXXScopeSpec(), DC, 3642 Name, D.getIdentifierLoc())) { 3643 if (DC->isRecord()) 3644 return 0; 3645 3646 D.setInvalidType(); 3647 } 3648 } 3649 3650 // Check whether we need to rebuild the type of the given 3651 // declaration in the current instantiation. 3652 if (EnteringContext && IsDependentContext && 3653 TemplateParamLists.size() != 0) { 3654 ContextRAII SavedContext(*this, DC); 3655 if (RebuildDeclaratorInCurrentInstantiation(*this, D, Name)) 3656 D.setInvalidType(); 3657 } 3658 } 3659 3660 if (DiagnoseClassNameShadow(DC, NameInfo)) 3661 // If this is a typedef, we'll end up spewing multiple diagnostics. 3662 // Just return early; it's safer. 3663 if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef) 3664 return 0; 3665 3666 NamedDecl *New; 3667 3668 TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S); 3669 QualType R = TInfo->getType(); 3670 3671 if (DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo, 3672 UPPC_DeclarationType)) 3673 D.setInvalidType(); 3674 3675 LookupResult Previous(*this, NameInfo, LookupOrdinaryName, 3676 ForRedeclaration); 3677 3678 // See if this is a redefinition of a variable in the same scope. 3679 if (!D.getCXXScopeSpec().isSet()) { 3680 bool IsLinkageLookup = false; 3681 3682 // If the declaration we're planning to build will be a function 3683 // or object with linkage, then look for another declaration with 3684 // linkage (C99 6.2.2p4-5 and C++ [basic.link]p6). 3685 if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef) 3686 /* Do nothing*/; 3687 else if (R->isFunctionType()) { 3688 if (CurContext->isFunctionOrMethod() || 3689 D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_static) 3690 IsLinkageLookup = true; 3691 } else if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_extern) 3692 IsLinkageLookup = true; 3693 else if (CurContext->getRedeclContext()->isTranslationUnit() && 3694 D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_static) 3695 IsLinkageLookup = true; 3696 3697 if (IsLinkageLookup) 3698 Previous.clear(LookupRedeclarationWithLinkage); 3699 3700 LookupName(Previous, S, /* CreateBuiltins = */ IsLinkageLookup); 3701 } else { // Something like "int foo::x;" 3702 LookupQualifiedName(Previous, DC); 3703 3704 // C++ [dcl.meaning]p1: 3705 // When the declarator-id is qualified, the declaration shall refer to a 3706 // previously declared member of the class or namespace to which the 3707 // qualifier refers (or, in the case of a namespace, of an element of the 3708 // inline namespace set of that namespace (7.3.1)) or to a specialization 3709 // thereof; [...] 3710 // 3711 // Note that we already checked the context above, and that we do not have 3712 // enough information to make sure that Previous contains the declaration 3713 // we want to match. For example, given: 3714 // 3715 // class X { 3716 // void f(); 3717 // void f(float); 3718 // }; 3719 // 3720 // void X::f(int) { } // ill-formed 3721 // 3722 // In this case, Previous will point to the overload set 3723 // containing the two f's declared in X, but neither of them 3724 // matches. 3725 3726 // C++ [dcl.meaning]p1: 3727 // [...] the member shall not merely have been introduced by a 3728 // using-declaration in the scope of the class or namespace nominated by 3729 // the nested-name-specifier of the declarator-id. 3730 RemoveUsingDecls(Previous); 3731 } 3732 3733 if (Previous.isSingleResult() && 3734 Previous.getFoundDecl()->isTemplateParameter()) { 3735 // Maybe we will complain about the shadowed template parameter. 3736 if (!D.isInvalidType()) 3737 DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), 3738 Previous.getFoundDecl()); 3739 3740 // Just pretend that we didn't see the previous declaration. 3741 Previous.clear(); 3742 } 3743 3744 // In C++, the previous declaration we find might be a tag type 3745 // (class or enum). In this case, the new declaration will hide the 3746 // tag type. Note that this does does not apply if we're declaring a 3747 // typedef (C++ [dcl.typedef]p4). 3748 if (Previous.isSingleTagDecl() && 3749 D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_typedef) 3750 Previous.clear(); 3751 3752 bool AddToScope = true; 3753 if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef) { 3754 if (TemplateParamLists.size()) { 3755 Diag(D.getIdentifierLoc(), diag::err_template_typedef); 3756 return 0; 3757 } 3758 3759 New = ActOnTypedefDeclarator(S, D, DC, TInfo, Previous); 3760 } else if (R->isFunctionType()) { 3761 New = ActOnFunctionDeclarator(S, D, DC, TInfo, Previous, 3762 TemplateParamLists, 3763 AddToScope); 3764 } else { 3765 New = ActOnVariableDeclarator(S, D, DC, TInfo, Previous, 3766 TemplateParamLists); 3767 } 3768 3769 if (New == 0) 3770 return 0; 3771 3772 // If this has an identifier and is not an invalid redeclaration or 3773 // function template specialization, add it to the scope stack. 3774 if (New->getDeclName() && AddToScope && 3775 !(D.isRedeclaration() && New->isInvalidDecl())) 3776 PushOnScopeChains(New, S); 3777 3778 return New; 3779 } 3780 3781 /// TryToFixInvalidVariablyModifiedType - Helper method to turn variable array 3782 /// types into constant array types in certain situations which would otherwise 3783 /// be errors (for GCC compatibility). 3784 static QualType TryToFixInvalidVariablyModifiedType(QualType T, 3785 ASTContext &Context, 3786 bool &SizeIsNegative, 3787 llvm::APSInt &Oversized) { 3788 // This method tries to turn a variable array into a constant 3789 // array even when the size isn't an ICE. This is necessary 3790 // for compatibility with code that depends on gcc's buggy 3791 // constant expression folding, like struct {char x[(int)(char*)2];} 3792 SizeIsNegative = false; 3793 Oversized = 0; 3794 3795 if (T->isDependentType()) 3796 return QualType(); 3797 3798 QualifierCollector Qs; 3799 const Type *Ty = Qs.strip(T); 3800 3801 if (const PointerType* PTy = dyn_cast<PointerType>(Ty)) { 3802 QualType Pointee = PTy->getPointeeType(); 3803 QualType FixedType = 3804 TryToFixInvalidVariablyModifiedType(Pointee, Context, SizeIsNegative, 3805 Oversized); 3806 if (FixedType.isNull()) return FixedType; 3807 FixedType = Context.getPointerType(FixedType); 3808 return Qs.apply(Context, FixedType); 3809 } 3810 if (const ParenType* PTy = dyn_cast<ParenType>(Ty)) { 3811 QualType Inner = PTy->getInnerType(); 3812 QualType FixedType = 3813 TryToFixInvalidVariablyModifiedType(Inner, Context, SizeIsNegative, 3814 Oversized); 3815 if (FixedType.isNull()) return FixedType; 3816 FixedType = Context.getParenType(FixedType); 3817 return Qs.apply(Context, FixedType); 3818 } 3819 3820 const VariableArrayType* VLATy = dyn_cast<VariableArrayType>(T); 3821 if (!VLATy) 3822 return QualType(); 3823 // FIXME: We should probably handle this case 3824 if (VLATy->getElementType()->isVariablyModifiedType()) 3825 return QualType(); 3826 3827 llvm::APSInt Res; 3828 if (!VLATy->getSizeExpr() || 3829 !VLATy->getSizeExpr()->EvaluateAsInt(Res, Context)) 3830 return QualType(); 3831 3832 // Check whether the array size is negative. 3833 if (Res.isSigned() && Res.isNegative()) { 3834 SizeIsNegative = true; 3835 return QualType(); 3836 } 3837 3838 // Check whether the array is too large to be addressed. 3839 unsigned ActiveSizeBits 3840 = ConstantArrayType::getNumAddressingBits(Context, VLATy->getElementType(), 3841 Res); 3842 if (ActiveSizeBits > ConstantArrayType::getMaxSizeBits(Context)) { 3843 Oversized = Res; 3844 return QualType(); 3845 } 3846 3847 return Context.getConstantArrayType(VLATy->getElementType(), 3848 Res, ArrayType::Normal, 0); 3849 } 3850 3851 /// \brief Register the given locally-scoped external C declaration so 3852 /// that it can be found later for redeclarations 3853 void 3854 Sema::RegisterLocallyScopedExternCDecl(NamedDecl *ND, 3855 const LookupResult &Previous, 3856 Scope *S) { 3857 assert(ND->getLexicalDeclContext()->isFunctionOrMethod() && 3858 "Decl is not a locally-scoped decl!"); 3859 // Note that we have a locally-scoped external with this name. 3860 LocallyScopedExternalDecls[ND->getDeclName()] = ND; 3861 3862 if (!Previous.isSingleResult()) 3863 return; 3864 3865 NamedDecl *PrevDecl = Previous.getFoundDecl(); 3866 3867 // If there was a previous declaration of this variable, it may be 3868 // in our identifier chain. Update the identifier chain with the new 3869 // declaration. 3870 if (S && IdResolver.ReplaceDecl(PrevDecl, ND)) { 3871 // The previous declaration was found on the identifer resolver 3872 // chain, so remove it from its scope. 3873 3874 if (S->isDeclScope(PrevDecl)) { 3875 // Special case for redeclarations in the SAME scope. 3876 // Because this declaration is going to be added to the identifier chain 3877 // later, we should temporarily take it OFF the chain. 3878 IdResolver.RemoveDecl(ND); 3879 3880 } else { 3881 // Find the scope for the original declaration. 3882 while (S && !S->isDeclScope(PrevDecl)) 3883 S = S->getParent(); 3884 } 3885 3886 if (S) 3887 S->RemoveDecl(PrevDecl); 3888 } 3889 } 3890 3891 llvm::DenseMap<DeclarationName, NamedDecl *>::iterator 3892 Sema::findLocallyScopedExternalDecl(DeclarationName Name) { 3893 if (ExternalSource) { 3894 // Load locally-scoped external decls from the external source. 3895 SmallVector<NamedDecl *, 4> Decls; 3896 ExternalSource->ReadLocallyScopedExternalDecls(Decls); 3897 for (unsigned I = 0, N = Decls.size(); I != N; ++I) { 3898 llvm::DenseMap<DeclarationName, NamedDecl *>::iterator Pos 3899 = LocallyScopedExternalDecls.find(Decls[I]->getDeclName()); 3900 if (Pos == LocallyScopedExternalDecls.end()) 3901 LocallyScopedExternalDecls[Decls[I]->getDeclName()] = Decls[I]; 3902 } 3903 } 3904 3905 return LocallyScopedExternalDecls.find(Name); 3906 } 3907 3908 /// \brief Diagnose function specifiers on a declaration of an identifier that 3909 /// does not identify a function. 3910 void Sema::DiagnoseFunctionSpecifiers(Declarator& D) { 3911 // FIXME: We should probably indicate the identifier in question to avoid 3912 // confusion for constructs like "inline int a(), b;" 3913 if (D.getDeclSpec().isInlineSpecified()) 3914 Diag(D.getDeclSpec().getInlineSpecLoc(), 3915 diag::err_inline_non_function); 3916 3917 if (D.getDeclSpec().isVirtualSpecified()) 3918 Diag(D.getDeclSpec().getVirtualSpecLoc(), 3919 diag::err_virtual_non_function); 3920 3921 if (D.getDeclSpec().isExplicitSpecified()) 3922 Diag(D.getDeclSpec().getExplicitSpecLoc(), 3923 diag::err_explicit_non_function); 3924 } 3925 3926 NamedDecl* 3927 Sema::ActOnTypedefDeclarator(Scope* S, Declarator& D, DeclContext* DC, 3928 TypeSourceInfo *TInfo, LookupResult &Previous) { 3929 // Typedef declarators cannot be qualified (C++ [dcl.meaning]p1). 3930 if (D.getCXXScopeSpec().isSet()) { 3931 Diag(D.getIdentifierLoc(), diag::err_qualified_typedef_declarator) 3932 << D.getCXXScopeSpec().getRange(); 3933 D.setInvalidType(); 3934 // Pretend we didn't see the scope specifier. 3935 DC = CurContext; 3936 Previous.clear(); 3937 } 3938 3939 if (getLangOpts().CPlusPlus) { 3940 // Check that there are no default arguments (C++ only). 3941 CheckExtraCXXDefaultArguments(D); 3942 } 3943 3944 DiagnoseFunctionSpecifiers(D); 3945 3946 if (D.getDeclSpec().isThreadSpecified()) 3947 Diag(D.getDeclSpec().getThreadSpecLoc(), diag::err_invalid_thread); 3948 if (D.getDeclSpec().isConstexprSpecified()) 3949 Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_invalid_constexpr) 3950 << 1; 3951 3952 if (D.getName().Kind != UnqualifiedId::IK_Identifier) { 3953 Diag(D.getName().StartLocation, diag::err_typedef_not_identifier) 3954 << D.getName().getSourceRange(); 3955 return 0; 3956 } 3957 3958 TypedefDecl *NewTD = ParseTypedefDecl(S, D, TInfo->getType(), TInfo); 3959 if (!NewTD) return 0; 3960 3961 // Handle attributes prior to checking for duplicates in MergeVarDecl 3962 ProcessDeclAttributes(S, NewTD, D); 3963 3964 CheckTypedefForVariablyModifiedType(S, NewTD); 3965 3966 bool Redeclaration = D.isRedeclaration(); 3967 NamedDecl *ND = ActOnTypedefNameDecl(S, DC, NewTD, Previous, Redeclaration); 3968 D.setRedeclaration(Redeclaration); 3969 return ND; 3970 } 3971 3972 void 3973 Sema::CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *NewTD) { 3974 // C99 6.7.7p2: If a typedef name specifies a variably modified type 3975 // then it shall have block scope. 3976 // Note that variably modified types must be fixed before merging the decl so 3977 // that redeclarations will match. 3978 QualType T = NewTD->getUnderlyingType(); 3979 if (T->isVariablyModifiedType()) { 3980 getCurFunction()->setHasBranchProtectedScope(); 3981 3982 if (S->getFnParent() == 0) { 3983 bool SizeIsNegative; 3984 llvm::APSInt Oversized; 3985 QualType FixedTy = 3986 TryToFixInvalidVariablyModifiedType(T, Context, SizeIsNegative, 3987 Oversized); 3988 if (!FixedTy.isNull()) { 3989 Diag(NewTD->getLocation(), diag::warn_illegal_constant_array_size); 3990 NewTD->setTypeSourceInfo(Context.getTrivialTypeSourceInfo(FixedTy)); 3991 } else { 3992 if (SizeIsNegative) 3993 Diag(NewTD->getLocation(), diag::err_typecheck_negative_array_size); 3994 else if (T->isVariableArrayType()) 3995 Diag(NewTD->getLocation(), diag::err_vla_decl_in_file_scope); 3996 else if (Oversized.getBoolValue()) 3997 Diag(NewTD->getLocation(), diag::err_array_too_large) 3998 << Oversized.toString(10); 3999 else 4000 Diag(NewTD->getLocation(), diag::err_vm_decl_in_file_scope); 4001 NewTD->setInvalidDecl(); 4002 } 4003 } 4004 } 4005 } 4006 4007 4008 /// ActOnTypedefNameDecl - Perform semantic checking for a declaration which 4009 /// declares a typedef-name, either using the 'typedef' type specifier or via 4010 /// a C++0x [dcl.typedef]p2 alias-declaration: 'using T = A;'. 4011 NamedDecl* 4012 Sema::ActOnTypedefNameDecl(Scope *S, DeclContext *DC, TypedefNameDecl *NewTD, 4013 LookupResult &Previous, bool &Redeclaration) { 4014 // Merge the decl with the existing one if appropriate. If the decl is 4015 // in an outer scope, it isn't the same thing. 4016 FilterLookupForScope(Previous, DC, S, /*ConsiderLinkage*/ false, 4017 /*ExplicitInstantiationOrSpecialization=*/false); 4018 if (!Previous.empty()) { 4019 Redeclaration = true; 4020 MergeTypedefNameDecl(NewTD, Previous); 4021 } 4022 4023 // If this is the C FILE type, notify the AST context. 4024 if (IdentifierInfo *II = NewTD->getIdentifier()) 4025 if (!NewTD->isInvalidDecl() && 4026 NewTD->getDeclContext()->getRedeclContext()->isTranslationUnit()) { 4027 if (II->isStr("FILE")) 4028 Context.setFILEDecl(NewTD); 4029 else if (II->isStr("jmp_buf")) 4030 Context.setjmp_bufDecl(NewTD); 4031 else if (II->isStr("sigjmp_buf")) 4032 Context.setsigjmp_bufDecl(NewTD); 4033 else if (II->isStr("ucontext_t")) 4034 Context.setucontext_tDecl(NewTD); 4035 } 4036 4037 return NewTD; 4038 } 4039 4040 /// \brief Determines whether the given declaration is an out-of-scope 4041 /// previous declaration. 4042 /// 4043 /// This routine should be invoked when name lookup has found a 4044 /// previous declaration (PrevDecl) that is not in the scope where a 4045 /// new declaration by the same name is being introduced. If the new 4046 /// declaration occurs in a local scope, previous declarations with 4047 /// linkage may still be considered previous declarations (C99 4048 /// 6.2.2p4-5, C++ [basic.link]p6). 4049 /// 4050 /// \param PrevDecl the previous declaration found by name 4051 /// lookup 4052 /// 4053 /// \param DC the context in which the new declaration is being 4054 /// declared. 4055 /// 4056 /// \returns true if PrevDecl is an out-of-scope previous declaration 4057 /// for a new delcaration with the same name. 4058 static bool 4059 isOutOfScopePreviousDeclaration(NamedDecl *PrevDecl, DeclContext *DC, 4060 ASTContext &Context) { 4061 if (!PrevDecl) 4062 return false; 4063 4064 if (!PrevDecl->hasLinkage()) 4065 return false; 4066 4067 if (Context.getLangOpts().CPlusPlus) { 4068 // C++ [basic.link]p6: 4069 // If there is a visible declaration of an entity with linkage 4070 // having the same name and type, ignoring entities declared 4071 // outside the innermost enclosing namespace scope, the block 4072 // scope declaration declares that same entity and receives the 4073 // linkage of the previous declaration. 4074 DeclContext *OuterContext = DC->getRedeclContext(); 4075 if (!OuterContext->isFunctionOrMethod()) 4076 // This rule only applies to block-scope declarations. 4077 return false; 4078 4079 DeclContext *PrevOuterContext = PrevDecl->getDeclContext(); 4080 if (PrevOuterContext->isRecord()) 4081 // We found a member function: ignore it. 4082 return false; 4083 4084 // Find the innermost enclosing namespace for the new and 4085 // previous declarations. 4086 OuterContext = OuterContext->getEnclosingNamespaceContext(); 4087 PrevOuterContext = PrevOuterContext->getEnclosingNamespaceContext(); 4088 4089 // The previous declaration is in a different namespace, so it 4090 // isn't the same function. 4091 if (!OuterContext->Equals(PrevOuterContext)) 4092 return false; 4093 } 4094 4095 return true; 4096 } 4097 4098 static void SetNestedNameSpecifier(DeclaratorDecl *DD, Declarator &D) { 4099 CXXScopeSpec &SS = D.getCXXScopeSpec(); 4100 if (!SS.isSet()) return; 4101 DD->setQualifierInfo(SS.getWithLocInContext(DD->getASTContext())); 4102 } 4103 4104 bool Sema::inferObjCARCLifetime(ValueDecl *decl) { 4105 QualType type = decl->getType(); 4106 Qualifiers::ObjCLifetime lifetime = type.getObjCLifetime(); 4107 if (lifetime == Qualifiers::OCL_Autoreleasing) { 4108 // Various kinds of declaration aren't allowed to be __autoreleasing. 4109 unsigned kind = -1U; 4110 if (VarDecl *var = dyn_cast<VarDecl>(decl)) { 4111 if (var->hasAttr<BlocksAttr>()) 4112 kind = 0; // __block 4113 else if (!var->hasLocalStorage()) 4114 kind = 1; // global 4115 } else if (isa<ObjCIvarDecl>(decl)) { 4116 kind = 3; // ivar 4117 } else if (isa<FieldDecl>(decl)) { 4118 kind = 2; // field 4119 } 4120 4121 if (kind != -1U) { 4122 Diag(decl->getLocation(), diag::err_arc_autoreleasing_var) 4123 << kind; 4124 } 4125 } else if (lifetime == Qualifiers::OCL_None) { 4126 // Try to infer lifetime. 4127 if (!type->isObjCLifetimeType()) 4128 return false; 4129 4130 lifetime = type->getObjCARCImplicitLifetime(); 4131 type = Context.getLifetimeQualifiedType(type, lifetime); 4132 decl->setType(type); 4133 } 4134 4135 if (VarDecl *var = dyn_cast<VarDecl>(decl)) { 4136 // Thread-local variables cannot have lifetime. 4137 if (lifetime && lifetime != Qualifiers::OCL_ExplicitNone && 4138 var->isThreadSpecified()) { 4139 Diag(var->getLocation(), diag::err_arc_thread_ownership) 4140 << var->getType(); 4141 return true; 4142 } 4143 } 4144 4145 return false; 4146 } 4147 4148 NamedDecl* 4149 Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, 4150 TypeSourceInfo *TInfo, LookupResult &Previous, 4151 MultiTemplateParamsArg TemplateParamLists) { 4152 QualType R = TInfo->getType(); 4153 DeclarationName Name = GetNameForDeclarator(D).getName(); 4154 4155 // Check that there are no default arguments (C++ only). 4156 if (getLangOpts().CPlusPlus) 4157 CheckExtraCXXDefaultArguments(D); 4158 4159 DeclSpec::SCS SCSpec = D.getDeclSpec().getStorageClassSpec(); 4160 assert(SCSpec != DeclSpec::SCS_typedef && 4161 "Parser allowed 'typedef' as storage class VarDecl."); 4162 VarDecl::StorageClass SC = StorageClassSpecToVarDeclStorageClass(SCSpec); 4163 if (SCSpec == DeclSpec::SCS_mutable) { 4164 // mutable can only appear on non-static class members, so it's always 4165 // an error here 4166 Diag(D.getIdentifierLoc(), diag::err_mutable_nonmember); 4167 D.setInvalidType(); 4168 SC = SC_None; 4169 } 4170 SCSpec = D.getDeclSpec().getStorageClassSpecAsWritten(); 4171 VarDecl::StorageClass SCAsWritten 4172 = StorageClassSpecToVarDeclStorageClass(SCSpec); 4173 4174 IdentifierInfo *II = Name.getAsIdentifierInfo(); 4175 if (!II) { 4176 Diag(D.getIdentifierLoc(), diag::err_bad_variable_name) 4177 << Name; 4178 return 0; 4179 } 4180 4181 DiagnoseFunctionSpecifiers(D); 4182 4183 if (!DC->isRecord() && S->getFnParent() == 0) { 4184 // C99 6.9p2: The storage-class specifiers auto and register shall not 4185 // appear in the declaration specifiers in an external declaration. 4186 if (SC == SC_Auto || SC == SC_Register) { 4187 4188 // If this is a register variable with an asm label specified, then this 4189 // is a GNU extension. 4190 if (SC == SC_Register && D.getAsmLabel()) 4191 Diag(D.getIdentifierLoc(), diag::err_unsupported_global_register); 4192 else 4193 Diag(D.getIdentifierLoc(), diag::err_typecheck_sclass_fscope); 4194 D.setInvalidType(); 4195 } 4196 } 4197 4198 if (getLangOpts().OpenCL) { 4199 // Set up the special work-group-local storage class for variables in the 4200 // OpenCL __local address space. 4201 if (R.getAddressSpace() == LangAS::opencl_local) 4202 SC = SC_OpenCLWorkGroupLocal; 4203 } 4204 4205 bool isExplicitSpecialization = false; 4206 VarDecl *NewVD; 4207 if (!getLangOpts().CPlusPlus) { 4208 NewVD = VarDecl::Create(Context, DC, D.getLocStart(), 4209 D.getIdentifierLoc(), II, 4210 R, TInfo, SC, SCAsWritten); 4211 4212 if (D.isInvalidType()) 4213 NewVD->setInvalidDecl(); 4214 } else { 4215 if (DC->isRecord() && !CurContext->isRecord()) { 4216 // This is an out-of-line definition of a static data member. 4217 if (SC == SC_Static) { 4218 Diag(D.getDeclSpec().getStorageClassSpecLoc(), 4219 diag::err_static_out_of_line) 4220 << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc()); 4221 } else if (SC == SC_None) 4222 SC = SC_Static; 4223 } 4224 if (SC == SC_Static && CurContext->isRecord()) { 4225 if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) { 4226 if (RD->isLocalClass()) 4227 Diag(D.getIdentifierLoc(), 4228 diag::err_static_data_member_not_allowed_in_local_class) 4229 << Name << RD->getDeclName(); 4230 4231 // C++98 [class.union]p1: If a union contains a static data member, 4232 // the program is ill-formed. C++11 drops this restriction. 4233 if (RD->isUnion()) 4234 Diag(D.getIdentifierLoc(), 4235 getLangOpts().CPlusPlus0x 4236 ? diag::warn_cxx98_compat_static_data_member_in_union 4237 : diag::ext_static_data_member_in_union) << Name; 4238 // We conservatively disallow static data members in anonymous structs. 4239 else if (!RD->getDeclName()) 4240 Diag(D.getIdentifierLoc(), 4241 diag::err_static_data_member_not_allowed_in_anon_struct) 4242 << Name << RD->isUnion(); 4243 } 4244 } 4245 4246 // Match up the template parameter lists with the scope specifier, then 4247 // determine whether we have a template or a template specialization. 4248 isExplicitSpecialization = false; 4249 bool Invalid = false; 4250 if (TemplateParameterList *TemplateParams 4251 = MatchTemplateParametersToScopeSpecifier( 4252 D.getDeclSpec().getLocStart(), 4253 D.getIdentifierLoc(), 4254 D.getCXXScopeSpec(), 4255 TemplateParamLists.data(), 4256 TemplateParamLists.size(), 4257 /*never a friend*/ false, 4258 isExplicitSpecialization, 4259 Invalid)) { 4260 if (TemplateParams->size() > 0) { 4261 // There is no such thing as a variable template. 4262 Diag(D.getIdentifierLoc(), diag::err_template_variable) 4263 << II 4264 << SourceRange(TemplateParams->getTemplateLoc(), 4265 TemplateParams->getRAngleLoc()); 4266 return 0; 4267 } else { 4268 // There is an extraneous 'template<>' for this variable. Complain 4269 // about it, but allow the declaration of the variable. 4270 Diag(TemplateParams->getTemplateLoc(), 4271 diag::err_template_variable_noparams) 4272 << II 4273 << SourceRange(TemplateParams->getTemplateLoc(), 4274 TemplateParams->getRAngleLoc()); 4275 } 4276 } 4277 4278 NewVD = VarDecl::Create(Context, DC, D.getLocStart(), 4279 D.getIdentifierLoc(), II, 4280 R, TInfo, SC, SCAsWritten); 4281 4282 // If this decl has an auto type in need of deduction, make a note of the 4283 // Decl so we can diagnose uses of it in its own initializer. 4284 if (D.getDeclSpec().getTypeSpecType() == DeclSpec::TST_auto && 4285 R->getContainedAutoType()) 4286 ParsingInitForAutoVars.insert(NewVD); 4287 4288 if (D.isInvalidType() || Invalid) 4289 NewVD->setInvalidDecl(); 4290 4291 SetNestedNameSpecifier(NewVD, D); 4292 4293 if (TemplateParamLists.size() > 0 && D.getCXXScopeSpec().isSet()) { 4294 NewVD->setTemplateParameterListsInfo(Context, 4295 TemplateParamLists.size(), 4296 TemplateParamLists.data()); 4297 } 4298 4299 if (D.getDeclSpec().isConstexprSpecified()) 4300 NewVD->setConstexpr(true); 4301 } 4302 4303 // Set the lexical context. If the declarator has a C++ scope specifier, the 4304 // lexical context will be different from the semantic context. 4305 NewVD->setLexicalDeclContext(CurContext); 4306 4307 if (D.getDeclSpec().isThreadSpecified()) { 4308 if (NewVD->hasLocalStorage()) 4309 Diag(D.getDeclSpec().getThreadSpecLoc(), diag::err_thread_non_global); 4310 else if (!Context.getTargetInfo().isTLSSupported()) 4311 Diag(D.getDeclSpec().getThreadSpecLoc(), diag::err_thread_unsupported); 4312 else 4313 NewVD->setThreadSpecified(true); 4314 } 4315 4316 if (D.getDeclSpec().isModulePrivateSpecified()) { 4317 if (isExplicitSpecialization) 4318 Diag(NewVD->getLocation(), diag::err_module_private_specialization) 4319 << 2 4320 << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc()); 4321 else if (NewVD->hasLocalStorage()) 4322 Diag(NewVD->getLocation(), diag::err_module_private_local) 4323 << 0 << NewVD->getDeclName() 4324 << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc()) 4325 << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc()); 4326 else 4327 NewVD->setModulePrivate(); 4328 } 4329 4330 // Handle attributes prior to checking for duplicates in MergeVarDecl 4331 ProcessDeclAttributes(S, NewVD, D); 4332 4333 if (getLangOpts().CUDA) { 4334 // CUDA B.2.5: "__shared__ and __constant__ variables have implied static 4335 // storage [duration]." 4336 if (SC == SC_None && S->getFnParent() != 0 && 4337 (NewVD->hasAttr<CUDASharedAttr>() || NewVD->hasAttr<CUDAConstantAttr>())) 4338 NewVD->setStorageClass(SC_Static); 4339 } 4340 4341 // In auto-retain/release, infer strong retension for variables of 4342 // retainable type. 4343 if (getLangOpts().ObjCAutoRefCount && inferObjCARCLifetime(NewVD)) 4344 NewVD->setInvalidDecl(); 4345 4346 // Handle GNU asm-label extension (encoded as an attribute). 4347 if (Expr *E = (Expr*)D.getAsmLabel()) { 4348 // The parser guarantees this is a string. 4349 StringLiteral *SE = cast<StringLiteral>(E); 4350 StringRef Label = SE->getString(); 4351 if (S->getFnParent() != 0) { 4352 switch (SC) { 4353 case SC_None: 4354 case SC_Auto: 4355 Diag(E->getExprLoc(), diag::warn_asm_label_on_auto_decl) << Label; 4356 break; 4357 case SC_Register: 4358 if (!Context.getTargetInfo().isValidGCCRegisterName(Label)) 4359 Diag(E->getExprLoc(), diag::err_asm_unknown_register_name) << Label; 4360 break; 4361 case SC_Static: 4362 case SC_Extern: 4363 case SC_PrivateExtern: 4364 case SC_OpenCLWorkGroupLocal: 4365 break; 4366 } 4367 } 4368 4369 NewVD->addAttr(::new (Context) AsmLabelAttr(SE->getStrTokenLoc(0), 4370 Context, Label)); 4371 } else if (!ExtnameUndeclaredIdentifiers.empty()) { 4372 llvm::DenseMap<IdentifierInfo*,AsmLabelAttr*>::iterator I = 4373 ExtnameUndeclaredIdentifiers.find(NewVD->getIdentifier()); 4374 if (I != ExtnameUndeclaredIdentifiers.end()) { 4375 NewVD->addAttr(I->second); 4376 ExtnameUndeclaredIdentifiers.erase(I); 4377 } 4378 } 4379 4380 // Diagnose shadowed variables before filtering for scope. 4381 if (!D.getCXXScopeSpec().isSet()) 4382 CheckShadow(S, NewVD, Previous); 4383 4384 // Don't consider existing declarations that are in a different 4385 // scope and are out-of-semantic-context declarations (if the new 4386 // declaration has linkage). 4387 FilterLookupForScope(Previous, DC, S, NewVD->hasLinkage(), 4388 isExplicitSpecialization); 4389 4390 if (!getLangOpts().CPlusPlus) { 4391 D.setRedeclaration(CheckVariableDeclaration(NewVD, Previous)); 4392 } else { 4393 // Merge the decl with the existing one if appropriate. 4394 if (!Previous.empty()) { 4395 if (Previous.isSingleResult() && 4396 isa<FieldDecl>(Previous.getFoundDecl()) && 4397 D.getCXXScopeSpec().isSet()) { 4398 // The user tried to define a non-static data member 4399 // out-of-line (C++ [dcl.meaning]p1). 4400 Diag(NewVD->getLocation(), diag::err_nonstatic_member_out_of_line) 4401 << D.getCXXScopeSpec().getRange(); 4402 Previous.clear(); 4403 NewVD->setInvalidDecl(); 4404 } 4405 } else if (D.getCXXScopeSpec().isSet()) { 4406 // No previous declaration in the qualifying scope. 4407 Diag(D.getIdentifierLoc(), diag::err_no_member) 4408 << Name << computeDeclContext(D.getCXXScopeSpec(), true) 4409 << D.getCXXScopeSpec().getRange(); 4410 NewVD->setInvalidDecl(); 4411 } 4412 4413 D.setRedeclaration(CheckVariableDeclaration(NewVD, Previous)); 4414 4415 // This is an explicit specialization of a static data member. Check it. 4416 if (isExplicitSpecialization && !NewVD->isInvalidDecl() && 4417 CheckMemberSpecialization(NewVD, Previous)) 4418 NewVD->setInvalidDecl(); 4419 } 4420 4421 // If this is a locally-scoped extern C variable, update the map of 4422 // such variables. 4423 if (CurContext->isFunctionOrMethod() && NewVD->isExternC() && 4424 !NewVD->isInvalidDecl()) 4425 RegisterLocallyScopedExternCDecl(NewVD, Previous, S); 4426 4427 // If there's a #pragma GCC visibility in scope, and this isn't a class 4428 // member, set the visibility of this variable. 4429 if (NewVD->getLinkage() == ExternalLinkage && !DC->isRecord()) 4430 AddPushedVisibilityAttribute(NewVD); 4431 4432 MarkUnusedFileScopedDecl(NewVD); 4433 4434 return NewVD; 4435 } 4436 4437 /// \brief Diagnose variable or built-in function shadowing. Implements 4438 /// -Wshadow. 4439 /// 4440 /// This method is called whenever a VarDecl is added to a "useful" 4441 /// scope. 4442 /// 4443 /// \param S the scope in which the shadowing name is being declared 4444 /// \param R the lookup of the name 4445 /// 4446 void Sema::CheckShadow(Scope *S, VarDecl *D, const LookupResult& R) { 4447 // Return if warning is ignored. 4448 if (Diags.getDiagnosticLevel(diag::warn_decl_shadow, R.getNameLoc()) == 4449 DiagnosticsEngine::Ignored) 4450 return; 4451 4452 // Don't diagnose declarations at file scope. 4453 if (D->hasGlobalStorage()) 4454 return; 4455 4456 DeclContext *NewDC = D->getDeclContext(); 4457 4458 // Only diagnose if we're shadowing an unambiguous field or variable. 4459 if (R.getResultKind() != LookupResult::Found) 4460 return; 4461 4462 NamedDecl* ShadowedDecl = R.getFoundDecl(); 4463 if (!isa<VarDecl>(ShadowedDecl) && !isa<FieldDecl>(ShadowedDecl)) 4464 return; 4465 4466 // Fields are not shadowed by variables in C++ static methods. 4467 if (isa<FieldDecl>(ShadowedDecl)) 4468 if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewDC)) 4469 if (MD->isStatic()) 4470 return; 4471 4472 if (VarDecl *shadowedVar = dyn_cast<VarDecl>(ShadowedDecl)) 4473 if (shadowedVar->isExternC()) { 4474 // For shadowing external vars, make sure that we point to the global 4475 // declaration, not a locally scoped extern declaration. 4476 for (VarDecl::redecl_iterator 4477 I = shadowedVar->redecls_begin(), E = shadowedVar->redecls_end(); 4478 I != E; ++I) 4479 if (I->isFileVarDecl()) { 4480 ShadowedDecl = *I; 4481 break; 4482 } 4483 } 4484 4485 DeclContext *OldDC = ShadowedDecl->getDeclContext(); 4486 4487 // Only warn about certain kinds of shadowing for class members. 4488 if (NewDC && NewDC->isRecord()) { 4489 // In particular, don't warn about shadowing non-class members. 4490 if (!OldDC->isRecord()) 4491 return; 4492 4493 // TODO: should we warn about static data members shadowing 4494 // static data members from base classes? 4495 4496 // TODO: don't diagnose for inaccessible shadowed members. 4497 // This is hard to do perfectly because we might friend the 4498 // shadowing context, but that's just a false negative. 4499 } 4500 4501 // Determine what kind of declaration we're shadowing. 4502 unsigned Kind; 4503 if (isa<RecordDecl>(OldDC)) { 4504 if (isa<FieldDecl>(ShadowedDecl)) 4505 Kind = 3; // field 4506 else 4507 Kind = 2; // static data member 4508 } else if (OldDC->isFileContext()) 4509 Kind = 1; // global 4510 else 4511 Kind = 0; // local 4512 4513 DeclarationName Name = R.getLookupName(); 4514 4515 // Emit warning and note. 4516 Diag(R.getNameLoc(), diag::warn_decl_shadow) << Name << Kind << OldDC; 4517 Diag(ShadowedDecl->getLocation(), diag::note_previous_declaration); 4518 } 4519 4520 /// \brief Check -Wshadow without the advantage of a previous lookup. 4521 void Sema::CheckShadow(Scope *S, VarDecl *D) { 4522 if (Diags.getDiagnosticLevel(diag::warn_decl_shadow, D->getLocation()) == 4523 DiagnosticsEngine::Ignored) 4524 return; 4525 4526 LookupResult R(*this, D->getDeclName(), D->getLocation(), 4527 Sema::LookupOrdinaryName, Sema::ForRedeclaration); 4528 LookupName(R, S); 4529 CheckShadow(S, D, R); 4530 } 4531 4532 /// \brief Perform semantic checking on a newly-created variable 4533 /// declaration. 4534 /// 4535 /// This routine performs all of the type-checking required for a 4536 /// variable declaration once it has been built. It is used both to 4537 /// check variables after they have been parsed and their declarators 4538 /// have been translated into a declaration, and to check variables 4539 /// that have been instantiated from a template. 4540 /// 4541 /// Sets NewVD->isInvalidDecl() if an error was encountered. 4542 /// 4543 /// Returns true if the variable declaration is a redeclaration. 4544 bool Sema::CheckVariableDeclaration(VarDecl *NewVD, 4545 LookupResult &Previous) { 4546 // If the decl is already known invalid, don't check it. 4547 if (NewVD->isInvalidDecl()) 4548 return false; 4549 4550 QualType T = NewVD->getType(); 4551 4552 if (T->isObjCObjectType()) { 4553 Diag(NewVD->getLocation(), diag::err_statically_allocated_object) 4554 << FixItHint::CreateInsertion(NewVD->getLocation(), "*"); 4555 T = Context.getObjCObjectPointerType(T); 4556 NewVD->setType(T); 4557 } 4558 4559 // Emit an error if an address space was applied to decl with local storage. 4560 // This includes arrays of objects with address space qualifiers, but not 4561 // automatic variables that point to other address spaces. 4562 // ISO/IEC TR 18037 S5.1.2 4563 if (NewVD->hasLocalStorage() && T.getAddressSpace() != 0) { 4564 Diag(NewVD->getLocation(), diag::err_as_qualified_auto_decl); 4565 NewVD->setInvalidDecl(); 4566 return false; 4567 } 4568 4569 // OpenCL v1.2 s6.8 -- The static qualifier is valid only in program 4570 // scope. 4571 if ((getLangOpts().OpenCLVersion >= 120) 4572 && NewVD->isStaticLocal()) { 4573 Diag(NewVD->getLocation(), diag::err_static_function_scope); 4574 NewVD->setInvalidDecl(); 4575 return false; 4576 } 4577 4578 if (NewVD->hasLocalStorage() && T.isObjCGCWeak() 4579 && !NewVD->hasAttr<BlocksAttr>()) { 4580 if (getLangOpts().getGC() != LangOptions::NonGC) 4581 Diag(NewVD->getLocation(), diag::warn_gc_attribute_weak_on_local); 4582 else { 4583 assert(!getLangOpts().ObjCAutoRefCount); 4584 Diag(NewVD->getLocation(), diag::warn_attribute_weak_on_local); 4585 } 4586 } 4587 4588 bool isVM = T->isVariablyModifiedType(); 4589 if (isVM || NewVD->hasAttr<CleanupAttr>() || 4590 NewVD->hasAttr<BlocksAttr>()) 4591 getCurFunction()->setHasBranchProtectedScope(); 4592 4593 if ((isVM && NewVD->hasLinkage()) || 4594 (T->isVariableArrayType() && NewVD->hasGlobalStorage())) { 4595 bool SizeIsNegative; 4596 llvm::APSInt Oversized; 4597 QualType FixedTy = 4598 TryToFixInvalidVariablyModifiedType(T, Context, SizeIsNegative, 4599 Oversized); 4600 4601 if (FixedTy.isNull() && T->isVariableArrayType()) { 4602 const VariableArrayType *VAT = Context.getAsVariableArrayType(T); 4603 // FIXME: This won't give the correct result for 4604 // int a[10][n]; 4605 SourceRange SizeRange = VAT->getSizeExpr()->getSourceRange(); 4606 4607 if (NewVD->isFileVarDecl()) 4608 Diag(NewVD->getLocation(), diag::err_vla_decl_in_file_scope) 4609 << SizeRange; 4610 else if (NewVD->getStorageClass() == SC_Static) 4611 Diag(NewVD->getLocation(), diag::err_vla_decl_has_static_storage) 4612 << SizeRange; 4613 else 4614 Diag(NewVD->getLocation(), diag::err_vla_decl_has_extern_linkage) 4615 << SizeRange; 4616 NewVD->setInvalidDecl(); 4617 return false; 4618 } 4619 4620 if (FixedTy.isNull()) { 4621 if (NewVD->isFileVarDecl()) 4622 Diag(NewVD->getLocation(), diag::err_vm_decl_in_file_scope); 4623 else 4624 Diag(NewVD->getLocation(), diag::err_vm_decl_has_extern_linkage); 4625 NewVD->setInvalidDecl(); 4626 return false; 4627 } 4628 4629 Diag(NewVD->getLocation(), diag::warn_illegal_constant_array_size); 4630 NewVD->setType(FixedTy); 4631 } 4632 4633 if (Previous.empty() && NewVD->isExternC()) { 4634 // Since we did not find anything by this name and we're declaring 4635 // an extern "C" variable, look for a non-visible extern "C" 4636 // declaration with the same name. 4637 llvm::DenseMap<DeclarationName, NamedDecl *>::iterator Pos 4638 = findLocallyScopedExternalDecl(NewVD->getDeclName()); 4639 if (Pos != LocallyScopedExternalDecls.end()) 4640 Previous.addDecl(Pos->second); 4641 } 4642 4643 if (T->isVoidType() && !NewVD->hasExternalStorage()) { 4644 Diag(NewVD->getLocation(), diag::err_typecheck_decl_incomplete_type) 4645 << T; 4646 NewVD->setInvalidDecl(); 4647 return false; 4648 } 4649 4650 if (!NewVD->hasLocalStorage() && NewVD->hasAttr<BlocksAttr>()) { 4651 Diag(NewVD->getLocation(), diag::err_block_on_nonlocal); 4652 NewVD->setInvalidDecl(); 4653 return false; 4654 } 4655 4656 if (isVM && NewVD->hasAttr<BlocksAttr>()) { 4657 Diag(NewVD->getLocation(), diag::err_block_on_vm); 4658 NewVD->setInvalidDecl(); 4659 return false; 4660 } 4661 4662 if (NewVD->isConstexpr() && !T->isDependentType() && 4663 RequireLiteralType(NewVD->getLocation(), T, 4664 diag::err_constexpr_var_non_literal)) { 4665 NewVD->setInvalidDecl(); 4666 return false; 4667 } 4668 4669 if (!Previous.empty()) { 4670 MergeVarDecl(NewVD, Previous); 4671 return true; 4672 } 4673 return false; 4674 } 4675 4676 /// \brief Data used with FindOverriddenMethod 4677 struct FindOverriddenMethodData { 4678 Sema *S; 4679 CXXMethodDecl *Method; 4680 }; 4681 4682 /// \brief Member lookup function that determines whether a given C++ 4683 /// method overrides a method in a base class, to be used with 4684 /// CXXRecordDecl::lookupInBases(). 4685 static bool FindOverriddenMethod(const CXXBaseSpecifier *Specifier, 4686 CXXBasePath &Path, 4687 void *UserData) { 4688 RecordDecl *BaseRecord = Specifier->getType()->getAs<RecordType>()->getDecl(); 4689 4690 FindOverriddenMethodData *Data 4691 = reinterpret_cast<FindOverriddenMethodData*>(UserData); 4692 4693 DeclarationName Name = Data->Method->getDeclName(); 4694 4695 // FIXME: Do we care about other names here too? 4696 if (Name.getNameKind() == DeclarationName::CXXDestructorName) { 4697 // We really want to find the base class destructor here. 4698 QualType T = Data->S->Context.getTypeDeclType(BaseRecord); 4699 CanQualType CT = Data->S->Context.getCanonicalType(T); 4700 4701 Name = Data->S->Context.DeclarationNames.getCXXDestructorName(CT); 4702 } 4703 4704 for (Path.Decls = BaseRecord->lookup(Name); 4705 Path.Decls.first != Path.Decls.second; 4706 ++Path.Decls.first) { 4707 NamedDecl *D = *Path.Decls.first; 4708 if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D)) { 4709 if (MD->isVirtual() && !Data->S->IsOverload(Data->Method, MD, false)) 4710 return true; 4711 } 4712 } 4713 4714 return false; 4715 } 4716 4717 /// AddOverriddenMethods - See if a method overrides any in the base classes, 4718 /// and if so, check that it's a valid override and remember it. 4719 bool Sema::AddOverriddenMethods(CXXRecordDecl *DC, CXXMethodDecl *MD) { 4720 // Look for virtual methods in base classes that this method might override. 4721 CXXBasePaths Paths; 4722 FindOverriddenMethodData Data; 4723 Data.Method = MD; 4724 Data.S = this; 4725 bool AddedAny = false; 4726 if (DC->lookupInBases(&FindOverriddenMethod, &Data, Paths)) { 4727 for (CXXBasePaths::decl_iterator I = Paths.found_decls_begin(), 4728 E = Paths.found_decls_end(); I != E; ++I) { 4729 if (CXXMethodDecl *OldMD = dyn_cast<CXXMethodDecl>(*I)) { 4730 MD->addOverriddenMethod(OldMD->getCanonicalDecl()); 4731 if (!CheckOverridingFunctionReturnType(MD, OldMD) && 4732 !CheckOverridingFunctionExceptionSpec(MD, OldMD) && 4733 !CheckIfOverriddenFunctionIsMarkedFinal(MD, OldMD)) { 4734 AddedAny = true; 4735 } 4736 } 4737 } 4738 } 4739 4740 return AddedAny; 4741 } 4742 4743 namespace { 4744 // Struct for holding all of the extra arguments needed by 4745 // DiagnoseInvalidRedeclaration to call Sema::ActOnFunctionDeclarator. 4746 struct ActOnFDArgs { 4747 Scope *S; 4748 Declarator &D; 4749 MultiTemplateParamsArg TemplateParamLists; 4750 bool AddToScope; 4751 }; 4752 } 4753 4754 namespace { 4755 4756 // Callback to only accept typo corrections that have a non-zero edit distance. 4757 // Also only accept corrections that have the same parent decl. 4758 class DifferentNameValidatorCCC : public CorrectionCandidateCallback { 4759 public: 4760 DifferentNameValidatorCCC(ASTContext &Context, FunctionDecl *TypoFD, 4761 CXXRecordDecl *Parent) 4762 : Context(Context), OriginalFD(TypoFD), 4763 ExpectedParent(Parent ? Parent->getCanonicalDecl() : 0) {} 4764 4765 virtual bool ValidateCandidate(const TypoCorrection &candidate) { 4766 if (candidate.getEditDistance() == 0) 4767 return false; 4768 4769 llvm::SmallVector<unsigned, 1> MismatchedParams; 4770 for (TypoCorrection::const_decl_iterator CDecl = candidate.begin(), 4771 CDeclEnd = candidate.end(); 4772 CDecl != CDeclEnd; ++CDecl) { 4773 FunctionDecl *FD = dyn_cast<FunctionDecl>(*CDecl); 4774 4775 if (FD && !FD->hasBody() && 4776 hasSimilarParameters(Context, FD, OriginalFD, MismatchedParams)) { 4777 if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD)) { 4778 CXXRecordDecl *Parent = MD->getParent(); 4779 if (Parent && Parent->getCanonicalDecl() == ExpectedParent) 4780 return true; 4781 } else if (!ExpectedParent) { 4782 return true; 4783 } 4784 } 4785 } 4786 4787 return false; 4788 } 4789 4790 private: 4791 ASTContext &Context; 4792 FunctionDecl *OriginalFD; 4793 CXXRecordDecl *ExpectedParent; 4794 }; 4795 4796 } 4797 4798 /// \brief Generate diagnostics for an invalid function redeclaration. 4799 /// 4800 /// This routine handles generating the diagnostic messages for an invalid 4801 /// function redeclaration, including finding possible similar declarations 4802 /// or performing typo correction if there are no previous declarations with 4803 /// the same name. 4804 /// 4805 /// Returns a NamedDecl iff typo correction was performed and substituting in 4806 /// the new declaration name does not cause new errors. 4807 static NamedDecl* DiagnoseInvalidRedeclaration( 4808 Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, 4809 ActOnFDArgs &ExtraArgs) { 4810 NamedDecl *Result = NULL; 4811 DeclarationName Name = NewFD->getDeclName(); 4812 DeclContext *NewDC = NewFD->getDeclContext(); 4813 LookupResult Prev(SemaRef, Name, NewFD->getLocation(), 4814 Sema::LookupOrdinaryName, Sema::ForRedeclaration); 4815 llvm::SmallVector<unsigned, 1> MismatchedParams; 4816 llvm::SmallVector<std::pair<FunctionDecl*, unsigned>, 1> NearMatches; 4817 TypoCorrection Correction; 4818 bool isFriendDecl = (SemaRef.getLangOpts().CPlusPlus && 4819 ExtraArgs.D.getDeclSpec().isFriendSpecified()); 4820 unsigned DiagMsg = isFriendDecl ? diag::err_no_matching_local_friend 4821 : diag::err_member_def_does_not_match; 4822 4823 NewFD->setInvalidDecl(); 4824 SemaRef.LookupQualifiedName(Prev, NewDC); 4825 assert(!Prev.isAmbiguous() && 4826 "Cannot have an ambiguity in previous-declaration lookup"); 4827 CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewFD); 4828 DifferentNameValidatorCCC Validator(SemaRef.Context, NewFD, 4829 MD ? MD->getParent() : 0); 4830 if (!Prev.empty()) { 4831 for (LookupResult::iterator Func = Prev.begin(), FuncEnd = Prev.end(); 4832 Func != FuncEnd; ++Func) { 4833 FunctionDecl *FD = dyn_cast<FunctionDecl>(*Func); 4834 if (FD && 4835 hasSimilarParameters(SemaRef.Context, FD, NewFD, MismatchedParams)) { 4836 // Add 1 to the index so that 0 can mean the mismatch didn't 4837 // involve a parameter 4838 unsigned ParamNum = 4839 MismatchedParams.empty() ? 0 : MismatchedParams.front() + 1; 4840 NearMatches.push_back(std::make_pair(FD, ParamNum)); 4841 } 4842 } 4843 // If the qualified name lookup yielded nothing, try typo correction 4844 } else if ((Correction = SemaRef.CorrectTypo(Prev.getLookupNameInfo(), 4845 Prev.getLookupKind(), 0, 0, 4846 Validator, NewDC))) { 4847 // Trap errors. 4848 Sema::SFINAETrap Trap(SemaRef); 4849 4850 // Set up everything for the call to ActOnFunctionDeclarator 4851 ExtraArgs.D.SetIdentifier(Correction.getCorrectionAsIdentifierInfo(), 4852 ExtraArgs.D.getIdentifierLoc()); 4853 Previous.clear(); 4854 Previous.setLookupName(Correction.getCorrection()); 4855 for (TypoCorrection::decl_iterator CDecl = Correction.begin(), 4856 CDeclEnd = Correction.end(); 4857 CDecl != CDeclEnd; ++CDecl) { 4858 FunctionDecl *FD = dyn_cast<FunctionDecl>(*CDecl); 4859 if (FD && !FD->hasBody() && 4860 hasSimilarParameters(SemaRef.Context, FD, NewFD, MismatchedParams)) { 4861 Previous.addDecl(FD); 4862 } 4863 } 4864 bool wasRedeclaration = ExtraArgs.D.isRedeclaration(); 4865 // TODO: Refactor ActOnFunctionDeclarator so that we can call only the 4866 // pieces need to verify the typo-corrected C++ declaraction and hopefully 4867 // eliminate the need for the parameter pack ExtraArgs. 4868 Result = SemaRef.ActOnFunctionDeclarator( 4869 ExtraArgs.S, ExtraArgs.D, 4870 Correction.getCorrectionDecl()->getDeclContext(), 4871 NewFD->getTypeSourceInfo(), Previous, ExtraArgs.TemplateParamLists, 4872 ExtraArgs.AddToScope); 4873 if (Trap.hasErrorOccurred()) { 4874 // Pretend the typo correction never occurred 4875 ExtraArgs.D.SetIdentifier(Name.getAsIdentifierInfo(), 4876 ExtraArgs.D.getIdentifierLoc()); 4877 ExtraArgs.D.setRedeclaration(wasRedeclaration); 4878 Previous.clear(); 4879 Previous.setLookupName(Name); 4880 Result = NULL; 4881 } else { 4882 for (LookupResult::iterator Func = Previous.begin(), 4883 FuncEnd = Previous.end(); 4884 Func != FuncEnd; ++Func) { 4885 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*Func)) 4886 NearMatches.push_back(std::make_pair(FD, 0)); 4887 } 4888 } 4889 if (NearMatches.empty()) { 4890 // Ignore the correction if it didn't yield any close FunctionDecl matches 4891 Correction = TypoCorrection(); 4892 } else { 4893 DiagMsg = isFriendDecl ? diag::err_no_matching_local_friend_suggest 4894 : diag::err_member_def_does_not_match_suggest; 4895 } 4896 } 4897 4898 if (Correction) { 4899 // FIXME: use Correction.getCorrectionRange() instead of computing the range 4900 // here. This requires passing in the CXXScopeSpec to CorrectTypo which in 4901 // turn causes the correction to fully qualify the name. If we fix 4902 // CorrectTypo to minimally qualify then this change should be good. 4903 SourceRange FixItLoc(NewFD->getLocation()); 4904 CXXScopeSpec &SS = ExtraArgs.D.getCXXScopeSpec(); 4905 if (Correction.getCorrectionSpecifier() && SS.isValid()) 4906 FixItLoc.setBegin(SS.getBeginLoc()); 4907 SemaRef.Diag(NewFD->getLocStart(), DiagMsg) 4908 << Name << NewDC << Correction.getQuoted(SemaRef.getLangOpts()) 4909 << FixItHint::CreateReplacement( 4910 FixItLoc, Correction.getAsString(SemaRef.getLangOpts())); 4911 } else { 4912 SemaRef.Diag(NewFD->getLocation(), DiagMsg) 4913 << Name << NewDC << NewFD->getLocation(); 4914 } 4915 4916 bool NewFDisConst = false; 4917 if (CXXMethodDecl *NewMD = dyn_cast<CXXMethodDecl>(NewFD)) 4918 NewFDisConst = NewMD->isConst(); 4919 4920 for (llvm::SmallVector<std::pair<FunctionDecl*, unsigned>, 1>::iterator 4921 NearMatch = NearMatches.begin(), NearMatchEnd = NearMatches.end(); 4922 NearMatch != NearMatchEnd; ++NearMatch) { 4923 FunctionDecl *FD = NearMatch->first; 4924 bool FDisConst = false; 4925 if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD)) 4926 FDisConst = MD->isConst(); 4927 4928 if (unsigned Idx = NearMatch->second) { 4929 ParmVarDecl *FDParam = FD->getParamDecl(Idx-1); 4930 SourceLocation Loc = FDParam->getTypeSpecStartLoc(); 4931 if (Loc.isInvalid()) Loc = FD->getLocation(); 4932 SemaRef.Diag(Loc, diag::note_member_def_close_param_match) 4933 << Idx << FDParam->getType() << NewFD->getParamDecl(Idx-1)->getType(); 4934 } else if (Correction) { 4935 SemaRef.Diag(FD->getLocation(), diag::note_previous_decl) 4936 << Correction.getQuoted(SemaRef.getLangOpts()); 4937 } else if (FDisConst != NewFDisConst) { 4938 SemaRef.Diag(FD->getLocation(), diag::note_member_def_close_const_match) 4939 << NewFDisConst << FD->getSourceRange().getEnd(); 4940 } else 4941 SemaRef.Diag(FD->getLocation(), diag::note_member_def_close_match); 4942 } 4943 return Result; 4944 } 4945 4946 static FunctionDecl::StorageClass getFunctionStorageClass(Sema &SemaRef, 4947 Declarator &D) { 4948 switch (D.getDeclSpec().getStorageClassSpec()) { 4949 default: llvm_unreachable("Unknown storage class!"); 4950 case DeclSpec::SCS_auto: 4951 case DeclSpec::SCS_register: 4952 case DeclSpec::SCS_mutable: 4953 SemaRef.Diag(D.getDeclSpec().getStorageClassSpecLoc(), 4954 diag::err_typecheck_sclass_func); 4955 D.setInvalidType(); 4956 break; 4957 case DeclSpec::SCS_unspecified: break; 4958 case DeclSpec::SCS_extern: return SC_Extern; 4959 case DeclSpec::SCS_static: { 4960 if (SemaRef.CurContext->getRedeclContext()->isFunctionOrMethod()) { 4961 // C99 6.7.1p5: 4962 // The declaration of an identifier for a function that has 4963 // block scope shall have no explicit storage-class specifier 4964 // other than extern 4965 // See also (C++ [dcl.stc]p4). 4966 SemaRef.Diag(D.getDeclSpec().getStorageClassSpecLoc(), 4967 diag::err_static_block_func); 4968 break; 4969 } else 4970 return SC_Static; 4971 } 4972 case DeclSpec::SCS_private_extern: return SC_PrivateExtern; 4973 } 4974 4975 // No explicit storage class has already been returned 4976 return SC_None; 4977 } 4978 4979 static FunctionDecl* CreateNewFunctionDecl(Sema &SemaRef, Declarator &D, 4980 DeclContext *DC, QualType &R, 4981 TypeSourceInfo *TInfo, 4982 FunctionDecl::StorageClass SC, 4983 bool &IsVirtualOkay) { 4984 DeclarationNameInfo NameInfo = SemaRef.GetNameForDeclarator(D); 4985 DeclarationName Name = NameInfo.getName(); 4986 4987 FunctionDecl *NewFD = 0; 4988 bool isInline = D.getDeclSpec().isInlineSpecified(); 4989 DeclSpec::SCS SCSpec = D.getDeclSpec().getStorageClassSpecAsWritten(); 4990 FunctionDecl::StorageClass SCAsWritten 4991 = StorageClassSpecToFunctionDeclStorageClass(SCSpec); 4992 4993 if (!SemaRef.getLangOpts().CPlusPlus) { 4994 // Determine whether the function was written with a 4995 // prototype. This true when: 4996 // - there is a prototype in the declarator, or 4997 // - the type R of the function is some kind of typedef or other reference 4998 // to a type name (which eventually refers to a function type). 4999 bool HasPrototype = 5000 (D.isFunctionDeclarator() && D.getFunctionTypeInfo().hasPrototype) || 5001 (!isa<FunctionType>(R.getTypePtr()) && R->isFunctionProtoType()); 5002 5003 NewFD = FunctionDecl::Create(SemaRef.Context, DC, 5004 D.getLocStart(), NameInfo, R, 5005 TInfo, SC, SCAsWritten, isInline, 5006 HasPrototype); 5007 if (D.isInvalidType()) 5008 NewFD->setInvalidDecl(); 5009 5010 // Set the lexical context. 5011 NewFD->setLexicalDeclContext(SemaRef.CurContext); 5012 5013 return NewFD; 5014 } 5015 5016 bool isExplicit = D.getDeclSpec().isExplicitSpecified(); 5017 bool isConstexpr = D.getDeclSpec().isConstexprSpecified(); 5018 5019 // Check that the return type is not an abstract class type. 5020 // For record types, this is done by the AbstractClassUsageDiagnoser once 5021 // the class has been completely parsed. 5022 if (!DC->isRecord() && 5023 SemaRef.RequireNonAbstractType(D.getIdentifierLoc(), 5024 R->getAs<FunctionType>()->getResultType(), 5025 diag::err_abstract_type_in_decl, 5026 SemaRef.AbstractReturnType)) 5027 D.setInvalidType(); 5028 5029 if (Name.getNameKind() == DeclarationName::CXXConstructorName) { 5030 // This is a C++ constructor declaration. 5031 assert(DC->isRecord() && 5032 "Constructors can only be declared in a member context"); 5033 5034 R = SemaRef.CheckConstructorDeclarator(D, R, SC); 5035 return CXXConstructorDecl::Create(SemaRef.Context, cast<CXXRecordDecl>(DC), 5036 D.getLocStart(), NameInfo, 5037 R, TInfo, isExplicit, isInline, 5038 /*isImplicitlyDeclared=*/false, 5039 isConstexpr); 5040 5041 } else if (Name.getNameKind() == DeclarationName::CXXDestructorName) { 5042 // This is a C++ destructor declaration. 5043 if (DC->isRecord()) { 5044 R = SemaRef.CheckDestructorDeclarator(D, R, SC); 5045 CXXRecordDecl *Record = cast<CXXRecordDecl>(DC); 5046 CXXDestructorDecl *NewDD = CXXDestructorDecl::Create( 5047 SemaRef.Context, Record, 5048 D.getLocStart(), 5049 NameInfo, R, TInfo, isInline, 5050 /*isImplicitlyDeclared=*/false); 5051 5052 // If the class is complete, then we now create the implicit exception 5053 // specification. If the class is incomplete or dependent, we can't do 5054 // it yet. 5055 if (SemaRef.getLangOpts().CPlusPlus0x && !Record->isDependentType() && 5056 Record->getDefinition() && !Record->isBeingDefined() && 5057 R->getAs<FunctionProtoType>()->getExceptionSpecType() == EST_None) { 5058 SemaRef.AdjustDestructorExceptionSpec(Record, NewDD); 5059 } 5060 5061 IsVirtualOkay = true; 5062 return NewDD; 5063 5064 } else { 5065 SemaRef.Diag(D.getIdentifierLoc(), diag::err_destructor_not_member); 5066 D.setInvalidType(); 5067 5068 // Create a FunctionDecl to satisfy the function definition parsing 5069 // code path. 5070 return FunctionDecl::Create(SemaRef.Context, DC, 5071 D.getLocStart(), 5072 D.getIdentifierLoc(), Name, R, TInfo, 5073 SC, SCAsWritten, isInline, 5074 /*hasPrototype=*/true, isConstexpr); 5075 } 5076 5077 } else if (Name.getNameKind() == DeclarationName::CXXConversionFunctionName) { 5078 if (!DC->isRecord()) { 5079 SemaRef.Diag(D.getIdentifierLoc(), 5080 diag::err_conv_function_not_member); 5081 return 0; 5082 } 5083 5084 SemaRef.CheckConversionDeclarator(D, R, SC); 5085 IsVirtualOkay = true; 5086 return CXXConversionDecl::Create(SemaRef.Context, cast<CXXRecordDecl>(DC), 5087 D.getLocStart(), NameInfo, 5088 R, TInfo, isInline, isExplicit, 5089 isConstexpr, SourceLocation()); 5090 5091 } else if (DC->isRecord()) { 5092 // If the name of the function is the same as the name of the record, 5093 // then this must be an invalid constructor that has a return type. 5094 // (The parser checks for a return type and makes the declarator a 5095 // constructor if it has no return type). 5096 if (Name.getAsIdentifierInfo() && 5097 Name.getAsIdentifierInfo() == cast<CXXRecordDecl>(DC)->getIdentifier()){ 5098 SemaRef.Diag(D.getIdentifierLoc(), diag::err_constructor_return_type) 5099 << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc()) 5100 << SourceRange(D.getIdentifierLoc()); 5101 return 0; 5102 } 5103 5104 bool isStatic = SC == SC_Static; 5105 5106 // [class.free]p1: 5107 // Any allocation function for a class T is a static member 5108 // (even if not explicitly declared static). 5109 if (Name.getCXXOverloadedOperator() == OO_New || 5110 Name.getCXXOverloadedOperator() == OO_Array_New) 5111 isStatic = true; 5112 5113 // [class.free]p6 Any deallocation function for a class X is a static member 5114 // (even if not explicitly declared static). 5115 if (Name.getCXXOverloadedOperator() == OO_Delete || 5116 Name.getCXXOverloadedOperator() == OO_Array_Delete) 5117 isStatic = true; 5118 5119 IsVirtualOkay = !isStatic; 5120 5121 // This is a C++ method declaration. 5122 return CXXMethodDecl::Create(SemaRef.Context, cast<CXXRecordDecl>(DC), 5123 D.getLocStart(), NameInfo, R, 5124 TInfo, isStatic, SCAsWritten, isInline, 5125 isConstexpr, SourceLocation()); 5126 5127 } else { 5128 // Determine whether the function was written with a 5129 // prototype. This true when: 5130 // - we're in C++ (where every function has a prototype), 5131 return FunctionDecl::Create(SemaRef.Context, DC, 5132 D.getLocStart(), 5133 NameInfo, R, TInfo, SC, SCAsWritten, isInline, 5134 true/*HasPrototype*/, isConstexpr); 5135 } 5136 } 5137 5138 void Sema::checkVoidParamDecl(ParmVarDecl *Param) { 5139 // In C++, the empty parameter-type-list must be spelled "void"; a 5140 // typedef of void is not permitted. 5141 if (getLangOpts().CPlusPlus && 5142 Param->getType().getUnqualifiedType() != Context.VoidTy) { 5143 bool IsTypeAlias = false; 5144 if (const TypedefType *TT = Param->getType()->getAs<TypedefType>()) 5145 IsTypeAlias = isa<TypeAliasDecl>(TT->getDecl()); 5146 else if (const TemplateSpecializationType *TST = 5147 Param->getType()->getAs<TemplateSpecializationType>()) 5148 IsTypeAlias = TST->isTypeAlias(); 5149 Diag(Param->getLocation(), diag::err_param_typedef_of_void) 5150 << IsTypeAlias; 5151 } 5152 } 5153 5154 NamedDecl* 5155 Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, 5156 TypeSourceInfo *TInfo, LookupResult &Previous, 5157 MultiTemplateParamsArg TemplateParamLists, 5158 bool &AddToScope) { 5159 QualType R = TInfo->getType(); 5160 5161 assert(R.getTypePtr()->isFunctionType()); 5162 5163 // TODO: consider using NameInfo for diagnostic. 5164 DeclarationNameInfo NameInfo = GetNameForDeclarator(D); 5165 DeclarationName Name = NameInfo.getName(); 5166 FunctionDecl::StorageClass SC = getFunctionStorageClass(*this, D); 5167 5168 if (D.getDeclSpec().isThreadSpecified()) 5169 Diag(D.getDeclSpec().getThreadSpecLoc(), diag::err_invalid_thread); 5170 5171 // Do not allow returning a objc interface by-value. 5172 if (R->getAs<FunctionType>()->getResultType()->isObjCObjectType()) { 5173 Diag(D.getIdentifierLoc(), 5174 diag::err_object_cannot_be_passed_returned_by_value) << 0 5175 << R->getAs<FunctionType>()->getResultType() 5176 << FixItHint::CreateInsertion(D.getIdentifierLoc(), "*"); 5177 5178 QualType T = R->getAs<FunctionType>()->getResultType(); 5179 T = Context.getObjCObjectPointerType(T); 5180 if (const FunctionProtoType *FPT = dyn_cast<FunctionProtoType>(R)) { 5181 FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo(); 5182 R = Context.getFunctionType(T, FPT->arg_type_begin(), 5183 FPT->getNumArgs(), EPI); 5184 } 5185 else if (isa<FunctionNoProtoType>(R)) 5186 R = Context.getFunctionNoProtoType(T); 5187 } 5188 5189 bool isFriend = false; 5190 FunctionTemplateDecl *FunctionTemplate = 0; 5191 bool isExplicitSpecialization = false; 5192 bool isFunctionTemplateSpecialization = false; 5193 5194 bool isDependentClassScopeExplicitSpecialization = false; 5195 bool HasExplicitTemplateArgs = false; 5196 TemplateArgumentListInfo TemplateArgs; 5197 5198 bool isVirtualOkay = false; 5199 5200 FunctionDecl *NewFD = CreateNewFunctionDecl(*this, D, DC, R, TInfo, SC, 5201 isVirtualOkay); 5202 if (!NewFD) return 0; 5203 5204 if (OriginalLexicalContext && OriginalLexicalContext->isObjCContainer()) 5205 NewFD->setTopLevelDeclInObjCContainer(); 5206 5207 if (getLangOpts().CPlusPlus) { 5208 bool isInline = D.getDeclSpec().isInlineSpecified(); 5209 bool isVirtual = D.getDeclSpec().isVirtualSpecified(); 5210 bool isExplicit = D.getDeclSpec().isExplicitSpecified(); 5211 bool isConstexpr = D.getDeclSpec().isConstexprSpecified(); 5212 isFriend = D.getDeclSpec().isFriendSpecified(); 5213 if (isFriend && !isInline && D.isFunctionDefinition()) { 5214 // C++ [class.friend]p5 5215 // A function can be defined in a friend declaration of a 5216 // class . . . . Such a function is implicitly inline. 5217 NewFD->setImplicitlyInline(); 5218 } 5219 5220 // If this is a method defined in an __interface, and is not a constructor 5221 // or an overloaded operator, then set the pure flag (isVirtual will already 5222 // return true). 5223 if (const CXXRecordDecl *Parent = 5224 dyn_cast<CXXRecordDecl>(NewFD->getDeclContext())) { 5225 if (Parent->isInterface() && cast<CXXMethodDecl>(NewFD)->isUserProvided()) 5226 NewFD->setPure(true); 5227 } 5228 5229 SetNestedNameSpecifier(NewFD, D); 5230 isExplicitSpecialization = false; 5231 isFunctionTemplateSpecialization = false; 5232 if (D.isInvalidType()) 5233 NewFD->setInvalidDecl(); 5234 5235 // Set the lexical context. If the declarator has a C++ 5236 // scope specifier, or is the object of a friend declaration, the 5237 // lexical context will be different from the semantic context. 5238 NewFD->setLexicalDeclContext(CurContext); 5239 5240 // Match up the template parameter lists with the scope specifier, then 5241 // determine whether we have a template or a template specialization. 5242 bool Invalid = false; 5243 if (TemplateParameterList *TemplateParams 5244 = MatchTemplateParametersToScopeSpecifier( 5245 D.getDeclSpec().getLocStart(), 5246 D.getIdentifierLoc(), 5247 D.getCXXScopeSpec(), 5248 TemplateParamLists.data(), 5249 TemplateParamLists.size(), 5250 isFriend, 5251 isExplicitSpecialization, 5252 Invalid)) { 5253 if (TemplateParams->size() > 0) { 5254 // This is a function template 5255 5256 // Check that we can declare a template here. 5257 if (CheckTemplateDeclScope(S, TemplateParams)) 5258 return 0; 5259 5260 // A destructor cannot be a template. 5261 if (Name.getNameKind() == DeclarationName::CXXDestructorName) { 5262 Diag(NewFD->getLocation(), diag::err_destructor_template); 5263 return 0; 5264 } 5265 5266 // If we're adding a template to a dependent context, we may need to 5267 // rebuilding some of the types used within the template parameter list, 5268 // now that we know what the current instantiation is. 5269 if (DC->isDependentContext()) { 5270 ContextRAII SavedContext(*this, DC); 5271 if (RebuildTemplateParamsInCurrentInstantiation(TemplateParams)) 5272 Invalid = true; 5273 } 5274 5275 5276 FunctionTemplate = FunctionTemplateDecl::Create(Context, DC, 5277 NewFD->getLocation(), 5278 Name, TemplateParams, 5279 NewFD); 5280 FunctionTemplate->setLexicalDeclContext(CurContext); 5281 NewFD->setDescribedFunctionTemplate(FunctionTemplate); 5282 5283 // For source fidelity, store the other template param lists. 5284 if (TemplateParamLists.size() > 1) { 5285 NewFD->setTemplateParameterListsInfo(Context, 5286 TemplateParamLists.size() - 1, 5287 TemplateParamLists.data()); 5288 } 5289 } else { 5290 // This is a function template specialization. 5291 isFunctionTemplateSpecialization = true; 5292 // For source fidelity, store all the template param lists. 5293 NewFD->setTemplateParameterListsInfo(Context, 5294 TemplateParamLists.size(), 5295 TemplateParamLists.data()); 5296 5297 // C++0x [temp.expl.spec]p20 forbids "template<> friend void foo(int);". 5298 if (isFriend) { 5299 // We want to remove the "template<>", found here. 5300 SourceRange RemoveRange = TemplateParams->getSourceRange(); 5301 5302 // If we remove the template<> and the name is not a 5303 // template-id, we're actually silently creating a problem: 5304 // the friend declaration will refer to an untemplated decl, 5305 // and clearly the user wants a template specialization. So 5306 // we need to insert '<>' after the name. 5307 SourceLocation InsertLoc; 5308 if (D.getName().getKind() != UnqualifiedId::IK_TemplateId) { 5309 InsertLoc = D.getName().getSourceRange().getEnd(); 5310 InsertLoc = PP.getLocForEndOfToken(InsertLoc); 5311 } 5312 5313 Diag(D.getIdentifierLoc(), diag::err_template_spec_decl_friend) 5314 << Name << RemoveRange 5315 << FixItHint::CreateRemoval(RemoveRange) 5316 << FixItHint::CreateInsertion(InsertLoc, "<>"); 5317 } 5318 } 5319 } 5320 else { 5321 // All template param lists were matched against the scope specifier: 5322 // this is NOT (an explicit specialization of) a template. 5323 if (TemplateParamLists.size() > 0) 5324 // For source fidelity, store all the template param lists. 5325 NewFD->setTemplateParameterListsInfo(Context, 5326 TemplateParamLists.size(), 5327 TemplateParamLists.data()); 5328 } 5329 5330 if (Invalid) { 5331 NewFD->setInvalidDecl(); 5332 if (FunctionTemplate) 5333 FunctionTemplate->setInvalidDecl(); 5334 } 5335 5336 // C++ [dcl.fct.spec]p5: 5337 // The virtual specifier shall only be used in declarations of 5338 // nonstatic class member functions that appear within a 5339 // member-specification of a class declaration; see 10.3. 5340 // 5341 if (isVirtual && !NewFD->isInvalidDecl()) { 5342 if (!isVirtualOkay) { 5343 Diag(D.getDeclSpec().getVirtualSpecLoc(), 5344 diag::err_virtual_non_function); 5345 } else if (!CurContext->isRecord()) { 5346 // 'virtual' was specified outside of the class. 5347 Diag(D.getDeclSpec().getVirtualSpecLoc(), 5348 diag::err_virtual_out_of_class) 5349 << FixItHint::CreateRemoval(D.getDeclSpec().getVirtualSpecLoc()); 5350 } else if (NewFD->getDescribedFunctionTemplate()) { 5351 // C++ [temp.mem]p3: 5352 // A member function template shall not be virtual. 5353 Diag(D.getDeclSpec().getVirtualSpecLoc(), 5354 diag::err_virtual_member_function_template) 5355 << FixItHint::CreateRemoval(D.getDeclSpec().getVirtualSpecLoc()); 5356 } else { 5357 // Okay: Add virtual to the method. 5358 NewFD->setVirtualAsWritten(true); 5359 } 5360 } 5361 5362 // C++ [dcl.fct.spec]p3: 5363 // The inline specifier shall not appear on a block scope function 5364 // declaration. 5365 if (isInline && !NewFD->isInvalidDecl()) { 5366 if (CurContext->isFunctionOrMethod()) { 5367 // 'inline' is not allowed on block scope function declaration. 5368 Diag(D.getDeclSpec().getInlineSpecLoc(), 5369 diag::err_inline_declaration_block_scope) << Name 5370 << FixItHint::CreateRemoval(D.getDeclSpec().getInlineSpecLoc()); 5371 } 5372 } 5373 5374 // C++ [dcl.fct.spec]p6: 5375 // The explicit specifier shall be used only in the declaration of a 5376 // constructor or conversion function within its class definition; 5377 // see 12.3.1 and 12.3.2. 5378 if (isExplicit && !NewFD->isInvalidDecl()) { 5379 if (!CurContext->isRecord()) { 5380 // 'explicit' was specified outside of the class. 5381 Diag(D.getDeclSpec().getExplicitSpecLoc(), 5382 diag::err_explicit_out_of_class) 5383 << FixItHint::CreateRemoval(D.getDeclSpec().getExplicitSpecLoc()); 5384 } else if (!isa<CXXConstructorDecl>(NewFD) && 5385 !isa<CXXConversionDecl>(NewFD)) { 5386 // 'explicit' was specified on a function that wasn't a constructor 5387 // or conversion function. 5388 Diag(D.getDeclSpec().getExplicitSpecLoc(), 5389 diag::err_explicit_non_ctor_or_conv_function) 5390 << FixItHint::CreateRemoval(D.getDeclSpec().getExplicitSpecLoc()); 5391 } 5392 } 5393 5394 if (isConstexpr) { 5395 // C++0x [dcl.constexpr]p2: constexpr functions and constexpr constructors 5396 // are implicitly inline. 5397 NewFD->setImplicitlyInline(); 5398 5399 // C++0x [dcl.constexpr]p3: functions declared constexpr are required to 5400 // be either constructors or to return a literal type. Therefore, 5401 // destructors cannot be declared constexpr. 5402 if (isa<CXXDestructorDecl>(NewFD)) 5403 Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_constexpr_dtor); 5404 } 5405 5406 // If __module_private__ was specified, mark the function accordingly. 5407 if (D.getDeclSpec().isModulePrivateSpecified()) { 5408 if (isFunctionTemplateSpecialization) { 5409 SourceLocation ModulePrivateLoc 5410 = D.getDeclSpec().getModulePrivateSpecLoc(); 5411 Diag(ModulePrivateLoc, diag::err_module_private_specialization) 5412 << 0 5413 << FixItHint::CreateRemoval(ModulePrivateLoc); 5414 } else { 5415 NewFD->setModulePrivate(); 5416 if (FunctionTemplate) 5417 FunctionTemplate->setModulePrivate(); 5418 } 5419 } 5420 5421 if (isFriend) { 5422 // For now, claim that the objects have no previous declaration. 5423 if (FunctionTemplate) { 5424 FunctionTemplate->setObjectOfFriendDecl(false); 5425 FunctionTemplate->setAccess(AS_public); 5426 } 5427 NewFD->setObjectOfFriendDecl(false); 5428 NewFD->setAccess(AS_public); 5429 } 5430 5431 // If a function is defined as defaulted or deleted, mark it as such now. 5432 switch (D.getFunctionDefinitionKind()) { 5433 case FDK_Declaration: 5434 case FDK_Definition: 5435 break; 5436 5437 case FDK_Defaulted: 5438 NewFD->setDefaulted(); 5439 break; 5440 5441 case FDK_Deleted: 5442 NewFD->setDeletedAsWritten(); 5443 break; 5444 } 5445 5446 if (isa<CXXMethodDecl>(NewFD) && DC == CurContext && 5447 D.isFunctionDefinition()) { 5448 // C++ [class.mfct]p2: 5449 // A member function may be defined (8.4) in its class definition, in 5450 // which case it is an inline member function (7.1.2) 5451 NewFD->setImplicitlyInline(); 5452 } 5453 5454 if (SC == SC_Static && isa<CXXMethodDecl>(NewFD) && 5455 !CurContext->isRecord()) { 5456 // C++ [class.static]p1: 5457 // A data or function member of a class may be declared static 5458 // in a class definition, in which case it is a static member of 5459 // the class. 5460 5461 // Complain about the 'static' specifier if it's on an out-of-line 5462 // member function definition. 5463 Diag(D.getDeclSpec().getStorageClassSpecLoc(), 5464 diag::err_static_out_of_line) 5465 << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc()); 5466 } 5467 } 5468 5469 // Filter out previous declarations that don't match the scope. 5470 FilterLookupForScope(Previous, DC, S, NewFD->hasLinkage(), 5471 isExplicitSpecialization || 5472 isFunctionTemplateSpecialization); 5473 5474 // Handle GNU asm-label extension (encoded as an attribute). 5475 if (Expr *E = (Expr*) D.getAsmLabel()) { 5476 // The parser guarantees this is a string. 5477 StringLiteral *SE = cast<StringLiteral>(E); 5478 NewFD->addAttr(::new (Context) AsmLabelAttr(SE->getStrTokenLoc(0), Context, 5479 SE->getString())); 5480 } else if (!ExtnameUndeclaredIdentifiers.empty()) { 5481 llvm::DenseMap<IdentifierInfo*,AsmLabelAttr*>::iterator I = 5482 ExtnameUndeclaredIdentifiers.find(NewFD->getIdentifier()); 5483 if (I != ExtnameUndeclaredIdentifiers.end()) { 5484 NewFD->addAttr(I->second); 5485 ExtnameUndeclaredIdentifiers.erase(I); 5486 } 5487 } 5488 5489 // Copy the parameter declarations from the declarator D to the function 5490 // declaration NewFD, if they are available. First scavenge them into Params. 5491 SmallVector<ParmVarDecl*, 16> Params; 5492 if (D.isFunctionDeclarator()) { 5493 DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo(); 5494 5495 // Check for C99 6.7.5.3p10 - foo(void) is a non-varargs 5496 // function that takes no arguments, not a function that takes a 5497 // single void argument. 5498 // We let through "const void" here because Sema::GetTypeForDeclarator 5499 // already checks for that case. 5500 if (FTI.NumArgs == 1 && !FTI.isVariadic && FTI.ArgInfo[0].Ident == 0 && 5501 FTI.ArgInfo[0].Param && 5502 cast<ParmVarDecl>(FTI.ArgInfo[0].Param)->getType()->isVoidType()) { 5503 // Empty arg list, don't push any params. 5504 checkVoidParamDecl(cast<ParmVarDecl>(FTI.ArgInfo[0].Param)); 5505 } else if (FTI.NumArgs > 0 && FTI.ArgInfo[0].Param != 0) { 5506 for (unsigned i = 0, e = FTI.NumArgs; i != e; ++i) { 5507 ParmVarDecl *Param = cast<ParmVarDecl>(FTI.ArgInfo[i].Param); 5508 assert(Param->getDeclContext() != NewFD && "Was set before ?"); 5509 Param->setDeclContext(NewFD); 5510 Params.push_back(Param); 5511 5512 if (Param->isInvalidDecl()) 5513 NewFD->setInvalidDecl(); 5514 } 5515 } 5516 5517 } else if (const FunctionProtoType *FT = R->getAs<FunctionProtoType>()) { 5518 // When we're declaring a function with a typedef, typeof, etc as in the 5519 // following example, we'll need to synthesize (unnamed) 5520 // parameters for use in the declaration. 5521 // 5522 // @code 5523 // typedef void fn(int); 5524 // fn f; 5525 // @endcode 5526 5527 // Synthesize a parameter for each argument type. 5528 for (FunctionProtoType::arg_type_iterator AI = FT->arg_type_begin(), 5529 AE = FT->arg_type_end(); AI != AE; ++AI) { 5530 ParmVarDecl *Param = 5531 BuildParmVarDeclForTypedef(NewFD, D.getIdentifierLoc(), *AI); 5532 Param->setScopeInfo(0, Params.size()); 5533 Params.push_back(Param); 5534 } 5535 } else { 5536 assert(R->isFunctionNoProtoType() && NewFD->getNumParams() == 0 && 5537 "Should not need args for typedef of non-prototype fn"); 5538 } 5539 5540 // Finally, we know we have the right number of parameters, install them. 5541 NewFD->setParams(Params); 5542 5543 // Find all anonymous symbols defined during the declaration of this function 5544 // and add to NewFD. This lets us track decls such 'enum Y' in: 5545 // 5546 // void f(enum Y {AA} x) {} 5547 // 5548 // which would otherwise incorrectly end up in the translation unit scope. 5549 NewFD->setDeclsInPrototypeScope(DeclsInPrototypeScope); 5550 DeclsInPrototypeScope.clear(); 5551 5552 // Process the non-inheritable attributes on this declaration. 5553 ProcessDeclAttributes(S, NewFD, D, 5554 /*NonInheritable=*/true, /*Inheritable=*/false); 5555 5556 // Functions returning a variably modified type violate C99 6.7.5.2p2 5557 // because all functions have linkage. 5558 if (!NewFD->isInvalidDecl() && 5559 NewFD->getResultType()->isVariablyModifiedType()) { 5560 Diag(NewFD->getLocation(), diag::err_vm_func_decl); 5561 NewFD->setInvalidDecl(); 5562 } 5563 5564 // Handle attributes. 5565 ProcessDeclAttributes(S, NewFD, D, 5566 /*NonInheritable=*/false, /*Inheritable=*/true); 5567 5568 if (!getLangOpts().CPlusPlus) { 5569 // Perform semantic checking on the function declaration. 5570 bool isExplicitSpecialization=false; 5571 if (!NewFD->isInvalidDecl()) { 5572 if (NewFD->isMain()) 5573 CheckMain(NewFD, D.getDeclSpec()); 5574 D.setRedeclaration(CheckFunctionDeclaration(S, NewFD, Previous, 5575 isExplicitSpecialization)); 5576 } 5577 // Make graceful recovery from an invalid redeclaration. 5578 else if (!Previous.empty()) 5579 D.setRedeclaration(true); 5580 assert((NewFD->isInvalidDecl() || !D.isRedeclaration() || 5581 Previous.getResultKind() != LookupResult::FoundOverloaded) && 5582 "previous declaration set still overloaded"); 5583 } else { 5584 // If the declarator is a template-id, translate the parser's template 5585 // argument list into our AST format. 5586 if (D.getName().getKind() == UnqualifiedId::IK_TemplateId) { 5587 TemplateIdAnnotation *TemplateId = D.getName().TemplateId; 5588 TemplateArgs.setLAngleLoc(TemplateId->LAngleLoc); 5589 TemplateArgs.setRAngleLoc(TemplateId->RAngleLoc); 5590 ASTTemplateArgsPtr TemplateArgsPtr(TemplateId->getTemplateArgs(), 5591 TemplateId->NumArgs); 5592 translateTemplateArguments(TemplateArgsPtr, 5593 TemplateArgs); 5594 5595 HasExplicitTemplateArgs = true; 5596 5597 if (NewFD->isInvalidDecl()) { 5598 HasExplicitTemplateArgs = false; 5599 } else if (FunctionTemplate) { 5600 // Function template with explicit template arguments. 5601 Diag(D.getIdentifierLoc(), diag::err_function_template_partial_spec) 5602 << SourceRange(TemplateId->LAngleLoc, TemplateId->RAngleLoc); 5603 5604 HasExplicitTemplateArgs = false; 5605 } else if (!isFunctionTemplateSpecialization && 5606 !D.getDeclSpec().isFriendSpecified()) { 5607 // We have encountered something that the user meant to be a 5608 // specialization (because it has explicitly-specified template 5609 // arguments) but that was not introduced with a "template<>" (or had 5610 // too few of them). 5611 Diag(D.getIdentifierLoc(), diag::err_template_spec_needs_header) 5612 << SourceRange(TemplateId->LAngleLoc, TemplateId->RAngleLoc) 5613 << FixItHint::CreateInsertion( 5614 D.getDeclSpec().getLocStart(), 5615 "template<> "); 5616 isFunctionTemplateSpecialization = true; 5617 } else { 5618 // "friend void foo<>(int);" is an implicit specialization decl. 5619 isFunctionTemplateSpecialization = true; 5620 } 5621 } else if (isFriend && isFunctionTemplateSpecialization) { 5622 // This combination is only possible in a recovery case; the user 5623 // wrote something like: 5624 // template <> friend void foo(int); 5625 // which we're recovering from as if the user had written: 5626 // friend void foo<>(int); 5627 // Go ahead and fake up a template id. 5628 HasExplicitTemplateArgs = true; 5629 TemplateArgs.setLAngleLoc(D.getIdentifierLoc()); 5630 TemplateArgs.setRAngleLoc(D.getIdentifierLoc()); 5631 } 5632 5633 // If it's a friend (and only if it's a friend), it's possible 5634 // that either the specialized function type or the specialized 5635 // template is dependent, and therefore matching will fail. In 5636 // this case, don't check the specialization yet. 5637 bool InstantiationDependent = false; 5638 if (isFunctionTemplateSpecialization && isFriend && 5639 (NewFD->getType()->isDependentType() || DC->isDependentContext() || 5640 TemplateSpecializationType::anyDependentTemplateArguments( 5641 TemplateArgs.getArgumentArray(), TemplateArgs.size(), 5642 InstantiationDependent))) { 5643 assert(HasExplicitTemplateArgs && 5644 "friend function specialization without template args"); 5645 if (CheckDependentFunctionTemplateSpecialization(NewFD, TemplateArgs, 5646 Previous)) 5647 NewFD->setInvalidDecl(); 5648 } else if (isFunctionTemplateSpecialization) { 5649 if (CurContext->isDependentContext() && CurContext->isRecord() 5650 && !isFriend) { 5651 isDependentClassScopeExplicitSpecialization = true; 5652 Diag(NewFD->getLocation(), getLangOpts().MicrosoftExt ? 5653 diag::ext_function_specialization_in_class : 5654 diag::err_function_specialization_in_class) 5655 << NewFD->getDeclName(); 5656 } else if (CheckFunctionTemplateSpecialization(NewFD, 5657 (HasExplicitTemplateArgs ? &TemplateArgs : 0), 5658 Previous)) 5659 NewFD->setInvalidDecl(); 5660 5661 // C++ [dcl.stc]p1: 5662 // A storage-class-specifier shall not be specified in an explicit 5663 // specialization (14.7.3) 5664 if (SC != SC_None) { 5665 if (SC != NewFD->getStorageClass()) 5666 Diag(NewFD->getLocation(), 5667 diag::err_explicit_specialization_inconsistent_storage_class) 5668 << SC 5669 << FixItHint::CreateRemoval( 5670 D.getDeclSpec().getStorageClassSpecLoc()); 5671 5672 else 5673 Diag(NewFD->getLocation(), 5674 diag::ext_explicit_specialization_storage_class) 5675 << FixItHint::CreateRemoval( 5676 D.getDeclSpec().getStorageClassSpecLoc()); 5677 } 5678 5679 } else if (isExplicitSpecialization && isa<CXXMethodDecl>(NewFD)) { 5680 if (CheckMemberSpecialization(NewFD, Previous)) 5681 NewFD->setInvalidDecl(); 5682 } 5683 5684 // Perform semantic checking on the function declaration. 5685 if (!isDependentClassScopeExplicitSpecialization) { 5686 if (NewFD->isInvalidDecl()) { 5687 // If this is a class member, mark the class invalid immediately. 5688 // This avoids some consistency errors later. 5689 if (CXXMethodDecl* methodDecl = dyn_cast<CXXMethodDecl>(NewFD)) 5690 methodDecl->getParent()->setInvalidDecl(); 5691 } else { 5692 if (NewFD->isMain()) 5693 CheckMain(NewFD, D.getDeclSpec()); 5694 D.setRedeclaration(CheckFunctionDeclaration(S, NewFD, Previous, 5695 isExplicitSpecialization)); 5696 } 5697 } 5698 5699 assert((NewFD->isInvalidDecl() || !D.isRedeclaration() || 5700 Previous.getResultKind() != LookupResult::FoundOverloaded) && 5701 "previous declaration set still overloaded"); 5702 5703 NamedDecl *PrincipalDecl = (FunctionTemplate 5704 ? cast<NamedDecl>(FunctionTemplate) 5705 : NewFD); 5706 5707 if (isFriend && D.isRedeclaration()) { 5708 AccessSpecifier Access = AS_public; 5709 if (!NewFD->isInvalidDecl()) 5710 Access = NewFD->getPreviousDecl()->getAccess(); 5711 5712 NewFD->setAccess(Access); 5713 if (FunctionTemplate) FunctionTemplate->setAccess(Access); 5714 5715 PrincipalDecl->setObjectOfFriendDecl(true); 5716 } 5717 5718 if (NewFD->isOverloadedOperator() && !DC->isRecord() && 5719 PrincipalDecl->isInIdentifierNamespace(Decl::IDNS_Ordinary)) 5720 PrincipalDecl->setNonMemberOperator(); 5721 5722 // If we have a function template, check the template parameter 5723 // list. This will check and merge default template arguments. 5724 if (FunctionTemplate) { 5725 FunctionTemplateDecl *PrevTemplate = 5726 FunctionTemplate->getPreviousDecl(); 5727 CheckTemplateParameterList(FunctionTemplate->getTemplateParameters(), 5728 PrevTemplate ? PrevTemplate->getTemplateParameters() : 0, 5729 D.getDeclSpec().isFriendSpecified() 5730 ? (D.isFunctionDefinition() 5731 ? TPC_FriendFunctionTemplateDefinition 5732 : TPC_FriendFunctionTemplate) 5733 : (D.getCXXScopeSpec().isSet() && 5734 DC && DC->isRecord() && 5735 DC->isDependentContext()) 5736 ? TPC_ClassTemplateMember 5737 : TPC_FunctionTemplate); 5738 } 5739 5740 if (NewFD->isInvalidDecl()) { 5741 // Ignore all the rest of this. 5742 } else if (!D.isRedeclaration()) { 5743 struct ActOnFDArgs ExtraArgs = { S, D, TemplateParamLists, 5744 AddToScope }; 5745 // Fake up an access specifier if it's supposed to be a class member. 5746 if (isa<CXXRecordDecl>(NewFD->getDeclContext())) 5747 NewFD->setAccess(AS_public); 5748 5749 // Qualified decls generally require a previous declaration. 5750 if (D.getCXXScopeSpec().isSet()) { 5751 // ...with the major exception of templated-scope or 5752 // dependent-scope friend declarations. 5753 5754 // TODO: we currently also suppress this check in dependent 5755 // contexts because (1) the parameter depth will be off when 5756 // matching friend templates and (2) we might actually be 5757 // selecting a friend based on a dependent factor. But there 5758 // are situations where these conditions don't apply and we 5759 // can actually do this check immediately. 5760 if (isFriend && 5761 (TemplateParamLists.size() || 5762 D.getCXXScopeSpec().getScopeRep()->isDependent() || 5763 CurContext->isDependentContext())) { 5764 // ignore these 5765 } else { 5766 // The user tried to provide an out-of-line definition for a 5767 // function that is a member of a class or namespace, but there 5768 // was no such member function declared (C++ [class.mfct]p2, 5769 // C++ [namespace.memdef]p2). For example: 5770 // 5771 // class X { 5772 // void f() const; 5773 // }; 5774 // 5775 // void X::f() { } // ill-formed 5776 // 5777 // Complain about this problem, and attempt to suggest close 5778 // matches (e.g., those that differ only in cv-qualifiers and 5779 // whether the parameter types are references). 5780 5781 if (NamedDecl *Result = DiagnoseInvalidRedeclaration(*this, Previous, 5782 NewFD, 5783 ExtraArgs)) { 5784 AddToScope = ExtraArgs.AddToScope; 5785 return Result; 5786 } 5787 } 5788 5789 // Unqualified local friend declarations are required to resolve 5790 // to something. 5791 } else if (isFriend && cast<CXXRecordDecl>(CurContext)->isLocalClass()) { 5792 if (NamedDecl *Result = DiagnoseInvalidRedeclaration(*this, Previous, 5793 NewFD, 5794 ExtraArgs)) { 5795 AddToScope = ExtraArgs.AddToScope; 5796 return Result; 5797 } 5798 } 5799 5800 } else if (!D.isFunctionDefinition() && D.getCXXScopeSpec().isSet() && 5801 !isFriend && !isFunctionTemplateSpecialization && 5802 !isExplicitSpecialization) { 5803 // An out-of-line member function declaration must also be a 5804 // definition (C++ [dcl.meaning]p1). 5805 // Note that this is not the case for explicit specializations of 5806 // function templates or member functions of class templates, per 5807 // C++ [temp.expl.spec]p2. We also allow these declarations as an 5808 // extension for compatibility with old SWIG code which likes to 5809 // generate them. 5810 Diag(NewFD->getLocation(), diag::ext_out_of_line_declaration) 5811 << D.getCXXScopeSpec().getRange(); 5812 } 5813 } 5814 5815 AddKnownFunctionAttributes(NewFD); 5816 5817 if (NewFD->hasAttr<OverloadableAttr>() && 5818 !NewFD->getType()->getAs<FunctionProtoType>()) { 5819 Diag(NewFD->getLocation(), 5820 diag::err_attribute_overloadable_no_prototype) 5821 << NewFD; 5822 5823 // Turn this into a variadic function with no parameters. 5824 const FunctionType *FT = NewFD->getType()->getAs<FunctionType>(); 5825 FunctionProtoType::ExtProtoInfo EPI; 5826 EPI.Variadic = true; 5827 EPI.ExtInfo = FT->getExtInfo(); 5828 5829 QualType R = Context.getFunctionType(FT->getResultType(), 0, 0, EPI); 5830 NewFD->setType(R); 5831 } 5832 5833 // If there's a #pragma GCC visibility in scope, and this isn't a class 5834 // member, set the visibility of this function. 5835 if (NewFD->getLinkage() == ExternalLinkage && !DC->isRecord()) 5836 AddPushedVisibilityAttribute(NewFD); 5837 5838 // If there's a #pragma clang arc_cf_code_audited in scope, consider 5839 // marking the function. 5840 AddCFAuditedAttribute(NewFD); 5841 5842 // If this is a locally-scoped extern C function, update the 5843 // map of such names. 5844 if (CurContext->isFunctionOrMethod() && NewFD->isExternC() 5845 && !NewFD->isInvalidDecl()) 5846 RegisterLocallyScopedExternCDecl(NewFD, Previous, S); 5847 5848 // Set this FunctionDecl's range up to the right paren. 5849 NewFD->setRangeEnd(D.getSourceRange().getEnd()); 5850 5851 if (getLangOpts().CPlusPlus) { 5852 if (FunctionTemplate) { 5853 if (NewFD->isInvalidDecl()) 5854 FunctionTemplate->setInvalidDecl(); 5855 return FunctionTemplate; 5856 } 5857 } 5858 5859 // OpenCL v1.2 s6.8 static is invalid for kernel functions. 5860 if ((getLangOpts().OpenCLVersion >= 120) 5861 && NewFD->hasAttr<OpenCLKernelAttr>() 5862 && (SC == SC_Static)) { 5863 Diag(D.getIdentifierLoc(), diag::err_static_kernel); 5864 D.setInvalidType(); 5865 } 5866 5867 MarkUnusedFileScopedDecl(NewFD); 5868 5869 if (getLangOpts().CUDA) 5870 if (IdentifierInfo *II = NewFD->getIdentifier()) 5871 if (!NewFD->isInvalidDecl() && 5872 NewFD->getDeclContext()->getRedeclContext()->isTranslationUnit()) { 5873 if (II->isStr("cudaConfigureCall")) { 5874 if (!R->getAs<FunctionType>()->getResultType()->isScalarType()) 5875 Diag(NewFD->getLocation(), diag::err_config_scalar_return); 5876 5877 Context.setcudaConfigureCallDecl(NewFD); 5878 } 5879 } 5880 5881 // Here we have an function template explicit specialization at class scope. 5882 // The actually specialization will be postponed to template instatiation 5883 // time via the ClassScopeFunctionSpecializationDecl node. 5884 if (isDependentClassScopeExplicitSpecialization) { 5885 ClassScopeFunctionSpecializationDecl *NewSpec = 5886 ClassScopeFunctionSpecializationDecl::Create( 5887 Context, CurContext, SourceLocation(), 5888 cast<CXXMethodDecl>(NewFD), 5889 HasExplicitTemplateArgs, TemplateArgs); 5890 CurContext->addDecl(NewSpec); 5891 AddToScope = false; 5892 } 5893 5894 return NewFD; 5895 } 5896 5897 /// \brief Perform semantic checking of a new function declaration. 5898 /// 5899 /// Performs semantic analysis of the new function declaration 5900 /// NewFD. This routine performs all semantic checking that does not 5901 /// require the actual declarator involved in the declaration, and is 5902 /// used both for the declaration of functions as they are parsed 5903 /// (called via ActOnDeclarator) and for the declaration of functions 5904 /// that have been instantiated via C++ template instantiation (called 5905 /// via InstantiateDecl). 5906 /// 5907 /// \param IsExplicitSpecialization whether this new function declaration is 5908 /// an explicit specialization of the previous declaration. 5909 /// 5910 /// This sets NewFD->isInvalidDecl() to true if there was an error. 5911 /// 5912 /// \returns true if the function declaration is a redeclaration. 5913 bool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, 5914 LookupResult &Previous, 5915 bool IsExplicitSpecialization) { 5916 assert(!NewFD->getResultType()->isVariablyModifiedType() 5917 && "Variably modified return types are not handled here"); 5918 5919 // Check for a previous declaration of this name. 5920 if (Previous.empty() && NewFD->isExternC()) { 5921 // Since we did not find anything by this name and we're declaring 5922 // an extern "C" function, look for a non-visible extern "C" 5923 // declaration with the same name. 5924 llvm::DenseMap<DeclarationName, NamedDecl *>::iterator Pos 5925 = findLocallyScopedExternalDecl(NewFD->getDeclName()); 5926 if (Pos != LocallyScopedExternalDecls.end()) 5927 Previous.addDecl(Pos->second); 5928 } 5929 5930 bool Redeclaration = false; 5931 5932 // Merge or overload the declaration with an existing declaration of 5933 // the same name, if appropriate. 5934 if (!Previous.empty()) { 5935 // Determine whether NewFD is an overload of PrevDecl or 5936 // a declaration that requires merging. If it's an overload, 5937 // there's no more work to do here; we'll just add the new 5938 // function to the scope. 5939 5940 NamedDecl *OldDecl = 0; 5941 if (!AllowOverloadingOfFunction(Previous, Context)) { 5942 Redeclaration = true; 5943 OldDecl = Previous.getFoundDecl(); 5944 } else { 5945 switch (CheckOverload(S, NewFD, Previous, OldDecl, 5946 /*NewIsUsingDecl*/ false)) { 5947 case Ovl_Match: 5948 Redeclaration = true; 5949 break; 5950 5951 case Ovl_NonFunction: 5952 Redeclaration = true; 5953 break; 5954 5955 case Ovl_Overload: 5956 Redeclaration = false; 5957 break; 5958 } 5959 5960 if (!getLangOpts().CPlusPlus && !NewFD->hasAttr<OverloadableAttr>()) { 5961 // If a function name is overloadable in C, then every function 5962 // with that name must be marked "overloadable". 5963 Diag(NewFD->getLocation(), diag::err_attribute_overloadable_missing) 5964 << Redeclaration << NewFD; 5965 NamedDecl *OverloadedDecl = 0; 5966 if (Redeclaration) 5967 OverloadedDecl = OldDecl; 5968 else if (!Previous.empty()) 5969 OverloadedDecl = Previous.getRepresentativeDecl(); 5970 if (OverloadedDecl) 5971 Diag(OverloadedDecl->getLocation(), 5972 diag::note_attribute_overloadable_prev_overload); 5973 NewFD->addAttr(::new (Context) OverloadableAttr(SourceLocation(), 5974 Context)); 5975 } 5976 } 5977 5978 if (Redeclaration) { 5979 // NewFD and OldDecl represent declarations that need to be 5980 // merged. 5981 if (MergeFunctionDecl(NewFD, OldDecl, S)) { 5982 NewFD->setInvalidDecl(); 5983 return Redeclaration; 5984 } 5985 5986 Previous.clear(); 5987 Previous.addDecl(OldDecl); 5988 5989 if (FunctionTemplateDecl *OldTemplateDecl 5990 = dyn_cast<FunctionTemplateDecl>(OldDecl)) { 5991 NewFD->setPreviousDeclaration(OldTemplateDecl->getTemplatedDecl()); 5992 FunctionTemplateDecl *NewTemplateDecl 5993 = NewFD->getDescribedFunctionTemplate(); 5994 assert(NewTemplateDecl && "Template/non-template mismatch"); 5995 if (CXXMethodDecl *Method 5996 = dyn_cast<CXXMethodDecl>(NewTemplateDecl->getTemplatedDecl())) { 5997 Method->setAccess(OldTemplateDecl->getAccess()); 5998 NewTemplateDecl->setAccess(OldTemplateDecl->getAccess()); 5999 } 6000 6001 // If this is an explicit specialization of a member that is a function 6002 // template, mark it as a member specialization. 6003 if (IsExplicitSpecialization && 6004 NewTemplateDecl->getInstantiatedFromMemberTemplate()) { 6005 NewTemplateDecl->setMemberSpecialization(); 6006 assert(OldTemplateDecl->isMemberSpecialization()); 6007 } 6008 6009 } else { 6010 if (isa<CXXMethodDecl>(NewFD)) // Set access for out-of-line definitions 6011 NewFD->setAccess(OldDecl->getAccess()); 6012 NewFD->setPreviousDeclaration(cast<FunctionDecl>(OldDecl)); 6013 } 6014 } 6015 } 6016 6017 // Semantic checking for this function declaration (in isolation). 6018 if (getLangOpts().CPlusPlus) { 6019 // C++-specific checks. 6020 if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(NewFD)) { 6021 CheckConstructor(Constructor); 6022 } else if (CXXDestructorDecl *Destructor = 6023 dyn_cast<CXXDestructorDecl>(NewFD)) { 6024 CXXRecordDecl *Record = Destructor->getParent(); 6025 QualType ClassType = Context.getTypeDeclType(Record); 6026 6027 // FIXME: Shouldn't we be able to perform this check even when the class 6028 // type is dependent? Both gcc and edg can handle that. 6029 if (!ClassType->isDependentType()) { 6030 DeclarationName Name 6031 = Context.DeclarationNames.getCXXDestructorName( 6032 Context.getCanonicalType(ClassType)); 6033 if (NewFD->getDeclName() != Name) { 6034 Diag(NewFD->getLocation(), diag::err_destructor_name); 6035 NewFD->setInvalidDecl(); 6036 return Redeclaration; 6037 } 6038 } 6039 } else if (CXXConversionDecl *Conversion 6040 = dyn_cast<CXXConversionDecl>(NewFD)) { 6041 ActOnConversionDeclarator(Conversion); 6042 } 6043 6044 // Find any virtual functions that this function overrides. 6045 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(NewFD)) { 6046 if (!Method->isFunctionTemplateSpecialization() && 6047 !Method->getDescribedFunctionTemplate() && 6048 Method->isCanonicalDecl()) { 6049 if (AddOverriddenMethods(Method->getParent(), Method)) { 6050 // If the function was marked as "static", we have a problem. 6051 if (NewFD->getStorageClass() == SC_Static) { 6052 Diag(NewFD->getLocation(), diag::err_static_overrides_virtual) 6053 << NewFD->getDeclName(); 6054 for (CXXMethodDecl::method_iterator 6055 Overridden = Method->begin_overridden_methods(), 6056 OverriddenEnd = Method->end_overridden_methods(); 6057 Overridden != OverriddenEnd; 6058 ++Overridden) { 6059 Diag((*Overridden)->getLocation(), 6060 diag::note_overridden_virtual_function); 6061 } 6062 } 6063 } 6064 } 6065 6066 if (Method->isStatic()) 6067 checkThisInStaticMemberFunctionType(Method); 6068 } 6069 6070 // Extra checking for C++ overloaded operators (C++ [over.oper]). 6071 if (NewFD->isOverloadedOperator() && 6072 CheckOverloadedOperatorDeclaration(NewFD)) { 6073 NewFD->setInvalidDecl(); 6074 return Redeclaration; 6075 } 6076 6077 // Extra checking for C++0x literal operators (C++0x [over.literal]). 6078 if (NewFD->getLiteralIdentifier() && 6079 CheckLiteralOperatorDeclaration(NewFD)) { 6080 NewFD->setInvalidDecl(); 6081 return Redeclaration; 6082 } 6083 6084 // In C++, check default arguments now that we have merged decls. Unless 6085 // the lexical context is the class, because in this case this is done 6086 // during delayed parsing anyway. 6087 if (!CurContext->isRecord()) 6088 CheckCXXDefaultArguments(NewFD); 6089 6090 // If this function declares a builtin function, check the type of this 6091 // declaration against the expected type for the builtin. 6092 if (unsigned BuiltinID = NewFD->getBuiltinID()) { 6093 ASTContext::GetBuiltinTypeError Error; 6094 QualType T = Context.GetBuiltinType(BuiltinID, Error); 6095 if (!T.isNull() && !Context.hasSameType(T, NewFD->getType())) { 6096 // The type of this function differs from the type of the builtin, 6097 // so forget about the builtin entirely. 6098 Context.BuiltinInfo.ForgetBuiltin(BuiltinID, Context.Idents); 6099 } 6100 } 6101 6102 // If this function is declared as being extern "C", then check to see if 6103 // the function returns a UDT (class, struct, or union type) that is not C 6104 // compatible, and if it does, warn the user. 6105 if (NewFD->isExternC()) { 6106 QualType R = NewFD->getResultType(); 6107 if (R->isIncompleteType() && !R->isVoidType()) 6108 Diag(NewFD->getLocation(), diag::warn_return_value_udt_incomplete) 6109 << NewFD << R; 6110 else if (!R.isPODType(Context) && !R->isVoidType() && 6111 !R->isObjCObjectPointerType()) 6112 Diag(NewFD->getLocation(), diag::warn_return_value_udt) << NewFD << R; 6113 } 6114 } 6115 return Redeclaration; 6116 } 6117 6118 void Sema::CheckMain(FunctionDecl* FD, const DeclSpec& DS) { 6119 // C++11 [basic.start.main]p3: A program that declares main to be inline, 6120 // static or constexpr is ill-formed. 6121 // C99 6.7.4p4: In a hosted environment, the inline function specifier 6122 // shall not appear in a declaration of main. 6123 // static main is not an error under C99, but we should warn about it. 6124 if (FD->getStorageClass() == SC_Static) 6125 Diag(DS.getStorageClassSpecLoc(), getLangOpts().CPlusPlus 6126 ? diag::err_static_main : diag::warn_static_main) 6127 << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc()); 6128 if (FD->isInlineSpecified()) 6129 Diag(DS.getInlineSpecLoc(), diag::err_inline_main) 6130 << FixItHint::CreateRemoval(DS.getInlineSpecLoc()); 6131 if (FD->isConstexpr()) { 6132 Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_main) 6133 << FixItHint::CreateRemoval(DS.getConstexprSpecLoc()); 6134 FD->setConstexpr(false); 6135 } 6136 6137 QualType T = FD->getType(); 6138 assert(T->isFunctionType() && "function decl is not of function type"); 6139 const FunctionType* FT = T->castAs<FunctionType>(); 6140 6141 // All the standards say that main() should should return 'int'. 6142 if (Context.hasSameUnqualifiedType(FT->getResultType(), Context.IntTy)) { 6143 // In C and C++, main magically returns 0 if you fall off the end; 6144 // set the flag which tells us that. 6145 // This is C++ [basic.start.main]p5 and C99 5.1.2.2.3. 6146 FD->setHasImplicitReturnZero(true); 6147 6148 // In C with GNU extensions we allow main() to have non-integer return 6149 // type, but we should warn about the extension, and we disable the 6150 // implicit-return-zero rule. 6151 } else if (getLangOpts().GNUMode && !getLangOpts().CPlusPlus) { 6152 Diag(FD->getTypeSpecStartLoc(), diag::ext_main_returns_nonint); 6153 6154 // Otherwise, this is just a flat-out error. 6155 } else { 6156 Diag(FD->getTypeSpecStartLoc(), diag::err_main_returns_nonint); 6157 FD->setInvalidDecl(true); 6158 } 6159 6160 // Treat protoless main() as nullary. 6161 if (isa<FunctionNoProtoType>(FT)) return; 6162 6163 const FunctionProtoType* FTP = cast<const FunctionProtoType>(FT); 6164 unsigned nparams = FTP->getNumArgs(); 6165 assert(FD->getNumParams() == nparams); 6166 6167 bool HasExtraParameters = (nparams > 3); 6168 6169 // Darwin passes an undocumented fourth argument of type char**. If 6170 // other platforms start sprouting these, the logic below will start 6171 // getting shifty. 6172 if (nparams == 4 && Context.getTargetInfo().getTriple().isOSDarwin()) 6173 HasExtraParameters = false; 6174 6175 if (HasExtraParameters) { 6176 Diag(FD->getLocation(), diag::err_main_surplus_args) << nparams; 6177 FD->setInvalidDecl(true); 6178 nparams = 3; 6179 } 6180 6181 // FIXME: a lot of the following diagnostics would be improved 6182 // if we had some location information about types. 6183 6184 QualType CharPP = 6185 Context.getPointerType(Context.getPointerType(Context.CharTy)); 6186 QualType Expected[] = { Context.IntTy, CharPP, CharPP, CharPP }; 6187 6188 for (unsigned i = 0; i < nparams; ++i) { 6189 QualType AT = FTP->getArgType(i); 6190 6191 bool mismatch = true; 6192 6193 if (Context.hasSameUnqualifiedType(AT, Expected[i])) 6194 mismatch = false; 6195 else if (Expected[i] == CharPP) { 6196 // As an extension, the following forms are okay: 6197 // char const ** 6198 // char const * const * 6199 // char * const * 6200 6201 QualifierCollector qs; 6202 const PointerType* PT; 6203 if ((PT = qs.strip(AT)->getAs<PointerType>()) && 6204 (PT = qs.strip(PT->getPointeeType())->getAs<PointerType>()) && 6205 (QualType(qs.strip(PT->getPointeeType()), 0) == Context.CharTy)) { 6206 qs.removeConst(); 6207 mismatch = !qs.empty(); 6208 } 6209 } 6210 6211 if (mismatch) { 6212 Diag(FD->getLocation(), diag::err_main_arg_wrong) << i << Expected[i]; 6213 // TODO: suggest replacing given type with expected type 6214 FD->setInvalidDecl(true); 6215 } 6216 } 6217 6218 if (nparams == 1 && !FD->isInvalidDecl()) { 6219 Diag(FD->getLocation(), diag::warn_main_one_arg); 6220 } 6221 6222 if (!FD->isInvalidDecl() && FD->getDescribedFunctionTemplate()) { 6223 Diag(FD->getLocation(), diag::err_main_template_decl); 6224 FD->setInvalidDecl(); 6225 } 6226 } 6227 6228 bool Sema::CheckForConstantInitializer(Expr *Init, QualType DclT) { 6229 // FIXME: Need strict checking. In C89, we need to check for 6230 // any assignment, increment, decrement, function-calls, or 6231 // commas outside of a sizeof. In C99, it's the same list, 6232 // except that the aforementioned are allowed in unevaluated 6233 // expressions. Everything else falls under the 6234 // "may accept other forms of constant expressions" exception. 6235 // (We never end up here for C++, so the constant expression 6236 // rules there don't matter.) 6237 if (Init->isConstantInitializer(Context, false)) 6238 return false; 6239 Diag(Init->getExprLoc(), diag::err_init_element_not_constant) 6240 << Init->getSourceRange(); 6241 return true; 6242 } 6243 6244 namespace { 6245 // Visits an initialization expression to see if OrigDecl is evaluated in 6246 // its own initialization and throws a warning if it does. 6247 class SelfReferenceChecker 6248 : public EvaluatedExprVisitor<SelfReferenceChecker> { 6249 Sema &S; 6250 Decl *OrigDecl; 6251 bool isRecordType; 6252 bool isPODType; 6253 bool isReferenceType; 6254 6255 public: 6256 typedef EvaluatedExprVisitor<SelfReferenceChecker> Inherited; 6257 6258 SelfReferenceChecker(Sema &S, Decl *OrigDecl) : Inherited(S.Context), 6259 S(S), OrigDecl(OrigDecl) { 6260 isPODType = false; 6261 isRecordType = false; 6262 isReferenceType = false; 6263 if (ValueDecl *VD = dyn_cast<ValueDecl>(OrigDecl)) { 6264 isPODType = VD->getType().isPODType(S.Context); 6265 isRecordType = VD->getType()->isRecordType(); 6266 isReferenceType = VD->getType()->isReferenceType(); 6267 } 6268 } 6269 6270 // For most expressions, the cast is directly above the DeclRefExpr. 6271 // For conditional operators, the cast can be outside the conditional 6272 // operator if both expressions are DeclRefExpr's. 6273 void HandleValue(Expr *E) { 6274 if (isReferenceType) 6275 return; 6276 E = E->IgnoreParenImpCasts(); 6277 if (DeclRefExpr* DRE = dyn_cast<DeclRefExpr>(E)) { 6278 HandleDeclRefExpr(DRE); 6279 return; 6280 } 6281 6282 if (ConditionalOperator *CO = dyn_cast<ConditionalOperator>(E)) { 6283 HandleValue(CO->getTrueExpr()); 6284 HandleValue(CO->getFalseExpr()); 6285 return; 6286 } 6287 6288 if (isa<MemberExpr>(E)) { 6289 Expr *Base = E->IgnoreParenImpCasts(); 6290 while (MemberExpr *ME = dyn_cast<MemberExpr>(Base)) { 6291 // Check for static member variables and don't warn on them. 6292 if (!isa<FieldDecl>(ME->getMemberDecl())) 6293 return; 6294 Base = ME->getBase()->IgnoreParenImpCasts(); 6295 } 6296 if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Base)) 6297 HandleDeclRefExpr(DRE); 6298 return; 6299 } 6300 } 6301 6302 // Reference types are handled here since all uses of references are 6303 // bad, not just r-value uses. 6304 void VisitDeclRefExpr(DeclRefExpr *E) { 6305 if (isReferenceType) 6306 HandleDeclRefExpr(E); 6307 } 6308 6309 void VisitImplicitCastExpr(ImplicitCastExpr *E) { 6310 if (E->getCastKind() == CK_LValueToRValue || 6311 (isRecordType && E->getCastKind() == CK_NoOp)) 6312 HandleValue(E->getSubExpr()); 6313 6314 Inherited::VisitImplicitCastExpr(E); 6315 } 6316 6317 void VisitMemberExpr(MemberExpr *E) { 6318 // Don't warn on arrays since they can be treated as pointers. 6319 if (E->getType()->canDecayToPointerType()) return; 6320 6321 // Warn when a non-static method call is followed by non-static member 6322 // field accesses, which is followed by a DeclRefExpr. 6323 CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(E->getMemberDecl()); 6324 bool Warn = (MD && !MD->isStatic()); 6325 Expr *Base = E->getBase()->IgnoreParenImpCasts(); 6326 while (MemberExpr *ME = dyn_cast<MemberExpr>(Base)) { 6327 if (!isa<FieldDecl>(ME->getMemberDecl())) 6328 Warn = false; 6329 Base = ME->getBase()->IgnoreParenImpCasts(); 6330 } 6331 6332 if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Base)) { 6333 if (Warn) 6334 HandleDeclRefExpr(DRE); 6335 return; 6336 } 6337 6338 // The base of a MemberExpr is not a MemberExpr or a DeclRefExpr. 6339 // Visit that expression. 6340 Visit(Base); 6341 } 6342 6343 void VisitUnaryOperator(UnaryOperator *E) { 6344 // For POD record types, addresses of its own members are well-defined. 6345 if (E->getOpcode() == UO_AddrOf && isRecordType && 6346 isa<MemberExpr>(E->getSubExpr()->IgnoreParens())) { 6347 if (!isPODType) 6348 HandleValue(E->getSubExpr()); 6349 return; 6350 } 6351 Inherited::VisitUnaryOperator(E); 6352 } 6353 6354 void VisitObjCMessageExpr(ObjCMessageExpr *E) { return; } 6355 6356 void HandleDeclRefExpr(DeclRefExpr *DRE) { 6357 Decl* ReferenceDecl = DRE->getDecl(); 6358 if (OrigDecl != ReferenceDecl) return; 6359 unsigned diag = isReferenceType 6360 ? diag::warn_uninit_self_reference_in_reference_init 6361 : diag::warn_uninit_self_reference_in_init; 6362 S.DiagRuntimeBehavior(DRE->getLocStart(), DRE, 6363 S.PDiag(diag) 6364 << DRE->getNameInfo().getName() 6365 << OrigDecl->getLocation() 6366 << DRE->getSourceRange()); 6367 } 6368 }; 6369 6370 /// CheckSelfReference - Warns if OrigDecl is used in expression E. 6371 static void CheckSelfReference(Sema &S, Decl* OrigDecl, Expr *E, 6372 bool DirectInit) { 6373 // Parameters arguments are occassionially constructed with itself, 6374 // for instance, in recursive functions. Skip them. 6375 if (isa<ParmVarDecl>(OrigDecl)) 6376 return; 6377 6378 E = E->IgnoreParens(); 6379 6380 // Skip checking T a = a where T is not a record or reference type. 6381 // Doing so is a way to silence uninitialized warnings. 6382 if (!DirectInit && !cast<VarDecl>(OrigDecl)->getType()->isRecordType()) 6383 if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) 6384 if (ICE->getCastKind() == CK_LValueToRValue) 6385 if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(ICE->getSubExpr())) 6386 if (DRE->getDecl() == OrigDecl) 6387 return; 6388 6389 SelfReferenceChecker(S, OrigDecl).Visit(E); 6390 } 6391 } 6392 6393 /// AddInitializerToDecl - Adds the initializer Init to the 6394 /// declaration dcl. If DirectInit is true, this is C++ direct 6395 /// initialization rather than copy initialization. 6396 void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, 6397 bool DirectInit, bool TypeMayContainAuto) { 6398 // If there is no declaration, there was an error parsing it. Just ignore 6399 // the initializer. 6400 if (RealDecl == 0 || RealDecl->isInvalidDecl()) 6401 return; 6402 6403 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(RealDecl)) { 6404 // With declarators parsed the way they are, the parser cannot 6405 // distinguish between a normal initializer and a pure-specifier. 6406 // Thus this grotesque test. 6407 IntegerLiteral *IL; 6408 if ((IL = dyn_cast<IntegerLiteral>(Init)) && IL->getValue() == 0 && 6409 Context.getCanonicalType(IL->getType()) == Context.IntTy) 6410 CheckPureMethod(Method, Init->getSourceRange()); 6411 else { 6412 Diag(Method->getLocation(), diag::err_member_function_initialization) 6413 << Method->getDeclName() << Init->getSourceRange(); 6414 Method->setInvalidDecl(); 6415 } 6416 return; 6417 } 6418 6419 VarDecl *VDecl = dyn_cast<VarDecl>(RealDecl); 6420 if (!VDecl) { 6421 assert(!isa<FieldDecl>(RealDecl) && "field init shouldn't get here"); 6422 Diag(RealDecl->getLocation(), diag::err_illegal_initializer); 6423 RealDecl->setInvalidDecl(); 6424 return; 6425 } 6426 6427 ParenListExpr *CXXDirectInit = dyn_cast<ParenListExpr>(Init); 6428 6429 // C++11 [decl.spec.auto]p6. Deduce the type which 'auto' stands in for. 6430 AutoType *Auto = 0; 6431 if (TypeMayContainAuto && 6432 (Auto = VDecl->getType()->getContainedAutoType()) && 6433 !Auto->isDeduced()) { 6434 Expr *DeduceInit = Init; 6435 // Initializer could be a C++ direct-initializer. Deduction only works if it 6436 // contains exactly one expression. 6437 if (CXXDirectInit) { 6438 if (CXXDirectInit->getNumExprs() == 0) { 6439 // It isn't possible to write this directly, but it is possible to 6440 // end up in this situation with "auto x(some_pack...);" 6441 Diag(CXXDirectInit->getLocStart(), 6442 diag::err_auto_var_init_no_expression) 6443 << VDecl->getDeclName() << VDecl->getType() 6444 << VDecl->getSourceRange(); 6445 RealDecl->setInvalidDecl(); 6446 return; 6447 } else if (CXXDirectInit->getNumExprs() > 1) { 6448 Diag(CXXDirectInit->getExpr(1)->getLocStart(), 6449 diag::err_auto_var_init_multiple_expressions) 6450 << VDecl->getDeclName() << VDecl->getType() 6451 << VDecl->getSourceRange(); 6452 RealDecl->setInvalidDecl(); 6453 return; 6454 } else { 6455 DeduceInit = CXXDirectInit->getExpr(0); 6456 } 6457 } 6458 TypeSourceInfo *DeducedType = 0; 6459 if (DeduceAutoType(VDecl->getTypeSourceInfo(), DeduceInit, DeducedType) == 6460 DAR_Failed) 6461 DiagnoseAutoDeductionFailure(VDecl, DeduceInit); 6462 if (!DeducedType) { 6463 RealDecl->setInvalidDecl(); 6464 return; 6465 } 6466 VDecl->setTypeSourceInfo(DeducedType); 6467 VDecl->setType(DeducedType->getType()); 6468 VDecl->ClearLinkageCache(); 6469 6470 // In ARC, infer lifetime. 6471 if (getLangOpts().ObjCAutoRefCount && inferObjCARCLifetime(VDecl)) 6472 VDecl->setInvalidDecl(); 6473 6474 // Warn if we deduced 'id'. 'auto' usually implies type-safety, but using 6475 // 'id' instead of a specific object type prevents most of our usual checks. 6476 // We only want to warn outside of template instantiations, though: 6477 // inside a template, the 'id' could have come from a parameter. 6478 if (ActiveTemplateInstantiations.empty() && 6479 DeducedType->getType()->isObjCIdType()) { 6480 SourceLocation Loc = DeducedType->getTypeLoc().getBeginLoc(); 6481 Diag(Loc, diag::warn_auto_var_is_id) 6482 << VDecl->getDeclName() << DeduceInit->getSourceRange(); 6483 } 6484 6485 // If this is a redeclaration, check that the type we just deduced matches 6486 // the previously declared type. 6487 if (VarDecl *Old = VDecl->getPreviousDecl()) 6488 MergeVarDeclTypes(VDecl, Old); 6489 } 6490 6491 if (VDecl->isLocalVarDecl() && VDecl->hasExternalStorage()) { 6492 // C99 6.7.8p5. C++ has no such restriction, but that is a defect. 6493 Diag(VDecl->getLocation(), diag::err_block_extern_cant_init); 6494 VDecl->setInvalidDecl(); 6495 return; 6496 } 6497 6498 if (!VDecl->getType()->isDependentType()) { 6499 // A definition must end up with a complete type, which means it must be 6500 // complete with the restriction that an array type might be completed by 6501 // the initializer; note that later code assumes this restriction. 6502 QualType BaseDeclType = VDecl->getType(); 6503 if (const ArrayType *Array = Context.getAsIncompleteArrayType(BaseDeclType)) 6504 BaseDeclType = Array->getElementType(); 6505 if (RequireCompleteType(VDecl->getLocation(), BaseDeclType, 6506 diag::err_typecheck_decl_incomplete_type)) { 6507 RealDecl->setInvalidDecl(); 6508 return; 6509 } 6510 6511 // The variable can not have an abstract class type. 6512 if (RequireNonAbstractType(VDecl->getLocation(), VDecl->getType(), 6513 diag::err_abstract_type_in_decl, 6514 AbstractVariableType)) 6515 VDecl->setInvalidDecl(); 6516 } 6517 6518 const VarDecl *Def; 6519 if ((Def = VDecl->getDefinition()) && Def != VDecl) { 6520 Diag(VDecl->getLocation(), diag::err_redefinition) 6521 << VDecl->getDeclName(); 6522 Diag(Def->getLocation(), diag::note_previous_definition); 6523 VDecl->setInvalidDecl(); 6524 return; 6525 } 6526 6527 const VarDecl* PrevInit = 0; 6528 if (getLangOpts().CPlusPlus) { 6529 // C++ [class.static.data]p4 6530 // If a static data member is of const integral or const 6531 // enumeration type, its declaration in the class definition can 6532 // specify a constant-initializer which shall be an integral 6533 // constant expression (5.19). In that case, the member can appear 6534 // in integral constant expressions. The member shall still be 6535 // defined in a namespace scope if it is used in the program and the 6536 // namespace scope definition shall not contain an initializer. 6537 // 6538 // We already performed a redefinition check above, but for static 6539 // data members we also need to check whether there was an in-class 6540 // declaration with an initializer. 6541 if (VDecl->isStaticDataMember() && VDecl->getAnyInitializer(PrevInit)) { 6542 Diag(VDecl->getLocation(), diag::err_redefinition) 6543 << VDecl->getDeclName(); 6544 Diag(PrevInit->getLocation(), diag::note_previous_definition); 6545 return; 6546 } 6547 6548 if (VDecl->hasLocalStorage()) 6549 getCurFunction()->setHasBranchProtectedScope(); 6550 6551 if (DiagnoseUnexpandedParameterPack(Init, UPPC_Initializer)) { 6552 VDecl->setInvalidDecl(); 6553 return; 6554 } 6555 } 6556 6557 // OpenCL 1.1 6.5.2: "Variables allocated in the __local address space inside 6558 // a kernel function cannot be initialized." 6559 if (VDecl->getStorageClass() == SC_OpenCLWorkGroupLocal) { 6560 Diag(VDecl->getLocation(), diag::err_local_cant_init); 6561 VDecl->setInvalidDecl(); 6562 return; 6563 } 6564 6565 // Get the decls type and save a reference for later, since 6566 // CheckInitializerTypes may change it. 6567 QualType DclT = VDecl->getType(), SavT = DclT; 6568 6569 // Top-level message sends default to 'id' when we're in a debugger 6570 // and we are assigning it to a variable of 'id' type. 6571 if (getLangOpts().DebuggerCastResultToId && DclT->isObjCIdType()) 6572 if (Init->getType() == Context.UnknownAnyTy && isa<ObjCMessageExpr>(Init)) { 6573 ExprResult Result = forceUnknownAnyToType(Init, Context.getObjCIdType()); 6574 if (Result.isInvalid()) { 6575 VDecl->setInvalidDecl(); 6576 return; 6577 } 6578 Init = Result.take(); 6579 } 6580 6581 // Perform the initialization. 6582 if (!VDecl->isInvalidDecl()) { 6583 InitializedEntity Entity = InitializedEntity::InitializeVariable(VDecl); 6584 InitializationKind Kind 6585 = DirectInit ? 6586 CXXDirectInit ? InitializationKind::CreateDirect(VDecl->getLocation(), 6587 Init->getLocStart(), 6588 Init->getLocEnd()) 6589 : InitializationKind::CreateDirectList( 6590 VDecl->getLocation()) 6591 : InitializationKind::CreateCopy(VDecl->getLocation(), 6592 Init->getLocStart()); 6593 6594 Expr **Args = &Init; 6595 unsigned NumArgs = 1; 6596 if (CXXDirectInit) { 6597 Args = CXXDirectInit->getExprs(); 6598 NumArgs = CXXDirectInit->getNumExprs(); 6599 } 6600 InitializationSequence InitSeq(*this, Entity, Kind, Args, NumArgs); 6601 ExprResult Result = InitSeq.Perform(*this, Entity, Kind, 6602 MultiExprArg(Args, NumArgs), &DclT); 6603 if (Result.isInvalid()) { 6604 VDecl->setInvalidDecl(); 6605 return; 6606 } 6607 6608 Init = Result.takeAs<Expr>(); 6609 } 6610 6611 // Check for self-references within variable initializers. 6612 // Variables declared within a function/method body (except for references) 6613 // are handled by a dataflow analysis. 6614 if (!VDecl->hasLocalStorage() || VDecl->getType()->isRecordType() || 6615 VDecl->getType()->isReferenceType()) { 6616 CheckSelfReference(*this, RealDecl, Init, DirectInit); 6617 } 6618 6619 // If the type changed, it means we had an incomplete type that was 6620 // completed by the initializer. For example: 6621 // int ary[] = { 1, 3, 5 }; 6622 // "ary" transitions from an IncompleteArrayType to a ConstantArrayType. 6623 if (!VDecl->isInvalidDecl() && (DclT != SavT)) 6624 VDecl->setType(DclT); 6625 6626 // Check any implicit conversions within the expression. 6627 CheckImplicitConversions(Init, VDecl->getLocation()); 6628 6629 if (!VDecl->isInvalidDecl()) { 6630 checkUnsafeAssigns(VDecl->getLocation(), VDecl->getType(), Init); 6631 6632 if (VDecl->hasAttr<BlocksAttr>()) 6633 checkRetainCycles(VDecl, Init); 6634 6635 // It is safe to assign a weak reference into a strong variable. 6636 // Although this code can still have problems: 6637 // id x = self.weakProp; 6638 // id y = self.weakProp; 6639 // we do not warn to warn spuriously when 'x' and 'y' are on separate 6640 // paths through the function. This should be revisited if 6641 // -Wrepeated-use-of-weak is made flow-sensitive. 6642 if (VDecl->getType().getObjCLifetime() == Qualifiers::OCL_Strong) { 6643 DiagnosticsEngine::Level Level = 6644 Diags.getDiagnosticLevel(diag::warn_arc_repeated_use_of_weak, 6645 Init->getLocStart()); 6646 if (Level != DiagnosticsEngine::Ignored) 6647 getCurFunction()->markSafeWeakUse(Init); 6648 } 6649 } 6650 6651 Init = MaybeCreateExprWithCleanups(Init); 6652 // Attach the initializer to the decl. 6653 VDecl->setInit(Init); 6654 6655 if (VDecl->isLocalVarDecl()) { 6656 // C99 6.7.8p4: All the expressions in an initializer for an object that has 6657 // static storage duration shall be constant expressions or string literals. 6658 // C++ does not have this restriction. 6659 if (!getLangOpts().CPlusPlus && !VDecl->isInvalidDecl() && 6660 VDecl->getStorageClass() == SC_Static) 6661 CheckForConstantInitializer(Init, DclT); 6662 } else if (VDecl->isStaticDataMember() && 6663 VDecl->getLexicalDeclContext()->isRecord()) { 6664 // This is an in-class initialization for a static data member, e.g., 6665 // 6666 // struct S { 6667 // static const int value = 17; 6668 // }; 6669 6670 // C++ [class.mem]p4: 6671 // A member-declarator can contain a constant-initializer only 6672 // if it declares a static member (9.4) of const integral or 6673 // const enumeration type, see 9.4.2. 6674 // 6675 // C++11 [class.static.data]p3: 6676 // If a non-volatile const static data member is of integral or 6677 // enumeration type, its declaration in the class definition can 6678 // specify a brace-or-equal-initializer in which every initalizer-clause 6679 // that is an assignment-expression is a constant expression. A static 6680 // data member of literal type can be declared in the class definition 6681 // with the constexpr specifier; if so, its declaration shall specify a 6682 // brace-or-equal-initializer in which every initializer-clause that is 6683 // an assignment-expression is a constant expression. 6684 6685 // Do nothing on dependent types. 6686 if (DclT->isDependentType()) { 6687 6688 // Allow any 'static constexpr' members, whether or not they are of literal 6689 // type. We separately check that every constexpr variable is of literal 6690 // type. 6691 } else if (VDecl->isConstexpr()) { 6692 6693 // Require constness. 6694 } else if (!DclT.isConstQualified()) { 6695 Diag(VDecl->getLocation(), diag::err_in_class_initializer_non_const) 6696 << Init->getSourceRange(); 6697 VDecl->setInvalidDecl(); 6698 6699 // We allow integer constant expressions in all cases. 6700 } else if (DclT->isIntegralOrEnumerationType()) { 6701 // Check whether the expression is a constant expression. 6702 SourceLocation Loc; 6703 if (getLangOpts().CPlusPlus0x && DclT.isVolatileQualified()) 6704 // In C++11, a non-constexpr const static data member with an 6705 // in-class initializer cannot be volatile. 6706 Diag(VDecl->getLocation(), diag::err_in_class_initializer_volatile); 6707 else if (Init->isValueDependent()) 6708 ; // Nothing to check. 6709 else if (Init->isIntegerConstantExpr(Context, &Loc)) 6710 ; // Ok, it's an ICE! 6711 else if (Init->isEvaluatable(Context)) { 6712 // If we can constant fold the initializer through heroics, accept it, 6713 // but report this as a use of an extension for -pedantic. 6714 Diag(Loc, diag::ext_in_class_initializer_non_constant) 6715 << Init->getSourceRange(); 6716 } else { 6717 // Otherwise, this is some crazy unknown case. Report the issue at the 6718 // location provided by the isIntegerConstantExpr failed check. 6719 Diag(Loc, diag::err_in_class_initializer_non_constant) 6720 << Init->getSourceRange(); 6721 VDecl->setInvalidDecl(); 6722 } 6723 6724 // We allow foldable floating-point constants as an extension. 6725 } else if (DclT->isFloatingType()) { // also permits complex, which is ok 6726 Diag(VDecl->getLocation(), diag::ext_in_class_initializer_float_type) 6727 << DclT << Init->getSourceRange(); 6728 if (getLangOpts().CPlusPlus0x) 6729 Diag(VDecl->getLocation(), 6730 diag::note_in_class_initializer_float_type_constexpr) 6731 << FixItHint::CreateInsertion(VDecl->getLocStart(), "constexpr "); 6732 6733 if (!Init->isValueDependent() && !Init->isEvaluatable(Context)) { 6734 Diag(Init->getExprLoc(), diag::err_in_class_initializer_non_constant) 6735 << Init->getSourceRange(); 6736 VDecl->setInvalidDecl(); 6737 } 6738 6739 // Suggest adding 'constexpr' in C++11 for literal types. 6740 } else if (getLangOpts().CPlusPlus0x && DclT->isLiteralType()) { 6741 Diag(VDecl->getLocation(), diag::err_in_class_initializer_literal_type) 6742 << DclT << Init->getSourceRange() 6743 << FixItHint::CreateInsertion(VDecl->getLocStart(), "constexpr "); 6744 VDecl->setConstexpr(true); 6745 6746 } else { 6747 Diag(VDecl->getLocation(), diag::err_in_class_initializer_bad_type) 6748 << DclT << Init->getSourceRange(); 6749 VDecl->setInvalidDecl(); 6750 } 6751 } else if (VDecl->isFileVarDecl()) { 6752 if (VDecl->getStorageClassAsWritten() == SC_Extern && 6753 (!getLangOpts().CPlusPlus || 6754 !Context.getBaseElementType(VDecl->getType()).isConstQualified())) 6755 Diag(VDecl->getLocation(), diag::warn_extern_init); 6756 6757 // C99 6.7.8p4. All file scoped initializers need to be constant. 6758 if (!getLangOpts().CPlusPlus && !VDecl->isInvalidDecl()) 6759 CheckForConstantInitializer(Init, DclT); 6760 } 6761 6762 // We will represent direct-initialization similarly to copy-initialization: 6763 // int x(1); -as-> int x = 1; 6764 // ClassType x(a,b,c); -as-> ClassType x = ClassType(a,b,c); 6765 // 6766 // Clients that want to distinguish between the two forms, can check for 6767 // direct initializer using VarDecl::getInitStyle(). 6768 // A major benefit is that clients that don't particularly care about which 6769 // exactly form was it (like the CodeGen) can handle both cases without 6770 // special case code. 6771 6772 // C++ 8.5p11: 6773 // The form of initialization (using parentheses or '=') is generally 6774 // insignificant, but does matter when the entity being initialized has a 6775 // class type. 6776 if (CXXDirectInit) { 6777 assert(DirectInit && "Call-style initializer must be direct init."); 6778 VDecl->setInitStyle(VarDecl::CallInit); 6779 } else if (DirectInit) { 6780 // This must be list-initialization. No other way is direct-initialization. 6781 VDecl->setInitStyle(VarDecl::ListInit); 6782 } 6783 6784 CheckCompleteVariableDeclaration(VDecl); 6785 } 6786 6787 /// ActOnInitializerError - Given that there was an error parsing an 6788 /// initializer for the given declaration, try to return to some form 6789 /// of sanity. 6790 void Sema::ActOnInitializerError(Decl *D) { 6791 // Our main concern here is re-establishing invariants like "a 6792 // variable's type is either dependent or complete". 6793 if (!D || D->isInvalidDecl()) return; 6794 6795 VarDecl *VD = dyn_cast<VarDecl>(D); 6796 if (!VD) return; 6797 6798 // Auto types are meaningless if we can't make sense of the initializer. 6799 if (ParsingInitForAutoVars.count(D)) { 6800 D->setInvalidDecl(); 6801 return; 6802 } 6803 6804 QualType Ty = VD->getType(); 6805 if (Ty->isDependentType()) return; 6806 6807 // Require a complete type. 6808 if (RequireCompleteType(VD->getLocation(), 6809 Context.getBaseElementType(Ty), 6810 diag::err_typecheck_decl_incomplete_type)) { 6811 VD->setInvalidDecl(); 6812 return; 6813 } 6814 6815 // Require an abstract type. 6816 if (RequireNonAbstractType(VD->getLocation(), Ty, 6817 diag::err_abstract_type_in_decl, 6818 AbstractVariableType)) { 6819 VD->setInvalidDecl(); 6820 return; 6821 } 6822 6823 // Don't bother complaining about constructors or destructors, 6824 // though. 6825 } 6826 6827 void Sema::ActOnUninitializedDecl(Decl *RealDecl, 6828 bool TypeMayContainAuto) { 6829 // If there is no declaration, there was an error parsing it. Just ignore it. 6830 if (RealDecl == 0) 6831 return; 6832 6833 if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) { 6834 QualType Type = Var->getType(); 6835 6836 // C++11 [dcl.spec.auto]p3 6837 if (TypeMayContainAuto && Type->getContainedAutoType()) { 6838 Diag(Var->getLocation(), diag::err_auto_var_requires_init) 6839 << Var->getDeclName() << Type; 6840 Var->setInvalidDecl(); 6841 return; 6842 } 6843 6844 // C++11 [class.static.data]p3: A static data member can be declared with 6845 // the constexpr specifier; if so, its declaration shall specify 6846 // a brace-or-equal-initializer. 6847 // C++11 [dcl.constexpr]p1: The constexpr specifier shall be applied only to 6848 // the definition of a variable [...] or the declaration of a static data 6849 // member. 6850 if (Var->isConstexpr() && !Var->isThisDeclarationADefinition()) { 6851 if (Var->isStaticDataMember()) 6852 Diag(Var->getLocation(), 6853 diag::err_constexpr_static_mem_var_requires_init) 6854 << Var->getDeclName(); 6855 else 6856 Diag(Var->getLocation(), diag::err_invalid_constexpr_var_decl); 6857 Var->setInvalidDecl(); 6858 return; 6859 } 6860 6861 switch (Var->isThisDeclarationADefinition()) { 6862 case VarDecl::Definition: 6863 if (!Var->isStaticDataMember() || !Var->getAnyInitializer()) 6864 break; 6865 6866 // We have an out-of-line definition of a static data member 6867 // that has an in-class initializer, so we type-check this like 6868 // a declaration. 6869 // 6870 // Fall through 6871 6872 case VarDecl::DeclarationOnly: 6873 // It's only a declaration. 6874 6875 // Block scope. C99 6.7p7: If an identifier for an object is 6876 // declared with no linkage (C99 6.2.2p6), the type for the 6877 // object shall be complete. 6878 if (!Type->isDependentType() && Var->isLocalVarDecl() && 6879 !Var->getLinkage() && !Var->isInvalidDecl() && 6880 RequireCompleteType(Var->getLocation(), Type, 6881 diag::err_typecheck_decl_incomplete_type)) 6882 Var->setInvalidDecl(); 6883 6884 // Make sure that the type is not abstract. 6885 if (!Type->isDependentType() && !Var->isInvalidDecl() && 6886 RequireNonAbstractType(Var->getLocation(), Type, 6887 diag::err_abstract_type_in_decl, 6888 AbstractVariableType)) 6889 Var->setInvalidDecl(); 6890 if (!Type->isDependentType() && !Var->isInvalidDecl() && 6891 Var->getStorageClass() == SC_PrivateExtern) { 6892 Diag(Var->getLocation(), diag::warn_private_extern); 6893 Diag(Var->getLocation(), diag::note_private_extern); 6894 } 6895 6896 return; 6897 6898 case VarDecl::TentativeDefinition: 6899 // File scope. C99 6.9.2p2: A declaration of an identifier for an 6900 // object that has file scope without an initializer, and without a 6901 // storage-class specifier or with the storage-class specifier "static", 6902 // constitutes a tentative definition. Note: A tentative definition with 6903 // external linkage is valid (C99 6.2.2p5). 6904 if (!Var->isInvalidDecl()) { 6905 if (const IncompleteArrayType *ArrayT 6906 = Context.getAsIncompleteArrayType(Type)) { 6907 if (RequireCompleteType(Var->getLocation(), 6908 ArrayT->getElementType(), 6909 diag::err_illegal_decl_array_incomplete_type)) 6910 Var->setInvalidDecl(); 6911 } else if (Var->getStorageClass() == SC_Static) { 6912 // C99 6.9.2p3: If the declaration of an identifier for an object is 6913 // a tentative definition and has internal linkage (C99 6.2.2p3), the 6914 // declared type shall not be an incomplete type. 6915 // NOTE: code such as the following 6916 // static struct s; 6917 // struct s { int a; }; 6918 // is accepted by gcc. Hence here we issue a warning instead of 6919 // an error and we do not invalidate the static declaration. 6920 // NOTE: to avoid multiple warnings, only check the first declaration. 6921 if (Var->getPreviousDecl() == 0) 6922 RequireCompleteType(Var->getLocation(), Type, 6923 diag::ext_typecheck_decl_incomplete_type); 6924 } 6925 } 6926 6927 // Record the tentative definition; we're done. 6928 if (!Var->isInvalidDecl()) 6929 TentativeDefinitions.push_back(Var); 6930 return; 6931 } 6932 6933 // Provide a specific diagnostic for uninitialized variable 6934 // definitions with incomplete array type. 6935 if (Type->isIncompleteArrayType()) { 6936 Diag(Var->getLocation(), 6937 diag::err_typecheck_incomplete_array_needs_initializer); 6938 Var->setInvalidDecl(); 6939 return; 6940 } 6941 6942 // Provide a specific diagnostic for uninitialized variable 6943 // definitions with reference type. 6944 if (Type->isReferenceType()) { 6945 Diag(Var->getLocation(), diag::err_reference_var_requires_init) 6946 << Var->getDeclName() 6947 << SourceRange(Var->getLocation(), Var->getLocation()); 6948 Var->setInvalidDecl(); 6949 return; 6950 } 6951 6952 // Do not attempt to type-check the default initializer for a 6953 // variable with dependent type. 6954 if (Type->isDependentType()) 6955 return; 6956 6957 if (Var->isInvalidDecl()) 6958 return; 6959 6960 if (RequireCompleteType(Var->getLocation(), 6961 Context.getBaseElementType(Type), 6962 diag::err_typecheck_decl_incomplete_type)) { 6963 Var->setInvalidDecl(); 6964 return; 6965 } 6966 6967 // The variable can not have an abstract class type. 6968 if (RequireNonAbstractType(Var->getLocation(), Type, 6969 diag::err_abstract_type_in_decl, 6970 AbstractVariableType)) { 6971 Var->setInvalidDecl(); 6972 return; 6973 } 6974 6975 // Check for jumps past the implicit initializer. C++0x 6976 // clarifies that this applies to a "variable with automatic 6977 // storage duration", not a "local variable". 6978 // C++11 [stmt.dcl]p3 6979 // A program that jumps from a point where a variable with automatic 6980 // storage duration is not in scope to a point where it is in scope is 6981 // ill-formed unless the variable has scalar type, class type with a 6982 // trivial default constructor and a trivial destructor, a cv-qualified 6983 // version of one of these types, or an array of one of the preceding 6984 // types and is declared without an initializer. 6985 if (getLangOpts().CPlusPlus && Var->hasLocalStorage()) { 6986 if (const RecordType *Record 6987 = Context.getBaseElementType(Type)->getAs<RecordType>()) { 6988 CXXRecordDecl *CXXRecord = cast<CXXRecordDecl>(Record->getDecl()); 6989 // Mark the function for further checking even if the looser rules of 6990 // C++11 do not require such checks, so that we can diagnose 6991 // incompatibilities with C++98. 6992 if (!CXXRecord->isPOD()) 6993 getCurFunction()->setHasBranchProtectedScope(); 6994 } 6995 } 6996 6997 // C++03 [dcl.init]p9: 6998 // If no initializer is specified for an object, and the 6999 // object is of (possibly cv-qualified) non-POD class type (or 7000 // array thereof), the object shall be default-initialized; if 7001 // the object is of const-qualified type, the underlying class 7002 // type shall have a user-declared default 7003 // constructor. Otherwise, if no initializer is specified for 7004 // a non- static object, the object and its subobjects, if 7005 // any, have an indeterminate initial value); if the object 7006 // or any of its subobjects are of const-qualified type, the 7007 // program is ill-formed. 7008 // C++0x [dcl.init]p11: 7009 // If no initializer is specified for an object, the object is 7010 // default-initialized; [...]. 7011 InitializedEntity Entity = InitializedEntity::InitializeVariable(Var); 7012 InitializationKind Kind 7013 = InitializationKind::CreateDefault(Var->getLocation()); 7014 7015 InitializationSequence InitSeq(*this, Entity, Kind, 0, 0); 7016 ExprResult Init = InitSeq.Perform(*this, Entity, Kind, MultiExprArg()); 7017 if (Init.isInvalid()) 7018 Var->setInvalidDecl(); 7019 else if (Init.get()) { 7020 Var->setInit(MaybeCreateExprWithCleanups(Init.get())); 7021 // This is important for template substitution. 7022 Var->setInitStyle(VarDecl::CallInit); 7023 } 7024 7025 CheckCompleteVariableDeclaration(Var); 7026 } 7027 } 7028 7029 void Sema::ActOnCXXForRangeDecl(Decl *D) { 7030 VarDecl *VD = dyn_cast<VarDecl>(D); 7031 if (!VD) { 7032 Diag(D->getLocation(), diag::err_for_range_decl_must_be_var); 7033 D->setInvalidDecl(); 7034 return; 7035 } 7036 7037 VD->setCXXForRangeDecl(true); 7038 7039 // for-range-declaration cannot be given a storage class specifier. 7040 int Error = -1; 7041 switch (VD->getStorageClassAsWritten()) { 7042 case SC_None: 7043 break; 7044 case SC_Extern: 7045 Error = 0; 7046 break; 7047 case SC_Static: 7048 Error = 1; 7049 break; 7050 case SC_PrivateExtern: 7051 Error = 2; 7052 break; 7053 case SC_Auto: 7054 Error = 3; 7055 break; 7056 case SC_Register: 7057 Error = 4; 7058 break; 7059 case SC_OpenCLWorkGroupLocal: 7060 llvm_unreachable("Unexpected storage class"); 7061 } 7062 if (VD->isConstexpr()) 7063 Error = 5; 7064 if (Error != -1) { 7065 Diag(VD->getOuterLocStart(), diag::err_for_range_storage_class) 7066 << VD->getDeclName() << Error; 7067 D->setInvalidDecl(); 7068 } 7069 } 7070 7071 void Sema::CheckCompleteVariableDeclaration(VarDecl *var) { 7072 if (var->isInvalidDecl()) return; 7073 7074 // In ARC, don't allow jumps past the implicit initialization of a 7075 // local retaining variable. 7076 if (getLangOpts().ObjCAutoRefCount && 7077 var->hasLocalStorage()) { 7078 switch (var->getType().getObjCLifetime()) { 7079 case Qualifiers::OCL_None: 7080 case Qualifiers::OCL_ExplicitNone: 7081 case Qualifiers::OCL_Autoreleasing: 7082 break; 7083 7084 case Qualifiers::OCL_Weak: 7085 case Qualifiers::OCL_Strong: 7086 getCurFunction()->setHasBranchProtectedScope(); 7087 break; 7088 } 7089 } 7090 7091 // All the following checks are C++ only. 7092 if (!getLangOpts().CPlusPlus) return; 7093 7094 QualType baseType = Context.getBaseElementType(var->getType()); 7095 if (baseType->isDependentType()) return; 7096 7097 // __block variables might require us to capture a copy-initializer. 7098 if (var->hasAttr<BlocksAttr>()) { 7099 // It's currently invalid to ever have a __block variable with an 7100 // array type; should we diagnose that here? 7101 7102 // Regardless, we don't want to ignore array nesting when 7103 // constructing this copy. 7104 QualType type = var->getType(); 7105 7106 if (type->isStructureOrClassType()) { 7107 SourceLocation poi = var->getLocation(); 7108 Expr *varRef =new (Context) DeclRefExpr(var, false, type, VK_LValue, poi); 7109 ExprResult result = 7110 PerformCopyInitialization( 7111 InitializedEntity::InitializeBlock(poi, type, false), 7112 poi, Owned(varRef)); 7113 if (!result.isInvalid()) { 7114 result = MaybeCreateExprWithCleanups(result); 7115 Expr *init = result.takeAs<Expr>(); 7116 Context.setBlockVarCopyInits(var, init); 7117 } 7118 } 7119 } 7120 7121 Expr *Init = var->getInit(); 7122 bool IsGlobal = var->hasGlobalStorage() && !var->isStaticLocal(); 7123 7124 if (!var->getDeclContext()->isDependentContext() && Init) { 7125 if (IsGlobal && !var->isConstexpr() && 7126 getDiagnostics().getDiagnosticLevel(diag::warn_global_constructor, 7127 var->getLocation()) 7128 != DiagnosticsEngine::Ignored && 7129 !Init->isConstantInitializer(Context, baseType->isReferenceType())) 7130 Diag(var->getLocation(), diag::warn_global_constructor) 7131 << Init->getSourceRange(); 7132 7133 if (var->isConstexpr()) { 7134 llvm::SmallVector<PartialDiagnosticAt, 8> Notes; 7135 if (!var->evaluateValue(Notes) || !var->isInitICE()) { 7136 SourceLocation DiagLoc = var->getLocation(); 7137 // If the note doesn't add any useful information other than a source 7138 // location, fold it into the primary diagnostic. 7139 if (Notes.size() == 1 && Notes[0].second.getDiagID() == 7140 diag::note_invalid_subexpr_in_const_expr) { 7141 DiagLoc = Notes[0].first; 7142 Notes.clear(); 7143 } 7144 Diag(DiagLoc, diag::err_constexpr_var_requires_const_init) 7145 << var << Init->getSourceRange(); 7146 for (unsigned I = 0, N = Notes.size(); I != N; ++I) 7147 Diag(Notes[I].first, Notes[I].second); 7148 } 7149 } else if (var->isUsableInConstantExpressions(Context)) { 7150 // Check whether the initializer of a const variable of integral or 7151 // enumeration type is an ICE now, since we can't tell whether it was 7152 // initialized by a constant expression if we check later. 7153 var->checkInitIsICE(); 7154 } 7155 } 7156 7157 // Require the destructor. 7158 if (const RecordType *recordType = baseType->getAs<RecordType>()) 7159 FinalizeVarWithDestructor(var, recordType); 7160 } 7161 7162 /// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform 7163 /// any semantic actions necessary after any initializer has been attached. 7164 void 7165 Sema::FinalizeDeclaration(Decl *ThisDecl) { 7166 // Note that we are no longer parsing the initializer for this declaration. 7167 ParsingInitForAutoVars.erase(ThisDecl); 7168 7169 // Now we have parsed the initializer and can update the table of magic 7170 // tag values. 7171 if (ThisDecl && ThisDecl->hasAttr<TypeTagForDatatypeAttr>()) { 7172 const VarDecl *VD = dyn_cast<VarDecl>(ThisDecl); 7173 if (VD && VD->getType()->isIntegralOrEnumerationType()) { 7174 for (specific_attr_iterator<TypeTagForDatatypeAttr> 7175 I = ThisDecl->specific_attr_begin<TypeTagForDatatypeAttr>(), 7176 E = ThisDecl->specific_attr_end<TypeTagForDatatypeAttr>(); 7177 I != E; ++I) { 7178 const Expr *MagicValueExpr = VD->getInit(); 7179 if (!MagicValueExpr) { 7180 continue; 7181 } 7182 llvm::APSInt MagicValueInt; 7183 if (!MagicValueExpr->isIntegerConstantExpr(MagicValueInt, Context)) { 7184 Diag(I->getRange().getBegin(), 7185 diag::err_type_tag_for_datatype_not_ice) 7186 << LangOpts.CPlusPlus << MagicValueExpr->getSourceRange(); 7187 continue; 7188 } 7189 if (MagicValueInt.getActiveBits() > 64) { 7190 Diag(I->getRange().getBegin(), 7191 diag::err_type_tag_for_datatype_too_large) 7192 << LangOpts.CPlusPlus << MagicValueExpr->getSourceRange(); 7193 continue; 7194 } 7195 uint64_t MagicValue = MagicValueInt.getZExtValue(); 7196 RegisterTypeTagForDatatype(I->getArgumentKind(), 7197 MagicValue, 7198 I->getMatchingCType(), 7199 I->getLayoutCompatible(), 7200 I->getMustBeNull()); 7201 } 7202 } 7203 } 7204 } 7205 7206 Sema::DeclGroupPtrTy 7207 Sema::FinalizeDeclaratorGroup(Scope *S, const DeclSpec &DS, 7208 Decl **Group, unsigned NumDecls) { 7209 SmallVector<Decl*, 8> Decls; 7210 7211 if (DS.isTypeSpecOwned()) 7212 Decls.push_back(DS.getRepAsDecl()); 7213 7214 for (unsigned i = 0; i != NumDecls; ++i) 7215 if (Decl *D = Group[i]) 7216 Decls.push_back(D); 7217 7218 return BuildDeclaratorGroup(Decls.data(), Decls.size(), 7219 DS.getTypeSpecType() == DeclSpec::TST_auto); 7220 } 7221 7222 /// BuildDeclaratorGroup - convert a list of declarations into a declaration 7223 /// group, performing any necessary semantic checking. 7224 Sema::DeclGroupPtrTy 7225 Sema::BuildDeclaratorGroup(Decl **Group, unsigned NumDecls, 7226 bool TypeMayContainAuto) { 7227 // C++0x [dcl.spec.auto]p7: 7228 // If the type deduced for the template parameter U is not the same in each 7229 // deduction, the program is ill-formed. 7230 // FIXME: When initializer-list support is added, a distinction is needed 7231 // between the deduced type U and the deduced type which 'auto' stands for. 7232 // auto a = 0, b = { 1, 2, 3 }; 7233 // is legal because the deduced type U is 'int' in both cases. 7234 if (TypeMayContainAuto && NumDecls > 1) { 7235 QualType Deduced; 7236 CanQualType DeducedCanon; 7237 VarDecl *DeducedDecl = 0; 7238 for (unsigned i = 0; i != NumDecls; ++i) { 7239 if (VarDecl *D = dyn_cast<VarDecl>(Group[i])) { 7240 AutoType *AT = D->getType()->getContainedAutoType(); 7241 // Don't reissue diagnostics when instantiating a template. 7242 if (AT && D->isInvalidDecl()) 7243 break; 7244 if (AT && AT->isDeduced()) { 7245 QualType U = AT->getDeducedType(); 7246 CanQualType UCanon = Context.getCanonicalType(U); 7247 if (Deduced.isNull()) { 7248 Deduced = U; 7249 DeducedCanon = UCanon; 7250 DeducedDecl = D; 7251 } else if (DeducedCanon != UCanon) { 7252 Diag(D->getTypeSourceInfo()->getTypeLoc().getBeginLoc(), 7253 diag::err_auto_different_deductions) 7254 << Deduced << DeducedDecl->getDeclName() 7255 << U << D->getDeclName() 7256 << DeducedDecl->getInit()->getSourceRange() 7257 << D->getInit()->getSourceRange(); 7258 D->setInvalidDecl(); 7259 break; 7260 } 7261 } 7262 } 7263 } 7264 } 7265 7266 ActOnDocumentableDecls(Group, NumDecls); 7267 7268 return DeclGroupPtrTy::make(DeclGroupRef::Create(Context, Group, NumDecls)); 7269 } 7270 7271 void Sema::ActOnDocumentableDecl(Decl *D) { 7272 ActOnDocumentableDecls(&D, 1); 7273 } 7274 7275 void Sema::ActOnDocumentableDecls(Decl **Group, unsigned NumDecls) { 7276 // Don't parse the comment if Doxygen diagnostics are ignored. 7277 if (NumDecls == 0 || !Group[0]) 7278 return; 7279 7280 if (Diags.getDiagnosticLevel(diag::warn_doc_param_not_found, 7281 Group[0]->getLocation()) 7282 == DiagnosticsEngine::Ignored) 7283 return; 7284 7285 if (NumDecls >= 2) { 7286 // This is a decl group. Normally it will contain only declarations 7287 // procuded from declarator list. But in case we have any definitions or 7288 // additional declaration references: 7289 // 'typedef struct S {} S;' 7290 // 'typedef struct S *S;' 7291 // 'struct S *pS;' 7292 // FinalizeDeclaratorGroup adds these as separate declarations. 7293 Decl *MaybeTagDecl = Group[0]; 7294 if (MaybeTagDecl && isa<TagDecl>(MaybeTagDecl)) { 7295 Group++; 7296 NumDecls--; 7297 } 7298 } 7299 7300 // See if there are any new comments that are not attached to a decl. 7301 ArrayRef<RawComment *> Comments = Context.getRawCommentList().getComments(); 7302 if (!Comments.empty() && 7303 !Comments.back()->isAttached()) { 7304 // There is at least one comment that not attached to a decl. 7305 // Maybe it should be attached to one of these decls? 7306 // 7307 // Note that this way we pick up not only comments that precede the 7308 // declaration, but also comments that *follow* the declaration -- thanks to 7309 // the lookahead in the lexer: we've consumed the semicolon and looked 7310 // ahead through comments. 7311 for (unsigned i = 0; i != NumDecls; ++i) 7312 Context.getCommentForDecl(Group[i], &PP); 7313 } 7314 } 7315 7316 /// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator() 7317 /// to introduce parameters into function prototype scope. 7318 Decl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) { 7319 const DeclSpec &DS = D.getDeclSpec(); 7320 7321 // Verify C99 6.7.5.3p2: The only SCS allowed is 'register'. 7322 // C++03 [dcl.stc]p2 also permits 'auto'. 7323 VarDecl::StorageClass StorageClass = SC_None; 7324 VarDecl::StorageClass StorageClassAsWritten = SC_None; 7325 if (DS.getStorageClassSpec() == DeclSpec::SCS_register) { 7326 StorageClass = SC_Register; 7327 StorageClassAsWritten = SC_Register; 7328 } else if (getLangOpts().CPlusPlus && 7329 DS.getStorageClassSpec() == DeclSpec::SCS_auto) { 7330 StorageClass = SC_Auto; 7331 StorageClassAsWritten = SC_Auto; 7332 } else if (DS.getStorageClassSpec() != DeclSpec::SCS_unspecified) { 7333 Diag(DS.getStorageClassSpecLoc(), 7334 diag::err_invalid_storage_class_in_func_decl); 7335 D.getMutableDeclSpec().ClearStorageClassSpecs(); 7336 } 7337 7338 if (D.getDeclSpec().isThreadSpecified()) 7339 Diag(D.getDeclSpec().getThreadSpecLoc(), diag::err_invalid_thread); 7340 if (D.getDeclSpec().isConstexprSpecified()) 7341 Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_invalid_constexpr) 7342 << 0; 7343 7344 DiagnoseFunctionSpecifiers(D); 7345 7346 TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S); 7347 QualType parmDeclType = TInfo->getType(); 7348 7349 if (getLangOpts().CPlusPlus) { 7350 // Check that there are no default arguments inside the type of this 7351 // parameter. 7352 CheckExtraCXXDefaultArguments(D); 7353 7354 // Parameter declarators cannot be qualified (C++ [dcl.meaning]p1). 7355 if (D.getCXXScopeSpec().isSet()) { 7356 Diag(D.getIdentifierLoc(), diag::err_qualified_param_declarator) 7357 << D.getCXXScopeSpec().getRange(); 7358 D.getCXXScopeSpec().clear(); 7359 } 7360 } 7361 7362 // Ensure we have a valid name 7363 IdentifierInfo *II = 0; 7364 if (D.hasName()) { 7365 II = D.getIdentifier(); 7366 if (!II) { 7367 Diag(D.getIdentifierLoc(), diag::err_bad_parameter_name) 7368 << GetNameForDeclarator(D).getName().getAsString(); 7369 D.setInvalidType(true); 7370 } 7371 } 7372 7373 // Check for redeclaration of parameters, e.g. int foo(int x, int x); 7374 if (II) { 7375 LookupResult R(*this, II, D.getIdentifierLoc(), LookupOrdinaryName, 7376 ForRedeclaration); 7377 LookupName(R, S); 7378 if (R.isSingleResult()) { 7379 NamedDecl *PrevDecl = R.getFoundDecl(); 7380 if (PrevDecl->isTemplateParameter()) { 7381 // Maybe we will complain about the shadowed template parameter. 7382 DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl); 7383 // Just pretend that we didn't see the previous declaration. 7384 PrevDecl = 0; 7385 } else if (S->isDeclScope(PrevDecl)) { 7386 Diag(D.getIdentifierLoc(), diag::err_param_redefinition) << II; 7387 Diag(PrevDecl->getLocation(), diag::note_previous_declaration); 7388 7389 // Recover by removing the name 7390 II = 0; 7391 D.SetIdentifier(0, D.getIdentifierLoc()); 7392 D.setInvalidType(true); 7393 } 7394 } 7395 } 7396 7397 // Temporarily put parameter variables in the translation unit, not 7398 // the enclosing context. This prevents them from accidentally 7399 // looking like class members in C++. 7400 ParmVarDecl *New = CheckParameter(Context.getTranslationUnitDecl(), 7401 D.getLocStart(), 7402 D.getIdentifierLoc(), II, 7403 parmDeclType, TInfo, 7404 StorageClass, StorageClassAsWritten); 7405 7406 if (D.isInvalidType()) 7407 New->setInvalidDecl(); 7408 7409 assert(S->isFunctionPrototypeScope()); 7410 assert(S->getFunctionPrototypeDepth() >= 1); 7411 New->setScopeInfo(S->getFunctionPrototypeDepth() - 1, 7412 S->getNextFunctionPrototypeIndex()); 7413 7414 // Add the parameter declaration into this scope. 7415 S->AddDecl(New); 7416 if (II) 7417 IdResolver.AddDecl(New); 7418 7419 ProcessDeclAttributes(S, New, D); 7420 7421 if (D.getDeclSpec().isModulePrivateSpecified()) 7422 Diag(New->getLocation(), diag::err_module_private_local) 7423 << 1 << New->getDeclName() 7424 << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc()) 7425 << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc()); 7426 7427 if (New->hasAttr<BlocksAttr>()) { 7428 Diag(New->getLocation(), diag::err_block_on_nonlocal); 7429 } 7430 return New; 7431 } 7432 7433 /// \brief Synthesizes a variable for a parameter arising from a 7434 /// typedef. 7435 ParmVarDecl *Sema::BuildParmVarDeclForTypedef(DeclContext *DC, 7436 SourceLocation Loc, 7437 QualType T) { 7438 /* FIXME: setting StartLoc == Loc. 7439 Would it be worth to modify callers so as to provide proper source 7440 location for the unnamed parameters, embedding the parameter's type? */ 7441 ParmVarDecl *Param = ParmVarDecl::Create(Context, DC, Loc, Loc, 0, 7442 T, Context.getTrivialTypeSourceInfo(T, Loc), 7443 SC_None, SC_None, 0); 7444 Param->setImplicit(); 7445 return Param; 7446 } 7447 7448 void Sema::DiagnoseUnusedParameters(ParmVarDecl * const *Param, 7449 ParmVarDecl * const *ParamEnd) { 7450 // Don't diagnose unused-parameter errors in template instantiations; we 7451 // will already have done so in the template itself. 7452 if (!ActiveTemplateInstantiations.empty()) 7453 return; 7454 7455 for (; Param != ParamEnd; ++Param) { 7456 if (!(*Param)->isReferenced() && (*Param)->getDeclName() && 7457 !(*Param)->hasAttr<UnusedAttr>()) { 7458 Diag((*Param)->getLocation(), diag::warn_unused_parameter) 7459 << (*Param)->getDeclName(); 7460 } 7461 } 7462 } 7463 7464 void Sema::DiagnoseSizeOfParametersAndReturnValue(ParmVarDecl * const *Param, 7465 ParmVarDecl * const *ParamEnd, 7466 QualType ReturnTy, 7467 NamedDecl *D) { 7468 if (LangOpts.NumLargeByValueCopy == 0) // No check. 7469 return; 7470 7471 // Warn if the return value is pass-by-value and larger than the specified 7472 // threshold. 7473 if (!ReturnTy->isDependentType() && ReturnTy.isPODType(Context)) { 7474 unsigned Size = Context.getTypeSizeInChars(ReturnTy).getQuantity(); 7475 if (Size > LangOpts.NumLargeByValueCopy) 7476 Diag(D->getLocation(), diag::warn_return_value_size) 7477 << D->getDeclName() << Size; 7478 } 7479 7480 // Warn if any parameter is pass-by-value and larger than the specified 7481 // threshold. 7482 for (; Param != ParamEnd; ++Param) { 7483 QualType T = (*Param)->getType(); 7484 if (T->isDependentType() || !T.isPODType(Context)) 7485 continue; 7486 unsigned Size = Context.getTypeSizeInChars(T).getQuantity(); 7487 if (Size > LangOpts.NumLargeByValueCopy) 7488 Diag((*Param)->getLocation(), diag::warn_parameter_size) 7489 << (*Param)->getDeclName() << Size; 7490 } 7491 } 7492 7493 ParmVarDecl *Sema::CheckParameter(DeclContext *DC, SourceLocation StartLoc, 7494 SourceLocation NameLoc, IdentifierInfo *Name, 7495 QualType T, TypeSourceInfo *TSInfo, 7496 VarDecl::StorageClass StorageClass, 7497 VarDecl::StorageClass StorageClassAsWritten) { 7498 // In ARC, infer a lifetime qualifier for appropriate parameter types. 7499 if (getLangOpts().ObjCAutoRefCount && 7500 T.getObjCLifetime() == Qualifiers::OCL_None && 7501 T->isObjCLifetimeType()) { 7502 7503 Qualifiers::ObjCLifetime lifetime; 7504 7505 // Special cases for arrays: 7506 // - if it's const, use __unsafe_unretained 7507 // - otherwise, it's an error 7508 if (T->isArrayType()) { 7509 if (!T.isConstQualified()) { 7510 DelayedDiagnostics.add( 7511 sema::DelayedDiagnostic::makeForbiddenType( 7512 NameLoc, diag::err_arc_array_param_no_ownership, T, false)); 7513 } 7514 lifetime = Qualifiers::OCL_ExplicitNone; 7515 } else { 7516 lifetime = T->getObjCARCImplicitLifetime(); 7517 } 7518 T = Context.getLifetimeQualifiedType(T, lifetime); 7519 } 7520 7521 ParmVarDecl *New = ParmVarDecl::Create(Context, DC, StartLoc, NameLoc, Name, 7522 Context.getAdjustedParameterType(T), 7523 TSInfo, 7524 StorageClass, StorageClassAsWritten, 7525 0); 7526 7527 // Parameters can not be abstract class types. 7528 // For record types, this is done by the AbstractClassUsageDiagnoser once 7529 // the class has been completely parsed. 7530 if (!CurContext->isRecord() && 7531 RequireNonAbstractType(NameLoc, T, diag::err_abstract_type_in_decl, 7532 AbstractParamType)) 7533 New->setInvalidDecl(); 7534 7535 // Parameter declarators cannot be interface types. All ObjC objects are 7536 // passed by reference. 7537 if (T->isObjCObjectType()) { 7538 SourceLocation TypeEndLoc = TSInfo->getTypeLoc().getLocEnd(); 7539 Diag(NameLoc, 7540 diag::err_object_cannot_be_passed_returned_by_value) << 1 << T 7541 << FixItHint::CreateInsertion(TypeEndLoc, "*"); 7542 T = Context.getObjCObjectPointerType(T); 7543 New->setType(T); 7544 } 7545 7546 // ISO/IEC TR 18037 S6.7.3: "The type of an object with automatic storage 7547 // duration shall not be qualified by an address-space qualifier." 7548 // Since all parameters have automatic store duration, they can not have 7549 // an address space. 7550 if (T.getAddressSpace() != 0) { 7551 Diag(NameLoc, diag::err_arg_with_address_space); 7552 New->setInvalidDecl(); 7553 } 7554 7555 return New; 7556 } 7557 7558 void Sema::ActOnFinishKNRParamDeclarations(Scope *S, Declarator &D, 7559 SourceLocation LocAfterDecls) { 7560 DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo(); 7561 7562 // Verify 6.9.1p6: 'every identifier in the identifier list shall be declared' 7563 // for a K&R function. 7564 if (!FTI.hasPrototype) { 7565 for (int i = FTI.NumArgs; i != 0; /* decrement in loop */) { 7566 --i; 7567 if (FTI.ArgInfo[i].Param == 0) { 7568 SmallString<256> Code; 7569 llvm::raw_svector_ostream(Code) << " int " 7570 << FTI.ArgInfo[i].Ident->getName() 7571 << ";\n"; 7572 Diag(FTI.ArgInfo[i].IdentLoc, diag::ext_param_not_declared) 7573 << FTI.ArgInfo[i].Ident 7574 << FixItHint::CreateInsertion(LocAfterDecls, Code.str()); 7575 7576 // Implicitly declare the argument as type 'int' for lack of a better 7577 // type. 7578 AttributeFactory attrs; 7579 DeclSpec DS(attrs); 7580 const char* PrevSpec; // unused 7581 unsigned DiagID; // unused 7582 DS.SetTypeSpecType(DeclSpec::TST_int, FTI.ArgInfo[i].IdentLoc, 7583 PrevSpec, DiagID); 7584 // Use the identifier location for the type source range. 7585 DS.SetRangeStart(FTI.ArgInfo[i].IdentLoc); 7586 DS.SetRangeEnd(FTI.ArgInfo[i].IdentLoc); 7587 Declarator ParamD(DS, Declarator::KNRTypeListContext); 7588 ParamD.SetIdentifier(FTI.ArgInfo[i].Ident, FTI.ArgInfo[i].IdentLoc); 7589 FTI.ArgInfo[i].Param = ActOnParamDeclarator(S, ParamD); 7590 } 7591 } 7592 } 7593 } 7594 7595 Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Declarator &D) { 7596 assert(getCurFunctionDecl() == 0 && "Function parsing confused"); 7597 assert(D.isFunctionDeclarator() && "Not a function declarator!"); 7598 Scope *ParentScope = FnBodyScope->getParent(); 7599 7600 D.setFunctionDefinitionKind(FDK_Definition); 7601 Decl *DP = HandleDeclarator(ParentScope, D, MultiTemplateParamsArg()); 7602 return ActOnStartOfFunctionDef(FnBodyScope, DP); 7603 } 7604 7605 static bool ShouldWarnAboutMissingPrototype(const FunctionDecl *FD) { 7606 // Don't warn about invalid declarations. 7607 if (FD->isInvalidDecl()) 7608 return false; 7609 7610 // Or declarations that aren't global. 7611 if (!FD->isGlobal()) 7612 return false; 7613 7614 // Don't warn about C++ member functions. 7615 if (isa<CXXMethodDecl>(FD)) 7616 return false; 7617 7618 // Don't warn about 'main'. 7619 if (FD->isMain()) 7620 return false; 7621 7622 // Don't warn about inline functions. 7623 if (FD->isInlined()) 7624 return false; 7625 7626 // Don't warn about function templates. 7627 if (FD->getDescribedFunctionTemplate()) 7628 return false; 7629 7630 // Don't warn about function template specializations. 7631 if (FD->isFunctionTemplateSpecialization()) 7632 return false; 7633 7634 // Don't warn for OpenCL kernels. 7635 if (FD->hasAttr<OpenCLKernelAttr>()) 7636 return false; 7637 7638 bool MissingPrototype = true; 7639 for (const FunctionDecl *Prev = FD->getPreviousDecl(); 7640 Prev; Prev = Prev->getPreviousDecl()) { 7641 // Ignore any declarations that occur in function or method 7642 // scope, because they aren't visible from the header. 7643 if (Prev->getDeclContext()->isFunctionOrMethod()) 7644 continue; 7645 7646 MissingPrototype = !Prev->getType()->isFunctionProtoType(); 7647 break; 7648 } 7649 7650 return MissingPrototype; 7651 } 7652 7653 void Sema::CheckForFunctionRedefinition(FunctionDecl *FD) { 7654 // Don't complain if we're in GNU89 mode and the previous definition 7655 // was an extern inline function. 7656 const FunctionDecl *Definition; 7657 if (FD->isDefined(Definition) && 7658 !canRedefineFunction(Definition, getLangOpts())) { 7659 if (getLangOpts().GNUMode && Definition->isInlineSpecified() && 7660 Definition->getStorageClass() == SC_Extern) 7661 Diag(FD->getLocation(), diag::err_redefinition_extern_inline) 7662 << FD->getDeclName() << getLangOpts().CPlusPlus; 7663 else 7664 Diag(FD->getLocation(), diag::err_redefinition) << FD->getDeclName(); 7665 Diag(Definition->getLocation(), diag::note_previous_definition); 7666 FD->setInvalidDecl(); 7667 } 7668 } 7669 7670 Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D) { 7671 // Clear the last template instantiation error context. 7672 LastTemplateInstantiationErrorContext = ActiveTemplateInstantiation(); 7673 7674 if (!D) 7675 return D; 7676 FunctionDecl *FD = 0; 7677 7678 if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(D)) 7679 FD = FunTmpl->getTemplatedDecl(); 7680 else 7681 FD = cast<FunctionDecl>(D); 7682 7683 // Enter a new function scope 7684 PushFunctionScope(); 7685 7686 // See if this is a redefinition. 7687 if (!FD->isLateTemplateParsed()) 7688 CheckForFunctionRedefinition(FD); 7689 7690 // Builtin functions cannot be defined. 7691 if (unsigned BuiltinID = FD->getBuiltinID()) { 7692 if (!Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID)) { 7693 Diag(FD->getLocation(), diag::err_builtin_definition) << FD; 7694 FD->setInvalidDecl(); 7695 } 7696 } 7697 7698 // The return type of a function definition must be complete 7699 // (C99 6.9.1p3, C++ [dcl.fct]p6). 7700 QualType ResultType = FD->getResultType(); 7701 if (!ResultType->isDependentType() && !ResultType->isVoidType() && 7702 !FD->isInvalidDecl() && 7703 RequireCompleteType(FD->getLocation(), ResultType, 7704 diag::err_func_def_incomplete_result)) 7705 FD->setInvalidDecl(); 7706 7707 // GNU warning -Wmissing-prototypes: 7708 // Warn if a global function is defined without a previous 7709 // prototype declaration. This warning is issued even if the 7710 // definition itself provides a prototype. The aim is to detect 7711 // global functions that fail to be declared in header files. 7712 if (ShouldWarnAboutMissingPrototype(FD)) 7713 Diag(FD->getLocation(), diag::warn_missing_prototype) << FD; 7714 7715 if (FnBodyScope) 7716 PushDeclContext(FnBodyScope, FD); 7717 7718 // Check the validity of our function parameters 7719 CheckParmsForFunctionDef(FD->param_begin(), FD->param_end(), 7720 /*CheckParameterNames=*/true); 7721 7722 // Introduce our parameters into the function scope 7723 for (unsigned p = 0, NumParams = FD->getNumParams(); p < NumParams; ++p) { 7724 ParmVarDecl *Param = FD->getParamDecl(p); 7725 Param->setOwningFunction(FD); 7726 7727 // If this has an identifier, add it to the scope stack. 7728 if (Param->getIdentifier() && FnBodyScope) { 7729 CheckShadow(FnBodyScope, Param); 7730 7731 PushOnScopeChains(Param, FnBodyScope); 7732 } 7733 } 7734 7735 // If we had any tags defined in the function prototype, 7736 // introduce them into the function scope. 7737 if (FnBodyScope) { 7738 for (llvm::ArrayRef<NamedDecl*>::iterator I = FD->getDeclsInPrototypeScope().begin(), 7739 E = FD->getDeclsInPrototypeScope().end(); I != E; ++I) { 7740 NamedDecl *D = *I; 7741 7742 // Some of these decls (like enums) may have been pinned to the translation unit 7743 // for lack of a real context earlier. If so, remove from the translation unit 7744 // and reattach to the current context. 7745 if (D->getLexicalDeclContext() == Context.getTranslationUnitDecl()) { 7746 // Is the decl actually in the context? 7747 for (DeclContext::decl_iterator DI = Context.getTranslationUnitDecl()->decls_begin(), 7748 DE = Context.getTranslationUnitDecl()->decls_end(); DI != DE; ++DI) { 7749 if (*DI == D) { 7750 Context.getTranslationUnitDecl()->removeDecl(D); 7751 break; 7752 } 7753 } 7754 // Either way, reassign the lexical decl context to our FunctionDecl. 7755 D->setLexicalDeclContext(CurContext); 7756 } 7757 7758 // If the decl has a non-null name, make accessible in the current scope. 7759 if (!D->getName().empty()) 7760 PushOnScopeChains(D, FnBodyScope, /*AddToContext=*/false); 7761 7762 // Similarly, dive into enums and fish their constants out, making them 7763 // accessible in this scope. 7764 if (EnumDecl *ED = dyn_cast<EnumDecl>(D)) { 7765 for (EnumDecl::enumerator_iterator EI = ED->enumerator_begin(), 7766 EE = ED->enumerator_end(); EI != EE; ++EI) 7767 PushOnScopeChains(*EI, FnBodyScope, /*AddToContext=*/false); 7768 } 7769 } 7770 } 7771 7772 // Ensure that the function's exception specification is instantiated. 7773 if (const FunctionProtoType *FPT = FD->getType()->getAs<FunctionProtoType>()) 7774 ResolveExceptionSpec(D->getLocation(), FPT); 7775 7776 // Checking attributes of current function definition 7777 // dllimport attribute. 7778 DLLImportAttr *DA = FD->getAttr<DLLImportAttr>(); 7779 if (DA && (!FD->getAttr<DLLExportAttr>())) { 7780 // dllimport attribute cannot be directly applied to definition. 7781 // Microsoft accepts dllimport for functions defined within class scope. 7782 if (!DA->isInherited() && 7783 !(LangOpts.MicrosoftExt && FD->getLexicalDeclContext()->isRecord())) { 7784 Diag(FD->getLocation(), 7785 diag::err_attribute_can_be_applied_only_to_symbol_declaration) 7786 << "dllimport"; 7787 FD->setInvalidDecl(); 7788 return FD; 7789 } 7790 7791 // Visual C++ appears to not think this is an issue, so only issue 7792 // a warning when Microsoft extensions are disabled. 7793 if (!LangOpts.MicrosoftExt) { 7794 // If a symbol previously declared dllimport is later defined, the 7795 // attribute is ignored in subsequent references, and a warning is 7796 // emitted. 7797 Diag(FD->getLocation(), 7798 diag::warn_redeclaration_without_attribute_prev_attribute_ignored) 7799 << FD->getName() << "dllimport"; 7800 } 7801 } 7802 // We want to attach documentation to original Decl (which might be 7803 // a function template). 7804 ActOnDocumentableDecl(D); 7805 return FD; 7806 } 7807 7808 /// \brief Given the set of return statements within a function body, 7809 /// compute the variables that are subject to the named return value 7810 /// optimization. 7811 /// 7812 /// Each of the variables that is subject to the named return value 7813 /// optimization will be marked as NRVO variables in the AST, and any 7814 /// return statement that has a marked NRVO variable as its NRVO candidate can 7815 /// use the named return value optimization. 7816 /// 7817 /// This function applies a very simplistic algorithm for NRVO: if every return 7818 /// statement in the function has the same NRVO candidate, that candidate is 7819 /// the NRVO variable. 7820 /// 7821 /// FIXME: Employ a smarter algorithm that accounts for multiple return 7822 /// statements and the lifetimes of the NRVO candidates. We should be able to 7823 /// find a maximal set of NRVO variables. 7824 void Sema::computeNRVO(Stmt *Body, FunctionScopeInfo *Scope) { 7825 ReturnStmt **Returns = Scope->Returns.data(); 7826 7827 const VarDecl *NRVOCandidate = 0; 7828 for (unsigned I = 0, E = Scope->Returns.size(); I != E; ++I) { 7829 if (!Returns[I]->getNRVOCandidate()) 7830 return; 7831 7832 if (!NRVOCandidate) 7833 NRVOCandidate = Returns[I]->getNRVOCandidate(); 7834 else if (NRVOCandidate != Returns[I]->getNRVOCandidate()) 7835 return; 7836 } 7837 7838 if (NRVOCandidate) 7839 const_cast<VarDecl*>(NRVOCandidate)->setNRVOVariable(true); 7840 } 7841 7842 Decl *Sema::ActOnFinishFunctionBody(Decl *D, Stmt *BodyArg) { 7843 return ActOnFinishFunctionBody(D, BodyArg, false); 7844 } 7845 7846 Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, 7847 bool IsInstantiation) { 7848 FunctionDecl *FD = 0; 7849 FunctionTemplateDecl *FunTmpl = dyn_cast_or_null<FunctionTemplateDecl>(dcl); 7850 if (FunTmpl) 7851 FD = FunTmpl->getTemplatedDecl(); 7852 else 7853 FD = dyn_cast_or_null<FunctionDecl>(dcl); 7854 7855 sema::AnalysisBasedWarnings::Policy WP = AnalysisWarnings.getDefaultPolicy(); 7856 sema::AnalysisBasedWarnings::Policy *ActivePolicy = 0; 7857 7858 if (FD) { 7859 FD->setBody(Body); 7860 7861 // If the function implicitly returns zero (like 'main') or is naked, 7862 // don't complain about missing return statements. 7863 if (FD->hasImplicitReturnZero() || FD->hasAttr<NakedAttr>()) 7864 WP.disableCheckFallThrough(); 7865 7866 // MSVC permits the use of pure specifier (=0) on function definition, 7867 // defined at class scope, warn about this non standard construct. 7868 if (getLangOpts().MicrosoftExt && FD->isPure()) 7869 Diag(FD->getLocation(), diag::warn_pure_function_definition); 7870 7871 if (!FD->isInvalidDecl()) { 7872 DiagnoseUnusedParameters(FD->param_begin(), FD->param_end()); 7873 DiagnoseSizeOfParametersAndReturnValue(FD->param_begin(), FD->param_end(), 7874 FD->getResultType(), FD); 7875 7876 // If this is a constructor, we need a vtable. 7877 if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(FD)) 7878 MarkVTableUsed(FD->getLocation(), Constructor->getParent()); 7879 7880 // Try to apply the named return value optimization. We have to check 7881 // if we can do this here because lambdas keep return statements around 7882 // to deduce an implicit return type. 7883 if (getLangOpts().CPlusPlus && FD->getResultType()->isRecordType() && 7884 !FD->isDependentContext()) 7885 computeNRVO(Body, getCurFunction()); 7886 } 7887 7888 assert((FD == getCurFunctionDecl() || getCurLambda()->CallOperator == FD) && 7889 "Function parsing confused"); 7890 } else if (ObjCMethodDecl *MD = dyn_cast_or_null<ObjCMethodDecl>(dcl)) { 7891 assert(MD == getCurMethodDecl() && "Method parsing confused"); 7892 MD->setBody(Body); 7893 if (!MD->isInvalidDecl()) { 7894 DiagnoseUnusedParameters(MD->param_begin(), MD->param_end()); 7895 DiagnoseSizeOfParametersAndReturnValue(MD->param_begin(), MD->param_end(), 7896 MD->getResultType(), MD); 7897 7898 if (Body) 7899 computeNRVO(Body, getCurFunction()); 7900 } 7901 if (getCurFunction()->ObjCShouldCallSuperDealloc) { 7902 Diag(MD->getLocEnd(), diag::warn_objc_missing_super_call) 7903 << MD->getSelector().getAsString(); 7904 getCurFunction()->ObjCShouldCallSuperDealloc = false; 7905 } 7906 if (getCurFunction()->ObjCShouldCallSuperFinalize) { 7907 Diag(MD->getLocEnd(), diag::warn_objc_missing_super_finalize); 7908 getCurFunction()->ObjCShouldCallSuperFinalize = false; 7909 } 7910 } else { 7911 return 0; 7912 } 7913 7914 assert(!getCurFunction()->ObjCShouldCallSuperDealloc && 7915 "This should only be set for ObjC methods, which should have been " 7916 "handled in the block above."); 7917 assert(!getCurFunction()->ObjCShouldCallSuperFinalize && 7918 "This should only be set for ObjC methods, which should have been " 7919 "handled in the block above."); 7920 7921 // Verify and clean out per-function state. 7922 if (Body) { 7923 // C++ constructors that have function-try-blocks can't have return 7924 // statements in the handlers of that block. (C++ [except.handle]p14) 7925 // Verify this. 7926 if (FD && isa<CXXConstructorDecl>(FD) && isa<CXXTryStmt>(Body)) 7927 DiagnoseReturnInConstructorExceptionHandler(cast<CXXTryStmt>(Body)); 7928 7929 // Verify that gotos and switch cases don't jump into scopes illegally. 7930 if (getCurFunction()->NeedsScopeChecking() && 7931 !dcl->isInvalidDecl() && 7932 !hasAnyUnrecoverableErrorsInThisFunction() && 7933 !PP.isCodeCompletionEnabled()) 7934 DiagnoseInvalidJumps(Body); 7935 7936 if (CXXDestructorDecl *Destructor = dyn_cast<CXXDestructorDecl>(dcl)) { 7937 if (!Destructor->getParent()->isDependentType()) 7938 CheckDestructor(Destructor); 7939 7940 MarkBaseAndMemberDestructorsReferenced(Destructor->getLocation(), 7941 Destructor->getParent()); 7942 } 7943 7944 // If any errors have occurred, clear out any temporaries that may have 7945 // been leftover. This ensures that these temporaries won't be picked up for 7946 // deletion in some later function. 7947 if (PP.getDiagnostics().hasErrorOccurred() || 7948 PP.getDiagnostics().getSuppressAllDiagnostics()) { 7949 DiscardCleanupsInEvaluationContext(); 7950 } else if (!isa<FunctionTemplateDecl>(dcl)) { 7951 // Since the body is valid, issue any analysis-based warnings that are 7952 // enabled. 7953 ActivePolicy = &WP; 7954 } 7955 7956 if (!IsInstantiation && FD && FD->isConstexpr() && !FD->isInvalidDecl() && 7957 (!CheckConstexprFunctionDecl(FD) || 7958 !CheckConstexprFunctionBody(FD, Body))) 7959 FD->setInvalidDecl(); 7960 7961 assert(ExprCleanupObjects.empty() && "Leftover temporaries in function"); 7962 assert(!ExprNeedsCleanups && "Unaccounted cleanups in function"); 7963 assert(MaybeODRUseExprs.empty() && 7964 "Leftover expressions for odr-use checking"); 7965 } 7966 7967 if (!IsInstantiation) 7968 PopDeclContext(); 7969 7970 PopFunctionScopeInfo(ActivePolicy, dcl); 7971 7972 // If any errors have occurred, clear out any temporaries that may have 7973 // been leftover. This ensures that these temporaries won't be picked up for 7974 // deletion in some later function. 7975 if (getDiagnostics().hasErrorOccurred()) { 7976 DiscardCleanupsInEvaluationContext(); 7977 } 7978 7979 return dcl; 7980 } 7981 7982 7983 /// When we finish delayed parsing of an attribute, we must attach it to the 7984 /// relevant Decl. 7985 void Sema::ActOnFinishDelayedAttribute(Scope *S, Decl *D, 7986 ParsedAttributes &Attrs) { 7987 // Always attach attributes to the underlying decl. 7988 if (TemplateDecl *TD = dyn_cast<TemplateDecl>(D)) 7989 D = TD->getTemplatedDecl(); 7990 ProcessDeclAttributeList(S, D, Attrs.getList()); 7991 7992 if (CXXMethodDecl *Method = dyn_cast_or_null<CXXMethodDecl>(D)) 7993 if (Method->isStatic()) 7994 checkThisInStaticMemberFunctionAttributes(Method); 7995 } 7996 7997 7998 /// ImplicitlyDefineFunction - An undeclared identifier was used in a function 7999 /// call, forming a call to an implicitly defined function (per C99 6.5.1p2). 8000 NamedDecl *Sema::ImplicitlyDefineFunction(SourceLocation Loc, 8001 IdentifierInfo &II, Scope *S) { 8002 // Before we produce a declaration for an implicitly defined 8003 // function, see whether there was a locally-scoped declaration of 8004 // this name as a function or variable. If so, use that 8005 // (non-visible) declaration, and complain about it. 8006 llvm::DenseMap<DeclarationName, NamedDecl *>::iterator Pos 8007 = findLocallyScopedExternalDecl(&II); 8008 if (Pos != LocallyScopedExternalDecls.end()) { 8009 Diag(Loc, diag::warn_use_out_of_scope_declaration) << Pos->second; 8010 Diag(Pos->second->getLocation(), diag::note_previous_declaration); 8011 return Pos->second; 8012 } 8013 8014 // Extension in C99. Legal in C90, but warn about it. 8015 unsigned diag_id; 8016 if (II.getName().startswith("__builtin_")) 8017 diag_id = diag::warn_builtin_unknown; 8018 else if (getLangOpts().C99) 8019 diag_id = diag::ext_implicit_function_decl; 8020 else 8021 diag_id = diag::warn_implicit_function_decl; 8022 Diag(Loc, diag_id) << &II; 8023 8024 // Because typo correction is expensive, only do it if the implicit 8025 // function declaration is going to be treated as an error. 8026 if (Diags.getDiagnosticLevel(diag_id, Loc) >= DiagnosticsEngine::Error) { 8027 TypoCorrection Corrected; 8028 DeclFilterCCC<FunctionDecl> Validator; 8029 if (S && (Corrected = CorrectTypo(DeclarationNameInfo(&II, Loc), 8030 LookupOrdinaryName, S, 0, Validator))) { 8031 std::string CorrectedStr = Corrected.getAsString(getLangOpts()); 8032 std::string CorrectedQuotedStr = Corrected.getQuoted(getLangOpts()); 8033 FunctionDecl *Func = Corrected.getCorrectionDeclAs<FunctionDecl>(); 8034 8035 Diag(Loc, diag::note_function_suggestion) << CorrectedQuotedStr 8036 << FixItHint::CreateReplacement(Loc, CorrectedStr); 8037 8038 if (Func->getLocation().isValid() 8039 && !II.getName().startswith("__builtin_")) 8040 Diag(Func->getLocation(), diag::note_previous_decl) 8041 << CorrectedQuotedStr; 8042 } 8043 } 8044 8045 // Set a Declarator for the implicit definition: int foo(); 8046 const char *Dummy; 8047 AttributeFactory attrFactory; 8048 DeclSpec DS(attrFactory); 8049 unsigned DiagID; 8050 bool Error = DS.SetTypeSpecType(DeclSpec::TST_int, Loc, Dummy, DiagID); 8051 (void)Error; // Silence warning. 8052 assert(!Error && "Error setting up implicit decl!"); 8053 SourceLocation NoLoc; 8054 Declarator D(DS, Declarator::BlockContext); 8055 D.AddTypeInfo(DeclaratorChunk::getFunction(/*HasProto=*/false, 8056 /*IsAmbiguous=*/false, 8057 /*RParenLoc=*/NoLoc, 8058 /*ArgInfo=*/0, 8059 /*NumArgs=*/0, 8060 /*EllipsisLoc=*/NoLoc, 8061 /*RParenLoc=*/NoLoc, 8062 /*TypeQuals=*/0, 8063 /*RefQualifierIsLvalueRef=*/true, 8064 /*RefQualifierLoc=*/NoLoc, 8065 /*ConstQualifierLoc=*/NoLoc, 8066 /*VolatileQualifierLoc=*/NoLoc, 8067 /*MutableLoc=*/NoLoc, 8068 EST_None, 8069 /*ESpecLoc=*/NoLoc, 8070 /*Exceptions=*/0, 8071 /*ExceptionRanges=*/0, 8072 /*NumExceptions=*/0, 8073 /*NoexceptExpr=*/0, 8074 Loc, Loc, D), 8075 DS.getAttributes(), 8076 SourceLocation()); 8077 D.SetIdentifier(&II, Loc); 8078 8079 // Insert this function into translation-unit scope. 8080 8081 DeclContext *PrevDC = CurContext; 8082 CurContext = Context.getTranslationUnitDecl(); 8083 8084 FunctionDecl *FD = dyn_cast<FunctionDecl>(ActOnDeclarator(TUScope, D)); 8085 FD->setImplicit(); 8086 8087 CurContext = PrevDC; 8088 8089 AddKnownFunctionAttributes(FD); 8090 8091 return FD; 8092 } 8093 8094 /// \brief Adds any function attributes that we know a priori based on 8095 /// the declaration of this function. 8096 /// 8097 /// These attributes can apply both to implicitly-declared builtins 8098 /// (like __builtin___printf_chk) or to library-declared functions 8099 /// like NSLog or printf. 8100 /// 8101 /// We need to check for duplicate attributes both here and where user-written 8102 /// attributes are applied to declarations. 8103 void Sema::AddKnownFunctionAttributes(FunctionDecl *FD) { 8104 if (FD->isInvalidDecl()) 8105 return; 8106 8107 // If this is a built-in function, map its builtin attributes to 8108 // actual attributes. 8109 if (unsigned BuiltinID = FD->getBuiltinID()) { 8110 // Handle printf-formatting attributes. 8111 unsigned FormatIdx; 8112 bool HasVAListArg; 8113 if (Context.BuiltinInfo.isPrintfLike(BuiltinID, FormatIdx, HasVAListArg)) { 8114 if (!FD->getAttr<FormatAttr>()) { 8115 const char *fmt = "printf"; 8116 unsigned int NumParams = FD->getNumParams(); 8117 if (FormatIdx < NumParams && // NumParams may be 0 (e.g. vfprintf) 8118 FD->getParamDecl(FormatIdx)->getType()->isObjCObjectPointerType()) 8119 fmt = "NSString"; 8120 FD->addAttr(::new (Context) FormatAttr(FD->getLocation(), Context, 8121 fmt, FormatIdx+1, 8122 HasVAListArg ? 0 : FormatIdx+2)); 8123 } 8124 } 8125 if (Context.BuiltinInfo.isScanfLike(BuiltinID, FormatIdx, 8126 HasVAListArg)) { 8127 if (!FD->getAttr<FormatAttr>()) 8128 FD->addAttr(::new (Context) FormatAttr(FD->getLocation(), Context, 8129 "scanf", FormatIdx+1, 8130 HasVAListArg ? 0 : FormatIdx+2)); 8131 } 8132 8133 // Mark const if we don't care about errno and that is the only 8134 // thing preventing the function from being const. This allows 8135 // IRgen to use LLVM intrinsics for such functions. 8136 if (!getLangOpts().MathErrno && 8137 Context.BuiltinInfo.isConstWithoutErrno(BuiltinID)) { 8138 if (!FD->getAttr<ConstAttr>()) 8139 FD->addAttr(::new (Context) ConstAttr(FD->getLocation(), Context)); 8140 } 8141 8142 if (Context.BuiltinInfo.isReturnsTwice(BuiltinID) && 8143 !FD->getAttr<ReturnsTwiceAttr>()) 8144 FD->addAttr(::new (Context) ReturnsTwiceAttr(FD->getLocation(), Context)); 8145 if (Context.BuiltinInfo.isNoThrow(BuiltinID) && !FD->getAttr<NoThrowAttr>()) 8146 FD->addAttr(::new (Context) NoThrowAttr(FD->getLocation(), Context)); 8147 if (Context.BuiltinInfo.isConst(BuiltinID) && !FD->getAttr<ConstAttr>()) 8148 FD->addAttr(::new (Context) ConstAttr(FD->getLocation(), Context)); 8149 } 8150 8151 IdentifierInfo *Name = FD->getIdentifier(); 8152 if (!Name) 8153 return; 8154 if ((!getLangOpts().CPlusPlus && 8155 FD->getDeclContext()->isTranslationUnit()) || 8156 (isa<LinkageSpecDecl>(FD->getDeclContext()) && 8157 cast<LinkageSpecDecl>(FD->getDeclContext())->getLanguage() == 8158 LinkageSpecDecl::lang_c)) { 8159 // Okay: this could be a libc/libm/Objective-C function we know 8160 // about. 8161 } else 8162 return; 8163 8164 if (Name->isStr("asprintf") || Name->isStr("vasprintf")) { 8165 // FIXME: asprintf and vasprintf aren't C99 functions. Should they be 8166 // target-specific builtins, perhaps? 8167 if (!FD->getAttr<FormatAttr>()) 8168 FD->addAttr(::new (Context) FormatAttr(FD->getLocation(), Context, 8169 "printf", 2, 8170 Name->isStr("vasprintf") ? 0 : 3)); 8171 } 8172 8173 if (Name->isStr("__CFStringMakeConstantString")) { 8174 // We already have a __builtin___CFStringMakeConstantString, 8175 // but builds that use -fno-constant-cfstrings don't go through that. 8176 if (!FD->getAttr<FormatArgAttr>()) 8177 FD->addAttr(::new (Context) FormatArgAttr(FD->getLocation(), Context, 1)); 8178 } 8179 } 8180 8181 TypedefDecl *Sema::ParseTypedefDecl(Scope *S, Declarator &D, QualType T, 8182 TypeSourceInfo *TInfo) { 8183 assert(D.getIdentifier() && "Wrong callback for declspec without declarator"); 8184 assert(!T.isNull() && "GetTypeForDeclarator() returned null type"); 8185 8186 if (!TInfo) { 8187 assert(D.isInvalidType() && "no declarator info for valid type"); 8188 TInfo = Context.getTrivialTypeSourceInfo(T); 8189 } 8190 8191 // Scope manipulation handled by caller. 8192 TypedefDecl *NewTD = TypedefDecl::Create(Context, CurContext, 8193 D.getLocStart(), 8194 D.getIdentifierLoc(), 8195 D.getIdentifier(), 8196 TInfo); 8197 8198 // Bail out immediately if we have an invalid declaration. 8199 if (D.isInvalidType()) { 8200 NewTD->setInvalidDecl(); 8201 return NewTD; 8202 } 8203 8204 if (D.getDeclSpec().isModulePrivateSpecified()) { 8205 if (CurContext->isFunctionOrMethod()) 8206 Diag(NewTD->getLocation(), diag::err_module_private_local) 8207 << 2 << NewTD->getDeclName() 8208 << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc()) 8209 << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc()); 8210 else 8211 NewTD->setModulePrivate(); 8212 } 8213 8214 // C++ [dcl.typedef]p8: 8215 // If the typedef declaration defines an unnamed class (or 8216 // enum), the first typedef-name declared by the declaration 8217 // to be that class type (or enum type) is used to denote the 8218 // class type (or enum type) for linkage purposes only. 8219 // We need to check whether the type was declared in the declaration. 8220 switch (D.getDeclSpec().getTypeSpecType()) { 8221 case TST_enum: 8222 case TST_struct: 8223 case TST_interface: 8224 case TST_union: 8225 case TST_class: { 8226 TagDecl *tagFromDeclSpec = cast<TagDecl>(D.getDeclSpec().getRepAsDecl()); 8227 8228 // Do nothing if the tag is not anonymous or already has an 8229 // associated typedef (from an earlier typedef in this decl group). 8230 if (tagFromDeclSpec->getIdentifier()) break; 8231 if (tagFromDeclSpec->getTypedefNameForAnonDecl()) break; 8232 8233 // A well-formed anonymous tag must always be a TUK_Definition. 8234 assert(tagFromDeclSpec->isThisDeclarationADefinition()); 8235 8236 // The type must match the tag exactly; no qualifiers allowed. 8237 if (!Context.hasSameType(T, Context.getTagDeclType(tagFromDeclSpec))) 8238 break; 8239 8240 // Otherwise, set this is the anon-decl typedef for the tag. 8241 tagFromDeclSpec->setTypedefNameForAnonDecl(NewTD); 8242 break; 8243 } 8244 8245 default: 8246 break; 8247 } 8248 8249 return NewTD; 8250 } 8251 8252 8253 /// \brief Check that this is a valid underlying type for an enum declaration. 8254 bool Sema::CheckEnumUnderlyingType(TypeSourceInfo *TI) { 8255 SourceLocation UnderlyingLoc = TI->getTypeLoc().getBeginLoc(); 8256 QualType T = TI->getType(); 8257 8258 if (T->isDependentType() || T->isIntegralType(Context)) 8259 return false; 8260 8261 Diag(UnderlyingLoc, diag::err_enum_invalid_underlying) << T; 8262 return true; 8263 } 8264 8265 /// Check whether this is a valid redeclaration of a previous enumeration. 8266 /// \return true if the redeclaration was invalid. 8267 bool Sema::CheckEnumRedeclaration(SourceLocation EnumLoc, bool IsScoped, 8268 QualType EnumUnderlyingTy, 8269 const EnumDecl *Prev) { 8270 bool IsFixed = !EnumUnderlyingTy.isNull(); 8271 8272 if (IsScoped != Prev->isScoped()) { 8273 Diag(EnumLoc, diag::err_enum_redeclare_scoped_mismatch) 8274 << Prev->isScoped(); 8275 Diag(Prev->getLocation(), diag::note_previous_use); 8276 return true; 8277 } 8278 8279 if (IsFixed && Prev->isFixed()) { 8280 if (!EnumUnderlyingTy->isDependentType() && 8281 !Prev->getIntegerType()->isDependentType() && 8282 !Context.hasSameUnqualifiedType(EnumUnderlyingTy, 8283 Prev->getIntegerType())) { 8284 Diag(EnumLoc, diag::err_enum_redeclare_type_mismatch) 8285 << EnumUnderlyingTy << Prev->getIntegerType(); 8286 Diag(Prev->getLocation(), diag::note_previous_use); 8287 return true; 8288 } 8289 } else if (IsFixed != Prev->isFixed()) { 8290 Diag(EnumLoc, diag::err_enum_redeclare_fixed_mismatch) 8291 << Prev->isFixed(); 8292 Diag(Prev->getLocation(), diag::note_previous_use); 8293 return true; 8294 } 8295 8296 return false; 8297 } 8298 8299 /// \brief Get diagnostic %select index for tag kind for 8300 /// redeclaration diagnostic message. 8301 /// WARNING: Indexes apply to particular diagnostics only! 8302 /// 8303 /// \returns diagnostic %select index. 8304 static unsigned getRedeclDiagFromTagKind(TagTypeKind Tag) { 8305 switch (Tag) { 8306 case TTK_Struct: return 0; 8307 case TTK_Interface: return 1; 8308 case TTK_Class: return 2; 8309 default: llvm_unreachable("Invalid tag kind for redecl diagnostic!"); 8310 } 8311 } 8312 8313 /// \brief Determine if tag kind is a class-key compatible with 8314 /// class for redeclaration (class, struct, or __interface). 8315 /// 8316 /// \returns true iff the tag kind is compatible. 8317 static bool isClassCompatTagKind(TagTypeKind Tag) 8318 { 8319 return Tag == TTK_Struct || Tag == TTK_Class || Tag == TTK_Interface; 8320 } 8321 8322 /// \brief Determine whether a tag with a given kind is acceptable 8323 /// as a redeclaration of the given tag declaration. 8324 /// 8325 /// \returns true if the new tag kind is acceptable, false otherwise. 8326 bool Sema::isAcceptableTagRedeclaration(const TagDecl *Previous, 8327 TagTypeKind NewTag, bool isDefinition, 8328 SourceLocation NewTagLoc, 8329 const IdentifierInfo &Name) { 8330 // C++ [dcl.type.elab]p3: 8331 // The class-key or enum keyword present in the 8332 // elaborated-type-specifier shall agree in kind with the 8333 // declaration to which the name in the elaborated-type-specifier 8334 // refers. This rule also applies to the form of 8335 // elaborated-type-specifier that declares a class-name or 8336 // friend class since it can be construed as referring to the 8337 // definition of the class. Thus, in any 8338 // elaborated-type-specifier, the enum keyword shall be used to 8339 // refer to an enumeration (7.2), the union class-key shall be 8340 // used to refer to a union (clause 9), and either the class or 8341 // struct class-key shall be used to refer to a class (clause 9) 8342 // declared using the class or struct class-key. 8343 TagTypeKind OldTag = Previous->getTagKind(); 8344 if (!isDefinition || !isClassCompatTagKind(NewTag)) 8345 if (OldTag == NewTag) 8346 return true; 8347 8348 if (isClassCompatTagKind(OldTag) && isClassCompatTagKind(NewTag)) { 8349 // Warn about the struct/class tag mismatch. 8350 bool isTemplate = false; 8351 if (const CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(Previous)) 8352 isTemplate = Record->getDescribedClassTemplate(); 8353 8354 if (!ActiveTemplateInstantiations.empty()) { 8355 // In a template instantiation, do not offer fix-its for tag mismatches 8356 // since they usually mess up the template instead of fixing the problem. 8357 Diag(NewTagLoc, diag::warn_struct_class_tag_mismatch) 8358 << getRedeclDiagFromTagKind(NewTag) << isTemplate << &Name 8359 << getRedeclDiagFromTagKind(OldTag); 8360 return true; 8361 } 8362 8363 if (isDefinition) { 8364 // On definitions, check previous tags and issue a fix-it for each 8365 // one that doesn't match the current tag. 8366 if (Previous->getDefinition()) { 8367 // Don't suggest fix-its for redefinitions. 8368 return true; 8369 } 8370 8371 bool previousMismatch = false; 8372 for (TagDecl::redecl_iterator I(Previous->redecls_begin()), 8373 E(Previous->redecls_end()); I != E; ++I) { 8374 if (I->getTagKind() != NewTag) { 8375 if (!previousMismatch) { 8376 previousMismatch = true; 8377 Diag(NewTagLoc, diag::warn_struct_class_previous_tag_mismatch) 8378 << getRedeclDiagFromTagKind(NewTag) << isTemplate << &Name 8379 << getRedeclDiagFromTagKind(I->getTagKind()); 8380 } 8381 Diag(I->getInnerLocStart(), diag::note_struct_class_suggestion) 8382 << getRedeclDiagFromTagKind(NewTag) 8383 << FixItHint::CreateReplacement(I->getInnerLocStart(), 8384 TypeWithKeyword::getTagTypeKindName(NewTag)); 8385 } 8386 } 8387 return true; 8388 } 8389 8390 // Check for a previous definition. If current tag and definition 8391 // are same type, do nothing. If no definition, but disagree with 8392 // with previous tag type, give a warning, but no fix-it. 8393 const TagDecl *Redecl = Previous->getDefinition() ? 8394 Previous->getDefinition() : Previous; 8395 if (Redecl->getTagKind() == NewTag) { 8396 return true; 8397 } 8398 8399 Diag(NewTagLoc, diag::warn_struct_class_tag_mismatch) 8400 << getRedeclDiagFromTagKind(NewTag) << isTemplate << &Name 8401 << getRedeclDiagFromTagKind(OldTag); 8402 Diag(Redecl->getLocation(), diag::note_previous_use); 8403 8404 // If there is a previous defintion, suggest a fix-it. 8405 if (Previous->getDefinition()) { 8406 Diag(NewTagLoc, diag::note_struct_class_suggestion) 8407 << getRedeclDiagFromTagKind(Redecl->getTagKind()) 8408 << FixItHint::CreateReplacement(SourceRange(NewTagLoc), 8409 TypeWithKeyword::getTagTypeKindName(Redecl->getTagKind())); 8410 } 8411 8412 return true; 8413 } 8414 return false; 8415 } 8416 8417 /// ActOnTag - This is invoked when we see 'struct foo' or 'struct {'. In the 8418 /// former case, Name will be non-null. In the later case, Name will be null. 8419 /// TagSpec indicates what kind of tag this is. TUK indicates whether this is a 8420 /// reference/declaration/definition of a tag. 8421 Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, 8422 SourceLocation KWLoc, CXXScopeSpec &SS, 8423 IdentifierInfo *Name, SourceLocation NameLoc, 8424 AttributeList *Attr, AccessSpecifier AS, 8425 SourceLocation ModulePrivateLoc, 8426 MultiTemplateParamsArg TemplateParameterLists, 8427 bool &OwnedDecl, bool &IsDependent, 8428 SourceLocation ScopedEnumKWLoc, 8429 bool ScopedEnumUsesClassTag, 8430 TypeResult UnderlyingType) { 8431 // If this is not a definition, it must have a name. 8432 IdentifierInfo *OrigName = Name; 8433 assert((Name != 0 || TUK == TUK_Definition) && 8434 "Nameless record must be a definition!"); 8435 assert(TemplateParameterLists.size() == 0 || TUK != TUK_Reference); 8436 8437 OwnedDecl = false; 8438 TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec); 8439 bool ScopedEnum = ScopedEnumKWLoc.isValid(); 8440 8441 // FIXME: Check explicit specializations more carefully. 8442 bool isExplicitSpecialization = false; 8443 bool Invalid = false; 8444 8445 // We only need to do this matching if we have template parameters 8446 // or a scope specifier, which also conveniently avoids this work 8447 // for non-C++ cases. 8448 if (TemplateParameterLists.size() > 0 || 8449 (SS.isNotEmpty() && TUK != TUK_Reference)) { 8450 if (TemplateParameterList *TemplateParams 8451 = MatchTemplateParametersToScopeSpecifier(KWLoc, NameLoc, SS, 8452 TemplateParameterLists.data(), 8453 TemplateParameterLists.size(), 8454 TUK == TUK_Friend, 8455 isExplicitSpecialization, 8456 Invalid)) { 8457 if (TemplateParams->size() > 0) { 8458 // This is a declaration or definition of a class template (which may 8459 // be a member of another template). 8460 8461 if (Invalid) 8462 return 0; 8463 8464 OwnedDecl = false; 8465 DeclResult Result = CheckClassTemplate(S, TagSpec, TUK, KWLoc, 8466 SS, Name, NameLoc, Attr, 8467 TemplateParams, AS, 8468 ModulePrivateLoc, 8469 TemplateParameterLists.size()-1, 8470 TemplateParameterLists.data()); 8471 return Result.get(); 8472 } else { 8473 // The "template<>" header is extraneous. 8474 Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams) 8475 << TypeWithKeyword::getTagTypeKindName(Kind) << Name; 8476 isExplicitSpecialization = true; 8477 } 8478 } 8479 } 8480 8481 // Figure out the underlying type if this a enum declaration. We need to do 8482 // this early, because it's needed to detect if this is an incompatible 8483 // redeclaration. 8484 llvm::PointerUnion<const Type*, TypeSourceInfo*> EnumUnderlying; 8485 8486 if (Kind == TTK_Enum) { 8487 if (UnderlyingType.isInvalid() || (!UnderlyingType.get() && ScopedEnum)) 8488 // No underlying type explicitly specified, or we failed to parse the 8489 // type, default to int. 8490 EnumUnderlying = Context.IntTy.getTypePtr(); 8491 else if (UnderlyingType.get()) { 8492 // C++0x 7.2p2: The type-specifier-seq of an enum-base shall name an 8493 // integral type; any cv-qualification is ignored. 8494 TypeSourceInfo *TI = 0; 8495 GetTypeFromParser(UnderlyingType.get(), &TI); 8496 EnumUnderlying = TI; 8497 8498 if (CheckEnumUnderlyingType(TI)) 8499 // Recover by falling back to int. 8500 EnumUnderlying = Context.IntTy.getTypePtr(); 8501 8502 if (DiagnoseUnexpandedParameterPack(TI->getTypeLoc().getBeginLoc(), TI, 8503 UPPC_FixedUnderlyingType)) 8504 EnumUnderlying = Context.IntTy.getTypePtr(); 8505 8506 } else if (getLangOpts().MicrosoftMode) 8507 // Microsoft enums are always of int type. 8508 EnumUnderlying = Context.IntTy.getTypePtr(); 8509 } 8510 8511 DeclContext *SearchDC = CurContext; 8512 DeclContext *DC = CurContext; 8513 bool isStdBadAlloc = false; 8514 8515 RedeclarationKind Redecl = ForRedeclaration; 8516 if (TUK == TUK_Friend || TUK == TUK_Reference) 8517 Redecl = NotForRedeclaration; 8518 8519 LookupResult Previous(*this, Name, NameLoc, LookupTagName, Redecl); 8520 8521 if (Name && SS.isNotEmpty()) { 8522 // We have a nested-name tag ('struct foo::bar'). 8523 8524 // Check for invalid 'foo::'. 8525 if (SS.isInvalid()) { 8526 Name = 0; 8527 goto CreateNewDecl; 8528 } 8529 8530 // If this is a friend or a reference to a class in a dependent 8531 // context, don't try to make a decl for it. 8532 if (TUK == TUK_Friend || TUK == TUK_Reference) { 8533 DC = computeDeclContext(SS, false); 8534 if (!DC) { 8535 IsDependent = true; 8536 return 0; 8537 } 8538 } else { 8539 DC = computeDeclContext(SS, true); 8540 if (!DC) { 8541 Diag(SS.getRange().getBegin(), diag::err_dependent_nested_name_spec) 8542 << SS.getRange(); 8543 return 0; 8544 } 8545 } 8546 8547 if (RequireCompleteDeclContext(SS, DC)) 8548 return 0; 8549 8550 SearchDC = DC; 8551 // Look-up name inside 'foo::'. 8552 LookupQualifiedName(Previous, DC); 8553 8554 if (Previous.isAmbiguous()) 8555 return 0; 8556 8557 if (Previous.empty()) { 8558 // Name lookup did not find anything. However, if the 8559 // nested-name-specifier refers to the current instantiation, 8560 // and that current instantiation has any dependent base 8561 // classes, we might find something at instantiation time: treat 8562 // this as a dependent elaborated-type-specifier. 8563 // But this only makes any sense for reference-like lookups. 8564 if (Previous.wasNotFoundInCurrentInstantiation() && 8565 (TUK == TUK_Reference || TUK == TUK_Friend)) { 8566 IsDependent = true; 8567 return 0; 8568 } 8569 8570 // A tag 'foo::bar' must already exist. 8571 Diag(NameLoc, diag::err_not_tag_in_scope) 8572 << Kind << Name << DC << SS.getRange(); 8573 Name = 0; 8574 Invalid = true; 8575 goto CreateNewDecl; 8576 } 8577 } else if (Name) { 8578 // If this is a named struct, check to see if there was a previous forward 8579 // declaration or definition. 8580 // FIXME: We're looking into outer scopes here, even when we 8581 // shouldn't be. Doing so can result in ambiguities that we 8582 // shouldn't be diagnosing. 8583 LookupName(Previous, S); 8584 8585 if (Previous.isAmbiguous() && 8586 (TUK == TUK_Definition || TUK == TUK_Declaration)) { 8587 LookupResult::Filter F = Previous.makeFilter(); 8588 while (F.hasNext()) { 8589 NamedDecl *ND = F.next(); 8590 if (ND->getDeclContext()->getRedeclContext() != SearchDC) 8591 F.erase(); 8592 } 8593 F.done(); 8594 } 8595 8596 // Note: there used to be some attempt at recovery here. 8597 if (Previous.isAmbiguous()) 8598 return 0; 8599 8600 if (!getLangOpts().CPlusPlus && TUK != TUK_Reference) { 8601 // FIXME: This makes sure that we ignore the contexts associated 8602 // with C structs, unions, and enums when looking for a matching 8603 // tag declaration or definition. See the similar lookup tweak 8604 // in Sema::LookupName; is there a better way to deal with this? 8605 while (isa<RecordDecl>(SearchDC) || isa<EnumDecl>(SearchDC)) 8606 SearchDC = SearchDC->getParent(); 8607 } 8608 } else if (S->isFunctionPrototypeScope()) { 8609 // If this is an enum declaration in function prototype scope, set its 8610 // initial context to the translation unit. 8611 // FIXME: [citation needed] 8612 SearchDC = Context.getTranslationUnitDecl(); 8613 } 8614 8615 if (Previous.isSingleResult() && 8616 Previous.getFoundDecl()->isTemplateParameter()) { 8617 // Maybe we will complain about the shadowed template parameter. 8618 DiagnoseTemplateParameterShadow(NameLoc, Previous.getFoundDecl()); 8619 // Just pretend that we didn't see the previous declaration. 8620 Previous.clear(); 8621 } 8622 8623 if (getLangOpts().CPlusPlus && Name && DC && StdNamespace && 8624 DC->Equals(getStdNamespace()) && Name->isStr("bad_alloc")) { 8625 // This is a declaration of or a reference to "std::bad_alloc". 8626 isStdBadAlloc = true; 8627 8628 if (Previous.empty() && StdBadAlloc) { 8629 // std::bad_alloc has been implicitly declared (but made invisible to 8630 // name lookup). Fill in this implicit declaration as the previous 8631 // declaration, so that the declarations get chained appropriately. 8632 Previous.addDecl(getStdBadAlloc()); 8633 } 8634 } 8635 8636 // If we didn't find a previous declaration, and this is a reference 8637 // (or friend reference), move to the correct scope. In C++, we 8638 // also need to do a redeclaration lookup there, just in case 8639 // there's a shadow friend decl. 8640 if (Name && Previous.empty() && 8641 (TUK == TUK_Reference || TUK == TUK_Friend)) { 8642 if (Invalid) goto CreateNewDecl; 8643 assert(SS.isEmpty()); 8644 8645 if (TUK == TUK_Reference) { 8646 // C++ [basic.scope.pdecl]p5: 8647 // -- for an elaborated-type-specifier of the form 8648 // 8649 // class-key identifier 8650 // 8651 // if the elaborated-type-specifier is used in the 8652 // decl-specifier-seq or parameter-declaration-clause of a 8653 // function defined in namespace scope, the identifier is 8654 // declared as a class-name in the namespace that contains 8655 // the declaration; otherwise, except as a friend 8656 // declaration, the identifier is declared in the smallest 8657 // non-class, non-function-prototype scope that contains the 8658 // declaration. 8659 // 8660 // C99 6.7.2.3p8 has a similar (but not identical!) provision for 8661 // C structs and unions. 8662 // 8663 // It is an error in C++ to declare (rather than define) an enum 8664 // type, including via an elaborated type specifier. We'll 8665 // diagnose that later; for now, declare the enum in the same 8666 // scope as we would have picked for any other tag type. 8667 // 8668 // GNU C also supports this behavior as part of its incomplete 8669 // enum types extension, while GNU C++ does not. 8670 // 8671 // Find the context where we'll be declaring the tag. 8672 // FIXME: We would like to maintain the current DeclContext as the 8673 // lexical context, 8674 while (!SearchDC->isFileContext() && !SearchDC->isFunctionOrMethod()) 8675 SearchDC = SearchDC->getParent(); 8676 8677 // Find the scope where we'll be declaring the tag. 8678 while (S->isClassScope() || 8679 (getLangOpts().CPlusPlus && 8680 S->isFunctionPrototypeScope()) || 8681 ((S->getFlags() & Scope::DeclScope) == 0) || 8682 (S->getEntity() && 8683 ((DeclContext *)S->getEntity())->isTransparentContext())) 8684 S = S->getParent(); 8685 } else { 8686 assert(TUK == TUK_Friend); 8687 // C++ [namespace.memdef]p3: 8688 // If a friend declaration in a non-local class first declares a 8689 // class or function, the friend class or function is a member of 8690 // the innermost enclosing namespace. 8691 SearchDC = SearchDC->getEnclosingNamespaceContext(); 8692 } 8693 8694 // In C++, we need to do a redeclaration lookup to properly 8695 // diagnose some problems. 8696 if (getLangOpts().CPlusPlus) { 8697 Previous.setRedeclarationKind(ForRedeclaration); 8698 LookupQualifiedName(Previous, SearchDC); 8699 } 8700 } 8701 8702 if (!Previous.empty()) { 8703 NamedDecl *PrevDecl = (*Previous.begin())->getUnderlyingDecl(); 8704 8705 // It's okay to have a tag decl in the same scope as a typedef 8706 // which hides a tag decl in the same scope. Finding this 8707 // insanity with a redeclaration lookup can only actually happen 8708 // in C++. 8709 // 8710 // This is also okay for elaborated-type-specifiers, which is 8711 // technically forbidden by the current standard but which is 8712 // okay according to the likely resolution of an open issue; 8713 // see http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#407 8714 if (getLangOpts().CPlusPlus) { 8715 if (TypedefNameDecl *TD = dyn_cast<TypedefNameDecl>(PrevDecl)) { 8716 if (const TagType *TT = TD->getUnderlyingType()->getAs<TagType>()) { 8717 TagDecl *Tag = TT->getDecl(); 8718 if (Tag->getDeclName() == Name && 8719 Tag->getDeclContext()->getRedeclContext() 8720 ->Equals(TD->getDeclContext()->getRedeclContext())) { 8721 PrevDecl = Tag; 8722 Previous.clear(); 8723 Previous.addDecl(Tag); 8724 Previous.resolveKind(); 8725 } 8726 } 8727 } 8728 } 8729 8730 if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) { 8731 // If this is a use of a previous tag, or if the tag is already declared 8732 // in the same scope (so that the definition/declaration completes or 8733 // rementions the tag), reuse the decl. 8734 if (TUK == TUK_Reference || TUK == TUK_Friend || 8735 isDeclInScope(PrevDecl, SearchDC, S, isExplicitSpecialization)) { 8736 // Make sure that this wasn't declared as an enum and now used as a 8737 // struct or something similar. 8738 if (!isAcceptableTagRedeclaration(PrevTagDecl, Kind, 8739 TUK == TUK_Definition, KWLoc, 8740 *Name)) { 8741 bool SafeToContinue 8742 = (PrevTagDecl->getTagKind() != TTK_Enum && 8743 Kind != TTK_Enum); 8744 if (SafeToContinue) 8745 Diag(KWLoc, diag::err_use_with_wrong_tag) 8746 << Name 8747 << FixItHint::CreateReplacement(SourceRange(KWLoc), 8748 PrevTagDecl->getKindName()); 8749 else 8750 Diag(KWLoc, diag::err_use_with_wrong_tag) << Name; 8751 Diag(PrevTagDecl->getLocation(), diag::note_previous_use); 8752 8753 if (SafeToContinue) 8754 Kind = PrevTagDecl->getTagKind(); 8755 else { 8756 // Recover by making this an anonymous redefinition. 8757 Name = 0; 8758 Previous.clear(); 8759 Invalid = true; 8760 } 8761 } 8762 8763 if (Kind == TTK_Enum && PrevTagDecl->getTagKind() == TTK_Enum) { 8764 const EnumDecl *PrevEnum = cast<EnumDecl>(PrevTagDecl); 8765 8766 // If this is an elaborated-type-specifier for a scoped enumeration, 8767 // the 'class' keyword is not necessary and not permitted. 8768 if (TUK == TUK_Reference || TUK == TUK_Friend) { 8769 if (ScopedEnum) 8770 Diag(ScopedEnumKWLoc, diag::err_enum_class_reference) 8771 << PrevEnum->isScoped() 8772 << FixItHint::CreateRemoval(ScopedEnumKWLoc); 8773 return PrevTagDecl; 8774 } 8775 8776 QualType EnumUnderlyingTy; 8777 if (TypeSourceInfo *TI = EnumUnderlying.dyn_cast<TypeSourceInfo*>()) 8778 EnumUnderlyingTy = TI->getType(); 8779 else if (const Type *T = EnumUnderlying.dyn_cast<const Type*>()) 8780 EnumUnderlyingTy = QualType(T, 0); 8781 8782 // All conflicts with previous declarations are recovered by 8783 // returning the previous declaration, unless this is a definition, 8784 // in which case we want the caller to bail out. 8785 if (CheckEnumRedeclaration(NameLoc.isValid() ? NameLoc : KWLoc, 8786 ScopedEnum, EnumUnderlyingTy, PrevEnum)) 8787 return TUK == TUK_Declaration ? PrevTagDecl : 0; 8788 } 8789 8790 if (!Invalid) { 8791 // If this is a use, just return the declaration we found. 8792 8793 // FIXME: In the future, return a variant or some other clue 8794 // for the consumer of this Decl to know it doesn't own it. 8795 // For our current ASTs this shouldn't be a problem, but will 8796 // need to be changed with DeclGroups. 8797 if ((TUK == TUK_Reference && (!PrevTagDecl->getFriendObjectKind() || 8798 getLangOpts().MicrosoftExt)) || TUK == TUK_Friend) 8799 return PrevTagDecl; 8800 8801 // Diagnose attempts to redefine a tag. 8802 if (TUK == TUK_Definition) { 8803 if (TagDecl *Def = PrevTagDecl->getDefinition()) { 8804 // If we're defining a specialization and the previous definition 8805 // is from an implicit instantiation, don't emit an error 8806 // here; we'll catch this in the general case below. 8807 bool IsExplicitSpecializationAfterInstantiation = false; 8808 if (isExplicitSpecialization) { 8809 if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(Def)) 8810 IsExplicitSpecializationAfterInstantiation = 8811 RD->getTemplateSpecializationKind() != 8812 TSK_ExplicitSpecialization; 8813 else if (EnumDecl *ED = dyn_cast<EnumDecl>(Def)) 8814 IsExplicitSpecializationAfterInstantiation = 8815 ED->getTemplateSpecializationKind() != 8816 TSK_ExplicitSpecialization; 8817 } 8818 8819 if (!IsExplicitSpecializationAfterInstantiation) { 8820 // A redeclaration in function prototype scope in C isn't 8821 // visible elsewhere, so merely issue a warning. 8822 if (!getLangOpts().CPlusPlus && S->containedInPrototypeScope()) 8823 Diag(NameLoc, diag::warn_redefinition_in_param_list) << Name; 8824 else 8825 Diag(NameLoc, diag::err_redefinition) << Name; 8826 Diag(Def->getLocation(), diag::note_previous_definition); 8827 // If this is a redefinition, recover by making this 8828 // struct be anonymous, which will make any later 8829 // references get the previous definition. 8830 Name = 0; 8831 Previous.clear(); 8832 Invalid = true; 8833 } 8834 } else { 8835 // If the type is currently being defined, complain 8836 // about a nested redefinition. 8837 const TagType *Tag 8838 = cast<TagType>(Context.getTagDeclType(PrevTagDecl)); 8839 if (Tag->isBeingDefined()) { 8840 Diag(NameLoc, diag::err_nested_redefinition) << Name; 8841 Diag(PrevTagDecl->getLocation(), 8842 diag::note_previous_definition); 8843 Name = 0; 8844 Previous.clear(); 8845 Invalid = true; 8846 } 8847 } 8848 8849 // Okay, this is definition of a previously declared or referenced 8850 // tag PrevDecl. We're going to create a new Decl for it. 8851 } 8852 } 8853 // If we get here we have (another) forward declaration or we 8854 // have a definition. Just create a new decl. 8855 8856 } else { 8857 // If we get here, this is a definition of a new tag type in a nested 8858 // scope, e.g. "struct foo; void bar() { struct foo; }", just create a 8859 // new decl/type. We set PrevDecl to NULL so that the entities 8860 // have distinct types. 8861 Previous.clear(); 8862 } 8863 // If we get here, we're going to create a new Decl. If PrevDecl 8864 // is non-NULL, it's a definition of the tag declared by 8865 // PrevDecl. If it's NULL, we have a new definition. 8866 8867 8868 // Otherwise, PrevDecl is not a tag, but was found with tag 8869 // lookup. This is only actually possible in C++, where a few 8870 // things like templates still live in the tag namespace. 8871 } else { 8872 // Use a better diagnostic if an elaborated-type-specifier 8873 // found the wrong kind of type on the first 8874 // (non-redeclaration) lookup. 8875 if ((TUK == TUK_Reference || TUK == TUK_Friend) && 8876 !Previous.isForRedeclaration()) { 8877 unsigned Kind = 0; 8878 if (isa<TypedefDecl>(PrevDecl)) Kind = 1; 8879 else if (isa<TypeAliasDecl>(PrevDecl)) Kind = 2; 8880 else if (isa<ClassTemplateDecl>(PrevDecl)) Kind = 3; 8881 Diag(NameLoc, diag::err_tag_reference_non_tag) << Kind; 8882 Diag(PrevDecl->getLocation(), diag::note_declared_at); 8883 Invalid = true; 8884 8885 // Otherwise, only diagnose if the declaration is in scope. 8886 } else if (!isDeclInScope(PrevDecl, SearchDC, S, 8887 isExplicitSpecialization)) { 8888 // do nothing 8889 8890 // Diagnose implicit declarations introduced by elaborated types. 8891 } else if (TUK == TUK_Reference || TUK == TUK_Friend) { 8892 unsigned Kind = 0; 8893 if (isa<TypedefDecl>(PrevDecl)) Kind = 1; 8894 else if (isa<TypeAliasDecl>(PrevDecl)) Kind = 2; 8895 else if (isa<ClassTemplateDecl>(PrevDecl)) Kind = 3; 8896 Diag(NameLoc, diag::err_tag_reference_conflict) << Kind; 8897 Diag(PrevDecl->getLocation(), diag::note_previous_decl) << PrevDecl; 8898 Invalid = true; 8899 8900 // Otherwise it's a declaration. Call out a particularly common 8901 // case here. 8902 } else if (TypedefNameDecl *TND = dyn_cast<TypedefNameDecl>(PrevDecl)) { 8903 unsigned Kind = 0; 8904 if (isa<TypeAliasDecl>(PrevDecl)) Kind = 1; 8905 Diag(NameLoc, diag::err_tag_definition_of_typedef) 8906 << Name << Kind << TND->getUnderlyingType(); 8907 Diag(PrevDecl->getLocation(), diag::note_previous_decl) << PrevDecl; 8908 Invalid = true; 8909 8910 // Otherwise, diagnose. 8911 } else { 8912 // The tag name clashes with something else in the target scope, 8913 // issue an error and recover by making this tag be anonymous. 8914 Diag(NameLoc, diag::err_redefinition_different_kind) << Name; 8915 Diag(PrevDecl->getLocation(), diag::note_previous_definition); 8916 Name = 0; 8917 Invalid = true; 8918 } 8919 8920 // The existing declaration isn't relevant to us; we're in a 8921 // new scope, so clear out the previous declaration. 8922 Previous.clear(); 8923 } 8924 } 8925 8926 CreateNewDecl: 8927 8928 TagDecl *PrevDecl = 0; 8929 if (Previous.isSingleResult()) 8930 PrevDecl = cast<TagDecl>(Previous.getFoundDecl()); 8931 8932 // If there is an identifier, use the location of the identifier as the 8933 // location of the decl, otherwise use the location of the struct/union 8934 // keyword. 8935 SourceLocation Loc = NameLoc.isValid() ? NameLoc : KWLoc; 8936 8937 // Otherwise, create a new declaration. If there is a previous 8938 // declaration of the same entity, the two will be linked via 8939 // PrevDecl. 8940 TagDecl *New; 8941 8942 bool IsForwardReference = false; 8943 if (Kind == TTK_Enum) { 8944 // FIXME: Tag decls should be chained to any simultaneous vardecls, e.g.: 8945 // enum X { A, B, C } D; D should chain to X. 8946 New = EnumDecl::Create(Context, SearchDC, KWLoc, Loc, Name, 8947 cast_or_null<EnumDecl>(PrevDecl), ScopedEnum, 8948 ScopedEnumUsesClassTag, !EnumUnderlying.isNull()); 8949 // If this is an undefined enum, warn. 8950 if (TUK != TUK_Definition && !Invalid) { 8951 TagDecl *Def; 8952 if (getLangOpts().CPlusPlus0x && cast<EnumDecl>(New)->isFixed()) { 8953 // C++0x: 7.2p2: opaque-enum-declaration. 8954 // Conflicts are diagnosed above. Do nothing. 8955 } 8956 else if (PrevDecl && (Def = cast<EnumDecl>(PrevDecl)->getDefinition())) { 8957 Diag(Loc, diag::ext_forward_ref_enum_def) 8958 << New; 8959 Diag(Def->getLocation(), diag::note_previous_definition); 8960 } else { 8961 unsigned DiagID = diag::ext_forward_ref_enum; 8962 if (getLangOpts().MicrosoftMode) 8963 DiagID = diag::ext_ms_forward_ref_enum; 8964 else if (getLangOpts().CPlusPlus) 8965 DiagID = diag::err_forward_ref_enum; 8966 Diag(Loc, DiagID); 8967 8968 // If this is a forward-declared reference to an enumeration, make a 8969 // note of it; we won't actually be introducing the declaration into 8970 // the declaration context. 8971 if (TUK == TUK_Reference) 8972 IsForwardReference = true; 8973 } 8974 } 8975 8976 if (EnumUnderlying) { 8977 EnumDecl *ED = cast<EnumDecl>(New); 8978 if (TypeSourceInfo *TI = EnumUnderlying.dyn_cast<TypeSourceInfo*>()) 8979 ED->setIntegerTypeSourceInfo(TI); 8980 else 8981 ED->setIntegerType(QualType(EnumUnderlying.get<const Type*>(), 0)); 8982 ED->setPromotionType(ED->getIntegerType()); 8983 } 8984 8985 } else { 8986 // struct/union/class 8987 8988 // FIXME: Tag decls should be chained to any simultaneous vardecls, e.g.: 8989 // struct X { int A; } D; D should chain to X. 8990 if (getLangOpts().CPlusPlus) { 8991 // FIXME: Look for a way to use RecordDecl for simple structs. 8992 New = CXXRecordDecl::Create(Context, Kind, SearchDC, KWLoc, Loc, Name, 8993 cast_or_null<CXXRecordDecl>(PrevDecl)); 8994 8995 if (isStdBadAlloc && (!StdBadAlloc || getStdBadAlloc()->isImplicit())) 8996 StdBadAlloc = cast<CXXRecordDecl>(New); 8997 } else 8998 New = RecordDecl::Create(Context, Kind, SearchDC, KWLoc, Loc, Name, 8999 cast_or_null<RecordDecl>(PrevDecl)); 9000 } 9001 9002 // Maybe add qualifier info. 9003 if (SS.isNotEmpty()) { 9004 if (SS.isSet()) { 9005 // If this is either a declaration or a definition, check the 9006 // nested-name-specifier against the current context. We don't do this 9007 // for explicit specializations, because they have similar checking 9008 // (with more specific diagnostics) in the call to 9009 // CheckMemberSpecialization, below. 9010 if (!isExplicitSpecialization && 9011 (TUK == TUK_Definition || TUK == TUK_Declaration) && 9012 diagnoseQualifiedDeclaration(SS, DC, OrigName, NameLoc)) 9013 Invalid = true; 9014 9015 New->setQualifierInfo(SS.getWithLocInContext(Context)); 9016 if (TemplateParameterLists.size() > 0) { 9017 New->setTemplateParameterListsInfo(Context, 9018 TemplateParameterLists.size(), 9019 TemplateParameterLists.data()); 9020 } 9021 } 9022 else 9023 Invalid = true; 9024 } 9025 9026 if (RecordDecl *RD = dyn_cast<RecordDecl>(New)) { 9027 // Add alignment attributes if necessary; these attributes are checked when 9028 // the ASTContext lays out the structure. 9029 // 9030 // It is important for implementing the correct semantics that this 9031 // happen here (in act on tag decl). The #pragma pack stack is 9032 // maintained as a result of parser callbacks which can occur at 9033 // many points during the parsing of a struct declaration (because 9034 // the #pragma tokens are effectively skipped over during the 9035 // parsing of the struct). 9036 if (TUK == TUK_Definition) { 9037 AddAlignmentAttributesForRecord(RD); 9038 AddMsStructLayoutForRecord(RD); 9039 } 9040 } 9041 9042 if (ModulePrivateLoc.isValid()) { 9043 if (isExplicitSpecialization) 9044 Diag(New->getLocation(), diag::err_module_private_specialization) 9045 << 2 9046 << FixItHint::CreateRemoval(ModulePrivateLoc); 9047 // __module_private__ does not apply to local classes. However, we only 9048 // diagnose this as an error when the declaration specifiers are 9049 // freestanding. Here, we just ignore the __module_private__. 9050 else if (!SearchDC->isFunctionOrMethod()) 9051 New->setModulePrivate(); 9052 } 9053 9054 // If this is a specialization of a member class (of a class template), 9055 // check the specialization. 9056 if (isExplicitSpecialization && CheckMemberSpecialization(New, Previous)) 9057 Invalid = true; 9058 9059 if (Invalid) 9060 New->setInvalidDecl(); 9061 9062 if (Attr) 9063 ProcessDeclAttributeList(S, New, Attr); 9064 9065 // If we're declaring or defining a tag in function prototype scope 9066 // in C, note that this type can only be used within the function. 9067 if (Name && S->isFunctionPrototypeScope() && !getLangOpts().CPlusPlus) 9068 Diag(Loc, diag::warn_decl_in_param_list) << Context.getTagDeclType(New); 9069 9070 // Set the lexical context. If the tag has a C++ scope specifier, the 9071 // lexical context will be different from the semantic context. 9072 New->setLexicalDeclContext(CurContext); 9073 9074 // Mark this as a friend decl if applicable. 9075 // In Microsoft mode, a friend declaration also acts as a forward 9076 // declaration so we always pass true to setObjectOfFriendDecl to make 9077 // the tag name visible. 9078 if (TUK == TUK_Friend) 9079 New->setObjectOfFriendDecl(/* PreviouslyDeclared = */ !Previous.empty() || 9080 getLangOpts().MicrosoftExt); 9081 9082 // Set the access specifier. 9083 if (!Invalid && SearchDC->isRecord()) 9084 SetMemberAccessSpecifier(New, PrevDecl, AS); 9085 9086 if (TUK == TUK_Definition) 9087 New->startDefinition(); 9088 9089 // If this has an identifier, add it to the scope stack. 9090 if (TUK == TUK_Friend) { 9091 // We might be replacing an existing declaration in the lookup tables; 9092 // if so, borrow its access specifier. 9093 if (PrevDecl) 9094 New->setAccess(PrevDecl->getAccess()); 9095 9096 DeclContext *DC = New->getDeclContext()->getRedeclContext(); 9097 DC->makeDeclVisibleInContext(New); 9098 if (Name) // can be null along some error paths 9099 if (Scope *EnclosingScope = getScopeForDeclContext(S, DC)) 9100 PushOnScopeChains(New, EnclosingScope, /* AddToContext = */ false); 9101 } else if (Name) { 9102 S = getNonFieldDeclScope(S); 9103 PushOnScopeChains(New, S, !IsForwardReference); 9104 if (IsForwardReference) 9105 SearchDC->makeDeclVisibleInContext(New); 9106 9107 } else { 9108 CurContext->addDecl(New); 9109 } 9110 9111 // If this is the C FILE type, notify the AST context. 9112 if (IdentifierInfo *II = New->getIdentifier()) 9113 if (!New->isInvalidDecl() && 9114 New->getDeclContext()->getRedeclContext()->isTranslationUnit() && 9115 II->isStr("FILE")) 9116 Context.setFILEDecl(New); 9117 9118 // If we were in function prototype scope (and not in C++ mode), add this 9119 // tag to the list of decls to inject into the function definition scope. 9120 if (S->isFunctionPrototypeScope() && !getLangOpts().CPlusPlus && 9121 InFunctionDeclarator && Name) 9122 DeclsInPrototypeScope.push_back(New); 9123 9124 if (PrevDecl) 9125 mergeDeclAttributes(New, PrevDecl); 9126 9127 // If there's a #pragma GCC visibility in scope, set the visibility of this 9128 // record. 9129 AddPushedVisibilityAttribute(New); 9130 9131 OwnedDecl = true; 9132 return New; 9133 } 9134 9135 void Sema::ActOnTagStartDefinition(Scope *S, Decl *TagD) { 9136 AdjustDeclIfTemplate(TagD); 9137 TagDecl *Tag = cast<TagDecl>(TagD); 9138 9139 // Enter the tag context. 9140 PushDeclContext(S, Tag); 9141 9142 ActOnDocumentableDecl(TagD); 9143 9144 // If there's a #pragma GCC visibility in scope, set the visibility of this 9145 // record. 9146 AddPushedVisibilityAttribute(Tag); 9147 } 9148 9149 Decl *Sema::ActOnObjCContainerStartDefinition(Decl *IDecl) { 9150 assert(isa<ObjCContainerDecl>(IDecl) && 9151 "ActOnObjCContainerStartDefinition - Not ObjCContainerDecl"); 9152 DeclContext *OCD = cast<DeclContext>(IDecl); 9153 assert(getContainingDC(OCD) == CurContext && 9154 "The next DeclContext should be lexically contained in the current one."); 9155 CurContext = OCD; 9156 return IDecl; 9157 } 9158 9159 void Sema::ActOnStartCXXMemberDeclarations(Scope *S, Decl *TagD, 9160 SourceLocation FinalLoc, 9161 SourceLocation LBraceLoc) { 9162 AdjustDeclIfTemplate(TagD); 9163 CXXRecordDecl *Record = cast<CXXRecordDecl>(TagD); 9164 9165 FieldCollector->StartClass(); 9166 9167 if (!Record->getIdentifier()) 9168 return; 9169 9170 if (FinalLoc.isValid()) 9171 Record->addAttr(new (Context) FinalAttr(FinalLoc, Context)); 9172 9173 // C++ [class]p2: 9174 // [...] The class-name is also inserted into the scope of the 9175 // class itself; this is known as the injected-class-name. For 9176 // purposes of access checking, the injected-class-name is treated 9177 // as if it were a public member name. 9178 CXXRecordDecl *InjectedClassName 9179 = CXXRecordDecl::Create(Context, Record->getTagKind(), CurContext, 9180 Record->getLocStart(), Record->getLocation(), 9181 Record->getIdentifier(), 9182 /*PrevDecl=*/0, 9183 /*DelayTypeCreation=*/true); 9184 Context.getTypeDeclType(InjectedClassName, Record); 9185 InjectedClassName->setImplicit(); 9186 InjectedClassName->setAccess(AS_public); 9187 if (ClassTemplateDecl *Template = Record->getDescribedClassTemplate()) 9188 InjectedClassName->setDescribedClassTemplate(Template); 9189 PushOnScopeChains(InjectedClassName, S); 9190 assert(InjectedClassName->isInjectedClassName() && 9191 "Broken injected-class-name"); 9192 } 9193 9194 void Sema::ActOnTagFinishDefinition(Scope *S, Decl *TagD, 9195 SourceLocation RBraceLoc) { 9196 AdjustDeclIfTemplate(TagD); 9197 TagDecl *Tag = cast<TagDecl>(TagD); 9198 Tag->setRBraceLoc(RBraceLoc); 9199 9200 // Make sure we "complete" the definition even it is invalid. 9201 if (Tag->isBeingDefined()) { 9202 assert(Tag->isInvalidDecl() && "We should already have completed it"); 9203 if (RecordDecl *RD = dyn_cast<RecordDecl>(Tag)) 9204 RD->completeDefinition(); 9205 } 9206 9207 if (isa<CXXRecordDecl>(Tag)) 9208 FieldCollector->FinishClass(); 9209 9210 // Exit this scope of this tag's definition. 9211 PopDeclContext(); 9212 9213 // Notify the consumer that we've defined a tag. 9214 Consumer.HandleTagDeclDefinition(Tag); 9215 } 9216 9217 void Sema::ActOnObjCContainerFinishDefinition() { 9218 // Exit this scope of this interface definition. 9219 PopDeclContext(); 9220 } 9221 9222 void Sema::ActOnObjCTemporaryExitContainerContext(DeclContext *DC) { 9223 assert(DC == CurContext && "Mismatch of container contexts"); 9224 OriginalLexicalContext = DC; 9225 ActOnObjCContainerFinishDefinition(); 9226 } 9227 9228 void Sema::ActOnObjCReenterContainerContext(DeclContext *DC) { 9229 ActOnObjCContainerStartDefinition(cast<Decl>(DC)); 9230 OriginalLexicalContext = 0; 9231 } 9232 9233 void Sema::ActOnTagDefinitionError(Scope *S, Decl *TagD) { 9234 AdjustDeclIfTemplate(TagD); 9235 TagDecl *Tag = cast<TagDecl>(TagD); 9236 Tag->setInvalidDecl(); 9237 9238 // Make sure we "complete" the definition even it is invalid. 9239 if (Tag->isBeingDefined()) { 9240 if (RecordDecl *RD = dyn_cast<RecordDecl>(Tag)) 9241 RD->completeDefinition(); 9242 } 9243 9244 // We're undoing ActOnTagStartDefinition here, not 9245 // ActOnStartCXXMemberDeclarations, so we don't have to mess with 9246 // the FieldCollector. 9247 9248 PopDeclContext(); 9249 } 9250 9251 // Note that FieldName may be null for anonymous bitfields. 9252 ExprResult Sema::VerifyBitField(SourceLocation FieldLoc, 9253 IdentifierInfo *FieldName, 9254 QualType FieldTy, Expr *BitWidth, 9255 bool *ZeroWidth) { 9256 // Default to true; that shouldn't confuse checks for emptiness 9257 if (ZeroWidth) 9258 *ZeroWidth = true; 9259 9260 // C99 6.7.2.1p4 - verify the field type. 9261 // C++ 9.6p3: A bit-field shall have integral or enumeration type. 9262 if (!FieldTy->isDependentType() && !FieldTy->isIntegralOrEnumerationType()) { 9263 // Handle incomplete types with specific error. 9264 if (RequireCompleteType(FieldLoc, FieldTy, diag::err_field_incomplete)) 9265 return ExprError(); 9266 if (FieldName) 9267 return Diag(FieldLoc, diag::err_not_integral_type_bitfield) 9268 << FieldName << FieldTy << BitWidth->getSourceRange(); 9269 return Diag(FieldLoc, diag::err_not_integral_type_anon_bitfield) 9270 << FieldTy << BitWidth->getSourceRange(); 9271 } else if (DiagnoseUnexpandedParameterPack(const_cast<Expr *>(BitWidth), 9272 UPPC_BitFieldWidth)) 9273 return ExprError(); 9274 9275 // If the bit-width is type- or value-dependent, don't try to check 9276 // it now. 9277 if (BitWidth->isValueDependent() || BitWidth->isTypeDependent()) 9278 return Owned(BitWidth); 9279 9280 llvm::APSInt Value; 9281 ExprResult ICE = VerifyIntegerConstantExpression(BitWidth, &Value); 9282 if (ICE.isInvalid()) 9283 return ICE; 9284 BitWidth = ICE.take(); 9285 9286 if (Value != 0 && ZeroWidth) 9287 *ZeroWidth = false; 9288 9289 // Zero-width bitfield is ok for anonymous field. 9290 if (Value == 0 && FieldName) 9291 return Diag(FieldLoc, diag::err_bitfield_has_zero_width) << FieldName; 9292 9293 if (Value.isSigned() && Value.isNegative()) { 9294 if (FieldName) 9295 return Diag(FieldLoc, diag::err_bitfield_has_negative_width) 9296 << FieldName << Value.toString(10); 9297 return Diag(FieldLoc, diag::err_anon_bitfield_has_negative_width) 9298 << Value.toString(10); 9299 } 9300 9301 if (!FieldTy->isDependentType()) { 9302 uint64_t TypeSize = Context.getTypeSize(FieldTy); 9303 if (Value.getZExtValue() > TypeSize) { 9304 if (!getLangOpts().CPlusPlus) { 9305 if (FieldName) 9306 return Diag(FieldLoc, diag::err_bitfield_width_exceeds_type_size) 9307 << FieldName << (unsigned)Value.getZExtValue() 9308 << (unsigned)TypeSize; 9309 9310 return Diag(FieldLoc, diag::err_anon_bitfield_width_exceeds_type_size) 9311 << (unsigned)Value.getZExtValue() << (unsigned)TypeSize; 9312 } 9313 9314 if (FieldName) 9315 Diag(FieldLoc, diag::warn_bitfield_width_exceeds_type_size) 9316 << FieldName << (unsigned)Value.getZExtValue() 9317 << (unsigned)TypeSize; 9318 else 9319 Diag(FieldLoc, diag::warn_anon_bitfield_width_exceeds_type_size) 9320 << (unsigned)Value.getZExtValue() << (unsigned)TypeSize; 9321 } 9322 } 9323 9324 return Owned(BitWidth); 9325 } 9326 9327 /// ActOnField - Each field of a C struct/union is passed into this in order 9328 /// to create a FieldDecl object for it. 9329 Decl *Sema::ActOnField(Scope *S, Decl *TagD, SourceLocation DeclStart, 9330 Declarator &D, Expr *BitfieldWidth) { 9331 FieldDecl *Res = HandleField(S, cast_or_null<RecordDecl>(TagD), 9332 DeclStart, D, static_cast<Expr*>(BitfieldWidth), 9333 /*InitStyle=*/ICIS_NoInit, AS_public); 9334 return Res; 9335 } 9336 9337 /// HandleField - Analyze a field of a C struct or a C++ data member. 9338 /// 9339 FieldDecl *Sema::HandleField(Scope *S, RecordDecl *Record, 9340 SourceLocation DeclStart, 9341 Declarator &D, Expr *BitWidth, 9342 InClassInitStyle InitStyle, 9343 AccessSpecifier AS) { 9344 IdentifierInfo *II = D.getIdentifier(); 9345 SourceLocation Loc = DeclStart; 9346 if (II) Loc = D.getIdentifierLoc(); 9347 9348 TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S); 9349 QualType T = TInfo->getType(); 9350 if (getLangOpts().CPlusPlus) { 9351 CheckExtraCXXDefaultArguments(D); 9352 9353 if (DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo, 9354 UPPC_DataMemberType)) { 9355 D.setInvalidType(); 9356 T = Context.IntTy; 9357 TInfo = Context.getTrivialTypeSourceInfo(T, Loc); 9358 } 9359 } 9360 9361 DiagnoseFunctionSpecifiers(D); 9362 9363 if (D.getDeclSpec().isThreadSpecified()) 9364 Diag(D.getDeclSpec().getThreadSpecLoc(), diag::err_invalid_thread); 9365 if (D.getDeclSpec().isConstexprSpecified()) 9366 Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_invalid_constexpr) 9367 << 2; 9368 9369 // Check to see if this name was declared as a member previously 9370 NamedDecl *PrevDecl = 0; 9371 LookupResult Previous(*this, II, Loc, LookupMemberName, ForRedeclaration); 9372 LookupName(Previous, S); 9373 switch (Previous.getResultKind()) { 9374 case LookupResult::Found: 9375 case LookupResult::FoundUnresolvedValue: 9376 PrevDecl = Previous.getAsSingle<NamedDecl>(); 9377 break; 9378 9379 case LookupResult::FoundOverloaded: 9380 PrevDecl = Previous.getRepresentativeDecl(); 9381 break; 9382 9383 case LookupResult::NotFound: 9384 case LookupResult::NotFoundInCurrentInstantiation: 9385 case LookupResult::Ambiguous: 9386 break; 9387 } 9388 Previous.suppressDiagnostics(); 9389 9390 if (PrevDecl && PrevDecl->isTemplateParameter()) { 9391 // Maybe we will complain about the shadowed template parameter. 9392 DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl); 9393 // Just pretend that we didn't see the previous declaration. 9394 PrevDecl = 0; 9395 } 9396 9397 if (PrevDecl && !isDeclInScope(PrevDecl, Record, S)) 9398 PrevDecl = 0; 9399 9400 bool Mutable 9401 = (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_mutable); 9402 SourceLocation TSSL = D.getLocStart(); 9403 FieldDecl *NewFD 9404 = CheckFieldDecl(II, T, TInfo, Record, Loc, Mutable, BitWidth, InitStyle, 9405 TSSL, AS, PrevDecl, &D); 9406 9407 if (NewFD->isInvalidDecl()) 9408 Record->setInvalidDecl(); 9409 9410 if (D.getDeclSpec().isModulePrivateSpecified()) 9411 NewFD->setModulePrivate(); 9412 9413 if (NewFD->isInvalidDecl() && PrevDecl) { 9414 // Don't introduce NewFD into scope; there's already something 9415 // with the same name in the same scope. 9416 } else if (II) { 9417 PushOnScopeChains(NewFD, S); 9418 } else 9419 Record->addDecl(NewFD); 9420 9421 return NewFD; 9422 } 9423 9424 /// \brief Build a new FieldDecl and check its well-formedness. 9425 /// 9426 /// This routine builds a new FieldDecl given the fields name, type, 9427 /// record, etc. \p PrevDecl should refer to any previous declaration 9428 /// with the same name and in the same scope as the field to be 9429 /// created. 9430 /// 9431 /// \returns a new FieldDecl. 9432 /// 9433 /// \todo The Declarator argument is a hack. It will be removed once 9434 FieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T, 9435 TypeSourceInfo *TInfo, 9436 RecordDecl *Record, SourceLocation Loc, 9437 bool Mutable, Expr *BitWidth, 9438 InClassInitStyle InitStyle, 9439 SourceLocation TSSL, 9440 AccessSpecifier AS, NamedDecl *PrevDecl, 9441 Declarator *D) { 9442 IdentifierInfo *II = Name.getAsIdentifierInfo(); 9443 bool InvalidDecl = false; 9444 if (D) InvalidDecl = D->isInvalidType(); 9445 9446 // If we receive a broken type, recover by assuming 'int' and 9447 // marking this declaration as invalid. 9448 if (T.isNull()) { 9449 InvalidDecl = true; 9450 T = Context.IntTy; 9451 } 9452 9453 QualType EltTy = Context.getBaseElementType(T); 9454 if (!EltTy->isDependentType()) { 9455 if (RequireCompleteType(Loc, EltTy, diag::err_field_incomplete)) { 9456 // Fields of incomplete type force their record to be invalid. 9457 Record->setInvalidDecl(); 9458 InvalidDecl = true; 9459 } else { 9460 NamedDecl *Def; 9461 EltTy->isIncompleteType(&Def); 9462 if (Def && Def->isInvalidDecl()) { 9463 Record->setInvalidDecl(); 9464 InvalidDecl = true; 9465 } 9466 } 9467 } 9468 9469 // C99 6.7.2.1p8: A member of a structure or union may have any type other 9470 // than a variably modified type. 9471 if (!InvalidDecl && T->isVariablyModifiedType()) { 9472 bool SizeIsNegative; 9473 llvm::APSInt Oversized; 9474 QualType FixedTy = TryToFixInvalidVariablyModifiedType(T, Context, 9475 SizeIsNegative, 9476 Oversized); 9477 if (!FixedTy.isNull()) { 9478 Diag(Loc, diag::warn_illegal_constant_array_size); 9479 T = FixedTy; 9480 } else { 9481 if (SizeIsNegative) 9482 Diag(Loc, diag::err_typecheck_negative_array_size); 9483 else if (Oversized.getBoolValue()) 9484 Diag(Loc, diag::err_array_too_large) 9485 << Oversized.toString(10); 9486 else 9487 Diag(Loc, diag::err_typecheck_field_variable_size); 9488 InvalidDecl = true; 9489 } 9490 } 9491 9492 // Fields can not have abstract class types 9493 if (!InvalidDecl && RequireNonAbstractType(Loc, T, 9494 diag::err_abstract_type_in_decl, 9495 AbstractFieldType)) 9496 InvalidDecl = true; 9497 9498 bool ZeroWidth = false; 9499 // If this is declared as a bit-field, check the bit-field. 9500 if (!InvalidDecl && BitWidth) { 9501 BitWidth = VerifyBitField(Loc, II, T, BitWidth, &ZeroWidth).take(); 9502 if (!BitWidth) { 9503 InvalidDecl = true; 9504 BitWidth = 0; 9505 ZeroWidth = false; 9506 } 9507 } 9508 9509 // Check that 'mutable' is consistent with the type of the declaration. 9510 if (!InvalidDecl && Mutable) { 9511 unsigned DiagID = 0; 9512 if (T->isReferenceType()) 9513 DiagID = diag::err_mutable_reference; 9514 else if (T.isConstQualified()) 9515 DiagID = diag::err_mutable_const; 9516 9517 if (DiagID) { 9518 SourceLocation ErrLoc = Loc; 9519 if (D && D->getDeclSpec().getStorageClassSpecLoc().isValid()) 9520 ErrLoc = D->getDeclSpec().getStorageClassSpecLoc(); 9521 Diag(ErrLoc, DiagID); 9522 Mutable = false; 9523 InvalidDecl = true; 9524 } 9525 } 9526 9527 FieldDecl *NewFD = FieldDecl::Create(Context, Record, TSSL, Loc, II, T, TInfo, 9528 BitWidth, Mutable, InitStyle); 9529 if (InvalidDecl) 9530 NewFD->setInvalidDecl(); 9531 9532 if (PrevDecl && !isa<TagDecl>(PrevDecl)) { 9533 Diag(Loc, diag::err_duplicate_member) << II; 9534 Diag(PrevDecl->getLocation(), diag::note_previous_declaration); 9535 NewFD->setInvalidDecl(); 9536 } 9537 9538 if (!InvalidDecl && getLangOpts().CPlusPlus) { 9539 if (Record->isUnion()) { 9540 if (const RecordType *RT = EltTy->getAs<RecordType>()) { 9541 CXXRecordDecl* RDecl = cast<CXXRecordDecl>(RT->getDecl()); 9542 if (RDecl->getDefinition()) { 9543 // C++ [class.union]p1: An object of a class with a non-trivial 9544 // constructor, a non-trivial copy constructor, a non-trivial 9545 // destructor, or a non-trivial copy assignment operator 9546 // cannot be a member of a union, nor can an array of such 9547 // objects. 9548 if (CheckNontrivialField(NewFD)) 9549 NewFD->setInvalidDecl(); 9550 } 9551 } 9552 9553 // C++ [class.union]p1: If a union contains a member of reference type, 9554 // the program is ill-formed. 9555 if (EltTy->isReferenceType()) { 9556 Diag(NewFD->getLocation(), diag::err_union_member_of_reference_type) 9557 << NewFD->getDeclName() << EltTy; 9558 NewFD->setInvalidDecl(); 9559 } 9560 } 9561 } 9562 9563 // FIXME: We need to pass in the attributes given an AST 9564 // representation, not a parser representation. 9565 if (D) 9566 // FIXME: What to pass instead of TUScope? 9567 ProcessDeclAttributes(TUScope, NewFD, *D); 9568 9569 // In auto-retain/release, infer strong retension for fields of 9570 // retainable type. 9571 if (getLangOpts().ObjCAutoRefCount && inferObjCARCLifetime(NewFD)) 9572 NewFD->setInvalidDecl(); 9573 9574 if (T.isObjCGCWeak()) 9575 Diag(Loc, diag::warn_attribute_weak_on_field); 9576 9577 NewFD->setAccess(AS); 9578 return NewFD; 9579 } 9580 9581 bool Sema::CheckNontrivialField(FieldDecl *FD) { 9582 assert(FD); 9583 assert(getLangOpts().CPlusPlus && "valid check only for C++"); 9584 9585 if (FD->isInvalidDecl()) 9586 return true; 9587 9588 QualType EltTy = Context.getBaseElementType(FD->getType()); 9589 if (const RecordType *RT = EltTy->getAs<RecordType>()) { 9590 CXXRecordDecl* RDecl = cast<CXXRecordDecl>(RT->getDecl()); 9591 if (RDecl->getDefinition()) { 9592 // We check for copy constructors before constructors 9593 // because otherwise we'll never get complaints about 9594 // copy constructors. 9595 9596 CXXSpecialMember member = CXXInvalid; 9597 if (!RDecl->hasTrivialCopyConstructor()) 9598 member = CXXCopyConstructor; 9599 else if (!RDecl->hasTrivialDefaultConstructor()) 9600 member = CXXDefaultConstructor; 9601 else if (!RDecl->hasTrivialCopyAssignment()) 9602 member = CXXCopyAssignment; 9603 else if (!RDecl->hasTrivialDestructor()) 9604 member = CXXDestructor; 9605 9606 if (member != CXXInvalid) { 9607 if (!getLangOpts().CPlusPlus0x && 9608 getLangOpts().ObjCAutoRefCount && RDecl->hasObjectMember()) { 9609 // Objective-C++ ARC: it is an error to have a non-trivial field of 9610 // a union. However, system headers in Objective-C programs 9611 // occasionally have Objective-C lifetime objects within unions, 9612 // and rather than cause the program to fail, we make those 9613 // members unavailable. 9614 SourceLocation Loc = FD->getLocation(); 9615 if (getSourceManager().isInSystemHeader(Loc)) { 9616 if (!FD->hasAttr<UnavailableAttr>()) 9617 FD->addAttr(new (Context) UnavailableAttr(Loc, Context, 9618 "this system field has retaining ownership")); 9619 return false; 9620 } 9621 } 9622 9623 Diag(FD->getLocation(), getLangOpts().CPlusPlus0x ? 9624 diag::warn_cxx98_compat_nontrivial_union_or_anon_struct_member : 9625 diag::err_illegal_union_or_anon_struct_member) 9626 << (int)FD->getParent()->isUnion() << FD->getDeclName() << member; 9627 DiagnoseNontrivial(RT, member); 9628 return !getLangOpts().CPlusPlus0x; 9629 } 9630 } 9631 } 9632 9633 return false; 9634 } 9635 9636 /// If the given constructor is user-declared, produce a diagnostic explaining 9637 /// that it makes the class non-trivial. 9638 static bool diagnoseNonTrivialUserDeclaredCtor(Sema &S, QualType QT, 9639 CXXConstructorDecl *CD, 9640 Sema::CXXSpecialMember CSM) { 9641 if (CD->isImplicit()) 9642 return false; 9643 9644 SourceLocation CtorLoc = CD->getLocation(); 9645 S.Diag(CtorLoc, diag::note_nontrivial_user_defined) << QT << CSM; 9646 return true; 9647 } 9648 9649 /// DiagnoseNontrivial - Given that a class has a non-trivial 9650 /// special member, figure out why. 9651 void Sema::DiagnoseNontrivial(const RecordType* T, CXXSpecialMember member) { 9652 QualType QT(T, 0U); 9653 CXXRecordDecl* RD = cast<CXXRecordDecl>(T->getDecl()); 9654 9655 // Check whether the member was user-declared. 9656 switch (member) { 9657 case CXXInvalid: 9658 break; 9659 9660 case CXXDefaultConstructor: 9661 if (RD->hasUserDeclaredConstructor()) { 9662 typedef CXXRecordDecl::ctor_iterator ctor_iter; 9663 for (ctor_iter CI = RD->ctor_begin(), CE = RD->ctor_end(); CI != CE; ++CI) 9664 if (diagnoseNonTrivialUserDeclaredCtor(*this, QT, *CI, member)) 9665 return; 9666 9667 // No user-delcared constructors; look for constructor templates. 9668 typedef CXXRecordDecl::specific_decl_iterator<FunctionTemplateDecl> 9669 tmpl_iter; 9670 for (tmpl_iter TI(RD->decls_begin()), TE(RD->decls_end()); 9671 TI != TE; ++TI) { 9672 CXXConstructorDecl *CD = 9673 dyn_cast<CXXConstructorDecl>(TI->getTemplatedDecl()); 9674 if (CD && diagnoseNonTrivialUserDeclaredCtor(*this, QT, CD, member)) 9675 return; 9676 } 9677 } 9678 break; 9679 9680 case CXXCopyConstructor: 9681 if (RD->hasUserDeclaredCopyConstructor()) { 9682 SourceLocation CtorLoc = 9683 RD->getCopyConstructor(0)->getLocation(); 9684 Diag(CtorLoc, diag::note_nontrivial_user_defined) << QT << member; 9685 return; 9686 } 9687 break; 9688 9689 case CXXMoveConstructor: 9690 if (RD->hasUserDeclaredMoveConstructor()) { 9691 SourceLocation CtorLoc = RD->getMoveConstructor()->getLocation(); 9692 Diag(CtorLoc, diag::note_nontrivial_user_defined) << QT << member; 9693 return; 9694 } 9695 break; 9696 9697 case CXXCopyAssignment: 9698 if (RD->hasUserDeclaredCopyAssignment()) { 9699 SourceLocation AssignLoc = 9700 RD->getCopyAssignmentOperator(0)->getLocation(); 9701 Diag(AssignLoc, diag::note_nontrivial_user_defined) << QT << member; 9702 return; 9703 } 9704 break; 9705 9706 case CXXMoveAssignment: 9707 if (RD->hasUserDeclaredMoveAssignment()) { 9708 SourceLocation AssignLoc = RD->getMoveAssignmentOperator()->getLocation(); 9709 Diag(AssignLoc, diag::note_nontrivial_user_defined) << QT << member; 9710 return; 9711 } 9712 break; 9713 9714 case CXXDestructor: 9715 if (RD->hasUserDeclaredDestructor()) { 9716 SourceLocation DtorLoc = LookupDestructor(RD)->getLocation(); 9717 Diag(DtorLoc, diag::note_nontrivial_user_defined) << QT << member; 9718 return; 9719 } 9720 break; 9721 } 9722 9723 typedef CXXRecordDecl::base_class_iterator base_iter; 9724 9725 // Virtual bases and members inhibit trivial copying/construction, 9726 // but not trivial destruction. 9727 if (member != CXXDestructor) { 9728 // Check for virtual bases. vbases includes indirect virtual bases, 9729 // so we just iterate through the direct bases. 9730 for (base_iter bi = RD->bases_begin(), be = RD->bases_end(); bi != be; ++bi) 9731 if (bi->isVirtual()) { 9732 SourceLocation BaseLoc = bi->getLocStart(); 9733 Diag(BaseLoc, diag::note_nontrivial_has_virtual) << QT << 1; 9734 return; 9735 } 9736 9737 // Check for virtual methods. 9738 typedef CXXRecordDecl::method_iterator meth_iter; 9739 for (meth_iter mi = RD->method_begin(), me = RD->method_end(); mi != me; 9740 ++mi) { 9741 if (mi->isVirtual()) { 9742 SourceLocation MLoc = mi->getLocStart(); 9743 Diag(MLoc, diag::note_nontrivial_has_virtual) << QT << 0; 9744 return; 9745 } 9746 } 9747 } 9748 9749 bool (CXXRecordDecl::*hasTrivial)() const; 9750 switch (member) { 9751 case CXXDefaultConstructor: 9752 hasTrivial = &CXXRecordDecl::hasTrivialDefaultConstructor; break; 9753 case CXXCopyConstructor: 9754 hasTrivial = &CXXRecordDecl::hasTrivialCopyConstructor; break; 9755 case CXXCopyAssignment: 9756 hasTrivial = &CXXRecordDecl::hasTrivialCopyAssignment; break; 9757 case CXXDestructor: 9758 hasTrivial = &CXXRecordDecl::hasTrivialDestructor; break; 9759 default: 9760 llvm_unreachable("unexpected special member"); 9761 } 9762 9763 // Check for nontrivial bases (and recurse). 9764 for (base_iter bi = RD->bases_begin(), be = RD->bases_end(); bi != be; ++bi) { 9765 const RecordType *BaseRT = bi->getType()->getAs<RecordType>(); 9766 assert(BaseRT && "Don't know how to handle dependent bases"); 9767 CXXRecordDecl *BaseRecTy = cast<CXXRecordDecl>(BaseRT->getDecl()); 9768 if (!(BaseRecTy->*hasTrivial)()) { 9769 SourceLocation BaseLoc = bi->getLocStart(); 9770 Diag(BaseLoc, diag::note_nontrivial_has_nontrivial) << QT << 1 << member; 9771 DiagnoseNontrivial(BaseRT, member); 9772 return; 9773 } 9774 } 9775 9776 // Check for nontrivial members (and recurse). 9777 typedef RecordDecl::field_iterator field_iter; 9778 for (field_iter fi = RD->field_begin(), fe = RD->field_end(); fi != fe; 9779 ++fi) { 9780 QualType EltTy = Context.getBaseElementType(fi->getType()); 9781 if (const RecordType *EltRT = EltTy->getAs<RecordType>()) { 9782 CXXRecordDecl* EltRD = cast<CXXRecordDecl>(EltRT->getDecl()); 9783 9784 if (!(EltRD->*hasTrivial)()) { 9785 SourceLocation FLoc = fi->getLocation(); 9786 Diag(FLoc, diag::note_nontrivial_has_nontrivial) << QT << 0 << member; 9787 DiagnoseNontrivial(EltRT, member); 9788 return; 9789 } 9790 } 9791 9792 if (EltTy->isObjCLifetimeType()) { 9793 switch (EltTy.getObjCLifetime()) { 9794 case Qualifiers::OCL_None: 9795 case Qualifiers::OCL_ExplicitNone: 9796 break; 9797 9798 case Qualifiers::OCL_Autoreleasing: 9799 case Qualifiers::OCL_Weak: 9800 case Qualifiers::OCL_Strong: 9801 Diag(fi->getLocation(), diag::note_nontrivial_objc_ownership) 9802 << QT << EltTy.getObjCLifetime(); 9803 return; 9804 } 9805 } 9806 } 9807 9808 llvm_unreachable("found no explanation for non-trivial member"); 9809 } 9810 9811 /// TranslateIvarVisibility - Translate visibility from a token ID to an 9812 /// AST enum value. 9813 static ObjCIvarDecl::AccessControl 9814 TranslateIvarVisibility(tok::ObjCKeywordKind ivarVisibility) { 9815 switch (ivarVisibility) { 9816 default: llvm_unreachable("Unknown visitibility kind"); 9817 case tok::objc_private: return ObjCIvarDecl::Private; 9818 case tok::objc_public: return ObjCIvarDecl::Public; 9819 case tok::objc_protected: return ObjCIvarDecl::Protected; 9820 case tok::objc_package: return ObjCIvarDecl::Package; 9821 } 9822 } 9823 9824 /// ActOnIvar - Each ivar field of an objective-c class is passed into this 9825 /// in order to create an IvarDecl object for it. 9826 Decl *Sema::ActOnIvar(Scope *S, 9827 SourceLocation DeclStart, 9828 Declarator &D, Expr *BitfieldWidth, 9829 tok::ObjCKeywordKind Visibility) { 9830 9831 IdentifierInfo *II = D.getIdentifier(); 9832 Expr *BitWidth = (Expr*)BitfieldWidth; 9833 SourceLocation Loc = DeclStart; 9834 if (II) Loc = D.getIdentifierLoc(); 9835 9836 // FIXME: Unnamed fields can be handled in various different ways, for 9837 // example, unnamed unions inject all members into the struct namespace! 9838 9839 TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S); 9840 QualType T = TInfo->getType(); 9841 9842 if (BitWidth) { 9843 // 6.7.2.1p3, 6.7.2.1p4 9844 BitWidth = VerifyBitField(Loc, II, T, BitWidth).take(); 9845 if (!BitWidth) 9846 D.setInvalidType(); 9847 } else { 9848 // Not a bitfield. 9849 9850 // validate II. 9851 9852 } 9853 if (T->isReferenceType()) { 9854 Diag(Loc, diag::err_ivar_reference_type); 9855 D.setInvalidType(); 9856 } 9857 // C99 6.7.2.1p8: A member of a structure or union may have any type other 9858 // than a variably modified type. 9859 else if (T->isVariablyModifiedType()) { 9860 Diag(Loc, diag::err_typecheck_ivar_variable_size); 9861 D.setInvalidType(); 9862 } 9863 9864 // Get the visibility (access control) for this ivar. 9865 ObjCIvarDecl::AccessControl ac = 9866 Visibility != tok::objc_not_keyword ? TranslateIvarVisibility(Visibility) 9867 : ObjCIvarDecl::None; 9868 // Must set ivar's DeclContext to its enclosing interface. 9869 ObjCContainerDecl *EnclosingDecl = cast<ObjCContainerDecl>(CurContext); 9870 if (!EnclosingDecl || EnclosingDecl->isInvalidDecl()) 9871 return 0; 9872 ObjCContainerDecl *EnclosingContext; 9873 if (ObjCImplementationDecl *IMPDecl = 9874 dyn_cast<ObjCImplementationDecl>(EnclosingDecl)) { 9875 if (LangOpts.ObjCRuntime.isFragile()) { 9876 // Case of ivar declared in an implementation. Context is that of its class. 9877 EnclosingContext = IMPDecl->getClassInterface(); 9878 assert(EnclosingContext && "Implementation has no class interface!"); 9879 } 9880 else 9881 EnclosingContext = EnclosingDecl; 9882 } else { 9883 if (ObjCCategoryDecl *CDecl = 9884 dyn_cast<ObjCCategoryDecl>(EnclosingDecl)) { 9885 if (LangOpts.ObjCRuntime.isFragile() || !CDecl->IsClassExtension()) { 9886 Diag(Loc, diag::err_misplaced_ivar) << CDecl->IsClassExtension(); 9887 return 0; 9888 } 9889 } 9890 EnclosingContext = EnclosingDecl; 9891 } 9892 9893 // Construct the decl. 9894 ObjCIvarDecl *NewID = ObjCIvarDecl::Create(Context, EnclosingContext, 9895 DeclStart, Loc, II, T, 9896 TInfo, ac, (Expr *)BitfieldWidth); 9897 9898 if (II) { 9899 NamedDecl *PrevDecl = LookupSingleName(S, II, Loc, LookupMemberName, 9900 ForRedeclaration); 9901 if (PrevDecl && isDeclInScope(PrevDecl, EnclosingContext, S) 9902 && !isa<TagDecl>(PrevDecl)) { 9903 Diag(Loc, diag::err_duplicate_member) << II; 9904 Diag(PrevDecl->getLocation(), diag::note_previous_declaration); 9905 NewID->setInvalidDecl(); 9906 } 9907 } 9908 9909 // Process attributes attached to the ivar. 9910 ProcessDeclAttributes(S, NewID, D); 9911 9912 if (D.isInvalidType()) 9913 NewID->setInvalidDecl(); 9914 9915 // In ARC, infer 'retaining' for ivars of retainable type. 9916 if (getLangOpts().ObjCAutoRefCount && inferObjCARCLifetime(NewID)) 9917 NewID->setInvalidDecl(); 9918 9919 if (D.getDeclSpec().isModulePrivateSpecified()) 9920 NewID->setModulePrivate(); 9921 9922 if (II) { 9923 // FIXME: When interfaces are DeclContexts, we'll need to add 9924 // these to the interface. 9925 S->AddDecl(NewID); 9926 IdResolver.AddDecl(NewID); 9927 } 9928 9929 if (LangOpts.ObjCRuntime.isNonFragile() && 9930 !NewID->isInvalidDecl() && isa<ObjCInterfaceDecl>(EnclosingDecl)) 9931 Diag(Loc, diag::warn_ivars_in_interface); 9932 9933 return NewID; 9934 } 9935 9936 /// ActOnLastBitfield - This routine handles synthesized bitfields rules for 9937 /// class and class extensions. For every class @interface and class 9938 /// extension @interface, if the last ivar is a bitfield of any type, 9939 /// then add an implicit `char :0` ivar to the end of that interface. 9940 void Sema::ActOnLastBitfield(SourceLocation DeclLoc, 9941 SmallVectorImpl<Decl *> &AllIvarDecls) { 9942 if (LangOpts.ObjCRuntime.isFragile() || AllIvarDecls.empty()) 9943 return; 9944 9945 Decl *ivarDecl = AllIvarDecls[AllIvarDecls.size()-1]; 9946 ObjCIvarDecl *Ivar = cast<ObjCIvarDecl>(ivarDecl); 9947 9948 if (!Ivar->isBitField() || Ivar->getBitWidthValue(Context) == 0) 9949 return; 9950 ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(CurContext); 9951 if (!ID) { 9952 if (ObjCCategoryDecl *CD = dyn_cast<ObjCCategoryDecl>(CurContext)) { 9953 if (!CD->IsClassExtension()) 9954 return; 9955 } 9956 // No need to add this to end of @implementation. 9957 else 9958 return; 9959 } 9960 // All conditions are met. Add a new bitfield to the tail end of ivars. 9961 llvm::APInt Zero(Context.getTypeSize(Context.IntTy), 0); 9962 Expr * BW = IntegerLiteral::Create(Context, Zero, Context.IntTy, DeclLoc); 9963 9964 Ivar = ObjCIvarDecl::Create(Context, cast<ObjCContainerDecl>(CurContext), 9965 DeclLoc, DeclLoc, 0, 9966 Context.CharTy, 9967 Context.getTrivialTypeSourceInfo(Context.CharTy, 9968 DeclLoc), 9969 ObjCIvarDecl::Private, BW, 9970 true); 9971 AllIvarDecls.push_back(Ivar); 9972 } 9973 9974 void Sema::ActOnFields(Scope* S, 9975 SourceLocation RecLoc, Decl *EnclosingDecl, 9976 llvm::ArrayRef<Decl *> Fields, 9977 SourceLocation LBrac, SourceLocation RBrac, 9978 AttributeList *Attr) { 9979 assert(EnclosingDecl && "missing record or interface decl"); 9980 9981 // If this is an Objective-C @implementation or category and we have 9982 // new fields here we should reset the layout of the interface since 9983 // it will now change. 9984 if (!Fields.empty() && isa<ObjCContainerDecl>(EnclosingDecl)) { 9985 ObjCContainerDecl *DC = cast<ObjCContainerDecl>(EnclosingDecl); 9986 switch (DC->getKind()) { 9987 default: break; 9988 case Decl::ObjCCategory: 9989 Context.ResetObjCLayout(cast<ObjCCategoryDecl>(DC)->getClassInterface()); 9990 break; 9991 case Decl::ObjCImplementation: 9992 Context. 9993 ResetObjCLayout(cast<ObjCImplementationDecl>(DC)->getClassInterface()); 9994 break; 9995 } 9996 } 9997 9998 RecordDecl *Record = dyn_cast<RecordDecl>(EnclosingDecl); 9999 10000 // Start counting up the number of named members; make sure to include 10001 // members of anonymous structs and unions in the total. 10002 unsigned NumNamedMembers = 0; 10003 if (Record) { 10004 for (RecordDecl::decl_iterator i = Record->decls_begin(), 10005 e = Record->decls_end(); i != e; i++) { 10006 if (IndirectFieldDecl *IFD = dyn_cast<IndirectFieldDecl>(*i)) 10007 if (IFD->getDeclName()) 10008 ++NumNamedMembers; 10009 } 10010 } 10011 10012 // Verify that all the fields are okay. 10013 SmallVector<FieldDecl*, 32> RecFields; 10014 10015 bool ARCErrReported = false; 10016 for (llvm::ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); 10017 i != end; ++i) { 10018 FieldDecl *FD = cast<FieldDecl>(*i); 10019 10020 // Get the type for the field. 10021 const Type *FDTy = FD->getType().getTypePtr(); 10022 10023 if (!FD->isAnonymousStructOrUnion()) { 10024 // Remember all fields written by the user. 10025 RecFields.push_back(FD); 10026 } 10027 10028 // If the field is already invalid for some reason, don't emit more 10029 // diagnostics about it. 10030 if (FD->isInvalidDecl()) { 10031 EnclosingDecl->setInvalidDecl(); 10032 continue; 10033 } 10034 10035 // C99 6.7.2.1p2: 10036 // A structure or union shall not contain a member with 10037 // incomplete or function type (hence, a structure shall not 10038 // contain an instance of itself, but may contain a pointer to 10039 // an instance of itself), except that the last member of a 10040 // structure with more than one named member may have incomplete 10041 // array type; such a structure (and any union containing, 10042 // possibly recursively, a member that is such a structure) 10043 // shall not be a member of a structure or an element of an 10044 // array. 10045 if (FDTy->isFunctionType()) { 10046 // Field declared as a function. 10047 Diag(FD->getLocation(), diag::err_field_declared_as_function) 10048 << FD->getDeclName(); 10049 FD->setInvalidDecl(); 10050 EnclosingDecl->setInvalidDecl(); 10051 continue; 10052 } else if (FDTy->isIncompleteArrayType() && Record && 10053 ((i + 1 == Fields.end() && !Record->isUnion()) || 10054 ((getLangOpts().MicrosoftExt || 10055 getLangOpts().CPlusPlus) && 10056 (i + 1 == Fields.end() || Record->isUnion())))) { 10057 // Flexible array member. 10058 // Microsoft and g++ is more permissive regarding flexible array. 10059 // It will accept flexible array in union and also 10060 // as the sole element of a struct/class. 10061 if (getLangOpts().MicrosoftExt) { 10062 if (Record->isUnion()) 10063 Diag(FD->getLocation(), diag::ext_flexible_array_union_ms) 10064 << FD->getDeclName(); 10065 else if (Fields.size() == 1) 10066 Diag(FD->getLocation(), diag::ext_flexible_array_empty_aggregate_ms) 10067 << FD->getDeclName() << Record->getTagKind(); 10068 } else if (getLangOpts().CPlusPlus) { 10069 if (Record->isUnion()) 10070 Diag(FD->getLocation(), diag::ext_flexible_array_union_gnu) 10071 << FD->getDeclName(); 10072 else if (Fields.size() == 1) 10073 Diag(FD->getLocation(), diag::ext_flexible_array_empty_aggregate_gnu) 10074 << FD->getDeclName() << Record->getTagKind(); 10075 } else if (!getLangOpts().C99) { 10076 if (Record->isUnion()) 10077 Diag(FD->getLocation(), diag::ext_flexible_array_union_gnu) 10078 << FD->getDeclName(); 10079 else 10080 Diag(FD->getLocation(), diag::ext_c99_flexible_array_member) 10081 << FD->getDeclName() << Record->getTagKind(); 10082 } else if (NumNamedMembers < 1) { 10083 Diag(FD->getLocation(), diag::err_flexible_array_empty_struct) 10084 << FD->getDeclName(); 10085 FD->setInvalidDecl(); 10086 EnclosingDecl->setInvalidDecl(); 10087 continue; 10088 } 10089 if (!FD->getType()->isDependentType() && 10090 !Context.getBaseElementType(FD->getType()).isPODType(Context)) { 10091 Diag(FD->getLocation(), diag::err_flexible_array_has_nonpod_type) 10092 << FD->getDeclName() << FD->getType(); 10093 FD->setInvalidDecl(); 10094 EnclosingDecl->setInvalidDecl(); 10095 continue; 10096 } 10097 // Okay, we have a legal flexible array member at the end of the struct. 10098 if (Record) 10099 Record->setHasFlexibleArrayMember(true); 10100 } else if (!FDTy->isDependentType() && 10101 RequireCompleteType(FD->getLocation(), FD->getType(), 10102 diag::err_field_incomplete)) { 10103 // Incomplete type 10104 FD->setInvalidDecl(); 10105 EnclosingDecl->setInvalidDecl(); 10106 continue; 10107 } else if (const RecordType *FDTTy = FDTy->getAs<RecordType>()) { 10108 if (FDTTy->getDecl()->hasFlexibleArrayMember()) { 10109 // If this is a member of a union, then entire union becomes "flexible". 10110 if (Record && Record->isUnion()) { 10111 Record->setHasFlexibleArrayMember(true); 10112 } else { 10113 // If this is a struct/class and this is not the last element, reject 10114 // it. Note that GCC supports variable sized arrays in the middle of 10115 // structures. 10116 if (i + 1 != Fields.end()) 10117 Diag(FD->getLocation(), diag::ext_variable_sized_type_in_struct) 10118 << FD->getDeclName() << FD->getType(); 10119 else { 10120 // We support flexible arrays at the end of structs in 10121 // other structs as an extension. 10122 Diag(FD->getLocation(), diag::ext_flexible_array_in_struct) 10123 << FD->getDeclName(); 10124 if (Record) 10125 Record->setHasFlexibleArrayMember(true); 10126 } 10127 } 10128 } 10129 if (isa<ObjCContainerDecl>(EnclosingDecl) && 10130 RequireNonAbstractType(FD->getLocation(), FD->getType(), 10131 diag::err_abstract_type_in_decl, 10132 AbstractIvarType)) { 10133 // Ivars can not have abstract class types 10134 FD->setInvalidDecl(); 10135 } 10136 if (Record && FDTTy->getDecl()->hasObjectMember()) 10137 Record->setHasObjectMember(true); 10138 } else if (FDTy->isObjCObjectType()) { 10139 /// A field cannot be an Objective-c object 10140 Diag(FD->getLocation(), diag::err_statically_allocated_object) 10141 << FixItHint::CreateInsertion(FD->getLocation(), "*"); 10142 QualType T = Context.getObjCObjectPointerType(FD->getType()); 10143 FD->setType(T); 10144 } else if (!getLangOpts().CPlusPlus) { 10145 if (getLangOpts().ObjCAutoRefCount && Record && !ARCErrReported) { 10146 // It's an error in ARC if a field has lifetime. 10147 // We don't want to report this in a system header, though, 10148 // so we just make the field unavailable. 10149 // FIXME: that's really not sufficient; we need to make the type 10150 // itself invalid to, say, initialize or copy. 10151 QualType T = FD->getType(); 10152 Qualifiers::ObjCLifetime lifetime = T.getObjCLifetime(); 10153 if (lifetime && lifetime != Qualifiers::OCL_ExplicitNone) { 10154 SourceLocation loc = FD->getLocation(); 10155 if (getSourceManager().isInSystemHeader(loc)) { 10156 if (!FD->hasAttr<UnavailableAttr>()) { 10157 FD->addAttr(new (Context) UnavailableAttr(loc, Context, 10158 "this system field has retaining ownership")); 10159 } 10160 } else { 10161 Diag(FD->getLocation(), diag::err_arc_objc_object_in_struct) 10162 << T->isBlockPointerType(); 10163 } 10164 ARCErrReported = true; 10165 } 10166 } 10167 else if (getLangOpts().ObjC1 && 10168 getLangOpts().getGC() != LangOptions::NonGC && 10169 Record && !Record->hasObjectMember()) { 10170 if (FD->getType()->isObjCObjectPointerType() || 10171 FD->getType().isObjCGCStrong()) 10172 Record->setHasObjectMember(true); 10173 else if (Context.getAsArrayType(FD->getType())) { 10174 QualType BaseType = Context.getBaseElementType(FD->getType()); 10175 if (BaseType->isRecordType() && 10176 BaseType->getAs<RecordType>()->getDecl()->hasObjectMember()) 10177 Record->setHasObjectMember(true); 10178 else if (BaseType->isObjCObjectPointerType() || 10179 BaseType.isObjCGCStrong()) 10180 Record->setHasObjectMember(true); 10181 } 10182 } 10183 } 10184 // Keep track of the number of named members. 10185 if (FD->getIdentifier()) 10186 ++NumNamedMembers; 10187 } 10188 10189 // Okay, we successfully defined 'Record'. 10190 if (Record) { 10191 bool Completed = false; 10192 if (CXXRecordDecl *CXXRecord = dyn_cast<CXXRecordDecl>(Record)) { 10193 if (!CXXRecord->isInvalidDecl()) { 10194 // Set access bits correctly on the directly-declared conversions. 10195 UnresolvedSetImpl *Convs = CXXRecord->getConversionFunctions(); 10196 for (UnresolvedSetIterator I = Convs->begin(), E = Convs->end(); 10197 I != E; ++I) 10198 Convs->setAccess(I, (*I)->getAccess()); 10199 10200 if (!CXXRecord->isDependentType()) { 10201 // Adjust user-defined destructor exception spec. 10202 if (getLangOpts().CPlusPlus0x && 10203 CXXRecord->hasUserDeclaredDestructor()) 10204 AdjustDestructorExceptionSpec(CXXRecord,CXXRecord->getDestructor()); 10205 10206 // Add any implicitly-declared members to this class. 10207 AddImplicitlyDeclaredMembersToClass(CXXRecord); 10208 10209 // If we have virtual base classes, we may end up finding multiple 10210 // final overriders for a given virtual function. Check for this 10211 // problem now. 10212 if (CXXRecord->getNumVBases()) { 10213 CXXFinalOverriderMap FinalOverriders; 10214 CXXRecord->getFinalOverriders(FinalOverriders); 10215 10216 for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(), 10217 MEnd = FinalOverriders.end(); 10218 M != MEnd; ++M) { 10219 for (OverridingMethods::iterator SO = M->second.begin(), 10220 SOEnd = M->second.end(); 10221 SO != SOEnd; ++SO) { 10222 assert(SO->second.size() > 0 && 10223 "Virtual function without overridding functions?"); 10224 if (SO->second.size() == 1) 10225 continue; 10226 10227 // C++ [class.virtual]p2: 10228 // In a derived class, if a virtual member function of a base 10229 // class subobject has more than one final overrider the 10230 // program is ill-formed. 10231 Diag(Record->getLocation(), diag::err_multiple_final_overriders) 10232 << (const NamedDecl *)M->first << Record; 10233 Diag(M->first->getLocation(), 10234 diag::note_overridden_virtual_function); 10235 for (OverridingMethods::overriding_iterator 10236 OM = SO->second.begin(), 10237 OMEnd = SO->second.end(); 10238 OM != OMEnd; ++OM) 10239 Diag(OM->Method->getLocation(), diag::note_final_overrider) 10240 << (const NamedDecl *)M->first << OM->Method->getParent(); 10241 10242 Record->setInvalidDecl(); 10243 } 10244 } 10245 CXXRecord->completeDefinition(&FinalOverriders); 10246 Completed = true; 10247 } 10248 } 10249 } 10250 } 10251 10252 if (!Completed) 10253 Record->completeDefinition(); 10254 10255 } else { 10256 ObjCIvarDecl **ClsFields = 10257 reinterpret_cast<ObjCIvarDecl**>(RecFields.data()); 10258 if (ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(EnclosingDecl)) { 10259 ID->setEndOfDefinitionLoc(RBrac); 10260 // Add ivar's to class's DeclContext. 10261 for (unsigned i = 0, e = RecFields.size(); i != e; ++i) { 10262 ClsFields[i]->setLexicalDeclContext(ID); 10263 ID->addDecl(ClsFields[i]); 10264 } 10265 // Must enforce the rule that ivars in the base classes may not be 10266 // duplicates. 10267 if (ID->getSuperClass()) 10268 DiagnoseDuplicateIvars(ID, ID->getSuperClass()); 10269 } else if (ObjCImplementationDecl *IMPDecl = 10270 dyn_cast<ObjCImplementationDecl>(EnclosingDecl)) { 10271 assert(IMPDecl && "ActOnFields - missing ObjCImplementationDecl"); 10272 for (unsigned I = 0, N = RecFields.size(); I != N; ++I) 10273 // Ivar declared in @implementation never belongs to the implementation. 10274 // Only it is in implementation's lexical context. 10275 ClsFields[I]->setLexicalDeclContext(IMPDecl); 10276 CheckImplementationIvars(IMPDecl, ClsFields, RecFields.size(), RBrac); 10277 IMPDecl->setIvarLBraceLoc(LBrac); 10278 IMPDecl->setIvarRBraceLoc(RBrac); 10279 } else if (ObjCCategoryDecl *CDecl = 10280 dyn_cast<ObjCCategoryDecl>(EnclosingDecl)) { 10281 // case of ivars in class extension; all other cases have been 10282 // reported as errors elsewhere. 10283 // FIXME. Class extension does not have a LocEnd field. 10284 // CDecl->setLocEnd(RBrac); 10285 // Add ivar's to class extension's DeclContext. 10286 // Diagnose redeclaration of private ivars. 10287 ObjCInterfaceDecl *IDecl = CDecl->getClassInterface(); 10288 for (unsigned i = 0, e = RecFields.size(); i != e; ++i) { 10289 if (IDecl) { 10290 if (const ObjCIvarDecl *ClsIvar = 10291 IDecl->getIvarDecl(ClsFields[i]->getIdentifier())) { 10292 Diag(ClsFields[i]->getLocation(), 10293 diag::err_duplicate_ivar_declaration); 10294 Diag(ClsIvar->getLocation(), diag::note_previous_definition); 10295 continue; 10296 } 10297 for (const ObjCCategoryDecl *ClsExtDecl = 10298 IDecl->getFirstClassExtension(); 10299 ClsExtDecl; ClsExtDecl = ClsExtDecl->getNextClassExtension()) { 10300 if (const ObjCIvarDecl *ClsExtIvar = 10301 ClsExtDecl->getIvarDecl(ClsFields[i]->getIdentifier())) { 10302 Diag(ClsFields[i]->getLocation(), 10303 diag::err_duplicate_ivar_declaration); 10304 Diag(ClsExtIvar->getLocation(), diag::note_previous_definition); 10305 continue; 10306 } 10307 } 10308 } 10309 ClsFields[i]->setLexicalDeclContext(CDecl); 10310 CDecl->addDecl(ClsFields[i]); 10311 } 10312 CDecl->setIvarLBraceLoc(LBrac); 10313 CDecl->setIvarRBraceLoc(RBrac); 10314 } 10315 } 10316 10317 if (Attr) 10318 ProcessDeclAttributeList(S, Record, Attr); 10319 } 10320 10321 /// \brief Determine whether the given integral value is representable within 10322 /// the given type T. 10323 static bool isRepresentableIntegerValue(ASTContext &Context, 10324 llvm::APSInt &Value, 10325 QualType T) { 10326 assert(T->isIntegralType(Context) && "Integral type required!"); 10327 unsigned BitWidth = Context.getIntWidth(T); 10328 10329 if (Value.isUnsigned() || Value.isNonNegative()) { 10330 if (T->isSignedIntegerOrEnumerationType()) 10331 --BitWidth; 10332 return Value.getActiveBits() <= BitWidth; 10333 } 10334 return Value.getMinSignedBits() <= BitWidth; 10335 } 10336 10337 // \brief Given an integral type, return the next larger integral type 10338 // (or a NULL type of no such type exists). 10339 static QualType getNextLargerIntegralType(ASTContext &Context, QualType T) { 10340 // FIXME: Int128/UInt128 support, which also needs to be introduced into 10341 // enum checking below. 10342 assert(T->isIntegralType(Context) && "Integral type required!"); 10343 const unsigned NumTypes = 4; 10344 QualType SignedIntegralTypes[NumTypes] = { 10345 Context.ShortTy, Context.IntTy, Context.LongTy, Context.LongLongTy 10346 }; 10347 QualType UnsignedIntegralTypes[NumTypes] = { 10348 Context.UnsignedShortTy, Context.UnsignedIntTy, Context.UnsignedLongTy, 10349 Context.UnsignedLongLongTy 10350 }; 10351 10352 unsigned BitWidth = Context.getTypeSize(T); 10353 QualType *Types = T->isSignedIntegerOrEnumerationType()? SignedIntegralTypes 10354 : UnsignedIntegralTypes; 10355 for (unsigned I = 0; I != NumTypes; ++I) 10356 if (Context.getTypeSize(Types[I]) > BitWidth) 10357 return Types[I]; 10358 10359 return QualType(); 10360 } 10361 10362 EnumConstantDecl *Sema::CheckEnumConstant(EnumDecl *Enum, 10363 EnumConstantDecl *LastEnumConst, 10364 SourceLocation IdLoc, 10365 IdentifierInfo *Id, 10366 Expr *Val) { 10367 unsigned IntWidth = Context.getTargetInfo().getIntWidth(); 10368 llvm::APSInt EnumVal(IntWidth); 10369 QualType EltTy; 10370 10371 if (Val && DiagnoseUnexpandedParameterPack(Val, UPPC_EnumeratorValue)) 10372 Val = 0; 10373 10374 if (Val) 10375 Val = DefaultLvalueConversion(Val).take(); 10376 10377 if (Val) { 10378 if (Enum->isDependentType() || Val->isTypeDependent()) 10379 EltTy = Context.DependentTy; 10380 else { 10381 SourceLocation ExpLoc; 10382 if (getLangOpts().CPlusPlus0x && Enum->isFixed() && 10383 !getLangOpts().MicrosoftMode) { 10384 // C++11 [dcl.enum]p5: If the underlying type is fixed, [...] the 10385 // constant-expression in the enumerator-definition shall be a converted 10386 // constant expression of the underlying type. 10387 EltTy = Enum->getIntegerType(); 10388 ExprResult Converted = 10389 CheckConvertedConstantExpression(Val, EltTy, EnumVal, 10390 CCEK_Enumerator); 10391 if (Converted.isInvalid()) 10392 Val = 0; 10393 else 10394 Val = Converted.take(); 10395 } else if (!Val->isValueDependent() && 10396 !(Val = VerifyIntegerConstantExpression(Val, 10397 &EnumVal).take())) { 10398 // C99 6.7.2.2p2: Make sure we have an integer constant expression. 10399 } else { 10400 if (Enum->isFixed()) { 10401 EltTy = Enum->getIntegerType(); 10402 10403 // In Obj-C and Microsoft mode, require the enumeration value to be 10404 // representable in the underlying type of the enumeration. In C++11, 10405 // we perform a non-narrowing conversion as part of converted constant 10406 // expression checking. 10407 if (!isRepresentableIntegerValue(Context, EnumVal, EltTy)) { 10408 if (getLangOpts().MicrosoftMode) { 10409 Diag(IdLoc, diag::ext_enumerator_too_large) << EltTy; 10410 Val = ImpCastExprToType(Val, EltTy, CK_IntegralCast).take(); 10411 } else 10412 Diag(IdLoc, diag::err_enumerator_too_large) << EltTy; 10413 } else 10414 Val = ImpCastExprToType(Val, EltTy, CK_IntegralCast).take(); 10415 } else if (getLangOpts().CPlusPlus) { 10416 // C++11 [dcl.enum]p5: 10417 // If the underlying type is not fixed, the type of each enumerator 10418 // is the type of its initializing value: 10419 // - If an initializer is specified for an enumerator, the 10420 // initializing value has the same type as the expression. 10421 EltTy = Val->getType(); 10422 } else { 10423 // C99 6.7.2.2p2: 10424 // The expression that defines the value of an enumeration constant 10425 // shall be an integer constant expression that has a value 10426 // representable as an int. 10427 10428 // Complain if the value is not representable in an int. 10429 if (!isRepresentableIntegerValue(Context, EnumVal, Context.IntTy)) 10430 Diag(IdLoc, diag::ext_enum_value_not_int) 10431 << EnumVal.toString(10) << Val->getSourceRange() 10432 << (EnumVal.isUnsigned() || EnumVal.isNonNegative()); 10433 else if (!Context.hasSameType(Val->getType(), Context.IntTy)) { 10434 // Force the type of the expression to 'int'. 10435 Val = ImpCastExprToType(Val, Context.IntTy, CK_IntegralCast).take(); 10436 } 10437 EltTy = Val->getType(); 10438 } 10439 } 10440 } 10441 } 10442 10443 if (!Val) { 10444 if (Enum->isDependentType()) 10445 EltTy = Context.DependentTy; 10446 else if (!LastEnumConst) { 10447 // C++0x [dcl.enum]p5: 10448 // If the underlying type is not fixed, the type of each enumerator 10449 // is the type of its initializing value: 10450 // - If no initializer is specified for the first enumerator, the 10451 // initializing value has an unspecified integral type. 10452 // 10453 // GCC uses 'int' for its unspecified integral type, as does 10454 // C99 6.7.2.2p3. 10455 if (Enum->isFixed()) { 10456 EltTy = Enum->getIntegerType(); 10457 } 10458 else { 10459 EltTy = Context.IntTy; 10460 } 10461 } else { 10462 // Assign the last value + 1. 10463 EnumVal = LastEnumConst->getInitVal(); 10464 ++EnumVal; 10465 EltTy = LastEnumConst->getType(); 10466 10467 // Check for overflow on increment. 10468 if (EnumVal < LastEnumConst->getInitVal()) { 10469 // C++0x [dcl.enum]p5: 10470 // If the underlying type is not fixed, the type of each enumerator 10471 // is the type of its initializing value: 10472 // 10473 // - Otherwise the type of the initializing value is the same as 10474 // the type of the initializing value of the preceding enumerator 10475 // unless the incremented value is not representable in that type, 10476 // in which case the type is an unspecified integral type 10477 // sufficient to contain the incremented value. If no such type 10478 // exists, the program is ill-formed. 10479 QualType T = getNextLargerIntegralType(Context, EltTy); 10480 if (T.isNull() || Enum->isFixed()) { 10481 // There is no integral type larger enough to represent this 10482 // value. Complain, then allow the value to wrap around. 10483 EnumVal = LastEnumConst->getInitVal(); 10484 EnumVal = EnumVal.zext(EnumVal.getBitWidth() * 2); 10485 ++EnumVal; 10486 if (Enum->isFixed()) 10487 // When the underlying type is fixed, this is ill-formed. 10488 Diag(IdLoc, diag::err_enumerator_wrapped) 10489 << EnumVal.toString(10) 10490 << EltTy; 10491 else 10492 Diag(IdLoc, diag::warn_enumerator_too_large) 10493 << EnumVal.toString(10); 10494 } else { 10495 EltTy = T; 10496 } 10497 10498 // Retrieve the last enumerator's value, extent that type to the 10499 // type that is supposed to be large enough to represent the incremented 10500 // value, then increment. 10501 EnumVal = LastEnumConst->getInitVal(); 10502 EnumVal.setIsSigned(EltTy->isSignedIntegerOrEnumerationType()); 10503 EnumVal = EnumVal.zextOrTrunc(Context.getIntWidth(EltTy)); 10504 ++EnumVal; 10505 10506 // If we're not in C++, diagnose the overflow of enumerator values, 10507 // which in C99 means that the enumerator value is not representable in 10508 // an int (C99 6.7.2.2p2). However, we support GCC's extension that 10509 // permits enumerator values that are representable in some larger 10510 // integral type. 10511 if (!getLangOpts().CPlusPlus && !T.isNull()) 10512 Diag(IdLoc, diag::warn_enum_value_overflow); 10513 } else if (!getLangOpts().CPlusPlus && 10514 !isRepresentableIntegerValue(Context, EnumVal, EltTy)) { 10515 // Enforce C99 6.7.2.2p2 even when we compute the next value. 10516 Diag(IdLoc, diag::ext_enum_value_not_int) 10517 << EnumVal.toString(10) << 1; 10518 } 10519 } 10520 } 10521 10522 if (!EltTy->isDependentType()) { 10523 // Make the enumerator value match the signedness and size of the 10524 // enumerator's type. 10525 EnumVal = EnumVal.extOrTrunc(Context.getIntWidth(EltTy)); 10526 EnumVal.setIsSigned(EltTy->isSignedIntegerOrEnumerationType()); 10527 } 10528 10529 return EnumConstantDecl::Create(Context, Enum, IdLoc, Id, EltTy, 10530 Val, EnumVal); 10531 } 10532 10533 10534 Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst, 10535 SourceLocation IdLoc, IdentifierInfo *Id, 10536 AttributeList *Attr, 10537 SourceLocation EqualLoc, Expr *Val) { 10538 EnumDecl *TheEnumDecl = cast<EnumDecl>(theEnumDecl); 10539 EnumConstantDecl *LastEnumConst = 10540 cast_or_null<EnumConstantDecl>(lastEnumConst); 10541 10542 // The scope passed in may not be a decl scope. Zip up the scope tree until 10543 // we find one that is. 10544 S = getNonFieldDeclScope(S); 10545 10546 // Verify that there isn't already something declared with this name in this 10547 // scope. 10548 NamedDecl *PrevDecl = LookupSingleName(S, Id, IdLoc, LookupOrdinaryName, 10549 ForRedeclaration); 10550 if (PrevDecl && PrevDecl->isTemplateParameter()) { 10551 // Maybe we will complain about the shadowed template parameter. 10552 DiagnoseTemplateParameterShadow(IdLoc, PrevDecl); 10553 // Just pretend that we didn't see the previous declaration. 10554 PrevDecl = 0; 10555 } 10556 10557 if (PrevDecl) { 10558 // When in C++, we may get a TagDecl with the same name; in this case the 10559 // enum constant will 'hide' the tag. 10560 assert((getLangOpts().CPlusPlus || !isa<TagDecl>(PrevDecl)) && 10561 "Received TagDecl when not in C++!"); 10562 if (!isa<TagDecl>(PrevDecl) && isDeclInScope(PrevDecl, CurContext, S)) { 10563 if (isa<EnumConstantDecl>(PrevDecl)) 10564 Diag(IdLoc, diag::err_redefinition_of_enumerator) << Id; 10565 else 10566 Diag(IdLoc, diag::err_redefinition) << Id; 10567 Diag(PrevDecl->getLocation(), diag::note_previous_definition); 10568 return 0; 10569 } 10570 } 10571 10572 // C++ [class.mem]p15: 10573 // If T is the name of a class, then each of the following shall have a name 10574 // different from T: 10575 // - every enumerator of every member of class T that is an unscoped 10576 // enumerated type 10577 if (CXXRecordDecl *Record 10578 = dyn_cast<CXXRecordDecl>( 10579 TheEnumDecl->getDeclContext()->getRedeclContext())) 10580 if (!TheEnumDecl->isScoped() && 10581 Record->getIdentifier() && Record->getIdentifier() == Id) 10582 Diag(IdLoc, diag::err_member_name_of_class) << Id; 10583 10584 EnumConstantDecl *New = 10585 CheckEnumConstant(TheEnumDecl, LastEnumConst, IdLoc, Id, Val); 10586 10587 if (New) { 10588 // Process attributes. 10589 if (Attr) ProcessDeclAttributeList(S, New, Attr); 10590 10591 // Register this decl in the current scope stack. 10592 New->setAccess(TheEnumDecl->getAccess()); 10593 PushOnScopeChains(New, S); 10594 } 10595 10596 ActOnDocumentableDecl(New); 10597 10598 return New; 10599 } 10600 10601 void Sema::ActOnEnumBody(SourceLocation EnumLoc, SourceLocation LBraceLoc, 10602 SourceLocation RBraceLoc, Decl *EnumDeclX, 10603 Decl **Elements, unsigned NumElements, 10604 Scope *S, AttributeList *Attr) { 10605 EnumDecl *Enum = cast<EnumDecl>(EnumDeclX); 10606 QualType EnumType = Context.getTypeDeclType(Enum); 10607 10608 if (Attr) 10609 ProcessDeclAttributeList(S, Enum, Attr); 10610 10611 if (Enum->isDependentType()) { 10612 for (unsigned i = 0; i != NumElements; ++i) { 10613 EnumConstantDecl *ECD = 10614 cast_or_null<EnumConstantDecl>(Elements[i]); 10615 if (!ECD) continue; 10616 10617 ECD->setType(EnumType); 10618 } 10619 10620 Enum->completeDefinition(Context.DependentTy, Context.DependentTy, 0, 0); 10621 return; 10622 } 10623 10624 // TODO: If the result value doesn't fit in an int, it must be a long or long 10625 // long value. ISO C does not support this, but GCC does as an extension, 10626 // emit a warning. 10627 unsigned IntWidth = Context.getTargetInfo().getIntWidth(); 10628 unsigned CharWidth = Context.getTargetInfo().getCharWidth(); 10629 unsigned ShortWidth = Context.getTargetInfo().getShortWidth(); 10630 10631 // Verify that all the values are okay, compute the size of the values, and 10632 // reverse the list. 10633 unsigned NumNegativeBits = 0; 10634 unsigned NumPositiveBits = 0; 10635 10636 // Keep track of whether all elements have type int. 10637 bool AllElementsInt = true; 10638 10639 for (unsigned i = 0; i != NumElements; ++i) { 10640 EnumConstantDecl *ECD = 10641 cast_or_null<EnumConstantDecl>(Elements[i]); 10642 if (!ECD) continue; // Already issued a diagnostic. 10643 10644 const llvm::APSInt &InitVal = ECD->getInitVal(); 10645 10646 // Keep track of the size of positive and negative values. 10647 if (InitVal.isUnsigned() || InitVal.isNonNegative()) 10648 NumPositiveBits = std::max(NumPositiveBits, 10649 (unsigned)InitVal.getActiveBits()); 10650 else 10651 NumNegativeBits = std::max(NumNegativeBits, 10652 (unsigned)InitVal.getMinSignedBits()); 10653 10654 // Keep track of whether every enum element has type int (very commmon). 10655 if (AllElementsInt) 10656 AllElementsInt = ECD->getType() == Context.IntTy; 10657 } 10658 10659 // Figure out the type that should be used for this enum. 10660 QualType BestType; 10661 unsigned BestWidth; 10662 10663 // C++0x N3000 [conv.prom]p3: 10664 // An rvalue of an unscoped enumeration type whose underlying 10665 // type is not fixed can be converted to an rvalue of the first 10666 // of the following types that can represent all the values of 10667 // the enumeration: int, unsigned int, long int, unsigned long 10668 // int, long long int, or unsigned long long int. 10669 // C99 6.4.4.3p2: 10670 // An identifier declared as an enumeration constant has type int. 10671 // The C99 rule is modified by a gcc extension 10672 QualType BestPromotionType; 10673 10674 bool Packed = Enum->getAttr<PackedAttr>() ? true : false; 10675 // -fshort-enums is the equivalent to specifying the packed attribute on all 10676 // enum definitions. 10677 if (LangOpts.ShortEnums) 10678 Packed = true; 10679 10680 if (Enum->isFixed()) { 10681 BestType = Enum->getIntegerType(); 10682 if (BestType->isPromotableIntegerType()) 10683 BestPromotionType = Context.getPromotedIntegerType(BestType); 10684 else 10685 BestPromotionType = BestType; 10686 // We don't need to set BestWidth, because BestType is going to be the type 10687 // of the enumerators, but we do anyway because otherwise some compilers 10688 // warn that it might be used uninitialized. 10689 BestWidth = CharWidth; 10690 } 10691 else if (NumNegativeBits) { 10692 // If there is a negative value, figure out the smallest integer type (of 10693 // int/long/longlong) that fits. 10694 // If it's packed, check also if it fits a char or a short. 10695 if (Packed && NumNegativeBits <= CharWidth && NumPositiveBits < CharWidth) { 10696 BestType = Context.SignedCharTy; 10697 BestWidth = CharWidth; 10698 } else if (Packed && NumNegativeBits <= ShortWidth && 10699 NumPositiveBits < ShortWidth) { 10700 BestType = Context.ShortTy; 10701 BestWidth = ShortWidth; 10702 } else if (NumNegativeBits <= IntWidth && NumPositiveBits < IntWidth) { 10703 BestType = Context.IntTy; 10704 BestWidth = IntWidth; 10705 } else { 10706 BestWidth = Context.getTargetInfo().getLongWidth(); 10707 10708 if (NumNegativeBits <= BestWidth && NumPositiveBits < BestWidth) { 10709 BestType = Context.LongTy; 10710 } else { 10711 BestWidth = Context.getTargetInfo().getLongLongWidth(); 10712 10713 if (NumNegativeBits > BestWidth || NumPositiveBits >= BestWidth) 10714 Diag(Enum->getLocation(), diag::warn_enum_too_large); 10715 BestType = Context.LongLongTy; 10716 } 10717 } 10718 BestPromotionType = (BestWidth <= IntWidth ? Context.IntTy : BestType); 10719 } else { 10720 // If there is no negative value, figure out the smallest type that fits 10721 // all of the enumerator values. 10722 // If it's packed, check also if it fits a char or a short. 10723 if (Packed && NumPositiveBits <= CharWidth) { 10724 BestType = Context.UnsignedCharTy; 10725 BestPromotionType = Context.IntTy; 10726 BestWidth = CharWidth; 10727 } else if (Packed && NumPositiveBits <= ShortWidth) { 10728 BestType = Context.UnsignedShortTy; 10729 BestPromotionType = Context.IntTy; 10730 BestWidth = ShortWidth; 10731 } else if (NumPositiveBits <= IntWidth) { 10732 BestType = Context.UnsignedIntTy; 10733 BestWidth = IntWidth; 10734 BestPromotionType 10735 = (NumPositiveBits == BestWidth || !getLangOpts().CPlusPlus) 10736 ? Context.UnsignedIntTy : Context.IntTy; 10737 } else if (NumPositiveBits <= 10738 (BestWidth = Context.getTargetInfo().getLongWidth())) { 10739 BestType = Context.UnsignedLongTy; 10740 BestPromotionType 10741 = (NumPositiveBits == BestWidth || !getLangOpts().CPlusPlus) 10742 ? Context.UnsignedLongTy : Context.LongTy; 10743 } else { 10744 BestWidth = Context.getTargetInfo().getLongLongWidth(); 10745 assert(NumPositiveBits <= BestWidth && 10746 "How could an initializer get larger than ULL?"); 10747 BestType = Context.UnsignedLongLongTy; 10748 BestPromotionType 10749 = (NumPositiveBits == BestWidth || !getLangOpts().CPlusPlus) 10750 ? Context.UnsignedLongLongTy : Context.LongLongTy; 10751 } 10752 } 10753 10754 // Loop over all of the enumerator constants, changing their types to match 10755 // the type of the enum if needed. 10756 for (unsigned i = 0; i != NumElements; ++i) { 10757 EnumConstantDecl *ECD = cast_or_null<EnumConstantDecl>(Elements[i]); 10758 if (!ECD) continue; // Already issued a diagnostic. 10759 10760 // Standard C says the enumerators have int type, but we allow, as an 10761 // extension, the enumerators to be larger than int size. If each 10762 // enumerator value fits in an int, type it as an int, otherwise type it the 10763 // same as the enumerator decl itself. This means that in "enum { X = 1U }" 10764 // that X has type 'int', not 'unsigned'. 10765 10766 // Determine whether the value fits into an int. 10767 llvm::APSInt InitVal = ECD->getInitVal(); 10768 10769 // If it fits into an integer type, force it. Otherwise force it to match 10770 // the enum decl type. 10771 QualType NewTy; 10772 unsigned NewWidth; 10773 bool NewSign; 10774 if (!getLangOpts().CPlusPlus && 10775 !Enum->isFixed() && 10776 isRepresentableIntegerValue(Context, InitVal, Context.IntTy)) { 10777 NewTy = Context.IntTy; 10778 NewWidth = IntWidth; 10779 NewSign = true; 10780 } else if (ECD->getType() == BestType) { 10781 // Already the right type! 10782 if (getLangOpts().CPlusPlus) 10783 // C++ [dcl.enum]p4: Following the closing brace of an 10784 // enum-specifier, each enumerator has the type of its 10785 // enumeration. 10786 ECD->setType(EnumType); 10787 continue; 10788 } else { 10789 NewTy = BestType; 10790 NewWidth = BestWidth; 10791 NewSign = BestType->isSignedIntegerOrEnumerationType(); 10792 } 10793 10794 // Adjust the APSInt value. 10795 InitVal = InitVal.extOrTrunc(NewWidth); 10796 InitVal.setIsSigned(NewSign); 10797 ECD->setInitVal(InitVal); 10798 10799 // Adjust the Expr initializer and type. 10800 if (ECD->getInitExpr() && 10801 !Context.hasSameType(NewTy, ECD->getInitExpr()->getType())) 10802 ECD->setInitExpr(ImplicitCastExpr::Create(Context, NewTy, 10803 CK_IntegralCast, 10804 ECD->getInitExpr(), 10805 /*base paths*/ 0, 10806 VK_RValue)); 10807 if (getLangOpts().CPlusPlus) 10808 // C++ [dcl.enum]p4: Following the closing brace of an 10809 // enum-specifier, each enumerator has the type of its 10810 // enumeration. 10811 ECD->setType(EnumType); 10812 else 10813 ECD->setType(NewTy); 10814 } 10815 10816 Enum->completeDefinition(BestType, BestPromotionType, 10817 NumPositiveBits, NumNegativeBits); 10818 10819 // If we're declaring a function, ensure this decl isn't forgotten about - 10820 // it needs to go into the function scope. 10821 if (InFunctionDeclarator) 10822 DeclsInPrototypeScope.push_back(Enum); 10823 } 10824 10825 Decl *Sema::ActOnFileScopeAsmDecl(Expr *expr, 10826 SourceLocation StartLoc, 10827 SourceLocation EndLoc) { 10828 StringLiteral *AsmString = cast<StringLiteral>(expr); 10829 10830 FileScopeAsmDecl *New = FileScopeAsmDecl::Create(Context, CurContext, 10831 AsmString, StartLoc, 10832 EndLoc); 10833 CurContext->addDecl(New); 10834 return New; 10835 } 10836 10837 DeclResult Sema::ActOnModuleImport(SourceLocation AtLoc, 10838 SourceLocation ImportLoc, 10839 ModuleIdPath Path) { 10840 Module *Mod = PP.getModuleLoader().loadModule(ImportLoc, Path, 10841 Module::AllVisible, 10842 /*IsIncludeDirective=*/false); 10843 if (!Mod) 10844 return true; 10845 10846 llvm::SmallVector<SourceLocation, 2> IdentifierLocs; 10847 Module *ModCheck = Mod; 10848 for (unsigned I = 0, N = Path.size(); I != N; ++I) { 10849 // If we've run out of module parents, just drop the remaining identifiers. 10850 // We need the length to be consistent. 10851 if (!ModCheck) 10852 break; 10853 ModCheck = ModCheck->Parent; 10854 10855 IdentifierLocs.push_back(Path[I].second); 10856 } 10857 10858 ImportDecl *Import = ImportDecl::Create(Context, 10859 Context.getTranslationUnitDecl(), 10860 AtLoc.isValid()? AtLoc : ImportLoc, 10861 Mod, IdentifierLocs); 10862 Context.getTranslationUnitDecl()->addDecl(Import); 10863 return Import; 10864 } 10865 10866 void Sema::ActOnPragmaRedefineExtname(IdentifierInfo* Name, 10867 IdentifierInfo* AliasName, 10868 SourceLocation PragmaLoc, 10869 SourceLocation NameLoc, 10870 SourceLocation AliasNameLoc) { 10871 Decl *PrevDecl = LookupSingleName(TUScope, Name, NameLoc, 10872 LookupOrdinaryName); 10873 AsmLabelAttr *Attr = 10874 ::new (Context) AsmLabelAttr(AliasNameLoc, Context, AliasName->getName()); 10875 10876 if (PrevDecl) 10877 PrevDecl->addAttr(Attr); 10878 else 10879 (void)ExtnameUndeclaredIdentifiers.insert( 10880 std::pair<IdentifierInfo*,AsmLabelAttr*>(Name, Attr)); 10881 } 10882 10883 void Sema::ActOnPragmaWeakID(IdentifierInfo* Name, 10884 SourceLocation PragmaLoc, 10885 SourceLocation NameLoc) { 10886 Decl *PrevDecl = LookupSingleName(TUScope, Name, NameLoc, LookupOrdinaryName); 10887 10888 if (PrevDecl) { 10889 PrevDecl->addAttr(::new (Context) WeakAttr(PragmaLoc, Context)); 10890 } else { 10891 (void)WeakUndeclaredIdentifiers.insert( 10892 std::pair<IdentifierInfo*,WeakInfo> 10893 (Name, WeakInfo((IdentifierInfo*)0, NameLoc))); 10894 } 10895 } 10896 10897 void Sema::ActOnPragmaWeakAlias(IdentifierInfo* Name, 10898 IdentifierInfo* AliasName, 10899 SourceLocation PragmaLoc, 10900 SourceLocation NameLoc, 10901 SourceLocation AliasNameLoc) { 10902 Decl *PrevDecl = LookupSingleName(TUScope, AliasName, AliasNameLoc, 10903 LookupOrdinaryName); 10904 WeakInfo W = WeakInfo(Name, NameLoc); 10905 10906 if (PrevDecl) { 10907 if (!PrevDecl->hasAttr<AliasAttr>()) 10908 if (NamedDecl *ND = dyn_cast<NamedDecl>(PrevDecl)) 10909 DeclApplyPragmaWeak(TUScope, ND, W); 10910 } else { 10911 (void)WeakUndeclaredIdentifiers.insert( 10912 std::pair<IdentifierInfo*,WeakInfo>(AliasName, W)); 10913 } 10914 } 10915 10916 Decl *Sema::getObjCDeclContext() const { 10917 return (dyn_cast_or_null<ObjCContainerDecl>(CurContext)); 10918 } 10919 10920 AvailabilityResult Sema::getCurContextAvailability() const { 10921 const Decl *D = cast<Decl>(getCurObjCLexicalContext()); 10922 return D->getAvailability(); 10923 } 10924