1 //===------ SemaDeclCXX.cpp - Semantic Analysis for C++ Declarations ------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This file implements semantic analysis for C++ declarations. 10 // 11 //===----------------------------------------------------------------------===// 12 13 #include "clang/AST/ASTConsumer.h" 14 #include "clang/AST/ASTContext.h" 15 #include "clang/AST/ASTLambda.h" 16 #include "clang/AST/ASTMutationListener.h" 17 #include "clang/AST/CXXInheritance.h" 18 #include "clang/AST/CharUnits.h" 19 #include "clang/AST/ComparisonCategories.h" 20 #include "clang/AST/DeclCXX.h" 21 #include "clang/AST/DeclTemplate.h" 22 #include "clang/AST/EvaluatedExprVisitor.h" 23 #include "clang/AST/Expr.h" 24 #include "clang/AST/ExprCXX.h" 25 #include "clang/AST/RecordLayout.h" 26 #include "clang/AST/RecursiveASTVisitor.h" 27 #include "clang/AST/StmtVisitor.h" 28 #include "clang/AST/TypeLoc.h" 29 #include "clang/AST/TypeOrdering.h" 30 #include "clang/Basic/AttributeCommonInfo.h" 31 #include "clang/Basic/PartialDiagnostic.h" 32 #include "clang/Basic/Specifiers.h" 33 #include "clang/Basic/TargetInfo.h" 34 #include "clang/Lex/LiteralSupport.h" 35 #include "clang/Lex/Preprocessor.h" 36 #include "clang/Sema/CXXFieldCollector.h" 37 #include "clang/Sema/DeclSpec.h" 38 #include "clang/Sema/EnterExpressionEvaluationContext.h" 39 #include "clang/Sema/Initialization.h" 40 #include "clang/Sema/Lookup.h" 41 #include "clang/Sema/Ownership.h" 42 #include "clang/Sema/ParsedTemplate.h" 43 #include "clang/Sema/Scope.h" 44 #include "clang/Sema/ScopeInfo.h" 45 #include "clang/Sema/SemaInternal.h" 46 #include "clang/Sema/Template.h" 47 #include "llvm/ADT/ArrayRef.h" 48 #include "llvm/ADT/STLExtras.h" 49 #include "llvm/ADT/ScopeExit.h" 50 #include "llvm/ADT/SmallString.h" 51 #include "llvm/ADT/StringExtras.h" 52 #include "llvm/Support/ConvertUTF.h" 53 #include "llvm/Support/SaveAndRestore.h" 54 #include <map> 55 #include <optional> 56 #include <set> 57 58 using namespace clang; 59 60 //===----------------------------------------------------------------------===// 61 // CheckDefaultArgumentVisitor 62 //===----------------------------------------------------------------------===// 63 64 namespace { 65 /// CheckDefaultArgumentVisitor - C++ [dcl.fct.default] Traverses 66 /// the default argument of a parameter to determine whether it 67 /// contains any ill-formed subexpressions. For example, this will 68 /// diagnose the use of local variables or parameters within the 69 /// default argument expression. 70 class CheckDefaultArgumentVisitor 71 : public ConstStmtVisitor<CheckDefaultArgumentVisitor, bool> { 72 Sema &S; 73 const Expr *DefaultArg; 74 75 public: 76 CheckDefaultArgumentVisitor(Sema &S, const Expr *DefaultArg) 77 : S(S), DefaultArg(DefaultArg) {} 78 79 bool VisitExpr(const Expr *Node); 80 bool VisitDeclRefExpr(const DeclRefExpr *DRE); 81 bool VisitCXXThisExpr(const CXXThisExpr *ThisE); 82 bool VisitLambdaExpr(const LambdaExpr *Lambda); 83 bool VisitPseudoObjectExpr(const PseudoObjectExpr *POE); 84 }; 85 86 /// VisitExpr - Visit all of the children of this expression. 87 bool CheckDefaultArgumentVisitor::VisitExpr(const Expr *Node) { 88 bool IsInvalid = false; 89 for (const Stmt *SubStmt : Node->children()) 90 if (SubStmt) 91 IsInvalid |= Visit(SubStmt); 92 return IsInvalid; 93 } 94 95 /// VisitDeclRefExpr - Visit a reference to a declaration, to 96 /// determine whether this declaration can be used in the default 97 /// argument expression. 98 bool CheckDefaultArgumentVisitor::VisitDeclRefExpr(const DeclRefExpr *DRE) { 99 const ValueDecl *Decl = dyn_cast<ValueDecl>(DRE->getDecl()); 100 101 if (!isa<VarDecl, BindingDecl>(Decl)) 102 return false; 103 104 if (const auto *Param = dyn_cast<ParmVarDecl>(Decl)) { 105 // C++ [dcl.fct.default]p9: 106 // [...] parameters of a function shall not be used in default 107 // argument expressions, even if they are not evaluated. [...] 108 // 109 // C++17 [dcl.fct.default]p9 (by CWG 2082): 110 // [...] A parameter shall not appear as a potentially-evaluated 111 // expression in a default argument. [...] 112 // 113 if (DRE->isNonOdrUse() != NOUR_Unevaluated) 114 return S.Diag(DRE->getBeginLoc(), 115 diag::err_param_default_argument_references_param) 116 << Param->getDeclName() << DefaultArg->getSourceRange(); 117 } else if (auto *VD = Decl->getPotentiallyDecomposedVarDecl()) { 118 // C++ [dcl.fct.default]p7: 119 // Local variables shall not be used in default argument 120 // expressions. 121 // 122 // C++17 [dcl.fct.default]p7 (by CWG 2082): 123 // A local variable shall not appear as a potentially-evaluated 124 // expression in a default argument. 125 // 126 // C++20 [dcl.fct.default]p7 (DR as part of P0588R1, see also CWG 2346): 127 // Note: A local variable cannot be odr-used (6.3) in a default 128 // argument. 129 // 130 if (VD->isLocalVarDecl() && !DRE->isNonOdrUse()) 131 return S.Diag(DRE->getBeginLoc(), 132 diag::err_param_default_argument_references_local) 133 << Decl << DefaultArg->getSourceRange(); 134 } 135 return false; 136 } 137 138 /// VisitCXXThisExpr - Visit a C++ "this" expression. 139 bool CheckDefaultArgumentVisitor::VisitCXXThisExpr(const CXXThisExpr *ThisE) { 140 // C++ [dcl.fct.default]p8: 141 // The keyword this shall not be used in a default argument of a 142 // member function. 143 return S.Diag(ThisE->getBeginLoc(), 144 diag::err_param_default_argument_references_this) 145 << ThisE->getSourceRange(); 146 } 147 148 bool CheckDefaultArgumentVisitor::VisitPseudoObjectExpr( 149 const PseudoObjectExpr *POE) { 150 bool Invalid = false; 151 for (const Expr *E : POE->semantics()) { 152 // Look through bindings. 153 if (const auto *OVE = dyn_cast<OpaqueValueExpr>(E)) { 154 E = OVE->getSourceExpr(); 155 assert(E && "pseudo-object binding without source expression?"); 156 } 157 158 Invalid |= Visit(E); 159 } 160 return Invalid; 161 } 162 163 bool CheckDefaultArgumentVisitor::VisitLambdaExpr(const LambdaExpr *Lambda) { 164 // [expr.prim.lambda.capture]p9 165 // a lambda-expression appearing in a default argument cannot implicitly or 166 // explicitly capture any local entity. Such a lambda-expression can still 167 // have an init-capture if any full-expression in its initializer satisfies 168 // the constraints of an expression appearing in a default argument. 169 bool Invalid = false; 170 for (const LambdaCapture &LC : Lambda->captures()) { 171 if (!Lambda->isInitCapture(&LC)) 172 return S.Diag(LC.getLocation(), diag::err_lambda_capture_default_arg); 173 // Init captures are always VarDecl. 174 auto *D = cast<VarDecl>(LC.getCapturedVar()); 175 Invalid |= Visit(D->getInit()); 176 } 177 return Invalid; 178 } 179 } // namespace 180 181 void 182 Sema::ImplicitExceptionSpecification::CalledDecl(SourceLocation CallLoc, 183 const CXXMethodDecl *Method) { 184 // If we have an MSAny spec already, don't bother. 185 if (!Method || ComputedEST == EST_MSAny) 186 return; 187 188 const FunctionProtoType *Proto 189 = Method->getType()->getAs<FunctionProtoType>(); 190 Proto = Self->ResolveExceptionSpec(CallLoc, Proto); 191 if (!Proto) 192 return; 193 194 ExceptionSpecificationType EST = Proto->getExceptionSpecType(); 195 196 // If we have a throw-all spec at this point, ignore the function. 197 if (ComputedEST == EST_None) 198 return; 199 200 if (EST == EST_None && Method->hasAttr<NoThrowAttr>()) 201 EST = EST_BasicNoexcept; 202 203 switch (EST) { 204 case EST_Unparsed: 205 case EST_Uninstantiated: 206 case EST_Unevaluated: 207 llvm_unreachable("should not see unresolved exception specs here"); 208 209 // If this function can throw any exceptions, make a note of that. 210 case EST_MSAny: 211 case EST_None: 212 // FIXME: Whichever we see last of MSAny and None determines our result. 213 // We should make a consistent, order-independent choice here. 214 ClearExceptions(); 215 ComputedEST = EST; 216 return; 217 case EST_NoexceptFalse: 218 ClearExceptions(); 219 ComputedEST = EST_None; 220 return; 221 // FIXME: If the call to this decl is using any of its default arguments, we 222 // need to search them for potentially-throwing calls. 223 // If this function has a basic noexcept, it doesn't affect the outcome. 224 case EST_BasicNoexcept: 225 case EST_NoexceptTrue: 226 case EST_NoThrow: 227 return; 228 // If we're still at noexcept(true) and there's a throw() callee, 229 // change to that specification. 230 case EST_DynamicNone: 231 if (ComputedEST == EST_BasicNoexcept) 232 ComputedEST = EST_DynamicNone; 233 return; 234 case EST_DependentNoexcept: 235 llvm_unreachable( 236 "should not generate implicit declarations for dependent cases"); 237 case EST_Dynamic: 238 break; 239 } 240 assert(EST == EST_Dynamic && "EST case not considered earlier."); 241 assert(ComputedEST != EST_None && 242 "Shouldn't collect exceptions when throw-all is guaranteed."); 243 ComputedEST = EST_Dynamic; 244 // Record the exceptions in this function's exception specification. 245 for (const auto &E : Proto->exceptions()) 246 if (ExceptionsSeen.insert(Self->Context.getCanonicalType(E)).second) 247 Exceptions.push_back(E); 248 } 249 250 void Sema::ImplicitExceptionSpecification::CalledStmt(Stmt *S) { 251 if (!S || ComputedEST == EST_MSAny) 252 return; 253 254 // FIXME: 255 // 256 // C++0x [except.spec]p14: 257 // [An] implicit exception-specification specifies the type-id T if and 258 // only if T is allowed by the exception-specification of a function directly 259 // invoked by f's implicit definition; f shall allow all exceptions if any 260 // function it directly invokes allows all exceptions, and f shall allow no 261 // exceptions if every function it directly invokes allows no exceptions. 262 // 263 // Note in particular that if an implicit exception-specification is generated 264 // for a function containing a throw-expression, that specification can still 265 // be noexcept(true). 266 // 267 // Note also that 'directly invoked' is not defined in the standard, and there 268 // is no indication that we should only consider potentially-evaluated calls. 269 // 270 // Ultimately we should implement the intent of the standard: the exception 271 // specification should be the set of exceptions which can be thrown by the 272 // implicit definition. For now, we assume that any non-nothrow expression can 273 // throw any exception. 274 275 if (Self->canThrow(S)) 276 ComputedEST = EST_None; 277 } 278 279 ExprResult Sema::ConvertParamDefaultArgument(ParmVarDecl *Param, Expr *Arg, 280 SourceLocation EqualLoc) { 281 if (RequireCompleteType(Param->getLocation(), Param->getType(), 282 diag::err_typecheck_decl_incomplete_type)) 283 return true; 284 285 // C++ [dcl.fct.default]p5 286 // A default argument expression is implicitly converted (clause 287 // 4) to the parameter type. The default argument expression has 288 // the same semantic constraints as the initializer expression in 289 // a declaration of a variable of the parameter type, using the 290 // copy-initialization semantics (8.5). 291 InitializedEntity Entity = InitializedEntity::InitializeParameter(Context, 292 Param); 293 InitializationKind Kind = InitializationKind::CreateCopy(Param->getLocation(), 294 EqualLoc); 295 InitializationSequence InitSeq(*this, Entity, Kind, Arg); 296 ExprResult Result = InitSeq.Perform(*this, Entity, Kind, Arg); 297 if (Result.isInvalid()) 298 return true; 299 Arg = Result.getAs<Expr>(); 300 301 CheckCompletedExpr(Arg, EqualLoc); 302 Arg = MaybeCreateExprWithCleanups(Arg); 303 304 return Arg; 305 } 306 307 void Sema::SetParamDefaultArgument(ParmVarDecl *Param, Expr *Arg, 308 SourceLocation EqualLoc) { 309 // Add the default argument to the parameter 310 Param->setDefaultArg(Arg); 311 312 // We have already instantiated this parameter; provide each of the 313 // instantiations with the uninstantiated default argument. 314 UnparsedDefaultArgInstantiationsMap::iterator InstPos 315 = UnparsedDefaultArgInstantiations.find(Param); 316 if (InstPos != UnparsedDefaultArgInstantiations.end()) { 317 for (unsigned I = 0, N = InstPos->second.size(); I != N; ++I) 318 InstPos->second[I]->setUninstantiatedDefaultArg(Arg); 319 320 // We're done tracking this parameter's instantiations. 321 UnparsedDefaultArgInstantiations.erase(InstPos); 322 } 323 } 324 325 /// ActOnParamDefaultArgument - Check whether the default argument 326 /// provided for a function parameter is well-formed. If so, attach it 327 /// to the parameter declaration. 328 void 329 Sema::ActOnParamDefaultArgument(Decl *param, SourceLocation EqualLoc, 330 Expr *DefaultArg) { 331 if (!param || !DefaultArg) 332 return; 333 334 ParmVarDecl *Param = cast<ParmVarDecl>(param); 335 UnparsedDefaultArgLocs.erase(Param); 336 337 // Default arguments are only permitted in C++ 338 if (!getLangOpts().CPlusPlus) { 339 Diag(EqualLoc, diag::err_param_default_argument) 340 << DefaultArg->getSourceRange(); 341 return ActOnParamDefaultArgumentError(param, EqualLoc, DefaultArg); 342 } 343 344 // Check for unexpanded parameter packs. 345 if (DiagnoseUnexpandedParameterPack(DefaultArg, UPPC_DefaultArgument)) 346 return ActOnParamDefaultArgumentError(param, EqualLoc, DefaultArg); 347 348 // C++11 [dcl.fct.default]p3 349 // A default argument expression [...] shall not be specified for a 350 // parameter pack. 351 if (Param->isParameterPack()) { 352 Diag(EqualLoc, diag::err_param_default_argument_on_parameter_pack) 353 << DefaultArg->getSourceRange(); 354 // Recover by discarding the default argument. 355 Param->setDefaultArg(nullptr); 356 return; 357 } 358 359 ExprResult Result = ConvertParamDefaultArgument(Param, DefaultArg, EqualLoc); 360 if (Result.isInvalid()) 361 return ActOnParamDefaultArgumentError(param, EqualLoc, DefaultArg); 362 363 DefaultArg = Result.getAs<Expr>(); 364 365 // Check that the default argument is well-formed 366 CheckDefaultArgumentVisitor DefaultArgChecker(*this, DefaultArg); 367 if (DefaultArgChecker.Visit(DefaultArg)) 368 return ActOnParamDefaultArgumentError(param, EqualLoc, DefaultArg); 369 370 SetParamDefaultArgument(Param, DefaultArg, EqualLoc); 371 } 372 373 /// ActOnParamUnparsedDefaultArgument - We've seen a default 374 /// argument for a function parameter, but we can't parse it yet 375 /// because we're inside a class definition. Note that this default 376 /// argument will be parsed later. 377 void Sema::ActOnParamUnparsedDefaultArgument(Decl *param, 378 SourceLocation EqualLoc, 379 SourceLocation ArgLoc) { 380 if (!param) 381 return; 382 383 ParmVarDecl *Param = cast<ParmVarDecl>(param); 384 Param->setUnparsedDefaultArg(); 385 UnparsedDefaultArgLocs[Param] = ArgLoc; 386 } 387 388 /// ActOnParamDefaultArgumentError - Parsing or semantic analysis of 389 /// the default argument for the parameter param failed. 390 void Sema::ActOnParamDefaultArgumentError(Decl *param, SourceLocation EqualLoc, 391 Expr *DefaultArg) { 392 if (!param) 393 return; 394 395 ParmVarDecl *Param = cast<ParmVarDecl>(param); 396 Param->setInvalidDecl(); 397 UnparsedDefaultArgLocs.erase(Param); 398 ExprResult RE; 399 if (DefaultArg) { 400 RE = CreateRecoveryExpr(EqualLoc, DefaultArg->getEndLoc(), {DefaultArg}, 401 Param->getType().getNonReferenceType()); 402 } else { 403 RE = CreateRecoveryExpr(EqualLoc, EqualLoc, {}, 404 Param->getType().getNonReferenceType()); 405 } 406 Param->setDefaultArg(RE.get()); 407 } 408 409 /// CheckExtraCXXDefaultArguments - Check for any extra default 410 /// arguments in the declarator, which is not a function declaration 411 /// or definition and therefore is not permitted to have default 412 /// arguments. This routine should be invoked for every declarator 413 /// that is not a function declaration or definition. 414 void Sema::CheckExtraCXXDefaultArguments(Declarator &D) { 415 // C++ [dcl.fct.default]p3 416 // A default argument expression shall be specified only in the 417 // parameter-declaration-clause of a function declaration or in a 418 // template-parameter (14.1). It shall not be specified for a 419 // parameter pack. If it is specified in a 420 // parameter-declaration-clause, it shall not occur within a 421 // declarator or abstract-declarator of a parameter-declaration. 422 bool MightBeFunction = D.isFunctionDeclarationContext(); 423 for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) { 424 DeclaratorChunk &chunk = D.getTypeObject(i); 425 if (chunk.Kind == DeclaratorChunk::Function) { 426 if (MightBeFunction) { 427 // This is a function declaration. It can have default arguments, but 428 // keep looking in case its return type is a function type with default 429 // arguments. 430 MightBeFunction = false; 431 continue; 432 } 433 for (unsigned argIdx = 0, e = chunk.Fun.NumParams; argIdx != e; 434 ++argIdx) { 435 ParmVarDecl *Param = cast<ParmVarDecl>(chunk.Fun.Params[argIdx].Param); 436 if (Param->hasUnparsedDefaultArg()) { 437 std::unique_ptr<CachedTokens> Toks = 438 std::move(chunk.Fun.Params[argIdx].DefaultArgTokens); 439 SourceRange SR; 440 if (Toks->size() > 1) 441 SR = SourceRange((*Toks)[1].getLocation(), 442 Toks->back().getLocation()); 443 else 444 SR = UnparsedDefaultArgLocs[Param]; 445 Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc) 446 << SR; 447 } else if (Param->getDefaultArg()) { 448 Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc) 449 << Param->getDefaultArg()->getSourceRange(); 450 Param->setDefaultArg(nullptr); 451 } 452 } 453 } else if (chunk.Kind != DeclaratorChunk::Paren) { 454 MightBeFunction = false; 455 } 456 } 457 } 458 459 static bool functionDeclHasDefaultArgument(const FunctionDecl *FD) { 460 return llvm::any_of(FD->parameters(), [](ParmVarDecl *P) { 461 return P->hasDefaultArg() && !P->hasInheritedDefaultArg(); 462 }); 463 } 464 465 /// MergeCXXFunctionDecl - Merge two declarations of the same C++ 466 /// function, once we already know that they have the same 467 /// type. Subroutine of MergeFunctionDecl. Returns true if there was an 468 /// error, false otherwise. 469 bool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, 470 Scope *S) { 471 bool Invalid = false; 472 473 // The declaration context corresponding to the scope is the semantic 474 // parent, unless this is a local function declaration, in which case 475 // it is that surrounding function. 476 DeclContext *ScopeDC = New->isLocalExternDecl() 477 ? New->getLexicalDeclContext() 478 : New->getDeclContext(); 479 480 // Find the previous declaration for the purpose of default arguments. 481 FunctionDecl *PrevForDefaultArgs = Old; 482 for (/**/; PrevForDefaultArgs; 483 // Don't bother looking back past the latest decl if this is a local 484 // extern declaration; nothing else could work. 485 PrevForDefaultArgs = New->isLocalExternDecl() 486 ? nullptr 487 : PrevForDefaultArgs->getPreviousDecl()) { 488 // Ignore hidden declarations. 489 if (!LookupResult::isVisible(*this, PrevForDefaultArgs)) 490 continue; 491 492 if (S && !isDeclInScope(PrevForDefaultArgs, ScopeDC, S) && 493 !New->isCXXClassMember()) { 494 // Ignore default arguments of old decl if they are not in 495 // the same scope and this is not an out-of-line definition of 496 // a member function. 497 continue; 498 } 499 500 if (PrevForDefaultArgs->isLocalExternDecl() != New->isLocalExternDecl()) { 501 // If only one of these is a local function declaration, then they are 502 // declared in different scopes, even though isDeclInScope may think 503 // they're in the same scope. (If both are local, the scope check is 504 // sufficient, and if neither is local, then they are in the same scope.) 505 continue; 506 } 507 508 // We found the right previous declaration. 509 break; 510 } 511 512 // C++ [dcl.fct.default]p4: 513 // For non-template functions, default arguments can be added in 514 // later declarations of a function in the same 515 // scope. Declarations in different scopes have completely 516 // distinct sets of default arguments. That is, declarations in 517 // inner scopes do not acquire default arguments from 518 // declarations in outer scopes, and vice versa. In a given 519 // function declaration, all parameters subsequent to a 520 // parameter with a default argument shall have default 521 // arguments supplied in this or previous declarations. A 522 // default argument shall not be redefined by a later 523 // declaration (not even to the same value). 524 // 525 // C++ [dcl.fct.default]p6: 526 // Except for member functions of class templates, the default arguments 527 // in a member function definition that appears outside of the class 528 // definition are added to the set of default arguments provided by the 529 // member function declaration in the class definition. 530 for (unsigned p = 0, NumParams = PrevForDefaultArgs 531 ? PrevForDefaultArgs->getNumParams() 532 : 0; 533 p < NumParams; ++p) { 534 ParmVarDecl *OldParam = PrevForDefaultArgs->getParamDecl(p); 535 ParmVarDecl *NewParam = New->getParamDecl(p); 536 537 bool OldParamHasDfl = OldParam ? OldParam->hasDefaultArg() : false; 538 bool NewParamHasDfl = NewParam->hasDefaultArg(); 539 540 if (OldParamHasDfl && NewParamHasDfl) { 541 unsigned DiagDefaultParamID = 542 diag::err_param_default_argument_redefinition; 543 544 // MSVC accepts that default parameters be redefined for member functions 545 // of template class. The new default parameter's value is ignored. 546 Invalid = true; 547 if (getLangOpts().MicrosoftExt) { 548 CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(New); 549 if (MD && MD->getParent()->getDescribedClassTemplate()) { 550 // Merge the old default argument into the new parameter. 551 NewParam->setHasInheritedDefaultArg(); 552 if (OldParam->hasUninstantiatedDefaultArg()) 553 NewParam->setUninstantiatedDefaultArg( 554 OldParam->getUninstantiatedDefaultArg()); 555 else 556 NewParam->setDefaultArg(OldParam->getInit()); 557 DiagDefaultParamID = diag::ext_param_default_argument_redefinition; 558 Invalid = false; 559 } 560 } 561 562 // FIXME: If we knew where the '=' was, we could easily provide a fix-it 563 // hint here. Alternatively, we could walk the type-source information 564 // for NewParam to find the last source location in the type... but it 565 // isn't worth the effort right now. This is the kind of test case that 566 // is hard to get right: 567 // int f(int); 568 // void g(int (*fp)(int) = f); 569 // void g(int (*fp)(int) = &f); 570 Diag(NewParam->getLocation(), DiagDefaultParamID) 571 << NewParam->getDefaultArgRange(); 572 573 // Look for the function declaration where the default argument was 574 // actually written, which may be a declaration prior to Old. 575 for (auto Older = PrevForDefaultArgs; 576 OldParam->hasInheritedDefaultArg(); /**/) { 577 Older = Older->getPreviousDecl(); 578 OldParam = Older->getParamDecl(p); 579 } 580 581 Diag(OldParam->getLocation(), diag::note_previous_definition) 582 << OldParam->getDefaultArgRange(); 583 } else if (OldParamHasDfl) { 584 // Merge the old default argument into the new parameter unless the new 585 // function is a friend declaration in a template class. In the latter 586 // case the default arguments will be inherited when the friend 587 // declaration will be instantiated. 588 if (New->getFriendObjectKind() == Decl::FOK_None || 589 !New->getLexicalDeclContext()->isDependentContext()) { 590 // It's important to use getInit() here; getDefaultArg() 591 // strips off any top-level ExprWithCleanups. 592 NewParam->setHasInheritedDefaultArg(); 593 if (OldParam->hasUnparsedDefaultArg()) 594 NewParam->setUnparsedDefaultArg(); 595 else if (OldParam->hasUninstantiatedDefaultArg()) 596 NewParam->setUninstantiatedDefaultArg( 597 OldParam->getUninstantiatedDefaultArg()); 598 else 599 NewParam->setDefaultArg(OldParam->getInit()); 600 } 601 } else if (NewParamHasDfl) { 602 if (New->getDescribedFunctionTemplate()) { 603 // Paragraph 4, quoted above, only applies to non-template functions. 604 Diag(NewParam->getLocation(), 605 diag::err_param_default_argument_template_redecl) 606 << NewParam->getDefaultArgRange(); 607 Diag(PrevForDefaultArgs->getLocation(), 608 diag::note_template_prev_declaration) 609 << false; 610 } else if (New->getTemplateSpecializationKind() 611 != TSK_ImplicitInstantiation && 612 New->getTemplateSpecializationKind() != TSK_Undeclared) { 613 // C++ [temp.expr.spec]p21: 614 // Default function arguments shall not be specified in a declaration 615 // or a definition for one of the following explicit specializations: 616 // - the explicit specialization of a function template; 617 // - the explicit specialization of a member function template; 618 // - the explicit specialization of a member function of a class 619 // template where the class template specialization to which the 620 // member function specialization belongs is implicitly 621 // instantiated. 622 Diag(NewParam->getLocation(), diag::err_template_spec_default_arg) 623 << (New->getTemplateSpecializationKind() ==TSK_ExplicitSpecialization) 624 << New->getDeclName() 625 << NewParam->getDefaultArgRange(); 626 } else if (New->getDeclContext()->isDependentContext()) { 627 // C++ [dcl.fct.default]p6 (DR217): 628 // Default arguments for a member function of a class template shall 629 // be specified on the initial declaration of the member function 630 // within the class template. 631 // 632 // Reading the tea leaves a bit in DR217 and its reference to DR205 633 // leads me to the conclusion that one cannot add default function 634 // arguments for an out-of-line definition of a member function of a 635 // dependent type. 636 int WhichKind = 2; 637 if (CXXRecordDecl *Record 638 = dyn_cast<CXXRecordDecl>(New->getDeclContext())) { 639 if (Record->getDescribedClassTemplate()) 640 WhichKind = 0; 641 else if (isa<ClassTemplatePartialSpecializationDecl>(Record)) 642 WhichKind = 1; 643 else 644 WhichKind = 2; 645 } 646 647 Diag(NewParam->getLocation(), 648 diag::err_param_default_argument_member_template_redecl) 649 << WhichKind 650 << NewParam->getDefaultArgRange(); 651 } 652 } 653 } 654 655 // DR1344: If a default argument is added outside a class definition and that 656 // default argument makes the function a special member function, the program 657 // is ill-formed. This can only happen for constructors. 658 if (isa<CXXConstructorDecl>(New) && 659 New->getMinRequiredArguments() < Old->getMinRequiredArguments()) { 660 CXXSpecialMember NewSM = getSpecialMember(cast<CXXMethodDecl>(New)), 661 OldSM = getSpecialMember(cast<CXXMethodDecl>(Old)); 662 if (NewSM != OldSM) { 663 ParmVarDecl *NewParam = New->getParamDecl(New->getMinRequiredArguments()); 664 assert(NewParam->hasDefaultArg()); 665 Diag(NewParam->getLocation(), diag::err_default_arg_makes_ctor_special) 666 << NewParam->getDefaultArgRange() << NewSM; 667 Diag(Old->getLocation(), diag::note_previous_declaration); 668 } 669 } 670 671 const FunctionDecl *Def; 672 // C++11 [dcl.constexpr]p1: If any declaration of a function or function 673 // template has a constexpr specifier then all its declarations shall 674 // contain the constexpr specifier. 675 if (New->getConstexprKind() != Old->getConstexprKind()) { 676 Diag(New->getLocation(), diag::err_constexpr_redecl_mismatch) 677 << New << static_cast<int>(New->getConstexprKind()) 678 << static_cast<int>(Old->getConstexprKind()); 679 Diag(Old->getLocation(), diag::note_previous_declaration); 680 Invalid = true; 681 } else if (!Old->getMostRecentDecl()->isInlined() && New->isInlined() && 682 Old->isDefined(Def) && 683 // If a friend function is inlined but does not have 'inline' 684 // specifier, it is a definition. Do not report attribute conflict 685 // in this case, redefinition will be diagnosed later. 686 (New->isInlineSpecified() || 687 New->getFriendObjectKind() == Decl::FOK_None)) { 688 // C++11 [dcl.fcn.spec]p4: 689 // If the definition of a function appears in a translation unit before its 690 // first declaration as inline, the program is ill-formed. 691 Diag(New->getLocation(), diag::err_inline_decl_follows_def) << New; 692 Diag(Def->getLocation(), diag::note_previous_definition); 693 Invalid = true; 694 } 695 696 // C++17 [temp.deduct.guide]p3: 697 // Two deduction guide declarations in the same translation unit 698 // for the same class template shall not have equivalent 699 // parameter-declaration-clauses. 700 if (isa<CXXDeductionGuideDecl>(New) && 701 !New->isFunctionTemplateSpecialization() && isVisible(Old)) { 702 Diag(New->getLocation(), diag::err_deduction_guide_redeclared); 703 Diag(Old->getLocation(), diag::note_previous_declaration); 704 } 705 706 // C++11 [dcl.fct.default]p4: If a friend declaration specifies a default 707 // argument expression, that declaration shall be a definition and shall be 708 // the only declaration of the function or function template in the 709 // translation unit. 710 if (Old->getFriendObjectKind() == Decl::FOK_Undeclared && 711 functionDeclHasDefaultArgument(Old)) { 712 Diag(New->getLocation(), diag::err_friend_decl_with_def_arg_redeclared); 713 Diag(Old->getLocation(), diag::note_previous_declaration); 714 Invalid = true; 715 } 716 717 // C++11 [temp.friend]p4 (DR329): 718 // When a function is defined in a friend function declaration in a class 719 // template, the function is instantiated when the function is odr-used. 720 // The same restrictions on multiple declarations and definitions that 721 // apply to non-template function declarations and definitions also apply 722 // to these implicit definitions. 723 const FunctionDecl *OldDefinition = nullptr; 724 if (New->isThisDeclarationInstantiatedFromAFriendDefinition() && 725 Old->isDefined(OldDefinition, true)) 726 CheckForFunctionRedefinition(New, OldDefinition); 727 728 return Invalid; 729 } 730 731 void Sema::DiagPlaceholderVariableDefinition(SourceLocation Loc) { 732 Diag(Loc, getLangOpts().CPlusPlus26 733 ? diag::warn_cxx23_placeholder_var_definition 734 : diag::ext_placeholder_var_definition); 735 } 736 737 NamedDecl * 738 Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, 739 MultiTemplateParamsArg TemplateParamLists) { 740 assert(D.isDecompositionDeclarator()); 741 const DecompositionDeclarator &Decomp = D.getDecompositionDeclarator(); 742 743 // The syntax only allows a decomposition declarator as a simple-declaration, 744 // a for-range-declaration, or a condition in Clang, but we parse it in more 745 // cases than that. 746 if (!D.mayHaveDecompositionDeclarator()) { 747 Diag(Decomp.getLSquareLoc(), diag::err_decomp_decl_context) 748 << Decomp.getSourceRange(); 749 return nullptr; 750 } 751 752 if (!TemplateParamLists.empty()) { 753 // FIXME: There's no rule against this, but there are also no rules that 754 // would actually make it usable, so we reject it for now. 755 Diag(TemplateParamLists.front()->getTemplateLoc(), 756 diag::err_decomp_decl_template); 757 return nullptr; 758 } 759 760 Diag(Decomp.getLSquareLoc(), 761 !getLangOpts().CPlusPlus17 762 ? diag::ext_decomp_decl 763 : D.getContext() == DeclaratorContext::Condition 764 ? diag::ext_decomp_decl_cond 765 : diag::warn_cxx14_compat_decomp_decl) 766 << Decomp.getSourceRange(); 767 768 // The semantic context is always just the current context. 769 DeclContext *const DC = CurContext; 770 771 // C++17 [dcl.dcl]/8: 772 // The decl-specifier-seq shall contain only the type-specifier auto 773 // and cv-qualifiers. 774 // C++20 [dcl.dcl]/8: 775 // If decl-specifier-seq contains any decl-specifier other than static, 776 // thread_local, auto, or cv-qualifiers, the program is ill-formed. 777 // C++23 [dcl.pre]/6: 778 // Each decl-specifier in the decl-specifier-seq shall be static, 779 // thread_local, auto (9.2.9.6 [dcl.spec.auto]), or a cv-qualifier. 780 auto &DS = D.getDeclSpec(); 781 { 782 // Note: While constrained-auto needs to be checked, we do so separately so 783 // we can emit a better diagnostic. 784 SmallVector<StringRef, 8> BadSpecifiers; 785 SmallVector<SourceLocation, 8> BadSpecifierLocs; 786 SmallVector<StringRef, 8> CPlusPlus20Specifiers; 787 SmallVector<SourceLocation, 8> CPlusPlus20SpecifierLocs; 788 if (auto SCS = DS.getStorageClassSpec()) { 789 if (SCS == DeclSpec::SCS_static) { 790 CPlusPlus20Specifiers.push_back(DeclSpec::getSpecifierName(SCS)); 791 CPlusPlus20SpecifierLocs.push_back(DS.getStorageClassSpecLoc()); 792 } else { 793 BadSpecifiers.push_back(DeclSpec::getSpecifierName(SCS)); 794 BadSpecifierLocs.push_back(DS.getStorageClassSpecLoc()); 795 } 796 } 797 if (auto TSCS = DS.getThreadStorageClassSpec()) { 798 CPlusPlus20Specifiers.push_back(DeclSpec::getSpecifierName(TSCS)); 799 CPlusPlus20SpecifierLocs.push_back(DS.getThreadStorageClassSpecLoc()); 800 } 801 if (DS.hasConstexprSpecifier()) { 802 BadSpecifiers.push_back( 803 DeclSpec::getSpecifierName(DS.getConstexprSpecifier())); 804 BadSpecifierLocs.push_back(DS.getConstexprSpecLoc()); 805 } 806 if (DS.isInlineSpecified()) { 807 BadSpecifiers.push_back("inline"); 808 BadSpecifierLocs.push_back(DS.getInlineSpecLoc()); 809 } 810 811 if (!BadSpecifiers.empty()) { 812 auto &&Err = Diag(BadSpecifierLocs.front(), diag::err_decomp_decl_spec); 813 Err << (int)BadSpecifiers.size() 814 << llvm::join(BadSpecifiers.begin(), BadSpecifiers.end(), " "); 815 // Don't add FixItHints to remove the specifiers; we do still respect 816 // them when building the underlying variable. 817 for (auto Loc : BadSpecifierLocs) 818 Err << SourceRange(Loc, Loc); 819 } else if (!CPlusPlus20Specifiers.empty()) { 820 auto &&Warn = Diag(CPlusPlus20SpecifierLocs.front(), 821 getLangOpts().CPlusPlus20 822 ? diag::warn_cxx17_compat_decomp_decl_spec 823 : diag::ext_decomp_decl_spec); 824 Warn << (int)CPlusPlus20Specifiers.size() 825 << llvm::join(CPlusPlus20Specifiers.begin(), 826 CPlusPlus20Specifiers.end(), " "); 827 for (auto Loc : CPlusPlus20SpecifierLocs) 828 Warn << SourceRange(Loc, Loc); 829 } 830 // We can't recover from it being declared as a typedef. 831 if (DS.getStorageClassSpec() == DeclSpec::SCS_typedef) 832 return nullptr; 833 } 834 835 // C++2a [dcl.struct.bind]p1: 836 // A cv that includes volatile is deprecated 837 if ((DS.getTypeQualifiers() & DeclSpec::TQ_volatile) && 838 getLangOpts().CPlusPlus20) 839 Diag(DS.getVolatileSpecLoc(), 840 diag::warn_deprecated_volatile_structured_binding); 841 842 TypeSourceInfo *TInfo = GetTypeForDeclarator(D); 843 QualType R = TInfo->getType(); 844 845 if (DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo, 846 UPPC_DeclarationType)) 847 D.setInvalidType(); 848 849 // The syntax only allows a single ref-qualifier prior to the decomposition 850 // declarator. No other declarator chunks are permitted. Also check the type 851 // specifier here. 852 if (DS.getTypeSpecType() != DeclSpec::TST_auto || 853 D.hasGroupingParens() || D.getNumTypeObjects() > 1 || 854 (D.getNumTypeObjects() == 1 && 855 D.getTypeObject(0).Kind != DeclaratorChunk::Reference)) { 856 Diag(Decomp.getLSquareLoc(), 857 (D.hasGroupingParens() || 858 (D.getNumTypeObjects() && 859 D.getTypeObject(0).Kind == DeclaratorChunk::Paren)) 860 ? diag::err_decomp_decl_parens 861 : diag::err_decomp_decl_type) 862 << R; 863 864 // In most cases, there's no actual problem with an explicitly-specified 865 // type, but a function type won't work here, and ActOnVariableDeclarator 866 // shouldn't be called for such a type. 867 if (R->isFunctionType()) 868 D.setInvalidType(); 869 } 870 871 // Constrained auto is prohibited by [decl.pre]p6, so check that here. 872 if (DS.isConstrainedAuto()) { 873 TemplateIdAnnotation *TemplRep = DS.getRepAsTemplateId(); 874 assert(TemplRep->Kind == TNK_Concept_template && 875 "No other template kind should be possible for a constrained auto"); 876 877 SourceRange TemplRange{TemplRep->TemplateNameLoc, 878 TemplRep->RAngleLoc.isValid() 879 ? TemplRep->RAngleLoc 880 : TemplRep->TemplateNameLoc}; 881 Diag(TemplRep->TemplateNameLoc, diag::err_decomp_decl_constraint) 882 << TemplRange << FixItHint::CreateRemoval(TemplRange); 883 } 884 885 // Build the BindingDecls. 886 SmallVector<BindingDecl*, 8> Bindings; 887 888 // Build the BindingDecls. 889 for (auto &B : D.getDecompositionDeclarator().bindings()) { 890 // Check for name conflicts. 891 DeclarationNameInfo NameInfo(B.Name, B.NameLoc); 892 IdentifierInfo *VarName = B.Name; 893 assert(VarName && "Cannot have an unnamed binding declaration"); 894 895 LookupResult Previous(*this, NameInfo, LookupOrdinaryName, 896 ForVisibleRedeclaration); 897 LookupName(Previous, S, 898 /*CreateBuiltins*/DC->getRedeclContext()->isTranslationUnit()); 899 900 // It's not permitted to shadow a template parameter name. 901 if (Previous.isSingleResult() && 902 Previous.getFoundDecl()->isTemplateParameter()) { 903 DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), 904 Previous.getFoundDecl()); 905 Previous.clear(); 906 } 907 908 auto *BD = BindingDecl::Create(Context, DC, B.NameLoc, VarName); 909 910 // Find the shadowed declaration before filtering for scope. 911 NamedDecl *ShadowedDecl = D.getCXXScopeSpec().isEmpty() 912 ? getShadowedDeclaration(BD, Previous) 913 : nullptr; 914 915 bool ConsiderLinkage = DC->isFunctionOrMethod() && 916 DS.getStorageClassSpec() == DeclSpec::SCS_extern; 917 FilterLookupForScope(Previous, DC, S, ConsiderLinkage, 918 /*AllowInlineNamespace*/false); 919 920 bool IsPlaceholder = DS.getStorageClassSpec() != DeclSpec::SCS_static && 921 DC->isFunctionOrMethod() && VarName->isPlaceholder(); 922 if (!Previous.empty()) { 923 if (IsPlaceholder) { 924 bool sameDC = (Previous.end() - 1) 925 ->getDeclContext() 926 ->getRedeclContext() 927 ->Equals(DC->getRedeclContext()); 928 if (sameDC && 929 isDeclInScope(*(Previous.end() - 1), CurContext, S, false)) { 930 Previous.clear(); 931 DiagPlaceholderVariableDefinition(B.NameLoc); 932 } 933 } else { 934 auto *Old = Previous.getRepresentativeDecl(); 935 Diag(B.NameLoc, diag::err_redefinition) << B.Name; 936 Diag(Old->getLocation(), diag::note_previous_definition); 937 } 938 } else if (ShadowedDecl && !D.isRedeclaration()) { 939 CheckShadow(BD, ShadowedDecl, Previous); 940 } 941 PushOnScopeChains(BD, S, true); 942 Bindings.push_back(BD); 943 ParsingInitForAutoVars.insert(BD); 944 } 945 946 // There are no prior lookup results for the variable itself, because it 947 // is unnamed. 948 DeclarationNameInfo NameInfo((IdentifierInfo *)nullptr, 949 Decomp.getLSquareLoc()); 950 LookupResult Previous(*this, NameInfo, LookupOrdinaryName, 951 ForVisibleRedeclaration); 952 953 // Build the variable that holds the non-decomposed object. 954 bool AddToScope = true; 955 NamedDecl *New = 956 ActOnVariableDeclarator(S, D, DC, TInfo, Previous, 957 MultiTemplateParamsArg(), AddToScope, Bindings); 958 if (AddToScope) { 959 S->AddDecl(New); 960 CurContext->addHiddenDecl(New); 961 } 962 963 if (isInOpenMPDeclareTargetContext()) 964 checkDeclIsAllowedInOpenMPTarget(nullptr, New); 965 966 return New; 967 } 968 969 static bool checkSimpleDecomposition( 970 Sema &S, ArrayRef<BindingDecl *> Bindings, ValueDecl *Src, 971 QualType DecompType, const llvm::APSInt &NumElems, QualType ElemType, 972 llvm::function_ref<ExprResult(SourceLocation, Expr *, unsigned)> GetInit) { 973 if ((int64_t)Bindings.size() != NumElems) { 974 S.Diag(Src->getLocation(), diag::err_decomp_decl_wrong_number_bindings) 975 << DecompType << (unsigned)Bindings.size() 976 << (unsigned)NumElems.getLimitedValue(UINT_MAX) 977 << toString(NumElems, 10) << (NumElems < Bindings.size()); 978 return true; 979 } 980 981 unsigned I = 0; 982 for (auto *B : Bindings) { 983 SourceLocation Loc = B->getLocation(); 984 ExprResult E = S.BuildDeclRefExpr(Src, DecompType, VK_LValue, Loc); 985 if (E.isInvalid()) 986 return true; 987 E = GetInit(Loc, E.get(), I++); 988 if (E.isInvalid()) 989 return true; 990 B->setBinding(ElemType, E.get()); 991 } 992 993 return false; 994 } 995 996 static bool checkArrayLikeDecomposition(Sema &S, 997 ArrayRef<BindingDecl *> Bindings, 998 ValueDecl *Src, QualType DecompType, 999 const llvm::APSInt &NumElems, 1000 QualType ElemType) { 1001 return checkSimpleDecomposition( 1002 S, Bindings, Src, DecompType, NumElems, ElemType, 1003 [&](SourceLocation Loc, Expr *Base, unsigned I) -> ExprResult { 1004 ExprResult E = S.ActOnIntegerConstant(Loc, I); 1005 if (E.isInvalid()) 1006 return ExprError(); 1007 return S.CreateBuiltinArraySubscriptExpr(Base, Loc, E.get(), Loc); 1008 }); 1009 } 1010 1011 static bool checkArrayDecomposition(Sema &S, ArrayRef<BindingDecl*> Bindings, 1012 ValueDecl *Src, QualType DecompType, 1013 const ConstantArrayType *CAT) { 1014 return checkArrayLikeDecomposition(S, Bindings, Src, DecompType, 1015 llvm::APSInt(CAT->getSize()), 1016 CAT->getElementType()); 1017 } 1018 1019 static bool checkVectorDecomposition(Sema &S, ArrayRef<BindingDecl*> Bindings, 1020 ValueDecl *Src, QualType DecompType, 1021 const VectorType *VT) { 1022 return checkArrayLikeDecomposition( 1023 S, Bindings, Src, DecompType, llvm::APSInt::get(VT->getNumElements()), 1024 S.Context.getQualifiedType(VT->getElementType(), 1025 DecompType.getQualifiers())); 1026 } 1027 1028 static bool checkComplexDecomposition(Sema &S, 1029 ArrayRef<BindingDecl *> Bindings, 1030 ValueDecl *Src, QualType DecompType, 1031 const ComplexType *CT) { 1032 return checkSimpleDecomposition( 1033 S, Bindings, Src, DecompType, llvm::APSInt::get(2), 1034 S.Context.getQualifiedType(CT->getElementType(), 1035 DecompType.getQualifiers()), 1036 [&](SourceLocation Loc, Expr *Base, unsigned I) -> ExprResult { 1037 return S.CreateBuiltinUnaryOp(Loc, I ? UO_Imag : UO_Real, Base); 1038 }); 1039 } 1040 1041 static std::string printTemplateArgs(const PrintingPolicy &PrintingPolicy, 1042 TemplateArgumentListInfo &Args, 1043 const TemplateParameterList *Params) { 1044 SmallString<128> SS; 1045 llvm::raw_svector_ostream OS(SS); 1046 bool First = true; 1047 unsigned I = 0; 1048 for (auto &Arg : Args.arguments()) { 1049 if (!First) 1050 OS << ", "; 1051 Arg.getArgument().print(PrintingPolicy, OS, 1052 TemplateParameterList::shouldIncludeTypeForArgument( 1053 PrintingPolicy, Params, I)); 1054 First = false; 1055 I++; 1056 } 1057 return std::string(OS.str()); 1058 } 1059 1060 static bool lookupStdTypeTraitMember(Sema &S, LookupResult &TraitMemberLookup, 1061 SourceLocation Loc, StringRef Trait, 1062 TemplateArgumentListInfo &Args, 1063 unsigned DiagID) { 1064 auto DiagnoseMissing = [&] { 1065 if (DiagID) 1066 S.Diag(Loc, DiagID) << printTemplateArgs(S.Context.getPrintingPolicy(), 1067 Args, /*Params*/ nullptr); 1068 return true; 1069 }; 1070 1071 // FIXME: Factor out duplication with lookupPromiseType in SemaCoroutine. 1072 NamespaceDecl *Std = S.getStdNamespace(); 1073 if (!Std) 1074 return DiagnoseMissing(); 1075 1076 // Look up the trait itself, within namespace std. We can diagnose various 1077 // problems with this lookup even if we've been asked to not diagnose a 1078 // missing specialization, because this can only fail if the user has been 1079 // declaring their own names in namespace std or we don't support the 1080 // standard library implementation in use. 1081 LookupResult Result(S, &S.PP.getIdentifierTable().get(Trait), 1082 Loc, Sema::LookupOrdinaryName); 1083 if (!S.LookupQualifiedName(Result, Std)) 1084 return DiagnoseMissing(); 1085 if (Result.isAmbiguous()) 1086 return true; 1087 1088 ClassTemplateDecl *TraitTD = Result.getAsSingle<ClassTemplateDecl>(); 1089 if (!TraitTD) { 1090 Result.suppressDiagnostics(); 1091 NamedDecl *Found = *Result.begin(); 1092 S.Diag(Loc, diag::err_std_type_trait_not_class_template) << Trait; 1093 S.Diag(Found->getLocation(), diag::note_declared_at); 1094 return true; 1095 } 1096 1097 // Build the template-id. 1098 QualType TraitTy = S.CheckTemplateIdType(TemplateName(TraitTD), Loc, Args); 1099 if (TraitTy.isNull()) 1100 return true; 1101 if (!S.isCompleteType(Loc, TraitTy)) { 1102 if (DiagID) 1103 S.RequireCompleteType( 1104 Loc, TraitTy, DiagID, 1105 printTemplateArgs(S.Context.getPrintingPolicy(), Args, 1106 TraitTD->getTemplateParameters())); 1107 return true; 1108 } 1109 1110 CXXRecordDecl *RD = TraitTy->getAsCXXRecordDecl(); 1111 assert(RD && "specialization of class template is not a class?"); 1112 1113 // Look up the member of the trait type. 1114 S.LookupQualifiedName(TraitMemberLookup, RD); 1115 return TraitMemberLookup.isAmbiguous(); 1116 } 1117 1118 static TemplateArgumentLoc 1119 getTrivialIntegralTemplateArgument(Sema &S, SourceLocation Loc, QualType T, 1120 uint64_t I) { 1121 TemplateArgument Arg(S.Context, S.Context.MakeIntValue(I, T), T); 1122 return S.getTrivialTemplateArgumentLoc(Arg, T, Loc); 1123 } 1124 1125 static TemplateArgumentLoc 1126 getTrivialTypeTemplateArgument(Sema &S, SourceLocation Loc, QualType T) { 1127 return S.getTrivialTemplateArgumentLoc(TemplateArgument(T), QualType(), Loc); 1128 } 1129 1130 namespace { enum class IsTupleLike { TupleLike, NotTupleLike, Error }; } 1131 1132 static IsTupleLike isTupleLike(Sema &S, SourceLocation Loc, QualType T, 1133 llvm::APSInt &Size) { 1134 EnterExpressionEvaluationContext ContextRAII( 1135 S, Sema::ExpressionEvaluationContext::ConstantEvaluated); 1136 1137 DeclarationName Value = S.PP.getIdentifierInfo("value"); 1138 LookupResult R(S, Value, Loc, Sema::LookupOrdinaryName); 1139 1140 // Form template argument list for tuple_size<T>. 1141 TemplateArgumentListInfo Args(Loc, Loc); 1142 Args.addArgument(getTrivialTypeTemplateArgument(S, Loc, T)); 1143 1144 // If there's no tuple_size specialization or the lookup of 'value' is empty, 1145 // it's not tuple-like. 1146 if (lookupStdTypeTraitMember(S, R, Loc, "tuple_size", Args, /*DiagID*/ 0) || 1147 R.empty()) 1148 return IsTupleLike::NotTupleLike; 1149 1150 // If we get this far, we've committed to the tuple interpretation, but 1151 // we can still fail if there actually isn't a usable ::value. 1152 1153 struct ICEDiagnoser : Sema::VerifyICEDiagnoser { 1154 LookupResult &R; 1155 TemplateArgumentListInfo &Args; 1156 ICEDiagnoser(LookupResult &R, TemplateArgumentListInfo &Args) 1157 : R(R), Args(Args) {} 1158 Sema::SemaDiagnosticBuilder diagnoseNotICE(Sema &S, 1159 SourceLocation Loc) override { 1160 return S.Diag(Loc, diag::err_decomp_decl_std_tuple_size_not_constant) 1161 << printTemplateArgs(S.Context.getPrintingPolicy(), Args, 1162 /*Params*/ nullptr); 1163 } 1164 } Diagnoser(R, Args); 1165 1166 ExprResult E = 1167 S.BuildDeclarationNameExpr(CXXScopeSpec(), R, /*NeedsADL*/false); 1168 if (E.isInvalid()) 1169 return IsTupleLike::Error; 1170 1171 E = S.VerifyIntegerConstantExpression(E.get(), &Size, Diagnoser); 1172 if (E.isInvalid()) 1173 return IsTupleLike::Error; 1174 1175 return IsTupleLike::TupleLike; 1176 } 1177 1178 /// \return std::tuple_element<I, T>::type. 1179 static QualType getTupleLikeElementType(Sema &S, SourceLocation Loc, 1180 unsigned I, QualType T) { 1181 // Form template argument list for tuple_element<I, T>. 1182 TemplateArgumentListInfo Args(Loc, Loc); 1183 Args.addArgument( 1184 getTrivialIntegralTemplateArgument(S, Loc, S.Context.getSizeType(), I)); 1185 Args.addArgument(getTrivialTypeTemplateArgument(S, Loc, T)); 1186 1187 DeclarationName TypeDN = S.PP.getIdentifierInfo("type"); 1188 LookupResult R(S, TypeDN, Loc, Sema::LookupOrdinaryName); 1189 if (lookupStdTypeTraitMember( 1190 S, R, Loc, "tuple_element", Args, 1191 diag::err_decomp_decl_std_tuple_element_not_specialized)) 1192 return QualType(); 1193 1194 auto *TD = R.getAsSingle<TypeDecl>(); 1195 if (!TD) { 1196 R.suppressDiagnostics(); 1197 S.Diag(Loc, diag::err_decomp_decl_std_tuple_element_not_specialized) 1198 << printTemplateArgs(S.Context.getPrintingPolicy(), Args, 1199 /*Params*/ nullptr); 1200 if (!R.empty()) 1201 S.Diag(R.getRepresentativeDecl()->getLocation(), diag::note_declared_at); 1202 return QualType(); 1203 } 1204 1205 return S.Context.getTypeDeclType(TD); 1206 } 1207 1208 namespace { 1209 struct InitializingBinding { 1210 Sema &S; 1211 InitializingBinding(Sema &S, BindingDecl *BD) : S(S) { 1212 Sema::CodeSynthesisContext Ctx; 1213 Ctx.Kind = Sema::CodeSynthesisContext::InitializingStructuredBinding; 1214 Ctx.PointOfInstantiation = BD->getLocation(); 1215 Ctx.Entity = BD; 1216 S.pushCodeSynthesisContext(Ctx); 1217 } 1218 ~InitializingBinding() { 1219 S.popCodeSynthesisContext(); 1220 } 1221 }; 1222 } 1223 1224 static bool checkTupleLikeDecomposition(Sema &S, 1225 ArrayRef<BindingDecl *> Bindings, 1226 VarDecl *Src, QualType DecompType, 1227 const llvm::APSInt &TupleSize) { 1228 if ((int64_t)Bindings.size() != TupleSize) { 1229 S.Diag(Src->getLocation(), diag::err_decomp_decl_wrong_number_bindings) 1230 << DecompType << (unsigned)Bindings.size() 1231 << (unsigned)TupleSize.getLimitedValue(UINT_MAX) 1232 << toString(TupleSize, 10) << (TupleSize < Bindings.size()); 1233 return true; 1234 } 1235 1236 if (Bindings.empty()) 1237 return false; 1238 1239 DeclarationName GetDN = S.PP.getIdentifierInfo("get"); 1240 1241 // [dcl.decomp]p3: 1242 // The unqualified-id get is looked up in the scope of E by class member 1243 // access lookup ... 1244 LookupResult MemberGet(S, GetDN, Src->getLocation(), Sema::LookupMemberName); 1245 bool UseMemberGet = false; 1246 if (S.isCompleteType(Src->getLocation(), DecompType)) { 1247 if (auto *RD = DecompType->getAsCXXRecordDecl()) 1248 S.LookupQualifiedName(MemberGet, RD); 1249 if (MemberGet.isAmbiguous()) 1250 return true; 1251 // ... and if that finds at least one declaration that is a function 1252 // template whose first template parameter is a non-type parameter ... 1253 for (NamedDecl *D : MemberGet) { 1254 if (FunctionTemplateDecl *FTD = 1255 dyn_cast<FunctionTemplateDecl>(D->getUnderlyingDecl())) { 1256 TemplateParameterList *TPL = FTD->getTemplateParameters(); 1257 if (TPL->size() != 0 && 1258 isa<NonTypeTemplateParmDecl>(TPL->getParam(0))) { 1259 // ... the initializer is e.get<i>(). 1260 UseMemberGet = true; 1261 break; 1262 } 1263 } 1264 } 1265 } 1266 1267 unsigned I = 0; 1268 for (auto *B : Bindings) { 1269 InitializingBinding InitContext(S, B); 1270 SourceLocation Loc = B->getLocation(); 1271 1272 ExprResult E = S.BuildDeclRefExpr(Src, DecompType, VK_LValue, Loc); 1273 if (E.isInvalid()) 1274 return true; 1275 1276 // e is an lvalue if the type of the entity is an lvalue reference and 1277 // an xvalue otherwise 1278 if (!Src->getType()->isLValueReferenceType()) 1279 E = ImplicitCastExpr::Create(S.Context, E.get()->getType(), CK_NoOp, 1280 E.get(), nullptr, VK_XValue, 1281 FPOptionsOverride()); 1282 1283 TemplateArgumentListInfo Args(Loc, Loc); 1284 Args.addArgument( 1285 getTrivialIntegralTemplateArgument(S, Loc, S.Context.getSizeType(), I)); 1286 1287 if (UseMemberGet) { 1288 // if [lookup of member get] finds at least one declaration, the 1289 // initializer is e.get<i-1>(). 1290 E = S.BuildMemberReferenceExpr(E.get(), DecompType, Loc, false, 1291 CXXScopeSpec(), SourceLocation(), nullptr, 1292 MemberGet, &Args, nullptr); 1293 if (E.isInvalid()) 1294 return true; 1295 1296 E = S.BuildCallExpr(nullptr, E.get(), Loc, std::nullopt, Loc); 1297 } else { 1298 // Otherwise, the initializer is get<i-1>(e), where get is looked up 1299 // in the associated namespaces. 1300 Expr *Get = UnresolvedLookupExpr::Create( 1301 S.Context, nullptr, NestedNameSpecifierLoc(), SourceLocation(), 1302 DeclarationNameInfo(GetDN, Loc), /*RequiresADL*/ true, &Args, 1303 UnresolvedSetIterator(), UnresolvedSetIterator(), 1304 /*KnownDependent=*/false); 1305 1306 Expr *Arg = E.get(); 1307 E = S.BuildCallExpr(nullptr, Get, Loc, Arg, Loc); 1308 } 1309 if (E.isInvalid()) 1310 return true; 1311 Expr *Init = E.get(); 1312 1313 // Given the type T designated by std::tuple_element<i - 1, E>::type, 1314 QualType T = getTupleLikeElementType(S, Loc, I, DecompType); 1315 if (T.isNull()) 1316 return true; 1317 1318 // each vi is a variable of type "reference to T" initialized with the 1319 // initializer, where the reference is an lvalue reference if the 1320 // initializer is an lvalue and an rvalue reference otherwise 1321 QualType RefType = 1322 S.BuildReferenceType(T, E.get()->isLValue(), Loc, B->getDeclName()); 1323 if (RefType.isNull()) 1324 return true; 1325 auto *RefVD = VarDecl::Create( 1326 S.Context, Src->getDeclContext(), Loc, Loc, 1327 B->getDeclName().getAsIdentifierInfo(), RefType, 1328 S.Context.getTrivialTypeSourceInfo(T, Loc), Src->getStorageClass()); 1329 RefVD->setLexicalDeclContext(Src->getLexicalDeclContext()); 1330 RefVD->setTSCSpec(Src->getTSCSpec()); 1331 RefVD->setImplicit(); 1332 if (Src->isInlineSpecified()) 1333 RefVD->setInlineSpecified(); 1334 RefVD->getLexicalDeclContext()->addHiddenDecl(RefVD); 1335 1336 InitializedEntity Entity = InitializedEntity::InitializeBinding(RefVD); 1337 InitializationKind Kind = InitializationKind::CreateCopy(Loc, Loc); 1338 InitializationSequence Seq(S, Entity, Kind, Init); 1339 E = Seq.Perform(S, Entity, Kind, Init); 1340 if (E.isInvalid()) 1341 return true; 1342 E = S.ActOnFinishFullExpr(E.get(), Loc, /*DiscardedValue*/ false); 1343 if (E.isInvalid()) 1344 return true; 1345 RefVD->setInit(E.get()); 1346 S.CheckCompleteVariableDeclaration(RefVD); 1347 1348 E = S.BuildDeclarationNameExpr(CXXScopeSpec(), 1349 DeclarationNameInfo(B->getDeclName(), Loc), 1350 RefVD); 1351 if (E.isInvalid()) 1352 return true; 1353 1354 B->setBinding(T, E.get()); 1355 I++; 1356 } 1357 1358 return false; 1359 } 1360 1361 /// Find the base class to decompose in a built-in decomposition of a class type. 1362 /// This base class search is, unfortunately, not quite like any other that we 1363 /// perform anywhere else in C++. 1364 static DeclAccessPair findDecomposableBaseClass(Sema &S, SourceLocation Loc, 1365 const CXXRecordDecl *RD, 1366 CXXCastPath &BasePath) { 1367 auto BaseHasFields = [](const CXXBaseSpecifier *Specifier, 1368 CXXBasePath &Path) { 1369 return Specifier->getType()->getAsCXXRecordDecl()->hasDirectFields(); 1370 }; 1371 1372 const CXXRecordDecl *ClassWithFields = nullptr; 1373 AccessSpecifier AS = AS_public; 1374 if (RD->hasDirectFields()) 1375 // [dcl.decomp]p4: 1376 // Otherwise, all of E's non-static data members shall be public direct 1377 // members of E ... 1378 ClassWithFields = RD; 1379 else { 1380 // ... or of ... 1381 CXXBasePaths Paths; 1382 Paths.setOrigin(const_cast<CXXRecordDecl*>(RD)); 1383 if (!RD->lookupInBases(BaseHasFields, Paths)) { 1384 // If no classes have fields, just decompose RD itself. (This will work 1385 // if and only if zero bindings were provided.) 1386 return DeclAccessPair::make(const_cast<CXXRecordDecl*>(RD), AS_public); 1387 } 1388 1389 CXXBasePath *BestPath = nullptr; 1390 for (auto &P : Paths) { 1391 if (!BestPath) 1392 BestPath = &P; 1393 else if (!S.Context.hasSameType(P.back().Base->getType(), 1394 BestPath->back().Base->getType())) { 1395 // ... the same ... 1396 S.Diag(Loc, diag::err_decomp_decl_multiple_bases_with_members) 1397 << false << RD << BestPath->back().Base->getType() 1398 << P.back().Base->getType(); 1399 return DeclAccessPair(); 1400 } else if (P.Access < BestPath->Access) { 1401 BestPath = &P; 1402 } 1403 } 1404 1405 // ... unambiguous ... 1406 QualType BaseType = BestPath->back().Base->getType(); 1407 if (Paths.isAmbiguous(S.Context.getCanonicalType(BaseType))) { 1408 S.Diag(Loc, diag::err_decomp_decl_ambiguous_base) 1409 << RD << BaseType << S.getAmbiguousPathsDisplayString(Paths); 1410 return DeclAccessPair(); 1411 } 1412 1413 // ... [accessible, implied by other rules] base class of E. 1414 S.CheckBaseClassAccess(Loc, BaseType, S.Context.getRecordType(RD), 1415 *BestPath, diag::err_decomp_decl_inaccessible_base); 1416 AS = BestPath->Access; 1417 1418 ClassWithFields = BaseType->getAsCXXRecordDecl(); 1419 S.BuildBasePathArray(Paths, BasePath); 1420 } 1421 1422 // The above search did not check whether the selected class itself has base 1423 // classes with fields, so check that now. 1424 CXXBasePaths Paths; 1425 if (ClassWithFields->lookupInBases(BaseHasFields, Paths)) { 1426 S.Diag(Loc, diag::err_decomp_decl_multiple_bases_with_members) 1427 << (ClassWithFields == RD) << RD << ClassWithFields 1428 << Paths.front().back().Base->getType(); 1429 return DeclAccessPair(); 1430 } 1431 1432 return DeclAccessPair::make(const_cast<CXXRecordDecl*>(ClassWithFields), AS); 1433 } 1434 1435 static bool checkMemberDecomposition(Sema &S, ArrayRef<BindingDecl*> Bindings, 1436 ValueDecl *Src, QualType DecompType, 1437 const CXXRecordDecl *OrigRD) { 1438 if (S.RequireCompleteType(Src->getLocation(), DecompType, 1439 diag::err_incomplete_type)) 1440 return true; 1441 1442 CXXCastPath BasePath; 1443 DeclAccessPair BasePair = 1444 findDecomposableBaseClass(S, Src->getLocation(), OrigRD, BasePath); 1445 const CXXRecordDecl *RD = cast_or_null<CXXRecordDecl>(BasePair.getDecl()); 1446 if (!RD) 1447 return true; 1448 QualType BaseType = S.Context.getQualifiedType(S.Context.getRecordType(RD), 1449 DecompType.getQualifiers()); 1450 1451 auto DiagnoseBadNumberOfBindings = [&]() -> bool { 1452 unsigned NumFields = llvm::count_if( 1453 RD->fields(), [](FieldDecl *FD) { return !FD->isUnnamedBitfield(); }); 1454 assert(Bindings.size() != NumFields); 1455 S.Diag(Src->getLocation(), diag::err_decomp_decl_wrong_number_bindings) 1456 << DecompType << (unsigned)Bindings.size() << NumFields << NumFields 1457 << (NumFields < Bindings.size()); 1458 return true; 1459 }; 1460 1461 // all of E's non-static data members shall be [...] well-formed 1462 // when named as e.name in the context of the structured binding, 1463 // E shall not have an anonymous union member, ... 1464 unsigned I = 0; 1465 for (auto *FD : RD->fields()) { 1466 if (FD->isUnnamedBitfield()) 1467 continue; 1468 1469 // All the non-static data members are required to be nameable, so they 1470 // must all have names. 1471 if (!FD->getDeclName()) { 1472 if (RD->isLambda()) { 1473 S.Diag(Src->getLocation(), diag::err_decomp_decl_lambda); 1474 S.Diag(RD->getLocation(), diag::note_lambda_decl); 1475 return true; 1476 } 1477 1478 if (FD->isAnonymousStructOrUnion()) { 1479 S.Diag(Src->getLocation(), diag::err_decomp_decl_anon_union_member) 1480 << DecompType << FD->getType()->isUnionType(); 1481 S.Diag(FD->getLocation(), diag::note_declared_at); 1482 return true; 1483 } 1484 1485 // FIXME: Are there any other ways we could have an anonymous member? 1486 } 1487 1488 // We have a real field to bind. 1489 if (I >= Bindings.size()) 1490 return DiagnoseBadNumberOfBindings(); 1491 auto *B = Bindings[I++]; 1492 SourceLocation Loc = B->getLocation(); 1493 1494 // The field must be accessible in the context of the structured binding. 1495 // We already checked that the base class is accessible. 1496 // FIXME: Add 'const' to AccessedEntity's classes so we can remove the 1497 // const_cast here. 1498 S.CheckStructuredBindingMemberAccess( 1499 Loc, const_cast<CXXRecordDecl *>(OrigRD), 1500 DeclAccessPair::make(FD, CXXRecordDecl::MergeAccess( 1501 BasePair.getAccess(), FD->getAccess()))); 1502 1503 // Initialize the binding to Src.FD. 1504 ExprResult E = S.BuildDeclRefExpr(Src, DecompType, VK_LValue, Loc); 1505 if (E.isInvalid()) 1506 return true; 1507 E = S.ImpCastExprToType(E.get(), BaseType, CK_UncheckedDerivedToBase, 1508 VK_LValue, &BasePath); 1509 if (E.isInvalid()) 1510 return true; 1511 E = S.BuildFieldReferenceExpr(E.get(), /*IsArrow*/ false, Loc, 1512 CXXScopeSpec(), FD, 1513 DeclAccessPair::make(FD, FD->getAccess()), 1514 DeclarationNameInfo(FD->getDeclName(), Loc)); 1515 if (E.isInvalid()) 1516 return true; 1517 1518 // If the type of the member is T, the referenced type is cv T, where cv is 1519 // the cv-qualification of the decomposition expression. 1520 // 1521 // FIXME: We resolve a defect here: if the field is mutable, we do not add 1522 // 'const' to the type of the field. 1523 Qualifiers Q = DecompType.getQualifiers(); 1524 if (FD->isMutable()) 1525 Q.removeConst(); 1526 B->setBinding(S.BuildQualifiedType(FD->getType(), Loc, Q), E.get()); 1527 } 1528 1529 if (I != Bindings.size()) 1530 return DiagnoseBadNumberOfBindings(); 1531 1532 return false; 1533 } 1534 1535 void Sema::CheckCompleteDecompositionDeclaration(DecompositionDecl *DD) { 1536 QualType DecompType = DD->getType(); 1537 1538 // If the type of the decomposition is dependent, then so is the type of 1539 // each binding. 1540 if (DecompType->isDependentType()) { 1541 for (auto *B : DD->bindings()) 1542 B->setType(Context.DependentTy); 1543 return; 1544 } 1545 1546 DecompType = DecompType.getNonReferenceType(); 1547 ArrayRef<BindingDecl*> Bindings = DD->bindings(); 1548 1549 // C++1z [dcl.decomp]/2: 1550 // If E is an array type [...] 1551 // As an extension, we also support decomposition of built-in complex and 1552 // vector types. 1553 if (auto *CAT = Context.getAsConstantArrayType(DecompType)) { 1554 if (checkArrayDecomposition(*this, Bindings, DD, DecompType, CAT)) 1555 DD->setInvalidDecl(); 1556 return; 1557 } 1558 if (auto *VT = DecompType->getAs<VectorType>()) { 1559 if (checkVectorDecomposition(*this, Bindings, DD, DecompType, VT)) 1560 DD->setInvalidDecl(); 1561 return; 1562 } 1563 if (auto *CT = DecompType->getAs<ComplexType>()) { 1564 if (checkComplexDecomposition(*this, Bindings, DD, DecompType, CT)) 1565 DD->setInvalidDecl(); 1566 return; 1567 } 1568 1569 // C++1z [dcl.decomp]/3: 1570 // if the expression std::tuple_size<E>::value is a well-formed integral 1571 // constant expression, [...] 1572 llvm::APSInt TupleSize(32); 1573 switch (isTupleLike(*this, DD->getLocation(), DecompType, TupleSize)) { 1574 case IsTupleLike::Error: 1575 DD->setInvalidDecl(); 1576 return; 1577 1578 case IsTupleLike::TupleLike: 1579 if (checkTupleLikeDecomposition(*this, Bindings, DD, DecompType, TupleSize)) 1580 DD->setInvalidDecl(); 1581 return; 1582 1583 case IsTupleLike::NotTupleLike: 1584 break; 1585 } 1586 1587 // C++1z [dcl.dcl]/8: 1588 // [E shall be of array or non-union class type] 1589 CXXRecordDecl *RD = DecompType->getAsCXXRecordDecl(); 1590 if (!RD || RD->isUnion()) { 1591 Diag(DD->getLocation(), diag::err_decomp_decl_unbindable_type) 1592 << DD << !RD << DecompType; 1593 DD->setInvalidDecl(); 1594 return; 1595 } 1596 1597 // C++1z [dcl.decomp]/4: 1598 // all of E's non-static data members shall be [...] direct members of 1599 // E or of the same unambiguous public base class of E, ... 1600 if (checkMemberDecomposition(*this, Bindings, DD, DecompType, RD)) 1601 DD->setInvalidDecl(); 1602 } 1603 1604 /// Merge the exception specifications of two variable declarations. 1605 /// 1606 /// This is called when there's a redeclaration of a VarDecl. The function 1607 /// checks if the redeclaration might have an exception specification and 1608 /// validates compatibility and merges the specs if necessary. 1609 void Sema::MergeVarDeclExceptionSpecs(VarDecl *New, VarDecl *Old) { 1610 // Shortcut if exceptions are disabled. 1611 if (!getLangOpts().CXXExceptions) 1612 return; 1613 1614 assert(Context.hasSameType(New->getType(), Old->getType()) && 1615 "Should only be called if types are otherwise the same."); 1616 1617 QualType NewType = New->getType(); 1618 QualType OldType = Old->getType(); 1619 1620 // We're only interested in pointers and references to functions, as well 1621 // as pointers to member functions. 1622 if (const ReferenceType *R = NewType->getAs<ReferenceType>()) { 1623 NewType = R->getPointeeType(); 1624 OldType = OldType->castAs<ReferenceType>()->getPointeeType(); 1625 } else if (const PointerType *P = NewType->getAs<PointerType>()) { 1626 NewType = P->getPointeeType(); 1627 OldType = OldType->castAs<PointerType>()->getPointeeType(); 1628 } else if (const MemberPointerType *M = NewType->getAs<MemberPointerType>()) { 1629 NewType = M->getPointeeType(); 1630 OldType = OldType->castAs<MemberPointerType>()->getPointeeType(); 1631 } 1632 1633 if (!NewType->isFunctionProtoType()) 1634 return; 1635 1636 // There's lots of special cases for functions. For function pointers, system 1637 // libraries are hopefully not as broken so that we don't need these 1638 // workarounds. 1639 if (CheckEquivalentExceptionSpec( 1640 OldType->getAs<FunctionProtoType>(), Old->getLocation(), 1641 NewType->getAs<FunctionProtoType>(), New->getLocation())) { 1642 New->setInvalidDecl(); 1643 } 1644 } 1645 1646 /// CheckCXXDefaultArguments - Verify that the default arguments for a 1647 /// function declaration are well-formed according to C++ 1648 /// [dcl.fct.default]. 1649 void Sema::CheckCXXDefaultArguments(FunctionDecl *FD) { 1650 unsigned NumParams = FD->getNumParams(); 1651 unsigned ParamIdx = 0; 1652 1653 // This checking doesn't make sense for explicit specializations; their 1654 // default arguments are determined by the declaration we're specializing, 1655 // not by FD. 1656 if (FD->getTemplateSpecializationKind() == TSK_ExplicitSpecialization) 1657 return; 1658 if (auto *FTD = FD->getDescribedFunctionTemplate()) 1659 if (FTD->isMemberSpecialization()) 1660 return; 1661 1662 // Find first parameter with a default argument 1663 for (; ParamIdx < NumParams; ++ParamIdx) { 1664 ParmVarDecl *Param = FD->getParamDecl(ParamIdx); 1665 if (Param->hasDefaultArg()) 1666 break; 1667 } 1668 1669 // C++20 [dcl.fct.default]p4: 1670 // In a given function declaration, each parameter subsequent to a parameter 1671 // with a default argument shall have a default argument supplied in this or 1672 // a previous declaration, unless the parameter was expanded from a 1673 // parameter pack, or shall be a function parameter pack. 1674 for (; ParamIdx < NumParams; ++ParamIdx) { 1675 ParmVarDecl *Param = FD->getParamDecl(ParamIdx); 1676 if (!Param->hasDefaultArg() && !Param->isParameterPack() && 1677 !(CurrentInstantiationScope && 1678 CurrentInstantiationScope->isLocalPackExpansion(Param))) { 1679 if (Param->isInvalidDecl()) 1680 /* We already complained about this parameter. */; 1681 else if (Param->getIdentifier()) 1682 Diag(Param->getLocation(), 1683 diag::err_param_default_argument_missing_name) 1684 << Param->getIdentifier(); 1685 else 1686 Diag(Param->getLocation(), 1687 diag::err_param_default_argument_missing); 1688 } 1689 } 1690 } 1691 1692 /// Check that the given type is a literal type. Issue a diagnostic if not, 1693 /// if Kind is Diagnose. 1694 /// \return \c true if a problem has been found (and optionally diagnosed). 1695 template <typename... Ts> 1696 static bool CheckLiteralType(Sema &SemaRef, Sema::CheckConstexprKind Kind, 1697 SourceLocation Loc, QualType T, unsigned DiagID, 1698 Ts &&...DiagArgs) { 1699 if (T->isDependentType()) 1700 return false; 1701 1702 switch (Kind) { 1703 case Sema::CheckConstexprKind::Diagnose: 1704 return SemaRef.RequireLiteralType(Loc, T, DiagID, 1705 std::forward<Ts>(DiagArgs)...); 1706 1707 case Sema::CheckConstexprKind::CheckValid: 1708 return !T->isLiteralType(SemaRef.Context); 1709 } 1710 1711 llvm_unreachable("unknown CheckConstexprKind"); 1712 } 1713 1714 /// Determine whether a destructor cannot be constexpr due to 1715 static bool CheckConstexprDestructorSubobjects(Sema &SemaRef, 1716 const CXXDestructorDecl *DD, 1717 Sema::CheckConstexprKind Kind) { 1718 auto Check = [&](SourceLocation Loc, QualType T, const FieldDecl *FD) { 1719 const CXXRecordDecl *RD = 1720 T->getBaseElementTypeUnsafe()->getAsCXXRecordDecl(); 1721 if (!RD || RD->hasConstexprDestructor()) 1722 return true; 1723 1724 if (Kind == Sema::CheckConstexprKind::Diagnose) { 1725 SemaRef.Diag(DD->getLocation(), diag::err_constexpr_dtor_subobject) 1726 << static_cast<int>(DD->getConstexprKind()) << !FD 1727 << (FD ? FD->getDeclName() : DeclarationName()) << T; 1728 SemaRef.Diag(Loc, diag::note_constexpr_dtor_subobject) 1729 << !FD << (FD ? FD->getDeclName() : DeclarationName()) << T; 1730 } 1731 return false; 1732 }; 1733 1734 const CXXRecordDecl *RD = DD->getParent(); 1735 for (const CXXBaseSpecifier &B : RD->bases()) 1736 if (!Check(B.getBaseTypeLoc(), B.getType(), nullptr)) 1737 return false; 1738 for (const FieldDecl *FD : RD->fields()) 1739 if (!Check(FD->getLocation(), FD->getType(), FD)) 1740 return false; 1741 return true; 1742 } 1743 1744 /// Check whether a function's parameter types are all literal types. If so, 1745 /// return true. If not, produce a suitable diagnostic and return false. 1746 static bool CheckConstexprParameterTypes(Sema &SemaRef, 1747 const FunctionDecl *FD, 1748 Sema::CheckConstexprKind Kind) { 1749 unsigned ArgIndex = 0; 1750 const auto *FT = FD->getType()->castAs<FunctionProtoType>(); 1751 for (FunctionProtoType::param_type_iterator i = FT->param_type_begin(), 1752 e = FT->param_type_end(); 1753 i != e; ++i, ++ArgIndex) { 1754 const ParmVarDecl *PD = FD->getParamDecl(ArgIndex); 1755 assert(PD && "null in a parameter list"); 1756 SourceLocation ParamLoc = PD->getLocation(); 1757 if (CheckLiteralType(SemaRef, Kind, ParamLoc, *i, 1758 diag::err_constexpr_non_literal_param, ArgIndex + 1, 1759 PD->getSourceRange(), isa<CXXConstructorDecl>(FD), 1760 FD->isConsteval())) 1761 return false; 1762 } 1763 return true; 1764 } 1765 1766 /// Check whether a function's return type is a literal type. If so, return 1767 /// true. If not, produce a suitable diagnostic and return false. 1768 static bool CheckConstexprReturnType(Sema &SemaRef, const FunctionDecl *FD, 1769 Sema::CheckConstexprKind Kind) { 1770 if (CheckLiteralType(SemaRef, Kind, FD->getLocation(), FD->getReturnType(), 1771 diag::err_constexpr_non_literal_return, 1772 FD->isConsteval())) 1773 return false; 1774 return true; 1775 } 1776 1777 /// Get diagnostic %select index for tag kind for 1778 /// record diagnostic message. 1779 /// WARNING: Indexes apply to particular diagnostics only! 1780 /// 1781 /// \returns diagnostic %select index. 1782 static unsigned getRecordDiagFromTagKind(TagTypeKind Tag) { 1783 switch (Tag) { 1784 case TagTypeKind::Struct: 1785 return 0; 1786 case TagTypeKind::Interface: 1787 return 1; 1788 case TagTypeKind::Class: 1789 return 2; 1790 default: llvm_unreachable("Invalid tag kind for record diagnostic!"); 1791 } 1792 } 1793 1794 static bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, 1795 Stmt *Body, 1796 Sema::CheckConstexprKind Kind); 1797 1798 // Check whether a function declaration satisfies the requirements of a 1799 // constexpr function definition or a constexpr constructor definition. If so, 1800 // return true. If not, produce appropriate diagnostics (unless asked not to by 1801 // Kind) and return false. 1802 // 1803 // This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360. 1804 bool Sema::CheckConstexprFunctionDefinition(const FunctionDecl *NewFD, 1805 CheckConstexprKind Kind) { 1806 const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewFD); 1807 if (MD && MD->isInstance()) { 1808 // C++11 [dcl.constexpr]p4: 1809 // The definition of a constexpr constructor shall satisfy the following 1810 // constraints: 1811 // - the class shall not have any virtual base classes; 1812 // 1813 // FIXME: This only applies to constructors and destructors, not arbitrary 1814 // member functions. 1815 const CXXRecordDecl *RD = MD->getParent(); 1816 if (RD->getNumVBases()) { 1817 if (Kind == CheckConstexprKind::CheckValid) 1818 return false; 1819 1820 Diag(NewFD->getLocation(), diag::err_constexpr_virtual_base) 1821 << isa<CXXConstructorDecl>(NewFD) 1822 << getRecordDiagFromTagKind(RD->getTagKind()) << RD->getNumVBases(); 1823 for (const auto &I : RD->vbases()) 1824 Diag(I.getBeginLoc(), diag::note_constexpr_virtual_base_here) 1825 << I.getSourceRange(); 1826 return false; 1827 } 1828 } 1829 1830 if (!isa<CXXConstructorDecl>(NewFD)) { 1831 // C++11 [dcl.constexpr]p3: 1832 // The definition of a constexpr function shall satisfy the following 1833 // constraints: 1834 // - it shall not be virtual; (removed in C++20) 1835 const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(NewFD); 1836 if (Method && Method->isVirtual()) { 1837 if (getLangOpts().CPlusPlus20) { 1838 if (Kind == CheckConstexprKind::Diagnose) 1839 Diag(Method->getLocation(), diag::warn_cxx17_compat_constexpr_virtual); 1840 } else { 1841 if (Kind == CheckConstexprKind::CheckValid) 1842 return false; 1843 1844 Method = Method->getCanonicalDecl(); 1845 Diag(Method->getLocation(), diag::err_constexpr_virtual); 1846 1847 // If it's not obvious why this function is virtual, find an overridden 1848 // function which uses the 'virtual' keyword. 1849 const CXXMethodDecl *WrittenVirtual = Method; 1850 while (!WrittenVirtual->isVirtualAsWritten()) 1851 WrittenVirtual = *WrittenVirtual->begin_overridden_methods(); 1852 if (WrittenVirtual != Method) 1853 Diag(WrittenVirtual->getLocation(), 1854 diag::note_overridden_virtual_function); 1855 return false; 1856 } 1857 } 1858 1859 // - its return type shall be a literal type; 1860 if (!CheckConstexprReturnType(*this, NewFD, Kind)) 1861 return false; 1862 } 1863 1864 if (auto *Dtor = dyn_cast<CXXDestructorDecl>(NewFD)) { 1865 // A destructor can be constexpr only if the defaulted destructor could be; 1866 // we don't need to check the members and bases if we already know they all 1867 // have constexpr destructors. 1868 if (!Dtor->getParent()->defaultedDestructorIsConstexpr()) { 1869 if (Kind == CheckConstexprKind::CheckValid) 1870 return false; 1871 if (!CheckConstexprDestructorSubobjects(*this, Dtor, Kind)) 1872 return false; 1873 } 1874 } 1875 1876 // - each of its parameter types shall be a literal type; 1877 if (!CheckConstexprParameterTypes(*this, NewFD, Kind)) 1878 return false; 1879 1880 Stmt *Body = NewFD->getBody(); 1881 assert(Body && 1882 "CheckConstexprFunctionDefinition called on function with no body"); 1883 return CheckConstexprFunctionBody(*this, NewFD, Body, Kind); 1884 } 1885 1886 /// Check the given declaration statement is legal within a constexpr function 1887 /// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3. 1888 /// 1889 /// \return true if the body is OK (maybe only as an extension), false if we 1890 /// have diagnosed a problem. 1891 static bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, 1892 DeclStmt *DS, SourceLocation &Cxx1yLoc, 1893 Sema::CheckConstexprKind Kind) { 1894 // C++11 [dcl.constexpr]p3 and p4: 1895 // The definition of a constexpr function(p3) or constructor(p4) [...] shall 1896 // contain only 1897 for (const auto *DclIt : DS->decls()) { 1898 switch (DclIt->getKind()) { 1899 case Decl::StaticAssert: 1900 case Decl::Using: 1901 case Decl::UsingShadow: 1902 case Decl::UsingDirective: 1903 case Decl::UnresolvedUsingTypename: 1904 case Decl::UnresolvedUsingValue: 1905 case Decl::UsingEnum: 1906 // - static_assert-declarations 1907 // - using-declarations, 1908 // - using-directives, 1909 // - using-enum-declaration 1910 continue; 1911 1912 case Decl::Typedef: 1913 case Decl::TypeAlias: { 1914 // - typedef declarations and alias-declarations that do not define 1915 // classes or enumerations, 1916 const auto *TN = cast<TypedefNameDecl>(DclIt); 1917 if (TN->getUnderlyingType()->isVariablyModifiedType()) { 1918 // Don't allow variably-modified types in constexpr functions. 1919 if (Kind == Sema::CheckConstexprKind::Diagnose) { 1920 TypeLoc TL = TN->getTypeSourceInfo()->getTypeLoc(); 1921 SemaRef.Diag(TL.getBeginLoc(), diag::err_constexpr_vla) 1922 << TL.getSourceRange() << TL.getType() 1923 << isa<CXXConstructorDecl>(Dcl); 1924 } 1925 return false; 1926 } 1927 continue; 1928 } 1929 1930 case Decl::Enum: 1931 case Decl::CXXRecord: 1932 // C++1y allows types to be defined, not just declared. 1933 if (cast<TagDecl>(DclIt)->isThisDeclarationADefinition()) { 1934 if (Kind == Sema::CheckConstexprKind::Diagnose) { 1935 SemaRef.Diag(DS->getBeginLoc(), 1936 SemaRef.getLangOpts().CPlusPlus14 1937 ? diag::warn_cxx11_compat_constexpr_type_definition 1938 : diag::ext_constexpr_type_definition) 1939 << isa<CXXConstructorDecl>(Dcl); 1940 } else if (!SemaRef.getLangOpts().CPlusPlus14) { 1941 return false; 1942 } 1943 } 1944 continue; 1945 1946 case Decl::EnumConstant: 1947 case Decl::IndirectField: 1948 case Decl::ParmVar: 1949 // These can only appear with other declarations which are banned in 1950 // C++11 and permitted in C++1y, so ignore them. 1951 continue; 1952 1953 case Decl::Var: 1954 case Decl::Decomposition: { 1955 // C++1y [dcl.constexpr]p3 allows anything except: 1956 // a definition of a variable of non-literal type or of static or 1957 // thread storage duration or [before C++2a] for which no 1958 // initialization is performed. 1959 const auto *VD = cast<VarDecl>(DclIt); 1960 if (VD->isThisDeclarationADefinition()) { 1961 if (VD->isStaticLocal()) { 1962 if (Kind == Sema::CheckConstexprKind::Diagnose) { 1963 SemaRef.Diag(VD->getLocation(), 1964 SemaRef.getLangOpts().CPlusPlus23 1965 ? diag::warn_cxx20_compat_constexpr_var 1966 : diag::ext_constexpr_static_var) 1967 << isa<CXXConstructorDecl>(Dcl) 1968 << (VD->getTLSKind() == VarDecl::TLS_Dynamic); 1969 } else if (!SemaRef.getLangOpts().CPlusPlus23) { 1970 return false; 1971 } 1972 } 1973 if (SemaRef.LangOpts.CPlusPlus23) { 1974 CheckLiteralType(SemaRef, Kind, VD->getLocation(), VD->getType(), 1975 diag::warn_cxx20_compat_constexpr_var, 1976 isa<CXXConstructorDecl>(Dcl), 1977 /*variable of non-literal type*/ 2); 1978 } else if (CheckLiteralType( 1979 SemaRef, Kind, VD->getLocation(), VD->getType(), 1980 diag::err_constexpr_local_var_non_literal_type, 1981 isa<CXXConstructorDecl>(Dcl))) { 1982 return false; 1983 } 1984 if (!VD->getType()->isDependentType() && 1985 !VD->hasInit() && !VD->isCXXForRangeDecl()) { 1986 if (Kind == Sema::CheckConstexprKind::Diagnose) { 1987 SemaRef.Diag( 1988 VD->getLocation(), 1989 SemaRef.getLangOpts().CPlusPlus20 1990 ? diag::warn_cxx17_compat_constexpr_local_var_no_init 1991 : diag::ext_constexpr_local_var_no_init) 1992 << isa<CXXConstructorDecl>(Dcl); 1993 } else if (!SemaRef.getLangOpts().CPlusPlus20) { 1994 return false; 1995 } 1996 continue; 1997 } 1998 } 1999 if (Kind == Sema::CheckConstexprKind::Diagnose) { 2000 SemaRef.Diag(VD->getLocation(), 2001 SemaRef.getLangOpts().CPlusPlus14 2002 ? diag::warn_cxx11_compat_constexpr_local_var 2003 : diag::ext_constexpr_local_var) 2004 << isa<CXXConstructorDecl>(Dcl); 2005 } else if (!SemaRef.getLangOpts().CPlusPlus14) { 2006 return false; 2007 } 2008 continue; 2009 } 2010 2011 case Decl::NamespaceAlias: 2012 case Decl::Function: 2013 // These are disallowed in C++11 and permitted in C++1y. Allow them 2014 // everywhere as an extension. 2015 if (!Cxx1yLoc.isValid()) 2016 Cxx1yLoc = DS->getBeginLoc(); 2017 continue; 2018 2019 default: 2020 if (Kind == Sema::CheckConstexprKind::Diagnose) { 2021 SemaRef.Diag(DS->getBeginLoc(), diag::err_constexpr_body_invalid_stmt) 2022 << isa<CXXConstructorDecl>(Dcl) << Dcl->isConsteval(); 2023 } 2024 return false; 2025 } 2026 } 2027 2028 return true; 2029 } 2030 2031 /// Check that the given field is initialized within a constexpr constructor. 2032 /// 2033 /// \param Dcl The constexpr constructor being checked. 2034 /// \param Field The field being checked. This may be a member of an anonymous 2035 /// struct or union nested within the class being checked. 2036 /// \param Inits All declarations, including anonymous struct/union members and 2037 /// indirect members, for which any initialization was provided. 2038 /// \param Diagnosed Whether we've emitted the error message yet. Used to attach 2039 /// multiple notes for different members to the same error. 2040 /// \param Kind Whether we're diagnosing a constructor as written or determining 2041 /// whether the formal requirements are satisfied. 2042 /// \return \c false if we're checking for validity and the constructor does 2043 /// not satisfy the requirements on a constexpr constructor. 2044 static bool CheckConstexprCtorInitializer(Sema &SemaRef, 2045 const FunctionDecl *Dcl, 2046 FieldDecl *Field, 2047 llvm::SmallSet<Decl*, 16> &Inits, 2048 bool &Diagnosed, 2049 Sema::CheckConstexprKind Kind) { 2050 // In C++20 onwards, there's nothing to check for validity. 2051 if (Kind == Sema::CheckConstexprKind::CheckValid && 2052 SemaRef.getLangOpts().CPlusPlus20) 2053 return true; 2054 2055 if (Field->isInvalidDecl()) 2056 return true; 2057 2058 if (Field->isUnnamedBitfield()) 2059 return true; 2060 2061 // Anonymous unions with no variant members and empty anonymous structs do not 2062 // need to be explicitly initialized. FIXME: Anonymous structs that contain no 2063 // indirect fields don't need initializing. 2064 if (Field->isAnonymousStructOrUnion() && 2065 (Field->getType()->isUnionType() 2066 ? !Field->getType()->getAsCXXRecordDecl()->hasVariantMembers() 2067 : Field->getType()->getAsCXXRecordDecl()->isEmpty())) 2068 return true; 2069 2070 if (!Inits.count(Field)) { 2071 if (Kind == Sema::CheckConstexprKind::Diagnose) { 2072 if (!Diagnosed) { 2073 SemaRef.Diag(Dcl->getLocation(), 2074 SemaRef.getLangOpts().CPlusPlus20 2075 ? diag::warn_cxx17_compat_constexpr_ctor_missing_init 2076 : diag::ext_constexpr_ctor_missing_init); 2077 Diagnosed = true; 2078 } 2079 SemaRef.Diag(Field->getLocation(), 2080 diag::note_constexpr_ctor_missing_init); 2081 } else if (!SemaRef.getLangOpts().CPlusPlus20) { 2082 return false; 2083 } 2084 } else if (Field->isAnonymousStructOrUnion()) { 2085 const RecordDecl *RD = Field->getType()->castAs<RecordType>()->getDecl(); 2086 for (auto *I : RD->fields()) 2087 // If an anonymous union contains an anonymous struct of which any member 2088 // is initialized, all members must be initialized. 2089 if (!RD->isUnion() || Inits.count(I)) 2090 if (!CheckConstexprCtorInitializer(SemaRef, Dcl, I, Inits, Diagnosed, 2091 Kind)) 2092 return false; 2093 } 2094 return true; 2095 } 2096 2097 /// Check the provided statement is allowed in a constexpr function 2098 /// definition. 2099 static bool 2100 CheckConstexprFunctionStmt(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *S, 2101 SmallVectorImpl<SourceLocation> &ReturnStmts, 2102 SourceLocation &Cxx1yLoc, SourceLocation &Cxx2aLoc, 2103 SourceLocation &Cxx2bLoc, 2104 Sema::CheckConstexprKind Kind) { 2105 // - its function-body shall be [...] a compound-statement that contains only 2106 switch (S->getStmtClass()) { 2107 case Stmt::NullStmtClass: 2108 // - null statements, 2109 return true; 2110 2111 case Stmt::DeclStmtClass: 2112 // - static_assert-declarations 2113 // - using-declarations, 2114 // - using-directives, 2115 // - typedef declarations and alias-declarations that do not define 2116 // classes or enumerations, 2117 if (!CheckConstexprDeclStmt(SemaRef, Dcl, cast<DeclStmt>(S), Cxx1yLoc, Kind)) 2118 return false; 2119 return true; 2120 2121 case Stmt::ReturnStmtClass: 2122 // - and exactly one return statement; 2123 if (isa<CXXConstructorDecl>(Dcl)) { 2124 // C++1y allows return statements in constexpr constructors. 2125 if (!Cxx1yLoc.isValid()) 2126 Cxx1yLoc = S->getBeginLoc(); 2127 return true; 2128 } 2129 2130 ReturnStmts.push_back(S->getBeginLoc()); 2131 return true; 2132 2133 case Stmt::AttributedStmtClass: 2134 // Attributes on a statement don't affect its formal kind and hence don't 2135 // affect its validity in a constexpr function. 2136 return CheckConstexprFunctionStmt( 2137 SemaRef, Dcl, cast<AttributedStmt>(S)->getSubStmt(), ReturnStmts, 2138 Cxx1yLoc, Cxx2aLoc, Cxx2bLoc, Kind); 2139 2140 case Stmt::CompoundStmtClass: { 2141 // C++1y allows compound-statements. 2142 if (!Cxx1yLoc.isValid()) 2143 Cxx1yLoc = S->getBeginLoc(); 2144 2145 CompoundStmt *CompStmt = cast<CompoundStmt>(S); 2146 for (auto *BodyIt : CompStmt->body()) { 2147 if (!CheckConstexprFunctionStmt(SemaRef, Dcl, BodyIt, ReturnStmts, 2148 Cxx1yLoc, Cxx2aLoc, Cxx2bLoc, Kind)) 2149 return false; 2150 } 2151 return true; 2152 } 2153 2154 case Stmt::IfStmtClass: { 2155 // C++1y allows if-statements. 2156 if (!Cxx1yLoc.isValid()) 2157 Cxx1yLoc = S->getBeginLoc(); 2158 2159 IfStmt *If = cast<IfStmt>(S); 2160 if (!CheckConstexprFunctionStmt(SemaRef, Dcl, If->getThen(), ReturnStmts, 2161 Cxx1yLoc, Cxx2aLoc, Cxx2bLoc, Kind)) 2162 return false; 2163 if (If->getElse() && 2164 !CheckConstexprFunctionStmt(SemaRef, Dcl, If->getElse(), ReturnStmts, 2165 Cxx1yLoc, Cxx2aLoc, Cxx2bLoc, Kind)) 2166 return false; 2167 return true; 2168 } 2169 2170 case Stmt::WhileStmtClass: 2171 case Stmt::DoStmtClass: 2172 case Stmt::ForStmtClass: 2173 case Stmt::CXXForRangeStmtClass: 2174 case Stmt::ContinueStmtClass: 2175 // C++1y allows all of these. We don't allow them as extensions in C++11, 2176 // because they don't make sense without variable mutation. 2177 if (!SemaRef.getLangOpts().CPlusPlus14) 2178 break; 2179 if (!Cxx1yLoc.isValid()) 2180 Cxx1yLoc = S->getBeginLoc(); 2181 for (Stmt *SubStmt : S->children()) { 2182 if (SubStmt && 2183 !CheckConstexprFunctionStmt(SemaRef, Dcl, SubStmt, ReturnStmts, 2184 Cxx1yLoc, Cxx2aLoc, Cxx2bLoc, Kind)) 2185 return false; 2186 } 2187 return true; 2188 2189 case Stmt::SwitchStmtClass: 2190 case Stmt::CaseStmtClass: 2191 case Stmt::DefaultStmtClass: 2192 case Stmt::BreakStmtClass: 2193 // C++1y allows switch-statements, and since they don't need variable 2194 // mutation, we can reasonably allow them in C++11 as an extension. 2195 if (!Cxx1yLoc.isValid()) 2196 Cxx1yLoc = S->getBeginLoc(); 2197 for (Stmt *SubStmt : S->children()) { 2198 if (SubStmt && 2199 !CheckConstexprFunctionStmt(SemaRef, Dcl, SubStmt, ReturnStmts, 2200 Cxx1yLoc, Cxx2aLoc, Cxx2bLoc, Kind)) 2201 return false; 2202 } 2203 return true; 2204 2205 case Stmt::LabelStmtClass: 2206 case Stmt::GotoStmtClass: 2207 if (Cxx2bLoc.isInvalid()) 2208 Cxx2bLoc = S->getBeginLoc(); 2209 for (Stmt *SubStmt : S->children()) { 2210 if (SubStmt && 2211 !CheckConstexprFunctionStmt(SemaRef, Dcl, SubStmt, ReturnStmts, 2212 Cxx1yLoc, Cxx2aLoc, Cxx2bLoc, Kind)) 2213 return false; 2214 } 2215 return true; 2216 2217 case Stmt::GCCAsmStmtClass: 2218 case Stmt::MSAsmStmtClass: 2219 // C++2a allows inline assembly statements. 2220 case Stmt::CXXTryStmtClass: 2221 if (Cxx2aLoc.isInvalid()) 2222 Cxx2aLoc = S->getBeginLoc(); 2223 for (Stmt *SubStmt : S->children()) { 2224 if (SubStmt && 2225 !CheckConstexprFunctionStmt(SemaRef, Dcl, SubStmt, ReturnStmts, 2226 Cxx1yLoc, Cxx2aLoc, Cxx2bLoc, Kind)) 2227 return false; 2228 } 2229 return true; 2230 2231 case Stmt::CXXCatchStmtClass: 2232 // Do not bother checking the language mode (already covered by the 2233 // try block check). 2234 if (!CheckConstexprFunctionStmt( 2235 SemaRef, Dcl, cast<CXXCatchStmt>(S)->getHandlerBlock(), ReturnStmts, 2236 Cxx1yLoc, Cxx2aLoc, Cxx2bLoc, Kind)) 2237 return false; 2238 return true; 2239 2240 default: 2241 if (!isa<Expr>(S)) 2242 break; 2243 2244 // C++1y allows expression-statements. 2245 if (!Cxx1yLoc.isValid()) 2246 Cxx1yLoc = S->getBeginLoc(); 2247 return true; 2248 } 2249 2250 if (Kind == Sema::CheckConstexprKind::Diagnose) { 2251 SemaRef.Diag(S->getBeginLoc(), diag::err_constexpr_body_invalid_stmt) 2252 << isa<CXXConstructorDecl>(Dcl) << Dcl->isConsteval(); 2253 } 2254 return false; 2255 } 2256 2257 /// Check the body for the given constexpr function declaration only contains 2258 /// the permitted types of statement. C++11 [dcl.constexpr]p3,p4. 2259 /// 2260 /// \return true if the body is OK, false if we have found or diagnosed a 2261 /// problem. 2262 static bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, 2263 Stmt *Body, 2264 Sema::CheckConstexprKind Kind) { 2265 SmallVector<SourceLocation, 4> ReturnStmts; 2266 2267 if (isa<CXXTryStmt>(Body)) { 2268 // C++11 [dcl.constexpr]p3: 2269 // The definition of a constexpr function shall satisfy the following 2270 // constraints: [...] 2271 // - its function-body shall be = delete, = default, or a 2272 // compound-statement 2273 // 2274 // C++11 [dcl.constexpr]p4: 2275 // In the definition of a constexpr constructor, [...] 2276 // - its function-body shall not be a function-try-block; 2277 // 2278 // This restriction is lifted in C++2a, as long as inner statements also 2279 // apply the general constexpr rules. 2280 switch (Kind) { 2281 case Sema::CheckConstexprKind::CheckValid: 2282 if (!SemaRef.getLangOpts().CPlusPlus20) 2283 return false; 2284 break; 2285 2286 case Sema::CheckConstexprKind::Diagnose: 2287 SemaRef.Diag(Body->getBeginLoc(), 2288 !SemaRef.getLangOpts().CPlusPlus20 2289 ? diag::ext_constexpr_function_try_block_cxx20 2290 : diag::warn_cxx17_compat_constexpr_function_try_block) 2291 << isa<CXXConstructorDecl>(Dcl); 2292 break; 2293 } 2294 } 2295 2296 // - its function-body shall be [...] a compound-statement that contains only 2297 // [... list of cases ...] 2298 // 2299 // Note that walking the children here is enough to properly check for 2300 // CompoundStmt and CXXTryStmt body. 2301 SourceLocation Cxx1yLoc, Cxx2aLoc, Cxx2bLoc; 2302 for (Stmt *SubStmt : Body->children()) { 2303 if (SubStmt && 2304 !CheckConstexprFunctionStmt(SemaRef, Dcl, SubStmt, ReturnStmts, 2305 Cxx1yLoc, Cxx2aLoc, Cxx2bLoc, Kind)) 2306 return false; 2307 } 2308 2309 if (Kind == Sema::CheckConstexprKind::CheckValid) { 2310 // If this is only valid as an extension, report that we don't satisfy the 2311 // constraints of the current language. 2312 if ((Cxx2bLoc.isValid() && !SemaRef.getLangOpts().CPlusPlus23) || 2313 (Cxx2aLoc.isValid() && !SemaRef.getLangOpts().CPlusPlus20) || 2314 (Cxx1yLoc.isValid() && !SemaRef.getLangOpts().CPlusPlus17)) 2315 return false; 2316 } else if (Cxx2bLoc.isValid()) { 2317 SemaRef.Diag(Cxx2bLoc, 2318 SemaRef.getLangOpts().CPlusPlus23 2319 ? diag::warn_cxx20_compat_constexpr_body_invalid_stmt 2320 : diag::ext_constexpr_body_invalid_stmt_cxx23) 2321 << isa<CXXConstructorDecl>(Dcl); 2322 } else if (Cxx2aLoc.isValid()) { 2323 SemaRef.Diag(Cxx2aLoc, 2324 SemaRef.getLangOpts().CPlusPlus20 2325 ? diag::warn_cxx17_compat_constexpr_body_invalid_stmt 2326 : diag::ext_constexpr_body_invalid_stmt_cxx20) 2327 << isa<CXXConstructorDecl>(Dcl); 2328 } else if (Cxx1yLoc.isValid()) { 2329 SemaRef.Diag(Cxx1yLoc, 2330 SemaRef.getLangOpts().CPlusPlus14 2331 ? diag::warn_cxx11_compat_constexpr_body_invalid_stmt 2332 : diag::ext_constexpr_body_invalid_stmt) 2333 << isa<CXXConstructorDecl>(Dcl); 2334 } 2335 2336 if (const CXXConstructorDecl *Constructor 2337 = dyn_cast<CXXConstructorDecl>(Dcl)) { 2338 const CXXRecordDecl *RD = Constructor->getParent(); 2339 // DR1359: 2340 // - every non-variant non-static data member and base class sub-object 2341 // shall be initialized; 2342 // DR1460: 2343 // - if the class is a union having variant members, exactly one of them 2344 // shall be initialized; 2345 if (RD->isUnion()) { 2346 if (Constructor->getNumCtorInitializers() == 0 && 2347 RD->hasVariantMembers()) { 2348 if (Kind == Sema::CheckConstexprKind::Diagnose) { 2349 SemaRef.Diag( 2350 Dcl->getLocation(), 2351 SemaRef.getLangOpts().CPlusPlus20 2352 ? diag::warn_cxx17_compat_constexpr_union_ctor_no_init 2353 : diag::ext_constexpr_union_ctor_no_init); 2354 } else if (!SemaRef.getLangOpts().CPlusPlus20) { 2355 return false; 2356 } 2357 } 2358 } else if (!Constructor->isDependentContext() && 2359 !Constructor->isDelegatingConstructor()) { 2360 assert(RD->getNumVBases() == 0 && "constexpr ctor with virtual bases"); 2361 2362 // Skip detailed checking if we have enough initializers, and we would 2363 // allow at most one initializer per member. 2364 bool AnyAnonStructUnionMembers = false; 2365 unsigned Fields = 0; 2366 for (CXXRecordDecl::field_iterator I = RD->field_begin(), 2367 E = RD->field_end(); I != E; ++I, ++Fields) { 2368 if (I->isAnonymousStructOrUnion()) { 2369 AnyAnonStructUnionMembers = true; 2370 break; 2371 } 2372 } 2373 // DR1460: 2374 // - if the class is a union-like class, but is not a union, for each of 2375 // its anonymous union members having variant members, exactly one of 2376 // them shall be initialized; 2377 if (AnyAnonStructUnionMembers || 2378 Constructor->getNumCtorInitializers() != RD->getNumBases() + Fields) { 2379 // Check initialization of non-static data members. Base classes are 2380 // always initialized so do not need to be checked. Dependent bases 2381 // might not have initializers in the member initializer list. 2382 llvm::SmallSet<Decl*, 16> Inits; 2383 for (const auto *I: Constructor->inits()) { 2384 if (FieldDecl *FD = I->getMember()) 2385 Inits.insert(FD); 2386 else if (IndirectFieldDecl *ID = I->getIndirectMember()) 2387 Inits.insert(ID->chain_begin(), ID->chain_end()); 2388 } 2389 2390 bool Diagnosed = false; 2391 for (auto *I : RD->fields()) 2392 if (!CheckConstexprCtorInitializer(SemaRef, Dcl, I, Inits, Diagnosed, 2393 Kind)) 2394 return false; 2395 } 2396 } 2397 } else { 2398 if (ReturnStmts.empty()) { 2399 // C++1y doesn't require constexpr functions to contain a 'return' 2400 // statement. We still do, unless the return type might be void, because 2401 // otherwise if there's no return statement, the function cannot 2402 // be used in a core constant expression. 2403 bool OK = SemaRef.getLangOpts().CPlusPlus14 && 2404 (Dcl->getReturnType()->isVoidType() || 2405 Dcl->getReturnType()->isDependentType()); 2406 switch (Kind) { 2407 case Sema::CheckConstexprKind::Diagnose: 2408 SemaRef.Diag(Dcl->getLocation(), 2409 OK ? diag::warn_cxx11_compat_constexpr_body_no_return 2410 : diag::err_constexpr_body_no_return) 2411 << Dcl->isConsteval(); 2412 if (!OK) 2413 return false; 2414 break; 2415 2416 case Sema::CheckConstexprKind::CheckValid: 2417 // The formal requirements don't include this rule in C++14, even 2418 // though the "must be able to produce a constant expression" rules 2419 // still imply it in some cases. 2420 if (!SemaRef.getLangOpts().CPlusPlus14) 2421 return false; 2422 break; 2423 } 2424 } else if (ReturnStmts.size() > 1) { 2425 switch (Kind) { 2426 case Sema::CheckConstexprKind::Diagnose: 2427 SemaRef.Diag( 2428 ReturnStmts.back(), 2429 SemaRef.getLangOpts().CPlusPlus14 2430 ? diag::warn_cxx11_compat_constexpr_body_multiple_return 2431 : diag::ext_constexpr_body_multiple_return); 2432 for (unsigned I = 0; I < ReturnStmts.size() - 1; ++I) 2433 SemaRef.Diag(ReturnStmts[I], 2434 diag::note_constexpr_body_previous_return); 2435 break; 2436 2437 case Sema::CheckConstexprKind::CheckValid: 2438 if (!SemaRef.getLangOpts().CPlusPlus14) 2439 return false; 2440 break; 2441 } 2442 } 2443 } 2444 2445 // C++11 [dcl.constexpr]p5: 2446 // if no function argument values exist such that the function invocation 2447 // substitution would produce a constant expression, the program is 2448 // ill-formed; no diagnostic required. 2449 // C++11 [dcl.constexpr]p3: 2450 // - every constructor call and implicit conversion used in initializing the 2451 // return value shall be one of those allowed in a constant expression. 2452 // C++11 [dcl.constexpr]p4: 2453 // - every constructor involved in initializing non-static data members and 2454 // base class sub-objects shall be a constexpr constructor. 2455 // 2456 // Note that this rule is distinct from the "requirements for a constexpr 2457 // function", so is not checked in CheckValid mode. 2458 SmallVector<PartialDiagnosticAt, 8> Diags; 2459 if (Kind == Sema::CheckConstexprKind::Diagnose && 2460 !Expr::isPotentialConstantExpr(Dcl, Diags)) { 2461 SemaRef.Diag(Dcl->getLocation(), 2462 diag::ext_constexpr_function_never_constant_expr) 2463 << isa<CXXConstructorDecl>(Dcl) << Dcl->isConsteval() 2464 << Dcl->getNameInfo().getSourceRange(); 2465 for (size_t I = 0, N = Diags.size(); I != N; ++I) 2466 SemaRef.Diag(Diags[I].first, Diags[I].second); 2467 // Don't return false here: we allow this for compatibility in 2468 // system headers. 2469 } 2470 2471 return true; 2472 } 2473 2474 bool Sema::CheckImmediateEscalatingFunctionDefinition( 2475 FunctionDecl *FD, const sema::FunctionScopeInfo *FSI) { 2476 if (!getLangOpts().CPlusPlus20 || !FD->isImmediateEscalating()) 2477 return true; 2478 FD->setBodyContainsImmediateEscalatingExpressions( 2479 FSI->FoundImmediateEscalatingExpression); 2480 if (FSI->FoundImmediateEscalatingExpression) { 2481 auto it = UndefinedButUsed.find(FD->getCanonicalDecl()); 2482 if (it != UndefinedButUsed.end()) { 2483 Diag(it->second, diag::err_immediate_function_used_before_definition) 2484 << it->first; 2485 Diag(FD->getLocation(), diag::note_defined_here) << FD; 2486 if (FD->isImmediateFunction() && !FD->isConsteval()) 2487 DiagnoseImmediateEscalatingReason(FD); 2488 return false; 2489 } 2490 } 2491 return true; 2492 } 2493 2494 void Sema::DiagnoseImmediateEscalatingReason(FunctionDecl *FD) { 2495 assert(FD->isImmediateEscalating() && !FD->isConsteval() && 2496 "expected an immediate function"); 2497 assert(FD->hasBody() && "expected the function to have a body"); 2498 struct ImmediateEscalatingExpressionsVisitor 2499 : public RecursiveASTVisitor<ImmediateEscalatingExpressionsVisitor> { 2500 2501 using Base = RecursiveASTVisitor<ImmediateEscalatingExpressionsVisitor>; 2502 Sema &SemaRef; 2503 2504 const FunctionDecl *ImmediateFn; 2505 bool ImmediateFnIsConstructor; 2506 CXXConstructorDecl *CurrentConstructor = nullptr; 2507 CXXCtorInitializer *CurrentInit = nullptr; 2508 2509 ImmediateEscalatingExpressionsVisitor(Sema &SemaRef, FunctionDecl *FD) 2510 : SemaRef(SemaRef), ImmediateFn(FD), 2511 ImmediateFnIsConstructor(isa<CXXConstructorDecl>(FD)) {} 2512 2513 bool shouldVisitImplicitCode() const { return true; } 2514 bool shouldVisitLambdaBody() const { return false; } 2515 2516 void Diag(const Expr *E, const FunctionDecl *Fn, bool IsCall) { 2517 SourceLocation Loc = E->getBeginLoc(); 2518 SourceRange Range = E->getSourceRange(); 2519 if (CurrentConstructor && CurrentInit) { 2520 Loc = CurrentConstructor->getLocation(); 2521 Range = CurrentInit->isWritten() ? CurrentInit->getSourceRange() 2522 : SourceRange(); 2523 } 2524 2525 FieldDecl* InitializedField = CurrentInit ? CurrentInit->getAnyMember() : nullptr; 2526 2527 SemaRef.Diag(Loc, diag::note_immediate_function_reason) 2528 << ImmediateFn << Fn << Fn->isConsteval() << IsCall 2529 << isa<CXXConstructorDecl>(Fn) << ImmediateFnIsConstructor 2530 << (InitializedField != nullptr) 2531 << (CurrentInit && !CurrentInit->isWritten()) 2532 << InitializedField << Range; 2533 } 2534 bool TraverseCallExpr(CallExpr *E) { 2535 if (const auto *DR = 2536 dyn_cast<DeclRefExpr>(E->getCallee()->IgnoreImplicit()); 2537 DR && DR->isImmediateEscalating()) { 2538 Diag(E, E->getDirectCallee(), /*IsCall=*/true); 2539 return false; 2540 } 2541 2542 for (Expr *A : E->arguments()) 2543 if (!getDerived().TraverseStmt(A)) 2544 return false; 2545 2546 return true; 2547 } 2548 2549 bool VisitDeclRefExpr(DeclRefExpr *E) { 2550 if (const auto *ReferencedFn = dyn_cast<FunctionDecl>(E->getDecl()); 2551 ReferencedFn && E->isImmediateEscalating()) { 2552 Diag(E, ReferencedFn, /*IsCall=*/false); 2553 return false; 2554 } 2555 2556 return true; 2557 } 2558 2559 bool VisitCXXConstructExpr(CXXConstructExpr *E) { 2560 CXXConstructorDecl *D = E->getConstructor(); 2561 if (E->isImmediateEscalating()) { 2562 Diag(E, D, /*IsCall=*/true); 2563 return false; 2564 } 2565 return true; 2566 } 2567 2568 bool TraverseConstructorInitializer(CXXCtorInitializer *Init) { 2569 llvm::SaveAndRestore RAII(CurrentInit, Init); 2570 return Base::TraverseConstructorInitializer(Init); 2571 } 2572 2573 bool TraverseCXXConstructorDecl(CXXConstructorDecl *Ctr) { 2574 llvm::SaveAndRestore RAII(CurrentConstructor, Ctr); 2575 return Base::TraverseCXXConstructorDecl(Ctr); 2576 } 2577 2578 bool TraverseType(QualType T) { return true; } 2579 bool VisitBlockExpr(BlockExpr *T) { return true; } 2580 2581 } Visitor(*this, FD); 2582 Visitor.TraverseDecl(FD); 2583 } 2584 2585 /// Get the class that is directly named by the current context. This is the 2586 /// class for which an unqualified-id in this scope could name a constructor 2587 /// or destructor. 2588 /// 2589 /// If the scope specifier denotes a class, this will be that class. 2590 /// If the scope specifier is empty, this will be the class whose 2591 /// member-specification we are currently within. Otherwise, there 2592 /// is no such class. 2593 CXXRecordDecl *Sema::getCurrentClass(Scope *, const CXXScopeSpec *SS) { 2594 assert(getLangOpts().CPlusPlus && "No class names in C!"); 2595 2596 if (SS && SS->isInvalid()) 2597 return nullptr; 2598 2599 if (SS && SS->isNotEmpty()) { 2600 DeclContext *DC = computeDeclContext(*SS, true); 2601 return dyn_cast_or_null<CXXRecordDecl>(DC); 2602 } 2603 2604 return dyn_cast_or_null<CXXRecordDecl>(CurContext); 2605 } 2606 2607 /// isCurrentClassName - Determine whether the identifier II is the 2608 /// name of the class type currently being defined. In the case of 2609 /// nested classes, this will only return true if II is the name of 2610 /// the innermost class. 2611 bool Sema::isCurrentClassName(const IdentifierInfo &II, Scope *S, 2612 const CXXScopeSpec *SS) { 2613 CXXRecordDecl *CurDecl = getCurrentClass(S, SS); 2614 return CurDecl && &II == CurDecl->getIdentifier(); 2615 } 2616 2617 /// Determine whether the identifier II is a typo for the name of 2618 /// the class type currently being defined. If so, update it to the identifier 2619 /// that should have been used. 2620 bool Sema::isCurrentClassNameTypo(IdentifierInfo *&II, const CXXScopeSpec *SS) { 2621 assert(getLangOpts().CPlusPlus && "No class names in C!"); 2622 2623 if (!getLangOpts().SpellChecking) 2624 return false; 2625 2626 CXXRecordDecl *CurDecl; 2627 if (SS && SS->isSet() && !SS->isInvalid()) { 2628 DeclContext *DC = computeDeclContext(*SS, true); 2629 CurDecl = dyn_cast_or_null<CXXRecordDecl>(DC); 2630 } else 2631 CurDecl = dyn_cast_or_null<CXXRecordDecl>(CurContext); 2632 2633 if (CurDecl && CurDecl->getIdentifier() && II != CurDecl->getIdentifier() && 2634 3 * II->getName().edit_distance(CurDecl->getIdentifier()->getName()) 2635 < II->getLength()) { 2636 II = CurDecl->getIdentifier(); 2637 return true; 2638 } 2639 2640 return false; 2641 } 2642 2643 /// Determine whether the given class is a base class of the given 2644 /// class, including looking at dependent bases. 2645 static bool findCircularInheritance(const CXXRecordDecl *Class, 2646 const CXXRecordDecl *Current) { 2647 SmallVector<const CXXRecordDecl*, 8> Queue; 2648 2649 Class = Class->getCanonicalDecl(); 2650 while (true) { 2651 for (const auto &I : Current->bases()) { 2652 CXXRecordDecl *Base = I.getType()->getAsCXXRecordDecl(); 2653 if (!Base) 2654 continue; 2655 2656 Base = Base->getDefinition(); 2657 if (!Base) 2658 continue; 2659 2660 if (Base->getCanonicalDecl() == Class) 2661 return true; 2662 2663 Queue.push_back(Base); 2664 } 2665 2666 if (Queue.empty()) 2667 return false; 2668 2669 Current = Queue.pop_back_val(); 2670 } 2671 2672 return false; 2673 } 2674 2675 /// Check the validity of a C++ base class specifier. 2676 /// 2677 /// \returns a new CXXBaseSpecifier if well-formed, emits diagnostics 2678 /// and returns NULL otherwise. 2679 CXXBaseSpecifier * 2680 Sema::CheckBaseSpecifier(CXXRecordDecl *Class, 2681 SourceRange SpecifierRange, 2682 bool Virtual, AccessSpecifier Access, 2683 TypeSourceInfo *TInfo, 2684 SourceLocation EllipsisLoc) { 2685 // In HLSL, unspecified class access is public rather than private. 2686 if (getLangOpts().HLSL && Class->getTagKind() == TagTypeKind::Class && 2687 Access == AS_none) 2688 Access = AS_public; 2689 2690 QualType BaseType = TInfo->getType(); 2691 if (BaseType->containsErrors()) { 2692 // Already emitted a diagnostic when parsing the error type. 2693 return nullptr; 2694 } 2695 // C++ [class.union]p1: 2696 // A union shall not have base classes. 2697 if (Class->isUnion()) { 2698 Diag(Class->getLocation(), diag::err_base_clause_on_union) 2699 << SpecifierRange; 2700 return nullptr; 2701 } 2702 2703 if (EllipsisLoc.isValid() && 2704 !TInfo->getType()->containsUnexpandedParameterPack()) { 2705 Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) 2706 << TInfo->getTypeLoc().getSourceRange(); 2707 EllipsisLoc = SourceLocation(); 2708 } 2709 2710 SourceLocation BaseLoc = TInfo->getTypeLoc().getBeginLoc(); 2711 2712 if (BaseType->isDependentType()) { 2713 // Make sure that we don't have circular inheritance among our dependent 2714 // bases. For non-dependent bases, the check for completeness below handles 2715 // this. 2716 if (CXXRecordDecl *BaseDecl = BaseType->getAsCXXRecordDecl()) { 2717 if (BaseDecl->getCanonicalDecl() == Class->getCanonicalDecl() || 2718 ((BaseDecl = BaseDecl->getDefinition()) && 2719 findCircularInheritance(Class, BaseDecl))) { 2720 Diag(BaseLoc, diag::err_circular_inheritance) 2721 << BaseType << Context.getTypeDeclType(Class); 2722 2723 if (BaseDecl->getCanonicalDecl() != Class->getCanonicalDecl()) 2724 Diag(BaseDecl->getLocation(), diag::note_previous_decl) 2725 << BaseType; 2726 2727 return nullptr; 2728 } 2729 } 2730 2731 // Make sure that we don't make an ill-formed AST where the type of the 2732 // Class is non-dependent and its attached base class specifier is an 2733 // dependent type, which violates invariants in many clang code paths (e.g. 2734 // constexpr evaluator). If this case happens (in errory-recovery mode), we 2735 // explicitly mark the Class decl invalid. The diagnostic was already 2736 // emitted. 2737 if (!Class->getTypeForDecl()->isDependentType()) 2738 Class->setInvalidDecl(); 2739 return new (Context) CXXBaseSpecifier( 2740 SpecifierRange, Virtual, Class->getTagKind() == TagTypeKind::Class, 2741 Access, TInfo, EllipsisLoc); 2742 } 2743 2744 // Base specifiers must be record types. 2745 if (!BaseType->isRecordType()) { 2746 Diag(BaseLoc, diag::err_base_must_be_class) << SpecifierRange; 2747 return nullptr; 2748 } 2749 2750 // C++ [class.union]p1: 2751 // A union shall not be used as a base class. 2752 if (BaseType->isUnionType()) { 2753 Diag(BaseLoc, diag::err_union_as_base_class) << SpecifierRange; 2754 return nullptr; 2755 } 2756 2757 // For the MS ABI, propagate DLL attributes to base class templates. 2758 if (Context.getTargetInfo().getCXXABI().isMicrosoft() || 2759 Context.getTargetInfo().getTriple().isPS()) { 2760 if (Attr *ClassAttr = getDLLAttr(Class)) { 2761 if (auto *BaseTemplate = dyn_cast_or_null<ClassTemplateSpecializationDecl>( 2762 BaseType->getAsCXXRecordDecl())) { 2763 propagateDLLAttrToBaseClassTemplate(Class, ClassAttr, BaseTemplate, 2764 BaseLoc); 2765 } 2766 } 2767 } 2768 2769 // C++ [class.derived]p2: 2770 // The class-name in a base-specifier shall not be an incompletely 2771 // defined class. 2772 if (RequireCompleteType(BaseLoc, BaseType, 2773 diag::err_incomplete_base_class, SpecifierRange)) { 2774 Class->setInvalidDecl(); 2775 return nullptr; 2776 } 2777 2778 // If the base class is polymorphic or isn't empty, the new one is/isn't, too. 2779 RecordDecl *BaseDecl = BaseType->castAs<RecordType>()->getDecl(); 2780 assert(BaseDecl && "Record type has no declaration"); 2781 BaseDecl = BaseDecl->getDefinition(); 2782 assert(BaseDecl && "Base type is not incomplete, but has no definition"); 2783 CXXRecordDecl *CXXBaseDecl = cast<CXXRecordDecl>(BaseDecl); 2784 assert(CXXBaseDecl && "Base type is not a C++ type"); 2785 2786 // Microsoft docs say: 2787 // "If a base-class has a code_seg attribute, derived classes must have the 2788 // same attribute." 2789 const auto *BaseCSA = CXXBaseDecl->getAttr<CodeSegAttr>(); 2790 const auto *DerivedCSA = Class->getAttr<CodeSegAttr>(); 2791 if ((DerivedCSA || BaseCSA) && 2792 (!BaseCSA || !DerivedCSA || BaseCSA->getName() != DerivedCSA->getName())) { 2793 Diag(Class->getLocation(), diag::err_mismatched_code_seg_base); 2794 Diag(CXXBaseDecl->getLocation(), diag::note_base_class_specified_here) 2795 << CXXBaseDecl; 2796 return nullptr; 2797 } 2798 2799 // A class which contains a flexible array member is not suitable for use as a 2800 // base class: 2801 // - If the layout determines that a base comes before another base, 2802 // the flexible array member would index into the subsequent base. 2803 // - If the layout determines that base comes before the derived class, 2804 // the flexible array member would index into the derived class. 2805 if (CXXBaseDecl->hasFlexibleArrayMember()) { 2806 Diag(BaseLoc, diag::err_base_class_has_flexible_array_member) 2807 << CXXBaseDecl->getDeclName(); 2808 return nullptr; 2809 } 2810 2811 // C++ [class]p3: 2812 // If a class is marked final and it appears as a base-type-specifier in 2813 // base-clause, the program is ill-formed. 2814 if (FinalAttr *FA = CXXBaseDecl->getAttr<FinalAttr>()) { 2815 Diag(BaseLoc, diag::err_class_marked_final_used_as_base) 2816 << CXXBaseDecl->getDeclName() 2817 << FA->isSpelledAsSealed(); 2818 Diag(CXXBaseDecl->getLocation(), diag::note_entity_declared_at) 2819 << CXXBaseDecl->getDeclName() << FA->getRange(); 2820 return nullptr; 2821 } 2822 2823 if (BaseDecl->isInvalidDecl()) 2824 Class->setInvalidDecl(); 2825 2826 // Create the base specifier. 2827 return new (Context) CXXBaseSpecifier( 2828 SpecifierRange, Virtual, Class->getTagKind() == TagTypeKind::Class, 2829 Access, TInfo, EllipsisLoc); 2830 } 2831 2832 /// ActOnBaseSpecifier - Parsed a base specifier. A base specifier is 2833 /// one entry in the base class list of a class specifier, for 2834 /// example: 2835 /// class foo : public bar, virtual private baz { 2836 /// 'public bar' and 'virtual private baz' are each base-specifiers. 2837 BaseResult Sema::ActOnBaseSpecifier(Decl *classdecl, SourceRange SpecifierRange, 2838 const ParsedAttributesView &Attributes, 2839 bool Virtual, AccessSpecifier Access, 2840 ParsedType basetype, SourceLocation BaseLoc, 2841 SourceLocation EllipsisLoc) { 2842 if (!classdecl) 2843 return true; 2844 2845 AdjustDeclIfTemplate(classdecl); 2846 CXXRecordDecl *Class = dyn_cast<CXXRecordDecl>(classdecl); 2847 if (!Class) 2848 return true; 2849 2850 // We haven't yet attached the base specifiers. 2851 Class->setIsParsingBaseSpecifiers(); 2852 2853 // We do not support any C++11 attributes on base-specifiers yet. 2854 // Diagnose any attributes we see. 2855 for (const ParsedAttr &AL : Attributes) { 2856 if (AL.isInvalid() || AL.getKind() == ParsedAttr::IgnoredAttribute) 2857 continue; 2858 if (AL.getKind() == ParsedAttr::UnknownAttribute) 2859 Diag(AL.getLoc(), diag::warn_unknown_attribute_ignored) 2860 << AL << AL.getRange(); 2861 else 2862 Diag(AL.getLoc(), diag::err_base_specifier_attribute) 2863 << AL << AL.isRegularKeywordAttribute() << AL.getRange(); 2864 } 2865 2866 TypeSourceInfo *TInfo = nullptr; 2867 GetTypeFromParser(basetype, &TInfo); 2868 2869 if (EllipsisLoc.isInvalid() && 2870 DiagnoseUnexpandedParameterPack(SpecifierRange.getBegin(), TInfo, 2871 UPPC_BaseType)) 2872 return true; 2873 2874 if (CXXBaseSpecifier *BaseSpec = CheckBaseSpecifier(Class, SpecifierRange, 2875 Virtual, Access, TInfo, 2876 EllipsisLoc)) 2877 return BaseSpec; 2878 else 2879 Class->setInvalidDecl(); 2880 2881 return true; 2882 } 2883 2884 /// Use small set to collect indirect bases. As this is only used 2885 /// locally, there's no need to abstract the small size parameter. 2886 typedef llvm::SmallPtrSet<QualType, 4> IndirectBaseSet; 2887 2888 /// Recursively add the bases of Type. Don't add Type itself. 2889 static void 2890 NoteIndirectBases(ASTContext &Context, IndirectBaseSet &Set, 2891 const QualType &Type) 2892 { 2893 // Even though the incoming type is a base, it might not be 2894 // a class -- it could be a template parm, for instance. 2895 if (auto Rec = Type->getAs<RecordType>()) { 2896 auto Decl = Rec->getAsCXXRecordDecl(); 2897 2898 // Iterate over its bases. 2899 for (const auto &BaseSpec : Decl->bases()) { 2900 QualType Base = Context.getCanonicalType(BaseSpec.getType()) 2901 .getUnqualifiedType(); 2902 if (Set.insert(Base).second) 2903 // If we've not already seen it, recurse. 2904 NoteIndirectBases(Context, Set, Base); 2905 } 2906 } 2907 } 2908 2909 /// Performs the actual work of attaching the given base class 2910 /// specifiers to a C++ class. 2911 bool Sema::AttachBaseSpecifiers(CXXRecordDecl *Class, 2912 MutableArrayRef<CXXBaseSpecifier *> Bases) { 2913 if (Bases.empty()) 2914 return false; 2915 2916 // Used to keep track of which base types we have already seen, so 2917 // that we can properly diagnose redundant direct base types. Note 2918 // that the key is always the unqualified canonical type of the base 2919 // class. 2920 std::map<QualType, CXXBaseSpecifier*, QualTypeOrdering> KnownBaseTypes; 2921 2922 // Used to track indirect bases so we can see if a direct base is 2923 // ambiguous. 2924 IndirectBaseSet IndirectBaseTypes; 2925 2926 // Copy non-redundant base specifiers into permanent storage. 2927 unsigned NumGoodBases = 0; 2928 bool Invalid = false; 2929 for (unsigned idx = 0; idx < Bases.size(); ++idx) { 2930 QualType NewBaseType 2931 = Context.getCanonicalType(Bases[idx]->getType()); 2932 NewBaseType = NewBaseType.getLocalUnqualifiedType(); 2933 2934 CXXBaseSpecifier *&KnownBase = KnownBaseTypes[NewBaseType]; 2935 if (KnownBase) { 2936 // C++ [class.mi]p3: 2937 // A class shall not be specified as a direct base class of a 2938 // derived class more than once. 2939 Diag(Bases[idx]->getBeginLoc(), diag::err_duplicate_base_class) 2940 << KnownBase->getType() << Bases[idx]->getSourceRange(); 2941 2942 // Delete the duplicate base class specifier; we're going to 2943 // overwrite its pointer later. 2944 Context.Deallocate(Bases[idx]); 2945 2946 Invalid = true; 2947 } else { 2948 // Okay, add this new base class. 2949 KnownBase = Bases[idx]; 2950 Bases[NumGoodBases++] = Bases[idx]; 2951 2952 if (NewBaseType->isDependentType()) 2953 continue; 2954 // Note this base's direct & indirect bases, if there could be ambiguity. 2955 if (Bases.size() > 1) 2956 NoteIndirectBases(Context, IndirectBaseTypes, NewBaseType); 2957 2958 if (const RecordType *Record = NewBaseType->getAs<RecordType>()) { 2959 const CXXRecordDecl *RD = cast<CXXRecordDecl>(Record->getDecl()); 2960 if (Class->isInterface() && 2961 (!RD->isInterfaceLike() || 2962 KnownBase->getAccessSpecifier() != AS_public)) { 2963 // The Microsoft extension __interface does not permit bases that 2964 // are not themselves public interfaces. 2965 Diag(KnownBase->getBeginLoc(), diag::err_invalid_base_in_interface) 2966 << getRecordDiagFromTagKind(RD->getTagKind()) << RD 2967 << RD->getSourceRange(); 2968 Invalid = true; 2969 } 2970 if (RD->hasAttr<WeakAttr>()) 2971 Class->addAttr(WeakAttr::CreateImplicit(Context)); 2972 } 2973 } 2974 } 2975 2976 // Attach the remaining base class specifiers to the derived class. 2977 Class->setBases(Bases.data(), NumGoodBases); 2978 2979 // Check that the only base classes that are duplicate are virtual. 2980 for (unsigned idx = 0; idx < NumGoodBases; ++idx) { 2981 // Check whether this direct base is inaccessible due to ambiguity. 2982 QualType BaseType = Bases[idx]->getType(); 2983 2984 // Skip all dependent types in templates being used as base specifiers. 2985 // Checks below assume that the base specifier is a CXXRecord. 2986 if (BaseType->isDependentType()) 2987 continue; 2988 2989 CanQualType CanonicalBase = Context.getCanonicalType(BaseType) 2990 .getUnqualifiedType(); 2991 2992 if (IndirectBaseTypes.count(CanonicalBase)) { 2993 CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true, 2994 /*DetectVirtual=*/true); 2995 bool found 2996 = Class->isDerivedFrom(CanonicalBase->getAsCXXRecordDecl(), Paths); 2997 assert(found); 2998 (void)found; 2999 3000 if (Paths.isAmbiguous(CanonicalBase)) 3001 Diag(Bases[idx]->getBeginLoc(), diag::warn_inaccessible_base_class) 3002 << BaseType << getAmbiguousPathsDisplayString(Paths) 3003 << Bases[idx]->getSourceRange(); 3004 else 3005 assert(Bases[idx]->isVirtual()); 3006 } 3007 3008 // Delete the base class specifier, since its data has been copied 3009 // into the CXXRecordDecl. 3010 Context.Deallocate(Bases[idx]); 3011 } 3012 3013 return Invalid; 3014 } 3015 3016 /// ActOnBaseSpecifiers - Attach the given base specifiers to the 3017 /// class, after checking whether there are any duplicate base 3018 /// classes. 3019 void Sema::ActOnBaseSpecifiers(Decl *ClassDecl, 3020 MutableArrayRef<CXXBaseSpecifier *> Bases) { 3021 if (!ClassDecl || Bases.empty()) 3022 return; 3023 3024 AdjustDeclIfTemplate(ClassDecl); 3025 AttachBaseSpecifiers(cast<CXXRecordDecl>(ClassDecl), Bases); 3026 } 3027 3028 /// Determine whether the type \p Derived is a C++ class that is 3029 /// derived from the type \p Base. 3030 bool Sema::IsDerivedFrom(SourceLocation Loc, QualType Derived, QualType Base) { 3031 if (!getLangOpts().CPlusPlus) 3032 return false; 3033 3034 CXXRecordDecl *DerivedRD = Derived->getAsCXXRecordDecl(); 3035 if (!DerivedRD) 3036 return false; 3037 3038 CXXRecordDecl *BaseRD = Base->getAsCXXRecordDecl(); 3039 if (!BaseRD) 3040 return false; 3041 3042 // If either the base or the derived type is invalid, don't try to 3043 // check whether one is derived from the other. 3044 if (BaseRD->isInvalidDecl() || DerivedRD->isInvalidDecl()) 3045 return false; 3046 3047 // FIXME: In a modules build, do we need the entire path to be visible for us 3048 // to be able to use the inheritance relationship? 3049 if (!isCompleteType(Loc, Derived) && !DerivedRD->isBeingDefined()) 3050 return false; 3051 3052 return DerivedRD->isDerivedFrom(BaseRD); 3053 } 3054 3055 /// Determine whether the type \p Derived is a C++ class that is 3056 /// derived from the type \p Base. 3057 bool Sema::IsDerivedFrom(SourceLocation Loc, QualType Derived, QualType Base, 3058 CXXBasePaths &Paths) { 3059 if (!getLangOpts().CPlusPlus) 3060 return false; 3061 3062 CXXRecordDecl *DerivedRD = Derived->getAsCXXRecordDecl(); 3063 if (!DerivedRD) 3064 return false; 3065 3066 CXXRecordDecl *BaseRD = Base->getAsCXXRecordDecl(); 3067 if (!BaseRD) 3068 return false; 3069 3070 if (!isCompleteType(Loc, Derived) && !DerivedRD->isBeingDefined()) 3071 return false; 3072 3073 return DerivedRD->isDerivedFrom(BaseRD, Paths); 3074 } 3075 3076 static void BuildBasePathArray(const CXXBasePath &Path, 3077 CXXCastPath &BasePathArray) { 3078 // We first go backward and check if we have a virtual base. 3079 // FIXME: It would be better if CXXBasePath had the base specifier for 3080 // the nearest virtual base. 3081 unsigned Start = 0; 3082 for (unsigned I = Path.size(); I != 0; --I) { 3083 if (Path[I - 1].Base->isVirtual()) { 3084 Start = I - 1; 3085 break; 3086 } 3087 } 3088 3089 // Now add all bases. 3090 for (unsigned I = Start, E = Path.size(); I != E; ++I) 3091 BasePathArray.push_back(const_cast<CXXBaseSpecifier*>(Path[I].Base)); 3092 } 3093 3094 3095 void Sema::BuildBasePathArray(const CXXBasePaths &Paths, 3096 CXXCastPath &BasePathArray) { 3097 assert(BasePathArray.empty() && "Base path array must be empty!"); 3098 assert(Paths.isRecordingPaths() && "Must record paths!"); 3099 return ::BuildBasePathArray(Paths.front(), BasePathArray); 3100 } 3101 /// CheckDerivedToBaseConversion - Check whether the Derived-to-Base 3102 /// conversion (where Derived and Base are class types) is 3103 /// well-formed, meaning that the conversion is unambiguous (and 3104 /// that all of the base classes are accessible). Returns true 3105 /// and emits a diagnostic if the code is ill-formed, returns false 3106 /// otherwise. Loc is the location where this routine should point to 3107 /// if there is an error, and Range is the source range to highlight 3108 /// if there is an error. 3109 /// 3110 /// If either InaccessibleBaseID or AmbiguousBaseConvID are 0, then the 3111 /// diagnostic for the respective type of error will be suppressed, but the 3112 /// check for ill-formed code will still be performed. 3113 bool 3114 Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base, 3115 unsigned InaccessibleBaseID, 3116 unsigned AmbiguousBaseConvID, 3117 SourceLocation Loc, SourceRange Range, 3118 DeclarationName Name, 3119 CXXCastPath *BasePath, 3120 bool IgnoreAccess) { 3121 // First, determine whether the path from Derived to Base is 3122 // ambiguous. This is slightly more expensive than checking whether 3123 // the Derived to Base conversion exists, because here we need to 3124 // explore multiple paths to determine if there is an ambiguity. 3125 CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true, 3126 /*DetectVirtual=*/false); 3127 bool DerivationOkay = IsDerivedFrom(Loc, Derived, Base, Paths); 3128 if (!DerivationOkay) 3129 return true; 3130 3131 const CXXBasePath *Path = nullptr; 3132 if (!Paths.isAmbiguous(Context.getCanonicalType(Base).getUnqualifiedType())) 3133 Path = &Paths.front(); 3134 3135 // For MSVC compatibility, check if Derived directly inherits from Base. Clang 3136 // warns about this hierarchy under -Winaccessible-base, but MSVC allows the 3137 // user to access such bases. 3138 if (!Path && getLangOpts().MSVCCompat) { 3139 for (const CXXBasePath &PossiblePath : Paths) { 3140 if (PossiblePath.size() == 1) { 3141 Path = &PossiblePath; 3142 if (AmbiguousBaseConvID) 3143 Diag(Loc, diag::ext_ms_ambiguous_direct_base) 3144 << Base << Derived << Range; 3145 break; 3146 } 3147 } 3148 } 3149 3150 if (Path) { 3151 if (!IgnoreAccess) { 3152 // Check that the base class can be accessed. 3153 switch ( 3154 CheckBaseClassAccess(Loc, Base, Derived, *Path, InaccessibleBaseID)) { 3155 case AR_inaccessible: 3156 return true; 3157 case AR_accessible: 3158 case AR_dependent: 3159 case AR_delayed: 3160 break; 3161 } 3162 } 3163 3164 // Build a base path if necessary. 3165 if (BasePath) 3166 ::BuildBasePathArray(*Path, *BasePath); 3167 return false; 3168 } 3169 3170 if (AmbiguousBaseConvID) { 3171 // We know that the derived-to-base conversion is ambiguous, and 3172 // we're going to produce a diagnostic. Perform the derived-to-base 3173 // search just one more time to compute all of the possible paths so 3174 // that we can print them out. This is more expensive than any of 3175 // the previous derived-to-base checks we've done, but at this point 3176 // performance isn't as much of an issue. 3177 Paths.clear(); 3178 Paths.setRecordingPaths(true); 3179 bool StillOkay = IsDerivedFrom(Loc, Derived, Base, Paths); 3180 assert(StillOkay && "Can only be used with a derived-to-base conversion"); 3181 (void)StillOkay; 3182 3183 // Build up a textual representation of the ambiguous paths, e.g., 3184 // D -> B -> A, that will be used to illustrate the ambiguous 3185 // conversions in the diagnostic. We only print one of the paths 3186 // to each base class subobject. 3187 std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths); 3188 3189 Diag(Loc, AmbiguousBaseConvID) 3190 << Derived << Base << PathDisplayStr << Range << Name; 3191 } 3192 return true; 3193 } 3194 3195 bool 3196 Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base, 3197 SourceLocation Loc, SourceRange Range, 3198 CXXCastPath *BasePath, 3199 bool IgnoreAccess) { 3200 return CheckDerivedToBaseConversion( 3201 Derived, Base, diag::err_upcast_to_inaccessible_base, 3202 diag::err_ambiguous_derived_to_base_conv, Loc, Range, DeclarationName(), 3203 BasePath, IgnoreAccess); 3204 } 3205 3206 3207 /// Builds a string representing ambiguous paths from a 3208 /// specific derived class to different subobjects of the same base 3209 /// class. 3210 /// 3211 /// This function builds a string that can be used in error messages 3212 /// to show the different paths that one can take through the 3213 /// inheritance hierarchy to go from the derived class to different 3214 /// subobjects of a base class. The result looks something like this: 3215 /// @code 3216 /// struct D -> struct B -> struct A 3217 /// struct D -> struct C -> struct A 3218 /// @endcode 3219 std::string Sema::getAmbiguousPathsDisplayString(CXXBasePaths &Paths) { 3220 std::string PathDisplayStr; 3221 std::set<unsigned> DisplayedPaths; 3222 for (CXXBasePaths::paths_iterator Path = Paths.begin(); 3223 Path != Paths.end(); ++Path) { 3224 if (DisplayedPaths.insert(Path->back().SubobjectNumber).second) { 3225 // We haven't displayed a path to this particular base 3226 // class subobject yet. 3227 PathDisplayStr += "\n "; 3228 PathDisplayStr += Context.getTypeDeclType(Paths.getOrigin()).getAsString(); 3229 for (CXXBasePath::const_iterator Element = Path->begin(); 3230 Element != Path->end(); ++Element) 3231 PathDisplayStr += " -> " + Element->Base->getType().getAsString(); 3232 } 3233 } 3234 3235 return PathDisplayStr; 3236 } 3237 3238 //===----------------------------------------------------------------------===// 3239 // C++ class member Handling 3240 //===----------------------------------------------------------------------===// 3241 3242 /// ActOnAccessSpecifier - Parsed an access specifier followed by a colon. 3243 bool Sema::ActOnAccessSpecifier(AccessSpecifier Access, SourceLocation ASLoc, 3244 SourceLocation ColonLoc, 3245 const ParsedAttributesView &Attrs) { 3246 assert(Access != AS_none && "Invalid kind for syntactic access specifier!"); 3247 AccessSpecDecl *ASDecl = AccessSpecDecl::Create(Context, Access, CurContext, 3248 ASLoc, ColonLoc); 3249 CurContext->addHiddenDecl(ASDecl); 3250 return ProcessAccessDeclAttributeList(ASDecl, Attrs); 3251 } 3252 3253 /// CheckOverrideControl - Check C++11 override control semantics. 3254 void Sema::CheckOverrideControl(NamedDecl *D) { 3255 if (D->isInvalidDecl()) 3256 return; 3257 3258 // We only care about "override" and "final" declarations. 3259 if (!D->hasAttr<OverrideAttr>() && !D->hasAttr<FinalAttr>()) 3260 return; 3261 3262 CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D); 3263 3264 // We can't check dependent instance methods. 3265 if (MD && MD->isInstance() && 3266 (MD->getParent()->hasAnyDependentBases() || 3267 MD->getType()->isDependentType())) 3268 return; 3269 3270 if (MD && !MD->isVirtual()) { 3271 // If we have a non-virtual method, check if it hides a virtual method. 3272 // (In that case, it's most likely the method has the wrong type.) 3273 SmallVector<CXXMethodDecl *, 8> OverloadedMethods; 3274 FindHiddenVirtualMethods(MD, OverloadedMethods); 3275 3276 if (!OverloadedMethods.empty()) { 3277 if (OverrideAttr *OA = D->getAttr<OverrideAttr>()) { 3278 Diag(OA->getLocation(), 3279 diag::override_keyword_hides_virtual_member_function) 3280 << "override" << (OverloadedMethods.size() > 1); 3281 } else if (FinalAttr *FA = D->getAttr<FinalAttr>()) { 3282 Diag(FA->getLocation(), 3283 diag::override_keyword_hides_virtual_member_function) 3284 << (FA->isSpelledAsSealed() ? "sealed" : "final") 3285 << (OverloadedMethods.size() > 1); 3286 } 3287 NoteHiddenVirtualMethods(MD, OverloadedMethods); 3288 MD->setInvalidDecl(); 3289 return; 3290 } 3291 // Fall through into the general case diagnostic. 3292 // FIXME: We might want to attempt typo correction here. 3293 } 3294 3295 if (!MD || !MD->isVirtual()) { 3296 if (OverrideAttr *OA = D->getAttr<OverrideAttr>()) { 3297 Diag(OA->getLocation(), 3298 diag::override_keyword_only_allowed_on_virtual_member_functions) 3299 << "override" << FixItHint::CreateRemoval(OA->getLocation()); 3300 D->dropAttr<OverrideAttr>(); 3301 } 3302 if (FinalAttr *FA = D->getAttr<FinalAttr>()) { 3303 Diag(FA->getLocation(), 3304 diag::override_keyword_only_allowed_on_virtual_member_functions) 3305 << (FA->isSpelledAsSealed() ? "sealed" : "final") 3306 << FixItHint::CreateRemoval(FA->getLocation()); 3307 D->dropAttr<FinalAttr>(); 3308 } 3309 return; 3310 } 3311 3312 // C++11 [class.virtual]p5: 3313 // If a function is marked with the virt-specifier override and 3314 // does not override a member function of a base class, the program is 3315 // ill-formed. 3316 bool HasOverriddenMethods = MD->size_overridden_methods() != 0; 3317 if (MD->hasAttr<OverrideAttr>() && !HasOverriddenMethods) 3318 Diag(MD->getLocation(), diag::err_function_marked_override_not_overriding) 3319 << MD->getDeclName(); 3320 } 3321 3322 void Sema::DiagnoseAbsenceOfOverrideControl(NamedDecl *D, bool Inconsistent) { 3323 if (D->isInvalidDecl() || D->hasAttr<OverrideAttr>()) 3324 return; 3325 CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D); 3326 if (!MD || MD->isImplicit() || MD->hasAttr<FinalAttr>()) 3327 return; 3328 3329 SourceLocation Loc = MD->getLocation(); 3330 SourceLocation SpellingLoc = Loc; 3331 if (getSourceManager().isMacroArgExpansion(Loc)) 3332 SpellingLoc = getSourceManager().getImmediateExpansionRange(Loc).getBegin(); 3333 SpellingLoc = getSourceManager().getSpellingLoc(SpellingLoc); 3334 if (SpellingLoc.isValid() && getSourceManager().isInSystemHeader(SpellingLoc)) 3335 return; 3336 3337 if (MD->size_overridden_methods() > 0) { 3338 auto EmitDiag = [&](unsigned DiagInconsistent, unsigned DiagSuggest) { 3339 unsigned DiagID = 3340 Inconsistent && !Diags.isIgnored(DiagInconsistent, MD->getLocation()) 3341 ? DiagInconsistent 3342 : DiagSuggest; 3343 Diag(MD->getLocation(), DiagID) << MD->getDeclName(); 3344 const CXXMethodDecl *OMD = *MD->begin_overridden_methods(); 3345 Diag(OMD->getLocation(), diag::note_overridden_virtual_function); 3346 }; 3347 if (isa<CXXDestructorDecl>(MD)) 3348 EmitDiag( 3349 diag::warn_inconsistent_destructor_marked_not_override_overriding, 3350 diag::warn_suggest_destructor_marked_not_override_overriding); 3351 else 3352 EmitDiag(diag::warn_inconsistent_function_marked_not_override_overriding, 3353 diag::warn_suggest_function_marked_not_override_overriding); 3354 } 3355 } 3356 3357 /// CheckIfOverriddenFunctionIsMarkedFinal - Checks whether a virtual member 3358 /// function overrides a virtual member function marked 'final', according to 3359 /// C++11 [class.virtual]p4. 3360 bool Sema::CheckIfOverriddenFunctionIsMarkedFinal(const CXXMethodDecl *New, 3361 const CXXMethodDecl *Old) { 3362 FinalAttr *FA = Old->getAttr<FinalAttr>(); 3363 if (!FA) 3364 return false; 3365 3366 Diag(New->getLocation(), diag::err_final_function_overridden) 3367 << New->getDeclName() 3368 << FA->isSpelledAsSealed(); 3369 Diag(Old->getLocation(), diag::note_overridden_virtual_function); 3370 return true; 3371 } 3372 3373 static bool InitializationHasSideEffects(const FieldDecl &FD) { 3374 const Type *T = FD.getType()->getBaseElementTypeUnsafe(); 3375 // FIXME: Destruction of ObjC lifetime types has side-effects. 3376 if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl()) 3377 return !RD->isCompleteDefinition() || 3378 !RD->hasTrivialDefaultConstructor() || 3379 !RD->hasTrivialDestructor(); 3380 return false; 3381 } 3382 3383 // Check if there is a field shadowing. 3384 void Sema::CheckShadowInheritedFields(const SourceLocation &Loc, 3385 DeclarationName FieldName, 3386 const CXXRecordDecl *RD, 3387 bool DeclIsField) { 3388 if (Diags.isIgnored(diag::warn_shadow_field, Loc)) 3389 return; 3390 3391 // To record a shadowed field in a base 3392 std::map<CXXRecordDecl*, NamedDecl*> Bases; 3393 auto FieldShadowed = [&](const CXXBaseSpecifier *Specifier, 3394 CXXBasePath &Path) { 3395 const auto Base = Specifier->getType()->getAsCXXRecordDecl(); 3396 // Record an ambiguous path directly 3397 if (Bases.find(Base) != Bases.end()) 3398 return true; 3399 for (const auto Field : Base->lookup(FieldName)) { 3400 if ((isa<FieldDecl>(Field) || isa<IndirectFieldDecl>(Field)) && 3401 Field->getAccess() != AS_private) { 3402 assert(Field->getAccess() != AS_none); 3403 assert(Bases.find(Base) == Bases.end()); 3404 Bases[Base] = Field; 3405 return true; 3406 } 3407 } 3408 return false; 3409 }; 3410 3411 CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true, 3412 /*DetectVirtual=*/true); 3413 if (!RD->lookupInBases(FieldShadowed, Paths)) 3414 return; 3415 3416 for (const auto &P : Paths) { 3417 auto Base = P.back().Base->getType()->getAsCXXRecordDecl(); 3418 auto It = Bases.find(Base); 3419 // Skip duplicated bases 3420 if (It == Bases.end()) 3421 continue; 3422 auto BaseField = It->second; 3423 assert(BaseField->getAccess() != AS_private); 3424 if (AS_none != 3425 CXXRecordDecl::MergeAccess(P.Access, BaseField->getAccess())) { 3426 Diag(Loc, diag::warn_shadow_field) 3427 << FieldName << RD << Base << DeclIsField; 3428 Diag(BaseField->getLocation(), diag::note_shadow_field); 3429 Bases.erase(It); 3430 } 3431 } 3432 } 3433 3434 /// ActOnCXXMemberDeclarator - This is invoked when a C++ class member 3435 /// declarator is parsed. 'AS' is the access specifier, 'BW' specifies the 3436 /// bitfield width if there is one, 'InitExpr' specifies the initializer if 3437 /// one has been parsed, and 'InitStyle' is set if an in-class initializer is 3438 /// present (but parsing it has been deferred). 3439 NamedDecl * 3440 Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, 3441 MultiTemplateParamsArg TemplateParameterLists, 3442 Expr *BW, const VirtSpecifiers &VS, 3443 InClassInitStyle InitStyle) { 3444 const DeclSpec &DS = D.getDeclSpec(); 3445 DeclarationNameInfo NameInfo = GetNameForDeclarator(D); 3446 DeclarationName Name = NameInfo.getName(); 3447 SourceLocation Loc = NameInfo.getLoc(); 3448 3449 // For anonymous bitfields, the location should point to the type. 3450 if (Loc.isInvalid()) 3451 Loc = D.getBeginLoc(); 3452 3453 Expr *BitWidth = static_cast<Expr*>(BW); 3454 3455 assert(isa<CXXRecordDecl>(CurContext)); 3456 assert(!DS.isFriendSpecified()); 3457 3458 bool isFunc = D.isDeclarationOfFunction(); 3459 const ParsedAttr *MSPropertyAttr = 3460 D.getDeclSpec().getAttributes().getMSPropertyAttr(); 3461 3462 if (cast<CXXRecordDecl>(CurContext)->isInterface()) { 3463 // The Microsoft extension __interface only permits public member functions 3464 // and prohibits constructors, destructors, operators, non-public member 3465 // functions, static methods and data members. 3466 unsigned InvalidDecl; 3467 bool ShowDeclName = true; 3468 if (!isFunc && 3469 (DS.getStorageClassSpec() == DeclSpec::SCS_typedef || MSPropertyAttr)) 3470 InvalidDecl = 0; 3471 else if (!isFunc) 3472 InvalidDecl = 1; 3473 else if (AS != AS_public) 3474 InvalidDecl = 2; 3475 else if (DS.getStorageClassSpec() == DeclSpec::SCS_static) 3476 InvalidDecl = 3; 3477 else switch (Name.getNameKind()) { 3478 case DeclarationName::CXXConstructorName: 3479 InvalidDecl = 4; 3480 ShowDeclName = false; 3481 break; 3482 3483 case DeclarationName::CXXDestructorName: 3484 InvalidDecl = 5; 3485 ShowDeclName = false; 3486 break; 3487 3488 case DeclarationName::CXXOperatorName: 3489 case DeclarationName::CXXConversionFunctionName: 3490 InvalidDecl = 6; 3491 break; 3492 3493 default: 3494 InvalidDecl = 0; 3495 break; 3496 } 3497 3498 if (InvalidDecl) { 3499 if (ShowDeclName) 3500 Diag(Loc, diag::err_invalid_member_in_interface) 3501 << (InvalidDecl-1) << Name; 3502 else 3503 Diag(Loc, diag::err_invalid_member_in_interface) 3504 << (InvalidDecl-1) << ""; 3505 return nullptr; 3506 } 3507 } 3508 3509 // C++ 9.2p6: A member shall not be declared to have automatic storage 3510 // duration (auto, register) or with the extern storage-class-specifier. 3511 // C++ 7.1.1p8: The mutable specifier can be applied only to names of class 3512 // data members and cannot be applied to names declared const or static, 3513 // and cannot be applied to reference members. 3514 switch (DS.getStorageClassSpec()) { 3515 case DeclSpec::SCS_unspecified: 3516 case DeclSpec::SCS_typedef: 3517 case DeclSpec::SCS_static: 3518 break; 3519 case DeclSpec::SCS_mutable: 3520 if (isFunc) { 3521 Diag(DS.getStorageClassSpecLoc(), diag::err_mutable_function); 3522 3523 // FIXME: It would be nicer if the keyword was ignored only for this 3524 // declarator. Otherwise we could get follow-up errors. 3525 D.getMutableDeclSpec().ClearStorageClassSpecs(); 3526 } 3527 break; 3528 default: 3529 Diag(DS.getStorageClassSpecLoc(), 3530 diag::err_storageclass_invalid_for_member); 3531 D.getMutableDeclSpec().ClearStorageClassSpecs(); 3532 break; 3533 } 3534 3535 bool isInstField = ((DS.getStorageClassSpec() == DeclSpec::SCS_unspecified || 3536 DS.getStorageClassSpec() == DeclSpec::SCS_mutable) && 3537 !isFunc); 3538 3539 if (DS.hasConstexprSpecifier() && isInstField) { 3540 SemaDiagnosticBuilder B = 3541 Diag(DS.getConstexprSpecLoc(), diag::err_invalid_constexpr_member); 3542 SourceLocation ConstexprLoc = DS.getConstexprSpecLoc(); 3543 if (InitStyle == ICIS_NoInit) { 3544 B << 0 << 0; 3545 if (D.getDeclSpec().getTypeQualifiers() & DeclSpec::TQ_const) 3546 B << FixItHint::CreateRemoval(ConstexprLoc); 3547 else { 3548 B << FixItHint::CreateReplacement(ConstexprLoc, "const"); 3549 D.getMutableDeclSpec().ClearConstexprSpec(); 3550 const char *PrevSpec; 3551 unsigned DiagID; 3552 bool Failed = D.getMutableDeclSpec().SetTypeQual( 3553 DeclSpec::TQ_const, ConstexprLoc, PrevSpec, DiagID, getLangOpts()); 3554 (void)Failed; 3555 assert(!Failed && "Making a constexpr member const shouldn't fail"); 3556 } 3557 } else { 3558 B << 1; 3559 const char *PrevSpec; 3560 unsigned DiagID; 3561 if (D.getMutableDeclSpec().SetStorageClassSpec( 3562 *this, DeclSpec::SCS_static, ConstexprLoc, PrevSpec, DiagID, 3563 Context.getPrintingPolicy())) { 3564 assert(DS.getStorageClassSpec() == DeclSpec::SCS_mutable && 3565 "This is the only DeclSpec that should fail to be applied"); 3566 B << 1; 3567 } else { 3568 B << 0 << FixItHint::CreateInsertion(ConstexprLoc, "static "); 3569 isInstField = false; 3570 } 3571 } 3572 } 3573 3574 NamedDecl *Member; 3575 if (isInstField) { 3576 CXXScopeSpec &SS = D.getCXXScopeSpec(); 3577 3578 // Data members must have identifiers for names. 3579 if (!Name.isIdentifier()) { 3580 Diag(Loc, diag::err_bad_variable_name) 3581 << Name; 3582 return nullptr; 3583 } 3584 3585 IdentifierInfo *II = Name.getAsIdentifierInfo(); 3586 3587 // Member field could not be with "template" keyword. 3588 // So TemplateParameterLists should be empty in this case. 3589 if (TemplateParameterLists.size()) { 3590 TemplateParameterList* TemplateParams = TemplateParameterLists[0]; 3591 if (TemplateParams->size()) { 3592 // There is no such thing as a member field template. 3593 Diag(D.getIdentifierLoc(), diag::err_template_member) 3594 << II 3595 << SourceRange(TemplateParams->getTemplateLoc(), 3596 TemplateParams->getRAngleLoc()); 3597 } else { 3598 // There is an extraneous 'template<>' for this member. 3599 Diag(TemplateParams->getTemplateLoc(), 3600 diag::err_template_member_noparams) 3601 << II 3602 << SourceRange(TemplateParams->getTemplateLoc(), 3603 TemplateParams->getRAngleLoc()); 3604 } 3605 return nullptr; 3606 } 3607 3608 if (D.getName().getKind() == UnqualifiedIdKind::IK_TemplateId) { 3609 Diag(D.getIdentifierLoc(), diag::err_member_with_template_arguments) 3610 << II 3611 << SourceRange(D.getName().TemplateId->LAngleLoc, 3612 D.getName().TemplateId->RAngleLoc) 3613 << D.getName().TemplateId->LAngleLoc; 3614 D.SetIdentifier(II, Loc); 3615 } 3616 3617 if (SS.isSet() && !SS.isInvalid()) { 3618 // The user provided a superfluous scope specifier inside a class 3619 // definition: 3620 // 3621 // class X { 3622 // int X::member; 3623 // }; 3624 if (DeclContext *DC = computeDeclContext(SS, false)) 3625 diagnoseQualifiedDeclaration(SS, DC, Name, D.getIdentifierLoc(), 3626 D.getName().getKind() == 3627 UnqualifiedIdKind::IK_TemplateId); 3628 else 3629 Diag(D.getIdentifierLoc(), diag::err_member_qualification) 3630 << Name << SS.getRange(); 3631 3632 SS.clear(); 3633 } 3634 3635 if (MSPropertyAttr) { 3636 Member = HandleMSProperty(S, cast<CXXRecordDecl>(CurContext), Loc, D, 3637 BitWidth, InitStyle, AS, *MSPropertyAttr); 3638 if (!Member) 3639 return nullptr; 3640 isInstField = false; 3641 } else { 3642 Member = HandleField(S, cast<CXXRecordDecl>(CurContext), Loc, D, 3643 BitWidth, InitStyle, AS); 3644 if (!Member) 3645 return nullptr; 3646 } 3647 3648 CheckShadowInheritedFields(Loc, Name, cast<CXXRecordDecl>(CurContext)); 3649 } else { 3650 Member = HandleDeclarator(S, D, TemplateParameterLists); 3651 if (!Member) 3652 return nullptr; 3653 3654 // Non-instance-fields can't have a bitfield. 3655 if (BitWidth) { 3656 if (Member->isInvalidDecl()) { 3657 // don't emit another diagnostic. 3658 } else if (isa<VarDecl>(Member) || isa<VarTemplateDecl>(Member)) { 3659 // C++ 9.6p3: A bit-field shall not be a static member. 3660 // "static member 'A' cannot be a bit-field" 3661 Diag(Loc, diag::err_static_not_bitfield) 3662 << Name << BitWidth->getSourceRange(); 3663 } else if (isa<TypedefDecl>(Member)) { 3664 // "typedef member 'x' cannot be a bit-field" 3665 Diag(Loc, diag::err_typedef_not_bitfield) 3666 << Name << BitWidth->getSourceRange(); 3667 } else { 3668 // A function typedef ("typedef int f(); f a;"). 3669 // C++ 9.6p3: A bit-field shall have integral or enumeration type. 3670 Diag(Loc, diag::err_not_integral_type_bitfield) 3671 << Name << cast<ValueDecl>(Member)->getType() 3672 << BitWidth->getSourceRange(); 3673 } 3674 3675 BitWidth = nullptr; 3676 Member->setInvalidDecl(); 3677 } 3678 3679 NamedDecl *NonTemplateMember = Member; 3680 if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(Member)) 3681 NonTemplateMember = FunTmpl->getTemplatedDecl(); 3682 else if (VarTemplateDecl *VarTmpl = dyn_cast<VarTemplateDecl>(Member)) 3683 NonTemplateMember = VarTmpl->getTemplatedDecl(); 3684 3685 Member->setAccess(AS); 3686 3687 // If we have declared a member function template or static data member 3688 // template, set the access of the templated declaration as well. 3689 if (NonTemplateMember != Member) 3690 NonTemplateMember->setAccess(AS); 3691 3692 // C++ [temp.deduct.guide]p3: 3693 // A deduction guide [...] for a member class template [shall be 3694 // declared] with the same access [as the template]. 3695 if (auto *DG = dyn_cast<CXXDeductionGuideDecl>(NonTemplateMember)) { 3696 auto *TD = DG->getDeducedTemplate(); 3697 // Access specifiers are only meaningful if both the template and the 3698 // deduction guide are from the same scope. 3699 if (AS != TD->getAccess() && 3700 TD->getDeclContext()->getRedeclContext()->Equals( 3701 DG->getDeclContext()->getRedeclContext())) { 3702 Diag(DG->getBeginLoc(), diag::err_deduction_guide_wrong_access); 3703 Diag(TD->getBeginLoc(), diag::note_deduction_guide_template_access) 3704 << TD->getAccess(); 3705 const AccessSpecDecl *LastAccessSpec = nullptr; 3706 for (const auto *D : cast<CXXRecordDecl>(CurContext)->decls()) { 3707 if (const auto *AccessSpec = dyn_cast<AccessSpecDecl>(D)) 3708 LastAccessSpec = AccessSpec; 3709 } 3710 assert(LastAccessSpec && "differing access with no access specifier"); 3711 Diag(LastAccessSpec->getBeginLoc(), diag::note_deduction_guide_access) 3712 << AS; 3713 } 3714 } 3715 } 3716 3717 if (VS.isOverrideSpecified()) 3718 Member->addAttr(OverrideAttr::Create(Context, VS.getOverrideLoc())); 3719 if (VS.isFinalSpecified()) 3720 Member->addAttr(FinalAttr::Create(Context, VS.getFinalLoc(), 3721 VS.isFinalSpelledSealed() 3722 ? FinalAttr::Keyword_sealed 3723 : FinalAttr::Keyword_final)); 3724 3725 if (VS.getLastLocation().isValid()) { 3726 // Update the end location of a method that has a virt-specifiers. 3727 if (CXXMethodDecl *MD = dyn_cast_or_null<CXXMethodDecl>(Member)) 3728 MD->setRangeEnd(VS.getLastLocation()); 3729 } 3730 3731 CheckOverrideControl(Member); 3732 3733 assert((Name || isInstField) && "No identifier for non-field ?"); 3734 3735 if (isInstField) { 3736 FieldDecl *FD = cast<FieldDecl>(Member); 3737 FieldCollector->Add(FD); 3738 3739 if (!Diags.isIgnored(diag::warn_unused_private_field, FD->getLocation())) { 3740 // Remember all explicit private FieldDecls that have a name, no side 3741 // effects and are not part of a dependent type declaration. 3742 3743 auto DeclHasUnusedAttr = [](const QualType &T) { 3744 if (const TagDecl *TD = T->getAsTagDecl()) 3745 return TD->hasAttr<UnusedAttr>(); 3746 if (const TypedefType *TDT = T->getAs<TypedefType>()) 3747 return TDT->getDecl()->hasAttr<UnusedAttr>(); 3748 return false; 3749 }; 3750 3751 if (!FD->isImplicit() && FD->getDeclName() && 3752 FD->getAccess() == AS_private && 3753 !FD->hasAttr<UnusedAttr>() && 3754 !FD->getParent()->isDependentContext() && 3755 !DeclHasUnusedAttr(FD->getType()) && 3756 !InitializationHasSideEffects(*FD)) 3757 UnusedPrivateFields.insert(FD); 3758 } 3759 } 3760 3761 return Member; 3762 } 3763 3764 namespace { 3765 class UninitializedFieldVisitor 3766 : public EvaluatedExprVisitor<UninitializedFieldVisitor> { 3767 Sema &S; 3768 // List of Decls to generate a warning on. Also remove Decls that become 3769 // initialized. 3770 llvm::SmallPtrSetImpl<ValueDecl*> &Decls; 3771 // List of base classes of the record. Classes are removed after their 3772 // initializers. 3773 llvm::SmallPtrSetImpl<QualType> &BaseClasses; 3774 // Vector of decls to be removed from the Decl set prior to visiting the 3775 // nodes. These Decls may have been initialized in the prior initializer. 3776 llvm::SmallVector<ValueDecl*, 4> DeclsToRemove; 3777 // If non-null, add a note to the warning pointing back to the constructor. 3778 const CXXConstructorDecl *Constructor; 3779 // Variables to hold state when processing an initializer list. When 3780 // InitList is true, special case initialization of FieldDecls matching 3781 // InitListFieldDecl. 3782 bool InitList; 3783 FieldDecl *InitListFieldDecl; 3784 llvm::SmallVector<unsigned, 4> InitFieldIndex; 3785 3786 public: 3787 typedef EvaluatedExprVisitor<UninitializedFieldVisitor> Inherited; 3788 UninitializedFieldVisitor(Sema &S, 3789 llvm::SmallPtrSetImpl<ValueDecl*> &Decls, 3790 llvm::SmallPtrSetImpl<QualType> &BaseClasses) 3791 : Inherited(S.Context), S(S), Decls(Decls), BaseClasses(BaseClasses), 3792 Constructor(nullptr), InitList(false), InitListFieldDecl(nullptr) {} 3793 3794 // Returns true if the use of ME is not an uninitialized use. 3795 bool IsInitListMemberExprInitialized(MemberExpr *ME, 3796 bool CheckReferenceOnly) { 3797 llvm::SmallVector<FieldDecl*, 4> Fields; 3798 bool ReferenceField = false; 3799 while (ME) { 3800 FieldDecl *FD = dyn_cast<FieldDecl>(ME->getMemberDecl()); 3801 if (!FD) 3802 return false; 3803 Fields.push_back(FD); 3804 if (FD->getType()->isReferenceType()) 3805 ReferenceField = true; 3806 ME = dyn_cast<MemberExpr>(ME->getBase()->IgnoreParenImpCasts()); 3807 } 3808 3809 // Binding a reference to an uninitialized field is not an 3810 // uninitialized use. 3811 if (CheckReferenceOnly && !ReferenceField) 3812 return true; 3813 3814 llvm::SmallVector<unsigned, 4> UsedFieldIndex; 3815 // Discard the first field since it is the field decl that is being 3816 // initialized. 3817 for (const FieldDecl *FD : llvm::drop_begin(llvm::reverse(Fields))) 3818 UsedFieldIndex.push_back(FD->getFieldIndex()); 3819 3820 for (auto UsedIter = UsedFieldIndex.begin(), 3821 UsedEnd = UsedFieldIndex.end(), 3822 OrigIter = InitFieldIndex.begin(), 3823 OrigEnd = InitFieldIndex.end(); 3824 UsedIter != UsedEnd && OrigIter != OrigEnd; ++UsedIter, ++OrigIter) { 3825 if (*UsedIter < *OrigIter) 3826 return true; 3827 if (*UsedIter > *OrigIter) 3828 break; 3829 } 3830 3831 return false; 3832 } 3833 3834 void HandleMemberExpr(MemberExpr *ME, bool CheckReferenceOnly, 3835 bool AddressOf) { 3836 if (isa<EnumConstantDecl>(ME->getMemberDecl())) 3837 return; 3838 3839 // FieldME is the inner-most MemberExpr that is not an anonymous struct 3840 // or union. 3841 MemberExpr *FieldME = ME; 3842 3843 bool AllPODFields = FieldME->getType().isPODType(S.Context); 3844 3845 Expr *Base = ME; 3846 while (MemberExpr *SubME = 3847 dyn_cast<MemberExpr>(Base->IgnoreParenImpCasts())) { 3848 3849 if (isa<VarDecl>(SubME->getMemberDecl())) 3850 return; 3851 3852 if (FieldDecl *FD = dyn_cast<FieldDecl>(SubME->getMemberDecl())) 3853 if (!FD->isAnonymousStructOrUnion()) 3854 FieldME = SubME; 3855 3856 if (!FieldME->getType().isPODType(S.Context)) 3857 AllPODFields = false; 3858 3859 Base = SubME->getBase(); 3860 } 3861 3862 if (!isa<CXXThisExpr>(Base->IgnoreParenImpCasts())) { 3863 Visit(Base); 3864 return; 3865 } 3866 3867 if (AddressOf && AllPODFields) 3868 return; 3869 3870 ValueDecl* FoundVD = FieldME->getMemberDecl(); 3871 3872 if (ImplicitCastExpr *BaseCast = dyn_cast<ImplicitCastExpr>(Base)) { 3873 while (isa<ImplicitCastExpr>(BaseCast->getSubExpr())) { 3874 BaseCast = cast<ImplicitCastExpr>(BaseCast->getSubExpr()); 3875 } 3876 3877 if (BaseCast->getCastKind() == CK_UncheckedDerivedToBase) { 3878 QualType T = BaseCast->getType(); 3879 if (T->isPointerType() && 3880 BaseClasses.count(T->getPointeeType())) { 3881 S.Diag(FieldME->getExprLoc(), diag::warn_base_class_is_uninit) 3882 << T->getPointeeType() << FoundVD; 3883 } 3884 } 3885 } 3886 3887 if (!Decls.count(FoundVD)) 3888 return; 3889 3890 const bool IsReference = FoundVD->getType()->isReferenceType(); 3891 3892 if (InitList && !AddressOf && FoundVD == InitListFieldDecl) { 3893 // Special checking for initializer lists. 3894 if (IsInitListMemberExprInitialized(ME, CheckReferenceOnly)) { 3895 return; 3896 } 3897 } else { 3898 // Prevent double warnings on use of unbounded references. 3899 if (CheckReferenceOnly && !IsReference) 3900 return; 3901 } 3902 3903 unsigned diag = IsReference 3904 ? diag::warn_reference_field_is_uninit 3905 : diag::warn_field_is_uninit; 3906 S.Diag(FieldME->getExprLoc(), diag) << FoundVD; 3907 if (Constructor) 3908 S.Diag(Constructor->getLocation(), 3909 diag::note_uninit_in_this_constructor) 3910 << (Constructor->isDefaultConstructor() && Constructor->isImplicit()); 3911 3912 } 3913 3914 void HandleValue(Expr *E, bool AddressOf) { 3915 E = E->IgnoreParens(); 3916 3917 if (MemberExpr *ME = dyn_cast<MemberExpr>(E)) { 3918 HandleMemberExpr(ME, false /*CheckReferenceOnly*/, 3919 AddressOf /*AddressOf*/); 3920 return; 3921 } 3922 3923 if (ConditionalOperator *CO = dyn_cast<ConditionalOperator>(E)) { 3924 Visit(CO->getCond()); 3925 HandleValue(CO->getTrueExpr(), AddressOf); 3926 HandleValue(CO->getFalseExpr(), AddressOf); 3927 return; 3928 } 3929 3930 if (BinaryConditionalOperator *BCO = 3931 dyn_cast<BinaryConditionalOperator>(E)) { 3932 Visit(BCO->getCond()); 3933 HandleValue(BCO->getFalseExpr(), AddressOf); 3934 return; 3935 } 3936 3937 if (OpaqueValueExpr *OVE = dyn_cast<OpaqueValueExpr>(E)) { 3938 HandleValue(OVE->getSourceExpr(), AddressOf); 3939 return; 3940 } 3941 3942 if (BinaryOperator *BO = dyn_cast<BinaryOperator>(E)) { 3943 switch (BO->getOpcode()) { 3944 default: 3945 break; 3946 case(BO_PtrMemD): 3947 case(BO_PtrMemI): 3948 HandleValue(BO->getLHS(), AddressOf); 3949 Visit(BO->getRHS()); 3950 return; 3951 case(BO_Comma): 3952 Visit(BO->getLHS()); 3953 HandleValue(BO->getRHS(), AddressOf); 3954 return; 3955 } 3956 } 3957 3958 Visit(E); 3959 } 3960 3961 void CheckInitListExpr(InitListExpr *ILE) { 3962 InitFieldIndex.push_back(0); 3963 for (auto *Child : ILE->children()) { 3964 if (InitListExpr *SubList = dyn_cast<InitListExpr>(Child)) { 3965 CheckInitListExpr(SubList); 3966 } else { 3967 Visit(Child); 3968 } 3969 ++InitFieldIndex.back(); 3970 } 3971 InitFieldIndex.pop_back(); 3972 } 3973 3974 void CheckInitializer(Expr *E, const CXXConstructorDecl *FieldConstructor, 3975 FieldDecl *Field, const Type *BaseClass) { 3976 // Remove Decls that may have been initialized in the previous 3977 // initializer. 3978 for (ValueDecl* VD : DeclsToRemove) 3979 Decls.erase(VD); 3980 DeclsToRemove.clear(); 3981 3982 Constructor = FieldConstructor; 3983 InitListExpr *ILE = dyn_cast<InitListExpr>(E); 3984 3985 if (ILE && Field) { 3986 InitList = true; 3987 InitListFieldDecl = Field; 3988 InitFieldIndex.clear(); 3989 CheckInitListExpr(ILE); 3990 } else { 3991 InitList = false; 3992 Visit(E); 3993 } 3994 3995 if (Field) 3996 Decls.erase(Field); 3997 if (BaseClass) 3998 BaseClasses.erase(BaseClass->getCanonicalTypeInternal()); 3999 } 4000 4001 void VisitMemberExpr(MemberExpr *ME) { 4002 // All uses of unbounded reference fields will warn. 4003 HandleMemberExpr(ME, true /*CheckReferenceOnly*/, false /*AddressOf*/); 4004 } 4005 4006 void VisitImplicitCastExpr(ImplicitCastExpr *E) { 4007 if (E->getCastKind() == CK_LValueToRValue) { 4008 HandleValue(E->getSubExpr(), false /*AddressOf*/); 4009 return; 4010 } 4011 4012 Inherited::VisitImplicitCastExpr(E); 4013 } 4014 4015 void VisitCXXConstructExpr(CXXConstructExpr *E) { 4016 if (E->getConstructor()->isCopyConstructor()) { 4017 Expr *ArgExpr = E->getArg(0); 4018 if (InitListExpr *ILE = dyn_cast<InitListExpr>(ArgExpr)) 4019 if (ILE->getNumInits() == 1) 4020 ArgExpr = ILE->getInit(0); 4021 if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(ArgExpr)) 4022 if (ICE->getCastKind() == CK_NoOp) 4023 ArgExpr = ICE->getSubExpr(); 4024 HandleValue(ArgExpr, false /*AddressOf*/); 4025 return; 4026 } 4027 Inherited::VisitCXXConstructExpr(E); 4028 } 4029 4030 void VisitCXXMemberCallExpr(CXXMemberCallExpr *E) { 4031 Expr *Callee = E->getCallee(); 4032 if (isa<MemberExpr>(Callee)) { 4033 HandleValue(Callee, false /*AddressOf*/); 4034 for (auto *Arg : E->arguments()) 4035 Visit(Arg); 4036 return; 4037 } 4038 4039 Inherited::VisitCXXMemberCallExpr(E); 4040 } 4041 4042 void VisitCallExpr(CallExpr *E) { 4043 // Treat std::move as a use. 4044 if (E->isCallToStdMove()) { 4045 HandleValue(E->getArg(0), /*AddressOf=*/false); 4046 return; 4047 } 4048 4049 Inherited::VisitCallExpr(E); 4050 } 4051 4052 void VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E) { 4053 Expr *Callee = E->getCallee(); 4054 4055 if (isa<UnresolvedLookupExpr>(Callee)) 4056 return Inherited::VisitCXXOperatorCallExpr(E); 4057 4058 Visit(Callee); 4059 for (auto *Arg : E->arguments()) 4060 HandleValue(Arg->IgnoreParenImpCasts(), false /*AddressOf*/); 4061 } 4062 4063 void VisitBinaryOperator(BinaryOperator *E) { 4064 // If a field assignment is detected, remove the field from the 4065 // uninitiailized field set. 4066 if (E->getOpcode() == BO_Assign) 4067 if (MemberExpr *ME = dyn_cast<MemberExpr>(E->getLHS())) 4068 if (FieldDecl *FD = dyn_cast<FieldDecl>(ME->getMemberDecl())) 4069 if (!FD->getType()->isReferenceType()) 4070 DeclsToRemove.push_back(FD); 4071 4072 if (E->isCompoundAssignmentOp()) { 4073 HandleValue(E->getLHS(), false /*AddressOf*/); 4074 Visit(E->getRHS()); 4075 return; 4076 } 4077 4078 Inherited::VisitBinaryOperator(E); 4079 } 4080 4081 void VisitUnaryOperator(UnaryOperator *E) { 4082 if (E->isIncrementDecrementOp()) { 4083 HandleValue(E->getSubExpr(), false /*AddressOf*/); 4084 return; 4085 } 4086 if (E->getOpcode() == UO_AddrOf) { 4087 if (MemberExpr *ME = dyn_cast<MemberExpr>(E->getSubExpr())) { 4088 HandleValue(ME->getBase(), true /*AddressOf*/); 4089 return; 4090 } 4091 } 4092 4093 Inherited::VisitUnaryOperator(E); 4094 } 4095 }; 4096 4097 // Diagnose value-uses of fields to initialize themselves, e.g. 4098 // foo(foo) 4099 // where foo is not also a parameter to the constructor. 4100 // Also diagnose across field uninitialized use such as 4101 // x(y), y(x) 4102 // TODO: implement -Wuninitialized and fold this into that framework. 4103 static void DiagnoseUninitializedFields( 4104 Sema &SemaRef, const CXXConstructorDecl *Constructor) { 4105 4106 if (SemaRef.getDiagnostics().isIgnored(diag::warn_field_is_uninit, 4107 Constructor->getLocation())) { 4108 return; 4109 } 4110 4111 if (Constructor->isInvalidDecl()) 4112 return; 4113 4114 const CXXRecordDecl *RD = Constructor->getParent(); 4115 4116 if (RD->isDependentContext()) 4117 return; 4118 4119 // Holds fields that are uninitialized. 4120 llvm::SmallPtrSet<ValueDecl*, 4> UninitializedFields; 4121 4122 // At the beginning, all fields are uninitialized. 4123 for (auto *I : RD->decls()) { 4124 if (auto *FD = dyn_cast<FieldDecl>(I)) { 4125 UninitializedFields.insert(FD); 4126 } else if (auto *IFD = dyn_cast<IndirectFieldDecl>(I)) { 4127 UninitializedFields.insert(IFD->getAnonField()); 4128 } 4129 } 4130 4131 llvm::SmallPtrSet<QualType, 4> UninitializedBaseClasses; 4132 for (const auto &I : RD->bases()) 4133 UninitializedBaseClasses.insert(I.getType().getCanonicalType()); 4134 4135 if (UninitializedFields.empty() && UninitializedBaseClasses.empty()) 4136 return; 4137 4138 UninitializedFieldVisitor UninitializedChecker(SemaRef, 4139 UninitializedFields, 4140 UninitializedBaseClasses); 4141 4142 for (const auto *FieldInit : Constructor->inits()) { 4143 if (UninitializedFields.empty() && UninitializedBaseClasses.empty()) 4144 break; 4145 4146 Expr *InitExpr = FieldInit->getInit(); 4147 if (!InitExpr) 4148 continue; 4149 4150 if (CXXDefaultInitExpr *Default = 4151 dyn_cast<CXXDefaultInitExpr>(InitExpr)) { 4152 InitExpr = Default->getExpr(); 4153 if (!InitExpr) 4154 continue; 4155 // In class initializers will point to the constructor. 4156 UninitializedChecker.CheckInitializer(InitExpr, Constructor, 4157 FieldInit->getAnyMember(), 4158 FieldInit->getBaseClass()); 4159 } else { 4160 UninitializedChecker.CheckInitializer(InitExpr, nullptr, 4161 FieldInit->getAnyMember(), 4162 FieldInit->getBaseClass()); 4163 } 4164 } 4165 } 4166 } // namespace 4167 4168 /// Enter a new C++ default initializer scope. After calling this, the 4169 /// caller must call \ref ActOnFinishCXXInClassMemberInitializer, even if 4170 /// parsing or instantiating the initializer failed. 4171 void Sema::ActOnStartCXXInClassMemberInitializer() { 4172 // Create a synthetic function scope to represent the call to the constructor 4173 // that notionally surrounds a use of this initializer. 4174 PushFunctionScope(); 4175 } 4176 4177 void Sema::ActOnStartTrailingRequiresClause(Scope *S, Declarator &D) { 4178 if (!D.isFunctionDeclarator()) 4179 return; 4180 auto &FTI = D.getFunctionTypeInfo(); 4181 if (!FTI.Params) 4182 return; 4183 for (auto &Param : ArrayRef<DeclaratorChunk::ParamInfo>(FTI.Params, 4184 FTI.NumParams)) { 4185 auto *ParamDecl = cast<NamedDecl>(Param.Param); 4186 if (ParamDecl->getDeclName()) 4187 PushOnScopeChains(ParamDecl, S, /*AddToContext=*/false); 4188 } 4189 } 4190 4191 ExprResult Sema::ActOnFinishTrailingRequiresClause(ExprResult ConstraintExpr) { 4192 return ActOnRequiresClause(ConstraintExpr); 4193 } 4194 4195 ExprResult Sema::ActOnRequiresClause(ExprResult ConstraintExpr) { 4196 if (ConstraintExpr.isInvalid()) 4197 return ExprError(); 4198 4199 ConstraintExpr = CorrectDelayedTyposInExpr(ConstraintExpr); 4200 if (ConstraintExpr.isInvalid()) 4201 return ExprError(); 4202 4203 if (DiagnoseUnexpandedParameterPack(ConstraintExpr.get(), 4204 UPPC_RequiresClause)) 4205 return ExprError(); 4206 4207 return ConstraintExpr; 4208 } 4209 4210 ExprResult Sema::ConvertMemberDefaultInitExpression(FieldDecl *FD, 4211 Expr *InitExpr, 4212 SourceLocation InitLoc) { 4213 InitializedEntity Entity = 4214 InitializedEntity::InitializeMemberFromDefaultMemberInitializer(FD); 4215 InitializationKind Kind = 4216 FD->getInClassInitStyle() == ICIS_ListInit 4217 ? InitializationKind::CreateDirectList(InitExpr->getBeginLoc(), 4218 InitExpr->getBeginLoc(), 4219 InitExpr->getEndLoc()) 4220 : InitializationKind::CreateCopy(InitExpr->getBeginLoc(), InitLoc); 4221 InitializationSequence Seq(*this, Entity, Kind, InitExpr); 4222 return Seq.Perform(*this, Entity, Kind, InitExpr); 4223 } 4224 4225 /// This is invoked after parsing an in-class initializer for a 4226 /// non-static C++ class member, and after instantiating an in-class initializer 4227 /// in a class template. Such actions are deferred until the class is complete. 4228 void Sema::ActOnFinishCXXInClassMemberInitializer(Decl *D, 4229 SourceLocation InitLoc, 4230 Expr *InitExpr) { 4231 // Pop the notional constructor scope we created earlier. 4232 PopFunctionScopeInfo(nullptr, D); 4233 4234 FieldDecl *FD = dyn_cast<FieldDecl>(D); 4235 assert((isa<MSPropertyDecl>(D) || FD->getInClassInitStyle() != ICIS_NoInit) && 4236 "must set init style when field is created"); 4237 4238 if (!InitExpr) { 4239 D->setInvalidDecl(); 4240 if (FD) 4241 FD->removeInClassInitializer(); 4242 return; 4243 } 4244 4245 if (DiagnoseUnexpandedParameterPack(InitExpr, UPPC_Initializer)) { 4246 FD->setInvalidDecl(); 4247 FD->removeInClassInitializer(); 4248 return; 4249 } 4250 4251 ExprResult Init = CorrectDelayedTyposInExpr(InitExpr, /*InitDecl=*/nullptr, 4252 /*RecoverUncorrectedTypos=*/true); 4253 assert(Init.isUsable() && "Init should at least have a RecoveryExpr"); 4254 if (!FD->getType()->isDependentType() && !Init.get()->isTypeDependent()) { 4255 Init = ConvertMemberDefaultInitExpression(FD, Init.get(), InitLoc); 4256 // C++11 [class.base.init]p7: 4257 // The initialization of each base and member constitutes a 4258 // full-expression. 4259 if (!Init.isInvalid()) 4260 Init = ActOnFinishFullExpr(Init.get(), /*DiscarededValue=*/false); 4261 if (Init.isInvalid()) { 4262 FD->setInvalidDecl(); 4263 return; 4264 } 4265 } 4266 4267 FD->setInClassInitializer(Init.get()); 4268 } 4269 4270 /// Find the direct and/or virtual base specifiers that 4271 /// correspond to the given base type, for use in base initialization 4272 /// within a constructor. 4273 static bool FindBaseInitializer(Sema &SemaRef, 4274 CXXRecordDecl *ClassDecl, 4275 QualType BaseType, 4276 const CXXBaseSpecifier *&DirectBaseSpec, 4277 const CXXBaseSpecifier *&VirtualBaseSpec) { 4278 // First, check for a direct base class. 4279 DirectBaseSpec = nullptr; 4280 for (const auto &Base : ClassDecl->bases()) { 4281 if (SemaRef.Context.hasSameUnqualifiedType(BaseType, Base.getType())) { 4282 // We found a direct base of this type. That's what we're 4283 // initializing. 4284 DirectBaseSpec = &Base; 4285 break; 4286 } 4287 } 4288 4289 // Check for a virtual base class. 4290 // FIXME: We might be able to short-circuit this if we know in advance that 4291 // there are no virtual bases. 4292 VirtualBaseSpec = nullptr; 4293 if (!DirectBaseSpec || !DirectBaseSpec->isVirtual()) { 4294 // We haven't found a base yet; search the class hierarchy for a 4295 // virtual base class. 4296 CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true, 4297 /*DetectVirtual=*/false); 4298 if (SemaRef.IsDerivedFrom(ClassDecl->getLocation(), 4299 SemaRef.Context.getTypeDeclType(ClassDecl), 4300 BaseType, Paths)) { 4301 for (CXXBasePaths::paths_iterator Path = Paths.begin(); 4302 Path != Paths.end(); ++Path) { 4303 if (Path->back().Base->isVirtual()) { 4304 VirtualBaseSpec = Path->back().Base; 4305 break; 4306 } 4307 } 4308 } 4309 } 4310 4311 return DirectBaseSpec || VirtualBaseSpec; 4312 } 4313 4314 /// Handle a C++ member initializer using braced-init-list syntax. 4315 MemInitResult 4316 Sema::ActOnMemInitializer(Decl *ConstructorD, 4317 Scope *S, 4318 CXXScopeSpec &SS, 4319 IdentifierInfo *MemberOrBase, 4320 ParsedType TemplateTypeTy, 4321 const DeclSpec &DS, 4322 SourceLocation IdLoc, 4323 Expr *InitList, 4324 SourceLocation EllipsisLoc) { 4325 return BuildMemInitializer(ConstructorD, S, SS, MemberOrBase, TemplateTypeTy, 4326 DS, IdLoc, InitList, 4327 EllipsisLoc); 4328 } 4329 4330 /// Handle a C++ member initializer using parentheses syntax. 4331 MemInitResult 4332 Sema::ActOnMemInitializer(Decl *ConstructorD, 4333 Scope *S, 4334 CXXScopeSpec &SS, 4335 IdentifierInfo *MemberOrBase, 4336 ParsedType TemplateTypeTy, 4337 const DeclSpec &DS, 4338 SourceLocation IdLoc, 4339 SourceLocation LParenLoc, 4340 ArrayRef<Expr *> Args, 4341 SourceLocation RParenLoc, 4342 SourceLocation EllipsisLoc) { 4343 Expr *List = ParenListExpr::Create(Context, LParenLoc, Args, RParenLoc); 4344 return BuildMemInitializer(ConstructorD, S, SS, MemberOrBase, TemplateTypeTy, 4345 DS, IdLoc, List, EllipsisLoc); 4346 } 4347 4348 namespace { 4349 4350 // Callback to only accept typo corrections that can be a valid C++ member 4351 // initializer: either a non-static field member or a base class. 4352 class MemInitializerValidatorCCC final : public CorrectionCandidateCallback { 4353 public: 4354 explicit MemInitializerValidatorCCC(CXXRecordDecl *ClassDecl) 4355 : ClassDecl(ClassDecl) {} 4356 4357 bool ValidateCandidate(const TypoCorrection &candidate) override { 4358 if (NamedDecl *ND = candidate.getCorrectionDecl()) { 4359 if (FieldDecl *Member = dyn_cast<FieldDecl>(ND)) 4360 return Member->getDeclContext()->getRedeclContext()->Equals(ClassDecl); 4361 return isa<TypeDecl>(ND); 4362 } 4363 return false; 4364 } 4365 4366 std::unique_ptr<CorrectionCandidateCallback> clone() override { 4367 return std::make_unique<MemInitializerValidatorCCC>(*this); 4368 } 4369 4370 private: 4371 CXXRecordDecl *ClassDecl; 4372 }; 4373 4374 } 4375 4376 bool Sema::DiagRedefinedPlaceholderFieldDecl(SourceLocation Loc, 4377 RecordDecl *ClassDecl, 4378 const IdentifierInfo *Name) { 4379 DeclContextLookupResult Result = ClassDecl->lookup(Name); 4380 DeclContextLookupResult::iterator Found = 4381 llvm::find_if(Result, [this](const NamedDecl *Elem) { 4382 return isa<FieldDecl, IndirectFieldDecl>(Elem) && 4383 Elem->isPlaceholderVar(getLangOpts()); 4384 }); 4385 // We did not find a placeholder variable 4386 if (Found == Result.end()) 4387 return false; 4388 Diag(Loc, diag::err_using_placeholder_variable) << Name; 4389 for (DeclContextLookupResult::iterator It = Found; It != Result.end(); It++) { 4390 const NamedDecl *ND = *It; 4391 if (ND->getDeclContext() != ND->getDeclContext()) 4392 break; 4393 if (isa<FieldDecl, IndirectFieldDecl>(ND) && 4394 ND->isPlaceholderVar(getLangOpts())) 4395 Diag(ND->getLocation(), diag::note_reference_placeholder) << ND; 4396 } 4397 return true; 4398 } 4399 4400 ValueDecl * 4401 Sema::tryLookupUnambiguousFieldDecl(RecordDecl *ClassDecl, 4402 const IdentifierInfo *MemberOrBase) { 4403 ValueDecl *ND = nullptr; 4404 for (auto *D : ClassDecl->lookup(MemberOrBase)) { 4405 if (isa<FieldDecl, IndirectFieldDecl>(D)) { 4406 bool IsPlaceholder = D->isPlaceholderVar(getLangOpts()); 4407 if (ND) { 4408 if (IsPlaceholder && D->getDeclContext() == ND->getDeclContext()) 4409 return nullptr; 4410 break; 4411 } 4412 if (!IsPlaceholder) 4413 return cast<ValueDecl>(D); 4414 ND = cast<ValueDecl>(D); 4415 } 4416 } 4417 return ND; 4418 } 4419 4420 ValueDecl *Sema::tryLookupCtorInitMemberDecl(CXXRecordDecl *ClassDecl, 4421 CXXScopeSpec &SS, 4422 ParsedType TemplateTypeTy, 4423 IdentifierInfo *MemberOrBase) { 4424 if (SS.getScopeRep() || TemplateTypeTy) 4425 return nullptr; 4426 return tryLookupUnambiguousFieldDecl(ClassDecl, MemberOrBase); 4427 } 4428 4429 /// Handle a C++ member initializer. 4430 MemInitResult 4431 Sema::BuildMemInitializer(Decl *ConstructorD, 4432 Scope *S, 4433 CXXScopeSpec &SS, 4434 IdentifierInfo *MemberOrBase, 4435 ParsedType TemplateTypeTy, 4436 const DeclSpec &DS, 4437 SourceLocation IdLoc, 4438 Expr *Init, 4439 SourceLocation EllipsisLoc) { 4440 ExprResult Res = CorrectDelayedTyposInExpr(Init, /*InitDecl=*/nullptr, 4441 /*RecoverUncorrectedTypos=*/true); 4442 if (!Res.isUsable()) 4443 return true; 4444 Init = Res.get(); 4445 4446 if (!ConstructorD) 4447 return true; 4448 4449 AdjustDeclIfTemplate(ConstructorD); 4450 4451 CXXConstructorDecl *Constructor 4452 = dyn_cast<CXXConstructorDecl>(ConstructorD); 4453 if (!Constructor) { 4454 // The user wrote a constructor initializer on a function that is 4455 // not a C++ constructor. Ignore the error for now, because we may 4456 // have more member initializers coming; we'll diagnose it just 4457 // once in ActOnMemInitializers. 4458 return true; 4459 } 4460 4461 CXXRecordDecl *ClassDecl = Constructor->getParent(); 4462 4463 // C++ [class.base.init]p2: 4464 // Names in a mem-initializer-id are looked up in the scope of the 4465 // constructor's class and, if not found in that scope, are looked 4466 // up in the scope containing the constructor's definition. 4467 // [Note: if the constructor's class contains a member with the 4468 // same name as a direct or virtual base class of the class, a 4469 // mem-initializer-id naming the member or base class and composed 4470 // of a single identifier refers to the class member. A 4471 // mem-initializer-id for the hidden base class may be specified 4472 // using a qualified name. ] 4473 4474 // Look for a member, first. 4475 if (ValueDecl *Member = tryLookupCtorInitMemberDecl( 4476 ClassDecl, SS, TemplateTypeTy, MemberOrBase)) { 4477 if (EllipsisLoc.isValid()) 4478 Diag(EllipsisLoc, diag::err_pack_expansion_member_init) 4479 << MemberOrBase 4480 << SourceRange(IdLoc, Init->getSourceRange().getEnd()); 4481 4482 return BuildMemberInitializer(Member, Init, IdLoc); 4483 } 4484 // It didn't name a member, so see if it names a class. 4485 QualType BaseType; 4486 TypeSourceInfo *TInfo = nullptr; 4487 4488 if (TemplateTypeTy) { 4489 BaseType = GetTypeFromParser(TemplateTypeTy, &TInfo); 4490 if (BaseType.isNull()) 4491 return true; 4492 } else if (DS.getTypeSpecType() == TST_decltype) { 4493 BaseType = BuildDecltypeType(DS.getRepAsExpr()); 4494 } else if (DS.getTypeSpecType() == TST_decltype_auto) { 4495 Diag(DS.getTypeSpecTypeLoc(), diag::err_decltype_auto_invalid); 4496 return true; 4497 } else { 4498 LookupResult R(*this, MemberOrBase, IdLoc, LookupOrdinaryName); 4499 LookupParsedName(R, S, &SS); 4500 4501 TypeDecl *TyD = R.getAsSingle<TypeDecl>(); 4502 if (!TyD) { 4503 if (R.isAmbiguous()) return true; 4504 4505 // We don't want access-control diagnostics here. 4506 R.suppressDiagnostics(); 4507 4508 if (SS.isSet() && isDependentScopeSpecifier(SS)) { 4509 bool NotUnknownSpecialization = false; 4510 DeclContext *DC = computeDeclContext(SS, false); 4511 if (CXXRecordDecl *Record = dyn_cast_or_null<CXXRecordDecl>(DC)) 4512 NotUnknownSpecialization = !Record->hasAnyDependentBases(); 4513 4514 if (!NotUnknownSpecialization) { 4515 // When the scope specifier can refer to a member of an unknown 4516 // specialization, we take it as a type name. 4517 BaseType = CheckTypenameType( 4518 ElaboratedTypeKeyword::None, SourceLocation(), 4519 SS.getWithLocInContext(Context), *MemberOrBase, IdLoc); 4520 if (BaseType.isNull()) 4521 return true; 4522 4523 TInfo = Context.CreateTypeSourceInfo(BaseType); 4524 DependentNameTypeLoc TL = 4525 TInfo->getTypeLoc().castAs<DependentNameTypeLoc>(); 4526 if (!TL.isNull()) { 4527 TL.setNameLoc(IdLoc); 4528 TL.setElaboratedKeywordLoc(SourceLocation()); 4529 TL.setQualifierLoc(SS.getWithLocInContext(Context)); 4530 } 4531 4532 R.clear(); 4533 R.setLookupName(MemberOrBase); 4534 } 4535 } 4536 4537 if (getLangOpts().MSVCCompat && !getLangOpts().CPlusPlus20) { 4538 if (auto UnqualifiedBase = R.getAsSingle<ClassTemplateDecl>()) { 4539 auto *TempSpec = cast<TemplateSpecializationType>( 4540 UnqualifiedBase->getInjectedClassNameSpecialization()); 4541 TemplateName TN = TempSpec->getTemplateName(); 4542 for (auto const &Base : ClassDecl->bases()) { 4543 auto BaseTemplate = 4544 Base.getType()->getAs<TemplateSpecializationType>(); 4545 if (BaseTemplate && Context.hasSameTemplateName( 4546 BaseTemplate->getTemplateName(), TN)) { 4547 Diag(IdLoc, diag::ext_unqualified_base_class) 4548 << SourceRange(IdLoc, Init->getSourceRange().getEnd()); 4549 BaseType = Base.getType(); 4550 break; 4551 } 4552 } 4553 } 4554 } 4555 4556 // If no results were found, try to correct typos. 4557 TypoCorrection Corr; 4558 MemInitializerValidatorCCC CCC(ClassDecl); 4559 if (R.empty() && BaseType.isNull() && 4560 (Corr = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, 4561 CCC, CTK_ErrorRecovery, ClassDecl))) { 4562 if (FieldDecl *Member = Corr.getCorrectionDeclAs<FieldDecl>()) { 4563 // We have found a non-static data member with a similar 4564 // name to what was typed; complain and initialize that 4565 // member. 4566 diagnoseTypo(Corr, 4567 PDiag(diag::err_mem_init_not_member_or_class_suggest) 4568 << MemberOrBase << true); 4569 return BuildMemberInitializer(Member, Init, IdLoc); 4570 } else if (TypeDecl *Type = Corr.getCorrectionDeclAs<TypeDecl>()) { 4571 const CXXBaseSpecifier *DirectBaseSpec; 4572 const CXXBaseSpecifier *VirtualBaseSpec; 4573 if (FindBaseInitializer(*this, ClassDecl, 4574 Context.getTypeDeclType(Type), 4575 DirectBaseSpec, VirtualBaseSpec)) { 4576 // We have found a direct or virtual base class with a 4577 // similar name to what was typed; complain and initialize 4578 // that base class. 4579 diagnoseTypo(Corr, 4580 PDiag(diag::err_mem_init_not_member_or_class_suggest) 4581 << MemberOrBase << false, 4582 PDiag() /*Suppress note, we provide our own.*/); 4583 4584 const CXXBaseSpecifier *BaseSpec = DirectBaseSpec ? DirectBaseSpec 4585 : VirtualBaseSpec; 4586 Diag(BaseSpec->getBeginLoc(), diag::note_base_class_specified_here) 4587 << BaseSpec->getType() << BaseSpec->getSourceRange(); 4588 4589 TyD = Type; 4590 } 4591 } 4592 } 4593 4594 if (!TyD && BaseType.isNull()) { 4595 Diag(IdLoc, diag::err_mem_init_not_member_or_class) 4596 << MemberOrBase << SourceRange(IdLoc,Init->getSourceRange().getEnd()); 4597 return true; 4598 } 4599 } 4600 4601 if (BaseType.isNull()) { 4602 BaseType = getElaboratedType(ElaboratedTypeKeyword::None, SS, 4603 Context.getTypeDeclType(TyD)); 4604 MarkAnyDeclReferenced(TyD->getLocation(), TyD, /*OdrUse=*/false); 4605 TInfo = Context.CreateTypeSourceInfo(BaseType); 4606 ElaboratedTypeLoc TL = TInfo->getTypeLoc().castAs<ElaboratedTypeLoc>(); 4607 TL.getNamedTypeLoc().castAs<TypeSpecTypeLoc>().setNameLoc(IdLoc); 4608 TL.setElaboratedKeywordLoc(SourceLocation()); 4609 TL.setQualifierLoc(SS.getWithLocInContext(Context)); 4610 } 4611 } 4612 4613 if (!TInfo) 4614 TInfo = Context.getTrivialTypeSourceInfo(BaseType, IdLoc); 4615 4616 return BuildBaseInitializer(BaseType, TInfo, Init, ClassDecl, EllipsisLoc); 4617 } 4618 4619 MemInitResult 4620 Sema::BuildMemberInitializer(ValueDecl *Member, Expr *Init, 4621 SourceLocation IdLoc) { 4622 FieldDecl *DirectMember = dyn_cast<FieldDecl>(Member); 4623 IndirectFieldDecl *IndirectMember = dyn_cast<IndirectFieldDecl>(Member); 4624 assert((DirectMember || IndirectMember) && 4625 "Member must be a FieldDecl or IndirectFieldDecl"); 4626 4627 if (DiagnoseUnexpandedParameterPack(Init, UPPC_Initializer)) 4628 return true; 4629 4630 if (Member->isInvalidDecl()) 4631 return true; 4632 4633 MultiExprArg Args; 4634 if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) { 4635 Args = MultiExprArg(ParenList->getExprs(), ParenList->getNumExprs()); 4636 } else if (InitListExpr *InitList = dyn_cast<InitListExpr>(Init)) { 4637 Args = MultiExprArg(InitList->getInits(), InitList->getNumInits()); 4638 } else { 4639 // Template instantiation doesn't reconstruct ParenListExprs for us. 4640 Args = Init; 4641 } 4642 4643 SourceRange InitRange = Init->getSourceRange(); 4644 4645 if (Member->getType()->isDependentType() || Init->isTypeDependent()) { 4646 // Can't check initialization for a member of dependent type or when 4647 // any of the arguments are type-dependent expressions. 4648 DiscardCleanupsInEvaluationContext(); 4649 } else { 4650 bool InitList = false; 4651 if (isa<InitListExpr>(Init)) { 4652 InitList = true; 4653 Args = Init; 4654 } 4655 4656 // Initialize the member. 4657 InitializedEntity MemberEntity = 4658 DirectMember ? InitializedEntity::InitializeMember(DirectMember, nullptr) 4659 : InitializedEntity::InitializeMember(IndirectMember, 4660 nullptr); 4661 InitializationKind Kind = 4662 InitList ? InitializationKind::CreateDirectList( 4663 IdLoc, Init->getBeginLoc(), Init->getEndLoc()) 4664 : InitializationKind::CreateDirect(IdLoc, InitRange.getBegin(), 4665 InitRange.getEnd()); 4666 4667 InitializationSequence InitSeq(*this, MemberEntity, Kind, Args); 4668 ExprResult MemberInit = InitSeq.Perform(*this, MemberEntity, Kind, Args, 4669 nullptr); 4670 if (!MemberInit.isInvalid()) { 4671 // C++11 [class.base.init]p7: 4672 // The initialization of each base and member constitutes a 4673 // full-expression. 4674 MemberInit = ActOnFinishFullExpr(MemberInit.get(), InitRange.getBegin(), 4675 /*DiscardedValue*/ false); 4676 } 4677 4678 if (MemberInit.isInvalid()) { 4679 // Args were sensible expressions but we couldn't initialize the member 4680 // from them. Preserve them in a RecoveryExpr instead. 4681 Init = CreateRecoveryExpr(InitRange.getBegin(), InitRange.getEnd(), Args, 4682 Member->getType()) 4683 .get(); 4684 if (!Init) 4685 return true; 4686 } else { 4687 Init = MemberInit.get(); 4688 } 4689 } 4690 4691 if (DirectMember) { 4692 return new (Context) CXXCtorInitializer(Context, DirectMember, IdLoc, 4693 InitRange.getBegin(), Init, 4694 InitRange.getEnd()); 4695 } else { 4696 return new (Context) CXXCtorInitializer(Context, IndirectMember, IdLoc, 4697 InitRange.getBegin(), Init, 4698 InitRange.getEnd()); 4699 } 4700 } 4701 4702 MemInitResult 4703 Sema::BuildDelegatingInitializer(TypeSourceInfo *TInfo, Expr *Init, 4704 CXXRecordDecl *ClassDecl) { 4705 SourceLocation NameLoc = TInfo->getTypeLoc().getSourceRange().getBegin(); 4706 if (!LangOpts.CPlusPlus11) 4707 return Diag(NameLoc, diag::err_delegating_ctor) 4708 << TInfo->getTypeLoc().getSourceRange(); 4709 Diag(NameLoc, diag::warn_cxx98_compat_delegating_ctor); 4710 4711 bool InitList = true; 4712 MultiExprArg Args = Init; 4713 if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) { 4714 InitList = false; 4715 Args = MultiExprArg(ParenList->getExprs(), ParenList->getNumExprs()); 4716 } 4717 4718 SourceRange InitRange = Init->getSourceRange(); 4719 // Initialize the object. 4720 InitializedEntity DelegationEntity = InitializedEntity::InitializeDelegation( 4721 QualType(ClassDecl->getTypeForDecl(), 0)); 4722 InitializationKind Kind = 4723 InitList ? InitializationKind::CreateDirectList( 4724 NameLoc, Init->getBeginLoc(), Init->getEndLoc()) 4725 : InitializationKind::CreateDirect(NameLoc, InitRange.getBegin(), 4726 InitRange.getEnd()); 4727 InitializationSequence InitSeq(*this, DelegationEntity, Kind, Args); 4728 ExprResult DelegationInit = InitSeq.Perform(*this, DelegationEntity, Kind, 4729 Args, nullptr); 4730 if (!DelegationInit.isInvalid()) { 4731 assert((DelegationInit.get()->containsErrors() || 4732 cast<CXXConstructExpr>(DelegationInit.get())->getConstructor()) && 4733 "Delegating constructor with no target?"); 4734 4735 // C++11 [class.base.init]p7: 4736 // The initialization of each base and member constitutes a 4737 // full-expression. 4738 DelegationInit = ActOnFinishFullExpr( 4739 DelegationInit.get(), InitRange.getBegin(), /*DiscardedValue*/ false); 4740 } 4741 4742 if (DelegationInit.isInvalid()) { 4743 DelegationInit = 4744 CreateRecoveryExpr(InitRange.getBegin(), InitRange.getEnd(), Args, 4745 QualType(ClassDecl->getTypeForDecl(), 0)); 4746 if (DelegationInit.isInvalid()) 4747 return true; 4748 } else { 4749 // If we are in a dependent context, template instantiation will 4750 // perform this type-checking again. Just save the arguments that we 4751 // received in a ParenListExpr. 4752 // FIXME: This isn't quite ideal, since our ASTs don't capture all 4753 // of the information that we have about the base 4754 // initializer. However, deconstructing the ASTs is a dicey process, 4755 // and this approach is far more likely to get the corner cases right. 4756 if (CurContext->isDependentContext()) 4757 DelegationInit = Init; 4758 } 4759 4760 return new (Context) CXXCtorInitializer(Context, TInfo, InitRange.getBegin(), 4761 DelegationInit.getAs<Expr>(), 4762 InitRange.getEnd()); 4763 } 4764 4765 MemInitResult 4766 Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo, 4767 Expr *Init, CXXRecordDecl *ClassDecl, 4768 SourceLocation EllipsisLoc) { 4769 SourceLocation BaseLoc = BaseTInfo->getTypeLoc().getBeginLoc(); 4770 4771 if (!BaseType->isDependentType() && !BaseType->isRecordType()) 4772 return Diag(BaseLoc, diag::err_base_init_does_not_name_class) 4773 << BaseType << BaseTInfo->getTypeLoc().getSourceRange(); 4774 4775 // C++ [class.base.init]p2: 4776 // [...] Unless the mem-initializer-id names a nonstatic data 4777 // member of the constructor's class or a direct or virtual base 4778 // of that class, the mem-initializer is ill-formed. A 4779 // mem-initializer-list can initialize a base class using any 4780 // name that denotes that base class type. 4781 4782 // We can store the initializers in "as-written" form and delay analysis until 4783 // instantiation if the constructor is dependent. But not for dependent 4784 // (broken) code in a non-template! SetCtorInitializers does not expect this. 4785 bool Dependent = CurContext->isDependentContext() && 4786 (BaseType->isDependentType() || Init->isTypeDependent()); 4787 4788 SourceRange InitRange = Init->getSourceRange(); 4789 if (EllipsisLoc.isValid()) { 4790 // This is a pack expansion. 4791 if (!BaseType->containsUnexpandedParameterPack()) { 4792 Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) 4793 << SourceRange(BaseLoc, InitRange.getEnd()); 4794 4795 EllipsisLoc = SourceLocation(); 4796 } 4797 } else { 4798 // Check for any unexpanded parameter packs. 4799 if (DiagnoseUnexpandedParameterPack(BaseLoc, BaseTInfo, UPPC_Initializer)) 4800 return true; 4801 4802 if (DiagnoseUnexpandedParameterPack(Init, UPPC_Initializer)) 4803 return true; 4804 } 4805 4806 // Check for direct and virtual base classes. 4807 const CXXBaseSpecifier *DirectBaseSpec = nullptr; 4808 const CXXBaseSpecifier *VirtualBaseSpec = nullptr; 4809 if (!Dependent) { 4810 if (Context.hasSameUnqualifiedType(QualType(ClassDecl->getTypeForDecl(),0), 4811 BaseType)) 4812 return BuildDelegatingInitializer(BaseTInfo, Init, ClassDecl); 4813 4814 FindBaseInitializer(*this, ClassDecl, BaseType, DirectBaseSpec, 4815 VirtualBaseSpec); 4816 4817 // C++ [base.class.init]p2: 4818 // Unless the mem-initializer-id names a nonstatic data member of the 4819 // constructor's class or a direct or virtual base of that class, the 4820 // mem-initializer is ill-formed. 4821 if (!DirectBaseSpec && !VirtualBaseSpec) { 4822 // If the class has any dependent bases, then it's possible that 4823 // one of those types will resolve to the same type as 4824 // BaseType. Therefore, just treat this as a dependent base 4825 // class initialization. FIXME: Should we try to check the 4826 // initialization anyway? It seems odd. 4827 if (ClassDecl->hasAnyDependentBases()) 4828 Dependent = true; 4829 else 4830 return Diag(BaseLoc, diag::err_not_direct_base_or_virtual) 4831 << BaseType << Context.getTypeDeclType(ClassDecl) 4832 << BaseTInfo->getTypeLoc().getSourceRange(); 4833 } 4834 } 4835 4836 if (Dependent) { 4837 DiscardCleanupsInEvaluationContext(); 4838 4839 return new (Context) CXXCtorInitializer(Context, BaseTInfo, 4840 /*IsVirtual=*/false, 4841 InitRange.getBegin(), Init, 4842 InitRange.getEnd(), EllipsisLoc); 4843 } 4844 4845 // C++ [base.class.init]p2: 4846 // If a mem-initializer-id is ambiguous because it designates both 4847 // a direct non-virtual base class and an inherited virtual base 4848 // class, the mem-initializer is ill-formed. 4849 if (DirectBaseSpec && VirtualBaseSpec) 4850 return Diag(BaseLoc, diag::err_base_init_direct_and_virtual) 4851 << BaseType << BaseTInfo->getTypeLoc().getLocalSourceRange(); 4852 4853 const CXXBaseSpecifier *BaseSpec = DirectBaseSpec; 4854 if (!BaseSpec) 4855 BaseSpec = VirtualBaseSpec; 4856 4857 // Initialize the base. 4858 bool InitList = true; 4859 MultiExprArg Args = Init; 4860 if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) { 4861 InitList = false; 4862 Args = MultiExprArg(ParenList->getExprs(), ParenList->getNumExprs()); 4863 } 4864 4865 InitializedEntity BaseEntity = 4866 InitializedEntity::InitializeBase(Context, BaseSpec, VirtualBaseSpec); 4867 InitializationKind Kind = 4868 InitList ? InitializationKind::CreateDirectList(BaseLoc) 4869 : InitializationKind::CreateDirect(BaseLoc, InitRange.getBegin(), 4870 InitRange.getEnd()); 4871 InitializationSequence InitSeq(*this, BaseEntity, Kind, Args); 4872 ExprResult BaseInit = InitSeq.Perform(*this, BaseEntity, Kind, Args, nullptr); 4873 if (!BaseInit.isInvalid()) { 4874 // C++11 [class.base.init]p7: 4875 // The initialization of each base and member constitutes a 4876 // full-expression. 4877 BaseInit = ActOnFinishFullExpr(BaseInit.get(), InitRange.getBegin(), 4878 /*DiscardedValue*/ false); 4879 } 4880 4881 if (BaseInit.isInvalid()) { 4882 BaseInit = CreateRecoveryExpr(InitRange.getBegin(), InitRange.getEnd(), 4883 Args, BaseType); 4884 if (BaseInit.isInvalid()) 4885 return true; 4886 } else { 4887 // If we are in a dependent context, template instantiation will 4888 // perform this type-checking again. Just save the arguments that we 4889 // received in a ParenListExpr. 4890 // FIXME: This isn't quite ideal, since our ASTs don't capture all 4891 // of the information that we have about the base 4892 // initializer. However, deconstructing the ASTs is a dicey process, 4893 // and this approach is far more likely to get the corner cases right. 4894 if (CurContext->isDependentContext()) 4895 BaseInit = Init; 4896 } 4897 4898 return new (Context) CXXCtorInitializer(Context, BaseTInfo, 4899 BaseSpec->isVirtual(), 4900 InitRange.getBegin(), 4901 BaseInit.getAs<Expr>(), 4902 InitRange.getEnd(), EllipsisLoc); 4903 } 4904 4905 // Create a static_cast\<T&&>(expr). 4906 static Expr *CastForMoving(Sema &SemaRef, Expr *E) { 4907 QualType TargetType = 4908 SemaRef.BuildReferenceType(E->getType(), /*SpelledAsLValue*/ false, 4909 SourceLocation(), DeclarationName()); 4910 SourceLocation ExprLoc = E->getBeginLoc(); 4911 TypeSourceInfo *TargetLoc = SemaRef.Context.getTrivialTypeSourceInfo( 4912 TargetType, ExprLoc); 4913 4914 return SemaRef.BuildCXXNamedCast(ExprLoc, tok::kw_static_cast, TargetLoc, E, 4915 SourceRange(ExprLoc, ExprLoc), 4916 E->getSourceRange()).get(); 4917 } 4918 4919 /// ImplicitInitializerKind - How an implicit base or member initializer should 4920 /// initialize its base or member. 4921 enum ImplicitInitializerKind { 4922 IIK_Default, 4923 IIK_Copy, 4924 IIK_Move, 4925 IIK_Inherit 4926 }; 4927 4928 static bool 4929 BuildImplicitBaseInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor, 4930 ImplicitInitializerKind ImplicitInitKind, 4931 CXXBaseSpecifier *BaseSpec, 4932 bool IsInheritedVirtualBase, 4933 CXXCtorInitializer *&CXXBaseInit) { 4934 InitializedEntity InitEntity 4935 = InitializedEntity::InitializeBase(SemaRef.Context, BaseSpec, 4936 IsInheritedVirtualBase); 4937 4938 ExprResult BaseInit; 4939 4940 switch (ImplicitInitKind) { 4941 case IIK_Inherit: 4942 case IIK_Default: { 4943 InitializationKind InitKind 4944 = InitializationKind::CreateDefault(Constructor->getLocation()); 4945 InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, std::nullopt); 4946 BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind, std::nullopt); 4947 break; 4948 } 4949 4950 case IIK_Move: 4951 case IIK_Copy: { 4952 bool Moving = ImplicitInitKind == IIK_Move; 4953 ParmVarDecl *Param = Constructor->getParamDecl(0); 4954 QualType ParamType = Param->getType().getNonReferenceType(); 4955 4956 Expr *CopyCtorArg = 4957 DeclRefExpr::Create(SemaRef.Context, NestedNameSpecifierLoc(), 4958 SourceLocation(), Param, false, 4959 Constructor->getLocation(), ParamType, 4960 VK_LValue, nullptr); 4961 4962 SemaRef.MarkDeclRefReferenced(cast<DeclRefExpr>(CopyCtorArg)); 4963 4964 // Cast to the base class to avoid ambiguities. 4965 QualType ArgTy = 4966 SemaRef.Context.getQualifiedType(BaseSpec->getType().getUnqualifiedType(), 4967 ParamType.getQualifiers()); 4968 4969 if (Moving) { 4970 CopyCtorArg = CastForMoving(SemaRef, CopyCtorArg); 4971 } 4972 4973 CXXCastPath BasePath; 4974 BasePath.push_back(BaseSpec); 4975 CopyCtorArg = SemaRef.ImpCastExprToType(CopyCtorArg, ArgTy, 4976 CK_UncheckedDerivedToBase, 4977 Moving ? VK_XValue : VK_LValue, 4978 &BasePath).get(); 4979 4980 InitializationKind InitKind 4981 = InitializationKind::CreateDirect(Constructor->getLocation(), 4982 SourceLocation(), SourceLocation()); 4983 InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, CopyCtorArg); 4984 BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind, CopyCtorArg); 4985 break; 4986 } 4987 } 4988 4989 BaseInit = SemaRef.MaybeCreateExprWithCleanups(BaseInit); 4990 if (BaseInit.isInvalid()) 4991 return true; 4992 4993 CXXBaseInit = 4994 new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, 4995 SemaRef.Context.getTrivialTypeSourceInfo(BaseSpec->getType(), 4996 SourceLocation()), 4997 BaseSpec->isVirtual(), 4998 SourceLocation(), 4999 BaseInit.getAs<Expr>(), 5000 SourceLocation(), 5001 SourceLocation()); 5002 5003 return false; 5004 } 5005 5006 static bool RefersToRValueRef(Expr *MemRef) { 5007 ValueDecl *Referenced = cast<MemberExpr>(MemRef)->getMemberDecl(); 5008 return Referenced->getType()->isRValueReferenceType(); 5009 } 5010 5011 static bool 5012 BuildImplicitMemberInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor, 5013 ImplicitInitializerKind ImplicitInitKind, 5014 FieldDecl *Field, IndirectFieldDecl *Indirect, 5015 CXXCtorInitializer *&CXXMemberInit) { 5016 if (Field->isInvalidDecl()) 5017 return true; 5018 5019 SourceLocation Loc = Constructor->getLocation(); 5020 5021 if (ImplicitInitKind == IIK_Copy || ImplicitInitKind == IIK_Move) { 5022 bool Moving = ImplicitInitKind == IIK_Move; 5023 ParmVarDecl *Param = Constructor->getParamDecl(0); 5024 QualType ParamType = Param->getType().getNonReferenceType(); 5025 5026 // Suppress copying zero-width bitfields. 5027 if (Field->isZeroLengthBitField(SemaRef.Context)) 5028 return false; 5029 5030 Expr *MemberExprBase = 5031 DeclRefExpr::Create(SemaRef.Context, NestedNameSpecifierLoc(), 5032 SourceLocation(), Param, false, 5033 Loc, ParamType, VK_LValue, nullptr); 5034 5035 SemaRef.MarkDeclRefReferenced(cast<DeclRefExpr>(MemberExprBase)); 5036 5037 if (Moving) { 5038 MemberExprBase = CastForMoving(SemaRef, MemberExprBase); 5039 } 5040 5041 // Build a reference to this field within the parameter. 5042 CXXScopeSpec SS; 5043 LookupResult MemberLookup(SemaRef, Field->getDeclName(), Loc, 5044 Sema::LookupMemberName); 5045 MemberLookup.addDecl(Indirect ? cast<ValueDecl>(Indirect) 5046 : cast<ValueDecl>(Field), AS_public); 5047 MemberLookup.resolveKind(); 5048 ExprResult CtorArg 5049 = SemaRef.BuildMemberReferenceExpr(MemberExprBase, 5050 ParamType, Loc, 5051 /*IsArrow=*/false, 5052 SS, 5053 /*TemplateKWLoc=*/SourceLocation(), 5054 /*FirstQualifierInScope=*/nullptr, 5055 MemberLookup, 5056 /*TemplateArgs=*/nullptr, 5057 /*S*/nullptr); 5058 if (CtorArg.isInvalid()) 5059 return true; 5060 5061 // C++11 [class.copy]p15: 5062 // - if a member m has rvalue reference type T&&, it is direct-initialized 5063 // with static_cast<T&&>(x.m); 5064 if (RefersToRValueRef(CtorArg.get())) { 5065 CtorArg = CastForMoving(SemaRef, CtorArg.get()); 5066 } 5067 5068 InitializedEntity Entity = 5069 Indirect ? InitializedEntity::InitializeMember(Indirect, nullptr, 5070 /*Implicit*/ true) 5071 : InitializedEntity::InitializeMember(Field, nullptr, 5072 /*Implicit*/ true); 5073 5074 // Direct-initialize to use the copy constructor. 5075 InitializationKind InitKind = 5076 InitializationKind::CreateDirect(Loc, SourceLocation(), SourceLocation()); 5077 5078 Expr *CtorArgE = CtorArg.getAs<Expr>(); 5079 InitializationSequence InitSeq(SemaRef, Entity, InitKind, CtorArgE); 5080 ExprResult MemberInit = 5081 InitSeq.Perform(SemaRef, Entity, InitKind, MultiExprArg(&CtorArgE, 1)); 5082 MemberInit = SemaRef.MaybeCreateExprWithCleanups(MemberInit); 5083 if (MemberInit.isInvalid()) 5084 return true; 5085 5086 if (Indirect) 5087 CXXMemberInit = new (SemaRef.Context) CXXCtorInitializer( 5088 SemaRef.Context, Indirect, Loc, Loc, MemberInit.getAs<Expr>(), Loc); 5089 else 5090 CXXMemberInit = new (SemaRef.Context) CXXCtorInitializer( 5091 SemaRef.Context, Field, Loc, Loc, MemberInit.getAs<Expr>(), Loc); 5092 return false; 5093 } 5094 5095 assert((ImplicitInitKind == IIK_Default || ImplicitInitKind == IIK_Inherit) && 5096 "Unhandled implicit init kind!"); 5097 5098 QualType FieldBaseElementType = 5099 SemaRef.Context.getBaseElementType(Field->getType()); 5100 5101 if (FieldBaseElementType->isRecordType()) { 5102 InitializedEntity InitEntity = 5103 Indirect ? InitializedEntity::InitializeMember(Indirect, nullptr, 5104 /*Implicit*/ true) 5105 : InitializedEntity::InitializeMember(Field, nullptr, 5106 /*Implicit*/ true); 5107 InitializationKind InitKind = 5108 InitializationKind::CreateDefault(Loc); 5109 5110 InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, std::nullopt); 5111 ExprResult MemberInit = 5112 InitSeq.Perform(SemaRef, InitEntity, InitKind, std::nullopt); 5113 5114 MemberInit = SemaRef.MaybeCreateExprWithCleanups(MemberInit); 5115 if (MemberInit.isInvalid()) 5116 return true; 5117 5118 if (Indirect) 5119 CXXMemberInit = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, 5120 Indirect, Loc, 5121 Loc, 5122 MemberInit.get(), 5123 Loc); 5124 else 5125 CXXMemberInit = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, 5126 Field, Loc, Loc, 5127 MemberInit.get(), 5128 Loc); 5129 return false; 5130 } 5131 5132 if (!Field->getParent()->isUnion()) { 5133 if (FieldBaseElementType->isReferenceType()) { 5134 SemaRef.Diag(Constructor->getLocation(), 5135 diag::err_uninitialized_member_in_ctor) 5136 << (int)Constructor->isImplicit() 5137 << SemaRef.Context.getTagDeclType(Constructor->getParent()) 5138 << 0 << Field->getDeclName(); 5139 SemaRef.Diag(Field->getLocation(), diag::note_declared_at); 5140 return true; 5141 } 5142 5143 if (FieldBaseElementType.isConstQualified()) { 5144 SemaRef.Diag(Constructor->getLocation(), 5145 diag::err_uninitialized_member_in_ctor) 5146 << (int)Constructor->isImplicit() 5147 << SemaRef.Context.getTagDeclType(Constructor->getParent()) 5148 << 1 << Field->getDeclName(); 5149 SemaRef.Diag(Field->getLocation(), diag::note_declared_at); 5150 return true; 5151 } 5152 } 5153 5154 if (FieldBaseElementType.hasNonTrivialObjCLifetime()) { 5155 // ARC and Weak: 5156 // Default-initialize Objective-C pointers to NULL. 5157 CXXMemberInit 5158 = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Field, 5159 Loc, Loc, 5160 new (SemaRef.Context) ImplicitValueInitExpr(Field->getType()), 5161 Loc); 5162 return false; 5163 } 5164 5165 // Nothing to initialize. 5166 CXXMemberInit = nullptr; 5167 return false; 5168 } 5169 5170 namespace { 5171 struct BaseAndFieldInfo { 5172 Sema &S; 5173 CXXConstructorDecl *Ctor; 5174 bool AnyErrorsInInits; 5175 ImplicitInitializerKind IIK; 5176 llvm::DenseMap<const void *, CXXCtorInitializer*> AllBaseFields; 5177 SmallVector<CXXCtorInitializer*, 8> AllToInit; 5178 llvm::DenseMap<TagDecl*, FieldDecl*> ActiveUnionMember; 5179 5180 BaseAndFieldInfo(Sema &S, CXXConstructorDecl *Ctor, bool ErrorsInInits) 5181 : S(S), Ctor(Ctor), AnyErrorsInInits(ErrorsInInits) { 5182 bool Generated = Ctor->isImplicit() || Ctor->isDefaulted(); 5183 if (Ctor->getInheritedConstructor()) 5184 IIK = IIK_Inherit; 5185 else if (Generated && Ctor->isCopyConstructor()) 5186 IIK = IIK_Copy; 5187 else if (Generated && Ctor->isMoveConstructor()) 5188 IIK = IIK_Move; 5189 else 5190 IIK = IIK_Default; 5191 } 5192 5193 bool isImplicitCopyOrMove() const { 5194 switch (IIK) { 5195 case IIK_Copy: 5196 case IIK_Move: 5197 return true; 5198 5199 case IIK_Default: 5200 case IIK_Inherit: 5201 return false; 5202 } 5203 5204 llvm_unreachable("Invalid ImplicitInitializerKind!"); 5205 } 5206 5207 bool addFieldInitializer(CXXCtorInitializer *Init) { 5208 AllToInit.push_back(Init); 5209 5210 // Check whether this initializer makes the field "used". 5211 if (Init->getInit()->HasSideEffects(S.Context)) 5212 S.UnusedPrivateFields.remove(Init->getAnyMember()); 5213 5214 return false; 5215 } 5216 5217 bool isInactiveUnionMember(FieldDecl *Field) { 5218 RecordDecl *Record = Field->getParent(); 5219 if (!Record->isUnion()) 5220 return false; 5221 5222 if (FieldDecl *Active = 5223 ActiveUnionMember.lookup(Record->getCanonicalDecl())) 5224 return Active != Field->getCanonicalDecl(); 5225 5226 // In an implicit copy or move constructor, ignore any in-class initializer. 5227 if (isImplicitCopyOrMove()) 5228 return true; 5229 5230 // If there's no explicit initialization, the field is active only if it 5231 // has an in-class initializer... 5232 if (Field->hasInClassInitializer()) 5233 return false; 5234 // ... or it's an anonymous struct or union whose class has an in-class 5235 // initializer. 5236 if (!Field->isAnonymousStructOrUnion()) 5237 return true; 5238 CXXRecordDecl *FieldRD = Field->getType()->getAsCXXRecordDecl(); 5239 return !FieldRD->hasInClassInitializer(); 5240 } 5241 5242 /// Determine whether the given field is, or is within, a union member 5243 /// that is inactive (because there was an initializer given for a different 5244 /// member of the union, or because the union was not initialized at all). 5245 bool isWithinInactiveUnionMember(FieldDecl *Field, 5246 IndirectFieldDecl *Indirect) { 5247 if (!Indirect) 5248 return isInactiveUnionMember(Field); 5249 5250 for (auto *C : Indirect->chain()) { 5251 FieldDecl *Field = dyn_cast<FieldDecl>(C); 5252 if (Field && isInactiveUnionMember(Field)) 5253 return true; 5254 } 5255 return false; 5256 } 5257 }; 5258 } 5259 5260 /// Determine whether the given type is an incomplete or zero-lenfgth 5261 /// array type. 5262 static bool isIncompleteOrZeroLengthArrayType(ASTContext &Context, QualType T) { 5263 if (T->isIncompleteArrayType()) 5264 return true; 5265 5266 while (const ConstantArrayType *ArrayT = Context.getAsConstantArrayType(T)) { 5267 if (!ArrayT->getSize()) 5268 return true; 5269 5270 T = ArrayT->getElementType(); 5271 } 5272 5273 return false; 5274 } 5275 5276 static bool CollectFieldInitializer(Sema &SemaRef, BaseAndFieldInfo &Info, 5277 FieldDecl *Field, 5278 IndirectFieldDecl *Indirect = nullptr) { 5279 if (Field->isInvalidDecl()) 5280 return false; 5281 5282 // Overwhelmingly common case: we have a direct initializer for this field. 5283 if (CXXCtorInitializer *Init = 5284 Info.AllBaseFields.lookup(Field->getCanonicalDecl())) 5285 return Info.addFieldInitializer(Init); 5286 5287 // C++11 [class.base.init]p8: 5288 // if the entity is a non-static data member that has a 5289 // brace-or-equal-initializer and either 5290 // -- the constructor's class is a union and no other variant member of that 5291 // union is designated by a mem-initializer-id or 5292 // -- the constructor's class is not a union, and, if the entity is a member 5293 // of an anonymous union, no other member of that union is designated by 5294 // a mem-initializer-id, 5295 // the entity is initialized as specified in [dcl.init]. 5296 // 5297 // We also apply the same rules to handle anonymous structs within anonymous 5298 // unions. 5299 if (Info.isWithinInactiveUnionMember(Field, Indirect)) 5300 return false; 5301 5302 if (Field->hasInClassInitializer() && !Info.isImplicitCopyOrMove()) { 5303 ExprResult DIE = 5304 SemaRef.BuildCXXDefaultInitExpr(Info.Ctor->getLocation(), Field); 5305 if (DIE.isInvalid()) 5306 return true; 5307 5308 auto Entity = InitializedEntity::InitializeMember(Field, nullptr, true); 5309 SemaRef.checkInitializerLifetime(Entity, DIE.get()); 5310 5311 CXXCtorInitializer *Init; 5312 if (Indirect) 5313 Init = new (SemaRef.Context) 5314 CXXCtorInitializer(SemaRef.Context, Indirect, SourceLocation(), 5315 SourceLocation(), DIE.get(), SourceLocation()); 5316 else 5317 Init = new (SemaRef.Context) 5318 CXXCtorInitializer(SemaRef.Context, Field, SourceLocation(), 5319 SourceLocation(), DIE.get(), SourceLocation()); 5320 return Info.addFieldInitializer(Init); 5321 } 5322 5323 // Don't initialize incomplete or zero-length arrays. 5324 if (isIncompleteOrZeroLengthArrayType(SemaRef.Context, Field->getType())) 5325 return false; 5326 5327 // Don't try to build an implicit initializer if there were semantic 5328 // errors in any of the initializers (and therefore we might be 5329 // missing some that the user actually wrote). 5330 if (Info.AnyErrorsInInits) 5331 return false; 5332 5333 CXXCtorInitializer *Init = nullptr; 5334 if (BuildImplicitMemberInitializer(Info.S, Info.Ctor, Info.IIK, Field, 5335 Indirect, Init)) 5336 return true; 5337 5338 if (!Init) 5339 return false; 5340 5341 return Info.addFieldInitializer(Init); 5342 } 5343 5344 bool 5345 Sema::SetDelegatingInitializer(CXXConstructorDecl *Constructor, 5346 CXXCtorInitializer *Initializer) { 5347 assert(Initializer->isDelegatingInitializer()); 5348 Constructor->setNumCtorInitializers(1); 5349 CXXCtorInitializer **initializer = 5350 new (Context) CXXCtorInitializer*[1]; 5351 memcpy(initializer, &Initializer, sizeof (CXXCtorInitializer*)); 5352 Constructor->setCtorInitializers(initializer); 5353 5354 if (CXXDestructorDecl *Dtor = LookupDestructor(Constructor->getParent())) { 5355 MarkFunctionReferenced(Initializer->getSourceLocation(), Dtor); 5356 DiagnoseUseOfDecl(Dtor, Initializer->getSourceLocation()); 5357 } 5358 5359 DelegatingCtorDecls.push_back(Constructor); 5360 5361 DiagnoseUninitializedFields(*this, Constructor); 5362 5363 return false; 5364 } 5365 5366 bool Sema::SetCtorInitializers(CXXConstructorDecl *Constructor, bool AnyErrors, 5367 ArrayRef<CXXCtorInitializer *> Initializers) { 5368 if (Constructor->isDependentContext()) { 5369 // Just store the initializers as written, they will be checked during 5370 // instantiation. 5371 if (!Initializers.empty()) { 5372 Constructor->setNumCtorInitializers(Initializers.size()); 5373 CXXCtorInitializer **baseOrMemberInitializers = 5374 new (Context) CXXCtorInitializer*[Initializers.size()]; 5375 memcpy(baseOrMemberInitializers, Initializers.data(), 5376 Initializers.size() * sizeof(CXXCtorInitializer*)); 5377 Constructor->setCtorInitializers(baseOrMemberInitializers); 5378 } 5379 5380 // Let template instantiation know whether we had errors. 5381 if (AnyErrors) 5382 Constructor->setInvalidDecl(); 5383 5384 return false; 5385 } 5386 5387 BaseAndFieldInfo Info(*this, Constructor, AnyErrors); 5388 5389 // We need to build the initializer AST according to order of construction 5390 // and not what user specified in the Initializers list. 5391 CXXRecordDecl *ClassDecl = Constructor->getParent()->getDefinition(); 5392 if (!ClassDecl) 5393 return true; 5394 5395 bool HadError = false; 5396 5397 for (unsigned i = 0; i < Initializers.size(); i++) { 5398 CXXCtorInitializer *Member = Initializers[i]; 5399 5400 if (Member->isBaseInitializer()) 5401 Info.AllBaseFields[Member->getBaseClass()->getAs<RecordType>()] = Member; 5402 else { 5403 Info.AllBaseFields[Member->getAnyMember()->getCanonicalDecl()] = Member; 5404 5405 if (IndirectFieldDecl *F = Member->getIndirectMember()) { 5406 for (auto *C : F->chain()) { 5407 FieldDecl *FD = dyn_cast<FieldDecl>(C); 5408 if (FD && FD->getParent()->isUnion()) 5409 Info.ActiveUnionMember.insert(std::make_pair( 5410 FD->getParent()->getCanonicalDecl(), FD->getCanonicalDecl())); 5411 } 5412 } else if (FieldDecl *FD = Member->getMember()) { 5413 if (FD->getParent()->isUnion()) 5414 Info.ActiveUnionMember.insert(std::make_pair( 5415 FD->getParent()->getCanonicalDecl(), FD->getCanonicalDecl())); 5416 } 5417 } 5418 } 5419 5420 // Keep track of the direct virtual bases. 5421 llvm::SmallPtrSet<CXXBaseSpecifier *, 16> DirectVBases; 5422 for (auto &I : ClassDecl->bases()) { 5423 if (I.isVirtual()) 5424 DirectVBases.insert(&I); 5425 } 5426 5427 // Push virtual bases before others. 5428 for (auto &VBase : ClassDecl->vbases()) { 5429 if (CXXCtorInitializer *Value 5430 = Info.AllBaseFields.lookup(VBase.getType()->getAs<RecordType>())) { 5431 // [class.base.init]p7, per DR257: 5432 // A mem-initializer where the mem-initializer-id names a virtual base 5433 // class is ignored during execution of a constructor of any class that 5434 // is not the most derived class. 5435 if (ClassDecl->isAbstract()) { 5436 // FIXME: Provide a fixit to remove the base specifier. This requires 5437 // tracking the location of the associated comma for a base specifier. 5438 Diag(Value->getSourceLocation(), diag::warn_abstract_vbase_init_ignored) 5439 << VBase.getType() << ClassDecl; 5440 DiagnoseAbstractType(ClassDecl); 5441 } 5442 5443 Info.AllToInit.push_back(Value); 5444 } else if (!AnyErrors && !ClassDecl->isAbstract()) { 5445 // [class.base.init]p8, per DR257: 5446 // If a given [...] base class is not named by a mem-initializer-id 5447 // [...] and the entity is not a virtual base class of an abstract 5448 // class, then [...] the entity is default-initialized. 5449 bool IsInheritedVirtualBase = !DirectVBases.count(&VBase); 5450 CXXCtorInitializer *CXXBaseInit; 5451 if (BuildImplicitBaseInitializer(*this, Constructor, Info.IIK, 5452 &VBase, IsInheritedVirtualBase, 5453 CXXBaseInit)) { 5454 HadError = true; 5455 continue; 5456 } 5457 5458 Info.AllToInit.push_back(CXXBaseInit); 5459 } 5460 } 5461 5462 // Non-virtual bases. 5463 for (auto &Base : ClassDecl->bases()) { 5464 // Virtuals are in the virtual base list and already constructed. 5465 if (Base.isVirtual()) 5466 continue; 5467 5468 if (CXXCtorInitializer *Value 5469 = Info.AllBaseFields.lookup(Base.getType()->getAs<RecordType>())) { 5470 Info.AllToInit.push_back(Value); 5471 } else if (!AnyErrors) { 5472 CXXCtorInitializer *CXXBaseInit; 5473 if (BuildImplicitBaseInitializer(*this, Constructor, Info.IIK, 5474 &Base, /*IsInheritedVirtualBase=*/false, 5475 CXXBaseInit)) { 5476 HadError = true; 5477 continue; 5478 } 5479 5480 Info.AllToInit.push_back(CXXBaseInit); 5481 } 5482 } 5483 5484 // Fields. 5485 for (auto *Mem : ClassDecl->decls()) { 5486 if (auto *F = dyn_cast<FieldDecl>(Mem)) { 5487 // C++ [class.bit]p2: 5488 // A declaration for a bit-field that omits the identifier declares an 5489 // unnamed bit-field. Unnamed bit-fields are not members and cannot be 5490 // initialized. 5491 if (F->isUnnamedBitfield()) 5492 continue; 5493 5494 // If we're not generating the implicit copy/move constructor, then we'll 5495 // handle anonymous struct/union fields based on their individual 5496 // indirect fields. 5497 if (F->isAnonymousStructOrUnion() && !Info.isImplicitCopyOrMove()) 5498 continue; 5499 5500 if (CollectFieldInitializer(*this, Info, F)) 5501 HadError = true; 5502 continue; 5503 } 5504 5505 // Beyond this point, we only consider default initialization. 5506 if (Info.isImplicitCopyOrMove()) 5507 continue; 5508 5509 if (auto *F = dyn_cast<IndirectFieldDecl>(Mem)) { 5510 if (F->getType()->isIncompleteArrayType()) { 5511 assert(ClassDecl->hasFlexibleArrayMember() && 5512 "Incomplete array type is not valid"); 5513 continue; 5514 } 5515 5516 // Initialize each field of an anonymous struct individually. 5517 if (CollectFieldInitializer(*this, Info, F->getAnonField(), F)) 5518 HadError = true; 5519 5520 continue; 5521 } 5522 } 5523 5524 unsigned NumInitializers = Info.AllToInit.size(); 5525 if (NumInitializers > 0) { 5526 Constructor->setNumCtorInitializers(NumInitializers); 5527 CXXCtorInitializer **baseOrMemberInitializers = 5528 new (Context) CXXCtorInitializer*[NumInitializers]; 5529 memcpy(baseOrMemberInitializers, Info.AllToInit.data(), 5530 NumInitializers * sizeof(CXXCtorInitializer*)); 5531 Constructor->setCtorInitializers(baseOrMemberInitializers); 5532 5533 // Constructors implicitly reference the base and member 5534 // destructors. 5535 MarkBaseAndMemberDestructorsReferenced(Constructor->getLocation(), 5536 Constructor->getParent()); 5537 } 5538 5539 return HadError; 5540 } 5541 5542 static void PopulateKeysForFields(FieldDecl *Field, SmallVectorImpl<const void*> &IdealInits) { 5543 if (const RecordType *RT = Field->getType()->getAs<RecordType>()) { 5544 const RecordDecl *RD = RT->getDecl(); 5545 if (RD->isAnonymousStructOrUnion()) { 5546 for (auto *Field : RD->fields()) 5547 PopulateKeysForFields(Field, IdealInits); 5548 return; 5549 } 5550 } 5551 IdealInits.push_back(Field->getCanonicalDecl()); 5552 } 5553 5554 static const void *GetKeyForBase(ASTContext &Context, QualType BaseType) { 5555 return Context.getCanonicalType(BaseType).getTypePtr(); 5556 } 5557 5558 static const void *GetKeyForMember(ASTContext &Context, 5559 CXXCtorInitializer *Member) { 5560 if (!Member->isAnyMemberInitializer()) 5561 return GetKeyForBase(Context, QualType(Member->getBaseClass(), 0)); 5562 5563 return Member->getAnyMember()->getCanonicalDecl(); 5564 } 5565 5566 static void AddInitializerToDiag(const Sema::SemaDiagnosticBuilder &Diag, 5567 const CXXCtorInitializer *Previous, 5568 const CXXCtorInitializer *Current) { 5569 if (Previous->isAnyMemberInitializer()) 5570 Diag << 0 << Previous->getAnyMember(); 5571 else 5572 Diag << 1 << Previous->getTypeSourceInfo()->getType(); 5573 5574 if (Current->isAnyMemberInitializer()) 5575 Diag << 0 << Current->getAnyMember(); 5576 else 5577 Diag << 1 << Current->getTypeSourceInfo()->getType(); 5578 } 5579 5580 static void DiagnoseBaseOrMemInitializerOrder( 5581 Sema &SemaRef, const CXXConstructorDecl *Constructor, 5582 ArrayRef<CXXCtorInitializer *> Inits) { 5583 if (Constructor->getDeclContext()->isDependentContext()) 5584 return; 5585 5586 // Don't check initializers order unless the warning is enabled at the 5587 // location of at least one initializer. 5588 bool ShouldCheckOrder = false; 5589 for (unsigned InitIndex = 0; InitIndex != Inits.size(); ++InitIndex) { 5590 CXXCtorInitializer *Init = Inits[InitIndex]; 5591 if (!SemaRef.Diags.isIgnored(diag::warn_initializer_out_of_order, 5592 Init->getSourceLocation())) { 5593 ShouldCheckOrder = true; 5594 break; 5595 } 5596 } 5597 if (!ShouldCheckOrder) 5598 return; 5599 5600 // Build the list of bases and members in the order that they'll 5601 // actually be initialized. The explicit initializers should be in 5602 // this same order but may be missing things. 5603 SmallVector<const void*, 32> IdealInitKeys; 5604 5605 const CXXRecordDecl *ClassDecl = Constructor->getParent(); 5606 5607 // 1. Virtual bases. 5608 for (const auto &VBase : ClassDecl->vbases()) 5609 IdealInitKeys.push_back(GetKeyForBase(SemaRef.Context, VBase.getType())); 5610 5611 // 2. Non-virtual bases. 5612 for (const auto &Base : ClassDecl->bases()) { 5613 if (Base.isVirtual()) 5614 continue; 5615 IdealInitKeys.push_back(GetKeyForBase(SemaRef.Context, Base.getType())); 5616 } 5617 5618 // 3. Direct fields. 5619 for (auto *Field : ClassDecl->fields()) { 5620 if (Field->isUnnamedBitfield()) 5621 continue; 5622 5623 PopulateKeysForFields(Field, IdealInitKeys); 5624 } 5625 5626 unsigned NumIdealInits = IdealInitKeys.size(); 5627 unsigned IdealIndex = 0; 5628 5629 // Track initializers that are in an incorrect order for either a warning or 5630 // note if multiple ones occur. 5631 SmallVector<unsigned> WarnIndexes; 5632 // Correlates the index of an initializer in the init-list to the index of 5633 // the field/base in the class. 5634 SmallVector<std::pair<unsigned, unsigned>, 32> CorrelatedInitOrder; 5635 5636 for (unsigned InitIndex = 0; InitIndex != Inits.size(); ++InitIndex) { 5637 const void *InitKey = GetKeyForMember(SemaRef.Context, Inits[InitIndex]); 5638 5639 // Scan forward to try to find this initializer in the idealized 5640 // initializers list. 5641 for (; IdealIndex != NumIdealInits; ++IdealIndex) 5642 if (InitKey == IdealInitKeys[IdealIndex]) 5643 break; 5644 5645 // If we didn't find this initializer, it must be because we 5646 // scanned past it on a previous iteration. That can only 5647 // happen if we're out of order; emit a warning. 5648 if (IdealIndex == NumIdealInits && InitIndex) { 5649 WarnIndexes.push_back(InitIndex); 5650 5651 // Move back to the initializer's location in the ideal list. 5652 for (IdealIndex = 0; IdealIndex != NumIdealInits; ++IdealIndex) 5653 if (InitKey == IdealInitKeys[IdealIndex]) 5654 break; 5655 5656 assert(IdealIndex < NumIdealInits && 5657 "initializer not found in initializer list"); 5658 } 5659 CorrelatedInitOrder.emplace_back(IdealIndex, InitIndex); 5660 } 5661 5662 if (WarnIndexes.empty()) 5663 return; 5664 5665 // Sort based on the ideal order, first in the pair. 5666 llvm::sort(CorrelatedInitOrder, llvm::less_first()); 5667 5668 // Introduce a new scope as SemaDiagnosticBuilder needs to be destroyed to 5669 // emit the diagnostic before we can try adding notes. 5670 { 5671 Sema::SemaDiagnosticBuilder D = SemaRef.Diag( 5672 Inits[WarnIndexes.front() - 1]->getSourceLocation(), 5673 WarnIndexes.size() == 1 ? diag::warn_initializer_out_of_order 5674 : diag::warn_some_initializers_out_of_order); 5675 5676 for (unsigned I = 0; I < CorrelatedInitOrder.size(); ++I) { 5677 if (CorrelatedInitOrder[I].second == I) 5678 continue; 5679 // Ideally we would be using InsertFromRange here, but clang doesn't 5680 // appear to handle InsertFromRange correctly when the source range is 5681 // modified by another fix-it. 5682 D << FixItHint::CreateReplacement( 5683 Inits[I]->getSourceRange(), 5684 Lexer::getSourceText( 5685 CharSourceRange::getTokenRange( 5686 Inits[CorrelatedInitOrder[I].second]->getSourceRange()), 5687 SemaRef.getSourceManager(), SemaRef.getLangOpts())); 5688 } 5689 5690 // If there is only 1 item out of order, the warning expects the name and 5691 // type of each being added to it. 5692 if (WarnIndexes.size() == 1) { 5693 AddInitializerToDiag(D, Inits[WarnIndexes.front() - 1], 5694 Inits[WarnIndexes.front()]); 5695 return; 5696 } 5697 } 5698 // More than 1 item to warn, create notes letting the user know which ones 5699 // are bad. 5700 for (unsigned WarnIndex : WarnIndexes) { 5701 const clang::CXXCtorInitializer *PrevInit = Inits[WarnIndex - 1]; 5702 auto D = SemaRef.Diag(PrevInit->getSourceLocation(), 5703 diag::note_initializer_out_of_order); 5704 AddInitializerToDiag(D, PrevInit, Inits[WarnIndex]); 5705 D << PrevInit->getSourceRange(); 5706 } 5707 } 5708 5709 namespace { 5710 bool CheckRedundantInit(Sema &S, 5711 CXXCtorInitializer *Init, 5712 CXXCtorInitializer *&PrevInit) { 5713 if (!PrevInit) { 5714 PrevInit = Init; 5715 return false; 5716 } 5717 5718 if (FieldDecl *Field = Init->getAnyMember()) 5719 S.Diag(Init->getSourceLocation(), 5720 diag::err_multiple_mem_initialization) 5721 << Field->getDeclName() 5722 << Init->getSourceRange(); 5723 else { 5724 const Type *BaseClass = Init->getBaseClass(); 5725 assert(BaseClass && "neither field nor base"); 5726 S.Diag(Init->getSourceLocation(), 5727 diag::err_multiple_base_initialization) 5728 << QualType(BaseClass, 0) 5729 << Init->getSourceRange(); 5730 } 5731 S.Diag(PrevInit->getSourceLocation(), diag::note_previous_initializer) 5732 << 0 << PrevInit->getSourceRange(); 5733 5734 return true; 5735 } 5736 5737 typedef std::pair<NamedDecl *, CXXCtorInitializer *> UnionEntry; 5738 typedef llvm::DenseMap<RecordDecl*, UnionEntry> RedundantUnionMap; 5739 5740 bool CheckRedundantUnionInit(Sema &S, 5741 CXXCtorInitializer *Init, 5742 RedundantUnionMap &Unions) { 5743 FieldDecl *Field = Init->getAnyMember(); 5744 RecordDecl *Parent = Field->getParent(); 5745 NamedDecl *Child = Field; 5746 5747 while (Parent->isAnonymousStructOrUnion() || Parent->isUnion()) { 5748 if (Parent->isUnion()) { 5749 UnionEntry &En = Unions[Parent]; 5750 if (En.first && En.first != Child) { 5751 S.Diag(Init->getSourceLocation(), 5752 diag::err_multiple_mem_union_initialization) 5753 << Field->getDeclName() 5754 << Init->getSourceRange(); 5755 S.Diag(En.second->getSourceLocation(), diag::note_previous_initializer) 5756 << 0 << En.second->getSourceRange(); 5757 return true; 5758 } 5759 if (!En.first) { 5760 En.first = Child; 5761 En.second = Init; 5762 } 5763 if (!Parent->isAnonymousStructOrUnion()) 5764 return false; 5765 } 5766 5767 Child = Parent; 5768 Parent = cast<RecordDecl>(Parent->getDeclContext()); 5769 } 5770 5771 return false; 5772 } 5773 } // namespace 5774 5775 /// ActOnMemInitializers - Handle the member initializers for a constructor. 5776 void Sema::ActOnMemInitializers(Decl *ConstructorDecl, 5777 SourceLocation ColonLoc, 5778 ArrayRef<CXXCtorInitializer*> MemInits, 5779 bool AnyErrors) { 5780 if (!ConstructorDecl) 5781 return; 5782 5783 AdjustDeclIfTemplate(ConstructorDecl); 5784 5785 CXXConstructorDecl *Constructor 5786 = dyn_cast<CXXConstructorDecl>(ConstructorDecl); 5787 5788 if (!Constructor) { 5789 Diag(ColonLoc, diag::err_only_constructors_take_base_inits); 5790 return; 5791 } 5792 5793 // Mapping for the duplicate initializers check. 5794 // For member initializers, this is keyed with a FieldDecl*. 5795 // For base initializers, this is keyed with a Type*. 5796 llvm::DenseMap<const void *, CXXCtorInitializer *> Members; 5797 5798 // Mapping for the inconsistent anonymous-union initializers check. 5799 RedundantUnionMap MemberUnions; 5800 5801 bool HadError = false; 5802 for (unsigned i = 0; i < MemInits.size(); i++) { 5803 CXXCtorInitializer *Init = MemInits[i]; 5804 5805 // Set the source order index. 5806 Init->setSourceOrder(i); 5807 5808 if (Init->isAnyMemberInitializer()) { 5809 const void *Key = GetKeyForMember(Context, Init); 5810 if (CheckRedundantInit(*this, Init, Members[Key]) || 5811 CheckRedundantUnionInit(*this, Init, MemberUnions)) 5812 HadError = true; 5813 } else if (Init->isBaseInitializer()) { 5814 const void *Key = GetKeyForMember(Context, Init); 5815 if (CheckRedundantInit(*this, Init, Members[Key])) 5816 HadError = true; 5817 } else { 5818 assert(Init->isDelegatingInitializer()); 5819 // This must be the only initializer 5820 if (MemInits.size() != 1) { 5821 Diag(Init->getSourceLocation(), 5822 diag::err_delegating_initializer_alone) 5823 << Init->getSourceRange() << MemInits[i ? 0 : 1]->getSourceRange(); 5824 // We will treat this as being the only initializer. 5825 } 5826 SetDelegatingInitializer(Constructor, MemInits[i]); 5827 // Return immediately as the initializer is set. 5828 return; 5829 } 5830 } 5831 5832 if (HadError) 5833 return; 5834 5835 DiagnoseBaseOrMemInitializerOrder(*this, Constructor, MemInits); 5836 5837 SetCtorInitializers(Constructor, AnyErrors, MemInits); 5838 5839 DiagnoseUninitializedFields(*this, Constructor); 5840 } 5841 5842 void 5843 Sema::MarkBaseAndMemberDestructorsReferenced(SourceLocation Location, 5844 CXXRecordDecl *ClassDecl) { 5845 // Ignore dependent contexts. Also ignore unions, since their members never 5846 // have destructors implicitly called. 5847 if (ClassDecl->isDependentContext() || ClassDecl->isUnion()) 5848 return; 5849 5850 // FIXME: all the access-control diagnostics are positioned on the 5851 // field/base declaration. That's probably good; that said, the 5852 // user might reasonably want to know why the destructor is being 5853 // emitted, and we currently don't say. 5854 5855 // Non-static data members. 5856 for (auto *Field : ClassDecl->fields()) { 5857 if (Field->isInvalidDecl()) 5858 continue; 5859 5860 // Don't destroy incomplete or zero-length arrays. 5861 if (isIncompleteOrZeroLengthArrayType(Context, Field->getType())) 5862 continue; 5863 5864 QualType FieldType = Context.getBaseElementType(Field->getType()); 5865 5866 const RecordType* RT = FieldType->getAs<RecordType>(); 5867 if (!RT) 5868 continue; 5869 5870 CXXRecordDecl *FieldClassDecl = cast<CXXRecordDecl>(RT->getDecl()); 5871 if (FieldClassDecl->isInvalidDecl()) 5872 continue; 5873 if (FieldClassDecl->hasIrrelevantDestructor()) 5874 continue; 5875 // The destructor for an implicit anonymous union member is never invoked. 5876 if (FieldClassDecl->isUnion() && FieldClassDecl->isAnonymousStructOrUnion()) 5877 continue; 5878 5879 CXXDestructorDecl *Dtor = LookupDestructor(FieldClassDecl); 5880 // Dtor might still be missing, e.g because it's invalid. 5881 if (!Dtor) 5882 continue; 5883 CheckDestructorAccess(Field->getLocation(), Dtor, 5884 PDiag(diag::err_access_dtor_field) 5885 << Field->getDeclName() 5886 << FieldType); 5887 5888 MarkFunctionReferenced(Location, Dtor); 5889 DiagnoseUseOfDecl(Dtor, Location); 5890 } 5891 5892 // We only potentially invoke the destructors of potentially constructed 5893 // subobjects. 5894 bool VisitVirtualBases = !ClassDecl->isAbstract(); 5895 5896 // If the destructor exists and has already been marked used in the MS ABI, 5897 // then virtual base destructors have already been checked and marked used. 5898 // Skip checking them again to avoid duplicate diagnostics. 5899 if (Context.getTargetInfo().getCXXABI().isMicrosoft()) { 5900 CXXDestructorDecl *Dtor = ClassDecl->getDestructor(); 5901 if (Dtor && Dtor->isUsed()) 5902 VisitVirtualBases = false; 5903 } 5904 5905 llvm::SmallPtrSet<const RecordType *, 8> DirectVirtualBases; 5906 5907 // Bases. 5908 for (const auto &Base : ClassDecl->bases()) { 5909 const RecordType *RT = Base.getType()->getAs<RecordType>(); 5910 if (!RT) 5911 continue; 5912 5913 // Remember direct virtual bases. 5914 if (Base.isVirtual()) { 5915 if (!VisitVirtualBases) 5916 continue; 5917 DirectVirtualBases.insert(RT); 5918 } 5919 5920 CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(RT->getDecl()); 5921 // If our base class is invalid, we probably can't get its dtor anyway. 5922 if (BaseClassDecl->isInvalidDecl()) 5923 continue; 5924 if (BaseClassDecl->hasIrrelevantDestructor()) 5925 continue; 5926 5927 CXXDestructorDecl *Dtor = LookupDestructor(BaseClassDecl); 5928 // Dtor might still be missing, e.g because it's invalid. 5929 if (!Dtor) 5930 continue; 5931 5932 // FIXME: caret should be on the start of the class name 5933 CheckDestructorAccess(Base.getBeginLoc(), Dtor, 5934 PDiag(diag::err_access_dtor_base) 5935 << Base.getType() << Base.getSourceRange(), 5936 Context.getTypeDeclType(ClassDecl)); 5937 5938 MarkFunctionReferenced(Location, Dtor); 5939 DiagnoseUseOfDecl(Dtor, Location); 5940 } 5941 5942 if (VisitVirtualBases) 5943 MarkVirtualBaseDestructorsReferenced(Location, ClassDecl, 5944 &DirectVirtualBases); 5945 } 5946 5947 void Sema::MarkVirtualBaseDestructorsReferenced( 5948 SourceLocation Location, CXXRecordDecl *ClassDecl, 5949 llvm::SmallPtrSetImpl<const RecordType *> *DirectVirtualBases) { 5950 // Virtual bases. 5951 for (const auto &VBase : ClassDecl->vbases()) { 5952 // Bases are always records in a well-formed non-dependent class. 5953 const RecordType *RT = VBase.getType()->castAs<RecordType>(); 5954 5955 // Ignore already visited direct virtual bases. 5956 if (DirectVirtualBases && DirectVirtualBases->count(RT)) 5957 continue; 5958 5959 CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(RT->getDecl()); 5960 // If our base class is invalid, we probably can't get its dtor anyway. 5961 if (BaseClassDecl->isInvalidDecl()) 5962 continue; 5963 if (BaseClassDecl->hasIrrelevantDestructor()) 5964 continue; 5965 5966 CXXDestructorDecl *Dtor = LookupDestructor(BaseClassDecl); 5967 // Dtor might still be missing, e.g because it's invalid. 5968 if (!Dtor) 5969 continue; 5970 if (CheckDestructorAccess( 5971 ClassDecl->getLocation(), Dtor, 5972 PDiag(diag::err_access_dtor_vbase) 5973 << Context.getTypeDeclType(ClassDecl) << VBase.getType(), 5974 Context.getTypeDeclType(ClassDecl)) == 5975 AR_accessible) { 5976 CheckDerivedToBaseConversion( 5977 Context.getTypeDeclType(ClassDecl), VBase.getType(), 5978 diag::err_access_dtor_vbase, 0, ClassDecl->getLocation(), 5979 SourceRange(), DeclarationName(), nullptr); 5980 } 5981 5982 MarkFunctionReferenced(Location, Dtor); 5983 DiagnoseUseOfDecl(Dtor, Location); 5984 } 5985 } 5986 5987 void Sema::ActOnDefaultCtorInitializers(Decl *CDtorDecl) { 5988 if (!CDtorDecl) 5989 return; 5990 5991 if (CXXConstructorDecl *Constructor 5992 = dyn_cast<CXXConstructorDecl>(CDtorDecl)) { 5993 SetCtorInitializers(Constructor, /*AnyErrors=*/false); 5994 DiagnoseUninitializedFields(*this, Constructor); 5995 } 5996 } 5997 5998 bool Sema::isAbstractType(SourceLocation Loc, QualType T) { 5999 if (!getLangOpts().CPlusPlus) 6000 return false; 6001 6002 const auto *RD = Context.getBaseElementType(T)->getAsCXXRecordDecl(); 6003 if (!RD) 6004 return false; 6005 6006 // FIXME: Per [temp.inst]p1, we are supposed to trigger instantiation of a 6007 // class template specialization here, but doing so breaks a lot of code. 6008 6009 // We can't answer whether something is abstract until it has a 6010 // definition. If it's currently being defined, we'll walk back 6011 // over all the declarations when we have a full definition. 6012 const CXXRecordDecl *Def = RD->getDefinition(); 6013 if (!Def || Def->isBeingDefined()) 6014 return false; 6015 6016 return RD->isAbstract(); 6017 } 6018 6019 bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T, 6020 TypeDiagnoser &Diagnoser) { 6021 if (!isAbstractType(Loc, T)) 6022 return false; 6023 6024 T = Context.getBaseElementType(T); 6025 Diagnoser.diagnose(*this, Loc, T); 6026 DiagnoseAbstractType(T->getAsCXXRecordDecl()); 6027 return true; 6028 } 6029 6030 void Sema::DiagnoseAbstractType(const CXXRecordDecl *RD) { 6031 // Check if we've already emitted the list of pure virtual functions 6032 // for this class. 6033 if (PureVirtualClassDiagSet && PureVirtualClassDiagSet->count(RD)) 6034 return; 6035 6036 // If the diagnostic is suppressed, don't emit the notes. We're only 6037 // going to emit them once, so try to attach them to a diagnostic we're 6038 // actually going to show. 6039 if (Diags.isLastDiagnosticIgnored()) 6040 return; 6041 6042 CXXFinalOverriderMap FinalOverriders; 6043 RD->getFinalOverriders(FinalOverriders); 6044 6045 // Keep a set of seen pure methods so we won't diagnose the same method 6046 // more than once. 6047 llvm::SmallPtrSet<const CXXMethodDecl *, 8> SeenPureMethods; 6048 6049 for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(), 6050 MEnd = FinalOverriders.end(); 6051 M != MEnd; 6052 ++M) { 6053 for (OverridingMethods::iterator SO = M->second.begin(), 6054 SOEnd = M->second.end(); 6055 SO != SOEnd; ++SO) { 6056 // C++ [class.abstract]p4: 6057 // A class is abstract if it contains or inherits at least one 6058 // pure virtual function for which the final overrider is pure 6059 // virtual. 6060 6061 // 6062 if (SO->second.size() != 1) 6063 continue; 6064 6065 if (!SO->second.front().Method->isPureVirtual()) 6066 continue; 6067 6068 if (!SeenPureMethods.insert(SO->second.front().Method).second) 6069 continue; 6070 6071 Diag(SO->second.front().Method->getLocation(), 6072 diag::note_pure_virtual_function) 6073 << SO->second.front().Method->getDeclName() << RD->getDeclName(); 6074 } 6075 } 6076 6077 if (!PureVirtualClassDiagSet) 6078 PureVirtualClassDiagSet.reset(new RecordDeclSetTy); 6079 PureVirtualClassDiagSet->insert(RD); 6080 } 6081 6082 namespace { 6083 struct AbstractUsageInfo { 6084 Sema &S; 6085 CXXRecordDecl *Record; 6086 CanQualType AbstractType; 6087 bool Invalid; 6088 6089 AbstractUsageInfo(Sema &S, CXXRecordDecl *Record) 6090 : S(S), Record(Record), 6091 AbstractType(S.Context.getCanonicalType( 6092 S.Context.getTypeDeclType(Record))), 6093 Invalid(false) {} 6094 6095 void DiagnoseAbstractType() { 6096 if (Invalid) return; 6097 S.DiagnoseAbstractType(Record); 6098 Invalid = true; 6099 } 6100 6101 void CheckType(const NamedDecl *D, TypeLoc TL, Sema::AbstractDiagSelID Sel); 6102 }; 6103 6104 struct CheckAbstractUsage { 6105 AbstractUsageInfo &Info; 6106 const NamedDecl *Ctx; 6107 6108 CheckAbstractUsage(AbstractUsageInfo &Info, const NamedDecl *Ctx) 6109 : Info(Info), Ctx(Ctx) {} 6110 6111 void Visit(TypeLoc TL, Sema::AbstractDiagSelID Sel) { 6112 switch (TL.getTypeLocClass()) { 6113 #define ABSTRACT_TYPELOC(CLASS, PARENT) 6114 #define TYPELOC(CLASS, PARENT) \ 6115 case TypeLoc::CLASS: Check(TL.castAs<CLASS##TypeLoc>(), Sel); break; 6116 #include "clang/AST/TypeLocNodes.def" 6117 } 6118 } 6119 6120 void Check(FunctionProtoTypeLoc TL, Sema::AbstractDiagSelID Sel) { 6121 Visit(TL.getReturnLoc(), Sema::AbstractReturnType); 6122 for (unsigned I = 0, E = TL.getNumParams(); I != E; ++I) { 6123 if (!TL.getParam(I)) 6124 continue; 6125 6126 TypeSourceInfo *TSI = TL.getParam(I)->getTypeSourceInfo(); 6127 if (TSI) Visit(TSI->getTypeLoc(), Sema::AbstractParamType); 6128 } 6129 } 6130 6131 void Check(ArrayTypeLoc TL, Sema::AbstractDiagSelID Sel) { 6132 Visit(TL.getElementLoc(), Sema::AbstractArrayType); 6133 } 6134 6135 void Check(TemplateSpecializationTypeLoc TL, Sema::AbstractDiagSelID Sel) { 6136 // Visit the type parameters from a permissive context. 6137 for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) { 6138 TemplateArgumentLoc TAL = TL.getArgLoc(I); 6139 if (TAL.getArgument().getKind() == TemplateArgument::Type) 6140 if (TypeSourceInfo *TSI = TAL.getTypeSourceInfo()) 6141 Visit(TSI->getTypeLoc(), Sema::AbstractNone); 6142 // TODO: other template argument types? 6143 } 6144 } 6145 6146 // Visit pointee types from a permissive context. 6147 #define CheckPolymorphic(Type) \ 6148 void Check(Type TL, Sema::AbstractDiagSelID Sel) { \ 6149 Visit(TL.getNextTypeLoc(), Sema::AbstractNone); \ 6150 } 6151 CheckPolymorphic(PointerTypeLoc) 6152 CheckPolymorphic(ReferenceTypeLoc) 6153 CheckPolymorphic(MemberPointerTypeLoc) 6154 CheckPolymorphic(BlockPointerTypeLoc) 6155 CheckPolymorphic(AtomicTypeLoc) 6156 6157 /// Handle all the types we haven't given a more specific 6158 /// implementation for above. 6159 void Check(TypeLoc TL, Sema::AbstractDiagSelID Sel) { 6160 // Every other kind of type that we haven't called out already 6161 // that has an inner type is either (1) sugar or (2) contains that 6162 // inner type in some way as a subobject. 6163 if (TypeLoc Next = TL.getNextTypeLoc()) 6164 return Visit(Next, Sel); 6165 6166 // If there's no inner type and we're in a permissive context, 6167 // don't diagnose. 6168 if (Sel == Sema::AbstractNone) return; 6169 6170 // Check whether the type matches the abstract type. 6171 QualType T = TL.getType(); 6172 if (T->isArrayType()) { 6173 Sel = Sema::AbstractArrayType; 6174 T = Info.S.Context.getBaseElementType(T); 6175 } 6176 CanQualType CT = T->getCanonicalTypeUnqualified().getUnqualifiedType(); 6177 if (CT != Info.AbstractType) return; 6178 6179 // It matched; do some magic. 6180 // FIXME: These should be at most warnings. See P0929R2, CWG1640, CWG1646. 6181 if (Sel == Sema::AbstractArrayType) { 6182 Info.S.Diag(Ctx->getLocation(), diag::err_array_of_abstract_type) 6183 << T << TL.getSourceRange(); 6184 } else { 6185 Info.S.Diag(Ctx->getLocation(), diag::err_abstract_type_in_decl) 6186 << Sel << T << TL.getSourceRange(); 6187 } 6188 Info.DiagnoseAbstractType(); 6189 } 6190 }; 6191 6192 void AbstractUsageInfo::CheckType(const NamedDecl *D, TypeLoc TL, 6193 Sema::AbstractDiagSelID Sel) { 6194 CheckAbstractUsage(*this, D).Visit(TL, Sel); 6195 } 6196 6197 } 6198 6199 /// Check for invalid uses of an abstract type in a function declaration. 6200 static void CheckAbstractClassUsage(AbstractUsageInfo &Info, 6201 FunctionDecl *FD) { 6202 // Only definitions are required to refer to complete and 6203 // non-abstract types. 6204 if (!FD->doesThisDeclarationHaveABody()) 6205 return; 6206 6207 // For safety's sake, just ignore it if we don't have type source 6208 // information. This should never happen for non-implicit methods, 6209 // but... 6210 if (TypeSourceInfo *TSI = FD->getTypeSourceInfo()) 6211 Info.CheckType(FD, TSI->getTypeLoc(), Sema::AbstractNone); 6212 } 6213 6214 /// Check for invalid uses of an abstract type in a variable0 declaration. 6215 static void CheckAbstractClassUsage(AbstractUsageInfo &Info, 6216 VarDecl *VD) { 6217 // No need to do the check on definitions, which require that 6218 // the type is complete. 6219 if (VD->isThisDeclarationADefinition()) 6220 return; 6221 6222 Info.CheckType(VD, VD->getTypeSourceInfo()->getTypeLoc(), 6223 Sema::AbstractVariableType); 6224 } 6225 6226 /// Check for invalid uses of an abstract type within a class definition. 6227 static void CheckAbstractClassUsage(AbstractUsageInfo &Info, 6228 CXXRecordDecl *RD) { 6229 for (auto *D : RD->decls()) { 6230 if (D->isImplicit()) continue; 6231 6232 // Step through friends to the befriended declaration. 6233 if (auto *FD = dyn_cast<FriendDecl>(D)) { 6234 D = FD->getFriendDecl(); 6235 if (!D) continue; 6236 } 6237 6238 // Functions and function templates. 6239 if (auto *FD = dyn_cast<FunctionDecl>(D)) { 6240 CheckAbstractClassUsage(Info, FD); 6241 } else if (auto *FTD = dyn_cast<FunctionTemplateDecl>(D)) { 6242 CheckAbstractClassUsage(Info, FTD->getTemplatedDecl()); 6243 6244 // Fields and static variables. 6245 } else if (auto *FD = dyn_cast<FieldDecl>(D)) { 6246 if (TypeSourceInfo *TSI = FD->getTypeSourceInfo()) 6247 Info.CheckType(FD, TSI->getTypeLoc(), Sema::AbstractFieldType); 6248 } else if (auto *VD = dyn_cast<VarDecl>(D)) { 6249 CheckAbstractClassUsage(Info, VD); 6250 } else if (auto *VTD = dyn_cast<VarTemplateDecl>(D)) { 6251 CheckAbstractClassUsage(Info, VTD->getTemplatedDecl()); 6252 6253 // Nested classes and class templates. 6254 } else if (auto *RD = dyn_cast<CXXRecordDecl>(D)) { 6255 CheckAbstractClassUsage(Info, RD); 6256 } else if (auto *CTD = dyn_cast<ClassTemplateDecl>(D)) { 6257 CheckAbstractClassUsage(Info, CTD->getTemplatedDecl()); 6258 } 6259 } 6260 } 6261 6262 static void ReferenceDllExportedMembers(Sema &S, CXXRecordDecl *Class) { 6263 Attr *ClassAttr = getDLLAttr(Class); 6264 if (!ClassAttr) 6265 return; 6266 6267 assert(ClassAttr->getKind() == attr::DLLExport); 6268 6269 TemplateSpecializationKind TSK = Class->getTemplateSpecializationKind(); 6270 6271 if (TSK == TSK_ExplicitInstantiationDeclaration) 6272 // Don't go any further if this is just an explicit instantiation 6273 // declaration. 6274 return; 6275 6276 // Add a context note to explain how we got to any diagnostics produced below. 6277 struct MarkingClassDllexported { 6278 Sema &S; 6279 MarkingClassDllexported(Sema &S, CXXRecordDecl *Class, 6280 SourceLocation AttrLoc) 6281 : S(S) { 6282 Sema::CodeSynthesisContext Ctx; 6283 Ctx.Kind = Sema::CodeSynthesisContext::MarkingClassDllexported; 6284 Ctx.PointOfInstantiation = AttrLoc; 6285 Ctx.Entity = Class; 6286 S.pushCodeSynthesisContext(Ctx); 6287 } 6288 ~MarkingClassDllexported() { 6289 S.popCodeSynthesisContext(); 6290 } 6291 } MarkingDllexportedContext(S, Class, ClassAttr->getLocation()); 6292 6293 if (S.Context.getTargetInfo().getTriple().isWindowsGNUEnvironment()) 6294 S.MarkVTableUsed(Class->getLocation(), Class, true); 6295 6296 for (Decl *Member : Class->decls()) { 6297 // Skip members that were not marked exported. 6298 if (!Member->hasAttr<DLLExportAttr>()) 6299 continue; 6300 6301 // Defined static variables that are members of an exported base 6302 // class must be marked export too. 6303 auto *VD = dyn_cast<VarDecl>(Member); 6304 if (VD && VD->getStorageClass() == SC_Static && 6305 TSK == TSK_ImplicitInstantiation) 6306 S.MarkVariableReferenced(VD->getLocation(), VD); 6307 6308 auto *MD = dyn_cast<CXXMethodDecl>(Member); 6309 if (!MD) 6310 continue; 6311 6312 if (MD->isUserProvided()) { 6313 // Instantiate non-default class member functions ... 6314 6315 // .. except for certain kinds of template specializations. 6316 if (TSK == TSK_ImplicitInstantiation && !ClassAttr->isInherited()) 6317 continue; 6318 6319 // If this is an MS ABI dllexport default constructor, instantiate any 6320 // default arguments. 6321 if (S.Context.getTargetInfo().getCXXABI().isMicrosoft()) { 6322 auto *CD = dyn_cast<CXXConstructorDecl>(MD); 6323 if (CD && CD->isDefaultConstructor() && TSK == TSK_Undeclared) { 6324 S.InstantiateDefaultCtorDefaultArgs(CD); 6325 } 6326 } 6327 6328 S.MarkFunctionReferenced(Class->getLocation(), MD); 6329 6330 // The function will be passed to the consumer when its definition is 6331 // encountered. 6332 } else if (MD->isExplicitlyDefaulted()) { 6333 // Synthesize and instantiate explicitly defaulted methods. 6334 S.MarkFunctionReferenced(Class->getLocation(), MD); 6335 6336 if (TSK != TSK_ExplicitInstantiationDefinition) { 6337 // Except for explicit instantiation defs, we will not see the 6338 // definition again later, so pass it to the consumer now. 6339 S.Consumer.HandleTopLevelDecl(DeclGroupRef(MD)); 6340 } 6341 } else if (!MD->isTrivial() || 6342 MD->isCopyAssignmentOperator() || 6343 MD->isMoveAssignmentOperator()) { 6344 // Synthesize and instantiate non-trivial implicit methods, and the copy 6345 // and move assignment operators. The latter are exported even if they 6346 // are trivial, because the address of an operator can be taken and 6347 // should compare equal across libraries. 6348 S.MarkFunctionReferenced(Class->getLocation(), MD); 6349 6350 // There is no later point when we will see the definition of this 6351 // function, so pass it to the consumer now. 6352 S.Consumer.HandleTopLevelDecl(DeclGroupRef(MD)); 6353 } 6354 } 6355 } 6356 6357 static void checkForMultipleExportedDefaultConstructors(Sema &S, 6358 CXXRecordDecl *Class) { 6359 // Only the MS ABI has default constructor closures, so we don't need to do 6360 // this semantic checking anywhere else. 6361 if (!S.Context.getTargetInfo().getCXXABI().isMicrosoft()) 6362 return; 6363 6364 CXXConstructorDecl *LastExportedDefaultCtor = nullptr; 6365 for (Decl *Member : Class->decls()) { 6366 // Look for exported default constructors. 6367 auto *CD = dyn_cast<CXXConstructorDecl>(Member); 6368 if (!CD || !CD->isDefaultConstructor()) 6369 continue; 6370 auto *Attr = CD->getAttr<DLLExportAttr>(); 6371 if (!Attr) 6372 continue; 6373 6374 // If the class is non-dependent, mark the default arguments as ODR-used so 6375 // that we can properly codegen the constructor closure. 6376 if (!Class->isDependentContext()) { 6377 for (ParmVarDecl *PD : CD->parameters()) { 6378 (void)S.CheckCXXDefaultArgExpr(Attr->getLocation(), CD, PD); 6379 S.DiscardCleanupsInEvaluationContext(); 6380 } 6381 } 6382 6383 if (LastExportedDefaultCtor) { 6384 S.Diag(LastExportedDefaultCtor->getLocation(), 6385 diag::err_attribute_dll_ambiguous_default_ctor) 6386 << Class; 6387 S.Diag(CD->getLocation(), diag::note_entity_declared_at) 6388 << CD->getDeclName(); 6389 return; 6390 } 6391 LastExportedDefaultCtor = CD; 6392 } 6393 } 6394 6395 static void checkCUDADeviceBuiltinSurfaceClassTemplate(Sema &S, 6396 CXXRecordDecl *Class) { 6397 bool ErrorReported = false; 6398 auto reportIllegalClassTemplate = [&ErrorReported](Sema &S, 6399 ClassTemplateDecl *TD) { 6400 if (ErrorReported) 6401 return; 6402 S.Diag(TD->getLocation(), 6403 diag::err_cuda_device_builtin_surftex_cls_template) 6404 << /*surface*/ 0 << TD; 6405 ErrorReported = true; 6406 }; 6407 6408 ClassTemplateDecl *TD = Class->getDescribedClassTemplate(); 6409 if (!TD) { 6410 auto *SD = dyn_cast<ClassTemplateSpecializationDecl>(Class); 6411 if (!SD) { 6412 S.Diag(Class->getLocation(), 6413 diag::err_cuda_device_builtin_surftex_ref_decl) 6414 << /*surface*/ 0 << Class; 6415 S.Diag(Class->getLocation(), 6416 diag::note_cuda_device_builtin_surftex_should_be_template_class) 6417 << Class; 6418 return; 6419 } 6420 TD = SD->getSpecializedTemplate(); 6421 } 6422 6423 TemplateParameterList *Params = TD->getTemplateParameters(); 6424 unsigned N = Params->size(); 6425 6426 if (N != 2) { 6427 reportIllegalClassTemplate(S, TD); 6428 S.Diag(TD->getLocation(), 6429 diag::note_cuda_device_builtin_surftex_cls_should_have_n_args) 6430 << TD << 2; 6431 } 6432 if (N > 0 && !isa<TemplateTypeParmDecl>(Params->getParam(0))) { 6433 reportIllegalClassTemplate(S, TD); 6434 S.Diag(TD->getLocation(), 6435 diag::note_cuda_device_builtin_surftex_cls_should_have_match_arg) 6436 << TD << /*1st*/ 0 << /*type*/ 0; 6437 } 6438 if (N > 1) { 6439 auto *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Params->getParam(1)); 6440 if (!NTTP || !NTTP->getType()->isIntegralOrEnumerationType()) { 6441 reportIllegalClassTemplate(S, TD); 6442 S.Diag(TD->getLocation(), 6443 diag::note_cuda_device_builtin_surftex_cls_should_have_match_arg) 6444 << TD << /*2nd*/ 1 << /*integer*/ 1; 6445 } 6446 } 6447 } 6448 6449 static void checkCUDADeviceBuiltinTextureClassTemplate(Sema &S, 6450 CXXRecordDecl *Class) { 6451 bool ErrorReported = false; 6452 auto reportIllegalClassTemplate = [&ErrorReported](Sema &S, 6453 ClassTemplateDecl *TD) { 6454 if (ErrorReported) 6455 return; 6456 S.Diag(TD->getLocation(), 6457 diag::err_cuda_device_builtin_surftex_cls_template) 6458 << /*texture*/ 1 << TD; 6459 ErrorReported = true; 6460 }; 6461 6462 ClassTemplateDecl *TD = Class->getDescribedClassTemplate(); 6463 if (!TD) { 6464 auto *SD = dyn_cast<ClassTemplateSpecializationDecl>(Class); 6465 if (!SD) { 6466 S.Diag(Class->getLocation(), 6467 diag::err_cuda_device_builtin_surftex_ref_decl) 6468 << /*texture*/ 1 << Class; 6469 S.Diag(Class->getLocation(), 6470 diag::note_cuda_device_builtin_surftex_should_be_template_class) 6471 << Class; 6472 return; 6473 } 6474 TD = SD->getSpecializedTemplate(); 6475 } 6476 6477 TemplateParameterList *Params = TD->getTemplateParameters(); 6478 unsigned N = Params->size(); 6479 6480 if (N != 3) { 6481 reportIllegalClassTemplate(S, TD); 6482 S.Diag(TD->getLocation(), 6483 diag::note_cuda_device_builtin_surftex_cls_should_have_n_args) 6484 << TD << 3; 6485 } 6486 if (N > 0 && !isa<TemplateTypeParmDecl>(Params->getParam(0))) { 6487 reportIllegalClassTemplate(S, TD); 6488 S.Diag(TD->getLocation(), 6489 diag::note_cuda_device_builtin_surftex_cls_should_have_match_arg) 6490 << TD << /*1st*/ 0 << /*type*/ 0; 6491 } 6492 if (N > 1) { 6493 auto *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Params->getParam(1)); 6494 if (!NTTP || !NTTP->getType()->isIntegralOrEnumerationType()) { 6495 reportIllegalClassTemplate(S, TD); 6496 S.Diag(TD->getLocation(), 6497 diag::note_cuda_device_builtin_surftex_cls_should_have_match_arg) 6498 << TD << /*2nd*/ 1 << /*integer*/ 1; 6499 } 6500 } 6501 if (N > 2) { 6502 auto *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Params->getParam(2)); 6503 if (!NTTP || !NTTP->getType()->isIntegralOrEnumerationType()) { 6504 reportIllegalClassTemplate(S, TD); 6505 S.Diag(TD->getLocation(), 6506 diag::note_cuda_device_builtin_surftex_cls_should_have_match_arg) 6507 << TD << /*3rd*/ 2 << /*integer*/ 1; 6508 } 6509 } 6510 } 6511 6512 void Sema::checkClassLevelCodeSegAttribute(CXXRecordDecl *Class) { 6513 // Mark any compiler-generated routines with the implicit code_seg attribute. 6514 for (auto *Method : Class->methods()) { 6515 if (Method->isUserProvided()) 6516 continue; 6517 if (Attr *A = getImplicitCodeSegOrSectionAttrForFunction(Method, /*IsDefinition=*/true)) 6518 Method->addAttr(A); 6519 } 6520 } 6521 6522 /// Check class-level dllimport/dllexport attribute. 6523 void Sema::checkClassLevelDLLAttribute(CXXRecordDecl *Class) { 6524 Attr *ClassAttr = getDLLAttr(Class); 6525 6526 // MSVC inherits DLL attributes to partial class template specializations. 6527 if (Context.getTargetInfo().shouldDLLImportComdatSymbols() && !ClassAttr) { 6528 if (auto *Spec = dyn_cast<ClassTemplatePartialSpecializationDecl>(Class)) { 6529 if (Attr *TemplateAttr = 6530 getDLLAttr(Spec->getSpecializedTemplate()->getTemplatedDecl())) { 6531 auto *A = cast<InheritableAttr>(TemplateAttr->clone(getASTContext())); 6532 A->setInherited(true); 6533 ClassAttr = A; 6534 } 6535 } 6536 } 6537 6538 if (!ClassAttr) 6539 return; 6540 6541 // MSVC allows imported or exported template classes that have UniqueExternal 6542 // linkage. This occurs when the template class has been instantiated with 6543 // a template parameter which itself has internal linkage. 6544 // We drop the attribute to avoid exporting or importing any members. 6545 if ((Context.getTargetInfo().getCXXABI().isMicrosoft() || 6546 Context.getTargetInfo().getTriple().isPS()) && 6547 (!Class->isExternallyVisible() && Class->hasExternalFormalLinkage())) { 6548 Class->dropAttrs<DLLExportAttr, DLLImportAttr>(); 6549 return; 6550 } 6551 6552 if (!Class->isExternallyVisible()) { 6553 Diag(Class->getLocation(), diag::err_attribute_dll_not_extern) 6554 << Class << ClassAttr; 6555 return; 6556 } 6557 6558 if (Context.getTargetInfo().shouldDLLImportComdatSymbols() && 6559 !ClassAttr->isInherited()) { 6560 // Diagnose dll attributes on members of class with dll attribute. 6561 for (Decl *Member : Class->decls()) { 6562 if (!isa<VarDecl>(Member) && !isa<CXXMethodDecl>(Member)) 6563 continue; 6564 InheritableAttr *MemberAttr = getDLLAttr(Member); 6565 if (!MemberAttr || MemberAttr->isInherited() || Member->isInvalidDecl()) 6566 continue; 6567 6568 Diag(MemberAttr->getLocation(), 6569 diag::err_attribute_dll_member_of_dll_class) 6570 << MemberAttr << ClassAttr; 6571 Diag(ClassAttr->getLocation(), diag::note_previous_attribute); 6572 Member->setInvalidDecl(); 6573 } 6574 } 6575 6576 if (Class->getDescribedClassTemplate()) 6577 // Don't inherit dll attribute until the template is instantiated. 6578 return; 6579 6580 // The class is either imported or exported. 6581 const bool ClassExported = ClassAttr->getKind() == attr::DLLExport; 6582 6583 // Check if this was a dllimport attribute propagated from a derived class to 6584 // a base class template specialization. We don't apply these attributes to 6585 // static data members. 6586 const bool PropagatedImport = 6587 !ClassExported && 6588 cast<DLLImportAttr>(ClassAttr)->wasPropagatedToBaseTemplate(); 6589 6590 TemplateSpecializationKind TSK = Class->getTemplateSpecializationKind(); 6591 6592 // Ignore explicit dllexport on explicit class template instantiation 6593 // declarations, except in MinGW mode. 6594 if (ClassExported && !ClassAttr->isInherited() && 6595 TSK == TSK_ExplicitInstantiationDeclaration && 6596 !Context.getTargetInfo().getTriple().isWindowsGNUEnvironment()) { 6597 Class->dropAttr<DLLExportAttr>(); 6598 return; 6599 } 6600 6601 // Force declaration of implicit members so they can inherit the attribute. 6602 ForceDeclarationOfImplicitMembers(Class); 6603 6604 // FIXME: MSVC's docs say all bases must be exportable, but this doesn't 6605 // seem to be true in practice? 6606 6607 for (Decl *Member : Class->decls()) { 6608 VarDecl *VD = dyn_cast<VarDecl>(Member); 6609 CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(Member); 6610 6611 // Only methods and static fields inherit the attributes. 6612 if (!VD && !MD) 6613 continue; 6614 6615 if (MD) { 6616 // Don't process deleted methods. 6617 if (MD->isDeleted()) 6618 continue; 6619 6620 if (MD->isInlined()) { 6621 // MinGW does not import or export inline methods. But do it for 6622 // template instantiations. 6623 if (!Context.getTargetInfo().shouldDLLImportComdatSymbols() && 6624 TSK != TSK_ExplicitInstantiationDeclaration && 6625 TSK != TSK_ExplicitInstantiationDefinition) 6626 continue; 6627 6628 // MSVC versions before 2015 don't export the move assignment operators 6629 // and move constructor, so don't attempt to import/export them if 6630 // we have a definition. 6631 auto *Ctor = dyn_cast<CXXConstructorDecl>(MD); 6632 if ((MD->isMoveAssignmentOperator() || 6633 (Ctor && Ctor->isMoveConstructor())) && 6634 !getLangOpts().isCompatibleWithMSVC(LangOptions::MSVC2015)) 6635 continue; 6636 6637 // MSVC2015 doesn't export trivial defaulted x-tor but copy assign 6638 // operator is exported anyway. 6639 if (getLangOpts().isCompatibleWithMSVC(LangOptions::MSVC2015) && 6640 (Ctor || isa<CXXDestructorDecl>(MD)) && MD->isTrivial()) 6641 continue; 6642 } 6643 } 6644 6645 // Don't apply dllimport attributes to static data members of class template 6646 // instantiations when the attribute is propagated from a derived class. 6647 if (VD && PropagatedImport) 6648 continue; 6649 6650 if (!cast<NamedDecl>(Member)->isExternallyVisible()) 6651 continue; 6652 6653 if (!getDLLAttr(Member)) { 6654 InheritableAttr *NewAttr = nullptr; 6655 6656 // Do not export/import inline function when -fno-dllexport-inlines is 6657 // passed. But add attribute for later local static var check. 6658 if (!getLangOpts().DllExportInlines && MD && MD->isInlined() && 6659 TSK != TSK_ExplicitInstantiationDeclaration && 6660 TSK != TSK_ExplicitInstantiationDefinition) { 6661 if (ClassExported) { 6662 NewAttr = ::new (getASTContext()) 6663 DLLExportStaticLocalAttr(getASTContext(), *ClassAttr); 6664 } else { 6665 NewAttr = ::new (getASTContext()) 6666 DLLImportStaticLocalAttr(getASTContext(), *ClassAttr); 6667 } 6668 } else { 6669 NewAttr = cast<InheritableAttr>(ClassAttr->clone(getASTContext())); 6670 } 6671 6672 NewAttr->setInherited(true); 6673 Member->addAttr(NewAttr); 6674 6675 if (MD) { 6676 // Propagate DLLAttr to friend re-declarations of MD that have already 6677 // been constructed. 6678 for (FunctionDecl *FD = MD->getMostRecentDecl(); FD; 6679 FD = FD->getPreviousDecl()) { 6680 if (FD->getFriendObjectKind() == Decl::FOK_None) 6681 continue; 6682 assert(!getDLLAttr(FD) && 6683 "friend re-decl should not already have a DLLAttr"); 6684 NewAttr = cast<InheritableAttr>(ClassAttr->clone(getASTContext())); 6685 NewAttr->setInherited(true); 6686 FD->addAttr(NewAttr); 6687 } 6688 } 6689 } 6690 } 6691 6692 if (ClassExported) 6693 DelayedDllExportClasses.push_back(Class); 6694 } 6695 6696 /// Perform propagation of DLL attributes from a derived class to a 6697 /// templated base class for MS compatibility. 6698 void Sema::propagateDLLAttrToBaseClassTemplate( 6699 CXXRecordDecl *Class, Attr *ClassAttr, 6700 ClassTemplateSpecializationDecl *BaseTemplateSpec, SourceLocation BaseLoc) { 6701 if (getDLLAttr( 6702 BaseTemplateSpec->getSpecializedTemplate()->getTemplatedDecl())) { 6703 // If the base class template has a DLL attribute, don't try to change it. 6704 return; 6705 } 6706 6707 auto TSK = BaseTemplateSpec->getSpecializationKind(); 6708 if (!getDLLAttr(BaseTemplateSpec) && 6709 (TSK == TSK_Undeclared || TSK == TSK_ExplicitInstantiationDeclaration || 6710 TSK == TSK_ImplicitInstantiation)) { 6711 // The template hasn't been instantiated yet (or it has, but only as an 6712 // explicit instantiation declaration or implicit instantiation, which means 6713 // we haven't codegenned any members yet), so propagate the attribute. 6714 auto *NewAttr = cast<InheritableAttr>(ClassAttr->clone(getASTContext())); 6715 NewAttr->setInherited(true); 6716 BaseTemplateSpec->addAttr(NewAttr); 6717 6718 // If this was an import, mark that we propagated it from a derived class to 6719 // a base class template specialization. 6720 if (auto *ImportAttr = dyn_cast<DLLImportAttr>(NewAttr)) 6721 ImportAttr->setPropagatedToBaseTemplate(); 6722 6723 // If the template is already instantiated, checkDLLAttributeRedeclaration() 6724 // needs to be run again to work see the new attribute. Otherwise this will 6725 // get run whenever the template is instantiated. 6726 if (TSK != TSK_Undeclared) 6727 checkClassLevelDLLAttribute(BaseTemplateSpec); 6728 6729 return; 6730 } 6731 6732 if (getDLLAttr(BaseTemplateSpec)) { 6733 // The template has already been specialized or instantiated with an 6734 // attribute, explicitly or through propagation. We should not try to change 6735 // it. 6736 return; 6737 } 6738 6739 // The template was previously instantiated or explicitly specialized without 6740 // a dll attribute, It's too late for us to add an attribute, so warn that 6741 // this is unsupported. 6742 Diag(BaseLoc, diag::warn_attribute_dll_instantiated_base_class) 6743 << BaseTemplateSpec->isExplicitSpecialization(); 6744 Diag(ClassAttr->getLocation(), diag::note_attribute); 6745 if (BaseTemplateSpec->isExplicitSpecialization()) { 6746 Diag(BaseTemplateSpec->getLocation(), 6747 diag::note_template_class_explicit_specialization_was_here) 6748 << BaseTemplateSpec; 6749 } else { 6750 Diag(BaseTemplateSpec->getPointOfInstantiation(), 6751 diag::note_template_class_instantiation_was_here) 6752 << BaseTemplateSpec; 6753 } 6754 } 6755 6756 /// Determine the kind of defaulting that would be done for a given function. 6757 /// 6758 /// If the function is both a default constructor and a copy / move constructor 6759 /// (due to having a default argument for the first parameter), this picks 6760 /// CXXDefaultConstructor. 6761 /// 6762 /// FIXME: Check that case is properly handled by all callers. 6763 Sema::DefaultedFunctionKind 6764 Sema::getDefaultedFunctionKind(const FunctionDecl *FD) { 6765 if (auto *MD = dyn_cast<CXXMethodDecl>(FD)) { 6766 if (const CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(FD)) { 6767 if (Ctor->isDefaultConstructor()) 6768 return Sema::CXXDefaultConstructor; 6769 6770 if (Ctor->isCopyConstructor()) 6771 return Sema::CXXCopyConstructor; 6772 6773 if (Ctor->isMoveConstructor()) 6774 return Sema::CXXMoveConstructor; 6775 } 6776 6777 if (MD->isCopyAssignmentOperator()) 6778 return Sema::CXXCopyAssignment; 6779 6780 if (MD->isMoveAssignmentOperator()) 6781 return Sema::CXXMoveAssignment; 6782 6783 if (isa<CXXDestructorDecl>(FD)) 6784 return Sema::CXXDestructor; 6785 } 6786 6787 switch (FD->getDeclName().getCXXOverloadedOperator()) { 6788 case OO_EqualEqual: 6789 return DefaultedComparisonKind::Equal; 6790 6791 case OO_ExclaimEqual: 6792 return DefaultedComparisonKind::NotEqual; 6793 6794 case OO_Spaceship: 6795 // No point allowing this if <=> doesn't exist in the current language mode. 6796 if (!getLangOpts().CPlusPlus20) 6797 break; 6798 return DefaultedComparisonKind::ThreeWay; 6799 6800 case OO_Less: 6801 case OO_LessEqual: 6802 case OO_Greater: 6803 case OO_GreaterEqual: 6804 // No point allowing this if <=> doesn't exist in the current language mode. 6805 if (!getLangOpts().CPlusPlus20) 6806 break; 6807 return DefaultedComparisonKind::Relational; 6808 6809 default: 6810 break; 6811 } 6812 6813 // Not defaultable. 6814 return DefaultedFunctionKind(); 6815 } 6816 6817 static void DefineDefaultedFunction(Sema &S, FunctionDecl *FD, 6818 SourceLocation DefaultLoc) { 6819 Sema::DefaultedFunctionKind DFK = S.getDefaultedFunctionKind(FD); 6820 if (DFK.isComparison()) 6821 return S.DefineDefaultedComparison(DefaultLoc, FD, DFK.asComparison()); 6822 6823 switch (DFK.asSpecialMember()) { 6824 case Sema::CXXDefaultConstructor: 6825 S.DefineImplicitDefaultConstructor(DefaultLoc, 6826 cast<CXXConstructorDecl>(FD)); 6827 break; 6828 case Sema::CXXCopyConstructor: 6829 S.DefineImplicitCopyConstructor(DefaultLoc, cast<CXXConstructorDecl>(FD)); 6830 break; 6831 case Sema::CXXCopyAssignment: 6832 S.DefineImplicitCopyAssignment(DefaultLoc, cast<CXXMethodDecl>(FD)); 6833 break; 6834 case Sema::CXXDestructor: 6835 S.DefineImplicitDestructor(DefaultLoc, cast<CXXDestructorDecl>(FD)); 6836 break; 6837 case Sema::CXXMoveConstructor: 6838 S.DefineImplicitMoveConstructor(DefaultLoc, cast<CXXConstructorDecl>(FD)); 6839 break; 6840 case Sema::CXXMoveAssignment: 6841 S.DefineImplicitMoveAssignment(DefaultLoc, cast<CXXMethodDecl>(FD)); 6842 break; 6843 case Sema::CXXInvalid: 6844 llvm_unreachable("Invalid special member."); 6845 } 6846 } 6847 6848 /// Determine whether a type is permitted to be passed or returned in 6849 /// registers, per C++ [class.temporary]p3. 6850 static bool canPassInRegisters(Sema &S, CXXRecordDecl *D, 6851 TargetInfo::CallingConvKind CCK) { 6852 if (D->isDependentType() || D->isInvalidDecl()) 6853 return false; 6854 6855 // Clang <= 4 used the pre-C++11 rule, which ignores move operations. 6856 // The PS4 platform ABI follows the behavior of Clang 3.2. 6857 if (CCK == TargetInfo::CCK_ClangABI4OrPS4) 6858 return !D->hasNonTrivialDestructorForCall() && 6859 !D->hasNonTrivialCopyConstructorForCall(); 6860 6861 if (CCK == TargetInfo::CCK_MicrosoftWin64) { 6862 bool CopyCtorIsTrivial = false, CopyCtorIsTrivialForCall = false; 6863 bool DtorIsTrivialForCall = false; 6864 6865 // If a class has at least one eligible, trivial copy constructor, it 6866 // is passed according to the C ABI. Otherwise, it is passed indirectly. 6867 // 6868 // Note: This permits classes with non-trivial copy or move ctors to be 6869 // passed in registers, so long as they *also* have a trivial copy ctor, 6870 // which is non-conforming. 6871 if (D->needsImplicitCopyConstructor()) { 6872 if (!D->defaultedCopyConstructorIsDeleted()) { 6873 if (D->hasTrivialCopyConstructor()) 6874 CopyCtorIsTrivial = true; 6875 if (D->hasTrivialCopyConstructorForCall()) 6876 CopyCtorIsTrivialForCall = true; 6877 } 6878 } else { 6879 for (const CXXConstructorDecl *CD : D->ctors()) { 6880 if (CD->isCopyConstructor() && !CD->isDeleted() && 6881 !CD->isIneligibleOrNotSelected()) { 6882 if (CD->isTrivial()) 6883 CopyCtorIsTrivial = true; 6884 if (CD->isTrivialForCall()) 6885 CopyCtorIsTrivialForCall = true; 6886 } 6887 } 6888 } 6889 6890 if (D->needsImplicitDestructor()) { 6891 if (!D->defaultedDestructorIsDeleted() && 6892 D->hasTrivialDestructorForCall()) 6893 DtorIsTrivialForCall = true; 6894 } else if (const auto *DD = D->getDestructor()) { 6895 if (!DD->isDeleted() && DD->isTrivialForCall()) 6896 DtorIsTrivialForCall = true; 6897 } 6898 6899 // If the copy ctor and dtor are both trivial-for-calls, pass direct. 6900 if (CopyCtorIsTrivialForCall && DtorIsTrivialForCall) 6901 return true; 6902 6903 // If a class has a destructor, we'd really like to pass it indirectly 6904 // because it allows us to elide copies. Unfortunately, MSVC makes that 6905 // impossible for small types, which it will pass in a single register or 6906 // stack slot. Most objects with dtors are large-ish, so handle that early. 6907 // We can't call out all large objects as being indirect because there are 6908 // multiple x64 calling conventions and the C++ ABI code shouldn't dictate 6909 // how we pass large POD types. 6910 6911 // Note: This permits small classes with nontrivial destructors to be 6912 // passed in registers, which is non-conforming. 6913 bool isAArch64 = S.Context.getTargetInfo().getTriple().isAArch64(); 6914 uint64_t TypeSize = isAArch64 ? 128 : 64; 6915 6916 if (CopyCtorIsTrivial && 6917 S.getASTContext().getTypeSize(D->getTypeForDecl()) <= TypeSize) 6918 return true; 6919 return false; 6920 } 6921 6922 // Per C++ [class.temporary]p3, the relevant condition is: 6923 // each copy constructor, move constructor, and destructor of X is 6924 // either trivial or deleted, and X has at least one non-deleted copy 6925 // or move constructor 6926 bool HasNonDeletedCopyOrMove = false; 6927 6928 if (D->needsImplicitCopyConstructor() && 6929 !D->defaultedCopyConstructorIsDeleted()) { 6930 if (!D->hasTrivialCopyConstructorForCall()) 6931 return false; 6932 HasNonDeletedCopyOrMove = true; 6933 } 6934 6935 if (S.getLangOpts().CPlusPlus11 && D->needsImplicitMoveConstructor() && 6936 !D->defaultedMoveConstructorIsDeleted()) { 6937 if (!D->hasTrivialMoveConstructorForCall()) 6938 return false; 6939 HasNonDeletedCopyOrMove = true; 6940 } 6941 6942 if (D->needsImplicitDestructor() && !D->defaultedDestructorIsDeleted() && 6943 !D->hasTrivialDestructorForCall()) 6944 return false; 6945 6946 for (const CXXMethodDecl *MD : D->methods()) { 6947 if (MD->isDeleted() || MD->isIneligibleOrNotSelected()) 6948 continue; 6949 6950 auto *CD = dyn_cast<CXXConstructorDecl>(MD); 6951 if (CD && CD->isCopyOrMoveConstructor()) 6952 HasNonDeletedCopyOrMove = true; 6953 else if (!isa<CXXDestructorDecl>(MD)) 6954 continue; 6955 6956 if (!MD->isTrivialForCall()) 6957 return false; 6958 } 6959 6960 return HasNonDeletedCopyOrMove; 6961 } 6962 6963 /// Report an error regarding overriding, along with any relevant 6964 /// overridden methods. 6965 /// 6966 /// \param DiagID the primary error to report. 6967 /// \param MD the overriding method. 6968 static bool 6969 ReportOverrides(Sema &S, unsigned DiagID, const CXXMethodDecl *MD, 6970 llvm::function_ref<bool(const CXXMethodDecl *)> Report) { 6971 bool IssuedDiagnostic = false; 6972 for (const CXXMethodDecl *O : MD->overridden_methods()) { 6973 if (Report(O)) { 6974 if (!IssuedDiagnostic) { 6975 S.Diag(MD->getLocation(), DiagID) << MD->getDeclName(); 6976 IssuedDiagnostic = true; 6977 } 6978 S.Diag(O->getLocation(), diag::note_overridden_virtual_function); 6979 } 6980 } 6981 return IssuedDiagnostic; 6982 } 6983 6984 /// Perform semantic checks on a class definition that has been 6985 /// completing, introducing implicitly-declared members, checking for 6986 /// abstract types, etc. 6987 /// 6988 /// \param S The scope in which the class was parsed. Null if we didn't just 6989 /// parse a class definition. 6990 /// \param Record The completed class. 6991 void Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) { 6992 if (!Record) 6993 return; 6994 6995 if (Record->isAbstract() && !Record->isInvalidDecl()) { 6996 AbstractUsageInfo Info(*this, Record); 6997 CheckAbstractClassUsage(Info, Record); 6998 } 6999 7000 // If this is not an aggregate type and has no user-declared constructor, 7001 // complain about any non-static data members of reference or const scalar 7002 // type, since they will never get initializers. 7003 if (!Record->isInvalidDecl() && !Record->isDependentType() && 7004 !Record->isAggregate() && !Record->hasUserDeclaredConstructor() && 7005 !Record->isLambda()) { 7006 bool Complained = false; 7007 for (const auto *F : Record->fields()) { 7008 if (F->hasInClassInitializer() || F->isUnnamedBitfield()) 7009 continue; 7010 7011 if (F->getType()->isReferenceType() || 7012 (F->getType().isConstQualified() && F->getType()->isScalarType())) { 7013 if (!Complained) { 7014 Diag(Record->getLocation(), diag::warn_no_constructor_for_refconst) 7015 << llvm::to_underlying(Record->getTagKind()) << Record; 7016 Complained = true; 7017 } 7018 7019 Diag(F->getLocation(), diag::note_refconst_member_not_initialized) 7020 << F->getType()->isReferenceType() 7021 << F->getDeclName(); 7022 } 7023 } 7024 } 7025 7026 if (Record->getIdentifier()) { 7027 // C++ [class.mem]p13: 7028 // If T is the name of a class, then each of the following shall have a 7029 // name different from T: 7030 // - every member of every anonymous union that is a member of class T. 7031 // 7032 // C++ [class.mem]p14: 7033 // In addition, if class T has a user-declared constructor (12.1), every 7034 // non-static data member of class T shall have a name different from T. 7035 DeclContext::lookup_result R = Record->lookup(Record->getDeclName()); 7036 for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E; 7037 ++I) { 7038 NamedDecl *D = (*I)->getUnderlyingDecl(); 7039 if (((isa<FieldDecl>(D) || isa<UnresolvedUsingValueDecl>(D)) && 7040 Record->hasUserDeclaredConstructor()) || 7041 isa<IndirectFieldDecl>(D)) { 7042 Diag((*I)->getLocation(), diag::err_member_name_of_class) 7043 << D->getDeclName(); 7044 break; 7045 } 7046 } 7047 } 7048 7049 // Warn if the class has virtual methods but non-virtual public destructor. 7050 if (Record->isPolymorphic() && !Record->isDependentType()) { 7051 CXXDestructorDecl *dtor = Record->getDestructor(); 7052 if ((!dtor || (!dtor->isVirtual() && dtor->getAccess() == AS_public)) && 7053 !Record->hasAttr<FinalAttr>()) 7054 Diag(dtor ? dtor->getLocation() : Record->getLocation(), 7055 diag::warn_non_virtual_dtor) << Context.getRecordType(Record); 7056 } 7057 7058 if (Record->isAbstract()) { 7059 if (FinalAttr *FA = Record->getAttr<FinalAttr>()) { 7060 Diag(Record->getLocation(), diag::warn_abstract_final_class) 7061 << FA->isSpelledAsSealed(); 7062 DiagnoseAbstractType(Record); 7063 } 7064 } 7065 7066 // Warn if the class has a final destructor but is not itself marked final. 7067 if (!Record->hasAttr<FinalAttr>()) { 7068 if (const CXXDestructorDecl *dtor = Record->getDestructor()) { 7069 if (const FinalAttr *FA = dtor->getAttr<FinalAttr>()) { 7070 Diag(FA->getLocation(), diag::warn_final_dtor_non_final_class) 7071 << FA->isSpelledAsSealed() 7072 << FixItHint::CreateInsertion( 7073 getLocForEndOfToken(Record->getLocation()), 7074 (FA->isSpelledAsSealed() ? " sealed" : " final")); 7075 Diag(Record->getLocation(), 7076 diag::note_final_dtor_non_final_class_silence) 7077 << Context.getRecordType(Record) << FA->isSpelledAsSealed(); 7078 } 7079 } 7080 } 7081 7082 // See if trivial_abi has to be dropped. 7083 if (Record->hasAttr<TrivialABIAttr>()) 7084 checkIllFormedTrivialABIStruct(*Record); 7085 7086 // Set HasTrivialSpecialMemberForCall if the record has attribute 7087 // "trivial_abi". 7088 bool HasTrivialABI = Record->hasAttr<TrivialABIAttr>(); 7089 7090 if (HasTrivialABI) 7091 Record->setHasTrivialSpecialMemberForCall(); 7092 7093 // Explicitly-defaulted secondary comparison functions (!=, <, <=, >, >=). 7094 // We check these last because they can depend on the properties of the 7095 // primary comparison functions (==, <=>). 7096 llvm::SmallVector<FunctionDecl*, 5> DefaultedSecondaryComparisons; 7097 7098 // Perform checks that can't be done until we know all the properties of a 7099 // member function (whether it's defaulted, deleted, virtual, overriding, 7100 // ...). 7101 auto CheckCompletedMemberFunction = [&](CXXMethodDecl *MD) { 7102 // A static function cannot override anything. 7103 if (MD->getStorageClass() == SC_Static) { 7104 if (ReportOverrides(*this, diag::err_static_overrides_virtual, MD, 7105 [](const CXXMethodDecl *) { return true; })) 7106 return; 7107 } 7108 7109 // A deleted function cannot override a non-deleted function and vice 7110 // versa. 7111 if (ReportOverrides(*this, 7112 MD->isDeleted() ? diag::err_deleted_override 7113 : diag::err_non_deleted_override, 7114 MD, [&](const CXXMethodDecl *V) { 7115 return MD->isDeleted() != V->isDeleted(); 7116 })) { 7117 if (MD->isDefaulted() && MD->isDeleted()) 7118 // Explain why this defaulted function was deleted. 7119 DiagnoseDeletedDefaultedFunction(MD); 7120 return; 7121 } 7122 7123 // A consteval function cannot override a non-consteval function and vice 7124 // versa. 7125 if (ReportOverrides(*this, 7126 MD->isConsteval() ? diag::err_consteval_override 7127 : diag::err_non_consteval_override, 7128 MD, [&](const CXXMethodDecl *V) { 7129 return MD->isConsteval() != V->isConsteval(); 7130 })) { 7131 if (MD->isDefaulted() && MD->isDeleted()) 7132 // Explain why this defaulted function was deleted. 7133 DiagnoseDeletedDefaultedFunction(MD); 7134 return; 7135 } 7136 }; 7137 7138 auto CheckForDefaultedFunction = [&](FunctionDecl *FD) -> bool { 7139 if (!FD || FD->isInvalidDecl() || !FD->isExplicitlyDefaulted()) 7140 return false; 7141 7142 DefaultedFunctionKind DFK = getDefaultedFunctionKind(FD); 7143 if (DFK.asComparison() == DefaultedComparisonKind::NotEqual || 7144 DFK.asComparison() == DefaultedComparisonKind::Relational) { 7145 DefaultedSecondaryComparisons.push_back(FD); 7146 return true; 7147 } 7148 7149 CheckExplicitlyDefaultedFunction(S, FD); 7150 return false; 7151 }; 7152 7153 auto CompleteMemberFunction = [&](CXXMethodDecl *M) { 7154 // Check whether the explicitly-defaulted members are valid. 7155 bool Incomplete = CheckForDefaultedFunction(M); 7156 7157 // Skip the rest of the checks for a member of a dependent class. 7158 if (Record->isDependentType()) 7159 return; 7160 7161 // For an explicitly defaulted or deleted special member, we defer 7162 // determining triviality until the class is complete. That time is now! 7163 CXXSpecialMember CSM = getSpecialMember(M); 7164 if (!M->isImplicit() && !M->isUserProvided()) { 7165 if (CSM != CXXInvalid) { 7166 M->setTrivial(SpecialMemberIsTrivial(M, CSM)); 7167 // Inform the class that we've finished declaring this member. 7168 Record->finishedDefaultedOrDeletedMember(M); 7169 M->setTrivialForCall( 7170 HasTrivialABI || 7171 SpecialMemberIsTrivial(M, CSM, TAH_ConsiderTrivialABI)); 7172 Record->setTrivialForCallFlags(M); 7173 } 7174 } 7175 7176 // Set triviality for the purpose of calls if this is a user-provided 7177 // copy/move constructor or destructor. 7178 if ((CSM == CXXCopyConstructor || CSM == CXXMoveConstructor || 7179 CSM == CXXDestructor) && M->isUserProvided()) { 7180 M->setTrivialForCall(HasTrivialABI); 7181 Record->setTrivialForCallFlags(M); 7182 } 7183 7184 if (!M->isInvalidDecl() && M->isExplicitlyDefaulted() && 7185 M->hasAttr<DLLExportAttr>()) { 7186 if (getLangOpts().isCompatibleWithMSVC(LangOptions::MSVC2015) && 7187 M->isTrivial() && 7188 (CSM == CXXDefaultConstructor || CSM == CXXCopyConstructor || 7189 CSM == CXXDestructor)) 7190 M->dropAttr<DLLExportAttr>(); 7191 7192 if (M->hasAttr<DLLExportAttr>()) { 7193 // Define after any fields with in-class initializers have been parsed. 7194 DelayedDllExportMemberFunctions.push_back(M); 7195 } 7196 } 7197 7198 // Define defaulted constexpr virtual functions that override a base class 7199 // function right away. 7200 // FIXME: We can defer doing this until the vtable is marked as used. 7201 if (CSM != CXXInvalid && !M->isDeleted() && M->isDefaulted() && 7202 M->isConstexpr() && M->size_overridden_methods()) 7203 DefineDefaultedFunction(*this, M, M->getLocation()); 7204 7205 if (!Incomplete) 7206 CheckCompletedMemberFunction(M); 7207 }; 7208 7209 // Check the destructor before any other member function. We need to 7210 // determine whether it's trivial in order to determine whether the claas 7211 // type is a literal type, which is a prerequisite for determining whether 7212 // other special member functions are valid and whether they're implicitly 7213 // 'constexpr'. 7214 if (CXXDestructorDecl *Dtor = Record->getDestructor()) 7215 CompleteMemberFunction(Dtor); 7216 7217 bool HasMethodWithOverrideControl = false, 7218 HasOverridingMethodWithoutOverrideControl = false; 7219 for (auto *D : Record->decls()) { 7220 if (auto *M = dyn_cast<CXXMethodDecl>(D)) { 7221 // FIXME: We could do this check for dependent types with non-dependent 7222 // bases. 7223 if (!Record->isDependentType()) { 7224 // See if a method overloads virtual methods in a base 7225 // class without overriding any. 7226 if (!M->isStatic()) 7227 DiagnoseHiddenVirtualMethods(M); 7228 if (M->hasAttr<OverrideAttr>()) 7229 HasMethodWithOverrideControl = true; 7230 else if (M->size_overridden_methods() > 0) 7231 HasOverridingMethodWithoutOverrideControl = true; 7232 } 7233 7234 if (!isa<CXXDestructorDecl>(M)) 7235 CompleteMemberFunction(M); 7236 } else if (auto *F = dyn_cast<FriendDecl>(D)) { 7237 CheckForDefaultedFunction( 7238 dyn_cast_or_null<FunctionDecl>(F->getFriendDecl())); 7239 } 7240 } 7241 7242 if (HasOverridingMethodWithoutOverrideControl) { 7243 bool HasInconsistentOverrideControl = HasMethodWithOverrideControl; 7244 for (auto *M : Record->methods()) 7245 DiagnoseAbsenceOfOverrideControl(M, HasInconsistentOverrideControl); 7246 } 7247 7248 // Check the defaulted secondary comparisons after any other member functions. 7249 for (FunctionDecl *FD : DefaultedSecondaryComparisons) { 7250 CheckExplicitlyDefaultedFunction(S, FD); 7251 7252 // If this is a member function, we deferred checking it until now. 7253 if (auto *MD = dyn_cast<CXXMethodDecl>(FD)) 7254 CheckCompletedMemberFunction(MD); 7255 } 7256 7257 // ms_struct is a request to use the same ABI rules as MSVC. Check 7258 // whether this class uses any C++ features that are implemented 7259 // completely differently in MSVC, and if so, emit a diagnostic. 7260 // That diagnostic defaults to an error, but we allow projects to 7261 // map it down to a warning (or ignore it). It's a fairly common 7262 // practice among users of the ms_struct pragma to mass-annotate 7263 // headers, sweeping up a bunch of types that the project doesn't 7264 // really rely on MSVC-compatible layout for. We must therefore 7265 // support "ms_struct except for C++ stuff" as a secondary ABI. 7266 // Don't emit this diagnostic if the feature was enabled as a 7267 // language option (as opposed to via a pragma or attribute), as 7268 // the option -mms-bitfields otherwise essentially makes it impossible 7269 // to build C++ code, unless this diagnostic is turned off. 7270 if (Record->isMsStruct(Context) && !Context.getLangOpts().MSBitfields && 7271 (Record->isPolymorphic() || Record->getNumBases())) { 7272 Diag(Record->getLocation(), diag::warn_cxx_ms_struct); 7273 } 7274 7275 checkClassLevelDLLAttribute(Record); 7276 checkClassLevelCodeSegAttribute(Record); 7277 7278 bool ClangABICompat4 = 7279 Context.getLangOpts().getClangABICompat() <= LangOptions::ClangABI::Ver4; 7280 TargetInfo::CallingConvKind CCK = 7281 Context.getTargetInfo().getCallingConvKind(ClangABICompat4); 7282 bool CanPass = canPassInRegisters(*this, Record, CCK); 7283 7284 // Do not change ArgPassingRestrictions if it has already been set to 7285 // ArgPassingKind::CanNeverPassInRegs. 7286 if (Record->getArgPassingRestrictions() != 7287 RecordArgPassingKind::CanNeverPassInRegs) 7288 Record->setArgPassingRestrictions( 7289 CanPass ? RecordArgPassingKind::CanPassInRegs 7290 : RecordArgPassingKind::CannotPassInRegs); 7291 7292 // If canPassInRegisters returns true despite the record having a non-trivial 7293 // destructor, the record is destructed in the callee. This happens only when 7294 // the record or one of its subobjects has a field annotated with trivial_abi 7295 // or a field qualified with ObjC __strong/__weak. 7296 if (Context.getTargetInfo().getCXXABI().areArgsDestroyedLeftToRightInCallee()) 7297 Record->setParamDestroyedInCallee(true); 7298 else if (Record->hasNonTrivialDestructor()) 7299 Record->setParamDestroyedInCallee(CanPass); 7300 7301 if (getLangOpts().ForceEmitVTables) { 7302 // If we want to emit all the vtables, we need to mark it as used. This 7303 // is especially required for cases like vtable assumption loads. 7304 MarkVTableUsed(Record->getInnerLocStart(), Record); 7305 } 7306 7307 if (getLangOpts().CUDA) { 7308 if (Record->hasAttr<CUDADeviceBuiltinSurfaceTypeAttr>()) 7309 checkCUDADeviceBuiltinSurfaceClassTemplate(*this, Record); 7310 else if (Record->hasAttr<CUDADeviceBuiltinTextureTypeAttr>()) 7311 checkCUDADeviceBuiltinTextureClassTemplate(*this, Record); 7312 } 7313 } 7314 7315 /// Look up the special member function that would be called by a special 7316 /// member function for a subobject of class type. 7317 /// 7318 /// \param Class The class type of the subobject. 7319 /// \param CSM The kind of special member function. 7320 /// \param FieldQuals If the subobject is a field, its cv-qualifiers. 7321 /// \param ConstRHS True if this is a copy operation with a const object 7322 /// on its RHS, that is, if the argument to the outer special member 7323 /// function is 'const' and this is not a field marked 'mutable'. 7324 static Sema::SpecialMemberOverloadResult lookupCallFromSpecialMember( 7325 Sema &S, CXXRecordDecl *Class, Sema::CXXSpecialMember CSM, 7326 unsigned FieldQuals, bool ConstRHS) { 7327 unsigned LHSQuals = 0; 7328 if (CSM == Sema::CXXCopyAssignment || CSM == Sema::CXXMoveAssignment) 7329 LHSQuals = FieldQuals; 7330 7331 unsigned RHSQuals = FieldQuals; 7332 if (CSM == Sema::CXXDefaultConstructor || CSM == Sema::CXXDestructor) 7333 RHSQuals = 0; 7334 else if (ConstRHS) 7335 RHSQuals |= Qualifiers::Const; 7336 7337 return S.LookupSpecialMember(Class, CSM, 7338 RHSQuals & Qualifiers::Const, 7339 RHSQuals & Qualifiers::Volatile, 7340 false, 7341 LHSQuals & Qualifiers::Const, 7342 LHSQuals & Qualifiers::Volatile); 7343 } 7344 7345 class Sema::InheritedConstructorInfo { 7346 Sema &S; 7347 SourceLocation UseLoc; 7348 7349 /// A mapping from the base classes through which the constructor was 7350 /// inherited to the using shadow declaration in that base class (or a null 7351 /// pointer if the constructor was declared in that base class). 7352 llvm::DenseMap<CXXRecordDecl *, ConstructorUsingShadowDecl *> 7353 InheritedFromBases; 7354 7355 public: 7356 InheritedConstructorInfo(Sema &S, SourceLocation UseLoc, 7357 ConstructorUsingShadowDecl *Shadow) 7358 : S(S), UseLoc(UseLoc) { 7359 bool DiagnosedMultipleConstructedBases = false; 7360 CXXRecordDecl *ConstructedBase = nullptr; 7361 BaseUsingDecl *ConstructedBaseIntroducer = nullptr; 7362 7363 // Find the set of such base class subobjects and check that there's a 7364 // unique constructed subobject. 7365 for (auto *D : Shadow->redecls()) { 7366 auto *DShadow = cast<ConstructorUsingShadowDecl>(D); 7367 auto *DNominatedBase = DShadow->getNominatedBaseClass(); 7368 auto *DConstructedBase = DShadow->getConstructedBaseClass(); 7369 7370 InheritedFromBases.insert( 7371 std::make_pair(DNominatedBase->getCanonicalDecl(), 7372 DShadow->getNominatedBaseClassShadowDecl())); 7373 if (DShadow->constructsVirtualBase()) 7374 InheritedFromBases.insert( 7375 std::make_pair(DConstructedBase->getCanonicalDecl(), 7376 DShadow->getConstructedBaseClassShadowDecl())); 7377 else 7378 assert(DNominatedBase == DConstructedBase); 7379 7380 // [class.inhctor.init]p2: 7381 // If the constructor was inherited from multiple base class subobjects 7382 // of type B, the program is ill-formed. 7383 if (!ConstructedBase) { 7384 ConstructedBase = DConstructedBase; 7385 ConstructedBaseIntroducer = D->getIntroducer(); 7386 } else if (ConstructedBase != DConstructedBase && 7387 !Shadow->isInvalidDecl()) { 7388 if (!DiagnosedMultipleConstructedBases) { 7389 S.Diag(UseLoc, diag::err_ambiguous_inherited_constructor) 7390 << Shadow->getTargetDecl(); 7391 S.Diag(ConstructedBaseIntroducer->getLocation(), 7392 diag::note_ambiguous_inherited_constructor_using) 7393 << ConstructedBase; 7394 DiagnosedMultipleConstructedBases = true; 7395 } 7396 S.Diag(D->getIntroducer()->getLocation(), 7397 diag::note_ambiguous_inherited_constructor_using) 7398 << DConstructedBase; 7399 } 7400 } 7401 7402 if (DiagnosedMultipleConstructedBases) 7403 Shadow->setInvalidDecl(); 7404 } 7405 7406 /// Find the constructor to use for inherited construction of a base class, 7407 /// and whether that base class constructor inherits the constructor from a 7408 /// virtual base class (in which case it won't actually invoke it). 7409 std::pair<CXXConstructorDecl *, bool> 7410 findConstructorForBase(CXXRecordDecl *Base, CXXConstructorDecl *Ctor) const { 7411 auto It = InheritedFromBases.find(Base->getCanonicalDecl()); 7412 if (It == InheritedFromBases.end()) 7413 return std::make_pair(nullptr, false); 7414 7415 // This is an intermediary class. 7416 if (It->second) 7417 return std::make_pair( 7418 S.findInheritingConstructor(UseLoc, Ctor, It->second), 7419 It->second->constructsVirtualBase()); 7420 7421 // This is the base class from which the constructor was inherited. 7422 return std::make_pair(Ctor, false); 7423 } 7424 }; 7425 7426 /// Is the special member function which would be selected to perform the 7427 /// specified operation on the specified class type a constexpr constructor? 7428 static bool 7429 specialMemberIsConstexpr(Sema &S, CXXRecordDecl *ClassDecl, 7430 Sema::CXXSpecialMember CSM, unsigned Quals, 7431 bool ConstRHS, 7432 CXXConstructorDecl *InheritedCtor = nullptr, 7433 Sema::InheritedConstructorInfo *Inherited = nullptr) { 7434 // Suppress duplicate constraint checking here, in case a constraint check 7435 // caused us to decide to do this. Any truely recursive checks will get 7436 // caught during these checks anyway. 7437 Sema::SatisfactionStackResetRAII SSRAII{S}; 7438 7439 // If we're inheriting a constructor, see if we need to call it for this base 7440 // class. 7441 if (InheritedCtor) { 7442 assert(CSM == Sema::CXXDefaultConstructor); 7443 auto BaseCtor = 7444 Inherited->findConstructorForBase(ClassDecl, InheritedCtor).first; 7445 if (BaseCtor) 7446 return BaseCtor->isConstexpr(); 7447 } 7448 7449 if (CSM == Sema::CXXDefaultConstructor) 7450 return ClassDecl->hasConstexprDefaultConstructor(); 7451 if (CSM == Sema::CXXDestructor) 7452 return ClassDecl->hasConstexprDestructor(); 7453 7454 Sema::SpecialMemberOverloadResult SMOR = 7455 lookupCallFromSpecialMember(S, ClassDecl, CSM, Quals, ConstRHS); 7456 if (!SMOR.getMethod()) 7457 // A constructor we wouldn't select can't be "involved in initializing" 7458 // anything. 7459 return true; 7460 return SMOR.getMethod()->isConstexpr(); 7461 } 7462 7463 /// Determine whether the specified special member function would be constexpr 7464 /// if it were implicitly defined. 7465 static bool defaultedSpecialMemberIsConstexpr( 7466 Sema &S, CXXRecordDecl *ClassDecl, Sema::CXXSpecialMember CSM, 7467 bool ConstArg, CXXConstructorDecl *InheritedCtor = nullptr, 7468 Sema::InheritedConstructorInfo *Inherited = nullptr) { 7469 if (!S.getLangOpts().CPlusPlus11) 7470 return false; 7471 7472 // C++11 [dcl.constexpr]p4: 7473 // In the definition of a constexpr constructor [...] 7474 bool Ctor = true; 7475 switch (CSM) { 7476 case Sema::CXXDefaultConstructor: 7477 if (Inherited) 7478 break; 7479 // Since default constructor lookup is essentially trivial (and cannot 7480 // involve, for instance, template instantiation), we compute whether a 7481 // defaulted default constructor is constexpr directly within CXXRecordDecl. 7482 // 7483 // This is important for performance; we need to know whether the default 7484 // constructor is constexpr to determine whether the type is a literal type. 7485 return ClassDecl->defaultedDefaultConstructorIsConstexpr(); 7486 7487 case Sema::CXXCopyConstructor: 7488 case Sema::CXXMoveConstructor: 7489 // For copy or move constructors, we need to perform overload resolution. 7490 break; 7491 7492 case Sema::CXXCopyAssignment: 7493 case Sema::CXXMoveAssignment: 7494 if (!S.getLangOpts().CPlusPlus14) 7495 return false; 7496 // In C++1y, we need to perform overload resolution. 7497 Ctor = false; 7498 break; 7499 7500 case Sema::CXXDestructor: 7501 return ClassDecl->defaultedDestructorIsConstexpr(); 7502 7503 case Sema::CXXInvalid: 7504 return false; 7505 } 7506 7507 // -- if the class is a non-empty union, or for each non-empty anonymous 7508 // union member of a non-union class, exactly one non-static data member 7509 // shall be initialized; [DR1359] 7510 // 7511 // If we squint, this is guaranteed, since exactly one non-static data member 7512 // will be initialized (if the constructor isn't deleted), we just don't know 7513 // which one. 7514 if (Ctor && ClassDecl->isUnion()) 7515 return CSM == Sema::CXXDefaultConstructor 7516 ? ClassDecl->hasInClassInitializer() || 7517 !ClassDecl->hasVariantMembers() 7518 : true; 7519 7520 // -- the class shall not have any virtual base classes; 7521 if (Ctor && ClassDecl->getNumVBases()) 7522 return false; 7523 7524 // C++1y [class.copy]p26: 7525 // -- [the class] is a literal type, and 7526 if (!Ctor && !ClassDecl->isLiteral()) 7527 return false; 7528 7529 // -- every constructor involved in initializing [...] base class 7530 // sub-objects shall be a constexpr constructor; 7531 // -- the assignment operator selected to copy/move each direct base 7532 // class is a constexpr function, and 7533 for (const auto &B : ClassDecl->bases()) { 7534 const RecordType *BaseType = B.getType()->getAs<RecordType>(); 7535 if (!BaseType) 7536 continue; 7537 CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl()); 7538 if (!specialMemberIsConstexpr(S, BaseClassDecl, CSM, 0, ConstArg, 7539 InheritedCtor, Inherited)) 7540 return false; 7541 } 7542 7543 // -- every constructor involved in initializing non-static data members 7544 // [...] shall be a constexpr constructor; 7545 // -- every non-static data member and base class sub-object shall be 7546 // initialized 7547 // -- for each non-static data member of X that is of class type (or array 7548 // thereof), the assignment operator selected to copy/move that member is 7549 // a constexpr function 7550 for (const auto *F : ClassDecl->fields()) { 7551 if (F->isInvalidDecl()) 7552 continue; 7553 if (CSM == Sema::CXXDefaultConstructor && F->hasInClassInitializer()) 7554 continue; 7555 QualType BaseType = S.Context.getBaseElementType(F->getType()); 7556 if (const RecordType *RecordTy = BaseType->getAs<RecordType>()) { 7557 CXXRecordDecl *FieldRecDecl = cast<CXXRecordDecl>(RecordTy->getDecl()); 7558 if (!specialMemberIsConstexpr(S, FieldRecDecl, CSM, 7559 BaseType.getCVRQualifiers(), 7560 ConstArg && !F->isMutable())) 7561 return false; 7562 } else if (CSM == Sema::CXXDefaultConstructor) { 7563 return false; 7564 } 7565 } 7566 7567 // All OK, it's constexpr! 7568 return true; 7569 } 7570 7571 namespace { 7572 /// RAII object to register a defaulted function as having its exception 7573 /// specification computed. 7574 struct ComputingExceptionSpec { 7575 Sema &S; 7576 7577 ComputingExceptionSpec(Sema &S, FunctionDecl *FD, SourceLocation Loc) 7578 : S(S) { 7579 Sema::CodeSynthesisContext Ctx; 7580 Ctx.Kind = Sema::CodeSynthesisContext::ExceptionSpecEvaluation; 7581 Ctx.PointOfInstantiation = Loc; 7582 Ctx.Entity = FD; 7583 S.pushCodeSynthesisContext(Ctx); 7584 } 7585 ~ComputingExceptionSpec() { 7586 S.popCodeSynthesisContext(); 7587 } 7588 }; 7589 } 7590 7591 static Sema::ImplicitExceptionSpecification 7592 ComputeDefaultedSpecialMemberExceptionSpec( 7593 Sema &S, SourceLocation Loc, CXXMethodDecl *MD, Sema::CXXSpecialMember CSM, 7594 Sema::InheritedConstructorInfo *ICI); 7595 7596 static Sema::ImplicitExceptionSpecification 7597 ComputeDefaultedComparisonExceptionSpec(Sema &S, SourceLocation Loc, 7598 FunctionDecl *FD, 7599 Sema::DefaultedComparisonKind DCK); 7600 7601 static Sema::ImplicitExceptionSpecification 7602 computeImplicitExceptionSpec(Sema &S, SourceLocation Loc, FunctionDecl *FD) { 7603 auto DFK = S.getDefaultedFunctionKind(FD); 7604 if (DFK.isSpecialMember()) 7605 return ComputeDefaultedSpecialMemberExceptionSpec( 7606 S, Loc, cast<CXXMethodDecl>(FD), DFK.asSpecialMember(), nullptr); 7607 if (DFK.isComparison()) 7608 return ComputeDefaultedComparisonExceptionSpec(S, Loc, FD, 7609 DFK.asComparison()); 7610 7611 auto *CD = cast<CXXConstructorDecl>(FD); 7612 assert(CD->getInheritedConstructor() && 7613 "only defaulted functions and inherited constructors have implicit " 7614 "exception specs"); 7615 Sema::InheritedConstructorInfo ICI( 7616 S, Loc, CD->getInheritedConstructor().getShadowDecl()); 7617 return ComputeDefaultedSpecialMemberExceptionSpec( 7618 S, Loc, CD, Sema::CXXDefaultConstructor, &ICI); 7619 } 7620 7621 static FunctionProtoType::ExtProtoInfo getImplicitMethodEPI(Sema &S, 7622 CXXMethodDecl *MD) { 7623 FunctionProtoType::ExtProtoInfo EPI; 7624 7625 // Build an exception specification pointing back at this member. 7626 EPI.ExceptionSpec.Type = EST_Unevaluated; 7627 EPI.ExceptionSpec.SourceDecl = MD; 7628 7629 // Set the calling convention to the default for C++ instance methods. 7630 EPI.ExtInfo = EPI.ExtInfo.withCallingConv( 7631 S.Context.getDefaultCallingConvention(/*IsVariadic=*/false, 7632 /*IsCXXMethod=*/true)); 7633 return EPI; 7634 } 7635 7636 void Sema::EvaluateImplicitExceptionSpec(SourceLocation Loc, FunctionDecl *FD) { 7637 const FunctionProtoType *FPT = FD->getType()->castAs<FunctionProtoType>(); 7638 if (FPT->getExceptionSpecType() != EST_Unevaluated) 7639 return; 7640 7641 // Evaluate the exception specification. 7642 auto IES = computeImplicitExceptionSpec(*this, Loc, FD); 7643 auto ESI = IES.getExceptionSpec(); 7644 7645 // Update the type of the special member to use it. 7646 UpdateExceptionSpec(FD, ESI); 7647 } 7648 7649 void Sema::CheckExplicitlyDefaultedFunction(Scope *S, FunctionDecl *FD) { 7650 assert(FD->isExplicitlyDefaulted() && "not explicitly-defaulted"); 7651 7652 DefaultedFunctionKind DefKind = getDefaultedFunctionKind(FD); 7653 if (!DefKind) { 7654 assert(FD->getDeclContext()->isDependentContext()); 7655 return; 7656 } 7657 7658 if (DefKind.isComparison()) 7659 UnusedPrivateFields.clear(); 7660 7661 if (DefKind.isSpecialMember() 7662 ? CheckExplicitlyDefaultedSpecialMember(cast<CXXMethodDecl>(FD), 7663 DefKind.asSpecialMember(), 7664 FD->getDefaultLoc()) 7665 : CheckExplicitlyDefaultedComparison(S, FD, DefKind.asComparison())) 7666 FD->setInvalidDecl(); 7667 } 7668 7669 bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, 7670 CXXSpecialMember CSM, 7671 SourceLocation DefaultLoc) { 7672 CXXRecordDecl *RD = MD->getParent(); 7673 7674 assert(MD->isExplicitlyDefaulted() && CSM != CXXInvalid && 7675 "not an explicitly-defaulted special member"); 7676 7677 // Defer all checking for special members of a dependent type. 7678 if (RD->isDependentType()) 7679 return false; 7680 7681 // Whether this was the first-declared instance of the constructor. 7682 // This affects whether we implicitly add an exception spec and constexpr. 7683 bool First = MD == MD->getCanonicalDecl(); 7684 7685 bool HadError = false; 7686 7687 // C++11 [dcl.fct.def.default]p1: 7688 // A function that is explicitly defaulted shall 7689 // -- be a special member function [...] (checked elsewhere), 7690 // -- have the same type (except for ref-qualifiers, and except that a 7691 // copy operation can take a non-const reference) as an implicit 7692 // declaration, and 7693 // -- not have default arguments. 7694 // C++2a changes the second bullet to instead delete the function if it's 7695 // defaulted on its first declaration, unless it's "an assignment operator, 7696 // and its return type differs or its parameter type is not a reference". 7697 bool DeleteOnTypeMismatch = getLangOpts().CPlusPlus20 && First; 7698 bool ShouldDeleteForTypeMismatch = false; 7699 unsigned ExpectedParams = 1; 7700 if (CSM == CXXDefaultConstructor || CSM == CXXDestructor) 7701 ExpectedParams = 0; 7702 if (MD->getNumExplicitParams() != ExpectedParams) { 7703 // This checks for default arguments: a copy or move constructor with a 7704 // default argument is classified as a default constructor, and assignment 7705 // operations and destructors can't have default arguments. 7706 Diag(MD->getLocation(), diag::err_defaulted_special_member_params) 7707 << CSM << MD->getSourceRange(); 7708 HadError = true; 7709 } else if (MD->isVariadic()) { 7710 if (DeleteOnTypeMismatch) 7711 ShouldDeleteForTypeMismatch = true; 7712 else { 7713 Diag(MD->getLocation(), diag::err_defaulted_special_member_variadic) 7714 << CSM << MD->getSourceRange(); 7715 HadError = true; 7716 } 7717 } 7718 7719 const FunctionProtoType *Type = MD->getType()->castAs<FunctionProtoType>(); 7720 7721 bool CanHaveConstParam = false; 7722 if (CSM == CXXCopyConstructor) 7723 CanHaveConstParam = RD->implicitCopyConstructorHasConstParam(); 7724 else if (CSM == CXXCopyAssignment) 7725 CanHaveConstParam = RD->implicitCopyAssignmentHasConstParam(); 7726 7727 QualType ReturnType = Context.VoidTy; 7728 if (CSM == CXXCopyAssignment || CSM == CXXMoveAssignment) { 7729 // Check for return type matching. 7730 ReturnType = Type->getReturnType(); 7731 QualType ThisType = MD->getFunctionObjectParameterType(); 7732 7733 QualType DeclType = Context.getTypeDeclType(RD); 7734 DeclType = Context.getElaboratedType(ElaboratedTypeKeyword::None, nullptr, 7735 DeclType, nullptr); 7736 DeclType = Context.getAddrSpaceQualType( 7737 DeclType, ThisType.getQualifiers().getAddressSpace()); 7738 QualType ExpectedReturnType = Context.getLValueReferenceType(DeclType); 7739 7740 if (!Context.hasSameType(ReturnType, ExpectedReturnType)) { 7741 Diag(MD->getLocation(), diag::err_defaulted_special_member_return_type) 7742 << (CSM == CXXMoveAssignment) << ExpectedReturnType; 7743 HadError = true; 7744 } 7745 7746 // A defaulted special member cannot have cv-qualifiers. 7747 if (ThisType.isConstQualified() || ThisType.isVolatileQualified()) { 7748 if (DeleteOnTypeMismatch) 7749 ShouldDeleteForTypeMismatch = true; 7750 else { 7751 Diag(MD->getLocation(), diag::err_defaulted_special_member_quals) 7752 << (CSM == CXXMoveAssignment) << getLangOpts().CPlusPlus14; 7753 HadError = true; 7754 } 7755 } 7756 // [C++23][dcl.fct.def.default]/p2.2 7757 // if F2 has an implicit object parameter of type “reference to C”, 7758 // F1 may be an explicit object member function whose explicit object 7759 // parameter is of (possibly different) type “reference to C”, 7760 // in which case the type of F1 would differ from the type of F2 7761 // in that the type of F1 has an additional parameter; 7762 if (!Context.hasSameType( 7763 ThisType.getNonReferenceType().getUnqualifiedType(), 7764 Context.getRecordType(RD))) { 7765 if (DeleteOnTypeMismatch) 7766 ShouldDeleteForTypeMismatch = true; 7767 else { 7768 Diag(MD->getLocation(), 7769 diag::err_defaulted_special_member_explicit_object_mismatch) 7770 << (CSM == CXXMoveAssignment) << RD << MD->getSourceRange(); 7771 HadError = true; 7772 } 7773 } 7774 } 7775 7776 // Check for parameter type matching. 7777 QualType ArgType = 7778 ExpectedParams 7779 ? Type->getParamType(MD->isExplicitObjectMemberFunction() ? 1 : 0) 7780 : QualType(); 7781 bool HasConstParam = false; 7782 if (ExpectedParams && ArgType->isReferenceType()) { 7783 // Argument must be reference to possibly-const T. 7784 QualType ReferentType = ArgType->getPointeeType(); 7785 HasConstParam = ReferentType.isConstQualified(); 7786 7787 if (ReferentType.isVolatileQualified()) { 7788 if (DeleteOnTypeMismatch) 7789 ShouldDeleteForTypeMismatch = true; 7790 else { 7791 Diag(MD->getLocation(), 7792 diag::err_defaulted_special_member_volatile_param) << CSM; 7793 HadError = true; 7794 } 7795 } 7796 7797 if (HasConstParam && !CanHaveConstParam) { 7798 if (DeleteOnTypeMismatch) 7799 ShouldDeleteForTypeMismatch = true; 7800 else if (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment) { 7801 Diag(MD->getLocation(), 7802 diag::err_defaulted_special_member_copy_const_param) 7803 << (CSM == CXXCopyAssignment); 7804 // FIXME: Explain why this special member can't be const. 7805 HadError = true; 7806 } else { 7807 Diag(MD->getLocation(), 7808 diag::err_defaulted_special_member_move_const_param) 7809 << (CSM == CXXMoveAssignment); 7810 HadError = true; 7811 } 7812 } 7813 } else if (ExpectedParams) { 7814 // A copy assignment operator can take its argument by value, but a 7815 // defaulted one cannot. 7816 assert(CSM == CXXCopyAssignment && "unexpected non-ref argument"); 7817 Diag(MD->getLocation(), diag::err_defaulted_copy_assign_not_ref); 7818 HadError = true; 7819 } 7820 7821 // C++11 [dcl.fct.def.default]p2: 7822 // An explicitly-defaulted function may be declared constexpr only if it 7823 // would have been implicitly declared as constexpr, 7824 // Do not apply this rule to members of class templates, since core issue 1358 7825 // makes such functions always instantiate to constexpr functions. For 7826 // functions which cannot be constexpr (for non-constructors in C++11 and for 7827 // destructors in C++14 and C++17), this is checked elsewhere. 7828 // 7829 // FIXME: This should not apply if the member is deleted. 7830 bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, RD, CSM, 7831 HasConstParam); 7832 7833 // C++14 [dcl.constexpr]p6 (CWG DR647/CWG DR1358): 7834 // If the instantiated template specialization of a constexpr function 7835 // template or member function of a class template would fail to satisfy 7836 // the requirements for a constexpr function or constexpr constructor, that 7837 // specialization is still a constexpr function or constexpr constructor, 7838 // even though a call to such a function cannot appear in a constant 7839 // expression. 7840 if (MD->isTemplateInstantiation() && MD->isConstexpr()) 7841 Constexpr = true; 7842 7843 if ((getLangOpts().CPlusPlus20 || 7844 (getLangOpts().CPlusPlus14 ? !isa<CXXDestructorDecl>(MD) 7845 : isa<CXXConstructorDecl>(MD))) && 7846 MD->isConstexpr() && !Constexpr && 7847 MD->getTemplatedKind() == FunctionDecl::TK_NonTemplate) { 7848 if (!MD->isConsteval() && RD->getNumVBases()) { 7849 Diag(MD->getBeginLoc(), diag::err_incorrect_defaulted_constexpr_with_vb) 7850 << CSM; 7851 for (const auto &I : RD->vbases()) 7852 Diag(I.getBeginLoc(), diag::note_constexpr_virtual_base_here); 7853 } else { 7854 Diag(MD->getBeginLoc(), MD->isConsteval() 7855 ? diag::err_incorrect_defaulted_consteval 7856 : diag::err_incorrect_defaulted_constexpr) 7857 << CSM; 7858 } 7859 // FIXME: Explain why the special member can't be constexpr. 7860 HadError = true; 7861 } 7862 7863 if (First) { 7864 // C++2a [dcl.fct.def.default]p3: 7865 // If a function is explicitly defaulted on its first declaration, it is 7866 // implicitly considered to be constexpr if the implicit declaration 7867 // would be. 7868 MD->setConstexprKind(Constexpr ? (MD->isConsteval() 7869 ? ConstexprSpecKind::Consteval 7870 : ConstexprSpecKind::Constexpr) 7871 : ConstexprSpecKind::Unspecified); 7872 7873 if (!Type->hasExceptionSpec()) { 7874 // C++2a [except.spec]p3: 7875 // If a declaration of a function does not have a noexcept-specifier 7876 // [and] is defaulted on its first declaration, [...] the exception 7877 // specification is as specified below 7878 FunctionProtoType::ExtProtoInfo EPI = Type->getExtProtoInfo(); 7879 EPI.ExceptionSpec.Type = EST_Unevaluated; 7880 EPI.ExceptionSpec.SourceDecl = MD; 7881 MD->setType( 7882 Context.getFunctionType(ReturnType, Type->getParamTypes(), EPI)); 7883 } 7884 } 7885 7886 if (ShouldDeleteForTypeMismatch || ShouldDeleteSpecialMember(MD, CSM)) { 7887 if (First) { 7888 SetDeclDeleted(MD, MD->getLocation()); 7889 if (!inTemplateInstantiation() && !HadError) { 7890 Diag(MD->getLocation(), diag::warn_defaulted_method_deleted) << CSM; 7891 if (ShouldDeleteForTypeMismatch) { 7892 Diag(MD->getLocation(), diag::note_deleted_type_mismatch) << CSM; 7893 } else if (ShouldDeleteSpecialMember(MD, CSM, nullptr, 7894 /*Diagnose*/ true) && 7895 DefaultLoc.isValid()) { 7896 Diag(DefaultLoc, diag::note_replace_equals_default_to_delete) 7897 << FixItHint::CreateReplacement(DefaultLoc, "delete"); 7898 } 7899 } 7900 if (ShouldDeleteForTypeMismatch && !HadError) { 7901 Diag(MD->getLocation(), 7902 diag::warn_cxx17_compat_defaulted_method_type_mismatch) << CSM; 7903 } 7904 } else { 7905 // C++11 [dcl.fct.def.default]p4: 7906 // [For a] user-provided explicitly-defaulted function [...] if such a 7907 // function is implicitly defined as deleted, the program is ill-formed. 7908 Diag(MD->getLocation(), diag::err_out_of_line_default_deletes) << CSM; 7909 assert(!ShouldDeleteForTypeMismatch && "deleted non-first decl"); 7910 ShouldDeleteSpecialMember(MD, CSM, nullptr, /*Diagnose*/true); 7911 HadError = true; 7912 } 7913 } 7914 7915 return HadError; 7916 } 7917 7918 namespace { 7919 /// Helper class for building and checking a defaulted comparison. 7920 /// 7921 /// Defaulted functions are built in two phases: 7922 /// 7923 /// * First, the set of operations that the function will perform are 7924 /// identified, and some of them are checked. If any of the checked 7925 /// operations is invalid in certain ways, the comparison function is 7926 /// defined as deleted and no body is built. 7927 /// * Then, if the function is not defined as deleted, the body is built. 7928 /// 7929 /// This is accomplished by performing two visitation steps over the eventual 7930 /// body of the function. 7931 template<typename Derived, typename ResultList, typename Result, 7932 typename Subobject> 7933 class DefaultedComparisonVisitor { 7934 public: 7935 using DefaultedComparisonKind = Sema::DefaultedComparisonKind; 7936 7937 DefaultedComparisonVisitor(Sema &S, CXXRecordDecl *RD, FunctionDecl *FD, 7938 DefaultedComparisonKind DCK) 7939 : S(S), RD(RD), FD(FD), DCK(DCK) { 7940 if (auto *Info = FD->getDefaultedFunctionInfo()) { 7941 // FIXME: Change CreateOverloadedBinOp to take an ArrayRef instead of an 7942 // UnresolvedSet to avoid this copy. 7943 Fns.assign(Info->getUnqualifiedLookups().begin(), 7944 Info->getUnqualifiedLookups().end()); 7945 } 7946 } 7947 7948 ResultList visit() { 7949 // The type of an lvalue naming a parameter of this function. 7950 QualType ParamLvalType = 7951 FD->getParamDecl(0)->getType().getNonReferenceType(); 7952 7953 ResultList Results; 7954 7955 switch (DCK) { 7956 case DefaultedComparisonKind::None: 7957 llvm_unreachable("not a defaulted comparison"); 7958 7959 case DefaultedComparisonKind::Equal: 7960 case DefaultedComparisonKind::ThreeWay: 7961 getDerived().visitSubobjects(Results, RD, ParamLvalType.getQualifiers()); 7962 return Results; 7963 7964 case DefaultedComparisonKind::NotEqual: 7965 case DefaultedComparisonKind::Relational: 7966 Results.add(getDerived().visitExpandedSubobject( 7967 ParamLvalType, getDerived().getCompleteObject())); 7968 return Results; 7969 } 7970 llvm_unreachable(""); 7971 } 7972 7973 protected: 7974 Derived &getDerived() { return static_cast<Derived&>(*this); } 7975 7976 /// Visit the expanded list of subobjects of the given type, as specified in 7977 /// C++2a [class.compare.default]. 7978 /// 7979 /// \return \c true if the ResultList object said we're done, \c false if not. 7980 bool visitSubobjects(ResultList &Results, CXXRecordDecl *Record, 7981 Qualifiers Quals) { 7982 // C++2a [class.compare.default]p4: 7983 // The direct base class subobjects of C 7984 for (CXXBaseSpecifier &Base : Record->bases()) 7985 if (Results.add(getDerived().visitSubobject( 7986 S.Context.getQualifiedType(Base.getType(), Quals), 7987 getDerived().getBase(&Base)))) 7988 return true; 7989 7990 // followed by the non-static data members of C 7991 for (FieldDecl *Field : Record->fields()) { 7992 // C++23 [class.bit]p2: 7993 // Unnamed bit-fields are not members ... 7994 if (Field->isUnnamedBitfield()) 7995 continue; 7996 // Recursively expand anonymous structs. 7997 if (Field->isAnonymousStructOrUnion()) { 7998 if (visitSubobjects(Results, Field->getType()->getAsCXXRecordDecl(), 7999 Quals)) 8000 return true; 8001 continue; 8002 } 8003 8004 // Figure out the type of an lvalue denoting this field. 8005 Qualifiers FieldQuals = Quals; 8006 if (Field->isMutable()) 8007 FieldQuals.removeConst(); 8008 QualType FieldType = 8009 S.Context.getQualifiedType(Field->getType(), FieldQuals); 8010 8011 if (Results.add(getDerived().visitSubobject( 8012 FieldType, getDerived().getField(Field)))) 8013 return true; 8014 } 8015 8016 // form a list of subobjects. 8017 return false; 8018 } 8019 8020 Result visitSubobject(QualType Type, Subobject Subobj) { 8021 // In that list, any subobject of array type is recursively expanded 8022 const ArrayType *AT = S.Context.getAsArrayType(Type); 8023 if (auto *CAT = dyn_cast_or_null<ConstantArrayType>(AT)) 8024 return getDerived().visitSubobjectArray(CAT->getElementType(), 8025 CAT->getSize(), Subobj); 8026 return getDerived().visitExpandedSubobject(Type, Subobj); 8027 } 8028 8029 Result visitSubobjectArray(QualType Type, const llvm::APInt &Size, 8030 Subobject Subobj) { 8031 return getDerived().visitSubobject(Type, Subobj); 8032 } 8033 8034 protected: 8035 Sema &S; 8036 CXXRecordDecl *RD; 8037 FunctionDecl *FD; 8038 DefaultedComparisonKind DCK; 8039 UnresolvedSet<16> Fns; 8040 }; 8041 8042 /// Information about a defaulted comparison, as determined by 8043 /// DefaultedComparisonAnalyzer. 8044 struct DefaultedComparisonInfo { 8045 bool Deleted = false; 8046 bool Constexpr = true; 8047 ComparisonCategoryType Category = ComparisonCategoryType::StrongOrdering; 8048 8049 static DefaultedComparisonInfo deleted() { 8050 DefaultedComparisonInfo Deleted; 8051 Deleted.Deleted = true; 8052 return Deleted; 8053 } 8054 8055 bool add(const DefaultedComparisonInfo &R) { 8056 Deleted |= R.Deleted; 8057 Constexpr &= R.Constexpr; 8058 Category = commonComparisonType(Category, R.Category); 8059 return Deleted; 8060 } 8061 }; 8062 8063 /// An element in the expanded list of subobjects of a defaulted comparison, as 8064 /// specified in C++2a [class.compare.default]p4. 8065 struct DefaultedComparisonSubobject { 8066 enum { CompleteObject, Member, Base } Kind; 8067 NamedDecl *Decl; 8068 SourceLocation Loc; 8069 }; 8070 8071 /// A visitor over the notional body of a defaulted comparison that determines 8072 /// whether that body would be deleted or constexpr. 8073 class DefaultedComparisonAnalyzer 8074 : public DefaultedComparisonVisitor<DefaultedComparisonAnalyzer, 8075 DefaultedComparisonInfo, 8076 DefaultedComparisonInfo, 8077 DefaultedComparisonSubobject> { 8078 public: 8079 enum DiagnosticKind { NoDiagnostics, ExplainDeleted, ExplainConstexpr }; 8080 8081 private: 8082 DiagnosticKind Diagnose; 8083 8084 public: 8085 using Base = DefaultedComparisonVisitor; 8086 using Result = DefaultedComparisonInfo; 8087 using Subobject = DefaultedComparisonSubobject; 8088 8089 friend Base; 8090 8091 DefaultedComparisonAnalyzer(Sema &S, CXXRecordDecl *RD, FunctionDecl *FD, 8092 DefaultedComparisonKind DCK, 8093 DiagnosticKind Diagnose = NoDiagnostics) 8094 : Base(S, RD, FD, DCK), Diagnose(Diagnose) {} 8095 8096 Result visit() { 8097 if ((DCK == DefaultedComparisonKind::Equal || 8098 DCK == DefaultedComparisonKind::ThreeWay) && 8099 RD->hasVariantMembers()) { 8100 // C++2a [class.compare.default]p2 [P2002R0]: 8101 // A defaulted comparison operator function for class C is defined as 8102 // deleted if [...] C has variant members. 8103 if (Diagnose == ExplainDeleted) { 8104 S.Diag(FD->getLocation(), diag::note_defaulted_comparison_union) 8105 << FD << RD->isUnion() << RD; 8106 } 8107 return Result::deleted(); 8108 } 8109 8110 return Base::visit(); 8111 } 8112 8113 private: 8114 Subobject getCompleteObject() { 8115 return Subobject{Subobject::CompleteObject, RD, FD->getLocation()}; 8116 } 8117 8118 Subobject getBase(CXXBaseSpecifier *Base) { 8119 return Subobject{Subobject::Base, Base->getType()->getAsCXXRecordDecl(), 8120 Base->getBaseTypeLoc()}; 8121 } 8122 8123 Subobject getField(FieldDecl *Field) { 8124 return Subobject{Subobject::Member, Field, Field->getLocation()}; 8125 } 8126 8127 Result visitExpandedSubobject(QualType Type, Subobject Subobj) { 8128 // C++2a [class.compare.default]p2 [P2002R0]: 8129 // A defaulted <=> or == operator function for class C is defined as 8130 // deleted if any non-static data member of C is of reference type 8131 if (Type->isReferenceType()) { 8132 if (Diagnose == ExplainDeleted) { 8133 S.Diag(Subobj.Loc, diag::note_defaulted_comparison_reference_member) 8134 << FD << RD; 8135 } 8136 return Result::deleted(); 8137 } 8138 8139 // [...] Let xi be an lvalue denoting the ith element [...] 8140 OpaqueValueExpr Xi(FD->getLocation(), Type, VK_LValue); 8141 Expr *Args[] = {&Xi, &Xi}; 8142 8143 // All operators start by trying to apply that same operator recursively. 8144 OverloadedOperatorKind OO = FD->getOverloadedOperator(); 8145 assert(OO != OO_None && "not an overloaded operator!"); 8146 return visitBinaryOperator(OO, Args, Subobj); 8147 } 8148 8149 Result 8150 visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, 8151 Subobject Subobj, 8152 OverloadCandidateSet *SpaceshipCandidates = nullptr) { 8153 // Note that there is no need to consider rewritten candidates here if 8154 // we've already found there is no viable 'operator<=>' candidate (and are 8155 // considering synthesizing a '<=>' from '==' and '<'). 8156 OverloadCandidateSet CandidateSet( 8157 FD->getLocation(), OverloadCandidateSet::CSK_Operator, 8158 OverloadCandidateSet::OperatorRewriteInfo( 8159 OO, FD->getLocation(), 8160 /*AllowRewrittenCandidates=*/!SpaceshipCandidates)); 8161 8162 /// C++2a [class.compare.default]p1 [P2002R0]: 8163 /// [...] the defaulted function itself is never a candidate for overload 8164 /// resolution [...] 8165 CandidateSet.exclude(FD); 8166 8167 if (Args[0]->getType()->isOverloadableType()) 8168 S.LookupOverloadedBinOp(CandidateSet, OO, Fns, Args); 8169 else 8170 // FIXME: We determine whether this is a valid expression by checking to 8171 // see if there's a viable builtin operator candidate for it. That isn't 8172 // really what the rules ask us to do, but should give the right results. 8173 S.AddBuiltinOperatorCandidates(OO, FD->getLocation(), Args, CandidateSet); 8174 8175 Result R; 8176 8177 OverloadCandidateSet::iterator Best; 8178 switch (CandidateSet.BestViableFunction(S, FD->getLocation(), Best)) { 8179 case OR_Success: { 8180 // C++2a [class.compare.secondary]p2 [P2002R0]: 8181 // The operator function [...] is defined as deleted if [...] the 8182 // candidate selected by overload resolution is not a rewritten 8183 // candidate. 8184 if ((DCK == DefaultedComparisonKind::NotEqual || 8185 DCK == DefaultedComparisonKind::Relational) && 8186 !Best->RewriteKind) { 8187 if (Diagnose == ExplainDeleted) { 8188 if (Best->Function) { 8189 S.Diag(Best->Function->getLocation(), 8190 diag::note_defaulted_comparison_not_rewritten_callee) 8191 << FD; 8192 } else { 8193 assert(Best->Conversions.size() == 2 && 8194 Best->Conversions[0].isUserDefined() && 8195 "non-user-defined conversion from class to built-in " 8196 "comparison"); 8197 S.Diag(Best->Conversions[0] 8198 .UserDefined.FoundConversionFunction.getDecl() 8199 ->getLocation(), 8200 diag::note_defaulted_comparison_not_rewritten_conversion) 8201 << FD; 8202 } 8203 } 8204 return Result::deleted(); 8205 } 8206 8207 // Throughout C++2a [class.compare]: if overload resolution does not 8208 // result in a usable function, the candidate function is defined as 8209 // deleted. This requires that we selected an accessible function. 8210 // 8211 // Note that this only considers the access of the function when named 8212 // within the type of the subobject, and not the access path for any 8213 // derived-to-base conversion. 8214 CXXRecordDecl *ArgClass = Args[0]->getType()->getAsCXXRecordDecl(); 8215 if (ArgClass && Best->FoundDecl.getDecl() && 8216 Best->FoundDecl.getDecl()->isCXXClassMember()) { 8217 QualType ObjectType = Subobj.Kind == Subobject::Member 8218 ? Args[0]->getType() 8219 : S.Context.getRecordType(RD); 8220 if (!S.isMemberAccessibleForDeletion( 8221 ArgClass, Best->FoundDecl, ObjectType, Subobj.Loc, 8222 Diagnose == ExplainDeleted 8223 ? S.PDiag(diag::note_defaulted_comparison_inaccessible) 8224 << FD << Subobj.Kind << Subobj.Decl 8225 : S.PDiag())) 8226 return Result::deleted(); 8227 } 8228 8229 bool NeedsDeducing = 8230 OO == OO_Spaceship && FD->getReturnType()->isUndeducedAutoType(); 8231 8232 if (FunctionDecl *BestFD = Best->Function) { 8233 // C++2a [class.compare.default]p3 [P2002R0]: 8234 // A defaulted comparison function is constexpr-compatible if 8235 // [...] no overlod resolution performed [...] results in a 8236 // non-constexpr function. 8237 assert(!BestFD->isDeleted() && "wrong overload resolution result"); 8238 // If it's not constexpr, explain why not. 8239 if (Diagnose == ExplainConstexpr && !BestFD->isConstexpr()) { 8240 if (Subobj.Kind != Subobject::CompleteObject) 8241 S.Diag(Subobj.Loc, diag::note_defaulted_comparison_not_constexpr) 8242 << Subobj.Kind << Subobj.Decl; 8243 S.Diag(BestFD->getLocation(), 8244 diag::note_defaulted_comparison_not_constexpr_here); 8245 // Bail out after explaining; we don't want any more notes. 8246 return Result::deleted(); 8247 } 8248 R.Constexpr &= BestFD->isConstexpr(); 8249 8250 if (NeedsDeducing) { 8251 // If any callee has an undeduced return type, deduce it now. 8252 // FIXME: It's not clear how a failure here should be handled. For 8253 // now, we produce an eager diagnostic, because that is forward 8254 // compatible with most (all?) other reasonable options. 8255 if (BestFD->getReturnType()->isUndeducedType() && 8256 S.DeduceReturnType(BestFD, FD->getLocation(), 8257 /*Diagnose=*/false)) { 8258 // Don't produce a duplicate error when asked to explain why the 8259 // comparison is deleted: we diagnosed that when initially checking 8260 // the defaulted operator. 8261 if (Diagnose == NoDiagnostics) { 8262 S.Diag( 8263 FD->getLocation(), 8264 diag::err_defaulted_comparison_cannot_deduce_undeduced_auto) 8265 << Subobj.Kind << Subobj.Decl; 8266 S.Diag( 8267 Subobj.Loc, 8268 diag::note_defaulted_comparison_cannot_deduce_undeduced_auto) 8269 << Subobj.Kind << Subobj.Decl; 8270 S.Diag(BestFD->getLocation(), 8271 diag::note_defaulted_comparison_cannot_deduce_callee) 8272 << Subobj.Kind << Subobj.Decl; 8273 } 8274 return Result::deleted(); 8275 } 8276 auto *Info = S.Context.CompCategories.lookupInfoForType( 8277 BestFD->getCallResultType()); 8278 if (!Info) { 8279 if (Diagnose == ExplainDeleted) { 8280 S.Diag(Subobj.Loc, diag::note_defaulted_comparison_cannot_deduce) 8281 << Subobj.Kind << Subobj.Decl 8282 << BestFD->getCallResultType().withoutLocalFastQualifiers(); 8283 S.Diag(BestFD->getLocation(), 8284 diag::note_defaulted_comparison_cannot_deduce_callee) 8285 << Subobj.Kind << Subobj.Decl; 8286 } 8287 return Result::deleted(); 8288 } 8289 R.Category = Info->Kind; 8290 } 8291 } else { 8292 QualType T = Best->BuiltinParamTypes[0]; 8293 assert(T == Best->BuiltinParamTypes[1] && 8294 "builtin comparison for different types?"); 8295 assert(Best->BuiltinParamTypes[2].isNull() && 8296 "invalid builtin comparison"); 8297 8298 if (NeedsDeducing) { 8299 std::optional<ComparisonCategoryType> Cat = 8300 getComparisonCategoryForBuiltinCmp(T); 8301 assert(Cat && "no category for builtin comparison?"); 8302 R.Category = *Cat; 8303 } 8304 } 8305 8306 // Note that we might be rewriting to a different operator. That call is 8307 // not considered until we come to actually build the comparison function. 8308 break; 8309 } 8310 8311 case OR_Ambiguous: 8312 if (Diagnose == ExplainDeleted) { 8313 unsigned Kind = 0; 8314 if (FD->getOverloadedOperator() == OO_Spaceship && OO != OO_Spaceship) 8315 Kind = OO == OO_EqualEqual ? 1 : 2; 8316 CandidateSet.NoteCandidates( 8317 PartialDiagnosticAt( 8318 Subobj.Loc, S.PDiag(diag::note_defaulted_comparison_ambiguous) 8319 << FD << Kind << Subobj.Kind << Subobj.Decl), 8320 S, OCD_AmbiguousCandidates, Args); 8321 } 8322 R = Result::deleted(); 8323 break; 8324 8325 case OR_Deleted: 8326 if (Diagnose == ExplainDeleted) { 8327 if ((DCK == DefaultedComparisonKind::NotEqual || 8328 DCK == DefaultedComparisonKind::Relational) && 8329 !Best->RewriteKind) { 8330 S.Diag(Best->Function->getLocation(), 8331 diag::note_defaulted_comparison_not_rewritten_callee) 8332 << FD; 8333 } else { 8334 S.Diag(Subobj.Loc, 8335 diag::note_defaulted_comparison_calls_deleted) 8336 << FD << Subobj.Kind << Subobj.Decl; 8337 S.NoteDeletedFunction(Best->Function); 8338 } 8339 } 8340 R = Result::deleted(); 8341 break; 8342 8343 case OR_No_Viable_Function: 8344 // If there's no usable candidate, we're done unless we can rewrite a 8345 // '<=>' in terms of '==' and '<'. 8346 if (OO == OO_Spaceship && 8347 S.Context.CompCategories.lookupInfoForType(FD->getReturnType())) { 8348 // For any kind of comparison category return type, we need a usable 8349 // '==' and a usable '<'. 8350 if (!R.add(visitBinaryOperator(OO_EqualEqual, Args, Subobj, 8351 &CandidateSet))) 8352 R.add(visitBinaryOperator(OO_Less, Args, Subobj, &CandidateSet)); 8353 break; 8354 } 8355 8356 if (Diagnose == ExplainDeleted) { 8357 S.Diag(Subobj.Loc, diag::note_defaulted_comparison_no_viable_function) 8358 << FD << (OO == OO_EqualEqual || OO == OO_ExclaimEqual) 8359 << Subobj.Kind << Subobj.Decl; 8360 8361 // For a three-way comparison, list both the candidates for the 8362 // original operator and the candidates for the synthesized operator. 8363 if (SpaceshipCandidates) { 8364 SpaceshipCandidates->NoteCandidates( 8365 S, Args, 8366 SpaceshipCandidates->CompleteCandidates(S, OCD_AllCandidates, 8367 Args, FD->getLocation())); 8368 S.Diag(Subobj.Loc, 8369 diag::note_defaulted_comparison_no_viable_function_synthesized) 8370 << (OO == OO_EqualEqual ? 0 : 1); 8371 } 8372 8373 CandidateSet.NoteCandidates( 8374 S, Args, 8375 CandidateSet.CompleteCandidates(S, OCD_AllCandidates, Args, 8376 FD->getLocation())); 8377 } 8378 R = Result::deleted(); 8379 break; 8380 } 8381 8382 return R; 8383 } 8384 }; 8385 8386 /// A list of statements. 8387 struct StmtListResult { 8388 bool IsInvalid = false; 8389 llvm::SmallVector<Stmt*, 16> Stmts; 8390 8391 bool add(const StmtResult &S) { 8392 IsInvalid |= S.isInvalid(); 8393 if (IsInvalid) 8394 return true; 8395 Stmts.push_back(S.get()); 8396 return false; 8397 } 8398 }; 8399 8400 /// A visitor over the notional body of a defaulted comparison that synthesizes 8401 /// the actual body. 8402 class DefaultedComparisonSynthesizer 8403 : public DefaultedComparisonVisitor<DefaultedComparisonSynthesizer, 8404 StmtListResult, StmtResult, 8405 std::pair<ExprResult, ExprResult>> { 8406 SourceLocation Loc; 8407 unsigned ArrayDepth = 0; 8408 8409 public: 8410 using Base = DefaultedComparisonVisitor; 8411 using ExprPair = std::pair<ExprResult, ExprResult>; 8412 8413 friend Base; 8414 8415 DefaultedComparisonSynthesizer(Sema &S, CXXRecordDecl *RD, FunctionDecl *FD, 8416 DefaultedComparisonKind DCK, 8417 SourceLocation BodyLoc) 8418 : Base(S, RD, FD, DCK), Loc(BodyLoc) {} 8419 8420 /// Build a suitable function body for this defaulted comparison operator. 8421 StmtResult build() { 8422 Sema::CompoundScopeRAII CompoundScope(S); 8423 8424 StmtListResult Stmts = visit(); 8425 if (Stmts.IsInvalid) 8426 return StmtError(); 8427 8428 ExprResult RetVal; 8429 switch (DCK) { 8430 case DefaultedComparisonKind::None: 8431 llvm_unreachable("not a defaulted comparison"); 8432 8433 case DefaultedComparisonKind::Equal: { 8434 // C++2a [class.eq]p3: 8435 // [...] compar[e] the corresponding elements [...] until the first 8436 // index i where xi == yi yields [...] false. If no such index exists, 8437 // V is true. Otherwise, V is false. 8438 // 8439 // Join the comparisons with '&&'s and return the result. Use a right 8440 // fold (traversing the conditions right-to-left), because that 8441 // short-circuits more naturally. 8442 auto OldStmts = std::move(Stmts.Stmts); 8443 Stmts.Stmts.clear(); 8444 ExprResult CmpSoFar; 8445 // Finish a particular comparison chain. 8446 auto FinishCmp = [&] { 8447 if (Expr *Prior = CmpSoFar.get()) { 8448 // Convert the last expression to 'return ...;' 8449 if (RetVal.isUnset() && Stmts.Stmts.empty()) 8450 RetVal = CmpSoFar; 8451 // Convert any prior comparison to 'if (!(...)) return false;' 8452 else if (Stmts.add(buildIfNotCondReturnFalse(Prior))) 8453 return true; 8454 CmpSoFar = ExprResult(); 8455 } 8456 return false; 8457 }; 8458 for (Stmt *EAsStmt : llvm::reverse(OldStmts)) { 8459 Expr *E = dyn_cast<Expr>(EAsStmt); 8460 if (!E) { 8461 // Found an array comparison. 8462 if (FinishCmp() || Stmts.add(EAsStmt)) 8463 return StmtError(); 8464 continue; 8465 } 8466 8467 if (CmpSoFar.isUnset()) { 8468 CmpSoFar = E; 8469 continue; 8470 } 8471 CmpSoFar = S.CreateBuiltinBinOp(Loc, BO_LAnd, E, CmpSoFar.get()); 8472 if (CmpSoFar.isInvalid()) 8473 return StmtError(); 8474 } 8475 if (FinishCmp()) 8476 return StmtError(); 8477 std::reverse(Stmts.Stmts.begin(), Stmts.Stmts.end()); 8478 // If no such index exists, V is true. 8479 if (RetVal.isUnset()) 8480 RetVal = S.ActOnCXXBoolLiteral(Loc, tok::kw_true); 8481 break; 8482 } 8483 8484 case DefaultedComparisonKind::ThreeWay: { 8485 // Per C++2a [class.spaceship]p3, as a fallback add: 8486 // return static_cast<R>(std::strong_ordering::equal); 8487 QualType StrongOrdering = S.CheckComparisonCategoryType( 8488 ComparisonCategoryType::StrongOrdering, Loc, 8489 Sema::ComparisonCategoryUsage::DefaultedOperator); 8490 if (StrongOrdering.isNull()) 8491 return StmtError(); 8492 VarDecl *EqualVD = S.Context.CompCategories.getInfoForType(StrongOrdering) 8493 .getValueInfo(ComparisonCategoryResult::Equal) 8494 ->VD; 8495 RetVal = getDecl(EqualVD); 8496 if (RetVal.isInvalid()) 8497 return StmtError(); 8498 RetVal = buildStaticCastToR(RetVal.get()); 8499 break; 8500 } 8501 8502 case DefaultedComparisonKind::NotEqual: 8503 case DefaultedComparisonKind::Relational: 8504 RetVal = cast<Expr>(Stmts.Stmts.pop_back_val()); 8505 break; 8506 } 8507 8508 // Build the final return statement. 8509 if (RetVal.isInvalid()) 8510 return StmtError(); 8511 StmtResult ReturnStmt = S.BuildReturnStmt(Loc, RetVal.get()); 8512 if (ReturnStmt.isInvalid()) 8513 return StmtError(); 8514 Stmts.Stmts.push_back(ReturnStmt.get()); 8515 8516 return S.ActOnCompoundStmt(Loc, Loc, Stmts.Stmts, /*IsStmtExpr=*/false); 8517 } 8518 8519 private: 8520 ExprResult getDecl(ValueDecl *VD) { 8521 return S.BuildDeclarationNameExpr( 8522 CXXScopeSpec(), DeclarationNameInfo(VD->getDeclName(), Loc), VD); 8523 } 8524 8525 ExprResult getParam(unsigned I) { 8526 ParmVarDecl *PD = FD->getParamDecl(I); 8527 return getDecl(PD); 8528 } 8529 8530 ExprPair getCompleteObject() { 8531 unsigned Param = 0; 8532 ExprResult LHS; 8533 if (const auto *MD = dyn_cast<CXXMethodDecl>(FD); 8534 MD && MD->isImplicitObjectMemberFunction()) { 8535 // LHS is '*this'. 8536 LHS = S.ActOnCXXThis(Loc); 8537 if (!LHS.isInvalid()) 8538 LHS = S.CreateBuiltinUnaryOp(Loc, UO_Deref, LHS.get()); 8539 } else { 8540 LHS = getParam(Param++); 8541 } 8542 ExprResult RHS = getParam(Param++); 8543 assert(Param == FD->getNumParams()); 8544 return {LHS, RHS}; 8545 } 8546 8547 ExprPair getBase(CXXBaseSpecifier *Base) { 8548 ExprPair Obj = getCompleteObject(); 8549 if (Obj.first.isInvalid() || Obj.second.isInvalid()) 8550 return {ExprError(), ExprError()}; 8551 CXXCastPath Path = {Base}; 8552 return {S.ImpCastExprToType(Obj.first.get(), Base->getType(), 8553 CK_DerivedToBase, VK_LValue, &Path), 8554 S.ImpCastExprToType(Obj.second.get(), Base->getType(), 8555 CK_DerivedToBase, VK_LValue, &Path)}; 8556 } 8557 8558 ExprPair getField(FieldDecl *Field) { 8559 ExprPair Obj = getCompleteObject(); 8560 if (Obj.first.isInvalid() || Obj.second.isInvalid()) 8561 return {ExprError(), ExprError()}; 8562 8563 DeclAccessPair Found = DeclAccessPair::make(Field, Field->getAccess()); 8564 DeclarationNameInfo NameInfo(Field->getDeclName(), Loc); 8565 return {S.BuildFieldReferenceExpr(Obj.first.get(), /*IsArrow=*/false, Loc, 8566 CXXScopeSpec(), Field, Found, NameInfo), 8567 S.BuildFieldReferenceExpr(Obj.second.get(), /*IsArrow=*/false, Loc, 8568 CXXScopeSpec(), Field, Found, NameInfo)}; 8569 } 8570 8571 // FIXME: When expanding a subobject, register a note in the code synthesis 8572 // stack to say which subobject we're comparing. 8573 8574 StmtResult buildIfNotCondReturnFalse(ExprResult Cond) { 8575 if (Cond.isInvalid()) 8576 return StmtError(); 8577 8578 ExprResult NotCond = S.CreateBuiltinUnaryOp(Loc, UO_LNot, Cond.get()); 8579 if (NotCond.isInvalid()) 8580 return StmtError(); 8581 8582 ExprResult False = S.ActOnCXXBoolLiteral(Loc, tok::kw_false); 8583 assert(!False.isInvalid() && "should never fail"); 8584 StmtResult ReturnFalse = S.BuildReturnStmt(Loc, False.get()); 8585 if (ReturnFalse.isInvalid()) 8586 return StmtError(); 8587 8588 return S.ActOnIfStmt(Loc, IfStatementKind::Ordinary, Loc, nullptr, 8589 S.ActOnCondition(nullptr, Loc, NotCond.get(), 8590 Sema::ConditionKind::Boolean), 8591 Loc, ReturnFalse.get(), SourceLocation(), nullptr); 8592 } 8593 8594 StmtResult visitSubobjectArray(QualType Type, llvm::APInt Size, 8595 ExprPair Subobj) { 8596 QualType SizeType = S.Context.getSizeType(); 8597 Size = Size.zextOrTrunc(S.Context.getTypeSize(SizeType)); 8598 8599 // Build 'size_t i$n = 0'. 8600 IdentifierInfo *IterationVarName = nullptr; 8601 { 8602 SmallString<8> Str; 8603 llvm::raw_svector_ostream OS(Str); 8604 OS << "i" << ArrayDepth; 8605 IterationVarName = &S.Context.Idents.get(OS.str()); 8606 } 8607 VarDecl *IterationVar = VarDecl::Create( 8608 S.Context, S.CurContext, Loc, Loc, IterationVarName, SizeType, 8609 S.Context.getTrivialTypeSourceInfo(SizeType, Loc), SC_None); 8610 llvm::APInt Zero(S.Context.getTypeSize(SizeType), 0); 8611 IterationVar->setInit( 8612 IntegerLiteral::Create(S.Context, Zero, SizeType, Loc)); 8613 Stmt *Init = new (S.Context) DeclStmt(DeclGroupRef(IterationVar), Loc, Loc); 8614 8615 auto IterRef = [&] { 8616 ExprResult Ref = S.BuildDeclarationNameExpr( 8617 CXXScopeSpec(), DeclarationNameInfo(IterationVarName, Loc), 8618 IterationVar); 8619 assert(!Ref.isInvalid() && "can't reference our own variable?"); 8620 return Ref.get(); 8621 }; 8622 8623 // Build 'i$n != Size'. 8624 ExprResult Cond = S.CreateBuiltinBinOp( 8625 Loc, BO_NE, IterRef(), 8626 IntegerLiteral::Create(S.Context, Size, SizeType, Loc)); 8627 assert(!Cond.isInvalid() && "should never fail"); 8628 8629 // Build '++i$n'. 8630 ExprResult Inc = S.CreateBuiltinUnaryOp(Loc, UO_PreInc, IterRef()); 8631 assert(!Inc.isInvalid() && "should never fail"); 8632 8633 // Build 'a[i$n]' and 'b[i$n]'. 8634 auto Index = [&](ExprResult E) { 8635 if (E.isInvalid()) 8636 return ExprError(); 8637 return S.CreateBuiltinArraySubscriptExpr(E.get(), Loc, IterRef(), Loc); 8638 }; 8639 Subobj.first = Index(Subobj.first); 8640 Subobj.second = Index(Subobj.second); 8641 8642 // Compare the array elements. 8643 ++ArrayDepth; 8644 StmtResult Substmt = visitSubobject(Type, Subobj); 8645 --ArrayDepth; 8646 8647 if (Substmt.isInvalid()) 8648 return StmtError(); 8649 8650 // For the inner level of an 'operator==', build 'if (!cmp) return false;'. 8651 // For outer levels or for an 'operator<=>' we already have a suitable 8652 // statement that returns as necessary. 8653 if (Expr *ElemCmp = dyn_cast<Expr>(Substmt.get())) { 8654 assert(DCK == DefaultedComparisonKind::Equal && 8655 "should have non-expression statement"); 8656 Substmt = buildIfNotCondReturnFalse(ElemCmp); 8657 if (Substmt.isInvalid()) 8658 return StmtError(); 8659 } 8660 8661 // Build 'for (...) ...' 8662 return S.ActOnForStmt(Loc, Loc, Init, 8663 S.ActOnCondition(nullptr, Loc, Cond.get(), 8664 Sema::ConditionKind::Boolean), 8665 S.MakeFullDiscardedValueExpr(Inc.get()), Loc, 8666 Substmt.get()); 8667 } 8668 8669 StmtResult visitExpandedSubobject(QualType Type, ExprPair Obj) { 8670 if (Obj.first.isInvalid() || Obj.second.isInvalid()) 8671 return StmtError(); 8672 8673 OverloadedOperatorKind OO = FD->getOverloadedOperator(); 8674 BinaryOperatorKind Opc = BinaryOperator::getOverloadedOpcode(OO); 8675 ExprResult Op; 8676 if (Type->isOverloadableType()) 8677 Op = S.CreateOverloadedBinOp(Loc, Opc, Fns, Obj.first.get(), 8678 Obj.second.get(), /*PerformADL=*/true, 8679 /*AllowRewrittenCandidates=*/true, FD); 8680 else 8681 Op = S.CreateBuiltinBinOp(Loc, Opc, Obj.first.get(), Obj.second.get()); 8682 if (Op.isInvalid()) 8683 return StmtError(); 8684 8685 switch (DCK) { 8686 case DefaultedComparisonKind::None: 8687 llvm_unreachable("not a defaulted comparison"); 8688 8689 case DefaultedComparisonKind::Equal: 8690 // Per C++2a [class.eq]p2, each comparison is individually contextually 8691 // converted to bool. 8692 Op = S.PerformContextuallyConvertToBool(Op.get()); 8693 if (Op.isInvalid()) 8694 return StmtError(); 8695 return Op.get(); 8696 8697 case DefaultedComparisonKind::ThreeWay: { 8698 // Per C++2a [class.spaceship]p3, form: 8699 // if (R cmp = static_cast<R>(op); cmp != 0) 8700 // return cmp; 8701 QualType R = FD->getReturnType(); 8702 Op = buildStaticCastToR(Op.get()); 8703 if (Op.isInvalid()) 8704 return StmtError(); 8705 8706 // R cmp = ...; 8707 IdentifierInfo *Name = &S.Context.Idents.get("cmp"); 8708 VarDecl *VD = 8709 VarDecl::Create(S.Context, S.CurContext, Loc, Loc, Name, R, 8710 S.Context.getTrivialTypeSourceInfo(R, Loc), SC_None); 8711 S.AddInitializerToDecl(VD, Op.get(), /*DirectInit=*/false); 8712 Stmt *InitStmt = new (S.Context) DeclStmt(DeclGroupRef(VD), Loc, Loc); 8713 8714 // cmp != 0 8715 ExprResult VDRef = getDecl(VD); 8716 if (VDRef.isInvalid()) 8717 return StmtError(); 8718 llvm::APInt ZeroVal(S.Context.getIntWidth(S.Context.IntTy), 0); 8719 Expr *Zero = 8720 IntegerLiteral::Create(S.Context, ZeroVal, S.Context.IntTy, Loc); 8721 ExprResult Comp; 8722 if (VDRef.get()->getType()->isOverloadableType()) 8723 Comp = S.CreateOverloadedBinOp(Loc, BO_NE, Fns, VDRef.get(), Zero, true, 8724 true, FD); 8725 else 8726 Comp = S.CreateBuiltinBinOp(Loc, BO_NE, VDRef.get(), Zero); 8727 if (Comp.isInvalid()) 8728 return StmtError(); 8729 Sema::ConditionResult Cond = S.ActOnCondition( 8730 nullptr, Loc, Comp.get(), Sema::ConditionKind::Boolean); 8731 if (Cond.isInvalid()) 8732 return StmtError(); 8733 8734 // return cmp; 8735 VDRef = getDecl(VD); 8736 if (VDRef.isInvalid()) 8737 return StmtError(); 8738 StmtResult ReturnStmt = S.BuildReturnStmt(Loc, VDRef.get()); 8739 if (ReturnStmt.isInvalid()) 8740 return StmtError(); 8741 8742 // if (...) 8743 return S.ActOnIfStmt(Loc, IfStatementKind::Ordinary, Loc, InitStmt, Cond, 8744 Loc, ReturnStmt.get(), 8745 /*ElseLoc=*/SourceLocation(), /*Else=*/nullptr); 8746 } 8747 8748 case DefaultedComparisonKind::NotEqual: 8749 case DefaultedComparisonKind::Relational: 8750 // C++2a [class.compare.secondary]p2: 8751 // Otherwise, the operator function yields x @ y. 8752 return Op.get(); 8753 } 8754 llvm_unreachable(""); 8755 } 8756 8757 /// Build "static_cast<R>(E)". 8758 ExprResult buildStaticCastToR(Expr *E) { 8759 QualType R = FD->getReturnType(); 8760 assert(!R->isUndeducedType() && "type should have been deduced already"); 8761 8762 // Don't bother forming a no-op cast in the common case. 8763 if (E->isPRValue() && S.Context.hasSameType(E->getType(), R)) 8764 return E; 8765 return S.BuildCXXNamedCast(Loc, tok::kw_static_cast, 8766 S.Context.getTrivialTypeSourceInfo(R, Loc), E, 8767 SourceRange(Loc, Loc), SourceRange(Loc, Loc)); 8768 } 8769 }; 8770 } 8771 8772 /// Perform the unqualified lookups that might be needed to form a defaulted 8773 /// comparison function for the given operator. 8774 static void lookupOperatorsForDefaultedComparison(Sema &Self, Scope *S, 8775 UnresolvedSetImpl &Operators, 8776 OverloadedOperatorKind Op) { 8777 auto Lookup = [&](OverloadedOperatorKind OO) { 8778 Self.LookupOverloadedOperatorName(OO, S, Operators); 8779 }; 8780 8781 // Every defaulted operator looks up itself. 8782 Lookup(Op); 8783 // ... and the rewritten form of itself, if any. 8784 if (OverloadedOperatorKind ExtraOp = getRewrittenOverloadedOperator(Op)) 8785 Lookup(ExtraOp); 8786 8787 // For 'operator<=>', we also form a 'cmp != 0' expression, and might 8788 // synthesize a three-way comparison from '<' and '=='. In a dependent 8789 // context, we also need to look up '==' in case we implicitly declare a 8790 // defaulted 'operator=='. 8791 if (Op == OO_Spaceship) { 8792 Lookup(OO_ExclaimEqual); 8793 Lookup(OO_Less); 8794 Lookup(OO_EqualEqual); 8795 } 8796 } 8797 8798 bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, 8799 DefaultedComparisonKind DCK) { 8800 assert(DCK != DefaultedComparisonKind::None && "not a defaulted comparison"); 8801 8802 // Perform any unqualified lookups we're going to need to default this 8803 // function. 8804 if (S) { 8805 UnresolvedSet<32> Operators; 8806 lookupOperatorsForDefaultedComparison(*this, S, Operators, 8807 FD->getOverloadedOperator()); 8808 FD->setDefaultedFunctionInfo(FunctionDecl::DefaultedFunctionInfo::Create( 8809 Context, Operators.pairs())); 8810 } 8811 8812 // C++2a [class.compare.default]p1: 8813 // A defaulted comparison operator function for some class C shall be a 8814 // non-template function declared in the member-specification of C that is 8815 // -- a non-static const non-volatile member of C having one parameter of 8816 // type const C& and either no ref-qualifier or the ref-qualifier &, or 8817 // -- a friend of C having two parameters of type const C& or two 8818 // parameters of type C. 8819 8820 CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(FD->getLexicalDeclContext()); 8821 bool IsMethod = isa<CXXMethodDecl>(FD); 8822 if (IsMethod) { 8823 auto *MD = cast<CXXMethodDecl>(FD); 8824 assert(!MD->isStatic() && "comparison function cannot be a static member"); 8825 8826 if (MD->getRefQualifier() == RQ_RValue) { 8827 Diag(MD->getLocation(), diag::err_ref_qualifier_comparison_operator); 8828 8829 // Remove the ref qualifier to recover. 8830 const auto *FPT = MD->getType()->castAs<FunctionProtoType>(); 8831 FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo(); 8832 EPI.RefQualifier = RQ_None; 8833 MD->setType(Context.getFunctionType(FPT->getReturnType(), 8834 FPT->getParamTypes(), EPI)); 8835 } 8836 8837 // If we're out-of-class, this is the class we're comparing. 8838 if (!RD) 8839 RD = MD->getParent(); 8840 QualType T = MD->getFunctionObjectParameterType(); 8841 if (!T.isConstQualified()) { 8842 SourceLocation Loc, InsertLoc; 8843 if (MD->isExplicitObjectMemberFunction()) { 8844 Loc = MD->getParamDecl(0)->getBeginLoc(); 8845 InsertLoc = getLocForEndOfToken( 8846 MD->getParamDecl(0)->getExplicitObjectParamThisLoc()); 8847 } else { 8848 Loc = MD->getLocation(); 8849 if (FunctionTypeLoc Loc = MD->getFunctionTypeLoc()) 8850 InsertLoc = Loc.getRParenLoc(); 8851 } 8852 // Don't diagnose an implicit 'operator=='; we will have diagnosed the 8853 // corresponding defaulted 'operator<=>' already. 8854 if (!MD->isImplicit()) { 8855 Diag(Loc, diag::err_defaulted_comparison_non_const) 8856 << (int)DCK << FixItHint::CreateInsertion(InsertLoc, " const"); 8857 } 8858 8859 // Add the 'const' to the type to recover. 8860 const auto *FPT = MD->getType()->castAs<FunctionProtoType>(); 8861 FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo(); 8862 EPI.TypeQuals.addConst(); 8863 MD->setType(Context.getFunctionType(FPT->getReturnType(), 8864 FPT->getParamTypes(), EPI)); 8865 } 8866 8867 if (MD->isVolatile()) { 8868 Diag(MD->getLocation(), diag::err_volatile_comparison_operator); 8869 8870 // Remove the 'volatile' from the type to recover. 8871 const auto *FPT = MD->getType()->castAs<FunctionProtoType>(); 8872 FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo(); 8873 EPI.TypeQuals.removeVolatile(); 8874 MD->setType(Context.getFunctionType(FPT->getReturnType(), 8875 FPT->getParamTypes(), EPI)); 8876 } 8877 } 8878 8879 if ((FD->getNumParams() - 8880 (unsigned)FD->hasCXXExplicitFunctionObjectParameter()) != 8881 (IsMethod ? 1 : 2)) { 8882 // Let's not worry about using a variadic template pack here -- who would do 8883 // such a thing? 8884 Diag(FD->getLocation(), diag::err_defaulted_comparison_num_args) 8885 << int(IsMethod) << int(DCK); 8886 return true; 8887 } 8888 8889 const ParmVarDecl *KnownParm = nullptr; 8890 for (const ParmVarDecl *Param : FD->parameters()) { 8891 if (Param->isExplicitObjectParameter()) 8892 continue; 8893 QualType ParmTy = Param->getType(); 8894 8895 if (!KnownParm) { 8896 auto CTy = ParmTy; 8897 // Is it `T const &`? 8898 bool Ok = !IsMethod; 8899 QualType ExpectedTy; 8900 if (RD) 8901 ExpectedTy = Context.getRecordType(RD); 8902 if (auto *Ref = CTy->getAs<ReferenceType>()) { 8903 CTy = Ref->getPointeeType(); 8904 if (RD) 8905 ExpectedTy.addConst(); 8906 Ok = true; 8907 } 8908 8909 // Is T a class? 8910 if (!Ok) { 8911 } else if (RD) { 8912 if (!RD->isDependentType() && !Context.hasSameType(CTy, ExpectedTy)) 8913 Ok = false; 8914 } else if (auto *CRD = CTy->getAsRecordDecl()) { 8915 RD = cast<CXXRecordDecl>(CRD); 8916 } else { 8917 Ok = false; 8918 } 8919 8920 if (Ok) { 8921 KnownParm = Param; 8922 } else { 8923 // Don't diagnose an implicit 'operator=='; we will have diagnosed the 8924 // corresponding defaulted 'operator<=>' already. 8925 if (!FD->isImplicit()) { 8926 if (RD) { 8927 QualType PlainTy = Context.getRecordType(RD); 8928 QualType RefTy = 8929 Context.getLValueReferenceType(PlainTy.withConst()); 8930 Diag(FD->getLocation(), diag::err_defaulted_comparison_param) 8931 << int(DCK) << ParmTy << RefTy << int(!IsMethod) << PlainTy 8932 << Param->getSourceRange(); 8933 } else { 8934 assert(!IsMethod && "should know expected type for method"); 8935 Diag(FD->getLocation(), 8936 diag::err_defaulted_comparison_param_unknown) 8937 << int(DCK) << ParmTy << Param->getSourceRange(); 8938 } 8939 } 8940 return true; 8941 } 8942 } else if (!Context.hasSameType(KnownParm->getType(), ParmTy)) { 8943 Diag(FD->getLocation(), diag::err_defaulted_comparison_param_mismatch) 8944 << int(DCK) << KnownParm->getType() << KnownParm->getSourceRange() 8945 << ParmTy << Param->getSourceRange(); 8946 return true; 8947 } 8948 } 8949 8950 assert(RD && "must have determined class"); 8951 if (IsMethod) { 8952 } else if (isa<CXXRecordDecl>(FD->getLexicalDeclContext())) { 8953 // In-class, must be a friend decl. 8954 assert(FD->getFriendObjectKind() && "expected a friend declaration"); 8955 } else { 8956 // Out of class, require the defaulted comparison to be a friend (of a 8957 // complete type). 8958 if (RequireCompleteType(FD->getLocation(), Context.getRecordType(RD), 8959 diag::err_defaulted_comparison_not_friend, int(DCK), 8960 int(1))) 8961 return true; 8962 8963 if (llvm::none_of(RD->friends(), [&](const FriendDecl *F) { 8964 return FD->getCanonicalDecl() == 8965 F->getFriendDecl()->getCanonicalDecl(); 8966 })) { 8967 Diag(FD->getLocation(), diag::err_defaulted_comparison_not_friend) 8968 << int(DCK) << int(0) << RD; 8969 Diag(RD->getCanonicalDecl()->getLocation(), diag::note_declared_at); 8970 return true; 8971 } 8972 } 8973 8974 // C++2a [class.eq]p1, [class.rel]p1: 8975 // A [defaulted comparison other than <=>] shall have a declared return 8976 // type bool. 8977 if (DCK != DefaultedComparisonKind::ThreeWay && 8978 !FD->getDeclaredReturnType()->isDependentType() && 8979 !Context.hasSameType(FD->getDeclaredReturnType(), Context.BoolTy)) { 8980 Diag(FD->getLocation(), diag::err_defaulted_comparison_return_type_not_bool) 8981 << (int)DCK << FD->getDeclaredReturnType() << Context.BoolTy 8982 << FD->getReturnTypeSourceRange(); 8983 return true; 8984 } 8985 // C++2a [class.spaceship]p2 [P2002R0]: 8986 // Let R be the declared return type [...]. If R is auto, [...]. Otherwise, 8987 // R shall not contain a placeholder type. 8988 if (QualType RT = FD->getDeclaredReturnType(); 8989 DCK == DefaultedComparisonKind::ThreeWay && 8990 RT->getContainedDeducedType() && 8991 (!Context.hasSameType(RT, Context.getAutoDeductType()) || 8992 RT->getContainedAutoType()->isConstrained())) { 8993 Diag(FD->getLocation(), 8994 diag::err_defaulted_comparison_deduced_return_type_not_auto) 8995 << (int)DCK << FD->getDeclaredReturnType() << Context.AutoDeductTy 8996 << FD->getReturnTypeSourceRange(); 8997 return true; 8998 } 8999 9000 // For a defaulted function in a dependent class, defer all remaining checks 9001 // until instantiation. 9002 if (RD->isDependentType()) 9003 return false; 9004 9005 // Determine whether the function should be defined as deleted. 9006 DefaultedComparisonInfo Info = 9007 DefaultedComparisonAnalyzer(*this, RD, FD, DCK).visit(); 9008 9009 bool First = FD == FD->getCanonicalDecl(); 9010 9011 if (!First) { 9012 if (Info.Deleted) { 9013 // C++11 [dcl.fct.def.default]p4: 9014 // [For a] user-provided explicitly-defaulted function [...] if such a 9015 // function is implicitly defined as deleted, the program is ill-formed. 9016 // 9017 // This is really just a consequence of the general rule that you can 9018 // only delete a function on its first declaration. 9019 Diag(FD->getLocation(), diag::err_non_first_default_compare_deletes) 9020 << FD->isImplicit() << (int)DCK; 9021 DefaultedComparisonAnalyzer(*this, RD, FD, DCK, 9022 DefaultedComparisonAnalyzer::ExplainDeleted) 9023 .visit(); 9024 return true; 9025 } 9026 if (isa<CXXRecordDecl>(FD->getLexicalDeclContext())) { 9027 // C++20 [class.compare.default]p1: 9028 // [...] A definition of a comparison operator as defaulted that appears 9029 // in a class shall be the first declaration of that function. 9030 Diag(FD->getLocation(), diag::err_non_first_default_compare_in_class) 9031 << (int)DCK; 9032 Diag(FD->getCanonicalDecl()->getLocation(), 9033 diag::note_previous_declaration); 9034 return true; 9035 } 9036 } 9037 9038 // If we want to delete the function, then do so; there's nothing else to 9039 // check in that case. 9040 if (Info.Deleted) { 9041 SetDeclDeleted(FD, FD->getLocation()); 9042 if (!inTemplateInstantiation() && !FD->isImplicit()) { 9043 Diag(FD->getLocation(), diag::warn_defaulted_comparison_deleted) 9044 << (int)DCK; 9045 DefaultedComparisonAnalyzer(*this, RD, FD, DCK, 9046 DefaultedComparisonAnalyzer::ExplainDeleted) 9047 .visit(); 9048 if (FD->getDefaultLoc().isValid()) 9049 Diag(FD->getDefaultLoc(), diag::note_replace_equals_default_to_delete) 9050 << FixItHint::CreateReplacement(FD->getDefaultLoc(), "delete"); 9051 } 9052 return false; 9053 } 9054 9055 // C++2a [class.spaceship]p2: 9056 // The return type is deduced as the common comparison type of R0, R1, ... 9057 if (DCK == DefaultedComparisonKind::ThreeWay && 9058 FD->getDeclaredReturnType()->isUndeducedAutoType()) { 9059 SourceLocation RetLoc = FD->getReturnTypeSourceRange().getBegin(); 9060 if (RetLoc.isInvalid()) 9061 RetLoc = FD->getBeginLoc(); 9062 // FIXME: Should we really care whether we have the complete type and the 9063 // 'enumerator' constants here? A forward declaration seems sufficient. 9064 QualType Cat = CheckComparisonCategoryType( 9065 Info.Category, RetLoc, ComparisonCategoryUsage::DefaultedOperator); 9066 if (Cat.isNull()) 9067 return true; 9068 Context.adjustDeducedFunctionResultType( 9069 FD, SubstAutoType(FD->getDeclaredReturnType(), Cat)); 9070 } 9071 9072 // C++2a [dcl.fct.def.default]p3 [P2002R0]: 9073 // An explicitly-defaulted function that is not defined as deleted may be 9074 // declared constexpr or consteval only if it is constexpr-compatible. 9075 // C++2a [class.compare.default]p3 [P2002R0]: 9076 // A defaulted comparison function is constexpr-compatible if it satisfies 9077 // the requirements for a constexpr function [...] 9078 // The only relevant requirements are that the parameter and return types are 9079 // literal types. The remaining conditions are checked by the analyzer. 9080 // 9081 // We support P2448R2 in language modes earlier than C++23 as an extension. 9082 // The concept of constexpr-compatible was removed. 9083 // C++23 [dcl.fct.def.default]p3 [P2448R2] 9084 // A function explicitly defaulted on its first declaration is implicitly 9085 // inline, and is implicitly constexpr if it is constexpr-suitable. 9086 // C++23 [dcl.constexpr]p3 9087 // A function is constexpr-suitable if 9088 // - it is not a coroutine, and 9089 // - if the function is a constructor or destructor, its class does not 9090 // have any virtual base classes. 9091 if (FD->isConstexpr()) { 9092 if (CheckConstexprReturnType(*this, FD, CheckConstexprKind::Diagnose) && 9093 CheckConstexprParameterTypes(*this, FD, CheckConstexprKind::Diagnose) && 9094 !Info.Constexpr) { 9095 Diag(FD->getBeginLoc(), 9096 getLangOpts().CPlusPlus23 9097 ? diag::warn_cxx23_compat_defaulted_comparison_constexpr_mismatch 9098 : diag::ext_defaulted_comparison_constexpr_mismatch) 9099 << FD->isImplicit() << (int)DCK << FD->isConsteval(); 9100 DefaultedComparisonAnalyzer(*this, RD, FD, DCK, 9101 DefaultedComparisonAnalyzer::ExplainConstexpr) 9102 .visit(); 9103 } 9104 } 9105 9106 // C++2a [dcl.fct.def.default]p3 [P2002R0]: 9107 // If a constexpr-compatible function is explicitly defaulted on its first 9108 // declaration, it is implicitly considered to be constexpr. 9109 // FIXME: Only applying this to the first declaration seems problematic, as 9110 // simple reorderings can affect the meaning of the program. 9111 if (First && !FD->isConstexpr() && Info.Constexpr) 9112 FD->setConstexprKind(ConstexprSpecKind::Constexpr); 9113 9114 // C++2a [except.spec]p3: 9115 // If a declaration of a function does not have a noexcept-specifier 9116 // [and] is defaulted on its first declaration, [...] the exception 9117 // specification is as specified below 9118 if (FD->getExceptionSpecType() == EST_None) { 9119 auto *FPT = FD->getType()->castAs<FunctionProtoType>(); 9120 FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo(); 9121 EPI.ExceptionSpec.Type = EST_Unevaluated; 9122 EPI.ExceptionSpec.SourceDecl = FD; 9123 FD->setType(Context.getFunctionType(FPT->getReturnType(), 9124 FPT->getParamTypes(), EPI)); 9125 } 9126 9127 return false; 9128 } 9129 9130 void Sema::DeclareImplicitEqualityComparison(CXXRecordDecl *RD, 9131 FunctionDecl *Spaceship) { 9132 Sema::CodeSynthesisContext Ctx; 9133 Ctx.Kind = Sema::CodeSynthesisContext::DeclaringImplicitEqualityComparison; 9134 Ctx.PointOfInstantiation = Spaceship->getEndLoc(); 9135 Ctx.Entity = Spaceship; 9136 pushCodeSynthesisContext(Ctx); 9137 9138 if (FunctionDecl *EqualEqual = SubstSpaceshipAsEqualEqual(RD, Spaceship)) 9139 EqualEqual->setImplicit(); 9140 9141 popCodeSynthesisContext(); 9142 } 9143 9144 void Sema::DefineDefaultedComparison(SourceLocation UseLoc, FunctionDecl *FD, 9145 DefaultedComparisonKind DCK) { 9146 assert(FD->isDefaulted() && !FD->isDeleted() && 9147 !FD->doesThisDeclarationHaveABody()); 9148 if (FD->willHaveBody() || FD->isInvalidDecl()) 9149 return; 9150 9151 SynthesizedFunctionScope Scope(*this, FD); 9152 9153 // Add a context note for diagnostics produced after this point. 9154 Scope.addContextNote(UseLoc); 9155 9156 { 9157 // Build and set up the function body. 9158 // The first parameter has type maybe-ref-to maybe-const T, use that to get 9159 // the type of the class being compared. 9160 auto PT = FD->getParamDecl(0)->getType(); 9161 CXXRecordDecl *RD = PT.getNonReferenceType()->getAsCXXRecordDecl(); 9162 SourceLocation BodyLoc = 9163 FD->getEndLoc().isValid() ? FD->getEndLoc() : FD->getLocation(); 9164 StmtResult Body = 9165 DefaultedComparisonSynthesizer(*this, RD, FD, DCK, BodyLoc).build(); 9166 if (Body.isInvalid()) { 9167 FD->setInvalidDecl(); 9168 return; 9169 } 9170 FD->setBody(Body.get()); 9171 FD->markUsed(Context); 9172 } 9173 9174 // The exception specification is needed because we are defining the 9175 // function. Note that this will reuse the body we just built. 9176 ResolveExceptionSpec(UseLoc, FD->getType()->castAs<FunctionProtoType>()); 9177 9178 if (ASTMutationListener *L = getASTMutationListener()) 9179 L->CompletedImplicitDefinition(FD); 9180 } 9181 9182 static Sema::ImplicitExceptionSpecification 9183 ComputeDefaultedComparisonExceptionSpec(Sema &S, SourceLocation Loc, 9184 FunctionDecl *FD, 9185 Sema::DefaultedComparisonKind DCK) { 9186 ComputingExceptionSpec CES(S, FD, Loc); 9187 Sema::ImplicitExceptionSpecification ExceptSpec(S); 9188 9189 if (FD->isInvalidDecl()) 9190 return ExceptSpec; 9191 9192 // The common case is that we just defined the comparison function. In that 9193 // case, just look at whether the body can throw. 9194 if (FD->hasBody()) { 9195 ExceptSpec.CalledStmt(FD->getBody()); 9196 } else { 9197 // Otherwise, build a body so we can check it. This should ideally only 9198 // happen when we're not actually marking the function referenced. (This is 9199 // only really important for efficiency: we don't want to build and throw 9200 // away bodies for comparison functions more than we strictly need to.) 9201 9202 // Pretend to synthesize the function body in an unevaluated context. 9203 // Note that we can't actually just go ahead and define the function here: 9204 // we are not permitted to mark its callees as referenced. 9205 Sema::SynthesizedFunctionScope Scope(S, FD); 9206 EnterExpressionEvaluationContext Context( 9207 S, Sema::ExpressionEvaluationContext::Unevaluated); 9208 9209 CXXRecordDecl *RD = cast<CXXRecordDecl>(FD->getLexicalParent()); 9210 SourceLocation BodyLoc = 9211 FD->getEndLoc().isValid() ? FD->getEndLoc() : FD->getLocation(); 9212 StmtResult Body = 9213 DefaultedComparisonSynthesizer(S, RD, FD, DCK, BodyLoc).build(); 9214 if (!Body.isInvalid()) 9215 ExceptSpec.CalledStmt(Body.get()); 9216 9217 // FIXME: Can we hold onto this body and just transform it to potentially 9218 // evaluated when we're asked to define the function rather than rebuilding 9219 // it? Either that, or we should only build the bits of the body that we 9220 // need (the expressions, not the statements). 9221 } 9222 9223 return ExceptSpec; 9224 } 9225 9226 void Sema::CheckDelayedMemberExceptionSpecs() { 9227 decltype(DelayedOverridingExceptionSpecChecks) Overriding; 9228 decltype(DelayedEquivalentExceptionSpecChecks) Equivalent; 9229 9230 std::swap(Overriding, DelayedOverridingExceptionSpecChecks); 9231 std::swap(Equivalent, DelayedEquivalentExceptionSpecChecks); 9232 9233 // Perform any deferred checking of exception specifications for virtual 9234 // destructors. 9235 for (auto &Check : Overriding) 9236 CheckOverridingFunctionExceptionSpec(Check.first, Check.second); 9237 9238 // Perform any deferred checking of exception specifications for befriended 9239 // special members. 9240 for (auto &Check : Equivalent) 9241 CheckEquivalentExceptionSpec(Check.second, Check.first); 9242 } 9243 9244 namespace { 9245 /// CRTP base class for visiting operations performed by a special member 9246 /// function (or inherited constructor). 9247 template<typename Derived> 9248 struct SpecialMemberVisitor { 9249 Sema &S; 9250 CXXMethodDecl *MD; 9251 Sema::CXXSpecialMember CSM; 9252 Sema::InheritedConstructorInfo *ICI; 9253 9254 // Properties of the special member, computed for convenience. 9255 bool IsConstructor = false, IsAssignment = false, ConstArg = false; 9256 9257 SpecialMemberVisitor(Sema &S, CXXMethodDecl *MD, Sema::CXXSpecialMember CSM, 9258 Sema::InheritedConstructorInfo *ICI) 9259 : S(S), MD(MD), CSM(CSM), ICI(ICI) { 9260 switch (CSM) { 9261 case Sema::CXXDefaultConstructor: 9262 case Sema::CXXCopyConstructor: 9263 case Sema::CXXMoveConstructor: 9264 IsConstructor = true; 9265 break; 9266 case Sema::CXXCopyAssignment: 9267 case Sema::CXXMoveAssignment: 9268 IsAssignment = true; 9269 break; 9270 case Sema::CXXDestructor: 9271 break; 9272 case Sema::CXXInvalid: 9273 llvm_unreachable("invalid special member kind"); 9274 } 9275 9276 if (MD->getNumExplicitParams()) { 9277 if (const ReferenceType *RT = 9278 MD->getNonObjectParameter(0)->getType()->getAs<ReferenceType>()) 9279 ConstArg = RT->getPointeeType().isConstQualified(); 9280 } 9281 } 9282 9283 Derived &getDerived() { return static_cast<Derived&>(*this); } 9284 9285 /// Is this a "move" special member? 9286 bool isMove() const { 9287 return CSM == Sema::CXXMoveConstructor || CSM == Sema::CXXMoveAssignment; 9288 } 9289 9290 /// Look up the corresponding special member in the given class. 9291 Sema::SpecialMemberOverloadResult lookupIn(CXXRecordDecl *Class, 9292 unsigned Quals, bool IsMutable) { 9293 return lookupCallFromSpecialMember(S, Class, CSM, Quals, 9294 ConstArg && !IsMutable); 9295 } 9296 9297 /// Look up the constructor for the specified base class to see if it's 9298 /// overridden due to this being an inherited constructor. 9299 Sema::SpecialMemberOverloadResult lookupInheritedCtor(CXXRecordDecl *Class) { 9300 if (!ICI) 9301 return {}; 9302 assert(CSM == Sema::CXXDefaultConstructor); 9303 auto *BaseCtor = 9304 cast<CXXConstructorDecl>(MD)->getInheritedConstructor().getConstructor(); 9305 if (auto *MD = ICI->findConstructorForBase(Class, BaseCtor).first) 9306 return MD; 9307 return {}; 9308 } 9309 9310 /// A base or member subobject. 9311 typedef llvm::PointerUnion<CXXBaseSpecifier*, FieldDecl*> Subobject; 9312 9313 /// Get the location to use for a subobject in diagnostics. 9314 static SourceLocation getSubobjectLoc(Subobject Subobj) { 9315 // FIXME: For an indirect virtual base, the direct base leading to 9316 // the indirect virtual base would be a more useful choice. 9317 if (auto *B = Subobj.dyn_cast<CXXBaseSpecifier*>()) 9318 return B->getBaseTypeLoc(); 9319 else 9320 return Subobj.get<FieldDecl*>()->getLocation(); 9321 } 9322 9323 enum BasesToVisit { 9324 /// Visit all non-virtual (direct) bases. 9325 VisitNonVirtualBases, 9326 /// Visit all direct bases, virtual or not. 9327 VisitDirectBases, 9328 /// Visit all non-virtual bases, and all virtual bases if the class 9329 /// is not abstract. 9330 VisitPotentiallyConstructedBases, 9331 /// Visit all direct or virtual bases. 9332 VisitAllBases 9333 }; 9334 9335 // Visit the bases and members of the class. 9336 bool visit(BasesToVisit Bases) { 9337 CXXRecordDecl *RD = MD->getParent(); 9338 9339 if (Bases == VisitPotentiallyConstructedBases) 9340 Bases = RD->isAbstract() ? VisitNonVirtualBases : VisitAllBases; 9341 9342 for (auto &B : RD->bases()) 9343 if ((Bases == VisitDirectBases || !B.isVirtual()) && 9344 getDerived().visitBase(&B)) 9345 return true; 9346 9347 if (Bases == VisitAllBases) 9348 for (auto &B : RD->vbases()) 9349 if (getDerived().visitBase(&B)) 9350 return true; 9351 9352 for (auto *F : RD->fields()) 9353 if (!F->isInvalidDecl() && !F->isUnnamedBitfield() && 9354 getDerived().visitField(F)) 9355 return true; 9356 9357 return false; 9358 } 9359 }; 9360 } 9361 9362 namespace { 9363 struct SpecialMemberDeletionInfo 9364 : SpecialMemberVisitor<SpecialMemberDeletionInfo> { 9365 bool Diagnose; 9366 9367 SourceLocation Loc; 9368 9369 bool AllFieldsAreConst; 9370 9371 SpecialMemberDeletionInfo(Sema &S, CXXMethodDecl *MD, 9372 Sema::CXXSpecialMember CSM, 9373 Sema::InheritedConstructorInfo *ICI, bool Diagnose) 9374 : SpecialMemberVisitor(S, MD, CSM, ICI), Diagnose(Diagnose), 9375 Loc(MD->getLocation()), AllFieldsAreConst(true) {} 9376 9377 bool inUnion() const { return MD->getParent()->isUnion(); } 9378 9379 Sema::CXXSpecialMember getEffectiveCSM() { 9380 return ICI ? Sema::CXXInvalid : CSM; 9381 } 9382 9383 bool shouldDeleteForVariantObjCPtrMember(FieldDecl *FD, QualType FieldType); 9384 9385 bool visitBase(CXXBaseSpecifier *Base) { return shouldDeleteForBase(Base); } 9386 bool visitField(FieldDecl *Field) { return shouldDeleteForField(Field); } 9387 9388 bool shouldDeleteForBase(CXXBaseSpecifier *Base); 9389 bool shouldDeleteForField(FieldDecl *FD); 9390 bool shouldDeleteForAllConstMembers(); 9391 9392 bool shouldDeleteForClassSubobject(CXXRecordDecl *Class, Subobject Subobj, 9393 unsigned Quals); 9394 bool shouldDeleteForSubobjectCall(Subobject Subobj, 9395 Sema::SpecialMemberOverloadResult SMOR, 9396 bool IsDtorCallInCtor); 9397 9398 bool isAccessible(Subobject Subobj, CXXMethodDecl *D); 9399 }; 9400 } 9401 9402 /// Is the given special member inaccessible when used on the given 9403 /// sub-object. 9404 bool SpecialMemberDeletionInfo::isAccessible(Subobject Subobj, 9405 CXXMethodDecl *target) { 9406 /// If we're operating on a base class, the object type is the 9407 /// type of this special member. 9408 QualType objectTy; 9409 AccessSpecifier access = target->getAccess(); 9410 if (CXXBaseSpecifier *base = Subobj.dyn_cast<CXXBaseSpecifier*>()) { 9411 objectTy = S.Context.getTypeDeclType(MD->getParent()); 9412 access = CXXRecordDecl::MergeAccess(base->getAccessSpecifier(), access); 9413 9414 // If we're operating on a field, the object type is the type of the field. 9415 } else { 9416 objectTy = S.Context.getTypeDeclType(target->getParent()); 9417 } 9418 9419 return S.isMemberAccessibleForDeletion( 9420 target->getParent(), DeclAccessPair::make(target, access), objectTy); 9421 } 9422 9423 /// Check whether we should delete a special member due to the implicit 9424 /// definition containing a call to a special member of a subobject. 9425 bool SpecialMemberDeletionInfo::shouldDeleteForSubobjectCall( 9426 Subobject Subobj, Sema::SpecialMemberOverloadResult SMOR, 9427 bool IsDtorCallInCtor) { 9428 CXXMethodDecl *Decl = SMOR.getMethod(); 9429 FieldDecl *Field = Subobj.dyn_cast<FieldDecl*>(); 9430 9431 int DiagKind = -1; 9432 9433 if (SMOR.getKind() == Sema::SpecialMemberOverloadResult::NoMemberOrDeleted) 9434 DiagKind = !Decl ? 0 : 1; 9435 else if (SMOR.getKind() == Sema::SpecialMemberOverloadResult::Ambiguous) 9436 DiagKind = 2; 9437 else if (!isAccessible(Subobj, Decl)) 9438 DiagKind = 3; 9439 else if (!IsDtorCallInCtor && Field && Field->getParent()->isUnion() && 9440 !Decl->isTrivial()) { 9441 // A member of a union must have a trivial corresponding special member. 9442 // As a weird special case, a destructor call from a union's constructor 9443 // must be accessible and non-deleted, but need not be trivial. Such a 9444 // destructor is never actually called, but is semantically checked as 9445 // if it were. 9446 if (CSM == Sema::CXXDefaultConstructor) { 9447 // [class.default.ctor]p2: 9448 // A defaulted default constructor for class X is defined as deleted if 9449 // - X is a union that has a variant member with a non-trivial default 9450 // constructor and no variant member of X has a default member 9451 // initializer 9452 const auto *RD = cast<CXXRecordDecl>(Field->getParent()); 9453 if (!RD->hasInClassInitializer()) 9454 DiagKind = 4; 9455 } else { 9456 DiagKind = 4; 9457 } 9458 } 9459 9460 if (DiagKind == -1) 9461 return false; 9462 9463 if (Diagnose) { 9464 if (Field) { 9465 S.Diag(Field->getLocation(), 9466 diag::note_deleted_special_member_class_subobject) 9467 << getEffectiveCSM() << MD->getParent() << /*IsField*/true 9468 << Field << DiagKind << IsDtorCallInCtor << /*IsObjCPtr*/false; 9469 } else { 9470 CXXBaseSpecifier *Base = Subobj.get<CXXBaseSpecifier*>(); 9471 S.Diag(Base->getBeginLoc(), 9472 diag::note_deleted_special_member_class_subobject) 9473 << getEffectiveCSM() << MD->getParent() << /*IsField*/ false 9474 << Base->getType() << DiagKind << IsDtorCallInCtor 9475 << /*IsObjCPtr*/false; 9476 } 9477 9478 if (DiagKind == 1) 9479 S.NoteDeletedFunction(Decl); 9480 // FIXME: Explain inaccessibility if DiagKind == 3. 9481 } 9482 9483 return true; 9484 } 9485 9486 /// Check whether we should delete a special member function due to having a 9487 /// direct or virtual base class or non-static data member of class type M. 9488 bool SpecialMemberDeletionInfo::shouldDeleteForClassSubobject( 9489 CXXRecordDecl *Class, Subobject Subobj, unsigned Quals) { 9490 FieldDecl *Field = Subobj.dyn_cast<FieldDecl*>(); 9491 bool IsMutable = Field && Field->isMutable(); 9492 9493 // C++11 [class.ctor]p5: 9494 // -- any direct or virtual base class, or non-static data member with no 9495 // brace-or-equal-initializer, has class type M (or array thereof) and 9496 // either M has no default constructor or overload resolution as applied 9497 // to M's default constructor results in an ambiguity or in a function 9498 // that is deleted or inaccessible 9499 // C++11 [class.copy]p11, C++11 [class.copy]p23: 9500 // -- a direct or virtual base class B that cannot be copied/moved because 9501 // overload resolution, as applied to B's corresponding special member, 9502 // results in an ambiguity or a function that is deleted or inaccessible 9503 // from the defaulted special member 9504 // C++11 [class.dtor]p5: 9505 // -- any direct or virtual base class [...] has a type with a destructor 9506 // that is deleted or inaccessible 9507 if (!(CSM == Sema::CXXDefaultConstructor && 9508 Field && Field->hasInClassInitializer()) && 9509 shouldDeleteForSubobjectCall(Subobj, lookupIn(Class, Quals, IsMutable), 9510 false)) 9511 return true; 9512 9513 // C++11 [class.ctor]p5, C++11 [class.copy]p11: 9514 // -- any direct or virtual base class or non-static data member has a 9515 // type with a destructor that is deleted or inaccessible 9516 if (IsConstructor) { 9517 Sema::SpecialMemberOverloadResult SMOR = 9518 S.LookupSpecialMember(Class, Sema::CXXDestructor, 9519 false, false, false, false, false); 9520 if (shouldDeleteForSubobjectCall(Subobj, SMOR, true)) 9521 return true; 9522 } 9523 9524 return false; 9525 } 9526 9527 bool SpecialMemberDeletionInfo::shouldDeleteForVariantObjCPtrMember( 9528 FieldDecl *FD, QualType FieldType) { 9529 // The defaulted special functions are defined as deleted if this is a variant 9530 // member with a non-trivial ownership type, e.g., ObjC __strong or __weak 9531 // type under ARC. 9532 if (!FieldType.hasNonTrivialObjCLifetime()) 9533 return false; 9534 9535 // Don't make the defaulted default constructor defined as deleted if the 9536 // member has an in-class initializer. 9537 if (CSM == Sema::CXXDefaultConstructor && FD->hasInClassInitializer()) 9538 return false; 9539 9540 if (Diagnose) { 9541 auto *ParentClass = cast<CXXRecordDecl>(FD->getParent()); 9542 S.Diag(FD->getLocation(), 9543 diag::note_deleted_special_member_class_subobject) 9544 << getEffectiveCSM() << ParentClass << /*IsField*/true 9545 << FD << 4 << /*IsDtorCallInCtor*/false << /*IsObjCPtr*/true; 9546 } 9547 9548 return true; 9549 } 9550 9551 /// Check whether we should delete a special member function due to the class 9552 /// having a particular direct or virtual base class. 9553 bool SpecialMemberDeletionInfo::shouldDeleteForBase(CXXBaseSpecifier *Base) { 9554 CXXRecordDecl *BaseClass = Base->getType()->getAsCXXRecordDecl(); 9555 // If program is correct, BaseClass cannot be null, but if it is, the error 9556 // must be reported elsewhere. 9557 if (!BaseClass) 9558 return false; 9559 // If we have an inheriting constructor, check whether we're calling an 9560 // inherited constructor instead of a default constructor. 9561 Sema::SpecialMemberOverloadResult SMOR = lookupInheritedCtor(BaseClass); 9562 if (auto *BaseCtor = SMOR.getMethod()) { 9563 // Note that we do not check access along this path; other than that, 9564 // this is the same as shouldDeleteForSubobjectCall(Base, BaseCtor, false); 9565 // FIXME: Check that the base has a usable destructor! Sink this into 9566 // shouldDeleteForClassSubobject. 9567 if (BaseCtor->isDeleted() && Diagnose) { 9568 S.Diag(Base->getBeginLoc(), 9569 diag::note_deleted_special_member_class_subobject) 9570 << getEffectiveCSM() << MD->getParent() << /*IsField*/ false 9571 << Base->getType() << /*Deleted*/ 1 << /*IsDtorCallInCtor*/ false 9572 << /*IsObjCPtr*/false; 9573 S.NoteDeletedFunction(BaseCtor); 9574 } 9575 return BaseCtor->isDeleted(); 9576 } 9577 return shouldDeleteForClassSubobject(BaseClass, Base, 0); 9578 } 9579 9580 /// Check whether we should delete a special member function due to the class 9581 /// having a particular non-static data member. 9582 bool SpecialMemberDeletionInfo::shouldDeleteForField(FieldDecl *FD) { 9583 QualType FieldType = S.Context.getBaseElementType(FD->getType()); 9584 CXXRecordDecl *FieldRecord = FieldType->getAsCXXRecordDecl(); 9585 9586 if (inUnion() && shouldDeleteForVariantObjCPtrMember(FD, FieldType)) 9587 return true; 9588 9589 if (CSM == Sema::CXXDefaultConstructor) { 9590 // For a default constructor, all references must be initialized in-class 9591 // and, if a union, it must have a non-const member. 9592 if (FieldType->isReferenceType() && !FD->hasInClassInitializer()) { 9593 if (Diagnose) 9594 S.Diag(FD->getLocation(), diag::note_deleted_default_ctor_uninit_field) 9595 << !!ICI << MD->getParent() << FD << FieldType << /*Reference*/0; 9596 return true; 9597 } 9598 // C++11 [class.ctor]p5 (modified by DR2394): any non-variant non-static 9599 // data member of const-qualified type (or array thereof) with no 9600 // brace-or-equal-initializer is not const-default-constructible. 9601 if (!inUnion() && FieldType.isConstQualified() && 9602 !FD->hasInClassInitializer() && 9603 (!FieldRecord || !FieldRecord->allowConstDefaultInit())) { 9604 if (Diagnose) 9605 S.Diag(FD->getLocation(), diag::note_deleted_default_ctor_uninit_field) 9606 << !!ICI << MD->getParent() << FD << FD->getType() << /*Const*/1; 9607 return true; 9608 } 9609 9610 if (inUnion() && !FieldType.isConstQualified()) 9611 AllFieldsAreConst = false; 9612 } else if (CSM == Sema::CXXCopyConstructor) { 9613 // For a copy constructor, data members must not be of rvalue reference 9614 // type. 9615 if (FieldType->isRValueReferenceType()) { 9616 if (Diagnose) 9617 S.Diag(FD->getLocation(), diag::note_deleted_copy_ctor_rvalue_reference) 9618 << MD->getParent() << FD << FieldType; 9619 return true; 9620 } 9621 } else if (IsAssignment) { 9622 // For an assignment operator, data members must not be of reference type. 9623 if (FieldType->isReferenceType()) { 9624 if (Diagnose) 9625 S.Diag(FD->getLocation(), diag::note_deleted_assign_field) 9626 << isMove() << MD->getParent() << FD << FieldType << /*Reference*/0; 9627 return true; 9628 } 9629 if (!FieldRecord && FieldType.isConstQualified()) { 9630 // C++11 [class.copy]p23: 9631 // -- a non-static data member of const non-class type (or array thereof) 9632 if (Diagnose) 9633 S.Diag(FD->getLocation(), diag::note_deleted_assign_field) 9634 << isMove() << MD->getParent() << FD << FD->getType() << /*Const*/1; 9635 return true; 9636 } 9637 } 9638 9639 if (FieldRecord) { 9640 // Some additional restrictions exist on the variant members. 9641 if (!inUnion() && FieldRecord->isUnion() && 9642 FieldRecord->isAnonymousStructOrUnion()) { 9643 bool AllVariantFieldsAreConst = true; 9644 9645 // FIXME: Handle anonymous unions declared within anonymous unions. 9646 for (auto *UI : FieldRecord->fields()) { 9647 QualType UnionFieldType = S.Context.getBaseElementType(UI->getType()); 9648 9649 if (shouldDeleteForVariantObjCPtrMember(&*UI, UnionFieldType)) 9650 return true; 9651 9652 if (!UnionFieldType.isConstQualified()) 9653 AllVariantFieldsAreConst = false; 9654 9655 CXXRecordDecl *UnionFieldRecord = UnionFieldType->getAsCXXRecordDecl(); 9656 if (UnionFieldRecord && 9657 shouldDeleteForClassSubobject(UnionFieldRecord, UI, 9658 UnionFieldType.getCVRQualifiers())) 9659 return true; 9660 } 9661 9662 // At least one member in each anonymous union must be non-const 9663 if (CSM == Sema::CXXDefaultConstructor && AllVariantFieldsAreConst && 9664 !FieldRecord->field_empty()) { 9665 if (Diagnose) 9666 S.Diag(FieldRecord->getLocation(), 9667 diag::note_deleted_default_ctor_all_const) 9668 << !!ICI << MD->getParent() << /*anonymous union*/1; 9669 return true; 9670 } 9671 9672 // Don't check the implicit member of the anonymous union type. 9673 // This is technically non-conformant but supported, and we have a 9674 // diagnostic for this elsewhere. 9675 return false; 9676 } 9677 9678 if (shouldDeleteForClassSubobject(FieldRecord, FD, 9679 FieldType.getCVRQualifiers())) 9680 return true; 9681 } 9682 9683 return false; 9684 } 9685 9686 /// C++11 [class.ctor] p5: 9687 /// A defaulted default constructor for a class X is defined as deleted if 9688 /// X is a union and all of its variant members are of const-qualified type. 9689 bool SpecialMemberDeletionInfo::shouldDeleteForAllConstMembers() { 9690 // This is a silly definition, because it gives an empty union a deleted 9691 // default constructor. Don't do that. 9692 if (CSM == Sema::CXXDefaultConstructor && inUnion() && AllFieldsAreConst) { 9693 bool AnyFields = false; 9694 for (auto *F : MD->getParent()->fields()) 9695 if ((AnyFields = !F->isUnnamedBitfield())) 9696 break; 9697 if (!AnyFields) 9698 return false; 9699 if (Diagnose) 9700 S.Diag(MD->getParent()->getLocation(), 9701 diag::note_deleted_default_ctor_all_const) 9702 << !!ICI << MD->getParent() << /*not anonymous union*/0; 9703 return true; 9704 } 9705 return false; 9706 } 9707 9708 /// Determine whether a defaulted special member function should be defined as 9709 /// deleted, as specified in C++11 [class.ctor]p5, C++11 [class.copy]p11, 9710 /// C++11 [class.copy]p23, and C++11 [class.dtor]p5. 9711 bool Sema::ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, 9712 InheritedConstructorInfo *ICI, 9713 bool Diagnose) { 9714 if (MD->isInvalidDecl()) 9715 return false; 9716 CXXRecordDecl *RD = MD->getParent(); 9717 assert(!RD->isDependentType() && "do deletion after instantiation"); 9718 if (!LangOpts.CPlusPlus11 || RD->isInvalidDecl()) 9719 return false; 9720 9721 // C++11 [expr.lambda.prim]p19: 9722 // The closure type associated with a lambda-expression has a 9723 // deleted (8.4.3) default constructor and a deleted copy 9724 // assignment operator. 9725 // C++2a adds back these operators if the lambda has no lambda-capture. 9726 if (RD->isLambda() && !RD->lambdaIsDefaultConstructibleAndAssignable() && 9727 (CSM == CXXDefaultConstructor || CSM == CXXCopyAssignment)) { 9728 if (Diagnose) 9729 Diag(RD->getLocation(), diag::note_lambda_decl); 9730 return true; 9731 } 9732 9733 // For an anonymous struct or union, the copy and assignment special members 9734 // will never be used, so skip the check. For an anonymous union declared at 9735 // namespace scope, the constructor and destructor are used. 9736 if (CSM != CXXDefaultConstructor && CSM != CXXDestructor && 9737 RD->isAnonymousStructOrUnion()) 9738 return false; 9739 9740 // C++11 [class.copy]p7, p18: 9741 // If the class definition declares a move constructor or move assignment 9742 // operator, an implicitly declared copy constructor or copy assignment 9743 // operator is defined as deleted. 9744 if (MD->isImplicit() && 9745 (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment)) { 9746 CXXMethodDecl *UserDeclaredMove = nullptr; 9747 9748 // In Microsoft mode up to MSVC 2013, a user-declared move only causes the 9749 // deletion of the corresponding copy operation, not both copy operations. 9750 // MSVC 2015 has adopted the standards conforming behavior. 9751 bool DeletesOnlyMatchingCopy = 9752 getLangOpts().MSVCCompat && 9753 !getLangOpts().isCompatibleWithMSVC(LangOptions::MSVC2015); 9754 9755 if (RD->hasUserDeclaredMoveConstructor() && 9756 (!DeletesOnlyMatchingCopy || CSM == CXXCopyConstructor)) { 9757 if (!Diagnose) return true; 9758 9759 // Find any user-declared move constructor. 9760 for (auto *I : RD->ctors()) { 9761 if (I->isMoveConstructor()) { 9762 UserDeclaredMove = I; 9763 break; 9764 } 9765 } 9766 assert(UserDeclaredMove); 9767 } else if (RD->hasUserDeclaredMoveAssignment() && 9768 (!DeletesOnlyMatchingCopy || CSM == CXXCopyAssignment)) { 9769 if (!Diagnose) return true; 9770 9771 // Find any user-declared move assignment operator. 9772 for (auto *I : RD->methods()) { 9773 if (I->isMoveAssignmentOperator()) { 9774 UserDeclaredMove = I; 9775 break; 9776 } 9777 } 9778 assert(UserDeclaredMove); 9779 } 9780 9781 if (UserDeclaredMove) { 9782 Diag(UserDeclaredMove->getLocation(), 9783 diag::note_deleted_copy_user_declared_move) 9784 << (CSM == CXXCopyAssignment) << RD 9785 << UserDeclaredMove->isMoveAssignmentOperator(); 9786 return true; 9787 } 9788 } 9789 9790 // Do access control from the special member function 9791 ContextRAII MethodContext(*this, MD); 9792 9793 // C++11 [class.dtor]p5: 9794 // -- for a virtual destructor, lookup of the non-array deallocation function 9795 // results in an ambiguity or in a function that is deleted or inaccessible 9796 if (CSM == CXXDestructor && MD->isVirtual()) { 9797 FunctionDecl *OperatorDelete = nullptr; 9798 DeclarationName Name = 9799 Context.DeclarationNames.getCXXOperatorName(OO_Delete); 9800 if (FindDeallocationFunction(MD->getLocation(), MD->getParent(), Name, 9801 OperatorDelete, /*Diagnose*/false)) { 9802 if (Diagnose) 9803 Diag(RD->getLocation(), diag::note_deleted_dtor_no_operator_delete); 9804 return true; 9805 } 9806 } 9807 9808 SpecialMemberDeletionInfo SMI(*this, MD, CSM, ICI, Diagnose); 9809 9810 // Per DR1611, do not consider virtual bases of constructors of abstract 9811 // classes, since we are not going to construct them. 9812 // Per DR1658, do not consider virtual bases of destructors of abstract 9813 // classes either. 9814 // Per DR2180, for assignment operators we only assign (and thus only 9815 // consider) direct bases. 9816 if (SMI.visit(SMI.IsAssignment ? SMI.VisitDirectBases 9817 : SMI.VisitPotentiallyConstructedBases)) 9818 return true; 9819 9820 if (SMI.shouldDeleteForAllConstMembers()) 9821 return true; 9822 9823 if (getLangOpts().CUDA) { 9824 // We should delete the special member in CUDA mode if target inference 9825 // failed. 9826 // For inherited constructors (non-null ICI), CSM may be passed so that MD 9827 // is treated as certain special member, which may not reflect what special 9828 // member MD really is. However inferCUDATargetForImplicitSpecialMember 9829 // expects CSM to match MD, therefore recalculate CSM. 9830 assert(ICI || CSM == getSpecialMember(MD)); 9831 auto RealCSM = CSM; 9832 if (ICI) 9833 RealCSM = getSpecialMember(MD); 9834 9835 return inferCUDATargetForImplicitSpecialMember(RD, RealCSM, MD, 9836 SMI.ConstArg, Diagnose); 9837 } 9838 9839 return false; 9840 } 9841 9842 void Sema::DiagnoseDeletedDefaultedFunction(FunctionDecl *FD) { 9843 DefaultedFunctionKind DFK = getDefaultedFunctionKind(FD); 9844 assert(DFK && "not a defaultable function"); 9845 assert(FD->isDefaulted() && FD->isDeleted() && "not defaulted and deleted"); 9846 9847 if (DFK.isSpecialMember()) { 9848 ShouldDeleteSpecialMember(cast<CXXMethodDecl>(FD), DFK.asSpecialMember(), 9849 nullptr, /*Diagnose=*/true); 9850 } else { 9851 DefaultedComparisonAnalyzer( 9852 *this, cast<CXXRecordDecl>(FD->getLexicalDeclContext()), FD, 9853 DFK.asComparison(), DefaultedComparisonAnalyzer::ExplainDeleted) 9854 .visit(); 9855 } 9856 } 9857 9858 /// Perform lookup for a special member of the specified kind, and determine 9859 /// whether it is trivial. If the triviality can be determined without the 9860 /// lookup, skip it. This is intended for use when determining whether a 9861 /// special member of a containing object is trivial, and thus does not ever 9862 /// perform overload resolution for default constructors. 9863 /// 9864 /// If \p Selected is not \c NULL, \c *Selected will be filled in with the 9865 /// member that was most likely to be intended to be trivial, if any. 9866 /// 9867 /// If \p ForCall is true, look at CXXRecord::HasTrivialSpecialMembersForCall to 9868 /// determine whether the special member is trivial. 9869 static bool findTrivialSpecialMember(Sema &S, CXXRecordDecl *RD, 9870 Sema::CXXSpecialMember CSM, unsigned Quals, 9871 bool ConstRHS, 9872 Sema::TrivialABIHandling TAH, 9873 CXXMethodDecl **Selected) { 9874 if (Selected) 9875 *Selected = nullptr; 9876 9877 switch (CSM) { 9878 case Sema::CXXInvalid: 9879 llvm_unreachable("not a special member"); 9880 9881 case Sema::CXXDefaultConstructor: 9882 // C++11 [class.ctor]p5: 9883 // A default constructor is trivial if: 9884 // - all the [direct subobjects] have trivial default constructors 9885 // 9886 // Note, no overload resolution is performed in this case. 9887 if (RD->hasTrivialDefaultConstructor()) 9888 return true; 9889 9890 if (Selected) { 9891 // If there's a default constructor which could have been trivial, dig it 9892 // out. Otherwise, if there's any user-provided default constructor, point 9893 // to that as an example of why there's not a trivial one. 9894 CXXConstructorDecl *DefCtor = nullptr; 9895 if (RD->needsImplicitDefaultConstructor()) 9896 S.DeclareImplicitDefaultConstructor(RD); 9897 for (auto *CI : RD->ctors()) { 9898 if (!CI->isDefaultConstructor()) 9899 continue; 9900 DefCtor = CI; 9901 if (!DefCtor->isUserProvided()) 9902 break; 9903 } 9904 9905 *Selected = DefCtor; 9906 } 9907 9908 return false; 9909 9910 case Sema::CXXDestructor: 9911 // C++11 [class.dtor]p5: 9912 // A destructor is trivial if: 9913 // - all the direct [subobjects] have trivial destructors 9914 if (RD->hasTrivialDestructor() || 9915 (TAH == Sema::TAH_ConsiderTrivialABI && 9916 RD->hasTrivialDestructorForCall())) 9917 return true; 9918 9919 if (Selected) { 9920 if (RD->needsImplicitDestructor()) 9921 S.DeclareImplicitDestructor(RD); 9922 *Selected = RD->getDestructor(); 9923 } 9924 9925 return false; 9926 9927 case Sema::CXXCopyConstructor: 9928 // C++11 [class.copy]p12: 9929 // A copy constructor is trivial if: 9930 // - the constructor selected to copy each direct [subobject] is trivial 9931 if (RD->hasTrivialCopyConstructor() || 9932 (TAH == Sema::TAH_ConsiderTrivialABI && 9933 RD->hasTrivialCopyConstructorForCall())) { 9934 if (Quals == Qualifiers::Const) 9935 // We must either select the trivial copy constructor or reach an 9936 // ambiguity; no need to actually perform overload resolution. 9937 return true; 9938 } else if (!Selected) { 9939 return false; 9940 } 9941 // In C++98, we are not supposed to perform overload resolution here, but we 9942 // treat that as a language defect, as suggested on cxx-abi-dev, to treat 9943 // cases like B as having a non-trivial copy constructor: 9944 // struct A { template<typename T> A(T&); }; 9945 // struct B { mutable A a; }; 9946 goto NeedOverloadResolution; 9947 9948 case Sema::CXXCopyAssignment: 9949 // C++11 [class.copy]p25: 9950 // A copy assignment operator is trivial if: 9951 // - the assignment operator selected to copy each direct [subobject] is 9952 // trivial 9953 if (RD->hasTrivialCopyAssignment()) { 9954 if (Quals == Qualifiers::Const) 9955 return true; 9956 } else if (!Selected) { 9957 return false; 9958 } 9959 // In C++98, we are not supposed to perform overload resolution here, but we 9960 // treat that as a language defect. 9961 goto NeedOverloadResolution; 9962 9963 case Sema::CXXMoveConstructor: 9964 case Sema::CXXMoveAssignment: 9965 NeedOverloadResolution: 9966 Sema::SpecialMemberOverloadResult SMOR = 9967 lookupCallFromSpecialMember(S, RD, CSM, Quals, ConstRHS); 9968 9969 // The standard doesn't describe how to behave if the lookup is ambiguous. 9970 // We treat it as not making the member non-trivial, just like the standard 9971 // mandates for the default constructor. This should rarely matter, because 9972 // the member will also be deleted. 9973 if (SMOR.getKind() == Sema::SpecialMemberOverloadResult::Ambiguous) 9974 return true; 9975 9976 if (!SMOR.getMethod()) { 9977 assert(SMOR.getKind() == 9978 Sema::SpecialMemberOverloadResult::NoMemberOrDeleted); 9979 return false; 9980 } 9981 9982 // We deliberately don't check if we found a deleted special member. We're 9983 // not supposed to! 9984 if (Selected) 9985 *Selected = SMOR.getMethod(); 9986 9987 if (TAH == Sema::TAH_ConsiderTrivialABI && 9988 (CSM == Sema::CXXCopyConstructor || CSM == Sema::CXXMoveConstructor)) 9989 return SMOR.getMethod()->isTrivialForCall(); 9990 return SMOR.getMethod()->isTrivial(); 9991 } 9992 9993 llvm_unreachable("unknown special method kind"); 9994 } 9995 9996 static CXXConstructorDecl *findUserDeclaredCtor(CXXRecordDecl *RD) { 9997 for (auto *CI : RD->ctors()) 9998 if (!CI->isImplicit()) 9999 return CI; 10000 10001 // Look for constructor templates. 10002 typedef CXXRecordDecl::specific_decl_iterator<FunctionTemplateDecl> tmpl_iter; 10003 for (tmpl_iter TI(RD->decls_begin()), TE(RD->decls_end()); TI != TE; ++TI) { 10004 if (CXXConstructorDecl *CD = 10005 dyn_cast<CXXConstructorDecl>(TI->getTemplatedDecl())) 10006 return CD; 10007 } 10008 10009 return nullptr; 10010 } 10011 10012 /// The kind of subobject we are checking for triviality. The values of this 10013 /// enumeration are used in diagnostics. 10014 enum TrivialSubobjectKind { 10015 /// The subobject is a base class. 10016 TSK_BaseClass, 10017 /// The subobject is a non-static data member. 10018 TSK_Field, 10019 /// The object is actually the complete object. 10020 TSK_CompleteObject 10021 }; 10022 10023 /// Check whether the special member selected for a given type would be trivial. 10024 static bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc, 10025 QualType SubType, bool ConstRHS, 10026 Sema::CXXSpecialMember CSM, 10027 TrivialSubobjectKind Kind, 10028 Sema::TrivialABIHandling TAH, bool Diagnose) { 10029 CXXRecordDecl *SubRD = SubType->getAsCXXRecordDecl(); 10030 if (!SubRD) 10031 return true; 10032 10033 CXXMethodDecl *Selected; 10034 if (findTrivialSpecialMember(S, SubRD, CSM, SubType.getCVRQualifiers(), 10035 ConstRHS, TAH, Diagnose ? &Selected : nullptr)) 10036 return true; 10037 10038 if (Diagnose) { 10039 if (ConstRHS) 10040 SubType.addConst(); 10041 10042 if (!Selected && CSM == Sema::CXXDefaultConstructor) { 10043 S.Diag(SubobjLoc, diag::note_nontrivial_no_def_ctor) 10044 << Kind << SubType.getUnqualifiedType(); 10045 if (CXXConstructorDecl *CD = findUserDeclaredCtor(SubRD)) 10046 S.Diag(CD->getLocation(), diag::note_user_declared_ctor); 10047 } else if (!Selected) 10048 S.Diag(SubobjLoc, diag::note_nontrivial_no_copy) 10049 << Kind << SubType.getUnqualifiedType() << CSM << SubType; 10050 else if (Selected->isUserProvided()) { 10051 if (Kind == TSK_CompleteObject) 10052 S.Diag(Selected->getLocation(), diag::note_nontrivial_user_provided) 10053 << Kind << SubType.getUnqualifiedType() << CSM; 10054 else { 10055 S.Diag(SubobjLoc, diag::note_nontrivial_user_provided) 10056 << Kind << SubType.getUnqualifiedType() << CSM; 10057 S.Diag(Selected->getLocation(), diag::note_declared_at); 10058 } 10059 } else { 10060 if (Kind != TSK_CompleteObject) 10061 S.Diag(SubobjLoc, diag::note_nontrivial_subobject) 10062 << Kind << SubType.getUnqualifiedType() << CSM; 10063 10064 // Explain why the defaulted or deleted special member isn't trivial. 10065 S.SpecialMemberIsTrivial(Selected, CSM, Sema::TAH_IgnoreTrivialABI, 10066 Diagnose); 10067 } 10068 } 10069 10070 return false; 10071 } 10072 10073 /// Check whether the members of a class type allow a special member to be 10074 /// trivial. 10075 static bool checkTrivialClassMembers(Sema &S, CXXRecordDecl *RD, 10076 Sema::CXXSpecialMember CSM, 10077 bool ConstArg, 10078 Sema::TrivialABIHandling TAH, 10079 bool Diagnose) { 10080 for (const auto *FI : RD->fields()) { 10081 if (FI->isInvalidDecl() || FI->isUnnamedBitfield()) 10082 continue; 10083 10084 QualType FieldType = S.Context.getBaseElementType(FI->getType()); 10085 10086 // Pretend anonymous struct or union members are members of this class. 10087 if (FI->isAnonymousStructOrUnion()) { 10088 if (!checkTrivialClassMembers(S, FieldType->getAsCXXRecordDecl(), 10089 CSM, ConstArg, TAH, Diagnose)) 10090 return false; 10091 continue; 10092 } 10093 10094 // C++11 [class.ctor]p5: 10095 // A default constructor is trivial if [...] 10096 // -- no non-static data member of its class has a 10097 // brace-or-equal-initializer 10098 if (CSM == Sema::CXXDefaultConstructor && FI->hasInClassInitializer()) { 10099 if (Diagnose) 10100 S.Diag(FI->getLocation(), diag::note_nontrivial_default_member_init) 10101 << FI; 10102 return false; 10103 } 10104 10105 // Objective C ARC 4.3.5: 10106 // [...] nontrivally ownership-qualified types are [...] not trivially 10107 // default constructible, copy constructible, move constructible, copy 10108 // assignable, move assignable, or destructible [...] 10109 if (FieldType.hasNonTrivialObjCLifetime()) { 10110 if (Diagnose) 10111 S.Diag(FI->getLocation(), diag::note_nontrivial_objc_ownership) 10112 << RD << FieldType.getObjCLifetime(); 10113 return false; 10114 } 10115 10116 bool ConstRHS = ConstArg && !FI->isMutable(); 10117 if (!checkTrivialSubobjectCall(S, FI->getLocation(), FieldType, ConstRHS, 10118 CSM, TSK_Field, TAH, Diagnose)) 10119 return false; 10120 } 10121 10122 return true; 10123 } 10124 10125 /// Diagnose why the specified class does not have a trivial special member of 10126 /// the given kind. 10127 void Sema::DiagnoseNontrivial(const CXXRecordDecl *RD, CXXSpecialMember CSM) { 10128 QualType Ty = Context.getRecordType(RD); 10129 10130 bool ConstArg = (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment); 10131 checkTrivialSubobjectCall(*this, RD->getLocation(), Ty, ConstArg, CSM, 10132 TSK_CompleteObject, TAH_IgnoreTrivialABI, 10133 /*Diagnose*/true); 10134 } 10135 10136 /// Determine whether a defaulted or deleted special member function is trivial, 10137 /// as specified in C++11 [class.ctor]p5, C++11 [class.copy]p12, 10138 /// C++11 [class.copy]p25, and C++11 [class.dtor]p5. 10139 bool Sema::SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM, 10140 TrivialABIHandling TAH, bool Diagnose) { 10141 assert(!MD->isUserProvided() && CSM != CXXInvalid && "not special enough"); 10142 10143 CXXRecordDecl *RD = MD->getParent(); 10144 10145 bool ConstArg = false; 10146 10147 // C++11 [class.copy]p12, p25: [DR1593] 10148 // A [special member] is trivial if [...] its parameter-type-list is 10149 // equivalent to the parameter-type-list of an implicit declaration [...] 10150 switch (CSM) { 10151 case CXXDefaultConstructor: 10152 case CXXDestructor: 10153 // Trivial default constructors and destructors cannot have parameters. 10154 break; 10155 10156 case CXXCopyConstructor: 10157 case CXXCopyAssignment: { 10158 const ParmVarDecl *Param0 = MD->getNonObjectParameter(0); 10159 const ReferenceType *RT = Param0->getType()->getAs<ReferenceType>(); 10160 10161 // When ClangABICompat14 is true, CXX copy constructors will only be trivial 10162 // if they are not user-provided and their parameter-type-list is equivalent 10163 // to the parameter-type-list of an implicit declaration. This maintains the 10164 // behavior before dr2171 was implemented. 10165 // 10166 // Otherwise, if ClangABICompat14 is false, All copy constructors can be 10167 // trivial, if they are not user-provided, regardless of the qualifiers on 10168 // the reference type. 10169 const bool ClangABICompat14 = Context.getLangOpts().getClangABICompat() <= 10170 LangOptions::ClangABI::Ver14; 10171 if (!RT || 10172 ((RT->getPointeeType().getCVRQualifiers() != Qualifiers::Const) && 10173 ClangABICompat14)) { 10174 if (Diagnose) 10175 Diag(Param0->getLocation(), diag::note_nontrivial_param_type) 10176 << Param0->getSourceRange() << Param0->getType() 10177 << Context.getLValueReferenceType( 10178 Context.getRecordType(RD).withConst()); 10179 return false; 10180 } 10181 10182 ConstArg = RT->getPointeeType().isConstQualified(); 10183 break; 10184 } 10185 10186 case CXXMoveConstructor: 10187 case CXXMoveAssignment: { 10188 // Trivial move operations always have non-cv-qualified parameters. 10189 const ParmVarDecl *Param0 = MD->getNonObjectParameter(0); 10190 const RValueReferenceType *RT = 10191 Param0->getType()->getAs<RValueReferenceType>(); 10192 if (!RT || RT->getPointeeType().getCVRQualifiers()) { 10193 if (Diagnose) 10194 Diag(Param0->getLocation(), diag::note_nontrivial_param_type) 10195 << Param0->getSourceRange() << Param0->getType() 10196 << Context.getRValueReferenceType(Context.getRecordType(RD)); 10197 return false; 10198 } 10199 break; 10200 } 10201 10202 case CXXInvalid: 10203 llvm_unreachable("not a special member"); 10204 } 10205 10206 if (MD->getMinRequiredArguments() < MD->getNumParams()) { 10207 if (Diagnose) 10208 Diag(MD->getParamDecl(MD->getMinRequiredArguments())->getLocation(), 10209 diag::note_nontrivial_default_arg) 10210 << MD->getParamDecl(MD->getMinRequiredArguments())->getSourceRange(); 10211 return false; 10212 } 10213 if (MD->isVariadic()) { 10214 if (Diagnose) 10215 Diag(MD->getLocation(), diag::note_nontrivial_variadic); 10216 return false; 10217 } 10218 10219 // C++11 [class.ctor]p5, C++11 [class.dtor]p5: 10220 // A copy/move [constructor or assignment operator] is trivial if 10221 // -- the [member] selected to copy/move each direct base class subobject 10222 // is trivial 10223 // 10224 // C++11 [class.copy]p12, C++11 [class.copy]p25: 10225 // A [default constructor or destructor] is trivial if 10226 // -- all the direct base classes have trivial [default constructors or 10227 // destructors] 10228 for (const auto &BI : RD->bases()) 10229 if (!checkTrivialSubobjectCall(*this, BI.getBeginLoc(), BI.getType(), 10230 ConstArg, CSM, TSK_BaseClass, TAH, Diagnose)) 10231 return false; 10232 10233 // C++11 [class.ctor]p5, C++11 [class.dtor]p5: 10234 // A copy/move [constructor or assignment operator] for a class X is 10235 // trivial if 10236 // -- for each non-static data member of X that is of class type (or array 10237 // thereof), the constructor selected to copy/move that member is 10238 // trivial 10239 // 10240 // C++11 [class.copy]p12, C++11 [class.copy]p25: 10241 // A [default constructor or destructor] is trivial if 10242 // -- for all of the non-static data members of its class that are of class 10243 // type (or array thereof), each such class has a trivial [default 10244 // constructor or destructor] 10245 if (!checkTrivialClassMembers(*this, RD, CSM, ConstArg, TAH, Diagnose)) 10246 return false; 10247 10248 // C++11 [class.dtor]p5: 10249 // A destructor is trivial if [...] 10250 // -- the destructor is not virtual 10251 if (CSM == CXXDestructor && MD->isVirtual()) { 10252 if (Diagnose) 10253 Diag(MD->getLocation(), diag::note_nontrivial_virtual_dtor) << RD; 10254 return false; 10255 } 10256 10257 // C++11 [class.ctor]p5, C++11 [class.copy]p12, C++11 [class.copy]p25: 10258 // A [special member] for class X is trivial if [...] 10259 // -- class X has no virtual functions and no virtual base classes 10260 if (CSM != CXXDestructor && MD->getParent()->isDynamicClass()) { 10261 if (!Diagnose) 10262 return false; 10263 10264 if (RD->getNumVBases()) { 10265 // Check for virtual bases. We already know that the corresponding 10266 // member in all bases is trivial, so vbases must all be direct. 10267 CXXBaseSpecifier &BS = *RD->vbases_begin(); 10268 assert(BS.isVirtual()); 10269 Diag(BS.getBeginLoc(), diag::note_nontrivial_has_virtual) << RD << 1; 10270 return false; 10271 } 10272 10273 // Must have a virtual method. 10274 for (const auto *MI : RD->methods()) { 10275 if (MI->isVirtual()) { 10276 SourceLocation MLoc = MI->getBeginLoc(); 10277 Diag(MLoc, diag::note_nontrivial_has_virtual) << RD << 0; 10278 return false; 10279 } 10280 } 10281 10282 llvm_unreachable("dynamic class with no vbases and no virtual functions"); 10283 } 10284 10285 // Looks like it's trivial! 10286 return true; 10287 } 10288 10289 namespace { 10290 struct FindHiddenVirtualMethod { 10291 Sema *S; 10292 CXXMethodDecl *Method; 10293 llvm::SmallPtrSet<const CXXMethodDecl *, 8> OverridenAndUsingBaseMethods; 10294 SmallVector<CXXMethodDecl *, 8> OverloadedMethods; 10295 10296 private: 10297 /// Check whether any most overridden method from MD in Methods 10298 static bool CheckMostOverridenMethods( 10299 const CXXMethodDecl *MD, 10300 const llvm::SmallPtrSetImpl<const CXXMethodDecl *> &Methods) { 10301 if (MD->size_overridden_methods() == 0) 10302 return Methods.count(MD->getCanonicalDecl()); 10303 for (const CXXMethodDecl *O : MD->overridden_methods()) 10304 if (CheckMostOverridenMethods(O, Methods)) 10305 return true; 10306 return false; 10307 } 10308 10309 public: 10310 /// Member lookup function that determines whether a given C++ 10311 /// method overloads virtual methods in a base class without overriding any, 10312 /// to be used with CXXRecordDecl::lookupInBases(). 10313 bool operator()(const CXXBaseSpecifier *Specifier, CXXBasePath &Path) { 10314 RecordDecl *BaseRecord = 10315 Specifier->getType()->castAs<RecordType>()->getDecl(); 10316 10317 DeclarationName Name = Method->getDeclName(); 10318 assert(Name.getNameKind() == DeclarationName::Identifier); 10319 10320 bool foundSameNameMethod = false; 10321 SmallVector<CXXMethodDecl *, 8> overloadedMethods; 10322 for (Path.Decls = BaseRecord->lookup(Name).begin(); 10323 Path.Decls != DeclContext::lookup_iterator(); ++Path.Decls) { 10324 NamedDecl *D = *Path.Decls; 10325 if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D)) { 10326 MD = MD->getCanonicalDecl(); 10327 foundSameNameMethod = true; 10328 // Interested only in hidden virtual methods. 10329 if (!MD->isVirtual()) 10330 continue; 10331 // If the method we are checking overrides a method from its base 10332 // don't warn about the other overloaded methods. Clang deviates from 10333 // GCC by only diagnosing overloads of inherited virtual functions that 10334 // do not override any other virtual functions in the base. GCC's 10335 // -Woverloaded-virtual diagnoses any derived function hiding a virtual 10336 // function from a base class. These cases may be better served by a 10337 // warning (not specific to virtual functions) on call sites when the 10338 // call would select a different function from the base class, were it 10339 // visible. 10340 // See FIXME in test/SemaCXX/warn-overload-virtual.cpp for an example. 10341 if (!S->IsOverload(Method, MD, false)) 10342 return true; 10343 // Collect the overload only if its hidden. 10344 if (!CheckMostOverridenMethods(MD, OverridenAndUsingBaseMethods)) 10345 overloadedMethods.push_back(MD); 10346 } 10347 } 10348 10349 if (foundSameNameMethod) 10350 OverloadedMethods.append(overloadedMethods.begin(), 10351 overloadedMethods.end()); 10352 return foundSameNameMethod; 10353 } 10354 }; 10355 } // end anonymous namespace 10356 10357 /// Add the most overridden methods from MD to Methods 10358 static void AddMostOverridenMethods(const CXXMethodDecl *MD, 10359 llvm::SmallPtrSetImpl<const CXXMethodDecl *>& Methods) { 10360 if (MD->size_overridden_methods() == 0) 10361 Methods.insert(MD->getCanonicalDecl()); 10362 else 10363 for (const CXXMethodDecl *O : MD->overridden_methods()) 10364 AddMostOverridenMethods(O, Methods); 10365 } 10366 10367 /// Check if a method overloads virtual methods in a base class without 10368 /// overriding any. 10369 void Sema::FindHiddenVirtualMethods(CXXMethodDecl *MD, 10370 SmallVectorImpl<CXXMethodDecl*> &OverloadedMethods) { 10371 if (!MD->getDeclName().isIdentifier()) 10372 return; 10373 10374 CXXBasePaths Paths(/*FindAmbiguities=*/true, // true to look in all bases. 10375 /*bool RecordPaths=*/false, 10376 /*bool DetectVirtual=*/false); 10377 FindHiddenVirtualMethod FHVM; 10378 FHVM.Method = MD; 10379 FHVM.S = this; 10380 10381 // Keep the base methods that were overridden or introduced in the subclass 10382 // by 'using' in a set. A base method not in this set is hidden. 10383 CXXRecordDecl *DC = MD->getParent(); 10384 DeclContext::lookup_result R = DC->lookup(MD->getDeclName()); 10385 for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E; ++I) { 10386 NamedDecl *ND = *I; 10387 if (UsingShadowDecl *shad = dyn_cast<UsingShadowDecl>(*I)) 10388 ND = shad->getTargetDecl(); 10389 if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(ND)) 10390 AddMostOverridenMethods(MD, FHVM.OverridenAndUsingBaseMethods); 10391 } 10392 10393 if (DC->lookupInBases(FHVM, Paths)) 10394 OverloadedMethods = FHVM.OverloadedMethods; 10395 } 10396 10397 void Sema::NoteHiddenVirtualMethods(CXXMethodDecl *MD, 10398 SmallVectorImpl<CXXMethodDecl*> &OverloadedMethods) { 10399 for (unsigned i = 0, e = OverloadedMethods.size(); i != e; ++i) { 10400 CXXMethodDecl *overloadedMD = OverloadedMethods[i]; 10401 PartialDiagnostic PD = PDiag( 10402 diag::note_hidden_overloaded_virtual_declared_here) << overloadedMD; 10403 HandleFunctionTypeMismatch(PD, MD->getType(), overloadedMD->getType()); 10404 Diag(overloadedMD->getLocation(), PD); 10405 } 10406 } 10407 10408 /// Diagnose methods which overload virtual methods in a base class 10409 /// without overriding any. 10410 void Sema::DiagnoseHiddenVirtualMethods(CXXMethodDecl *MD) { 10411 if (MD->isInvalidDecl()) 10412 return; 10413 10414 if (Diags.isIgnored(diag::warn_overloaded_virtual, MD->getLocation())) 10415 return; 10416 10417 SmallVector<CXXMethodDecl *, 8> OverloadedMethods; 10418 FindHiddenVirtualMethods(MD, OverloadedMethods); 10419 if (!OverloadedMethods.empty()) { 10420 Diag(MD->getLocation(), diag::warn_overloaded_virtual) 10421 << MD << (OverloadedMethods.size() > 1); 10422 10423 NoteHiddenVirtualMethods(MD, OverloadedMethods); 10424 } 10425 } 10426 10427 void Sema::checkIllFormedTrivialABIStruct(CXXRecordDecl &RD) { 10428 auto PrintDiagAndRemoveAttr = [&](unsigned N) { 10429 // No diagnostics if this is a template instantiation. 10430 if (!isTemplateInstantiation(RD.getTemplateSpecializationKind())) { 10431 Diag(RD.getAttr<TrivialABIAttr>()->getLocation(), 10432 diag::ext_cannot_use_trivial_abi) << &RD; 10433 Diag(RD.getAttr<TrivialABIAttr>()->getLocation(), 10434 diag::note_cannot_use_trivial_abi_reason) << &RD << N; 10435 } 10436 RD.dropAttr<TrivialABIAttr>(); 10437 }; 10438 10439 // Ill-formed if the copy and move constructors are deleted. 10440 auto HasNonDeletedCopyOrMoveConstructor = [&]() { 10441 // If the type is dependent, then assume it might have 10442 // implicit copy or move ctor because we won't know yet at this point. 10443 if (RD.isDependentType()) 10444 return true; 10445 if (RD.needsImplicitCopyConstructor() && 10446 !RD.defaultedCopyConstructorIsDeleted()) 10447 return true; 10448 if (RD.needsImplicitMoveConstructor() && 10449 !RD.defaultedMoveConstructorIsDeleted()) 10450 return true; 10451 for (const CXXConstructorDecl *CD : RD.ctors()) 10452 if (CD->isCopyOrMoveConstructor() && !CD->isDeleted()) 10453 return true; 10454 return false; 10455 }; 10456 10457 if (!HasNonDeletedCopyOrMoveConstructor()) { 10458 PrintDiagAndRemoveAttr(0); 10459 return; 10460 } 10461 10462 // Ill-formed if the struct has virtual functions. 10463 if (RD.isPolymorphic()) { 10464 PrintDiagAndRemoveAttr(1); 10465 return; 10466 } 10467 10468 for (const auto &B : RD.bases()) { 10469 // Ill-formed if the base class is non-trivial for the purpose of calls or a 10470 // virtual base. 10471 if (!B.getType()->isDependentType() && 10472 !B.getType()->getAsCXXRecordDecl()->canPassInRegisters()) { 10473 PrintDiagAndRemoveAttr(2); 10474 return; 10475 } 10476 10477 if (B.isVirtual()) { 10478 PrintDiagAndRemoveAttr(3); 10479 return; 10480 } 10481 } 10482 10483 for (const auto *FD : RD.fields()) { 10484 // Ill-formed if the field is an ObjectiveC pointer or of a type that is 10485 // non-trivial for the purpose of calls. 10486 QualType FT = FD->getType(); 10487 if (FT.getObjCLifetime() == Qualifiers::OCL_Weak) { 10488 PrintDiagAndRemoveAttr(4); 10489 return; 10490 } 10491 10492 if (const auto *RT = FT->getBaseElementTypeUnsafe()->getAs<RecordType>()) 10493 if (!RT->isDependentType() && 10494 !cast<CXXRecordDecl>(RT->getDecl())->canPassInRegisters()) { 10495 PrintDiagAndRemoveAttr(5); 10496 return; 10497 } 10498 } 10499 } 10500 10501 void Sema::ActOnFinishCXXMemberSpecification( 10502 Scope *S, SourceLocation RLoc, Decl *TagDecl, SourceLocation LBrac, 10503 SourceLocation RBrac, const ParsedAttributesView &AttrList) { 10504 if (!TagDecl) 10505 return; 10506 10507 AdjustDeclIfTemplate(TagDecl); 10508 10509 for (const ParsedAttr &AL : AttrList) { 10510 if (AL.getKind() != ParsedAttr::AT_Visibility) 10511 continue; 10512 AL.setInvalid(); 10513 Diag(AL.getLoc(), diag::warn_attribute_after_definition_ignored) << AL; 10514 } 10515 10516 ActOnFields(S, RLoc, TagDecl, 10517 llvm::ArrayRef( 10518 // strict aliasing violation! 10519 reinterpret_cast<Decl **>(FieldCollector->getCurFields()), 10520 FieldCollector->getCurNumFields()), 10521 LBrac, RBrac, AttrList); 10522 10523 CheckCompletedCXXClass(S, cast<CXXRecordDecl>(TagDecl)); 10524 } 10525 10526 /// Find the equality comparison functions that should be implicitly declared 10527 /// in a given class definition, per C++2a [class.compare.default]p3. 10528 static void findImplicitlyDeclaredEqualityComparisons( 10529 ASTContext &Ctx, CXXRecordDecl *RD, 10530 llvm::SmallVectorImpl<FunctionDecl *> &Spaceships) { 10531 DeclarationName EqEq = Ctx.DeclarationNames.getCXXOperatorName(OO_EqualEqual); 10532 if (!RD->lookup(EqEq).empty()) 10533 // Member operator== explicitly declared: no implicit operator==s. 10534 return; 10535 10536 // Traverse friends looking for an '==' or a '<=>'. 10537 for (FriendDecl *Friend : RD->friends()) { 10538 FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(Friend->getFriendDecl()); 10539 if (!FD) continue; 10540 10541 if (FD->getOverloadedOperator() == OO_EqualEqual) { 10542 // Friend operator== explicitly declared: no implicit operator==s. 10543 Spaceships.clear(); 10544 return; 10545 } 10546 10547 if (FD->getOverloadedOperator() == OO_Spaceship && 10548 FD->isExplicitlyDefaulted()) 10549 Spaceships.push_back(FD); 10550 } 10551 10552 // Look for members named 'operator<=>'. 10553 DeclarationName Cmp = Ctx.DeclarationNames.getCXXOperatorName(OO_Spaceship); 10554 for (NamedDecl *ND : RD->lookup(Cmp)) { 10555 // Note that we could find a non-function here (either a function template 10556 // or a using-declaration). Neither case results in an implicit 10557 // 'operator=='. 10558 if (auto *FD = dyn_cast<FunctionDecl>(ND)) 10559 if (FD->isExplicitlyDefaulted()) 10560 Spaceships.push_back(FD); 10561 } 10562 } 10563 10564 /// AddImplicitlyDeclaredMembersToClass - Adds any implicitly-declared 10565 /// special functions, such as the default constructor, copy 10566 /// constructor, or destructor, to the given C++ class (C++ 10567 /// [special]p1). This routine can only be executed just before the 10568 /// definition of the class is complete. 10569 void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) { 10570 // Don't add implicit special members to templated classes. 10571 // FIXME: This means unqualified lookups for 'operator=' within a class 10572 // template don't work properly. 10573 if (!ClassDecl->isDependentType()) { 10574 if (ClassDecl->needsImplicitDefaultConstructor()) { 10575 ++getASTContext().NumImplicitDefaultConstructors; 10576 10577 if (ClassDecl->hasInheritedConstructor()) 10578 DeclareImplicitDefaultConstructor(ClassDecl); 10579 } 10580 10581 if (ClassDecl->needsImplicitCopyConstructor()) { 10582 ++getASTContext().NumImplicitCopyConstructors; 10583 10584 // If the properties or semantics of the copy constructor couldn't be 10585 // determined while the class was being declared, force a declaration 10586 // of it now. 10587 if (ClassDecl->needsOverloadResolutionForCopyConstructor() || 10588 ClassDecl->hasInheritedConstructor()) 10589 DeclareImplicitCopyConstructor(ClassDecl); 10590 // For the MS ABI we need to know whether the copy ctor is deleted. A 10591 // prerequisite for deleting the implicit copy ctor is that the class has 10592 // a move ctor or move assignment that is either user-declared or whose 10593 // semantics are inherited from a subobject. FIXME: We should provide a 10594 // more direct way for CodeGen to ask whether the constructor was deleted. 10595 else if (Context.getTargetInfo().getCXXABI().isMicrosoft() && 10596 (ClassDecl->hasUserDeclaredMoveConstructor() || 10597 ClassDecl->needsOverloadResolutionForMoveConstructor() || 10598 ClassDecl->hasUserDeclaredMoveAssignment() || 10599 ClassDecl->needsOverloadResolutionForMoveAssignment())) 10600 DeclareImplicitCopyConstructor(ClassDecl); 10601 } 10602 10603 if (getLangOpts().CPlusPlus11 && 10604 ClassDecl->needsImplicitMoveConstructor()) { 10605 ++getASTContext().NumImplicitMoveConstructors; 10606 10607 if (ClassDecl->needsOverloadResolutionForMoveConstructor() || 10608 ClassDecl->hasInheritedConstructor()) 10609 DeclareImplicitMoveConstructor(ClassDecl); 10610 } 10611 10612 if (ClassDecl->needsImplicitCopyAssignment()) { 10613 ++getASTContext().NumImplicitCopyAssignmentOperators; 10614 10615 // If we have a dynamic class, then the copy assignment operator may be 10616 // virtual, so we have to declare it immediately. This ensures that, e.g., 10617 // it shows up in the right place in the vtable and that we diagnose 10618 // problems with the implicit exception specification. 10619 if (ClassDecl->isDynamicClass() || 10620 ClassDecl->needsOverloadResolutionForCopyAssignment() || 10621 ClassDecl->hasInheritedAssignment()) 10622 DeclareImplicitCopyAssignment(ClassDecl); 10623 } 10624 10625 if (getLangOpts().CPlusPlus11 && ClassDecl->needsImplicitMoveAssignment()) { 10626 ++getASTContext().NumImplicitMoveAssignmentOperators; 10627 10628 // Likewise for the move assignment operator. 10629 if (ClassDecl->isDynamicClass() || 10630 ClassDecl->needsOverloadResolutionForMoveAssignment() || 10631 ClassDecl->hasInheritedAssignment()) 10632 DeclareImplicitMoveAssignment(ClassDecl); 10633 } 10634 10635 if (ClassDecl->needsImplicitDestructor()) { 10636 ++getASTContext().NumImplicitDestructors; 10637 10638 // If we have a dynamic class, then the destructor may be virtual, so we 10639 // have to declare the destructor immediately. This ensures that, e.g., it 10640 // shows up in the right place in the vtable and that we diagnose problems 10641 // with the implicit exception specification. 10642 if (ClassDecl->isDynamicClass() || 10643 ClassDecl->needsOverloadResolutionForDestructor()) 10644 DeclareImplicitDestructor(ClassDecl); 10645 } 10646 } 10647 10648 // C++2a [class.compare.default]p3: 10649 // If the member-specification does not explicitly declare any member or 10650 // friend named operator==, an == operator function is declared implicitly 10651 // for each defaulted three-way comparison operator function defined in 10652 // the member-specification 10653 // FIXME: Consider doing this lazily. 10654 // We do this during the initial parse for a class template, not during 10655 // instantiation, so that we can handle unqualified lookups for 'operator==' 10656 // when parsing the template. 10657 if (getLangOpts().CPlusPlus20 && !inTemplateInstantiation()) { 10658 llvm::SmallVector<FunctionDecl *, 4> DefaultedSpaceships; 10659 findImplicitlyDeclaredEqualityComparisons(Context, ClassDecl, 10660 DefaultedSpaceships); 10661 for (auto *FD : DefaultedSpaceships) 10662 DeclareImplicitEqualityComparison(ClassDecl, FD); 10663 } 10664 } 10665 10666 unsigned 10667 Sema::ActOnReenterTemplateScope(Decl *D, 10668 llvm::function_ref<Scope *()> EnterScope) { 10669 if (!D) 10670 return 0; 10671 AdjustDeclIfTemplate(D); 10672 10673 // In order to get name lookup right, reenter template scopes in order from 10674 // outermost to innermost. 10675 SmallVector<TemplateParameterList *, 4> ParameterLists; 10676 DeclContext *LookupDC = dyn_cast<DeclContext>(D); 10677 10678 if (DeclaratorDecl *DD = dyn_cast<DeclaratorDecl>(D)) { 10679 for (unsigned i = 0; i < DD->getNumTemplateParameterLists(); ++i) 10680 ParameterLists.push_back(DD->getTemplateParameterList(i)); 10681 10682 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { 10683 if (FunctionTemplateDecl *FTD = FD->getDescribedFunctionTemplate()) 10684 ParameterLists.push_back(FTD->getTemplateParameters()); 10685 } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) { 10686 LookupDC = VD->getDeclContext(); 10687 10688 if (VarTemplateDecl *VTD = VD->getDescribedVarTemplate()) 10689 ParameterLists.push_back(VTD->getTemplateParameters()); 10690 else if (auto *PSD = dyn_cast<VarTemplatePartialSpecializationDecl>(D)) 10691 ParameterLists.push_back(PSD->getTemplateParameters()); 10692 } 10693 } else if (TagDecl *TD = dyn_cast<TagDecl>(D)) { 10694 for (unsigned i = 0; i < TD->getNumTemplateParameterLists(); ++i) 10695 ParameterLists.push_back(TD->getTemplateParameterList(i)); 10696 10697 if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(TD)) { 10698 if (ClassTemplateDecl *CTD = RD->getDescribedClassTemplate()) 10699 ParameterLists.push_back(CTD->getTemplateParameters()); 10700 else if (auto *PSD = dyn_cast<ClassTemplatePartialSpecializationDecl>(D)) 10701 ParameterLists.push_back(PSD->getTemplateParameters()); 10702 } 10703 } 10704 // FIXME: Alias declarations and concepts. 10705 10706 unsigned Count = 0; 10707 Scope *InnermostTemplateScope = nullptr; 10708 for (TemplateParameterList *Params : ParameterLists) { 10709 // Ignore explicit specializations; they don't contribute to the template 10710 // depth. 10711 if (Params->size() == 0) 10712 continue; 10713 10714 InnermostTemplateScope = EnterScope(); 10715 for (NamedDecl *Param : *Params) { 10716 if (Param->getDeclName()) { 10717 InnermostTemplateScope->AddDecl(Param); 10718 IdResolver.AddDecl(Param); 10719 } 10720 } 10721 ++Count; 10722 } 10723 10724 // Associate the new template scopes with the corresponding entities. 10725 if (InnermostTemplateScope) { 10726 assert(LookupDC && "no enclosing DeclContext for template lookup"); 10727 EnterTemplatedContext(InnermostTemplateScope, LookupDC); 10728 } 10729 10730 return Count; 10731 } 10732 10733 void Sema::ActOnStartDelayedMemberDeclarations(Scope *S, Decl *RecordD) { 10734 if (!RecordD) return; 10735 AdjustDeclIfTemplate(RecordD); 10736 CXXRecordDecl *Record = cast<CXXRecordDecl>(RecordD); 10737 PushDeclContext(S, Record); 10738 } 10739 10740 void Sema::ActOnFinishDelayedMemberDeclarations(Scope *S, Decl *RecordD) { 10741 if (!RecordD) return; 10742 PopDeclContext(); 10743 } 10744 10745 /// This is used to implement the constant expression evaluation part of the 10746 /// attribute enable_if extension. There is nothing in standard C++ which would 10747 /// require reentering parameters. 10748 void Sema::ActOnReenterCXXMethodParameter(Scope *S, ParmVarDecl *Param) { 10749 if (!Param) 10750 return; 10751 10752 S->AddDecl(Param); 10753 if (Param->getDeclName()) 10754 IdResolver.AddDecl(Param); 10755 } 10756 10757 /// ActOnStartDelayedCXXMethodDeclaration - We have completed 10758 /// parsing a top-level (non-nested) C++ class, and we are now 10759 /// parsing those parts of the given Method declaration that could 10760 /// not be parsed earlier (C++ [class.mem]p2), such as default 10761 /// arguments. This action should enter the scope of the given 10762 /// Method declaration as if we had just parsed the qualified method 10763 /// name. However, it should not bring the parameters into scope; 10764 /// that will be performed by ActOnDelayedCXXMethodParameter. 10765 void Sema::ActOnStartDelayedCXXMethodDeclaration(Scope *S, Decl *MethodD) { 10766 } 10767 10768 /// ActOnDelayedCXXMethodParameter - We've already started a delayed 10769 /// C++ method declaration. We're (re-)introducing the given 10770 /// function parameter into scope for use in parsing later parts of 10771 /// the method declaration. For example, we could see an 10772 /// ActOnParamDefaultArgument event for this parameter. 10773 void Sema::ActOnDelayedCXXMethodParameter(Scope *S, Decl *ParamD) { 10774 if (!ParamD) 10775 return; 10776 10777 ParmVarDecl *Param = cast<ParmVarDecl>(ParamD); 10778 10779 S->AddDecl(Param); 10780 if (Param->getDeclName()) 10781 IdResolver.AddDecl(Param); 10782 } 10783 10784 /// ActOnFinishDelayedCXXMethodDeclaration - We have finished 10785 /// processing the delayed method declaration for Method. The method 10786 /// declaration is now considered finished. There may be a separate 10787 /// ActOnStartOfFunctionDef action later (not necessarily 10788 /// immediately!) for this method, if it was also defined inside the 10789 /// class body. 10790 void Sema::ActOnFinishDelayedCXXMethodDeclaration(Scope *S, Decl *MethodD) { 10791 if (!MethodD) 10792 return; 10793 10794 AdjustDeclIfTemplate(MethodD); 10795 10796 FunctionDecl *Method = cast<FunctionDecl>(MethodD); 10797 10798 // Now that we have our default arguments, check the constructor 10799 // again. It could produce additional diagnostics or affect whether 10800 // the class has implicitly-declared destructors, among other 10801 // things. 10802 if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Method)) 10803 CheckConstructor(Constructor); 10804 10805 // Check the default arguments, which we may have added. 10806 if (!Method->isInvalidDecl()) 10807 CheckCXXDefaultArguments(Method); 10808 } 10809 10810 // Emit the given diagnostic for each non-address-space qualifier. 10811 // Common part of CheckConstructorDeclarator and CheckDestructorDeclarator. 10812 static void checkMethodTypeQualifiers(Sema &S, Declarator &D, unsigned DiagID) { 10813 const DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo(); 10814 if (FTI.hasMethodTypeQualifiers() && !D.isInvalidType()) { 10815 bool DiagOccured = false; 10816 FTI.MethodQualifiers->forEachQualifier( 10817 [DiagID, &S, &DiagOccured](DeclSpec::TQ, StringRef QualName, 10818 SourceLocation SL) { 10819 // This diagnostic should be emitted on any qualifier except an addr 10820 // space qualifier. However, forEachQualifier currently doesn't visit 10821 // addr space qualifiers, so there's no way to write this condition 10822 // right now; we just diagnose on everything. 10823 S.Diag(SL, DiagID) << QualName << SourceRange(SL); 10824 DiagOccured = true; 10825 }); 10826 if (DiagOccured) 10827 D.setInvalidType(); 10828 } 10829 } 10830 10831 /// CheckConstructorDeclarator - Called by ActOnDeclarator to check 10832 /// the well-formedness of the constructor declarator @p D with type @p 10833 /// R. If there are any errors in the declarator, this routine will 10834 /// emit diagnostics and set the invalid bit to true. In any case, the type 10835 /// will be updated to reflect a well-formed type for the constructor and 10836 /// returned. 10837 QualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R, 10838 StorageClass &SC) { 10839 bool isVirtual = D.getDeclSpec().isVirtualSpecified(); 10840 10841 // C++ [class.ctor]p3: 10842 // A constructor shall not be virtual (10.3) or static (9.4). A 10843 // constructor can be invoked for a const, volatile or const 10844 // volatile object. A constructor shall not be declared const, 10845 // volatile, or const volatile (9.3.2). 10846 if (isVirtual) { 10847 if (!D.isInvalidType()) 10848 Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be) 10849 << "virtual" << SourceRange(D.getDeclSpec().getVirtualSpecLoc()) 10850 << SourceRange(D.getIdentifierLoc()); 10851 D.setInvalidType(); 10852 } 10853 if (SC == SC_Static) { 10854 if (!D.isInvalidType()) 10855 Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be) 10856 << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc()) 10857 << SourceRange(D.getIdentifierLoc()); 10858 D.setInvalidType(); 10859 SC = SC_None; 10860 } 10861 10862 if (unsigned TypeQuals = D.getDeclSpec().getTypeQualifiers()) { 10863 diagnoseIgnoredQualifiers( 10864 diag::err_constructor_return_type, TypeQuals, SourceLocation(), 10865 D.getDeclSpec().getConstSpecLoc(), D.getDeclSpec().getVolatileSpecLoc(), 10866 D.getDeclSpec().getRestrictSpecLoc(), 10867 D.getDeclSpec().getAtomicSpecLoc()); 10868 D.setInvalidType(); 10869 } 10870 10871 checkMethodTypeQualifiers(*this, D, diag::err_invalid_qualified_constructor); 10872 10873 // C++0x [class.ctor]p4: 10874 // A constructor shall not be declared with a ref-qualifier. 10875 DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo(); 10876 if (FTI.hasRefQualifier()) { 10877 Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_constructor) 10878 << FTI.RefQualifierIsLValueRef 10879 << FixItHint::CreateRemoval(FTI.getRefQualifierLoc()); 10880 D.setInvalidType(); 10881 } 10882 10883 // Rebuild the function type "R" without any type qualifiers (in 10884 // case any of the errors above fired) and with "void" as the 10885 // return type, since constructors don't have return types. 10886 const FunctionProtoType *Proto = R->castAs<FunctionProtoType>(); 10887 if (Proto->getReturnType() == Context.VoidTy && !D.isInvalidType()) 10888 return R; 10889 10890 FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo(); 10891 EPI.TypeQuals = Qualifiers(); 10892 EPI.RefQualifier = RQ_None; 10893 10894 return Context.getFunctionType(Context.VoidTy, Proto->getParamTypes(), EPI); 10895 } 10896 10897 /// CheckConstructor - Checks a fully-formed constructor for 10898 /// well-formedness, issuing any diagnostics required. Returns true if 10899 /// the constructor declarator is invalid. 10900 void Sema::CheckConstructor(CXXConstructorDecl *Constructor) { 10901 CXXRecordDecl *ClassDecl 10902 = dyn_cast<CXXRecordDecl>(Constructor->getDeclContext()); 10903 if (!ClassDecl) 10904 return Constructor->setInvalidDecl(); 10905 10906 // C++ [class.copy]p3: 10907 // A declaration of a constructor for a class X is ill-formed if 10908 // its first parameter is of type (optionally cv-qualified) X and 10909 // either there are no other parameters or else all other 10910 // parameters have default arguments. 10911 if (!Constructor->isInvalidDecl() && 10912 Constructor->hasOneParamOrDefaultArgs() && 10913 Constructor->getTemplateSpecializationKind() != 10914 TSK_ImplicitInstantiation) { 10915 QualType ParamType = Constructor->getParamDecl(0)->getType(); 10916 QualType ClassTy = Context.getTagDeclType(ClassDecl); 10917 if (Context.getCanonicalType(ParamType).getUnqualifiedType() == ClassTy) { 10918 SourceLocation ParamLoc = Constructor->getParamDecl(0)->getLocation(); 10919 const char *ConstRef 10920 = Constructor->getParamDecl(0)->getIdentifier() ? "const &" 10921 : " const &"; 10922 Diag(ParamLoc, diag::err_constructor_byvalue_arg) 10923 << FixItHint::CreateInsertion(ParamLoc, ConstRef); 10924 10925 // FIXME: Rather that making the constructor invalid, we should endeavor 10926 // to fix the type. 10927 Constructor->setInvalidDecl(); 10928 } 10929 } 10930 } 10931 10932 /// CheckDestructor - Checks a fully-formed destructor definition for 10933 /// well-formedness, issuing any diagnostics required. Returns true 10934 /// on error. 10935 bool Sema::CheckDestructor(CXXDestructorDecl *Destructor) { 10936 CXXRecordDecl *RD = Destructor->getParent(); 10937 10938 if (!Destructor->getOperatorDelete() && Destructor->isVirtual()) { 10939 SourceLocation Loc; 10940 10941 if (!Destructor->isImplicit()) 10942 Loc = Destructor->getLocation(); 10943 else 10944 Loc = RD->getLocation(); 10945 10946 // If we have a virtual destructor, look up the deallocation function 10947 if (FunctionDecl *OperatorDelete = 10948 FindDeallocationFunctionForDestructor(Loc, RD)) { 10949 Expr *ThisArg = nullptr; 10950 10951 // If the notional 'delete this' expression requires a non-trivial 10952 // conversion from 'this' to the type of a destroying operator delete's 10953 // first parameter, perform that conversion now. 10954 if (OperatorDelete->isDestroyingOperatorDelete()) { 10955 QualType ParamType = OperatorDelete->getParamDecl(0)->getType(); 10956 if (!declaresSameEntity(ParamType->getAsCXXRecordDecl(), RD)) { 10957 // C++ [class.dtor]p13: 10958 // ... as if for the expression 'delete this' appearing in a 10959 // non-virtual destructor of the destructor's class. 10960 ContextRAII SwitchContext(*this, Destructor); 10961 ExprResult This = 10962 ActOnCXXThis(OperatorDelete->getParamDecl(0)->getLocation()); 10963 assert(!This.isInvalid() && "couldn't form 'this' expr in dtor?"); 10964 This = PerformImplicitConversion(This.get(), ParamType, AA_Passing); 10965 if (This.isInvalid()) { 10966 // FIXME: Register this as a context note so that it comes out 10967 // in the right order. 10968 Diag(Loc, diag::note_implicit_delete_this_in_destructor_here); 10969 return true; 10970 } 10971 ThisArg = This.get(); 10972 } 10973 } 10974 10975 DiagnoseUseOfDecl(OperatorDelete, Loc); 10976 MarkFunctionReferenced(Loc, OperatorDelete); 10977 Destructor->setOperatorDelete(OperatorDelete, ThisArg); 10978 } 10979 } 10980 10981 return false; 10982 } 10983 10984 /// CheckDestructorDeclarator - Called by ActOnDeclarator to check 10985 /// the well-formednes of the destructor declarator @p D with type @p 10986 /// R. If there are any errors in the declarator, this routine will 10987 /// emit diagnostics and set the declarator to invalid. Even if this happens, 10988 /// will be updated to reflect a well-formed type for the destructor and 10989 /// returned. 10990 QualType Sema::CheckDestructorDeclarator(Declarator &D, QualType R, 10991 StorageClass& SC) { 10992 // C++ [class.dtor]p1: 10993 // [...] A typedef-name that names a class is a class-name 10994 // (7.1.3); however, a typedef-name that names a class shall not 10995 // be used as the identifier in the declarator for a destructor 10996 // declaration. 10997 QualType DeclaratorType = GetTypeFromParser(D.getName().DestructorName); 10998 if (const TypedefType *TT = DeclaratorType->getAs<TypedefType>()) 10999 Diag(D.getIdentifierLoc(), diag::ext_destructor_typedef_name) 11000 << DeclaratorType << isa<TypeAliasDecl>(TT->getDecl()); 11001 else if (const TemplateSpecializationType *TST = 11002 DeclaratorType->getAs<TemplateSpecializationType>()) 11003 if (TST->isTypeAlias()) 11004 Diag(D.getIdentifierLoc(), diag::ext_destructor_typedef_name) 11005 << DeclaratorType << 1; 11006 11007 // C++ [class.dtor]p2: 11008 // A destructor is used to destroy objects of its class type. A 11009 // destructor takes no parameters, and no return type can be 11010 // specified for it (not even void). The address of a destructor 11011 // shall not be taken. A destructor shall not be static. A 11012 // destructor can be invoked for a const, volatile or const 11013 // volatile object. A destructor shall not be declared const, 11014 // volatile or const volatile (9.3.2). 11015 if (SC == SC_Static) { 11016 if (!D.isInvalidType()) 11017 Diag(D.getIdentifierLoc(), diag::err_destructor_cannot_be) 11018 << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc()) 11019 << SourceRange(D.getIdentifierLoc()) 11020 << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc()); 11021 11022 SC = SC_None; 11023 } 11024 if (!D.isInvalidType()) { 11025 // Destructors don't have return types, but the parser will 11026 // happily parse something like: 11027 // 11028 // class X { 11029 // float ~X(); 11030 // }; 11031 // 11032 // The return type will be eliminated later. 11033 if (D.getDeclSpec().hasTypeSpecifier()) 11034 Diag(D.getIdentifierLoc(), diag::err_destructor_return_type) 11035 << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc()) 11036 << SourceRange(D.getIdentifierLoc()); 11037 else if (unsigned TypeQuals = D.getDeclSpec().getTypeQualifiers()) { 11038 diagnoseIgnoredQualifiers(diag::err_destructor_return_type, TypeQuals, 11039 SourceLocation(), 11040 D.getDeclSpec().getConstSpecLoc(), 11041 D.getDeclSpec().getVolatileSpecLoc(), 11042 D.getDeclSpec().getRestrictSpecLoc(), 11043 D.getDeclSpec().getAtomicSpecLoc()); 11044 D.setInvalidType(); 11045 } 11046 } 11047 11048 checkMethodTypeQualifiers(*this, D, diag::err_invalid_qualified_destructor); 11049 11050 // C++0x [class.dtor]p2: 11051 // A destructor shall not be declared with a ref-qualifier. 11052 DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo(); 11053 if (FTI.hasRefQualifier()) { 11054 Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_destructor) 11055 << FTI.RefQualifierIsLValueRef 11056 << FixItHint::CreateRemoval(FTI.getRefQualifierLoc()); 11057 D.setInvalidType(); 11058 } 11059 11060 // Make sure we don't have any parameters. 11061 if (FTIHasNonVoidParameters(FTI)) { 11062 Diag(D.getIdentifierLoc(), diag::err_destructor_with_params); 11063 11064 // Delete the parameters. 11065 FTI.freeParams(); 11066 D.setInvalidType(); 11067 } 11068 11069 // Make sure the destructor isn't variadic. 11070 if (FTI.isVariadic) { 11071 Diag(D.getIdentifierLoc(), diag::err_destructor_variadic); 11072 D.setInvalidType(); 11073 } 11074 11075 // Rebuild the function type "R" without any type qualifiers or 11076 // parameters (in case any of the errors above fired) and with 11077 // "void" as the return type, since destructors don't have return 11078 // types. 11079 if (!D.isInvalidType()) 11080 return R; 11081 11082 const FunctionProtoType *Proto = R->castAs<FunctionProtoType>(); 11083 FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo(); 11084 EPI.Variadic = false; 11085 EPI.TypeQuals = Qualifiers(); 11086 EPI.RefQualifier = RQ_None; 11087 return Context.getFunctionType(Context.VoidTy, std::nullopt, EPI); 11088 } 11089 11090 static void extendLeft(SourceRange &R, SourceRange Before) { 11091 if (Before.isInvalid()) 11092 return; 11093 R.setBegin(Before.getBegin()); 11094 if (R.getEnd().isInvalid()) 11095 R.setEnd(Before.getEnd()); 11096 } 11097 11098 static void extendRight(SourceRange &R, SourceRange After) { 11099 if (After.isInvalid()) 11100 return; 11101 if (R.getBegin().isInvalid()) 11102 R.setBegin(After.getBegin()); 11103 R.setEnd(After.getEnd()); 11104 } 11105 11106 /// CheckConversionDeclarator - Called by ActOnDeclarator to check the 11107 /// well-formednes of the conversion function declarator @p D with 11108 /// type @p R. If there are any errors in the declarator, this routine 11109 /// will emit diagnostics and return true. Otherwise, it will return 11110 /// false. Either way, the type @p R will be updated to reflect a 11111 /// well-formed type for the conversion operator. 11112 void Sema::CheckConversionDeclarator(Declarator &D, QualType &R, 11113 StorageClass& SC) { 11114 // C++ [class.conv.fct]p1: 11115 // Neither parameter types nor return type can be specified. The 11116 // type of a conversion function (8.3.5) is "function taking no 11117 // parameter returning conversion-type-id." 11118 if (SC == SC_Static) { 11119 if (!D.isInvalidType()) 11120 Diag(D.getIdentifierLoc(), diag::err_conv_function_not_member) 11121 << SourceRange(D.getDeclSpec().getStorageClassSpecLoc()) 11122 << D.getName().getSourceRange(); 11123 D.setInvalidType(); 11124 SC = SC_None; 11125 } 11126 11127 TypeSourceInfo *ConvTSI = nullptr; 11128 QualType ConvType = 11129 GetTypeFromParser(D.getName().ConversionFunctionId, &ConvTSI); 11130 11131 const DeclSpec &DS = D.getDeclSpec(); 11132 if (DS.hasTypeSpecifier() && !D.isInvalidType()) { 11133 // Conversion functions don't have return types, but the parser will 11134 // happily parse something like: 11135 // 11136 // class X { 11137 // float operator bool(); 11138 // }; 11139 // 11140 // The return type will be changed later anyway. 11141 Diag(D.getIdentifierLoc(), diag::err_conv_function_return_type) 11142 << SourceRange(DS.getTypeSpecTypeLoc()) 11143 << SourceRange(D.getIdentifierLoc()); 11144 D.setInvalidType(); 11145 } else if (DS.getTypeQualifiers() && !D.isInvalidType()) { 11146 // It's also plausible that the user writes type qualifiers in the wrong 11147 // place, such as: 11148 // struct S { const operator int(); }; 11149 // FIXME: we could provide a fixit to move the qualifiers onto the 11150 // conversion type. 11151 Diag(D.getIdentifierLoc(), diag::err_conv_function_with_complex_decl) 11152 << SourceRange(D.getIdentifierLoc()) << 0; 11153 D.setInvalidType(); 11154 } 11155 const auto *Proto = R->castAs<FunctionProtoType>(); 11156 // Make sure we don't have any parameters. 11157 DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo(); 11158 unsigned NumParam = Proto->getNumParams(); 11159 11160 // [C++2b] 11161 // A conversion function shall have no non-object parameters. 11162 if (NumParam == 1) { 11163 DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo(); 11164 if (const auto *First = 11165 dyn_cast_if_present<ParmVarDecl>(FTI.Params[0].Param); 11166 First && First->isExplicitObjectParameter()) 11167 NumParam--; 11168 } 11169 11170 if (NumParam != 0) { 11171 Diag(D.getIdentifierLoc(), diag::err_conv_function_with_params); 11172 // Delete the parameters. 11173 FTI.freeParams(); 11174 D.setInvalidType(); 11175 } else if (Proto->isVariadic()) { 11176 Diag(D.getIdentifierLoc(), diag::err_conv_function_variadic); 11177 D.setInvalidType(); 11178 } 11179 11180 // Diagnose "&operator bool()" and other such nonsense. This 11181 // is actually a gcc extension which we don't support. 11182 if (Proto->getReturnType() != ConvType) { 11183 bool NeedsTypedef = false; 11184 SourceRange Before, After; 11185 11186 // Walk the chunks and extract information on them for our diagnostic. 11187 bool PastFunctionChunk = false; 11188 for (auto &Chunk : D.type_objects()) { 11189 switch (Chunk.Kind) { 11190 case DeclaratorChunk::Function: 11191 if (!PastFunctionChunk) { 11192 if (Chunk.Fun.HasTrailingReturnType) { 11193 TypeSourceInfo *TRT = nullptr; 11194 GetTypeFromParser(Chunk.Fun.getTrailingReturnType(), &TRT); 11195 if (TRT) extendRight(After, TRT->getTypeLoc().getSourceRange()); 11196 } 11197 PastFunctionChunk = true; 11198 break; 11199 } 11200 [[fallthrough]]; 11201 case DeclaratorChunk::Array: 11202 NeedsTypedef = true; 11203 extendRight(After, Chunk.getSourceRange()); 11204 break; 11205 11206 case DeclaratorChunk::Pointer: 11207 case DeclaratorChunk::BlockPointer: 11208 case DeclaratorChunk::Reference: 11209 case DeclaratorChunk::MemberPointer: 11210 case DeclaratorChunk::Pipe: 11211 extendLeft(Before, Chunk.getSourceRange()); 11212 break; 11213 11214 case DeclaratorChunk::Paren: 11215 extendLeft(Before, Chunk.Loc); 11216 extendRight(After, Chunk.EndLoc); 11217 break; 11218 } 11219 } 11220 11221 SourceLocation Loc = Before.isValid() ? Before.getBegin() : 11222 After.isValid() ? After.getBegin() : 11223 D.getIdentifierLoc(); 11224 auto &&DB = Diag(Loc, diag::err_conv_function_with_complex_decl); 11225 DB << Before << After; 11226 11227 if (!NeedsTypedef) { 11228 DB << /*don't need a typedef*/0; 11229 11230 // If we can provide a correct fix-it hint, do so. 11231 if (After.isInvalid() && ConvTSI) { 11232 SourceLocation InsertLoc = 11233 getLocForEndOfToken(ConvTSI->getTypeLoc().getEndLoc()); 11234 DB << FixItHint::CreateInsertion(InsertLoc, " ") 11235 << FixItHint::CreateInsertionFromRange( 11236 InsertLoc, CharSourceRange::getTokenRange(Before)) 11237 << FixItHint::CreateRemoval(Before); 11238 } 11239 } else if (!Proto->getReturnType()->isDependentType()) { 11240 DB << /*typedef*/1 << Proto->getReturnType(); 11241 } else if (getLangOpts().CPlusPlus11) { 11242 DB << /*alias template*/2 << Proto->getReturnType(); 11243 } else { 11244 DB << /*might not be fixable*/3; 11245 } 11246 11247 // Recover by incorporating the other type chunks into the result type. 11248 // Note, this does *not* change the name of the function. This is compatible 11249 // with the GCC extension: 11250 // struct S { &operator int(); } s; 11251 // int &r = s.operator int(); // ok in GCC 11252 // S::operator int&() {} // error in GCC, function name is 'operator int'. 11253 ConvType = Proto->getReturnType(); 11254 } 11255 11256 // C++ [class.conv.fct]p4: 11257 // The conversion-type-id shall not represent a function type nor 11258 // an array type. 11259 if (ConvType->isArrayType()) { 11260 Diag(D.getIdentifierLoc(), diag::err_conv_function_to_array); 11261 ConvType = Context.getPointerType(ConvType); 11262 D.setInvalidType(); 11263 } else if (ConvType->isFunctionType()) { 11264 Diag(D.getIdentifierLoc(), diag::err_conv_function_to_function); 11265 ConvType = Context.getPointerType(ConvType); 11266 D.setInvalidType(); 11267 } 11268 11269 // Rebuild the function type "R" without any parameters (in case any 11270 // of the errors above fired) and with the conversion type as the 11271 // return type. 11272 if (D.isInvalidType()) 11273 R = Context.getFunctionType(ConvType, std::nullopt, 11274 Proto->getExtProtoInfo()); 11275 11276 // C++0x explicit conversion operators. 11277 if (DS.hasExplicitSpecifier() && !getLangOpts().CPlusPlus20) 11278 Diag(DS.getExplicitSpecLoc(), 11279 getLangOpts().CPlusPlus11 11280 ? diag::warn_cxx98_compat_explicit_conversion_functions 11281 : diag::ext_explicit_conversion_functions) 11282 << SourceRange(DS.getExplicitSpecRange()); 11283 } 11284 11285 /// ActOnConversionDeclarator - Called by ActOnDeclarator to complete 11286 /// the declaration of the given C++ conversion function. This routine 11287 /// is responsible for recording the conversion function in the C++ 11288 /// class, if possible. 11289 Decl *Sema::ActOnConversionDeclarator(CXXConversionDecl *Conversion) { 11290 assert(Conversion && "Expected to receive a conversion function declaration"); 11291 11292 CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Conversion->getDeclContext()); 11293 11294 // Make sure we aren't redeclaring the conversion function. 11295 QualType ConvType = Context.getCanonicalType(Conversion->getConversionType()); 11296 // C++ [class.conv.fct]p1: 11297 // [...] A conversion function is never used to convert a 11298 // (possibly cv-qualified) object to the (possibly cv-qualified) 11299 // same object type (or a reference to it), to a (possibly 11300 // cv-qualified) base class of that type (or a reference to it), 11301 // or to (possibly cv-qualified) void. 11302 QualType ClassType 11303 = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl)); 11304 if (const ReferenceType *ConvTypeRef = ConvType->getAs<ReferenceType>()) 11305 ConvType = ConvTypeRef->getPointeeType(); 11306 if (Conversion->getTemplateSpecializationKind() != TSK_Undeclared && 11307 Conversion->getTemplateSpecializationKind() != TSK_ExplicitSpecialization) 11308 /* Suppress diagnostics for instantiations. */; 11309 else if (Conversion->size_overridden_methods() != 0) 11310 /* Suppress diagnostics for overriding virtual function in a base class. */; 11311 else if (ConvType->isRecordType()) { 11312 ConvType = Context.getCanonicalType(ConvType).getUnqualifiedType(); 11313 if (ConvType == ClassType) 11314 Diag(Conversion->getLocation(), diag::warn_conv_to_self_not_used) 11315 << ClassType; 11316 else if (IsDerivedFrom(Conversion->getLocation(), ClassType, ConvType)) 11317 Diag(Conversion->getLocation(), diag::warn_conv_to_base_not_used) 11318 << ClassType << ConvType; 11319 } else if (ConvType->isVoidType()) { 11320 Diag(Conversion->getLocation(), diag::warn_conv_to_void_not_used) 11321 << ClassType << ConvType; 11322 } 11323 11324 if (FunctionTemplateDecl *ConversionTemplate = 11325 Conversion->getDescribedFunctionTemplate()) { 11326 if (const auto *ConvTypePtr = ConvType->getAs<PointerType>()) { 11327 ConvType = ConvTypePtr->getPointeeType(); 11328 } 11329 if (ConvType->isUndeducedAutoType()) { 11330 Diag(Conversion->getTypeSpecStartLoc(), diag::err_auto_not_allowed) 11331 << getReturnTypeLoc(Conversion).getSourceRange() 11332 << llvm::to_underlying(ConvType->getAs<AutoType>()->getKeyword()) 11333 << /* in declaration of conversion function template= */ 24; 11334 } 11335 11336 return ConversionTemplate; 11337 } 11338 11339 return Conversion; 11340 } 11341 11342 void Sema::CheckExplicitObjectMemberFunction(DeclContext *DC, Declarator &D, 11343 DeclarationName Name, QualType R) { 11344 CheckExplicitObjectMemberFunction(D, Name, R, false, DC); 11345 } 11346 11347 void Sema::CheckExplicitObjectLambda(Declarator &D) { 11348 CheckExplicitObjectMemberFunction(D, {}, {}, true); 11349 } 11350 11351 void Sema::CheckExplicitObjectMemberFunction(Declarator &D, 11352 DeclarationName Name, QualType R, 11353 bool IsLambda, DeclContext *DC) { 11354 if (!D.isFunctionDeclarator()) 11355 return; 11356 11357 DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo(); 11358 if (FTI.NumParams == 0) 11359 return; 11360 ParmVarDecl *ExplicitObjectParam = nullptr; 11361 for (unsigned Idx = 0; Idx < FTI.NumParams; Idx++) { 11362 const auto &ParamInfo = FTI.Params[Idx]; 11363 if (!ParamInfo.Param) 11364 continue; 11365 ParmVarDecl *Param = cast<ParmVarDecl>(ParamInfo.Param); 11366 if (!Param->isExplicitObjectParameter()) 11367 continue; 11368 if (Idx == 0) { 11369 ExplicitObjectParam = Param; 11370 continue; 11371 } else { 11372 Diag(Param->getLocation(), 11373 diag::err_explicit_object_parameter_must_be_first) 11374 << IsLambda << Param->getSourceRange(); 11375 } 11376 } 11377 if (!ExplicitObjectParam) 11378 return; 11379 11380 if (ExplicitObjectParam->hasDefaultArg()) { 11381 Diag(ExplicitObjectParam->getLocation(), 11382 diag::err_explicit_object_default_arg) 11383 << ExplicitObjectParam->getSourceRange(); 11384 } 11385 11386 if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_static) { 11387 Diag(ExplicitObjectParam->getBeginLoc(), 11388 diag::err_explicit_object_parameter_nonmember) 11389 << D.getSourceRange() << /*static=*/0 << IsLambda; 11390 D.setInvalidType(); 11391 } 11392 11393 if (D.getDeclSpec().isVirtualSpecified()) { 11394 Diag(ExplicitObjectParam->getBeginLoc(), 11395 diag::err_explicit_object_parameter_nonmember) 11396 << D.getSourceRange() << /*virtual=*/1 << IsLambda; 11397 D.setInvalidType(); 11398 } 11399 11400 if (IsLambda && FTI.hasMutableQualifier()) { 11401 Diag(ExplicitObjectParam->getBeginLoc(), 11402 diag::err_explicit_object_parameter_mutable) 11403 << D.getSourceRange(); 11404 } 11405 11406 if (IsLambda) 11407 return; 11408 11409 if (!DC || !DC->isRecord()) { 11410 Diag(ExplicitObjectParam->getLocation(), 11411 diag::err_explicit_object_parameter_nonmember) 11412 << D.getSourceRange() << /*non-member=*/2 << IsLambda; 11413 D.setInvalidType(); 11414 return; 11415 } 11416 11417 // CWG2674: constructors and destructors cannot have explicit parameters. 11418 if (Name.getNameKind() == DeclarationName::CXXConstructorName || 11419 Name.getNameKind() == DeclarationName::CXXDestructorName) { 11420 Diag(ExplicitObjectParam->getBeginLoc(), 11421 diag::err_explicit_object_parameter_constructor) 11422 << (Name.getNameKind() == DeclarationName::CXXDestructorName) 11423 << D.getSourceRange(); 11424 D.setInvalidType(); 11425 } 11426 } 11427 11428 namespace { 11429 /// Utility class to accumulate and print a diagnostic listing the invalid 11430 /// specifier(s) on a declaration. 11431 struct BadSpecifierDiagnoser { 11432 BadSpecifierDiagnoser(Sema &S, SourceLocation Loc, unsigned DiagID) 11433 : S(S), Diagnostic(S.Diag(Loc, DiagID)) {} 11434 ~BadSpecifierDiagnoser() { 11435 Diagnostic << Specifiers; 11436 } 11437 11438 template<typename T> void check(SourceLocation SpecLoc, T Spec) { 11439 return check(SpecLoc, DeclSpec::getSpecifierName(Spec)); 11440 } 11441 void check(SourceLocation SpecLoc, DeclSpec::TST Spec) { 11442 return check(SpecLoc, 11443 DeclSpec::getSpecifierName(Spec, S.getPrintingPolicy())); 11444 } 11445 void check(SourceLocation SpecLoc, const char *Spec) { 11446 if (SpecLoc.isInvalid()) return; 11447 Diagnostic << SourceRange(SpecLoc, SpecLoc); 11448 if (!Specifiers.empty()) Specifiers += " "; 11449 Specifiers += Spec; 11450 } 11451 11452 Sema &S; 11453 Sema::SemaDiagnosticBuilder Diagnostic; 11454 std::string Specifiers; 11455 }; 11456 } 11457 11458 /// Check the validity of a declarator that we parsed for a deduction-guide. 11459 /// These aren't actually declarators in the grammar, so we need to check that 11460 /// the user didn't specify any pieces that are not part of the deduction-guide 11461 /// grammar. Return true on invalid deduction-guide. 11462 bool Sema::CheckDeductionGuideDeclarator(Declarator &D, QualType &R, 11463 StorageClass &SC) { 11464 TemplateName GuidedTemplate = D.getName().TemplateName.get().get(); 11465 TemplateDecl *GuidedTemplateDecl = GuidedTemplate.getAsTemplateDecl(); 11466 assert(GuidedTemplateDecl && "missing template decl for deduction guide"); 11467 11468 // C++ [temp.deduct.guide]p3: 11469 // A deduction-gide shall be declared in the same scope as the 11470 // corresponding class template. 11471 if (!CurContext->getRedeclContext()->Equals( 11472 GuidedTemplateDecl->getDeclContext()->getRedeclContext())) { 11473 Diag(D.getIdentifierLoc(), diag::err_deduction_guide_wrong_scope) 11474 << GuidedTemplateDecl; 11475 NoteTemplateLocation(*GuidedTemplateDecl); 11476 } 11477 11478 auto &DS = D.getMutableDeclSpec(); 11479 // We leave 'friend' and 'virtual' to be rejected in the normal way. 11480 if (DS.hasTypeSpecifier() || DS.getTypeQualifiers() || 11481 DS.getStorageClassSpecLoc().isValid() || DS.isInlineSpecified() || 11482 DS.isNoreturnSpecified() || DS.hasConstexprSpecifier()) { 11483 BadSpecifierDiagnoser Diagnoser( 11484 *this, D.getIdentifierLoc(), 11485 diag::err_deduction_guide_invalid_specifier); 11486 11487 Diagnoser.check(DS.getStorageClassSpecLoc(), DS.getStorageClassSpec()); 11488 DS.ClearStorageClassSpecs(); 11489 SC = SC_None; 11490 11491 // 'explicit' is permitted. 11492 Diagnoser.check(DS.getInlineSpecLoc(), "inline"); 11493 Diagnoser.check(DS.getNoreturnSpecLoc(), "_Noreturn"); 11494 Diagnoser.check(DS.getConstexprSpecLoc(), "constexpr"); 11495 DS.ClearConstexprSpec(); 11496 11497 Diagnoser.check(DS.getConstSpecLoc(), "const"); 11498 Diagnoser.check(DS.getRestrictSpecLoc(), "__restrict"); 11499 Diagnoser.check(DS.getVolatileSpecLoc(), "volatile"); 11500 Diagnoser.check(DS.getAtomicSpecLoc(), "_Atomic"); 11501 Diagnoser.check(DS.getUnalignedSpecLoc(), "__unaligned"); 11502 DS.ClearTypeQualifiers(); 11503 11504 Diagnoser.check(DS.getTypeSpecComplexLoc(), DS.getTypeSpecComplex()); 11505 Diagnoser.check(DS.getTypeSpecSignLoc(), DS.getTypeSpecSign()); 11506 Diagnoser.check(DS.getTypeSpecWidthLoc(), DS.getTypeSpecWidth()); 11507 Diagnoser.check(DS.getTypeSpecTypeLoc(), DS.getTypeSpecType()); 11508 DS.ClearTypeSpecType(); 11509 } 11510 11511 if (D.isInvalidType()) 11512 return true; 11513 11514 // Check the declarator is simple enough. 11515 bool FoundFunction = false; 11516 for (const DeclaratorChunk &Chunk : llvm::reverse(D.type_objects())) { 11517 if (Chunk.Kind == DeclaratorChunk::Paren) 11518 continue; 11519 if (Chunk.Kind != DeclaratorChunk::Function || FoundFunction) { 11520 Diag(D.getDeclSpec().getBeginLoc(), 11521 diag::err_deduction_guide_with_complex_decl) 11522 << D.getSourceRange(); 11523 break; 11524 } 11525 if (!Chunk.Fun.hasTrailingReturnType()) 11526 return Diag(D.getName().getBeginLoc(), 11527 diag::err_deduction_guide_no_trailing_return_type); 11528 11529 // Check that the return type is written as a specialization of 11530 // the template specified as the deduction-guide's name. 11531 // The template name may not be qualified. [temp.deduct.guide] 11532 ParsedType TrailingReturnType = Chunk.Fun.getTrailingReturnType(); 11533 TypeSourceInfo *TSI = nullptr; 11534 QualType RetTy = GetTypeFromParser(TrailingReturnType, &TSI); 11535 assert(TSI && "deduction guide has valid type but invalid return type?"); 11536 bool AcceptableReturnType = false; 11537 bool MightInstantiateToSpecialization = false; 11538 if (auto RetTST = 11539 TSI->getTypeLoc().getAsAdjusted<TemplateSpecializationTypeLoc>()) { 11540 TemplateName SpecifiedName = RetTST.getTypePtr()->getTemplateName(); 11541 bool TemplateMatches = 11542 Context.hasSameTemplateName(SpecifiedName, GuidedTemplate); 11543 auto TKind = SpecifiedName.getKind(); 11544 // A Using TemplateName can't actually be valid (either it's qualified, or 11545 // we're in the wrong scope). But we have diagnosed these problems 11546 // already. 11547 bool SimplyWritten = TKind == TemplateName::Template || 11548 TKind == TemplateName::UsingTemplate; 11549 if (SimplyWritten && TemplateMatches) 11550 AcceptableReturnType = true; 11551 else { 11552 // This could still instantiate to the right type, unless we know it 11553 // names the wrong class template. 11554 auto *TD = SpecifiedName.getAsTemplateDecl(); 11555 MightInstantiateToSpecialization = !(TD && isa<ClassTemplateDecl>(TD) && 11556 !TemplateMatches); 11557 } 11558 } else if (!RetTy.hasQualifiers() && RetTy->isDependentType()) { 11559 MightInstantiateToSpecialization = true; 11560 } 11561 11562 if (!AcceptableReturnType) 11563 return Diag(TSI->getTypeLoc().getBeginLoc(), 11564 diag::err_deduction_guide_bad_trailing_return_type) 11565 << GuidedTemplate << TSI->getType() 11566 << MightInstantiateToSpecialization 11567 << TSI->getTypeLoc().getSourceRange(); 11568 11569 // Keep going to check that we don't have any inner declarator pieces (we 11570 // could still have a function returning a pointer to a function). 11571 FoundFunction = true; 11572 } 11573 11574 if (D.isFunctionDefinition()) 11575 // we can still create a valid deduction guide here. 11576 Diag(D.getIdentifierLoc(), diag::err_deduction_guide_defines_function); 11577 return false; 11578 } 11579 11580 //===----------------------------------------------------------------------===// 11581 // Namespace Handling 11582 //===----------------------------------------------------------------------===// 11583 11584 /// Diagnose a mismatch in 'inline' qualifiers when a namespace is 11585 /// reopened. 11586 static void DiagnoseNamespaceInlineMismatch(Sema &S, SourceLocation KeywordLoc, 11587 SourceLocation Loc, 11588 IdentifierInfo *II, bool *IsInline, 11589 NamespaceDecl *PrevNS) { 11590 assert(*IsInline != PrevNS->isInline()); 11591 11592 // 'inline' must appear on the original definition, but not necessarily 11593 // on all extension definitions, so the note should point to the first 11594 // definition to avoid confusion. 11595 PrevNS = PrevNS->getFirstDecl(); 11596 11597 if (PrevNS->isInline()) 11598 // The user probably just forgot the 'inline', so suggest that it 11599 // be added back. 11600 S.Diag(Loc, diag::warn_inline_namespace_reopened_noninline) 11601 << FixItHint::CreateInsertion(KeywordLoc, "inline "); 11602 else 11603 S.Diag(Loc, diag::err_inline_namespace_mismatch); 11604 11605 S.Diag(PrevNS->getLocation(), diag::note_previous_definition); 11606 *IsInline = PrevNS->isInline(); 11607 } 11608 11609 /// ActOnStartNamespaceDef - This is called at the start of a namespace 11610 /// definition. 11611 Decl *Sema::ActOnStartNamespaceDef(Scope *NamespcScope, 11612 SourceLocation InlineLoc, 11613 SourceLocation NamespaceLoc, 11614 SourceLocation IdentLoc, IdentifierInfo *II, 11615 SourceLocation LBrace, 11616 const ParsedAttributesView &AttrList, 11617 UsingDirectiveDecl *&UD, bool IsNested) { 11618 SourceLocation StartLoc = InlineLoc.isValid() ? InlineLoc : NamespaceLoc; 11619 // For anonymous namespace, take the location of the left brace. 11620 SourceLocation Loc = II ? IdentLoc : LBrace; 11621 bool IsInline = InlineLoc.isValid(); 11622 bool IsInvalid = false; 11623 bool IsStd = false; 11624 bool AddToKnown = false; 11625 Scope *DeclRegionScope = NamespcScope->getParent(); 11626 11627 NamespaceDecl *PrevNS = nullptr; 11628 if (II) { 11629 // C++ [namespace.std]p7: 11630 // A translation unit shall not declare namespace std to be an inline 11631 // namespace (9.8.2). 11632 // 11633 // Precondition: the std namespace is in the file scope and is declared to 11634 // be inline 11635 auto DiagnoseInlineStdNS = [&]() { 11636 assert(IsInline && II->isStr("std") && 11637 CurContext->getRedeclContext()->isTranslationUnit() && 11638 "Precondition of DiagnoseInlineStdNS not met"); 11639 Diag(InlineLoc, diag::err_inline_namespace_std) 11640 << SourceRange(InlineLoc, InlineLoc.getLocWithOffset(6)); 11641 IsInline = false; 11642 }; 11643 // C++ [namespace.def]p2: 11644 // The identifier in an original-namespace-definition shall not 11645 // have been previously defined in the declarative region in 11646 // which the original-namespace-definition appears. The 11647 // identifier in an original-namespace-definition is the name of 11648 // the namespace. Subsequently in that declarative region, it is 11649 // treated as an original-namespace-name. 11650 // 11651 // Since namespace names are unique in their scope, and we don't 11652 // look through using directives, just look for any ordinary names 11653 // as if by qualified name lookup. 11654 LookupResult R(*this, II, IdentLoc, LookupOrdinaryName, 11655 ForExternalRedeclaration); 11656 LookupQualifiedName(R, CurContext->getRedeclContext()); 11657 NamedDecl *PrevDecl = 11658 R.isSingleResult() ? R.getRepresentativeDecl() : nullptr; 11659 PrevNS = dyn_cast_or_null<NamespaceDecl>(PrevDecl); 11660 11661 if (PrevNS) { 11662 // This is an extended namespace definition. 11663 if (IsInline && II->isStr("std") && 11664 CurContext->getRedeclContext()->isTranslationUnit()) 11665 DiagnoseInlineStdNS(); 11666 else if (IsInline != PrevNS->isInline()) 11667 DiagnoseNamespaceInlineMismatch(*this, NamespaceLoc, Loc, II, 11668 &IsInline, PrevNS); 11669 } else if (PrevDecl) { 11670 // This is an invalid name redefinition. 11671 Diag(Loc, diag::err_redefinition_different_kind) 11672 << II; 11673 Diag(PrevDecl->getLocation(), diag::note_previous_definition); 11674 IsInvalid = true; 11675 // Continue on to push Namespc as current DeclContext and return it. 11676 } else if (II->isStr("std") && 11677 CurContext->getRedeclContext()->isTranslationUnit()) { 11678 if (IsInline) 11679 DiagnoseInlineStdNS(); 11680 // This is the first "real" definition of the namespace "std", so update 11681 // our cache of the "std" namespace to point at this definition. 11682 PrevNS = getStdNamespace(); 11683 IsStd = true; 11684 AddToKnown = !IsInline; 11685 } else { 11686 // We've seen this namespace for the first time. 11687 AddToKnown = !IsInline; 11688 } 11689 } else { 11690 // Anonymous namespaces. 11691 11692 // Determine whether the parent already has an anonymous namespace. 11693 DeclContext *Parent = CurContext->getRedeclContext(); 11694 if (TranslationUnitDecl *TU = dyn_cast<TranslationUnitDecl>(Parent)) { 11695 PrevNS = TU->getAnonymousNamespace(); 11696 } else { 11697 NamespaceDecl *ND = cast<NamespaceDecl>(Parent); 11698 PrevNS = ND->getAnonymousNamespace(); 11699 } 11700 11701 if (PrevNS && IsInline != PrevNS->isInline()) 11702 DiagnoseNamespaceInlineMismatch(*this, NamespaceLoc, NamespaceLoc, II, 11703 &IsInline, PrevNS); 11704 } 11705 11706 NamespaceDecl *Namespc = NamespaceDecl::Create( 11707 Context, CurContext, IsInline, StartLoc, Loc, II, PrevNS, IsNested); 11708 if (IsInvalid) 11709 Namespc->setInvalidDecl(); 11710 11711 ProcessDeclAttributeList(DeclRegionScope, Namespc, AttrList); 11712 AddPragmaAttributes(DeclRegionScope, Namespc); 11713 11714 // FIXME: Should we be merging attributes? 11715 if (const VisibilityAttr *Attr = Namespc->getAttr<VisibilityAttr>()) 11716 PushNamespaceVisibilityAttr(Attr, Loc); 11717 11718 if (IsStd) 11719 StdNamespace = Namespc; 11720 if (AddToKnown) 11721 KnownNamespaces[Namespc] = false; 11722 11723 if (II) { 11724 PushOnScopeChains(Namespc, DeclRegionScope); 11725 } else { 11726 // Link the anonymous namespace into its parent. 11727 DeclContext *Parent = CurContext->getRedeclContext(); 11728 if (TranslationUnitDecl *TU = dyn_cast<TranslationUnitDecl>(Parent)) { 11729 TU->setAnonymousNamespace(Namespc); 11730 } else { 11731 cast<NamespaceDecl>(Parent)->setAnonymousNamespace(Namespc); 11732 } 11733 11734 CurContext->addDecl(Namespc); 11735 11736 // C++ [namespace.unnamed]p1. An unnamed-namespace-definition 11737 // behaves as if it were replaced by 11738 // namespace unique { /* empty body */ } 11739 // using namespace unique; 11740 // namespace unique { namespace-body } 11741 // where all occurrences of 'unique' in a translation unit are 11742 // replaced by the same identifier and this identifier differs 11743 // from all other identifiers in the entire program. 11744 11745 // We just create the namespace with an empty name and then add an 11746 // implicit using declaration, just like the standard suggests. 11747 // 11748 // CodeGen enforces the "universally unique" aspect by giving all 11749 // declarations semantically contained within an anonymous 11750 // namespace internal linkage. 11751 11752 if (!PrevNS) { 11753 UD = UsingDirectiveDecl::Create(Context, Parent, 11754 /* 'using' */ LBrace, 11755 /* 'namespace' */ SourceLocation(), 11756 /* qualifier */ NestedNameSpecifierLoc(), 11757 /* identifier */ SourceLocation(), 11758 Namespc, 11759 /* Ancestor */ Parent); 11760 UD->setImplicit(); 11761 Parent->addDecl(UD); 11762 } 11763 } 11764 11765 ActOnDocumentableDecl(Namespc); 11766 11767 // Although we could have an invalid decl (i.e. the namespace name is a 11768 // redefinition), push it as current DeclContext and try to continue parsing. 11769 // FIXME: We should be able to push Namespc here, so that the each DeclContext 11770 // for the namespace has the declarations that showed up in that particular 11771 // namespace definition. 11772 PushDeclContext(NamespcScope, Namespc); 11773 return Namespc; 11774 } 11775 11776 /// getNamespaceDecl - Returns the namespace a decl represents. If the decl 11777 /// is a namespace alias, returns the namespace it points to. 11778 static inline NamespaceDecl *getNamespaceDecl(NamedDecl *D) { 11779 if (NamespaceAliasDecl *AD = dyn_cast_or_null<NamespaceAliasDecl>(D)) 11780 return AD->getNamespace(); 11781 return dyn_cast_or_null<NamespaceDecl>(D); 11782 } 11783 11784 /// ActOnFinishNamespaceDef - This callback is called after a namespace is 11785 /// exited. Decl is the DeclTy returned by ActOnStartNamespaceDef. 11786 void Sema::ActOnFinishNamespaceDef(Decl *Dcl, SourceLocation RBrace) { 11787 NamespaceDecl *Namespc = dyn_cast_or_null<NamespaceDecl>(Dcl); 11788 assert(Namespc && "Invalid parameter, expected NamespaceDecl"); 11789 Namespc->setRBraceLoc(RBrace); 11790 PopDeclContext(); 11791 if (Namespc->hasAttr<VisibilityAttr>()) 11792 PopPragmaVisibility(true, RBrace); 11793 // If this namespace contains an export-declaration, export it now. 11794 if (DeferredExportedNamespaces.erase(Namespc)) 11795 Dcl->setModuleOwnershipKind(Decl::ModuleOwnershipKind::VisibleWhenImported); 11796 } 11797 11798 CXXRecordDecl *Sema::getStdBadAlloc() const { 11799 return cast_or_null<CXXRecordDecl>( 11800 StdBadAlloc.get(Context.getExternalSource())); 11801 } 11802 11803 EnumDecl *Sema::getStdAlignValT() const { 11804 return cast_or_null<EnumDecl>(StdAlignValT.get(Context.getExternalSource())); 11805 } 11806 11807 NamespaceDecl *Sema::getStdNamespace() const { 11808 return cast_or_null<NamespaceDecl>( 11809 StdNamespace.get(Context.getExternalSource())); 11810 } 11811 namespace { 11812 11813 enum UnsupportedSTLSelect { 11814 USS_InvalidMember, 11815 USS_MissingMember, 11816 USS_NonTrivial, 11817 USS_Other 11818 }; 11819 11820 struct InvalidSTLDiagnoser { 11821 Sema &S; 11822 SourceLocation Loc; 11823 QualType TyForDiags; 11824 11825 QualType operator()(UnsupportedSTLSelect Sel = USS_Other, StringRef Name = "", 11826 const VarDecl *VD = nullptr) { 11827 { 11828 auto D = S.Diag(Loc, diag::err_std_compare_type_not_supported) 11829 << TyForDiags << ((int)Sel); 11830 if (Sel == USS_InvalidMember || Sel == USS_MissingMember) { 11831 assert(!Name.empty()); 11832 D << Name; 11833 } 11834 } 11835 if (Sel == USS_InvalidMember) { 11836 S.Diag(VD->getLocation(), diag::note_var_declared_here) 11837 << VD << VD->getSourceRange(); 11838 } 11839 return QualType(); 11840 } 11841 }; 11842 } // namespace 11843 11844 QualType Sema::CheckComparisonCategoryType(ComparisonCategoryType Kind, 11845 SourceLocation Loc, 11846 ComparisonCategoryUsage Usage) { 11847 assert(getLangOpts().CPlusPlus && 11848 "Looking for comparison category type outside of C++."); 11849 11850 // Use an elaborated type for diagnostics which has a name containing the 11851 // prepended 'std' namespace but not any inline namespace names. 11852 auto TyForDiags = [&](ComparisonCategoryInfo *Info) { 11853 auto *NNS = 11854 NestedNameSpecifier::Create(Context, nullptr, getStdNamespace()); 11855 return Context.getElaboratedType(ElaboratedTypeKeyword::None, NNS, 11856 Info->getType()); 11857 }; 11858 11859 // Check if we've already successfully checked the comparison category type 11860 // before. If so, skip checking it again. 11861 ComparisonCategoryInfo *Info = Context.CompCategories.lookupInfo(Kind); 11862 if (Info && FullyCheckedComparisonCategories[static_cast<unsigned>(Kind)]) { 11863 // The only thing we need to check is that the type has a reachable 11864 // definition in the current context. 11865 if (RequireCompleteType(Loc, TyForDiags(Info), diag::err_incomplete_type)) 11866 return QualType(); 11867 11868 return Info->getType(); 11869 } 11870 11871 // If lookup failed 11872 if (!Info) { 11873 std::string NameForDiags = "std::"; 11874 NameForDiags += ComparisonCategories::getCategoryString(Kind); 11875 Diag(Loc, diag::err_implied_comparison_category_type_not_found) 11876 << NameForDiags << (int)Usage; 11877 return QualType(); 11878 } 11879 11880 assert(Info->Kind == Kind); 11881 assert(Info->Record); 11882 11883 // Update the Record decl in case we encountered a forward declaration on our 11884 // first pass. FIXME: This is a bit of a hack. 11885 if (Info->Record->hasDefinition()) 11886 Info->Record = Info->Record->getDefinition(); 11887 11888 if (RequireCompleteType(Loc, TyForDiags(Info), diag::err_incomplete_type)) 11889 return QualType(); 11890 11891 InvalidSTLDiagnoser UnsupportedSTLError{*this, Loc, TyForDiags(Info)}; 11892 11893 if (!Info->Record->isTriviallyCopyable()) 11894 return UnsupportedSTLError(USS_NonTrivial); 11895 11896 for (const CXXBaseSpecifier &BaseSpec : Info->Record->bases()) { 11897 CXXRecordDecl *Base = BaseSpec.getType()->getAsCXXRecordDecl(); 11898 // Tolerate empty base classes. 11899 if (Base->isEmpty()) 11900 continue; 11901 // Reject STL implementations which have at least one non-empty base. 11902 return UnsupportedSTLError(); 11903 } 11904 11905 // Check that the STL has implemented the types using a single integer field. 11906 // This expectation allows better codegen for builtin operators. We require: 11907 // (1) The class has exactly one field. 11908 // (2) The field is an integral or enumeration type. 11909 auto FIt = Info->Record->field_begin(), FEnd = Info->Record->field_end(); 11910 if (std::distance(FIt, FEnd) != 1 || 11911 !FIt->getType()->isIntegralOrEnumerationType()) { 11912 return UnsupportedSTLError(); 11913 } 11914 11915 // Build each of the require values and store them in Info. 11916 for (ComparisonCategoryResult CCR : 11917 ComparisonCategories::getPossibleResultsForType(Kind)) { 11918 StringRef MemName = ComparisonCategories::getResultString(CCR); 11919 ComparisonCategoryInfo::ValueInfo *ValInfo = Info->lookupValueInfo(CCR); 11920 11921 if (!ValInfo) 11922 return UnsupportedSTLError(USS_MissingMember, MemName); 11923 11924 VarDecl *VD = ValInfo->VD; 11925 assert(VD && "should not be null!"); 11926 11927 // Attempt to diagnose reasons why the STL definition of this type 11928 // might be foobar, including it failing to be a constant expression. 11929 // TODO Handle more ways the lookup or result can be invalid. 11930 if (!VD->isStaticDataMember() || 11931 !VD->isUsableInConstantExpressions(Context)) 11932 return UnsupportedSTLError(USS_InvalidMember, MemName, VD); 11933 11934 // Attempt to evaluate the var decl as a constant expression and extract 11935 // the value of its first field as a ICE. If this fails, the STL 11936 // implementation is not supported. 11937 if (!ValInfo->hasValidIntValue()) 11938 return UnsupportedSTLError(); 11939 11940 MarkVariableReferenced(Loc, VD); 11941 } 11942 11943 // We've successfully built the required types and expressions. Update 11944 // the cache and return the newly cached value. 11945 FullyCheckedComparisonCategories[static_cast<unsigned>(Kind)] = true; 11946 return Info->getType(); 11947 } 11948 11949 /// Retrieve the special "std" namespace, which may require us to 11950 /// implicitly define the namespace. 11951 NamespaceDecl *Sema::getOrCreateStdNamespace() { 11952 if (!StdNamespace) { 11953 // The "std" namespace has not yet been defined, so build one implicitly. 11954 StdNamespace = NamespaceDecl::Create( 11955 Context, Context.getTranslationUnitDecl(), 11956 /*Inline=*/false, SourceLocation(), SourceLocation(), 11957 &PP.getIdentifierTable().get("std"), 11958 /*PrevDecl=*/nullptr, /*Nested=*/false); 11959 getStdNamespace()->setImplicit(true); 11960 // We want the created NamespaceDecl to be available for redeclaration 11961 // lookups, but not for regular name lookups. 11962 Context.getTranslationUnitDecl()->addDecl(getStdNamespace()); 11963 getStdNamespace()->clearIdentifierNamespace(); 11964 } 11965 11966 return getStdNamespace(); 11967 } 11968 11969 bool Sema::isStdInitializerList(QualType Ty, QualType *Element) { 11970 assert(getLangOpts().CPlusPlus && 11971 "Looking for std::initializer_list outside of C++."); 11972 11973 // We're looking for implicit instantiations of 11974 // template <typename E> class std::initializer_list. 11975 11976 if (!StdNamespace) // If we haven't seen namespace std yet, this can't be it. 11977 return false; 11978 11979 ClassTemplateDecl *Template = nullptr; 11980 const TemplateArgument *Arguments = nullptr; 11981 11982 if (const RecordType *RT = Ty->getAs<RecordType>()) { 11983 11984 ClassTemplateSpecializationDecl *Specialization = 11985 dyn_cast<ClassTemplateSpecializationDecl>(RT->getDecl()); 11986 if (!Specialization) 11987 return false; 11988 11989 Template = Specialization->getSpecializedTemplate(); 11990 Arguments = Specialization->getTemplateArgs().data(); 11991 } else if (const TemplateSpecializationType *TST = 11992 Ty->getAs<TemplateSpecializationType>()) { 11993 Template = dyn_cast_or_null<ClassTemplateDecl>( 11994 TST->getTemplateName().getAsTemplateDecl()); 11995 Arguments = TST->template_arguments().begin(); 11996 } 11997 if (!Template) 11998 return false; 11999 12000 if (!StdInitializerList) { 12001 // Haven't recognized std::initializer_list yet, maybe this is it. 12002 CXXRecordDecl *TemplateClass = Template->getTemplatedDecl(); 12003 if (TemplateClass->getIdentifier() != 12004 &PP.getIdentifierTable().get("initializer_list") || 12005 !getStdNamespace()->InEnclosingNamespaceSetOf( 12006 TemplateClass->getDeclContext())) 12007 return false; 12008 // This is a template called std::initializer_list, but is it the right 12009 // template? 12010 TemplateParameterList *Params = Template->getTemplateParameters(); 12011 if (Params->getMinRequiredArguments() != 1) 12012 return false; 12013 if (!isa<TemplateTypeParmDecl>(Params->getParam(0))) 12014 return false; 12015 12016 // It's the right template. 12017 StdInitializerList = Template; 12018 } 12019 12020 if (Template->getCanonicalDecl() != StdInitializerList->getCanonicalDecl()) 12021 return false; 12022 12023 // This is an instance of std::initializer_list. Find the argument type. 12024 if (Element) 12025 *Element = Arguments[0].getAsType(); 12026 return true; 12027 } 12028 12029 static ClassTemplateDecl *LookupStdInitializerList(Sema &S, SourceLocation Loc){ 12030 NamespaceDecl *Std = S.getStdNamespace(); 12031 if (!Std) { 12032 S.Diag(Loc, diag::err_implied_std_initializer_list_not_found); 12033 return nullptr; 12034 } 12035 12036 LookupResult Result(S, &S.PP.getIdentifierTable().get("initializer_list"), 12037 Loc, Sema::LookupOrdinaryName); 12038 if (!S.LookupQualifiedName(Result, Std)) { 12039 S.Diag(Loc, diag::err_implied_std_initializer_list_not_found); 12040 return nullptr; 12041 } 12042 ClassTemplateDecl *Template = Result.getAsSingle<ClassTemplateDecl>(); 12043 if (!Template) { 12044 Result.suppressDiagnostics(); 12045 // We found something weird. Complain about the first thing we found. 12046 NamedDecl *Found = *Result.begin(); 12047 S.Diag(Found->getLocation(), diag::err_malformed_std_initializer_list); 12048 return nullptr; 12049 } 12050 12051 // We found some template called std::initializer_list. Now verify that it's 12052 // correct. 12053 TemplateParameterList *Params = Template->getTemplateParameters(); 12054 if (Params->getMinRequiredArguments() != 1 || 12055 !isa<TemplateTypeParmDecl>(Params->getParam(0))) { 12056 S.Diag(Template->getLocation(), diag::err_malformed_std_initializer_list); 12057 return nullptr; 12058 } 12059 12060 return Template; 12061 } 12062 12063 QualType Sema::BuildStdInitializerList(QualType Element, SourceLocation Loc) { 12064 if (!StdInitializerList) { 12065 StdInitializerList = LookupStdInitializerList(*this, Loc); 12066 if (!StdInitializerList) 12067 return QualType(); 12068 } 12069 12070 TemplateArgumentListInfo Args(Loc, Loc); 12071 Args.addArgument(TemplateArgumentLoc(TemplateArgument(Element), 12072 Context.getTrivialTypeSourceInfo(Element, 12073 Loc))); 12074 return Context.getElaboratedType( 12075 ElaboratedTypeKeyword::None, 12076 NestedNameSpecifier::Create(Context, nullptr, getStdNamespace()), 12077 CheckTemplateIdType(TemplateName(StdInitializerList), Loc, Args)); 12078 } 12079 12080 bool Sema::isInitListConstructor(const FunctionDecl *Ctor) { 12081 // C++ [dcl.init.list]p2: 12082 // A constructor is an initializer-list constructor if its first parameter 12083 // is of type std::initializer_list<E> or reference to possibly cv-qualified 12084 // std::initializer_list<E> for some type E, and either there are no other 12085 // parameters or else all other parameters have default arguments. 12086 if (!Ctor->hasOneParamOrDefaultArgs()) 12087 return false; 12088 12089 QualType ArgType = Ctor->getParamDecl(0)->getType(); 12090 if (const ReferenceType *RT = ArgType->getAs<ReferenceType>()) 12091 ArgType = RT->getPointeeType().getUnqualifiedType(); 12092 12093 return isStdInitializerList(ArgType, nullptr); 12094 } 12095 12096 /// Determine whether a using statement is in a context where it will be 12097 /// apply in all contexts. 12098 static bool IsUsingDirectiveInToplevelContext(DeclContext *CurContext) { 12099 switch (CurContext->getDeclKind()) { 12100 case Decl::TranslationUnit: 12101 return true; 12102 case Decl::LinkageSpec: 12103 return IsUsingDirectiveInToplevelContext(CurContext->getParent()); 12104 default: 12105 return false; 12106 } 12107 } 12108 12109 namespace { 12110 12111 // Callback to only accept typo corrections that are namespaces. 12112 class NamespaceValidatorCCC final : public CorrectionCandidateCallback { 12113 public: 12114 bool ValidateCandidate(const TypoCorrection &candidate) override { 12115 if (NamedDecl *ND = candidate.getCorrectionDecl()) 12116 return isa<NamespaceDecl>(ND) || isa<NamespaceAliasDecl>(ND); 12117 return false; 12118 } 12119 12120 std::unique_ptr<CorrectionCandidateCallback> clone() override { 12121 return std::make_unique<NamespaceValidatorCCC>(*this); 12122 } 12123 }; 12124 12125 } 12126 12127 static void DiagnoseInvisibleNamespace(const TypoCorrection &Corrected, 12128 Sema &S) { 12129 auto *ND = cast<NamespaceDecl>(Corrected.getFoundDecl()); 12130 Module *M = ND->getOwningModule(); 12131 assert(M && "hidden namespace definition not in a module?"); 12132 12133 if (M->isExplicitGlobalModule()) 12134 S.Diag(Corrected.getCorrectionRange().getBegin(), 12135 diag::err_module_unimported_use_header) 12136 << (int)Sema::MissingImportKind::Declaration << Corrected.getFoundDecl() 12137 << /*Header Name*/ false; 12138 else 12139 S.Diag(Corrected.getCorrectionRange().getBegin(), 12140 diag::err_module_unimported_use) 12141 << (int)Sema::MissingImportKind::Declaration << Corrected.getFoundDecl() 12142 << M->getTopLevelModuleName(); 12143 } 12144 12145 static bool TryNamespaceTypoCorrection(Sema &S, LookupResult &R, Scope *Sc, 12146 CXXScopeSpec &SS, 12147 SourceLocation IdentLoc, 12148 IdentifierInfo *Ident) { 12149 R.clear(); 12150 NamespaceValidatorCCC CCC{}; 12151 if (TypoCorrection Corrected = 12152 S.CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), Sc, &SS, CCC, 12153 Sema::CTK_ErrorRecovery)) { 12154 // Generally we find it is confusing more than helpful to diagnose the 12155 // invisible namespace. 12156 // See https://github.com/llvm/llvm-project/issues/73893. 12157 // 12158 // However, we should diagnose when the users are trying to using an 12159 // invisible namespace. So we handle the case specially here. 12160 if (isa_and_nonnull<NamespaceDecl>(Corrected.getFoundDecl()) && 12161 Corrected.requiresImport()) { 12162 DiagnoseInvisibleNamespace(Corrected, S); 12163 } else if (DeclContext *DC = S.computeDeclContext(SS, false)) { 12164 std::string CorrectedStr(Corrected.getAsString(S.getLangOpts())); 12165 bool DroppedSpecifier = Corrected.WillReplaceSpecifier() && 12166 Ident->getName().equals(CorrectedStr); 12167 S.diagnoseTypo(Corrected, 12168 S.PDiag(diag::err_using_directive_member_suggest) 12169 << Ident << DC << DroppedSpecifier << SS.getRange(), 12170 S.PDiag(diag::note_namespace_defined_here)); 12171 } else { 12172 S.diagnoseTypo(Corrected, 12173 S.PDiag(diag::err_using_directive_suggest) << Ident, 12174 S.PDiag(diag::note_namespace_defined_here)); 12175 } 12176 R.addDecl(Corrected.getFoundDecl()); 12177 return true; 12178 } 12179 return false; 12180 } 12181 12182 Decl *Sema::ActOnUsingDirective(Scope *S, SourceLocation UsingLoc, 12183 SourceLocation NamespcLoc, CXXScopeSpec &SS, 12184 SourceLocation IdentLoc, 12185 IdentifierInfo *NamespcName, 12186 const ParsedAttributesView &AttrList) { 12187 assert(!SS.isInvalid() && "Invalid CXXScopeSpec."); 12188 assert(NamespcName && "Invalid NamespcName."); 12189 assert(IdentLoc.isValid() && "Invalid NamespceName location."); 12190 12191 // This can only happen along a recovery path. 12192 while (S->isTemplateParamScope()) 12193 S = S->getParent(); 12194 assert(S->getFlags() & Scope::DeclScope && "Invalid Scope."); 12195 12196 UsingDirectiveDecl *UDir = nullptr; 12197 NestedNameSpecifier *Qualifier = nullptr; 12198 if (SS.isSet()) 12199 Qualifier = SS.getScopeRep(); 12200 12201 // Lookup namespace name. 12202 LookupResult R(*this, NamespcName, IdentLoc, LookupNamespaceName); 12203 LookupParsedName(R, S, &SS); 12204 if (R.isAmbiguous()) 12205 return nullptr; 12206 12207 if (R.empty()) { 12208 R.clear(); 12209 // Allow "using namespace std;" or "using namespace ::std;" even if 12210 // "std" hasn't been defined yet, for GCC compatibility. 12211 if ((!Qualifier || Qualifier->getKind() == NestedNameSpecifier::Global) && 12212 NamespcName->isStr("std")) { 12213 Diag(IdentLoc, diag::ext_using_undefined_std); 12214 R.addDecl(getOrCreateStdNamespace()); 12215 R.resolveKind(); 12216 } 12217 // Otherwise, attempt typo correction. 12218 else TryNamespaceTypoCorrection(*this, R, S, SS, IdentLoc, NamespcName); 12219 } 12220 12221 if (!R.empty()) { 12222 NamedDecl *Named = R.getRepresentativeDecl(); 12223 NamespaceDecl *NS = R.getAsSingle<NamespaceDecl>(); 12224 assert(NS && "expected namespace decl"); 12225 12226 // The use of a nested name specifier may trigger deprecation warnings. 12227 DiagnoseUseOfDecl(Named, IdentLoc); 12228 12229 // C++ [namespace.udir]p1: 12230 // A using-directive specifies that the names in the nominated 12231 // namespace can be used in the scope in which the 12232 // using-directive appears after the using-directive. During 12233 // unqualified name lookup (3.4.1), the names appear as if they 12234 // were declared in the nearest enclosing namespace which 12235 // contains both the using-directive and the nominated 12236 // namespace. [Note: in this context, "contains" means "contains 12237 // directly or indirectly". ] 12238 12239 // Find enclosing context containing both using-directive and 12240 // nominated namespace. 12241 DeclContext *CommonAncestor = NS; 12242 while (CommonAncestor && !CommonAncestor->Encloses(CurContext)) 12243 CommonAncestor = CommonAncestor->getParent(); 12244 12245 UDir = UsingDirectiveDecl::Create(Context, CurContext, UsingLoc, NamespcLoc, 12246 SS.getWithLocInContext(Context), 12247 IdentLoc, Named, CommonAncestor); 12248 12249 if (IsUsingDirectiveInToplevelContext(CurContext) && 12250 !SourceMgr.isInMainFile(SourceMgr.getExpansionLoc(IdentLoc))) { 12251 Diag(IdentLoc, diag::warn_using_directive_in_header); 12252 } 12253 12254 PushUsingDirective(S, UDir); 12255 } else { 12256 Diag(IdentLoc, diag::err_expected_namespace_name) << SS.getRange(); 12257 } 12258 12259 if (UDir) 12260 ProcessDeclAttributeList(S, UDir, AttrList); 12261 12262 return UDir; 12263 } 12264 12265 void Sema::PushUsingDirective(Scope *S, UsingDirectiveDecl *UDir) { 12266 // If the scope has an associated entity and the using directive is at 12267 // namespace or translation unit scope, add the UsingDirectiveDecl into 12268 // its lookup structure so qualified name lookup can find it. 12269 DeclContext *Ctx = S->getEntity(); 12270 if (Ctx && !Ctx->isFunctionOrMethod()) 12271 Ctx->addDecl(UDir); 12272 else 12273 // Otherwise, it is at block scope. The using-directives will affect lookup 12274 // only to the end of the scope. 12275 S->PushUsingDirective(UDir); 12276 } 12277 12278 Decl *Sema::ActOnUsingDeclaration(Scope *S, AccessSpecifier AS, 12279 SourceLocation UsingLoc, 12280 SourceLocation TypenameLoc, CXXScopeSpec &SS, 12281 UnqualifiedId &Name, 12282 SourceLocation EllipsisLoc, 12283 const ParsedAttributesView &AttrList) { 12284 assert(S->getFlags() & Scope::DeclScope && "Invalid Scope."); 12285 12286 if (SS.isEmpty()) { 12287 Diag(Name.getBeginLoc(), diag::err_using_requires_qualname); 12288 return nullptr; 12289 } 12290 12291 switch (Name.getKind()) { 12292 case UnqualifiedIdKind::IK_ImplicitSelfParam: 12293 case UnqualifiedIdKind::IK_Identifier: 12294 case UnqualifiedIdKind::IK_OperatorFunctionId: 12295 case UnqualifiedIdKind::IK_LiteralOperatorId: 12296 case UnqualifiedIdKind::IK_ConversionFunctionId: 12297 break; 12298 12299 case UnqualifiedIdKind::IK_ConstructorName: 12300 case UnqualifiedIdKind::IK_ConstructorTemplateId: 12301 // C++11 inheriting constructors. 12302 Diag(Name.getBeginLoc(), 12303 getLangOpts().CPlusPlus11 12304 ? diag::warn_cxx98_compat_using_decl_constructor 12305 : diag::err_using_decl_constructor) 12306 << SS.getRange(); 12307 12308 if (getLangOpts().CPlusPlus11) break; 12309 12310 return nullptr; 12311 12312 case UnqualifiedIdKind::IK_DestructorName: 12313 Diag(Name.getBeginLoc(), diag::err_using_decl_destructor) << SS.getRange(); 12314 return nullptr; 12315 12316 case UnqualifiedIdKind::IK_TemplateId: 12317 Diag(Name.getBeginLoc(), diag::err_using_decl_template_id) 12318 << SourceRange(Name.TemplateId->LAngleLoc, Name.TemplateId->RAngleLoc); 12319 return nullptr; 12320 12321 case UnqualifiedIdKind::IK_DeductionGuideName: 12322 llvm_unreachable("cannot parse qualified deduction guide name"); 12323 } 12324 12325 DeclarationNameInfo TargetNameInfo = GetNameFromUnqualifiedId(Name); 12326 DeclarationName TargetName = TargetNameInfo.getName(); 12327 if (!TargetName) 12328 return nullptr; 12329 12330 // Warn about access declarations. 12331 if (UsingLoc.isInvalid()) { 12332 Diag(Name.getBeginLoc(), getLangOpts().CPlusPlus11 12333 ? diag::err_access_decl 12334 : diag::warn_access_decl_deprecated) 12335 << FixItHint::CreateInsertion(SS.getRange().getBegin(), "using "); 12336 } 12337 12338 if (EllipsisLoc.isInvalid()) { 12339 if (DiagnoseUnexpandedParameterPack(SS, UPPC_UsingDeclaration) || 12340 DiagnoseUnexpandedParameterPack(TargetNameInfo, UPPC_UsingDeclaration)) 12341 return nullptr; 12342 } else { 12343 if (!SS.getScopeRep()->containsUnexpandedParameterPack() && 12344 !TargetNameInfo.containsUnexpandedParameterPack()) { 12345 Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) 12346 << SourceRange(SS.getBeginLoc(), TargetNameInfo.getEndLoc()); 12347 EllipsisLoc = SourceLocation(); 12348 } 12349 } 12350 12351 NamedDecl *UD = 12352 BuildUsingDeclaration(S, AS, UsingLoc, TypenameLoc.isValid(), TypenameLoc, 12353 SS, TargetNameInfo, EllipsisLoc, AttrList, 12354 /*IsInstantiation*/ false, 12355 AttrList.hasAttribute(ParsedAttr::AT_UsingIfExists)); 12356 if (UD) 12357 PushOnScopeChains(UD, S, /*AddToContext*/ false); 12358 12359 return UD; 12360 } 12361 12362 Decl *Sema::ActOnUsingEnumDeclaration(Scope *S, AccessSpecifier AS, 12363 SourceLocation UsingLoc, 12364 SourceLocation EnumLoc, 12365 SourceLocation IdentLoc, 12366 IdentifierInfo &II, CXXScopeSpec *SS) { 12367 assert(!SS->isInvalid() && "ScopeSpec is invalid"); 12368 TypeSourceInfo *TSI = nullptr; 12369 QualType EnumTy = GetTypeFromParser( 12370 getTypeName(II, IdentLoc, S, SS, /*isClassName=*/false, 12371 /*HasTrailingDot=*/false, 12372 /*ObjectType=*/nullptr, /*IsCtorOrDtorName=*/false, 12373 /*WantNontrivialTypeSourceInfo=*/true), 12374 &TSI); 12375 if (EnumTy.isNull()) { 12376 Diag(IdentLoc, SS && isDependentScopeSpecifier(*SS) 12377 ? diag::err_using_enum_is_dependent 12378 : diag::err_unknown_typename) 12379 << II.getName() 12380 << SourceRange(SS ? SS->getBeginLoc() : IdentLoc, IdentLoc); 12381 return nullptr; 12382 } 12383 12384 auto *Enum = dyn_cast_if_present<EnumDecl>(EnumTy->getAsTagDecl()); 12385 if (!Enum) { 12386 Diag(IdentLoc, diag::err_using_enum_not_enum) << EnumTy; 12387 return nullptr; 12388 } 12389 12390 if (auto *Def = Enum->getDefinition()) 12391 Enum = Def; 12392 12393 if (TSI == nullptr) 12394 TSI = Context.getTrivialTypeSourceInfo(EnumTy, IdentLoc); 12395 12396 auto *UD = 12397 BuildUsingEnumDeclaration(S, AS, UsingLoc, EnumLoc, IdentLoc, TSI, Enum); 12398 12399 if (UD) 12400 PushOnScopeChains(UD, S, /*AddToContext*/ false); 12401 12402 return UD; 12403 } 12404 12405 /// Determine whether a using declaration considers the given 12406 /// declarations as "equivalent", e.g., if they are redeclarations of 12407 /// the same entity or are both typedefs of the same type. 12408 static bool 12409 IsEquivalentForUsingDecl(ASTContext &Context, NamedDecl *D1, NamedDecl *D2) { 12410 if (D1->getCanonicalDecl() == D2->getCanonicalDecl()) 12411 return true; 12412 12413 if (TypedefNameDecl *TD1 = dyn_cast<TypedefNameDecl>(D1)) 12414 if (TypedefNameDecl *TD2 = dyn_cast<TypedefNameDecl>(D2)) 12415 return Context.hasSameType(TD1->getUnderlyingType(), 12416 TD2->getUnderlyingType()); 12417 12418 // Two using_if_exists using-declarations are equivalent if both are 12419 // unresolved. 12420 if (isa<UnresolvedUsingIfExistsDecl>(D1) && 12421 isa<UnresolvedUsingIfExistsDecl>(D2)) 12422 return true; 12423 12424 return false; 12425 } 12426 12427 12428 /// Determines whether to create a using shadow decl for a particular 12429 /// decl, given the set of decls existing prior to this using lookup. 12430 bool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, 12431 const LookupResult &Previous, 12432 UsingShadowDecl *&PrevShadow) { 12433 // Diagnose finding a decl which is not from a base class of the 12434 // current class. We do this now because there are cases where this 12435 // function will silently decide not to build a shadow decl, which 12436 // will pre-empt further diagnostics. 12437 // 12438 // We don't need to do this in C++11 because we do the check once on 12439 // the qualifier. 12440 // 12441 // FIXME: diagnose the following if we care enough: 12442 // struct A { int foo; }; 12443 // struct B : A { using A::foo; }; 12444 // template <class T> struct C : A {}; 12445 // template <class T> struct D : C<T> { using B::foo; } // <--- 12446 // This is invalid (during instantiation) in C++03 because B::foo 12447 // resolves to the using decl in B, which is not a base class of D<T>. 12448 // We can't diagnose it immediately because C<T> is an unknown 12449 // specialization. The UsingShadowDecl in D<T> then points directly 12450 // to A::foo, which will look well-formed when we instantiate. 12451 // The right solution is to not collapse the shadow-decl chain. 12452 if (!getLangOpts().CPlusPlus11 && CurContext->isRecord()) 12453 if (auto *Using = dyn_cast<UsingDecl>(BUD)) { 12454 DeclContext *OrigDC = Orig->getDeclContext(); 12455 12456 // Handle enums and anonymous structs. 12457 if (isa<EnumDecl>(OrigDC)) 12458 OrigDC = OrigDC->getParent(); 12459 CXXRecordDecl *OrigRec = cast<CXXRecordDecl>(OrigDC); 12460 while (OrigRec->isAnonymousStructOrUnion()) 12461 OrigRec = cast<CXXRecordDecl>(OrigRec->getDeclContext()); 12462 12463 if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(OrigRec)) { 12464 if (OrigDC == CurContext) { 12465 Diag(Using->getLocation(), 12466 diag::err_using_decl_nested_name_specifier_is_current_class) 12467 << Using->getQualifierLoc().getSourceRange(); 12468 Diag(Orig->getLocation(), diag::note_using_decl_target); 12469 Using->setInvalidDecl(); 12470 return true; 12471 } 12472 12473 Diag(Using->getQualifierLoc().getBeginLoc(), 12474 diag::err_using_decl_nested_name_specifier_is_not_base_class) 12475 << Using->getQualifier() << cast<CXXRecordDecl>(CurContext) 12476 << Using->getQualifierLoc().getSourceRange(); 12477 Diag(Orig->getLocation(), diag::note_using_decl_target); 12478 Using->setInvalidDecl(); 12479 return true; 12480 } 12481 } 12482 12483 if (Previous.empty()) return false; 12484 12485 NamedDecl *Target = Orig; 12486 if (isa<UsingShadowDecl>(Target)) 12487 Target = cast<UsingShadowDecl>(Target)->getTargetDecl(); 12488 12489 // If the target happens to be one of the previous declarations, we 12490 // don't have a conflict. 12491 // 12492 // FIXME: but we might be increasing its access, in which case we 12493 // should redeclare it. 12494 NamedDecl *NonTag = nullptr, *Tag = nullptr; 12495 bool FoundEquivalentDecl = false; 12496 for (LookupResult::iterator I = Previous.begin(), E = Previous.end(); 12497 I != E; ++I) { 12498 NamedDecl *D = (*I)->getUnderlyingDecl(); 12499 // We can have UsingDecls in our Previous results because we use the same 12500 // LookupResult for checking whether the UsingDecl itself is a valid 12501 // redeclaration. 12502 if (isa<UsingDecl>(D) || isa<UsingPackDecl>(D) || isa<UsingEnumDecl>(D)) 12503 continue; 12504 12505 if (auto *RD = dyn_cast<CXXRecordDecl>(D)) { 12506 // C++ [class.mem]p19: 12507 // If T is the name of a class, then [every named member other than 12508 // a non-static data member] shall have a name different from T 12509 if (RD->isInjectedClassName() && !isa<FieldDecl>(Target) && 12510 !isa<IndirectFieldDecl>(Target) && 12511 !isa<UnresolvedUsingValueDecl>(Target) && 12512 DiagnoseClassNameShadow( 12513 CurContext, 12514 DeclarationNameInfo(BUD->getDeclName(), BUD->getLocation()))) 12515 return true; 12516 } 12517 12518 if (IsEquivalentForUsingDecl(Context, D, Target)) { 12519 if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(*I)) 12520 PrevShadow = Shadow; 12521 FoundEquivalentDecl = true; 12522 } else if (isEquivalentInternalLinkageDeclaration(D, Target)) { 12523 // We don't conflict with an existing using shadow decl of an equivalent 12524 // declaration, but we're not a redeclaration of it. 12525 FoundEquivalentDecl = true; 12526 } 12527 12528 if (isVisible(D)) 12529 (isa<TagDecl>(D) ? Tag : NonTag) = D; 12530 } 12531 12532 if (FoundEquivalentDecl) 12533 return false; 12534 12535 // Always emit a diagnostic for a mismatch between an unresolved 12536 // using_if_exists and a resolved using declaration in either direction. 12537 if (isa<UnresolvedUsingIfExistsDecl>(Target) != 12538 (isa_and_nonnull<UnresolvedUsingIfExistsDecl>(NonTag))) { 12539 if (!NonTag && !Tag) 12540 return false; 12541 Diag(BUD->getLocation(), diag::err_using_decl_conflict); 12542 Diag(Target->getLocation(), diag::note_using_decl_target); 12543 Diag((NonTag ? NonTag : Tag)->getLocation(), 12544 diag::note_using_decl_conflict); 12545 BUD->setInvalidDecl(); 12546 return true; 12547 } 12548 12549 if (FunctionDecl *FD = Target->getAsFunction()) { 12550 NamedDecl *OldDecl = nullptr; 12551 switch (CheckOverload(nullptr, FD, Previous, OldDecl, 12552 /*IsForUsingDecl*/ true)) { 12553 case Ovl_Overload: 12554 return false; 12555 12556 case Ovl_NonFunction: 12557 Diag(BUD->getLocation(), diag::err_using_decl_conflict); 12558 break; 12559 12560 // We found a decl with the exact signature. 12561 case Ovl_Match: 12562 // If we're in a record, we want to hide the target, so we 12563 // return true (without a diagnostic) to tell the caller not to 12564 // build a shadow decl. 12565 if (CurContext->isRecord()) 12566 return true; 12567 12568 // If we're not in a record, this is an error. 12569 Diag(BUD->getLocation(), diag::err_using_decl_conflict); 12570 break; 12571 } 12572 12573 Diag(Target->getLocation(), diag::note_using_decl_target); 12574 Diag(OldDecl->getLocation(), diag::note_using_decl_conflict); 12575 BUD->setInvalidDecl(); 12576 return true; 12577 } 12578 12579 // Target is not a function. 12580 12581 if (isa<TagDecl>(Target)) { 12582 // No conflict between a tag and a non-tag. 12583 if (!Tag) return false; 12584 12585 Diag(BUD->getLocation(), diag::err_using_decl_conflict); 12586 Diag(Target->getLocation(), diag::note_using_decl_target); 12587 Diag(Tag->getLocation(), diag::note_using_decl_conflict); 12588 BUD->setInvalidDecl(); 12589 return true; 12590 } 12591 12592 // No conflict between a tag and a non-tag. 12593 if (!NonTag) return false; 12594 12595 Diag(BUD->getLocation(), diag::err_using_decl_conflict); 12596 Diag(Target->getLocation(), diag::note_using_decl_target); 12597 Diag(NonTag->getLocation(), diag::note_using_decl_conflict); 12598 BUD->setInvalidDecl(); 12599 return true; 12600 } 12601 12602 /// Determine whether a direct base class is a virtual base class. 12603 static bool isVirtualDirectBase(CXXRecordDecl *Derived, CXXRecordDecl *Base) { 12604 if (!Derived->getNumVBases()) 12605 return false; 12606 for (auto &B : Derived->bases()) 12607 if (B.getType()->getAsCXXRecordDecl() == Base) 12608 return B.isVirtual(); 12609 llvm_unreachable("not a direct base class"); 12610 } 12611 12612 /// Builds a shadow declaration corresponding to a 'using' declaration. 12613 UsingShadowDecl *Sema::BuildUsingShadowDecl(Scope *S, BaseUsingDecl *BUD, 12614 NamedDecl *Orig, 12615 UsingShadowDecl *PrevDecl) { 12616 // If we resolved to another shadow declaration, just coalesce them. 12617 NamedDecl *Target = Orig; 12618 if (isa<UsingShadowDecl>(Target)) { 12619 Target = cast<UsingShadowDecl>(Target)->getTargetDecl(); 12620 assert(!isa<UsingShadowDecl>(Target) && "nested shadow declaration"); 12621 } 12622 12623 NamedDecl *NonTemplateTarget = Target; 12624 if (auto *TargetTD = dyn_cast<TemplateDecl>(Target)) 12625 NonTemplateTarget = TargetTD->getTemplatedDecl(); 12626 12627 UsingShadowDecl *Shadow; 12628 if (NonTemplateTarget && isa<CXXConstructorDecl>(NonTemplateTarget)) { 12629 UsingDecl *Using = cast<UsingDecl>(BUD); 12630 bool IsVirtualBase = 12631 isVirtualDirectBase(cast<CXXRecordDecl>(CurContext), 12632 Using->getQualifier()->getAsRecordDecl()); 12633 Shadow = ConstructorUsingShadowDecl::Create( 12634 Context, CurContext, Using->getLocation(), Using, Orig, IsVirtualBase); 12635 } else { 12636 Shadow = UsingShadowDecl::Create(Context, CurContext, BUD->getLocation(), 12637 Target->getDeclName(), BUD, Target); 12638 } 12639 BUD->addShadowDecl(Shadow); 12640 12641 Shadow->setAccess(BUD->getAccess()); 12642 if (Orig->isInvalidDecl() || BUD->isInvalidDecl()) 12643 Shadow->setInvalidDecl(); 12644 12645 Shadow->setPreviousDecl(PrevDecl); 12646 12647 if (S) 12648 PushOnScopeChains(Shadow, S); 12649 else 12650 CurContext->addDecl(Shadow); 12651 12652 12653 return Shadow; 12654 } 12655 12656 /// Hides a using shadow declaration. This is required by the current 12657 /// using-decl implementation when a resolvable using declaration in a 12658 /// class is followed by a declaration which would hide or override 12659 /// one or more of the using decl's targets; for example: 12660 /// 12661 /// struct Base { void foo(int); }; 12662 /// struct Derived : Base { 12663 /// using Base::foo; 12664 /// void foo(int); 12665 /// }; 12666 /// 12667 /// The governing language is C++03 [namespace.udecl]p12: 12668 /// 12669 /// When a using-declaration brings names from a base class into a 12670 /// derived class scope, member functions in the derived class 12671 /// override and/or hide member functions with the same name and 12672 /// parameter types in a base class (rather than conflicting). 12673 /// 12674 /// There are two ways to implement this: 12675 /// (1) optimistically create shadow decls when they're not hidden 12676 /// by existing declarations, or 12677 /// (2) don't create any shadow decls (or at least don't make them 12678 /// visible) until we've fully parsed/instantiated the class. 12679 /// The problem with (1) is that we might have to retroactively remove 12680 /// a shadow decl, which requires several O(n) operations because the 12681 /// decl structures are (very reasonably) not designed for removal. 12682 /// (2) avoids this but is very fiddly and phase-dependent. 12683 void Sema::HideUsingShadowDecl(Scope *S, UsingShadowDecl *Shadow) { 12684 if (Shadow->getDeclName().getNameKind() == 12685 DeclarationName::CXXConversionFunctionName) 12686 cast<CXXRecordDecl>(Shadow->getDeclContext())->removeConversion(Shadow); 12687 12688 // Remove it from the DeclContext... 12689 Shadow->getDeclContext()->removeDecl(Shadow); 12690 12691 // ...and the scope, if applicable... 12692 if (S) { 12693 S->RemoveDecl(Shadow); 12694 IdResolver.RemoveDecl(Shadow); 12695 } 12696 12697 // ...and the using decl. 12698 Shadow->getIntroducer()->removeShadowDecl(Shadow); 12699 12700 // TODO: complain somehow if Shadow was used. It shouldn't 12701 // be possible for this to happen, because...? 12702 } 12703 12704 /// Find the base specifier for a base class with the given type. 12705 static CXXBaseSpecifier *findDirectBaseWithType(CXXRecordDecl *Derived, 12706 QualType DesiredBase, 12707 bool &AnyDependentBases) { 12708 // Check whether the named type is a direct base class. 12709 CanQualType CanonicalDesiredBase = DesiredBase->getCanonicalTypeUnqualified() 12710 .getUnqualifiedType(); 12711 for (auto &Base : Derived->bases()) { 12712 CanQualType BaseType = Base.getType()->getCanonicalTypeUnqualified(); 12713 if (CanonicalDesiredBase == BaseType) 12714 return &Base; 12715 if (BaseType->isDependentType()) 12716 AnyDependentBases = true; 12717 } 12718 return nullptr; 12719 } 12720 12721 namespace { 12722 class UsingValidatorCCC final : public CorrectionCandidateCallback { 12723 public: 12724 UsingValidatorCCC(bool HasTypenameKeyword, bool IsInstantiation, 12725 NestedNameSpecifier *NNS, CXXRecordDecl *RequireMemberOf) 12726 : HasTypenameKeyword(HasTypenameKeyword), 12727 IsInstantiation(IsInstantiation), OldNNS(NNS), 12728 RequireMemberOf(RequireMemberOf) {} 12729 12730 bool ValidateCandidate(const TypoCorrection &Candidate) override { 12731 NamedDecl *ND = Candidate.getCorrectionDecl(); 12732 12733 // Keywords are not valid here. 12734 if (!ND || isa<NamespaceDecl>(ND)) 12735 return false; 12736 12737 // Completely unqualified names are invalid for a 'using' declaration. 12738 if (Candidate.WillReplaceSpecifier() && !Candidate.getCorrectionSpecifier()) 12739 return false; 12740 12741 // FIXME: Don't correct to a name that CheckUsingDeclRedeclaration would 12742 // reject. 12743 12744 if (RequireMemberOf) { 12745 auto *FoundRecord = dyn_cast<CXXRecordDecl>(ND); 12746 if (FoundRecord && FoundRecord->isInjectedClassName()) { 12747 // No-one ever wants a using-declaration to name an injected-class-name 12748 // of a base class, unless they're declaring an inheriting constructor. 12749 ASTContext &Ctx = ND->getASTContext(); 12750 if (!Ctx.getLangOpts().CPlusPlus11) 12751 return false; 12752 QualType FoundType = Ctx.getRecordType(FoundRecord); 12753 12754 // Check that the injected-class-name is named as a member of its own 12755 // type; we don't want to suggest 'using Derived::Base;', since that 12756 // means something else. 12757 NestedNameSpecifier *Specifier = 12758 Candidate.WillReplaceSpecifier() 12759 ? Candidate.getCorrectionSpecifier() 12760 : OldNNS; 12761 if (!Specifier->getAsType() || 12762 !Ctx.hasSameType(QualType(Specifier->getAsType(), 0), FoundType)) 12763 return false; 12764 12765 // Check that this inheriting constructor declaration actually names a 12766 // direct base class of the current class. 12767 bool AnyDependentBases = false; 12768 if (!findDirectBaseWithType(RequireMemberOf, 12769 Ctx.getRecordType(FoundRecord), 12770 AnyDependentBases) && 12771 !AnyDependentBases) 12772 return false; 12773 } else { 12774 auto *RD = dyn_cast<CXXRecordDecl>(ND->getDeclContext()); 12775 if (!RD || RequireMemberOf->isProvablyNotDerivedFrom(RD)) 12776 return false; 12777 12778 // FIXME: Check that the base class member is accessible? 12779 } 12780 } else { 12781 auto *FoundRecord = dyn_cast<CXXRecordDecl>(ND); 12782 if (FoundRecord && FoundRecord->isInjectedClassName()) 12783 return false; 12784 } 12785 12786 if (isa<TypeDecl>(ND)) 12787 return HasTypenameKeyword || !IsInstantiation; 12788 12789 return !HasTypenameKeyword; 12790 } 12791 12792 std::unique_ptr<CorrectionCandidateCallback> clone() override { 12793 return std::make_unique<UsingValidatorCCC>(*this); 12794 } 12795 12796 private: 12797 bool HasTypenameKeyword; 12798 bool IsInstantiation; 12799 NestedNameSpecifier *OldNNS; 12800 CXXRecordDecl *RequireMemberOf; 12801 }; 12802 } // end anonymous namespace 12803 12804 /// Remove decls we can't actually see from a lookup being used to declare 12805 /// shadow using decls. 12806 /// 12807 /// \param S - The scope of the potential shadow decl 12808 /// \param Previous - The lookup of a potential shadow decl's name. 12809 void Sema::FilterUsingLookup(Scope *S, LookupResult &Previous) { 12810 // It is really dumb that we have to do this. 12811 LookupResult::Filter F = Previous.makeFilter(); 12812 while (F.hasNext()) { 12813 NamedDecl *D = F.next(); 12814 if (!isDeclInScope(D, CurContext, S)) 12815 F.erase(); 12816 // If we found a local extern declaration that's not ordinarily visible, 12817 // and this declaration is being added to a non-block scope, ignore it. 12818 // We're only checking for scope conflicts here, not also for violations 12819 // of the linkage rules. 12820 else if (!CurContext->isFunctionOrMethod() && D->isLocalExternDecl() && 12821 !(D->getIdentifierNamespace() & Decl::IDNS_Ordinary)) 12822 F.erase(); 12823 } 12824 F.done(); 12825 } 12826 12827 /// Builds a using declaration. 12828 /// 12829 /// \param IsInstantiation - Whether this call arises from an 12830 /// instantiation of an unresolved using declaration. We treat 12831 /// the lookup differently for these declarations. 12832 NamedDecl *Sema::BuildUsingDeclaration( 12833 Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, 12834 bool HasTypenameKeyword, SourceLocation TypenameLoc, CXXScopeSpec &SS, 12835 DeclarationNameInfo NameInfo, SourceLocation EllipsisLoc, 12836 const ParsedAttributesView &AttrList, bool IsInstantiation, 12837 bool IsUsingIfExists) { 12838 assert(!SS.isInvalid() && "Invalid CXXScopeSpec."); 12839 SourceLocation IdentLoc = NameInfo.getLoc(); 12840 assert(IdentLoc.isValid() && "Invalid TargetName location."); 12841 12842 // FIXME: We ignore attributes for now. 12843 12844 // For an inheriting constructor declaration, the name of the using 12845 // declaration is the name of a constructor in this class, not in the 12846 // base class. 12847 DeclarationNameInfo UsingName = NameInfo; 12848 if (UsingName.getName().getNameKind() == DeclarationName::CXXConstructorName) 12849 if (auto *RD = dyn_cast<CXXRecordDecl>(CurContext)) 12850 UsingName.setName(Context.DeclarationNames.getCXXConstructorName( 12851 Context.getCanonicalType(Context.getRecordType(RD)))); 12852 12853 // Do the redeclaration lookup in the current scope. 12854 LookupResult Previous(*this, UsingName, LookupUsingDeclName, 12855 ForVisibleRedeclaration); 12856 Previous.setHideTags(false); 12857 if (S) { 12858 LookupName(Previous, S); 12859 12860 FilterUsingLookup(S, Previous); 12861 } else { 12862 assert(IsInstantiation && "no scope in non-instantiation"); 12863 if (CurContext->isRecord()) 12864 LookupQualifiedName(Previous, CurContext); 12865 else { 12866 // No redeclaration check is needed here; in non-member contexts we 12867 // diagnosed all possible conflicts with other using-declarations when 12868 // building the template: 12869 // 12870 // For a dependent non-type using declaration, the only valid case is 12871 // if we instantiate to a single enumerator. We check for conflicts 12872 // between shadow declarations we introduce, and we check in the template 12873 // definition for conflicts between a non-type using declaration and any 12874 // other declaration, which together covers all cases. 12875 // 12876 // A dependent typename using declaration will never successfully 12877 // instantiate, since it will always name a class member, so we reject 12878 // that in the template definition. 12879 } 12880 } 12881 12882 // Check for invalid redeclarations. 12883 if (CheckUsingDeclRedeclaration(UsingLoc, HasTypenameKeyword, 12884 SS, IdentLoc, Previous)) 12885 return nullptr; 12886 12887 // 'using_if_exists' doesn't make sense on an inherited constructor. 12888 if (IsUsingIfExists && UsingName.getName().getNameKind() == 12889 DeclarationName::CXXConstructorName) { 12890 Diag(UsingLoc, diag::err_using_if_exists_on_ctor); 12891 return nullptr; 12892 } 12893 12894 DeclContext *LookupContext = computeDeclContext(SS); 12895 NestedNameSpecifierLoc QualifierLoc = SS.getWithLocInContext(Context); 12896 if (!LookupContext || EllipsisLoc.isValid()) { 12897 NamedDecl *D; 12898 // Dependent scope, or an unexpanded pack 12899 if (!LookupContext && CheckUsingDeclQualifier(UsingLoc, HasTypenameKeyword, 12900 SS, NameInfo, IdentLoc)) 12901 return nullptr; 12902 12903 if (HasTypenameKeyword) { 12904 // FIXME: not all declaration name kinds are legal here 12905 D = UnresolvedUsingTypenameDecl::Create(Context, CurContext, 12906 UsingLoc, TypenameLoc, 12907 QualifierLoc, 12908 IdentLoc, NameInfo.getName(), 12909 EllipsisLoc); 12910 } else { 12911 D = UnresolvedUsingValueDecl::Create(Context, CurContext, UsingLoc, 12912 QualifierLoc, NameInfo, EllipsisLoc); 12913 } 12914 D->setAccess(AS); 12915 CurContext->addDecl(D); 12916 ProcessDeclAttributeList(S, D, AttrList); 12917 return D; 12918 } 12919 12920 auto Build = [&](bool Invalid) { 12921 UsingDecl *UD = 12922 UsingDecl::Create(Context, CurContext, UsingLoc, QualifierLoc, 12923 UsingName, HasTypenameKeyword); 12924 UD->setAccess(AS); 12925 CurContext->addDecl(UD); 12926 ProcessDeclAttributeList(S, UD, AttrList); 12927 UD->setInvalidDecl(Invalid); 12928 return UD; 12929 }; 12930 auto BuildInvalid = [&]{ return Build(true); }; 12931 auto BuildValid = [&]{ return Build(false); }; 12932 12933 if (RequireCompleteDeclContext(SS, LookupContext)) 12934 return BuildInvalid(); 12935 12936 // Look up the target name. 12937 LookupResult R(*this, NameInfo, LookupOrdinaryName); 12938 12939 // Unlike most lookups, we don't always want to hide tag 12940 // declarations: tag names are visible through the using declaration 12941 // even if hidden by ordinary names, *except* in a dependent context 12942 // where they may be used by two-phase lookup. 12943 if (!IsInstantiation) 12944 R.setHideTags(false); 12945 12946 // For the purposes of this lookup, we have a base object type 12947 // equal to that of the current context. 12948 if (CurContext->isRecord()) { 12949 R.setBaseObjectType( 12950 Context.getTypeDeclType(cast<CXXRecordDecl>(CurContext))); 12951 } 12952 12953 LookupQualifiedName(R, LookupContext); 12954 12955 // Validate the context, now we have a lookup 12956 if (CheckUsingDeclQualifier(UsingLoc, HasTypenameKeyword, SS, NameInfo, 12957 IdentLoc, &R)) 12958 return nullptr; 12959 12960 if (R.empty() && IsUsingIfExists) 12961 R.addDecl(UnresolvedUsingIfExistsDecl::Create(Context, CurContext, UsingLoc, 12962 UsingName.getName()), 12963 AS_public); 12964 12965 // Try to correct typos if possible. If constructor name lookup finds no 12966 // results, that means the named class has no explicit constructors, and we 12967 // suppressed declaring implicit ones (probably because it's dependent or 12968 // invalid). 12969 if (R.empty() && 12970 NameInfo.getName().getNameKind() != DeclarationName::CXXConstructorName) { 12971 // HACK 2017-01-08: Work around an issue with libstdc++'s detection of 12972 // ::gets. Sometimes it believes that glibc provides a ::gets in cases where 12973 // it does not. The issue was fixed in libstdc++ 6.3 (2016-12-21) and later. 12974 auto *II = NameInfo.getName().getAsIdentifierInfo(); 12975 if (getLangOpts().CPlusPlus14 && II && II->isStr("gets") && 12976 CurContext->isStdNamespace() && 12977 isa<TranslationUnitDecl>(LookupContext) && 12978 getSourceManager().isInSystemHeader(UsingLoc)) 12979 return nullptr; 12980 UsingValidatorCCC CCC(HasTypenameKeyword, IsInstantiation, SS.getScopeRep(), 12981 dyn_cast<CXXRecordDecl>(CurContext)); 12982 if (TypoCorrection Corrected = 12983 CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, 12984 CTK_ErrorRecovery)) { 12985 // We reject candidates where DroppedSpecifier == true, hence the 12986 // literal '0' below. 12987 diagnoseTypo(Corrected, PDiag(diag::err_no_member_suggest) 12988 << NameInfo.getName() << LookupContext << 0 12989 << SS.getRange()); 12990 12991 // If we picked a correction with no attached Decl we can't do anything 12992 // useful with it, bail out. 12993 NamedDecl *ND = Corrected.getCorrectionDecl(); 12994 if (!ND) 12995 return BuildInvalid(); 12996 12997 // If we corrected to an inheriting constructor, handle it as one. 12998 auto *RD = dyn_cast<CXXRecordDecl>(ND); 12999 if (RD && RD->isInjectedClassName()) { 13000 // The parent of the injected class name is the class itself. 13001 RD = cast<CXXRecordDecl>(RD->getParent()); 13002 13003 // Fix up the information we'll use to build the using declaration. 13004 if (Corrected.WillReplaceSpecifier()) { 13005 NestedNameSpecifierLocBuilder Builder; 13006 Builder.MakeTrivial(Context, Corrected.getCorrectionSpecifier(), 13007 QualifierLoc.getSourceRange()); 13008 QualifierLoc = Builder.getWithLocInContext(Context); 13009 } 13010 13011 // In this case, the name we introduce is the name of a derived class 13012 // constructor. 13013 auto *CurClass = cast<CXXRecordDecl>(CurContext); 13014 UsingName.setName(Context.DeclarationNames.getCXXConstructorName( 13015 Context.getCanonicalType(Context.getRecordType(CurClass)))); 13016 UsingName.setNamedTypeInfo(nullptr); 13017 for (auto *Ctor : LookupConstructors(RD)) 13018 R.addDecl(Ctor); 13019 R.resolveKind(); 13020 } else { 13021 // FIXME: Pick up all the declarations if we found an overloaded 13022 // function. 13023 UsingName.setName(ND->getDeclName()); 13024 R.addDecl(ND); 13025 } 13026 } else { 13027 Diag(IdentLoc, diag::err_no_member) 13028 << NameInfo.getName() << LookupContext << SS.getRange(); 13029 return BuildInvalid(); 13030 } 13031 } 13032 13033 if (R.isAmbiguous()) 13034 return BuildInvalid(); 13035 13036 if (HasTypenameKeyword) { 13037 // If we asked for a typename and got a non-type decl, error out. 13038 if (!R.getAsSingle<TypeDecl>() && 13039 !R.getAsSingle<UnresolvedUsingIfExistsDecl>()) { 13040 Diag(IdentLoc, diag::err_using_typename_non_type); 13041 for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I) 13042 Diag((*I)->getUnderlyingDecl()->getLocation(), 13043 diag::note_using_decl_target); 13044 return BuildInvalid(); 13045 } 13046 } else { 13047 // If we asked for a non-typename and we got a type, error out, 13048 // but only if this is an instantiation of an unresolved using 13049 // decl. Otherwise just silently find the type name. 13050 if (IsInstantiation && R.getAsSingle<TypeDecl>()) { 13051 Diag(IdentLoc, diag::err_using_dependent_value_is_type); 13052 Diag(R.getFoundDecl()->getLocation(), diag::note_using_decl_target); 13053 return BuildInvalid(); 13054 } 13055 } 13056 13057 // C++14 [namespace.udecl]p6: 13058 // A using-declaration shall not name a namespace. 13059 if (R.getAsSingle<NamespaceDecl>()) { 13060 Diag(IdentLoc, diag::err_using_decl_can_not_refer_to_namespace) 13061 << SS.getRange(); 13062 return BuildInvalid(); 13063 } 13064 13065 UsingDecl *UD = BuildValid(); 13066 13067 // Some additional rules apply to inheriting constructors. 13068 if (UsingName.getName().getNameKind() == 13069 DeclarationName::CXXConstructorName) { 13070 // Suppress access diagnostics; the access check is instead performed at the 13071 // point of use for an inheriting constructor. 13072 R.suppressDiagnostics(); 13073 if (CheckInheritingConstructorUsingDecl(UD)) 13074 return UD; 13075 } 13076 13077 for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I) { 13078 UsingShadowDecl *PrevDecl = nullptr; 13079 if (!CheckUsingShadowDecl(UD, *I, Previous, PrevDecl)) 13080 BuildUsingShadowDecl(S, UD, *I, PrevDecl); 13081 } 13082 13083 return UD; 13084 } 13085 13086 NamedDecl *Sema::BuildUsingEnumDeclaration(Scope *S, AccessSpecifier AS, 13087 SourceLocation UsingLoc, 13088 SourceLocation EnumLoc, 13089 SourceLocation NameLoc, 13090 TypeSourceInfo *EnumType, 13091 EnumDecl *ED) { 13092 bool Invalid = false; 13093 13094 if (CurContext->getRedeclContext()->isRecord()) { 13095 /// In class scope, check if this is a duplicate, for better a diagnostic. 13096 DeclarationNameInfo UsingEnumName(ED->getDeclName(), NameLoc); 13097 LookupResult Previous(*this, UsingEnumName, LookupUsingDeclName, 13098 ForVisibleRedeclaration); 13099 13100 LookupName(Previous, S); 13101 13102 for (NamedDecl *D : Previous) 13103 if (UsingEnumDecl *UED = dyn_cast<UsingEnumDecl>(D)) 13104 if (UED->getEnumDecl() == ED) { 13105 Diag(UsingLoc, diag::err_using_enum_decl_redeclaration) 13106 << SourceRange(EnumLoc, NameLoc); 13107 Diag(D->getLocation(), diag::note_using_enum_decl) << 1; 13108 Invalid = true; 13109 break; 13110 } 13111 } 13112 13113 if (RequireCompleteEnumDecl(ED, NameLoc)) 13114 Invalid = true; 13115 13116 UsingEnumDecl *UD = UsingEnumDecl::Create(Context, CurContext, UsingLoc, 13117 EnumLoc, NameLoc, EnumType); 13118 UD->setAccess(AS); 13119 CurContext->addDecl(UD); 13120 13121 if (Invalid) { 13122 UD->setInvalidDecl(); 13123 return UD; 13124 } 13125 13126 // Create the shadow decls for each enumerator 13127 for (EnumConstantDecl *EC : ED->enumerators()) { 13128 UsingShadowDecl *PrevDecl = nullptr; 13129 DeclarationNameInfo DNI(EC->getDeclName(), EC->getLocation()); 13130 LookupResult Previous(*this, DNI, LookupOrdinaryName, 13131 ForVisibleRedeclaration); 13132 LookupName(Previous, S); 13133 FilterUsingLookup(S, Previous); 13134 13135 if (!CheckUsingShadowDecl(UD, EC, Previous, PrevDecl)) 13136 BuildUsingShadowDecl(S, UD, EC, PrevDecl); 13137 } 13138 13139 return UD; 13140 } 13141 13142 NamedDecl *Sema::BuildUsingPackDecl(NamedDecl *InstantiatedFrom, 13143 ArrayRef<NamedDecl *> Expansions) { 13144 assert(isa<UnresolvedUsingValueDecl>(InstantiatedFrom) || 13145 isa<UnresolvedUsingTypenameDecl>(InstantiatedFrom) || 13146 isa<UsingPackDecl>(InstantiatedFrom)); 13147 13148 auto *UPD = 13149 UsingPackDecl::Create(Context, CurContext, InstantiatedFrom, Expansions); 13150 UPD->setAccess(InstantiatedFrom->getAccess()); 13151 CurContext->addDecl(UPD); 13152 return UPD; 13153 } 13154 13155 /// Additional checks for a using declaration referring to a constructor name. 13156 bool Sema::CheckInheritingConstructorUsingDecl(UsingDecl *UD) { 13157 assert(!UD->hasTypename() && "expecting a constructor name"); 13158 13159 const Type *SourceType = UD->getQualifier()->getAsType(); 13160 assert(SourceType && 13161 "Using decl naming constructor doesn't have type in scope spec."); 13162 CXXRecordDecl *TargetClass = cast<CXXRecordDecl>(CurContext); 13163 13164 // Check whether the named type is a direct base class. 13165 bool AnyDependentBases = false; 13166 auto *Base = findDirectBaseWithType(TargetClass, QualType(SourceType, 0), 13167 AnyDependentBases); 13168 if (!Base && !AnyDependentBases) { 13169 Diag(UD->getUsingLoc(), 13170 diag::err_using_decl_constructor_not_in_direct_base) 13171 << UD->getNameInfo().getSourceRange() 13172 << QualType(SourceType, 0) << TargetClass; 13173 UD->setInvalidDecl(); 13174 return true; 13175 } 13176 13177 if (Base) 13178 Base->setInheritConstructors(); 13179 13180 return false; 13181 } 13182 13183 /// Checks that the given using declaration is not an invalid 13184 /// redeclaration. Note that this is checking only for the using decl 13185 /// itself, not for any ill-formedness among the UsingShadowDecls. 13186 bool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc, 13187 bool HasTypenameKeyword, 13188 const CXXScopeSpec &SS, 13189 SourceLocation NameLoc, 13190 const LookupResult &Prev) { 13191 NestedNameSpecifier *Qual = SS.getScopeRep(); 13192 13193 // C++03 [namespace.udecl]p8: 13194 // C++0x [namespace.udecl]p10: 13195 // A using-declaration is a declaration and can therefore be used 13196 // repeatedly where (and only where) multiple declarations are 13197 // allowed. 13198 // 13199 // That's in non-member contexts. 13200 if (!CurContext->getRedeclContext()->isRecord()) { 13201 // A dependent qualifier outside a class can only ever resolve to an 13202 // enumeration type. Therefore it conflicts with any other non-type 13203 // declaration in the same scope. 13204 // FIXME: How should we check for dependent type-type conflicts at block 13205 // scope? 13206 if (Qual->isDependent() && !HasTypenameKeyword) { 13207 for (auto *D : Prev) { 13208 if (!isa<TypeDecl>(D) && !isa<UsingDecl>(D) && !isa<UsingPackDecl>(D)) { 13209 bool OldCouldBeEnumerator = 13210 isa<UnresolvedUsingValueDecl>(D) || isa<EnumConstantDecl>(D); 13211 Diag(NameLoc, 13212 OldCouldBeEnumerator ? diag::err_redefinition 13213 : diag::err_redefinition_different_kind) 13214 << Prev.getLookupName(); 13215 Diag(D->getLocation(), diag::note_previous_definition); 13216 return true; 13217 } 13218 } 13219 } 13220 return false; 13221 } 13222 13223 const NestedNameSpecifier *CNNS = 13224 Context.getCanonicalNestedNameSpecifier(Qual); 13225 for (LookupResult::iterator I = Prev.begin(), E = Prev.end(); I != E; ++I) { 13226 NamedDecl *D = *I; 13227 13228 bool DTypename; 13229 NestedNameSpecifier *DQual; 13230 if (UsingDecl *UD = dyn_cast<UsingDecl>(D)) { 13231 DTypename = UD->hasTypename(); 13232 DQual = UD->getQualifier(); 13233 } else if (UnresolvedUsingValueDecl *UD 13234 = dyn_cast<UnresolvedUsingValueDecl>(D)) { 13235 DTypename = false; 13236 DQual = UD->getQualifier(); 13237 } else if (UnresolvedUsingTypenameDecl *UD 13238 = dyn_cast<UnresolvedUsingTypenameDecl>(D)) { 13239 DTypename = true; 13240 DQual = UD->getQualifier(); 13241 } else continue; 13242 13243 // using decls differ if one says 'typename' and the other doesn't. 13244 // FIXME: non-dependent using decls? 13245 if (HasTypenameKeyword != DTypename) continue; 13246 13247 // using decls differ if they name different scopes (but note that 13248 // template instantiation can cause this check to trigger when it 13249 // didn't before instantiation). 13250 if (CNNS != Context.getCanonicalNestedNameSpecifier(DQual)) 13251 continue; 13252 13253 Diag(NameLoc, diag::err_using_decl_redeclaration) << SS.getRange(); 13254 Diag(D->getLocation(), diag::note_using_decl) << 1; 13255 return true; 13256 } 13257 13258 return false; 13259 } 13260 13261 /// Checks that the given nested-name qualifier used in a using decl 13262 /// in the current context is appropriately related to the current 13263 /// scope. If an error is found, diagnoses it and returns true. 13264 /// R is nullptr, if the caller has not (yet) done a lookup, otherwise it's the 13265 /// result of that lookup. UD is likewise nullptr, except when we have an 13266 /// already-populated UsingDecl whose shadow decls contain the same information 13267 /// (i.e. we're instantiating a UsingDecl with non-dependent scope). 13268 bool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename, 13269 const CXXScopeSpec &SS, 13270 const DeclarationNameInfo &NameInfo, 13271 SourceLocation NameLoc, 13272 const LookupResult *R, const UsingDecl *UD) { 13273 DeclContext *NamedContext = computeDeclContext(SS); 13274 assert(bool(NamedContext) == (R || UD) && !(R && UD) && 13275 "resolvable context must have exactly one set of decls"); 13276 13277 // C++ 20 permits using an enumerator that does not have a class-hierarchy 13278 // relationship. 13279 bool Cxx20Enumerator = false; 13280 if (NamedContext) { 13281 EnumConstantDecl *EC = nullptr; 13282 if (R) 13283 EC = R->getAsSingle<EnumConstantDecl>(); 13284 else if (UD && UD->shadow_size() == 1) 13285 EC = dyn_cast<EnumConstantDecl>(UD->shadow_begin()->getTargetDecl()); 13286 if (EC) 13287 Cxx20Enumerator = getLangOpts().CPlusPlus20; 13288 13289 if (auto *ED = dyn_cast<EnumDecl>(NamedContext)) { 13290 // C++14 [namespace.udecl]p7: 13291 // A using-declaration shall not name a scoped enumerator. 13292 // C++20 p1099 permits enumerators. 13293 if (EC && R && ED->isScoped()) 13294 Diag(SS.getBeginLoc(), 13295 getLangOpts().CPlusPlus20 13296 ? diag::warn_cxx17_compat_using_decl_scoped_enumerator 13297 : diag::ext_using_decl_scoped_enumerator) 13298 << SS.getRange(); 13299 13300 // We want to consider the scope of the enumerator 13301 NamedContext = ED->getDeclContext(); 13302 } 13303 } 13304 13305 if (!CurContext->isRecord()) { 13306 // C++03 [namespace.udecl]p3: 13307 // C++0x [namespace.udecl]p8: 13308 // A using-declaration for a class member shall be a member-declaration. 13309 // C++20 [namespace.udecl]p7 13310 // ... other than an enumerator ... 13311 13312 // If we weren't able to compute a valid scope, it might validly be a 13313 // dependent class or enumeration scope. If we have a 'typename' keyword, 13314 // the scope must resolve to a class type. 13315 if (NamedContext ? !NamedContext->getRedeclContext()->isRecord() 13316 : !HasTypename) 13317 return false; // OK 13318 13319 Diag(NameLoc, 13320 Cxx20Enumerator 13321 ? diag::warn_cxx17_compat_using_decl_class_member_enumerator 13322 : diag::err_using_decl_can_not_refer_to_class_member) 13323 << SS.getRange(); 13324 13325 if (Cxx20Enumerator) 13326 return false; // OK 13327 13328 auto *RD = NamedContext 13329 ? cast<CXXRecordDecl>(NamedContext->getRedeclContext()) 13330 : nullptr; 13331 if (RD && !RequireCompleteDeclContext(const_cast<CXXScopeSpec &>(SS), RD)) { 13332 // See if there's a helpful fixit 13333 13334 if (!R) { 13335 // We will have already diagnosed the problem on the template 13336 // definition, Maybe we should do so again? 13337 } else if (R->getAsSingle<TypeDecl>()) { 13338 if (getLangOpts().CPlusPlus11) { 13339 // Convert 'using X::Y;' to 'using Y = X::Y;'. 13340 Diag(SS.getBeginLoc(), diag::note_using_decl_class_member_workaround) 13341 << 0 // alias declaration 13342 << FixItHint::CreateInsertion(SS.getBeginLoc(), 13343 NameInfo.getName().getAsString() + 13344 " = "); 13345 } else { 13346 // Convert 'using X::Y;' to 'typedef X::Y Y;'. 13347 SourceLocation InsertLoc = getLocForEndOfToken(NameInfo.getEndLoc()); 13348 Diag(InsertLoc, diag::note_using_decl_class_member_workaround) 13349 << 1 // typedef declaration 13350 << FixItHint::CreateReplacement(UsingLoc, "typedef") 13351 << FixItHint::CreateInsertion( 13352 InsertLoc, " " + NameInfo.getName().getAsString()); 13353 } 13354 } else if (R->getAsSingle<VarDecl>()) { 13355 // Don't provide a fixit outside C++11 mode; we don't want to suggest 13356 // repeating the type of the static data member here. 13357 FixItHint FixIt; 13358 if (getLangOpts().CPlusPlus11) { 13359 // Convert 'using X::Y;' to 'auto &Y = X::Y;'. 13360 FixIt = FixItHint::CreateReplacement( 13361 UsingLoc, "auto &" + NameInfo.getName().getAsString() + " = "); 13362 } 13363 13364 Diag(UsingLoc, diag::note_using_decl_class_member_workaround) 13365 << 2 // reference declaration 13366 << FixIt; 13367 } else if (R->getAsSingle<EnumConstantDecl>()) { 13368 // Don't provide a fixit outside C++11 mode; we don't want to suggest 13369 // repeating the type of the enumeration here, and we can't do so if 13370 // the type is anonymous. 13371 FixItHint FixIt; 13372 if (getLangOpts().CPlusPlus11) { 13373 // Convert 'using X::Y;' to 'auto &Y = X::Y;'. 13374 FixIt = FixItHint::CreateReplacement( 13375 UsingLoc, 13376 "constexpr auto " + NameInfo.getName().getAsString() + " = "); 13377 } 13378 13379 Diag(UsingLoc, diag::note_using_decl_class_member_workaround) 13380 << (getLangOpts().CPlusPlus11 ? 4 : 3) // const[expr] variable 13381 << FixIt; 13382 } 13383 } 13384 13385 return true; // Fail 13386 } 13387 13388 // If the named context is dependent, we can't decide much. 13389 if (!NamedContext) { 13390 // FIXME: in C++0x, we can diagnose if we can prove that the 13391 // nested-name-specifier does not refer to a base class, which is 13392 // still possible in some cases. 13393 13394 // Otherwise we have to conservatively report that things might be 13395 // okay. 13396 return false; 13397 } 13398 13399 // The current scope is a record. 13400 if (!NamedContext->isRecord()) { 13401 // Ideally this would point at the last name in the specifier, 13402 // but we don't have that level of source info. 13403 Diag(SS.getBeginLoc(), 13404 Cxx20Enumerator 13405 ? diag::warn_cxx17_compat_using_decl_non_member_enumerator 13406 : diag::err_using_decl_nested_name_specifier_is_not_class) 13407 << SS.getScopeRep() << SS.getRange(); 13408 13409 if (Cxx20Enumerator) 13410 return false; // OK 13411 13412 return true; 13413 } 13414 13415 if (!NamedContext->isDependentContext() && 13416 RequireCompleteDeclContext(const_cast<CXXScopeSpec&>(SS), NamedContext)) 13417 return true; 13418 13419 if (getLangOpts().CPlusPlus11) { 13420 // C++11 [namespace.udecl]p3: 13421 // In a using-declaration used as a member-declaration, the 13422 // nested-name-specifier shall name a base class of the class 13423 // being defined. 13424 13425 if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom( 13426 cast<CXXRecordDecl>(NamedContext))) { 13427 13428 if (Cxx20Enumerator) { 13429 Diag(NameLoc, diag::warn_cxx17_compat_using_decl_non_member_enumerator) 13430 << SS.getRange(); 13431 return false; 13432 } 13433 13434 if (CurContext == NamedContext) { 13435 Diag(SS.getBeginLoc(), 13436 diag::err_using_decl_nested_name_specifier_is_current_class) 13437 << SS.getRange(); 13438 return !getLangOpts().CPlusPlus20; 13439 } 13440 13441 if (!cast<CXXRecordDecl>(NamedContext)->isInvalidDecl()) { 13442 Diag(SS.getBeginLoc(), 13443 diag::err_using_decl_nested_name_specifier_is_not_base_class) 13444 << SS.getScopeRep() << cast<CXXRecordDecl>(CurContext) 13445 << SS.getRange(); 13446 } 13447 return true; 13448 } 13449 13450 return false; 13451 } 13452 13453 // C++03 [namespace.udecl]p4: 13454 // A using-declaration used as a member-declaration shall refer 13455 // to a member of a base class of the class being defined [etc.]. 13456 13457 // Salient point: SS doesn't have to name a base class as long as 13458 // lookup only finds members from base classes. Therefore we can 13459 // diagnose here only if we can prove that can't happen, 13460 // i.e. if the class hierarchies provably don't intersect. 13461 13462 // TODO: it would be nice if "definitely valid" results were cached 13463 // in the UsingDecl and UsingShadowDecl so that these checks didn't 13464 // need to be repeated. 13465 13466 llvm::SmallPtrSet<const CXXRecordDecl *, 4> Bases; 13467 auto Collect = [&Bases](const CXXRecordDecl *Base) { 13468 Bases.insert(Base); 13469 return true; 13470 }; 13471 13472 // Collect all bases. Return false if we find a dependent base. 13473 if (!cast<CXXRecordDecl>(CurContext)->forallBases(Collect)) 13474 return false; 13475 13476 // Returns true if the base is dependent or is one of the accumulated base 13477 // classes. 13478 auto IsNotBase = [&Bases](const CXXRecordDecl *Base) { 13479 return !Bases.count(Base); 13480 }; 13481 13482 // Return false if the class has a dependent base or if it or one 13483 // of its bases is present in the base set of the current context. 13484 if (Bases.count(cast<CXXRecordDecl>(NamedContext)) || 13485 !cast<CXXRecordDecl>(NamedContext)->forallBases(IsNotBase)) 13486 return false; 13487 13488 Diag(SS.getRange().getBegin(), 13489 diag::err_using_decl_nested_name_specifier_is_not_base_class) 13490 << SS.getScopeRep() 13491 << cast<CXXRecordDecl>(CurContext) 13492 << SS.getRange(); 13493 13494 return true; 13495 } 13496 13497 Decl *Sema::ActOnAliasDeclaration(Scope *S, AccessSpecifier AS, 13498 MultiTemplateParamsArg TemplateParamLists, 13499 SourceLocation UsingLoc, UnqualifiedId &Name, 13500 const ParsedAttributesView &AttrList, 13501 TypeResult Type, Decl *DeclFromDeclSpec) { 13502 // Skip up to the relevant declaration scope. 13503 while (S->isTemplateParamScope()) 13504 S = S->getParent(); 13505 assert((S->getFlags() & Scope::DeclScope) && 13506 "got alias-declaration outside of declaration scope"); 13507 13508 if (Type.isInvalid()) 13509 return nullptr; 13510 13511 bool Invalid = false; 13512 DeclarationNameInfo NameInfo = GetNameFromUnqualifiedId(Name); 13513 TypeSourceInfo *TInfo = nullptr; 13514 GetTypeFromParser(Type.get(), &TInfo); 13515 13516 if (DiagnoseClassNameShadow(CurContext, NameInfo)) 13517 return nullptr; 13518 13519 if (DiagnoseUnexpandedParameterPack(Name.StartLocation, TInfo, 13520 UPPC_DeclarationType)) { 13521 Invalid = true; 13522 TInfo = Context.getTrivialTypeSourceInfo(Context.IntTy, 13523 TInfo->getTypeLoc().getBeginLoc()); 13524 } 13525 13526 LookupResult Previous(*this, NameInfo, LookupOrdinaryName, 13527 TemplateParamLists.size() 13528 ? forRedeclarationInCurContext() 13529 : ForVisibleRedeclaration); 13530 LookupName(Previous, S); 13531 13532 // Warn about shadowing the name of a template parameter. 13533 if (Previous.isSingleResult() && 13534 Previous.getFoundDecl()->isTemplateParameter()) { 13535 DiagnoseTemplateParameterShadow(Name.StartLocation,Previous.getFoundDecl()); 13536 Previous.clear(); 13537 } 13538 13539 assert(Name.getKind() == UnqualifiedIdKind::IK_Identifier && 13540 "name in alias declaration must be an identifier"); 13541 TypeAliasDecl *NewTD = TypeAliasDecl::Create(Context, CurContext, UsingLoc, 13542 Name.StartLocation, 13543 Name.Identifier, TInfo); 13544 13545 NewTD->setAccess(AS); 13546 13547 if (Invalid) 13548 NewTD->setInvalidDecl(); 13549 13550 ProcessDeclAttributeList(S, NewTD, AttrList); 13551 AddPragmaAttributes(S, NewTD); 13552 13553 CheckTypedefForVariablyModifiedType(S, NewTD); 13554 Invalid |= NewTD->isInvalidDecl(); 13555 13556 bool Redeclaration = false; 13557 13558 NamedDecl *NewND; 13559 if (TemplateParamLists.size()) { 13560 TypeAliasTemplateDecl *OldDecl = nullptr; 13561 TemplateParameterList *OldTemplateParams = nullptr; 13562 13563 if (TemplateParamLists.size() != 1) { 13564 Diag(UsingLoc, diag::err_alias_template_extra_headers) 13565 << SourceRange(TemplateParamLists[1]->getTemplateLoc(), 13566 TemplateParamLists[TemplateParamLists.size()-1]->getRAngleLoc()); 13567 } 13568 TemplateParameterList *TemplateParams = TemplateParamLists[0]; 13569 13570 // Check that we can declare a template here. 13571 if (CheckTemplateDeclScope(S, TemplateParams)) 13572 return nullptr; 13573 13574 // Only consider previous declarations in the same scope. 13575 FilterLookupForScope(Previous, CurContext, S, /*ConsiderLinkage*/false, 13576 /*ExplicitInstantiationOrSpecialization*/false); 13577 if (!Previous.empty()) { 13578 Redeclaration = true; 13579 13580 OldDecl = Previous.getAsSingle<TypeAliasTemplateDecl>(); 13581 if (!OldDecl && !Invalid) { 13582 Diag(UsingLoc, diag::err_redefinition_different_kind) 13583 << Name.Identifier; 13584 13585 NamedDecl *OldD = Previous.getRepresentativeDecl(); 13586 if (OldD->getLocation().isValid()) 13587 Diag(OldD->getLocation(), diag::note_previous_definition); 13588 13589 Invalid = true; 13590 } 13591 13592 if (!Invalid && OldDecl && !OldDecl->isInvalidDecl()) { 13593 if (TemplateParameterListsAreEqual(TemplateParams, 13594 OldDecl->getTemplateParameters(), 13595 /*Complain=*/true, 13596 TPL_TemplateMatch)) 13597 OldTemplateParams = 13598 OldDecl->getMostRecentDecl()->getTemplateParameters(); 13599 else 13600 Invalid = true; 13601 13602 TypeAliasDecl *OldTD = OldDecl->getTemplatedDecl(); 13603 if (!Invalid && 13604 !Context.hasSameType(OldTD->getUnderlyingType(), 13605 NewTD->getUnderlyingType())) { 13606 // FIXME: The C++0x standard does not clearly say this is ill-formed, 13607 // but we can't reasonably accept it. 13608 Diag(NewTD->getLocation(), diag::err_redefinition_different_typedef) 13609 << 2 << NewTD->getUnderlyingType() << OldTD->getUnderlyingType(); 13610 if (OldTD->getLocation().isValid()) 13611 Diag(OldTD->getLocation(), diag::note_previous_definition); 13612 Invalid = true; 13613 } 13614 } 13615 } 13616 13617 // Merge any previous default template arguments into our parameters, 13618 // and check the parameter list. 13619 if (CheckTemplateParameterList(TemplateParams, OldTemplateParams, 13620 TPC_TypeAliasTemplate)) 13621 return nullptr; 13622 13623 TypeAliasTemplateDecl *NewDecl = 13624 TypeAliasTemplateDecl::Create(Context, CurContext, UsingLoc, 13625 Name.Identifier, TemplateParams, 13626 NewTD); 13627 NewTD->setDescribedAliasTemplate(NewDecl); 13628 13629 NewDecl->setAccess(AS); 13630 13631 if (Invalid) 13632 NewDecl->setInvalidDecl(); 13633 else if (OldDecl) { 13634 NewDecl->setPreviousDecl(OldDecl); 13635 CheckRedeclarationInModule(NewDecl, OldDecl); 13636 } 13637 13638 NewND = NewDecl; 13639 } else { 13640 if (auto *TD = dyn_cast_or_null<TagDecl>(DeclFromDeclSpec)) { 13641 setTagNameForLinkagePurposes(TD, NewTD); 13642 handleTagNumbering(TD, S); 13643 } 13644 ActOnTypedefNameDecl(S, CurContext, NewTD, Previous, Redeclaration); 13645 NewND = NewTD; 13646 } 13647 13648 PushOnScopeChains(NewND, S); 13649 ActOnDocumentableDecl(NewND); 13650 return NewND; 13651 } 13652 13653 Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, 13654 SourceLocation AliasLoc, 13655 IdentifierInfo *Alias, CXXScopeSpec &SS, 13656 SourceLocation IdentLoc, 13657 IdentifierInfo *Ident) { 13658 13659 // Lookup the namespace name. 13660 LookupResult R(*this, Ident, IdentLoc, LookupNamespaceName); 13661 LookupParsedName(R, S, &SS); 13662 13663 if (R.isAmbiguous()) 13664 return nullptr; 13665 13666 if (R.empty()) { 13667 if (!TryNamespaceTypoCorrection(*this, R, S, SS, IdentLoc, Ident)) { 13668 Diag(IdentLoc, diag::err_expected_namespace_name) << SS.getRange(); 13669 return nullptr; 13670 } 13671 } 13672 assert(!R.isAmbiguous() && !R.empty()); 13673 NamedDecl *ND = R.getRepresentativeDecl(); 13674 13675 // Check if we have a previous declaration with the same name. 13676 LookupResult PrevR(*this, Alias, AliasLoc, LookupOrdinaryName, 13677 ForVisibleRedeclaration); 13678 LookupName(PrevR, S); 13679 13680 // Check we're not shadowing a template parameter. 13681 if (PrevR.isSingleResult() && PrevR.getFoundDecl()->isTemplateParameter()) { 13682 DiagnoseTemplateParameterShadow(AliasLoc, PrevR.getFoundDecl()); 13683 PrevR.clear(); 13684 } 13685 13686 // Filter out any other lookup result from an enclosing scope. 13687 FilterLookupForScope(PrevR, CurContext, S, /*ConsiderLinkage*/false, 13688 /*AllowInlineNamespace*/false); 13689 13690 // Find the previous declaration and check that we can redeclare it. 13691 NamespaceAliasDecl *Prev = nullptr; 13692 if (PrevR.isSingleResult()) { 13693 NamedDecl *PrevDecl = PrevR.getRepresentativeDecl(); 13694 if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) { 13695 // We already have an alias with the same name that points to the same 13696 // namespace; check that it matches. 13697 if (AD->getNamespace()->Equals(getNamespaceDecl(ND))) { 13698 Prev = AD; 13699 } else if (isVisible(PrevDecl)) { 13700 Diag(AliasLoc, diag::err_redefinition_different_namespace_alias) 13701 << Alias; 13702 Diag(AD->getLocation(), diag::note_previous_namespace_alias) 13703 << AD->getNamespace(); 13704 return nullptr; 13705 } 13706 } else if (isVisible(PrevDecl)) { 13707 unsigned DiagID = isa<NamespaceDecl>(PrevDecl->getUnderlyingDecl()) 13708 ? diag::err_redefinition 13709 : diag::err_redefinition_different_kind; 13710 Diag(AliasLoc, DiagID) << Alias; 13711 Diag(PrevDecl->getLocation(), diag::note_previous_definition); 13712 return nullptr; 13713 } 13714 } 13715 13716 // The use of a nested name specifier may trigger deprecation warnings. 13717 DiagnoseUseOfDecl(ND, IdentLoc); 13718 13719 NamespaceAliasDecl *AliasDecl = 13720 NamespaceAliasDecl::Create(Context, CurContext, NamespaceLoc, AliasLoc, 13721 Alias, SS.getWithLocInContext(Context), 13722 IdentLoc, ND); 13723 if (Prev) 13724 AliasDecl->setPreviousDecl(Prev); 13725 13726 PushOnScopeChains(AliasDecl, S); 13727 return AliasDecl; 13728 } 13729 13730 namespace { 13731 struct SpecialMemberExceptionSpecInfo 13732 : SpecialMemberVisitor<SpecialMemberExceptionSpecInfo> { 13733 SourceLocation Loc; 13734 Sema::ImplicitExceptionSpecification ExceptSpec; 13735 13736 SpecialMemberExceptionSpecInfo(Sema &S, CXXMethodDecl *MD, 13737 Sema::CXXSpecialMember CSM, 13738 Sema::InheritedConstructorInfo *ICI, 13739 SourceLocation Loc) 13740 : SpecialMemberVisitor(S, MD, CSM, ICI), Loc(Loc), ExceptSpec(S) {} 13741 13742 bool visitBase(CXXBaseSpecifier *Base); 13743 bool visitField(FieldDecl *FD); 13744 13745 void visitClassSubobject(CXXRecordDecl *Class, Subobject Subobj, 13746 unsigned Quals); 13747 13748 void visitSubobjectCall(Subobject Subobj, 13749 Sema::SpecialMemberOverloadResult SMOR); 13750 }; 13751 } 13752 13753 bool SpecialMemberExceptionSpecInfo::visitBase(CXXBaseSpecifier *Base) { 13754 auto *RT = Base->getType()->getAs<RecordType>(); 13755 if (!RT) 13756 return false; 13757 13758 auto *BaseClass = cast<CXXRecordDecl>(RT->getDecl()); 13759 Sema::SpecialMemberOverloadResult SMOR = lookupInheritedCtor(BaseClass); 13760 if (auto *BaseCtor = SMOR.getMethod()) { 13761 visitSubobjectCall(Base, BaseCtor); 13762 return false; 13763 } 13764 13765 visitClassSubobject(BaseClass, Base, 0); 13766 return false; 13767 } 13768 13769 bool SpecialMemberExceptionSpecInfo::visitField(FieldDecl *FD) { 13770 if (CSM == Sema::CXXDefaultConstructor && FD->hasInClassInitializer()) { 13771 Expr *E = FD->getInClassInitializer(); 13772 if (!E) 13773 // FIXME: It's a little wasteful to build and throw away a 13774 // CXXDefaultInitExpr here. 13775 // FIXME: We should have a single context note pointing at Loc, and 13776 // this location should be MD->getLocation() instead, since that's 13777 // the location where we actually use the default init expression. 13778 E = S.BuildCXXDefaultInitExpr(Loc, FD).get(); 13779 if (E) 13780 ExceptSpec.CalledExpr(E); 13781 } else if (auto *RT = S.Context.getBaseElementType(FD->getType()) 13782 ->getAs<RecordType>()) { 13783 visitClassSubobject(cast<CXXRecordDecl>(RT->getDecl()), FD, 13784 FD->getType().getCVRQualifiers()); 13785 } 13786 return false; 13787 } 13788 13789 void SpecialMemberExceptionSpecInfo::visitClassSubobject(CXXRecordDecl *Class, 13790 Subobject Subobj, 13791 unsigned Quals) { 13792 FieldDecl *Field = Subobj.dyn_cast<FieldDecl*>(); 13793 bool IsMutable = Field && Field->isMutable(); 13794 visitSubobjectCall(Subobj, lookupIn(Class, Quals, IsMutable)); 13795 } 13796 13797 void SpecialMemberExceptionSpecInfo::visitSubobjectCall( 13798 Subobject Subobj, Sema::SpecialMemberOverloadResult SMOR) { 13799 // Note, if lookup fails, it doesn't matter what exception specification we 13800 // choose because the special member will be deleted. 13801 if (CXXMethodDecl *MD = SMOR.getMethod()) 13802 ExceptSpec.CalledDecl(getSubobjectLoc(Subobj), MD); 13803 } 13804 13805 bool Sema::tryResolveExplicitSpecifier(ExplicitSpecifier &ExplicitSpec) { 13806 llvm::APSInt Result; 13807 ExprResult Converted = CheckConvertedConstantExpression( 13808 ExplicitSpec.getExpr(), Context.BoolTy, Result, CCEK_ExplicitBool); 13809 ExplicitSpec.setExpr(Converted.get()); 13810 if (Converted.isUsable() && !Converted.get()->isValueDependent()) { 13811 ExplicitSpec.setKind(Result.getBoolValue() 13812 ? ExplicitSpecKind::ResolvedTrue 13813 : ExplicitSpecKind::ResolvedFalse); 13814 return true; 13815 } 13816 ExplicitSpec.setKind(ExplicitSpecKind::Unresolved); 13817 return false; 13818 } 13819 13820 ExplicitSpecifier Sema::ActOnExplicitBoolSpecifier(Expr *ExplicitExpr) { 13821 ExplicitSpecifier ES(ExplicitExpr, ExplicitSpecKind::Unresolved); 13822 if (!ExplicitExpr->isTypeDependent()) 13823 tryResolveExplicitSpecifier(ES); 13824 return ES; 13825 } 13826 13827 static Sema::ImplicitExceptionSpecification 13828 ComputeDefaultedSpecialMemberExceptionSpec( 13829 Sema &S, SourceLocation Loc, CXXMethodDecl *MD, Sema::CXXSpecialMember CSM, 13830 Sema::InheritedConstructorInfo *ICI) { 13831 ComputingExceptionSpec CES(S, MD, Loc); 13832 13833 CXXRecordDecl *ClassDecl = MD->getParent(); 13834 13835 // C++ [except.spec]p14: 13836 // An implicitly declared special member function (Clause 12) shall have an 13837 // exception-specification. [...] 13838 SpecialMemberExceptionSpecInfo Info(S, MD, CSM, ICI, MD->getLocation()); 13839 if (ClassDecl->isInvalidDecl()) 13840 return Info.ExceptSpec; 13841 13842 // FIXME: If this diagnostic fires, we're probably missing a check for 13843 // attempting to resolve an exception specification before it's known 13844 // at a higher level. 13845 if (S.RequireCompleteType(MD->getLocation(), 13846 S.Context.getRecordType(ClassDecl), 13847 diag::err_exception_spec_incomplete_type)) 13848 return Info.ExceptSpec; 13849 13850 // C++1z [except.spec]p7: 13851 // [Look for exceptions thrown by] a constructor selected [...] to 13852 // initialize a potentially constructed subobject, 13853 // C++1z [except.spec]p8: 13854 // The exception specification for an implicitly-declared destructor, or a 13855 // destructor without a noexcept-specifier, is potentially-throwing if and 13856 // only if any of the destructors for any of its potentially constructed 13857 // subojects is potentially throwing. 13858 // FIXME: We respect the first rule but ignore the "potentially constructed" 13859 // in the second rule to resolve a core issue (no number yet) that would have 13860 // us reject: 13861 // struct A { virtual void f() = 0; virtual ~A() noexcept(false) = 0; }; 13862 // struct B : A {}; 13863 // struct C : B { void f(); }; 13864 // ... due to giving B::~B() a non-throwing exception specification. 13865 Info.visit(Info.IsConstructor ? Info.VisitPotentiallyConstructedBases 13866 : Info.VisitAllBases); 13867 13868 return Info.ExceptSpec; 13869 } 13870 13871 namespace { 13872 /// RAII object to register a special member as being currently declared. 13873 struct DeclaringSpecialMember { 13874 Sema &S; 13875 Sema::SpecialMemberDecl D; 13876 Sema::ContextRAII SavedContext; 13877 bool WasAlreadyBeingDeclared; 13878 13879 DeclaringSpecialMember(Sema &S, CXXRecordDecl *RD, Sema::CXXSpecialMember CSM) 13880 : S(S), D(RD, CSM), SavedContext(S, RD) { 13881 WasAlreadyBeingDeclared = !S.SpecialMembersBeingDeclared.insert(D).second; 13882 if (WasAlreadyBeingDeclared) 13883 // This almost never happens, but if it does, ensure that our cache 13884 // doesn't contain a stale result. 13885 S.SpecialMemberCache.clear(); 13886 else { 13887 // Register a note to be produced if we encounter an error while 13888 // declaring the special member. 13889 Sema::CodeSynthesisContext Ctx; 13890 Ctx.Kind = Sema::CodeSynthesisContext::DeclaringSpecialMember; 13891 // FIXME: We don't have a location to use here. Using the class's 13892 // location maintains the fiction that we declare all special members 13893 // with the class, but (1) it's not clear that lying about that helps our 13894 // users understand what's going on, and (2) there may be outer contexts 13895 // on the stack (some of which are relevant) and printing them exposes 13896 // our lies. 13897 Ctx.PointOfInstantiation = RD->getLocation(); 13898 Ctx.Entity = RD; 13899 Ctx.SpecialMember = CSM; 13900 S.pushCodeSynthesisContext(Ctx); 13901 } 13902 } 13903 ~DeclaringSpecialMember() { 13904 if (!WasAlreadyBeingDeclared) { 13905 S.SpecialMembersBeingDeclared.erase(D); 13906 S.popCodeSynthesisContext(); 13907 } 13908 } 13909 13910 /// Are we already trying to declare this special member? 13911 bool isAlreadyBeingDeclared() const { 13912 return WasAlreadyBeingDeclared; 13913 } 13914 }; 13915 } 13916 13917 void Sema::CheckImplicitSpecialMemberDeclaration(Scope *S, FunctionDecl *FD) { 13918 // Look up any existing declarations, but don't trigger declaration of all 13919 // implicit special members with this name. 13920 DeclarationName Name = FD->getDeclName(); 13921 LookupResult R(*this, Name, SourceLocation(), LookupOrdinaryName, 13922 ForExternalRedeclaration); 13923 for (auto *D : FD->getParent()->lookup(Name)) 13924 if (auto *Acceptable = R.getAcceptableDecl(D)) 13925 R.addDecl(Acceptable); 13926 R.resolveKind(); 13927 R.suppressDiagnostics(); 13928 13929 CheckFunctionDeclaration(S, FD, R, /*IsMemberSpecialization*/ false, 13930 FD->isThisDeclarationADefinition()); 13931 } 13932 13933 void Sema::setupImplicitSpecialMemberType(CXXMethodDecl *SpecialMem, 13934 QualType ResultTy, 13935 ArrayRef<QualType> Args) { 13936 // Build an exception specification pointing back at this constructor. 13937 FunctionProtoType::ExtProtoInfo EPI = getImplicitMethodEPI(*this, SpecialMem); 13938 13939 LangAS AS = getDefaultCXXMethodAddrSpace(); 13940 if (AS != LangAS::Default) { 13941 EPI.TypeQuals.addAddressSpace(AS); 13942 } 13943 13944 auto QT = Context.getFunctionType(ResultTy, Args, EPI); 13945 SpecialMem->setType(QT); 13946 13947 // During template instantiation of implicit special member functions we need 13948 // a reliable TypeSourceInfo for the function prototype in order to allow 13949 // functions to be substituted. 13950 if (inTemplateInstantiation() && 13951 cast<CXXRecordDecl>(SpecialMem->getParent())->isLambda()) { 13952 TypeSourceInfo *TSI = 13953 Context.getTrivialTypeSourceInfo(SpecialMem->getType()); 13954 SpecialMem->setTypeSourceInfo(TSI); 13955 } 13956 } 13957 13958 CXXConstructorDecl *Sema::DeclareImplicitDefaultConstructor( 13959 CXXRecordDecl *ClassDecl) { 13960 // C++ [class.ctor]p5: 13961 // A default constructor for a class X is a constructor of class X 13962 // that can be called without an argument. If there is no 13963 // user-declared constructor for class X, a default constructor is 13964 // implicitly declared. An implicitly-declared default constructor 13965 // is an inline public member of its class. 13966 assert(ClassDecl->needsImplicitDefaultConstructor() && 13967 "Should not build implicit default constructor!"); 13968 13969 DeclaringSpecialMember DSM(*this, ClassDecl, CXXDefaultConstructor); 13970 if (DSM.isAlreadyBeingDeclared()) 13971 return nullptr; 13972 13973 bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl, 13974 CXXDefaultConstructor, 13975 false); 13976 13977 // Create the actual constructor declaration. 13978 CanQualType ClassType 13979 = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl)); 13980 SourceLocation ClassLoc = ClassDecl->getLocation(); 13981 DeclarationName Name 13982 = Context.DeclarationNames.getCXXConstructorName(ClassType); 13983 DeclarationNameInfo NameInfo(Name, ClassLoc); 13984 CXXConstructorDecl *DefaultCon = CXXConstructorDecl::Create( 13985 Context, ClassDecl, ClassLoc, NameInfo, /*Type*/ QualType(), 13986 /*TInfo=*/nullptr, ExplicitSpecifier(), 13987 getCurFPFeatures().isFPConstrained(), 13988 /*isInline=*/true, /*isImplicitlyDeclared=*/true, 13989 Constexpr ? ConstexprSpecKind::Constexpr 13990 : ConstexprSpecKind::Unspecified); 13991 DefaultCon->setAccess(AS_public); 13992 DefaultCon->setDefaulted(); 13993 13994 setupImplicitSpecialMemberType(DefaultCon, Context.VoidTy, std::nullopt); 13995 13996 if (getLangOpts().CUDA) 13997 inferCUDATargetForImplicitSpecialMember(ClassDecl, CXXDefaultConstructor, 13998 DefaultCon, 13999 /* ConstRHS */ false, 14000 /* Diagnose */ false); 14001 14002 // We don't need to use SpecialMemberIsTrivial here; triviality for default 14003 // constructors is easy to compute. 14004 DefaultCon->setTrivial(ClassDecl->hasTrivialDefaultConstructor()); 14005 14006 // Note that we have declared this constructor. 14007 ++getASTContext().NumImplicitDefaultConstructorsDeclared; 14008 14009 Scope *S = getScopeForContext(ClassDecl); 14010 CheckImplicitSpecialMemberDeclaration(S, DefaultCon); 14011 14012 if (ShouldDeleteSpecialMember(DefaultCon, CXXDefaultConstructor)) 14013 SetDeclDeleted(DefaultCon, ClassLoc); 14014 14015 if (S) 14016 PushOnScopeChains(DefaultCon, S, false); 14017 ClassDecl->addDecl(DefaultCon); 14018 14019 return DefaultCon; 14020 } 14021 14022 void Sema::DefineImplicitDefaultConstructor(SourceLocation CurrentLocation, 14023 CXXConstructorDecl *Constructor) { 14024 assert((Constructor->isDefaulted() && Constructor->isDefaultConstructor() && 14025 !Constructor->doesThisDeclarationHaveABody() && 14026 !Constructor->isDeleted()) && 14027 "DefineImplicitDefaultConstructor - call it for implicit default ctor"); 14028 if (Constructor->willHaveBody() || Constructor->isInvalidDecl()) 14029 return; 14030 14031 CXXRecordDecl *ClassDecl = Constructor->getParent(); 14032 assert(ClassDecl && "DefineImplicitDefaultConstructor - invalid constructor"); 14033 14034 SynthesizedFunctionScope Scope(*this, Constructor); 14035 14036 // The exception specification is needed because we are defining the 14037 // function. 14038 ResolveExceptionSpec(CurrentLocation, 14039 Constructor->getType()->castAs<FunctionProtoType>()); 14040 MarkVTableUsed(CurrentLocation, ClassDecl); 14041 14042 // Add a context note for diagnostics produced after this point. 14043 Scope.addContextNote(CurrentLocation); 14044 14045 if (SetCtorInitializers(Constructor, /*AnyErrors=*/false)) { 14046 Constructor->setInvalidDecl(); 14047 return; 14048 } 14049 14050 SourceLocation Loc = Constructor->getEndLoc().isValid() 14051 ? Constructor->getEndLoc() 14052 : Constructor->getLocation(); 14053 Constructor->setBody(new (Context) CompoundStmt(Loc)); 14054 Constructor->markUsed(Context); 14055 14056 if (ASTMutationListener *L = getASTMutationListener()) { 14057 L->CompletedImplicitDefinition(Constructor); 14058 } 14059 14060 DiagnoseUninitializedFields(*this, Constructor); 14061 } 14062 14063 void Sema::ActOnFinishDelayedMemberInitializers(Decl *D) { 14064 // Perform any delayed checks on exception specifications. 14065 CheckDelayedMemberExceptionSpecs(); 14066 } 14067 14068 /// Find or create the fake constructor we synthesize to model constructing an 14069 /// object of a derived class via a constructor of a base class. 14070 CXXConstructorDecl * 14071 Sema::findInheritingConstructor(SourceLocation Loc, 14072 CXXConstructorDecl *BaseCtor, 14073 ConstructorUsingShadowDecl *Shadow) { 14074 CXXRecordDecl *Derived = Shadow->getParent(); 14075 SourceLocation UsingLoc = Shadow->getLocation(); 14076 14077 // FIXME: Add a new kind of DeclarationName for an inherited constructor. 14078 // For now we use the name of the base class constructor as a member of the 14079 // derived class to indicate a (fake) inherited constructor name. 14080 DeclarationName Name = BaseCtor->getDeclName(); 14081 14082 // Check to see if we already have a fake constructor for this inherited 14083 // constructor call. 14084 for (NamedDecl *Ctor : Derived->lookup(Name)) 14085 if (declaresSameEntity(cast<CXXConstructorDecl>(Ctor) 14086 ->getInheritedConstructor() 14087 .getConstructor(), 14088 BaseCtor)) 14089 return cast<CXXConstructorDecl>(Ctor); 14090 14091 DeclarationNameInfo NameInfo(Name, UsingLoc); 14092 TypeSourceInfo *TInfo = 14093 Context.getTrivialTypeSourceInfo(BaseCtor->getType(), UsingLoc); 14094 FunctionProtoTypeLoc ProtoLoc = 14095 TInfo->getTypeLoc().IgnoreParens().castAs<FunctionProtoTypeLoc>(); 14096 14097 // Check the inherited constructor is valid and find the list of base classes 14098 // from which it was inherited. 14099 InheritedConstructorInfo ICI(*this, Loc, Shadow); 14100 14101 bool Constexpr = 14102 BaseCtor->isConstexpr() && 14103 defaultedSpecialMemberIsConstexpr(*this, Derived, CXXDefaultConstructor, 14104 false, BaseCtor, &ICI); 14105 14106 CXXConstructorDecl *DerivedCtor = CXXConstructorDecl::Create( 14107 Context, Derived, UsingLoc, NameInfo, TInfo->getType(), TInfo, 14108 BaseCtor->getExplicitSpecifier(), getCurFPFeatures().isFPConstrained(), 14109 /*isInline=*/true, 14110 /*isImplicitlyDeclared=*/true, 14111 Constexpr ? BaseCtor->getConstexprKind() : ConstexprSpecKind::Unspecified, 14112 InheritedConstructor(Shadow, BaseCtor), 14113 BaseCtor->getTrailingRequiresClause()); 14114 if (Shadow->isInvalidDecl()) 14115 DerivedCtor->setInvalidDecl(); 14116 14117 // Build an unevaluated exception specification for this fake constructor. 14118 const FunctionProtoType *FPT = TInfo->getType()->castAs<FunctionProtoType>(); 14119 FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo(); 14120 EPI.ExceptionSpec.Type = EST_Unevaluated; 14121 EPI.ExceptionSpec.SourceDecl = DerivedCtor; 14122 DerivedCtor->setType(Context.getFunctionType(FPT->getReturnType(), 14123 FPT->getParamTypes(), EPI)); 14124 14125 // Build the parameter declarations. 14126 SmallVector<ParmVarDecl *, 16> ParamDecls; 14127 for (unsigned I = 0, N = FPT->getNumParams(); I != N; ++I) { 14128 TypeSourceInfo *TInfo = 14129 Context.getTrivialTypeSourceInfo(FPT->getParamType(I), UsingLoc); 14130 ParmVarDecl *PD = ParmVarDecl::Create( 14131 Context, DerivedCtor, UsingLoc, UsingLoc, /*IdentifierInfo=*/nullptr, 14132 FPT->getParamType(I), TInfo, SC_None, /*DefArg=*/nullptr); 14133 PD->setScopeInfo(0, I); 14134 PD->setImplicit(); 14135 // Ensure attributes are propagated onto parameters (this matters for 14136 // format, pass_object_size, ...). 14137 mergeDeclAttributes(PD, BaseCtor->getParamDecl(I)); 14138 ParamDecls.push_back(PD); 14139 ProtoLoc.setParam(I, PD); 14140 } 14141 14142 // Set up the new constructor. 14143 assert(!BaseCtor->isDeleted() && "should not use deleted constructor"); 14144 DerivedCtor->setAccess(BaseCtor->getAccess()); 14145 DerivedCtor->setParams(ParamDecls); 14146 Derived->addDecl(DerivedCtor); 14147 14148 if (ShouldDeleteSpecialMember(DerivedCtor, CXXDefaultConstructor, &ICI)) 14149 SetDeclDeleted(DerivedCtor, UsingLoc); 14150 14151 return DerivedCtor; 14152 } 14153 14154 void Sema::NoteDeletedInheritingConstructor(CXXConstructorDecl *Ctor) { 14155 InheritedConstructorInfo ICI(*this, Ctor->getLocation(), 14156 Ctor->getInheritedConstructor().getShadowDecl()); 14157 ShouldDeleteSpecialMember(Ctor, CXXDefaultConstructor, &ICI, 14158 /*Diagnose*/true); 14159 } 14160 14161 void Sema::DefineInheritingConstructor(SourceLocation CurrentLocation, 14162 CXXConstructorDecl *Constructor) { 14163 CXXRecordDecl *ClassDecl = Constructor->getParent(); 14164 assert(Constructor->getInheritedConstructor() && 14165 !Constructor->doesThisDeclarationHaveABody() && 14166 !Constructor->isDeleted()); 14167 if (Constructor->willHaveBody() || Constructor->isInvalidDecl()) 14168 return; 14169 14170 // Initializations are performed "as if by a defaulted default constructor", 14171 // so enter the appropriate scope. 14172 SynthesizedFunctionScope Scope(*this, Constructor); 14173 14174 // The exception specification is needed because we are defining the 14175 // function. 14176 ResolveExceptionSpec(CurrentLocation, 14177 Constructor->getType()->castAs<FunctionProtoType>()); 14178 MarkVTableUsed(CurrentLocation, ClassDecl); 14179 14180 // Add a context note for diagnostics produced after this point. 14181 Scope.addContextNote(CurrentLocation); 14182 14183 ConstructorUsingShadowDecl *Shadow = 14184 Constructor->getInheritedConstructor().getShadowDecl(); 14185 CXXConstructorDecl *InheritedCtor = 14186 Constructor->getInheritedConstructor().getConstructor(); 14187 14188 // [class.inhctor.init]p1: 14189 // initialization proceeds as if a defaulted default constructor is used to 14190 // initialize the D object and each base class subobject from which the 14191 // constructor was inherited 14192 14193 InheritedConstructorInfo ICI(*this, CurrentLocation, Shadow); 14194 CXXRecordDecl *RD = Shadow->getParent(); 14195 SourceLocation InitLoc = Shadow->getLocation(); 14196 14197 // Build explicit initializers for all base classes from which the 14198 // constructor was inherited. 14199 SmallVector<CXXCtorInitializer*, 8> Inits; 14200 for (bool VBase : {false, true}) { 14201 for (CXXBaseSpecifier &B : VBase ? RD->vbases() : RD->bases()) { 14202 if (B.isVirtual() != VBase) 14203 continue; 14204 14205 auto *BaseRD = B.getType()->getAsCXXRecordDecl(); 14206 if (!BaseRD) 14207 continue; 14208 14209 auto BaseCtor = ICI.findConstructorForBase(BaseRD, InheritedCtor); 14210 if (!BaseCtor.first) 14211 continue; 14212 14213 MarkFunctionReferenced(CurrentLocation, BaseCtor.first); 14214 ExprResult Init = new (Context) CXXInheritedCtorInitExpr( 14215 InitLoc, B.getType(), BaseCtor.first, VBase, BaseCtor.second); 14216 14217 auto *TInfo = Context.getTrivialTypeSourceInfo(B.getType(), InitLoc); 14218 Inits.push_back(new (Context) CXXCtorInitializer( 14219 Context, TInfo, VBase, InitLoc, Init.get(), InitLoc, 14220 SourceLocation())); 14221 } 14222 } 14223 14224 // We now proceed as if for a defaulted default constructor, with the relevant 14225 // initializers replaced. 14226 14227 if (SetCtorInitializers(Constructor, /*AnyErrors*/false, Inits)) { 14228 Constructor->setInvalidDecl(); 14229 return; 14230 } 14231 14232 Constructor->setBody(new (Context) CompoundStmt(InitLoc)); 14233 Constructor->markUsed(Context); 14234 14235 if (ASTMutationListener *L = getASTMutationListener()) { 14236 L->CompletedImplicitDefinition(Constructor); 14237 } 14238 14239 DiagnoseUninitializedFields(*this, Constructor); 14240 } 14241 14242 CXXDestructorDecl *Sema::DeclareImplicitDestructor(CXXRecordDecl *ClassDecl) { 14243 // C++ [class.dtor]p2: 14244 // If a class has no user-declared destructor, a destructor is 14245 // declared implicitly. An implicitly-declared destructor is an 14246 // inline public member of its class. 14247 assert(ClassDecl->needsImplicitDestructor()); 14248 14249 DeclaringSpecialMember DSM(*this, ClassDecl, CXXDestructor); 14250 if (DSM.isAlreadyBeingDeclared()) 14251 return nullptr; 14252 14253 bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl, 14254 CXXDestructor, 14255 false); 14256 14257 // Create the actual destructor declaration. 14258 CanQualType ClassType 14259 = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl)); 14260 SourceLocation ClassLoc = ClassDecl->getLocation(); 14261 DeclarationName Name 14262 = Context.DeclarationNames.getCXXDestructorName(ClassType); 14263 DeclarationNameInfo NameInfo(Name, ClassLoc); 14264 CXXDestructorDecl *Destructor = CXXDestructorDecl::Create( 14265 Context, ClassDecl, ClassLoc, NameInfo, QualType(), nullptr, 14266 getCurFPFeatures().isFPConstrained(), 14267 /*isInline=*/true, 14268 /*isImplicitlyDeclared=*/true, 14269 Constexpr ? ConstexprSpecKind::Constexpr 14270 : ConstexprSpecKind::Unspecified); 14271 Destructor->setAccess(AS_public); 14272 Destructor->setDefaulted(); 14273 14274 setupImplicitSpecialMemberType(Destructor, Context.VoidTy, std::nullopt); 14275 14276 if (getLangOpts().CUDA) 14277 inferCUDATargetForImplicitSpecialMember(ClassDecl, CXXDestructor, 14278 Destructor, 14279 /* ConstRHS */ false, 14280 /* Diagnose */ false); 14281 14282 // We don't need to use SpecialMemberIsTrivial here; triviality for 14283 // destructors is easy to compute. 14284 Destructor->setTrivial(ClassDecl->hasTrivialDestructor()); 14285 Destructor->setTrivialForCall(ClassDecl->hasAttr<TrivialABIAttr>() || 14286 ClassDecl->hasTrivialDestructorForCall()); 14287 14288 // Note that we have declared this destructor. 14289 ++getASTContext().NumImplicitDestructorsDeclared; 14290 14291 Scope *S = getScopeForContext(ClassDecl); 14292 CheckImplicitSpecialMemberDeclaration(S, Destructor); 14293 14294 // We can't check whether an implicit destructor is deleted before we complete 14295 // the definition of the class, because its validity depends on the alignment 14296 // of the class. We'll check this from ActOnFields once the class is complete. 14297 if (ClassDecl->isCompleteDefinition() && 14298 ShouldDeleteSpecialMember(Destructor, CXXDestructor)) 14299 SetDeclDeleted(Destructor, ClassLoc); 14300 14301 // Introduce this destructor into its scope. 14302 if (S) 14303 PushOnScopeChains(Destructor, S, false); 14304 ClassDecl->addDecl(Destructor); 14305 14306 return Destructor; 14307 } 14308 14309 void Sema::DefineImplicitDestructor(SourceLocation CurrentLocation, 14310 CXXDestructorDecl *Destructor) { 14311 assert((Destructor->isDefaulted() && 14312 !Destructor->doesThisDeclarationHaveABody() && 14313 !Destructor->isDeleted()) && 14314 "DefineImplicitDestructor - call it for implicit default dtor"); 14315 if (Destructor->willHaveBody() || Destructor->isInvalidDecl()) 14316 return; 14317 14318 CXXRecordDecl *ClassDecl = Destructor->getParent(); 14319 assert(ClassDecl && "DefineImplicitDestructor - invalid destructor"); 14320 14321 SynthesizedFunctionScope Scope(*this, Destructor); 14322 14323 // The exception specification is needed because we are defining the 14324 // function. 14325 ResolveExceptionSpec(CurrentLocation, 14326 Destructor->getType()->castAs<FunctionProtoType>()); 14327 MarkVTableUsed(CurrentLocation, ClassDecl); 14328 14329 // Add a context note for diagnostics produced after this point. 14330 Scope.addContextNote(CurrentLocation); 14331 14332 MarkBaseAndMemberDestructorsReferenced(Destructor->getLocation(), 14333 Destructor->getParent()); 14334 14335 if (CheckDestructor(Destructor)) { 14336 Destructor->setInvalidDecl(); 14337 return; 14338 } 14339 14340 SourceLocation Loc = Destructor->getEndLoc().isValid() 14341 ? Destructor->getEndLoc() 14342 : Destructor->getLocation(); 14343 Destructor->setBody(new (Context) CompoundStmt(Loc)); 14344 Destructor->markUsed(Context); 14345 14346 if (ASTMutationListener *L = getASTMutationListener()) { 14347 L->CompletedImplicitDefinition(Destructor); 14348 } 14349 } 14350 14351 void Sema::CheckCompleteDestructorVariant(SourceLocation CurrentLocation, 14352 CXXDestructorDecl *Destructor) { 14353 if (Destructor->isInvalidDecl()) 14354 return; 14355 14356 CXXRecordDecl *ClassDecl = Destructor->getParent(); 14357 assert(Context.getTargetInfo().getCXXABI().isMicrosoft() && 14358 "implicit complete dtors unneeded outside MS ABI"); 14359 assert(ClassDecl->getNumVBases() > 0 && 14360 "complete dtor only exists for classes with vbases"); 14361 14362 SynthesizedFunctionScope Scope(*this, Destructor); 14363 14364 // Add a context note for diagnostics produced after this point. 14365 Scope.addContextNote(CurrentLocation); 14366 14367 MarkVirtualBaseDestructorsReferenced(Destructor->getLocation(), ClassDecl); 14368 } 14369 14370 /// Perform any semantic analysis which needs to be delayed until all 14371 /// pending class member declarations have been parsed. 14372 void Sema::ActOnFinishCXXMemberDecls() { 14373 // If the context is an invalid C++ class, just suppress these checks. 14374 if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(CurContext)) { 14375 if (Record->isInvalidDecl()) { 14376 DelayedOverridingExceptionSpecChecks.clear(); 14377 DelayedEquivalentExceptionSpecChecks.clear(); 14378 return; 14379 } 14380 checkForMultipleExportedDefaultConstructors(*this, Record); 14381 } 14382 } 14383 14384 void Sema::ActOnFinishCXXNonNestedClass() { 14385 referenceDLLExportedClassMethods(); 14386 14387 if (!DelayedDllExportMemberFunctions.empty()) { 14388 SmallVector<CXXMethodDecl*, 4> WorkList; 14389 std::swap(DelayedDllExportMemberFunctions, WorkList); 14390 for (CXXMethodDecl *M : WorkList) { 14391 DefineDefaultedFunction(*this, M, M->getLocation()); 14392 14393 // Pass the method to the consumer to get emitted. This is not necessary 14394 // for explicit instantiation definitions, as they will get emitted 14395 // anyway. 14396 if (M->getParent()->getTemplateSpecializationKind() != 14397 TSK_ExplicitInstantiationDefinition) 14398 ActOnFinishInlineFunctionDef(M); 14399 } 14400 } 14401 } 14402 14403 void Sema::referenceDLLExportedClassMethods() { 14404 if (!DelayedDllExportClasses.empty()) { 14405 // Calling ReferenceDllExportedMembers might cause the current function to 14406 // be called again, so use a local copy of DelayedDllExportClasses. 14407 SmallVector<CXXRecordDecl *, 4> WorkList; 14408 std::swap(DelayedDllExportClasses, WorkList); 14409 for (CXXRecordDecl *Class : WorkList) 14410 ReferenceDllExportedMembers(*this, Class); 14411 } 14412 } 14413 14414 void Sema::AdjustDestructorExceptionSpec(CXXDestructorDecl *Destructor) { 14415 assert(getLangOpts().CPlusPlus11 && 14416 "adjusting dtor exception specs was introduced in c++11"); 14417 14418 if (Destructor->isDependentContext()) 14419 return; 14420 14421 // C++11 [class.dtor]p3: 14422 // A declaration of a destructor that does not have an exception- 14423 // specification is implicitly considered to have the same exception- 14424 // specification as an implicit declaration. 14425 const auto *DtorType = Destructor->getType()->castAs<FunctionProtoType>(); 14426 if (DtorType->hasExceptionSpec()) 14427 return; 14428 14429 // Replace the destructor's type, building off the existing one. Fortunately, 14430 // the only thing of interest in the destructor type is its extended info. 14431 // The return and arguments are fixed. 14432 FunctionProtoType::ExtProtoInfo EPI = DtorType->getExtProtoInfo(); 14433 EPI.ExceptionSpec.Type = EST_Unevaluated; 14434 EPI.ExceptionSpec.SourceDecl = Destructor; 14435 Destructor->setType( 14436 Context.getFunctionType(Context.VoidTy, std::nullopt, EPI)); 14437 14438 // FIXME: If the destructor has a body that could throw, and the newly created 14439 // spec doesn't allow exceptions, we should emit a warning, because this 14440 // change in behavior can break conforming C++03 programs at runtime. 14441 // However, we don't have a body or an exception specification yet, so it 14442 // needs to be done somewhere else. 14443 } 14444 14445 namespace { 14446 /// An abstract base class for all helper classes used in building the 14447 // copy/move operators. These classes serve as factory functions and help us 14448 // avoid using the same Expr* in the AST twice. 14449 class ExprBuilder { 14450 ExprBuilder(const ExprBuilder&) = delete; 14451 ExprBuilder &operator=(const ExprBuilder&) = delete; 14452 14453 protected: 14454 static Expr *assertNotNull(Expr *E) { 14455 assert(E && "Expression construction must not fail."); 14456 return E; 14457 } 14458 14459 public: 14460 ExprBuilder() {} 14461 virtual ~ExprBuilder() {} 14462 14463 virtual Expr *build(Sema &S, SourceLocation Loc) const = 0; 14464 }; 14465 14466 class RefBuilder: public ExprBuilder { 14467 VarDecl *Var; 14468 QualType VarType; 14469 14470 public: 14471 Expr *build(Sema &S, SourceLocation Loc) const override { 14472 return assertNotNull(S.BuildDeclRefExpr(Var, VarType, VK_LValue, Loc)); 14473 } 14474 14475 RefBuilder(VarDecl *Var, QualType VarType) 14476 : Var(Var), VarType(VarType) {} 14477 }; 14478 14479 class ThisBuilder: public ExprBuilder { 14480 public: 14481 Expr *build(Sema &S, SourceLocation Loc) const override { 14482 return assertNotNull(S.ActOnCXXThis(Loc).getAs<Expr>()); 14483 } 14484 }; 14485 14486 class CastBuilder: public ExprBuilder { 14487 const ExprBuilder &Builder; 14488 QualType Type; 14489 ExprValueKind Kind; 14490 const CXXCastPath &Path; 14491 14492 public: 14493 Expr *build(Sema &S, SourceLocation Loc) const override { 14494 return assertNotNull(S.ImpCastExprToType(Builder.build(S, Loc), Type, 14495 CK_UncheckedDerivedToBase, Kind, 14496 &Path).get()); 14497 } 14498 14499 CastBuilder(const ExprBuilder &Builder, QualType Type, ExprValueKind Kind, 14500 const CXXCastPath &Path) 14501 : Builder(Builder), Type(Type), Kind(Kind), Path(Path) {} 14502 }; 14503 14504 class DerefBuilder: public ExprBuilder { 14505 const ExprBuilder &Builder; 14506 14507 public: 14508 Expr *build(Sema &S, SourceLocation Loc) const override { 14509 return assertNotNull( 14510 S.CreateBuiltinUnaryOp(Loc, UO_Deref, Builder.build(S, Loc)).get()); 14511 } 14512 14513 DerefBuilder(const ExprBuilder &Builder) : Builder(Builder) {} 14514 }; 14515 14516 class MemberBuilder: public ExprBuilder { 14517 const ExprBuilder &Builder; 14518 QualType Type; 14519 CXXScopeSpec SS; 14520 bool IsArrow; 14521 LookupResult &MemberLookup; 14522 14523 public: 14524 Expr *build(Sema &S, SourceLocation Loc) const override { 14525 return assertNotNull(S.BuildMemberReferenceExpr( 14526 Builder.build(S, Loc), Type, Loc, IsArrow, SS, SourceLocation(), 14527 nullptr, MemberLookup, nullptr, nullptr).get()); 14528 } 14529 14530 MemberBuilder(const ExprBuilder &Builder, QualType Type, bool IsArrow, 14531 LookupResult &MemberLookup) 14532 : Builder(Builder), Type(Type), IsArrow(IsArrow), 14533 MemberLookup(MemberLookup) {} 14534 }; 14535 14536 class MoveCastBuilder: public ExprBuilder { 14537 const ExprBuilder &Builder; 14538 14539 public: 14540 Expr *build(Sema &S, SourceLocation Loc) const override { 14541 return assertNotNull(CastForMoving(S, Builder.build(S, Loc))); 14542 } 14543 14544 MoveCastBuilder(const ExprBuilder &Builder) : Builder(Builder) {} 14545 }; 14546 14547 class LvalueConvBuilder: public ExprBuilder { 14548 const ExprBuilder &Builder; 14549 14550 public: 14551 Expr *build(Sema &S, SourceLocation Loc) const override { 14552 return assertNotNull( 14553 S.DefaultLvalueConversion(Builder.build(S, Loc)).get()); 14554 } 14555 14556 LvalueConvBuilder(const ExprBuilder &Builder) : Builder(Builder) {} 14557 }; 14558 14559 class SubscriptBuilder: public ExprBuilder { 14560 const ExprBuilder &Base; 14561 const ExprBuilder &Index; 14562 14563 public: 14564 Expr *build(Sema &S, SourceLocation Loc) const override { 14565 return assertNotNull(S.CreateBuiltinArraySubscriptExpr( 14566 Base.build(S, Loc), Loc, Index.build(S, Loc), Loc).get()); 14567 } 14568 14569 SubscriptBuilder(const ExprBuilder &Base, const ExprBuilder &Index) 14570 : Base(Base), Index(Index) {} 14571 }; 14572 14573 } // end anonymous namespace 14574 14575 /// When generating a defaulted copy or move assignment operator, if a field 14576 /// should be copied with __builtin_memcpy rather than via explicit assignments, 14577 /// do so. This optimization only applies for arrays of scalars, and for arrays 14578 /// of class type where the selected copy/move-assignment operator is trivial. 14579 static StmtResult 14580 buildMemcpyForAssignmentOp(Sema &S, SourceLocation Loc, QualType T, 14581 const ExprBuilder &ToB, const ExprBuilder &FromB) { 14582 // Compute the size of the memory buffer to be copied. 14583 QualType SizeType = S.Context.getSizeType(); 14584 llvm::APInt Size(S.Context.getTypeSize(SizeType), 14585 S.Context.getTypeSizeInChars(T).getQuantity()); 14586 14587 // Take the address of the field references for "from" and "to". We 14588 // directly construct UnaryOperators here because semantic analysis 14589 // does not permit us to take the address of an xvalue. 14590 Expr *From = FromB.build(S, Loc); 14591 From = UnaryOperator::Create( 14592 S.Context, From, UO_AddrOf, S.Context.getPointerType(From->getType()), 14593 VK_PRValue, OK_Ordinary, Loc, false, S.CurFPFeatureOverrides()); 14594 Expr *To = ToB.build(S, Loc); 14595 To = UnaryOperator::Create( 14596 S.Context, To, UO_AddrOf, S.Context.getPointerType(To->getType()), 14597 VK_PRValue, OK_Ordinary, Loc, false, S.CurFPFeatureOverrides()); 14598 14599 const Type *E = T->getBaseElementTypeUnsafe(); 14600 bool NeedsCollectableMemCpy = 14601 E->isRecordType() && 14602 E->castAs<RecordType>()->getDecl()->hasObjectMember(); 14603 14604 // Create a reference to the __builtin_objc_memmove_collectable function 14605 StringRef MemCpyName = NeedsCollectableMemCpy ? 14606 "__builtin_objc_memmove_collectable" : 14607 "__builtin_memcpy"; 14608 LookupResult R(S, &S.Context.Idents.get(MemCpyName), Loc, 14609 Sema::LookupOrdinaryName); 14610 S.LookupName(R, S.TUScope, true); 14611 14612 FunctionDecl *MemCpy = R.getAsSingle<FunctionDecl>(); 14613 if (!MemCpy) 14614 // Something went horribly wrong earlier, and we will have complained 14615 // about it. 14616 return StmtError(); 14617 14618 ExprResult MemCpyRef = S.BuildDeclRefExpr(MemCpy, S.Context.BuiltinFnTy, 14619 VK_PRValue, Loc, nullptr); 14620 assert(MemCpyRef.isUsable() && "Builtin reference cannot fail"); 14621 14622 Expr *CallArgs[] = { 14623 To, From, IntegerLiteral::Create(S.Context, Size, SizeType, Loc) 14624 }; 14625 ExprResult Call = S.BuildCallExpr(/*Scope=*/nullptr, MemCpyRef.get(), 14626 Loc, CallArgs, Loc); 14627 14628 assert(!Call.isInvalid() && "Call to __builtin_memcpy cannot fail!"); 14629 return Call.getAs<Stmt>(); 14630 } 14631 14632 /// Builds a statement that copies/moves the given entity from \p From to 14633 /// \c To. 14634 /// 14635 /// This routine is used to copy/move the members of a class with an 14636 /// implicitly-declared copy/move assignment operator. When the entities being 14637 /// copied are arrays, this routine builds for loops to copy them. 14638 /// 14639 /// \param S The Sema object used for type-checking. 14640 /// 14641 /// \param Loc The location where the implicit copy/move is being generated. 14642 /// 14643 /// \param T The type of the expressions being copied/moved. Both expressions 14644 /// must have this type. 14645 /// 14646 /// \param To The expression we are copying/moving to. 14647 /// 14648 /// \param From The expression we are copying/moving from. 14649 /// 14650 /// \param CopyingBaseSubobject Whether we're copying/moving a base subobject. 14651 /// Otherwise, it's a non-static member subobject. 14652 /// 14653 /// \param Copying Whether we're copying or moving. 14654 /// 14655 /// \param Depth Internal parameter recording the depth of the recursion. 14656 /// 14657 /// \returns A statement or a loop that copies the expressions, or StmtResult(0) 14658 /// if a memcpy should be used instead. 14659 static StmtResult 14660 buildSingleCopyAssignRecursively(Sema &S, SourceLocation Loc, QualType T, 14661 const ExprBuilder &To, const ExprBuilder &From, 14662 bool CopyingBaseSubobject, bool Copying, 14663 unsigned Depth = 0) { 14664 // C++11 [class.copy]p28: 14665 // Each subobject is assigned in the manner appropriate to its type: 14666 // 14667 // - if the subobject is of class type, as if by a call to operator= with 14668 // the subobject as the object expression and the corresponding 14669 // subobject of x as a single function argument (as if by explicit 14670 // qualification; that is, ignoring any possible virtual overriding 14671 // functions in more derived classes); 14672 // 14673 // C++03 [class.copy]p13: 14674 // - if the subobject is of class type, the copy assignment operator for 14675 // the class is used (as if by explicit qualification; that is, 14676 // ignoring any possible virtual overriding functions in more derived 14677 // classes); 14678 if (const RecordType *RecordTy = T->getAs<RecordType>()) { 14679 CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(RecordTy->getDecl()); 14680 14681 // Look for operator=. 14682 DeclarationName Name 14683 = S.Context.DeclarationNames.getCXXOperatorName(OO_Equal); 14684 LookupResult OpLookup(S, Name, Loc, Sema::LookupOrdinaryName); 14685 S.LookupQualifiedName(OpLookup, ClassDecl, false); 14686 14687 // Prior to C++11, filter out any result that isn't a copy/move-assignment 14688 // operator. 14689 if (!S.getLangOpts().CPlusPlus11) { 14690 LookupResult::Filter F = OpLookup.makeFilter(); 14691 while (F.hasNext()) { 14692 NamedDecl *D = F.next(); 14693 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D)) 14694 if (Method->isCopyAssignmentOperator() || 14695 (!Copying && Method->isMoveAssignmentOperator())) 14696 continue; 14697 14698 F.erase(); 14699 } 14700 F.done(); 14701 } 14702 14703 // Suppress the protected check (C++ [class.protected]) for each of the 14704 // assignment operators we found. This strange dance is required when 14705 // we're assigning via a base classes's copy-assignment operator. To 14706 // ensure that we're getting the right base class subobject (without 14707 // ambiguities), we need to cast "this" to that subobject type; to 14708 // ensure that we don't go through the virtual call mechanism, we need 14709 // to qualify the operator= name with the base class (see below). However, 14710 // this means that if the base class has a protected copy assignment 14711 // operator, the protected member access check will fail. So, we 14712 // rewrite "protected" access to "public" access in this case, since we 14713 // know by construction that we're calling from a derived class. 14714 if (CopyingBaseSubobject) { 14715 for (LookupResult::iterator L = OpLookup.begin(), LEnd = OpLookup.end(); 14716 L != LEnd; ++L) { 14717 if (L.getAccess() == AS_protected) 14718 L.setAccess(AS_public); 14719 } 14720 } 14721 14722 // Create the nested-name-specifier that will be used to qualify the 14723 // reference to operator=; this is required to suppress the virtual 14724 // call mechanism. 14725 CXXScopeSpec SS; 14726 const Type *CanonicalT = S.Context.getCanonicalType(T.getTypePtr()); 14727 SS.MakeTrivial(S.Context, 14728 NestedNameSpecifier::Create(S.Context, nullptr, false, 14729 CanonicalT), 14730 Loc); 14731 14732 // Create the reference to operator=. 14733 ExprResult OpEqualRef 14734 = S.BuildMemberReferenceExpr(To.build(S, Loc), T, Loc, /*IsArrow=*/false, 14735 SS, /*TemplateKWLoc=*/SourceLocation(), 14736 /*FirstQualifierInScope=*/nullptr, 14737 OpLookup, 14738 /*TemplateArgs=*/nullptr, /*S*/nullptr, 14739 /*SuppressQualifierCheck=*/true); 14740 if (OpEqualRef.isInvalid()) 14741 return StmtError(); 14742 14743 // Build the call to the assignment operator. 14744 14745 Expr *FromInst = From.build(S, Loc); 14746 ExprResult Call = S.BuildCallToMemberFunction(/*Scope=*/nullptr, 14747 OpEqualRef.getAs<Expr>(), 14748 Loc, FromInst, Loc); 14749 if (Call.isInvalid()) 14750 return StmtError(); 14751 14752 // If we built a call to a trivial 'operator=' while copying an array, 14753 // bail out. We'll replace the whole shebang with a memcpy. 14754 CXXMemberCallExpr *CE = dyn_cast<CXXMemberCallExpr>(Call.get()); 14755 if (CE && CE->getMethodDecl()->isTrivial() && Depth) 14756 return StmtResult((Stmt*)nullptr); 14757 14758 // Convert to an expression-statement, and clean up any produced 14759 // temporaries. 14760 return S.ActOnExprStmt(Call); 14761 } 14762 14763 // - if the subobject is of scalar type, the built-in assignment 14764 // operator is used. 14765 const ConstantArrayType *ArrayTy = S.Context.getAsConstantArrayType(T); 14766 if (!ArrayTy) { 14767 ExprResult Assignment = S.CreateBuiltinBinOp( 14768 Loc, BO_Assign, To.build(S, Loc), From.build(S, Loc)); 14769 if (Assignment.isInvalid()) 14770 return StmtError(); 14771 return S.ActOnExprStmt(Assignment); 14772 } 14773 14774 // - if the subobject is an array, each element is assigned, in the 14775 // manner appropriate to the element type; 14776 14777 // Construct a loop over the array bounds, e.g., 14778 // 14779 // for (__SIZE_TYPE__ i0 = 0; i0 != array-size; ++i0) 14780 // 14781 // that will copy each of the array elements. 14782 QualType SizeType = S.Context.getSizeType(); 14783 14784 // Create the iteration variable. 14785 IdentifierInfo *IterationVarName = nullptr; 14786 { 14787 SmallString<8> Str; 14788 llvm::raw_svector_ostream OS(Str); 14789 OS << "__i" << Depth; 14790 IterationVarName = &S.Context.Idents.get(OS.str()); 14791 } 14792 VarDecl *IterationVar = VarDecl::Create(S.Context, S.CurContext, Loc, Loc, 14793 IterationVarName, SizeType, 14794 S.Context.getTrivialTypeSourceInfo(SizeType, Loc), 14795 SC_None); 14796 14797 // Initialize the iteration variable to zero. 14798 llvm::APInt Zero(S.Context.getTypeSize(SizeType), 0); 14799 IterationVar->setInit(IntegerLiteral::Create(S.Context, Zero, SizeType, Loc)); 14800 14801 // Creates a reference to the iteration variable. 14802 RefBuilder IterationVarRef(IterationVar, SizeType); 14803 LvalueConvBuilder IterationVarRefRVal(IterationVarRef); 14804 14805 // Create the DeclStmt that holds the iteration variable. 14806 Stmt *InitStmt = new (S.Context) DeclStmt(DeclGroupRef(IterationVar),Loc,Loc); 14807 14808 // Subscript the "from" and "to" expressions with the iteration variable. 14809 SubscriptBuilder FromIndexCopy(From, IterationVarRefRVal); 14810 MoveCastBuilder FromIndexMove(FromIndexCopy); 14811 const ExprBuilder *FromIndex; 14812 if (Copying) 14813 FromIndex = &FromIndexCopy; 14814 else 14815 FromIndex = &FromIndexMove; 14816 14817 SubscriptBuilder ToIndex(To, IterationVarRefRVal); 14818 14819 // Build the copy/move for an individual element of the array. 14820 StmtResult Copy = 14821 buildSingleCopyAssignRecursively(S, Loc, ArrayTy->getElementType(), 14822 ToIndex, *FromIndex, CopyingBaseSubobject, 14823 Copying, Depth + 1); 14824 // Bail out if copying fails or if we determined that we should use memcpy. 14825 if (Copy.isInvalid() || !Copy.get()) 14826 return Copy; 14827 14828 // Create the comparison against the array bound. 14829 llvm::APInt Upper 14830 = ArrayTy->getSize().zextOrTrunc(S.Context.getTypeSize(SizeType)); 14831 Expr *Comparison = BinaryOperator::Create( 14832 S.Context, IterationVarRefRVal.build(S, Loc), 14833 IntegerLiteral::Create(S.Context, Upper, SizeType, Loc), BO_NE, 14834 S.Context.BoolTy, VK_PRValue, OK_Ordinary, Loc, 14835 S.CurFPFeatureOverrides()); 14836 14837 // Create the pre-increment of the iteration variable. We can determine 14838 // whether the increment will overflow based on the value of the array 14839 // bound. 14840 Expr *Increment = UnaryOperator::Create( 14841 S.Context, IterationVarRef.build(S, Loc), UO_PreInc, SizeType, VK_LValue, 14842 OK_Ordinary, Loc, Upper.isMaxValue(), S.CurFPFeatureOverrides()); 14843 14844 // Construct the loop that copies all elements of this array. 14845 return S.ActOnForStmt( 14846 Loc, Loc, InitStmt, 14847 S.ActOnCondition(nullptr, Loc, Comparison, Sema::ConditionKind::Boolean), 14848 S.MakeFullDiscardedValueExpr(Increment), Loc, Copy.get()); 14849 } 14850 14851 static StmtResult 14852 buildSingleCopyAssign(Sema &S, SourceLocation Loc, QualType T, 14853 const ExprBuilder &To, const ExprBuilder &From, 14854 bool CopyingBaseSubobject, bool Copying) { 14855 // Maybe we should use a memcpy? 14856 if (T->isArrayType() && !T.isConstQualified() && !T.isVolatileQualified() && 14857 T.isTriviallyCopyableType(S.Context)) 14858 return buildMemcpyForAssignmentOp(S, Loc, T, To, From); 14859 14860 StmtResult Result(buildSingleCopyAssignRecursively(S, Loc, T, To, From, 14861 CopyingBaseSubobject, 14862 Copying, 0)); 14863 14864 // If we ended up picking a trivial assignment operator for an array of a 14865 // non-trivially-copyable class type, just emit a memcpy. 14866 if (!Result.isInvalid() && !Result.get()) 14867 return buildMemcpyForAssignmentOp(S, Loc, T, To, From); 14868 14869 return Result; 14870 } 14871 14872 CXXMethodDecl *Sema::DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl) { 14873 // Note: The following rules are largely analoguous to the copy 14874 // constructor rules. Note that virtual bases are not taken into account 14875 // for determining the argument type of the operator. Note also that 14876 // operators taking an object instead of a reference are allowed. 14877 assert(ClassDecl->needsImplicitCopyAssignment()); 14878 14879 DeclaringSpecialMember DSM(*this, ClassDecl, CXXCopyAssignment); 14880 if (DSM.isAlreadyBeingDeclared()) 14881 return nullptr; 14882 14883 QualType ArgType = Context.getTypeDeclType(ClassDecl); 14884 ArgType = Context.getElaboratedType(ElaboratedTypeKeyword::None, nullptr, 14885 ArgType, nullptr); 14886 LangAS AS = getDefaultCXXMethodAddrSpace(); 14887 if (AS != LangAS::Default) 14888 ArgType = Context.getAddrSpaceQualType(ArgType, AS); 14889 QualType RetType = Context.getLValueReferenceType(ArgType); 14890 bool Const = ClassDecl->implicitCopyAssignmentHasConstParam(); 14891 if (Const) 14892 ArgType = ArgType.withConst(); 14893 14894 ArgType = Context.getLValueReferenceType(ArgType); 14895 14896 bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl, 14897 CXXCopyAssignment, 14898 Const); 14899 14900 // An implicitly-declared copy assignment operator is an inline public 14901 // member of its class. 14902 DeclarationName Name = Context.DeclarationNames.getCXXOperatorName(OO_Equal); 14903 SourceLocation ClassLoc = ClassDecl->getLocation(); 14904 DeclarationNameInfo NameInfo(Name, ClassLoc); 14905 CXXMethodDecl *CopyAssignment = CXXMethodDecl::Create( 14906 Context, ClassDecl, ClassLoc, NameInfo, QualType(), 14907 /*TInfo=*/nullptr, /*StorageClass=*/SC_None, 14908 getCurFPFeatures().isFPConstrained(), 14909 /*isInline=*/true, 14910 Constexpr ? ConstexprSpecKind::Constexpr : ConstexprSpecKind::Unspecified, 14911 SourceLocation()); 14912 CopyAssignment->setAccess(AS_public); 14913 CopyAssignment->setDefaulted(); 14914 CopyAssignment->setImplicit(); 14915 14916 setupImplicitSpecialMemberType(CopyAssignment, RetType, ArgType); 14917 14918 if (getLangOpts().CUDA) 14919 inferCUDATargetForImplicitSpecialMember(ClassDecl, CXXCopyAssignment, 14920 CopyAssignment, 14921 /* ConstRHS */ Const, 14922 /* Diagnose */ false); 14923 14924 // Add the parameter to the operator. 14925 ParmVarDecl *FromParam = ParmVarDecl::Create(Context, CopyAssignment, 14926 ClassLoc, ClassLoc, 14927 /*Id=*/nullptr, ArgType, 14928 /*TInfo=*/nullptr, SC_None, 14929 nullptr); 14930 CopyAssignment->setParams(FromParam); 14931 14932 CopyAssignment->setTrivial( 14933 ClassDecl->needsOverloadResolutionForCopyAssignment() 14934 ? SpecialMemberIsTrivial(CopyAssignment, CXXCopyAssignment) 14935 : ClassDecl->hasTrivialCopyAssignment()); 14936 14937 // Note that we have added this copy-assignment operator. 14938 ++getASTContext().NumImplicitCopyAssignmentOperatorsDeclared; 14939 14940 Scope *S = getScopeForContext(ClassDecl); 14941 CheckImplicitSpecialMemberDeclaration(S, CopyAssignment); 14942 14943 if (ShouldDeleteSpecialMember(CopyAssignment, CXXCopyAssignment)) { 14944 ClassDecl->setImplicitCopyAssignmentIsDeleted(); 14945 SetDeclDeleted(CopyAssignment, ClassLoc); 14946 } 14947 14948 if (S) 14949 PushOnScopeChains(CopyAssignment, S, false); 14950 ClassDecl->addDecl(CopyAssignment); 14951 14952 return CopyAssignment; 14953 } 14954 14955 /// Diagnose an implicit copy operation for a class which is odr-used, but 14956 /// which is deprecated because the class has a user-declared copy constructor, 14957 /// copy assignment operator, or destructor. 14958 static void diagnoseDeprecatedCopyOperation(Sema &S, CXXMethodDecl *CopyOp) { 14959 assert(CopyOp->isImplicit()); 14960 14961 CXXRecordDecl *RD = CopyOp->getParent(); 14962 CXXMethodDecl *UserDeclaredOperation = nullptr; 14963 14964 if (RD->hasUserDeclaredDestructor()) { 14965 UserDeclaredOperation = RD->getDestructor(); 14966 } else if (!isa<CXXConstructorDecl>(CopyOp) && 14967 RD->hasUserDeclaredCopyConstructor()) { 14968 // Find any user-declared copy constructor. 14969 for (auto *I : RD->ctors()) { 14970 if (I->isCopyConstructor()) { 14971 UserDeclaredOperation = I; 14972 break; 14973 } 14974 } 14975 assert(UserDeclaredOperation); 14976 } else if (isa<CXXConstructorDecl>(CopyOp) && 14977 RD->hasUserDeclaredCopyAssignment()) { 14978 // Find any user-declared move assignment operator. 14979 for (auto *I : RD->methods()) { 14980 if (I->isCopyAssignmentOperator()) { 14981 UserDeclaredOperation = I; 14982 break; 14983 } 14984 } 14985 assert(UserDeclaredOperation); 14986 } 14987 14988 if (UserDeclaredOperation) { 14989 bool UDOIsUserProvided = UserDeclaredOperation->isUserProvided(); 14990 bool UDOIsDestructor = isa<CXXDestructorDecl>(UserDeclaredOperation); 14991 bool IsCopyAssignment = !isa<CXXConstructorDecl>(CopyOp); 14992 unsigned DiagID = 14993 (UDOIsUserProvided && UDOIsDestructor) 14994 ? diag::warn_deprecated_copy_with_user_provided_dtor 14995 : (UDOIsUserProvided && !UDOIsDestructor) 14996 ? diag::warn_deprecated_copy_with_user_provided_copy 14997 : (!UDOIsUserProvided && UDOIsDestructor) 14998 ? diag::warn_deprecated_copy_with_dtor 14999 : diag::warn_deprecated_copy; 15000 S.Diag(UserDeclaredOperation->getLocation(), DiagID) 15001 << RD << IsCopyAssignment; 15002 } 15003 } 15004 15005 void Sema::DefineImplicitCopyAssignment(SourceLocation CurrentLocation, 15006 CXXMethodDecl *CopyAssignOperator) { 15007 assert((CopyAssignOperator->isDefaulted() && 15008 CopyAssignOperator->isOverloadedOperator() && 15009 CopyAssignOperator->getOverloadedOperator() == OO_Equal && 15010 !CopyAssignOperator->doesThisDeclarationHaveABody() && 15011 !CopyAssignOperator->isDeleted()) && 15012 "DefineImplicitCopyAssignment called for wrong function"); 15013 if (CopyAssignOperator->willHaveBody() || CopyAssignOperator->isInvalidDecl()) 15014 return; 15015 15016 CXXRecordDecl *ClassDecl = CopyAssignOperator->getParent(); 15017 if (ClassDecl->isInvalidDecl()) { 15018 CopyAssignOperator->setInvalidDecl(); 15019 return; 15020 } 15021 15022 SynthesizedFunctionScope Scope(*this, CopyAssignOperator); 15023 15024 // The exception specification is needed because we are defining the 15025 // function. 15026 ResolveExceptionSpec(CurrentLocation, 15027 CopyAssignOperator->getType()->castAs<FunctionProtoType>()); 15028 15029 // Add a context note for diagnostics produced after this point. 15030 Scope.addContextNote(CurrentLocation); 15031 15032 // C++11 [class.copy]p18: 15033 // The [definition of an implicitly declared copy assignment operator] is 15034 // deprecated if the class has a user-declared copy constructor or a 15035 // user-declared destructor. 15036 if (getLangOpts().CPlusPlus11 && CopyAssignOperator->isImplicit()) 15037 diagnoseDeprecatedCopyOperation(*this, CopyAssignOperator); 15038 15039 // C++0x [class.copy]p30: 15040 // The implicitly-defined or explicitly-defaulted copy assignment operator 15041 // for a non-union class X performs memberwise copy assignment of its 15042 // subobjects. The direct base classes of X are assigned first, in the 15043 // order of their declaration in the base-specifier-list, and then the 15044 // immediate non-static data members of X are assigned, in the order in 15045 // which they were declared in the class definition. 15046 15047 // The statements that form the synthesized function body. 15048 SmallVector<Stmt*, 8> Statements; 15049 15050 // The parameter for the "other" object, which we are copying from. 15051 ParmVarDecl *Other = CopyAssignOperator->getNonObjectParameter(0); 15052 Qualifiers OtherQuals = Other->getType().getQualifiers(); 15053 QualType OtherRefType = Other->getType(); 15054 if (OtherRefType->isLValueReferenceType()) { 15055 OtherRefType = OtherRefType->getPointeeType(); 15056 OtherQuals = OtherRefType.getQualifiers(); 15057 } 15058 15059 // Our location for everything implicitly-generated. 15060 SourceLocation Loc = CopyAssignOperator->getEndLoc().isValid() 15061 ? CopyAssignOperator->getEndLoc() 15062 : CopyAssignOperator->getLocation(); 15063 15064 // Builds a DeclRefExpr for the "other" object. 15065 RefBuilder OtherRef(Other, OtherRefType); 15066 15067 // Builds the function object parameter. 15068 std::optional<ThisBuilder> This; 15069 std::optional<DerefBuilder> DerefThis; 15070 std::optional<RefBuilder> ExplicitObject; 15071 bool IsArrow = false; 15072 QualType ObjectType; 15073 if (CopyAssignOperator->isExplicitObjectMemberFunction()) { 15074 ObjectType = CopyAssignOperator->getParamDecl(0)->getType(); 15075 if (ObjectType->isReferenceType()) 15076 ObjectType = ObjectType->getPointeeType(); 15077 ExplicitObject.emplace(CopyAssignOperator->getParamDecl(0), ObjectType); 15078 } else { 15079 ObjectType = getCurrentThisType(); 15080 This.emplace(); 15081 DerefThis.emplace(*This); 15082 IsArrow = !LangOpts.HLSL; 15083 } 15084 ExprBuilder &ObjectParameter = 15085 ExplicitObject ? static_cast<ExprBuilder &>(*ExplicitObject) 15086 : static_cast<ExprBuilder &>(*This); 15087 15088 // Assign base classes. 15089 bool Invalid = false; 15090 for (auto &Base : ClassDecl->bases()) { 15091 // Form the assignment: 15092 // static_cast<Base*>(this)->Base::operator=(static_cast<Base&>(other)); 15093 QualType BaseType = Base.getType().getUnqualifiedType(); 15094 if (!BaseType->isRecordType()) { 15095 Invalid = true; 15096 continue; 15097 } 15098 15099 CXXCastPath BasePath; 15100 BasePath.push_back(&Base); 15101 15102 // Construct the "from" expression, which is an implicit cast to the 15103 // appropriately-qualified base type. 15104 CastBuilder From(OtherRef, Context.getQualifiedType(BaseType, OtherQuals), 15105 VK_LValue, BasePath); 15106 15107 // Dereference "this". 15108 CastBuilder To( 15109 ExplicitObject ? static_cast<ExprBuilder &>(*ExplicitObject) 15110 : static_cast<ExprBuilder &>(*DerefThis), 15111 Context.getQualifiedType(BaseType, ObjectType.getQualifiers()), 15112 VK_LValue, BasePath); 15113 15114 // Build the copy. 15115 StmtResult Copy = buildSingleCopyAssign(*this, Loc, BaseType, 15116 To, From, 15117 /*CopyingBaseSubobject=*/true, 15118 /*Copying=*/true); 15119 if (Copy.isInvalid()) { 15120 CopyAssignOperator->setInvalidDecl(); 15121 return; 15122 } 15123 15124 // Success! Record the copy. 15125 Statements.push_back(Copy.getAs<Expr>()); 15126 } 15127 15128 // Assign non-static members. 15129 for (auto *Field : ClassDecl->fields()) { 15130 // FIXME: We should form some kind of AST representation for the implied 15131 // memcpy in a union copy operation. 15132 if (Field->isUnnamedBitfield() || Field->getParent()->isUnion()) 15133 continue; 15134 15135 if (Field->isInvalidDecl()) { 15136 Invalid = true; 15137 continue; 15138 } 15139 15140 // Check for members of reference type; we can't copy those. 15141 if (Field->getType()->isReferenceType()) { 15142 Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign) 15143 << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName(); 15144 Diag(Field->getLocation(), diag::note_declared_at); 15145 Invalid = true; 15146 continue; 15147 } 15148 15149 // Check for members of const-qualified, non-class type. 15150 QualType BaseType = Context.getBaseElementType(Field->getType()); 15151 if (!BaseType->getAs<RecordType>() && BaseType.isConstQualified()) { 15152 Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign) 15153 << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName(); 15154 Diag(Field->getLocation(), diag::note_declared_at); 15155 Invalid = true; 15156 continue; 15157 } 15158 15159 // Suppress assigning zero-width bitfields. 15160 if (Field->isZeroLengthBitField(Context)) 15161 continue; 15162 15163 QualType FieldType = Field->getType().getNonReferenceType(); 15164 if (FieldType->isIncompleteArrayType()) { 15165 assert(ClassDecl->hasFlexibleArrayMember() && 15166 "Incomplete array type is not valid"); 15167 continue; 15168 } 15169 15170 // Build references to the field in the object we're copying from and to. 15171 CXXScopeSpec SS; // Intentionally empty 15172 LookupResult MemberLookup(*this, Field->getDeclName(), Loc, 15173 LookupMemberName); 15174 MemberLookup.addDecl(Field); 15175 MemberLookup.resolveKind(); 15176 15177 MemberBuilder From(OtherRef, OtherRefType, /*IsArrow=*/false, MemberLookup); 15178 MemberBuilder To(ObjectParameter, ObjectType, IsArrow, MemberLookup); 15179 // Build the copy of this field. 15180 StmtResult Copy = buildSingleCopyAssign(*this, Loc, FieldType, 15181 To, From, 15182 /*CopyingBaseSubobject=*/false, 15183 /*Copying=*/true); 15184 if (Copy.isInvalid()) { 15185 CopyAssignOperator->setInvalidDecl(); 15186 return; 15187 } 15188 15189 // Success! Record the copy. 15190 Statements.push_back(Copy.getAs<Stmt>()); 15191 } 15192 15193 if (!Invalid) { 15194 // Add a "return *this;" 15195 Expr *ThisExpr = 15196 (ExplicitObject ? static_cast<ExprBuilder &>(*ExplicitObject) 15197 : LangOpts.HLSL ? static_cast<ExprBuilder &>(*This) 15198 : static_cast<ExprBuilder &>(*DerefThis)) 15199 .build(*this, Loc); 15200 StmtResult Return = BuildReturnStmt(Loc, ThisExpr); 15201 if (Return.isInvalid()) 15202 Invalid = true; 15203 else 15204 Statements.push_back(Return.getAs<Stmt>()); 15205 } 15206 15207 if (Invalid) { 15208 CopyAssignOperator->setInvalidDecl(); 15209 return; 15210 } 15211 15212 StmtResult Body; 15213 { 15214 CompoundScopeRAII CompoundScope(*this); 15215 Body = ActOnCompoundStmt(Loc, Loc, Statements, 15216 /*isStmtExpr=*/false); 15217 assert(!Body.isInvalid() && "Compound statement creation cannot fail"); 15218 } 15219 CopyAssignOperator->setBody(Body.getAs<Stmt>()); 15220 CopyAssignOperator->markUsed(Context); 15221 15222 if (ASTMutationListener *L = getASTMutationListener()) { 15223 L->CompletedImplicitDefinition(CopyAssignOperator); 15224 } 15225 } 15226 15227 CXXMethodDecl *Sema::DeclareImplicitMoveAssignment(CXXRecordDecl *ClassDecl) { 15228 assert(ClassDecl->needsImplicitMoveAssignment()); 15229 15230 DeclaringSpecialMember DSM(*this, ClassDecl, CXXMoveAssignment); 15231 if (DSM.isAlreadyBeingDeclared()) 15232 return nullptr; 15233 15234 // Note: The following rules are largely analoguous to the move 15235 // constructor rules. 15236 15237 QualType ArgType = Context.getTypeDeclType(ClassDecl); 15238 ArgType = Context.getElaboratedType(ElaboratedTypeKeyword::None, nullptr, 15239 ArgType, nullptr); 15240 LangAS AS = getDefaultCXXMethodAddrSpace(); 15241 if (AS != LangAS::Default) 15242 ArgType = Context.getAddrSpaceQualType(ArgType, AS); 15243 QualType RetType = Context.getLValueReferenceType(ArgType); 15244 ArgType = Context.getRValueReferenceType(ArgType); 15245 15246 bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl, 15247 CXXMoveAssignment, 15248 false); 15249 15250 // An implicitly-declared move assignment operator is an inline public 15251 // member of its class. 15252 DeclarationName Name = Context.DeclarationNames.getCXXOperatorName(OO_Equal); 15253 SourceLocation ClassLoc = ClassDecl->getLocation(); 15254 DeclarationNameInfo NameInfo(Name, ClassLoc); 15255 CXXMethodDecl *MoveAssignment = CXXMethodDecl::Create( 15256 Context, ClassDecl, ClassLoc, NameInfo, QualType(), 15257 /*TInfo=*/nullptr, /*StorageClass=*/SC_None, 15258 getCurFPFeatures().isFPConstrained(), 15259 /*isInline=*/true, 15260 Constexpr ? ConstexprSpecKind::Constexpr : ConstexprSpecKind::Unspecified, 15261 SourceLocation()); 15262 MoveAssignment->setAccess(AS_public); 15263 MoveAssignment->setDefaulted(); 15264 MoveAssignment->setImplicit(); 15265 15266 setupImplicitSpecialMemberType(MoveAssignment, RetType, ArgType); 15267 15268 if (getLangOpts().CUDA) 15269 inferCUDATargetForImplicitSpecialMember(ClassDecl, CXXMoveAssignment, 15270 MoveAssignment, 15271 /* ConstRHS */ false, 15272 /* Diagnose */ false); 15273 15274 // Add the parameter to the operator. 15275 ParmVarDecl *FromParam = ParmVarDecl::Create(Context, MoveAssignment, 15276 ClassLoc, ClassLoc, 15277 /*Id=*/nullptr, ArgType, 15278 /*TInfo=*/nullptr, SC_None, 15279 nullptr); 15280 MoveAssignment->setParams(FromParam); 15281 15282 MoveAssignment->setTrivial( 15283 ClassDecl->needsOverloadResolutionForMoveAssignment() 15284 ? SpecialMemberIsTrivial(MoveAssignment, CXXMoveAssignment) 15285 : ClassDecl->hasTrivialMoveAssignment()); 15286 15287 // Note that we have added this copy-assignment operator. 15288 ++getASTContext().NumImplicitMoveAssignmentOperatorsDeclared; 15289 15290 Scope *S = getScopeForContext(ClassDecl); 15291 CheckImplicitSpecialMemberDeclaration(S, MoveAssignment); 15292 15293 if (ShouldDeleteSpecialMember(MoveAssignment, CXXMoveAssignment)) { 15294 ClassDecl->setImplicitMoveAssignmentIsDeleted(); 15295 SetDeclDeleted(MoveAssignment, ClassLoc); 15296 } 15297 15298 if (S) 15299 PushOnScopeChains(MoveAssignment, S, false); 15300 ClassDecl->addDecl(MoveAssignment); 15301 15302 return MoveAssignment; 15303 } 15304 15305 /// Check if we're implicitly defining a move assignment operator for a class 15306 /// with virtual bases. Such a move assignment might move-assign the virtual 15307 /// base multiple times. 15308 static void checkMoveAssignmentForRepeatedMove(Sema &S, CXXRecordDecl *Class, 15309 SourceLocation CurrentLocation) { 15310 assert(!Class->isDependentContext() && "should not define dependent move"); 15311 15312 // Only a virtual base could get implicitly move-assigned multiple times. 15313 // Only a non-trivial move assignment can observe this. We only want to 15314 // diagnose if we implicitly define an assignment operator that assigns 15315 // two base classes, both of which move-assign the same virtual base. 15316 if (Class->getNumVBases() == 0 || Class->hasTrivialMoveAssignment() || 15317 Class->getNumBases() < 2) 15318 return; 15319 15320 llvm::SmallVector<CXXBaseSpecifier *, 16> Worklist; 15321 typedef llvm::DenseMap<CXXRecordDecl*, CXXBaseSpecifier*> VBaseMap; 15322 VBaseMap VBases; 15323 15324 for (auto &BI : Class->bases()) { 15325 Worklist.push_back(&BI); 15326 while (!Worklist.empty()) { 15327 CXXBaseSpecifier *BaseSpec = Worklist.pop_back_val(); 15328 CXXRecordDecl *Base = BaseSpec->getType()->getAsCXXRecordDecl(); 15329 15330 // If the base has no non-trivial move assignment operators, 15331 // we don't care about moves from it. 15332 if (!Base->hasNonTrivialMoveAssignment()) 15333 continue; 15334 15335 // If there's nothing virtual here, skip it. 15336 if (!BaseSpec->isVirtual() && !Base->getNumVBases()) 15337 continue; 15338 15339 // If we're not actually going to call a move assignment for this base, 15340 // or the selected move assignment is trivial, skip it. 15341 Sema::SpecialMemberOverloadResult SMOR = 15342 S.LookupSpecialMember(Base, Sema::CXXMoveAssignment, 15343 /*ConstArg*/false, /*VolatileArg*/false, 15344 /*RValueThis*/true, /*ConstThis*/false, 15345 /*VolatileThis*/false); 15346 if (!SMOR.getMethod() || SMOR.getMethod()->isTrivial() || 15347 !SMOR.getMethod()->isMoveAssignmentOperator()) 15348 continue; 15349 15350 if (BaseSpec->isVirtual()) { 15351 // We're going to move-assign this virtual base, and its move 15352 // assignment operator is not trivial. If this can happen for 15353 // multiple distinct direct bases of Class, diagnose it. (If it 15354 // only happens in one base, we'll diagnose it when synthesizing 15355 // that base class's move assignment operator.) 15356 CXXBaseSpecifier *&Existing = 15357 VBases.insert(std::make_pair(Base->getCanonicalDecl(), &BI)) 15358 .first->second; 15359 if (Existing && Existing != &BI) { 15360 S.Diag(CurrentLocation, diag::warn_vbase_moved_multiple_times) 15361 << Class << Base; 15362 S.Diag(Existing->getBeginLoc(), diag::note_vbase_moved_here) 15363 << (Base->getCanonicalDecl() == 15364 Existing->getType()->getAsCXXRecordDecl()->getCanonicalDecl()) 15365 << Base << Existing->getType() << Existing->getSourceRange(); 15366 S.Diag(BI.getBeginLoc(), diag::note_vbase_moved_here) 15367 << (Base->getCanonicalDecl() == 15368 BI.getType()->getAsCXXRecordDecl()->getCanonicalDecl()) 15369 << Base << BI.getType() << BaseSpec->getSourceRange(); 15370 15371 // Only diagnose each vbase once. 15372 Existing = nullptr; 15373 } 15374 } else { 15375 // Only walk over bases that have defaulted move assignment operators. 15376 // We assume that any user-provided move assignment operator handles 15377 // the multiple-moves-of-vbase case itself somehow. 15378 if (!SMOR.getMethod()->isDefaulted()) 15379 continue; 15380 15381 // We're going to move the base classes of Base. Add them to the list. 15382 llvm::append_range(Worklist, llvm::make_pointer_range(Base->bases())); 15383 } 15384 } 15385 } 15386 } 15387 15388 void Sema::DefineImplicitMoveAssignment(SourceLocation CurrentLocation, 15389 CXXMethodDecl *MoveAssignOperator) { 15390 assert((MoveAssignOperator->isDefaulted() && 15391 MoveAssignOperator->isOverloadedOperator() && 15392 MoveAssignOperator->getOverloadedOperator() == OO_Equal && 15393 !MoveAssignOperator->doesThisDeclarationHaveABody() && 15394 !MoveAssignOperator->isDeleted()) && 15395 "DefineImplicitMoveAssignment called for wrong function"); 15396 if (MoveAssignOperator->willHaveBody() || MoveAssignOperator->isInvalidDecl()) 15397 return; 15398 15399 CXXRecordDecl *ClassDecl = MoveAssignOperator->getParent(); 15400 if (ClassDecl->isInvalidDecl()) { 15401 MoveAssignOperator->setInvalidDecl(); 15402 return; 15403 } 15404 15405 // C++0x [class.copy]p28: 15406 // The implicitly-defined or move assignment operator for a non-union class 15407 // X performs memberwise move assignment of its subobjects. The direct base 15408 // classes of X are assigned first, in the order of their declaration in the 15409 // base-specifier-list, and then the immediate non-static data members of X 15410 // are assigned, in the order in which they were declared in the class 15411 // definition. 15412 15413 // Issue a warning if our implicit move assignment operator will move 15414 // from a virtual base more than once. 15415 checkMoveAssignmentForRepeatedMove(*this, ClassDecl, CurrentLocation); 15416 15417 SynthesizedFunctionScope Scope(*this, MoveAssignOperator); 15418 15419 // The exception specification is needed because we are defining the 15420 // function. 15421 ResolveExceptionSpec(CurrentLocation, 15422 MoveAssignOperator->getType()->castAs<FunctionProtoType>()); 15423 15424 // Add a context note for diagnostics produced after this point. 15425 Scope.addContextNote(CurrentLocation); 15426 15427 // The statements that form the synthesized function body. 15428 SmallVector<Stmt*, 8> Statements; 15429 15430 // The parameter for the "other" object, which we are move from. 15431 ParmVarDecl *Other = MoveAssignOperator->getNonObjectParameter(0); 15432 QualType OtherRefType = 15433 Other->getType()->castAs<RValueReferenceType>()->getPointeeType(); 15434 15435 // Our location for everything implicitly-generated. 15436 SourceLocation Loc = MoveAssignOperator->getEndLoc().isValid() 15437 ? MoveAssignOperator->getEndLoc() 15438 : MoveAssignOperator->getLocation(); 15439 15440 // Builds a reference to the "other" object. 15441 RefBuilder OtherRef(Other, OtherRefType); 15442 // Cast to rvalue. 15443 MoveCastBuilder MoveOther(OtherRef); 15444 15445 // Builds the function object parameter. 15446 std::optional<ThisBuilder> This; 15447 std::optional<DerefBuilder> DerefThis; 15448 std::optional<RefBuilder> ExplicitObject; 15449 QualType ObjectType; 15450 if (MoveAssignOperator->isExplicitObjectMemberFunction()) { 15451 ObjectType = MoveAssignOperator->getParamDecl(0)->getType(); 15452 if (ObjectType->isReferenceType()) 15453 ObjectType = ObjectType->getPointeeType(); 15454 ExplicitObject.emplace(MoveAssignOperator->getParamDecl(0), ObjectType); 15455 } else { 15456 ObjectType = getCurrentThisType(); 15457 This.emplace(); 15458 DerefThis.emplace(*This); 15459 } 15460 ExprBuilder &ObjectParameter = 15461 ExplicitObject ? *ExplicitObject : static_cast<ExprBuilder &>(*This); 15462 15463 // Assign base classes. 15464 bool Invalid = false; 15465 for (auto &Base : ClassDecl->bases()) { 15466 // C++11 [class.copy]p28: 15467 // It is unspecified whether subobjects representing virtual base classes 15468 // are assigned more than once by the implicitly-defined copy assignment 15469 // operator. 15470 // FIXME: Do not assign to a vbase that will be assigned by some other base 15471 // class. For a move-assignment, this can result in the vbase being moved 15472 // multiple times. 15473 15474 // Form the assignment: 15475 // static_cast<Base*>(this)->Base::operator=(static_cast<Base&&>(other)); 15476 QualType BaseType = Base.getType().getUnqualifiedType(); 15477 if (!BaseType->isRecordType()) { 15478 Invalid = true; 15479 continue; 15480 } 15481 15482 CXXCastPath BasePath; 15483 BasePath.push_back(&Base); 15484 15485 // Construct the "from" expression, which is an implicit cast to the 15486 // appropriately-qualified base type. 15487 CastBuilder From(OtherRef, BaseType, VK_XValue, BasePath); 15488 15489 // Implicitly cast "this" to the appropriately-qualified base type. 15490 // Dereference "this". 15491 CastBuilder To( 15492 ExplicitObject ? static_cast<ExprBuilder &>(*ExplicitObject) 15493 : static_cast<ExprBuilder &>(*DerefThis), 15494 Context.getQualifiedType(BaseType, ObjectType.getQualifiers()), 15495 VK_LValue, BasePath); 15496 15497 // Build the move. 15498 StmtResult Move = buildSingleCopyAssign(*this, Loc, BaseType, 15499 To, From, 15500 /*CopyingBaseSubobject=*/true, 15501 /*Copying=*/false); 15502 if (Move.isInvalid()) { 15503 MoveAssignOperator->setInvalidDecl(); 15504 return; 15505 } 15506 15507 // Success! Record the move. 15508 Statements.push_back(Move.getAs<Expr>()); 15509 } 15510 15511 // Assign non-static members. 15512 for (auto *Field : ClassDecl->fields()) { 15513 // FIXME: We should form some kind of AST representation for the implied 15514 // memcpy in a union copy operation. 15515 if (Field->isUnnamedBitfield() || Field->getParent()->isUnion()) 15516 continue; 15517 15518 if (Field->isInvalidDecl()) { 15519 Invalid = true; 15520 continue; 15521 } 15522 15523 // Check for members of reference type; we can't move those. 15524 if (Field->getType()->isReferenceType()) { 15525 Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign) 15526 << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName(); 15527 Diag(Field->getLocation(), diag::note_declared_at); 15528 Invalid = true; 15529 continue; 15530 } 15531 15532 // Check for members of const-qualified, non-class type. 15533 QualType BaseType = Context.getBaseElementType(Field->getType()); 15534 if (!BaseType->getAs<RecordType>() && BaseType.isConstQualified()) { 15535 Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign) 15536 << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName(); 15537 Diag(Field->getLocation(), diag::note_declared_at); 15538 Invalid = true; 15539 continue; 15540 } 15541 15542 // Suppress assigning zero-width bitfields. 15543 if (Field->isZeroLengthBitField(Context)) 15544 continue; 15545 15546 QualType FieldType = Field->getType().getNonReferenceType(); 15547 if (FieldType->isIncompleteArrayType()) { 15548 assert(ClassDecl->hasFlexibleArrayMember() && 15549 "Incomplete array type is not valid"); 15550 continue; 15551 } 15552 15553 // Build references to the field in the object we're copying from and to. 15554 LookupResult MemberLookup(*this, Field->getDeclName(), Loc, 15555 LookupMemberName); 15556 MemberLookup.addDecl(Field); 15557 MemberLookup.resolveKind(); 15558 MemberBuilder From(MoveOther, OtherRefType, 15559 /*IsArrow=*/false, MemberLookup); 15560 MemberBuilder To(ObjectParameter, ObjectType, /*IsArrow=*/!ExplicitObject, 15561 MemberLookup); 15562 15563 assert(!From.build(*this, Loc)->isLValue() && // could be xvalue or prvalue 15564 "Member reference with rvalue base must be rvalue except for reference " 15565 "members, which aren't allowed for move assignment."); 15566 15567 // Build the move of this field. 15568 StmtResult Move = buildSingleCopyAssign(*this, Loc, FieldType, 15569 To, From, 15570 /*CopyingBaseSubobject=*/false, 15571 /*Copying=*/false); 15572 if (Move.isInvalid()) { 15573 MoveAssignOperator->setInvalidDecl(); 15574 return; 15575 } 15576 15577 // Success! Record the copy. 15578 Statements.push_back(Move.getAs<Stmt>()); 15579 } 15580 15581 if (!Invalid) { 15582 // Add a "return *this;" 15583 Expr *ThisExpr = 15584 (ExplicitObject ? static_cast<ExprBuilder &>(*ExplicitObject) 15585 : static_cast<ExprBuilder &>(*DerefThis)) 15586 .build(*this, Loc); 15587 15588 StmtResult Return = BuildReturnStmt(Loc, ThisExpr); 15589 if (Return.isInvalid()) 15590 Invalid = true; 15591 else 15592 Statements.push_back(Return.getAs<Stmt>()); 15593 } 15594 15595 if (Invalid) { 15596 MoveAssignOperator->setInvalidDecl(); 15597 return; 15598 } 15599 15600 StmtResult Body; 15601 { 15602 CompoundScopeRAII CompoundScope(*this); 15603 Body = ActOnCompoundStmt(Loc, Loc, Statements, 15604 /*isStmtExpr=*/false); 15605 assert(!Body.isInvalid() && "Compound statement creation cannot fail"); 15606 } 15607 MoveAssignOperator->setBody(Body.getAs<Stmt>()); 15608 MoveAssignOperator->markUsed(Context); 15609 15610 if (ASTMutationListener *L = getASTMutationListener()) { 15611 L->CompletedImplicitDefinition(MoveAssignOperator); 15612 } 15613 } 15614 15615 CXXConstructorDecl *Sema::DeclareImplicitCopyConstructor( 15616 CXXRecordDecl *ClassDecl) { 15617 // C++ [class.copy]p4: 15618 // If the class definition does not explicitly declare a copy 15619 // constructor, one is declared implicitly. 15620 assert(ClassDecl->needsImplicitCopyConstructor()); 15621 15622 DeclaringSpecialMember DSM(*this, ClassDecl, CXXCopyConstructor); 15623 if (DSM.isAlreadyBeingDeclared()) 15624 return nullptr; 15625 15626 QualType ClassType = Context.getTypeDeclType(ClassDecl); 15627 QualType ArgType = ClassType; 15628 ArgType = Context.getElaboratedType(ElaboratedTypeKeyword::None, nullptr, 15629 ArgType, nullptr); 15630 bool Const = ClassDecl->implicitCopyConstructorHasConstParam(); 15631 if (Const) 15632 ArgType = ArgType.withConst(); 15633 15634 LangAS AS = getDefaultCXXMethodAddrSpace(); 15635 if (AS != LangAS::Default) 15636 ArgType = Context.getAddrSpaceQualType(ArgType, AS); 15637 15638 ArgType = Context.getLValueReferenceType(ArgType); 15639 15640 bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl, 15641 CXXCopyConstructor, 15642 Const); 15643 15644 DeclarationName Name 15645 = Context.DeclarationNames.getCXXConstructorName( 15646 Context.getCanonicalType(ClassType)); 15647 SourceLocation ClassLoc = ClassDecl->getLocation(); 15648 DeclarationNameInfo NameInfo(Name, ClassLoc); 15649 15650 // An implicitly-declared copy constructor is an inline public 15651 // member of its class. 15652 CXXConstructorDecl *CopyConstructor = CXXConstructorDecl::Create( 15653 Context, ClassDecl, ClassLoc, NameInfo, QualType(), /*TInfo=*/nullptr, 15654 ExplicitSpecifier(), getCurFPFeatures().isFPConstrained(), 15655 /*isInline=*/true, 15656 /*isImplicitlyDeclared=*/true, 15657 Constexpr ? ConstexprSpecKind::Constexpr 15658 : ConstexprSpecKind::Unspecified); 15659 CopyConstructor->setAccess(AS_public); 15660 CopyConstructor->setDefaulted(); 15661 15662 setupImplicitSpecialMemberType(CopyConstructor, Context.VoidTy, ArgType); 15663 15664 if (getLangOpts().CUDA) 15665 inferCUDATargetForImplicitSpecialMember(ClassDecl, CXXCopyConstructor, 15666 CopyConstructor, 15667 /* ConstRHS */ Const, 15668 /* Diagnose */ false); 15669 15670 // During template instantiation of special member functions we need a 15671 // reliable TypeSourceInfo for the parameter types in order to allow functions 15672 // to be substituted. 15673 TypeSourceInfo *TSI = nullptr; 15674 if (inTemplateInstantiation() && ClassDecl->isLambda()) 15675 TSI = Context.getTrivialTypeSourceInfo(ArgType); 15676 15677 // Add the parameter to the constructor. 15678 ParmVarDecl *FromParam = 15679 ParmVarDecl::Create(Context, CopyConstructor, ClassLoc, ClassLoc, 15680 /*IdentifierInfo=*/nullptr, ArgType, 15681 /*TInfo=*/TSI, SC_None, nullptr); 15682 CopyConstructor->setParams(FromParam); 15683 15684 CopyConstructor->setTrivial( 15685 ClassDecl->needsOverloadResolutionForCopyConstructor() 15686 ? SpecialMemberIsTrivial(CopyConstructor, CXXCopyConstructor) 15687 : ClassDecl->hasTrivialCopyConstructor()); 15688 15689 CopyConstructor->setTrivialForCall( 15690 ClassDecl->hasAttr<TrivialABIAttr>() || 15691 (ClassDecl->needsOverloadResolutionForCopyConstructor() 15692 ? SpecialMemberIsTrivial(CopyConstructor, CXXCopyConstructor, 15693 TAH_ConsiderTrivialABI) 15694 : ClassDecl->hasTrivialCopyConstructorForCall())); 15695 15696 // Note that we have declared this constructor. 15697 ++getASTContext().NumImplicitCopyConstructorsDeclared; 15698 15699 Scope *S = getScopeForContext(ClassDecl); 15700 CheckImplicitSpecialMemberDeclaration(S, CopyConstructor); 15701 15702 if (ShouldDeleteSpecialMember(CopyConstructor, CXXCopyConstructor)) { 15703 ClassDecl->setImplicitCopyConstructorIsDeleted(); 15704 SetDeclDeleted(CopyConstructor, ClassLoc); 15705 } 15706 15707 if (S) 15708 PushOnScopeChains(CopyConstructor, S, false); 15709 ClassDecl->addDecl(CopyConstructor); 15710 15711 return CopyConstructor; 15712 } 15713 15714 void Sema::DefineImplicitCopyConstructor(SourceLocation CurrentLocation, 15715 CXXConstructorDecl *CopyConstructor) { 15716 assert((CopyConstructor->isDefaulted() && 15717 CopyConstructor->isCopyConstructor() && 15718 !CopyConstructor->doesThisDeclarationHaveABody() && 15719 !CopyConstructor->isDeleted()) && 15720 "DefineImplicitCopyConstructor - call it for implicit copy ctor"); 15721 if (CopyConstructor->willHaveBody() || CopyConstructor->isInvalidDecl()) 15722 return; 15723 15724 CXXRecordDecl *ClassDecl = CopyConstructor->getParent(); 15725 assert(ClassDecl && "DefineImplicitCopyConstructor - invalid constructor"); 15726 15727 SynthesizedFunctionScope Scope(*this, CopyConstructor); 15728 15729 // The exception specification is needed because we are defining the 15730 // function. 15731 ResolveExceptionSpec(CurrentLocation, 15732 CopyConstructor->getType()->castAs<FunctionProtoType>()); 15733 MarkVTableUsed(CurrentLocation, ClassDecl); 15734 15735 // Add a context note for diagnostics produced after this point. 15736 Scope.addContextNote(CurrentLocation); 15737 15738 // C++11 [class.copy]p7: 15739 // The [definition of an implicitly declared copy constructor] is 15740 // deprecated if the class has a user-declared copy assignment operator 15741 // or a user-declared destructor. 15742 if (getLangOpts().CPlusPlus11 && CopyConstructor->isImplicit()) 15743 diagnoseDeprecatedCopyOperation(*this, CopyConstructor); 15744 15745 if (SetCtorInitializers(CopyConstructor, /*AnyErrors=*/false)) { 15746 CopyConstructor->setInvalidDecl(); 15747 } else { 15748 SourceLocation Loc = CopyConstructor->getEndLoc().isValid() 15749 ? CopyConstructor->getEndLoc() 15750 : CopyConstructor->getLocation(); 15751 Sema::CompoundScopeRAII CompoundScope(*this); 15752 CopyConstructor->setBody( 15753 ActOnCompoundStmt(Loc, Loc, std::nullopt, /*isStmtExpr=*/false) 15754 .getAs<Stmt>()); 15755 CopyConstructor->markUsed(Context); 15756 } 15757 15758 if (ASTMutationListener *L = getASTMutationListener()) { 15759 L->CompletedImplicitDefinition(CopyConstructor); 15760 } 15761 } 15762 15763 CXXConstructorDecl *Sema::DeclareImplicitMoveConstructor( 15764 CXXRecordDecl *ClassDecl) { 15765 assert(ClassDecl->needsImplicitMoveConstructor()); 15766 15767 DeclaringSpecialMember DSM(*this, ClassDecl, CXXMoveConstructor); 15768 if (DSM.isAlreadyBeingDeclared()) 15769 return nullptr; 15770 15771 QualType ClassType = Context.getTypeDeclType(ClassDecl); 15772 15773 QualType ArgType = ClassType; 15774 ArgType = Context.getElaboratedType(ElaboratedTypeKeyword::None, nullptr, 15775 ArgType, nullptr); 15776 LangAS AS = getDefaultCXXMethodAddrSpace(); 15777 if (AS != LangAS::Default) 15778 ArgType = Context.getAddrSpaceQualType(ClassType, AS); 15779 ArgType = Context.getRValueReferenceType(ArgType); 15780 15781 bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl, 15782 CXXMoveConstructor, 15783 false); 15784 15785 DeclarationName Name 15786 = Context.DeclarationNames.getCXXConstructorName( 15787 Context.getCanonicalType(ClassType)); 15788 SourceLocation ClassLoc = ClassDecl->getLocation(); 15789 DeclarationNameInfo NameInfo(Name, ClassLoc); 15790 15791 // C++11 [class.copy]p11: 15792 // An implicitly-declared copy/move constructor is an inline public 15793 // member of its class. 15794 CXXConstructorDecl *MoveConstructor = CXXConstructorDecl::Create( 15795 Context, ClassDecl, ClassLoc, NameInfo, QualType(), /*TInfo=*/nullptr, 15796 ExplicitSpecifier(), getCurFPFeatures().isFPConstrained(), 15797 /*isInline=*/true, 15798 /*isImplicitlyDeclared=*/true, 15799 Constexpr ? ConstexprSpecKind::Constexpr 15800 : ConstexprSpecKind::Unspecified); 15801 MoveConstructor->setAccess(AS_public); 15802 MoveConstructor->setDefaulted(); 15803 15804 setupImplicitSpecialMemberType(MoveConstructor, Context.VoidTy, ArgType); 15805 15806 if (getLangOpts().CUDA) 15807 inferCUDATargetForImplicitSpecialMember(ClassDecl, CXXMoveConstructor, 15808 MoveConstructor, 15809 /* ConstRHS */ false, 15810 /* Diagnose */ false); 15811 15812 // Add the parameter to the constructor. 15813 ParmVarDecl *FromParam = ParmVarDecl::Create(Context, MoveConstructor, 15814 ClassLoc, ClassLoc, 15815 /*IdentifierInfo=*/nullptr, 15816 ArgType, /*TInfo=*/nullptr, 15817 SC_None, nullptr); 15818 MoveConstructor->setParams(FromParam); 15819 15820 MoveConstructor->setTrivial( 15821 ClassDecl->needsOverloadResolutionForMoveConstructor() 15822 ? SpecialMemberIsTrivial(MoveConstructor, CXXMoveConstructor) 15823 : ClassDecl->hasTrivialMoveConstructor()); 15824 15825 MoveConstructor->setTrivialForCall( 15826 ClassDecl->hasAttr<TrivialABIAttr>() || 15827 (ClassDecl->needsOverloadResolutionForMoveConstructor() 15828 ? SpecialMemberIsTrivial(MoveConstructor, CXXMoveConstructor, 15829 TAH_ConsiderTrivialABI) 15830 : ClassDecl->hasTrivialMoveConstructorForCall())); 15831 15832 // Note that we have declared this constructor. 15833 ++getASTContext().NumImplicitMoveConstructorsDeclared; 15834 15835 Scope *S = getScopeForContext(ClassDecl); 15836 CheckImplicitSpecialMemberDeclaration(S, MoveConstructor); 15837 15838 if (ShouldDeleteSpecialMember(MoveConstructor, CXXMoveConstructor)) { 15839 ClassDecl->setImplicitMoveConstructorIsDeleted(); 15840 SetDeclDeleted(MoveConstructor, ClassLoc); 15841 } 15842 15843 if (S) 15844 PushOnScopeChains(MoveConstructor, S, false); 15845 ClassDecl->addDecl(MoveConstructor); 15846 15847 return MoveConstructor; 15848 } 15849 15850 void Sema::DefineImplicitMoveConstructor(SourceLocation CurrentLocation, 15851 CXXConstructorDecl *MoveConstructor) { 15852 assert((MoveConstructor->isDefaulted() && 15853 MoveConstructor->isMoveConstructor() && 15854 !MoveConstructor->doesThisDeclarationHaveABody() && 15855 !MoveConstructor->isDeleted()) && 15856 "DefineImplicitMoveConstructor - call it for implicit move ctor"); 15857 if (MoveConstructor->willHaveBody() || MoveConstructor->isInvalidDecl()) 15858 return; 15859 15860 CXXRecordDecl *ClassDecl = MoveConstructor->getParent(); 15861 assert(ClassDecl && "DefineImplicitMoveConstructor - invalid constructor"); 15862 15863 SynthesizedFunctionScope Scope(*this, MoveConstructor); 15864 15865 // The exception specification is needed because we are defining the 15866 // function. 15867 ResolveExceptionSpec(CurrentLocation, 15868 MoveConstructor->getType()->castAs<FunctionProtoType>()); 15869 MarkVTableUsed(CurrentLocation, ClassDecl); 15870 15871 // Add a context note for diagnostics produced after this point. 15872 Scope.addContextNote(CurrentLocation); 15873 15874 if (SetCtorInitializers(MoveConstructor, /*AnyErrors=*/false)) { 15875 MoveConstructor->setInvalidDecl(); 15876 } else { 15877 SourceLocation Loc = MoveConstructor->getEndLoc().isValid() 15878 ? MoveConstructor->getEndLoc() 15879 : MoveConstructor->getLocation(); 15880 Sema::CompoundScopeRAII CompoundScope(*this); 15881 MoveConstructor->setBody( 15882 ActOnCompoundStmt(Loc, Loc, std::nullopt, /*isStmtExpr=*/false) 15883 .getAs<Stmt>()); 15884 MoveConstructor->markUsed(Context); 15885 } 15886 15887 if (ASTMutationListener *L = getASTMutationListener()) { 15888 L->CompletedImplicitDefinition(MoveConstructor); 15889 } 15890 } 15891 15892 bool Sema::isImplicitlyDeleted(FunctionDecl *FD) { 15893 return FD->isDeleted() && FD->isDefaulted() && isa<CXXMethodDecl>(FD); 15894 } 15895 15896 void Sema::DefineImplicitLambdaToFunctionPointerConversion( 15897 SourceLocation CurrentLocation, 15898 CXXConversionDecl *Conv) { 15899 SynthesizedFunctionScope Scope(*this, Conv); 15900 assert(!Conv->getReturnType()->isUndeducedType()); 15901 15902 QualType ConvRT = Conv->getType()->castAs<FunctionType>()->getReturnType(); 15903 CallingConv CC = 15904 ConvRT->getPointeeType()->castAs<FunctionType>()->getCallConv(); 15905 15906 CXXRecordDecl *Lambda = Conv->getParent(); 15907 FunctionDecl *CallOp = Lambda->getLambdaCallOperator(); 15908 FunctionDecl *Invoker = 15909 CallOp->hasCXXExplicitFunctionObjectParameter() || CallOp->isStatic() 15910 ? CallOp 15911 : Lambda->getLambdaStaticInvoker(CC); 15912 15913 if (auto *TemplateArgs = Conv->getTemplateSpecializationArgs()) { 15914 CallOp = InstantiateFunctionDeclaration( 15915 CallOp->getDescribedFunctionTemplate(), TemplateArgs, CurrentLocation); 15916 if (!CallOp) 15917 return; 15918 15919 if (CallOp != Invoker) { 15920 Invoker = InstantiateFunctionDeclaration( 15921 Invoker->getDescribedFunctionTemplate(), TemplateArgs, 15922 CurrentLocation); 15923 if (!Invoker) 15924 return; 15925 } 15926 } 15927 15928 if (CallOp->isInvalidDecl()) 15929 return; 15930 15931 // Mark the call operator referenced (and add to pending instantiations 15932 // if necessary). 15933 // For both the conversion and static-invoker template specializations 15934 // we construct their body's in this function, so no need to add them 15935 // to the PendingInstantiations. 15936 MarkFunctionReferenced(CurrentLocation, CallOp); 15937 15938 if (Invoker != CallOp) { 15939 // Fill in the __invoke function with a dummy implementation. IR generation 15940 // will fill in the actual details. Update its type in case it contained 15941 // an 'auto'. 15942 Invoker->markUsed(Context); 15943 Invoker->setReferenced(); 15944 Invoker->setType(Conv->getReturnType()->getPointeeType()); 15945 Invoker->setBody(new (Context) CompoundStmt(Conv->getLocation())); 15946 } 15947 15948 // Construct the body of the conversion function { return __invoke; }. 15949 Expr *FunctionRef = BuildDeclRefExpr(Invoker, Invoker->getType(), VK_LValue, 15950 Conv->getLocation()); 15951 assert(FunctionRef && "Can't refer to __invoke function?"); 15952 Stmt *Return = BuildReturnStmt(Conv->getLocation(), FunctionRef).get(); 15953 Conv->setBody(CompoundStmt::Create(Context, Return, FPOptionsOverride(), 15954 Conv->getLocation(), Conv->getLocation())); 15955 Conv->markUsed(Context); 15956 Conv->setReferenced(); 15957 15958 if (ASTMutationListener *L = getASTMutationListener()) { 15959 L->CompletedImplicitDefinition(Conv); 15960 if (Invoker != CallOp) 15961 L->CompletedImplicitDefinition(Invoker); 15962 } 15963 } 15964 15965 void Sema::DefineImplicitLambdaToBlockPointerConversion( 15966 SourceLocation CurrentLocation, CXXConversionDecl *Conv) { 15967 assert(!Conv->getParent()->isGenericLambda()); 15968 15969 SynthesizedFunctionScope Scope(*this, Conv); 15970 15971 // Copy-initialize the lambda object as needed to capture it. 15972 Expr *This = ActOnCXXThis(CurrentLocation).get(); 15973 Expr *DerefThis =CreateBuiltinUnaryOp(CurrentLocation, UO_Deref, This).get(); 15974 15975 ExprResult BuildBlock = BuildBlockForLambdaConversion(CurrentLocation, 15976 Conv->getLocation(), 15977 Conv, DerefThis); 15978 15979 // If we're not under ARC, make sure we still get the _Block_copy/autorelease 15980 // behavior. Note that only the general conversion function does this 15981 // (since it's unusable otherwise); in the case where we inline the 15982 // block literal, it has block literal lifetime semantics. 15983 if (!BuildBlock.isInvalid() && !getLangOpts().ObjCAutoRefCount) 15984 BuildBlock = ImplicitCastExpr::Create( 15985 Context, BuildBlock.get()->getType(), CK_CopyAndAutoreleaseBlockObject, 15986 BuildBlock.get(), nullptr, VK_PRValue, FPOptionsOverride()); 15987 15988 if (BuildBlock.isInvalid()) { 15989 Diag(CurrentLocation, diag::note_lambda_to_block_conv); 15990 Conv->setInvalidDecl(); 15991 return; 15992 } 15993 15994 // Create the return statement that returns the block from the conversion 15995 // function. 15996 StmtResult Return = BuildReturnStmt(Conv->getLocation(), BuildBlock.get()); 15997 if (Return.isInvalid()) { 15998 Diag(CurrentLocation, diag::note_lambda_to_block_conv); 15999 Conv->setInvalidDecl(); 16000 return; 16001 } 16002 16003 // Set the body of the conversion function. 16004 Stmt *ReturnS = Return.get(); 16005 Conv->setBody(CompoundStmt::Create(Context, ReturnS, FPOptionsOverride(), 16006 Conv->getLocation(), Conv->getLocation())); 16007 Conv->markUsed(Context); 16008 16009 // We're done; notify the mutation listener, if any. 16010 if (ASTMutationListener *L = getASTMutationListener()) { 16011 L->CompletedImplicitDefinition(Conv); 16012 } 16013 } 16014 16015 /// Determine whether the given list arguments contains exactly one 16016 /// "real" (non-default) argument. 16017 static bool hasOneRealArgument(MultiExprArg Args) { 16018 switch (Args.size()) { 16019 case 0: 16020 return false; 16021 16022 default: 16023 if (!Args[1]->isDefaultArgument()) 16024 return false; 16025 16026 [[fallthrough]]; 16027 case 1: 16028 return !Args[0]->isDefaultArgument(); 16029 } 16030 16031 return false; 16032 } 16033 16034 ExprResult Sema::BuildCXXConstructExpr( 16035 SourceLocation ConstructLoc, QualType DeclInitType, NamedDecl *FoundDecl, 16036 CXXConstructorDecl *Constructor, MultiExprArg ExprArgs, 16037 bool HadMultipleCandidates, bool IsListInitialization, 16038 bool IsStdInitListInitialization, bool RequiresZeroInit, 16039 CXXConstructionKind ConstructKind, SourceRange ParenRange) { 16040 bool Elidable = false; 16041 16042 // C++0x [class.copy]p34: 16043 // When certain criteria are met, an implementation is allowed to 16044 // omit the copy/move construction of a class object, even if the 16045 // copy/move constructor and/or destructor for the object have 16046 // side effects. [...] 16047 // - when a temporary class object that has not been bound to a 16048 // reference (12.2) would be copied/moved to a class object 16049 // with the same cv-unqualified type, the copy/move operation 16050 // can be omitted by constructing the temporary object 16051 // directly into the target of the omitted copy/move 16052 if (ConstructKind == CXXConstructionKind::Complete && Constructor && 16053 // FIXME: Converting constructors should also be accepted. 16054 // But to fix this, the logic that digs down into a CXXConstructExpr 16055 // to find the source object needs to handle it. 16056 // Right now it assumes the source object is passed directly as the 16057 // first argument. 16058 Constructor->isCopyOrMoveConstructor() && hasOneRealArgument(ExprArgs)) { 16059 Expr *SubExpr = ExprArgs[0]; 16060 // FIXME: Per above, this is also incorrect if we want to accept 16061 // converting constructors, as isTemporaryObject will 16062 // reject temporaries with different type from the 16063 // CXXRecord itself. 16064 Elidable = SubExpr->isTemporaryObject( 16065 Context, cast<CXXRecordDecl>(FoundDecl->getDeclContext())); 16066 } 16067 16068 return BuildCXXConstructExpr(ConstructLoc, DeclInitType, 16069 FoundDecl, Constructor, 16070 Elidable, ExprArgs, HadMultipleCandidates, 16071 IsListInitialization, 16072 IsStdInitListInitialization, RequiresZeroInit, 16073 ConstructKind, ParenRange); 16074 } 16075 16076 ExprResult Sema::BuildCXXConstructExpr( 16077 SourceLocation ConstructLoc, QualType DeclInitType, NamedDecl *FoundDecl, 16078 CXXConstructorDecl *Constructor, bool Elidable, MultiExprArg ExprArgs, 16079 bool HadMultipleCandidates, bool IsListInitialization, 16080 bool IsStdInitListInitialization, bool RequiresZeroInit, 16081 CXXConstructionKind ConstructKind, SourceRange ParenRange) { 16082 if (auto *Shadow = dyn_cast<ConstructorUsingShadowDecl>(FoundDecl)) { 16083 Constructor = findInheritingConstructor(ConstructLoc, Constructor, Shadow); 16084 // The only way to get here is if we did overlaod resolution to find the 16085 // shadow decl, so we don't need to worry about re-checking the trailing 16086 // requires clause. 16087 if (DiagnoseUseOfOverloadedDecl(Constructor, ConstructLoc)) 16088 return ExprError(); 16089 } 16090 16091 return BuildCXXConstructExpr( 16092 ConstructLoc, DeclInitType, Constructor, Elidable, ExprArgs, 16093 HadMultipleCandidates, IsListInitialization, IsStdInitListInitialization, 16094 RequiresZeroInit, ConstructKind, ParenRange); 16095 } 16096 16097 /// BuildCXXConstructExpr - Creates a complete call to a constructor, 16098 /// including handling of its default argument expressions. 16099 ExprResult Sema::BuildCXXConstructExpr( 16100 SourceLocation ConstructLoc, QualType DeclInitType, 16101 CXXConstructorDecl *Constructor, bool Elidable, MultiExprArg ExprArgs, 16102 bool HadMultipleCandidates, bool IsListInitialization, 16103 bool IsStdInitListInitialization, bool RequiresZeroInit, 16104 CXXConstructionKind ConstructKind, SourceRange ParenRange) { 16105 assert(declaresSameEntity( 16106 Constructor->getParent(), 16107 DeclInitType->getBaseElementTypeUnsafe()->getAsCXXRecordDecl()) && 16108 "given constructor for wrong type"); 16109 MarkFunctionReferenced(ConstructLoc, Constructor); 16110 if (getLangOpts().CUDA && !CheckCUDACall(ConstructLoc, Constructor)) 16111 return ExprError(); 16112 16113 return CheckForImmediateInvocation( 16114 CXXConstructExpr::Create( 16115 Context, DeclInitType, ConstructLoc, Constructor, Elidable, ExprArgs, 16116 HadMultipleCandidates, IsListInitialization, 16117 IsStdInitListInitialization, RequiresZeroInit, 16118 static_cast<CXXConstructionKind>(ConstructKind), ParenRange), 16119 Constructor); 16120 } 16121 16122 void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) { 16123 if (VD->isInvalidDecl()) return; 16124 // If initializing the variable failed, don't also diagnose problems with 16125 // the destructor, they're likely related. 16126 if (VD->getInit() && VD->getInit()->containsErrors()) 16127 return; 16128 16129 CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Record->getDecl()); 16130 if (ClassDecl->isInvalidDecl()) return; 16131 if (ClassDecl->hasIrrelevantDestructor()) return; 16132 if (ClassDecl->isDependentContext()) return; 16133 16134 if (VD->isNoDestroy(getASTContext())) 16135 return; 16136 16137 CXXDestructorDecl *Destructor = LookupDestructor(ClassDecl); 16138 // The result of `LookupDestructor` might be nullptr if the destructor is 16139 // invalid, in which case it is marked as `IneligibleOrNotSelected` and 16140 // will not be selected by `CXXRecordDecl::getDestructor()`. 16141 if (!Destructor) 16142 return; 16143 // If this is an array, we'll require the destructor during initialization, so 16144 // we can skip over this. We still want to emit exit-time destructor warnings 16145 // though. 16146 if (!VD->getType()->isArrayType()) { 16147 MarkFunctionReferenced(VD->getLocation(), Destructor); 16148 CheckDestructorAccess(VD->getLocation(), Destructor, 16149 PDiag(diag::err_access_dtor_var) 16150 << VD->getDeclName() << VD->getType()); 16151 DiagnoseUseOfDecl(Destructor, VD->getLocation()); 16152 } 16153 16154 if (Destructor->isTrivial()) return; 16155 16156 // If the destructor is constexpr, check whether the variable has constant 16157 // destruction now. 16158 if (Destructor->isConstexpr()) { 16159 bool HasConstantInit = false; 16160 if (VD->getInit() && !VD->getInit()->isValueDependent()) 16161 HasConstantInit = VD->evaluateValue(); 16162 SmallVector<PartialDiagnosticAt, 8> Notes; 16163 if (!VD->evaluateDestruction(Notes) && VD->isConstexpr() && 16164 HasConstantInit) { 16165 Diag(VD->getLocation(), 16166 diag::err_constexpr_var_requires_const_destruction) << VD; 16167 for (unsigned I = 0, N = Notes.size(); I != N; ++I) 16168 Diag(Notes[I].first, Notes[I].second); 16169 } 16170 } 16171 16172 if (!VD->hasGlobalStorage() || !VD->needsDestruction(Context)) 16173 return; 16174 16175 // Emit warning for non-trivial dtor in global scope (a real global, 16176 // class-static, function-static). 16177 Diag(VD->getLocation(), diag::warn_exit_time_destructor); 16178 16179 // TODO: this should be re-enabled for static locals by !CXAAtExit 16180 if (!VD->isStaticLocal()) 16181 Diag(VD->getLocation(), diag::warn_global_destructor); 16182 } 16183 16184 /// Given a constructor and the set of arguments provided for the 16185 /// constructor, convert the arguments and add any required default arguments 16186 /// to form a proper call to this constructor. 16187 /// 16188 /// \returns true if an error occurred, false otherwise. 16189 bool Sema::CompleteConstructorCall(CXXConstructorDecl *Constructor, 16190 QualType DeclInitType, MultiExprArg ArgsPtr, 16191 SourceLocation Loc, 16192 SmallVectorImpl<Expr *> &ConvertedArgs, 16193 bool AllowExplicit, 16194 bool IsListInitialization) { 16195 // FIXME: This duplicates a lot of code from Sema::ConvertArgumentsForCall. 16196 unsigned NumArgs = ArgsPtr.size(); 16197 Expr **Args = ArgsPtr.data(); 16198 16199 const auto *Proto = Constructor->getType()->castAs<FunctionProtoType>(); 16200 unsigned NumParams = Proto->getNumParams(); 16201 16202 // If too few arguments are available, we'll fill in the rest with defaults. 16203 if (NumArgs < NumParams) 16204 ConvertedArgs.reserve(NumParams); 16205 else 16206 ConvertedArgs.reserve(NumArgs); 16207 16208 VariadicCallType CallType = 16209 Proto->isVariadic() ? VariadicConstructor : VariadicDoesNotApply; 16210 SmallVector<Expr *, 8> AllArgs; 16211 bool Invalid = GatherArgumentsForCall( 16212 Loc, Constructor, Proto, 0, llvm::ArrayRef(Args, NumArgs), AllArgs, 16213 CallType, AllowExplicit, IsListInitialization); 16214 ConvertedArgs.append(AllArgs.begin(), AllArgs.end()); 16215 16216 DiagnoseSentinelCalls(Constructor, Loc, AllArgs); 16217 16218 CheckConstructorCall(Constructor, DeclInitType, 16219 llvm::ArrayRef(AllArgs.data(), AllArgs.size()), Proto, 16220 Loc); 16221 16222 return Invalid; 16223 } 16224 16225 static inline bool 16226 CheckOperatorNewDeleteDeclarationScope(Sema &SemaRef, 16227 const FunctionDecl *FnDecl) { 16228 const DeclContext *DC = FnDecl->getDeclContext()->getRedeclContext(); 16229 if (isa<NamespaceDecl>(DC)) { 16230 return SemaRef.Diag(FnDecl->getLocation(), 16231 diag::err_operator_new_delete_declared_in_namespace) 16232 << FnDecl->getDeclName(); 16233 } 16234 16235 if (isa<TranslationUnitDecl>(DC) && 16236 FnDecl->getStorageClass() == SC_Static) { 16237 return SemaRef.Diag(FnDecl->getLocation(), 16238 diag::err_operator_new_delete_declared_static) 16239 << FnDecl->getDeclName(); 16240 } 16241 16242 return false; 16243 } 16244 16245 static CanQualType RemoveAddressSpaceFromPtr(Sema &SemaRef, 16246 const PointerType *PtrTy) { 16247 auto &Ctx = SemaRef.Context; 16248 Qualifiers PtrQuals = PtrTy->getPointeeType().getQualifiers(); 16249 PtrQuals.removeAddressSpace(); 16250 return Ctx.getPointerType(Ctx.getCanonicalType(Ctx.getQualifiedType( 16251 PtrTy->getPointeeType().getUnqualifiedType(), PtrQuals))); 16252 } 16253 16254 static inline bool 16255 CheckOperatorNewDeleteTypes(Sema &SemaRef, const FunctionDecl *FnDecl, 16256 CanQualType ExpectedResultType, 16257 CanQualType ExpectedFirstParamType, 16258 unsigned DependentParamTypeDiag, 16259 unsigned InvalidParamTypeDiag) { 16260 QualType ResultType = 16261 FnDecl->getType()->castAs<FunctionType>()->getReturnType(); 16262 16263 if (SemaRef.getLangOpts().OpenCLCPlusPlus) { 16264 // The operator is valid on any address space for OpenCL. 16265 // Drop address space from actual and expected result types. 16266 if (const auto *PtrTy = ResultType->getAs<PointerType>()) 16267 ResultType = RemoveAddressSpaceFromPtr(SemaRef, PtrTy); 16268 16269 if (auto ExpectedPtrTy = ExpectedResultType->getAs<PointerType>()) 16270 ExpectedResultType = RemoveAddressSpaceFromPtr(SemaRef, ExpectedPtrTy); 16271 } 16272 16273 // Check that the result type is what we expect. 16274 if (SemaRef.Context.getCanonicalType(ResultType) != ExpectedResultType) { 16275 // Reject even if the type is dependent; an operator delete function is 16276 // required to have a non-dependent result type. 16277 return SemaRef.Diag( 16278 FnDecl->getLocation(), 16279 ResultType->isDependentType() 16280 ? diag::err_operator_new_delete_dependent_result_type 16281 : diag::err_operator_new_delete_invalid_result_type) 16282 << FnDecl->getDeclName() << ExpectedResultType; 16283 } 16284 16285 // A function template must have at least 2 parameters. 16286 if (FnDecl->getDescribedFunctionTemplate() && FnDecl->getNumParams() < 2) 16287 return SemaRef.Diag(FnDecl->getLocation(), 16288 diag::err_operator_new_delete_template_too_few_parameters) 16289 << FnDecl->getDeclName(); 16290 16291 // The function decl must have at least 1 parameter. 16292 if (FnDecl->getNumParams() == 0) 16293 return SemaRef.Diag(FnDecl->getLocation(), 16294 diag::err_operator_new_delete_too_few_parameters) 16295 << FnDecl->getDeclName(); 16296 16297 QualType FirstParamType = FnDecl->getParamDecl(0)->getType(); 16298 if (SemaRef.getLangOpts().OpenCLCPlusPlus) { 16299 // The operator is valid on any address space for OpenCL. 16300 // Drop address space from actual and expected first parameter types. 16301 if (const auto *PtrTy = 16302 FnDecl->getParamDecl(0)->getType()->getAs<PointerType>()) 16303 FirstParamType = RemoveAddressSpaceFromPtr(SemaRef, PtrTy); 16304 16305 if (auto ExpectedPtrTy = ExpectedFirstParamType->getAs<PointerType>()) 16306 ExpectedFirstParamType = 16307 RemoveAddressSpaceFromPtr(SemaRef, ExpectedPtrTy); 16308 } 16309 16310 // Check that the first parameter type is what we expect. 16311 if (SemaRef.Context.getCanonicalType(FirstParamType).getUnqualifiedType() != 16312 ExpectedFirstParamType) { 16313 // The first parameter type is not allowed to be dependent. As a tentative 16314 // DR resolution, we allow a dependent parameter type if it is the right 16315 // type anyway, to allow destroying operator delete in class templates. 16316 return SemaRef.Diag(FnDecl->getLocation(), FirstParamType->isDependentType() 16317 ? DependentParamTypeDiag 16318 : InvalidParamTypeDiag) 16319 << FnDecl->getDeclName() << ExpectedFirstParamType; 16320 } 16321 16322 return false; 16323 } 16324 16325 static bool 16326 CheckOperatorNewDeclaration(Sema &SemaRef, const FunctionDecl *FnDecl) { 16327 // C++ [basic.stc.dynamic.allocation]p1: 16328 // A program is ill-formed if an allocation function is declared in a 16329 // namespace scope other than global scope or declared static in global 16330 // scope. 16331 if (CheckOperatorNewDeleteDeclarationScope(SemaRef, FnDecl)) 16332 return true; 16333 16334 CanQualType SizeTy = 16335 SemaRef.Context.getCanonicalType(SemaRef.Context.getSizeType()); 16336 16337 // C++ [basic.stc.dynamic.allocation]p1: 16338 // The return type shall be void*. The first parameter shall have type 16339 // std::size_t. 16340 if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidPtrTy, 16341 SizeTy, 16342 diag::err_operator_new_dependent_param_type, 16343 diag::err_operator_new_param_type)) 16344 return true; 16345 16346 // C++ [basic.stc.dynamic.allocation]p1: 16347 // The first parameter shall not have an associated default argument. 16348 if (FnDecl->getParamDecl(0)->hasDefaultArg()) 16349 return SemaRef.Diag(FnDecl->getLocation(), 16350 diag::err_operator_new_default_arg) 16351 << FnDecl->getDeclName() << FnDecl->getParamDecl(0)->getDefaultArgRange(); 16352 16353 return false; 16354 } 16355 16356 static bool 16357 CheckOperatorDeleteDeclaration(Sema &SemaRef, FunctionDecl *FnDecl) { 16358 // C++ [basic.stc.dynamic.deallocation]p1: 16359 // A program is ill-formed if deallocation functions are declared in a 16360 // namespace scope other than global scope or declared static in global 16361 // scope. 16362 if (CheckOperatorNewDeleteDeclarationScope(SemaRef, FnDecl)) 16363 return true; 16364 16365 auto *MD = dyn_cast<CXXMethodDecl>(FnDecl); 16366 16367 // C++ P0722: 16368 // Within a class C, the first parameter of a destroying operator delete 16369 // shall be of type C *. The first parameter of any other deallocation 16370 // function shall be of type void *. 16371 CanQualType ExpectedFirstParamType = 16372 MD && MD->isDestroyingOperatorDelete() 16373 ? SemaRef.Context.getCanonicalType(SemaRef.Context.getPointerType( 16374 SemaRef.Context.getRecordType(MD->getParent()))) 16375 : SemaRef.Context.VoidPtrTy; 16376 16377 // C++ [basic.stc.dynamic.deallocation]p2: 16378 // Each deallocation function shall return void 16379 if (CheckOperatorNewDeleteTypes( 16380 SemaRef, FnDecl, SemaRef.Context.VoidTy, ExpectedFirstParamType, 16381 diag::err_operator_delete_dependent_param_type, 16382 diag::err_operator_delete_param_type)) 16383 return true; 16384 16385 // C++ P0722: 16386 // A destroying operator delete shall be a usual deallocation function. 16387 if (MD && !MD->getParent()->isDependentContext() && 16388 MD->isDestroyingOperatorDelete() && 16389 !SemaRef.isUsualDeallocationFunction(MD)) { 16390 SemaRef.Diag(MD->getLocation(), 16391 diag::err_destroying_operator_delete_not_usual); 16392 return true; 16393 } 16394 16395 return false; 16396 } 16397 16398 /// CheckOverloadedOperatorDeclaration - Check whether the declaration 16399 /// of this overloaded operator is well-formed. If so, returns false; 16400 /// otherwise, emits appropriate diagnostics and returns true. 16401 bool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) { 16402 assert(FnDecl && FnDecl->isOverloadedOperator() && 16403 "Expected an overloaded operator declaration"); 16404 16405 OverloadedOperatorKind Op = FnDecl->getOverloadedOperator(); 16406 16407 // C++ [over.oper]p5: 16408 // The allocation and deallocation functions, operator new, 16409 // operator new[], operator delete and operator delete[], are 16410 // described completely in 3.7.3. The attributes and restrictions 16411 // found in the rest of this subclause do not apply to them unless 16412 // explicitly stated in 3.7.3. 16413 if (Op == OO_Delete || Op == OO_Array_Delete) 16414 return CheckOperatorDeleteDeclaration(*this, FnDecl); 16415 16416 if (Op == OO_New || Op == OO_Array_New) 16417 return CheckOperatorNewDeclaration(*this, FnDecl); 16418 16419 // C++ [over.oper]p7: 16420 // An operator function shall either be a member function or 16421 // be a non-member function and have at least one parameter 16422 // whose type is a class, a reference to a class, an enumeration, 16423 // or a reference to an enumeration. 16424 // Note: Before C++23, a member function could not be static. The only member 16425 // function allowed to be static is the call operator function. 16426 if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(FnDecl)) { 16427 if (MethodDecl->isStatic()) { 16428 if (Op == OO_Call || Op == OO_Subscript) 16429 Diag(FnDecl->getLocation(), 16430 (LangOpts.CPlusPlus23 16431 ? diag::warn_cxx20_compat_operator_overload_static 16432 : diag::ext_operator_overload_static)) 16433 << FnDecl; 16434 else 16435 return Diag(FnDecl->getLocation(), diag::err_operator_overload_static) 16436 << FnDecl; 16437 } 16438 } else { 16439 bool ClassOrEnumParam = false; 16440 for (auto *Param : FnDecl->parameters()) { 16441 QualType ParamType = Param->getType().getNonReferenceType(); 16442 if (ParamType->isDependentType() || ParamType->isRecordType() || 16443 ParamType->isEnumeralType()) { 16444 ClassOrEnumParam = true; 16445 break; 16446 } 16447 } 16448 16449 if (!ClassOrEnumParam) 16450 return Diag(FnDecl->getLocation(), 16451 diag::err_operator_overload_needs_class_or_enum) 16452 << FnDecl->getDeclName(); 16453 } 16454 16455 // C++ [over.oper]p8: 16456 // An operator function cannot have default arguments (8.3.6), 16457 // except where explicitly stated below. 16458 // 16459 // Only the function-call operator (C++ [over.call]p1) and the subscript 16460 // operator (CWG2507) allow default arguments. 16461 if (Op != OO_Call) { 16462 ParmVarDecl *FirstDefaultedParam = nullptr; 16463 for (auto *Param : FnDecl->parameters()) { 16464 if (Param->hasDefaultArg()) { 16465 FirstDefaultedParam = Param; 16466 break; 16467 } 16468 } 16469 if (FirstDefaultedParam) { 16470 if (Op == OO_Subscript) { 16471 Diag(FnDecl->getLocation(), LangOpts.CPlusPlus23 16472 ? diag::ext_subscript_overload 16473 : diag::error_subscript_overload) 16474 << FnDecl->getDeclName() << 1 16475 << FirstDefaultedParam->getDefaultArgRange(); 16476 } else { 16477 return Diag(FirstDefaultedParam->getLocation(), 16478 diag::err_operator_overload_default_arg) 16479 << FnDecl->getDeclName() 16480 << FirstDefaultedParam->getDefaultArgRange(); 16481 } 16482 } 16483 } 16484 16485 static const bool OperatorUses[NUM_OVERLOADED_OPERATORS][3] = { 16486 { false, false, false } 16487 #define OVERLOADED_OPERATOR(Name,Spelling,Token,Unary,Binary,MemberOnly) \ 16488 , { Unary, Binary, MemberOnly } 16489 #include "clang/Basic/OperatorKinds.def" 16490 }; 16491 16492 bool CanBeUnaryOperator = OperatorUses[Op][0]; 16493 bool CanBeBinaryOperator = OperatorUses[Op][1]; 16494 bool MustBeMemberOperator = OperatorUses[Op][2]; 16495 16496 // C++ [over.oper]p8: 16497 // [...] Operator functions cannot have more or fewer parameters 16498 // than the number required for the corresponding operator, as 16499 // described in the rest of this subclause. 16500 unsigned NumParams = FnDecl->getNumParams() + 16501 (isa<CXXMethodDecl>(FnDecl) && 16502 !FnDecl->hasCXXExplicitFunctionObjectParameter() 16503 ? 1 16504 : 0); 16505 if (Op != OO_Call && Op != OO_Subscript && 16506 ((NumParams == 1 && !CanBeUnaryOperator) || 16507 (NumParams == 2 && !CanBeBinaryOperator) || (NumParams < 1) || 16508 (NumParams > 2))) { 16509 // We have the wrong number of parameters. 16510 unsigned ErrorKind; 16511 if (CanBeUnaryOperator && CanBeBinaryOperator) { 16512 ErrorKind = 2; // 2 -> unary or binary. 16513 } else if (CanBeUnaryOperator) { 16514 ErrorKind = 0; // 0 -> unary 16515 } else { 16516 assert(CanBeBinaryOperator && 16517 "All non-call overloaded operators are unary or binary!"); 16518 ErrorKind = 1; // 1 -> binary 16519 } 16520 return Diag(FnDecl->getLocation(), diag::err_operator_overload_must_be) 16521 << FnDecl->getDeclName() << NumParams << ErrorKind; 16522 } 16523 16524 if (Op == OO_Subscript && NumParams != 2) { 16525 Diag(FnDecl->getLocation(), LangOpts.CPlusPlus23 16526 ? diag::ext_subscript_overload 16527 : diag::error_subscript_overload) 16528 << FnDecl->getDeclName() << (NumParams == 1 ? 0 : 2); 16529 } 16530 16531 // Overloaded operators other than operator() and operator[] cannot be 16532 // variadic. 16533 if (Op != OO_Call && 16534 FnDecl->getType()->castAs<FunctionProtoType>()->isVariadic()) { 16535 return Diag(FnDecl->getLocation(), diag::err_operator_overload_variadic) 16536 << FnDecl->getDeclName(); 16537 } 16538 16539 // Some operators must be member functions. 16540 if (MustBeMemberOperator && !isa<CXXMethodDecl>(FnDecl)) { 16541 return Diag(FnDecl->getLocation(), 16542 diag::err_operator_overload_must_be_member) 16543 << FnDecl->getDeclName(); 16544 } 16545 16546 // C++ [over.inc]p1: 16547 // The user-defined function called operator++ implements the 16548 // prefix and postfix ++ operator. If this function is a member 16549 // function with no parameters, or a non-member function with one 16550 // parameter of class or enumeration type, it defines the prefix 16551 // increment operator ++ for objects of that type. If the function 16552 // is a member function with one parameter (which shall be of type 16553 // int) or a non-member function with two parameters (the second 16554 // of which shall be of type int), it defines the postfix 16555 // increment operator ++ for objects of that type. 16556 if ((Op == OO_PlusPlus || Op == OO_MinusMinus) && NumParams == 2) { 16557 ParmVarDecl *LastParam = FnDecl->getParamDecl(FnDecl->getNumParams() - 1); 16558 QualType ParamType = LastParam->getType(); 16559 16560 if (!ParamType->isSpecificBuiltinType(BuiltinType::Int) && 16561 !ParamType->isDependentType()) 16562 return Diag(LastParam->getLocation(), 16563 diag::err_operator_overload_post_incdec_must_be_int) 16564 << LastParam->getType() << (Op == OO_MinusMinus); 16565 } 16566 16567 return false; 16568 } 16569 16570 static bool 16571 checkLiteralOperatorTemplateParameterList(Sema &SemaRef, 16572 FunctionTemplateDecl *TpDecl) { 16573 TemplateParameterList *TemplateParams = TpDecl->getTemplateParameters(); 16574 16575 // Must have one or two template parameters. 16576 if (TemplateParams->size() == 1) { 16577 NonTypeTemplateParmDecl *PmDecl = 16578 dyn_cast<NonTypeTemplateParmDecl>(TemplateParams->getParam(0)); 16579 16580 // The template parameter must be a char parameter pack. 16581 if (PmDecl && PmDecl->isTemplateParameterPack() && 16582 SemaRef.Context.hasSameType(PmDecl->getType(), SemaRef.Context.CharTy)) 16583 return false; 16584 16585 // C++20 [over.literal]p5: 16586 // A string literal operator template is a literal operator template 16587 // whose template-parameter-list comprises a single non-type 16588 // template-parameter of class type. 16589 // 16590 // As a DR resolution, we also allow placeholders for deduced class 16591 // template specializations. 16592 if (SemaRef.getLangOpts().CPlusPlus20 && PmDecl && 16593 !PmDecl->isTemplateParameterPack() && 16594 (PmDecl->getType()->isRecordType() || 16595 PmDecl->getType()->getAs<DeducedTemplateSpecializationType>())) 16596 return false; 16597 } else if (TemplateParams->size() == 2) { 16598 TemplateTypeParmDecl *PmType = 16599 dyn_cast<TemplateTypeParmDecl>(TemplateParams->getParam(0)); 16600 NonTypeTemplateParmDecl *PmArgs = 16601 dyn_cast<NonTypeTemplateParmDecl>(TemplateParams->getParam(1)); 16602 16603 // The second template parameter must be a parameter pack with the 16604 // first template parameter as its type. 16605 if (PmType && PmArgs && !PmType->isTemplateParameterPack() && 16606 PmArgs->isTemplateParameterPack()) { 16607 const TemplateTypeParmType *TArgs = 16608 PmArgs->getType()->getAs<TemplateTypeParmType>(); 16609 if (TArgs && TArgs->getDepth() == PmType->getDepth() && 16610 TArgs->getIndex() == PmType->getIndex()) { 16611 if (!SemaRef.inTemplateInstantiation()) 16612 SemaRef.Diag(TpDecl->getLocation(), 16613 diag::ext_string_literal_operator_template); 16614 return false; 16615 } 16616 } 16617 } 16618 16619 SemaRef.Diag(TpDecl->getTemplateParameters()->getSourceRange().getBegin(), 16620 diag::err_literal_operator_template) 16621 << TpDecl->getTemplateParameters()->getSourceRange(); 16622 return true; 16623 } 16624 16625 /// CheckLiteralOperatorDeclaration - Check whether the declaration 16626 /// of this literal operator function is well-formed. If so, returns 16627 /// false; otherwise, emits appropriate diagnostics and returns true. 16628 bool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) { 16629 if (isa<CXXMethodDecl>(FnDecl)) { 16630 Diag(FnDecl->getLocation(), diag::err_literal_operator_outside_namespace) 16631 << FnDecl->getDeclName(); 16632 return true; 16633 } 16634 16635 if (FnDecl->isExternC()) { 16636 Diag(FnDecl->getLocation(), diag::err_literal_operator_extern_c); 16637 if (const LinkageSpecDecl *LSD = 16638 FnDecl->getDeclContext()->getExternCContext()) 16639 Diag(LSD->getExternLoc(), diag::note_extern_c_begins_here); 16640 return true; 16641 } 16642 16643 // This might be the definition of a literal operator template. 16644 FunctionTemplateDecl *TpDecl = FnDecl->getDescribedFunctionTemplate(); 16645 16646 // This might be a specialization of a literal operator template. 16647 if (!TpDecl) 16648 TpDecl = FnDecl->getPrimaryTemplate(); 16649 16650 // template <char...> type operator "" name() and 16651 // template <class T, T...> type operator "" name() are the only valid 16652 // template signatures, and the only valid signatures with no parameters. 16653 // 16654 // C++20 also allows template <SomeClass T> type operator "" name(). 16655 if (TpDecl) { 16656 if (FnDecl->param_size() != 0) { 16657 Diag(FnDecl->getLocation(), 16658 diag::err_literal_operator_template_with_params); 16659 return true; 16660 } 16661 16662 if (checkLiteralOperatorTemplateParameterList(*this, TpDecl)) 16663 return true; 16664 16665 } else if (FnDecl->param_size() == 1) { 16666 const ParmVarDecl *Param = FnDecl->getParamDecl(0); 16667 16668 QualType ParamType = Param->getType().getUnqualifiedType(); 16669 16670 // Only unsigned long long int, long double, any character type, and const 16671 // char * are allowed as the only parameters. 16672 if (ParamType->isSpecificBuiltinType(BuiltinType::ULongLong) || 16673 ParamType->isSpecificBuiltinType(BuiltinType::LongDouble) || 16674 Context.hasSameType(ParamType, Context.CharTy) || 16675 Context.hasSameType(ParamType, Context.WideCharTy) || 16676 Context.hasSameType(ParamType, Context.Char8Ty) || 16677 Context.hasSameType(ParamType, Context.Char16Ty) || 16678 Context.hasSameType(ParamType, Context.Char32Ty)) { 16679 } else if (const PointerType *Ptr = ParamType->getAs<PointerType>()) { 16680 QualType InnerType = Ptr->getPointeeType(); 16681 16682 // Pointer parameter must be a const char *. 16683 if (!(Context.hasSameType(InnerType.getUnqualifiedType(), 16684 Context.CharTy) && 16685 InnerType.isConstQualified() && !InnerType.isVolatileQualified())) { 16686 Diag(Param->getSourceRange().getBegin(), 16687 diag::err_literal_operator_param) 16688 << ParamType << "'const char *'" << Param->getSourceRange(); 16689 return true; 16690 } 16691 16692 } else if (ParamType->isRealFloatingType()) { 16693 Diag(Param->getSourceRange().getBegin(), diag::err_literal_operator_param) 16694 << ParamType << Context.LongDoubleTy << Param->getSourceRange(); 16695 return true; 16696 16697 } else if (ParamType->isIntegerType()) { 16698 Diag(Param->getSourceRange().getBegin(), diag::err_literal_operator_param) 16699 << ParamType << Context.UnsignedLongLongTy << Param->getSourceRange(); 16700 return true; 16701 16702 } else { 16703 Diag(Param->getSourceRange().getBegin(), 16704 diag::err_literal_operator_invalid_param) 16705 << ParamType << Param->getSourceRange(); 16706 return true; 16707 } 16708 16709 } else if (FnDecl->param_size() == 2) { 16710 FunctionDecl::param_iterator Param = FnDecl->param_begin(); 16711 16712 // First, verify that the first parameter is correct. 16713 16714 QualType FirstParamType = (*Param)->getType().getUnqualifiedType(); 16715 16716 // Two parameter function must have a pointer to const as a 16717 // first parameter; let's strip those qualifiers. 16718 const PointerType *PT = FirstParamType->getAs<PointerType>(); 16719 16720 if (!PT) { 16721 Diag((*Param)->getSourceRange().getBegin(), 16722 diag::err_literal_operator_param) 16723 << FirstParamType << "'const char *'" << (*Param)->getSourceRange(); 16724 return true; 16725 } 16726 16727 QualType PointeeType = PT->getPointeeType(); 16728 // First parameter must be const 16729 if (!PointeeType.isConstQualified() || PointeeType.isVolatileQualified()) { 16730 Diag((*Param)->getSourceRange().getBegin(), 16731 diag::err_literal_operator_param) 16732 << FirstParamType << "'const char *'" << (*Param)->getSourceRange(); 16733 return true; 16734 } 16735 16736 QualType InnerType = PointeeType.getUnqualifiedType(); 16737 // Only const char *, const wchar_t*, const char8_t*, const char16_t*, and 16738 // const char32_t* are allowed as the first parameter to a two-parameter 16739 // function 16740 if (!(Context.hasSameType(InnerType, Context.CharTy) || 16741 Context.hasSameType(InnerType, Context.WideCharTy) || 16742 Context.hasSameType(InnerType, Context.Char8Ty) || 16743 Context.hasSameType(InnerType, Context.Char16Ty) || 16744 Context.hasSameType(InnerType, Context.Char32Ty))) { 16745 Diag((*Param)->getSourceRange().getBegin(), 16746 diag::err_literal_operator_param) 16747 << FirstParamType << "'const char *'" << (*Param)->getSourceRange(); 16748 return true; 16749 } 16750 16751 // Move on to the second and final parameter. 16752 ++Param; 16753 16754 // The second parameter must be a std::size_t. 16755 QualType SecondParamType = (*Param)->getType().getUnqualifiedType(); 16756 if (!Context.hasSameType(SecondParamType, Context.getSizeType())) { 16757 Diag((*Param)->getSourceRange().getBegin(), 16758 diag::err_literal_operator_param) 16759 << SecondParamType << Context.getSizeType() 16760 << (*Param)->getSourceRange(); 16761 return true; 16762 } 16763 } else { 16764 Diag(FnDecl->getLocation(), diag::err_literal_operator_bad_param_count); 16765 return true; 16766 } 16767 16768 // Parameters are good. 16769 16770 // A parameter-declaration-clause containing a default argument is not 16771 // equivalent to any of the permitted forms. 16772 for (auto *Param : FnDecl->parameters()) { 16773 if (Param->hasDefaultArg()) { 16774 Diag(Param->getDefaultArgRange().getBegin(), 16775 diag::err_literal_operator_default_argument) 16776 << Param->getDefaultArgRange(); 16777 break; 16778 } 16779 } 16780 16781 const IdentifierInfo *II = FnDecl->getDeclName().getCXXLiteralIdentifier(); 16782 ReservedLiteralSuffixIdStatus Status = II->isReservedLiteralSuffixId(); 16783 if (Status != ReservedLiteralSuffixIdStatus::NotReserved && 16784 !getSourceManager().isInSystemHeader(FnDecl->getLocation())) { 16785 // C++23 [usrlit.suffix]p1: 16786 // Literal suffix identifiers that do not start with an underscore are 16787 // reserved for future standardization. Literal suffix identifiers that 16788 // contain a double underscore __ are reserved for use by C++ 16789 // implementations. 16790 Diag(FnDecl->getLocation(), diag::warn_user_literal_reserved) 16791 << static_cast<int>(Status) 16792 << StringLiteralParser::isValidUDSuffix(getLangOpts(), II->getName()); 16793 } 16794 16795 return false; 16796 } 16797 16798 /// ActOnStartLinkageSpecification - Parsed the beginning of a C++ 16799 /// linkage specification, including the language and (if present) 16800 /// the '{'. ExternLoc is the location of the 'extern', Lang is the 16801 /// language string literal. LBraceLoc, if valid, provides the location of 16802 /// the '{' brace. Otherwise, this linkage specification does not 16803 /// have any braces. 16804 Decl *Sema::ActOnStartLinkageSpecification(Scope *S, SourceLocation ExternLoc, 16805 Expr *LangStr, 16806 SourceLocation LBraceLoc) { 16807 StringLiteral *Lit = cast<StringLiteral>(LangStr); 16808 assert(Lit->isUnevaluated() && "Unexpected string literal kind"); 16809 16810 StringRef Lang = Lit->getString(); 16811 LinkageSpecLanguageIDs Language; 16812 if (Lang == "C") 16813 Language = LinkageSpecLanguageIDs::C; 16814 else if (Lang == "C++") 16815 Language = LinkageSpecLanguageIDs::CXX; 16816 else { 16817 Diag(LangStr->getExprLoc(), diag::err_language_linkage_spec_unknown) 16818 << LangStr->getSourceRange(); 16819 return nullptr; 16820 } 16821 16822 // FIXME: Add all the various semantics of linkage specifications 16823 16824 LinkageSpecDecl *D = LinkageSpecDecl::Create(Context, CurContext, ExternLoc, 16825 LangStr->getExprLoc(), Language, 16826 LBraceLoc.isValid()); 16827 16828 /// C++ [module.unit]p7.2.3 16829 /// - Otherwise, if the declaration 16830 /// - ... 16831 /// - ... 16832 /// - appears within a linkage-specification, 16833 /// it is attached to the global module. 16834 /// 16835 /// If the declaration is already in global module fragment, we don't 16836 /// need to attach it again. 16837 if (getLangOpts().CPlusPlusModules && isCurrentModulePurview()) { 16838 Module *GlobalModule = PushImplicitGlobalModuleFragment(ExternLoc); 16839 D->setLocalOwningModule(GlobalModule); 16840 } 16841 16842 CurContext->addDecl(D); 16843 PushDeclContext(S, D); 16844 return D; 16845 } 16846 16847 /// ActOnFinishLinkageSpecification - Complete the definition of 16848 /// the C++ linkage specification LinkageSpec. If RBraceLoc is 16849 /// valid, it's the position of the closing '}' brace in a linkage 16850 /// specification that uses braces. 16851 Decl *Sema::ActOnFinishLinkageSpecification(Scope *S, 16852 Decl *LinkageSpec, 16853 SourceLocation RBraceLoc) { 16854 if (RBraceLoc.isValid()) { 16855 LinkageSpecDecl* LSDecl = cast<LinkageSpecDecl>(LinkageSpec); 16856 LSDecl->setRBraceLoc(RBraceLoc); 16857 } 16858 16859 // If the current module doesn't has Parent, it implies that the 16860 // LinkageSpec isn't in the module created by itself. So we don't 16861 // need to pop it. 16862 if (getLangOpts().CPlusPlusModules && getCurrentModule() && 16863 getCurrentModule()->isImplicitGlobalModule() && 16864 getCurrentModule()->Parent) 16865 PopImplicitGlobalModuleFragment(); 16866 16867 PopDeclContext(); 16868 return LinkageSpec; 16869 } 16870 16871 Decl *Sema::ActOnEmptyDeclaration(Scope *S, 16872 const ParsedAttributesView &AttrList, 16873 SourceLocation SemiLoc) { 16874 Decl *ED = EmptyDecl::Create(Context, CurContext, SemiLoc); 16875 // Attribute declarations appertain to empty declaration so we handle 16876 // them here. 16877 ProcessDeclAttributeList(S, ED, AttrList); 16878 16879 CurContext->addDecl(ED); 16880 return ED; 16881 } 16882 16883 /// Perform semantic analysis for the variable declaration that 16884 /// occurs within a C++ catch clause, returning the newly-created 16885 /// variable. 16886 VarDecl *Sema::BuildExceptionDeclaration(Scope *S, 16887 TypeSourceInfo *TInfo, 16888 SourceLocation StartLoc, 16889 SourceLocation Loc, 16890 IdentifierInfo *Name) { 16891 bool Invalid = false; 16892 QualType ExDeclType = TInfo->getType(); 16893 16894 // Arrays and functions decay. 16895 if (ExDeclType->isArrayType()) 16896 ExDeclType = Context.getArrayDecayedType(ExDeclType); 16897 else if (ExDeclType->isFunctionType()) 16898 ExDeclType = Context.getPointerType(ExDeclType); 16899 16900 // C++ 15.3p1: The exception-declaration shall not denote an incomplete type. 16901 // The exception-declaration shall not denote a pointer or reference to an 16902 // incomplete type, other than [cv] void*. 16903 // N2844 forbids rvalue references. 16904 if (!ExDeclType->isDependentType() && ExDeclType->isRValueReferenceType()) { 16905 Diag(Loc, diag::err_catch_rvalue_ref); 16906 Invalid = true; 16907 } 16908 16909 if (ExDeclType->isVariablyModifiedType()) { 16910 Diag(Loc, diag::err_catch_variably_modified) << ExDeclType; 16911 Invalid = true; 16912 } 16913 16914 QualType BaseType = ExDeclType; 16915 int Mode = 0; // 0 for direct type, 1 for pointer, 2 for reference 16916 unsigned DK = diag::err_catch_incomplete; 16917 if (const PointerType *Ptr = BaseType->getAs<PointerType>()) { 16918 BaseType = Ptr->getPointeeType(); 16919 Mode = 1; 16920 DK = diag::err_catch_incomplete_ptr; 16921 } else if (const ReferenceType *Ref = BaseType->getAs<ReferenceType>()) { 16922 // For the purpose of error recovery, we treat rvalue refs like lvalue refs. 16923 BaseType = Ref->getPointeeType(); 16924 Mode = 2; 16925 DK = diag::err_catch_incomplete_ref; 16926 } 16927 if (!Invalid && (Mode == 0 || !BaseType->isVoidType()) && 16928 !BaseType->isDependentType() && RequireCompleteType(Loc, BaseType, DK)) 16929 Invalid = true; 16930 16931 if (!Invalid && BaseType.isWebAssemblyReferenceType()) { 16932 Diag(Loc, diag::err_wasm_reftype_tc) << 1; 16933 Invalid = true; 16934 } 16935 16936 if (!Invalid && Mode != 1 && BaseType->isSizelessType()) { 16937 Diag(Loc, diag::err_catch_sizeless) << (Mode == 2 ? 1 : 0) << BaseType; 16938 Invalid = true; 16939 } 16940 16941 if (!Invalid && !ExDeclType->isDependentType() && 16942 RequireNonAbstractType(Loc, ExDeclType, 16943 diag::err_abstract_type_in_decl, 16944 AbstractVariableType)) 16945 Invalid = true; 16946 16947 // Only the non-fragile NeXT runtime currently supports C++ catches 16948 // of ObjC types, and no runtime supports catching ObjC types by value. 16949 if (!Invalid && getLangOpts().ObjC) { 16950 QualType T = ExDeclType; 16951 if (const ReferenceType *RT = T->getAs<ReferenceType>()) 16952 T = RT->getPointeeType(); 16953 16954 if (T->isObjCObjectType()) { 16955 Diag(Loc, diag::err_objc_object_catch); 16956 Invalid = true; 16957 } else if (T->isObjCObjectPointerType()) { 16958 // FIXME: should this be a test for macosx-fragile specifically? 16959 if (getLangOpts().ObjCRuntime.isFragile()) 16960 Diag(Loc, diag::warn_objc_pointer_cxx_catch_fragile); 16961 } 16962 } 16963 16964 VarDecl *ExDecl = VarDecl::Create(Context, CurContext, StartLoc, Loc, Name, 16965 ExDeclType, TInfo, SC_None); 16966 ExDecl->setExceptionVariable(true); 16967 16968 // In ARC, infer 'retaining' for variables of retainable type. 16969 if (getLangOpts().ObjCAutoRefCount && inferObjCARCLifetime(ExDecl)) 16970 Invalid = true; 16971 16972 if (!Invalid && !ExDeclType->isDependentType()) { 16973 if (const RecordType *recordType = ExDeclType->getAs<RecordType>()) { 16974 // Insulate this from anything else we might currently be parsing. 16975 EnterExpressionEvaluationContext scope( 16976 *this, ExpressionEvaluationContext::PotentiallyEvaluated); 16977 16978 // C++ [except.handle]p16: 16979 // The object declared in an exception-declaration or, if the 16980 // exception-declaration does not specify a name, a temporary (12.2) is 16981 // copy-initialized (8.5) from the exception object. [...] 16982 // The object is destroyed when the handler exits, after the destruction 16983 // of any automatic objects initialized within the handler. 16984 // 16985 // We just pretend to initialize the object with itself, then make sure 16986 // it can be destroyed later. 16987 QualType initType = Context.getExceptionObjectType(ExDeclType); 16988 16989 InitializedEntity entity = 16990 InitializedEntity::InitializeVariable(ExDecl); 16991 InitializationKind initKind = 16992 InitializationKind::CreateCopy(Loc, SourceLocation()); 16993 16994 Expr *opaqueValue = 16995 new (Context) OpaqueValueExpr(Loc, initType, VK_LValue, OK_Ordinary); 16996 InitializationSequence sequence(*this, entity, initKind, opaqueValue); 16997 ExprResult result = sequence.Perform(*this, entity, initKind, opaqueValue); 16998 if (result.isInvalid()) 16999 Invalid = true; 17000 else { 17001 // If the constructor used was non-trivial, set this as the 17002 // "initializer". 17003 CXXConstructExpr *construct = result.getAs<CXXConstructExpr>(); 17004 if (!construct->getConstructor()->isTrivial()) { 17005 Expr *init = MaybeCreateExprWithCleanups(construct); 17006 ExDecl->setInit(init); 17007 } 17008 17009 // And make sure it's destructable. 17010 FinalizeVarWithDestructor(ExDecl, recordType); 17011 } 17012 } 17013 } 17014 17015 if (Invalid) 17016 ExDecl->setInvalidDecl(); 17017 17018 return ExDecl; 17019 } 17020 17021 /// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch 17022 /// handler. 17023 Decl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) { 17024 TypeSourceInfo *TInfo = GetTypeForDeclarator(D); 17025 bool Invalid = D.isInvalidType(); 17026 17027 // Check for unexpanded parameter packs. 17028 if (DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo, 17029 UPPC_ExceptionType)) { 17030 TInfo = Context.getTrivialTypeSourceInfo(Context.IntTy, 17031 D.getIdentifierLoc()); 17032 Invalid = true; 17033 } 17034 17035 IdentifierInfo *II = D.getIdentifier(); 17036 if (NamedDecl *PrevDecl = LookupSingleName(S, II, D.getIdentifierLoc(), 17037 LookupOrdinaryName, 17038 ForVisibleRedeclaration)) { 17039 // The scope should be freshly made just for us. There is just no way 17040 // it contains any previous declaration, except for function parameters in 17041 // a function-try-block's catch statement. 17042 assert(!S->isDeclScope(PrevDecl)); 17043 if (isDeclInScope(PrevDecl, CurContext, S)) { 17044 Diag(D.getIdentifierLoc(), diag::err_redefinition) 17045 << D.getIdentifier(); 17046 Diag(PrevDecl->getLocation(), diag::note_previous_definition); 17047 Invalid = true; 17048 } else if (PrevDecl->isTemplateParameter()) 17049 // Maybe we will complain about the shadowed template parameter. 17050 DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl); 17051 } 17052 17053 if (D.getCXXScopeSpec().isSet() && !Invalid) { 17054 Diag(D.getIdentifierLoc(), diag::err_qualified_catch_declarator) 17055 << D.getCXXScopeSpec().getRange(); 17056 Invalid = true; 17057 } 17058 17059 VarDecl *ExDecl = BuildExceptionDeclaration( 17060 S, TInfo, D.getBeginLoc(), D.getIdentifierLoc(), D.getIdentifier()); 17061 if (Invalid) 17062 ExDecl->setInvalidDecl(); 17063 17064 // Add the exception declaration into this scope. 17065 if (II) 17066 PushOnScopeChains(ExDecl, S); 17067 else 17068 CurContext->addDecl(ExDecl); 17069 17070 ProcessDeclAttributes(S, ExDecl, D); 17071 return ExDecl; 17072 } 17073 17074 Decl *Sema::ActOnStaticAssertDeclaration(SourceLocation StaticAssertLoc, 17075 Expr *AssertExpr, 17076 Expr *AssertMessageExpr, 17077 SourceLocation RParenLoc) { 17078 if (DiagnoseUnexpandedParameterPack(AssertExpr, UPPC_StaticAssertExpression)) 17079 return nullptr; 17080 17081 return BuildStaticAssertDeclaration(StaticAssertLoc, AssertExpr, 17082 AssertMessageExpr, RParenLoc, false); 17083 } 17084 17085 static void WriteCharTypePrefix(BuiltinType::Kind BTK, llvm::raw_ostream &OS) { 17086 switch (BTK) { 17087 case BuiltinType::Char_S: 17088 case BuiltinType::Char_U: 17089 break; 17090 case BuiltinType::Char8: 17091 OS << "u8"; 17092 break; 17093 case BuiltinType::Char16: 17094 OS << 'u'; 17095 break; 17096 case BuiltinType::Char32: 17097 OS << 'U'; 17098 break; 17099 case BuiltinType::WChar_S: 17100 case BuiltinType::WChar_U: 17101 OS << 'L'; 17102 break; 17103 default: 17104 llvm_unreachable("Non-character type"); 17105 } 17106 } 17107 17108 /// Convert character's value, interpreted as a code unit, to a string. 17109 /// The value needs to be zero-extended to 32-bits. 17110 /// FIXME: This assumes Unicode literal encodings 17111 static void WriteCharValueForDiagnostic(uint32_t Value, const BuiltinType *BTy, 17112 unsigned TyWidth, 17113 SmallVectorImpl<char> &Str) { 17114 char Arr[UNI_MAX_UTF8_BYTES_PER_CODE_POINT]; 17115 char *Ptr = Arr; 17116 BuiltinType::Kind K = BTy->getKind(); 17117 llvm::raw_svector_ostream OS(Str); 17118 17119 // This should catch Char_S, Char_U, Char8, and use of escaped characters in 17120 // other types. 17121 if (K == BuiltinType::Char_S || K == BuiltinType::Char_U || 17122 K == BuiltinType::Char8 || Value <= 0x7F) { 17123 StringRef Escaped = escapeCStyle<EscapeChar::Single>(Value); 17124 if (!Escaped.empty()) 17125 EscapeStringForDiagnostic(Escaped, Str); 17126 else 17127 OS << static_cast<char>(Value); 17128 return; 17129 } 17130 17131 switch (K) { 17132 case BuiltinType::Char16: 17133 case BuiltinType::Char32: 17134 case BuiltinType::WChar_S: 17135 case BuiltinType::WChar_U: { 17136 if (llvm::ConvertCodePointToUTF8(Value, Ptr)) 17137 EscapeStringForDiagnostic(StringRef(Arr, Ptr - Arr), Str); 17138 else 17139 OS << "\\x" 17140 << llvm::format_hex_no_prefix(Value, TyWidth / 4, /*Upper=*/true); 17141 break; 17142 } 17143 default: 17144 llvm_unreachable("Non-character type is passed"); 17145 } 17146 } 17147 17148 /// Convert \V to a string we can present to the user in a diagnostic 17149 /// \T is the type of the expression that has been evaluated into \V 17150 static bool ConvertAPValueToString(const APValue &V, QualType T, 17151 SmallVectorImpl<char> &Str, 17152 ASTContext &Context) { 17153 if (!V.hasValue()) 17154 return false; 17155 17156 switch (V.getKind()) { 17157 case APValue::ValueKind::Int: 17158 if (T->isBooleanType()) { 17159 // Bools are reduced to ints during evaluation, but for 17160 // diagnostic purposes we want to print them as 17161 // true or false. 17162 int64_t BoolValue = V.getInt().getExtValue(); 17163 assert((BoolValue == 0 || BoolValue == 1) && 17164 "Bool type, but value is not 0 or 1"); 17165 llvm::raw_svector_ostream OS(Str); 17166 OS << (BoolValue ? "true" : "false"); 17167 } else { 17168 llvm::raw_svector_ostream OS(Str); 17169 // Same is true for chars. 17170 // We want to print the character representation for textual types 17171 const auto *BTy = T->getAs<BuiltinType>(); 17172 if (BTy) { 17173 switch (BTy->getKind()) { 17174 case BuiltinType::Char_S: 17175 case BuiltinType::Char_U: 17176 case BuiltinType::Char8: 17177 case BuiltinType::Char16: 17178 case BuiltinType::Char32: 17179 case BuiltinType::WChar_S: 17180 case BuiltinType::WChar_U: { 17181 unsigned TyWidth = Context.getIntWidth(T); 17182 assert(8 <= TyWidth && TyWidth <= 32 && "Unexpected integer width"); 17183 uint32_t CodeUnit = static_cast<uint32_t>(V.getInt().getZExtValue()); 17184 WriteCharTypePrefix(BTy->getKind(), OS); 17185 OS << '\''; 17186 WriteCharValueForDiagnostic(CodeUnit, BTy, TyWidth, Str); 17187 OS << "' (0x" 17188 << llvm::format_hex_no_prefix(CodeUnit, /*Width=*/2, 17189 /*Upper=*/true) 17190 << ", " << V.getInt() << ')'; 17191 return true; 17192 } 17193 default: 17194 break; 17195 } 17196 } 17197 V.getInt().toString(Str); 17198 } 17199 17200 break; 17201 17202 case APValue::ValueKind::Float: 17203 V.getFloat().toString(Str); 17204 break; 17205 17206 case APValue::ValueKind::LValue: 17207 if (V.isNullPointer()) { 17208 llvm::raw_svector_ostream OS(Str); 17209 OS << "nullptr"; 17210 } else 17211 return false; 17212 break; 17213 17214 case APValue::ValueKind::ComplexFloat: { 17215 llvm::raw_svector_ostream OS(Str); 17216 OS << '('; 17217 V.getComplexFloatReal().toString(Str); 17218 OS << " + "; 17219 V.getComplexFloatImag().toString(Str); 17220 OS << "i)"; 17221 } break; 17222 17223 case APValue::ValueKind::ComplexInt: { 17224 llvm::raw_svector_ostream OS(Str); 17225 OS << '('; 17226 V.getComplexIntReal().toString(Str); 17227 OS << " + "; 17228 V.getComplexIntImag().toString(Str); 17229 OS << "i)"; 17230 } break; 17231 17232 default: 17233 return false; 17234 } 17235 17236 return true; 17237 } 17238 17239 /// Some Expression types are not useful to print notes about, 17240 /// e.g. literals and values that have already been expanded 17241 /// before such as int-valued template parameters. 17242 static bool UsefulToPrintExpr(const Expr *E) { 17243 E = E->IgnoreParenImpCasts(); 17244 // Literals are pretty easy for humans to understand. 17245 if (isa<IntegerLiteral, FloatingLiteral, CharacterLiteral, CXXBoolLiteralExpr, 17246 CXXNullPtrLiteralExpr, FixedPointLiteral, ImaginaryLiteral>(E)) 17247 return false; 17248 17249 // These have been substituted from template parameters 17250 // and appear as literals in the static assert error. 17251 if (isa<SubstNonTypeTemplateParmExpr>(E)) 17252 return false; 17253 17254 // -5 is also simple to understand. 17255 if (const auto *UnaryOp = dyn_cast<UnaryOperator>(E)) 17256 return UsefulToPrintExpr(UnaryOp->getSubExpr()); 17257 17258 // Only print nested arithmetic operators. 17259 if (const auto *BO = dyn_cast<BinaryOperator>(E)) 17260 return (BO->isShiftOp() || BO->isAdditiveOp() || BO->isMultiplicativeOp() || 17261 BO->isBitwiseOp()); 17262 17263 return true; 17264 } 17265 17266 /// Try to print more useful information about a failed static_assert 17267 /// with expression \E 17268 void Sema::DiagnoseStaticAssertDetails(const Expr *E) { 17269 if (const auto *Op = dyn_cast<BinaryOperator>(E); 17270 Op && Op->getOpcode() != BO_LOr) { 17271 const Expr *LHS = Op->getLHS()->IgnoreParenImpCasts(); 17272 const Expr *RHS = Op->getRHS()->IgnoreParenImpCasts(); 17273 17274 // Ignore comparisons of boolean expressions with a boolean literal. 17275 if ((isa<CXXBoolLiteralExpr>(LHS) && RHS->getType()->isBooleanType()) || 17276 (isa<CXXBoolLiteralExpr>(RHS) && LHS->getType()->isBooleanType())) 17277 return; 17278 17279 // Don't print obvious expressions. 17280 if (!UsefulToPrintExpr(LHS) && !UsefulToPrintExpr(RHS)) 17281 return; 17282 17283 struct { 17284 const clang::Expr *Cond; 17285 Expr::EvalResult Result; 17286 SmallString<12> ValueString; 17287 bool Print; 17288 } DiagSide[2] = {{LHS, Expr::EvalResult(), {}, false}, 17289 {RHS, Expr::EvalResult(), {}, false}}; 17290 for (unsigned I = 0; I < 2; I++) { 17291 const Expr *Side = DiagSide[I].Cond; 17292 17293 Side->EvaluateAsRValue(DiagSide[I].Result, Context, true); 17294 17295 DiagSide[I].Print = 17296 ConvertAPValueToString(DiagSide[I].Result.Val, Side->getType(), 17297 DiagSide[I].ValueString, Context); 17298 } 17299 if (DiagSide[0].Print && DiagSide[1].Print) { 17300 Diag(Op->getExprLoc(), diag::note_expr_evaluates_to) 17301 << DiagSide[0].ValueString << Op->getOpcodeStr() 17302 << DiagSide[1].ValueString << Op->getSourceRange(); 17303 } 17304 } 17305 } 17306 17307 bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, 17308 std::string &Result, 17309 ASTContext &Ctx, 17310 bool ErrorOnInvalidMessage) { 17311 assert(Message); 17312 assert(!Message->isTypeDependent() && !Message->isValueDependent() && 17313 "can't evaluate a dependant static assert message"); 17314 17315 if (const auto *SL = dyn_cast<StringLiteral>(Message)) { 17316 assert(SL->isUnevaluated() && "expected an unevaluated string"); 17317 Result.assign(SL->getString().begin(), SL->getString().end()); 17318 return true; 17319 } 17320 17321 SourceLocation Loc = Message->getBeginLoc(); 17322 QualType T = Message->getType().getNonReferenceType(); 17323 auto *RD = T->getAsCXXRecordDecl(); 17324 if (!RD) { 17325 Diag(Loc, diag::err_static_assert_invalid_message); 17326 return false; 17327 } 17328 17329 auto FindMember = [&](StringRef Member, bool &Empty, 17330 bool Diag = false) -> std::optional<LookupResult> { 17331 DeclarationName DN = PP.getIdentifierInfo(Member); 17332 LookupResult MemberLookup(*this, DN, Loc, Sema::LookupMemberName); 17333 LookupQualifiedName(MemberLookup, RD); 17334 Empty = MemberLookup.empty(); 17335 OverloadCandidateSet Candidates(MemberLookup.getNameLoc(), 17336 OverloadCandidateSet::CSK_Normal); 17337 if (MemberLookup.empty()) 17338 return std::nullopt; 17339 return std::move(MemberLookup); 17340 }; 17341 17342 bool SizeNotFound, DataNotFound; 17343 std::optional<LookupResult> SizeMember = FindMember("size", SizeNotFound); 17344 std::optional<LookupResult> DataMember = FindMember("data", DataNotFound); 17345 if (SizeNotFound || DataNotFound) { 17346 Diag(Loc, diag::err_static_assert_missing_member_function) 17347 << ((SizeNotFound && DataNotFound) ? 2 17348 : SizeNotFound ? 0 17349 : 1); 17350 return false; 17351 } 17352 17353 if (!SizeMember || !DataMember) { 17354 if (!SizeMember) 17355 FindMember("size", SizeNotFound, /*Diag=*/true); 17356 if (!DataMember) 17357 FindMember("data", DataNotFound, /*Diag=*/true); 17358 return false; 17359 } 17360 17361 auto BuildExpr = [&](LookupResult &LR) { 17362 ExprResult Res = BuildMemberReferenceExpr( 17363 Message, Message->getType(), Message->getBeginLoc(), false, 17364 CXXScopeSpec(), SourceLocation(), nullptr, LR, nullptr, nullptr); 17365 if (Res.isInvalid()) 17366 return ExprError(); 17367 Res = BuildCallExpr(nullptr, Res.get(), Loc, std::nullopt, Loc, nullptr, 17368 false, true); 17369 if (Res.isInvalid()) 17370 return ExprError(); 17371 if (Res.get()->isTypeDependent() || Res.get()->isValueDependent()) 17372 return ExprError(); 17373 return TemporaryMaterializationConversion(Res.get()); 17374 }; 17375 17376 ExprResult SizeE = BuildExpr(*SizeMember); 17377 ExprResult DataE = BuildExpr(*DataMember); 17378 17379 QualType SizeT = Context.getSizeType(); 17380 QualType ConstCharPtr = 17381 Context.getPointerType(Context.getConstType(Context.CharTy)); 17382 17383 ExprResult EvaluatedSize = 17384 SizeE.isInvalid() ? ExprError() 17385 : BuildConvertedConstantExpression( 17386 SizeE.get(), SizeT, CCEK_StaticAssertMessageSize); 17387 if (EvaluatedSize.isInvalid()) { 17388 Diag(Loc, diag::err_static_assert_invalid_mem_fn_ret_ty) << /*size*/ 0; 17389 return false; 17390 } 17391 17392 ExprResult EvaluatedData = 17393 DataE.isInvalid() 17394 ? ExprError() 17395 : BuildConvertedConstantExpression(DataE.get(), ConstCharPtr, 17396 CCEK_StaticAssertMessageData); 17397 if (EvaluatedData.isInvalid()) { 17398 Diag(Loc, diag::err_static_assert_invalid_mem_fn_ret_ty) << /*data*/ 1; 17399 return false; 17400 } 17401 17402 if (!ErrorOnInvalidMessage && 17403 Diags.isIgnored(diag::warn_static_assert_message_constexpr, Loc)) 17404 return true; 17405 17406 Expr::EvalResult Status; 17407 SmallVector<PartialDiagnosticAt, 8> Notes; 17408 Status.Diag = &Notes; 17409 if (!Message->EvaluateCharRangeAsString(Result, EvaluatedSize.get(), 17410 EvaluatedData.get(), Ctx, Status) || 17411 !Notes.empty()) { 17412 Diag(Message->getBeginLoc(), 17413 ErrorOnInvalidMessage ? diag::err_static_assert_message_constexpr 17414 : diag::warn_static_assert_message_constexpr); 17415 for (const auto &Note : Notes) 17416 Diag(Note.first, Note.second); 17417 return !ErrorOnInvalidMessage; 17418 } 17419 return true; 17420 } 17421 17422 Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, 17423 Expr *AssertExpr, Expr *AssertMessage, 17424 SourceLocation RParenLoc, 17425 bool Failed) { 17426 assert(AssertExpr != nullptr && "Expected non-null condition"); 17427 if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && 17428 (!AssertMessage || (!AssertMessage->isTypeDependent() && 17429 !AssertMessage->isValueDependent())) && 17430 !Failed) { 17431 // In a static_assert-declaration, the constant-expression shall be a 17432 // constant expression that can be contextually converted to bool. 17433 ExprResult Converted = PerformContextuallyConvertToBool(AssertExpr); 17434 if (Converted.isInvalid()) 17435 Failed = true; 17436 17437 ExprResult FullAssertExpr = 17438 ActOnFinishFullExpr(Converted.get(), StaticAssertLoc, 17439 /*DiscardedValue*/ false, 17440 /*IsConstexpr*/ true); 17441 if (FullAssertExpr.isInvalid()) 17442 Failed = true; 17443 else 17444 AssertExpr = FullAssertExpr.get(); 17445 17446 llvm::APSInt Cond; 17447 Expr *BaseExpr = AssertExpr; 17448 AllowFoldKind FoldKind = NoFold; 17449 17450 if (!getLangOpts().CPlusPlus) { 17451 // In C mode, allow folding as an extension for better compatibility with 17452 // C++ in terms of expressions like static_assert("test") or 17453 // static_assert(nullptr). 17454 FoldKind = AllowFold; 17455 } 17456 17457 if (!Failed && VerifyIntegerConstantExpression( 17458 BaseExpr, &Cond, 17459 diag::err_static_assert_expression_is_not_constant, 17460 FoldKind).isInvalid()) 17461 Failed = true; 17462 17463 // If the static_assert passes, only verify that 17464 // the message is grammatically valid without evaluating it. 17465 if (!Failed && AssertMessage && Cond.getBoolValue()) { 17466 std::string Str; 17467 EvaluateStaticAssertMessageAsString(AssertMessage, Str, Context, 17468 /*ErrorOnInvalidMessage=*/false); 17469 } 17470 17471 // CWG2518 17472 // [dcl.pre]/p10 If [...] the expression is evaluated in the context of a 17473 // template definition, the declaration has no effect. 17474 bool InTemplateDefinition = 17475 getLangOpts().CPlusPlus && CurContext->isDependentContext(); 17476 17477 if (!Failed && !Cond && !InTemplateDefinition) { 17478 SmallString<256> MsgBuffer; 17479 llvm::raw_svector_ostream Msg(MsgBuffer); 17480 bool HasMessage = AssertMessage; 17481 if (AssertMessage) { 17482 std::string Str; 17483 HasMessage = 17484 EvaluateStaticAssertMessageAsString( 17485 AssertMessage, Str, Context, /*ErrorOnInvalidMessage=*/true) || 17486 !Str.empty(); 17487 Msg << Str; 17488 } 17489 Expr *InnerCond = nullptr; 17490 std::string InnerCondDescription; 17491 std::tie(InnerCond, InnerCondDescription) = 17492 findFailedBooleanCondition(Converted.get()); 17493 if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) { 17494 // Drill down into concept specialization expressions to see why they 17495 // weren't satisfied. 17496 Diag(AssertExpr->getBeginLoc(), diag::err_static_assert_failed) 17497 << !HasMessage << Msg.str() << AssertExpr->getSourceRange(); 17498 ConstraintSatisfaction Satisfaction; 17499 if (!CheckConstraintSatisfaction(InnerCond, Satisfaction)) 17500 DiagnoseUnsatisfiedConstraint(Satisfaction); 17501 } else if (InnerCond && !isa<CXXBoolLiteralExpr>(InnerCond) 17502 && !isa<IntegerLiteral>(InnerCond)) { 17503 Diag(InnerCond->getBeginLoc(), 17504 diag::err_static_assert_requirement_failed) 17505 << InnerCondDescription << !HasMessage << Msg.str() 17506 << InnerCond->getSourceRange(); 17507 DiagnoseStaticAssertDetails(InnerCond); 17508 } else { 17509 Diag(AssertExpr->getBeginLoc(), diag::err_static_assert_failed) 17510 << !HasMessage << Msg.str() << AssertExpr->getSourceRange(); 17511 PrintContextStack(); 17512 } 17513 Failed = true; 17514 } 17515 } else { 17516 ExprResult FullAssertExpr = ActOnFinishFullExpr(AssertExpr, StaticAssertLoc, 17517 /*DiscardedValue*/false, 17518 /*IsConstexpr*/true); 17519 if (FullAssertExpr.isInvalid()) 17520 Failed = true; 17521 else 17522 AssertExpr = FullAssertExpr.get(); 17523 } 17524 17525 Decl *Decl = StaticAssertDecl::Create(Context, CurContext, StaticAssertLoc, 17526 AssertExpr, AssertMessage, RParenLoc, 17527 Failed); 17528 17529 CurContext->addDecl(Decl); 17530 return Decl; 17531 } 17532 17533 /// Perform semantic analysis of the given friend type declaration. 17534 /// 17535 /// \returns A friend declaration that. 17536 FriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart, 17537 SourceLocation FriendLoc, 17538 TypeSourceInfo *TSInfo) { 17539 assert(TSInfo && "NULL TypeSourceInfo for friend type declaration"); 17540 17541 QualType T = TSInfo->getType(); 17542 SourceRange TypeRange = TSInfo->getTypeLoc().getSourceRange(); 17543 17544 // C++03 [class.friend]p2: 17545 // An elaborated-type-specifier shall be used in a friend declaration 17546 // for a class.* 17547 // 17548 // * The class-key of the elaborated-type-specifier is required. 17549 if (!CodeSynthesisContexts.empty()) { 17550 // Do not complain about the form of friend template types during any kind 17551 // of code synthesis. For template instantiation, we will have complained 17552 // when the template was defined. 17553 } else { 17554 if (!T->isElaboratedTypeSpecifier()) { 17555 // If we evaluated the type to a record type, suggest putting 17556 // a tag in front. 17557 if (const RecordType *RT = T->getAs<RecordType>()) { 17558 RecordDecl *RD = RT->getDecl(); 17559 17560 SmallString<16> InsertionText(" "); 17561 InsertionText += RD->getKindName(); 17562 17563 Diag(TypeRange.getBegin(), 17564 getLangOpts().CPlusPlus11 ? 17565 diag::warn_cxx98_compat_unelaborated_friend_type : 17566 diag::ext_unelaborated_friend_type) 17567 << (unsigned) RD->getTagKind() 17568 << T 17569 << FixItHint::CreateInsertion(getLocForEndOfToken(FriendLoc), 17570 InsertionText); 17571 } else { 17572 Diag(FriendLoc, 17573 getLangOpts().CPlusPlus11 ? 17574 diag::warn_cxx98_compat_nonclass_type_friend : 17575 diag::ext_nonclass_type_friend) 17576 << T 17577 << TypeRange; 17578 } 17579 } else if (T->getAs<EnumType>()) { 17580 Diag(FriendLoc, 17581 getLangOpts().CPlusPlus11 ? 17582 diag::warn_cxx98_compat_enum_friend : 17583 diag::ext_enum_friend) 17584 << T 17585 << TypeRange; 17586 } 17587 17588 // C++11 [class.friend]p3: 17589 // A friend declaration that does not declare a function shall have one 17590 // of the following forms: 17591 // friend elaborated-type-specifier ; 17592 // friend simple-type-specifier ; 17593 // friend typename-specifier ; 17594 if (getLangOpts().CPlusPlus11 && LocStart != FriendLoc) 17595 Diag(FriendLoc, diag::err_friend_not_first_in_declaration) << T; 17596 } 17597 17598 // If the type specifier in a friend declaration designates a (possibly 17599 // cv-qualified) class type, that class is declared as a friend; otherwise, 17600 // the friend declaration is ignored. 17601 return FriendDecl::Create(Context, CurContext, 17602 TSInfo->getTypeLoc().getBeginLoc(), TSInfo, 17603 FriendLoc); 17604 } 17605 17606 /// Handle a friend tag declaration where the scope specifier was 17607 /// templated. 17608 DeclResult Sema::ActOnTemplatedFriendTag( 17609 Scope *S, SourceLocation FriendLoc, unsigned TagSpec, SourceLocation TagLoc, 17610 CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, 17611 const ParsedAttributesView &Attr, MultiTemplateParamsArg TempParamLists) { 17612 TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec); 17613 17614 bool IsMemberSpecialization = false; 17615 bool Invalid = false; 17616 17617 if (TemplateParameterList *TemplateParams = 17618 MatchTemplateParametersToScopeSpecifier( 17619 TagLoc, NameLoc, SS, nullptr, TempParamLists, /*friend*/ true, 17620 IsMemberSpecialization, Invalid)) { 17621 if (TemplateParams->size() > 0) { 17622 // This is a declaration of a class template. 17623 if (Invalid) 17624 return true; 17625 17626 return CheckClassTemplate(S, TagSpec, TUK_Friend, TagLoc, SS, Name, 17627 NameLoc, Attr, TemplateParams, AS_public, 17628 /*ModulePrivateLoc=*/SourceLocation(), 17629 FriendLoc, TempParamLists.size() - 1, 17630 TempParamLists.data()).get(); 17631 } else { 17632 // The "template<>" header is extraneous. 17633 Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams) 17634 << TypeWithKeyword::getTagTypeKindName(Kind) << Name; 17635 IsMemberSpecialization = true; 17636 } 17637 } 17638 17639 if (Invalid) return true; 17640 17641 bool isAllExplicitSpecializations = true; 17642 for (unsigned I = TempParamLists.size(); I-- > 0; ) { 17643 if (TempParamLists[I]->size()) { 17644 isAllExplicitSpecializations = false; 17645 break; 17646 } 17647 } 17648 17649 // FIXME: don't ignore attributes. 17650 17651 // If it's explicit specializations all the way down, just forget 17652 // about the template header and build an appropriate non-templated 17653 // friend. TODO: for source fidelity, remember the headers. 17654 if (isAllExplicitSpecializations) { 17655 if (SS.isEmpty()) { 17656 bool Owned = false; 17657 bool IsDependent = false; 17658 return ActOnTag(S, TagSpec, TUK_Friend, TagLoc, SS, Name, NameLoc, Attr, 17659 AS_public, 17660 /*ModulePrivateLoc=*/SourceLocation(), 17661 MultiTemplateParamsArg(), Owned, IsDependent, 17662 /*ScopedEnumKWLoc=*/SourceLocation(), 17663 /*ScopedEnumUsesClassTag=*/false, 17664 /*UnderlyingType=*/TypeResult(), 17665 /*IsTypeSpecifier=*/false, 17666 /*IsTemplateParamOrArg=*/false, /*OOK=*/OOK_Outside); 17667 } 17668 17669 NestedNameSpecifierLoc QualifierLoc = SS.getWithLocInContext(Context); 17670 ElaboratedTypeKeyword Keyword 17671 = TypeWithKeyword::getKeywordForTagTypeKind(Kind); 17672 QualType T = CheckTypenameType(Keyword, TagLoc, QualifierLoc, 17673 *Name, NameLoc); 17674 if (T.isNull()) 17675 return true; 17676 17677 TypeSourceInfo *TSI = Context.CreateTypeSourceInfo(T); 17678 if (isa<DependentNameType>(T)) { 17679 DependentNameTypeLoc TL = 17680 TSI->getTypeLoc().castAs<DependentNameTypeLoc>(); 17681 TL.setElaboratedKeywordLoc(TagLoc); 17682 TL.setQualifierLoc(QualifierLoc); 17683 TL.setNameLoc(NameLoc); 17684 } else { 17685 ElaboratedTypeLoc TL = TSI->getTypeLoc().castAs<ElaboratedTypeLoc>(); 17686 TL.setElaboratedKeywordLoc(TagLoc); 17687 TL.setQualifierLoc(QualifierLoc); 17688 TL.getNamedTypeLoc().castAs<TypeSpecTypeLoc>().setNameLoc(NameLoc); 17689 } 17690 17691 FriendDecl *Friend = FriendDecl::Create(Context, CurContext, NameLoc, 17692 TSI, FriendLoc, TempParamLists); 17693 Friend->setAccess(AS_public); 17694 CurContext->addDecl(Friend); 17695 return Friend; 17696 } 17697 17698 assert(SS.isNotEmpty() && "valid templated tag with no SS and no direct?"); 17699 17700 17701 17702 // Handle the case of a templated-scope friend class. e.g. 17703 // template <class T> class A<T>::B; 17704 // FIXME: we don't support these right now. 17705 Diag(NameLoc, diag::warn_template_qualified_friend_unsupported) 17706 << SS.getScopeRep() << SS.getRange() << cast<CXXRecordDecl>(CurContext); 17707 ElaboratedTypeKeyword ETK = TypeWithKeyword::getKeywordForTagTypeKind(Kind); 17708 QualType T = Context.getDependentNameType(ETK, SS.getScopeRep(), Name); 17709 TypeSourceInfo *TSI = Context.CreateTypeSourceInfo(T); 17710 DependentNameTypeLoc TL = TSI->getTypeLoc().castAs<DependentNameTypeLoc>(); 17711 TL.setElaboratedKeywordLoc(TagLoc); 17712 TL.setQualifierLoc(SS.getWithLocInContext(Context)); 17713 TL.setNameLoc(NameLoc); 17714 17715 FriendDecl *Friend = FriendDecl::Create(Context, CurContext, NameLoc, 17716 TSI, FriendLoc, TempParamLists); 17717 Friend->setAccess(AS_public); 17718 Friend->setUnsupportedFriend(true); 17719 CurContext->addDecl(Friend); 17720 return Friend; 17721 } 17722 17723 /// Handle a friend type declaration. This works in tandem with 17724 /// ActOnTag. 17725 /// 17726 /// Notes on friend class templates: 17727 /// 17728 /// We generally treat friend class declarations as if they were 17729 /// declaring a class. So, for example, the elaborated type specifier 17730 /// in a friend declaration is required to obey the restrictions of a 17731 /// class-head (i.e. no typedefs in the scope chain), template 17732 /// parameters are required to match up with simple template-ids, &c. 17733 /// However, unlike when declaring a template specialization, it's 17734 /// okay to refer to a template specialization without an empty 17735 /// template parameter declaration, e.g. 17736 /// friend class A<T>::B<unsigned>; 17737 /// We permit this as a special case; if there are any template 17738 /// parameters present at all, require proper matching, i.e. 17739 /// template <> template \<class T> friend class A<int>::B; 17740 Decl *Sema::ActOnFriendTypeDecl(Scope *S, const DeclSpec &DS, 17741 MultiTemplateParamsArg TempParams) { 17742 SourceLocation Loc = DS.getBeginLoc(); 17743 17744 assert(DS.isFriendSpecified()); 17745 assert(DS.getStorageClassSpec() == DeclSpec::SCS_unspecified); 17746 17747 // C++ [class.friend]p3: 17748 // A friend declaration that does not declare a function shall have one of 17749 // the following forms: 17750 // friend elaborated-type-specifier ; 17751 // friend simple-type-specifier ; 17752 // friend typename-specifier ; 17753 // 17754 // Any declaration with a type qualifier does not have that form. (It's 17755 // legal to specify a qualified type as a friend, you just can't write the 17756 // keywords.) 17757 if (DS.getTypeQualifiers()) { 17758 if (DS.getTypeQualifiers() & DeclSpec::TQ_const) 17759 Diag(DS.getConstSpecLoc(), diag::err_friend_decl_spec) << "const"; 17760 if (DS.getTypeQualifiers() & DeclSpec::TQ_volatile) 17761 Diag(DS.getVolatileSpecLoc(), diag::err_friend_decl_spec) << "volatile"; 17762 if (DS.getTypeQualifiers() & DeclSpec::TQ_restrict) 17763 Diag(DS.getRestrictSpecLoc(), diag::err_friend_decl_spec) << "restrict"; 17764 if (DS.getTypeQualifiers() & DeclSpec::TQ_atomic) 17765 Diag(DS.getAtomicSpecLoc(), diag::err_friend_decl_spec) << "_Atomic"; 17766 if (DS.getTypeQualifiers() & DeclSpec::TQ_unaligned) 17767 Diag(DS.getUnalignedSpecLoc(), diag::err_friend_decl_spec) << "__unaligned"; 17768 } 17769 17770 // Try to convert the decl specifier to a type. This works for 17771 // friend templates because ActOnTag never produces a ClassTemplateDecl 17772 // for a TUK_Friend. 17773 Declarator TheDeclarator(DS, ParsedAttributesView::none(), 17774 DeclaratorContext::Member); 17775 TypeSourceInfo *TSI = GetTypeForDeclarator(TheDeclarator); 17776 QualType T = TSI->getType(); 17777 if (TheDeclarator.isInvalidType()) 17778 return nullptr; 17779 17780 if (DiagnoseUnexpandedParameterPack(Loc, TSI, UPPC_FriendDeclaration)) 17781 return nullptr; 17782 17783 // This is definitely an error in C++98. It's probably meant to 17784 // be forbidden in C++0x, too, but the specification is just 17785 // poorly written. 17786 // 17787 // The problem is with declarations like the following: 17788 // template <T> friend A<T>::foo; 17789 // where deciding whether a class C is a friend or not now hinges 17790 // on whether there exists an instantiation of A that causes 17791 // 'foo' to equal C. There are restrictions on class-heads 17792 // (which we declare (by fiat) elaborated friend declarations to 17793 // be) that makes this tractable. 17794 // 17795 // FIXME: handle "template <> friend class A<T>;", which 17796 // is possibly well-formed? Who even knows? 17797 if (TempParams.size() && !T->isElaboratedTypeSpecifier()) { 17798 Diag(Loc, diag::err_tagless_friend_type_template) 17799 << DS.getSourceRange(); 17800 return nullptr; 17801 } 17802 17803 // C++98 [class.friend]p1: A friend of a class is a function 17804 // or class that is not a member of the class . . . 17805 // This is fixed in DR77, which just barely didn't make the C++03 17806 // deadline. It's also a very silly restriction that seriously 17807 // affects inner classes and which nobody else seems to implement; 17808 // thus we never diagnose it, not even in -pedantic. 17809 // 17810 // But note that we could warn about it: it's always useless to 17811 // friend one of your own members (it's not, however, worthless to 17812 // friend a member of an arbitrary specialization of your template). 17813 17814 Decl *D; 17815 if (!TempParams.empty()) 17816 D = FriendTemplateDecl::Create(Context, CurContext, Loc, 17817 TempParams, 17818 TSI, 17819 DS.getFriendSpecLoc()); 17820 else 17821 D = CheckFriendTypeDecl(Loc, DS.getFriendSpecLoc(), TSI); 17822 17823 if (!D) 17824 return nullptr; 17825 17826 D->setAccess(AS_public); 17827 CurContext->addDecl(D); 17828 17829 return D; 17830 } 17831 17832 NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, 17833 MultiTemplateParamsArg TemplateParams) { 17834 const DeclSpec &DS = D.getDeclSpec(); 17835 17836 assert(DS.isFriendSpecified()); 17837 assert(DS.getStorageClassSpec() == DeclSpec::SCS_unspecified); 17838 17839 SourceLocation Loc = D.getIdentifierLoc(); 17840 TypeSourceInfo *TInfo = GetTypeForDeclarator(D); 17841 17842 // C++ [class.friend]p1 17843 // A friend of a class is a function or class.... 17844 // Note that this sees through typedefs, which is intended. 17845 // It *doesn't* see through dependent types, which is correct 17846 // according to [temp.arg.type]p3: 17847 // If a declaration acquires a function type through a 17848 // type dependent on a template-parameter and this causes 17849 // a declaration that does not use the syntactic form of a 17850 // function declarator to have a function type, the program 17851 // is ill-formed. 17852 if (!TInfo->getType()->isFunctionType()) { 17853 Diag(Loc, diag::err_unexpected_friend); 17854 17855 // It might be worthwhile to try to recover by creating an 17856 // appropriate declaration. 17857 return nullptr; 17858 } 17859 17860 // C++ [namespace.memdef]p3 17861 // - If a friend declaration in a non-local class first declares a 17862 // class or function, the friend class or function is a member 17863 // of the innermost enclosing namespace. 17864 // - The name of the friend is not found by simple name lookup 17865 // until a matching declaration is provided in that namespace 17866 // scope (either before or after the class declaration granting 17867 // friendship). 17868 // - If a friend function is called, its name may be found by the 17869 // name lookup that considers functions from namespaces and 17870 // classes associated with the types of the function arguments. 17871 // - When looking for a prior declaration of a class or a function 17872 // declared as a friend, scopes outside the innermost enclosing 17873 // namespace scope are not considered. 17874 17875 CXXScopeSpec &SS = D.getCXXScopeSpec(); 17876 DeclarationNameInfo NameInfo = GetNameForDeclarator(D); 17877 assert(NameInfo.getName()); 17878 17879 // Check for unexpanded parameter packs. 17880 if (DiagnoseUnexpandedParameterPack(Loc, TInfo, UPPC_FriendDeclaration) || 17881 DiagnoseUnexpandedParameterPack(NameInfo, UPPC_FriendDeclaration) || 17882 DiagnoseUnexpandedParameterPack(SS, UPPC_FriendDeclaration)) 17883 return nullptr; 17884 17885 // The context we found the declaration in, or in which we should 17886 // create the declaration. 17887 DeclContext *DC; 17888 Scope *DCScope = S; 17889 LookupResult Previous(*this, NameInfo, LookupOrdinaryName, 17890 ForExternalRedeclaration); 17891 17892 bool isTemplateId = D.getName().getKind() == UnqualifiedIdKind::IK_TemplateId; 17893 17894 // There are five cases here. 17895 // - There's no scope specifier and we're in a local class. Only look 17896 // for functions declared in the immediately-enclosing block scope. 17897 // We recover from invalid scope qualifiers as if they just weren't there. 17898 FunctionDecl *FunctionContainingLocalClass = nullptr; 17899 if ((SS.isInvalid() || !SS.isSet()) && 17900 (FunctionContainingLocalClass = 17901 cast<CXXRecordDecl>(CurContext)->isLocalClass())) { 17902 // C++11 [class.friend]p11: 17903 // If a friend declaration appears in a local class and the name 17904 // specified is an unqualified name, a prior declaration is 17905 // looked up without considering scopes that are outside the 17906 // innermost enclosing non-class scope. For a friend function 17907 // declaration, if there is no prior declaration, the program is 17908 // ill-formed. 17909 17910 // Find the innermost enclosing non-class scope. This is the block 17911 // scope containing the local class definition (or for a nested class, 17912 // the outer local class). 17913 DCScope = S->getFnParent(); 17914 17915 // Look up the function name in the scope. 17916 Previous.clear(LookupLocalFriendName); 17917 LookupName(Previous, S, /*AllowBuiltinCreation*/false); 17918 17919 if (!Previous.empty()) { 17920 // All possible previous declarations must have the same context: 17921 // either they were declared at block scope or they are members of 17922 // one of the enclosing local classes. 17923 DC = Previous.getRepresentativeDecl()->getDeclContext(); 17924 } else { 17925 // This is ill-formed, but provide the context that we would have 17926 // declared the function in, if we were permitted to, for error recovery. 17927 DC = FunctionContainingLocalClass; 17928 } 17929 adjustContextForLocalExternDecl(DC); 17930 17931 // - There's no scope specifier, in which case we just go to the 17932 // appropriate scope and look for a function or function template 17933 // there as appropriate. 17934 } else if (SS.isInvalid() || !SS.isSet()) { 17935 // C++11 [namespace.memdef]p3: 17936 // If the name in a friend declaration is neither qualified nor 17937 // a template-id and the declaration is a function or an 17938 // elaborated-type-specifier, the lookup to determine whether 17939 // the entity has been previously declared shall not consider 17940 // any scopes outside the innermost enclosing namespace. 17941 17942 // Find the appropriate context according to the above. 17943 DC = CurContext; 17944 17945 // Skip class contexts. If someone can cite chapter and verse 17946 // for this behavior, that would be nice --- it's what GCC and 17947 // EDG do, and it seems like a reasonable intent, but the spec 17948 // really only says that checks for unqualified existing 17949 // declarations should stop at the nearest enclosing namespace, 17950 // not that they should only consider the nearest enclosing 17951 // namespace. 17952 while (DC->isRecord()) 17953 DC = DC->getParent(); 17954 17955 DeclContext *LookupDC = DC->getNonTransparentContext(); 17956 while (true) { 17957 LookupQualifiedName(Previous, LookupDC); 17958 17959 if (!Previous.empty()) { 17960 DC = LookupDC; 17961 break; 17962 } 17963 17964 if (isTemplateId) { 17965 if (isa<TranslationUnitDecl>(LookupDC)) break; 17966 } else { 17967 if (LookupDC->isFileContext()) break; 17968 } 17969 LookupDC = LookupDC->getParent(); 17970 } 17971 17972 DCScope = getScopeForDeclContext(S, DC); 17973 17974 // - There's a non-dependent scope specifier, in which case we 17975 // compute it and do a previous lookup there for a function 17976 // or function template. 17977 } else if (!SS.getScopeRep()->isDependent()) { 17978 DC = computeDeclContext(SS); 17979 if (!DC) return nullptr; 17980 17981 if (RequireCompleteDeclContext(SS, DC)) return nullptr; 17982 17983 LookupQualifiedName(Previous, DC); 17984 17985 // C++ [class.friend]p1: A friend of a class is a function or 17986 // class that is not a member of the class . . . 17987 if (DC->Equals(CurContext)) 17988 Diag(DS.getFriendSpecLoc(), 17989 getLangOpts().CPlusPlus11 ? 17990 diag::warn_cxx98_compat_friend_is_member : 17991 diag::err_friend_is_member); 17992 17993 // - There's a scope specifier that does not match any template 17994 // parameter lists, in which case we use some arbitrary context, 17995 // create a method or method template, and wait for instantiation. 17996 // - There's a scope specifier that does match some template 17997 // parameter lists, which we don't handle right now. 17998 } else { 17999 DC = CurContext; 18000 assert(isa<CXXRecordDecl>(DC) && "friend declaration not in class?"); 18001 } 18002 18003 if (!DC->isRecord()) { 18004 int DiagArg = -1; 18005 switch (D.getName().getKind()) { 18006 case UnqualifiedIdKind::IK_ConstructorTemplateId: 18007 case UnqualifiedIdKind::IK_ConstructorName: 18008 DiagArg = 0; 18009 break; 18010 case UnqualifiedIdKind::IK_DestructorName: 18011 DiagArg = 1; 18012 break; 18013 case UnqualifiedIdKind::IK_ConversionFunctionId: 18014 DiagArg = 2; 18015 break; 18016 case UnqualifiedIdKind::IK_DeductionGuideName: 18017 DiagArg = 3; 18018 break; 18019 case UnqualifiedIdKind::IK_Identifier: 18020 case UnqualifiedIdKind::IK_ImplicitSelfParam: 18021 case UnqualifiedIdKind::IK_LiteralOperatorId: 18022 case UnqualifiedIdKind::IK_OperatorFunctionId: 18023 case UnqualifiedIdKind::IK_TemplateId: 18024 break; 18025 } 18026 // This implies that it has to be an operator or function. 18027 if (DiagArg >= 0) { 18028 Diag(Loc, diag::err_introducing_special_friend) << DiagArg; 18029 return nullptr; 18030 } 18031 } 18032 18033 // FIXME: This is an egregious hack to cope with cases where the scope stack 18034 // does not contain the declaration context, i.e., in an out-of-line 18035 // definition of a class. 18036 Scope FakeDCScope(S, Scope::DeclScope, Diags); 18037 if (!DCScope) { 18038 FakeDCScope.setEntity(DC); 18039 DCScope = &FakeDCScope; 18040 } 18041 18042 bool AddToScope = true; 18043 NamedDecl *ND = ActOnFunctionDeclarator(DCScope, D, DC, TInfo, Previous, 18044 TemplateParams, AddToScope); 18045 if (!ND) return nullptr; 18046 18047 assert(ND->getLexicalDeclContext() == CurContext); 18048 18049 // If we performed typo correction, we might have added a scope specifier 18050 // and changed the decl context. 18051 DC = ND->getDeclContext(); 18052 18053 // Add the function declaration to the appropriate lookup tables, 18054 // adjusting the redeclarations list as necessary. We don't 18055 // want to do this yet if the friending class is dependent. 18056 // 18057 // Also update the scope-based lookup if the target context's 18058 // lookup context is in lexical scope. 18059 if (!CurContext->isDependentContext()) { 18060 DC = DC->getRedeclContext(); 18061 DC->makeDeclVisibleInContext(ND); 18062 if (Scope *EnclosingScope = getScopeForDeclContext(S, DC)) 18063 PushOnScopeChains(ND, EnclosingScope, /*AddToContext=*/ false); 18064 } 18065 18066 FriendDecl *FrD = FriendDecl::Create(Context, CurContext, 18067 D.getIdentifierLoc(), ND, 18068 DS.getFriendSpecLoc()); 18069 FrD->setAccess(AS_public); 18070 CurContext->addDecl(FrD); 18071 18072 if (ND->isInvalidDecl()) { 18073 FrD->setInvalidDecl(); 18074 } else { 18075 if (DC->isRecord()) CheckFriendAccess(ND); 18076 18077 FunctionDecl *FD; 18078 if (FunctionTemplateDecl *FTD = dyn_cast<FunctionTemplateDecl>(ND)) 18079 FD = FTD->getTemplatedDecl(); 18080 else 18081 FD = cast<FunctionDecl>(ND); 18082 18083 // C++ [class.friend]p6: 18084 // A function may be defined in a friend declaration of a class if and 18085 // only if the class is a non-local class, and the function name is 18086 // unqualified. 18087 if (D.isFunctionDefinition()) { 18088 // Qualified friend function definition. 18089 if (SS.isNotEmpty()) { 18090 // FIXME: We should only do this if the scope specifier names the 18091 // innermost enclosing namespace; otherwise the fixit changes the 18092 // meaning of the code. 18093 SemaDiagnosticBuilder DB = 18094 Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def); 18095 18096 DB << SS.getScopeRep(); 18097 if (DC->isFileContext()) 18098 DB << FixItHint::CreateRemoval(SS.getRange()); 18099 18100 // Friend function defined in a local class. 18101 } else if (FunctionContainingLocalClass) { 18102 Diag(NameInfo.getBeginLoc(), diag::err_friend_def_in_local_class); 18103 18104 // Per [basic.pre]p4, a template-id is not a name. Therefore, if we have 18105 // a template-id, the function name is not unqualified because these is 18106 // no name. While the wording requires some reading in-between the 18107 // lines, GCC, MSVC, and EDG all consider a friend function 18108 // specialization definitions // to be de facto explicit specialization 18109 // and diagnose them as such. 18110 } else if (isTemplateId) { 18111 Diag(NameInfo.getBeginLoc(), diag::err_friend_specialization_def); 18112 } 18113 } 18114 18115 // C++11 [dcl.fct.default]p4: If a friend declaration specifies a 18116 // default argument expression, that declaration shall be a definition 18117 // and shall be the only declaration of the function or function 18118 // template in the translation unit. 18119 if (functionDeclHasDefaultArgument(FD)) { 18120 // We can't look at FD->getPreviousDecl() because it may not have been set 18121 // if we're in a dependent context. If the function is known to be a 18122 // redeclaration, we will have narrowed Previous down to the right decl. 18123 if (D.isRedeclaration()) { 18124 Diag(FD->getLocation(), diag::err_friend_decl_with_def_arg_redeclared); 18125 Diag(Previous.getRepresentativeDecl()->getLocation(), 18126 diag::note_previous_declaration); 18127 } else if (!D.isFunctionDefinition()) 18128 Diag(FD->getLocation(), diag::err_friend_decl_with_def_arg_must_be_def); 18129 } 18130 18131 // Mark templated-scope function declarations as unsupported. 18132 if (FD->getNumTemplateParameterLists() && SS.isValid()) { 18133 Diag(FD->getLocation(), diag::warn_template_qualified_friend_unsupported) 18134 << SS.getScopeRep() << SS.getRange() 18135 << cast<CXXRecordDecl>(CurContext); 18136 FrD->setUnsupportedFriend(true); 18137 } 18138 } 18139 18140 warnOnReservedIdentifier(ND); 18141 18142 return ND; 18143 } 18144 18145 void Sema::SetDeclDeleted(Decl *Dcl, SourceLocation DelLoc) { 18146 AdjustDeclIfTemplate(Dcl); 18147 18148 FunctionDecl *Fn = dyn_cast_or_null<FunctionDecl>(Dcl); 18149 if (!Fn) { 18150 Diag(DelLoc, diag::err_deleted_non_function); 18151 return; 18152 } 18153 18154 // Deleted function does not have a body. 18155 Fn->setWillHaveBody(false); 18156 18157 if (const FunctionDecl *Prev = Fn->getPreviousDecl()) { 18158 // Don't consider the implicit declaration we generate for explicit 18159 // specializations. FIXME: Do not generate these implicit declarations. 18160 if ((Prev->getTemplateSpecializationKind() != TSK_ExplicitSpecialization || 18161 Prev->getPreviousDecl()) && 18162 !Prev->isDefined()) { 18163 Diag(DelLoc, diag::err_deleted_decl_not_first); 18164 Diag(Prev->getLocation().isInvalid() ? DelLoc : Prev->getLocation(), 18165 Prev->isImplicit() ? diag::note_previous_implicit_declaration 18166 : diag::note_previous_declaration); 18167 // We can't recover from this; the declaration might have already 18168 // been used. 18169 Fn->setInvalidDecl(); 18170 return; 18171 } 18172 18173 // To maintain the invariant that functions are only deleted on their first 18174 // declaration, mark the implicitly-instantiated declaration of the 18175 // explicitly-specialized function as deleted instead of marking the 18176 // instantiated redeclaration. 18177 Fn = Fn->getCanonicalDecl(); 18178 } 18179 18180 // dllimport/dllexport cannot be deleted. 18181 if (const InheritableAttr *DLLAttr = getDLLAttr(Fn)) { 18182 Diag(Fn->getLocation(), diag::err_attribute_dll_deleted) << DLLAttr; 18183 Fn->setInvalidDecl(); 18184 } 18185 18186 // C++11 [basic.start.main]p3: 18187 // A program that defines main as deleted [...] is ill-formed. 18188 if (Fn->isMain()) 18189 Diag(DelLoc, diag::err_deleted_main); 18190 18191 // C++11 [dcl.fct.def.delete]p4: 18192 // A deleted function is implicitly inline. 18193 Fn->setImplicitlyInline(); 18194 Fn->setDeletedAsWritten(); 18195 } 18196 18197 void Sema::SetDeclDefaulted(Decl *Dcl, SourceLocation DefaultLoc) { 18198 if (!Dcl || Dcl->isInvalidDecl()) 18199 return; 18200 18201 auto *FD = dyn_cast<FunctionDecl>(Dcl); 18202 if (!FD) { 18203 if (auto *FTD = dyn_cast<FunctionTemplateDecl>(Dcl)) { 18204 if (getDefaultedFunctionKind(FTD->getTemplatedDecl()).isComparison()) { 18205 Diag(DefaultLoc, diag::err_defaulted_comparison_template); 18206 return; 18207 } 18208 } 18209 18210 Diag(DefaultLoc, diag::err_default_special_members) 18211 << getLangOpts().CPlusPlus20; 18212 return; 18213 } 18214 18215 // Reject if this can't possibly be a defaultable function. 18216 DefaultedFunctionKind DefKind = getDefaultedFunctionKind(FD); 18217 if (!DefKind && 18218 // A dependent function that doesn't locally look defaultable can 18219 // still instantiate to a defaultable function if it's a constructor 18220 // or assignment operator. 18221 (!FD->isDependentContext() || 18222 (!isa<CXXConstructorDecl>(FD) && 18223 FD->getDeclName().getCXXOverloadedOperator() != OO_Equal))) { 18224 Diag(DefaultLoc, diag::err_default_special_members) 18225 << getLangOpts().CPlusPlus20; 18226 return; 18227 } 18228 18229 // Issue compatibility warning. We already warned if the operator is 18230 // 'operator<=>' when parsing the '<=>' token. 18231 if (DefKind.isComparison() && 18232 DefKind.asComparison() != DefaultedComparisonKind::ThreeWay) { 18233 Diag(DefaultLoc, getLangOpts().CPlusPlus20 18234 ? diag::warn_cxx17_compat_defaulted_comparison 18235 : diag::ext_defaulted_comparison); 18236 } 18237 18238 FD->setDefaulted(); 18239 FD->setExplicitlyDefaulted(); 18240 FD->setDefaultLoc(DefaultLoc); 18241 18242 // Defer checking functions that are defaulted in a dependent context. 18243 if (FD->isDependentContext()) 18244 return; 18245 18246 // Unset that we will have a body for this function. We might not, 18247 // if it turns out to be trivial, and we don't need this marking now 18248 // that we've marked it as defaulted. 18249 FD->setWillHaveBody(false); 18250 18251 if (DefKind.isComparison()) { 18252 // If this comparison's defaulting occurs within the definition of its 18253 // lexical class context, we have to do the checking when complete. 18254 if (auto const *RD = dyn_cast<CXXRecordDecl>(FD->getLexicalDeclContext())) 18255 if (!RD->isCompleteDefinition()) 18256 return; 18257 } 18258 18259 // If this member fn was defaulted on its first declaration, we will have 18260 // already performed the checking in CheckCompletedCXXClass. Such a 18261 // declaration doesn't trigger an implicit definition. 18262 if (isa<CXXMethodDecl>(FD)) { 18263 const FunctionDecl *Primary = FD; 18264 if (const FunctionDecl *Pattern = FD->getTemplateInstantiationPattern()) 18265 // Ask the template instantiation pattern that actually had the 18266 // '= default' on it. 18267 Primary = Pattern; 18268 if (Primary->getCanonicalDecl()->isDefaulted()) 18269 return; 18270 } 18271 18272 if (DefKind.isComparison()) { 18273 if (CheckExplicitlyDefaultedComparison(nullptr, FD, DefKind.asComparison())) 18274 FD->setInvalidDecl(); 18275 else 18276 DefineDefaultedComparison(DefaultLoc, FD, DefKind.asComparison()); 18277 } else { 18278 auto *MD = cast<CXXMethodDecl>(FD); 18279 18280 if (CheckExplicitlyDefaultedSpecialMember(MD, DefKind.asSpecialMember(), 18281 DefaultLoc)) 18282 MD->setInvalidDecl(); 18283 else 18284 DefineDefaultedFunction(*this, MD, DefaultLoc); 18285 } 18286 } 18287 18288 static void SearchForReturnInStmt(Sema &Self, Stmt *S) { 18289 for (Stmt *SubStmt : S->children()) { 18290 if (!SubStmt) 18291 continue; 18292 if (isa<ReturnStmt>(SubStmt)) 18293 Self.Diag(SubStmt->getBeginLoc(), 18294 diag::err_return_in_constructor_handler); 18295 if (!isa<Expr>(SubStmt)) 18296 SearchForReturnInStmt(Self, SubStmt); 18297 } 18298 } 18299 18300 void Sema::DiagnoseReturnInConstructorExceptionHandler(CXXTryStmt *TryBlock) { 18301 for (unsigned I = 0, E = TryBlock->getNumHandlers(); I != E; ++I) { 18302 CXXCatchStmt *Handler = TryBlock->getHandler(I); 18303 SearchForReturnInStmt(*this, Handler); 18304 } 18305 } 18306 18307 void Sema::SetFunctionBodyKind(Decl *D, SourceLocation Loc, 18308 FnBodyKind BodyKind) { 18309 switch (BodyKind) { 18310 case FnBodyKind::Delete: 18311 SetDeclDeleted(D, Loc); 18312 break; 18313 case FnBodyKind::Default: 18314 SetDeclDefaulted(D, Loc); 18315 break; 18316 case FnBodyKind::Other: 18317 llvm_unreachable( 18318 "Parsed function body should be '= delete;' or '= default;'"); 18319 } 18320 } 18321 18322 bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New, 18323 const CXXMethodDecl *Old) { 18324 const auto *NewFT = New->getType()->castAs<FunctionProtoType>(); 18325 const auto *OldFT = Old->getType()->castAs<FunctionProtoType>(); 18326 18327 if (OldFT->hasExtParameterInfos()) { 18328 for (unsigned I = 0, E = OldFT->getNumParams(); I != E; ++I) 18329 // A parameter of the overriding method should be annotated with noescape 18330 // if the corresponding parameter of the overridden method is annotated. 18331 if (OldFT->getExtParameterInfo(I).isNoEscape() && 18332 !NewFT->getExtParameterInfo(I).isNoEscape()) { 18333 Diag(New->getParamDecl(I)->getLocation(), 18334 diag::warn_overriding_method_missing_noescape); 18335 Diag(Old->getParamDecl(I)->getLocation(), 18336 diag::note_overridden_marked_noescape); 18337 } 18338 } 18339 18340 // SME attributes must match when overriding a function declaration. 18341 if (IsInvalidSMECallConversion(Old->getType(), New->getType())) { 18342 Diag(New->getLocation(), diag::err_conflicting_overriding_attributes) 18343 << New << New->getType() << Old->getType(); 18344 Diag(Old->getLocation(), diag::note_overridden_virtual_function); 18345 return true; 18346 } 18347 18348 // Virtual overrides must have the same code_seg. 18349 const auto *OldCSA = Old->getAttr<CodeSegAttr>(); 18350 const auto *NewCSA = New->getAttr<CodeSegAttr>(); 18351 if ((NewCSA || OldCSA) && 18352 (!OldCSA || !NewCSA || NewCSA->getName() != OldCSA->getName())) { 18353 Diag(New->getLocation(), diag::err_mismatched_code_seg_override); 18354 Diag(Old->getLocation(), diag::note_previous_declaration); 18355 return true; 18356 } 18357 18358 CallingConv NewCC = NewFT->getCallConv(), OldCC = OldFT->getCallConv(); 18359 18360 // If the calling conventions match, everything is fine 18361 if (NewCC == OldCC) 18362 return false; 18363 18364 // If the calling conventions mismatch because the new function is static, 18365 // suppress the calling convention mismatch error; the error about static 18366 // function override (err_static_overrides_virtual from 18367 // Sema::CheckFunctionDeclaration) is more clear. 18368 if (New->getStorageClass() == SC_Static) 18369 return false; 18370 18371 Diag(New->getLocation(), 18372 diag::err_conflicting_overriding_cc_attributes) 18373 << New->getDeclName() << New->getType() << Old->getType(); 18374 Diag(Old->getLocation(), diag::note_overridden_virtual_function); 18375 return true; 18376 } 18377 18378 bool Sema::CheckExplicitObjectOverride(CXXMethodDecl *New, 18379 const CXXMethodDecl *Old) { 18380 // CWG2553 18381 // A virtual function shall not be an explicit object member function. 18382 if (!New->isExplicitObjectMemberFunction()) 18383 return true; 18384 Diag(New->getParamDecl(0)->getBeginLoc(), 18385 diag::err_explicit_object_parameter_nonmember) 18386 << New->getSourceRange() << /*virtual*/ 1 << /*IsLambda*/ false; 18387 Diag(Old->getLocation(), diag::note_overridden_virtual_function); 18388 New->setInvalidDecl(); 18389 return false; 18390 } 18391 18392 bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, 18393 const CXXMethodDecl *Old) { 18394 QualType NewTy = New->getType()->castAs<FunctionType>()->getReturnType(); 18395 QualType OldTy = Old->getType()->castAs<FunctionType>()->getReturnType(); 18396 18397 if (Context.hasSameType(NewTy, OldTy) || 18398 NewTy->isDependentType() || OldTy->isDependentType()) 18399 return false; 18400 18401 // Check if the return types are covariant 18402 QualType NewClassTy, OldClassTy; 18403 18404 /// Both types must be pointers or references to classes. 18405 if (const PointerType *NewPT = NewTy->getAs<PointerType>()) { 18406 if (const PointerType *OldPT = OldTy->getAs<PointerType>()) { 18407 NewClassTy = NewPT->getPointeeType(); 18408 OldClassTy = OldPT->getPointeeType(); 18409 } 18410 } else if (const ReferenceType *NewRT = NewTy->getAs<ReferenceType>()) { 18411 if (const ReferenceType *OldRT = OldTy->getAs<ReferenceType>()) { 18412 if (NewRT->getTypeClass() == OldRT->getTypeClass()) { 18413 NewClassTy = NewRT->getPointeeType(); 18414 OldClassTy = OldRT->getPointeeType(); 18415 } 18416 } 18417 } 18418 18419 // The return types aren't either both pointers or references to a class type. 18420 if (NewClassTy.isNull()) { 18421 Diag(New->getLocation(), 18422 diag::err_different_return_type_for_overriding_virtual_function) 18423 << New->getDeclName() << NewTy << OldTy 18424 << New->getReturnTypeSourceRange(); 18425 Diag(Old->getLocation(), diag::note_overridden_virtual_function) 18426 << Old->getReturnTypeSourceRange(); 18427 18428 return true; 18429 } 18430 18431 if (!Context.hasSameUnqualifiedType(NewClassTy, OldClassTy)) { 18432 // C++14 [class.virtual]p8: 18433 // If the class type in the covariant return type of D::f differs from 18434 // that of B::f, the class type in the return type of D::f shall be 18435 // complete at the point of declaration of D::f or shall be the class 18436 // type D. 18437 if (const RecordType *RT = NewClassTy->getAs<RecordType>()) { 18438 if (!RT->isBeingDefined() && 18439 RequireCompleteType(New->getLocation(), NewClassTy, 18440 diag::err_covariant_return_incomplete, 18441 New->getDeclName())) 18442 return true; 18443 } 18444 18445 // Check if the new class derives from the old class. 18446 if (!IsDerivedFrom(New->getLocation(), NewClassTy, OldClassTy)) { 18447 Diag(New->getLocation(), diag::err_covariant_return_not_derived) 18448 << New->getDeclName() << NewTy << OldTy 18449 << New->getReturnTypeSourceRange(); 18450 Diag(Old->getLocation(), diag::note_overridden_virtual_function) 18451 << Old->getReturnTypeSourceRange(); 18452 return true; 18453 } 18454 18455 // Check if we the conversion from derived to base is valid. 18456 if (CheckDerivedToBaseConversion( 18457 NewClassTy, OldClassTy, 18458 diag::err_covariant_return_inaccessible_base, 18459 diag::err_covariant_return_ambiguous_derived_to_base_conv, 18460 New->getLocation(), New->getReturnTypeSourceRange(), 18461 New->getDeclName(), nullptr)) { 18462 // FIXME: this note won't trigger for delayed access control 18463 // diagnostics, and it's impossible to get an undelayed error 18464 // here from access control during the original parse because 18465 // the ParsingDeclSpec/ParsingDeclarator are still in scope. 18466 Diag(Old->getLocation(), diag::note_overridden_virtual_function) 18467 << Old->getReturnTypeSourceRange(); 18468 return true; 18469 } 18470 } 18471 18472 // The qualifiers of the return types must be the same. 18473 if (NewTy.getLocalCVRQualifiers() != OldTy.getLocalCVRQualifiers()) { 18474 Diag(New->getLocation(), 18475 diag::err_covariant_return_type_different_qualifications) 18476 << New->getDeclName() << NewTy << OldTy 18477 << New->getReturnTypeSourceRange(); 18478 Diag(Old->getLocation(), diag::note_overridden_virtual_function) 18479 << Old->getReturnTypeSourceRange(); 18480 return true; 18481 } 18482 18483 18484 // The new class type must have the same or less qualifiers as the old type. 18485 if (NewClassTy.isMoreQualifiedThan(OldClassTy)) { 18486 Diag(New->getLocation(), 18487 diag::err_covariant_return_type_class_type_more_qualified) 18488 << New->getDeclName() << NewTy << OldTy 18489 << New->getReturnTypeSourceRange(); 18490 Diag(Old->getLocation(), diag::note_overridden_virtual_function) 18491 << Old->getReturnTypeSourceRange(); 18492 return true; 18493 } 18494 18495 return false; 18496 } 18497 18498 /// Mark the given method pure. 18499 /// 18500 /// \param Method the method to be marked pure. 18501 /// 18502 /// \param InitRange the source range that covers the "0" initializer. 18503 bool Sema::CheckPureMethod(CXXMethodDecl *Method, SourceRange InitRange) { 18504 SourceLocation EndLoc = InitRange.getEnd(); 18505 if (EndLoc.isValid()) 18506 Method->setRangeEnd(EndLoc); 18507 18508 if (Method->isVirtual() || Method->getParent()->isDependentContext()) { 18509 Method->setIsPureVirtual(); 18510 return false; 18511 } 18512 18513 if (!Method->isInvalidDecl()) 18514 Diag(Method->getLocation(), diag::err_non_virtual_pure) 18515 << Method->getDeclName() << InitRange; 18516 return true; 18517 } 18518 18519 void Sema::ActOnPureSpecifier(Decl *D, SourceLocation ZeroLoc) { 18520 if (D->getFriendObjectKind()) 18521 Diag(D->getLocation(), diag::err_pure_friend); 18522 else if (auto *M = dyn_cast<CXXMethodDecl>(D)) 18523 CheckPureMethod(M, ZeroLoc); 18524 else 18525 Diag(D->getLocation(), diag::err_illegal_initializer); 18526 } 18527 18528 /// Determine whether the given declaration is a global variable or 18529 /// static data member. 18530 static bool isNonlocalVariable(const Decl *D) { 18531 if (const VarDecl *Var = dyn_cast_or_null<VarDecl>(D)) 18532 return Var->hasGlobalStorage(); 18533 18534 return false; 18535 } 18536 18537 /// Invoked when we are about to parse an initializer for the declaration 18538 /// 'Dcl'. 18539 /// 18540 /// After this method is called, according to [C++ 3.4.1p13], if 'Dcl' is a 18541 /// static data member of class X, names should be looked up in the scope of 18542 /// class X. If the declaration had a scope specifier, a scope will have 18543 /// been created and passed in for this purpose. Otherwise, S will be null. 18544 void Sema::ActOnCXXEnterDeclInitializer(Scope *S, Decl *D) { 18545 // If there is no declaration, there was an error parsing it. 18546 if (!D || D->isInvalidDecl()) 18547 return; 18548 18549 // We will always have a nested name specifier here, but this declaration 18550 // might not be out of line if the specifier names the current namespace: 18551 // extern int n; 18552 // int ::n = 0; 18553 if (S && D->isOutOfLine()) 18554 EnterDeclaratorContext(S, D->getDeclContext()); 18555 18556 // If we are parsing the initializer for a static data member, push a 18557 // new expression evaluation context that is associated with this static 18558 // data member. 18559 if (isNonlocalVariable(D)) 18560 PushExpressionEvaluationContext( 18561 ExpressionEvaluationContext::PotentiallyEvaluated, D); 18562 } 18563 18564 /// Invoked after we are finished parsing an initializer for the declaration D. 18565 void Sema::ActOnCXXExitDeclInitializer(Scope *S, Decl *D) { 18566 // If there is no declaration, there was an error parsing it. 18567 if (!D || D->isInvalidDecl()) 18568 return; 18569 18570 if (isNonlocalVariable(D)) 18571 PopExpressionEvaluationContext(); 18572 18573 if (S && D->isOutOfLine()) 18574 ExitDeclaratorContext(S); 18575 } 18576 18577 /// ActOnCXXConditionDeclarationExpr - Parsed a condition declaration of a 18578 /// C++ if/switch/while/for statement. 18579 /// e.g: "if (int x = f()) {...}" 18580 DeclResult Sema::ActOnCXXConditionDeclaration(Scope *S, Declarator &D) { 18581 // C++ 6.4p2: 18582 // The declarator shall not specify a function or an array. 18583 // The type-specifier-seq shall not contain typedef and shall not declare a 18584 // new class or enumeration. 18585 assert(D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_typedef && 18586 "Parser allowed 'typedef' as storage class of condition decl."); 18587 18588 Decl *Dcl = ActOnDeclarator(S, D); 18589 if (!Dcl) 18590 return true; 18591 18592 if (isa<FunctionDecl>(Dcl)) { // The declarator shall not specify a function. 18593 Diag(Dcl->getLocation(), diag::err_invalid_use_of_function_type) 18594 << D.getSourceRange(); 18595 return true; 18596 } 18597 18598 return Dcl; 18599 } 18600 18601 void Sema::LoadExternalVTableUses() { 18602 if (!ExternalSource) 18603 return; 18604 18605 SmallVector<ExternalVTableUse, 4> VTables; 18606 ExternalSource->ReadUsedVTables(VTables); 18607 SmallVector<VTableUse, 4> NewUses; 18608 for (unsigned I = 0, N = VTables.size(); I != N; ++I) { 18609 llvm::DenseMap<CXXRecordDecl *, bool>::iterator Pos 18610 = VTablesUsed.find(VTables[I].Record); 18611 // Even if a definition wasn't required before, it may be required now. 18612 if (Pos != VTablesUsed.end()) { 18613 if (!Pos->second && VTables[I].DefinitionRequired) 18614 Pos->second = true; 18615 continue; 18616 } 18617 18618 VTablesUsed[VTables[I].Record] = VTables[I].DefinitionRequired; 18619 NewUses.push_back(VTableUse(VTables[I].Record, VTables[I].Location)); 18620 } 18621 18622 VTableUses.insert(VTableUses.begin(), NewUses.begin(), NewUses.end()); 18623 } 18624 18625 void Sema::MarkVTableUsed(SourceLocation Loc, CXXRecordDecl *Class, 18626 bool DefinitionRequired) { 18627 // Ignore any vtable uses in unevaluated operands or for classes that do 18628 // not have a vtable. 18629 if (!Class->isDynamicClass() || Class->isDependentContext() || 18630 CurContext->isDependentContext() || isUnevaluatedContext()) 18631 return; 18632 // Do not mark as used if compiling for the device outside of the target 18633 // region. 18634 if (TUKind != TU_Prefix && LangOpts.OpenMP && LangOpts.OpenMPIsTargetDevice && 18635 !isInOpenMPDeclareTargetContext() && 18636 !isInOpenMPTargetExecutionDirective()) { 18637 if (!DefinitionRequired) 18638 MarkVirtualMembersReferenced(Loc, Class); 18639 return; 18640 } 18641 18642 // Try to insert this class into the map. 18643 LoadExternalVTableUses(); 18644 Class = Class->getCanonicalDecl(); 18645 std::pair<llvm::DenseMap<CXXRecordDecl *, bool>::iterator, bool> 18646 Pos = VTablesUsed.insert(std::make_pair(Class, DefinitionRequired)); 18647 if (!Pos.second) { 18648 // If we already had an entry, check to see if we are promoting this vtable 18649 // to require a definition. If so, we need to reappend to the VTableUses 18650 // list, since we may have already processed the first entry. 18651 if (DefinitionRequired && !Pos.first->second) { 18652 Pos.first->second = true; 18653 } else { 18654 // Otherwise, we can early exit. 18655 return; 18656 } 18657 } else { 18658 // The Microsoft ABI requires that we perform the destructor body 18659 // checks (i.e. operator delete() lookup) when the vtable is marked used, as 18660 // the deleting destructor is emitted with the vtable, not with the 18661 // destructor definition as in the Itanium ABI. 18662 if (Context.getTargetInfo().getCXXABI().isMicrosoft()) { 18663 CXXDestructorDecl *DD = Class->getDestructor(); 18664 if (DD && DD->isVirtual() && !DD->isDeleted()) { 18665 if (Class->hasUserDeclaredDestructor() && !DD->isDefined()) { 18666 // If this is an out-of-line declaration, marking it referenced will 18667 // not do anything. Manually call CheckDestructor to look up operator 18668 // delete(). 18669 ContextRAII SavedContext(*this, DD); 18670 CheckDestructor(DD); 18671 } else { 18672 MarkFunctionReferenced(Loc, Class->getDestructor()); 18673 } 18674 } 18675 } 18676 } 18677 18678 // Local classes need to have their virtual members marked 18679 // immediately. For all other classes, we mark their virtual members 18680 // at the end of the translation unit. 18681 if (Class->isLocalClass()) 18682 MarkVirtualMembersReferenced(Loc, Class->getDefinition()); 18683 else 18684 VTableUses.push_back(std::make_pair(Class, Loc)); 18685 } 18686 18687 bool Sema::DefineUsedVTables() { 18688 LoadExternalVTableUses(); 18689 if (VTableUses.empty()) 18690 return false; 18691 18692 // Note: The VTableUses vector could grow as a result of marking 18693 // the members of a class as "used", so we check the size each 18694 // time through the loop and prefer indices (which are stable) to 18695 // iterators (which are not). 18696 bool DefinedAnything = false; 18697 for (unsigned I = 0; I != VTableUses.size(); ++I) { 18698 CXXRecordDecl *Class = VTableUses[I].first->getDefinition(); 18699 if (!Class) 18700 continue; 18701 TemplateSpecializationKind ClassTSK = 18702 Class->getTemplateSpecializationKind(); 18703 18704 SourceLocation Loc = VTableUses[I].second; 18705 18706 bool DefineVTable = true; 18707 18708 // If this class has a key function, but that key function is 18709 // defined in another translation unit, we don't need to emit the 18710 // vtable even though we're using it. 18711 const CXXMethodDecl *KeyFunction = Context.getCurrentKeyFunction(Class); 18712 if (KeyFunction && !KeyFunction->hasBody()) { 18713 // The key function is in another translation unit. 18714 DefineVTable = false; 18715 TemplateSpecializationKind TSK = 18716 KeyFunction->getTemplateSpecializationKind(); 18717 assert(TSK != TSK_ExplicitInstantiationDefinition && 18718 TSK != TSK_ImplicitInstantiation && 18719 "Instantiations don't have key functions"); 18720 (void)TSK; 18721 } else if (!KeyFunction) { 18722 // If we have a class with no key function that is the subject 18723 // of an explicit instantiation declaration, suppress the 18724 // vtable; it will live with the explicit instantiation 18725 // definition. 18726 bool IsExplicitInstantiationDeclaration = 18727 ClassTSK == TSK_ExplicitInstantiationDeclaration; 18728 for (auto *R : Class->redecls()) { 18729 TemplateSpecializationKind TSK 18730 = cast<CXXRecordDecl>(R)->getTemplateSpecializationKind(); 18731 if (TSK == TSK_ExplicitInstantiationDeclaration) 18732 IsExplicitInstantiationDeclaration = true; 18733 else if (TSK == TSK_ExplicitInstantiationDefinition) { 18734 IsExplicitInstantiationDeclaration = false; 18735 break; 18736 } 18737 } 18738 18739 if (IsExplicitInstantiationDeclaration) 18740 DefineVTable = false; 18741 } 18742 18743 // The exception specifications for all virtual members may be needed even 18744 // if we are not providing an authoritative form of the vtable in this TU. 18745 // We may choose to emit it available_externally anyway. 18746 if (!DefineVTable) { 18747 MarkVirtualMemberExceptionSpecsNeeded(Loc, Class); 18748 continue; 18749 } 18750 18751 // Mark all of the virtual members of this class as referenced, so 18752 // that we can build a vtable. Then, tell the AST consumer that a 18753 // vtable for this class is required. 18754 DefinedAnything = true; 18755 MarkVirtualMembersReferenced(Loc, Class); 18756 CXXRecordDecl *Canonical = Class->getCanonicalDecl(); 18757 if (VTablesUsed[Canonical]) 18758 Consumer.HandleVTable(Class); 18759 18760 // Warn if we're emitting a weak vtable. The vtable will be weak if there is 18761 // no key function or the key function is inlined. Don't warn in C++ ABIs 18762 // that lack key functions, since the user won't be able to make one. 18763 if (Context.getTargetInfo().getCXXABI().hasKeyFunctions() && 18764 Class->isExternallyVisible() && ClassTSK != TSK_ImplicitInstantiation && 18765 ClassTSK != TSK_ExplicitInstantiationDefinition) { 18766 const FunctionDecl *KeyFunctionDef = nullptr; 18767 if (!KeyFunction || (KeyFunction->hasBody(KeyFunctionDef) && 18768 KeyFunctionDef->isInlined())) 18769 Diag(Class->getLocation(), diag::warn_weak_vtable) << Class; 18770 } 18771 } 18772 VTableUses.clear(); 18773 18774 return DefinedAnything; 18775 } 18776 18777 void Sema::MarkVirtualMemberExceptionSpecsNeeded(SourceLocation Loc, 18778 const CXXRecordDecl *RD) { 18779 for (const auto *I : RD->methods()) 18780 if (I->isVirtual() && !I->isPureVirtual()) 18781 ResolveExceptionSpec(Loc, I->getType()->castAs<FunctionProtoType>()); 18782 } 18783 18784 void Sema::MarkVirtualMembersReferenced(SourceLocation Loc, 18785 const CXXRecordDecl *RD, 18786 bool ConstexprOnly) { 18787 // Mark all functions which will appear in RD's vtable as used. 18788 CXXFinalOverriderMap FinalOverriders; 18789 RD->getFinalOverriders(FinalOverriders); 18790 for (CXXFinalOverriderMap::const_iterator I = FinalOverriders.begin(), 18791 E = FinalOverriders.end(); 18792 I != E; ++I) { 18793 for (OverridingMethods::const_iterator OI = I->second.begin(), 18794 OE = I->second.end(); 18795 OI != OE; ++OI) { 18796 assert(OI->second.size() > 0 && "no final overrider"); 18797 CXXMethodDecl *Overrider = OI->second.front().Method; 18798 18799 // C++ [basic.def.odr]p2: 18800 // [...] A virtual member function is used if it is not pure. [...] 18801 if (!Overrider->isPureVirtual() && 18802 (!ConstexprOnly || Overrider->isConstexpr())) 18803 MarkFunctionReferenced(Loc, Overrider); 18804 } 18805 } 18806 18807 // Only classes that have virtual bases need a VTT. 18808 if (RD->getNumVBases() == 0) 18809 return; 18810 18811 for (const auto &I : RD->bases()) { 18812 const auto *Base = 18813 cast<CXXRecordDecl>(I.getType()->castAs<RecordType>()->getDecl()); 18814 if (Base->getNumVBases() == 0) 18815 continue; 18816 MarkVirtualMembersReferenced(Loc, Base); 18817 } 18818 } 18819 18820 /// SetIvarInitializers - This routine builds initialization ASTs for the 18821 /// Objective-C implementation whose ivars need be initialized. 18822 void Sema::SetIvarInitializers(ObjCImplementationDecl *ObjCImplementation) { 18823 if (!getLangOpts().CPlusPlus) 18824 return; 18825 if (ObjCInterfaceDecl *OID = ObjCImplementation->getClassInterface()) { 18826 SmallVector<ObjCIvarDecl*, 8> ivars; 18827 CollectIvarsToConstructOrDestruct(OID, ivars); 18828 if (ivars.empty()) 18829 return; 18830 SmallVector<CXXCtorInitializer*, 32> AllToInit; 18831 for (unsigned i = 0; i < ivars.size(); i++) { 18832 FieldDecl *Field = ivars[i]; 18833 if (Field->isInvalidDecl()) 18834 continue; 18835 18836 CXXCtorInitializer *Member; 18837 InitializedEntity InitEntity = InitializedEntity::InitializeMember(Field); 18838 InitializationKind InitKind = 18839 InitializationKind::CreateDefault(ObjCImplementation->getLocation()); 18840 18841 InitializationSequence InitSeq(*this, InitEntity, InitKind, std::nullopt); 18842 ExprResult MemberInit = 18843 InitSeq.Perform(*this, InitEntity, InitKind, std::nullopt); 18844 MemberInit = MaybeCreateExprWithCleanups(MemberInit); 18845 // Note, MemberInit could actually come back empty if no initialization 18846 // is required (e.g., because it would call a trivial default constructor) 18847 if (!MemberInit.get() || MemberInit.isInvalid()) 18848 continue; 18849 18850 Member = 18851 new (Context) CXXCtorInitializer(Context, Field, SourceLocation(), 18852 SourceLocation(), 18853 MemberInit.getAs<Expr>(), 18854 SourceLocation()); 18855 AllToInit.push_back(Member); 18856 18857 // Be sure that the destructor is accessible and is marked as referenced. 18858 if (const RecordType *RecordTy = 18859 Context.getBaseElementType(Field->getType()) 18860 ->getAs<RecordType>()) { 18861 CXXRecordDecl *RD = cast<CXXRecordDecl>(RecordTy->getDecl()); 18862 if (CXXDestructorDecl *Destructor = LookupDestructor(RD)) { 18863 MarkFunctionReferenced(Field->getLocation(), Destructor); 18864 CheckDestructorAccess(Field->getLocation(), Destructor, 18865 PDiag(diag::err_access_dtor_ivar) 18866 << Context.getBaseElementType(Field->getType())); 18867 } 18868 } 18869 } 18870 ObjCImplementation->setIvarInitializers(Context, 18871 AllToInit.data(), AllToInit.size()); 18872 } 18873 } 18874 18875 static 18876 void DelegatingCycleHelper(CXXConstructorDecl* Ctor, 18877 llvm::SmallPtrSet<CXXConstructorDecl*, 4> &Valid, 18878 llvm::SmallPtrSet<CXXConstructorDecl*, 4> &Invalid, 18879 llvm::SmallPtrSet<CXXConstructorDecl*, 4> &Current, 18880 Sema &S) { 18881 if (Ctor->isInvalidDecl()) 18882 return; 18883 18884 CXXConstructorDecl *Target = Ctor->getTargetConstructor(); 18885 18886 // Target may not be determinable yet, for instance if this is a dependent 18887 // call in an uninstantiated template. 18888 if (Target) { 18889 const FunctionDecl *FNTarget = nullptr; 18890 (void)Target->hasBody(FNTarget); 18891 Target = const_cast<CXXConstructorDecl*>( 18892 cast_or_null<CXXConstructorDecl>(FNTarget)); 18893 } 18894 18895 CXXConstructorDecl *Canonical = Ctor->getCanonicalDecl(), 18896 // Avoid dereferencing a null pointer here. 18897 *TCanonical = Target? Target->getCanonicalDecl() : nullptr; 18898 18899 if (!Current.insert(Canonical).second) 18900 return; 18901 18902 // We know that beyond here, we aren't chaining into a cycle. 18903 if (!Target || !Target->isDelegatingConstructor() || 18904 Target->isInvalidDecl() || Valid.count(TCanonical)) { 18905 Valid.insert(Current.begin(), Current.end()); 18906 Current.clear(); 18907 // We've hit a cycle. 18908 } else if (TCanonical == Canonical || Invalid.count(TCanonical) || 18909 Current.count(TCanonical)) { 18910 // If we haven't diagnosed this cycle yet, do so now. 18911 if (!Invalid.count(TCanonical)) { 18912 S.Diag((*Ctor->init_begin())->getSourceLocation(), 18913 diag::warn_delegating_ctor_cycle) 18914 << Ctor; 18915 18916 // Don't add a note for a function delegating directly to itself. 18917 if (TCanonical != Canonical) 18918 S.Diag(Target->getLocation(), diag::note_it_delegates_to); 18919 18920 CXXConstructorDecl *C = Target; 18921 while (C->getCanonicalDecl() != Canonical) { 18922 const FunctionDecl *FNTarget = nullptr; 18923 (void)C->getTargetConstructor()->hasBody(FNTarget); 18924 assert(FNTarget && "Ctor cycle through bodiless function"); 18925 18926 C = const_cast<CXXConstructorDecl*>( 18927 cast<CXXConstructorDecl>(FNTarget)); 18928 S.Diag(C->getLocation(), diag::note_which_delegates_to); 18929 } 18930 } 18931 18932 Invalid.insert(Current.begin(), Current.end()); 18933 Current.clear(); 18934 } else { 18935 DelegatingCycleHelper(Target, Valid, Invalid, Current, S); 18936 } 18937 } 18938 18939 18940 void Sema::CheckDelegatingCtorCycles() { 18941 llvm::SmallPtrSet<CXXConstructorDecl*, 4> Valid, Invalid, Current; 18942 18943 for (DelegatingCtorDeclsType::iterator 18944 I = DelegatingCtorDecls.begin(ExternalSource.get()), 18945 E = DelegatingCtorDecls.end(); 18946 I != E; ++I) 18947 DelegatingCycleHelper(*I, Valid, Invalid, Current, *this); 18948 18949 for (auto CI = Invalid.begin(), CE = Invalid.end(); CI != CE; ++CI) 18950 (*CI)->setInvalidDecl(); 18951 } 18952 18953 namespace { 18954 /// AST visitor that finds references to the 'this' expression. 18955 class FindCXXThisExpr : public RecursiveASTVisitor<FindCXXThisExpr> { 18956 Sema &S; 18957 18958 public: 18959 explicit FindCXXThisExpr(Sema &S) : S(S) { } 18960 18961 bool VisitCXXThisExpr(CXXThisExpr *E) { 18962 S.Diag(E->getLocation(), diag::err_this_static_member_func) 18963 << E->isImplicit(); 18964 return false; 18965 } 18966 }; 18967 } 18968 18969 bool Sema::checkThisInStaticMemberFunctionType(CXXMethodDecl *Method) { 18970 TypeSourceInfo *TSInfo = Method->getTypeSourceInfo(); 18971 if (!TSInfo) 18972 return false; 18973 18974 TypeLoc TL = TSInfo->getTypeLoc(); 18975 FunctionProtoTypeLoc ProtoTL = TL.getAs<FunctionProtoTypeLoc>(); 18976 if (!ProtoTL) 18977 return false; 18978 18979 // C++11 [expr.prim.general]p3: 18980 // [The expression this] shall not appear before the optional 18981 // cv-qualifier-seq and it shall not appear within the declaration of a 18982 // static member function (although its type and value category are defined 18983 // within a static member function as they are within a non-static member 18984 // function). [ Note: this is because declaration matching does not occur 18985 // until the complete declarator is known. - end note ] 18986 const FunctionProtoType *Proto = ProtoTL.getTypePtr(); 18987 FindCXXThisExpr Finder(*this); 18988 18989 // If the return type came after the cv-qualifier-seq, check it now. 18990 if (Proto->hasTrailingReturn() && 18991 !Finder.TraverseTypeLoc(ProtoTL.getReturnLoc())) 18992 return true; 18993 18994 // Check the exception specification. 18995 if (checkThisInStaticMemberFunctionExceptionSpec(Method)) 18996 return true; 18997 18998 // Check the trailing requires clause 18999 if (Expr *E = Method->getTrailingRequiresClause()) 19000 if (!Finder.TraverseStmt(E)) 19001 return true; 19002 19003 return checkThisInStaticMemberFunctionAttributes(Method); 19004 } 19005 19006 bool Sema::checkThisInStaticMemberFunctionExceptionSpec(CXXMethodDecl *Method) { 19007 TypeSourceInfo *TSInfo = Method->getTypeSourceInfo(); 19008 if (!TSInfo) 19009 return false; 19010 19011 TypeLoc TL = TSInfo->getTypeLoc(); 19012 FunctionProtoTypeLoc ProtoTL = TL.getAs<FunctionProtoTypeLoc>(); 19013 if (!ProtoTL) 19014 return false; 19015 19016 const FunctionProtoType *Proto = ProtoTL.getTypePtr(); 19017 FindCXXThisExpr Finder(*this); 19018 19019 switch (Proto->getExceptionSpecType()) { 19020 case EST_Unparsed: 19021 case EST_Uninstantiated: 19022 case EST_Unevaluated: 19023 case EST_BasicNoexcept: 19024 case EST_NoThrow: 19025 case EST_DynamicNone: 19026 case EST_MSAny: 19027 case EST_None: 19028 break; 19029 19030 case EST_DependentNoexcept: 19031 case EST_NoexceptFalse: 19032 case EST_NoexceptTrue: 19033 if (!Finder.TraverseStmt(Proto->getNoexceptExpr())) 19034 return true; 19035 [[fallthrough]]; 19036 19037 case EST_Dynamic: 19038 for (const auto &E : Proto->exceptions()) { 19039 if (!Finder.TraverseType(E)) 19040 return true; 19041 } 19042 break; 19043 } 19044 19045 return false; 19046 } 19047 19048 bool Sema::checkThisInStaticMemberFunctionAttributes(CXXMethodDecl *Method) { 19049 FindCXXThisExpr Finder(*this); 19050 19051 // Check attributes. 19052 for (const auto *A : Method->attrs()) { 19053 // FIXME: This should be emitted by tblgen. 19054 Expr *Arg = nullptr; 19055 ArrayRef<Expr *> Args; 19056 if (const auto *G = dyn_cast<GuardedByAttr>(A)) 19057 Arg = G->getArg(); 19058 else if (const auto *G = dyn_cast<PtGuardedByAttr>(A)) 19059 Arg = G->getArg(); 19060 else if (const auto *AA = dyn_cast<AcquiredAfterAttr>(A)) 19061 Args = llvm::ArrayRef(AA->args_begin(), AA->args_size()); 19062 else if (const auto *AB = dyn_cast<AcquiredBeforeAttr>(A)) 19063 Args = llvm::ArrayRef(AB->args_begin(), AB->args_size()); 19064 else if (const auto *ETLF = dyn_cast<ExclusiveTrylockFunctionAttr>(A)) { 19065 Arg = ETLF->getSuccessValue(); 19066 Args = llvm::ArrayRef(ETLF->args_begin(), ETLF->args_size()); 19067 } else if (const auto *STLF = dyn_cast<SharedTrylockFunctionAttr>(A)) { 19068 Arg = STLF->getSuccessValue(); 19069 Args = llvm::ArrayRef(STLF->args_begin(), STLF->args_size()); 19070 } else if (const auto *LR = dyn_cast<LockReturnedAttr>(A)) 19071 Arg = LR->getArg(); 19072 else if (const auto *LE = dyn_cast<LocksExcludedAttr>(A)) 19073 Args = llvm::ArrayRef(LE->args_begin(), LE->args_size()); 19074 else if (const auto *RC = dyn_cast<RequiresCapabilityAttr>(A)) 19075 Args = llvm::ArrayRef(RC->args_begin(), RC->args_size()); 19076 else if (const auto *AC = dyn_cast<AcquireCapabilityAttr>(A)) 19077 Args = llvm::ArrayRef(AC->args_begin(), AC->args_size()); 19078 else if (const auto *AC = dyn_cast<TryAcquireCapabilityAttr>(A)) 19079 Args = llvm::ArrayRef(AC->args_begin(), AC->args_size()); 19080 else if (const auto *RC = dyn_cast<ReleaseCapabilityAttr>(A)) 19081 Args = llvm::ArrayRef(RC->args_begin(), RC->args_size()); 19082 19083 if (Arg && !Finder.TraverseStmt(Arg)) 19084 return true; 19085 19086 for (unsigned I = 0, N = Args.size(); I != N; ++I) { 19087 if (!Finder.TraverseStmt(Args[I])) 19088 return true; 19089 } 19090 } 19091 19092 return false; 19093 } 19094 19095 void Sema::checkExceptionSpecification( 19096 bool IsTopLevel, ExceptionSpecificationType EST, 19097 ArrayRef<ParsedType> DynamicExceptions, 19098 ArrayRef<SourceRange> DynamicExceptionRanges, Expr *NoexceptExpr, 19099 SmallVectorImpl<QualType> &Exceptions, 19100 FunctionProtoType::ExceptionSpecInfo &ESI) { 19101 Exceptions.clear(); 19102 ESI.Type = EST; 19103 if (EST == EST_Dynamic) { 19104 Exceptions.reserve(DynamicExceptions.size()); 19105 for (unsigned ei = 0, ee = DynamicExceptions.size(); ei != ee; ++ei) { 19106 // FIXME: Preserve type source info. 19107 QualType ET = GetTypeFromParser(DynamicExceptions[ei]); 19108 19109 if (IsTopLevel) { 19110 SmallVector<UnexpandedParameterPack, 2> Unexpanded; 19111 collectUnexpandedParameterPacks(ET, Unexpanded); 19112 if (!Unexpanded.empty()) { 19113 DiagnoseUnexpandedParameterPacks( 19114 DynamicExceptionRanges[ei].getBegin(), UPPC_ExceptionType, 19115 Unexpanded); 19116 continue; 19117 } 19118 } 19119 19120 // Check that the type is valid for an exception spec, and 19121 // drop it if not. 19122 if (!CheckSpecifiedExceptionType(ET, DynamicExceptionRanges[ei])) 19123 Exceptions.push_back(ET); 19124 } 19125 ESI.Exceptions = Exceptions; 19126 return; 19127 } 19128 19129 if (isComputedNoexcept(EST)) { 19130 assert((NoexceptExpr->isTypeDependent() || 19131 NoexceptExpr->getType()->getCanonicalTypeUnqualified() == 19132 Context.BoolTy) && 19133 "Parser should have made sure that the expression is boolean"); 19134 if (IsTopLevel && DiagnoseUnexpandedParameterPack(NoexceptExpr)) { 19135 ESI.Type = EST_BasicNoexcept; 19136 return; 19137 } 19138 19139 ESI.NoexceptExpr = NoexceptExpr; 19140 return; 19141 } 19142 } 19143 19144 void Sema::actOnDelayedExceptionSpecification(Decl *MethodD, 19145 ExceptionSpecificationType EST, 19146 SourceRange SpecificationRange, 19147 ArrayRef<ParsedType> DynamicExceptions, 19148 ArrayRef<SourceRange> DynamicExceptionRanges, 19149 Expr *NoexceptExpr) { 19150 if (!MethodD) 19151 return; 19152 19153 // Dig out the method we're referring to. 19154 if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(MethodD)) 19155 MethodD = FunTmpl->getTemplatedDecl(); 19156 19157 CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(MethodD); 19158 if (!Method) 19159 return; 19160 19161 // Check the exception specification. 19162 llvm::SmallVector<QualType, 4> Exceptions; 19163 FunctionProtoType::ExceptionSpecInfo ESI; 19164 checkExceptionSpecification(/*IsTopLevel*/true, EST, DynamicExceptions, 19165 DynamicExceptionRanges, NoexceptExpr, Exceptions, 19166 ESI); 19167 19168 // Update the exception specification on the function type. 19169 Context.adjustExceptionSpec(Method, ESI, /*AsWritten*/true); 19170 19171 if (Method->isStatic()) 19172 checkThisInStaticMemberFunctionExceptionSpec(Method); 19173 19174 if (Method->isVirtual()) { 19175 // Check overrides, which we previously had to delay. 19176 for (const CXXMethodDecl *O : Method->overridden_methods()) 19177 CheckOverridingFunctionExceptionSpec(Method, O); 19178 } 19179 } 19180 19181 /// HandleMSProperty - Analyze a __delcspec(property) field of a C++ class. 19182 /// 19183 MSPropertyDecl *Sema::HandleMSProperty(Scope *S, RecordDecl *Record, 19184 SourceLocation DeclStart, Declarator &D, 19185 Expr *BitWidth, 19186 InClassInitStyle InitStyle, 19187 AccessSpecifier AS, 19188 const ParsedAttr &MSPropertyAttr) { 19189 IdentifierInfo *II = D.getIdentifier(); 19190 if (!II) { 19191 Diag(DeclStart, diag::err_anonymous_property); 19192 return nullptr; 19193 } 19194 SourceLocation Loc = D.getIdentifierLoc(); 19195 19196 TypeSourceInfo *TInfo = GetTypeForDeclarator(D); 19197 QualType T = TInfo->getType(); 19198 if (getLangOpts().CPlusPlus) { 19199 CheckExtraCXXDefaultArguments(D); 19200 19201 if (DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo, 19202 UPPC_DataMemberType)) { 19203 D.setInvalidType(); 19204 T = Context.IntTy; 19205 TInfo = Context.getTrivialTypeSourceInfo(T, Loc); 19206 } 19207 } 19208 19209 DiagnoseFunctionSpecifiers(D.getDeclSpec()); 19210 19211 if (D.getDeclSpec().isInlineSpecified()) 19212 Diag(D.getDeclSpec().getInlineSpecLoc(), diag::err_inline_non_function) 19213 << getLangOpts().CPlusPlus17; 19214 if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec()) 19215 Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), 19216 diag::err_invalid_thread) 19217 << DeclSpec::getSpecifierName(TSCS); 19218 19219 // Check to see if this name was declared as a member previously 19220 NamedDecl *PrevDecl = nullptr; 19221 LookupResult Previous(*this, II, Loc, LookupMemberName, 19222 ForVisibleRedeclaration); 19223 LookupName(Previous, S); 19224 switch (Previous.getResultKind()) { 19225 case LookupResult::Found: 19226 case LookupResult::FoundUnresolvedValue: 19227 PrevDecl = Previous.getAsSingle<NamedDecl>(); 19228 break; 19229 19230 case LookupResult::FoundOverloaded: 19231 PrevDecl = Previous.getRepresentativeDecl(); 19232 break; 19233 19234 case LookupResult::NotFound: 19235 case LookupResult::NotFoundInCurrentInstantiation: 19236 case LookupResult::Ambiguous: 19237 break; 19238 } 19239 19240 if (PrevDecl && PrevDecl->isTemplateParameter()) { 19241 // Maybe we will complain about the shadowed template parameter. 19242 DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl); 19243 // Just pretend that we didn't see the previous declaration. 19244 PrevDecl = nullptr; 19245 } 19246 19247 if (PrevDecl && !isDeclInScope(PrevDecl, Record, S)) 19248 PrevDecl = nullptr; 19249 19250 SourceLocation TSSL = D.getBeginLoc(); 19251 MSPropertyDecl *NewPD = 19252 MSPropertyDecl::Create(Context, Record, Loc, II, T, TInfo, TSSL, 19253 MSPropertyAttr.getPropertyDataGetter(), 19254 MSPropertyAttr.getPropertyDataSetter()); 19255 ProcessDeclAttributes(TUScope, NewPD, D); 19256 NewPD->setAccess(AS); 19257 19258 if (NewPD->isInvalidDecl()) 19259 Record->setInvalidDecl(); 19260 19261 if (D.getDeclSpec().isModulePrivateSpecified()) 19262 NewPD->setModulePrivate(); 19263 19264 if (NewPD->isInvalidDecl() && PrevDecl) { 19265 // Don't introduce NewFD into scope; there's already something 19266 // with the same name in the same scope. 19267 } else if (II) { 19268 PushOnScopeChains(NewPD, S); 19269 } else 19270 Record->addDecl(NewPD); 19271 19272 return NewPD; 19273 } 19274 19275 void Sema::ActOnStartFunctionDeclarationDeclarator( 19276 Declarator &Declarator, unsigned TemplateParameterDepth) { 19277 auto &Info = InventedParameterInfos.emplace_back(); 19278 TemplateParameterList *ExplicitParams = nullptr; 19279 ArrayRef<TemplateParameterList *> ExplicitLists = 19280 Declarator.getTemplateParameterLists(); 19281 if (!ExplicitLists.empty()) { 19282 bool IsMemberSpecialization, IsInvalid; 19283 ExplicitParams = MatchTemplateParametersToScopeSpecifier( 19284 Declarator.getBeginLoc(), Declarator.getIdentifierLoc(), 19285 Declarator.getCXXScopeSpec(), /*TemplateId=*/nullptr, 19286 ExplicitLists, /*IsFriend=*/false, IsMemberSpecialization, IsInvalid, 19287 /*SuppressDiagnostic=*/true); 19288 } 19289 if (ExplicitParams) { 19290 Info.AutoTemplateParameterDepth = ExplicitParams->getDepth(); 19291 llvm::append_range(Info.TemplateParams, *ExplicitParams); 19292 Info.NumExplicitTemplateParams = ExplicitParams->size(); 19293 } else { 19294 Info.AutoTemplateParameterDepth = TemplateParameterDepth; 19295 Info.NumExplicitTemplateParams = 0; 19296 } 19297 } 19298 19299 void Sema::ActOnFinishFunctionDeclarationDeclarator(Declarator &Declarator) { 19300 auto &FSI = InventedParameterInfos.back(); 19301 if (FSI.TemplateParams.size() > FSI.NumExplicitTemplateParams) { 19302 if (FSI.NumExplicitTemplateParams != 0) { 19303 TemplateParameterList *ExplicitParams = 19304 Declarator.getTemplateParameterLists().back(); 19305 Declarator.setInventedTemplateParameterList( 19306 TemplateParameterList::Create( 19307 Context, ExplicitParams->getTemplateLoc(), 19308 ExplicitParams->getLAngleLoc(), FSI.TemplateParams, 19309 ExplicitParams->getRAngleLoc(), 19310 ExplicitParams->getRequiresClause())); 19311 } else { 19312 Declarator.setInventedTemplateParameterList( 19313 TemplateParameterList::Create( 19314 Context, SourceLocation(), SourceLocation(), FSI.TemplateParams, 19315 SourceLocation(), /*RequiresClause=*/nullptr)); 19316 } 19317 } 19318 InventedParameterInfos.pop_back(); 19319 } 19320