1 //===------- SemaTemplate.cpp - Semantic Analysis for C++ Templates -------===/ 2 3 // 4 // The LLVM Compiler Infrastructure 5 // 6 // This file is distributed under the University of Illinois Open Source 7 // License. See LICENSE.TXT for details. 8 //===----------------------------------------------------------------------===/ 9 10 // 11 // This file implements semantic analysis for C++ templates. 12 //===----------------------------------------------------------------------===/ 13 14 #include "Sema.h" 15 #include "clang/AST/ASTContext.h" 16 #include "clang/AST/Expr.h" 17 #include "clang/AST/ExprCXX.h" 18 #include "clang/AST/DeclTemplate.h" 19 #include "clang/Parse/DeclSpec.h" 20 #include "clang/Basic/LangOptions.h" 21 22 using namespace clang; 23 24 /// isTemplateName - Determines whether the identifier II is a 25 /// template name in the current scope, and returns the template 26 /// declaration if II names a template. An optional CXXScope can be 27 /// passed to indicate the C++ scope in which the identifier will be 28 /// found. 29 TemplateNameKind Sema::isTemplateName(const IdentifierInfo &II, Scope *S, 30 TemplateTy &TemplateResult, 31 const CXXScopeSpec *SS) { 32 NamedDecl *IIDecl = LookupParsedName(S, SS, &II, LookupOrdinaryName); 33 34 TemplateNameKind TNK = TNK_Non_template; 35 TemplateDecl *Template = 0; 36 37 if (IIDecl) { 38 if ((Template = dyn_cast<TemplateDecl>(IIDecl))) { 39 if (isa<FunctionTemplateDecl>(IIDecl)) 40 TNK = TNK_Function_template; 41 else if (isa<ClassTemplateDecl>(IIDecl) || 42 isa<TemplateTemplateParmDecl>(IIDecl)) 43 TNK = TNK_Type_template; 44 else 45 assert(false && "Unknown template declaration kind"); 46 } else if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(IIDecl)) { 47 // C++ [temp.local]p1: 48 // Like normal (non-template) classes, class templates have an 49 // injected-class-name (Clause 9). The injected-class-name 50 // can be used with or without a template-argument-list. When 51 // it is used without a template-argument-list, it is 52 // equivalent to the injected-class-name followed by the 53 // template-parameters of the class template enclosed in 54 // <>. When it is used with a template-argument-list, it 55 // refers to the specified class template specialization, 56 // which could be the current specialization or another 57 // specialization. 58 if (Record->isInjectedClassName()) { 59 Record = cast<CXXRecordDecl>(Context.getCanonicalDecl(Record)); 60 if ((Template = Record->getDescribedClassTemplate())) 61 TNK = TNK_Type_template; 62 else if (ClassTemplateSpecializationDecl *Spec 63 = dyn_cast<ClassTemplateSpecializationDecl>(Record)) { 64 Template = Spec->getSpecializedTemplate(); 65 TNK = TNK_Type_template; 66 } 67 } 68 } 69 70 // FIXME: What follows is a gross hack. 71 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(IIDecl)) { 72 if (FD->getType()->isDependentType()) { 73 TemplateResult = TemplateTy::make(FD); 74 return TNK_Function_template; 75 } 76 } else if (OverloadedFunctionDecl *Ovl 77 = dyn_cast<OverloadedFunctionDecl>(IIDecl)) { 78 for (OverloadedFunctionDecl::function_iterator F = Ovl->function_begin(), 79 FEnd = Ovl->function_end(); 80 F != FEnd; ++F) { 81 if ((*F)->getType()->isDependentType()) { 82 TemplateResult = TemplateTy::make(Ovl); 83 return TNK_Function_template; 84 } 85 } 86 } 87 88 if (TNK != TNK_Non_template) { 89 if (SS && SS->isSet() && !SS->isInvalid()) { 90 NestedNameSpecifier *Qualifier 91 = static_cast<NestedNameSpecifier *>(SS->getScopeRep()); 92 TemplateResult 93 = TemplateTy::make(Context.getQualifiedTemplateName(Qualifier, 94 false, 95 Template)); 96 } else 97 TemplateResult = TemplateTy::make(TemplateName(Template)); 98 } 99 } 100 return TNK; 101 } 102 103 /// DiagnoseTemplateParameterShadow - Produce a diagnostic complaining 104 /// that the template parameter 'PrevDecl' is being shadowed by a new 105 /// declaration at location Loc. Returns true to indicate that this is 106 /// an error, and false otherwise. 107 bool Sema::DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl) { 108 assert(PrevDecl->isTemplateParameter() && "Not a template parameter"); 109 110 // Microsoft Visual C++ permits template parameters to be shadowed. 111 if (getLangOptions().Microsoft) 112 return false; 113 114 // C++ [temp.local]p4: 115 // A template-parameter shall not be redeclared within its 116 // scope (including nested scopes). 117 Diag(Loc, diag::err_template_param_shadow) 118 << cast<NamedDecl>(PrevDecl)->getDeclName(); 119 Diag(PrevDecl->getLocation(), diag::note_template_param_here); 120 return true; 121 } 122 123 /// AdjustDeclIfTemplate - If the given decl happens to be a template, reset 124 /// the parameter D to reference the templated declaration and return a pointer 125 /// to the template declaration. Otherwise, do nothing to D and return null. 126 TemplateDecl *Sema::AdjustDeclIfTemplate(DeclPtrTy &D) { 127 if (TemplateDecl *Temp = dyn_cast<TemplateDecl>(D.getAs<Decl>())) { 128 D = DeclPtrTy::make(Temp->getTemplatedDecl()); 129 return Temp; 130 } 131 return 0; 132 } 133 134 /// ActOnTypeParameter - Called when a C++ template type parameter 135 /// (e.g., "typename T") has been parsed. Typename specifies whether 136 /// the keyword "typename" was used to declare the type parameter 137 /// (otherwise, "class" was used), and KeyLoc is the location of the 138 /// "class" or "typename" keyword. ParamName is the name of the 139 /// parameter (NULL indicates an unnamed template parameter) and 140 /// ParamName is the location of the parameter name (if any). 141 /// If the type parameter has a default argument, it will be added 142 /// later via ActOnTypeParameterDefault. 143 Sema::DeclPtrTy Sema::ActOnTypeParameter(Scope *S, bool Typename, 144 SourceLocation KeyLoc, 145 IdentifierInfo *ParamName, 146 SourceLocation ParamNameLoc, 147 unsigned Depth, unsigned Position) { 148 assert(S->isTemplateParamScope() && 149 "Template type parameter not in template parameter scope!"); 150 bool Invalid = false; 151 152 if (ParamName) { 153 NamedDecl *PrevDecl = LookupName(S, ParamName, LookupTagName); 154 if (PrevDecl && PrevDecl->isTemplateParameter()) 155 Invalid = Invalid || DiagnoseTemplateParameterShadow(ParamNameLoc, 156 PrevDecl); 157 } 158 159 SourceLocation Loc = ParamNameLoc; 160 if (!ParamName) 161 Loc = KeyLoc; 162 163 TemplateTypeParmDecl *Param 164 = TemplateTypeParmDecl::Create(Context, CurContext, Loc, 165 Depth, Position, ParamName, Typename); 166 if (Invalid) 167 Param->setInvalidDecl(); 168 169 if (ParamName) { 170 // Add the template parameter into the current scope. 171 S->AddDecl(DeclPtrTy::make(Param)); 172 IdResolver.AddDecl(Param); 173 } 174 175 return DeclPtrTy::make(Param); 176 } 177 178 /// ActOnTypeParameterDefault - Adds a default argument (the type 179 /// Default) to the given template type parameter (TypeParam). 180 void Sema::ActOnTypeParameterDefault(DeclPtrTy TypeParam, 181 SourceLocation EqualLoc, 182 SourceLocation DefaultLoc, 183 TypeTy *DefaultT) { 184 TemplateTypeParmDecl *Parm 185 = cast<TemplateTypeParmDecl>(TypeParam.getAs<Decl>()); 186 QualType Default = QualType::getFromOpaquePtr(DefaultT); 187 188 // C++ [temp.param]p14: 189 // A template-parameter shall not be used in its own default argument. 190 // FIXME: Implement this check! Needs a recursive walk over the types. 191 192 // Check the template argument itself. 193 if (CheckTemplateArgument(Parm, Default, DefaultLoc)) { 194 Parm->setInvalidDecl(); 195 return; 196 } 197 198 Parm->setDefaultArgument(Default, DefaultLoc, false); 199 } 200 201 /// \brief Check that the type of a non-type template parameter is 202 /// well-formed. 203 /// 204 /// \returns the (possibly-promoted) parameter type if valid; 205 /// otherwise, produces a diagnostic and returns a NULL type. 206 QualType 207 Sema::CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc) { 208 // C++ [temp.param]p4: 209 // 210 // A non-type template-parameter shall have one of the following 211 // (optionally cv-qualified) types: 212 // 213 // -- integral or enumeration type, 214 if (T->isIntegralType() || T->isEnumeralType() || 215 // -- pointer to object or pointer to function, 216 (T->isPointerType() && 217 (T->getAsPointerType()->getPointeeType()->isObjectType() || 218 T->getAsPointerType()->getPointeeType()->isFunctionType())) || 219 // -- reference to object or reference to function, 220 T->isReferenceType() || 221 // -- pointer to member. 222 T->isMemberPointerType() || 223 // If T is a dependent type, we can't do the check now, so we 224 // assume that it is well-formed. 225 T->isDependentType()) 226 return T; 227 // C++ [temp.param]p8: 228 // 229 // A non-type template-parameter of type "array of T" or 230 // "function returning T" is adjusted to be of type "pointer to 231 // T" or "pointer to function returning T", respectively. 232 else if (T->isArrayType()) 233 // FIXME: Keep the type prior to promotion? 234 return Context.getArrayDecayedType(T); 235 else if (T->isFunctionType()) 236 // FIXME: Keep the type prior to promotion? 237 return Context.getPointerType(T); 238 239 Diag(Loc, diag::err_template_nontype_parm_bad_type) 240 << T; 241 242 return QualType(); 243 } 244 245 /// ActOnNonTypeTemplateParameter - Called when a C++ non-type 246 /// template parameter (e.g., "int Size" in "template<int Size> 247 /// class Array") has been parsed. S is the current scope and D is 248 /// the parsed declarator. 249 Sema::DeclPtrTy Sema::ActOnNonTypeTemplateParameter(Scope *S, Declarator &D, 250 unsigned Depth, 251 unsigned Position) { 252 QualType T = GetTypeForDeclarator(D, S); 253 254 assert(S->isTemplateParamScope() && 255 "Non-type template parameter not in template parameter scope!"); 256 bool Invalid = false; 257 258 IdentifierInfo *ParamName = D.getIdentifier(); 259 if (ParamName) { 260 NamedDecl *PrevDecl = LookupName(S, ParamName, LookupTagName); 261 if (PrevDecl && PrevDecl->isTemplateParameter()) 262 Invalid = Invalid || DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), 263 PrevDecl); 264 } 265 266 T = CheckNonTypeTemplateParameterType(T, D.getIdentifierLoc()); 267 if (T.isNull()) { 268 T = Context.IntTy; // Recover with an 'int' type. 269 Invalid = true; 270 } 271 272 NonTypeTemplateParmDecl *Param 273 = NonTypeTemplateParmDecl::Create(Context, CurContext, D.getIdentifierLoc(), 274 Depth, Position, ParamName, T); 275 if (Invalid) 276 Param->setInvalidDecl(); 277 278 if (D.getIdentifier()) { 279 // Add the template parameter into the current scope. 280 S->AddDecl(DeclPtrTy::make(Param)); 281 IdResolver.AddDecl(Param); 282 } 283 return DeclPtrTy::make(Param); 284 } 285 286 /// \brief Adds a default argument to the given non-type template 287 /// parameter. 288 void Sema::ActOnNonTypeTemplateParameterDefault(DeclPtrTy TemplateParamD, 289 SourceLocation EqualLoc, 290 ExprArg DefaultE) { 291 NonTypeTemplateParmDecl *TemplateParm 292 = cast<NonTypeTemplateParmDecl>(TemplateParamD.getAs<Decl>()); 293 Expr *Default = static_cast<Expr *>(DefaultE.get()); 294 295 // C++ [temp.param]p14: 296 // A template-parameter shall not be used in its own default argument. 297 // FIXME: Implement this check! Needs a recursive walk over the types. 298 299 // Check the well-formedness of the default template argument. 300 TemplateArgument Converted; 301 if (CheckTemplateArgument(TemplateParm, TemplateParm->getType(), Default, 302 Converted)) { 303 TemplateParm->setInvalidDecl(); 304 return; 305 } 306 307 TemplateParm->setDefaultArgument(DefaultE.takeAs<Expr>()); 308 } 309 310 311 /// ActOnTemplateTemplateParameter - Called when a C++ template template 312 /// parameter (e.g. T in template <template <typename> class T> class array) 313 /// has been parsed. S is the current scope. 314 Sema::DeclPtrTy Sema::ActOnTemplateTemplateParameter(Scope* S, 315 SourceLocation TmpLoc, 316 TemplateParamsTy *Params, 317 IdentifierInfo *Name, 318 SourceLocation NameLoc, 319 unsigned Depth, 320 unsigned Position) 321 { 322 assert(S->isTemplateParamScope() && 323 "Template template parameter not in template parameter scope!"); 324 325 // Construct the parameter object. 326 TemplateTemplateParmDecl *Param = 327 TemplateTemplateParmDecl::Create(Context, CurContext, TmpLoc, Depth, 328 Position, Name, 329 (TemplateParameterList*)Params); 330 331 // Make sure the parameter is valid. 332 // FIXME: Decl object is not currently invalidated anywhere so this doesn't 333 // do anything yet. However, if the template parameter list or (eventual) 334 // default value is ever invalidated, that will propagate here. 335 bool Invalid = false; 336 if (Invalid) { 337 Param->setInvalidDecl(); 338 } 339 340 // If the tt-param has a name, then link the identifier into the scope 341 // and lookup mechanisms. 342 if (Name) { 343 S->AddDecl(DeclPtrTy::make(Param)); 344 IdResolver.AddDecl(Param); 345 } 346 347 return DeclPtrTy::make(Param); 348 } 349 350 /// \brief Adds a default argument to the given template template 351 /// parameter. 352 void Sema::ActOnTemplateTemplateParameterDefault(DeclPtrTy TemplateParamD, 353 SourceLocation EqualLoc, 354 ExprArg DefaultE) { 355 TemplateTemplateParmDecl *TemplateParm 356 = cast<TemplateTemplateParmDecl>(TemplateParamD.getAs<Decl>()); 357 358 // Since a template-template parameter's default argument is an 359 // id-expression, it must be a DeclRefExpr. 360 DeclRefExpr *Default 361 = cast<DeclRefExpr>(static_cast<Expr *>(DefaultE.get())); 362 363 // C++ [temp.param]p14: 364 // A template-parameter shall not be used in its own default argument. 365 // FIXME: Implement this check! Needs a recursive walk over the types. 366 367 // Check the well-formedness of the template argument. 368 if (!isa<TemplateDecl>(Default->getDecl())) { 369 Diag(Default->getSourceRange().getBegin(), 370 diag::err_template_arg_must_be_template) 371 << Default->getSourceRange(); 372 TemplateParm->setInvalidDecl(); 373 return; 374 } 375 if (CheckTemplateArgument(TemplateParm, Default)) { 376 TemplateParm->setInvalidDecl(); 377 return; 378 } 379 380 DefaultE.release(); 381 TemplateParm->setDefaultArgument(Default); 382 } 383 384 /// ActOnTemplateParameterList - Builds a TemplateParameterList that 385 /// contains the template parameters in Params/NumParams. 386 Sema::TemplateParamsTy * 387 Sema::ActOnTemplateParameterList(unsigned Depth, 388 SourceLocation ExportLoc, 389 SourceLocation TemplateLoc, 390 SourceLocation LAngleLoc, 391 DeclPtrTy *Params, unsigned NumParams, 392 SourceLocation RAngleLoc) { 393 if (ExportLoc.isValid()) 394 Diag(ExportLoc, diag::note_template_export_unsupported); 395 396 return TemplateParameterList::Create(Context, TemplateLoc, LAngleLoc, 397 (Decl**)Params, NumParams, RAngleLoc); 398 } 399 400 Sema::DeclResult 401 Sema::ActOnClassTemplate(Scope *S, unsigned TagSpec, TagKind TK, 402 SourceLocation KWLoc, const CXXScopeSpec &SS, 403 IdentifierInfo *Name, SourceLocation NameLoc, 404 AttributeList *Attr, 405 MultiTemplateParamsArg TemplateParameterLists, 406 AccessSpecifier AS) { 407 assert(TemplateParameterLists.size() > 0 && "No template parameter lists?"); 408 assert(TK != TK_Reference && "Can only declare or define class templates"); 409 bool Invalid = false; 410 411 // Check that we can declare a template here. 412 if (CheckTemplateDeclScope(S, TemplateParameterLists)) 413 return true; 414 415 TagDecl::TagKind Kind; 416 switch (TagSpec) { 417 default: assert(0 && "Unknown tag type!"); 418 case DeclSpec::TST_struct: Kind = TagDecl::TK_struct; break; 419 case DeclSpec::TST_union: Kind = TagDecl::TK_union; break; 420 case DeclSpec::TST_class: Kind = TagDecl::TK_class; break; 421 } 422 423 // There is no such thing as an unnamed class template. 424 if (!Name) { 425 Diag(KWLoc, diag::err_template_unnamed_class); 426 return true; 427 } 428 429 // Find any previous declaration with this name. 430 LookupResult Previous = LookupParsedName(S, &SS, Name, LookupOrdinaryName, 431 true); 432 assert(!Previous.isAmbiguous() && "Ambiguity in class template redecl?"); 433 NamedDecl *PrevDecl = 0; 434 if (Previous.begin() != Previous.end()) 435 PrevDecl = *Previous.begin(); 436 437 DeclContext *SemanticContext = CurContext; 438 if (SS.isNotEmpty() && !SS.isInvalid()) { 439 SemanticContext = computeDeclContext(SS); 440 441 // FIXME: need to match up several levels of template parameter lists here. 442 } 443 444 // FIXME: member templates! 445 TemplateParameterList *TemplateParams 446 = static_cast<TemplateParameterList *>(*TemplateParameterLists.release()); 447 448 // If there is a previous declaration with the same name, check 449 // whether this is a valid redeclaration. 450 ClassTemplateDecl *PrevClassTemplate 451 = dyn_cast_or_null<ClassTemplateDecl>(PrevDecl); 452 if (PrevClassTemplate) { 453 // Ensure that the template parameter lists are compatible. 454 if (!TemplateParameterListsAreEqual(TemplateParams, 455 PrevClassTemplate->getTemplateParameters(), 456 /*Complain=*/true)) 457 return true; 458 459 // C++ [temp.class]p4: 460 // In a redeclaration, partial specialization, explicit 461 // specialization or explicit instantiation of a class template, 462 // the class-key shall agree in kind with the original class 463 // template declaration (7.1.5.3). 464 RecordDecl *PrevRecordDecl = PrevClassTemplate->getTemplatedDecl(); 465 if (!isAcceptableTagRedeclaration(PrevRecordDecl, Kind, KWLoc, *Name)) { 466 Diag(KWLoc, diag::err_use_with_wrong_tag) 467 << Name 468 << CodeModificationHint::CreateReplacement(KWLoc, 469 PrevRecordDecl->getKindName()); 470 Diag(PrevRecordDecl->getLocation(), diag::note_previous_use); 471 Kind = PrevRecordDecl->getTagKind(); 472 } 473 474 // Check for redefinition of this class template. 475 if (TK == TK_Definition) { 476 if (TagDecl *Def = PrevRecordDecl->getDefinition(Context)) { 477 Diag(NameLoc, diag::err_redefinition) << Name; 478 Diag(Def->getLocation(), diag::note_previous_definition); 479 // FIXME: Would it make sense to try to "forget" the previous 480 // definition, as part of error recovery? 481 return true; 482 } 483 } 484 } else if (PrevDecl && PrevDecl->isTemplateParameter()) { 485 // Maybe we will complain about the shadowed template parameter. 486 DiagnoseTemplateParameterShadow(NameLoc, PrevDecl); 487 // Just pretend that we didn't see the previous declaration. 488 PrevDecl = 0; 489 } else if (PrevDecl) { 490 // C++ [temp]p5: 491 // A class template shall not have the same name as any other 492 // template, class, function, object, enumeration, enumerator, 493 // namespace, or type in the same scope (3.3), except as specified 494 // in (14.5.4). 495 Diag(NameLoc, diag::err_redefinition_different_kind) << Name; 496 Diag(PrevDecl->getLocation(), diag::note_previous_definition); 497 return true; 498 } 499 500 // Check the template parameter list of this declaration, possibly 501 // merging in the template parameter list from the previous class 502 // template declaration. 503 if (CheckTemplateParameterList(TemplateParams, 504 PrevClassTemplate? PrevClassTemplate->getTemplateParameters() : 0)) 505 Invalid = true; 506 507 // FIXME: If we had a scope specifier, we better have a previous template 508 // declaration! 509 510 CXXRecordDecl *NewClass = 511 CXXRecordDecl::Create(Context, Kind, SemanticContext, NameLoc, Name, 512 PrevClassTemplate? 513 PrevClassTemplate->getTemplatedDecl() : 0, 514 /*DelayTypeCreation=*/true); 515 516 ClassTemplateDecl *NewTemplate 517 = ClassTemplateDecl::Create(Context, SemanticContext, NameLoc, 518 DeclarationName(Name), TemplateParams, 519 NewClass, PrevClassTemplate); 520 NewClass->setDescribedClassTemplate(NewTemplate); 521 522 // Build the type for the class template declaration now. 523 QualType T = 524 Context.getTypeDeclType(NewClass, 525 PrevClassTemplate? 526 PrevClassTemplate->getTemplatedDecl() : 0); 527 assert(T->isDependentType() && "Class template type is not dependent?"); 528 (void)T; 529 530 // Set the access specifier. 531 SetMemberAccessSpecifier(NewTemplate, PrevClassTemplate, AS); 532 533 // Set the lexical context of these templates 534 NewClass->setLexicalDeclContext(CurContext); 535 NewTemplate->setLexicalDeclContext(CurContext); 536 537 if (TK == TK_Definition) 538 NewClass->startDefinition(); 539 540 if (Attr) 541 ProcessDeclAttributeList(NewClass, Attr); 542 543 PushOnScopeChains(NewTemplate, S); 544 545 if (Invalid) { 546 NewTemplate->setInvalidDecl(); 547 NewClass->setInvalidDecl(); 548 } 549 return DeclPtrTy::make(NewTemplate); 550 } 551 552 /// \brief Checks the validity of a template parameter list, possibly 553 /// considering the template parameter list from a previous 554 /// declaration. 555 /// 556 /// If an "old" template parameter list is provided, it must be 557 /// equivalent (per TemplateParameterListsAreEqual) to the "new" 558 /// template parameter list. 559 /// 560 /// \param NewParams Template parameter list for a new template 561 /// declaration. This template parameter list will be updated with any 562 /// default arguments that are carried through from the previous 563 /// template parameter list. 564 /// 565 /// \param OldParams If provided, template parameter list from a 566 /// previous declaration of the same template. Default template 567 /// arguments will be merged from the old template parameter list to 568 /// the new template parameter list. 569 /// 570 /// \returns true if an error occurred, false otherwise. 571 bool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, 572 TemplateParameterList *OldParams) { 573 bool Invalid = false; 574 575 // C++ [temp.param]p10: 576 // The set of default template-arguments available for use with a 577 // template declaration or definition is obtained by merging the 578 // default arguments from the definition (if in scope) and all 579 // declarations in scope in the same way default function 580 // arguments are (8.3.6). 581 bool SawDefaultArgument = false; 582 SourceLocation PreviousDefaultArgLoc; 583 584 // Dummy initialization to avoid warnings. 585 TemplateParameterList::iterator OldParam = NewParams->end(); 586 if (OldParams) 587 OldParam = OldParams->begin(); 588 589 for (TemplateParameterList::iterator NewParam = NewParams->begin(), 590 NewParamEnd = NewParams->end(); 591 NewParam != NewParamEnd; ++NewParam) { 592 // Variables used to diagnose redundant default arguments 593 bool RedundantDefaultArg = false; 594 SourceLocation OldDefaultLoc; 595 SourceLocation NewDefaultLoc; 596 597 // Variables used to diagnose missing default arguments 598 bool MissingDefaultArg = false; 599 600 // Merge default arguments for template type parameters. 601 if (TemplateTypeParmDecl *NewTypeParm 602 = dyn_cast<TemplateTypeParmDecl>(*NewParam)) { 603 TemplateTypeParmDecl *OldTypeParm 604 = OldParams? cast<TemplateTypeParmDecl>(*OldParam) : 0; 605 606 if (OldTypeParm && OldTypeParm->hasDefaultArgument() && 607 NewTypeParm->hasDefaultArgument()) { 608 OldDefaultLoc = OldTypeParm->getDefaultArgumentLoc(); 609 NewDefaultLoc = NewTypeParm->getDefaultArgumentLoc(); 610 SawDefaultArgument = true; 611 RedundantDefaultArg = true; 612 PreviousDefaultArgLoc = NewDefaultLoc; 613 } else if (OldTypeParm && OldTypeParm->hasDefaultArgument()) { 614 // Merge the default argument from the old declaration to the 615 // new declaration. 616 SawDefaultArgument = true; 617 NewTypeParm->setDefaultArgument(OldTypeParm->getDefaultArgument(), 618 OldTypeParm->getDefaultArgumentLoc(), 619 true); 620 PreviousDefaultArgLoc = OldTypeParm->getDefaultArgumentLoc(); 621 } else if (NewTypeParm->hasDefaultArgument()) { 622 SawDefaultArgument = true; 623 PreviousDefaultArgLoc = NewTypeParm->getDefaultArgumentLoc(); 624 } else if (SawDefaultArgument) 625 MissingDefaultArg = true; 626 } 627 // Merge default arguments for non-type template parameters 628 else if (NonTypeTemplateParmDecl *NewNonTypeParm 629 = dyn_cast<NonTypeTemplateParmDecl>(*NewParam)) { 630 NonTypeTemplateParmDecl *OldNonTypeParm 631 = OldParams? cast<NonTypeTemplateParmDecl>(*OldParam) : 0; 632 if (OldNonTypeParm && OldNonTypeParm->hasDefaultArgument() && 633 NewNonTypeParm->hasDefaultArgument()) { 634 OldDefaultLoc = OldNonTypeParm->getDefaultArgumentLoc(); 635 NewDefaultLoc = NewNonTypeParm->getDefaultArgumentLoc(); 636 SawDefaultArgument = true; 637 RedundantDefaultArg = true; 638 PreviousDefaultArgLoc = NewDefaultLoc; 639 } else if (OldNonTypeParm && OldNonTypeParm->hasDefaultArgument()) { 640 // Merge the default argument from the old declaration to the 641 // new declaration. 642 SawDefaultArgument = true; 643 // FIXME: We need to create a new kind of "default argument" 644 // expression that points to a previous template template 645 // parameter. 646 NewNonTypeParm->setDefaultArgument( 647 OldNonTypeParm->getDefaultArgument()); 648 PreviousDefaultArgLoc = OldNonTypeParm->getDefaultArgumentLoc(); 649 } else if (NewNonTypeParm->hasDefaultArgument()) { 650 SawDefaultArgument = true; 651 PreviousDefaultArgLoc = NewNonTypeParm->getDefaultArgumentLoc(); 652 } else if (SawDefaultArgument) 653 MissingDefaultArg = true; 654 } 655 // Merge default arguments for template template parameters 656 else { 657 TemplateTemplateParmDecl *NewTemplateParm 658 = cast<TemplateTemplateParmDecl>(*NewParam); 659 TemplateTemplateParmDecl *OldTemplateParm 660 = OldParams? cast<TemplateTemplateParmDecl>(*OldParam) : 0; 661 if (OldTemplateParm && OldTemplateParm->hasDefaultArgument() && 662 NewTemplateParm->hasDefaultArgument()) { 663 OldDefaultLoc = OldTemplateParm->getDefaultArgumentLoc(); 664 NewDefaultLoc = NewTemplateParm->getDefaultArgumentLoc(); 665 SawDefaultArgument = true; 666 RedundantDefaultArg = true; 667 PreviousDefaultArgLoc = NewDefaultLoc; 668 } else if (OldTemplateParm && OldTemplateParm->hasDefaultArgument()) { 669 // Merge the default argument from the old declaration to the 670 // new declaration. 671 SawDefaultArgument = true; 672 // FIXME: We need to create a new kind of "default argument" expression 673 // that points to a previous template template parameter. 674 NewTemplateParm->setDefaultArgument( 675 OldTemplateParm->getDefaultArgument()); 676 PreviousDefaultArgLoc = OldTemplateParm->getDefaultArgumentLoc(); 677 } else if (NewTemplateParm->hasDefaultArgument()) { 678 SawDefaultArgument = true; 679 PreviousDefaultArgLoc = NewTemplateParm->getDefaultArgumentLoc(); 680 } else if (SawDefaultArgument) 681 MissingDefaultArg = true; 682 } 683 684 if (RedundantDefaultArg) { 685 // C++ [temp.param]p12: 686 // A template-parameter shall not be given default arguments 687 // by two different declarations in the same scope. 688 Diag(NewDefaultLoc, diag::err_template_param_default_arg_redefinition); 689 Diag(OldDefaultLoc, diag::note_template_param_prev_default_arg); 690 Invalid = true; 691 } else if (MissingDefaultArg) { 692 // C++ [temp.param]p11: 693 // If a template-parameter has a default template-argument, 694 // all subsequent template-parameters shall have a default 695 // template-argument supplied. 696 Diag((*NewParam)->getLocation(), 697 diag::err_template_param_default_arg_missing); 698 Diag(PreviousDefaultArgLoc, diag::note_template_param_prev_default_arg); 699 Invalid = true; 700 } 701 702 // If we have an old template parameter list that we're merging 703 // in, move on to the next parameter. 704 if (OldParams) 705 ++OldParam; 706 } 707 708 return Invalid; 709 } 710 711 /// \brief Translates template arguments as provided by the parser 712 /// into template arguments used by semantic analysis. 713 static void 714 translateTemplateArguments(ASTTemplateArgsPtr &TemplateArgsIn, 715 SourceLocation *TemplateArgLocs, 716 llvm::SmallVector<TemplateArgument, 16> &TemplateArgs) { 717 TemplateArgs.reserve(TemplateArgsIn.size()); 718 719 void **Args = TemplateArgsIn.getArgs(); 720 bool *ArgIsType = TemplateArgsIn.getArgIsType(); 721 for (unsigned Arg = 0, Last = TemplateArgsIn.size(); Arg != Last; ++Arg) { 722 TemplateArgs.push_back( 723 ArgIsType[Arg]? TemplateArgument(TemplateArgLocs[Arg], 724 QualType::getFromOpaquePtr(Args[Arg])) 725 : TemplateArgument(reinterpret_cast<Expr *>(Args[Arg]))); 726 } 727 } 728 729 /// \brief Build a canonical version of a template argument list. 730 /// 731 /// This function builds a canonical version of the given template 732 /// argument list, where each of the template arguments has been 733 /// converted into its canonical form. This routine is typically used 734 /// to canonicalize a template argument list when the template name 735 /// itself is dependent. When the template name refers to an actual 736 /// template declaration, Sema::CheckTemplateArgumentList should be 737 /// used to check and canonicalize the template arguments. 738 /// 739 /// \param TemplateArgs The incoming template arguments. 740 /// 741 /// \param NumTemplateArgs The number of template arguments in \p 742 /// TemplateArgs. 743 /// 744 /// \param Canonical A vector to be filled with the canonical versions 745 /// of the template arguments. 746 /// 747 /// \param Context The ASTContext in which the template arguments live. 748 static void CanonicalizeTemplateArguments(const TemplateArgument *TemplateArgs, 749 unsigned NumTemplateArgs, 750 llvm::SmallVectorImpl<TemplateArgument> &Canonical, 751 ASTContext &Context) { 752 Canonical.reserve(NumTemplateArgs); 753 for (unsigned Idx = 0; Idx < NumTemplateArgs; ++Idx) { 754 switch (TemplateArgs[Idx].getKind()) { 755 case TemplateArgument::Null: 756 assert(false && "Should never see a NULL template argument here"); 757 break; 758 759 case TemplateArgument::Expression: 760 // FIXME: Build canonical expression (!) 761 Canonical.push_back(TemplateArgs[Idx]); 762 break; 763 764 case TemplateArgument::Declaration: 765 Canonical.push_back( 766 TemplateArgument(SourceLocation(), 767 Context.getCanonicalDecl(TemplateArgs[Idx].getAsDecl()))); 768 break; 769 770 case TemplateArgument::Integral: 771 Canonical.push_back(TemplateArgument(SourceLocation(), 772 *TemplateArgs[Idx].getAsIntegral(), 773 TemplateArgs[Idx].getIntegralType())); 774 break; 775 776 case TemplateArgument::Type: { 777 QualType CanonType 778 = Context.getCanonicalType(TemplateArgs[Idx].getAsType()); 779 Canonical.push_back(TemplateArgument(SourceLocation(), CanonType)); 780 break; 781 } 782 } 783 } 784 } 785 786 QualType Sema::CheckTemplateIdType(TemplateName Name, 787 SourceLocation TemplateLoc, 788 SourceLocation LAngleLoc, 789 const TemplateArgument *TemplateArgs, 790 unsigned NumTemplateArgs, 791 SourceLocation RAngleLoc) { 792 TemplateDecl *Template = Name.getAsTemplateDecl(); 793 if (!Template) { 794 // The template name does not resolve to a template, so we just 795 // build a dependent template-id type. 796 797 // Canonicalize the template arguments to build the canonical 798 // template-id type. 799 llvm::SmallVector<TemplateArgument, 16> CanonicalTemplateArgs; 800 CanonicalizeTemplateArguments(TemplateArgs, NumTemplateArgs, 801 CanonicalTemplateArgs, Context); 802 803 TemplateName CanonName = Context.getCanonicalTemplateName(Name); 804 QualType CanonType 805 = Context.getTemplateSpecializationType(CanonName, 806 &CanonicalTemplateArgs[0], 807 CanonicalTemplateArgs.size()); 808 809 // Build the dependent template-id type. 810 return Context.getTemplateSpecializationType(Name, TemplateArgs, 811 NumTemplateArgs, CanonType); 812 } 813 814 // Check that the template argument list is well-formed for this 815 // template. 816 TemplateArgumentListBuilder ConvertedTemplateArgs(Context); 817 if (CheckTemplateArgumentList(Template, TemplateLoc, LAngleLoc, 818 TemplateArgs, NumTemplateArgs, RAngleLoc, 819 ConvertedTemplateArgs)) 820 return QualType(); 821 822 assert((ConvertedTemplateArgs.size() == 823 Template->getTemplateParameters()->size()) && 824 "Converted template argument list is too short!"); 825 826 QualType CanonType; 827 828 if (TemplateSpecializationType::anyDependentTemplateArguments( 829 TemplateArgs, 830 NumTemplateArgs)) { 831 // This class template specialization is a dependent 832 // type. Therefore, its canonical type is another class template 833 // specialization type that contains all of the converted 834 // arguments in canonical form. This ensures that, e.g., A<T> and 835 // A<T, T> have identical types when A is declared as: 836 // 837 // template<typename T, typename U = T> struct A; 838 TemplateName CanonName = Context.getCanonicalTemplateName(Name); 839 CanonType = Context.getTemplateSpecializationType(CanonName, 840 ConvertedTemplateArgs.getFlatArgumentList(), 841 ConvertedTemplateArgs.flatSize()); 842 } else if (ClassTemplateDecl *ClassTemplate 843 = dyn_cast<ClassTemplateDecl>(Template)) { 844 // Find the class template specialization declaration that 845 // corresponds to these arguments. 846 llvm::FoldingSetNodeID ID; 847 ClassTemplateSpecializationDecl::Profile(ID, 848 ConvertedTemplateArgs.getFlatArgumentList(), 849 ConvertedTemplateArgs.flatSize()); 850 void *InsertPos = 0; 851 ClassTemplateSpecializationDecl *Decl 852 = ClassTemplate->getSpecializations().FindNodeOrInsertPos(ID, InsertPos); 853 if (!Decl) { 854 // This is the first time we have referenced this class template 855 // specialization. Create the canonical declaration and add it to 856 // the set of specializations. 857 Decl = ClassTemplateSpecializationDecl::Create(Context, 858 ClassTemplate->getDeclContext(), 859 TemplateLoc, 860 ClassTemplate, 861 ConvertedTemplateArgs, 0); 862 ClassTemplate->getSpecializations().InsertNode(Decl, InsertPos); 863 Decl->setLexicalDeclContext(CurContext); 864 } 865 866 CanonType = Context.getTypeDeclType(Decl); 867 } 868 869 // Build the fully-sugared type for this class template 870 // specialization, which refers back to the class template 871 // specialization we created or found. 872 return Context.getTemplateSpecializationType(Name, TemplateArgs, 873 NumTemplateArgs, CanonType); 874 } 875 876 Action::TypeResult 877 Sema::ActOnTemplateIdType(TemplateTy TemplateD, SourceLocation TemplateLoc, 878 SourceLocation LAngleLoc, 879 ASTTemplateArgsPtr TemplateArgsIn, 880 SourceLocation *TemplateArgLocs, 881 SourceLocation RAngleLoc) { 882 TemplateName Template = TemplateD.getAsVal<TemplateName>(); 883 884 // Translate the parser's template argument list in our AST format. 885 llvm::SmallVector<TemplateArgument, 16> TemplateArgs; 886 translateTemplateArguments(TemplateArgsIn, TemplateArgLocs, TemplateArgs); 887 888 QualType Result = CheckTemplateIdType(Template, TemplateLoc, LAngleLoc, 889 TemplateArgs.data(), 890 TemplateArgs.size(), 891 RAngleLoc); 892 TemplateArgsIn.release(); 893 894 if (Result.isNull()) 895 return true; 896 897 return Result.getAsOpaquePtr(); 898 } 899 900 /// \brief Form a dependent template name. 901 /// 902 /// This action forms a dependent template name given the template 903 /// name and its (presumably dependent) scope specifier. For 904 /// example, given "MetaFun::template apply", the scope specifier \p 905 /// SS will be "MetaFun::", \p TemplateKWLoc contains the location 906 /// of the "template" keyword, and "apply" is the \p Name. 907 Sema::TemplateTy 908 Sema::ActOnDependentTemplateName(SourceLocation TemplateKWLoc, 909 const IdentifierInfo &Name, 910 SourceLocation NameLoc, 911 const CXXScopeSpec &SS) { 912 if (!SS.isSet() || SS.isInvalid()) 913 return TemplateTy(); 914 915 NestedNameSpecifier *Qualifier 916 = static_cast<NestedNameSpecifier *>(SS.getScopeRep()); 917 918 // FIXME: member of the current instantiation 919 920 if (!Qualifier->isDependent()) { 921 // C++0x [temp.names]p5: 922 // If a name prefixed by the keyword template is not the name of 923 // a template, the program is ill-formed. [Note: the keyword 924 // template may not be applied to non-template members of class 925 // templates. -end note ] [ Note: as is the case with the 926 // typename prefix, the template prefix is allowed in cases 927 // where it is not strictly necessary; i.e., when the 928 // nested-name-specifier or the expression on the left of the -> 929 // or . is not dependent on a template-parameter, or the use 930 // does not appear in the scope of a template. -end note] 931 // 932 // Note: C++03 was more strict here, because it banned the use of 933 // the "template" keyword prior to a template-name that was not a 934 // dependent name. C++ DR468 relaxed this requirement (the 935 // "template" keyword is now permitted). We follow the C++0x 936 // rules, even in C++03 mode, retroactively applying the DR. 937 TemplateTy Template; 938 TemplateNameKind TNK = isTemplateName(Name, 0, Template, &SS); 939 if (TNK == TNK_Non_template) { 940 Diag(NameLoc, diag::err_template_kw_refers_to_non_template) 941 << &Name; 942 return TemplateTy(); 943 } 944 945 return Template; 946 } 947 948 return TemplateTy::make(Context.getDependentTemplateName(Qualifier, &Name)); 949 } 950 951 /// \brief Check that the given template argument list is well-formed 952 /// for specializing the given template. 953 bool Sema::CheckTemplateArgumentList(TemplateDecl *Template, 954 SourceLocation TemplateLoc, 955 SourceLocation LAngleLoc, 956 const TemplateArgument *TemplateArgs, 957 unsigned NumTemplateArgs, 958 SourceLocation RAngleLoc, 959 TemplateArgumentListBuilder &Converted) { 960 TemplateParameterList *Params = Template->getTemplateParameters(); 961 unsigned NumParams = Params->size(); 962 unsigned NumArgs = NumTemplateArgs; 963 bool Invalid = false; 964 965 if (NumArgs > NumParams || 966 NumArgs < Params->getMinRequiredArguments()) { 967 // FIXME: point at either the first arg beyond what we can handle, 968 // or the '>', depending on whether we have too many or too few 969 // arguments. 970 SourceRange Range; 971 if (NumArgs > NumParams) 972 Range = SourceRange(TemplateArgs[NumParams].getLocation(), RAngleLoc); 973 Diag(TemplateLoc, diag::err_template_arg_list_different_arity) 974 << (NumArgs > NumParams) 975 << (isa<ClassTemplateDecl>(Template)? 0 : 976 isa<FunctionTemplateDecl>(Template)? 1 : 977 isa<TemplateTemplateParmDecl>(Template)? 2 : 3) 978 << Template << Range; 979 Diag(Template->getLocation(), diag::note_template_decl_here) 980 << Params->getSourceRange(); 981 Invalid = true; 982 } 983 984 // C++ [temp.arg]p1: 985 // [...] The type and form of each template-argument specified in 986 // a template-id shall match the type and form specified for the 987 // corresponding parameter declared by the template in its 988 // template-parameter-list. 989 unsigned ArgIdx = 0; 990 for (TemplateParameterList::iterator Param = Params->begin(), 991 ParamEnd = Params->end(); 992 Param != ParamEnd; ++Param, ++ArgIdx) { 993 // Decode the template argument 994 TemplateArgument Arg; 995 if (ArgIdx >= NumArgs) { 996 // Retrieve the default template argument from the template 997 // parameter. 998 if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(*Param)) { 999 if (!TTP->hasDefaultArgument()) 1000 break; 1001 1002 QualType ArgType = TTP->getDefaultArgument(); 1003 1004 // If the argument type is dependent, instantiate it now based 1005 // on the previously-computed template arguments. 1006 if (ArgType->isDependentType()) { 1007 InstantiatingTemplate Inst(*this, TemplateLoc, 1008 Template, Converted.getFlatArgumentList(), 1009 Converted.flatSize(), 1010 SourceRange(TemplateLoc, RAngleLoc)); 1011 1012 TemplateArgumentList TemplateArgs(Context, Converted, 1013 /*CopyArgs=*/false, 1014 /*FlattenArgs=*/false); 1015 ArgType = InstantiateType(ArgType, TemplateArgs, 1016 TTP->getDefaultArgumentLoc(), 1017 TTP->getDeclName()); 1018 } 1019 1020 if (ArgType.isNull()) 1021 return true; 1022 1023 Arg = TemplateArgument(TTP->getLocation(), ArgType); 1024 } else if (NonTypeTemplateParmDecl *NTTP 1025 = dyn_cast<NonTypeTemplateParmDecl>(*Param)) { 1026 if (!NTTP->hasDefaultArgument()) 1027 break; 1028 1029 InstantiatingTemplate Inst(*this, TemplateLoc, 1030 Template, Converted.getFlatArgumentList(), 1031 Converted.flatSize(), 1032 SourceRange(TemplateLoc, RAngleLoc)); 1033 1034 TemplateArgumentList TemplateArgs(Context, Converted, 1035 /*CopyArgs=*/false, 1036 /*FlattenArgs=*/false); 1037 1038 Sema::OwningExprResult E = InstantiateExpr(NTTP->getDefaultArgument(), 1039 TemplateArgs); 1040 if (E.isInvalid()) 1041 return true; 1042 1043 Arg = TemplateArgument(E.takeAs<Expr>()); 1044 } else { 1045 TemplateTemplateParmDecl *TempParm 1046 = cast<TemplateTemplateParmDecl>(*Param); 1047 1048 if (!TempParm->hasDefaultArgument()) 1049 break; 1050 1051 // FIXME: Instantiate default argument 1052 Arg = TemplateArgument(TempParm->getDefaultArgument()); 1053 } 1054 } else { 1055 // Retrieve the template argument produced by the user. 1056 Arg = TemplateArgs[ArgIdx]; 1057 } 1058 1059 1060 if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(*Param)) { 1061 // Check template type parameters. 1062 if (Arg.getKind() == TemplateArgument::Type) { 1063 if (CheckTemplateArgument(TTP, Arg.getAsType(), Arg.getLocation())) 1064 Invalid = true; 1065 1066 // Add the converted template type argument. 1067 Converted.push_back( 1068 TemplateArgument(Arg.getLocation(), 1069 Context.getCanonicalType(Arg.getAsType()))); 1070 continue; 1071 } 1072 1073 // C++ [temp.arg.type]p1: 1074 // A template-argument for a template-parameter which is a 1075 // type shall be a type-id. 1076 1077 // We have a template type parameter but the template argument 1078 // is not a type. 1079 Diag(Arg.getLocation(), diag::err_template_arg_must_be_type); 1080 Diag((*Param)->getLocation(), diag::note_template_param_here); 1081 Invalid = true; 1082 } else if (NonTypeTemplateParmDecl *NTTP 1083 = dyn_cast<NonTypeTemplateParmDecl>(*Param)) { 1084 // Check non-type template parameters. 1085 1086 // Instantiate the type of the non-type template parameter with 1087 // the template arguments we've seen thus far. 1088 QualType NTTPType = NTTP->getType(); 1089 if (NTTPType->isDependentType()) { 1090 // Instantiate the type of the non-type template parameter. 1091 InstantiatingTemplate Inst(*this, TemplateLoc, 1092 Template, Converted.getFlatArgumentList(), 1093 Converted.flatSize(), 1094 SourceRange(TemplateLoc, RAngleLoc)); 1095 1096 TemplateArgumentList TemplateArgs(Context, Converted, 1097 /*CopyArgs=*/false, 1098 /*FlattenArgs=*/false); 1099 NTTPType = InstantiateType(NTTPType, TemplateArgs, 1100 NTTP->getLocation(), 1101 NTTP->getDeclName()); 1102 // If that worked, check the non-type template parameter type 1103 // for validity. 1104 if (!NTTPType.isNull()) 1105 NTTPType = CheckNonTypeTemplateParameterType(NTTPType, 1106 NTTP->getLocation()); 1107 1108 if (NTTPType.isNull()) { 1109 Invalid = true; 1110 break; 1111 } 1112 } 1113 1114 switch (Arg.getKind()) { 1115 case TemplateArgument::Null: 1116 assert(false && "Should never see a NULL template argument here"); 1117 break; 1118 1119 case TemplateArgument::Expression: { 1120 Expr *E = Arg.getAsExpr(); 1121 TemplateArgument Result; 1122 if (CheckTemplateArgument(NTTP, NTTPType, E, Result)) 1123 Invalid = true; 1124 else 1125 Converted.push_back(Result); 1126 break; 1127 } 1128 1129 case TemplateArgument::Declaration: 1130 case TemplateArgument::Integral: 1131 // We've already checked this template argument, so just copy 1132 // it to the list of converted arguments. 1133 Converted.push_back(Arg); 1134 break; 1135 1136 case TemplateArgument::Type: 1137 // We have a non-type template parameter but the template 1138 // argument is a type. 1139 1140 // C++ [temp.arg]p2: 1141 // In a template-argument, an ambiguity between a type-id and 1142 // an expression is resolved to a type-id, regardless of the 1143 // form of the corresponding template-parameter. 1144 // 1145 // We warn specifically about this case, since it can be rather 1146 // confusing for users. 1147 if (Arg.getAsType()->isFunctionType()) 1148 Diag(Arg.getLocation(), diag::err_template_arg_nontype_ambig) 1149 << Arg.getAsType(); 1150 else 1151 Diag(Arg.getLocation(), diag::err_template_arg_must_be_expr); 1152 Diag((*Param)->getLocation(), diag::note_template_param_here); 1153 Invalid = true; 1154 } 1155 } else { 1156 // Check template template parameters. 1157 TemplateTemplateParmDecl *TempParm 1158 = cast<TemplateTemplateParmDecl>(*Param); 1159 1160 switch (Arg.getKind()) { 1161 case TemplateArgument::Null: 1162 assert(false && "Should never see a NULL template argument here"); 1163 break; 1164 1165 case TemplateArgument::Expression: { 1166 Expr *ArgExpr = Arg.getAsExpr(); 1167 if (ArgExpr && isa<DeclRefExpr>(ArgExpr) && 1168 isa<TemplateDecl>(cast<DeclRefExpr>(ArgExpr)->getDecl())) { 1169 if (CheckTemplateArgument(TempParm, cast<DeclRefExpr>(ArgExpr))) 1170 Invalid = true; 1171 1172 // Add the converted template argument. 1173 Decl *D 1174 = Context.getCanonicalDecl(cast<DeclRefExpr>(ArgExpr)->getDecl()); 1175 Converted.push_back(TemplateArgument(Arg.getLocation(), D)); 1176 continue; 1177 } 1178 } 1179 // fall through 1180 1181 case TemplateArgument::Type: { 1182 // We have a template template parameter but the template 1183 // argument does not refer to a template. 1184 Diag(Arg.getLocation(), diag::err_template_arg_must_be_template); 1185 Invalid = true; 1186 break; 1187 } 1188 1189 case TemplateArgument::Declaration: 1190 // We've already checked this template argument, so just copy 1191 // it to the list of converted arguments. 1192 Converted.push_back(Arg); 1193 break; 1194 1195 case TemplateArgument::Integral: 1196 assert(false && "Integral argument with template template parameter"); 1197 break; 1198 } 1199 } 1200 } 1201 1202 return Invalid; 1203 } 1204 1205 /// \brief Check a template argument against its corresponding 1206 /// template type parameter. 1207 /// 1208 /// This routine implements the semantics of C++ [temp.arg.type]. It 1209 /// returns true if an error occurred, and false otherwise. 1210 bool Sema::CheckTemplateArgument(TemplateTypeParmDecl *Param, 1211 QualType Arg, SourceLocation ArgLoc) { 1212 // C++ [temp.arg.type]p2: 1213 // A local type, a type with no linkage, an unnamed type or a type 1214 // compounded from any of these types shall not be used as a 1215 // template-argument for a template type-parameter. 1216 // 1217 // FIXME: Perform the recursive and no-linkage type checks. 1218 const TagType *Tag = 0; 1219 if (const EnumType *EnumT = Arg->getAsEnumType()) 1220 Tag = EnumT; 1221 else if (const RecordType *RecordT = Arg->getAsRecordType()) 1222 Tag = RecordT; 1223 if (Tag && Tag->getDecl()->getDeclContext()->isFunctionOrMethod()) 1224 return Diag(ArgLoc, diag::err_template_arg_local_type) 1225 << QualType(Tag, 0); 1226 else if (Tag && !Tag->getDecl()->getDeclName() && 1227 !Tag->getDecl()->getTypedefForAnonDecl()) { 1228 Diag(ArgLoc, diag::err_template_arg_unnamed_type); 1229 Diag(Tag->getDecl()->getLocation(), diag::note_template_unnamed_type_here); 1230 return true; 1231 } 1232 1233 return false; 1234 } 1235 1236 /// \brief Checks whether the given template argument is the address 1237 /// of an object or function according to C++ [temp.arg.nontype]p1. 1238 bool Sema::CheckTemplateArgumentAddressOfObjectOrFunction(Expr *Arg, 1239 NamedDecl *&Entity) { 1240 bool Invalid = false; 1241 1242 // See through any implicit casts we added to fix the type. 1243 if (ImplicitCastExpr *Cast = dyn_cast<ImplicitCastExpr>(Arg)) 1244 Arg = Cast->getSubExpr(); 1245 1246 // C++0x allows nullptr, and there's no further checking to be done for that. 1247 if (Arg->getType()->isNullPtrType()) 1248 return false; 1249 1250 // C++ [temp.arg.nontype]p1: 1251 // 1252 // A template-argument for a non-type, non-template 1253 // template-parameter shall be one of: [...] 1254 // 1255 // -- the address of an object or function with external 1256 // linkage, including function templates and function 1257 // template-ids but excluding non-static class members, 1258 // expressed as & id-expression where the & is optional if 1259 // the name refers to a function or array, or if the 1260 // corresponding template-parameter is a reference; or 1261 DeclRefExpr *DRE = 0; 1262 1263 // Ignore (and complain about) any excess parentheses. 1264 while (ParenExpr *Parens = dyn_cast<ParenExpr>(Arg)) { 1265 if (!Invalid) { 1266 Diag(Arg->getSourceRange().getBegin(), 1267 diag::err_template_arg_extra_parens) 1268 << Arg->getSourceRange(); 1269 Invalid = true; 1270 } 1271 1272 Arg = Parens->getSubExpr(); 1273 } 1274 1275 if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(Arg)) { 1276 if (UnOp->getOpcode() == UnaryOperator::AddrOf) 1277 DRE = dyn_cast<DeclRefExpr>(UnOp->getSubExpr()); 1278 } else 1279 DRE = dyn_cast<DeclRefExpr>(Arg); 1280 1281 if (!DRE || !isa<ValueDecl>(DRE->getDecl())) 1282 return Diag(Arg->getSourceRange().getBegin(), 1283 diag::err_template_arg_not_object_or_func_form) 1284 << Arg->getSourceRange(); 1285 1286 // Cannot refer to non-static data members 1287 if (FieldDecl *Field = dyn_cast<FieldDecl>(DRE->getDecl())) 1288 return Diag(Arg->getSourceRange().getBegin(), diag::err_template_arg_field) 1289 << Field << Arg->getSourceRange(); 1290 1291 // Cannot refer to non-static member functions 1292 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(DRE->getDecl())) 1293 if (!Method->isStatic()) 1294 return Diag(Arg->getSourceRange().getBegin(), 1295 diag::err_template_arg_method) 1296 << Method << Arg->getSourceRange(); 1297 1298 // Functions must have external linkage. 1299 if (FunctionDecl *Func = dyn_cast<FunctionDecl>(DRE->getDecl())) { 1300 if (Func->getStorageClass() == FunctionDecl::Static) { 1301 Diag(Arg->getSourceRange().getBegin(), 1302 diag::err_template_arg_function_not_extern) 1303 << Func << Arg->getSourceRange(); 1304 Diag(Func->getLocation(), diag::note_template_arg_internal_object) 1305 << true; 1306 return true; 1307 } 1308 1309 // Okay: we've named a function with external linkage. 1310 Entity = Func; 1311 return Invalid; 1312 } 1313 1314 if (VarDecl *Var = dyn_cast<VarDecl>(DRE->getDecl())) { 1315 if (!Var->hasGlobalStorage()) { 1316 Diag(Arg->getSourceRange().getBegin(), 1317 diag::err_template_arg_object_not_extern) 1318 << Var << Arg->getSourceRange(); 1319 Diag(Var->getLocation(), diag::note_template_arg_internal_object) 1320 << true; 1321 return true; 1322 } 1323 1324 // Okay: we've named an object with external linkage 1325 Entity = Var; 1326 return Invalid; 1327 } 1328 1329 // We found something else, but we don't know specifically what it is. 1330 Diag(Arg->getSourceRange().getBegin(), 1331 diag::err_template_arg_not_object_or_func) 1332 << Arg->getSourceRange(); 1333 Diag(DRE->getDecl()->getLocation(), 1334 diag::note_template_arg_refers_here); 1335 return true; 1336 } 1337 1338 /// \brief Checks whether the given template argument is a pointer to 1339 /// member constant according to C++ [temp.arg.nontype]p1. 1340 bool 1341 Sema::CheckTemplateArgumentPointerToMember(Expr *Arg, NamedDecl *&Member) { 1342 bool Invalid = false; 1343 1344 // See through any implicit casts we added to fix the type. 1345 if (ImplicitCastExpr *Cast = dyn_cast<ImplicitCastExpr>(Arg)) 1346 Arg = Cast->getSubExpr(); 1347 1348 // C++0x allows nullptr, and there's no further checking to be done for that. 1349 if (Arg->getType()->isNullPtrType()) 1350 return false; 1351 1352 // C++ [temp.arg.nontype]p1: 1353 // 1354 // A template-argument for a non-type, non-template 1355 // template-parameter shall be one of: [...] 1356 // 1357 // -- a pointer to member expressed as described in 5.3.1. 1358 QualifiedDeclRefExpr *DRE = 0; 1359 1360 // Ignore (and complain about) any excess parentheses. 1361 while (ParenExpr *Parens = dyn_cast<ParenExpr>(Arg)) { 1362 if (!Invalid) { 1363 Diag(Arg->getSourceRange().getBegin(), 1364 diag::err_template_arg_extra_parens) 1365 << Arg->getSourceRange(); 1366 Invalid = true; 1367 } 1368 1369 Arg = Parens->getSubExpr(); 1370 } 1371 1372 if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(Arg)) 1373 if (UnOp->getOpcode() == UnaryOperator::AddrOf) 1374 DRE = dyn_cast<QualifiedDeclRefExpr>(UnOp->getSubExpr()); 1375 1376 if (!DRE) 1377 return Diag(Arg->getSourceRange().getBegin(), 1378 diag::err_template_arg_not_pointer_to_member_form) 1379 << Arg->getSourceRange(); 1380 1381 if (isa<FieldDecl>(DRE->getDecl()) || isa<CXXMethodDecl>(DRE->getDecl())) { 1382 assert((isa<FieldDecl>(DRE->getDecl()) || 1383 !cast<CXXMethodDecl>(DRE->getDecl())->isStatic()) && 1384 "Only non-static member pointers can make it here"); 1385 1386 // Okay: this is the address of a non-static member, and therefore 1387 // a member pointer constant. 1388 Member = DRE->getDecl(); 1389 return Invalid; 1390 } 1391 1392 // We found something else, but we don't know specifically what it is. 1393 Diag(Arg->getSourceRange().getBegin(), 1394 diag::err_template_arg_not_pointer_to_member_form) 1395 << Arg->getSourceRange(); 1396 Diag(DRE->getDecl()->getLocation(), 1397 diag::note_template_arg_refers_here); 1398 return true; 1399 } 1400 1401 /// \brief Check a template argument against its corresponding 1402 /// non-type template parameter. 1403 /// 1404 /// This routine implements the semantics of C++ [temp.arg.nontype]. 1405 /// It returns true if an error occurred, and false otherwise. \p 1406 /// InstantiatedParamType is the type of the non-type template 1407 /// parameter after it has been instantiated. 1408 /// 1409 /// If no error was detected, Converted receives the converted template argument. 1410 bool Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, 1411 QualType InstantiatedParamType, Expr *&Arg, 1412 TemplateArgument &Converted) { 1413 SourceLocation StartLoc = Arg->getSourceRange().getBegin(); 1414 1415 // If either the parameter has a dependent type or the argument is 1416 // type-dependent, there's nothing we can check now. 1417 // FIXME: Add template argument to Converted! 1418 if (InstantiatedParamType->isDependentType() || Arg->isTypeDependent()) { 1419 // FIXME: Produce a cloned, canonical expression? 1420 Converted = TemplateArgument(Arg); 1421 return false; 1422 } 1423 1424 // C++ [temp.arg.nontype]p5: 1425 // The following conversions are performed on each expression used 1426 // as a non-type template-argument. If a non-type 1427 // template-argument cannot be converted to the type of the 1428 // corresponding template-parameter then the program is 1429 // ill-formed. 1430 // 1431 // -- for a non-type template-parameter of integral or 1432 // enumeration type, integral promotions (4.5) and integral 1433 // conversions (4.7) are applied. 1434 QualType ParamType = InstantiatedParamType; 1435 QualType ArgType = Arg->getType(); 1436 if (ParamType->isIntegralType() || ParamType->isEnumeralType()) { 1437 // C++ [temp.arg.nontype]p1: 1438 // A template-argument for a non-type, non-template 1439 // template-parameter shall be one of: 1440 // 1441 // -- an integral constant-expression of integral or enumeration 1442 // type; or 1443 // -- the name of a non-type template-parameter; or 1444 SourceLocation NonConstantLoc; 1445 llvm::APSInt Value; 1446 if (!ArgType->isIntegralType() && !ArgType->isEnumeralType()) { 1447 Diag(Arg->getSourceRange().getBegin(), 1448 diag::err_template_arg_not_integral_or_enumeral) 1449 << ArgType << Arg->getSourceRange(); 1450 Diag(Param->getLocation(), diag::note_template_param_here); 1451 return true; 1452 } else if (!Arg->isValueDependent() && 1453 !Arg->isIntegerConstantExpr(Value, Context, &NonConstantLoc)) { 1454 Diag(NonConstantLoc, diag::err_template_arg_not_ice) 1455 << ArgType << Arg->getSourceRange(); 1456 return true; 1457 } 1458 1459 // FIXME: We need some way to more easily get the unqualified form 1460 // of the types without going all the way to the 1461 // canonical type. 1462 if (Context.getCanonicalType(ParamType).getCVRQualifiers()) 1463 ParamType = Context.getCanonicalType(ParamType).getUnqualifiedType(); 1464 if (Context.getCanonicalType(ArgType).getCVRQualifiers()) 1465 ArgType = Context.getCanonicalType(ArgType).getUnqualifiedType(); 1466 1467 // Try to convert the argument to the parameter's type. 1468 if (ParamType == ArgType) { 1469 // Okay: no conversion necessary 1470 } else if (IsIntegralPromotion(Arg, ArgType, ParamType) || 1471 !ParamType->isEnumeralType()) { 1472 // This is an integral promotion or conversion. 1473 ImpCastExprToType(Arg, ParamType); 1474 } else { 1475 // We can't perform this conversion. 1476 Diag(Arg->getSourceRange().getBegin(), 1477 diag::err_template_arg_not_convertible) 1478 << Arg->getType() << InstantiatedParamType << Arg->getSourceRange(); 1479 Diag(Param->getLocation(), diag::note_template_param_here); 1480 return true; 1481 } 1482 1483 QualType IntegerType = Context.getCanonicalType(ParamType); 1484 if (const EnumType *Enum = IntegerType->getAsEnumType()) 1485 IntegerType = Context.getCanonicalType(Enum->getDecl()->getIntegerType()); 1486 1487 if (!Arg->isValueDependent()) { 1488 // Check that an unsigned parameter does not receive a negative 1489 // value. 1490 if (IntegerType->isUnsignedIntegerType() 1491 && (Value.isSigned() && Value.isNegative())) { 1492 Diag(Arg->getSourceRange().getBegin(), diag::err_template_arg_negative) 1493 << Value.toString(10) << Param->getType() 1494 << Arg->getSourceRange(); 1495 Diag(Param->getLocation(), diag::note_template_param_here); 1496 return true; 1497 } 1498 1499 // Check that we don't overflow the template parameter type. 1500 unsigned AllowedBits = Context.getTypeSize(IntegerType); 1501 if (Value.getActiveBits() > AllowedBits) { 1502 Diag(Arg->getSourceRange().getBegin(), 1503 diag::err_template_arg_too_large) 1504 << Value.toString(10) << Param->getType() 1505 << Arg->getSourceRange(); 1506 Diag(Param->getLocation(), diag::note_template_param_here); 1507 return true; 1508 } 1509 1510 if (Value.getBitWidth() != AllowedBits) 1511 Value.extOrTrunc(AllowedBits); 1512 Value.setIsSigned(IntegerType->isSignedIntegerType()); 1513 } 1514 1515 // Add the value of this argument to the list of converted 1516 // arguments. We use the bitwidth and signedness of the template 1517 // parameter. 1518 if (Arg->isValueDependent()) { 1519 // The argument is value-dependent. Create a new 1520 // TemplateArgument with the converted expression. 1521 Converted = TemplateArgument(Arg); 1522 return false; 1523 } 1524 1525 Converted = TemplateArgument(StartLoc, Value, 1526 ParamType->isEnumeralType() ? ParamType 1527 : IntegerType); 1528 return false; 1529 } 1530 1531 // Handle pointer-to-function, reference-to-function, and 1532 // pointer-to-member-function all in (roughly) the same way. 1533 if (// -- For a non-type template-parameter of type pointer to 1534 // function, only the function-to-pointer conversion (4.3) is 1535 // applied. If the template-argument represents a set of 1536 // overloaded functions (or a pointer to such), the matching 1537 // function is selected from the set (13.4). 1538 // In C++0x, any std::nullptr_t value can be converted. 1539 (ParamType->isPointerType() && 1540 ParamType->getAsPointerType()->getPointeeType()->isFunctionType()) || 1541 // -- For a non-type template-parameter of type reference to 1542 // function, no conversions apply. If the template-argument 1543 // represents a set of overloaded functions, the matching 1544 // function is selected from the set (13.4). 1545 (ParamType->isReferenceType() && 1546 ParamType->getAsReferenceType()->getPointeeType()->isFunctionType()) || 1547 // -- For a non-type template-parameter of type pointer to 1548 // member function, no conversions apply. If the 1549 // template-argument represents a set of overloaded member 1550 // functions, the matching member function is selected from 1551 // the set (13.4). 1552 // Again, C++0x allows a std::nullptr_t value. 1553 (ParamType->isMemberPointerType() && 1554 ParamType->getAsMemberPointerType()->getPointeeType() 1555 ->isFunctionType())) { 1556 if (Context.hasSameUnqualifiedType(ArgType, 1557 ParamType.getNonReferenceType())) { 1558 // We don't have to do anything: the types already match. 1559 } else if (ArgType->isNullPtrType() && (ParamType->isPointerType() || 1560 ParamType->isMemberPointerType())) { 1561 ArgType = ParamType; 1562 ImpCastExprToType(Arg, ParamType); 1563 } else if (ArgType->isFunctionType() && ParamType->isPointerType()) { 1564 ArgType = Context.getPointerType(ArgType); 1565 ImpCastExprToType(Arg, ArgType); 1566 } else if (FunctionDecl *Fn 1567 = ResolveAddressOfOverloadedFunction(Arg, ParamType, true)) { 1568 if (DiagnoseUseOfDecl(Fn, Arg->getSourceRange().getBegin())) 1569 return true; 1570 1571 FixOverloadedFunctionReference(Arg, Fn); 1572 ArgType = Arg->getType(); 1573 if (ArgType->isFunctionType() && ParamType->isPointerType()) { 1574 ArgType = Context.getPointerType(Arg->getType()); 1575 ImpCastExprToType(Arg, ArgType); 1576 } 1577 } 1578 1579 if (!Context.hasSameUnqualifiedType(ArgType, 1580 ParamType.getNonReferenceType())) { 1581 // We can't perform this conversion. 1582 Diag(Arg->getSourceRange().getBegin(), 1583 diag::err_template_arg_not_convertible) 1584 << Arg->getType() << InstantiatedParamType << Arg->getSourceRange(); 1585 Diag(Param->getLocation(), diag::note_template_param_here); 1586 return true; 1587 } 1588 1589 if (ParamType->isMemberPointerType()) { 1590 NamedDecl *Member = 0; 1591 if (CheckTemplateArgumentPointerToMember(Arg, Member)) 1592 return true; 1593 1594 Member = cast_or_null<NamedDecl>(Context.getCanonicalDecl(Member)); 1595 Converted = TemplateArgument(StartLoc, Member); 1596 return false; 1597 } 1598 1599 NamedDecl *Entity = 0; 1600 if (CheckTemplateArgumentAddressOfObjectOrFunction(Arg, Entity)) 1601 return true; 1602 1603 Entity = cast_or_null<NamedDecl>(Context.getCanonicalDecl(Entity)); 1604 Converted = TemplateArgument(StartLoc, Entity); 1605 return false; 1606 } 1607 1608 if (ParamType->isPointerType()) { 1609 // -- for a non-type template-parameter of type pointer to 1610 // object, qualification conversions (4.4) and the 1611 // array-to-pointer conversion (4.2) are applied. 1612 // C++0x also allows a value of std::nullptr_t. 1613 assert(ParamType->getAsPointerType()->getPointeeType()->isObjectType() && 1614 "Only object pointers allowed here"); 1615 1616 if (ArgType->isNullPtrType()) { 1617 ArgType = ParamType; 1618 ImpCastExprToType(Arg, ParamType); 1619 } else if (ArgType->isArrayType()) { 1620 ArgType = Context.getArrayDecayedType(ArgType); 1621 ImpCastExprToType(Arg, ArgType); 1622 } 1623 1624 if (IsQualificationConversion(ArgType, ParamType)) { 1625 ArgType = ParamType; 1626 ImpCastExprToType(Arg, ParamType); 1627 } 1628 1629 if (!Context.hasSameUnqualifiedType(ArgType, ParamType)) { 1630 // We can't perform this conversion. 1631 Diag(Arg->getSourceRange().getBegin(), 1632 diag::err_template_arg_not_convertible) 1633 << Arg->getType() << InstantiatedParamType << Arg->getSourceRange(); 1634 Diag(Param->getLocation(), diag::note_template_param_here); 1635 return true; 1636 } 1637 1638 NamedDecl *Entity = 0; 1639 if (CheckTemplateArgumentAddressOfObjectOrFunction(Arg, Entity)) 1640 return true; 1641 1642 Entity = cast_or_null<NamedDecl>(Context.getCanonicalDecl(Entity)); 1643 Converted = TemplateArgument(StartLoc, Entity); 1644 return false; 1645 } 1646 1647 if (const ReferenceType *ParamRefType = ParamType->getAsReferenceType()) { 1648 // -- For a non-type template-parameter of type reference to 1649 // object, no conversions apply. The type referred to by the 1650 // reference may be more cv-qualified than the (otherwise 1651 // identical) type of the template-argument. The 1652 // template-parameter is bound directly to the 1653 // template-argument, which must be an lvalue. 1654 assert(ParamRefType->getPointeeType()->isObjectType() && 1655 "Only object references allowed here"); 1656 1657 if (!Context.hasSameUnqualifiedType(ParamRefType->getPointeeType(), ArgType)) { 1658 Diag(Arg->getSourceRange().getBegin(), 1659 diag::err_template_arg_no_ref_bind) 1660 << InstantiatedParamType << Arg->getType() 1661 << Arg->getSourceRange(); 1662 Diag(Param->getLocation(), diag::note_template_param_here); 1663 return true; 1664 } 1665 1666 unsigned ParamQuals 1667 = Context.getCanonicalType(ParamType).getCVRQualifiers(); 1668 unsigned ArgQuals = Context.getCanonicalType(ArgType).getCVRQualifiers(); 1669 1670 if ((ParamQuals | ArgQuals) != ParamQuals) { 1671 Diag(Arg->getSourceRange().getBegin(), 1672 diag::err_template_arg_ref_bind_ignores_quals) 1673 << InstantiatedParamType << Arg->getType() 1674 << Arg->getSourceRange(); 1675 Diag(Param->getLocation(), diag::note_template_param_here); 1676 return true; 1677 } 1678 1679 NamedDecl *Entity = 0; 1680 if (CheckTemplateArgumentAddressOfObjectOrFunction(Arg, Entity)) 1681 return true; 1682 1683 Entity = cast<NamedDecl>(Context.getCanonicalDecl(Entity)); 1684 Converted = TemplateArgument(StartLoc, Entity); 1685 return false; 1686 } 1687 1688 // -- For a non-type template-parameter of type pointer to data 1689 // member, qualification conversions (4.4) are applied. 1690 // C++0x allows std::nullptr_t values. 1691 assert(ParamType->isMemberPointerType() && "Only pointers to members remain"); 1692 1693 if (Context.hasSameUnqualifiedType(ParamType, ArgType)) { 1694 // Types match exactly: nothing more to do here. 1695 } else if (ArgType->isNullPtrType()) { 1696 ImpCastExprToType(Arg, ParamType); 1697 } else if (IsQualificationConversion(ArgType, ParamType)) { 1698 ImpCastExprToType(Arg, ParamType); 1699 } else { 1700 // We can't perform this conversion. 1701 Diag(Arg->getSourceRange().getBegin(), 1702 diag::err_template_arg_not_convertible) 1703 << Arg->getType() << InstantiatedParamType << Arg->getSourceRange(); 1704 Diag(Param->getLocation(), diag::note_template_param_here); 1705 return true; 1706 } 1707 1708 NamedDecl *Member = 0; 1709 if (CheckTemplateArgumentPointerToMember(Arg, Member)) 1710 return true; 1711 1712 Member = cast_or_null<NamedDecl>(Context.getCanonicalDecl(Member)); 1713 Converted = TemplateArgument(StartLoc, Member); 1714 return false; 1715 } 1716 1717 /// \brief Check a template argument against its corresponding 1718 /// template template parameter. 1719 /// 1720 /// This routine implements the semantics of C++ [temp.arg.template]. 1721 /// It returns true if an error occurred, and false otherwise. 1722 bool Sema::CheckTemplateArgument(TemplateTemplateParmDecl *Param, 1723 DeclRefExpr *Arg) { 1724 assert(isa<TemplateDecl>(Arg->getDecl()) && "Only template decls allowed"); 1725 TemplateDecl *Template = cast<TemplateDecl>(Arg->getDecl()); 1726 1727 // C++ [temp.arg.template]p1: 1728 // A template-argument for a template template-parameter shall be 1729 // the name of a class template, expressed as id-expression. Only 1730 // primary class templates are considered when matching the 1731 // template template argument with the corresponding parameter; 1732 // partial specializations are not considered even if their 1733 // parameter lists match that of the template template parameter. 1734 if (!isa<ClassTemplateDecl>(Template)) { 1735 assert(isa<FunctionTemplateDecl>(Template) && 1736 "Only function templates are possible here"); 1737 Diag(Arg->getSourceRange().getBegin(), 1738 diag::note_template_arg_refers_here_func) 1739 << Template; 1740 } 1741 1742 return !TemplateParameterListsAreEqual(Template->getTemplateParameters(), 1743 Param->getTemplateParameters(), 1744 true, true, 1745 Arg->getSourceRange().getBegin()); 1746 } 1747 1748 /// \brief Determine whether the given template parameter lists are 1749 /// equivalent. 1750 /// 1751 /// \param New The new template parameter list, typically written in the 1752 /// source code as part of a new template declaration. 1753 /// 1754 /// \param Old The old template parameter list, typically found via 1755 /// name lookup of the template declared with this template parameter 1756 /// list. 1757 /// 1758 /// \param Complain If true, this routine will produce a diagnostic if 1759 /// the template parameter lists are not equivalent. 1760 /// 1761 /// \param IsTemplateTemplateParm If true, this routine is being 1762 /// called to compare the template parameter lists of a template 1763 /// template parameter. 1764 /// 1765 /// \param TemplateArgLoc If this source location is valid, then we 1766 /// are actually checking the template parameter list of a template 1767 /// argument (New) against the template parameter list of its 1768 /// corresponding template template parameter (Old). We produce 1769 /// slightly different diagnostics in this scenario. 1770 /// 1771 /// \returns True if the template parameter lists are equal, false 1772 /// otherwise. 1773 bool 1774 Sema::TemplateParameterListsAreEqual(TemplateParameterList *New, 1775 TemplateParameterList *Old, 1776 bool Complain, 1777 bool IsTemplateTemplateParm, 1778 SourceLocation TemplateArgLoc) { 1779 if (Old->size() != New->size()) { 1780 if (Complain) { 1781 unsigned NextDiag = diag::err_template_param_list_different_arity; 1782 if (TemplateArgLoc.isValid()) { 1783 Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch); 1784 NextDiag = diag::note_template_param_list_different_arity; 1785 } 1786 Diag(New->getTemplateLoc(), NextDiag) 1787 << (New->size() > Old->size()) 1788 << IsTemplateTemplateParm 1789 << SourceRange(New->getTemplateLoc(), New->getRAngleLoc()); 1790 Diag(Old->getTemplateLoc(), diag::note_template_prev_declaration) 1791 << IsTemplateTemplateParm 1792 << SourceRange(Old->getTemplateLoc(), Old->getRAngleLoc()); 1793 } 1794 1795 return false; 1796 } 1797 1798 for (TemplateParameterList::iterator OldParm = Old->begin(), 1799 OldParmEnd = Old->end(), NewParm = New->begin(); 1800 OldParm != OldParmEnd; ++OldParm, ++NewParm) { 1801 if ((*OldParm)->getKind() != (*NewParm)->getKind()) { 1802 unsigned NextDiag = diag::err_template_param_different_kind; 1803 if (TemplateArgLoc.isValid()) { 1804 Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch); 1805 NextDiag = diag::note_template_param_different_kind; 1806 } 1807 Diag((*NewParm)->getLocation(), NextDiag) 1808 << IsTemplateTemplateParm; 1809 Diag((*OldParm)->getLocation(), diag::note_template_prev_declaration) 1810 << IsTemplateTemplateParm; 1811 return false; 1812 } 1813 1814 if (isa<TemplateTypeParmDecl>(*OldParm)) { 1815 // Okay; all template type parameters are equivalent (since we 1816 // know we're at the same index). 1817 #if 0 1818 // FIXME: Enable this code in debug mode *after* we properly go through 1819 // and "instantiate" the template parameter lists of template template 1820 // parameters. It's only after this instantiation that (1) any dependent 1821 // types within the template parameter list of the template template 1822 // parameter can be checked, and (2) the template type parameter depths 1823 // will match up. 1824 QualType OldParmType 1825 = Context.getTypeDeclType(cast<TemplateTypeParmDecl>(*OldParm)); 1826 QualType NewParmType 1827 = Context.getTypeDeclType(cast<TemplateTypeParmDecl>(*NewParm)); 1828 assert(Context.getCanonicalType(OldParmType) == 1829 Context.getCanonicalType(NewParmType) && 1830 "type parameter mismatch?"); 1831 #endif 1832 } else if (NonTypeTemplateParmDecl *OldNTTP 1833 = dyn_cast<NonTypeTemplateParmDecl>(*OldParm)) { 1834 // The types of non-type template parameters must agree. 1835 NonTypeTemplateParmDecl *NewNTTP 1836 = cast<NonTypeTemplateParmDecl>(*NewParm); 1837 if (Context.getCanonicalType(OldNTTP->getType()) != 1838 Context.getCanonicalType(NewNTTP->getType())) { 1839 if (Complain) { 1840 unsigned NextDiag = diag::err_template_nontype_parm_different_type; 1841 if (TemplateArgLoc.isValid()) { 1842 Diag(TemplateArgLoc, 1843 diag::err_template_arg_template_params_mismatch); 1844 NextDiag = diag::note_template_nontype_parm_different_type; 1845 } 1846 Diag(NewNTTP->getLocation(), NextDiag) 1847 << NewNTTP->getType() 1848 << IsTemplateTemplateParm; 1849 Diag(OldNTTP->getLocation(), 1850 diag::note_template_nontype_parm_prev_declaration) 1851 << OldNTTP->getType(); 1852 } 1853 return false; 1854 } 1855 } else { 1856 // The template parameter lists of template template 1857 // parameters must agree. 1858 // FIXME: Could we perform a faster "type" comparison here? 1859 assert(isa<TemplateTemplateParmDecl>(*OldParm) && 1860 "Only template template parameters handled here"); 1861 TemplateTemplateParmDecl *OldTTP 1862 = cast<TemplateTemplateParmDecl>(*OldParm); 1863 TemplateTemplateParmDecl *NewTTP 1864 = cast<TemplateTemplateParmDecl>(*NewParm); 1865 if (!TemplateParameterListsAreEqual(NewTTP->getTemplateParameters(), 1866 OldTTP->getTemplateParameters(), 1867 Complain, 1868 /*IsTemplateTemplateParm=*/true, 1869 TemplateArgLoc)) 1870 return false; 1871 } 1872 } 1873 1874 return true; 1875 } 1876 1877 /// \brief Check whether a template can be declared within this scope. 1878 /// 1879 /// If the template declaration is valid in this scope, returns 1880 /// false. Otherwise, issues a diagnostic and returns true. 1881 bool 1882 Sema::CheckTemplateDeclScope(Scope *S, 1883 MultiTemplateParamsArg &TemplateParameterLists) { 1884 assert(TemplateParameterLists.size() > 0 && "Not a template"); 1885 1886 // Find the nearest enclosing declaration scope. 1887 while ((S->getFlags() & Scope::DeclScope) == 0 || 1888 (S->getFlags() & Scope::TemplateParamScope) != 0) 1889 S = S->getParent(); 1890 1891 TemplateParameterList *TemplateParams = 1892 static_cast<TemplateParameterList*>(*TemplateParameterLists.get()); 1893 SourceLocation TemplateLoc = TemplateParams->getTemplateLoc(); 1894 SourceRange TemplateRange 1895 = SourceRange(TemplateLoc, TemplateParams->getRAngleLoc()); 1896 1897 // C++ [temp]p2: 1898 // A template-declaration can appear only as a namespace scope or 1899 // class scope declaration. 1900 DeclContext *Ctx = static_cast<DeclContext *>(S->getEntity()); 1901 while (Ctx && isa<LinkageSpecDecl>(Ctx)) { 1902 if (cast<LinkageSpecDecl>(Ctx)->getLanguage() != LinkageSpecDecl::lang_cxx) 1903 return Diag(TemplateLoc, diag::err_template_linkage) 1904 << TemplateRange; 1905 1906 Ctx = Ctx->getParent(); 1907 } 1908 1909 if (Ctx && (Ctx->isFileContext() || Ctx->isRecord())) 1910 return false; 1911 1912 return Diag(TemplateLoc, diag::err_template_outside_namespace_or_class_scope) 1913 << TemplateRange; 1914 } 1915 1916 /// \brief Check whether a class template specialization or explicit 1917 /// instantiation in the current context is well-formed. 1918 /// 1919 /// This routine determines whether a class template specialization or 1920 /// explicit instantiation can be declared in the current context 1921 /// (C++ [temp.expl.spec]p2, C++0x [temp.explicit]p2) and emits 1922 /// appropriate diagnostics if there was an error. It returns true if 1923 // there was an error that we cannot recover from, and false otherwise. 1924 bool 1925 Sema::CheckClassTemplateSpecializationScope(ClassTemplateDecl *ClassTemplate, 1926 ClassTemplateSpecializationDecl *PrevDecl, 1927 SourceLocation TemplateNameLoc, 1928 SourceRange ScopeSpecifierRange, 1929 bool ExplicitInstantiation) { 1930 // C++ [temp.expl.spec]p2: 1931 // An explicit specialization shall be declared in the namespace 1932 // of which the template is a member, or, for member templates, in 1933 // the namespace of which the enclosing class or enclosing class 1934 // template is a member. An explicit specialization of a member 1935 // function, member class or static data member of a class 1936 // template shall be declared in the namespace of which the class 1937 // template is a member. Such a declaration may also be a 1938 // definition. If the declaration is not a definition, the 1939 // specialization may be defined later in the name- space in which 1940 // the explicit specialization was declared, or in a namespace 1941 // that encloses the one in which the explicit specialization was 1942 // declared. 1943 if (CurContext->getLookupContext()->isFunctionOrMethod()) { 1944 Diag(TemplateNameLoc, diag::err_template_spec_decl_function_scope) 1945 << ExplicitInstantiation << ClassTemplate; 1946 return true; 1947 } 1948 1949 DeclContext *DC = CurContext->getEnclosingNamespaceContext(); 1950 DeclContext *TemplateContext 1951 = ClassTemplate->getDeclContext()->getEnclosingNamespaceContext(); 1952 if ((!PrevDecl || PrevDecl->getSpecializationKind() == TSK_Undeclared) && 1953 !ExplicitInstantiation) { 1954 // There is no prior declaration of this entity, so this 1955 // specialization must be in the same context as the template 1956 // itself. 1957 if (DC != TemplateContext) { 1958 if (isa<TranslationUnitDecl>(TemplateContext)) 1959 Diag(TemplateNameLoc, diag::err_template_spec_decl_out_of_scope_global) 1960 << ClassTemplate << ScopeSpecifierRange; 1961 else if (isa<NamespaceDecl>(TemplateContext)) 1962 Diag(TemplateNameLoc, diag::err_template_spec_decl_out_of_scope) 1963 << ClassTemplate << cast<NamedDecl>(TemplateContext) 1964 << ScopeSpecifierRange; 1965 1966 Diag(ClassTemplate->getLocation(), diag::note_template_decl_here); 1967 } 1968 1969 return false; 1970 } 1971 1972 // We have a previous declaration of this entity. Make sure that 1973 // this redeclaration (or definition) occurs in an enclosing namespace. 1974 if (!CurContext->Encloses(TemplateContext)) { 1975 // FIXME: In C++98, we would like to turn these errors into warnings, 1976 // dependent on a -Wc++0x flag. 1977 bool SuppressedDiag = false; 1978 if (isa<TranslationUnitDecl>(TemplateContext)) { 1979 if (!ExplicitInstantiation || getLangOptions().CPlusPlus0x) 1980 Diag(TemplateNameLoc, diag::err_template_spec_redecl_global_scope) 1981 << ExplicitInstantiation << ClassTemplate << ScopeSpecifierRange; 1982 else 1983 SuppressedDiag = true; 1984 } else if (isa<NamespaceDecl>(TemplateContext)) { 1985 if (!ExplicitInstantiation || getLangOptions().CPlusPlus0x) 1986 Diag(TemplateNameLoc, diag::err_template_spec_redecl_out_of_scope) 1987 << ExplicitInstantiation << ClassTemplate 1988 << cast<NamedDecl>(TemplateContext) << ScopeSpecifierRange; 1989 else 1990 SuppressedDiag = true; 1991 } 1992 1993 if (!SuppressedDiag) 1994 Diag(ClassTemplate->getLocation(), diag::note_template_decl_here); 1995 } 1996 1997 return false; 1998 } 1999 2000 Sema::DeclResult 2001 Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagKind TK, 2002 SourceLocation KWLoc, 2003 const CXXScopeSpec &SS, 2004 TemplateTy TemplateD, 2005 SourceLocation TemplateNameLoc, 2006 SourceLocation LAngleLoc, 2007 ASTTemplateArgsPtr TemplateArgsIn, 2008 SourceLocation *TemplateArgLocs, 2009 SourceLocation RAngleLoc, 2010 AttributeList *Attr, 2011 MultiTemplateParamsArg TemplateParameterLists) { 2012 // Find the class template we're specializing 2013 TemplateName Name = TemplateD.getAsVal<TemplateName>(); 2014 ClassTemplateDecl *ClassTemplate 2015 = cast<ClassTemplateDecl>(Name.getAsTemplateDecl()); 2016 2017 bool isPartialSpecialization = false; 2018 2019 // Check the validity of the template headers that introduce this 2020 // template. 2021 // FIXME: Once we have member templates, we'll need to check 2022 // C++ [temp.expl.spec]p17-18, where we could have multiple levels of 2023 // template<> headers. 2024 if (TemplateParameterLists.size() == 0) 2025 Diag(KWLoc, diag::err_template_spec_needs_header) 2026 << CodeModificationHint::CreateInsertion(KWLoc, "template<> "); 2027 else { 2028 TemplateParameterList *TemplateParams 2029 = static_cast<TemplateParameterList*>(*TemplateParameterLists.get()); 2030 if (TemplateParameterLists.size() > 1) { 2031 Diag(TemplateParams->getTemplateLoc(), 2032 diag::err_template_spec_extra_headers); 2033 return true; 2034 } 2035 2036 // FIXME: We'll need more checks, here! 2037 if (TemplateParams->size() > 0) 2038 isPartialSpecialization = true; 2039 } 2040 2041 // Check that the specialization uses the same tag kind as the 2042 // original template. 2043 TagDecl::TagKind Kind; 2044 switch (TagSpec) { 2045 default: assert(0 && "Unknown tag type!"); 2046 case DeclSpec::TST_struct: Kind = TagDecl::TK_struct; break; 2047 case DeclSpec::TST_union: Kind = TagDecl::TK_union; break; 2048 case DeclSpec::TST_class: Kind = TagDecl::TK_class; break; 2049 } 2050 if (!isAcceptableTagRedeclaration(ClassTemplate->getTemplatedDecl(), 2051 Kind, KWLoc, 2052 *ClassTemplate->getIdentifier())) { 2053 Diag(KWLoc, diag::err_use_with_wrong_tag) 2054 << ClassTemplate 2055 << CodeModificationHint::CreateReplacement(KWLoc, 2056 ClassTemplate->getTemplatedDecl()->getKindName()); 2057 Diag(ClassTemplate->getTemplatedDecl()->getLocation(), 2058 diag::note_previous_use); 2059 Kind = ClassTemplate->getTemplatedDecl()->getTagKind(); 2060 } 2061 2062 // Translate the parser's template argument list in our AST format. 2063 llvm::SmallVector<TemplateArgument, 16> TemplateArgs; 2064 translateTemplateArguments(TemplateArgsIn, TemplateArgLocs, TemplateArgs); 2065 2066 // Check that the template argument list is well-formed for this 2067 // template. 2068 TemplateArgumentListBuilder ConvertedTemplateArgs(Context); 2069 if (CheckTemplateArgumentList(ClassTemplate, TemplateNameLoc, LAngleLoc, 2070 &TemplateArgs[0], TemplateArgs.size(), 2071 RAngleLoc, ConvertedTemplateArgs)) 2072 return true; 2073 2074 assert((ConvertedTemplateArgs.size() == 2075 ClassTemplate->getTemplateParameters()->size()) && 2076 "Converted template argument list is too short!"); 2077 2078 // Find the class template (partial) specialization declaration that 2079 // corresponds to these arguments. 2080 llvm::FoldingSetNodeID ID; 2081 if (isPartialSpecialization) 2082 // FIXME: Template parameter list matters, too 2083 ClassTemplatePartialSpecializationDecl::Profile(ID, 2084 ConvertedTemplateArgs.getFlatArgumentList(), 2085 ConvertedTemplateArgs.flatSize()); 2086 else 2087 ClassTemplateSpecializationDecl::Profile(ID, 2088 ConvertedTemplateArgs.getFlatArgumentList(), 2089 ConvertedTemplateArgs.flatSize()); 2090 void *InsertPos = 0; 2091 ClassTemplateSpecializationDecl *PrevDecl = 0; 2092 2093 if (isPartialSpecialization) 2094 PrevDecl 2095 = ClassTemplate->getPartialSpecializations().FindNodeOrInsertPos(ID, 2096 InsertPos); 2097 else 2098 PrevDecl 2099 = ClassTemplate->getSpecializations().FindNodeOrInsertPos(ID, InsertPos); 2100 2101 ClassTemplateSpecializationDecl *Specialization = 0; 2102 2103 // Check whether we can declare a class template specialization in 2104 // the current scope. 2105 if (CheckClassTemplateSpecializationScope(ClassTemplate, PrevDecl, 2106 TemplateNameLoc, 2107 SS.getRange(), 2108 /*ExplicitInstantiation=*/false)) 2109 return true; 2110 2111 if (PrevDecl && PrevDecl->getSpecializationKind() == TSK_Undeclared) { 2112 // Since the only prior class template specialization with these 2113 // arguments was referenced but not declared, reuse that 2114 // declaration node as our own, updating its source location to 2115 // reflect our new declaration. 2116 Specialization = PrevDecl; 2117 Specialization->setLocation(TemplateNameLoc); 2118 PrevDecl = 0; 2119 } else if (isPartialSpecialization) { 2120 // FIXME: extra checking for partial specializations 2121 2122 // Create a new class template partial specialization declaration node. 2123 TemplateParameterList *TemplateParams 2124 = static_cast<TemplateParameterList*>(*TemplateParameterLists.get()); 2125 ClassTemplatePartialSpecializationDecl *PrevPartial 2126 = cast_or_null<ClassTemplatePartialSpecializationDecl>(PrevDecl); 2127 ClassTemplatePartialSpecializationDecl *Partial 2128 = ClassTemplatePartialSpecializationDecl::Create(Context, 2129 ClassTemplate->getDeclContext(), 2130 TemplateNameLoc, 2131 TemplateParams, 2132 ClassTemplate, 2133 ConvertedTemplateArgs, 2134 PrevPartial); 2135 2136 if (PrevPartial) { 2137 ClassTemplate->getPartialSpecializations().RemoveNode(PrevPartial); 2138 ClassTemplate->getPartialSpecializations().GetOrInsertNode(Partial); 2139 } else { 2140 ClassTemplate->getPartialSpecializations().InsertNode(Partial, InsertPos); 2141 } 2142 Specialization = Partial; 2143 } else { 2144 // Create a new class template specialization declaration node for 2145 // this explicit specialization. 2146 Specialization 2147 = ClassTemplateSpecializationDecl::Create(Context, 2148 ClassTemplate->getDeclContext(), 2149 TemplateNameLoc, 2150 ClassTemplate, 2151 ConvertedTemplateArgs, 2152 PrevDecl); 2153 2154 if (PrevDecl) { 2155 ClassTemplate->getSpecializations().RemoveNode(PrevDecl); 2156 ClassTemplate->getSpecializations().GetOrInsertNode(Specialization); 2157 } else { 2158 ClassTemplate->getSpecializations().InsertNode(Specialization, 2159 InsertPos); 2160 } 2161 } 2162 2163 // Note that this is an explicit specialization. 2164 Specialization->setSpecializationKind(TSK_ExplicitSpecialization); 2165 2166 // Check that this isn't a redefinition of this specialization. 2167 if (TK == TK_Definition) { 2168 if (RecordDecl *Def = Specialization->getDefinition(Context)) { 2169 // FIXME: Should also handle explicit specialization after implicit 2170 // instantiation with a special diagnostic. 2171 SourceRange Range(TemplateNameLoc, RAngleLoc); 2172 Diag(TemplateNameLoc, diag::err_redefinition) 2173 << Context.getTypeDeclType(Specialization) << Range; 2174 Diag(Def->getLocation(), diag::note_previous_definition); 2175 Specialization->setInvalidDecl(); 2176 return true; 2177 } 2178 } 2179 2180 // Build the fully-sugared type for this class template 2181 // specialization as the user wrote in the specialization 2182 // itself. This means that we'll pretty-print the type retrieved 2183 // from the specialization's declaration the way that the user 2184 // actually wrote the specialization, rather than formatting the 2185 // name based on the "canonical" representation used to store the 2186 // template arguments in the specialization. 2187 QualType WrittenTy 2188 = Context.getTemplateSpecializationType(Name, 2189 &TemplateArgs[0], 2190 TemplateArgs.size(), 2191 Context.getTypeDeclType(Specialization)); 2192 Specialization->setTypeAsWritten(WrittenTy); 2193 TemplateArgsIn.release(); 2194 2195 // C++ [temp.expl.spec]p9: 2196 // A template explicit specialization is in the scope of the 2197 // namespace in which the template was defined. 2198 // 2199 // We actually implement this paragraph where we set the semantic 2200 // context (in the creation of the ClassTemplateSpecializationDecl), 2201 // but we also maintain the lexical context where the actual 2202 // definition occurs. 2203 Specialization->setLexicalDeclContext(CurContext); 2204 2205 // We may be starting the definition of this specialization. 2206 if (TK == TK_Definition) 2207 Specialization->startDefinition(); 2208 2209 // Add the specialization into its lexical context, so that it can 2210 // be seen when iterating through the list of declarations in that 2211 // context. However, specializations are not found by name lookup. 2212 CurContext->addDecl(Context, Specialization); 2213 return DeclPtrTy::make(Specialization); 2214 } 2215 2216 // Explicit instantiation of a class template specialization 2217 Sema::DeclResult 2218 Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation TemplateLoc, 2219 unsigned TagSpec, 2220 SourceLocation KWLoc, 2221 const CXXScopeSpec &SS, 2222 TemplateTy TemplateD, 2223 SourceLocation TemplateNameLoc, 2224 SourceLocation LAngleLoc, 2225 ASTTemplateArgsPtr TemplateArgsIn, 2226 SourceLocation *TemplateArgLocs, 2227 SourceLocation RAngleLoc, 2228 AttributeList *Attr) { 2229 // Find the class template we're specializing 2230 TemplateName Name = TemplateD.getAsVal<TemplateName>(); 2231 ClassTemplateDecl *ClassTemplate 2232 = cast<ClassTemplateDecl>(Name.getAsTemplateDecl()); 2233 2234 // Check that the specialization uses the same tag kind as the 2235 // original template. 2236 TagDecl::TagKind Kind; 2237 switch (TagSpec) { 2238 default: assert(0 && "Unknown tag type!"); 2239 case DeclSpec::TST_struct: Kind = TagDecl::TK_struct; break; 2240 case DeclSpec::TST_union: Kind = TagDecl::TK_union; break; 2241 case DeclSpec::TST_class: Kind = TagDecl::TK_class; break; 2242 } 2243 if (!isAcceptableTagRedeclaration(ClassTemplate->getTemplatedDecl(), 2244 Kind, KWLoc, 2245 *ClassTemplate->getIdentifier())) { 2246 Diag(KWLoc, diag::err_use_with_wrong_tag) 2247 << ClassTemplate 2248 << CodeModificationHint::CreateReplacement(KWLoc, 2249 ClassTemplate->getTemplatedDecl()->getKindName()); 2250 Diag(ClassTemplate->getTemplatedDecl()->getLocation(), 2251 diag::note_previous_use); 2252 Kind = ClassTemplate->getTemplatedDecl()->getTagKind(); 2253 } 2254 2255 // C++0x [temp.explicit]p2: 2256 // [...] An explicit instantiation shall appear in an enclosing 2257 // namespace of its template. [...] 2258 // 2259 // This is C++ DR 275. 2260 if (CheckClassTemplateSpecializationScope(ClassTemplate, 0, 2261 TemplateNameLoc, 2262 SS.getRange(), 2263 /*ExplicitInstantiation=*/true)) 2264 return true; 2265 2266 // Translate the parser's template argument list in our AST format. 2267 llvm::SmallVector<TemplateArgument, 16> TemplateArgs; 2268 translateTemplateArguments(TemplateArgsIn, TemplateArgLocs, TemplateArgs); 2269 2270 // Check that the template argument list is well-formed for this 2271 // template. 2272 TemplateArgumentListBuilder ConvertedTemplateArgs(Context); 2273 if (CheckTemplateArgumentList(ClassTemplate, TemplateNameLoc, LAngleLoc, 2274 TemplateArgs.data(), TemplateArgs.size(), 2275 RAngleLoc, ConvertedTemplateArgs)) 2276 return true; 2277 2278 assert((ConvertedTemplateArgs.size() == 2279 ClassTemplate->getTemplateParameters()->size()) && 2280 "Converted template argument list is too short!"); 2281 2282 // Find the class template specialization declaration that 2283 // corresponds to these arguments. 2284 llvm::FoldingSetNodeID ID; 2285 ClassTemplateSpecializationDecl::Profile(ID, 2286 ConvertedTemplateArgs.getFlatArgumentList(), 2287 ConvertedTemplateArgs.flatSize()); 2288 void *InsertPos = 0; 2289 ClassTemplateSpecializationDecl *PrevDecl 2290 = ClassTemplate->getSpecializations().FindNodeOrInsertPos(ID, InsertPos); 2291 2292 ClassTemplateSpecializationDecl *Specialization = 0; 2293 2294 bool SpecializationRequiresInstantiation = true; 2295 if (PrevDecl) { 2296 if (PrevDecl->getSpecializationKind() == TSK_ExplicitInstantiation) { 2297 // This particular specialization has already been declared or 2298 // instantiated. We cannot explicitly instantiate it. 2299 Diag(TemplateNameLoc, diag::err_explicit_instantiation_duplicate) 2300 << Context.getTypeDeclType(PrevDecl); 2301 Diag(PrevDecl->getLocation(), 2302 diag::note_previous_explicit_instantiation); 2303 return DeclPtrTy::make(PrevDecl); 2304 } 2305 2306 if (PrevDecl->getSpecializationKind() == TSK_ExplicitSpecialization) { 2307 // C++ DR 259, C++0x [temp.explicit]p4: 2308 // For a given set of template parameters, if an explicit 2309 // instantiation of a template appears after a declaration of 2310 // an explicit specialization for that template, the explicit 2311 // instantiation has no effect. 2312 if (!getLangOptions().CPlusPlus0x) { 2313 Diag(TemplateNameLoc, 2314 diag::ext_explicit_instantiation_after_specialization) 2315 << Context.getTypeDeclType(PrevDecl); 2316 Diag(PrevDecl->getLocation(), 2317 diag::note_previous_template_specialization); 2318 } 2319 2320 // Create a new class template specialization declaration node 2321 // for this explicit specialization. This node is only used to 2322 // record the existence of this explicit instantiation for 2323 // accurate reproduction of the source code; we don't actually 2324 // use it for anything, since it is semantically irrelevant. 2325 Specialization 2326 = ClassTemplateSpecializationDecl::Create(Context, 2327 ClassTemplate->getDeclContext(), 2328 TemplateNameLoc, 2329 ClassTemplate, 2330 ConvertedTemplateArgs, 0); 2331 Specialization->setLexicalDeclContext(CurContext); 2332 CurContext->addDecl(Context, Specialization); 2333 return DeclPtrTy::make(Specialization); 2334 } 2335 2336 // If we have already (implicitly) instantiated this 2337 // specialization, there is less work to do. 2338 if (PrevDecl->getSpecializationKind() == TSK_ImplicitInstantiation) 2339 SpecializationRequiresInstantiation = false; 2340 2341 // Since the only prior class template specialization with these 2342 // arguments was referenced but not declared, reuse that 2343 // declaration node as our own, updating its source location to 2344 // reflect our new declaration. 2345 Specialization = PrevDecl; 2346 Specialization->setLocation(TemplateNameLoc); 2347 PrevDecl = 0; 2348 } else { 2349 // Create a new class template specialization declaration node for 2350 // this explicit specialization. 2351 Specialization 2352 = ClassTemplateSpecializationDecl::Create(Context, 2353 ClassTemplate->getDeclContext(), 2354 TemplateNameLoc, 2355 ClassTemplate, 2356 ConvertedTemplateArgs, 0); 2357 2358 ClassTemplate->getSpecializations().InsertNode(Specialization, 2359 InsertPos); 2360 } 2361 2362 // Build the fully-sugared type for this explicit instantiation as 2363 // the user wrote in the explicit instantiation itself. This means 2364 // that we'll pretty-print the type retrieved from the 2365 // specialization's declaration the way that the user actually wrote 2366 // the explicit instantiation, rather than formatting the name based 2367 // on the "canonical" representation used to store the template 2368 // arguments in the specialization. 2369 QualType WrittenTy 2370 = Context.getTemplateSpecializationType(Name, 2371 TemplateArgs.data(), 2372 TemplateArgs.size(), 2373 Context.getTypeDeclType(Specialization)); 2374 Specialization->setTypeAsWritten(WrittenTy); 2375 TemplateArgsIn.release(); 2376 2377 // Add the explicit instantiation into its lexical context. However, 2378 // since explicit instantiations are never found by name lookup, we 2379 // just put it into the declaration context directly. 2380 Specialization->setLexicalDeclContext(CurContext); 2381 CurContext->addDecl(Context, Specialization); 2382 2383 // C++ [temp.explicit]p3: 2384 // A definition of a class template or class member template 2385 // shall be in scope at the point of the explicit instantiation of 2386 // the class template or class member template. 2387 // 2388 // This check comes when we actually try to perform the 2389 // instantiation. 2390 if (SpecializationRequiresInstantiation) 2391 InstantiateClassTemplateSpecialization(Specialization, true); 2392 else // Instantiate the members of this class template specialization. 2393 InstantiateClassTemplateSpecializationMembers(TemplateLoc, Specialization); 2394 2395 return DeclPtrTy::make(Specialization); 2396 } 2397 2398 // Explicit instantiation of a member class of a class template. 2399 Sema::DeclResult 2400 Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation TemplateLoc, 2401 unsigned TagSpec, 2402 SourceLocation KWLoc, 2403 const CXXScopeSpec &SS, 2404 IdentifierInfo *Name, 2405 SourceLocation NameLoc, 2406 AttributeList *Attr) { 2407 2408 bool Owned = false; 2409 DeclPtrTy TagD = ActOnTag(S, TagSpec, Action::TK_Reference, 2410 KWLoc, SS, Name, NameLoc, Attr, AS_none, Owned); 2411 if (!TagD) 2412 return true; 2413 2414 TagDecl *Tag = cast<TagDecl>(TagD.getAs<Decl>()); 2415 if (Tag->isEnum()) { 2416 Diag(TemplateLoc, diag::err_explicit_instantiation_enum) 2417 << Context.getTypeDeclType(Tag); 2418 return true; 2419 } 2420 2421 if (Tag->isInvalidDecl()) 2422 return true; 2423 2424 CXXRecordDecl *Record = cast<CXXRecordDecl>(Tag); 2425 CXXRecordDecl *Pattern = Record->getInstantiatedFromMemberClass(); 2426 if (!Pattern) { 2427 Diag(TemplateLoc, diag::err_explicit_instantiation_nontemplate_type) 2428 << Context.getTypeDeclType(Record); 2429 Diag(Record->getLocation(), diag::note_nontemplate_decl_here); 2430 return true; 2431 } 2432 2433 // C++0x [temp.explicit]p2: 2434 // [...] An explicit instantiation shall appear in an enclosing 2435 // namespace of its template. [...] 2436 // 2437 // This is C++ DR 275. 2438 if (getLangOptions().CPlusPlus0x) { 2439 // FIXME: In C++98, we would like to turn these errors into warnings, 2440 // dependent on a -Wc++0x flag. 2441 DeclContext *PatternContext 2442 = Pattern->getDeclContext()->getEnclosingNamespaceContext(); 2443 if (!CurContext->Encloses(PatternContext)) { 2444 Diag(TemplateLoc, diag::err_explicit_instantiation_out_of_scope) 2445 << Record << cast<NamedDecl>(PatternContext) << SS.getRange(); 2446 Diag(Pattern->getLocation(), diag::note_previous_declaration); 2447 } 2448 } 2449 2450 if (!Record->getDefinition(Context)) { 2451 // If the class has a definition, instantiate it (and all of its 2452 // members, recursively). 2453 Pattern = cast_or_null<CXXRecordDecl>(Pattern->getDefinition(Context)); 2454 if (Pattern && InstantiateClass(TemplateLoc, Record, Pattern, 2455 getTemplateInstantiationArgs(Record), 2456 /*ExplicitInstantiation=*/true)) 2457 return true; 2458 } else // Instantiate all of the members of class. 2459 InstantiateClassMembers(TemplateLoc, Record, 2460 getTemplateInstantiationArgs(Record)); 2461 2462 // FIXME: We don't have any representation for explicit instantiations of 2463 // member classes. Such a representation is not needed for compilation, but it 2464 // should be available for clients that want to see all of the declarations in 2465 // the source code. 2466 return TagD; 2467 } 2468 2469 Sema::TypeResult 2470 Sema::ActOnTypenameType(SourceLocation TypenameLoc, const CXXScopeSpec &SS, 2471 const IdentifierInfo &II, SourceLocation IdLoc) { 2472 NestedNameSpecifier *NNS 2473 = static_cast<NestedNameSpecifier *>(SS.getScopeRep()); 2474 if (!NNS) 2475 return true; 2476 2477 QualType T = CheckTypenameType(NNS, II, SourceRange(TypenameLoc, IdLoc)); 2478 if (T.isNull()) 2479 return true; 2480 return T.getAsOpaquePtr(); 2481 } 2482 2483 Sema::TypeResult 2484 Sema::ActOnTypenameType(SourceLocation TypenameLoc, const CXXScopeSpec &SS, 2485 SourceLocation TemplateLoc, TypeTy *Ty) { 2486 QualType T = QualType::getFromOpaquePtr(Ty); 2487 NestedNameSpecifier *NNS 2488 = static_cast<NestedNameSpecifier *>(SS.getScopeRep()); 2489 const TemplateSpecializationType *TemplateId 2490 = T->getAsTemplateSpecializationType(); 2491 assert(TemplateId && "Expected a template specialization type"); 2492 2493 if (NNS->isDependent()) 2494 return Context.getTypenameType(NNS, TemplateId).getAsOpaquePtr(); 2495 2496 return Context.getQualifiedNameType(NNS, T).getAsOpaquePtr(); 2497 } 2498 2499 /// \brief Build the type that describes a C++ typename specifier, 2500 /// e.g., "typename T::type". 2501 QualType 2502 Sema::CheckTypenameType(NestedNameSpecifier *NNS, const IdentifierInfo &II, 2503 SourceRange Range) { 2504 CXXRecordDecl *CurrentInstantiation = 0; 2505 if (NNS->isDependent()) { 2506 CurrentInstantiation = getCurrentInstantiationOf(NNS); 2507 2508 // If the nested-name-specifier does not refer to the current 2509 // instantiation, then build a typename type. 2510 if (!CurrentInstantiation) 2511 return Context.getTypenameType(NNS, &II); 2512 } 2513 2514 DeclContext *Ctx = 0; 2515 2516 if (CurrentInstantiation) 2517 Ctx = CurrentInstantiation; 2518 else { 2519 CXXScopeSpec SS; 2520 SS.setScopeRep(NNS); 2521 SS.setRange(Range); 2522 if (RequireCompleteDeclContext(SS)) 2523 return QualType(); 2524 2525 Ctx = computeDeclContext(SS); 2526 } 2527 assert(Ctx && "No declaration context?"); 2528 2529 DeclarationName Name(&II); 2530 LookupResult Result = LookupQualifiedName(Ctx, Name, LookupOrdinaryName, 2531 false); 2532 unsigned DiagID = 0; 2533 Decl *Referenced = 0; 2534 switch (Result.getKind()) { 2535 case LookupResult::NotFound: 2536 if (Ctx->isTranslationUnit()) 2537 DiagID = diag::err_typename_nested_not_found_global; 2538 else 2539 DiagID = diag::err_typename_nested_not_found; 2540 break; 2541 2542 case LookupResult::Found: 2543 if (TypeDecl *Type = dyn_cast<TypeDecl>(Result.getAsDecl())) { 2544 // We found a type. Build a QualifiedNameType, since the 2545 // typename-specifier was just sugar. FIXME: Tell 2546 // QualifiedNameType that it has a "typename" prefix. 2547 return Context.getQualifiedNameType(NNS, Context.getTypeDeclType(Type)); 2548 } 2549 2550 DiagID = diag::err_typename_nested_not_type; 2551 Referenced = Result.getAsDecl(); 2552 break; 2553 2554 case LookupResult::FoundOverloaded: 2555 DiagID = diag::err_typename_nested_not_type; 2556 Referenced = *Result.begin(); 2557 break; 2558 2559 case LookupResult::AmbiguousBaseSubobjectTypes: 2560 case LookupResult::AmbiguousBaseSubobjects: 2561 case LookupResult::AmbiguousReference: 2562 DiagnoseAmbiguousLookup(Result, Name, Range.getEnd(), Range); 2563 return QualType(); 2564 } 2565 2566 // If we get here, it's because name lookup did not find a 2567 // type. Emit an appropriate diagnostic and return an error. 2568 if (NamedDecl *NamedCtx = dyn_cast<NamedDecl>(Ctx)) 2569 Diag(Range.getEnd(), DiagID) << Range << Name << NamedCtx; 2570 else 2571 Diag(Range.getEnd(), DiagID) << Range << Name; 2572 if (Referenced) 2573 Diag(Referenced->getLocation(), diag::note_typename_refers_here) 2574 << Name; 2575 return QualType(); 2576 } 2577