SemaTemplateInstantiate.cpp revision ab1f1819386bd718899582eb6426b2619b11e2cf
1//===------- SemaTemplateInstantiate.cpp - C++ Template Instantiation ------===/ 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// This file implements C++ template instantiation. 10// 11//===----------------------------------------------------------------------===/ 12 13#include "Sema.h" 14#include "TreeTransform.h" 15#include "Lookup.h" 16#include "clang/AST/ASTConsumer.h" 17#include "clang/AST/ASTContext.h" 18#include "clang/AST/Expr.h" 19#include "clang/AST/DeclTemplate.h" 20#include "clang/Parse/DeclSpec.h" 21#include "clang/Basic/LangOptions.h" 22 23using namespace clang; 24 25//===----------------------------------------------------------------------===/ 26// Template Instantiation Support 27//===----------------------------------------------------------------------===/ 28 29/// \brief Retrieve the template argument list(s) that should be used to 30/// instantiate the definition of the given declaration. 31/// 32/// \param D the declaration for which we are computing template instantiation 33/// arguments. 34/// 35/// \param Innermost if non-NULL, the innermost template argument list. 36/// 37/// \param RelativeToPrimary true if we should get the template 38/// arguments relative to the primary template, even when we're 39/// dealing with a specialization. This is only relevant for function 40/// template specializations. 41/// 42/// \param Pattern If non-NULL, indicates the pattern from which we will be 43/// instantiating the definition of the given declaration, \p D. This is 44/// used to determine the proper set of template instantiation arguments for 45/// friend function template specializations. 46MultiLevelTemplateArgumentList 47Sema::getTemplateInstantiationArgs(NamedDecl *D, 48 const TemplateArgumentList *Innermost, 49 bool RelativeToPrimary, 50 const FunctionDecl *Pattern) { 51 // Accumulate the set of template argument lists in this structure. 52 MultiLevelTemplateArgumentList Result; 53 54 if (Innermost) 55 Result.addOuterTemplateArguments(Innermost); 56 57 DeclContext *Ctx = dyn_cast<DeclContext>(D); 58 if (!Ctx) 59 Ctx = D->getDeclContext(); 60 61 while (!Ctx->isFileContext()) { 62 // Add template arguments from a class template instantiation. 63 if (ClassTemplateSpecializationDecl *Spec 64 = dyn_cast<ClassTemplateSpecializationDecl>(Ctx)) { 65 // We're done when we hit an explicit specialization. 66 if (Spec->getSpecializationKind() == TSK_ExplicitSpecialization) 67 break; 68 69 Result.addOuterTemplateArguments(&Spec->getTemplateInstantiationArgs()); 70 71 // If this class template specialization was instantiated from a 72 // specialized member that is a class template, we're done. 73 assert(Spec->getSpecializedTemplate() && "No class template?"); 74 if (Spec->getSpecializedTemplate()->isMemberSpecialization()) 75 break; 76 } 77 // Add template arguments from a function template specialization. 78 else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(Ctx)) { 79 if (!RelativeToPrimary && 80 Function->getTemplateSpecializationKind() 81 == TSK_ExplicitSpecialization) 82 break; 83 84 if (const TemplateArgumentList *TemplateArgs 85 = Function->getTemplateSpecializationArgs()) { 86 // Add the template arguments for this specialization. 87 Result.addOuterTemplateArguments(TemplateArgs); 88 89 // If this function was instantiated from a specialized member that is 90 // a function template, we're done. 91 assert(Function->getPrimaryTemplate() && "No function template?"); 92 if (Function->getPrimaryTemplate()->isMemberSpecialization()) 93 break; 94 } 95 96 // If this is a friend declaration and it declares an entity at 97 // namespace scope, take arguments from its lexical parent 98 // instead of its semantic parent, unless of course the pattern we're 99 // instantiating actually comes from the file's context! 100 if (Function->getFriendObjectKind() && 101 Function->getDeclContext()->isFileContext() && 102 (!Pattern || !Pattern->getLexicalDeclContext()->isFileContext())) { 103 Ctx = Function->getLexicalDeclContext(); 104 RelativeToPrimary = false; 105 continue; 106 } 107 } 108 109 Ctx = Ctx->getParent(); 110 RelativeToPrimary = false; 111 } 112 113 return Result; 114} 115 116bool Sema::ActiveTemplateInstantiation::isInstantiationRecord() const { 117 switch (Kind) { 118 case TemplateInstantiation: 119 case DefaultTemplateArgumentInstantiation: 120 case DefaultFunctionArgumentInstantiation: 121 return true; 122 123 case ExplicitTemplateArgumentSubstitution: 124 case DeducedTemplateArgumentSubstitution: 125 case PriorTemplateArgumentSubstitution: 126 case DefaultTemplateArgumentChecking: 127 return false; 128 } 129 130 return true; 131} 132 133Sema::InstantiatingTemplate:: 134InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 135 Decl *Entity, 136 SourceRange InstantiationRange) 137 : SemaRef(SemaRef) { 138 139 Invalid = CheckInstantiationDepth(PointOfInstantiation, 140 InstantiationRange); 141 if (!Invalid) { 142 ActiveTemplateInstantiation Inst; 143 Inst.Kind = ActiveTemplateInstantiation::TemplateInstantiation; 144 Inst.PointOfInstantiation = PointOfInstantiation; 145 Inst.Entity = reinterpret_cast<uintptr_t>(Entity); 146 Inst.TemplateArgs = 0; 147 Inst.NumTemplateArgs = 0; 148 Inst.InstantiationRange = InstantiationRange; 149 SemaRef.ActiveTemplateInstantiations.push_back(Inst); 150 } 151} 152 153Sema::InstantiatingTemplate::InstantiatingTemplate(Sema &SemaRef, 154 SourceLocation PointOfInstantiation, 155 TemplateDecl *Template, 156 const TemplateArgument *TemplateArgs, 157 unsigned NumTemplateArgs, 158 SourceRange InstantiationRange) 159 : SemaRef(SemaRef) { 160 161 Invalid = CheckInstantiationDepth(PointOfInstantiation, 162 InstantiationRange); 163 if (!Invalid) { 164 ActiveTemplateInstantiation Inst; 165 Inst.Kind 166 = ActiveTemplateInstantiation::DefaultTemplateArgumentInstantiation; 167 Inst.PointOfInstantiation = PointOfInstantiation; 168 Inst.Entity = reinterpret_cast<uintptr_t>(Template); 169 Inst.TemplateArgs = TemplateArgs; 170 Inst.NumTemplateArgs = NumTemplateArgs; 171 Inst.InstantiationRange = InstantiationRange; 172 SemaRef.ActiveTemplateInstantiations.push_back(Inst); 173 } 174} 175 176Sema::InstantiatingTemplate::InstantiatingTemplate(Sema &SemaRef, 177 SourceLocation PointOfInstantiation, 178 FunctionTemplateDecl *FunctionTemplate, 179 const TemplateArgument *TemplateArgs, 180 unsigned NumTemplateArgs, 181 ActiveTemplateInstantiation::InstantiationKind Kind, 182 SourceRange InstantiationRange) 183: SemaRef(SemaRef) { 184 185 Invalid = CheckInstantiationDepth(PointOfInstantiation, 186 InstantiationRange); 187 if (!Invalid) { 188 ActiveTemplateInstantiation Inst; 189 Inst.Kind = Kind; 190 Inst.PointOfInstantiation = PointOfInstantiation; 191 Inst.Entity = reinterpret_cast<uintptr_t>(FunctionTemplate); 192 Inst.TemplateArgs = TemplateArgs; 193 Inst.NumTemplateArgs = NumTemplateArgs; 194 Inst.InstantiationRange = InstantiationRange; 195 SemaRef.ActiveTemplateInstantiations.push_back(Inst); 196 197 if (!Inst.isInstantiationRecord()) 198 ++SemaRef.NonInstantiationEntries; 199 } 200} 201 202Sema::InstantiatingTemplate::InstantiatingTemplate(Sema &SemaRef, 203 SourceLocation PointOfInstantiation, 204 ClassTemplatePartialSpecializationDecl *PartialSpec, 205 const TemplateArgument *TemplateArgs, 206 unsigned NumTemplateArgs, 207 SourceRange InstantiationRange) 208 : SemaRef(SemaRef) { 209 210 Invalid = false; 211 212 ActiveTemplateInstantiation Inst; 213 Inst.Kind = ActiveTemplateInstantiation::DeducedTemplateArgumentSubstitution; 214 Inst.PointOfInstantiation = PointOfInstantiation; 215 Inst.Entity = reinterpret_cast<uintptr_t>(PartialSpec); 216 Inst.TemplateArgs = TemplateArgs; 217 Inst.NumTemplateArgs = NumTemplateArgs; 218 Inst.InstantiationRange = InstantiationRange; 219 SemaRef.ActiveTemplateInstantiations.push_back(Inst); 220 221 assert(!Inst.isInstantiationRecord()); 222 ++SemaRef.NonInstantiationEntries; 223} 224 225Sema::InstantiatingTemplate::InstantiatingTemplate(Sema &SemaRef, 226 SourceLocation PointOfInstantiation, 227 ParmVarDecl *Param, 228 const TemplateArgument *TemplateArgs, 229 unsigned NumTemplateArgs, 230 SourceRange InstantiationRange) 231 : SemaRef(SemaRef) { 232 233 Invalid = CheckInstantiationDepth(PointOfInstantiation, InstantiationRange); 234 235 if (!Invalid) { 236 ActiveTemplateInstantiation Inst; 237 Inst.Kind 238 = ActiveTemplateInstantiation::DefaultFunctionArgumentInstantiation; 239 Inst.PointOfInstantiation = PointOfInstantiation; 240 Inst.Entity = reinterpret_cast<uintptr_t>(Param); 241 Inst.TemplateArgs = TemplateArgs; 242 Inst.NumTemplateArgs = NumTemplateArgs; 243 Inst.InstantiationRange = InstantiationRange; 244 SemaRef.ActiveTemplateInstantiations.push_back(Inst); 245 } 246} 247 248Sema::InstantiatingTemplate:: 249InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 250 TemplateDecl *Template, 251 NonTypeTemplateParmDecl *Param, 252 const TemplateArgument *TemplateArgs, 253 unsigned NumTemplateArgs, 254 SourceRange InstantiationRange) : SemaRef(SemaRef) { 255 Invalid = false; 256 257 ActiveTemplateInstantiation Inst; 258 Inst.Kind = ActiveTemplateInstantiation::PriorTemplateArgumentSubstitution; 259 Inst.PointOfInstantiation = PointOfInstantiation; 260 Inst.Template = Template; 261 Inst.Entity = reinterpret_cast<uintptr_t>(Param); 262 Inst.TemplateArgs = TemplateArgs; 263 Inst.NumTemplateArgs = NumTemplateArgs; 264 Inst.InstantiationRange = InstantiationRange; 265 SemaRef.ActiveTemplateInstantiations.push_back(Inst); 266 267 assert(!Inst.isInstantiationRecord()); 268 ++SemaRef.NonInstantiationEntries; 269} 270 271Sema::InstantiatingTemplate:: 272InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 273 TemplateDecl *Template, 274 TemplateTemplateParmDecl *Param, 275 const TemplateArgument *TemplateArgs, 276 unsigned NumTemplateArgs, 277 SourceRange InstantiationRange) : SemaRef(SemaRef) { 278 Invalid = false; 279 ActiveTemplateInstantiation Inst; 280 Inst.Kind = ActiveTemplateInstantiation::PriorTemplateArgumentSubstitution; 281 Inst.PointOfInstantiation = PointOfInstantiation; 282 Inst.Template = Template; 283 Inst.Entity = reinterpret_cast<uintptr_t>(Param); 284 Inst.TemplateArgs = TemplateArgs; 285 Inst.NumTemplateArgs = NumTemplateArgs; 286 Inst.InstantiationRange = InstantiationRange; 287 SemaRef.ActiveTemplateInstantiations.push_back(Inst); 288 289 assert(!Inst.isInstantiationRecord()); 290 ++SemaRef.NonInstantiationEntries; 291} 292 293Sema::InstantiatingTemplate:: 294InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation, 295 TemplateDecl *Template, 296 NamedDecl *Param, 297 const TemplateArgument *TemplateArgs, 298 unsigned NumTemplateArgs, 299 SourceRange InstantiationRange) : SemaRef(SemaRef) { 300 Invalid = false; 301 302 ActiveTemplateInstantiation Inst; 303 Inst.Kind = ActiveTemplateInstantiation::DefaultTemplateArgumentChecking; 304 Inst.PointOfInstantiation = PointOfInstantiation; 305 Inst.Template = Template; 306 Inst.Entity = reinterpret_cast<uintptr_t>(Param); 307 Inst.TemplateArgs = TemplateArgs; 308 Inst.NumTemplateArgs = NumTemplateArgs; 309 Inst.InstantiationRange = InstantiationRange; 310 SemaRef.ActiveTemplateInstantiations.push_back(Inst); 311 312 assert(!Inst.isInstantiationRecord()); 313 ++SemaRef.NonInstantiationEntries; 314} 315 316void Sema::InstantiatingTemplate::Clear() { 317 if (!Invalid) { 318 if (!SemaRef.ActiveTemplateInstantiations.back().isInstantiationRecord()) { 319 assert(SemaRef.NonInstantiationEntries > 0); 320 --SemaRef.NonInstantiationEntries; 321 } 322 323 SemaRef.ActiveTemplateInstantiations.pop_back(); 324 Invalid = true; 325 } 326} 327 328bool Sema::InstantiatingTemplate::CheckInstantiationDepth( 329 SourceLocation PointOfInstantiation, 330 SourceRange InstantiationRange) { 331 assert(SemaRef.NonInstantiationEntries <= 332 SemaRef.ActiveTemplateInstantiations.size()); 333 if ((SemaRef.ActiveTemplateInstantiations.size() - 334 SemaRef.NonInstantiationEntries) 335 <= SemaRef.getLangOptions().InstantiationDepth) 336 return false; 337 338 SemaRef.Diag(PointOfInstantiation, 339 diag::err_template_recursion_depth_exceeded) 340 << SemaRef.getLangOptions().InstantiationDepth 341 << InstantiationRange; 342 SemaRef.Diag(PointOfInstantiation, diag::note_template_recursion_depth) 343 << SemaRef.getLangOptions().InstantiationDepth; 344 return true; 345} 346 347/// \brief Prints the current instantiation stack through a series of 348/// notes. 349void Sema::PrintInstantiationStack() { 350 // Determine which template instantiations to skip, if any. 351 unsigned SkipStart = ActiveTemplateInstantiations.size(), SkipEnd = SkipStart; 352 unsigned Limit = Diags.getTemplateBacktraceLimit(); 353 if (Limit && Limit < ActiveTemplateInstantiations.size()) { 354 SkipStart = Limit / 2 + Limit % 2; 355 SkipEnd = ActiveTemplateInstantiations.size() - Limit / 2; 356 } 357 358 // FIXME: In all of these cases, we need to show the template arguments 359 unsigned InstantiationIdx = 0; 360 for (llvm::SmallVector<ActiveTemplateInstantiation, 16>::reverse_iterator 361 Active = ActiveTemplateInstantiations.rbegin(), 362 ActiveEnd = ActiveTemplateInstantiations.rend(); 363 Active != ActiveEnd; 364 ++Active, ++InstantiationIdx) { 365 // Skip this instantiation? 366 if (InstantiationIdx >= SkipStart && InstantiationIdx < SkipEnd) { 367 if (InstantiationIdx == SkipStart) { 368 // Note that we're skipping instantiations. 369 Diags.Report(FullSourceLoc(Active->PointOfInstantiation, SourceMgr), 370 diag::note_instantiation_contexts_suppressed) 371 << unsigned(ActiveTemplateInstantiations.size() - Limit); 372 } 373 continue; 374 } 375 376 switch (Active->Kind) { 377 case ActiveTemplateInstantiation::TemplateInstantiation: { 378 Decl *D = reinterpret_cast<Decl *>(Active->Entity); 379 if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) { 380 unsigned DiagID = diag::note_template_member_class_here; 381 if (isa<ClassTemplateSpecializationDecl>(Record)) 382 DiagID = diag::note_template_class_instantiation_here; 383 Diags.Report(FullSourceLoc(Active->PointOfInstantiation, SourceMgr), 384 DiagID) 385 << Context.getTypeDeclType(Record) 386 << Active->InstantiationRange; 387 } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) { 388 unsigned DiagID; 389 if (Function->getPrimaryTemplate()) 390 DiagID = diag::note_function_template_spec_here; 391 else 392 DiagID = diag::note_template_member_function_here; 393 Diags.Report(FullSourceLoc(Active->PointOfInstantiation, SourceMgr), 394 DiagID) 395 << Function 396 << Active->InstantiationRange; 397 } else { 398 Diags.Report(FullSourceLoc(Active->PointOfInstantiation, SourceMgr), 399 diag::note_template_static_data_member_def_here) 400 << cast<VarDecl>(D) 401 << Active->InstantiationRange; 402 } 403 break; 404 } 405 406 case ActiveTemplateInstantiation::DefaultTemplateArgumentInstantiation: { 407 TemplateDecl *Template = cast<TemplateDecl>((Decl *)Active->Entity); 408 std::string TemplateArgsStr 409 = TemplateSpecializationType::PrintTemplateArgumentList( 410 Active->TemplateArgs, 411 Active->NumTemplateArgs, 412 Context.PrintingPolicy); 413 Diags.Report(FullSourceLoc(Active->PointOfInstantiation, SourceMgr), 414 diag::note_default_arg_instantiation_here) 415 << (Template->getNameAsString() + TemplateArgsStr) 416 << Active->InstantiationRange; 417 break; 418 } 419 420 case ActiveTemplateInstantiation::ExplicitTemplateArgumentSubstitution: { 421 FunctionTemplateDecl *FnTmpl 422 = cast<FunctionTemplateDecl>((Decl *)Active->Entity); 423 Diags.Report(FullSourceLoc(Active->PointOfInstantiation, SourceMgr), 424 diag::note_explicit_template_arg_substitution_here) 425 << FnTmpl 426 << getTemplateArgumentBindingsText(FnTmpl->getTemplateParameters(), 427 Active->TemplateArgs, 428 Active->NumTemplateArgs) 429 << Active->InstantiationRange; 430 break; 431 } 432 433 case ActiveTemplateInstantiation::DeducedTemplateArgumentSubstitution: 434 if (ClassTemplatePartialSpecializationDecl *PartialSpec 435 = dyn_cast<ClassTemplatePartialSpecializationDecl>( 436 (Decl *)Active->Entity)) { 437 Diags.Report(FullSourceLoc(Active->PointOfInstantiation, SourceMgr), 438 diag::note_partial_spec_deduct_instantiation_here) 439 << Context.getTypeDeclType(PartialSpec) 440 << getTemplateArgumentBindingsText( 441 PartialSpec->getTemplateParameters(), 442 Active->TemplateArgs, 443 Active->NumTemplateArgs) 444 << Active->InstantiationRange; 445 } else { 446 FunctionTemplateDecl *FnTmpl 447 = cast<FunctionTemplateDecl>((Decl *)Active->Entity); 448 Diags.Report(FullSourceLoc(Active->PointOfInstantiation, SourceMgr), 449 diag::note_function_template_deduction_instantiation_here) 450 << FnTmpl 451 << getTemplateArgumentBindingsText(FnTmpl->getTemplateParameters(), 452 Active->TemplateArgs, 453 Active->NumTemplateArgs) 454 << Active->InstantiationRange; 455 } 456 break; 457 458 case ActiveTemplateInstantiation::DefaultFunctionArgumentInstantiation: { 459 ParmVarDecl *Param = cast<ParmVarDecl>((Decl *)Active->Entity); 460 FunctionDecl *FD = cast<FunctionDecl>(Param->getDeclContext()); 461 462 std::string TemplateArgsStr 463 = TemplateSpecializationType::PrintTemplateArgumentList( 464 Active->TemplateArgs, 465 Active->NumTemplateArgs, 466 Context.PrintingPolicy); 467 Diags.Report(FullSourceLoc(Active->PointOfInstantiation, SourceMgr), 468 diag::note_default_function_arg_instantiation_here) 469 << (FD->getNameAsString() + TemplateArgsStr) 470 << Active->InstantiationRange; 471 break; 472 } 473 474 case ActiveTemplateInstantiation::PriorTemplateArgumentSubstitution: { 475 NamedDecl *Parm = cast<NamedDecl>((Decl *)Active->Entity); 476 std::string Name; 477 if (!Parm->getName().empty()) 478 Name = std::string(" '") + Parm->getName().str() + "'"; 479 480 Diags.Report(FullSourceLoc(Active->PointOfInstantiation, SourceMgr), 481 diag::note_prior_template_arg_substitution) 482 << isa<TemplateTemplateParmDecl>(Parm) 483 << Name 484 << getTemplateArgumentBindingsText( 485 Active->Template->getTemplateParameters(), 486 Active->TemplateArgs, 487 Active->NumTemplateArgs) 488 << Active->InstantiationRange; 489 break; 490 } 491 492 case ActiveTemplateInstantiation::DefaultTemplateArgumentChecking: { 493 Diags.Report(FullSourceLoc(Active->PointOfInstantiation, SourceMgr), 494 diag::note_template_default_arg_checking) 495 << getTemplateArgumentBindingsText( 496 Active->Template->getTemplateParameters(), 497 Active->TemplateArgs, 498 Active->NumTemplateArgs) 499 << Active->InstantiationRange; 500 break; 501 } 502 } 503 } 504} 505 506bool Sema::isSFINAEContext() const { 507 using llvm::SmallVector; 508 for (SmallVector<ActiveTemplateInstantiation, 16>::const_reverse_iterator 509 Active = ActiveTemplateInstantiations.rbegin(), 510 ActiveEnd = ActiveTemplateInstantiations.rend(); 511 Active != ActiveEnd; 512 ++Active) 513 { 514 switch(Active->Kind) { 515 case ActiveTemplateInstantiation::TemplateInstantiation: 516 case ActiveTemplateInstantiation::DefaultFunctionArgumentInstantiation: 517 // This is a template instantiation, so there is no SFINAE. 518 return false; 519 520 case ActiveTemplateInstantiation::DefaultTemplateArgumentInstantiation: 521 case ActiveTemplateInstantiation::PriorTemplateArgumentSubstitution: 522 case ActiveTemplateInstantiation::DefaultTemplateArgumentChecking: 523 // A default template argument instantiation and substitution into 524 // template parameters with arguments for prior parameters may or may 525 // not be a SFINAE context; look further up the stack. 526 break; 527 528 case ActiveTemplateInstantiation::ExplicitTemplateArgumentSubstitution: 529 case ActiveTemplateInstantiation::DeducedTemplateArgumentSubstitution: 530 // We're either substitution explicitly-specified template arguments 531 // or deduced template arguments, so SFINAE applies. 532 return true; 533 } 534 } 535 536 return false; 537} 538 539//===----------------------------------------------------------------------===/ 540// Template Instantiation for Types 541//===----------------------------------------------------------------------===/ 542namespace { 543 class TemplateInstantiator : public TreeTransform<TemplateInstantiator> { 544 const MultiLevelTemplateArgumentList &TemplateArgs; 545 SourceLocation Loc; 546 DeclarationName Entity; 547 548 public: 549 typedef TreeTransform<TemplateInstantiator> inherited; 550 551 TemplateInstantiator(Sema &SemaRef, 552 const MultiLevelTemplateArgumentList &TemplateArgs, 553 SourceLocation Loc, 554 DeclarationName Entity) 555 : inherited(SemaRef), TemplateArgs(TemplateArgs), Loc(Loc), 556 Entity(Entity) { } 557 558 /// \brief Determine whether the given type \p T has already been 559 /// transformed. 560 /// 561 /// For the purposes of template instantiation, a type has already been 562 /// transformed if it is NULL or if it is not dependent. 563 bool AlreadyTransformed(QualType T); 564 565 /// \brief Returns the location of the entity being instantiated, if known. 566 SourceLocation getBaseLocation() { return Loc; } 567 568 /// \brief Returns the name of the entity being instantiated, if any. 569 DeclarationName getBaseEntity() { return Entity; } 570 571 /// \brief Sets the "base" location and entity when that 572 /// information is known based on another transformation. 573 void setBase(SourceLocation Loc, DeclarationName Entity) { 574 this->Loc = Loc; 575 this->Entity = Entity; 576 } 577 578 /// \brief Transform the given declaration by instantiating a reference to 579 /// this declaration. 580 Decl *TransformDecl(SourceLocation Loc, Decl *D); 581 582 /// \brief Transform the definition of the given declaration by 583 /// instantiating it. 584 Decl *TransformDefinition(SourceLocation Loc, Decl *D); 585 586 /// \bried Transform the first qualifier within a scope by instantiating the 587 /// declaration. 588 NamedDecl *TransformFirstQualifierInScope(NamedDecl *D, SourceLocation Loc); 589 590 /// \brief Rebuild the exception declaration and register the declaration 591 /// as an instantiated local. 592 VarDecl *RebuildExceptionDecl(VarDecl *ExceptionDecl, QualType T, 593 TypeSourceInfo *Declarator, 594 IdentifierInfo *Name, 595 SourceLocation Loc, SourceRange TypeRange); 596 597 /// \brief Rebuild the Objective-C exception declaration and register the 598 /// declaration as an instantiated local. 599 VarDecl *RebuildObjCExceptionDecl(VarDecl *ExceptionDecl, 600 TypeSourceInfo *TSInfo, QualType T); 601 602 /// \brief Check for tag mismatches when instantiating an 603 /// elaborated type. 604 QualType RebuildElaboratedType(ElaboratedTypeKeyword Keyword, 605 NestedNameSpecifier *NNS, QualType T); 606 607 Sema::OwningExprResult TransformPredefinedExpr(PredefinedExpr *E); 608 Sema::OwningExprResult TransformDeclRefExpr(DeclRefExpr *E); 609 Sema::OwningExprResult TransformCXXDefaultArgExpr(CXXDefaultArgExpr *E); 610 Sema::OwningExprResult TransformTemplateParmRefExpr(DeclRefExpr *E, 611 NonTypeTemplateParmDecl *D); 612 613 QualType TransformFunctionProtoType(TypeLocBuilder &TLB, 614 FunctionProtoTypeLoc TL, 615 QualType ObjectType); 616 ParmVarDecl *TransformFunctionTypeParam(ParmVarDecl *OldParm); 617 618 /// \brief Transforms a template type parameter type by performing 619 /// substitution of the corresponding template type argument. 620 QualType TransformTemplateTypeParmType(TypeLocBuilder &TLB, 621 TemplateTypeParmTypeLoc TL, 622 QualType ObjectType); 623 }; 624} 625 626bool TemplateInstantiator::AlreadyTransformed(QualType T) { 627 if (T.isNull()) 628 return true; 629 630 if (T->isDependentType()) 631 return false; 632 633 getSema().MarkDeclarationsReferencedInType(Loc, T); 634 return true; 635} 636 637Decl *TemplateInstantiator::TransformDecl(SourceLocation Loc, Decl *D) { 638 if (!D) 639 return 0; 640 641 if (TemplateTemplateParmDecl *TTP = dyn_cast<TemplateTemplateParmDecl>(D)) { 642 if (TTP->getDepth() < TemplateArgs.getNumLevels()) { 643 // If the corresponding template argument is NULL or non-existent, it's 644 // because we are performing instantiation from explicitly-specified 645 // template arguments in a function template, but there were some 646 // arguments left unspecified. 647 if (!TemplateArgs.hasTemplateArgument(TTP->getDepth(), 648 TTP->getPosition())) 649 return D; 650 651 TemplateName Template 652 = TemplateArgs(TTP->getDepth(), TTP->getPosition()).getAsTemplate(); 653 assert(!Template.isNull() && Template.getAsTemplateDecl() && 654 "Wrong kind of template template argument"); 655 return Template.getAsTemplateDecl(); 656 } 657 658 // Fall through to find the instantiated declaration for this template 659 // template parameter. 660 } 661 662 return SemaRef.FindInstantiatedDecl(Loc, cast<NamedDecl>(D), TemplateArgs); 663} 664 665Decl *TemplateInstantiator::TransformDefinition(SourceLocation Loc, Decl *D) { 666 Decl *Inst = getSema().SubstDecl(D, getSema().CurContext, TemplateArgs); 667 if (!Inst) 668 return 0; 669 670 getSema().CurrentInstantiationScope->InstantiatedLocal(D, Inst); 671 return Inst; 672} 673 674NamedDecl * 675TemplateInstantiator::TransformFirstQualifierInScope(NamedDecl *D, 676 SourceLocation Loc) { 677 // If the first part of the nested-name-specifier was a template type 678 // parameter, instantiate that type parameter down to a tag type. 679 if (TemplateTypeParmDecl *TTPD = dyn_cast_or_null<TemplateTypeParmDecl>(D)) { 680 const TemplateTypeParmType *TTP 681 = cast<TemplateTypeParmType>(getSema().Context.getTypeDeclType(TTPD)); 682 if (TTP->getDepth() < TemplateArgs.getNumLevels()) { 683 QualType T = TemplateArgs(TTP->getDepth(), TTP->getIndex()).getAsType(); 684 if (T.isNull()) 685 return cast_or_null<NamedDecl>(TransformDecl(Loc, D)); 686 687 if (const TagType *Tag = T->getAs<TagType>()) 688 return Tag->getDecl(); 689 690 // The resulting type is not a tag; complain. 691 getSema().Diag(Loc, diag::err_nested_name_spec_non_tag) << T; 692 return 0; 693 } 694 } 695 696 return cast_or_null<NamedDecl>(TransformDecl(Loc, D)); 697} 698 699VarDecl * 700TemplateInstantiator::RebuildExceptionDecl(VarDecl *ExceptionDecl, 701 QualType T, 702 TypeSourceInfo *Declarator, 703 IdentifierInfo *Name, 704 SourceLocation Loc, 705 SourceRange TypeRange) { 706 VarDecl *Var = inherited::RebuildExceptionDecl(ExceptionDecl, T, Declarator, 707 Name, Loc, TypeRange); 708 if (Var) 709 getSema().CurrentInstantiationScope->InstantiatedLocal(ExceptionDecl, Var); 710 return Var; 711} 712 713VarDecl *TemplateInstantiator::RebuildObjCExceptionDecl(VarDecl *ExceptionDecl, 714 TypeSourceInfo *TSInfo, 715 QualType T) { 716 VarDecl *Var = inherited::RebuildObjCExceptionDecl(ExceptionDecl, TSInfo, T); 717 if (Var) 718 getSema().CurrentInstantiationScope->InstantiatedLocal(ExceptionDecl, Var); 719 return Var; 720} 721 722QualType 723TemplateInstantiator::RebuildElaboratedType(ElaboratedTypeKeyword Keyword, 724 NestedNameSpecifier *NNS, 725 QualType T) { 726 if (const TagType *TT = T->getAs<TagType>()) { 727 TagDecl* TD = TT->getDecl(); 728 729 // FIXME: this location is very wrong; we really need typelocs. 730 SourceLocation TagLocation = TD->getTagKeywordLoc(); 731 732 // FIXME: type might be anonymous. 733 IdentifierInfo *Id = TD->getIdentifier(); 734 735 // TODO: should we even warn on struct/class mismatches for this? Seems 736 // like it's likely to produce a lot of spurious errors. 737 if (Keyword != ETK_None && Keyword != ETK_Typename) { 738 TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForKeyword(Keyword); 739 if (!SemaRef.isAcceptableTagRedeclaration(TD, Kind, TagLocation, *Id)) { 740 SemaRef.Diag(TagLocation, diag::err_use_with_wrong_tag) 741 << Id 742 << FixItHint::CreateReplacement(SourceRange(TagLocation), 743 TD->getKindName()); 744 SemaRef.Diag(TD->getLocation(), diag::note_previous_use); 745 } 746 } 747 } 748 749 return TreeTransform<TemplateInstantiator>::RebuildElaboratedType(Keyword, 750 NNS, T); 751} 752 753Sema::OwningExprResult 754TemplateInstantiator::TransformPredefinedExpr(PredefinedExpr *E) { 755 if (!E->isTypeDependent()) 756 return SemaRef.Owned(E->Retain()); 757 758 FunctionDecl *currentDecl = getSema().getCurFunctionDecl(); 759 assert(currentDecl && "Must have current function declaration when " 760 "instantiating."); 761 762 PredefinedExpr::IdentType IT = E->getIdentType(); 763 764 unsigned Length = PredefinedExpr::ComputeName(IT, currentDecl).length(); 765 766 llvm::APInt LengthI(32, Length + 1); 767 QualType ResTy = getSema().Context.CharTy.withConst(); 768 ResTy = getSema().Context.getConstantArrayType(ResTy, LengthI, 769 ArrayType::Normal, 0); 770 PredefinedExpr *PE = 771 new (getSema().Context) PredefinedExpr(E->getLocation(), ResTy, IT); 772 return getSema().Owned(PE); 773} 774 775Sema::OwningExprResult 776TemplateInstantiator::TransformTemplateParmRefExpr(DeclRefExpr *E, 777 NonTypeTemplateParmDecl *NTTP) { 778 // If the corresponding template argument is NULL or non-existent, it's 779 // because we are performing instantiation from explicitly-specified 780 // template arguments in a function template, but there were some 781 // arguments left unspecified. 782 if (!TemplateArgs.hasTemplateArgument(NTTP->getDepth(), 783 NTTP->getPosition())) 784 return SemaRef.Owned(E->Retain()); 785 786 const TemplateArgument &Arg = TemplateArgs(NTTP->getDepth(), 787 NTTP->getPosition()); 788 789 // The template argument itself might be an expression, in which 790 // case we just return that expression. 791 if (Arg.getKind() == TemplateArgument::Expression) 792 return SemaRef.Owned(Arg.getAsExpr()->Retain()); 793 794 if (Arg.getKind() == TemplateArgument::Declaration) { 795 ValueDecl *VD = cast<ValueDecl>(Arg.getAsDecl()); 796 797 // Find the instantiation of the template argument. This is 798 // required for nested templates. 799 VD = cast_or_null<ValueDecl>( 800 getSema().FindInstantiatedDecl(E->getLocation(), 801 VD, TemplateArgs)); 802 if (!VD) 803 return SemaRef.ExprError(); 804 805 // Derive the type we want the substituted decl to have. This had 806 // better be non-dependent, or these checks will have serious problems. 807 QualType TargetType = SemaRef.SubstType(NTTP->getType(), TemplateArgs, 808 E->getLocation(), 809 DeclarationName()); 810 assert(!TargetType.isNull() && "type substitution failed for param type"); 811 assert(!TargetType->isDependentType() && "param type still dependent"); 812 return SemaRef.BuildExpressionFromDeclTemplateArgument(Arg, 813 TargetType, 814 E->getLocation()); 815 } 816 817 return SemaRef.BuildExpressionFromIntegralTemplateArgument(Arg, 818 E->getSourceRange().getBegin()); 819} 820 821 822Sema::OwningExprResult 823TemplateInstantiator::TransformDeclRefExpr(DeclRefExpr *E) { 824 NamedDecl *D = E->getDecl(); 825 if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(D)) { 826 if (NTTP->getDepth() < TemplateArgs.getNumLevels()) 827 return TransformTemplateParmRefExpr(E, NTTP); 828 829 // We have a non-type template parameter that isn't fully substituted; 830 // FindInstantiatedDecl will find it in the local instantiation scope. 831 } 832 833 return TreeTransform<TemplateInstantiator>::TransformDeclRefExpr(E); 834} 835 836Sema::OwningExprResult TemplateInstantiator::TransformCXXDefaultArgExpr( 837 CXXDefaultArgExpr *E) { 838 assert(!cast<FunctionDecl>(E->getParam()->getDeclContext())-> 839 getDescribedFunctionTemplate() && 840 "Default arg expressions are never formed in dependent cases."); 841 return SemaRef.BuildCXXDefaultArgExpr(E->getUsedLocation(), 842 cast<FunctionDecl>(E->getParam()->getDeclContext()), 843 E->getParam()); 844} 845 846QualType TemplateInstantiator::TransformFunctionProtoType(TypeLocBuilder &TLB, 847 FunctionProtoTypeLoc TL, 848 QualType ObjectType) { 849 // We need a local instantiation scope for this function prototype. 850 Sema::LocalInstantiationScope Scope(SemaRef, /*CombineWithOuterScope=*/true); 851 return inherited::TransformFunctionProtoType(TLB, TL, ObjectType); 852} 853 854ParmVarDecl * 855TemplateInstantiator::TransformFunctionTypeParam(ParmVarDecl *OldParm) { 856 return SemaRef.SubstParmVarDecl(OldParm, TemplateArgs); 857} 858 859QualType 860TemplateInstantiator::TransformTemplateTypeParmType(TypeLocBuilder &TLB, 861 TemplateTypeParmTypeLoc TL, 862 QualType ObjectType) { 863 TemplateTypeParmType *T = TL.getTypePtr(); 864 if (T->getDepth() < TemplateArgs.getNumLevels()) { 865 // Replace the template type parameter with its corresponding 866 // template argument. 867 868 // If the corresponding template argument is NULL or doesn't exist, it's 869 // because we are performing instantiation from explicitly-specified 870 // template arguments in a function template class, but there were some 871 // arguments left unspecified. 872 if (!TemplateArgs.hasTemplateArgument(T->getDepth(), T->getIndex())) { 873 TemplateTypeParmTypeLoc NewTL 874 = TLB.push<TemplateTypeParmTypeLoc>(TL.getType()); 875 NewTL.setNameLoc(TL.getNameLoc()); 876 return TL.getType(); 877 } 878 879 assert(TemplateArgs(T->getDepth(), T->getIndex()).getKind() 880 == TemplateArgument::Type && 881 "Template argument kind mismatch"); 882 883 QualType Replacement 884 = TemplateArgs(T->getDepth(), T->getIndex()).getAsType(); 885 886 // TODO: only do this uniquing once, at the start of instantiation. 887 QualType Result 888 = getSema().Context.getSubstTemplateTypeParmType(T, Replacement); 889 SubstTemplateTypeParmTypeLoc NewTL 890 = TLB.push<SubstTemplateTypeParmTypeLoc>(Result); 891 NewTL.setNameLoc(TL.getNameLoc()); 892 return Result; 893 } 894 895 // The template type parameter comes from an inner template (e.g., 896 // the template parameter list of a member template inside the 897 // template we are instantiating). Create a new template type 898 // parameter with the template "level" reduced by one. 899 QualType Result 900 = getSema().Context.getTemplateTypeParmType(T->getDepth() 901 - TemplateArgs.getNumLevels(), 902 T->getIndex(), 903 T->isParameterPack(), 904 T->getName()); 905 TemplateTypeParmTypeLoc NewTL = TLB.push<TemplateTypeParmTypeLoc>(Result); 906 NewTL.setNameLoc(TL.getNameLoc()); 907 return Result; 908} 909 910/// \brief Perform substitution on the type T with a given set of template 911/// arguments. 912/// 913/// This routine substitutes the given template arguments into the 914/// type T and produces the instantiated type. 915/// 916/// \param T the type into which the template arguments will be 917/// substituted. If this type is not dependent, it will be returned 918/// immediately. 919/// 920/// \param TemplateArgs the template arguments that will be 921/// substituted for the top-level template parameters within T. 922/// 923/// \param Loc the location in the source code where this substitution 924/// is being performed. It will typically be the location of the 925/// declarator (if we're instantiating the type of some declaration) 926/// or the location of the type in the source code (if, e.g., we're 927/// instantiating the type of a cast expression). 928/// 929/// \param Entity the name of the entity associated with a declaration 930/// being instantiated (if any). May be empty to indicate that there 931/// is no such entity (if, e.g., this is a type that occurs as part of 932/// a cast expression) or that the entity has no name (e.g., an 933/// unnamed function parameter). 934/// 935/// \returns If the instantiation succeeds, the instantiated 936/// type. Otherwise, produces diagnostics and returns a NULL type. 937TypeSourceInfo *Sema::SubstType(TypeSourceInfo *T, 938 const MultiLevelTemplateArgumentList &Args, 939 SourceLocation Loc, 940 DeclarationName Entity) { 941 assert(!ActiveTemplateInstantiations.empty() && 942 "Cannot perform an instantiation without some context on the " 943 "instantiation stack"); 944 945 if (!T->getType()->isDependentType()) 946 return T; 947 948 TemplateInstantiator Instantiator(*this, Args, Loc, Entity); 949 return Instantiator.TransformType(T); 950} 951 952/// Deprecated form of the above. 953QualType Sema::SubstType(QualType T, 954 const MultiLevelTemplateArgumentList &TemplateArgs, 955 SourceLocation Loc, DeclarationName Entity) { 956 assert(!ActiveTemplateInstantiations.empty() && 957 "Cannot perform an instantiation without some context on the " 958 "instantiation stack"); 959 960 // If T is not a dependent type, there is nothing to do. 961 if (!T->isDependentType()) 962 return T; 963 964 TemplateInstantiator Instantiator(*this, TemplateArgs, Loc, Entity); 965 return Instantiator.TransformType(T); 966} 967 968static bool NeedsInstantiationAsFunctionType(TypeSourceInfo *T) { 969 if (T->getType()->isDependentType()) 970 return true; 971 972 TypeLoc TL = T->getTypeLoc(); 973 if (!isa<FunctionProtoTypeLoc>(TL)) 974 return false; 975 976 FunctionProtoTypeLoc FP = cast<FunctionProtoTypeLoc>(TL); 977 for (unsigned I = 0, E = FP.getNumArgs(); I != E; ++I) { 978 ParmVarDecl *P = FP.getArg(I); 979 980 // TODO: currently we always rebuild expressions. When we 981 // properly get lazier about this, we should use the same 982 // logic to avoid rebuilding prototypes here. 983 if (P->hasInit()) 984 return true; 985 } 986 987 return false; 988} 989 990/// A form of SubstType intended specifically for instantiating the 991/// type of a FunctionDecl. Its purpose is solely to force the 992/// instantiation of default-argument expressions. 993TypeSourceInfo *Sema::SubstFunctionDeclType(TypeSourceInfo *T, 994 const MultiLevelTemplateArgumentList &Args, 995 SourceLocation Loc, 996 DeclarationName Entity) { 997 assert(!ActiveTemplateInstantiations.empty() && 998 "Cannot perform an instantiation without some context on the " 999 "instantiation stack"); 1000 1001 if (!NeedsInstantiationAsFunctionType(T)) 1002 return T; 1003 1004 TemplateInstantiator Instantiator(*this, Args, Loc, Entity); 1005 1006 TypeLocBuilder TLB; 1007 1008 TypeLoc TL = T->getTypeLoc(); 1009 TLB.reserve(TL.getFullDataSize()); 1010 1011 QualType Result = Instantiator.TransformType(TLB, TL, QualType()); 1012 if (Result.isNull()) 1013 return 0; 1014 1015 return TLB.getTypeSourceInfo(Context, Result); 1016} 1017 1018ParmVarDecl *Sema::SubstParmVarDecl(ParmVarDecl *OldParm, 1019 const MultiLevelTemplateArgumentList &TemplateArgs) { 1020 TypeSourceInfo *OldDI = OldParm->getTypeSourceInfo(); 1021 TypeSourceInfo *NewDI = SubstType(OldDI, TemplateArgs, OldParm->getLocation(), 1022 OldParm->getDeclName()); 1023 if (!NewDI) 1024 return 0; 1025 1026 if (NewDI->getType()->isVoidType()) { 1027 Diag(OldParm->getLocation(), diag::err_param_with_void_type); 1028 return 0; 1029 } 1030 1031 ParmVarDecl *NewParm = CheckParameter(Context.getTranslationUnitDecl(), 1032 NewDI, NewDI->getType(), 1033 OldParm->getIdentifier(), 1034 OldParm->getLocation(), 1035 OldParm->getStorageClass(), 1036 OldParm->getStorageClassAsWritten()); 1037 if (!NewParm) 1038 return 0; 1039 1040 // Mark the (new) default argument as uninstantiated (if any). 1041 if (OldParm->hasUninstantiatedDefaultArg()) { 1042 Expr *Arg = OldParm->getUninstantiatedDefaultArg(); 1043 NewParm->setUninstantiatedDefaultArg(Arg); 1044 } else if (Expr *Arg = OldParm->getDefaultArg()) 1045 NewParm->setUninstantiatedDefaultArg(Arg); 1046 1047 NewParm->setHasInheritedDefaultArg(OldParm->hasInheritedDefaultArg()); 1048 1049 CurrentInstantiationScope->InstantiatedLocal(OldParm, NewParm); 1050 return NewParm; 1051} 1052 1053/// \brief Perform substitution on the base class specifiers of the 1054/// given class template specialization. 1055/// 1056/// Produces a diagnostic and returns true on error, returns false and 1057/// attaches the instantiated base classes to the class template 1058/// specialization if successful. 1059bool 1060Sema::SubstBaseSpecifiers(CXXRecordDecl *Instantiation, 1061 CXXRecordDecl *Pattern, 1062 const MultiLevelTemplateArgumentList &TemplateArgs) { 1063 bool Invalid = false; 1064 llvm::SmallVector<CXXBaseSpecifier*, 4> InstantiatedBases; 1065 for (ClassTemplateSpecializationDecl::base_class_iterator 1066 Base = Pattern->bases_begin(), BaseEnd = Pattern->bases_end(); 1067 Base != BaseEnd; ++Base) { 1068 if (!Base->getType()->isDependentType()) { 1069 const CXXRecordDecl *BaseDecl = 1070 cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl()); 1071 1072 // Make sure to set the attributes from the base. 1073 SetClassDeclAttributesFromBase(Instantiation, BaseDecl, 1074 Base->isVirtual()); 1075 1076 InstantiatedBases.push_back(new (Context) CXXBaseSpecifier(*Base)); 1077 continue; 1078 } 1079 1080 QualType BaseType = SubstType(Base->getType(), 1081 TemplateArgs, 1082 Base->getSourceRange().getBegin(), 1083 DeclarationName()); 1084 if (BaseType.isNull()) { 1085 Invalid = true; 1086 continue; 1087 } 1088 1089 if (CXXBaseSpecifier *InstantiatedBase 1090 = CheckBaseSpecifier(Instantiation, 1091 Base->getSourceRange(), 1092 Base->isVirtual(), 1093 Base->getAccessSpecifierAsWritten(), 1094 BaseType, 1095 /*FIXME: Not totally accurate */ 1096 Base->getSourceRange().getBegin())) 1097 InstantiatedBases.push_back(InstantiatedBase); 1098 else 1099 Invalid = true; 1100 } 1101 1102 if (!Invalid && 1103 AttachBaseSpecifiers(Instantiation, InstantiatedBases.data(), 1104 InstantiatedBases.size())) 1105 Invalid = true; 1106 1107 return Invalid; 1108} 1109 1110/// \brief Instantiate the definition of a class from a given pattern. 1111/// 1112/// \param PointOfInstantiation The point of instantiation within the 1113/// source code. 1114/// 1115/// \param Instantiation is the declaration whose definition is being 1116/// instantiated. This will be either a class template specialization 1117/// or a member class of a class template specialization. 1118/// 1119/// \param Pattern is the pattern from which the instantiation 1120/// occurs. This will be either the declaration of a class template or 1121/// the declaration of a member class of a class template. 1122/// 1123/// \param TemplateArgs The template arguments to be substituted into 1124/// the pattern. 1125/// 1126/// \param TSK the kind of implicit or explicit instantiation to perform. 1127/// 1128/// \param Complain whether to complain if the class cannot be instantiated due 1129/// to the lack of a definition. 1130/// 1131/// \returns true if an error occurred, false otherwise. 1132bool 1133Sema::InstantiateClass(SourceLocation PointOfInstantiation, 1134 CXXRecordDecl *Instantiation, CXXRecordDecl *Pattern, 1135 const MultiLevelTemplateArgumentList &TemplateArgs, 1136 TemplateSpecializationKind TSK, 1137 bool Complain) { 1138 bool Invalid = false; 1139 1140 CXXRecordDecl *PatternDef 1141 = cast_or_null<CXXRecordDecl>(Pattern->getDefinition()); 1142 if (!PatternDef) { 1143 if (!Complain) { 1144 // Say nothing 1145 } else if (Pattern == Instantiation->getInstantiatedFromMemberClass()) { 1146 Diag(PointOfInstantiation, 1147 diag::err_implicit_instantiate_member_undefined) 1148 << Context.getTypeDeclType(Instantiation); 1149 Diag(Pattern->getLocation(), diag::note_member_of_template_here); 1150 } else { 1151 Diag(PointOfInstantiation, diag::err_template_instantiate_undefined) 1152 << (TSK != TSK_ImplicitInstantiation) 1153 << Context.getTypeDeclType(Instantiation); 1154 Diag(Pattern->getLocation(), diag::note_template_decl_here); 1155 } 1156 return true; 1157 } 1158 Pattern = PatternDef; 1159 1160 // \brief Record the point of instantiation. 1161 if (MemberSpecializationInfo *MSInfo 1162 = Instantiation->getMemberSpecializationInfo()) { 1163 MSInfo->setTemplateSpecializationKind(TSK); 1164 MSInfo->setPointOfInstantiation(PointOfInstantiation); 1165 } else if (ClassTemplateSpecializationDecl *Spec 1166 = dyn_cast<ClassTemplateSpecializationDecl>(Instantiation)) { 1167 Spec->setTemplateSpecializationKind(TSK); 1168 Spec->setPointOfInstantiation(PointOfInstantiation); 1169 } 1170 1171 InstantiatingTemplate Inst(*this, PointOfInstantiation, Instantiation); 1172 if (Inst) 1173 return true; 1174 1175 // Enter the scope of this instantiation. We don't use 1176 // PushDeclContext because we don't have a scope. 1177 ContextRAII SavedContext(*this, Instantiation); 1178 1179 // If this is an instantiation of a local class, merge this local 1180 // instantiation scope with the enclosing scope. Otherwise, every 1181 // instantiation of a class has its own local instantiation scope. 1182 bool MergeWithParentScope = !Instantiation->isDefinedOutsideFunctionOrMethod(); 1183 Sema::LocalInstantiationScope Scope(*this, MergeWithParentScope); 1184 1185 // Start the definition of this instantiation. 1186 Instantiation->startDefinition(); 1187 1188 Instantiation->setTagKind(Pattern->getTagKind()); 1189 1190 // Do substitution on the base class specifiers. 1191 if (SubstBaseSpecifiers(Instantiation, Pattern, TemplateArgs)) 1192 Invalid = true; 1193 1194 llvm::SmallVector<DeclPtrTy, 4> Fields; 1195 for (RecordDecl::decl_iterator Member = Pattern->decls_begin(), 1196 MemberEnd = Pattern->decls_end(); 1197 Member != MemberEnd; ++Member) { 1198 Decl *NewMember = SubstDecl(*Member, Instantiation, TemplateArgs); 1199 if (NewMember) { 1200 if (FieldDecl *Field = dyn_cast<FieldDecl>(NewMember)) 1201 Fields.push_back(DeclPtrTy::make(Field)); 1202 else if (NewMember->isInvalidDecl()) 1203 Invalid = true; 1204 } else { 1205 // FIXME: Eventually, a NULL return will mean that one of the 1206 // instantiations was a semantic disaster, and we'll want to set Invalid = 1207 // true. For now, we expect to skip some members that we can't yet handle. 1208 } 1209 } 1210 1211 // Finish checking fields. 1212 ActOnFields(0, Instantiation->getLocation(), DeclPtrTy::make(Instantiation), 1213 Fields.data(), Fields.size(), SourceLocation(), SourceLocation(), 1214 0); 1215 CheckCompletedCXXClass(/*Scope=*/0, Instantiation); 1216 if (Instantiation->isInvalidDecl()) 1217 Invalid = true; 1218 1219 // Exit the scope of this instantiation. 1220 SavedContext.pop(); 1221 1222 // If this is a polymorphic C++ class without a key function, we'll 1223 // have to mark all of the virtual members to allow emission of a vtable 1224 // in this translation unit. 1225 if (Instantiation->isDynamicClass() && 1226 !Context.getKeyFunction(Instantiation)) { 1227 // Local classes need to have their methods instantiated immediately in 1228 // order to have the correct instantiation scope. 1229 if (Instantiation->isLocalClass()) { 1230 MarkVirtualMembersReferenced(PointOfInstantiation, 1231 Instantiation); 1232 } else { 1233 ClassesWithUnmarkedVirtualMembers.push_back(std::make_pair(Instantiation, 1234 PointOfInstantiation)); 1235 } 1236 } 1237 1238 if (!Invalid) 1239 Consumer.HandleTagDeclDefinition(Instantiation); 1240 1241 return Invalid; 1242} 1243 1244bool 1245Sema::InstantiateClassTemplateSpecialization( 1246 SourceLocation PointOfInstantiation, 1247 ClassTemplateSpecializationDecl *ClassTemplateSpec, 1248 TemplateSpecializationKind TSK, 1249 bool Complain) { 1250 // Perform the actual instantiation on the canonical declaration. 1251 ClassTemplateSpec = cast<ClassTemplateSpecializationDecl>( 1252 ClassTemplateSpec->getCanonicalDecl()); 1253 1254 // Check whether we have already instantiated or specialized this class 1255 // template specialization. 1256 if (ClassTemplateSpec->getSpecializationKind() != TSK_Undeclared) { 1257 if (ClassTemplateSpec->getSpecializationKind() == 1258 TSK_ExplicitInstantiationDeclaration && 1259 TSK == TSK_ExplicitInstantiationDefinition) { 1260 // An explicit instantiation definition follows an explicit instantiation 1261 // declaration (C++0x [temp.explicit]p10); go ahead and perform the 1262 // explicit instantiation. 1263 ClassTemplateSpec->setSpecializationKind(TSK); 1264 return false; 1265 } 1266 1267 // We can only instantiate something that hasn't already been 1268 // instantiated or specialized. Fail without any diagnostics: our 1269 // caller will provide an error message. 1270 return true; 1271 } 1272 1273 if (ClassTemplateSpec->isInvalidDecl()) 1274 return true; 1275 1276 ClassTemplateDecl *Template = ClassTemplateSpec->getSpecializedTemplate(); 1277 CXXRecordDecl *Pattern = 0; 1278 1279 // C++ [temp.class.spec.match]p1: 1280 // When a class template is used in a context that requires an 1281 // instantiation of the class, it is necessary to determine 1282 // whether the instantiation is to be generated using the primary 1283 // template or one of the partial specializations. This is done by 1284 // matching the template arguments of the class template 1285 // specialization with the template argument lists of the partial 1286 // specializations. 1287 typedef std::pair<ClassTemplatePartialSpecializationDecl *, 1288 TemplateArgumentList *> MatchResult; 1289 llvm::SmallVector<MatchResult, 4> Matched; 1290 llvm::SmallVector<ClassTemplatePartialSpecializationDecl *, 4> PartialSpecs; 1291 Template->getPartialSpecializations(PartialSpecs); 1292 for (unsigned I = 0, N = PartialSpecs.size(); I != N; ++I) { 1293 ClassTemplatePartialSpecializationDecl *Partial = PartialSpecs[I]; 1294 TemplateDeductionInfo Info(Context, PointOfInstantiation); 1295 if (TemplateDeductionResult Result 1296 = DeduceTemplateArguments(Partial, 1297 ClassTemplateSpec->getTemplateArgs(), 1298 Info)) { 1299 // FIXME: Store the failed-deduction information for use in 1300 // diagnostics, later. 1301 (void)Result; 1302 } else { 1303 Matched.push_back(std::make_pair(Partial, Info.take())); 1304 } 1305 } 1306 1307 if (Matched.size() >= 1) { 1308 llvm::SmallVector<MatchResult, 4>::iterator Best = Matched.begin(); 1309 if (Matched.size() == 1) { 1310 // -- If exactly one matching specialization is found, the 1311 // instantiation is generated from that specialization. 1312 // We don't need to do anything for this. 1313 } else { 1314 // -- If more than one matching specialization is found, the 1315 // partial order rules (14.5.4.2) are used to determine 1316 // whether one of the specializations is more specialized 1317 // than the others. If none of the specializations is more 1318 // specialized than all of the other matching 1319 // specializations, then the use of the class template is 1320 // ambiguous and the program is ill-formed. 1321 for (llvm::SmallVector<MatchResult, 4>::iterator P = Best + 1, 1322 PEnd = Matched.end(); 1323 P != PEnd; ++P) { 1324 if (getMoreSpecializedPartialSpecialization(P->first, Best->first, 1325 PointOfInstantiation) 1326 == P->first) 1327 Best = P; 1328 } 1329 1330 // Determine if the best partial specialization is more specialized than 1331 // the others. 1332 bool Ambiguous = false; 1333 for (llvm::SmallVector<MatchResult, 4>::iterator P = Matched.begin(), 1334 PEnd = Matched.end(); 1335 P != PEnd; ++P) { 1336 if (P != Best && 1337 getMoreSpecializedPartialSpecialization(P->first, Best->first, 1338 PointOfInstantiation) 1339 != Best->first) { 1340 Ambiguous = true; 1341 break; 1342 } 1343 } 1344 1345 if (Ambiguous) { 1346 // Partial ordering did not produce a clear winner. Complain. 1347 ClassTemplateSpec->setInvalidDecl(); 1348 Diag(PointOfInstantiation, diag::err_partial_spec_ordering_ambiguous) 1349 << ClassTemplateSpec; 1350 1351 // Print the matching partial specializations. 1352 for (llvm::SmallVector<MatchResult, 4>::iterator P = Matched.begin(), 1353 PEnd = Matched.end(); 1354 P != PEnd; ++P) 1355 Diag(P->first->getLocation(), diag::note_partial_spec_match) 1356 << getTemplateArgumentBindingsText(P->first->getTemplateParameters(), 1357 *P->second); 1358 1359 return true; 1360 } 1361 } 1362 1363 // Instantiate using the best class template partial specialization. 1364 ClassTemplatePartialSpecializationDecl *OrigPartialSpec = Best->first; 1365 while (OrigPartialSpec->getInstantiatedFromMember()) { 1366 // If we've found an explicit specialization of this class template, 1367 // stop here and use that as the pattern. 1368 if (OrigPartialSpec->isMemberSpecialization()) 1369 break; 1370 1371 OrigPartialSpec = OrigPartialSpec->getInstantiatedFromMember(); 1372 } 1373 1374 Pattern = OrigPartialSpec; 1375 ClassTemplateSpec->setInstantiationOf(Best->first, Best->second); 1376 } else { 1377 // -- If no matches are found, the instantiation is generated 1378 // from the primary template. 1379 ClassTemplateDecl *OrigTemplate = Template; 1380 while (OrigTemplate->getInstantiatedFromMemberTemplate()) { 1381 // If we've found an explicit specialization of this class template, 1382 // stop here and use that as the pattern. 1383 if (OrigTemplate->isMemberSpecialization()) 1384 break; 1385 1386 OrigTemplate = OrigTemplate->getInstantiatedFromMemberTemplate(); 1387 } 1388 1389 Pattern = OrigTemplate->getTemplatedDecl(); 1390 } 1391 1392 bool Result = InstantiateClass(PointOfInstantiation, ClassTemplateSpec, 1393 Pattern, 1394 getTemplateInstantiationArgs(ClassTemplateSpec), 1395 TSK, 1396 Complain); 1397 1398 for (unsigned I = 0, N = Matched.size(); I != N; ++I) { 1399 // FIXME: Implement TemplateArgumentList::Destroy! 1400 // if (Matched[I].first != Pattern) 1401 // Matched[I].second->Destroy(Context); 1402 } 1403 1404 return Result; 1405} 1406 1407/// \brief Instantiates the definitions of all of the member 1408/// of the given class, which is an instantiation of a class template 1409/// or a member class of a template. 1410void 1411Sema::InstantiateClassMembers(SourceLocation PointOfInstantiation, 1412 CXXRecordDecl *Instantiation, 1413 const MultiLevelTemplateArgumentList &TemplateArgs, 1414 TemplateSpecializationKind TSK) { 1415 for (DeclContext::decl_iterator D = Instantiation->decls_begin(), 1416 DEnd = Instantiation->decls_end(); 1417 D != DEnd; ++D) { 1418 bool SuppressNew = false; 1419 if (FunctionDecl *Function = dyn_cast<FunctionDecl>(*D)) { 1420 if (FunctionDecl *Pattern 1421 = Function->getInstantiatedFromMemberFunction()) { 1422 MemberSpecializationInfo *MSInfo 1423 = Function->getMemberSpecializationInfo(); 1424 assert(MSInfo && "No member specialization information?"); 1425 if (MSInfo->getTemplateSpecializationKind() 1426 == TSK_ExplicitSpecialization) 1427 continue; 1428 1429 if (CheckSpecializationInstantiationRedecl(PointOfInstantiation, TSK, 1430 Function, 1431 MSInfo->getTemplateSpecializationKind(), 1432 MSInfo->getPointOfInstantiation(), 1433 SuppressNew) || 1434 SuppressNew) 1435 continue; 1436 1437 if (Function->getBody()) 1438 continue; 1439 1440 if (TSK == TSK_ExplicitInstantiationDefinition) { 1441 // C++0x [temp.explicit]p8: 1442 // An explicit instantiation definition that names a class template 1443 // specialization explicitly instantiates the class template 1444 // specialization and is only an explicit instantiation definition 1445 // of members whose definition is visible at the point of 1446 // instantiation. 1447 if (!Pattern->getBody()) 1448 continue; 1449 1450 Function->setTemplateSpecializationKind(TSK, PointOfInstantiation); 1451 1452 InstantiateFunctionDefinition(PointOfInstantiation, Function); 1453 } else { 1454 Function->setTemplateSpecializationKind(TSK, PointOfInstantiation); 1455 } 1456 } 1457 } else if (VarDecl *Var = dyn_cast<VarDecl>(*D)) { 1458 if (Var->isStaticDataMember()) { 1459 MemberSpecializationInfo *MSInfo = Var->getMemberSpecializationInfo(); 1460 assert(MSInfo && "No member specialization information?"); 1461 if (MSInfo->getTemplateSpecializationKind() 1462 == TSK_ExplicitSpecialization) 1463 continue; 1464 1465 if (CheckSpecializationInstantiationRedecl(PointOfInstantiation, TSK, 1466 Var, 1467 MSInfo->getTemplateSpecializationKind(), 1468 MSInfo->getPointOfInstantiation(), 1469 SuppressNew) || 1470 SuppressNew) 1471 continue; 1472 1473 if (TSK == TSK_ExplicitInstantiationDefinition) { 1474 // C++0x [temp.explicit]p8: 1475 // An explicit instantiation definition that names a class template 1476 // specialization explicitly instantiates the class template 1477 // specialization and is only an explicit instantiation definition 1478 // of members whose definition is visible at the point of 1479 // instantiation. 1480 if (!Var->getInstantiatedFromStaticDataMember() 1481 ->getOutOfLineDefinition()) 1482 continue; 1483 1484 Var->setTemplateSpecializationKind(TSK, PointOfInstantiation); 1485 InstantiateStaticDataMemberDefinition(PointOfInstantiation, Var); 1486 } else { 1487 Var->setTemplateSpecializationKind(TSK, PointOfInstantiation); 1488 } 1489 } 1490 } else if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(*D)) { 1491 // Always skip the injected-class-name, along with any 1492 // redeclarations of nested classes, since both would cause us 1493 // to try to instantiate the members of a class twice. 1494 if (Record->isInjectedClassName() || Record->getPreviousDeclaration()) 1495 continue; 1496 1497 MemberSpecializationInfo *MSInfo = Record->getMemberSpecializationInfo(); 1498 assert(MSInfo && "No member specialization information?"); 1499 1500 if (MSInfo->getTemplateSpecializationKind() 1501 == TSK_ExplicitSpecialization) 1502 continue; 1503 1504 if (CheckSpecializationInstantiationRedecl(PointOfInstantiation, TSK, 1505 Record, 1506 MSInfo->getTemplateSpecializationKind(), 1507 MSInfo->getPointOfInstantiation(), 1508 SuppressNew) || 1509 SuppressNew) 1510 continue; 1511 1512 CXXRecordDecl *Pattern = Record->getInstantiatedFromMemberClass(); 1513 assert(Pattern && "Missing instantiated-from-template information"); 1514 1515 if (!Record->getDefinition()) { 1516 if (!Pattern->getDefinition()) { 1517 // C++0x [temp.explicit]p8: 1518 // An explicit instantiation definition that names a class template 1519 // specialization explicitly instantiates the class template 1520 // specialization and is only an explicit instantiation definition 1521 // of members whose definition is visible at the point of 1522 // instantiation. 1523 if (TSK == TSK_ExplicitInstantiationDeclaration) { 1524 MSInfo->setTemplateSpecializationKind(TSK); 1525 MSInfo->setPointOfInstantiation(PointOfInstantiation); 1526 } 1527 1528 continue; 1529 } 1530 1531 InstantiateClass(PointOfInstantiation, Record, Pattern, 1532 TemplateArgs, 1533 TSK); 1534 } 1535 1536 Pattern = cast_or_null<CXXRecordDecl>(Record->getDefinition()); 1537 if (Pattern) 1538 InstantiateClassMembers(PointOfInstantiation, Pattern, TemplateArgs, 1539 TSK); 1540 } 1541 } 1542} 1543 1544/// \brief Instantiate the definitions of all of the members of the 1545/// given class template specialization, which was named as part of an 1546/// explicit instantiation. 1547void 1548Sema::InstantiateClassTemplateSpecializationMembers( 1549 SourceLocation PointOfInstantiation, 1550 ClassTemplateSpecializationDecl *ClassTemplateSpec, 1551 TemplateSpecializationKind TSK) { 1552 // C++0x [temp.explicit]p7: 1553 // An explicit instantiation that names a class template 1554 // specialization is an explicit instantion of the same kind 1555 // (declaration or definition) of each of its members (not 1556 // including members inherited from base classes) that has not 1557 // been previously explicitly specialized in the translation unit 1558 // containing the explicit instantiation, except as described 1559 // below. 1560 InstantiateClassMembers(PointOfInstantiation, ClassTemplateSpec, 1561 getTemplateInstantiationArgs(ClassTemplateSpec), 1562 TSK); 1563} 1564 1565Sema::OwningStmtResult 1566Sema::SubstStmt(Stmt *S, const MultiLevelTemplateArgumentList &TemplateArgs) { 1567 if (!S) 1568 return Owned(S); 1569 1570 TemplateInstantiator Instantiator(*this, TemplateArgs, 1571 SourceLocation(), 1572 DeclarationName()); 1573 return Instantiator.TransformStmt(S); 1574} 1575 1576Sema::OwningExprResult 1577Sema::SubstExpr(Expr *E, const MultiLevelTemplateArgumentList &TemplateArgs) { 1578 if (!E) 1579 return Owned(E); 1580 1581 TemplateInstantiator Instantiator(*this, TemplateArgs, 1582 SourceLocation(), 1583 DeclarationName()); 1584 return Instantiator.TransformExpr(E); 1585} 1586 1587/// \brief Do template substitution on a nested-name-specifier. 1588NestedNameSpecifier * 1589Sema::SubstNestedNameSpecifier(NestedNameSpecifier *NNS, 1590 SourceRange Range, 1591 const MultiLevelTemplateArgumentList &TemplateArgs) { 1592 TemplateInstantiator Instantiator(*this, TemplateArgs, Range.getBegin(), 1593 DeclarationName()); 1594 return Instantiator.TransformNestedNameSpecifier(NNS, Range); 1595} 1596 1597TemplateName 1598Sema::SubstTemplateName(TemplateName Name, SourceLocation Loc, 1599 const MultiLevelTemplateArgumentList &TemplateArgs) { 1600 TemplateInstantiator Instantiator(*this, TemplateArgs, Loc, 1601 DeclarationName()); 1602 return Instantiator.TransformTemplateName(Name); 1603} 1604 1605bool Sema::Subst(const TemplateArgumentLoc &Input, TemplateArgumentLoc &Output, 1606 const MultiLevelTemplateArgumentList &TemplateArgs) { 1607 TemplateInstantiator Instantiator(*this, TemplateArgs, SourceLocation(), 1608 DeclarationName()); 1609 1610 return Instantiator.TransformTemplateArgument(Input, Output); 1611} 1612 1613Decl *Sema::LocalInstantiationScope::getInstantiationOf(const Decl *D) { 1614 for (LocalInstantiationScope *Current = this; Current; 1615 Current = Current->Outer) { 1616 // Check if we found something within this scope. 1617 llvm::DenseMap<const Decl *, Decl *>::iterator Found 1618 = Current->LocalDecls.find(D); 1619 if (Found != Current->LocalDecls.end()) 1620 return Found->second; 1621 1622 // If we aren't combined with our outer scope, we're done. 1623 if (!Current->CombineWithOuterScope) 1624 break; 1625 } 1626 1627 assert(D->isInvalidDecl() && 1628 "declaration was not instantiated in this scope!"); 1629 return 0; 1630} 1631 1632void Sema::LocalInstantiationScope::InstantiatedLocal(const Decl *D, 1633 Decl *Inst) { 1634 Decl *&Stored = LocalDecls[D]; 1635 assert((!Stored || Stored == Inst)&& "Already instantiated this local"); 1636 Stored = Inst; 1637} 1638