SemaTemplate.cpp revision df667e71b1daadeacb230cf94fc717843f1a138a
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 22using 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. 29TemplateNameKind Sema::isTemplateName(IdentifierInfo &II, Scope *S, 30 DeclTy *&Template, 31 const CXXScopeSpec *SS) { 32 NamedDecl *IIDecl = LookupParsedName(S, SS, &II, LookupOrdinaryName); 33 34 if (IIDecl) { 35 if (isa<TemplateDecl>(IIDecl)) { 36 Template = IIDecl; 37 if (isa<FunctionTemplateDecl>(IIDecl)) 38 return TNK_Function_template; 39 else if (isa<ClassTemplateDecl>(IIDecl)) 40 return TNK_Class_template; 41 else if (isa<TemplateTemplateParmDecl>(IIDecl)) 42 return TNK_Template_template_parm; 43 else 44 assert(false && "Unknown TemplateDecl"); 45 } 46 47 // FIXME: What follows is a gross hack. 48 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(IIDecl)) { 49 if (FD->getType()->isDependentType()) { 50 Template = FD; 51 return TNK_Function_template; 52 } 53 } else if (OverloadedFunctionDecl *Ovl 54 = dyn_cast<OverloadedFunctionDecl>(IIDecl)) { 55 for (OverloadedFunctionDecl::function_iterator F = Ovl->function_begin(), 56 FEnd = Ovl->function_end(); 57 F != FEnd; ++F) { 58 if ((*F)->getType()->isDependentType()) { 59 Template = Ovl; 60 return TNK_Function_template; 61 } 62 } 63 } 64 } 65 return TNK_Non_template; 66} 67 68/// DiagnoseTemplateParameterShadow - Produce a diagnostic complaining 69/// that the template parameter 'PrevDecl' is being shadowed by a new 70/// declaration at location Loc. Returns true to indicate that this is 71/// an error, and false otherwise. 72bool Sema::DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl) { 73 assert(PrevDecl->isTemplateParameter() && "Not a template parameter"); 74 75 // Microsoft Visual C++ permits template parameters to be shadowed. 76 if (getLangOptions().Microsoft) 77 return false; 78 79 // C++ [temp.local]p4: 80 // A template-parameter shall not be redeclared within its 81 // scope (including nested scopes). 82 Diag(Loc, diag::err_template_param_shadow) 83 << cast<NamedDecl>(PrevDecl)->getDeclName(); 84 Diag(PrevDecl->getLocation(), diag::note_template_param_here); 85 return true; 86} 87 88/// AdjustDeclIfTemplate - If the given decl happens to be a template, reset 89/// the parameter D to reference the templated declaration and return a pointer 90/// to the template declaration. Otherwise, do nothing to D and return null. 91TemplateDecl *Sema::AdjustDeclIfTemplate(DeclTy *&D) 92{ 93 if(TemplateDecl *Temp = dyn_cast<TemplateDecl>(static_cast<Decl*>(D))) { 94 D = Temp->getTemplatedDecl(); 95 return Temp; 96 } 97 return 0; 98} 99 100/// ActOnTypeParameter - Called when a C++ template type parameter 101/// (e.g., "typename T") has been parsed. Typename specifies whether 102/// the keyword "typename" was used to declare the type parameter 103/// (otherwise, "class" was used), and KeyLoc is the location of the 104/// "class" or "typename" keyword. ParamName is the name of the 105/// parameter (NULL indicates an unnamed template parameter) and 106/// ParamName is the location of the parameter name (if any). 107/// If the type parameter has a default argument, it will be added 108/// later via ActOnTypeParameterDefault. 109Sema::DeclTy *Sema::ActOnTypeParameter(Scope *S, bool Typename, 110 SourceLocation KeyLoc, 111 IdentifierInfo *ParamName, 112 SourceLocation ParamNameLoc, 113 unsigned Depth, unsigned Position) { 114 assert(S->isTemplateParamScope() && 115 "Template type parameter not in template parameter scope!"); 116 bool Invalid = false; 117 118 if (ParamName) { 119 NamedDecl *PrevDecl = LookupName(S, ParamName, LookupTagName); 120 if (PrevDecl && PrevDecl->isTemplateParameter()) 121 Invalid = Invalid || DiagnoseTemplateParameterShadow(ParamNameLoc, 122 PrevDecl); 123 } 124 125 SourceLocation Loc = ParamNameLoc; 126 if (!ParamName) 127 Loc = KeyLoc; 128 129 TemplateTypeParmDecl *Param 130 = TemplateTypeParmDecl::Create(Context, CurContext, Loc, 131 Depth, Position, ParamName, Typename); 132 if (Invalid) 133 Param->setInvalidDecl(); 134 135 if (ParamName) { 136 // Add the template parameter into the current scope. 137 S->AddDecl(Param); 138 IdResolver.AddDecl(Param); 139 } 140 141 return Param; 142} 143 144/// ActOnTypeParameterDefault - Adds a default argument (the type 145/// Default) to the given template type parameter (TypeParam). 146void Sema::ActOnTypeParameterDefault(DeclTy *TypeParam, 147 SourceLocation EqualLoc, 148 SourceLocation DefaultLoc, 149 TypeTy *DefaultT) { 150 TemplateTypeParmDecl *Parm 151 = cast<TemplateTypeParmDecl>(static_cast<Decl *>(TypeParam)); 152 QualType Default = QualType::getFromOpaquePtr(DefaultT); 153 154 // C++ [temp.param]p14: 155 // A template-parameter shall not be used in its own default argument. 156 // FIXME: Implement this check! Needs a recursive walk over the types. 157 158 // Check the template argument itself. 159 if (CheckTemplateArgument(Parm, Default, DefaultLoc)) { 160 Parm->setInvalidDecl(); 161 return; 162 } 163 164 Parm->setDefaultArgument(Default, DefaultLoc, false); 165} 166 167/// \brief Check that the type of a non-type template parameter is 168/// well-formed. 169/// 170/// \returns the (possibly-promoted) parameter type if valid; 171/// otherwise, produces a diagnostic and returns a NULL type. 172QualType 173Sema::CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc) { 174 // C++ [temp.param]p4: 175 // 176 // A non-type template-parameter shall have one of the following 177 // (optionally cv-qualified) types: 178 // 179 // -- integral or enumeration type, 180 if (T->isIntegralType() || T->isEnumeralType() || 181 // -- pointer to object or pointer to function, 182 (T->isPointerType() && 183 (T->getAsPointerType()->getPointeeType()->isObjectType() || 184 T->getAsPointerType()->getPointeeType()->isFunctionType())) || 185 // -- reference to object or reference to function, 186 T->isReferenceType() || 187 // -- pointer to member. 188 T->isMemberPointerType() || 189 // If T is a dependent type, we can't do the check now, so we 190 // assume that it is well-formed. 191 T->isDependentType()) 192 return T; 193 // C++ [temp.param]p8: 194 // 195 // A non-type template-parameter of type "array of T" or 196 // "function returning T" is adjusted to be of type "pointer to 197 // T" or "pointer to function returning T", respectively. 198 else if (T->isArrayType()) 199 // FIXME: Keep the type prior to promotion? 200 return Context.getArrayDecayedType(T); 201 else if (T->isFunctionType()) 202 // FIXME: Keep the type prior to promotion? 203 return Context.getPointerType(T); 204 205 Diag(Loc, diag::err_template_nontype_parm_bad_type) 206 << T; 207 208 return QualType(); 209} 210 211/// ActOnNonTypeTemplateParameter - Called when a C++ non-type 212/// template parameter (e.g., "int Size" in "template<int Size> 213/// class Array") has been parsed. S is the current scope and D is 214/// the parsed declarator. 215Sema::DeclTy *Sema::ActOnNonTypeTemplateParameter(Scope *S, Declarator &D, 216 unsigned Depth, 217 unsigned Position) { 218 QualType T = GetTypeForDeclarator(D, S); 219 220 assert(S->isTemplateParamScope() && 221 "Non-type template parameter not in template parameter scope!"); 222 bool Invalid = false; 223 224 IdentifierInfo *ParamName = D.getIdentifier(); 225 if (ParamName) { 226 NamedDecl *PrevDecl = LookupName(S, ParamName, LookupTagName); 227 if (PrevDecl && PrevDecl->isTemplateParameter()) 228 Invalid = Invalid || DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), 229 PrevDecl); 230 } 231 232 T = CheckNonTypeTemplateParameterType(T, D.getIdentifierLoc()); 233 if (T.isNull()) { 234 T = Context.IntTy; // Recover with an 'int' type. 235 Invalid = true; 236 } 237 238 NonTypeTemplateParmDecl *Param 239 = NonTypeTemplateParmDecl::Create(Context, CurContext, D.getIdentifierLoc(), 240 Depth, Position, ParamName, T); 241 if (Invalid) 242 Param->setInvalidDecl(); 243 244 if (D.getIdentifier()) { 245 // Add the template parameter into the current scope. 246 S->AddDecl(Param); 247 IdResolver.AddDecl(Param); 248 } 249 return Param; 250} 251 252/// \brief Adds a default argument to the given non-type template 253/// parameter. 254void Sema::ActOnNonTypeTemplateParameterDefault(DeclTy *TemplateParamD, 255 SourceLocation EqualLoc, 256 ExprArg DefaultE) { 257 NonTypeTemplateParmDecl *TemplateParm 258 = cast<NonTypeTemplateParmDecl>(static_cast<Decl *>(TemplateParamD)); 259 Expr *Default = static_cast<Expr *>(DefaultE.get()); 260 261 // C++ [temp.param]p14: 262 // A template-parameter shall not be used in its own default argument. 263 // FIXME: Implement this check! Needs a recursive walk over the types. 264 265 // Check the well-formedness of the default template argument. 266 if (CheckTemplateArgument(TemplateParm, TemplateParm->getType(), Default)) { 267 TemplateParm->setInvalidDecl(); 268 return; 269 } 270 271 TemplateParm->setDefaultArgument(static_cast<Expr *>(DefaultE.release())); 272} 273 274 275/// ActOnTemplateTemplateParameter - Called when a C++ template template 276/// parameter (e.g. T in template <template <typename> class T> class array) 277/// has been parsed. S is the current scope. 278Sema::DeclTy *Sema::ActOnTemplateTemplateParameter(Scope* S, 279 SourceLocation TmpLoc, 280 TemplateParamsTy *Params, 281 IdentifierInfo *Name, 282 SourceLocation NameLoc, 283 unsigned Depth, 284 unsigned Position) 285{ 286 assert(S->isTemplateParamScope() && 287 "Template template parameter not in template parameter scope!"); 288 289 // Construct the parameter object. 290 TemplateTemplateParmDecl *Param = 291 TemplateTemplateParmDecl::Create(Context, CurContext, TmpLoc, Depth, 292 Position, Name, 293 (TemplateParameterList*)Params); 294 295 // Make sure the parameter is valid. 296 // FIXME: Decl object is not currently invalidated anywhere so this doesn't 297 // do anything yet. However, if the template parameter list or (eventual) 298 // default value is ever invalidated, that will propagate here. 299 bool Invalid = false; 300 if (Invalid) { 301 Param->setInvalidDecl(); 302 } 303 304 // If the tt-param has a name, then link the identifier into the scope 305 // and lookup mechanisms. 306 if (Name) { 307 S->AddDecl(Param); 308 IdResolver.AddDecl(Param); 309 } 310 311 return Param; 312} 313 314/// \brief Adds a default argument to the given template template 315/// parameter. 316void Sema::ActOnTemplateTemplateParameterDefault(DeclTy *TemplateParamD, 317 SourceLocation EqualLoc, 318 ExprArg DefaultE) { 319 TemplateTemplateParmDecl *TemplateParm 320 = cast<TemplateTemplateParmDecl>(static_cast<Decl *>(TemplateParamD)); 321 322 // Since a template-template parameter's default argument is an 323 // id-expression, it must be a DeclRefExpr. 324 DeclRefExpr *Default 325 = cast<DeclRefExpr>(static_cast<Expr *>(DefaultE.get())); 326 327 // C++ [temp.param]p14: 328 // A template-parameter shall not be used in its own default argument. 329 // FIXME: Implement this check! Needs a recursive walk over the types. 330 331 // Check the well-formedness of the template argument. 332 if (!isa<TemplateDecl>(Default->getDecl())) { 333 Diag(Default->getSourceRange().getBegin(), 334 diag::err_template_arg_must_be_template) 335 << Default->getSourceRange(); 336 TemplateParm->setInvalidDecl(); 337 return; 338 } 339 if (CheckTemplateArgument(TemplateParm, Default)) { 340 TemplateParm->setInvalidDecl(); 341 return; 342 } 343 344 DefaultE.release(); 345 TemplateParm->setDefaultArgument(Default); 346} 347 348/// ActOnTemplateParameterList - Builds a TemplateParameterList that 349/// contains the template parameters in Params/NumParams. 350Sema::TemplateParamsTy * 351Sema::ActOnTemplateParameterList(unsigned Depth, 352 SourceLocation ExportLoc, 353 SourceLocation TemplateLoc, 354 SourceLocation LAngleLoc, 355 DeclTy **Params, unsigned NumParams, 356 SourceLocation RAngleLoc) { 357 if (ExportLoc.isValid()) 358 Diag(ExportLoc, diag::note_template_export_unsupported); 359 360 return TemplateParameterList::Create(Context, TemplateLoc, LAngleLoc, 361 (Decl**)Params, NumParams, RAngleLoc); 362} 363 364Sema::DeclTy * 365Sema::ActOnClassTemplate(Scope *S, unsigned TagSpec, TagKind TK, 366 SourceLocation KWLoc, const CXXScopeSpec &SS, 367 IdentifierInfo *Name, SourceLocation NameLoc, 368 AttributeList *Attr, 369 MultiTemplateParamsArg TemplateParameterLists) { 370 assert(TemplateParameterLists.size() > 0 && "No template parameter lists?"); 371 assert(TK != TK_Reference && "Can only declare or define class templates"); 372 bool Invalid = false; 373 374 // Check that we can declare a template here. 375 if (CheckTemplateDeclScope(S, TemplateParameterLists)) 376 return 0; 377 378 TagDecl::TagKind Kind; 379 switch (TagSpec) { 380 default: assert(0 && "Unknown tag type!"); 381 case DeclSpec::TST_struct: Kind = TagDecl::TK_struct; break; 382 case DeclSpec::TST_union: Kind = TagDecl::TK_union; break; 383 case DeclSpec::TST_class: Kind = TagDecl::TK_class; break; 384 } 385 386 // There is no such thing as an unnamed class template. 387 if (!Name) { 388 Diag(KWLoc, diag::err_template_unnamed_class); 389 return 0; 390 } 391 392 // Find any previous declaration with this name. 393 LookupResult Previous = LookupParsedName(S, &SS, Name, LookupOrdinaryName, 394 true); 395 assert(!Previous.isAmbiguous() && "Ambiguity in class template redecl?"); 396 NamedDecl *PrevDecl = 0; 397 if (Previous.begin() != Previous.end()) 398 PrevDecl = *Previous.begin(); 399 400 DeclContext *SemanticContext = CurContext; 401 if (SS.isNotEmpty() && !SS.isInvalid()) { 402 SemanticContext = static_cast<DeclContext*>(SS.getScopeRep()); 403 404 // FIXME: need to match up several levels of template parameter 405 // lists here. 406 } 407 408 // FIXME: member templates! 409 TemplateParameterList *TemplateParams 410 = static_cast<TemplateParameterList *>(*TemplateParameterLists.release()); 411 412 // If there is a previous declaration with the same name, check 413 // whether this is a valid redeclaration. 414 ClassTemplateDecl *PrevClassTemplate 415 = dyn_cast_or_null<ClassTemplateDecl>(PrevDecl); 416 if (PrevClassTemplate) { 417 // Ensure that the template parameter lists are compatible. 418 if (!TemplateParameterListsAreEqual(TemplateParams, 419 PrevClassTemplate->getTemplateParameters(), 420 /*Complain=*/true)) 421 return 0; 422 423 // C++ [temp.class]p4: 424 // In a redeclaration, partial specialization, explicit 425 // specialization or explicit instantiation of a class template, 426 // the class-key shall agree in kind with the original class 427 // template declaration (7.1.5.3). 428 RecordDecl *PrevRecordDecl = PrevClassTemplate->getTemplatedDecl(); 429 if (PrevRecordDecl->getTagKind() != Kind) { 430 Diag(KWLoc, diag::err_use_with_wrong_tag) << Name; 431 Diag(PrevRecordDecl->getLocation(), diag::note_previous_use); 432 return 0; 433 } 434 435 436 // Check for redefinition of this class template. 437 if (TK == TK_Definition) { 438 if (TagDecl *Def = PrevRecordDecl->getDefinition(Context)) { 439 Diag(NameLoc, diag::err_redefinition) << Name; 440 Diag(Def->getLocation(), diag::note_previous_definition); 441 // FIXME: Would it make sense to try to "forget" the previous 442 // definition, as part of error recovery? 443 return 0; 444 } 445 } 446 } else if (PrevDecl && PrevDecl->isTemplateParameter()) { 447 // Maybe we will complain about the shadowed template parameter. 448 DiagnoseTemplateParameterShadow(NameLoc, PrevDecl); 449 // Just pretend that we didn't see the previous declaration. 450 PrevDecl = 0; 451 } else if (PrevDecl) { 452 // C++ [temp]p5: 453 // A class template shall not have the same name as any other 454 // template, class, function, object, enumeration, enumerator, 455 // namespace, or type in the same scope (3.3), except as specified 456 // in (14.5.4). 457 Diag(NameLoc, diag::err_redefinition_different_kind) << Name; 458 Diag(PrevDecl->getLocation(), diag::note_previous_definition); 459 return 0; 460 } 461 462 // Check the template parameter list of this declaration, possibly 463 // merging in the template parameter list from the previous class 464 // template declaration. 465 if (CheckTemplateParameterList(TemplateParams, 466 PrevClassTemplate? PrevClassTemplate->getTemplateParameters() : 0)) 467 Invalid = true; 468 469 // If we had a scope specifier, we better have a previous template 470 // declaration! 471 472 TagDecl *NewClass = 473 CXXRecordDecl::Create(Context, Kind, SemanticContext, NameLoc, Name, 474 PrevClassTemplate? 475 PrevClassTemplate->getTemplatedDecl() : 0); 476 477 ClassTemplateDecl *NewTemplate 478 = ClassTemplateDecl::Create(Context, SemanticContext, NameLoc, 479 DeclarationName(Name), TemplateParams, 480 NewClass); 481 482 // Set the lexical context of these templates 483 NewClass->setLexicalDeclContext(CurContext); 484 NewTemplate->setLexicalDeclContext(CurContext); 485 486 if (TK == TK_Definition) 487 NewClass->startDefinition(); 488 489 if (Attr) 490 ProcessDeclAttributeList(NewClass, Attr); 491 492 PushOnScopeChains(NewTemplate, S); 493 494 if (Invalid) { 495 NewTemplate->setInvalidDecl(); 496 NewClass->setInvalidDecl(); 497 } 498 return NewTemplate; 499} 500 501/// \brief Checks the validity of a template parameter list, possibly 502/// considering the template parameter list from a previous 503/// declaration. 504/// 505/// If an "old" template parameter list is provided, it must be 506/// equivalent (per TemplateParameterListsAreEqual) to the "new" 507/// template parameter list. 508/// 509/// \param NewParams Template parameter list for a new template 510/// declaration. This template parameter list will be updated with any 511/// default arguments that are carried through from the previous 512/// template parameter list. 513/// 514/// \param OldParams If provided, template parameter list from a 515/// previous declaration of the same template. Default template 516/// arguments will be merged from the old template parameter list to 517/// the new template parameter list. 518/// 519/// \returns true if an error occurred, false otherwise. 520bool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, 521 TemplateParameterList *OldParams) { 522 bool Invalid = false; 523 524 // C++ [temp.param]p10: 525 // The set of default template-arguments available for use with a 526 // template declaration or definition is obtained by merging the 527 // default arguments from the definition (if in scope) and all 528 // declarations in scope in the same way default function 529 // arguments are (8.3.6). 530 bool SawDefaultArgument = false; 531 SourceLocation PreviousDefaultArgLoc; 532 533 // Dummy initialization to avoid warnings. 534 TemplateParameterList::iterator OldParam = NewParams->end(); 535 if (OldParams) 536 OldParam = OldParams->begin(); 537 538 for (TemplateParameterList::iterator NewParam = NewParams->begin(), 539 NewParamEnd = NewParams->end(); 540 NewParam != NewParamEnd; ++NewParam) { 541 // Variables used to diagnose redundant default arguments 542 bool RedundantDefaultArg = false; 543 SourceLocation OldDefaultLoc; 544 SourceLocation NewDefaultLoc; 545 546 // Variables used to diagnose missing default arguments 547 bool MissingDefaultArg = false; 548 549 // Merge default arguments for template type parameters. 550 if (TemplateTypeParmDecl *NewTypeParm 551 = dyn_cast<TemplateTypeParmDecl>(*NewParam)) { 552 TemplateTypeParmDecl *OldTypeParm 553 = OldParams? cast<TemplateTypeParmDecl>(*OldParam) : 0; 554 555 if (OldTypeParm && OldTypeParm->hasDefaultArgument() && 556 NewTypeParm->hasDefaultArgument()) { 557 OldDefaultLoc = OldTypeParm->getDefaultArgumentLoc(); 558 NewDefaultLoc = NewTypeParm->getDefaultArgumentLoc(); 559 SawDefaultArgument = true; 560 RedundantDefaultArg = true; 561 PreviousDefaultArgLoc = NewDefaultLoc; 562 } else if (OldTypeParm && OldTypeParm->hasDefaultArgument()) { 563 // Merge the default argument from the old declaration to the 564 // new declaration. 565 SawDefaultArgument = true; 566 NewTypeParm->setDefaultArgument(OldTypeParm->getDefaultArgument(), 567 OldTypeParm->getDefaultArgumentLoc(), 568 true); 569 PreviousDefaultArgLoc = OldTypeParm->getDefaultArgumentLoc(); 570 } else if (NewTypeParm->hasDefaultArgument()) { 571 SawDefaultArgument = true; 572 PreviousDefaultArgLoc = NewTypeParm->getDefaultArgumentLoc(); 573 } else if (SawDefaultArgument) 574 MissingDefaultArg = true; 575 } 576 // Merge default arguments for non-type template parameters 577 else if (NonTypeTemplateParmDecl *NewNonTypeParm 578 = dyn_cast<NonTypeTemplateParmDecl>(*NewParam)) { 579 NonTypeTemplateParmDecl *OldNonTypeParm 580 = OldParams? cast<NonTypeTemplateParmDecl>(*OldParam) : 0; 581 if (OldNonTypeParm && OldNonTypeParm->hasDefaultArgument() && 582 NewNonTypeParm->hasDefaultArgument()) { 583 OldDefaultLoc = OldNonTypeParm->getDefaultArgumentLoc(); 584 NewDefaultLoc = NewNonTypeParm->getDefaultArgumentLoc(); 585 SawDefaultArgument = true; 586 RedundantDefaultArg = true; 587 PreviousDefaultArgLoc = NewDefaultLoc; 588 } else if (OldNonTypeParm && OldNonTypeParm->hasDefaultArgument()) { 589 // Merge the default argument from the old declaration to the 590 // new declaration. 591 SawDefaultArgument = true; 592 // FIXME: We need to create a new kind of "default argument" 593 // expression that points to a previous template template 594 // parameter. 595 NewNonTypeParm->setDefaultArgument( 596 OldNonTypeParm->getDefaultArgument()); 597 PreviousDefaultArgLoc = OldNonTypeParm->getDefaultArgumentLoc(); 598 } else if (NewNonTypeParm->hasDefaultArgument()) { 599 SawDefaultArgument = true; 600 PreviousDefaultArgLoc = NewNonTypeParm->getDefaultArgumentLoc(); 601 } else if (SawDefaultArgument) 602 MissingDefaultArg = true; 603 } 604 // Merge default arguments for template template parameters 605 else { 606 TemplateTemplateParmDecl *NewTemplateParm 607 = cast<TemplateTemplateParmDecl>(*NewParam); 608 TemplateTemplateParmDecl *OldTemplateParm 609 = OldParams? cast<TemplateTemplateParmDecl>(*OldParam) : 0; 610 if (OldTemplateParm && OldTemplateParm->hasDefaultArgument() && 611 NewTemplateParm->hasDefaultArgument()) { 612 OldDefaultLoc = OldTemplateParm->getDefaultArgumentLoc(); 613 NewDefaultLoc = NewTemplateParm->getDefaultArgumentLoc(); 614 SawDefaultArgument = true; 615 RedundantDefaultArg = true; 616 PreviousDefaultArgLoc = NewDefaultLoc; 617 } else if (OldTemplateParm && OldTemplateParm->hasDefaultArgument()) { 618 // Merge the default argument from the old declaration to the 619 // new declaration. 620 SawDefaultArgument = true; 621 // FIXME: We need to create a new kind of "default argument" 622 // expression that points to a previous template template 623 // parameter. 624 NewTemplateParm->setDefaultArgument( 625 OldTemplateParm->getDefaultArgument()); 626 PreviousDefaultArgLoc = OldTemplateParm->getDefaultArgumentLoc(); 627 } else if (NewTemplateParm->hasDefaultArgument()) { 628 SawDefaultArgument = true; 629 PreviousDefaultArgLoc = NewTemplateParm->getDefaultArgumentLoc(); 630 } else if (SawDefaultArgument) 631 MissingDefaultArg = true; 632 } 633 634 if (RedundantDefaultArg) { 635 // C++ [temp.param]p12: 636 // A template-parameter shall not be given default arguments 637 // by two different declarations in the same scope. 638 Diag(NewDefaultLoc, diag::err_template_param_default_arg_redefinition); 639 Diag(OldDefaultLoc, diag::note_template_param_prev_default_arg); 640 Invalid = true; 641 } else if (MissingDefaultArg) { 642 // C++ [temp.param]p11: 643 // If a template-parameter has a default template-argument, 644 // all subsequent template-parameters shall have a default 645 // template-argument supplied. 646 Diag((*NewParam)->getLocation(), 647 diag::err_template_param_default_arg_missing); 648 Diag(PreviousDefaultArgLoc, diag::note_template_param_prev_default_arg); 649 Invalid = true; 650 } 651 652 // If we have an old template parameter list that we're merging 653 // in, move on to the next parameter. 654 if (OldParams) 655 ++OldParam; 656 } 657 658 return Invalid; 659} 660 661/// \brief Translates template arguments as provided by the parser 662/// into template arguments used by semantic analysis. 663static void 664translateTemplateArguments(ASTTemplateArgsPtr &TemplateArgsIn, 665 SourceLocation *TemplateArgLocs, 666 llvm::SmallVector<TemplateArgument, 16> &TemplateArgs) { 667 TemplateArgs.reserve(TemplateArgsIn.size()); 668 669 void **Args = TemplateArgsIn.getArgs(); 670 bool *ArgIsType = TemplateArgsIn.getArgIsType(); 671 for (unsigned Arg = 0, Last = TemplateArgsIn.size(); Arg != Last; ++Arg) { 672 TemplateArgs.push_back( 673 ArgIsType[Arg]? TemplateArgument(TemplateArgLocs[Arg], 674 QualType::getFromOpaquePtr(Args[Arg])) 675 : TemplateArgument(reinterpret_cast<Expr *>(Args[Arg]))); 676 } 677} 678 679QualType Sema::CheckClassTemplateId(ClassTemplateDecl *ClassTemplate, 680 SourceLocation TemplateLoc, 681 SourceLocation LAngleLoc, 682 const TemplateArgument *TemplateArgs, 683 unsigned NumTemplateArgs, 684 SourceLocation RAngleLoc) { 685 // Check that the template argument list is well-formed for this 686 // template. 687 llvm::SmallVector<TemplateArgument, 16> ConvertedTemplateArgs; 688 if (CheckTemplateArgumentList(ClassTemplate, TemplateLoc, LAngleLoc, 689 TemplateArgs, NumTemplateArgs, RAngleLoc, 690 ConvertedTemplateArgs)) 691 return QualType(); 692 693 assert((ConvertedTemplateArgs.size() == 694 ClassTemplate->getTemplateParameters()->size()) && 695 "Converted template argument list is too short!"); 696 697 QualType CanonType; 698 699 if (ClassTemplateSpecializationType::anyDependentTemplateArguments( 700 TemplateArgs, 701 NumTemplateArgs)) { 702 // This class template specialization is a dependent 703 // type. Therefore, its canonical type is another class template 704 // specialization type that contains all of the converted 705 // arguments in canonical form. This ensures that, e.g., A<T> and 706 // A<T, T> have identical types when A is declared as: 707 // 708 // template<typename T, typename U = T> struct A; 709 710 CanonType = Context.getClassTemplateSpecializationType(ClassTemplate, 711 &ConvertedTemplateArgs[0], 712 ConvertedTemplateArgs.size()); 713 } else { 714 // Find the class template specialization declaration that 715 // corresponds to these arguments. 716 llvm::FoldingSetNodeID ID; 717 ClassTemplateSpecializationDecl::Profile(ID, &ConvertedTemplateArgs[0], 718 ConvertedTemplateArgs.size()); 719 void *InsertPos = 0; 720 ClassTemplateSpecializationDecl *Decl 721 = ClassTemplate->getSpecializations().FindNodeOrInsertPos(ID, InsertPos); 722 if (!Decl) { 723 // This is the first time we have referenced this class template 724 // specialization. Create the canonical declaration and add it to 725 // the set of specializations. 726 Decl = ClassTemplateSpecializationDecl::Create(Context, 727 ClassTemplate->getDeclContext(), 728 TemplateLoc, 729 ClassTemplate, 730 &ConvertedTemplateArgs[0], 731 ConvertedTemplateArgs.size(), 732 0); 733 ClassTemplate->getSpecializations().InsertNode(Decl, InsertPos); 734 Decl->setLexicalDeclContext(CurContext); 735 } 736 737 CanonType = Context.getTypeDeclType(Decl); 738 } 739 740 // Build the fully-sugared type for this class template 741 // specialization, which refers back to the class template 742 // specialization we created or found. 743 return Context.getClassTemplateSpecializationType(ClassTemplate, 744 TemplateArgs, 745 NumTemplateArgs, 746 CanonType); 747} 748 749Action::TypeResult 750Sema::ActOnClassTemplateId(DeclTy *TemplateD, SourceLocation TemplateLoc, 751 SourceLocation LAngleLoc, 752 ASTTemplateArgsPtr TemplateArgsIn, 753 SourceLocation *TemplateArgLocs, 754 SourceLocation RAngleLoc, 755 const CXXScopeSpec *SS) { 756 TemplateDecl *Template = cast<TemplateDecl>(static_cast<Decl *>(TemplateD)); 757 ClassTemplateDecl *ClassTemplate = cast<ClassTemplateDecl>(Template); 758 759 // Translate the parser's template argument list in our AST format. 760 llvm::SmallVector<TemplateArgument, 16> TemplateArgs; 761 translateTemplateArguments(TemplateArgsIn, TemplateArgLocs, TemplateArgs); 762 763 QualType Result = CheckClassTemplateId(ClassTemplate, TemplateLoc, 764 LAngleLoc, 765 &TemplateArgs[0], 766 TemplateArgs.size(), 767 RAngleLoc); 768 769 TemplateArgsIn.release(); 770 return Result.getAsOpaquePtr(); 771} 772 773/// \brief Check that the given template argument list is well-formed 774/// for specializing the given template. 775bool Sema::CheckTemplateArgumentList(TemplateDecl *Template, 776 SourceLocation TemplateLoc, 777 SourceLocation LAngleLoc, 778 const TemplateArgument *TemplateArgs, 779 unsigned NumTemplateArgs, 780 SourceLocation RAngleLoc, 781 llvm::SmallVectorImpl<TemplateArgument> &Converted) { 782 TemplateParameterList *Params = Template->getTemplateParameters(); 783 unsigned NumParams = Params->size(); 784 unsigned NumArgs = NumTemplateArgs; 785 bool Invalid = false; 786 787 if (NumArgs > NumParams || 788 NumArgs < Params->getMinRequiredArguments()) { 789 // FIXME: point at either the first arg beyond what we can handle, 790 // or the '>', depending on whether we have too many or too few 791 // arguments. 792 SourceRange Range; 793 if (NumArgs > NumParams) 794 Range = SourceRange(TemplateArgs[NumParams].getLocation(), RAngleLoc); 795 Diag(TemplateLoc, diag::err_template_arg_list_different_arity) 796 << (NumArgs > NumParams) 797 << (isa<ClassTemplateDecl>(Template)? 0 : 798 isa<FunctionTemplateDecl>(Template)? 1 : 799 isa<TemplateTemplateParmDecl>(Template)? 2 : 3) 800 << Template << Range; 801 Diag(Template->getLocation(), diag::note_template_decl_here) 802 << Params->getSourceRange(); 803 Invalid = true; 804 } 805 806 // C++ [temp.arg]p1: 807 // [...] The type and form of each template-argument specified in 808 // a template-id shall match the type and form specified for the 809 // corresponding parameter declared by the template in its 810 // template-parameter-list. 811 unsigned ArgIdx = 0; 812 for (TemplateParameterList::iterator Param = Params->begin(), 813 ParamEnd = Params->end(); 814 Param != ParamEnd; ++Param, ++ArgIdx) { 815 // Decode the template argument 816 TemplateArgument Arg; 817 if (ArgIdx >= NumArgs) { 818 // Retrieve the default template argument from the template 819 // parameter. 820 if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(*Param)) { 821 if (!TTP->hasDefaultArgument()) 822 break; 823 824 QualType ArgType = TTP->getDefaultArgument(); 825 826 // If the argument type is dependent, instantiate it now based 827 // on the previously-computed template arguments. 828 if (ArgType->isDependentType()) { 829 InstantiatingTemplate Inst(*this, TemplateLoc, 830 Template, &Converted[0], 831 Converted.size(), 832 SourceRange(TemplateLoc, RAngleLoc)); 833 ArgType = InstantiateType(ArgType, &Converted[0], Converted.size(), 834 TTP->getDefaultArgumentLoc(), 835 TTP->getDeclName()); 836 } 837 838 if (ArgType.isNull()) 839 return true; 840 841 Arg = TemplateArgument(TTP->getLocation(), ArgType); 842 } else if (NonTypeTemplateParmDecl *NTTP 843 = dyn_cast<NonTypeTemplateParmDecl>(*Param)) { 844 if (!NTTP->hasDefaultArgument()) 845 break; 846 847 // FIXME: Instantiate default argument 848 Arg = TemplateArgument(NTTP->getDefaultArgument()); 849 } else { 850 TemplateTemplateParmDecl *TempParm 851 = cast<TemplateTemplateParmDecl>(*Param); 852 853 if (!TempParm->hasDefaultArgument()) 854 break; 855 856 // FIXME: Instantiate default argument 857 Arg = TemplateArgument(TempParm->getDefaultArgument()); 858 } 859 } else { 860 // Retrieve the template argument produced by the user. 861 Arg = TemplateArgs[ArgIdx]; 862 } 863 864 865 if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(*Param)) { 866 // Check template type parameters. 867 if (Arg.getKind() == TemplateArgument::Type) { 868 if (CheckTemplateArgument(TTP, Arg.getAsType(), Arg.getLocation())) 869 Invalid = true; 870 871 // Add the converted template type argument. 872 Converted.push_back( 873 TemplateArgument(Arg.getLocation(), 874 Context.getCanonicalType(Arg.getAsType()))); 875 continue; 876 } 877 878 // C++ [temp.arg.type]p1: 879 // A template-argument for a template-parameter which is a 880 // type shall be a type-id. 881 882 // We have a template type parameter but the template argument 883 // is not a type. 884 Diag(Arg.getLocation(), diag::err_template_arg_must_be_type); 885 Diag((*Param)->getLocation(), diag::note_template_param_here); 886 Invalid = true; 887 } else if (NonTypeTemplateParmDecl *NTTP 888 = dyn_cast<NonTypeTemplateParmDecl>(*Param)) { 889 // Check non-type template parameters. 890 891 // Instantiate the type of the non-type template parameter with 892 // the template arguments we've seen thus far. 893 QualType NTTPType = NTTP->getType(); 894 if (NTTPType->isDependentType()) { 895 // Instantiate the type of the non-type template parameter. 896 InstantiatingTemplate Inst(*this, TemplateLoc, 897 Template, &Converted[0], 898 Converted.size(), 899 SourceRange(TemplateLoc, RAngleLoc)); 900 901 NTTPType = InstantiateType(NTTPType, 902 &Converted[0], Converted.size(), 903 NTTP->getLocation(), 904 NTTP->getDeclName()); 905 // If that worked, check the non-type template parameter type 906 // for validity. 907 if (!NTTPType.isNull()) 908 NTTPType = CheckNonTypeTemplateParameterType(NTTPType, 909 NTTP->getLocation()); 910 911 if (NTTPType.isNull()) { 912 Invalid = true; 913 break; 914 } 915 } 916 917 switch (Arg.getKind()) { 918 case TemplateArgument::Expression: { 919 Expr *E = Arg.getAsExpr(); 920 if (CheckTemplateArgument(NTTP, NTTPType, E, &Converted)) 921 Invalid = true; 922 break; 923 } 924 925 case TemplateArgument::Declaration: 926 case TemplateArgument::Integral: 927 // We've already checked this template argument, so just copy 928 // it to the list of converted arguments. 929 Converted.push_back(Arg); 930 break; 931 932 case TemplateArgument::Type: 933 // We have a non-type template parameter but the template 934 // argument is a type. 935 936 // C++ [temp.arg]p2: 937 // In a template-argument, an ambiguity between a type-id and 938 // an expression is resolved to a type-id, regardless of the 939 // form of the corresponding template-parameter. 940 // 941 // We warn specifically about this case, since it can be rather 942 // confusing for users. 943 if (Arg.getAsType()->isFunctionType()) 944 Diag(Arg.getLocation(), diag::err_template_arg_nontype_ambig) 945 << Arg.getAsType(); 946 else 947 Diag(Arg.getLocation(), diag::err_template_arg_must_be_expr); 948 Diag((*Param)->getLocation(), diag::note_template_param_here); 949 Invalid = true; 950 } 951 } else { 952 // Check template template parameters. 953 TemplateTemplateParmDecl *TempParm 954 = cast<TemplateTemplateParmDecl>(*Param); 955 956 switch (Arg.getKind()) { 957 case TemplateArgument::Expression: { 958 Expr *ArgExpr = Arg.getAsExpr(); 959 if (ArgExpr && isa<DeclRefExpr>(ArgExpr) && 960 isa<TemplateDecl>(cast<DeclRefExpr>(ArgExpr)->getDecl())) { 961 if (CheckTemplateArgument(TempParm, cast<DeclRefExpr>(ArgExpr))) 962 Invalid = true; 963 964 // Add the converted template argument. 965 // FIXME: Need the "canonical" template declaration! 966 Converted.push_back( 967 TemplateArgument(Arg.getLocation(), 968 cast<DeclRefExpr>(ArgExpr)->getDecl())); 969 continue; 970 } 971 } 972 // fall through 973 974 case TemplateArgument::Type: { 975 // We have a template template parameter but the template 976 // argument does not refer to a template. 977 Diag(Arg.getLocation(), diag::err_template_arg_must_be_template); 978 Invalid = true; 979 break; 980 } 981 982 case TemplateArgument::Declaration: 983 // We've already checked this template argument, so just copy 984 // it to the list of converted arguments. 985 Converted.push_back(Arg); 986 break; 987 988 case TemplateArgument::Integral: 989 assert(false && "Integral argument with template template parameter"); 990 break; 991 } 992 } 993 } 994 995 return Invalid; 996} 997 998/// \brief Check a template argument against its corresponding 999/// template type parameter. 1000/// 1001/// This routine implements the semantics of C++ [temp.arg.type]. It 1002/// returns true if an error occurred, and false otherwise. 1003bool Sema::CheckTemplateArgument(TemplateTypeParmDecl *Param, 1004 QualType Arg, SourceLocation ArgLoc) { 1005 // C++ [temp.arg.type]p2: 1006 // A local type, a type with no linkage, an unnamed type or a type 1007 // compounded from any of these types shall not be used as a 1008 // template-argument for a template type-parameter. 1009 // 1010 // FIXME: Perform the recursive and no-linkage type checks. 1011 const TagType *Tag = 0; 1012 if (const EnumType *EnumT = Arg->getAsEnumType()) 1013 Tag = EnumT; 1014 else if (const RecordType *RecordT = Arg->getAsRecordType()) 1015 Tag = RecordT; 1016 if (Tag && Tag->getDecl()->getDeclContext()->isFunctionOrMethod()) 1017 return Diag(ArgLoc, diag::err_template_arg_local_type) 1018 << QualType(Tag, 0); 1019 else if (Tag && !Tag->getDecl()->getDeclName() && 1020 !Tag->getDecl()->getTypedefForAnonDecl()) { 1021 Diag(ArgLoc, diag::err_template_arg_unnamed_type); 1022 Diag(Tag->getDecl()->getLocation(), diag::note_template_unnamed_type_here); 1023 return true; 1024 } 1025 1026 return false; 1027} 1028 1029/// \brief Checks whether the given template argument is the address 1030/// of an object or function according to C++ [temp.arg.nontype]p1. 1031bool Sema::CheckTemplateArgumentAddressOfObjectOrFunction(Expr *Arg, 1032 NamedDecl *&Entity) { 1033 bool Invalid = false; 1034 1035 // See through any implicit casts we added to fix the type. 1036 if (ImplicitCastExpr *Cast = dyn_cast<ImplicitCastExpr>(Arg)) 1037 Arg = Cast->getSubExpr(); 1038 1039 // C++ [temp.arg.nontype]p1: 1040 // 1041 // A template-argument for a non-type, non-template 1042 // template-parameter shall be one of: [...] 1043 // 1044 // -- the address of an object or function with external 1045 // linkage, including function templates and function 1046 // template-ids but excluding non-static class members, 1047 // expressed as & id-expression where the & is optional if 1048 // the name refers to a function or array, or if the 1049 // corresponding template-parameter is a reference; or 1050 DeclRefExpr *DRE = 0; 1051 1052 // Ignore (and complain about) any excess parentheses. 1053 while (ParenExpr *Parens = dyn_cast<ParenExpr>(Arg)) { 1054 if (!Invalid) { 1055 Diag(Arg->getSourceRange().getBegin(), 1056 diag::err_template_arg_extra_parens) 1057 << Arg->getSourceRange(); 1058 Invalid = true; 1059 } 1060 1061 Arg = Parens->getSubExpr(); 1062 } 1063 1064 if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(Arg)) { 1065 if (UnOp->getOpcode() == UnaryOperator::AddrOf) 1066 DRE = dyn_cast<DeclRefExpr>(UnOp->getSubExpr()); 1067 } else 1068 DRE = dyn_cast<DeclRefExpr>(Arg); 1069 1070 if (!DRE || !isa<ValueDecl>(DRE->getDecl())) 1071 return Diag(Arg->getSourceRange().getBegin(), 1072 diag::err_template_arg_not_object_or_func_form) 1073 << Arg->getSourceRange(); 1074 1075 // Cannot refer to non-static data members 1076 if (FieldDecl *Field = dyn_cast<FieldDecl>(DRE->getDecl())) 1077 return Diag(Arg->getSourceRange().getBegin(), diag::err_template_arg_field) 1078 << Field << Arg->getSourceRange(); 1079 1080 // Cannot refer to non-static member functions 1081 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(DRE->getDecl())) 1082 if (!Method->isStatic()) 1083 return Diag(Arg->getSourceRange().getBegin(), 1084 diag::err_template_arg_method) 1085 << Method << Arg->getSourceRange(); 1086 1087 // Functions must have external linkage. 1088 if (FunctionDecl *Func = dyn_cast<FunctionDecl>(DRE->getDecl())) { 1089 if (Func->getStorageClass() == FunctionDecl::Static) { 1090 Diag(Arg->getSourceRange().getBegin(), 1091 diag::err_template_arg_function_not_extern) 1092 << Func << Arg->getSourceRange(); 1093 Diag(Func->getLocation(), diag::note_template_arg_internal_object) 1094 << true; 1095 return true; 1096 } 1097 1098 // Okay: we've named a function with external linkage. 1099 Entity = Func; 1100 return Invalid; 1101 } 1102 1103 if (VarDecl *Var = dyn_cast<VarDecl>(DRE->getDecl())) { 1104 if (!Var->hasGlobalStorage()) { 1105 Diag(Arg->getSourceRange().getBegin(), 1106 diag::err_template_arg_object_not_extern) 1107 << Var << Arg->getSourceRange(); 1108 Diag(Var->getLocation(), diag::note_template_arg_internal_object) 1109 << true; 1110 return true; 1111 } 1112 1113 // Okay: we've named an object with external linkage 1114 Entity = Var; 1115 return Invalid; 1116 } 1117 1118 // We found something else, but we don't know specifically what it is. 1119 Diag(Arg->getSourceRange().getBegin(), 1120 diag::err_template_arg_not_object_or_func) 1121 << Arg->getSourceRange(); 1122 Diag(DRE->getDecl()->getLocation(), 1123 diag::note_template_arg_refers_here); 1124 return true; 1125} 1126 1127/// \brief Checks whether the given template argument is a pointer to 1128/// member constant according to C++ [temp.arg.nontype]p1. 1129bool 1130Sema::CheckTemplateArgumentPointerToMember(Expr *Arg, NamedDecl *&Member) { 1131 bool Invalid = false; 1132 1133 // See through any implicit casts we added to fix the type. 1134 if (ImplicitCastExpr *Cast = dyn_cast<ImplicitCastExpr>(Arg)) 1135 Arg = Cast->getSubExpr(); 1136 1137 // C++ [temp.arg.nontype]p1: 1138 // 1139 // A template-argument for a non-type, non-template 1140 // template-parameter shall be one of: [...] 1141 // 1142 // -- a pointer to member expressed as described in 5.3.1. 1143 QualifiedDeclRefExpr *DRE = 0; 1144 1145 // Ignore (and complain about) any excess parentheses. 1146 while (ParenExpr *Parens = dyn_cast<ParenExpr>(Arg)) { 1147 if (!Invalid) { 1148 Diag(Arg->getSourceRange().getBegin(), 1149 diag::err_template_arg_extra_parens) 1150 << Arg->getSourceRange(); 1151 Invalid = true; 1152 } 1153 1154 Arg = Parens->getSubExpr(); 1155 } 1156 1157 if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(Arg)) 1158 if (UnOp->getOpcode() == UnaryOperator::AddrOf) 1159 DRE = dyn_cast<QualifiedDeclRefExpr>(UnOp->getSubExpr()); 1160 1161 if (!DRE) 1162 return Diag(Arg->getSourceRange().getBegin(), 1163 diag::err_template_arg_not_pointer_to_member_form) 1164 << Arg->getSourceRange(); 1165 1166 if (isa<FieldDecl>(DRE->getDecl()) || isa<CXXMethodDecl>(DRE->getDecl())) { 1167 assert((isa<FieldDecl>(DRE->getDecl()) || 1168 !cast<CXXMethodDecl>(DRE->getDecl())->isStatic()) && 1169 "Only non-static member pointers can make it here"); 1170 1171 // Okay: this is the address of a non-static member, and therefore 1172 // a member pointer constant. 1173 Member = DRE->getDecl(); 1174 return Invalid; 1175 } 1176 1177 // We found something else, but we don't know specifically what it is. 1178 Diag(Arg->getSourceRange().getBegin(), 1179 diag::err_template_arg_not_pointer_to_member_form) 1180 << Arg->getSourceRange(); 1181 Diag(DRE->getDecl()->getLocation(), 1182 diag::note_template_arg_refers_here); 1183 return true; 1184} 1185 1186/// \brief Check a template argument against its corresponding 1187/// non-type template parameter. 1188/// 1189/// This routine implements the semantics of C++ [temp.arg.nontype]. 1190/// It returns true if an error occurred, and false otherwise. \p 1191/// InstantiatedParamType is the type of the non-type template 1192/// parameter after it has been instantiated. 1193/// 1194/// If Converted is non-NULL and no errors occur, the value 1195/// of this argument will be added to the end of the Converted vector. 1196bool Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, 1197 QualType InstantiatedParamType, Expr *&Arg, 1198 llvm::SmallVectorImpl<TemplateArgument> *Converted) { 1199 SourceLocation StartLoc = Arg->getSourceRange().getBegin(); 1200 1201 // If either the parameter has a dependent type or the argument is 1202 // type-dependent, there's nothing we can check now. 1203 // FIXME: Add template argument to Converted! 1204 if (InstantiatedParamType->isDependentType() || Arg->isTypeDependent()) { 1205 // FIXME: Produce a cloned, canonical expression? 1206 Converted->push_back(TemplateArgument(Arg)); 1207 return false; 1208 } 1209 1210 // C++ [temp.arg.nontype]p5: 1211 // The following conversions are performed on each expression used 1212 // as a non-type template-argument. If a non-type 1213 // template-argument cannot be converted to the type of the 1214 // corresponding template-parameter then the program is 1215 // ill-formed. 1216 // 1217 // -- for a non-type template-parameter of integral or 1218 // enumeration type, integral promotions (4.5) and integral 1219 // conversions (4.7) are applied. 1220 QualType ParamType = InstantiatedParamType; 1221 QualType ArgType = Arg->getType(); 1222 if (ParamType->isIntegralType() || ParamType->isEnumeralType()) { 1223 // C++ [temp.arg.nontype]p1: 1224 // A template-argument for a non-type, non-template 1225 // template-parameter shall be one of: 1226 // 1227 // -- an integral constant-expression of integral or enumeration 1228 // type; or 1229 // -- the name of a non-type template-parameter; or 1230 SourceLocation NonConstantLoc; 1231 llvm::APSInt Value; 1232 if (!ArgType->isIntegralType() && !ArgType->isEnumeralType()) { 1233 Diag(Arg->getSourceRange().getBegin(), 1234 diag::err_template_arg_not_integral_or_enumeral) 1235 << ArgType << Arg->getSourceRange(); 1236 Diag(Param->getLocation(), diag::note_template_param_here); 1237 return true; 1238 } else if (!Arg->isValueDependent() && 1239 !Arg->isIntegerConstantExpr(Value, Context, &NonConstantLoc)) { 1240 Diag(NonConstantLoc, diag::err_template_arg_not_ice) 1241 << ArgType << Arg->getSourceRange(); 1242 return true; 1243 } 1244 1245 // FIXME: We need some way to more easily get the unqualified form 1246 // of the types without going all the way to the 1247 // canonical type. 1248 if (Context.getCanonicalType(ParamType).getCVRQualifiers()) 1249 ParamType = Context.getCanonicalType(ParamType).getUnqualifiedType(); 1250 if (Context.getCanonicalType(ArgType).getCVRQualifiers()) 1251 ArgType = Context.getCanonicalType(ArgType).getUnqualifiedType(); 1252 1253 // Try to convert the argument to the parameter's type. 1254 if (ParamType == ArgType) { 1255 // Okay: no conversion necessary 1256 } else if (IsIntegralPromotion(Arg, ArgType, ParamType) || 1257 !ParamType->isEnumeralType()) { 1258 // This is an integral promotion or conversion. 1259 ImpCastExprToType(Arg, ParamType); 1260 } else { 1261 // We can't perform this conversion. 1262 Diag(Arg->getSourceRange().getBegin(), 1263 diag::err_template_arg_not_convertible) 1264 << Arg->getType() << InstantiatedParamType << Arg->getSourceRange(); 1265 Diag(Param->getLocation(), diag::note_template_param_here); 1266 return true; 1267 } 1268 1269 // FIXME: Check overflow of template arguments? 1270 1271 if (Converted) { 1272 // Add the value of this argument to the list of converted 1273 // arguments. We use the bitwidth and signedness of the template 1274 // parameter. 1275 QualType IntegerType = Context.getCanonicalType(ParamType); 1276 if (const EnumType *Enum = IntegerType->getAsEnumType()) 1277 IntegerType = Enum->getDecl()->getIntegerType(); 1278 1279 llvm::APInt CanonicalArg(Context.getTypeSize(IntegerType), 0, 1280 IntegerType->isSignedIntegerType()); 1281 CanonicalArg = Value; 1282 1283 Converted->push_back(TemplateArgument(StartLoc, CanonicalArg)); 1284 } 1285 1286 return false; 1287 } 1288 1289 // Handle pointer-to-function, reference-to-function, and 1290 // pointer-to-member-function all in (roughly) the same way. 1291 if (// -- For a non-type template-parameter of type pointer to 1292 // function, only the function-to-pointer conversion (4.3) is 1293 // applied. If the template-argument represents a set of 1294 // overloaded functions (or a pointer to such), the matching 1295 // function is selected from the set (13.4). 1296 (ParamType->isPointerType() && 1297 ParamType->getAsPointerType()->getPointeeType()->isFunctionType()) || 1298 // -- For a non-type template-parameter of type reference to 1299 // function, no conversions apply. If the template-argument 1300 // represents a set of overloaded functions, the matching 1301 // function is selected from the set (13.4). 1302 (ParamType->isReferenceType() && 1303 ParamType->getAsReferenceType()->getPointeeType()->isFunctionType()) || 1304 // -- For a non-type template-parameter of type pointer to 1305 // member function, no conversions apply. If the 1306 // template-argument represents a set of overloaded member 1307 // functions, the matching member function is selected from 1308 // the set (13.4). 1309 (ParamType->isMemberPointerType() && 1310 ParamType->getAsMemberPointerType()->getPointeeType() 1311 ->isFunctionType())) { 1312 if (Context.hasSameUnqualifiedType(ArgType, 1313 ParamType.getNonReferenceType())) { 1314 // We don't have to do anything: the types already match. 1315 } else if (ArgType->isFunctionType() && ParamType->isPointerType()) { 1316 ArgType = Context.getPointerType(ArgType); 1317 ImpCastExprToType(Arg, ArgType); 1318 } else if (FunctionDecl *Fn 1319 = ResolveAddressOfOverloadedFunction(Arg, ParamType, true)) { 1320 if (DiagnoseUseOfDecl(Fn, Arg->getSourceRange().getBegin())) 1321 return true; 1322 1323 FixOverloadedFunctionReference(Arg, Fn); 1324 ArgType = Arg->getType(); 1325 if (ArgType->isFunctionType() && ParamType->isPointerType()) { 1326 ArgType = Context.getPointerType(Arg->getType()); 1327 ImpCastExprToType(Arg, ArgType); 1328 } 1329 } 1330 1331 if (!Context.hasSameUnqualifiedType(ArgType, 1332 ParamType.getNonReferenceType())) { 1333 // We can't perform this conversion. 1334 Diag(Arg->getSourceRange().getBegin(), 1335 diag::err_template_arg_not_convertible) 1336 << Arg->getType() << InstantiatedParamType << Arg->getSourceRange(); 1337 Diag(Param->getLocation(), diag::note_template_param_here); 1338 return true; 1339 } 1340 1341 if (ParamType->isMemberPointerType()) { 1342 NamedDecl *Member = 0; 1343 if (CheckTemplateArgumentPointerToMember(Arg, Member)) 1344 return true; 1345 1346 if (Converted) 1347 Converted->push_back(TemplateArgument(StartLoc, Member)); 1348 1349 return false; 1350 } 1351 1352 NamedDecl *Entity = 0; 1353 if (CheckTemplateArgumentAddressOfObjectOrFunction(Arg, Entity)) 1354 return true; 1355 1356 if (Converted) 1357 Converted->push_back(TemplateArgument(StartLoc, Entity)); 1358 return false; 1359 } 1360 1361 if (ParamType->isPointerType()) { 1362 // -- for a non-type template-parameter of type pointer to 1363 // object, qualification conversions (4.4) and the 1364 // array-to-pointer conversion (4.2) are applied. 1365 assert(ParamType->getAsPointerType()->getPointeeType()->isObjectType() && 1366 "Only object pointers allowed here"); 1367 1368 if (ArgType->isArrayType()) { 1369 ArgType = Context.getArrayDecayedType(ArgType); 1370 ImpCastExprToType(Arg, ArgType); 1371 } 1372 1373 if (IsQualificationConversion(ArgType, ParamType)) { 1374 ArgType = ParamType; 1375 ImpCastExprToType(Arg, ParamType); 1376 } 1377 1378 if (!Context.hasSameUnqualifiedType(ArgType, ParamType)) { 1379 // We can't perform this conversion. 1380 Diag(Arg->getSourceRange().getBegin(), 1381 diag::err_template_arg_not_convertible) 1382 << Arg->getType() << InstantiatedParamType << Arg->getSourceRange(); 1383 Diag(Param->getLocation(), diag::note_template_param_here); 1384 return true; 1385 } 1386 1387 NamedDecl *Entity = 0; 1388 if (CheckTemplateArgumentAddressOfObjectOrFunction(Arg, Entity)) 1389 return true; 1390 1391 if (Converted) 1392 Converted->push_back(TemplateArgument(StartLoc, Entity)); 1393 1394 return false; 1395 } 1396 1397 if (const ReferenceType *ParamRefType = ParamType->getAsReferenceType()) { 1398 // -- For a non-type template-parameter of type reference to 1399 // object, no conversions apply. The type referred to by the 1400 // reference may be more cv-qualified than the (otherwise 1401 // identical) type of the template-argument. The 1402 // template-parameter is bound directly to the 1403 // template-argument, which must be an lvalue. 1404 assert(ParamRefType->getPointeeType()->isObjectType() && 1405 "Only object references allowed here"); 1406 1407 if (!Context.hasSameUnqualifiedType(ParamRefType->getPointeeType(), ArgType)) { 1408 Diag(Arg->getSourceRange().getBegin(), 1409 diag::err_template_arg_no_ref_bind) 1410 << InstantiatedParamType << Arg->getType() 1411 << Arg->getSourceRange(); 1412 Diag(Param->getLocation(), diag::note_template_param_here); 1413 return true; 1414 } 1415 1416 unsigned ParamQuals 1417 = Context.getCanonicalType(ParamType).getCVRQualifiers(); 1418 unsigned ArgQuals = Context.getCanonicalType(ArgType).getCVRQualifiers(); 1419 1420 if ((ParamQuals | ArgQuals) != ParamQuals) { 1421 Diag(Arg->getSourceRange().getBegin(), 1422 diag::err_template_arg_ref_bind_ignores_quals) 1423 << InstantiatedParamType << Arg->getType() 1424 << Arg->getSourceRange(); 1425 Diag(Param->getLocation(), diag::note_template_param_here); 1426 return true; 1427 } 1428 1429 NamedDecl *Entity = 0; 1430 if (CheckTemplateArgumentAddressOfObjectOrFunction(Arg, Entity)) 1431 return true; 1432 1433 if (Converted) 1434 Converted->push_back(TemplateArgument(StartLoc, Entity)); 1435 1436 return false; 1437 } 1438 1439 // -- For a non-type template-parameter of type pointer to data 1440 // member, qualification conversions (4.4) are applied. 1441 assert(ParamType->isMemberPointerType() && "Only pointers to members remain"); 1442 1443 if (Context.hasSameUnqualifiedType(ParamType, ArgType)) { 1444 // Types match exactly: nothing more to do here. 1445 } else if (IsQualificationConversion(ArgType, ParamType)) { 1446 ImpCastExprToType(Arg, ParamType); 1447 } else { 1448 // We can't perform this conversion. 1449 Diag(Arg->getSourceRange().getBegin(), 1450 diag::err_template_arg_not_convertible) 1451 << Arg->getType() << InstantiatedParamType << Arg->getSourceRange(); 1452 Diag(Param->getLocation(), diag::note_template_param_here); 1453 return true; 1454 } 1455 1456 NamedDecl *Member = 0; 1457 if (CheckTemplateArgumentPointerToMember(Arg, Member)) 1458 return true; 1459 1460 if (Converted) 1461 Converted->push_back(TemplateArgument(StartLoc, Member)); 1462 1463 return false; 1464} 1465 1466/// \brief Check a template argument against its corresponding 1467/// template template parameter. 1468/// 1469/// This routine implements the semantics of C++ [temp.arg.template]. 1470/// It returns true if an error occurred, and false otherwise. 1471bool Sema::CheckTemplateArgument(TemplateTemplateParmDecl *Param, 1472 DeclRefExpr *Arg) { 1473 assert(isa<TemplateDecl>(Arg->getDecl()) && "Only template decls allowed"); 1474 TemplateDecl *Template = cast<TemplateDecl>(Arg->getDecl()); 1475 1476 // C++ [temp.arg.template]p1: 1477 // A template-argument for a template template-parameter shall be 1478 // the name of a class template, expressed as id-expression. Only 1479 // primary class templates are considered when matching the 1480 // template template argument with the corresponding parameter; 1481 // partial specializations are not considered even if their 1482 // parameter lists match that of the template template parameter. 1483 if (!isa<ClassTemplateDecl>(Template)) { 1484 assert(isa<FunctionTemplateDecl>(Template) && 1485 "Only function templates are possible here"); 1486 Diag(Arg->getSourceRange().getBegin(), 1487 diag::note_template_arg_refers_here_func) 1488 << Template; 1489 } 1490 1491 return !TemplateParameterListsAreEqual(Template->getTemplateParameters(), 1492 Param->getTemplateParameters(), 1493 true, true, 1494 Arg->getSourceRange().getBegin()); 1495} 1496 1497/// \brief Determine whether the given template parameter lists are 1498/// equivalent. 1499/// 1500/// \param New The new template parameter list, typically written in the 1501/// source code as part of a new template declaration. 1502/// 1503/// \param Old The old template parameter list, typically found via 1504/// name lookup of the template declared with this template parameter 1505/// list. 1506/// 1507/// \param Complain If true, this routine will produce a diagnostic if 1508/// the template parameter lists are not equivalent. 1509/// 1510/// \param IsTemplateTemplateParm If true, this routine is being 1511/// called to compare the template parameter lists of a template 1512/// template parameter. 1513/// 1514/// \param TemplateArgLoc If this source location is valid, then we 1515/// are actually checking the template parameter list of a template 1516/// argument (New) against the template parameter list of its 1517/// corresponding template template parameter (Old). We produce 1518/// slightly different diagnostics in this scenario. 1519/// 1520/// \returns True if the template parameter lists are equal, false 1521/// otherwise. 1522bool 1523Sema::TemplateParameterListsAreEqual(TemplateParameterList *New, 1524 TemplateParameterList *Old, 1525 bool Complain, 1526 bool IsTemplateTemplateParm, 1527 SourceLocation TemplateArgLoc) { 1528 if (Old->size() != New->size()) { 1529 if (Complain) { 1530 unsigned NextDiag = diag::err_template_param_list_different_arity; 1531 if (TemplateArgLoc.isValid()) { 1532 Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch); 1533 NextDiag = diag::note_template_param_list_different_arity; 1534 } 1535 Diag(New->getTemplateLoc(), NextDiag) 1536 << (New->size() > Old->size()) 1537 << IsTemplateTemplateParm 1538 << SourceRange(New->getTemplateLoc(), New->getRAngleLoc()); 1539 Diag(Old->getTemplateLoc(), diag::note_template_prev_declaration) 1540 << IsTemplateTemplateParm 1541 << SourceRange(Old->getTemplateLoc(), Old->getRAngleLoc()); 1542 } 1543 1544 return false; 1545 } 1546 1547 for (TemplateParameterList::iterator OldParm = Old->begin(), 1548 OldParmEnd = Old->end(), NewParm = New->begin(); 1549 OldParm != OldParmEnd; ++OldParm, ++NewParm) { 1550 if ((*OldParm)->getKind() != (*NewParm)->getKind()) { 1551 unsigned NextDiag = diag::err_template_param_different_kind; 1552 if (TemplateArgLoc.isValid()) { 1553 Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch); 1554 NextDiag = diag::note_template_param_different_kind; 1555 } 1556 Diag((*NewParm)->getLocation(), NextDiag) 1557 << IsTemplateTemplateParm; 1558 Diag((*OldParm)->getLocation(), diag::note_template_prev_declaration) 1559 << IsTemplateTemplateParm; 1560 return false; 1561 } 1562 1563 if (isa<TemplateTypeParmDecl>(*OldParm)) { 1564 // Okay; all template type parameters are equivalent (since we 1565 // know we're at the same index). 1566#if 0 1567 // FIXME: Enable this code in debug mode *after* we properly go 1568 // through and "instantiate" the template parameter lists of 1569 // template template parameters. It's only after this 1570 // instantiation that (1) any dependent types within the 1571 // template parameter list of the template template parameter 1572 // can be checked, and (2) the template type parameter depths 1573 // will match up. 1574 QualType OldParmType 1575 = Context.getTypeDeclType(cast<TemplateTypeParmDecl>(*OldParm)); 1576 QualType NewParmType 1577 = Context.getTypeDeclType(cast<TemplateTypeParmDecl>(*NewParm)); 1578 assert(Context.getCanonicalType(OldParmType) == 1579 Context.getCanonicalType(NewParmType) && 1580 "type parameter mismatch?"); 1581#endif 1582 } else if (NonTypeTemplateParmDecl *OldNTTP 1583 = dyn_cast<NonTypeTemplateParmDecl>(*OldParm)) { 1584 // The types of non-type template parameters must agree. 1585 NonTypeTemplateParmDecl *NewNTTP 1586 = cast<NonTypeTemplateParmDecl>(*NewParm); 1587 if (Context.getCanonicalType(OldNTTP->getType()) != 1588 Context.getCanonicalType(NewNTTP->getType())) { 1589 if (Complain) { 1590 unsigned NextDiag = diag::err_template_nontype_parm_different_type; 1591 if (TemplateArgLoc.isValid()) { 1592 Diag(TemplateArgLoc, 1593 diag::err_template_arg_template_params_mismatch); 1594 NextDiag = diag::note_template_nontype_parm_different_type; 1595 } 1596 Diag(NewNTTP->getLocation(), NextDiag) 1597 << NewNTTP->getType() 1598 << IsTemplateTemplateParm; 1599 Diag(OldNTTP->getLocation(), 1600 diag::note_template_nontype_parm_prev_declaration) 1601 << OldNTTP->getType(); 1602 } 1603 return false; 1604 } 1605 } else { 1606 // The template parameter lists of template template 1607 // parameters must agree. 1608 // FIXME: Could we perform a faster "type" comparison here? 1609 assert(isa<TemplateTemplateParmDecl>(*OldParm) && 1610 "Only template template parameters handled here"); 1611 TemplateTemplateParmDecl *OldTTP 1612 = cast<TemplateTemplateParmDecl>(*OldParm); 1613 TemplateTemplateParmDecl *NewTTP 1614 = cast<TemplateTemplateParmDecl>(*NewParm); 1615 if (!TemplateParameterListsAreEqual(NewTTP->getTemplateParameters(), 1616 OldTTP->getTemplateParameters(), 1617 Complain, 1618 /*IsTemplateTemplateParm=*/true, 1619 TemplateArgLoc)) 1620 return false; 1621 } 1622 } 1623 1624 return true; 1625} 1626 1627/// \brief Check whether a template can be declared within this scope. 1628/// 1629/// If the template declaration is valid in this scope, returns 1630/// false. Otherwise, issues a diagnostic and returns true. 1631bool 1632Sema::CheckTemplateDeclScope(Scope *S, 1633 MultiTemplateParamsArg &TemplateParameterLists) { 1634 assert(TemplateParameterLists.size() > 0 && "Not a template"); 1635 1636 // Find the nearest enclosing declaration scope. 1637 while ((S->getFlags() & Scope::DeclScope) == 0 || 1638 (S->getFlags() & Scope::TemplateParamScope) != 0) 1639 S = S->getParent(); 1640 1641 TemplateParameterList *TemplateParams = 1642 static_cast<TemplateParameterList*>(*TemplateParameterLists.get()); 1643 SourceLocation TemplateLoc = TemplateParams->getTemplateLoc(); 1644 SourceRange TemplateRange 1645 = SourceRange(TemplateLoc, TemplateParams->getRAngleLoc()); 1646 1647 // C++ [temp]p2: 1648 // A template-declaration can appear only as a namespace scope or 1649 // class scope declaration. 1650 DeclContext *Ctx = static_cast<DeclContext *>(S->getEntity()); 1651 while (Ctx && isa<LinkageSpecDecl>(Ctx)) { 1652 if (cast<LinkageSpecDecl>(Ctx)->getLanguage() != LinkageSpecDecl::lang_cxx) 1653 return Diag(TemplateLoc, diag::err_template_linkage) 1654 << TemplateRange; 1655 1656 Ctx = Ctx->getParent(); 1657 } 1658 1659 if (Ctx && (Ctx->isFileContext() || Ctx->isRecord())) 1660 return false; 1661 1662 return Diag(TemplateLoc, diag::err_template_outside_namespace_or_class_scope) 1663 << TemplateRange; 1664} 1665 1666/// \brief Check whether a class template specialization in the 1667/// current context is well-formed. 1668/// 1669/// This routine determines whether a class template specialization 1670/// can be declared in the current context (C++ [temp.expl.spec]p2) 1671/// and emits appropriate diagnostics if there was an error. It 1672/// returns true if there was an error that we cannot recover from, 1673/// and false otherwise. 1674bool 1675Sema::CheckClassTemplateSpecializationScope(ClassTemplateDecl *ClassTemplate, 1676 ClassTemplateSpecializationDecl *PrevDecl, 1677 SourceLocation TemplateNameLoc, 1678 SourceRange ScopeSpecifierRange) { 1679 // C++ [temp.expl.spec]p2: 1680 // An explicit specialization shall be declared in the namespace 1681 // of which the template is a member, or, for member templates, in 1682 // the namespace of which the enclosing class or enclosing class 1683 // template is a member. An explicit specialization of a member 1684 // function, member class or static data member of a class 1685 // template shall be declared in the namespace of which the class 1686 // template is a member. Such a declaration may also be a 1687 // definition. If the declaration is not a definition, the 1688 // specialization may be defined later in the name- space in which 1689 // the explicit specialization was declared, or in a namespace 1690 // that encloses the one in which the explicit specialization was 1691 // declared. 1692 if (CurContext->getLookupContext()->isFunctionOrMethod()) { 1693 Diag(TemplateNameLoc, diag::err_template_spec_decl_function_scope) 1694 << ClassTemplate; 1695 return true; 1696 } 1697 1698 DeclContext *DC = CurContext->getEnclosingNamespaceContext(); 1699 DeclContext *TemplateContext 1700 = ClassTemplate->getDeclContext()->getEnclosingNamespaceContext(); 1701 if (!PrevDecl || PrevDecl->getSpecializationKind() == TSK_Undeclared) { 1702 // There is no prior declaration of this entity, so this 1703 // specialization must be in the same context as the template 1704 // itself. 1705 if (DC != TemplateContext) { 1706 if (isa<TranslationUnitDecl>(TemplateContext)) 1707 Diag(TemplateNameLoc, diag::err_template_spec_decl_out_of_scope_global) 1708 << ClassTemplate << ScopeSpecifierRange; 1709 else if (isa<NamespaceDecl>(TemplateContext)) 1710 Diag(TemplateNameLoc, diag::err_template_spec_decl_out_of_scope) 1711 << ClassTemplate << cast<NamedDecl>(TemplateContext) 1712 << ScopeSpecifierRange; 1713 1714 Diag(ClassTemplate->getLocation(), diag::note_template_decl_here); 1715 } 1716 1717 return false; 1718 } 1719 1720 // We have a previous declaration of this entity. Make sure that 1721 // this redeclaration (or definition) occurs in an enclosing namespace. 1722 if (!CurContext->Encloses(TemplateContext)) { 1723 if (isa<TranslationUnitDecl>(TemplateContext)) 1724 Diag(TemplateNameLoc, diag::err_template_spec_redecl_global_scope) 1725 << ClassTemplate << ScopeSpecifierRange; 1726 else if (isa<NamespaceDecl>(TemplateContext)) 1727 Diag(TemplateNameLoc, diag::err_template_spec_redecl_out_of_scope) 1728 << ClassTemplate << cast<NamedDecl>(TemplateContext) 1729 << ScopeSpecifierRange; 1730 1731 Diag(ClassTemplate->getLocation(), diag::note_template_decl_here); 1732 } 1733 1734 return false; 1735} 1736 1737Sema::DeclTy * 1738Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagKind TK, 1739 SourceLocation KWLoc, 1740 const CXXScopeSpec &SS, 1741 DeclTy *TemplateD, 1742 SourceLocation TemplateNameLoc, 1743 SourceLocation LAngleLoc, 1744 ASTTemplateArgsPtr TemplateArgsIn, 1745 SourceLocation *TemplateArgLocs, 1746 SourceLocation RAngleLoc, 1747 AttributeList *Attr, 1748 MultiTemplateParamsArg TemplateParameterLists) { 1749 // Find the class template we're specializing 1750 ClassTemplateDecl *ClassTemplate 1751 = dyn_cast_or_null<ClassTemplateDecl>(static_cast<Decl *>(TemplateD)); 1752 if (!ClassTemplate) 1753 return 0; 1754 1755 // Check the validity of the template headers that introduce this 1756 // template. 1757 // FIXME: Once we have member templates, we'll need to check 1758 // C++ [temp.expl.spec]p17-18, where we could have multiple levels of 1759 // template<> headers. 1760 if (TemplateParameterLists.size() == 0) 1761 Diag(KWLoc, diag::err_template_spec_needs_header) 1762 << CodeModificationHint::CreateInsertion(KWLoc, "template<> "); 1763 else { 1764 TemplateParameterList *TemplateParams 1765 = static_cast<TemplateParameterList*>(*TemplateParameterLists.get()); 1766 if (TemplateParameterLists.size() > 1) { 1767 Diag(TemplateParams->getTemplateLoc(), 1768 diag::err_template_spec_extra_headers); 1769 return 0; 1770 } 1771 1772 if (TemplateParams->size() > 0) { 1773 // FIXME: No support for class template partial specialization. 1774 Diag(TemplateParams->getTemplateLoc(), 1775 diag::unsup_template_partial_spec); 1776 return 0; 1777 } 1778 } 1779 1780 // Check that the specialization uses the same tag kind as the 1781 // original template. 1782 TagDecl::TagKind Kind; 1783 switch (TagSpec) { 1784 default: assert(0 && "Unknown tag type!"); 1785 case DeclSpec::TST_struct: Kind = TagDecl::TK_struct; break; 1786 case DeclSpec::TST_union: Kind = TagDecl::TK_union; break; 1787 case DeclSpec::TST_class: Kind = TagDecl::TK_class; break; 1788 } 1789 if (ClassTemplate->getTemplatedDecl()->getTagKind() != Kind) { 1790 Diag(KWLoc, diag::err_use_with_wrong_tag) << ClassTemplate; 1791 Diag(ClassTemplate->getTemplatedDecl()->getLocation(), 1792 diag::note_previous_use); 1793 Kind = ClassTemplate->getTemplatedDecl()->getTagKind(); 1794 } 1795 1796 // Translate the parser's template argument list in our AST format. 1797 llvm::SmallVector<TemplateArgument, 16> TemplateArgs; 1798 translateTemplateArguments(TemplateArgsIn, TemplateArgLocs, TemplateArgs); 1799 1800 // Check that the template argument list is well-formed for this 1801 // template. 1802 llvm::SmallVector<TemplateArgument, 16> ConvertedTemplateArgs; 1803 if (CheckTemplateArgumentList(ClassTemplate, TemplateNameLoc, LAngleLoc, 1804 &TemplateArgs[0], TemplateArgs.size(), 1805 RAngleLoc, ConvertedTemplateArgs)) 1806 return 0; 1807 1808 assert((ConvertedTemplateArgs.size() == 1809 ClassTemplate->getTemplateParameters()->size()) && 1810 "Converted template argument list is too short!"); 1811 1812 // Find the class template specialization declaration that 1813 // corresponds to these arguments. 1814 llvm::FoldingSetNodeID ID; 1815 ClassTemplateSpecializationDecl::Profile(ID, &ConvertedTemplateArgs[0], 1816 ConvertedTemplateArgs.size()); 1817 void *InsertPos = 0; 1818 ClassTemplateSpecializationDecl *PrevDecl 1819 = ClassTemplate->getSpecializations().FindNodeOrInsertPos(ID, InsertPos); 1820 1821 ClassTemplateSpecializationDecl *Specialization = 0; 1822 1823 // Check whether we can declare a class template specialization in 1824 // the current scope. 1825 if (CheckClassTemplateSpecializationScope(ClassTemplate, PrevDecl, 1826 TemplateNameLoc, 1827 SS.getRange())) 1828 return 0; 1829 1830 if (PrevDecl && PrevDecl->getSpecializationKind() == TSK_Undeclared) { 1831 // Since the only prior class template specialization with these 1832 // arguments was referenced but not declared, reuse that 1833 // declaration node as our own, updating its source location to 1834 // reflect our new declaration. 1835 Specialization = PrevDecl; 1836 Specialization->setLocation(TemplateNameLoc); 1837 PrevDecl = 0; 1838 } else { 1839 // Create a new class template specialization declaration node for 1840 // this explicit specialization. 1841 Specialization 1842 = ClassTemplateSpecializationDecl::Create(Context, 1843 ClassTemplate->getDeclContext(), 1844 TemplateNameLoc, 1845 ClassTemplate, 1846 &ConvertedTemplateArgs[0], 1847 ConvertedTemplateArgs.size(), 1848 PrevDecl); 1849 1850 if (PrevDecl) { 1851 ClassTemplate->getSpecializations().RemoveNode(PrevDecl); 1852 ClassTemplate->getSpecializations().GetOrInsertNode(Specialization); 1853 } else { 1854 ClassTemplate->getSpecializations().InsertNode(Specialization, 1855 InsertPos); 1856 } 1857 } 1858 1859 // Note that this is an explicit specialization. 1860 Specialization->setSpecializationKind(TSK_ExplicitSpecialization); 1861 1862 // Check that this isn't a redefinition of this specialization. 1863 if (TK == TK_Definition) { 1864 if (RecordDecl *Def = Specialization->getDefinition(Context)) { 1865 // FIXME: Should also handle explicit specialization after 1866 // implicit instantiation with a special diagnostic. 1867 SourceRange Range(TemplateNameLoc, RAngleLoc); 1868 Diag(TemplateNameLoc, diag::err_redefinition) 1869 << Specialization << Range; 1870 Diag(Def->getLocation(), diag::note_previous_definition); 1871 Specialization->setInvalidDecl(); 1872 return 0; 1873 } 1874 } 1875 1876 // Build the fully-sugared type for this class template 1877 // specialization as the user wrote in the specialization 1878 // itself. This means that we'll pretty-print the type retrieved 1879 // from the specialization's declaration the way that the user 1880 // actually wrote the specialization, rather than formatting the 1881 // name based on the "canonical" representation used to store the 1882 // template arguments in the specialization. 1883 Specialization->setTypeAsWritten( 1884 Context.getClassTemplateSpecializationType(ClassTemplate, 1885 &TemplateArgs[0], 1886 TemplateArgs.size(), 1887 Context.getTypeDeclType(Specialization))); 1888 TemplateArgsIn.release(); 1889 1890 // C++ [temp.expl.spec]p9: 1891 // A template explicit specialization is in the scope of the 1892 // namespace in which the template was defined. 1893 // 1894 // We actually implement this paragraph where we set the semantic 1895 // context (in the creation of the ClassTemplateSpecializationDecl), 1896 // but we also maintain the lexical context where the actual 1897 // definition occurs. 1898 Specialization->setLexicalDeclContext(CurContext); 1899 1900 // We may be starting the definition of this specialization. 1901 if (TK == TK_Definition) 1902 Specialization->startDefinition(); 1903 1904 // Add the specialization into its lexical context, so that it can 1905 // be seen when iterating through the list of declarations in that 1906 // context. However, specializations are not found by name lookup. 1907 CurContext->addDecl(Specialization); 1908 return Specialization; 1909} 1910