1 //===--- SemaOverload.cpp - C++ Overloading -------------------------------===// 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 provides Sema routines for C++ overloading. 10 // 11 //===----------------------------------------------------------------------===// 12 13 #include "clang/AST/ASTContext.h" 14 #include "clang/AST/ASTLambda.h" 15 #include "clang/AST/CXXInheritance.h" 16 #include "clang/AST/DeclCXX.h" 17 #include "clang/AST/DeclObjC.h" 18 #include "clang/AST/DependenceFlags.h" 19 #include "clang/AST/Expr.h" 20 #include "clang/AST/ExprCXX.h" 21 #include "clang/AST/ExprObjC.h" 22 #include "clang/AST/Type.h" 23 #include "clang/AST/TypeOrdering.h" 24 #include "clang/Basic/Diagnostic.h" 25 #include "clang/Basic/DiagnosticOptions.h" 26 #include "clang/Basic/OperatorKinds.h" 27 #include "clang/Basic/PartialDiagnostic.h" 28 #include "clang/Basic/SourceManager.h" 29 #include "clang/Basic/TargetInfo.h" 30 #include "clang/Sema/EnterExpressionEvaluationContext.h" 31 #include "clang/Sema/Initialization.h" 32 #include "clang/Sema/Lookup.h" 33 #include "clang/Sema/Overload.h" 34 #include "clang/Sema/SemaInternal.h" 35 #include "clang/Sema/Template.h" 36 #include "clang/Sema/TemplateDeduction.h" 37 #include "llvm/ADT/DenseSet.h" 38 #include "llvm/ADT/STLExtras.h" 39 #include "llvm/ADT/SmallPtrSet.h" 40 #include "llvm/ADT/SmallString.h" 41 #include "llvm/Support/Casting.h" 42 #include <algorithm> 43 #include <cstdlib> 44 #include <optional> 45 46 using namespace clang; 47 using namespace sema; 48 49 using AllowedExplicit = Sema::AllowedExplicit; 50 51 static bool functionHasPassObjectSizeParams(const FunctionDecl *FD) { 52 return llvm::any_of(FD->parameters(), [](const ParmVarDecl *P) { 53 return P->hasAttr<PassObjectSizeAttr>(); 54 }); 55 } 56 57 /// A convenience routine for creating a decayed reference to a function. 58 static ExprResult CreateFunctionRefExpr( 59 Sema &S, FunctionDecl *Fn, NamedDecl *FoundDecl, const Expr *Base, 60 bool HadMultipleCandidates, SourceLocation Loc = SourceLocation(), 61 const DeclarationNameLoc &LocInfo = DeclarationNameLoc()) { 62 if (S.DiagnoseUseOfDecl(FoundDecl, Loc)) 63 return ExprError(); 64 // If FoundDecl is different from Fn (such as if one is a template 65 // and the other a specialization), make sure DiagnoseUseOfDecl is 66 // called on both. 67 // FIXME: This would be more comprehensively addressed by modifying 68 // DiagnoseUseOfDecl to accept both the FoundDecl and the decl 69 // being used. 70 if (FoundDecl != Fn && S.DiagnoseUseOfDecl(Fn, Loc)) 71 return ExprError(); 72 DeclRefExpr *DRE = new (S.Context) 73 DeclRefExpr(S.Context, Fn, false, Fn->getType(), VK_LValue, Loc, LocInfo); 74 if (HadMultipleCandidates) 75 DRE->setHadMultipleCandidates(true); 76 77 S.MarkDeclRefReferenced(DRE, Base); 78 if (auto *FPT = DRE->getType()->getAs<FunctionProtoType>()) { 79 if (isUnresolvedExceptionSpec(FPT->getExceptionSpecType())) { 80 S.ResolveExceptionSpec(Loc, FPT); 81 DRE->setType(Fn->getType()); 82 } 83 } 84 return S.ImpCastExprToType(DRE, S.Context.getPointerType(DRE->getType()), 85 CK_FunctionToPointerDecay); 86 } 87 88 static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType, 89 bool InOverloadResolution, 90 StandardConversionSequence &SCS, 91 bool CStyle, 92 bool AllowObjCWritebackConversion); 93 94 static bool IsTransparentUnionStandardConversion(Sema &S, Expr* From, 95 QualType &ToType, 96 bool InOverloadResolution, 97 StandardConversionSequence &SCS, 98 bool CStyle); 99 static OverloadingResult 100 IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType, 101 UserDefinedConversionSequence& User, 102 OverloadCandidateSet& Conversions, 103 AllowedExplicit AllowExplicit, 104 bool AllowObjCConversionOnExplicit); 105 106 static ImplicitConversionSequence::CompareKind 107 CompareStandardConversionSequences(Sema &S, SourceLocation Loc, 108 const StandardConversionSequence& SCS1, 109 const StandardConversionSequence& SCS2); 110 111 static ImplicitConversionSequence::CompareKind 112 CompareQualificationConversions(Sema &S, 113 const StandardConversionSequence& SCS1, 114 const StandardConversionSequence& SCS2); 115 116 static ImplicitConversionSequence::CompareKind 117 CompareDerivedToBaseConversions(Sema &S, SourceLocation Loc, 118 const StandardConversionSequence& SCS1, 119 const StandardConversionSequence& SCS2); 120 121 /// GetConversionRank - Retrieve the implicit conversion rank 122 /// corresponding to the given implicit conversion kind. 123 ImplicitConversionRank clang::GetConversionRank(ImplicitConversionKind Kind) { 124 static const ImplicitConversionRank 125 Rank[] = { 126 ICR_Exact_Match, 127 ICR_Exact_Match, 128 ICR_Exact_Match, 129 ICR_Exact_Match, 130 ICR_Exact_Match, 131 ICR_Exact_Match, 132 ICR_Promotion, 133 ICR_Promotion, 134 ICR_Promotion, 135 ICR_Conversion, 136 ICR_Conversion, 137 ICR_Conversion, 138 ICR_Conversion, 139 ICR_Conversion, 140 ICR_Conversion, 141 ICR_Conversion, 142 ICR_Conversion, 143 ICR_Conversion, 144 ICR_Conversion, 145 ICR_Conversion, 146 ICR_Conversion, 147 ICR_OCL_Scalar_Widening, 148 ICR_Complex_Real_Conversion, 149 ICR_Conversion, 150 ICR_Conversion, 151 ICR_Writeback_Conversion, 152 ICR_Exact_Match, // NOTE(gbiv): This may not be completely right -- 153 // it was omitted by the patch that added 154 // ICK_Zero_Event_Conversion 155 ICR_Exact_Match, // NOTE(ctopper): This may not be completely right -- 156 // it was omitted by the patch that added 157 // ICK_Zero_Queue_Conversion 158 ICR_C_Conversion, 159 ICR_C_Conversion_Extension 160 }; 161 static_assert(std::size(Rank) == (int)ICK_Num_Conversion_Kinds); 162 return Rank[(int)Kind]; 163 } 164 165 /// GetImplicitConversionName - Return the name of this kind of 166 /// implicit conversion. 167 static const char* GetImplicitConversionName(ImplicitConversionKind Kind) { 168 static const char* const Name[] = { 169 "No conversion", 170 "Lvalue-to-rvalue", 171 "Array-to-pointer", 172 "Function-to-pointer", 173 "Function pointer conversion", 174 "Qualification", 175 "Integral promotion", 176 "Floating point promotion", 177 "Complex promotion", 178 "Integral conversion", 179 "Floating conversion", 180 "Complex conversion", 181 "Floating-integral conversion", 182 "Pointer conversion", 183 "Pointer-to-member conversion", 184 "Boolean conversion", 185 "Compatible-types conversion", 186 "Derived-to-base conversion", 187 "Vector conversion", 188 "SVE Vector conversion", 189 "RVV Vector conversion", 190 "Vector splat", 191 "Complex-real conversion", 192 "Block Pointer conversion", 193 "Transparent Union Conversion", 194 "Writeback conversion", 195 "OpenCL Zero Event Conversion", 196 "OpenCL Zero Queue Conversion", 197 "C specific type conversion", 198 "Incompatible pointer conversion" 199 }; 200 static_assert(std::size(Name) == (int)ICK_Num_Conversion_Kinds); 201 return Name[Kind]; 202 } 203 204 /// StandardConversionSequence - Set the standard conversion 205 /// sequence to the identity conversion. 206 void StandardConversionSequence::setAsIdentityConversion() { 207 First = ICK_Identity; 208 Second = ICK_Identity; 209 Third = ICK_Identity; 210 DeprecatedStringLiteralToCharPtr = false; 211 QualificationIncludesObjCLifetime = false; 212 ReferenceBinding = false; 213 DirectBinding = false; 214 IsLvalueReference = true; 215 BindsToFunctionLvalue = false; 216 BindsToRvalue = false; 217 BindsImplicitObjectArgumentWithoutRefQualifier = false; 218 ObjCLifetimeConversionBinding = false; 219 CopyConstructor = nullptr; 220 } 221 222 /// getRank - Retrieve the rank of this standard conversion sequence 223 /// (C++ 13.3.3.1.1p3). The rank is the largest rank of each of the 224 /// implicit conversions. 225 ImplicitConversionRank StandardConversionSequence::getRank() const { 226 ImplicitConversionRank Rank = ICR_Exact_Match; 227 if (GetConversionRank(First) > Rank) 228 Rank = GetConversionRank(First); 229 if (GetConversionRank(Second) > Rank) 230 Rank = GetConversionRank(Second); 231 if (GetConversionRank(Third) > Rank) 232 Rank = GetConversionRank(Third); 233 return Rank; 234 } 235 236 /// isPointerConversionToBool - Determines whether this conversion is 237 /// a conversion of a pointer or pointer-to-member to bool. This is 238 /// used as part of the ranking of standard conversion sequences 239 /// (C++ 13.3.3.2p4). 240 bool StandardConversionSequence::isPointerConversionToBool() const { 241 // Note that FromType has not necessarily been transformed by the 242 // array-to-pointer or function-to-pointer implicit conversions, so 243 // check for their presence as well as checking whether FromType is 244 // a pointer. 245 if (getToType(1)->isBooleanType() && 246 (getFromType()->isPointerType() || 247 getFromType()->isMemberPointerType() || 248 getFromType()->isObjCObjectPointerType() || 249 getFromType()->isBlockPointerType() || 250 First == ICK_Array_To_Pointer || First == ICK_Function_To_Pointer)) 251 return true; 252 253 return false; 254 } 255 256 /// isPointerConversionToVoidPointer - Determines whether this 257 /// conversion is a conversion of a pointer to a void pointer. This is 258 /// used as part of the ranking of standard conversion sequences (C++ 259 /// 13.3.3.2p4). 260 bool 261 StandardConversionSequence:: 262 isPointerConversionToVoidPointer(ASTContext& Context) const { 263 QualType FromType = getFromType(); 264 QualType ToType = getToType(1); 265 266 // Note that FromType has not necessarily been transformed by the 267 // array-to-pointer implicit conversion, so check for its presence 268 // and redo the conversion to get a pointer. 269 if (First == ICK_Array_To_Pointer) 270 FromType = Context.getArrayDecayedType(FromType); 271 272 if (Second == ICK_Pointer_Conversion && FromType->isAnyPointerType()) 273 if (const PointerType* ToPtrType = ToType->getAs<PointerType>()) 274 return ToPtrType->getPointeeType()->isVoidType(); 275 276 return false; 277 } 278 279 /// Skip any implicit casts which could be either part of a narrowing conversion 280 /// or after one in an implicit conversion. 281 static const Expr *IgnoreNarrowingConversion(ASTContext &Ctx, 282 const Expr *Converted) { 283 // We can have cleanups wrapping the converted expression; these need to be 284 // preserved so that destructors run if necessary. 285 if (auto *EWC = dyn_cast<ExprWithCleanups>(Converted)) { 286 Expr *Inner = 287 const_cast<Expr *>(IgnoreNarrowingConversion(Ctx, EWC->getSubExpr())); 288 return ExprWithCleanups::Create(Ctx, Inner, EWC->cleanupsHaveSideEffects(), 289 EWC->getObjects()); 290 } 291 292 while (auto *ICE = dyn_cast<ImplicitCastExpr>(Converted)) { 293 switch (ICE->getCastKind()) { 294 case CK_NoOp: 295 case CK_IntegralCast: 296 case CK_IntegralToBoolean: 297 case CK_IntegralToFloating: 298 case CK_BooleanToSignedIntegral: 299 case CK_FloatingToIntegral: 300 case CK_FloatingToBoolean: 301 case CK_FloatingCast: 302 Converted = ICE->getSubExpr(); 303 continue; 304 305 default: 306 return Converted; 307 } 308 } 309 310 return Converted; 311 } 312 313 /// Check if this standard conversion sequence represents a narrowing 314 /// conversion, according to C++11 [dcl.init.list]p7. 315 /// 316 /// \param Ctx The AST context. 317 /// \param Converted The result of applying this standard conversion sequence. 318 /// \param ConstantValue If this is an NK_Constant_Narrowing conversion, the 319 /// value of the expression prior to the narrowing conversion. 320 /// \param ConstantType If this is an NK_Constant_Narrowing conversion, the 321 /// type of the expression prior to the narrowing conversion. 322 /// \param IgnoreFloatToIntegralConversion If true type-narrowing conversions 323 /// from floating point types to integral types should be ignored. 324 NarrowingKind StandardConversionSequence::getNarrowingKind( 325 ASTContext &Ctx, const Expr *Converted, APValue &ConstantValue, 326 QualType &ConstantType, bool IgnoreFloatToIntegralConversion) const { 327 assert(Ctx.getLangOpts().CPlusPlus && "narrowing check outside C++"); 328 329 // C++11 [dcl.init.list]p7: 330 // A narrowing conversion is an implicit conversion ... 331 QualType FromType = getToType(0); 332 QualType ToType = getToType(1); 333 334 // A conversion to an enumeration type is narrowing if the conversion to 335 // the underlying type is narrowing. This only arises for expressions of 336 // the form 'Enum{init}'. 337 if (auto *ET = ToType->getAs<EnumType>()) 338 ToType = ET->getDecl()->getIntegerType(); 339 340 switch (Second) { 341 // 'bool' is an integral type; dispatch to the right place to handle it. 342 case ICK_Boolean_Conversion: 343 if (FromType->isRealFloatingType()) 344 goto FloatingIntegralConversion; 345 if (FromType->isIntegralOrUnscopedEnumerationType()) 346 goto IntegralConversion; 347 // -- from a pointer type or pointer-to-member type to bool, or 348 return NK_Type_Narrowing; 349 350 // -- from a floating-point type to an integer type, or 351 // 352 // -- from an integer type or unscoped enumeration type to a floating-point 353 // type, except where the source is a constant expression and the actual 354 // value after conversion will fit into the target type and will produce 355 // the original value when converted back to the original type, or 356 case ICK_Floating_Integral: 357 FloatingIntegralConversion: 358 if (FromType->isRealFloatingType() && ToType->isIntegralType(Ctx)) { 359 return NK_Type_Narrowing; 360 } else if (FromType->isIntegralOrUnscopedEnumerationType() && 361 ToType->isRealFloatingType()) { 362 if (IgnoreFloatToIntegralConversion) 363 return NK_Not_Narrowing; 364 const Expr *Initializer = IgnoreNarrowingConversion(Ctx, Converted); 365 assert(Initializer && "Unknown conversion expression"); 366 367 // If it's value-dependent, we can't tell whether it's narrowing. 368 if (Initializer->isValueDependent()) 369 return NK_Dependent_Narrowing; 370 371 if (std::optional<llvm::APSInt> IntConstantValue = 372 Initializer->getIntegerConstantExpr(Ctx)) { 373 // Convert the integer to the floating type. 374 llvm::APFloat Result(Ctx.getFloatTypeSemantics(ToType)); 375 Result.convertFromAPInt(*IntConstantValue, IntConstantValue->isSigned(), 376 llvm::APFloat::rmNearestTiesToEven); 377 // And back. 378 llvm::APSInt ConvertedValue = *IntConstantValue; 379 bool ignored; 380 Result.convertToInteger(ConvertedValue, 381 llvm::APFloat::rmTowardZero, &ignored); 382 // If the resulting value is different, this was a narrowing conversion. 383 if (*IntConstantValue != ConvertedValue) { 384 ConstantValue = APValue(*IntConstantValue); 385 ConstantType = Initializer->getType(); 386 return NK_Constant_Narrowing; 387 } 388 } else { 389 // Variables are always narrowings. 390 return NK_Variable_Narrowing; 391 } 392 } 393 return NK_Not_Narrowing; 394 395 // -- from long double to double or float, or from double to float, except 396 // where the source is a constant expression and the actual value after 397 // conversion is within the range of values that can be represented (even 398 // if it cannot be represented exactly), or 399 case ICK_Floating_Conversion: 400 if (FromType->isRealFloatingType() && ToType->isRealFloatingType() && 401 Ctx.getFloatingTypeOrder(FromType, ToType) == 1) { 402 // FromType is larger than ToType. 403 const Expr *Initializer = IgnoreNarrowingConversion(Ctx, Converted); 404 405 // If it's value-dependent, we can't tell whether it's narrowing. 406 if (Initializer->isValueDependent()) 407 return NK_Dependent_Narrowing; 408 409 if (Initializer->isCXX11ConstantExpr(Ctx, &ConstantValue)) { 410 // Constant! 411 assert(ConstantValue.isFloat()); 412 llvm::APFloat FloatVal = ConstantValue.getFloat(); 413 // Convert the source value into the target type. 414 bool ignored; 415 llvm::APFloat::opStatus ConvertStatus = FloatVal.convert( 416 Ctx.getFloatTypeSemantics(ToType), 417 llvm::APFloat::rmNearestTiesToEven, &ignored); 418 // If there was no overflow, the source value is within the range of 419 // values that can be represented. 420 if (ConvertStatus & llvm::APFloat::opOverflow) { 421 ConstantType = Initializer->getType(); 422 return NK_Constant_Narrowing; 423 } 424 } else { 425 return NK_Variable_Narrowing; 426 } 427 } 428 return NK_Not_Narrowing; 429 430 // -- from an integer type or unscoped enumeration type to an integer type 431 // that cannot represent all the values of the original type, except where 432 // the source is a constant expression and the actual value after 433 // conversion will fit into the target type and will produce the original 434 // value when converted back to the original type. 435 case ICK_Integral_Conversion: 436 IntegralConversion: { 437 assert(FromType->isIntegralOrUnscopedEnumerationType()); 438 assert(ToType->isIntegralOrUnscopedEnumerationType()); 439 const bool FromSigned = FromType->isSignedIntegerOrEnumerationType(); 440 const unsigned FromWidth = Ctx.getIntWidth(FromType); 441 const bool ToSigned = ToType->isSignedIntegerOrEnumerationType(); 442 const unsigned ToWidth = Ctx.getIntWidth(ToType); 443 444 if (FromWidth > ToWidth || 445 (FromWidth == ToWidth && FromSigned != ToSigned) || 446 (FromSigned && !ToSigned)) { 447 // Not all values of FromType can be represented in ToType. 448 const Expr *Initializer = IgnoreNarrowingConversion(Ctx, Converted); 449 450 // If it's value-dependent, we can't tell whether it's narrowing. 451 if (Initializer->isValueDependent()) 452 return NK_Dependent_Narrowing; 453 454 std::optional<llvm::APSInt> OptInitializerValue; 455 if (!(OptInitializerValue = Initializer->getIntegerConstantExpr(Ctx))) { 456 // Such conversions on variables are always narrowing. 457 return NK_Variable_Narrowing; 458 } 459 llvm::APSInt &InitializerValue = *OptInitializerValue; 460 bool Narrowing = false; 461 if (FromWidth < ToWidth) { 462 // Negative -> unsigned is narrowing. Otherwise, more bits is never 463 // narrowing. 464 if (InitializerValue.isSigned() && InitializerValue.isNegative()) 465 Narrowing = true; 466 } else { 467 // Add a bit to the InitializerValue so we don't have to worry about 468 // signed vs. unsigned comparisons. 469 InitializerValue = InitializerValue.extend( 470 InitializerValue.getBitWidth() + 1); 471 // Convert the initializer to and from the target width and signed-ness. 472 llvm::APSInt ConvertedValue = InitializerValue; 473 ConvertedValue = ConvertedValue.trunc(ToWidth); 474 ConvertedValue.setIsSigned(ToSigned); 475 ConvertedValue = ConvertedValue.extend(InitializerValue.getBitWidth()); 476 ConvertedValue.setIsSigned(InitializerValue.isSigned()); 477 // If the result is different, this was a narrowing conversion. 478 if (ConvertedValue != InitializerValue) 479 Narrowing = true; 480 } 481 if (Narrowing) { 482 ConstantType = Initializer->getType(); 483 ConstantValue = APValue(InitializerValue); 484 return NK_Constant_Narrowing; 485 } 486 } 487 return NK_Not_Narrowing; 488 } 489 490 default: 491 // Other kinds of conversions are not narrowings. 492 return NK_Not_Narrowing; 493 } 494 } 495 496 /// dump - Print this standard conversion sequence to standard 497 /// error. Useful for debugging overloading issues. 498 LLVM_DUMP_METHOD void StandardConversionSequence::dump() const { 499 raw_ostream &OS = llvm::errs(); 500 bool PrintedSomething = false; 501 if (First != ICK_Identity) { 502 OS << GetImplicitConversionName(First); 503 PrintedSomething = true; 504 } 505 506 if (Second != ICK_Identity) { 507 if (PrintedSomething) { 508 OS << " -> "; 509 } 510 OS << GetImplicitConversionName(Second); 511 512 if (CopyConstructor) { 513 OS << " (by copy constructor)"; 514 } else if (DirectBinding) { 515 OS << " (direct reference binding)"; 516 } else if (ReferenceBinding) { 517 OS << " (reference binding)"; 518 } 519 PrintedSomething = true; 520 } 521 522 if (Third != ICK_Identity) { 523 if (PrintedSomething) { 524 OS << " -> "; 525 } 526 OS << GetImplicitConversionName(Third); 527 PrintedSomething = true; 528 } 529 530 if (!PrintedSomething) { 531 OS << "No conversions required"; 532 } 533 } 534 535 /// dump - Print this user-defined conversion sequence to standard 536 /// error. Useful for debugging overloading issues. 537 void UserDefinedConversionSequence::dump() const { 538 raw_ostream &OS = llvm::errs(); 539 if (Before.First || Before.Second || Before.Third) { 540 Before.dump(); 541 OS << " -> "; 542 } 543 if (ConversionFunction) 544 OS << '\'' << *ConversionFunction << '\''; 545 else 546 OS << "aggregate initialization"; 547 if (After.First || After.Second || After.Third) { 548 OS << " -> "; 549 After.dump(); 550 } 551 } 552 553 /// dump - Print this implicit conversion sequence to standard 554 /// error. Useful for debugging overloading issues. 555 void ImplicitConversionSequence::dump() const { 556 raw_ostream &OS = llvm::errs(); 557 if (hasInitializerListContainerType()) 558 OS << "Worst list element conversion: "; 559 switch (ConversionKind) { 560 case StandardConversion: 561 OS << "Standard conversion: "; 562 Standard.dump(); 563 break; 564 case UserDefinedConversion: 565 OS << "User-defined conversion: "; 566 UserDefined.dump(); 567 break; 568 case EllipsisConversion: 569 OS << "Ellipsis conversion"; 570 break; 571 case AmbiguousConversion: 572 OS << "Ambiguous conversion"; 573 break; 574 case BadConversion: 575 OS << "Bad conversion"; 576 break; 577 } 578 579 OS << "\n"; 580 } 581 582 void AmbiguousConversionSequence::construct() { 583 new (&conversions()) ConversionSet(); 584 } 585 586 void AmbiguousConversionSequence::destruct() { 587 conversions().~ConversionSet(); 588 } 589 590 void 591 AmbiguousConversionSequence::copyFrom(const AmbiguousConversionSequence &O) { 592 FromTypePtr = O.FromTypePtr; 593 ToTypePtr = O.ToTypePtr; 594 new (&conversions()) ConversionSet(O.conversions()); 595 } 596 597 namespace { 598 // Structure used by DeductionFailureInfo to store 599 // template argument information. 600 struct DFIArguments { 601 TemplateArgument FirstArg; 602 TemplateArgument SecondArg; 603 }; 604 // Structure used by DeductionFailureInfo to store 605 // template parameter and template argument information. 606 struct DFIParamWithArguments : DFIArguments { 607 TemplateParameter Param; 608 }; 609 // Structure used by DeductionFailureInfo to store template argument 610 // information and the index of the problematic call argument. 611 struct DFIDeducedMismatchArgs : DFIArguments { 612 TemplateArgumentList *TemplateArgs; 613 unsigned CallArgIndex; 614 }; 615 // Structure used by DeductionFailureInfo to store information about 616 // unsatisfied constraints. 617 struct CNSInfo { 618 TemplateArgumentList *TemplateArgs; 619 ConstraintSatisfaction Satisfaction; 620 }; 621 } 622 623 /// Convert from Sema's representation of template deduction information 624 /// to the form used in overload-candidate information. 625 DeductionFailureInfo 626 clang::MakeDeductionFailureInfo(ASTContext &Context, 627 Sema::TemplateDeductionResult TDK, 628 TemplateDeductionInfo &Info) { 629 DeductionFailureInfo Result; 630 Result.Result = static_cast<unsigned>(TDK); 631 Result.HasDiagnostic = false; 632 switch (TDK) { 633 case Sema::TDK_Invalid: 634 case Sema::TDK_InstantiationDepth: 635 case Sema::TDK_TooManyArguments: 636 case Sema::TDK_TooFewArguments: 637 case Sema::TDK_MiscellaneousDeductionFailure: 638 case Sema::TDK_CUDATargetMismatch: 639 Result.Data = nullptr; 640 break; 641 642 case Sema::TDK_Incomplete: 643 case Sema::TDK_InvalidExplicitArguments: 644 Result.Data = Info.Param.getOpaqueValue(); 645 break; 646 647 case Sema::TDK_DeducedMismatch: 648 case Sema::TDK_DeducedMismatchNested: { 649 // FIXME: Should allocate from normal heap so that we can free this later. 650 auto *Saved = new (Context) DFIDeducedMismatchArgs; 651 Saved->FirstArg = Info.FirstArg; 652 Saved->SecondArg = Info.SecondArg; 653 Saved->TemplateArgs = Info.takeSugared(); 654 Saved->CallArgIndex = Info.CallArgIndex; 655 Result.Data = Saved; 656 break; 657 } 658 659 case Sema::TDK_NonDeducedMismatch: { 660 // FIXME: Should allocate from normal heap so that we can free this later. 661 DFIArguments *Saved = new (Context) DFIArguments; 662 Saved->FirstArg = Info.FirstArg; 663 Saved->SecondArg = Info.SecondArg; 664 Result.Data = Saved; 665 break; 666 } 667 668 case Sema::TDK_IncompletePack: 669 // FIXME: It's slightly wasteful to allocate two TemplateArguments for this. 670 case Sema::TDK_Inconsistent: 671 case Sema::TDK_Underqualified: { 672 // FIXME: Should allocate from normal heap so that we can free this later. 673 DFIParamWithArguments *Saved = new (Context) DFIParamWithArguments; 674 Saved->Param = Info.Param; 675 Saved->FirstArg = Info.FirstArg; 676 Saved->SecondArg = Info.SecondArg; 677 Result.Data = Saved; 678 break; 679 } 680 681 case Sema::TDK_SubstitutionFailure: 682 Result.Data = Info.takeSugared(); 683 if (Info.hasSFINAEDiagnostic()) { 684 PartialDiagnosticAt *Diag = new (Result.Diagnostic) PartialDiagnosticAt( 685 SourceLocation(), PartialDiagnostic::NullDiagnostic()); 686 Info.takeSFINAEDiagnostic(*Diag); 687 Result.HasDiagnostic = true; 688 } 689 break; 690 691 case Sema::TDK_ConstraintsNotSatisfied: { 692 CNSInfo *Saved = new (Context) CNSInfo; 693 Saved->TemplateArgs = Info.takeSugared(); 694 Saved->Satisfaction = Info.AssociatedConstraintsSatisfaction; 695 Result.Data = Saved; 696 break; 697 } 698 699 case Sema::TDK_Success: 700 case Sema::TDK_NonDependentConversionFailure: 701 case Sema::TDK_AlreadyDiagnosed: 702 llvm_unreachable("not a deduction failure"); 703 } 704 705 return Result; 706 } 707 708 void DeductionFailureInfo::Destroy() { 709 switch (static_cast<Sema::TemplateDeductionResult>(Result)) { 710 case Sema::TDK_Success: 711 case Sema::TDK_Invalid: 712 case Sema::TDK_InstantiationDepth: 713 case Sema::TDK_Incomplete: 714 case Sema::TDK_TooManyArguments: 715 case Sema::TDK_TooFewArguments: 716 case Sema::TDK_InvalidExplicitArguments: 717 case Sema::TDK_CUDATargetMismatch: 718 case Sema::TDK_NonDependentConversionFailure: 719 break; 720 721 case Sema::TDK_IncompletePack: 722 case Sema::TDK_Inconsistent: 723 case Sema::TDK_Underqualified: 724 case Sema::TDK_DeducedMismatch: 725 case Sema::TDK_DeducedMismatchNested: 726 case Sema::TDK_NonDeducedMismatch: 727 // FIXME: Destroy the data? 728 Data = nullptr; 729 break; 730 731 case Sema::TDK_SubstitutionFailure: 732 // FIXME: Destroy the template argument list? 733 Data = nullptr; 734 if (PartialDiagnosticAt *Diag = getSFINAEDiagnostic()) { 735 Diag->~PartialDiagnosticAt(); 736 HasDiagnostic = false; 737 } 738 break; 739 740 case Sema::TDK_ConstraintsNotSatisfied: 741 // FIXME: Destroy the template argument list? 742 Data = nullptr; 743 if (PartialDiagnosticAt *Diag = getSFINAEDiagnostic()) { 744 Diag->~PartialDiagnosticAt(); 745 HasDiagnostic = false; 746 } 747 break; 748 749 // Unhandled 750 case Sema::TDK_MiscellaneousDeductionFailure: 751 case Sema::TDK_AlreadyDiagnosed: 752 break; 753 } 754 } 755 756 PartialDiagnosticAt *DeductionFailureInfo::getSFINAEDiagnostic() { 757 if (HasDiagnostic) 758 return static_cast<PartialDiagnosticAt*>(static_cast<void*>(Diagnostic)); 759 return nullptr; 760 } 761 762 TemplateParameter DeductionFailureInfo::getTemplateParameter() { 763 switch (static_cast<Sema::TemplateDeductionResult>(Result)) { 764 case Sema::TDK_Success: 765 case Sema::TDK_Invalid: 766 case Sema::TDK_InstantiationDepth: 767 case Sema::TDK_TooManyArguments: 768 case Sema::TDK_TooFewArguments: 769 case Sema::TDK_SubstitutionFailure: 770 case Sema::TDK_DeducedMismatch: 771 case Sema::TDK_DeducedMismatchNested: 772 case Sema::TDK_NonDeducedMismatch: 773 case Sema::TDK_CUDATargetMismatch: 774 case Sema::TDK_NonDependentConversionFailure: 775 case Sema::TDK_ConstraintsNotSatisfied: 776 return TemplateParameter(); 777 778 case Sema::TDK_Incomplete: 779 case Sema::TDK_InvalidExplicitArguments: 780 return TemplateParameter::getFromOpaqueValue(Data); 781 782 case Sema::TDK_IncompletePack: 783 case Sema::TDK_Inconsistent: 784 case Sema::TDK_Underqualified: 785 return static_cast<DFIParamWithArguments*>(Data)->Param; 786 787 // Unhandled 788 case Sema::TDK_MiscellaneousDeductionFailure: 789 case Sema::TDK_AlreadyDiagnosed: 790 break; 791 } 792 793 return TemplateParameter(); 794 } 795 796 TemplateArgumentList *DeductionFailureInfo::getTemplateArgumentList() { 797 switch (static_cast<Sema::TemplateDeductionResult>(Result)) { 798 case Sema::TDK_Success: 799 case Sema::TDK_Invalid: 800 case Sema::TDK_InstantiationDepth: 801 case Sema::TDK_TooManyArguments: 802 case Sema::TDK_TooFewArguments: 803 case Sema::TDK_Incomplete: 804 case Sema::TDK_IncompletePack: 805 case Sema::TDK_InvalidExplicitArguments: 806 case Sema::TDK_Inconsistent: 807 case Sema::TDK_Underqualified: 808 case Sema::TDK_NonDeducedMismatch: 809 case Sema::TDK_CUDATargetMismatch: 810 case Sema::TDK_NonDependentConversionFailure: 811 return nullptr; 812 813 case Sema::TDK_DeducedMismatch: 814 case Sema::TDK_DeducedMismatchNested: 815 return static_cast<DFIDeducedMismatchArgs*>(Data)->TemplateArgs; 816 817 case Sema::TDK_SubstitutionFailure: 818 return static_cast<TemplateArgumentList*>(Data); 819 820 case Sema::TDK_ConstraintsNotSatisfied: 821 return static_cast<CNSInfo*>(Data)->TemplateArgs; 822 823 // Unhandled 824 case Sema::TDK_MiscellaneousDeductionFailure: 825 case Sema::TDK_AlreadyDiagnosed: 826 break; 827 } 828 829 return nullptr; 830 } 831 832 const TemplateArgument *DeductionFailureInfo::getFirstArg() { 833 switch (static_cast<Sema::TemplateDeductionResult>(Result)) { 834 case Sema::TDK_Success: 835 case Sema::TDK_Invalid: 836 case Sema::TDK_InstantiationDepth: 837 case Sema::TDK_Incomplete: 838 case Sema::TDK_TooManyArguments: 839 case Sema::TDK_TooFewArguments: 840 case Sema::TDK_InvalidExplicitArguments: 841 case Sema::TDK_SubstitutionFailure: 842 case Sema::TDK_CUDATargetMismatch: 843 case Sema::TDK_NonDependentConversionFailure: 844 case Sema::TDK_ConstraintsNotSatisfied: 845 return nullptr; 846 847 case Sema::TDK_IncompletePack: 848 case Sema::TDK_Inconsistent: 849 case Sema::TDK_Underqualified: 850 case Sema::TDK_DeducedMismatch: 851 case Sema::TDK_DeducedMismatchNested: 852 case Sema::TDK_NonDeducedMismatch: 853 return &static_cast<DFIArguments*>(Data)->FirstArg; 854 855 // Unhandled 856 case Sema::TDK_MiscellaneousDeductionFailure: 857 case Sema::TDK_AlreadyDiagnosed: 858 break; 859 } 860 861 return nullptr; 862 } 863 864 const TemplateArgument *DeductionFailureInfo::getSecondArg() { 865 switch (static_cast<Sema::TemplateDeductionResult>(Result)) { 866 case Sema::TDK_Success: 867 case Sema::TDK_Invalid: 868 case Sema::TDK_InstantiationDepth: 869 case Sema::TDK_Incomplete: 870 case Sema::TDK_IncompletePack: 871 case Sema::TDK_TooManyArguments: 872 case Sema::TDK_TooFewArguments: 873 case Sema::TDK_InvalidExplicitArguments: 874 case Sema::TDK_SubstitutionFailure: 875 case Sema::TDK_CUDATargetMismatch: 876 case Sema::TDK_NonDependentConversionFailure: 877 case Sema::TDK_ConstraintsNotSatisfied: 878 return nullptr; 879 880 case Sema::TDK_Inconsistent: 881 case Sema::TDK_Underqualified: 882 case Sema::TDK_DeducedMismatch: 883 case Sema::TDK_DeducedMismatchNested: 884 case Sema::TDK_NonDeducedMismatch: 885 return &static_cast<DFIArguments*>(Data)->SecondArg; 886 887 // Unhandled 888 case Sema::TDK_MiscellaneousDeductionFailure: 889 case Sema::TDK_AlreadyDiagnosed: 890 break; 891 } 892 893 return nullptr; 894 } 895 896 std::optional<unsigned> DeductionFailureInfo::getCallArgIndex() { 897 switch (static_cast<Sema::TemplateDeductionResult>(Result)) { 898 case Sema::TDK_DeducedMismatch: 899 case Sema::TDK_DeducedMismatchNested: 900 return static_cast<DFIDeducedMismatchArgs*>(Data)->CallArgIndex; 901 902 default: 903 return std::nullopt; 904 } 905 } 906 907 static bool FunctionsCorrespond(ASTContext &Ctx, const FunctionDecl *X, 908 const FunctionDecl *Y) { 909 if (!X || !Y) 910 return false; 911 if (X->getNumParams() != Y->getNumParams()) 912 return false; 913 for (unsigned I = 0; I < X->getNumParams(); ++I) 914 if (!Ctx.hasSameUnqualifiedType(X->getParamDecl(I)->getType(), 915 Y->getParamDecl(I)->getType())) 916 return false; 917 if (auto *FTX = X->getDescribedFunctionTemplate()) { 918 auto *FTY = Y->getDescribedFunctionTemplate(); 919 if (!FTY) 920 return false; 921 if (!Ctx.isSameTemplateParameterList(FTX->getTemplateParameters(), 922 FTY->getTemplateParameters())) 923 return false; 924 } 925 return true; 926 } 927 928 static bool shouldAddReversedEqEq(Sema &S, SourceLocation OpLoc, 929 Expr *FirstOperand, FunctionDecl *EqFD) { 930 assert(EqFD->getOverloadedOperator() == 931 OverloadedOperatorKind::OO_EqualEqual); 932 // C++2a [over.match.oper]p4: 933 // A non-template function or function template F named operator== is a 934 // rewrite target with first operand o unless a search for the name operator!= 935 // in the scope S from the instantiation context of the operator expression 936 // finds a function or function template that would correspond 937 // ([basic.scope.scope]) to F if its name were operator==, where S is the 938 // scope of the class type of o if F is a class member, and the namespace 939 // scope of which F is a member otherwise. A function template specialization 940 // named operator== is a rewrite target if its function template is a rewrite 941 // target. 942 DeclarationName NotEqOp = S.Context.DeclarationNames.getCXXOperatorName( 943 OverloadedOperatorKind::OO_ExclaimEqual); 944 if (isa<CXXMethodDecl>(EqFD)) { 945 // If F is a class member, search scope is class type of first operand. 946 QualType RHS = FirstOperand->getType(); 947 auto *RHSRec = RHS->getAs<RecordType>(); 948 if (!RHSRec) 949 return true; 950 LookupResult Members(S, NotEqOp, OpLoc, 951 Sema::LookupNameKind::LookupMemberName); 952 S.LookupQualifiedName(Members, RHSRec->getDecl()); 953 Members.suppressDiagnostics(); 954 for (NamedDecl *Op : Members) 955 if (FunctionsCorrespond(S.Context, EqFD, Op->getAsFunction())) 956 return false; 957 return true; 958 } 959 // Otherwise the search scope is the namespace scope of which F is a member. 960 for (NamedDecl *Op : EqFD->getEnclosingNamespaceContext()->lookup(NotEqOp)) { 961 auto *NotEqFD = Op->getAsFunction(); 962 if (auto *UD = dyn_cast<UsingShadowDecl>(Op)) 963 NotEqFD = UD->getUnderlyingDecl()->getAsFunction(); 964 if (FunctionsCorrespond(S.Context, EqFD, NotEqFD) && S.isVisible(NotEqFD) && 965 declaresSameEntity(cast<Decl>(EqFD->getEnclosingNamespaceContext()), 966 cast<Decl>(Op->getLexicalDeclContext()))) 967 return false; 968 } 969 return true; 970 } 971 972 bool OverloadCandidateSet::OperatorRewriteInfo::allowsReversed( 973 OverloadedOperatorKind Op) { 974 if (!AllowRewrittenCandidates) 975 return false; 976 return Op == OO_EqualEqual || Op == OO_Spaceship; 977 } 978 979 bool OverloadCandidateSet::OperatorRewriteInfo::shouldAddReversed( 980 Sema &S, ArrayRef<Expr *> OriginalArgs, FunctionDecl *FD) { 981 auto Op = FD->getOverloadedOperator(); 982 if (!allowsReversed(Op)) 983 return false; 984 if (Op == OverloadedOperatorKind::OO_EqualEqual) { 985 assert(OriginalArgs.size() == 2); 986 if (!shouldAddReversedEqEq( 987 S, OpLoc, /*FirstOperand in reversed args*/ OriginalArgs[1], FD)) 988 return false; 989 } 990 // Don't bother adding a reversed candidate that can never be a better 991 // match than the non-reversed version. 992 return FD->getNumParams() != 2 || 993 !S.Context.hasSameUnqualifiedType(FD->getParamDecl(0)->getType(), 994 FD->getParamDecl(1)->getType()) || 995 FD->hasAttr<EnableIfAttr>(); 996 } 997 998 void OverloadCandidateSet::destroyCandidates() { 999 for (iterator i = begin(), e = end(); i != e; ++i) { 1000 for (auto &C : i->Conversions) 1001 C.~ImplicitConversionSequence(); 1002 if (!i->Viable && i->FailureKind == ovl_fail_bad_deduction) 1003 i->DeductionFailure.Destroy(); 1004 } 1005 } 1006 1007 void OverloadCandidateSet::clear(CandidateSetKind CSK) { 1008 destroyCandidates(); 1009 SlabAllocator.Reset(); 1010 NumInlineBytesUsed = 0; 1011 Candidates.clear(); 1012 Functions.clear(); 1013 Kind = CSK; 1014 } 1015 1016 namespace { 1017 class UnbridgedCastsSet { 1018 struct Entry { 1019 Expr **Addr; 1020 Expr *Saved; 1021 }; 1022 SmallVector<Entry, 2> Entries; 1023 1024 public: 1025 void save(Sema &S, Expr *&E) { 1026 assert(E->hasPlaceholderType(BuiltinType::ARCUnbridgedCast)); 1027 Entry entry = { &E, E }; 1028 Entries.push_back(entry); 1029 E = S.stripARCUnbridgedCast(E); 1030 } 1031 1032 void restore() { 1033 for (SmallVectorImpl<Entry>::iterator 1034 i = Entries.begin(), e = Entries.end(); i != e; ++i) 1035 *i->Addr = i->Saved; 1036 } 1037 }; 1038 } 1039 1040 /// checkPlaceholderForOverload - Do any interesting placeholder-like 1041 /// preprocessing on the given expression. 1042 /// 1043 /// \param unbridgedCasts a collection to which to add unbridged casts; 1044 /// without this, they will be immediately diagnosed as errors 1045 /// 1046 /// Return true on unrecoverable error. 1047 static bool 1048 checkPlaceholderForOverload(Sema &S, Expr *&E, 1049 UnbridgedCastsSet *unbridgedCasts = nullptr) { 1050 if (const BuiltinType *placeholder = E->getType()->getAsPlaceholderType()) { 1051 // We can't handle overloaded expressions here because overload 1052 // resolution might reasonably tweak them. 1053 if (placeholder->getKind() == BuiltinType::Overload) return false; 1054 1055 // If the context potentially accepts unbridged ARC casts, strip 1056 // the unbridged cast and add it to the collection for later restoration. 1057 if (placeholder->getKind() == BuiltinType::ARCUnbridgedCast && 1058 unbridgedCasts) { 1059 unbridgedCasts->save(S, E); 1060 return false; 1061 } 1062 1063 // Go ahead and check everything else. 1064 ExprResult result = S.CheckPlaceholderExpr(E); 1065 if (result.isInvalid()) 1066 return true; 1067 1068 E = result.get(); 1069 return false; 1070 } 1071 1072 // Nothing to do. 1073 return false; 1074 } 1075 1076 /// checkArgPlaceholdersForOverload - Check a set of call operands for 1077 /// placeholders. 1078 static bool checkArgPlaceholdersForOverload(Sema &S, MultiExprArg Args, 1079 UnbridgedCastsSet &unbridged) { 1080 for (unsigned i = 0, e = Args.size(); i != e; ++i) 1081 if (checkPlaceholderForOverload(S, Args[i], &unbridged)) 1082 return true; 1083 1084 return false; 1085 } 1086 1087 /// Determine whether the given New declaration is an overload of the 1088 /// declarations in Old. This routine returns Ovl_Match or Ovl_NonFunction if 1089 /// New and Old cannot be overloaded, e.g., if New has the same signature as 1090 /// some function in Old (C++ 1.3.10) or if the Old declarations aren't 1091 /// functions (or function templates) at all. When it does return Ovl_Match or 1092 /// Ovl_NonFunction, MatchedDecl will point to the decl that New cannot be 1093 /// overloaded with. This decl may be a UsingShadowDecl on top of the underlying 1094 /// declaration. 1095 /// 1096 /// Example: Given the following input: 1097 /// 1098 /// void f(int, float); // #1 1099 /// void f(int, int); // #2 1100 /// int f(int, int); // #3 1101 /// 1102 /// When we process #1, there is no previous declaration of "f", so IsOverload 1103 /// will not be used. 1104 /// 1105 /// When we process #2, Old contains only the FunctionDecl for #1. By comparing 1106 /// the parameter types, we see that #1 and #2 are overloaded (since they have 1107 /// different signatures), so this routine returns Ovl_Overload; MatchedDecl is 1108 /// unchanged. 1109 /// 1110 /// When we process #3, Old is an overload set containing #1 and #2. We compare 1111 /// the signatures of #3 to #1 (they're overloaded, so we do nothing) and then 1112 /// #3 to #2. Since the signatures of #3 and #2 are identical (return types of 1113 /// functions are not part of the signature), IsOverload returns Ovl_Match and 1114 /// MatchedDecl will be set to point to the FunctionDecl for #2. 1115 /// 1116 /// 'NewIsUsingShadowDecl' indicates that 'New' is being introduced into a class 1117 /// by a using declaration. The rules for whether to hide shadow declarations 1118 /// ignore some properties which otherwise figure into a function template's 1119 /// signature. 1120 Sema::OverloadKind 1121 Sema::CheckOverload(Scope *S, FunctionDecl *New, const LookupResult &Old, 1122 NamedDecl *&Match, bool NewIsUsingDecl) { 1123 for (LookupResult::iterator I = Old.begin(), E = Old.end(); 1124 I != E; ++I) { 1125 NamedDecl *OldD = *I; 1126 1127 bool OldIsUsingDecl = false; 1128 if (isa<UsingShadowDecl>(OldD)) { 1129 OldIsUsingDecl = true; 1130 1131 // We can always introduce two using declarations into the same 1132 // context, even if they have identical signatures. 1133 if (NewIsUsingDecl) continue; 1134 1135 OldD = cast<UsingShadowDecl>(OldD)->getTargetDecl(); 1136 } 1137 1138 // A using-declaration does not conflict with another declaration 1139 // if one of them is hidden. 1140 if ((OldIsUsingDecl || NewIsUsingDecl) && !isVisible(*I)) 1141 continue; 1142 1143 // If either declaration was introduced by a using declaration, 1144 // we'll need to use slightly different rules for matching. 1145 // Essentially, these rules are the normal rules, except that 1146 // function templates hide function templates with different 1147 // return types or template parameter lists. 1148 bool UseMemberUsingDeclRules = 1149 (OldIsUsingDecl || NewIsUsingDecl) && CurContext->isRecord() && 1150 !New->getFriendObjectKind(); 1151 1152 if (FunctionDecl *OldF = OldD->getAsFunction()) { 1153 if (!IsOverload(New, OldF, UseMemberUsingDeclRules)) { 1154 if (UseMemberUsingDeclRules && OldIsUsingDecl) { 1155 HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I)); 1156 continue; 1157 } 1158 1159 if (!isa<FunctionTemplateDecl>(OldD) && 1160 !shouldLinkPossiblyHiddenDecl(*I, New)) 1161 continue; 1162 1163 Match = *I; 1164 return Ovl_Match; 1165 } 1166 1167 // Builtins that have custom typechecking or have a reference should 1168 // not be overloadable or redeclarable. 1169 if (!getASTContext().canBuiltinBeRedeclared(OldF)) { 1170 Match = *I; 1171 return Ovl_NonFunction; 1172 } 1173 } else if (isa<UsingDecl>(OldD) || isa<UsingPackDecl>(OldD)) { 1174 // We can overload with these, which can show up when doing 1175 // redeclaration checks for UsingDecls. 1176 assert(Old.getLookupKind() == LookupUsingDeclName); 1177 } else if (isa<TagDecl>(OldD)) { 1178 // We can always overload with tags by hiding them. 1179 } else if (auto *UUD = dyn_cast<UnresolvedUsingValueDecl>(OldD)) { 1180 // Optimistically assume that an unresolved using decl will 1181 // overload; if it doesn't, we'll have to diagnose during 1182 // template instantiation. 1183 // 1184 // Exception: if the scope is dependent and this is not a class 1185 // member, the using declaration can only introduce an enumerator. 1186 if (UUD->getQualifier()->isDependent() && !UUD->isCXXClassMember()) { 1187 Match = *I; 1188 return Ovl_NonFunction; 1189 } 1190 } else { 1191 // (C++ 13p1): 1192 // Only function declarations can be overloaded; object and type 1193 // declarations cannot be overloaded. 1194 Match = *I; 1195 return Ovl_NonFunction; 1196 } 1197 } 1198 1199 // C++ [temp.friend]p1: 1200 // For a friend function declaration that is not a template declaration: 1201 // -- if the name of the friend is a qualified or unqualified template-id, 1202 // [...], otherwise 1203 // -- if the name of the friend is a qualified-id and a matching 1204 // non-template function is found in the specified class or namespace, 1205 // the friend declaration refers to that function, otherwise, 1206 // -- if the name of the friend is a qualified-id and a matching function 1207 // template is found in the specified class or namespace, the friend 1208 // declaration refers to the deduced specialization of that function 1209 // template, otherwise 1210 // -- the name shall be an unqualified-id [...] 1211 // If we get here for a qualified friend declaration, we've just reached the 1212 // third bullet. If the type of the friend is dependent, skip this lookup 1213 // until instantiation. 1214 if (New->getFriendObjectKind() && New->getQualifier() && 1215 !New->getDescribedFunctionTemplate() && 1216 !New->getDependentSpecializationInfo() && 1217 !New->getType()->isDependentType()) { 1218 LookupResult TemplateSpecResult(LookupResult::Temporary, Old); 1219 TemplateSpecResult.addAllDecls(Old); 1220 if (CheckFunctionTemplateSpecialization(New, nullptr, TemplateSpecResult, 1221 /*QualifiedFriend*/true)) { 1222 New->setInvalidDecl(); 1223 return Ovl_Overload; 1224 } 1225 1226 Match = TemplateSpecResult.getAsSingle<FunctionDecl>(); 1227 return Ovl_Match; 1228 } 1229 1230 return Ovl_Overload; 1231 } 1232 1233 bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old, 1234 bool UseMemberUsingDeclRules, bool ConsiderCudaAttrs, 1235 bool ConsiderRequiresClauses) { 1236 // C++ [basic.start.main]p2: This function shall not be overloaded. 1237 if (New->isMain()) 1238 return false; 1239 1240 // MSVCRT user defined entry points cannot be overloaded. 1241 if (New->isMSVCRTEntryPoint()) 1242 return false; 1243 1244 FunctionTemplateDecl *OldTemplate = Old->getDescribedFunctionTemplate(); 1245 FunctionTemplateDecl *NewTemplate = New->getDescribedFunctionTemplate(); 1246 1247 // C++ [temp.fct]p2: 1248 // A function template can be overloaded with other function templates 1249 // and with normal (non-template) functions. 1250 if ((OldTemplate == nullptr) != (NewTemplate == nullptr)) 1251 return true; 1252 1253 // Is the function New an overload of the function Old? 1254 QualType OldQType = Context.getCanonicalType(Old->getType()); 1255 QualType NewQType = Context.getCanonicalType(New->getType()); 1256 1257 // Compare the signatures (C++ 1.3.10) of the two functions to 1258 // determine whether they are overloads. If we find any mismatch 1259 // in the signature, they are overloads. 1260 1261 // If either of these functions is a K&R-style function (no 1262 // prototype), then we consider them to have matching signatures. 1263 if (isa<FunctionNoProtoType>(OldQType.getTypePtr()) || 1264 isa<FunctionNoProtoType>(NewQType.getTypePtr())) 1265 return false; 1266 1267 const FunctionProtoType *OldType = cast<FunctionProtoType>(OldQType); 1268 const FunctionProtoType *NewType = cast<FunctionProtoType>(NewQType); 1269 1270 // The signature of a function includes the types of its 1271 // parameters (C++ 1.3.10), which includes the presence or absence 1272 // of the ellipsis; see C++ DR 357). 1273 if (OldQType != NewQType && 1274 (OldType->getNumParams() != NewType->getNumParams() || 1275 OldType->isVariadic() != NewType->isVariadic() || 1276 !FunctionParamTypesAreEqual(OldType, NewType))) 1277 return true; 1278 1279 // For member-like friends, the enclosing class is part of the signature. 1280 if ((New->isMemberLikeConstrainedFriend() || 1281 Old->isMemberLikeConstrainedFriend()) && 1282 !New->getLexicalDeclContext()->Equals(Old->getLexicalDeclContext())) 1283 return true; 1284 1285 if (NewTemplate) { 1286 // C++ [temp.over.link]p4: 1287 // The signature of a function template consists of its function 1288 // signature, its return type and its template parameter list. The names 1289 // of the template parameters are significant only for establishing the 1290 // relationship between the template parameters and the rest of the 1291 // signature. 1292 // 1293 // We check the return type and template parameter lists for function 1294 // templates first; the remaining checks follow. 1295 bool SameTemplateParameterList = TemplateParameterListsAreEqual( 1296 NewTemplate, NewTemplate->getTemplateParameters(), OldTemplate, 1297 OldTemplate->getTemplateParameters(), false, TPL_TemplateMatch); 1298 bool SameReturnType = Context.hasSameType(Old->getDeclaredReturnType(), 1299 New->getDeclaredReturnType()); 1300 // FIXME(GH58571): Match template parameter list even for non-constrained 1301 // template heads. This currently ensures that the code prior to C++20 is 1302 // not newly broken. 1303 bool ConstraintsInTemplateHead = 1304 NewTemplate->getTemplateParameters()->hasAssociatedConstraints() || 1305 OldTemplate->getTemplateParameters()->hasAssociatedConstraints(); 1306 // C++ [namespace.udecl]p11: 1307 // The set of declarations named by a using-declarator that inhabits a 1308 // class C does not include member functions and member function 1309 // templates of a base class that "correspond" to (and thus would 1310 // conflict with) a declaration of a function or function template in 1311 // C. 1312 // Comparing return types is not required for the "correspond" check to 1313 // decide whether a member introduced by a shadow declaration is hidden. 1314 if (UseMemberUsingDeclRules && ConstraintsInTemplateHead && 1315 !SameTemplateParameterList) 1316 return true; 1317 if (!UseMemberUsingDeclRules && 1318 (!SameTemplateParameterList || !SameReturnType)) 1319 return true; 1320 } 1321 1322 if (ConsiderRequiresClauses) { 1323 Expr *NewRC = New->getTrailingRequiresClause(), 1324 *OldRC = Old->getTrailingRequiresClause(); 1325 if ((NewRC != nullptr) != (OldRC != nullptr)) 1326 return true; 1327 1328 if (NewRC && !AreConstraintExpressionsEqual(Old, OldRC, New, NewRC)) 1329 return true; 1330 } 1331 1332 // If the function is a class member, its signature includes the 1333 // cv-qualifiers (if any) and ref-qualifier (if any) on the function itself. 1334 // 1335 // As part of this, also check whether one of the member functions 1336 // is static, in which case they are not overloads (C++ 1337 // 13.1p2). While not part of the definition of the signature, 1338 // this check is important to determine whether these functions 1339 // can be overloaded. 1340 CXXMethodDecl *OldMethod = dyn_cast<CXXMethodDecl>(Old); 1341 CXXMethodDecl *NewMethod = dyn_cast<CXXMethodDecl>(New); 1342 if (OldMethod && NewMethod && 1343 !OldMethod->isStatic() && !NewMethod->isStatic()) { 1344 if (OldMethod->getRefQualifier() != NewMethod->getRefQualifier()) { 1345 if (!UseMemberUsingDeclRules && 1346 (OldMethod->getRefQualifier() == RQ_None || 1347 NewMethod->getRefQualifier() == RQ_None)) { 1348 // C++20 [over.load]p2: 1349 // - Member function declarations with the same name, the same 1350 // parameter-type-list, and the same trailing requires-clause (if 1351 // any), as well as member function template declarations with the 1352 // same name, the same parameter-type-list, the same trailing 1353 // requires-clause (if any), and the same template-head, cannot be 1354 // overloaded if any of them, but not all, have a ref-qualifier. 1355 Diag(NewMethod->getLocation(), diag::err_ref_qualifier_overload) 1356 << NewMethod->getRefQualifier() << OldMethod->getRefQualifier(); 1357 Diag(OldMethod->getLocation(), diag::note_previous_declaration); 1358 } 1359 return true; 1360 } 1361 1362 // We may not have applied the implicit const for a constexpr member 1363 // function yet (because we haven't yet resolved whether this is a static 1364 // or non-static member function). Add it now, on the assumption that this 1365 // is a redeclaration of OldMethod. 1366 auto OldQuals = OldMethod->getMethodQualifiers(); 1367 auto NewQuals = NewMethod->getMethodQualifiers(); 1368 if (!getLangOpts().CPlusPlus14 && NewMethod->isConstexpr() && 1369 !isa<CXXConstructorDecl>(NewMethod)) 1370 NewQuals.addConst(); 1371 // We do not allow overloading based off of '__restrict'. 1372 OldQuals.removeRestrict(); 1373 NewQuals.removeRestrict(); 1374 if (OldQuals != NewQuals) 1375 return true; 1376 } 1377 1378 // Though pass_object_size is placed on parameters and takes an argument, we 1379 // consider it to be a function-level modifier for the sake of function 1380 // identity. Either the function has one or more parameters with 1381 // pass_object_size or it doesn't. 1382 if (functionHasPassObjectSizeParams(New) != 1383 functionHasPassObjectSizeParams(Old)) 1384 return true; 1385 1386 // enable_if attributes are an order-sensitive part of the signature. 1387 for (specific_attr_iterator<EnableIfAttr> 1388 NewI = New->specific_attr_begin<EnableIfAttr>(), 1389 NewE = New->specific_attr_end<EnableIfAttr>(), 1390 OldI = Old->specific_attr_begin<EnableIfAttr>(), 1391 OldE = Old->specific_attr_end<EnableIfAttr>(); 1392 NewI != NewE || OldI != OldE; ++NewI, ++OldI) { 1393 if (NewI == NewE || OldI == OldE) 1394 return true; 1395 llvm::FoldingSetNodeID NewID, OldID; 1396 NewI->getCond()->Profile(NewID, Context, true); 1397 OldI->getCond()->Profile(OldID, Context, true); 1398 if (NewID != OldID) 1399 return true; 1400 } 1401 1402 if (getLangOpts().CUDA && ConsiderCudaAttrs) { 1403 // Don't allow overloading of destructors. (In theory we could, but it 1404 // would be a giant change to clang.) 1405 if (!isa<CXXDestructorDecl>(New)) { 1406 CUDAFunctionTarget NewTarget = IdentifyCUDATarget(New), 1407 OldTarget = IdentifyCUDATarget(Old); 1408 if (NewTarget != CFT_InvalidTarget) { 1409 assert((OldTarget != CFT_InvalidTarget) && 1410 "Unexpected invalid target."); 1411 1412 // Allow overloading of functions with same signature and different CUDA 1413 // target attributes. 1414 if (NewTarget != OldTarget) 1415 return true; 1416 } 1417 } 1418 } 1419 1420 // The signatures match; this is not an overload. 1421 return false; 1422 } 1423 1424 /// Tries a user-defined conversion from From to ToType. 1425 /// 1426 /// Produces an implicit conversion sequence for when a standard conversion 1427 /// is not an option. See TryImplicitConversion for more information. 1428 static ImplicitConversionSequence 1429 TryUserDefinedConversion(Sema &S, Expr *From, QualType ToType, 1430 bool SuppressUserConversions, 1431 AllowedExplicit AllowExplicit, 1432 bool InOverloadResolution, 1433 bool CStyle, 1434 bool AllowObjCWritebackConversion, 1435 bool AllowObjCConversionOnExplicit) { 1436 ImplicitConversionSequence ICS; 1437 1438 if (SuppressUserConversions) { 1439 // We're not in the case above, so there is no conversion that 1440 // we can perform. 1441 ICS.setBad(BadConversionSequence::no_conversion, From, ToType); 1442 return ICS; 1443 } 1444 1445 // Attempt user-defined conversion. 1446 OverloadCandidateSet Conversions(From->getExprLoc(), 1447 OverloadCandidateSet::CSK_Normal); 1448 switch (IsUserDefinedConversion(S, From, ToType, ICS.UserDefined, 1449 Conversions, AllowExplicit, 1450 AllowObjCConversionOnExplicit)) { 1451 case OR_Success: 1452 case OR_Deleted: 1453 ICS.setUserDefined(); 1454 // C++ [over.ics.user]p4: 1455 // A conversion of an expression of class type to the same class 1456 // type is given Exact Match rank, and a conversion of an 1457 // expression of class type to a base class of that type is 1458 // given Conversion rank, in spite of the fact that a copy 1459 // constructor (i.e., a user-defined conversion function) is 1460 // called for those cases. 1461 if (CXXConstructorDecl *Constructor 1462 = dyn_cast<CXXConstructorDecl>(ICS.UserDefined.ConversionFunction)) { 1463 QualType FromCanon 1464 = S.Context.getCanonicalType(From->getType().getUnqualifiedType()); 1465 QualType ToCanon 1466 = S.Context.getCanonicalType(ToType).getUnqualifiedType(); 1467 if (Constructor->isCopyConstructor() && 1468 (FromCanon == ToCanon || 1469 S.IsDerivedFrom(From->getBeginLoc(), FromCanon, ToCanon))) { 1470 // Turn this into a "standard" conversion sequence, so that it 1471 // gets ranked with standard conversion sequences. 1472 DeclAccessPair Found = ICS.UserDefined.FoundConversionFunction; 1473 ICS.setStandard(); 1474 ICS.Standard.setAsIdentityConversion(); 1475 ICS.Standard.setFromType(From->getType()); 1476 ICS.Standard.setAllToTypes(ToType); 1477 ICS.Standard.CopyConstructor = Constructor; 1478 ICS.Standard.FoundCopyConstructor = Found; 1479 if (ToCanon != FromCanon) 1480 ICS.Standard.Second = ICK_Derived_To_Base; 1481 } 1482 } 1483 break; 1484 1485 case OR_Ambiguous: 1486 ICS.setAmbiguous(); 1487 ICS.Ambiguous.setFromType(From->getType()); 1488 ICS.Ambiguous.setToType(ToType); 1489 for (OverloadCandidateSet::iterator Cand = Conversions.begin(); 1490 Cand != Conversions.end(); ++Cand) 1491 if (Cand->Best) 1492 ICS.Ambiguous.addConversion(Cand->FoundDecl, Cand->Function); 1493 break; 1494 1495 // Fall through. 1496 case OR_No_Viable_Function: 1497 ICS.setBad(BadConversionSequence::no_conversion, From, ToType); 1498 break; 1499 } 1500 1501 return ICS; 1502 } 1503 1504 /// TryImplicitConversion - Attempt to perform an implicit conversion 1505 /// from the given expression (Expr) to the given type (ToType). This 1506 /// function returns an implicit conversion sequence that can be used 1507 /// to perform the initialization. Given 1508 /// 1509 /// void f(float f); 1510 /// void g(int i) { f(i); } 1511 /// 1512 /// this routine would produce an implicit conversion sequence to 1513 /// describe the initialization of f from i, which will be a standard 1514 /// conversion sequence containing an lvalue-to-rvalue conversion (C++ 1515 /// 4.1) followed by a floating-integral conversion (C++ 4.9). 1516 // 1517 /// Note that this routine only determines how the conversion can be 1518 /// performed; it does not actually perform the conversion. As such, 1519 /// it will not produce any diagnostics if no conversion is available, 1520 /// but will instead return an implicit conversion sequence of kind 1521 /// "BadConversion". 1522 /// 1523 /// If @p SuppressUserConversions, then user-defined conversions are 1524 /// not permitted. 1525 /// If @p AllowExplicit, then explicit user-defined conversions are 1526 /// permitted. 1527 /// 1528 /// \param AllowObjCWritebackConversion Whether we allow the Objective-C 1529 /// writeback conversion, which allows __autoreleasing id* parameters to 1530 /// be initialized with __strong id* or __weak id* arguments. 1531 static ImplicitConversionSequence 1532 TryImplicitConversion(Sema &S, Expr *From, QualType ToType, 1533 bool SuppressUserConversions, 1534 AllowedExplicit AllowExplicit, 1535 bool InOverloadResolution, 1536 bool CStyle, 1537 bool AllowObjCWritebackConversion, 1538 bool AllowObjCConversionOnExplicit) { 1539 ImplicitConversionSequence ICS; 1540 if (IsStandardConversion(S, From, ToType, InOverloadResolution, 1541 ICS.Standard, CStyle, AllowObjCWritebackConversion)){ 1542 ICS.setStandard(); 1543 return ICS; 1544 } 1545 1546 if (!S.getLangOpts().CPlusPlus) { 1547 ICS.setBad(BadConversionSequence::no_conversion, From, ToType); 1548 return ICS; 1549 } 1550 1551 // C++ [over.ics.user]p4: 1552 // A conversion of an expression of class type to the same class 1553 // type is given Exact Match rank, and a conversion of an 1554 // expression of class type to a base class of that type is 1555 // given Conversion rank, in spite of the fact that a copy/move 1556 // constructor (i.e., a user-defined conversion function) is 1557 // called for those cases. 1558 QualType FromType = From->getType(); 1559 if (ToType->getAs<RecordType>() && FromType->getAs<RecordType>() && 1560 (S.Context.hasSameUnqualifiedType(FromType, ToType) || 1561 S.IsDerivedFrom(From->getBeginLoc(), FromType, ToType))) { 1562 ICS.setStandard(); 1563 ICS.Standard.setAsIdentityConversion(); 1564 ICS.Standard.setFromType(FromType); 1565 ICS.Standard.setAllToTypes(ToType); 1566 1567 // We don't actually check at this point whether there is a valid 1568 // copy/move constructor, since overloading just assumes that it 1569 // exists. When we actually perform initialization, we'll find the 1570 // appropriate constructor to copy the returned object, if needed. 1571 ICS.Standard.CopyConstructor = nullptr; 1572 1573 // Determine whether this is considered a derived-to-base conversion. 1574 if (!S.Context.hasSameUnqualifiedType(FromType, ToType)) 1575 ICS.Standard.Second = ICK_Derived_To_Base; 1576 1577 return ICS; 1578 } 1579 1580 return TryUserDefinedConversion(S, From, ToType, SuppressUserConversions, 1581 AllowExplicit, InOverloadResolution, CStyle, 1582 AllowObjCWritebackConversion, 1583 AllowObjCConversionOnExplicit); 1584 } 1585 1586 ImplicitConversionSequence 1587 Sema::TryImplicitConversion(Expr *From, QualType ToType, 1588 bool SuppressUserConversions, 1589 AllowedExplicit AllowExplicit, 1590 bool InOverloadResolution, 1591 bool CStyle, 1592 bool AllowObjCWritebackConversion) { 1593 return ::TryImplicitConversion(*this, From, ToType, SuppressUserConversions, 1594 AllowExplicit, InOverloadResolution, CStyle, 1595 AllowObjCWritebackConversion, 1596 /*AllowObjCConversionOnExplicit=*/false); 1597 } 1598 1599 /// PerformImplicitConversion - Perform an implicit conversion of the 1600 /// expression From to the type ToType. Returns the 1601 /// converted expression. Flavor is the kind of conversion we're 1602 /// performing, used in the error message. If @p AllowExplicit, 1603 /// explicit user-defined conversions are permitted. 1604 ExprResult Sema::PerformImplicitConversion(Expr *From, QualType ToType, 1605 AssignmentAction Action, 1606 bool AllowExplicit) { 1607 if (checkPlaceholderForOverload(*this, From)) 1608 return ExprError(); 1609 1610 // Objective-C ARC: Determine whether we will allow the writeback conversion. 1611 bool AllowObjCWritebackConversion 1612 = getLangOpts().ObjCAutoRefCount && 1613 (Action == AA_Passing || Action == AA_Sending); 1614 if (getLangOpts().ObjC) 1615 CheckObjCBridgeRelatedConversions(From->getBeginLoc(), ToType, 1616 From->getType(), From); 1617 ImplicitConversionSequence ICS = ::TryImplicitConversion( 1618 *this, From, ToType, 1619 /*SuppressUserConversions=*/false, 1620 AllowExplicit ? AllowedExplicit::All : AllowedExplicit::None, 1621 /*InOverloadResolution=*/false, 1622 /*CStyle=*/false, AllowObjCWritebackConversion, 1623 /*AllowObjCConversionOnExplicit=*/false); 1624 return PerformImplicitConversion(From, ToType, ICS, Action); 1625 } 1626 1627 /// Determine whether the conversion from FromType to ToType is a valid 1628 /// conversion that strips "noexcept" or "noreturn" off the nested function 1629 /// type. 1630 bool Sema::IsFunctionConversion(QualType FromType, QualType ToType, 1631 QualType &ResultTy) { 1632 if (Context.hasSameUnqualifiedType(FromType, ToType)) 1633 return false; 1634 1635 // Permit the conversion F(t __attribute__((noreturn))) -> F(t) 1636 // or F(t noexcept) -> F(t) 1637 // where F adds one of the following at most once: 1638 // - a pointer 1639 // - a member pointer 1640 // - a block pointer 1641 // Changes here need matching changes in FindCompositePointerType. 1642 CanQualType CanTo = Context.getCanonicalType(ToType); 1643 CanQualType CanFrom = Context.getCanonicalType(FromType); 1644 Type::TypeClass TyClass = CanTo->getTypeClass(); 1645 if (TyClass != CanFrom->getTypeClass()) return false; 1646 if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto) { 1647 if (TyClass == Type::Pointer) { 1648 CanTo = CanTo.castAs<PointerType>()->getPointeeType(); 1649 CanFrom = CanFrom.castAs<PointerType>()->getPointeeType(); 1650 } else if (TyClass == Type::BlockPointer) { 1651 CanTo = CanTo.castAs<BlockPointerType>()->getPointeeType(); 1652 CanFrom = CanFrom.castAs<BlockPointerType>()->getPointeeType(); 1653 } else if (TyClass == Type::MemberPointer) { 1654 auto ToMPT = CanTo.castAs<MemberPointerType>(); 1655 auto FromMPT = CanFrom.castAs<MemberPointerType>(); 1656 // A function pointer conversion cannot change the class of the function. 1657 if (ToMPT->getClass() != FromMPT->getClass()) 1658 return false; 1659 CanTo = ToMPT->getPointeeType(); 1660 CanFrom = FromMPT->getPointeeType(); 1661 } else { 1662 return false; 1663 } 1664 1665 TyClass = CanTo->getTypeClass(); 1666 if (TyClass != CanFrom->getTypeClass()) return false; 1667 if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto) 1668 return false; 1669 } 1670 1671 const auto *FromFn = cast<FunctionType>(CanFrom); 1672 FunctionType::ExtInfo FromEInfo = FromFn->getExtInfo(); 1673 1674 const auto *ToFn = cast<FunctionType>(CanTo); 1675 FunctionType::ExtInfo ToEInfo = ToFn->getExtInfo(); 1676 1677 bool Changed = false; 1678 1679 // Drop 'noreturn' if not present in target type. 1680 if (FromEInfo.getNoReturn() && !ToEInfo.getNoReturn()) { 1681 FromFn = Context.adjustFunctionType(FromFn, FromEInfo.withNoReturn(false)); 1682 Changed = true; 1683 } 1684 1685 // Drop 'noexcept' if not present in target type. 1686 if (const auto *FromFPT = dyn_cast<FunctionProtoType>(FromFn)) { 1687 const auto *ToFPT = cast<FunctionProtoType>(ToFn); 1688 if (FromFPT->isNothrow() && !ToFPT->isNothrow()) { 1689 FromFn = cast<FunctionType>( 1690 Context.getFunctionTypeWithExceptionSpec(QualType(FromFPT, 0), 1691 EST_None) 1692 .getTypePtr()); 1693 Changed = true; 1694 } 1695 1696 // Convert FromFPT's ExtParameterInfo if necessary. The conversion is valid 1697 // only if the ExtParameterInfo lists of the two function prototypes can be 1698 // merged and the merged list is identical to ToFPT's ExtParameterInfo list. 1699 SmallVector<FunctionProtoType::ExtParameterInfo, 4> NewParamInfos; 1700 bool CanUseToFPT, CanUseFromFPT; 1701 if (Context.mergeExtParameterInfo(ToFPT, FromFPT, CanUseToFPT, 1702 CanUseFromFPT, NewParamInfos) && 1703 CanUseToFPT && !CanUseFromFPT) { 1704 FunctionProtoType::ExtProtoInfo ExtInfo = FromFPT->getExtProtoInfo(); 1705 ExtInfo.ExtParameterInfos = 1706 NewParamInfos.empty() ? nullptr : NewParamInfos.data(); 1707 QualType QT = Context.getFunctionType(FromFPT->getReturnType(), 1708 FromFPT->getParamTypes(), ExtInfo); 1709 FromFn = QT->getAs<FunctionType>(); 1710 Changed = true; 1711 } 1712 } 1713 1714 if (!Changed) 1715 return false; 1716 1717 assert(QualType(FromFn, 0).isCanonical()); 1718 if (QualType(FromFn, 0) != CanTo) return false; 1719 1720 ResultTy = ToType; 1721 return true; 1722 } 1723 1724 /// Determine whether the conversion from FromType to ToType is a valid 1725 /// vector conversion. 1726 /// 1727 /// \param ICK Will be set to the vector conversion kind, if this is a vector 1728 /// conversion. 1729 static bool IsVectorConversion(Sema &S, QualType FromType, QualType ToType, 1730 ImplicitConversionKind &ICK, Expr *From, 1731 bool InOverloadResolution, bool CStyle) { 1732 // We need at least one of these types to be a vector type to have a vector 1733 // conversion. 1734 if (!ToType->isVectorType() && !FromType->isVectorType()) 1735 return false; 1736 1737 // Identical types require no conversions. 1738 if (S.Context.hasSameUnqualifiedType(FromType, ToType)) 1739 return false; 1740 1741 // There are no conversions between extended vector types, only identity. 1742 if (ToType->isExtVectorType()) { 1743 // There are no conversions between extended vector types other than the 1744 // identity conversion. 1745 if (FromType->isExtVectorType()) 1746 return false; 1747 1748 // Vector splat from any arithmetic type to a vector. 1749 if (FromType->isArithmeticType()) { 1750 ICK = ICK_Vector_Splat; 1751 return true; 1752 } 1753 } 1754 1755 if (ToType->isSVESizelessBuiltinType() || 1756 FromType->isSVESizelessBuiltinType()) 1757 if (S.Context.areCompatibleSveTypes(FromType, ToType) || 1758 S.Context.areLaxCompatibleSveTypes(FromType, ToType)) { 1759 ICK = ICK_SVE_Vector_Conversion; 1760 return true; 1761 } 1762 1763 if (ToType->isRVVSizelessBuiltinType() || 1764 FromType->isRVVSizelessBuiltinType()) 1765 if (S.Context.areCompatibleRVVTypes(FromType, ToType) || 1766 S.Context.areLaxCompatibleRVVTypes(FromType, ToType)) { 1767 ICK = ICK_RVV_Vector_Conversion; 1768 return true; 1769 } 1770 1771 // We can perform the conversion between vector types in the following cases: 1772 // 1)vector types are equivalent AltiVec and GCC vector types 1773 // 2)lax vector conversions are permitted and the vector types are of the 1774 // same size 1775 // 3)the destination type does not have the ARM MVE strict-polymorphism 1776 // attribute, which inhibits lax vector conversion for overload resolution 1777 // only 1778 if (ToType->isVectorType() && FromType->isVectorType()) { 1779 if (S.Context.areCompatibleVectorTypes(FromType, ToType) || 1780 (S.isLaxVectorConversion(FromType, ToType) && 1781 !ToType->hasAttr(attr::ArmMveStrictPolymorphism))) { 1782 if (S.getASTContext().getTargetInfo().getTriple().isPPC() && 1783 S.isLaxVectorConversion(FromType, ToType) && 1784 S.anyAltivecTypes(FromType, ToType) && 1785 !S.Context.areCompatibleVectorTypes(FromType, ToType) && 1786 !InOverloadResolution && !CStyle) { 1787 S.Diag(From->getBeginLoc(), diag::warn_deprecated_lax_vec_conv_all) 1788 << FromType << ToType; 1789 } 1790 ICK = ICK_Vector_Conversion; 1791 return true; 1792 } 1793 } 1794 1795 return false; 1796 } 1797 1798 static bool tryAtomicConversion(Sema &S, Expr *From, QualType ToType, 1799 bool InOverloadResolution, 1800 StandardConversionSequence &SCS, 1801 bool CStyle); 1802 1803 /// IsStandardConversion - Determines whether there is a standard 1804 /// conversion sequence (C++ [conv], C++ [over.ics.scs]) from the 1805 /// expression From to the type ToType. Standard conversion sequences 1806 /// only consider non-class types; for conversions that involve class 1807 /// types, use TryImplicitConversion. If a conversion exists, SCS will 1808 /// contain the standard conversion sequence required to perform this 1809 /// conversion and this routine will return true. Otherwise, this 1810 /// routine will return false and the value of SCS is unspecified. 1811 static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType, 1812 bool InOverloadResolution, 1813 StandardConversionSequence &SCS, 1814 bool CStyle, 1815 bool AllowObjCWritebackConversion) { 1816 QualType FromType = From->getType(); 1817 1818 // Standard conversions (C++ [conv]) 1819 SCS.setAsIdentityConversion(); 1820 SCS.IncompatibleObjC = false; 1821 SCS.setFromType(FromType); 1822 SCS.CopyConstructor = nullptr; 1823 1824 // There are no standard conversions for class types in C++, so 1825 // abort early. When overloading in C, however, we do permit them. 1826 if (S.getLangOpts().CPlusPlus && 1827 (FromType->isRecordType() || ToType->isRecordType())) 1828 return false; 1829 1830 // The first conversion can be an lvalue-to-rvalue conversion, 1831 // array-to-pointer conversion, or function-to-pointer conversion 1832 // (C++ 4p1). 1833 1834 if (FromType == S.Context.OverloadTy) { 1835 DeclAccessPair AccessPair; 1836 if (FunctionDecl *Fn 1837 = S.ResolveAddressOfOverloadedFunction(From, ToType, false, 1838 AccessPair)) { 1839 // We were able to resolve the address of the overloaded function, 1840 // so we can convert to the type of that function. 1841 FromType = Fn->getType(); 1842 SCS.setFromType(FromType); 1843 1844 // we can sometimes resolve &foo<int> regardless of ToType, so check 1845 // if the type matches (identity) or we are converting to bool 1846 if (!S.Context.hasSameUnqualifiedType( 1847 S.ExtractUnqualifiedFunctionType(ToType), FromType)) { 1848 QualType resultTy; 1849 // if the function type matches except for [[noreturn]], it's ok 1850 if (!S.IsFunctionConversion(FromType, 1851 S.ExtractUnqualifiedFunctionType(ToType), resultTy)) 1852 // otherwise, only a boolean conversion is standard 1853 if (!ToType->isBooleanType()) 1854 return false; 1855 } 1856 1857 // Check if the "from" expression is taking the address of an overloaded 1858 // function and recompute the FromType accordingly. Take advantage of the 1859 // fact that non-static member functions *must* have such an address-of 1860 // expression. 1861 CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn); 1862 if (Method && !Method->isStatic()) { 1863 assert(isa<UnaryOperator>(From->IgnoreParens()) && 1864 "Non-unary operator on non-static member address"); 1865 assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode() 1866 == UO_AddrOf && 1867 "Non-address-of operator on non-static member address"); 1868 const Type *ClassType 1869 = S.Context.getTypeDeclType(Method->getParent()).getTypePtr(); 1870 FromType = S.Context.getMemberPointerType(FromType, ClassType); 1871 } else if (isa<UnaryOperator>(From->IgnoreParens())) { 1872 assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode() == 1873 UO_AddrOf && 1874 "Non-address-of operator for overloaded function expression"); 1875 FromType = S.Context.getPointerType(FromType); 1876 } 1877 } else { 1878 return false; 1879 } 1880 } 1881 // Lvalue-to-rvalue conversion (C++11 4.1): 1882 // A glvalue (3.10) of a non-function, non-array type T can 1883 // be converted to a prvalue. 1884 bool argIsLValue = From->isGLValue(); 1885 if (argIsLValue && 1886 !FromType->isFunctionType() && !FromType->isArrayType() && 1887 S.Context.getCanonicalType(FromType) != S.Context.OverloadTy) { 1888 SCS.First = ICK_Lvalue_To_Rvalue; 1889 1890 // C11 6.3.2.1p2: 1891 // ... if the lvalue has atomic type, the value has the non-atomic version 1892 // of the type of the lvalue ... 1893 if (const AtomicType *Atomic = FromType->getAs<AtomicType>()) 1894 FromType = Atomic->getValueType(); 1895 1896 // If T is a non-class type, the type of the rvalue is the 1897 // cv-unqualified version of T. Otherwise, the type of the rvalue 1898 // is T (C++ 4.1p1). C++ can't get here with class types; in C, we 1899 // just strip the qualifiers because they don't matter. 1900 FromType = FromType.getUnqualifiedType(); 1901 } else if (FromType->isArrayType()) { 1902 // Array-to-pointer conversion (C++ 4.2) 1903 SCS.First = ICK_Array_To_Pointer; 1904 1905 // An lvalue or rvalue of type "array of N T" or "array of unknown 1906 // bound of T" can be converted to an rvalue of type "pointer to 1907 // T" (C++ 4.2p1). 1908 FromType = S.Context.getArrayDecayedType(FromType); 1909 1910 if (S.IsStringLiteralToNonConstPointerConversion(From, ToType)) { 1911 // This conversion is deprecated in C++03 (D.4) 1912 SCS.DeprecatedStringLiteralToCharPtr = true; 1913 1914 // For the purpose of ranking in overload resolution 1915 // (13.3.3.1.1), this conversion is considered an 1916 // array-to-pointer conversion followed by a qualification 1917 // conversion (4.4). (C++ 4.2p2) 1918 SCS.Second = ICK_Identity; 1919 SCS.Third = ICK_Qualification; 1920 SCS.QualificationIncludesObjCLifetime = false; 1921 SCS.setAllToTypes(FromType); 1922 return true; 1923 } 1924 } else if (FromType->isFunctionType() && argIsLValue) { 1925 // Function-to-pointer conversion (C++ 4.3). 1926 SCS.First = ICK_Function_To_Pointer; 1927 1928 if (auto *DRE = dyn_cast<DeclRefExpr>(From->IgnoreParenCasts())) 1929 if (auto *FD = dyn_cast<FunctionDecl>(DRE->getDecl())) 1930 if (!S.checkAddressOfFunctionIsAvailable(FD)) 1931 return false; 1932 1933 // An lvalue of function type T can be converted to an rvalue of 1934 // type "pointer to T." The result is a pointer to the 1935 // function. (C++ 4.3p1). 1936 FromType = S.Context.getPointerType(FromType); 1937 } else { 1938 // We don't require any conversions for the first step. 1939 SCS.First = ICK_Identity; 1940 } 1941 SCS.setToType(0, FromType); 1942 1943 // The second conversion can be an integral promotion, floating 1944 // point promotion, integral conversion, floating point conversion, 1945 // floating-integral conversion, pointer conversion, 1946 // pointer-to-member conversion, or boolean conversion (C++ 4p1). 1947 // For overloading in C, this can also be a "compatible-type" 1948 // conversion. 1949 bool IncompatibleObjC = false; 1950 ImplicitConversionKind SecondICK = ICK_Identity; 1951 if (S.Context.hasSameUnqualifiedType(FromType, ToType)) { 1952 // The unqualified versions of the types are the same: there's no 1953 // conversion to do. 1954 SCS.Second = ICK_Identity; 1955 } else if (S.IsIntegralPromotion(From, FromType, ToType)) { 1956 // Integral promotion (C++ 4.5). 1957 SCS.Second = ICK_Integral_Promotion; 1958 FromType = ToType.getUnqualifiedType(); 1959 } else if (S.IsFloatingPointPromotion(FromType, ToType)) { 1960 // Floating point promotion (C++ 4.6). 1961 SCS.Second = ICK_Floating_Promotion; 1962 FromType = ToType.getUnqualifiedType(); 1963 } else if (S.IsComplexPromotion(FromType, ToType)) { 1964 // Complex promotion (Clang extension) 1965 SCS.Second = ICK_Complex_Promotion; 1966 FromType = ToType.getUnqualifiedType(); 1967 } else if (ToType->isBooleanType() && 1968 (FromType->isArithmeticType() || 1969 FromType->isAnyPointerType() || 1970 FromType->isBlockPointerType() || 1971 FromType->isMemberPointerType())) { 1972 // Boolean conversions (C++ 4.12). 1973 SCS.Second = ICK_Boolean_Conversion; 1974 FromType = S.Context.BoolTy; 1975 } else if (FromType->isIntegralOrUnscopedEnumerationType() && 1976 ToType->isIntegralType(S.Context)) { 1977 // Integral conversions (C++ 4.7). 1978 SCS.Second = ICK_Integral_Conversion; 1979 FromType = ToType.getUnqualifiedType(); 1980 } else if (FromType->isAnyComplexType() && ToType->isAnyComplexType()) { 1981 // Complex conversions (C99 6.3.1.6) 1982 SCS.Second = ICK_Complex_Conversion; 1983 FromType = ToType.getUnqualifiedType(); 1984 } else if ((FromType->isAnyComplexType() && ToType->isArithmeticType()) || 1985 (ToType->isAnyComplexType() && FromType->isArithmeticType())) { 1986 // Complex-real conversions (C99 6.3.1.7) 1987 SCS.Second = ICK_Complex_Real; 1988 FromType = ToType.getUnqualifiedType(); 1989 } else if (FromType->isRealFloatingType() && ToType->isRealFloatingType()) { 1990 // FIXME: disable conversions between long double, __ibm128 and __float128 1991 // if their representation is different until there is back end support 1992 // We of course allow this conversion if long double is really double. 1993 1994 // Conversions between bfloat16 and float16 are currently not supported. 1995 if ((FromType->isBFloat16Type() && 1996 (ToType->isFloat16Type() || ToType->isHalfType())) || 1997 (ToType->isBFloat16Type() && 1998 (FromType->isFloat16Type() || FromType->isHalfType()))) 1999 return false; 2000 2001 // Conversions between IEEE-quad and IBM-extended semantics are not 2002 // permitted. 2003 const llvm::fltSemantics &FromSem = 2004 S.Context.getFloatTypeSemantics(FromType); 2005 const llvm::fltSemantics &ToSem = S.Context.getFloatTypeSemantics(ToType); 2006 if ((&FromSem == &llvm::APFloat::PPCDoubleDouble() && 2007 &ToSem == &llvm::APFloat::IEEEquad()) || 2008 (&FromSem == &llvm::APFloat::IEEEquad() && 2009 &ToSem == &llvm::APFloat::PPCDoubleDouble())) 2010 return false; 2011 2012 // Floating point conversions (C++ 4.8). 2013 SCS.Second = ICK_Floating_Conversion; 2014 FromType = ToType.getUnqualifiedType(); 2015 } else if ((FromType->isRealFloatingType() && 2016 ToType->isIntegralType(S.Context)) || 2017 (FromType->isIntegralOrUnscopedEnumerationType() && 2018 ToType->isRealFloatingType())) { 2019 2020 // Floating-integral conversions (C++ 4.9). 2021 SCS.Second = ICK_Floating_Integral; 2022 FromType = ToType.getUnqualifiedType(); 2023 } else if (S.IsBlockPointerConversion(FromType, ToType, FromType)) { 2024 SCS.Second = ICK_Block_Pointer_Conversion; 2025 } else if (AllowObjCWritebackConversion && 2026 S.isObjCWritebackConversion(FromType, ToType, FromType)) { 2027 SCS.Second = ICK_Writeback_Conversion; 2028 } else if (S.IsPointerConversion(From, FromType, ToType, InOverloadResolution, 2029 FromType, IncompatibleObjC)) { 2030 // Pointer conversions (C++ 4.10). 2031 SCS.Second = ICK_Pointer_Conversion; 2032 SCS.IncompatibleObjC = IncompatibleObjC; 2033 FromType = FromType.getUnqualifiedType(); 2034 } else if (S.IsMemberPointerConversion(From, FromType, ToType, 2035 InOverloadResolution, FromType)) { 2036 // Pointer to member conversions (4.11). 2037 SCS.Second = ICK_Pointer_Member; 2038 } else if (IsVectorConversion(S, FromType, ToType, SecondICK, From, 2039 InOverloadResolution, CStyle)) { 2040 SCS.Second = SecondICK; 2041 FromType = ToType.getUnqualifiedType(); 2042 } else if (!S.getLangOpts().CPlusPlus && 2043 S.Context.typesAreCompatible(ToType, FromType)) { 2044 // Compatible conversions (Clang extension for C function overloading) 2045 SCS.Second = ICK_Compatible_Conversion; 2046 FromType = ToType.getUnqualifiedType(); 2047 } else if (IsTransparentUnionStandardConversion(S, From, ToType, 2048 InOverloadResolution, 2049 SCS, CStyle)) { 2050 SCS.Second = ICK_TransparentUnionConversion; 2051 FromType = ToType; 2052 } else if (tryAtomicConversion(S, From, ToType, InOverloadResolution, SCS, 2053 CStyle)) { 2054 // tryAtomicConversion has updated the standard conversion sequence 2055 // appropriately. 2056 return true; 2057 } else if (ToType->isEventT() && 2058 From->isIntegerConstantExpr(S.getASTContext()) && 2059 From->EvaluateKnownConstInt(S.getASTContext()) == 0) { 2060 SCS.Second = ICK_Zero_Event_Conversion; 2061 FromType = ToType; 2062 } else if (ToType->isQueueT() && 2063 From->isIntegerConstantExpr(S.getASTContext()) && 2064 (From->EvaluateKnownConstInt(S.getASTContext()) == 0)) { 2065 SCS.Second = ICK_Zero_Queue_Conversion; 2066 FromType = ToType; 2067 } else if (ToType->isSamplerT() && 2068 From->isIntegerConstantExpr(S.getASTContext())) { 2069 SCS.Second = ICK_Compatible_Conversion; 2070 FromType = ToType; 2071 } else { 2072 // No second conversion required. 2073 SCS.Second = ICK_Identity; 2074 } 2075 SCS.setToType(1, FromType); 2076 2077 // The third conversion can be a function pointer conversion or a 2078 // qualification conversion (C++ [conv.fctptr], [conv.qual]). 2079 bool ObjCLifetimeConversion; 2080 if (S.IsFunctionConversion(FromType, ToType, FromType)) { 2081 // Function pointer conversions (removing 'noexcept') including removal of 2082 // 'noreturn' (Clang extension). 2083 SCS.Third = ICK_Function_Conversion; 2084 } else if (S.IsQualificationConversion(FromType, ToType, CStyle, 2085 ObjCLifetimeConversion)) { 2086 SCS.Third = ICK_Qualification; 2087 SCS.QualificationIncludesObjCLifetime = ObjCLifetimeConversion; 2088 FromType = ToType; 2089 } else { 2090 // No conversion required 2091 SCS.Third = ICK_Identity; 2092 } 2093 2094 // C++ [over.best.ics]p6: 2095 // [...] Any difference in top-level cv-qualification is 2096 // subsumed by the initialization itself and does not constitute 2097 // a conversion. [...] 2098 QualType CanonFrom = S.Context.getCanonicalType(FromType); 2099 QualType CanonTo = S.Context.getCanonicalType(ToType); 2100 if (CanonFrom.getLocalUnqualifiedType() 2101 == CanonTo.getLocalUnqualifiedType() && 2102 CanonFrom.getLocalQualifiers() != CanonTo.getLocalQualifiers()) { 2103 FromType = ToType; 2104 CanonFrom = CanonTo; 2105 } 2106 2107 SCS.setToType(2, FromType); 2108 2109 if (CanonFrom == CanonTo) 2110 return true; 2111 2112 // If we have not converted the argument type to the parameter type, 2113 // this is a bad conversion sequence, unless we're resolving an overload in C. 2114 if (S.getLangOpts().CPlusPlus || !InOverloadResolution) 2115 return false; 2116 2117 ExprResult ER = ExprResult{From}; 2118 Sema::AssignConvertType Conv = 2119 S.CheckSingleAssignmentConstraints(ToType, ER, 2120 /*Diagnose=*/false, 2121 /*DiagnoseCFAudited=*/false, 2122 /*ConvertRHS=*/false); 2123 ImplicitConversionKind SecondConv; 2124 switch (Conv) { 2125 case Sema::Compatible: 2126 SecondConv = ICK_C_Only_Conversion; 2127 break; 2128 // For our purposes, discarding qualifiers is just as bad as using an 2129 // incompatible pointer. Note that an IncompatiblePointer conversion can drop 2130 // qualifiers, as well. 2131 case Sema::CompatiblePointerDiscardsQualifiers: 2132 case Sema::IncompatiblePointer: 2133 case Sema::IncompatiblePointerSign: 2134 SecondConv = ICK_Incompatible_Pointer_Conversion; 2135 break; 2136 default: 2137 return false; 2138 } 2139 2140 // First can only be an lvalue conversion, so we pretend that this was the 2141 // second conversion. First should already be valid from earlier in the 2142 // function. 2143 SCS.Second = SecondConv; 2144 SCS.setToType(1, ToType); 2145 2146 // Third is Identity, because Second should rank us worse than any other 2147 // conversion. This could also be ICK_Qualification, but it's simpler to just 2148 // lump everything in with the second conversion, and we don't gain anything 2149 // from making this ICK_Qualification. 2150 SCS.Third = ICK_Identity; 2151 SCS.setToType(2, ToType); 2152 return true; 2153 } 2154 2155 static bool 2156 IsTransparentUnionStandardConversion(Sema &S, Expr* From, 2157 QualType &ToType, 2158 bool InOverloadResolution, 2159 StandardConversionSequence &SCS, 2160 bool CStyle) { 2161 2162 const RecordType *UT = ToType->getAsUnionType(); 2163 if (!UT || !UT->getDecl()->hasAttr<TransparentUnionAttr>()) 2164 return false; 2165 // The field to initialize within the transparent union. 2166 RecordDecl *UD = UT->getDecl(); 2167 // It's compatible if the expression matches any of the fields. 2168 for (const auto *it : UD->fields()) { 2169 if (IsStandardConversion(S, From, it->getType(), InOverloadResolution, SCS, 2170 CStyle, /*AllowObjCWritebackConversion=*/false)) { 2171 ToType = it->getType(); 2172 return true; 2173 } 2174 } 2175 return false; 2176 } 2177 2178 /// IsIntegralPromotion - Determines whether the conversion from the 2179 /// expression From (whose potentially-adjusted type is FromType) to 2180 /// ToType is an integral promotion (C++ 4.5). If so, returns true and 2181 /// sets PromotedType to the promoted type. 2182 bool Sema::IsIntegralPromotion(Expr *From, QualType FromType, QualType ToType) { 2183 const BuiltinType *To = ToType->getAs<BuiltinType>(); 2184 // All integers are built-in. 2185 if (!To) { 2186 return false; 2187 } 2188 2189 // An rvalue of type char, signed char, unsigned char, short int, or 2190 // unsigned short int can be converted to an rvalue of type int if 2191 // int can represent all the values of the source type; otherwise, 2192 // the source rvalue can be converted to an rvalue of type unsigned 2193 // int (C++ 4.5p1). 2194 if (Context.isPromotableIntegerType(FromType) && !FromType->isBooleanType() && 2195 !FromType->isEnumeralType()) { 2196 if ( // We can promote any signed, promotable integer type to an int 2197 (FromType->isSignedIntegerType() || 2198 // We can promote any unsigned integer type whose size is 2199 // less than int to an int. 2200 Context.getTypeSize(FromType) < Context.getTypeSize(ToType))) { 2201 return To->getKind() == BuiltinType::Int; 2202 } 2203 2204 return To->getKind() == BuiltinType::UInt; 2205 } 2206 2207 // C++11 [conv.prom]p3: 2208 // A prvalue of an unscoped enumeration type whose underlying type is not 2209 // fixed (7.2) can be converted to an rvalue a prvalue of the first of the 2210 // following types that can represent all the values of the enumeration 2211 // (i.e., the values in the range bmin to bmax as described in 7.2): int, 2212 // unsigned int, long int, unsigned long int, long long int, or unsigned 2213 // long long int. If none of the types in that list can represent all the 2214 // values of the enumeration, an rvalue a prvalue of an unscoped enumeration 2215 // type can be converted to an rvalue a prvalue of the extended integer type 2216 // with lowest integer conversion rank (4.13) greater than the rank of long 2217 // long in which all the values of the enumeration can be represented. If 2218 // there are two such extended types, the signed one is chosen. 2219 // C++11 [conv.prom]p4: 2220 // A prvalue of an unscoped enumeration type whose underlying type is fixed 2221 // can be converted to a prvalue of its underlying type. Moreover, if 2222 // integral promotion can be applied to its underlying type, a prvalue of an 2223 // unscoped enumeration type whose underlying type is fixed can also be 2224 // converted to a prvalue of the promoted underlying type. 2225 if (const EnumType *FromEnumType = FromType->getAs<EnumType>()) { 2226 // C++0x 7.2p9: Note that this implicit enum to int conversion is not 2227 // provided for a scoped enumeration. 2228 if (FromEnumType->getDecl()->isScoped()) 2229 return false; 2230 2231 // We can perform an integral promotion to the underlying type of the enum, 2232 // even if that's not the promoted type. Note that the check for promoting 2233 // the underlying type is based on the type alone, and does not consider 2234 // the bitfield-ness of the actual source expression. 2235 if (FromEnumType->getDecl()->isFixed()) { 2236 QualType Underlying = FromEnumType->getDecl()->getIntegerType(); 2237 return Context.hasSameUnqualifiedType(Underlying, ToType) || 2238 IsIntegralPromotion(nullptr, Underlying, ToType); 2239 } 2240 2241 // We have already pre-calculated the promotion type, so this is trivial. 2242 if (ToType->isIntegerType() && 2243 isCompleteType(From->getBeginLoc(), FromType)) 2244 return Context.hasSameUnqualifiedType( 2245 ToType, FromEnumType->getDecl()->getPromotionType()); 2246 2247 // C++ [conv.prom]p5: 2248 // If the bit-field has an enumerated type, it is treated as any other 2249 // value of that type for promotion purposes. 2250 // 2251 // ... so do not fall through into the bit-field checks below in C++. 2252 if (getLangOpts().CPlusPlus) 2253 return false; 2254 } 2255 2256 // C++0x [conv.prom]p2: 2257 // A prvalue of type char16_t, char32_t, or wchar_t (3.9.1) can be converted 2258 // to an rvalue a prvalue of the first of the following types that can 2259 // represent all the values of its underlying type: int, unsigned int, 2260 // long int, unsigned long int, long long int, or unsigned long long int. 2261 // If none of the types in that list can represent all the values of its 2262 // underlying type, an rvalue a prvalue of type char16_t, char32_t, 2263 // or wchar_t can be converted to an rvalue a prvalue of its underlying 2264 // type. 2265 if (FromType->isAnyCharacterType() && !FromType->isCharType() && 2266 ToType->isIntegerType()) { 2267 // Determine whether the type we're converting from is signed or 2268 // unsigned. 2269 bool FromIsSigned = FromType->isSignedIntegerType(); 2270 uint64_t FromSize = Context.getTypeSize(FromType); 2271 2272 // The types we'll try to promote to, in the appropriate 2273 // order. Try each of these types. 2274 QualType PromoteTypes[6] = { 2275 Context.IntTy, Context.UnsignedIntTy, 2276 Context.LongTy, Context.UnsignedLongTy , 2277 Context.LongLongTy, Context.UnsignedLongLongTy 2278 }; 2279 for (int Idx = 0; Idx < 6; ++Idx) { 2280 uint64_t ToSize = Context.getTypeSize(PromoteTypes[Idx]); 2281 if (FromSize < ToSize || 2282 (FromSize == ToSize && 2283 FromIsSigned == PromoteTypes[Idx]->isSignedIntegerType())) { 2284 // We found the type that we can promote to. If this is the 2285 // type we wanted, we have a promotion. Otherwise, no 2286 // promotion. 2287 return Context.hasSameUnqualifiedType(ToType, PromoteTypes[Idx]); 2288 } 2289 } 2290 } 2291 2292 // An rvalue for an integral bit-field (9.6) can be converted to an 2293 // rvalue of type int if int can represent all the values of the 2294 // bit-field; otherwise, it can be converted to unsigned int if 2295 // unsigned int can represent all the values of the bit-field. If 2296 // the bit-field is larger yet, no integral promotion applies to 2297 // it. If the bit-field has an enumerated type, it is treated as any 2298 // other value of that type for promotion purposes (C++ 4.5p3). 2299 // FIXME: We should delay checking of bit-fields until we actually perform the 2300 // conversion. 2301 // 2302 // FIXME: In C, only bit-fields of types _Bool, int, or unsigned int may be 2303 // promoted, per C11 6.3.1.1/2. We promote all bit-fields (including enum 2304 // bit-fields and those whose underlying type is larger than int) for GCC 2305 // compatibility. 2306 if (From) { 2307 if (FieldDecl *MemberDecl = From->getSourceBitField()) { 2308 std::optional<llvm::APSInt> BitWidth; 2309 if (FromType->isIntegralType(Context) && 2310 (BitWidth = 2311 MemberDecl->getBitWidth()->getIntegerConstantExpr(Context))) { 2312 llvm::APSInt ToSize(BitWidth->getBitWidth(), BitWidth->isUnsigned()); 2313 ToSize = Context.getTypeSize(ToType); 2314 2315 // Are we promoting to an int from a bitfield that fits in an int? 2316 if (*BitWidth < ToSize || 2317 (FromType->isSignedIntegerType() && *BitWidth <= ToSize)) { 2318 return To->getKind() == BuiltinType::Int; 2319 } 2320 2321 // Are we promoting to an unsigned int from an unsigned bitfield 2322 // that fits into an unsigned int? 2323 if (FromType->isUnsignedIntegerType() && *BitWidth <= ToSize) { 2324 return To->getKind() == BuiltinType::UInt; 2325 } 2326 2327 return false; 2328 } 2329 } 2330 } 2331 2332 // An rvalue of type bool can be converted to an rvalue of type int, 2333 // with false becoming zero and true becoming one (C++ 4.5p4). 2334 if (FromType->isBooleanType() && To->getKind() == BuiltinType::Int) { 2335 return true; 2336 } 2337 2338 return false; 2339 } 2340 2341 /// IsFloatingPointPromotion - Determines whether the conversion from 2342 /// FromType to ToType is a floating point promotion (C++ 4.6). If so, 2343 /// returns true and sets PromotedType to the promoted type. 2344 bool Sema::IsFloatingPointPromotion(QualType FromType, QualType ToType) { 2345 if (const BuiltinType *FromBuiltin = FromType->getAs<BuiltinType>()) 2346 if (const BuiltinType *ToBuiltin = ToType->getAs<BuiltinType>()) { 2347 /// An rvalue of type float can be converted to an rvalue of type 2348 /// double. (C++ 4.6p1). 2349 if (FromBuiltin->getKind() == BuiltinType::Float && 2350 ToBuiltin->getKind() == BuiltinType::Double) 2351 return true; 2352 2353 // C99 6.3.1.5p1: 2354 // When a float is promoted to double or long double, or a 2355 // double is promoted to long double [...]. 2356 if (!getLangOpts().CPlusPlus && 2357 (FromBuiltin->getKind() == BuiltinType::Float || 2358 FromBuiltin->getKind() == BuiltinType::Double) && 2359 (ToBuiltin->getKind() == BuiltinType::LongDouble || 2360 ToBuiltin->getKind() == BuiltinType::Float128 || 2361 ToBuiltin->getKind() == BuiltinType::Ibm128)) 2362 return true; 2363 2364 // Half can be promoted to float. 2365 if (!getLangOpts().NativeHalfType && 2366 FromBuiltin->getKind() == BuiltinType::Half && 2367 ToBuiltin->getKind() == BuiltinType::Float) 2368 return true; 2369 } 2370 2371 return false; 2372 } 2373 2374 /// Determine if a conversion is a complex promotion. 2375 /// 2376 /// A complex promotion is defined as a complex -> complex conversion 2377 /// where the conversion between the underlying real types is a 2378 /// floating-point or integral promotion. 2379 bool Sema::IsComplexPromotion(QualType FromType, QualType ToType) { 2380 const ComplexType *FromComplex = FromType->getAs<ComplexType>(); 2381 if (!FromComplex) 2382 return false; 2383 2384 const ComplexType *ToComplex = ToType->getAs<ComplexType>(); 2385 if (!ToComplex) 2386 return false; 2387 2388 return IsFloatingPointPromotion(FromComplex->getElementType(), 2389 ToComplex->getElementType()) || 2390 IsIntegralPromotion(nullptr, FromComplex->getElementType(), 2391 ToComplex->getElementType()); 2392 } 2393 2394 /// BuildSimilarlyQualifiedPointerType - In a pointer conversion from 2395 /// the pointer type FromPtr to a pointer to type ToPointee, with the 2396 /// same type qualifiers as FromPtr has on its pointee type. ToType, 2397 /// if non-empty, will be a pointer to ToType that may or may not have 2398 /// the right set of qualifiers on its pointee. 2399 /// 2400 static QualType 2401 BuildSimilarlyQualifiedPointerType(const Type *FromPtr, 2402 QualType ToPointee, QualType ToType, 2403 ASTContext &Context, 2404 bool StripObjCLifetime = false) { 2405 assert((FromPtr->getTypeClass() == Type::Pointer || 2406 FromPtr->getTypeClass() == Type::ObjCObjectPointer) && 2407 "Invalid similarly-qualified pointer type"); 2408 2409 /// Conversions to 'id' subsume cv-qualifier conversions. 2410 if (ToType->isObjCIdType() || ToType->isObjCQualifiedIdType()) 2411 return ToType.getUnqualifiedType(); 2412 2413 QualType CanonFromPointee 2414 = Context.getCanonicalType(FromPtr->getPointeeType()); 2415 QualType CanonToPointee = Context.getCanonicalType(ToPointee); 2416 Qualifiers Quals = CanonFromPointee.getQualifiers(); 2417 2418 if (StripObjCLifetime) 2419 Quals.removeObjCLifetime(); 2420 2421 // Exact qualifier match -> return the pointer type we're converting to. 2422 if (CanonToPointee.getLocalQualifiers() == Quals) { 2423 // ToType is exactly what we need. Return it. 2424 if (!ToType.isNull()) 2425 return ToType.getUnqualifiedType(); 2426 2427 // Build a pointer to ToPointee. It has the right qualifiers 2428 // already. 2429 if (isa<ObjCObjectPointerType>(ToType)) 2430 return Context.getObjCObjectPointerType(ToPointee); 2431 return Context.getPointerType(ToPointee); 2432 } 2433 2434 // Just build a canonical type that has the right qualifiers. 2435 QualType QualifiedCanonToPointee 2436 = Context.getQualifiedType(CanonToPointee.getLocalUnqualifiedType(), Quals); 2437 2438 if (isa<ObjCObjectPointerType>(ToType)) 2439 return Context.getObjCObjectPointerType(QualifiedCanonToPointee); 2440 return Context.getPointerType(QualifiedCanonToPointee); 2441 } 2442 2443 static bool isNullPointerConstantForConversion(Expr *Expr, 2444 bool InOverloadResolution, 2445 ASTContext &Context) { 2446 // Handle value-dependent integral null pointer constants correctly. 2447 // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#903 2448 if (Expr->isValueDependent() && !Expr->isTypeDependent() && 2449 Expr->getType()->isIntegerType() && !Expr->getType()->isEnumeralType()) 2450 return !InOverloadResolution; 2451 2452 return Expr->isNullPointerConstant(Context, 2453 InOverloadResolution? Expr::NPC_ValueDependentIsNotNull 2454 : Expr::NPC_ValueDependentIsNull); 2455 } 2456 2457 /// IsPointerConversion - Determines whether the conversion of the 2458 /// expression From, which has the (possibly adjusted) type FromType, 2459 /// can be converted to the type ToType via a pointer conversion (C++ 2460 /// 4.10). If so, returns true and places the converted type (that 2461 /// might differ from ToType in its cv-qualifiers at some level) into 2462 /// ConvertedType. 2463 /// 2464 /// This routine also supports conversions to and from block pointers 2465 /// and conversions with Objective-C's 'id', 'id<protocols...>', and 2466 /// pointers to interfaces. FIXME: Once we've determined the 2467 /// appropriate overloading rules for Objective-C, we may want to 2468 /// split the Objective-C checks into a different routine; however, 2469 /// GCC seems to consider all of these conversions to be pointer 2470 /// conversions, so for now they live here. IncompatibleObjC will be 2471 /// set if the conversion is an allowed Objective-C conversion that 2472 /// should result in a warning. 2473 bool Sema::IsPointerConversion(Expr *From, QualType FromType, QualType ToType, 2474 bool InOverloadResolution, 2475 QualType& ConvertedType, 2476 bool &IncompatibleObjC) { 2477 IncompatibleObjC = false; 2478 if (isObjCPointerConversion(FromType, ToType, ConvertedType, 2479 IncompatibleObjC)) 2480 return true; 2481 2482 // Conversion from a null pointer constant to any Objective-C pointer type. 2483 if (ToType->isObjCObjectPointerType() && 2484 isNullPointerConstantForConversion(From, InOverloadResolution, Context)) { 2485 ConvertedType = ToType; 2486 return true; 2487 } 2488 2489 // Blocks: Block pointers can be converted to void*. 2490 if (FromType->isBlockPointerType() && ToType->isPointerType() && 2491 ToType->castAs<PointerType>()->getPointeeType()->isVoidType()) { 2492 ConvertedType = ToType; 2493 return true; 2494 } 2495 // Blocks: A null pointer constant can be converted to a block 2496 // pointer type. 2497 if (ToType->isBlockPointerType() && 2498 isNullPointerConstantForConversion(From, InOverloadResolution, Context)) { 2499 ConvertedType = ToType; 2500 return true; 2501 } 2502 2503 // If the left-hand-side is nullptr_t, the right side can be a null 2504 // pointer constant. 2505 if (ToType->isNullPtrType() && 2506 isNullPointerConstantForConversion(From, InOverloadResolution, Context)) { 2507 ConvertedType = ToType; 2508 return true; 2509 } 2510 2511 const PointerType* ToTypePtr = ToType->getAs<PointerType>(); 2512 if (!ToTypePtr) 2513 return false; 2514 2515 // A null pointer constant can be converted to a pointer type (C++ 4.10p1). 2516 if (isNullPointerConstantForConversion(From, InOverloadResolution, Context)) { 2517 ConvertedType = ToType; 2518 return true; 2519 } 2520 2521 // Beyond this point, both types need to be pointers 2522 // , including objective-c pointers. 2523 QualType ToPointeeType = ToTypePtr->getPointeeType(); 2524 if (FromType->isObjCObjectPointerType() && ToPointeeType->isVoidType() && 2525 !getLangOpts().ObjCAutoRefCount) { 2526 ConvertedType = BuildSimilarlyQualifiedPointerType( 2527 FromType->castAs<ObjCObjectPointerType>(), ToPointeeType, ToType, 2528 Context); 2529 return true; 2530 } 2531 const PointerType *FromTypePtr = FromType->getAs<PointerType>(); 2532 if (!FromTypePtr) 2533 return false; 2534 2535 QualType FromPointeeType = FromTypePtr->getPointeeType(); 2536 2537 // If the unqualified pointee types are the same, this can't be a 2538 // pointer conversion, so don't do all of the work below. 2539 if (Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType)) 2540 return false; 2541 2542 // An rvalue of type "pointer to cv T," where T is an object type, 2543 // can be converted to an rvalue of type "pointer to cv void" (C++ 2544 // 4.10p2). 2545 if (FromPointeeType->isIncompleteOrObjectType() && 2546 ToPointeeType->isVoidType()) { 2547 ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr, 2548 ToPointeeType, 2549 ToType, Context, 2550 /*StripObjCLifetime=*/true); 2551 return true; 2552 } 2553 2554 // MSVC allows implicit function to void* type conversion. 2555 if (getLangOpts().MSVCCompat && FromPointeeType->isFunctionType() && 2556 ToPointeeType->isVoidType()) { 2557 ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr, 2558 ToPointeeType, 2559 ToType, Context); 2560 return true; 2561 } 2562 2563 // When we're overloading in C, we allow a special kind of pointer 2564 // conversion for compatible-but-not-identical pointee types. 2565 if (!getLangOpts().CPlusPlus && 2566 Context.typesAreCompatible(FromPointeeType, ToPointeeType)) { 2567 ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr, 2568 ToPointeeType, 2569 ToType, Context); 2570 return true; 2571 } 2572 2573 // C++ [conv.ptr]p3: 2574 // 2575 // An rvalue of type "pointer to cv D," where D is a class type, 2576 // can be converted to an rvalue of type "pointer to cv B," where 2577 // B is a base class (clause 10) of D. If B is an inaccessible 2578 // (clause 11) or ambiguous (10.2) base class of D, a program that 2579 // necessitates this conversion is ill-formed. The result of the 2580 // conversion is a pointer to the base class sub-object of the 2581 // derived class object. The null pointer value is converted to 2582 // the null pointer value of the destination type. 2583 // 2584 // Note that we do not check for ambiguity or inaccessibility 2585 // here. That is handled by CheckPointerConversion. 2586 if (getLangOpts().CPlusPlus && FromPointeeType->isRecordType() && 2587 ToPointeeType->isRecordType() && 2588 !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType) && 2589 IsDerivedFrom(From->getBeginLoc(), FromPointeeType, ToPointeeType)) { 2590 ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr, 2591 ToPointeeType, 2592 ToType, Context); 2593 return true; 2594 } 2595 2596 if (FromPointeeType->isVectorType() && ToPointeeType->isVectorType() && 2597 Context.areCompatibleVectorTypes(FromPointeeType, ToPointeeType)) { 2598 ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr, 2599 ToPointeeType, 2600 ToType, Context); 2601 return true; 2602 } 2603 2604 return false; 2605 } 2606 2607 /// Adopt the given qualifiers for the given type. 2608 static QualType AdoptQualifiers(ASTContext &Context, QualType T, Qualifiers Qs){ 2609 Qualifiers TQs = T.getQualifiers(); 2610 2611 // Check whether qualifiers already match. 2612 if (TQs == Qs) 2613 return T; 2614 2615 if (Qs.compatiblyIncludes(TQs)) 2616 return Context.getQualifiedType(T, Qs); 2617 2618 return Context.getQualifiedType(T.getUnqualifiedType(), Qs); 2619 } 2620 2621 /// isObjCPointerConversion - Determines whether this is an 2622 /// Objective-C pointer conversion. Subroutine of IsPointerConversion, 2623 /// with the same arguments and return values. 2624 bool Sema::isObjCPointerConversion(QualType FromType, QualType ToType, 2625 QualType& ConvertedType, 2626 bool &IncompatibleObjC) { 2627 if (!getLangOpts().ObjC) 2628 return false; 2629 2630 // The set of qualifiers on the type we're converting from. 2631 Qualifiers FromQualifiers = FromType.getQualifiers(); 2632 2633 // First, we handle all conversions on ObjC object pointer types. 2634 const ObjCObjectPointerType* ToObjCPtr = 2635 ToType->getAs<ObjCObjectPointerType>(); 2636 const ObjCObjectPointerType *FromObjCPtr = 2637 FromType->getAs<ObjCObjectPointerType>(); 2638 2639 if (ToObjCPtr && FromObjCPtr) { 2640 // If the pointee types are the same (ignoring qualifications), 2641 // then this is not a pointer conversion. 2642 if (Context.hasSameUnqualifiedType(ToObjCPtr->getPointeeType(), 2643 FromObjCPtr->getPointeeType())) 2644 return false; 2645 2646 // Conversion between Objective-C pointers. 2647 if (Context.canAssignObjCInterfaces(ToObjCPtr, FromObjCPtr)) { 2648 const ObjCInterfaceType* LHS = ToObjCPtr->getInterfaceType(); 2649 const ObjCInterfaceType* RHS = FromObjCPtr->getInterfaceType(); 2650 if (getLangOpts().CPlusPlus && LHS && RHS && 2651 !ToObjCPtr->getPointeeType().isAtLeastAsQualifiedAs( 2652 FromObjCPtr->getPointeeType())) 2653 return false; 2654 ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr, 2655 ToObjCPtr->getPointeeType(), 2656 ToType, Context); 2657 ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers); 2658 return true; 2659 } 2660 2661 if (Context.canAssignObjCInterfaces(FromObjCPtr, ToObjCPtr)) { 2662 // Okay: this is some kind of implicit downcast of Objective-C 2663 // interfaces, which is permitted. However, we're going to 2664 // complain about it. 2665 IncompatibleObjC = true; 2666 ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr, 2667 ToObjCPtr->getPointeeType(), 2668 ToType, Context); 2669 ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers); 2670 return true; 2671 } 2672 } 2673 // Beyond this point, both types need to be C pointers or block pointers. 2674 QualType ToPointeeType; 2675 if (const PointerType *ToCPtr = ToType->getAs<PointerType>()) 2676 ToPointeeType = ToCPtr->getPointeeType(); 2677 else if (const BlockPointerType *ToBlockPtr = 2678 ToType->getAs<BlockPointerType>()) { 2679 // Objective C++: We're able to convert from a pointer to any object 2680 // to a block pointer type. 2681 if (FromObjCPtr && FromObjCPtr->isObjCBuiltinType()) { 2682 ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers); 2683 return true; 2684 } 2685 ToPointeeType = ToBlockPtr->getPointeeType(); 2686 } 2687 else if (FromType->getAs<BlockPointerType>() && 2688 ToObjCPtr && ToObjCPtr->isObjCBuiltinType()) { 2689 // Objective C++: We're able to convert from a block pointer type to a 2690 // pointer to any object. 2691 ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers); 2692 return true; 2693 } 2694 else 2695 return false; 2696 2697 QualType FromPointeeType; 2698 if (const PointerType *FromCPtr = FromType->getAs<PointerType>()) 2699 FromPointeeType = FromCPtr->getPointeeType(); 2700 else if (const BlockPointerType *FromBlockPtr = 2701 FromType->getAs<BlockPointerType>()) 2702 FromPointeeType = FromBlockPtr->getPointeeType(); 2703 else 2704 return false; 2705 2706 // If we have pointers to pointers, recursively check whether this 2707 // is an Objective-C conversion. 2708 if (FromPointeeType->isPointerType() && ToPointeeType->isPointerType() && 2709 isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType, 2710 IncompatibleObjC)) { 2711 // We always complain about this conversion. 2712 IncompatibleObjC = true; 2713 ConvertedType = Context.getPointerType(ConvertedType); 2714 ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers); 2715 return true; 2716 } 2717 // Allow conversion of pointee being objective-c pointer to another one; 2718 // as in I* to id. 2719 if (FromPointeeType->getAs<ObjCObjectPointerType>() && 2720 ToPointeeType->getAs<ObjCObjectPointerType>() && 2721 isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType, 2722 IncompatibleObjC)) { 2723 2724 ConvertedType = Context.getPointerType(ConvertedType); 2725 ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers); 2726 return true; 2727 } 2728 2729 // If we have pointers to functions or blocks, check whether the only 2730 // differences in the argument and result types are in Objective-C 2731 // pointer conversions. If so, we permit the conversion (but 2732 // complain about it). 2733 const FunctionProtoType *FromFunctionType 2734 = FromPointeeType->getAs<FunctionProtoType>(); 2735 const FunctionProtoType *ToFunctionType 2736 = ToPointeeType->getAs<FunctionProtoType>(); 2737 if (FromFunctionType && ToFunctionType) { 2738 // If the function types are exactly the same, this isn't an 2739 // Objective-C pointer conversion. 2740 if (Context.getCanonicalType(FromPointeeType) 2741 == Context.getCanonicalType(ToPointeeType)) 2742 return false; 2743 2744 // Perform the quick checks that will tell us whether these 2745 // function types are obviously different. 2746 if (FromFunctionType->getNumParams() != ToFunctionType->getNumParams() || 2747 FromFunctionType->isVariadic() != ToFunctionType->isVariadic() || 2748 FromFunctionType->getMethodQuals() != ToFunctionType->getMethodQuals()) 2749 return false; 2750 2751 bool HasObjCConversion = false; 2752 if (Context.getCanonicalType(FromFunctionType->getReturnType()) == 2753 Context.getCanonicalType(ToFunctionType->getReturnType())) { 2754 // Okay, the types match exactly. Nothing to do. 2755 } else if (isObjCPointerConversion(FromFunctionType->getReturnType(), 2756 ToFunctionType->getReturnType(), 2757 ConvertedType, IncompatibleObjC)) { 2758 // Okay, we have an Objective-C pointer conversion. 2759 HasObjCConversion = true; 2760 } else { 2761 // Function types are too different. Abort. 2762 return false; 2763 } 2764 2765 // Check argument types. 2766 for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumParams(); 2767 ArgIdx != NumArgs; ++ArgIdx) { 2768 QualType FromArgType = FromFunctionType->getParamType(ArgIdx); 2769 QualType ToArgType = ToFunctionType->getParamType(ArgIdx); 2770 if (Context.getCanonicalType(FromArgType) 2771 == Context.getCanonicalType(ToArgType)) { 2772 // Okay, the types match exactly. Nothing to do. 2773 } else if (isObjCPointerConversion(FromArgType, ToArgType, 2774 ConvertedType, IncompatibleObjC)) { 2775 // Okay, we have an Objective-C pointer conversion. 2776 HasObjCConversion = true; 2777 } else { 2778 // Argument types are too different. Abort. 2779 return false; 2780 } 2781 } 2782 2783 if (HasObjCConversion) { 2784 // We had an Objective-C conversion. Allow this pointer 2785 // conversion, but complain about it. 2786 ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers); 2787 IncompatibleObjC = true; 2788 return true; 2789 } 2790 } 2791 2792 return false; 2793 } 2794 2795 /// Determine whether this is an Objective-C writeback conversion, 2796 /// used for parameter passing when performing automatic reference counting. 2797 /// 2798 /// \param FromType The type we're converting form. 2799 /// 2800 /// \param ToType The type we're converting to. 2801 /// 2802 /// \param ConvertedType The type that will be produced after applying 2803 /// this conversion. 2804 bool Sema::isObjCWritebackConversion(QualType FromType, QualType ToType, 2805 QualType &ConvertedType) { 2806 if (!getLangOpts().ObjCAutoRefCount || 2807 Context.hasSameUnqualifiedType(FromType, ToType)) 2808 return false; 2809 2810 // Parameter must be a pointer to __autoreleasing (with no other qualifiers). 2811 QualType ToPointee; 2812 if (const PointerType *ToPointer = ToType->getAs<PointerType>()) 2813 ToPointee = ToPointer->getPointeeType(); 2814 else 2815 return false; 2816 2817 Qualifiers ToQuals = ToPointee.getQualifiers(); 2818 if (!ToPointee->isObjCLifetimeType() || 2819 ToQuals.getObjCLifetime() != Qualifiers::OCL_Autoreleasing || 2820 !ToQuals.withoutObjCLifetime().empty()) 2821 return false; 2822 2823 // Argument must be a pointer to __strong to __weak. 2824 QualType FromPointee; 2825 if (const PointerType *FromPointer = FromType->getAs<PointerType>()) 2826 FromPointee = FromPointer->getPointeeType(); 2827 else 2828 return false; 2829 2830 Qualifiers FromQuals = FromPointee.getQualifiers(); 2831 if (!FromPointee->isObjCLifetimeType() || 2832 (FromQuals.getObjCLifetime() != Qualifiers::OCL_Strong && 2833 FromQuals.getObjCLifetime() != Qualifiers::OCL_Weak)) 2834 return false; 2835 2836 // Make sure that we have compatible qualifiers. 2837 FromQuals.setObjCLifetime(Qualifiers::OCL_Autoreleasing); 2838 if (!ToQuals.compatiblyIncludes(FromQuals)) 2839 return false; 2840 2841 // Remove qualifiers from the pointee type we're converting from; they 2842 // aren't used in the compatibility check belong, and we'll be adding back 2843 // qualifiers (with __autoreleasing) if the compatibility check succeeds. 2844 FromPointee = FromPointee.getUnqualifiedType(); 2845 2846 // The unqualified form of the pointee types must be compatible. 2847 ToPointee = ToPointee.getUnqualifiedType(); 2848 bool IncompatibleObjC; 2849 if (Context.typesAreCompatible(FromPointee, ToPointee)) 2850 FromPointee = ToPointee; 2851 else if (!isObjCPointerConversion(FromPointee, ToPointee, FromPointee, 2852 IncompatibleObjC)) 2853 return false; 2854 2855 /// Construct the type we're converting to, which is a pointer to 2856 /// __autoreleasing pointee. 2857 FromPointee = Context.getQualifiedType(FromPointee, FromQuals); 2858 ConvertedType = Context.getPointerType(FromPointee); 2859 return true; 2860 } 2861 2862 bool Sema::IsBlockPointerConversion(QualType FromType, QualType ToType, 2863 QualType& ConvertedType) { 2864 QualType ToPointeeType; 2865 if (const BlockPointerType *ToBlockPtr = 2866 ToType->getAs<BlockPointerType>()) 2867 ToPointeeType = ToBlockPtr->getPointeeType(); 2868 else 2869 return false; 2870 2871 QualType FromPointeeType; 2872 if (const BlockPointerType *FromBlockPtr = 2873 FromType->getAs<BlockPointerType>()) 2874 FromPointeeType = FromBlockPtr->getPointeeType(); 2875 else 2876 return false; 2877 // We have pointer to blocks, check whether the only 2878 // differences in the argument and result types are in Objective-C 2879 // pointer conversions. If so, we permit the conversion. 2880 2881 const FunctionProtoType *FromFunctionType 2882 = FromPointeeType->getAs<FunctionProtoType>(); 2883 const FunctionProtoType *ToFunctionType 2884 = ToPointeeType->getAs<FunctionProtoType>(); 2885 2886 if (!FromFunctionType || !ToFunctionType) 2887 return false; 2888 2889 if (Context.hasSameType(FromPointeeType, ToPointeeType)) 2890 return true; 2891 2892 // Perform the quick checks that will tell us whether these 2893 // function types are obviously different. 2894 if (FromFunctionType->getNumParams() != ToFunctionType->getNumParams() || 2895 FromFunctionType->isVariadic() != ToFunctionType->isVariadic()) 2896 return false; 2897 2898 FunctionType::ExtInfo FromEInfo = FromFunctionType->getExtInfo(); 2899 FunctionType::ExtInfo ToEInfo = ToFunctionType->getExtInfo(); 2900 if (FromEInfo != ToEInfo) 2901 return false; 2902 2903 bool IncompatibleObjC = false; 2904 if (Context.hasSameType(FromFunctionType->getReturnType(), 2905 ToFunctionType->getReturnType())) { 2906 // Okay, the types match exactly. Nothing to do. 2907 } else { 2908 QualType RHS = FromFunctionType->getReturnType(); 2909 QualType LHS = ToFunctionType->getReturnType(); 2910 if ((!getLangOpts().CPlusPlus || !RHS->isRecordType()) && 2911 !RHS.hasQualifiers() && LHS.hasQualifiers()) 2912 LHS = LHS.getUnqualifiedType(); 2913 2914 if (Context.hasSameType(RHS,LHS)) { 2915 // OK exact match. 2916 } else if (isObjCPointerConversion(RHS, LHS, 2917 ConvertedType, IncompatibleObjC)) { 2918 if (IncompatibleObjC) 2919 return false; 2920 // Okay, we have an Objective-C pointer conversion. 2921 } 2922 else 2923 return false; 2924 } 2925 2926 // Check argument types. 2927 for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumParams(); 2928 ArgIdx != NumArgs; ++ArgIdx) { 2929 IncompatibleObjC = false; 2930 QualType FromArgType = FromFunctionType->getParamType(ArgIdx); 2931 QualType ToArgType = ToFunctionType->getParamType(ArgIdx); 2932 if (Context.hasSameType(FromArgType, ToArgType)) { 2933 // Okay, the types match exactly. Nothing to do. 2934 } else if (isObjCPointerConversion(ToArgType, FromArgType, 2935 ConvertedType, IncompatibleObjC)) { 2936 if (IncompatibleObjC) 2937 return false; 2938 // Okay, we have an Objective-C pointer conversion. 2939 } else 2940 // Argument types are too different. Abort. 2941 return false; 2942 } 2943 2944 SmallVector<FunctionProtoType::ExtParameterInfo, 4> NewParamInfos; 2945 bool CanUseToFPT, CanUseFromFPT; 2946 if (!Context.mergeExtParameterInfo(ToFunctionType, FromFunctionType, 2947 CanUseToFPT, CanUseFromFPT, 2948 NewParamInfos)) 2949 return false; 2950 2951 ConvertedType = ToType; 2952 return true; 2953 } 2954 2955 enum { 2956 ft_default, 2957 ft_different_class, 2958 ft_parameter_arity, 2959 ft_parameter_mismatch, 2960 ft_return_type, 2961 ft_qualifer_mismatch, 2962 ft_noexcept 2963 }; 2964 2965 /// Attempts to get the FunctionProtoType from a Type. Handles 2966 /// MemberFunctionPointers properly. 2967 static const FunctionProtoType *tryGetFunctionProtoType(QualType FromType) { 2968 if (auto *FPT = FromType->getAs<FunctionProtoType>()) 2969 return FPT; 2970 2971 if (auto *MPT = FromType->getAs<MemberPointerType>()) 2972 return MPT->getPointeeType()->getAs<FunctionProtoType>(); 2973 2974 return nullptr; 2975 } 2976 2977 /// HandleFunctionTypeMismatch - Gives diagnostic information for differeing 2978 /// function types. Catches different number of parameter, mismatch in 2979 /// parameter types, and different return types. 2980 void Sema::HandleFunctionTypeMismatch(PartialDiagnostic &PDiag, 2981 QualType FromType, QualType ToType) { 2982 // If either type is not valid, include no extra info. 2983 if (FromType.isNull() || ToType.isNull()) { 2984 PDiag << ft_default; 2985 return; 2986 } 2987 2988 // Get the function type from the pointers. 2989 if (FromType->isMemberPointerType() && ToType->isMemberPointerType()) { 2990 const auto *FromMember = FromType->castAs<MemberPointerType>(), 2991 *ToMember = ToType->castAs<MemberPointerType>(); 2992 if (!Context.hasSameType(FromMember->getClass(), ToMember->getClass())) { 2993 PDiag << ft_different_class << QualType(ToMember->getClass(), 0) 2994 << QualType(FromMember->getClass(), 0); 2995 return; 2996 } 2997 FromType = FromMember->getPointeeType(); 2998 ToType = ToMember->getPointeeType(); 2999 } 3000 3001 if (FromType->isPointerType()) 3002 FromType = FromType->getPointeeType(); 3003 if (ToType->isPointerType()) 3004 ToType = ToType->getPointeeType(); 3005 3006 // Remove references. 3007 FromType = FromType.getNonReferenceType(); 3008 ToType = ToType.getNonReferenceType(); 3009 3010 // Don't print extra info for non-specialized template functions. 3011 if (FromType->isInstantiationDependentType() && 3012 !FromType->getAs<TemplateSpecializationType>()) { 3013 PDiag << ft_default; 3014 return; 3015 } 3016 3017 // No extra info for same types. 3018 if (Context.hasSameType(FromType, ToType)) { 3019 PDiag << ft_default; 3020 return; 3021 } 3022 3023 const FunctionProtoType *FromFunction = tryGetFunctionProtoType(FromType), 3024 *ToFunction = tryGetFunctionProtoType(ToType); 3025 3026 // Both types need to be function types. 3027 if (!FromFunction || !ToFunction) { 3028 PDiag << ft_default; 3029 return; 3030 } 3031 3032 if (FromFunction->getNumParams() != ToFunction->getNumParams()) { 3033 PDiag << ft_parameter_arity << ToFunction->getNumParams() 3034 << FromFunction->getNumParams(); 3035 return; 3036 } 3037 3038 // Handle different parameter types. 3039 unsigned ArgPos; 3040 if (!FunctionParamTypesAreEqual(FromFunction, ToFunction, &ArgPos)) { 3041 PDiag << ft_parameter_mismatch << ArgPos + 1 3042 << ToFunction->getParamType(ArgPos) 3043 << FromFunction->getParamType(ArgPos); 3044 return; 3045 } 3046 3047 // Handle different return type. 3048 if (!Context.hasSameType(FromFunction->getReturnType(), 3049 ToFunction->getReturnType())) { 3050 PDiag << ft_return_type << ToFunction->getReturnType() 3051 << FromFunction->getReturnType(); 3052 return; 3053 } 3054 3055 if (FromFunction->getMethodQuals() != ToFunction->getMethodQuals()) { 3056 PDiag << ft_qualifer_mismatch << ToFunction->getMethodQuals() 3057 << FromFunction->getMethodQuals(); 3058 return; 3059 } 3060 3061 // Handle exception specification differences on canonical type (in C++17 3062 // onwards). 3063 if (cast<FunctionProtoType>(FromFunction->getCanonicalTypeUnqualified()) 3064 ->isNothrow() != 3065 cast<FunctionProtoType>(ToFunction->getCanonicalTypeUnqualified()) 3066 ->isNothrow()) { 3067 PDiag << ft_noexcept; 3068 return; 3069 } 3070 3071 // Unable to find a difference, so add no extra info. 3072 PDiag << ft_default; 3073 } 3074 3075 /// FunctionParamTypesAreEqual - This routine checks two function proto types 3076 /// for equality of their parameter types. Caller has already checked that 3077 /// they have same number of parameters. If the parameters are different, 3078 /// ArgPos will have the parameter index of the first different parameter. 3079 /// If `Reversed` is true, the parameters of `NewType` will be compared in 3080 /// reverse order. That's useful if one of the functions is being used as a C++20 3081 /// synthesized operator overload with a reversed parameter order. 3082 bool Sema::FunctionParamTypesAreEqual(const FunctionProtoType *OldType, 3083 const FunctionProtoType *NewType, 3084 unsigned *ArgPos, bool Reversed) { 3085 assert(OldType->getNumParams() == NewType->getNumParams() && 3086 "Can't compare parameters of functions with different number of " 3087 "parameters!"); 3088 for (size_t I = 0; I < OldType->getNumParams(); I++) { 3089 // Reverse iterate over the parameters of `OldType` if `Reversed` is true. 3090 size_t J = Reversed ? (OldType->getNumParams() - I - 1) : I; 3091 3092 // Ignore address spaces in pointee type. This is to disallow overloading 3093 // on __ptr32/__ptr64 address spaces. 3094 QualType Old = Context.removePtrSizeAddrSpace(OldType->getParamType(I).getUnqualifiedType()); 3095 QualType New = Context.removePtrSizeAddrSpace(NewType->getParamType(J).getUnqualifiedType()); 3096 3097 if (!Context.hasSameType(Old, New)) { 3098 if (ArgPos) 3099 *ArgPos = I; 3100 return false; 3101 } 3102 } 3103 return true; 3104 } 3105 3106 /// CheckPointerConversion - Check the pointer conversion from the 3107 /// expression From to the type ToType. This routine checks for 3108 /// ambiguous or inaccessible derived-to-base pointer 3109 /// conversions for which IsPointerConversion has already returned 3110 /// true. It returns true and produces a diagnostic if there was an 3111 /// error, or returns false otherwise. 3112 bool Sema::CheckPointerConversion(Expr *From, QualType ToType, 3113 CastKind &Kind, 3114 CXXCastPath& BasePath, 3115 bool IgnoreBaseAccess, 3116 bool Diagnose) { 3117 QualType FromType = From->getType(); 3118 bool IsCStyleOrFunctionalCast = IgnoreBaseAccess; 3119 3120 Kind = CK_BitCast; 3121 3122 if (Diagnose && !IsCStyleOrFunctionalCast && !FromType->isAnyPointerType() && 3123 From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull) == 3124 Expr::NPCK_ZeroExpression) { 3125 if (Context.hasSameUnqualifiedType(From->getType(), Context.BoolTy)) 3126 DiagRuntimeBehavior(From->getExprLoc(), From, 3127 PDiag(diag::warn_impcast_bool_to_null_pointer) 3128 << ToType << From->getSourceRange()); 3129 else if (!isUnevaluatedContext()) 3130 Diag(From->getExprLoc(), diag::warn_non_literal_null_pointer) 3131 << ToType << From->getSourceRange(); 3132 } 3133 if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) { 3134 if (const PointerType *FromPtrType = FromType->getAs<PointerType>()) { 3135 QualType FromPointeeType = FromPtrType->getPointeeType(), 3136 ToPointeeType = ToPtrType->getPointeeType(); 3137 3138 if (FromPointeeType->isRecordType() && ToPointeeType->isRecordType() && 3139 !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType)) { 3140 // We must have a derived-to-base conversion. Check an 3141 // ambiguous or inaccessible conversion. 3142 unsigned InaccessibleID = 0; 3143 unsigned AmbiguousID = 0; 3144 if (Diagnose) { 3145 InaccessibleID = diag::err_upcast_to_inaccessible_base; 3146 AmbiguousID = diag::err_ambiguous_derived_to_base_conv; 3147 } 3148 if (CheckDerivedToBaseConversion( 3149 FromPointeeType, ToPointeeType, InaccessibleID, AmbiguousID, 3150 From->getExprLoc(), From->getSourceRange(), DeclarationName(), 3151 &BasePath, IgnoreBaseAccess)) 3152 return true; 3153 3154 // The conversion was successful. 3155 Kind = CK_DerivedToBase; 3156 } 3157 3158 if (Diagnose && !IsCStyleOrFunctionalCast && 3159 FromPointeeType->isFunctionType() && ToPointeeType->isVoidType()) { 3160 assert(getLangOpts().MSVCCompat && 3161 "this should only be possible with MSVCCompat!"); 3162 Diag(From->getExprLoc(), diag::ext_ms_impcast_fn_obj) 3163 << From->getSourceRange(); 3164 } 3165 } 3166 } else if (const ObjCObjectPointerType *ToPtrType = 3167 ToType->getAs<ObjCObjectPointerType>()) { 3168 if (const ObjCObjectPointerType *FromPtrType = 3169 FromType->getAs<ObjCObjectPointerType>()) { 3170 // Objective-C++ conversions are always okay. 3171 // FIXME: We should have a different class of conversions for the 3172 // Objective-C++ implicit conversions. 3173 if (FromPtrType->isObjCBuiltinType() || ToPtrType->isObjCBuiltinType()) 3174 return false; 3175 } else if (FromType->isBlockPointerType()) { 3176 Kind = CK_BlockPointerToObjCPointerCast; 3177 } else { 3178 Kind = CK_CPointerToObjCPointerCast; 3179 } 3180 } else if (ToType->isBlockPointerType()) { 3181 if (!FromType->isBlockPointerType()) 3182 Kind = CK_AnyPointerToBlockPointerCast; 3183 } 3184 3185 // We shouldn't fall into this case unless it's valid for other 3186 // reasons. 3187 if (From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull)) 3188 Kind = CK_NullToPointer; 3189 3190 return false; 3191 } 3192 3193 /// IsMemberPointerConversion - Determines whether the conversion of the 3194 /// expression From, which has the (possibly adjusted) type FromType, can be 3195 /// converted to the type ToType via a member pointer conversion (C++ 4.11). 3196 /// If so, returns true and places the converted type (that might differ from 3197 /// ToType in its cv-qualifiers at some level) into ConvertedType. 3198 bool Sema::IsMemberPointerConversion(Expr *From, QualType FromType, 3199 QualType ToType, 3200 bool InOverloadResolution, 3201 QualType &ConvertedType) { 3202 const MemberPointerType *ToTypePtr = ToType->getAs<MemberPointerType>(); 3203 if (!ToTypePtr) 3204 return false; 3205 3206 // A null pointer constant can be converted to a member pointer (C++ 4.11p1) 3207 if (From->isNullPointerConstant(Context, 3208 InOverloadResolution? Expr::NPC_ValueDependentIsNotNull 3209 : Expr::NPC_ValueDependentIsNull)) { 3210 ConvertedType = ToType; 3211 return true; 3212 } 3213 3214 // Otherwise, both types have to be member pointers. 3215 const MemberPointerType *FromTypePtr = FromType->getAs<MemberPointerType>(); 3216 if (!FromTypePtr) 3217 return false; 3218 3219 // A pointer to member of B can be converted to a pointer to member of D, 3220 // where D is derived from B (C++ 4.11p2). 3221 QualType FromClass(FromTypePtr->getClass(), 0); 3222 QualType ToClass(ToTypePtr->getClass(), 0); 3223 3224 if (!Context.hasSameUnqualifiedType(FromClass, ToClass) && 3225 IsDerivedFrom(From->getBeginLoc(), ToClass, FromClass)) { 3226 ConvertedType = Context.getMemberPointerType(FromTypePtr->getPointeeType(), 3227 ToClass.getTypePtr()); 3228 return true; 3229 } 3230 3231 return false; 3232 } 3233 3234 /// CheckMemberPointerConversion - Check the member pointer conversion from the 3235 /// expression From to the type ToType. This routine checks for ambiguous or 3236 /// virtual or inaccessible base-to-derived member pointer conversions 3237 /// for which IsMemberPointerConversion has already returned true. It returns 3238 /// true and produces a diagnostic if there was an error, or returns false 3239 /// otherwise. 3240 bool Sema::CheckMemberPointerConversion(Expr *From, QualType ToType, 3241 CastKind &Kind, 3242 CXXCastPath &BasePath, 3243 bool IgnoreBaseAccess) { 3244 QualType FromType = From->getType(); 3245 const MemberPointerType *FromPtrType = FromType->getAs<MemberPointerType>(); 3246 if (!FromPtrType) { 3247 // This must be a null pointer to member pointer conversion 3248 assert(From->isNullPointerConstant(Context, 3249 Expr::NPC_ValueDependentIsNull) && 3250 "Expr must be null pointer constant!"); 3251 Kind = CK_NullToMemberPointer; 3252 return false; 3253 } 3254 3255 const MemberPointerType *ToPtrType = ToType->getAs<MemberPointerType>(); 3256 assert(ToPtrType && "No member pointer cast has a target type " 3257 "that is not a member pointer."); 3258 3259 QualType FromClass = QualType(FromPtrType->getClass(), 0); 3260 QualType ToClass = QualType(ToPtrType->getClass(), 0); 3261 3262 // FIXME: What about dependent types? 3263 assert(FromClass->isRecordType() && "Pointer into non-class."); 3264 assert(ToClass->isRecordType() && "Pointer into non-class."); 3265 3266 CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true, 3267 /*DetectVirtual=*/true); 3268 bool DerivationOkay = 3269 IsDerivedFrom(From->getBeginLoc(), ToClass, FromClass, Paths); 3270 assert(DerivationOkay && 3271 "Should not have been called if derivation isn't OK."); 3272 (void)DerivationOkay; 3273 3274 if (Paths.isAmbiguous(Context.getCanonicalType(FromClass). 3275 getUnqualifiedType())) { 3276 std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths); 3277 Diag(From->getExprLoc(), diag::err_ambiguous_memptr_conv) 3278 << 0 << FromClass << ToClass << PathDisplayStr << From->getSourceRange(); 3279 return true; 3280 } 3281 3282 if (const RecordType *VBase = Paths.getDetectedVirtual()) { 3283 Diag(From->getExprLoc(), diag::err_memptr_conv_via_virtual) 3284 << FromClass << ToClass << QualType(VBase, 0) 3285 << From->getSourceRange(); 3286 return true; 3287 } 3288 3289 if (!IgnoreBaseAccess) 3290 CheckBaseClassAccess(From->getExprLoc(), FromClass, ToClass, 3291 Paths.front(), 3292 diag::err_downcast_from_inaccessible_base); 3293 3294 // Must be a base to derived member conversion. 3295 BuildBasePathArray(Paths, BasePath); 3296 Kind = CK_BaseToDerivedMemberPointer; 3297 return false; 3298 } 3299 3300 /// Determine whether the lifetime conversion between the two given 3301 /// qualifiers sets is nontrivial. 3302 static bool isNonTrivialObjCLifetimeConversion(Qualifiers FromQuals, 3303 Qualifiers ToQuals) { 3304 // Converting anything to const __unsafe_unretained is trivial. 3305 if (ToQuals.hasConst() && 3306 ToQuals.getObjCLifetime() == Qualifiers::OCL_ExplicitNone) 3307 return false; 3308 3309 return true; 3310 } 3311 3312 /// Perform a single iteration of the loop for checking if a qualification 3313 /// conversion is valid. 3314 /// 3315 /// Specifically, check whether any change between the qualifiers of \p 3316 /// FromType and \p ToType is permissible, given knowledge about whether every 3317 /// outer layer is const-qualified. 3318 static bool isQualificationConversionStep(QualType FromType, QualType ToType, 3319 bool CStyle, bool IsTopLevel, 3320 bool &PreviousToQualsIncludeConst, 3321 bool &ObjCLifetimeConversion) { 3322 Qualifiers FromQuals = FromType.getQualifiers(); 3323 Qualifiers ToQuals = ToType.getQualifiers(); 3324 3325 // Ignore __unaligned qualifier. 3326 FromQuals.removeUnaligned(); 3327 3328 // Objective-C ARC: 3329 // Check Objective-C lifetime conversions. 3330 if (FromQuals.getObjCLifetime() != ToQuals.getObjCLifetime()) { 3331 if (ToQuals.compatiblyIncludesObjCLifetime(FromQuals)) { 3332 if (isNonTrivialObjCLifetimeConversion(FromQuals, ToQuals)) 3333 ObjCLifetimeConversion = true; 3334 FromQuals.removeObjCLifetime(); 3335 ToQuals.removeObjCLifetime(); 3336 } else { 3337 // Qualification conversions cannot cast between different 3338 // Objective-C lifetime qualifiers. 3339 return false; 3340 } 3341 } 3342 3343 // Allow addition/removal of GC attributes but not changing GC attributes. 3344 if (FromQuals.getObjCGCAttr() != ToQuals.getObjCGCAttr() && 3345 (!FromQuals.hasObjCGCAttr() || !ToQuals.hasObjCGCAttr())) { 3346 FromQuals.removeObjCGCAttr(); 3347 ToQuals.removeObjCGCAttr(); 3348 } 3349 3350 // -- for every j > 0, if const is in cv 1,j then const is in cv 3351 // 2,j, and similarly for volatile. 3352 if (!CStyle && !ToQuals.compatiblyIncludes(FromQuals)) 3353 return false; 3354 3355 // If address spaces mismatch: 3356 // - in top level it is only valid to convert to addr space that is a 3357 // superset in all cases apart from C-style casts where we allow 3358 // conversions between overlapping address spaces. 3359 // - in non-top levels it is not a valid conversion. 3360 if (ToQuals.getAddressSpace() != FromQuals.getAddressSpace() && 3361 (!IsTopLevel || 3362 !(ToQuals.isAddressSpaceSupersetOf(FromQuals) || 3363 (CStyle && FromQuals.isAddressSpaceSupersetOf(ToQuals))))) 3364 return false; 3365 3366 // -- if the cv 1,j and cv 2,j are different, then const is in 3367 // every cv for 0 < k < j. 3368 if (!CStyle && FromQuals.getCVRQualifiers() != ToQuals.getCVRQualifiers() && 3369 !PreviousToQualsIncludeConst) 3370 return false; 3371 3372 // The following wording is from C++20, where the result of the conversion 3373 // is T3, not T2. 3374 // -- if [...] P1,i [...] is "array of unknown bound of", P3,i is 3375 // "array of unknown bound of" 3376 if (FromType->isIncompleteArrayType() && !ToType->isIncompleteArrayType()) 3377 return false; 3378 3379 // -- if the resulting P3,i is different from P1,i [...], then const is 3380 // added to every cv 3_k for 0 < k < i. 3381 if (!CStyle && FromType->isConstantArrayType() && 3382 ToType->isIncompleteArrayType() && !PreviousToQualsIncludeConst) 3383 return false; 3384 3385 // Keep track of whether all prior cv-qualifiers in the "to" type 3386 // include const. 3387 PreviousToQualsIncludeConst = 3388 PreviousToQualsIncludeConst && ToQuals.hasConst(); 3389 return true; 3390 } 3391 3392 /// IsQualificationConversion - Determines whether the conversion from 3393 /// an rvalue of type FromType to ToType is a qualification conversion 3394 /// (C++ 4.4). 3395 /// 3396 /// \param ObjCLifetimeConversion Output parameter that will be set to indicate 3397 /// when the qualification conversion involves a change in the Objective-C 3398 /// object lifetime. 3399 bool 3400 Sema::IsQualificationConversion(QualType FromType, QualType ToType, 3401 bool CStyle, bool &ObjCLifetimeConversion) { 3402 FromType = Context.getCanonicalType(FromType); 3403 ToType = Context.getCanonicalType(ToType); 3404 ObjCLifetimeConversion = false; 3405 3406 // If FromType and ToType are the same type, this is not a 3407 // qualification conversion. 3408 if (FromType.getUnqualifiedType() == ToType.getUnqualifiedType()) 3409 return false; 3410 3411 // (C++ 4.4p4): 3412 // A conversion can add cv-qualifiers at levels other than the first 3413 // in multi-level pointers, subject to the following rules: [...] 3414 bool PreviousToQualsIncludeConst = true; 3415 bool UnwrappedAnyPointer = false; 3416 while (Context.UnwrapSimilarTypes(FromType, ToType)) { 3417 if (!isQualificationConversionStep( 3418 FromType, ToType, CStyle, !UnwrappedAnyPointer, 3419 PreviousToQualsIncludeConst, ObjCLifetimeConversion)) 3420 return false; 3421 UnwrappedAnyPointer = true; 3422 } 3423 3424 // We are left with FromType and ToType being the pointee types 3425 // after unwrapping the original FromType and ToType the same number 3426 // of times. If we unwrapped any pointers, and if FromType and 3427 // ToType have the same unqualified type (since we checked 3428 // qualifiers above), then this is a qualification conversion. 3429 return UnwrappedAnyPointer && Context.hasSameUnqualifiedType(FromType,ToType); 3430 } 3431 3432 /// - Determine whether this is a conversion from a scalar type to an 3433 /// atomic type. 3434 /// 3435 /// If successful, updates \c SCS's second and third steps in the conversion 3436 /// sequence to finish the conversion. 3437 static bool tryAtomicConversion(Sema &S, Expr *From, QualType ToType, 3438 bool InOverloadResolution, 3439 StandardConversionSequence &SCS, 3440 bool CStyle) { 3441 const AtomicType *ToAtomic = ToType->getAs<AtomicType>(); 3442 if (!ToAtomic) 3443 return false; 3444 3445 StandardConversionSequence InnerSCS; 3446 if (!IsStandardConversion(S, From, ToAtomic->getValueType(), 3447 InOverloadResolution, InnerSCS, 3448 CStyle, /*AllowObjCWritebackConversion=*/false)) 3449 return false; 3450 3451 SCS.Second = InnerSCS.Second; 3452 SCS.setToType(1, InnerSCS.getToType(1)); 3453 SCS.Third = InnerSCS.Third; 3454 SCS.QualificationIncludesObjCLifetime 3455 = InnerSCS.QualificationIncludesObjCLifetime; 3456 SCS.setToType(2, InnerSCS.getToType(2)); 3457 return true; 3458 } 3459 3460 static bool isFirstArgumentCompatibleWithType(ASTContext &Context, 3461 CXXConstructorDecl *Constructor, 3462 QualType Type) { 3463 const auto *CtorType = Constructor->getType()->castAs<FunctionProtoType>(); 3464 if (CtorType->getNumParams() > 0) { 3465 QualType FirstArg = CtorType->getParamType(0); 3466 if (Context.hasSameUnqualifiedType(Type, FirstArg.getNonReferenceType())) 3467 return true; 3468 } 3469 return false; 3470 } 3471 3472 static OverloadingResult 3473 IsInitializerListConstructorConversion(Sema &S, Expr *From, QualType ToType, 3474 CXXRecordDecl *To, 3475 UserDefinedConversionSequence &User, 3476 OverloadCandidateSet &CandidateSet, 3477 bool AllowExplicit) { 3478 CandidateSet.clear(OverloadCandidateSet::CSK_InitByUserDefinedConversion); 3479 for (auto *D : S.LookupConstructors(To)) { 3480 auto Info = getConstructorInfo(D); 3481 if (!Info) 3482 continue; 3483 3484 bool Usable = !Info.Constructor->isInvalidDecl() && 3485 S.isInitListConstructor(Info.Constructor); 3486 if (Usable) { 3487 bool SuppressUserConversions = false; 3488 if (Info.ConstructorTmpl) 3489 S.AddTemplateOverloadCandidate(Info.ConstructorTmpl, Info.FoundDecl, 3490 /*ExplicitArgs*/ nullptr, From, 3491 CandidateSet, SuppressUserConversions, 3492 /*PartialOverloading*/ false, 3493 AllowExplicit); 3494 else 3495 S.AddOverloadCandidate(Info.Constructor, Info.FoundDecl, From, 3496 CandidateSet, SuppressUserConversions, 3497 /*PartialOverloading*/ false, AllowExplicit); 3498 } 3499 } 3500 3501 bool HadMultipleCandidates = (CandidateSet.size() > 1); 3502 3503 OverloadCandidateSet::iterator Best; 3504 switch (auto Result = 3505 CandidateSet.BestViableFunction(S, From->getBeginLoc(), Best)) { 3506 case OR_Deleted: 3507 case OR_Success: { 3508 // Record the standard conversion we used and the conversion function. 3509 CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(Best->Function); 3510 QualType ThisType = Constructor->getThisType(); 3511 // Initializer lists don't have conversions as such. 3512 User.Before.setAsIdentityConversion(); 3513 User.HadMultipleCandidates = HadMultipleCandidates; 3514 User.ConversionFunction = Constructor; 3515 User.FoundConversionFunction = Best->FoundDecl; 3516 User.After.setAsIdentityConversion(); 3517 User.After.setFromType(ThisType->castAs<PointerType>()->getPointeeType()); 3518 User.After.setAllToTypes(ToType); 3519 return Result; 3520 } 3521 3522 case OR_No_Viable_Function: 3523 return OR_No_Viable_Function; 3524 case OR_Ambiguous: 3525 return OR_Ambiguous; 3526 } 3527 3528 llvm_unreachable("Invalid OverloadResult!"); 3529 } 3530 3531 /// Determines whether there is a user-defined conversion sequence 3532 /// (C++ [over.ics.user]) that converts expression From to the type 3533 /// ToType. If such a conversion exists, User will contain the 3534 /// user-defined conversion sequence that performs such a conversion 3535 /// and this routine will return true. Otherwise, this routine returns 3536 /// false and User is unspecified. 3537 /// 3538 /// \param AllowExplicit true if the conversion should consider C++0x 3539 /// "explicit" conversion functions as well as non-explicit conversion 3540 /// functions (C++0x [class.conv.fct]p2). 3541 /// 3542 /// \param AllowObjCConversionOnExplicit true if the conversion should 3543 /// allow an extra Objective-C pointer conversion on uses of explicit 3544 /// constructors. Requires \c AllowExplicit to also be set. 3545 static OverloadingResult 3546 IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType, 3547 UserDefinedConversionSequence &User, 3548 OverloadCandidateSet &CandidateSet, 3549 AllowedExplicit AllowExplicit, 3550 bool AllowObjCConversionOnExplicit) { 3551 assert(AllowExplicit != AllowedExplicit::None || 3552 !AllowObjCConversionOnExplicit); 3553 CandidateSet.clear(OverloadCandidateSet::CSK_InitByUserDefinedConversion); 3554 3555 // Whether we will only visit constructors. 3556 bool ConstructorsOnly = false; 3557 3558 // If the type we are conversion to is a class type, enumerate its 3559 // constructors. 3560 if (const RecordType *ToRecordType = ToType->getAs<RecordType>()) { 3561 // C++ [over.match.ctor]p1: 3562 // When objects of class type are direct-initialized (8.5), or 3563 // copy-initialized from an expression of the same or a 3564 // derived class type (8.5), overload resolution selects the 3565 // constructor. [...] For copy-initialization, the candidate 3566 // functions are all the converting constructors (12.3.1) of 3567 // that class. The argument list is the expression-list within 3568 // the parentheses of the initializer. 3569 if (S.Context.hasSameUnqualifiedType(ToType, From->getType()) || 3570 (From->getType()->getAs<RecordType>() && 3571 S.IsDerivedFrom(From->getBeginLoc(), From->getType(), ToType))) 3572 ConstructorsOnly = true; 3573 3574 if (!S.isCompleteType(From->getExprLoc(), ToType)) { 3575 // We're not going to find any constructors. 3576 } else if (CXXRecordDecl *ToRecordDecl 3577 = dyn_cast<CXXRecordDecl>(ToRecordType->getDecl())) { 3578 3579 Expr **Args = &From; 3580 unsigned NumArgs = 1; 3581 bool ListInitializing = false; 3582 if (InitListExpr *InitList = dyn_cast<InitListExpr>(From)) { 3583 // But first, see if there is an init-list-constructor that will work. 3584 OverloadingResult Result = IsInitializerListConstructorConversion( 3585 S, From, ToType, ToRecordDecl, User, CandidateSet, 3586 AllowExplicit == AllowedExplicit::All); 3587 if (Result != OR_No_Viable_Function) 3588 return Result; 3589 // Never mind. 3590 CandidateSet.clear( 3591 OverloadCandidateSet::CSK_InitByUserDefinedConversion); 3592 3593 // If we're list-initializing, we pass the individual elements as 3594 // arguments, not the entire list. 3595 Args = InitList->getInits(); 3596 NumArgs = InitList->getNumInits(); 3597 ListInitializing = true; 3598 } 3599 3600 for (auto *D : S.LookupConstructors(ToRecordDecl)) { 3601 auto Info = getConstructorInfo(D); 3602 if (!Info) 3603 continue; 3604 3605 bool Usable = !Info.Constructor->isInvalidDecl(); 3606 if (!ListInitializing) 3607 Usable = Usable && Info.Constructor->isConvertingConstructor( 3608 /*AllowExplicit*/ true); 3609 if (Usable) { 3610 bool SuppressUserConversions = !ConstructorsOnly; 3611 // C++20 [over.best.ics.general]/4.5: 3612 // if the target is the first parameter of a constructor [of class 3613 // X] and the constructor [...] is a candidate by [...] the second 3614 // phase of [over.match.list] when the initializer list has exactly 3615 // one element that is itself an initializer list, [...] and the 3616 // conversion is to X or reference to cv X, user-defined conversion 3617 // sequences are not cnosidered. 3618 if (SuppressUserConversions && ListInitializing) { 3619 SuppressUserConversions = 3620 NumArgs == 1 && isa<InitListExpr>(Args[0]) && 3621 isFirstArgumentCompatibleWithType(S.Context, Info.Constructor, 3622 ToType); 3623 } 3624 if (Info.ConstructorTmpl) 3625 S.AddTemplateOverloadCandidate( 3626 Info.ConstructorTmpl, Info.FoundDecl, 3627 /*ExplicitArgs*/ nullptr, llvm::ArrayRef(Args, NumArgs), 3628 CandidateSet, SuppressUserConversions, 3629 /*PartialOverloading*/ false, 3630 AllowExplicit == AllowedExplicit::All); 3631 else 3632 // Allow one user-defined conversion when user specifies a 3633 // From->ToType conversion via an static cast (c-style, etc). 3634 S.AddOverloadCandidate(Info.Constructor, Info.FoundDecl, 3635 llvm::ArrayRef(Args, NumArgs), CandidateSet, 3636 SuppressUserConversions, 3637 /*PartialOverloading*/ false, 3638 AllowExplicit == AllowedExplicit::All); 3639 } 3640 } 3641 } 3642 } 3643 3644 // Enumerate conversion functions, if we're allowed to. 3645 if (ConstructorsOnly || isa<InitListExpr>(From)) { 3646 } else if (!S.isCompleteType(From->getBeginLoc(), From->getType())) { 3647 // No conversion functions from incomplete types. 3648 } else if (const RecordType *FromRecordType = 3649 From->getType()->getAs<RecordType>()) { 3650 if (CXXRecordDecl *FromRecordDecl 3651 = dyn_cast<CXXRecordDecl>(FromRecordType->getDecl())) { 3652 // Add all of the conversion functions as candidates. 3653 const auto &Conversions = FromRecordDecl->getVisibleConversionFunctions(); 3654 for (auto I = Conversions.begin(), E = Conversions.end(); I != E; ++I) { 3655 DeclAccessPair FoundDecl = I.getPair(); 3656 NamedDecl *D = FoundDecl.getDecl(); 3657 CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext()); 3658 if (isa<UsingShadowDecl>(D)) 3659 D = cast<UsingShadowDecl>(D)->getTargetDecl(); 3660 3661 CXXConversionDecl *Conv; 3662 FunctionTemplateDecl *ConvTemplate; 3663 if ((ConvTemplate = dyn_cast<FunctionTemplateDecl>(D))) 3664 Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl()); 3665 else 3666 Conv = cast<CXXConversionDecl>(D); 3667 3668 if (ConvTemplate) 3669 S.AddTemplateConversionCandidate( 3670 ConvTemplate, FoundDecl, ActingContext, From, ToType, 3671 CandidateSet, AllowObjCConversionOnExplicit, 3672 AllowExplicit != AllowedExplicit::None); 3673 else 3674 S.AddConversionCandidate(Conv, FoundDecl, ActingContext, From, ToType, 3675 CandidateSet, AllowObjCConversionOnExplicit, 3676 AllowExplicit != AllowedExplicit::None); 3677 } 3678 } 3679 } 3680 3681 bool HadMultipleCandidates = (CandidateSet.size() > 1); 3682 3683 OverloadCandidateSet::iterator Best; 3684 switch (auto Result = 3685 CandidateSet.BestViableFunction(S, From->getBeginLoc(), Best)) { 3686 case OR_Success: 3687 case OR_Deleted: 3688 // Record the standard conversion we used and the conversion function. 3689 if (CXXConstructorDecl *Constructor 3690 = dyn_cast<CXXConstructorDecl>(Best->Function)) { 3691 // C++ [over.ics.user]p1: 3692 // If the user-defined conversion is specified by a 3693 // constructor (12.3.1), the initial standard conversion 3694 // sequence converts the source type to the type required by 3695 // the argument of the constructor. 3696 // 3697 QualType ThisType = Constructor->getThisType(); 3698 if (isa<InitListExpr>(From)) { 3699 // Initializer lists don't have conversions as such. 3700 User.Before.setAsIdentityConversion(); 3701 } else { 3702 if (Best->Conversions[0].isEllipsis()) 3703 User.EllipsisConversion = true; 3704 else { 3705 User.Before = Best->Conversions[0].Standard; 3706 User.EllipsisConversion = false; 3707 } 3708 } 3709 User.HadMultipleCandidates = HadMultipleCandidates; 3710 User.ConversionFunction = Constructor; 3711 User.FoundConversionFunction = Best->FoundDecl; 3712 User.After.setAsIdentityConversion(); 3713 User.After.setFromType(ThisType->castAs<PointerType>()->getPointeeType()); 3714 User.After.setAllToTypes(ToType); 3715 return Result; 3716 } 3717 if (CXXConversionDecl *Conversion 3718 = dyn_cast<CXXConversionDecl>(Best->Function)) { 3719 // C++ [over.ics.user]p1: 3720 // 3721 // [...] If the user-defined conversion is specified by a 3722 // conversion function (12.3.2), the initial standard 3723 // conversion sequence converts the source type to the 3724 // implicit object parameter of the conversion function. 3725 User.Before = Best->Conversions[0].Standard; 3726 User.HadMultipleCandidates = HadMultipleCandidates; 3727 User.ConversionFunction = Conversion; 3728 User.FoundConversionFunction = Best->FoundDecl; 3729 User.EllipsisConversion = false; 3730 3731 // C++ [over.ics.user]p2: 3732 // The second standard conversion sequence converts the 3733 // result of the user-defined conversion to the target type 3734 // for the sequence. Since an implicit conversion sequence 3735 // is an initialization, the special rules for 3736 // initialization by user-defined conversion apply when 3737 // selecting the best user-defined conversion for a 3738 // user-defined conversion sequence (see 13.3.3 and 3739 // 13.3.3.1). 3740 User.After = Best->FinalConversion; 3741 return Result; 3742 } 3743 llvm_unreachable("Not a constructor or conversion function?"); 3744 3745 case OR_No_Viable_Function: 3746 return OR_No_Viable_Function; 3747 3748 case OR_Ambiguous: 3749 return OR_Ambiguous; 3750 } 3751 3752 llvm_unreachable("Invalid OverloadResult!"); 3753 } 3754 3755 bool 3756 Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) { 3757 ImplicitConversionSequence ICS; 3758 OverloadCandidateSet CandidateSet(From->getExprLoc(), 3759 OverloadCandidateSet::CSK_Normal); 3760 OverloadingResult OvResult = 3761 IsUserDefinedConversion(*this, From, ToType, ICS.UserDefined, 3762 CandidateSet, AllowedExplicit::None, false); 3763 3764 if (!(OvResult == OR_Ambiguous || 3765 (OvResult == OR_No_Viable_Function && !CandidateSet.empty()))) 3766 return false; 3767 3768 auto Cands = CandidateSet.CompleteCandidates( 3769 *this, 3770 OvResult == OR_Ambiguous ? OCD_AmbiguousCandidates : OCD_AllCandidates, 3771 From); 3772 if (OvResult == OR_Ambiguous) 3773 Diag(From->getBeginLoc(), diag::err_typecheck_ambiguous_condition) 3774 << From->getType() << ToType << From->getSourceRange(); 3775 else { // OR_No_Viable_Function && !CandidateSet.empty() 3776 if (!RequireCompleteType(From->getBeginLoc(), ToType, 3777 diag::err_typecheck_nonviable_condition_incomplete, 3778 From->getType(), From->getSourceRange())) 3779 Diag(From->getBeginLoc(), diag::err_typecheck_nonviable_condition) 3780 << false << From->getType() << From->getSourceRange() << ToType; 3781 } 3782 3783 CandidateSet.NoteCandidates( 3784 *this, From, Cands); 3785 return true; 3786 } 3787 3788 // Helper for compareConversionFunctions that gets the FunctionType that the 3789 // conversion-operator return value 'points' to, or nullptr. 3790 static const FunctionType * 3791 getConversionOpReturnTyAsFunction(CXXConversionDecl *Conv) { 3792 const FunctionType *ConvFuncTy = Conv->getType()->castAs<FunctionType>(); 3793 const PointerType *RetPtrTy = 3794 ConvFuncTy->getReturnType()->getAs<PointerType>(); 3795 3796 if (!RetPtrTy) 3797 return nullptr; 3798 3799 return RetPtrTy->getPointeeType()->getAs<FunctionType>(); 3800 } 3801 3802 /// Compare the user-defined conversion functions or constructors 3803 /// of two user-defined conversion sequences to determine whether any ordering 3804 /// is possible. 3805 static ImplicitConversionSequence::CompareKind 3806 compareConversionFunctions(Sema &S, FunctionDecl *Function1, 3807 FunctionDecl *Function2) { 3808 CXXConversionDecl *Conv1 = dyn_cast_or_null<CXXConversionDecl>(Function1); 3809 CXXConversionDecl *Conv2 = dyn_cast_or_null<CXXConversionDecl>(Function2); 3810 if (!Conv1 || !Conv2) 3811 return ImplicitConversionSequence::Indistinguishable; 3812 3813 if (!Conv1->getParent()->isLambda() || !Conv2->getParent()->isLambda()) 3814 return ImplicitConversionSequence::Indistinguishable; 3815 3816 // Objective-C++: 3817 // If both conversion functions are implicitly-declared conversions from 3818 // a lambda closure type to a function pointer and a block pointer, 3819 // respectively, always prefer the conversion to a function pointer, 3820 // because the function pointer is more lightweight and is more likely 3821 // to keep code working. 3822 if (S.getLangOpts().ObjC && S.getLangOpts().CPlusPlus11) { 3823 bool Block1 = Conv1->getConversionType()->isBlockPointerType(); 3824 bool Block2 = Conv2->getConversionType()->isBlockPointerType(); 3825 if (Block1 != Block2) 3826 return Block1 ? ImplicitConversionSequence::Worse 3827 : ImplicitConversionSequence::Better; 3828 } 3829 3830 // In order to support multiple calling conventions for the lambda conversion 3831 // operator (such as when the free and member function calling convention is 3832 // different), prefer the 'free' mechanism, followed by the calling-convention 3833 // of operator(). The latter is in place to support the MSVC-like solution of 3834 // defining ALL of the possible conversions in regards to calling-convention. 3835 const FunctionType *Conv1FuncRet = getConversionOpReturnTyAsFunction(Conv1); 3836 const FunctionType *Conv2FuncRet = getConversionOpReturnTyAsFunction(Conv2); 3837 3838 if (Conv1FuncRet && Conv2FuncRet && 3839 Conv1FuncRet->getCallConv() != Conv2FuncRet->getCallConv()) { 3840 CallingConv Conv1CC = Conv1FuncRet->getCallConv(); 3841 CallingConv Conv2CC = Conv2FuncRet->getCallConv(); 3842 3843 CXXMethodDecl *CallOp = Conv2->getParent()->getLambdaCallOperator(); 3844 const auto *CallOpProto = CallOp->getType()->castAs<FunctionProtoType>(); 3845 3846 CallingConv CallOpCC = 3847 CallOp->getType()->castAs<FunctionType>()->getCallConv(); 3848 CallingConv DefaultFree = S.Context.getDefaultCallingConvention( 3849 CallOpProto->isVariadic(), /*IsCXXMethod=*/false); 3850 CallingConv DefaultMember = S.Context.getDefaultCallingConvention( 3851 CallOpProto->isVariadic(), /*IsCXXMethod=*/true); 3852 3853 CallingConv PrefOrder[] = {DefaultFree, DefaultMember, CallOpCC}; 3854 for (CallingConv CC : PrefOrder) { 3855 if (Conv1CC == CC) 3856 return ImplicitConversionSequence::Better; 3857 if (Conv2CC == CC) 3858 return ImplicitConversionSequence::Worse; 3859 } 3860 } 3861 3862 return ImplicitConversionSequence::Indistinguishable; 3863 } 3864 3865 static bool hasDeprecatedStringLiteralToCharPtrConversion( 3866 const ImplicitConversionSequence &ICS) { 3867 return (ICS.isStandard() && ICS.Standard.DeprecatedStringLiteralToCharPtr) || 3868 (ICS.isUserDefined() && 3869 ICS.UserDefined.Before.DeprecatedStringLiteralToCharPtr); 3870 } 3871 3872 /// CompareImplicitConversionSequences - Compare two implicit 3873 /// conversion sequences to determine whether one is better than the 3874 /// other or if they are indistinguishable (C++ 13.3.3.2). 3875 static ImplicitConversionSequence::CompareKind 3876 CompareImplicitConversionSequences(Sema &S, SourceLocation Loc, 3877 const ImplicitConversionSequence& ICS1, 3878 const ImplicitConversionSequence& ICS2) 3879 { 3880 // (C++ 13.3.3.2p2): When comparing the basic forms of implicit 3881 // conversion sequences (as defined in 13.3.3.1) 3882 // -- a standard conversion sequence (13.3.3.1.1) is a better 3883 // conversion sequence than a user-defined conversion sequence or 3884 // an ellipsis conversion sequence, and 3885 // -- a user-defined conversion sequence (13.3.3.1.2) is a better 3886 // conversion sequence than an ellipsis conversion sequence 3887 // (13.3.3.1.3). 3888 // 3889 // C++0x [over.best.ics]p10: 3890 // For the purpose of ranking implicit conversion sequences as 3891 // described in 13.3.3.2, the ambiguous conversion sequence is 3892 // treated as a user-defined sequence that is indistinguishable 3893 // from any other user-defined conversion sequence. 3894 3895 // String literal to 'char *' conversion has been deprecated in C++03. It has 3896 // been removed from C++11. We still accept this conversion, if it happens at 3897 // the best viable function. Otherwise, this conversion is considered worse 3898 // than ellipsis conversion. Consider this as an extension; this is not in the 3899 // standard. For example: 3900 // 3901 // int &f(...); // #1 3902 // void f(char*); // #2 3903 // void g() { int &r = f("foo"); } 3904 // 3905 // In C++03, we pick #2 as the best viable function. 3906 // In C++11, we pick #1 as the best viable function, because ellipsis 3907 // conversion is better than string-literal to char* conversion (since there 3908 // is no such conversion in C++11). If there was no #1 at all or #1 couldn't 3909 // convert arguments, #2 would be the best viable function in C++11. 3910 // If the best viable function has this conversion, a warning will be issued 3911 // in C++03, or an ExtWarn (+SFINAE failure) will be issued in C++11. 3912 3913 if (S.getLangOpts().CPlusPlus11 && !S.getLangOpts().WritableStrings && 3914 hasDeprecatedStringLiteralToCharPtrConversion(ICS1) != 3915 hasDeprecatedStringLiteralToCharPtrConversion(ICS2) && 3916 // Ill-formedness must not differ 3917 ICS1.isBad() == ICS2.isBad()) 3918 return hasDeprecatedStringLiteralToCharPtrConversion(ICS1) 3919 ? ImplicitConversionSequence::Worse 3920 : ImplicitConversionSequence::Better; 3921 3922 if (ICS1.getKindRank() < ICS2.getKindRank()) 3923 return ImplicitConversionSequence::Better; 3924 if (ICS2.getKindRank() < ICS1.getKindRank()) 3925 return ImplicitConversionSequence::Worse; 3926 3927 // The following checks require both conversion sequences to be of 3928 // the same kind. 3929 if (ICS1.getKind() != ICS2.getKind()) 3930 return ImplicitConversionSequence::Indistinguishable; 3931 3932 ImplicitConversionSequence::CompareKind Result = 3933 ImplicitConversionSequence::Indistinguishable; 3934 3935 // Two implicit conversion sequences of the same form are 3936 // indistinguishable conversion sequences unless one of the 3937 // following rules apply: (C++ 13.3.3.2p3): 3938 3939 // List-initialization sequence L1 is a better conversion sequence than 3940 // list-initialization sequence L2 if: 3941 // - L1 converts to std::initializer_list<X> for some X and L2 does not, or, 3942 // if not that, 3943 // — L1 and L2 convert to arrays of the same element type, and either the 3944 // number of elements n_1 initialized by L1 is less than the number of 3945 // elements n_2 initialized by L2, or (C++20) n_1 = n_2 and L2 converts to 3946 // an array of unknown bound and L1 does not, 3947 // even if one of the other rules in this paragraph would otherwise apply. 3948 if (!ICS1.isBad()) { 3949 bool StdInit1 = false, StdInit2 = false; 3950 if (ICS1.hasInitializerListContainerType()) 3951 StdInit1 = S.isStdInitializerList(ICS1.getInitializerListContainerType(), 3952 nullptr); 3953 if (ICS2.hasInitializerListContainerType()) 3954 StdInit2 = S.isStdInitializerList(ICS2.getInitializerListContainerType(), 3955 nullptr); 3956 if (StdInit1 != StdInit2) 3957 return StdInit1 ? ImplicitConversionSequence::Better 3958 : ImplicitConversionSequence::Worse; 3959 3960 if (ICS1.hasInitializerListContainerType() && 3961 ICS2.hasInitializerListContainerType()) 3962 if (auto *CAT1 = S.Context.getAsConstantArrayType( 3963 ICS1.getInitializerListContainerType())) 3964 if (auto *CAT2 = S.Context.getAsConstantArrayType( 3965 ICS2.getInitializerListContainerType())) { 3966 if (S.Context.hasSameUnqualifiedType(CAT1->getElementType(), 3967 CAT2->getElementType())) { 3968 // Both to arrays of the same element type 3969 if (CAT1->getSize() != CAT2->getSize()) 3970 // Different sized, the smaller wins 3971 return CAT1->getSize().ult(CAT2->getSize()) 3972 ? ImplicitConversionSequence::Better 3973 : ImplicitConversionSequence::Worse; 3974 if (ICS1.isInitializerListOfIncompleteArray() != 3975 ICS2.isInitializerListOfIncompleteArray()) 3976 // One is incomplete, it loses 3977 return ICS2.isInitializerListOfIncompleteArray() 3978 ? ImplicitConversionSequence::Better 3979 : ImplicitConversionSequence::Worse; 3980 } 3981 } 3982 } 3983 3984 if (ICS1.isStandard()) 3985 // Standard conversion sequence S1 is a better conversion sequence than 3986 // standard conversion sequence S2 if [...] 3987 Result = CompareStandardConversionSequences(S, Loc, 3988 ICS1.Standard, ICS2.Standard); 3989 else if (ICS1.isUserDefined()) { 3990 // User-defined conversion sequence U1 is a better conversion 3991 // sequence than another user-defined conversion sequence U2 if 3992 // they contain the same user-defined conversion function or 3993 // constructor and if the second standard conversion sequence of 3994 // U1 is better than the second standard conversion sequence of 3995 // U2 (C++ 13.3.3.2p3). 3996 if (ICS1.UserDefined.ConversionFunction == 3997 ICS2.UserDefined.ConversionFunction) 3998 Result = CompareStandardConversionSequences(S, Loc, 3999 ICS1.UserDefined.After, 4000 ICS2.UserDefined.After); 4001 else 4002 Result = compareConversionFunctions(S, 4003 ICS1.UserDefined.ConversionFunction, 4004 ICS2.UserDefined.ConversionFunction); 4005 } 4006 4007 return Result; 4008 } 4009 4010 // Per 13.3.3.2p3, compare the given standard conversion sequences to 4011 // determine if one is a proper subset of the other. 4012 static ImplicitConversionSequence::CompareKind 4013 compareStandardConversionSubsets(ASTContext &Context, 4014 const StandardConversionSequence& SCS1, 4015 const StandardConversionSequence& SCS2) { 4016 ImplicitConversionSequence::CompareKind Result 4017 = ImplicitConversionSequence::Indistinguishable; 4018 4019 // the identity conversion sequence is considered to be a subsequence of 4020 // any non-identity conversion sequence 4021 if (SCS1.isIdentityConversion() && !SCS2.isIdentityConversion()) 4022 return ImplicitConversionSequence::Better; 4023 else if (!SCS1.isIdentityConversion() && SCS2.isIdentityConversion()) 4024 return ImplicitConversionSequence::Worse; 4025 4026 if (SCS1.Second != SCS2.Second) { 4027 if (SCS1.Second == ICK_Identity) 4028 Result = ImplicitConversionSequence::Better; 4029 else if (SCS2.Second == ICK_Identity) 4030 Result = ImplicitConversionSequence::Worse; 4031 else 4032 return ImplicitConversionSequence::Indistinguishable; 4033 } else if (!Context.hasSimilarType(SCS1.getToType(1), SCS2.getToType(1))) 4034 return ImplicitConversionSequence::Indistinguishable; 4035 4036 if (SCS1.Third == SCS2.Third) { 4037 return Context.hasSameType(SCS1.getToType(2), SCS2.getToType(2))? Result 4038 : ImplicitConversionSequence::Indistinguishable; 4039 } 4040 4041 if (SCS1.Third == ICK_Identity) 4042 return Result == ImplicitConversionSequence::Worse 4043 ? ImplicitConversionSequence::Indistinguishable 4044 : ImplicitConversionSequence::Better; 4045 4046 if (SCS2.Third == ICK_Identity) 4047 return Result == ImplicitConversionSequence::Better 4048 ? ImplicitConversionSequence::Indistinguishable 4049 : ImplicitConversionSequence::Worse; 4050 4051 return ImplicitConversionSequence::Indistinguishable; 4052 } 4053 4054 /// Determine whether one of the given reference bindings is better 4055 /// than the other based on what kind of bindings they are. 4056 static bool 4057 isBetterReferenceBindingKind(const StandardConversionSequence &SCS1, 4058 const StandardConversionSequence &SCS2) { 4059 // C++0x [over.ics.rank]p3b4: 4060 // -- S1 and S2 are reference bindings (8.5.3) and neither refers to an 4061 // implicit object parameter of a non-static member function declared 4062 // without a ref-qualifier, and *either* S1 binds an rvalue reference 4063 // to an rvalue and S2 binds an lvalue reference *or S1 binds an 4064 // lvalue reference to a function lvalue and S2 binds an rvalue 4065 // reference*. 4066 // 4067 // FIXME: Rvalue references. We're going rogue with the above edits, 4068 // because the semantics in the current C++0x working paper (N3225 at the 4069 // time of this writing) break the standard definition of std::forward 4070 // and std::reference_wrapper when dealing with references to functions. 4071 // Proposed wording changes submitted to CWG for consideration. 4072 if (SCS1.BindsImplicitObjectArgumentWithoutRefQualifier || 4073 SCS2.BindsImplicitObjectArgumentWithoutRefQualifier) 4074 return false; 4075 4076 return (!SCS1.IsLvalueReference && SCS1.BindsToRvalue && 4077 SCS2.IsLvalueReference) || 4078 (SCS1.IsLvalueReference && SCS1.BindsToFunctionLvalue && 4079 !SCS2.IsLvalueReference && SCS2.BindsToFunctionLvalue); 4080 } 4081 4082 enum class FixedEnumPromotion { 4083 None, 4084 ToUnderlyingType, 4085 ToPromotedUnderlyingType 4086 }; 4087 4088 /// Returns kind of fixed enum promotion the \a SCS uses. 4089 static FixedEnumPromotion 4090 getFixedEnumPromtion(Sema &S, const StandardConversionSequence &SCS) { 4091 4092 if (SCS.Second != ICK_Integral_Promotion) 4093 return FixedEnumPromotion::None; 4094 4095 QualType FromType = SCS.getFromType(); 4096 if (!FromType->isEnumeralType()) 4097 return FixedEnumPromotion::None; 4098 4099 EnumDecl *Enum = FromType->castAs<EnumType>()->getDecl(); 4100 if (!Enum->isFixed()) 4101 return FixedEnumPromotion::None; 4102 4103 QualType UnderlyingType = Enum->getIntegerType(); 4104 if (S.Context.hasSameType(SCS.getToType(1), UnderlyingType)) 4105 return FixedEnumPromotion::ToUnderlyingType; 4106 4107 return FixedEnumPromotion::ToPromotedUnderlyingType; 4108 } 4109 4110 /// CompareStandardConversionSequences - Compare two standard 4111 /// conversion sequences to determine whether one is better than the 4112 /// other or if they are indistinguishable (C++ 13.3.3.2p3). 4113 static ImplicitConversionSequence::CompareKind 4114 CompareStandardConversionSequences(Sema &S, SourceLocation Loc, 4115 const StandardConversionSequence& SCS1, 4116 const StandardConversionSequence& SCS2) 4117 { 4118 // Standard conversion sequence S1 is a better conversion sequence 4119 // than standard conversion sequence S2 if (C++ 13.3.3.2p3): 4120 4121 // -- S1 is a proper subsequence of S2 (comparing the conversion 4122 // sequences in the canonical form defined by 13.3.3.1.1, 4123 // excluding any Lvalue Transformation; the identity conversion 4124 // sequence is considered to be a subsequence of any 4125 // non-identity conversion sequence) or, if not that, 4126 if (ImplicitConversionSequence::CompareKind CK 4127 = compareStandardConversionSubsets(S.Context, SCS1, SCS2)) 4128 return CK; 4129 4130 // -- the rank of S1 is better than the rank of S2 (by the rules 4131 // defined below), or, if not that, 4132 ImplicitConversionRank Rank1 = SCS1.getRank(); 4133 ImplicitConversionRank Rank2 = SCS2.getRank(); 4134 if (Rank1 < Rank2) 4135 return ImplicitConversionSequence::Better; 4136 else if (Rank2 < Rank1) 4137 return ImplicitConversionSequence::Worse; 4138 4139 // (C++ 13.3.3.2p4): Two conversion sequences with the same rank 4140 // are indistinguishable unless one of the following rules 4141 // applies: 4142 4143 // A conversion that is not a conversion of a pointer, or 4144 // pointer to member, to bool is better than another conversion 4145 // that is such a conversion. 4146 if (SCS1.isPointerConversionToBool() != SCS2.isPointerConversionToBool()) 4147 return SCS2.isPointerConversionToBool() 4148 ? ImplicitConversionSequence::Better 4149 : ImplicitConversionSequence::Worse; 4150 4151 // C++14 [over.ics.rank]p4b2: 4152 // This is retroactively applied to C++11 by CWG 1601. 4153 // 4154 // A conversion that promotes an enumeration whose underlying type is fixed 4155 // to its underlying type is better than one that promotes to the promoted 4156 // underlying type, if the two are different. 4157 FixedEnumPromotion FEP1 = getFixedEnumPromtion(S, SCS1); 4158 FixedEnumPromotion FEP2 = getFixedEnumPromtion(S, SCS2); 4159 if (FEP1 != FixedEnumPromotion::None && FEP2 != FixedEnumPromotion::None && 4160 FEP1 != FEP2) 4161 return FEP1 == FixedEnumPromotion::ToUnderlyingType 4162 ? ImplicitConversionSequence::Better 4163 : ImplicitConversionSequence::Worse; 4164 4165 // C++ [over.ics.rank]p4b2: 4166 // 4167 // If class B is derived directly or indirectly from class A, 4168 // conversion of B* to A* is better than conversion of B* to 4169 // void*, and conversion of A* to void* is better than conversion 4170 // of B* to void*. 4171 bool SCS1ConvertsToVoid 4172 = SCS1.isPointerConversionToVoidPointer(S.Context); 4173 bool SCS2ConvertsToVoid 4174 = SCS2.isPointerConversionToVoidPointer(S.Context); 4175 if (SCS1ConvertsToVoid != SCS2ConvertsToVoid) { 4176 // Exactly one of the conversion sequences is a conversion to 4177 // a void pointer; it's the worse conversion. 4178 return SCS2ConvertsToVoid ? ImplicitConversionSequence::Better 4179 : ImplicitConversionSequence::Worse; 4180 } else if (!SCS1ConvertsToVoid && !SCS2ConvertsToVoid) { 4181 // Neither conversion sequence converts to a void pointer; compare 4182 // their derived-to-base conversions. 4183 if (ImplicitConversionSequence::CompareKind DerivedCK 4184 = CompareDerivedToBaseConversions(S, Loc, SCS1, SCS2)) 4185 return DerivedCK; 4186 } else if (SCS1ConvertsToVoid && SCS2ConvertsToVoid && 4187 !S.Context.hasSameType(SCS1.getFromType(), SCS2.getFromType())) { 4188 // Both conversion sequences are conversions to void 4189 // pointers. Compare the source types to determine if there's an 4190 // inheritance relationship in their sources. 4191 QualType FromType1 = SCS1.getFromType(); 4192 QualType FromType2 = SCS2.getFromType(); 4193 4194 // Adjust the types we're converting from via the array-to-pointer 4195 // conversion, if we need to. 4196 if (SCS1.First == ICK_Array_To_Pointer) 4197 FromType1 = S.Context.getArrayDecayedType(FromType1); 4198 if (SCS2.First == ICK_Array_To_Pointer) 4199 FromType2 = S.Context.getArrayDecayedType(FromType2); 4200 4201 QualType FromPointee1 = FromType1->getPointeeType().getUnqualifiedType(); 4202 QualType FromPointee2 = FromType2->getPointeeType().getUnqualifiedType(); 4203 4204 if (S.IsDerivedFrom(Loc, FromPointee2, FromPointee1)) 4205 return ImplicitConversionSequence::Better; 4206 else if (S.IsDerivedFrom(Loc, FromPointee1, FromPointee2)) 4207 return ImplicitConversionSequence::Worse; 4208 4209 // Objective-C++: If one interface is more specific than the 4210 // other, it is the better one. 4211 const ObjCObjectPointerType* FromObjCPtr1 4212 = FromType1->getAs<ObjCObjectPointerType>(); 4213 const ObjCObjectPointerType* FromObjCPtr2 4214 = FromType2->getAs<ObjCObjectPointerType>(); 4215 if (FromObjCPtr1 && FromObjCPtr2) { 4216 bool AssignLeft = S.Context.canAssignObjCInterfaces(FromObjCPtr1, 4217 FromObjCPtr2); 4218 bool AssignRight = S.Context.canAssignObjCInterfaces(FromObjCPtr2, 4219 FromObjCPtr1); 4220 if (AssignLeft != AssignRight) { 4221 return AssignLeft? ImplicitConversionSequence::Better 4222 : ImplicitConversionSequence::Worse; 4223 } 4224 } 4225 } 4226 4227 if (SCS1.ReferenceBinding && SCS2.ReferenceBinding) { 4228 // Check for a better reference binding based on the kind of bindings. 4229 if (isBetterReferenceBindingKind(SCS1, SCS2)) 4230 return ImplicitConversionSequence::Better; 4231 else if (isBetterReferenceBindingKind(SCS2, SCS1)) 4232 return ImplicitConversionSequence::Worse; 4233 } 4234 4235 // Compare based on qualification conversions (C++ 13.3.3.2p3, 4236 // bullet 3). 4237 if (ImplicitConversionSequence::CompareKind QualCK 4238 = CompareQualificationConversions(S, SCS1, SCS2)) 4239 return QualCK; 4240 4241 if (SCS1.ReferenceBinding && SCS2.ReferenceBinding) { 4242 // C++ [over.ics.rank]p3b4: 4243 // -- S1 and S2 are reference bindings (8.5.3), and the types to 4244 // which the references refer are the same type except for 4245 // top-level cv-qualifiers, and the type to which the reference 4246 // initialized by S2 refers is more cv-qualified than the type 4247 // to which the reference initialized by S1 refers. 4248 QualType T1 = SCS1.getToType(2); 4249 QualType T2 = SCS2.getToType(2); 4250 T1 = S.Context.getCanonicalType(T1); 4251 T2 = S.Context.getCanonicalType(T2); 4252 Qualifiers T1Quals, T2Quals; 4253 QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals); 4254 QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals); 4255 if (UnqualT1 == UnqualT2) { 4256 // Objective-C++ ARC: If the references refer to objects with different 4257 // lifetimes, prefer bindings that don't change lifetime. 4258 if (SCS1.ObjCLifetimeConversionBinding != 4259 SCS2.ObjCLifetimeConversionBinding) { 4260 return SCS1.ObjCLifetimeConversionBinding 4261 ? ImplicitConversionSequence::Worse 4262 : ImplicitConversionSequence::Better; 4263 } 4264 4265 // If the type is an array type, promote the element qualifiers to the 4266 // type for comparison. 4267 if (isa<ArrayType>(T1) && T1Quals) 4268 T1 = S.Context.getQualifiedType(UnqualT1, T1Quals); 4269 if (isa<ArrayType>(T2) && T2Quals) 4270 T2 = S.Context.getQualifiedType(UnqualT2, T2Quals); 4271 if (T2.isMoreQualifiedThan(T1)) 4272 return ImplicitConversionSequence::Better; 4273 if (T1.isMoreQualifiedThan(T2)) 4274 return ImplicitConversionSequence::Worse; 4275 } 4276 } 4277 4278 // In Microsoft mode (below 19.28), prefer an integral conversion to a 4279 // floating-to-integral conversion if the integral conversion 4280 // is between types of the same size. 4281 // For example: 4282 // void f(float); 4283 // void f(int); 4284 // int main { 4285 // long a; 4286 // f(a); 4287 // } 4288 // Here, MSVC will call f(int) instead of generating a compile error 4289 // as clang will do in standard mode. 4290 if (S.getLangOpts().MSVCCompat && 4291 !S.getLangOpts().isCompatibleWithMSVC(LangOptions::MSVC2019_8) && 4292 SCS1.Second == ICK_Integral_Conversion && 4293 SCS2.Second == ICK_Floating_Integral && 4294 S.Context.getTypeSize(SCS1.getFromType()) == 4295 S.Context.getTypeSize(SCS1.getToType(2))) 4296 return ImplicitConversionSequence::Better; 4297 4298 // Prefer a compatible vector conversion over a lax vector conversion 4299 // For example: 4300 // 4301 // typedef float __v4sf __attribute__((__vector_size__(16))); 4302 // void f(vector float); 4303 // void f(vector signed int); 4304 // int main() { 4305 // __v4sf a; 4306 // f(a); 4307 // } 4308 // Here, we'd like to choose f(vector float) and not 4309 // report an ambiguous call error 4310 if (SCS1.Second == ICK_Vector_Conversion && 4311 SCS2.Second == ICK_Vector_Conversion) { 4312 bool SCS1IsCompatibleVectorConversion = S.Context.areCompatibleVectorTypes( 4313 SCS1.getFromType(), SCS1.getToType(2)); 4314 bool SCS2IsCompatibleVectorConversion = S.Context.areCompatibleVectorTypes( 4315 SCS2.getFromType(), SCS2.getToType(2)); 4316 4317 if (SCS1IsCompatibleVectorConversion != SCS2IsCompatibleVectorConversion) 4318 return SCS1IsCompatibleVectorConversion 4319 ? ImplicitConversionSequence::Better 4320 : ImplicitConversionSequence::Worse; 4321 } 4322 4323 if (SCS1.Second == ICK_SVE_Vector_Conversion && 4324 SCS2.Second == ICK_SVE_Vector_Conversion) { 4325 bool SCS1IsCompatibleSVEVectorConversion = 4326 S.Context.areCompatibleSveTypes(SCS1.getFromType(), SCS1.getToType(2)); 4327 bool SCS2IsCompatibleSVEVectorConversion = 4328 S.Context.areCompatibleSveTypes(SCS2.getFromType(), SCS2.getToType(2)); 4329 4330 if (SCS1IsCompatibleSVEVectorConversion != 4331 SCS2IsCompatibleSVEVectorConversion) 4332 return SCS1IsCompatibleSVEVectorConversion 4333 ? ImplicitConversionSequence::Better 4334 : ImplicitConversionSequence::Worse; 4335 } 4336 4337 if (SCS1.Second == ICK_RVV_Vector_Conversion && 4338 SCS2.Second == ICK_RVV_Vector_Conversion) { 4339 bool SCS1IsCompatibleRVVVectorConversion = 4340 S.Context.areCompatibleRVVTypes(SCS1.getFromType(), SCS1.getToType(2)); 4341 bool SCS2IsCompatibleRVVVectorConversion = 4342 S.Context.areCompatibleRVVTypes(SCS2.getFromType(), SCS2.getToType(2)); 4343 4344 if (SCS1IsCompatibleRVVVectorConversion != 4345 SCS2IsCompatibleRVVVectorConversion) 4346 return SCS1IsCompatibleRVVVectorConversion 4347 ? ImplicitConversionSequence::Better 4348 : ImplicitConversionSequence::Worse; 4349 } 4350 4351 return ImplicitConversionSequence::Indistinguishable; 4352 } 4353 4354 /// CompareQualificationConversions - Compares two standard conversion 4355 /// sequences to determine whether they can be ranked based on their 4356 /// qualification conversions (C++ 13.3.3.2p3 bullet 3). 4357 static ImplicitConversionSequence::CompareKind 4358 CompareQualificationConversions(Sema &S, 4359 const StandardConversionSequence& SCS1, 4360 const StandardConversionSequence& SCS2) { 4361 // C++ [over.ics.rank]p3: 4362 // -- S1 and S2 differ only in their qualification conversion and 4363 // yield similar types T1 and T2 (C++ 4.4), respectively, [...] 4364 // [C++98] 4365 // [...] and the cv-qualification signature of type T1 is a proper subset 4366 // of the cv-qualification signature of type T2, and S1 is not the 4367 // deprecated string literal array-to-pointer conversion (4.2). 4368 // [C++2a] 4369 // [...] where T1 can be converted to T2 by a qualification conversion. 4370 if (SCS1.First != SCS2.First || SCS1.Second != SCS2.Second || 4371 SCS1.Third != SCS2.Third || SCS1.Third != ICK_Qualification) 4372 return ImplicitConversionSequence::Indistinguishable; 4373 4374 // FIXME: the example in the standard doesn't use a qualification 4375 // conversion (!) 4376 QualType T1 = SCS1.getToType(2); 4377 QualType T2 = SCS2.getToType(2); 4378 T1 = S.Context.getCanonicalType(T1); 4379 T2 = S.Context.getCanonicalType(T2); 4380 assert(!T1->isReferenceType() && !T2->isReferenceType()); 4381 Qualifiers T1Quals, T2Quals; 4382 QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals); 4383 QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals); 4384 4385 // If the types are the same, we won't learn anything by unwrapping 4386 // them. 4387 if (UnqualT1 == UnqualT2) 4388 return ImplicitConversionSequence::Indistinguishable; 4389 4390 // Don't ever prefer a standard conversion sequence that uses the deprecated 4391 // string literal array to pointer conversion. 4392 bool CanPick1 = !SCS1.DeprecatedStringLiteralToCharPtr; 4393 bool CanPick2 = !SCS2.DeprecatedStringLiteralToCharPtr; 4394 4395 // Objective-C++ ARC: 4396 // Prefer qualification conversions not involving a change in lifetime 4397 // to qualification conversions that do change lifetime. 4398 if (SCS1.QualificationIncludesObjCLifetime && 4399 !SCS2.QualificationIncludesObjCLifetime) 4400 CanPick1 = false; 4401 if (SCS2.QualificationIncludesObjCLifetime && 4402 !SCS1.QualificationIncludesObjCLifetime) 4403 CanPick2 = false; 4404 4405 bool ObjCLifetimeConversion; 4406 if (CanPick1 && 4407 !S.IsQualificationConversion(T1, T2, false, ObjCLifetimeConversion)) 4408 CanPick1 = false; 4409 // FIXME: In Objective-C ARC, we can have qualification conversions in both 4410 // directions, so we can't short-cut this second check in general. 4411 if (CanPick2 && 4412 !S.IsQualificationConversion(T2, T1, false, ObjCLifetimeConversion)) 4413 CanPick2 = false; 4414 4415 if (CanPick1 != CanPick2) 4416 return CanPick1 ? ImplicitConversionSequence::Better 4417 : ImplicitConversionSequence::Worse; 4418 return ImplicitConversionSequence::Indistinguishable; 4419 } 4420 4421 /// CompareDerivedToBaseConversions - Compares two standard conversion 4422 /// sequences to determine whether they can be ranked based on their 4423 /// various kinds of derived-to-base conversions (C++ 4424 /// [over.ics.rank]p4b3). As part of these checks, we also look at 4425 /// conversions between Objective-C interface types. 4426 static ImplicitConversionSequence::CompareKind 4427 CompareDerivedToBaseConversions(Sema &S, SourceLocation Loc, 4428 const StandardConversionSequence& SCS1, 4429 const StandardConversionSequence& SCS2) { 4430 QualType FromType1 = SCS1.getFromType(); 4431 QualType ToType1 = SCS1.getToType(1); 4432 QualType FromType2 = SCS2.getFromType(); 4433 QualType ToType2 = SCS2.getToType(1); 4434 4435 // Adjust the types we're converting from via the array-to-pointer 4436 // conversion, if we need to. 4437 if (SCS1.First == ICK_Array_To_Pointer) 4438 FromType1 = S.Context.getArrayDecayedType(FromType1); 4439 if (SCS2.First == ICK_Array_To_Pointer) 4440 FromType2 = S.Context.getArrayDecayedType(FromType2); 4441 4442 // Canonicalize all of the types. 4443 FromType1 = S.Context.getCanonicalType(FromType1); 4444 ToType1 = S.Context.getCanonicalType(ToType1); 4445 FromType2 = S.Context.getCanonicalType(FromType2); 4446 ToType2 = S.Context.getCanonicalType(ToType2); 4447 4448 // C++ [over.ics.rank]p4b3: 4449 // 4450 // If class B is derived directly or indirectly from class A and 4451 // class C is derived directly or indirectly from B, 4452 // 4453 // Compare based on pointer conversions. 4454 if (SCS1.Second == ICK_Pointer_Conversion && 4455 SCS2.Second == ICK_Pointer_Conversion && 4456 /*FIXME: Remove if Objective-C id conversions get their own rank*/ 4457 FromType1->isPointerType() && FromType2->isPointerType() && 4458 ToType1->isPointerType() && ToType2->isPointerType()) { 4459 QualType FromPointee1 = 4460 FromType1->castAs<PointerType>()->getPointeeType().getUnqualifiedType(); 4461 QualType ToPointee1 = 4462 ToType1->castAs<PointerType>()->getPointeeType().getUnqualifiedType(); 4463 QualType FromPointee2 = 4464 FromType2->castAs<PointerType>()->getPointeeType().getUnqualifiedType(); 4465 QualType ToPointee2 = 4466 ToType2->castAs<PointerType>()->getPointeeType().getUnqualifiedType(); 4467 4468 // -- conversion of C* to B* is better than conversion of C* to A*, 4469 if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) { 4470 if (S.IsDerivedFrom(Loc, ToPointee1, ToPointee2)) 4471 return ImplicitConversionSequence::Better; 4472 else if (S.IsDerivedFrom(Loc, ToPointee2, ToPointee1)) 4473 return ImplicitConversionSequence::Worse; 4474 } 4475 4476 // -- conversion of B* to A* is better than conversion of C* to A*, 4477 if (FromPointee1 != FromPointee2 && ToPointee1 == ToPointee2) { 4478 if (S.IsDerivedFrom(Loc, FromPointee2, FromPointee1)) 4479 return ImplicitConversionSequence::Better; 4480 else if (S.IsDerivedFrom(Loc, FromPointee1, FromPointee2)) 4481 return ImplicitConversionSequence::Worse; 4482 } 4483 } else if (SCS1.Second == ICK_Pointer_Conversion && 4484 SCS2.Second == ICK_Pointer_Conversion) { 4485 const ObjCObjectPointerType *FromPtr1 4486 = FromType1->getAs<ObjCObjectPointerType>(); 4487 const ObjCObjectPointerType *FromPtr2 4488 = FromType2->getAs<ObjCObjectPointerType>(); 4489 const ObjCObjectPointerType *ToPtr1 4490 = ToType1->getAs<ObjCObjectPointerType>(); 4491 const ObjCObjectPointerType *ToPtr2 4492 = ToType2->getAs<ObjCObjectPointerType>(); 4493 4494 if (FromPtr1 && FromPtr2 && ToPtr1 && ToPtr2) { 4495 // Apply the same conversion ranking rules for Objective-C pointer types 4496 // that we do for C++ pointers to class types. However, we employ the 4497 // Objective-C pseudo-subtyping relationship used for assignment of 4498 // Objective-C pointer types. 4499 bool FromAssignLeft 4500 = S.Context.canAssignObjCInterfaces(FromPtr1, FromPtr2); 4501 bool FromAssignRight 4502 = S.Context.canAssignObjCInterfaces(FromPtr2, FromPtr1); 4503 bool ToAssignLeft 4504 = S.Context.canAssignObjCInterfaces(ToPtr1, ToPtr2); 4505 bool ToAssignRight 4506 = S.Context.canAssignObjCInterfaces(ToPtr2, ToPtr1); 4507 4508 // A conversion to an a non-id object pointer type or qualified 'id' 4509 // type is better than a conversion to 'id'. 4510 if (ToPtr1->isObjCIdType() && 4511 (ToPtr2->isObjCQualifiedIdType() || ToPtr2->getInterfaceDecl())) 4512 return ImplicitConversionSequence::Worse; 4513 if (ToPtr2->isObjCIdType() && 4514 (ToPtr1->isObjCQualifiedIdType() || ToPtr1->getInterfaceDecl())) 4515 return ImplicitConversionSequence::Better; 4516 4517 // A conversion to a non-id object pointer type is better than a 4518 // conversion to a qualified 'id' type 4519 if (ToPtr1->isObjCQualifiedIdType() && ToPtr2->getInterfaceDecl()) 4520 return ImplicitConversionSequence::Worse; 4521 if (ToPtr2->isObjCQualifiedIdType() && ToPtr1->getInterfaceDecl()) 4522 return ImplicitConversionSequence::Better; 4523 4524 // A conversion to an a non-Class object pointer type or qualified 'Class' 4525 // type is better than a conversion to 'Class'. 4526 if (ToPtr1->isObjCClassType() && 4527 (ToPtr2->isObjCQualifiedClassType() || ToPtr2->getInterfaceDecl())) 4528 return ImplicitConversionSequence::Worse; 4529 if (ToPtr2->isObjCClassType() && 4530 (ToPtr1->isObjCQualifiedClassType() || ToPtr1->getInterfaceDecl())) 4531 return ImplicitConversionSequence::Better; 4532 4533 // A conversion to a non-Class object pointer type is better than a 4534 // conversion to a qualified 'Class' type. 4535 if (ToPtr1->isObjCQualifiedClassType() && ToPtr2->getInterfaceDecl()) 4536 return ImplicitConversionSequence::Worse; 4537 if (ToPtr2->isObjCQualifiedClassType() && ToPtr1->getInterfaceDecl()) 4538 return ImplicitConversionSequence::Better; 4539 4540 // -- "conversion of C* to B* is better than conversion of C* to A*," 4541 if (S.Context.hasSameType(FromType1, FromType2) && 4542 !FromPtr1->isObjCIdType() && !FromPtr1->isObjCClassType() && 4543 (ToAssignLeft != ToAssignRight)) { 4544 if (FromPtr1->isSpecialized()) { 4545 // "conversion of B<A> * to B * is better than conversion of B * to 4546 // C *. 4547 bool IsFirstSame = 4548 FromPtr1->getInterfaceDecl() == ToPtr1->getInterfaceDecl(); 4549 bool IsSecondSame = 4550 FromPtr1->getInterfaceDecl() == ToPtr2->getInterfaceDecl(); 4551 if (IsFirstSame) { 4552 if (!IsSecondSame) 4553 return ImplicitConversionSequence::Better; 4554 } else if (IsSecondSame) 4555 return ImplicitConversionSequence::Worse; 4556 } 4557 return ToAssignLeft? ImplicitConversionSequence::Worse 4558 : ImplicitConversionSequence::Better; 4559 } 4560 4561 // -- "conversion of B* to A* is better than conversion of C* to A*," 4562 if (S.Context.hasSameUnqualifiedType(ToType1, ToType2) && 4563 (FromAssignLeft != FromAssignRight)) 4564 return FromAssignLeft? ImplicitConversionSequence::Better 4565 : ImplicitConversionSequence::Worse; 4566 } 4567 } 4568 4569 // Ranking of member-pointer types. 4570 if (SCS1.Second == ICK_Pointer_Member && SCS2.Second == ICK_Pointer_Member && 4571 FromType1->isMemberPointerType() && FromType2->isMemberPointerType() && 4572 ToType1->isMemberPointerType() && ToType2->isMemberPointerType()) { 4573 const auto *FromMemPointer1 = FromType1->castAs<MemberPointerType>(); 4574 const auto *ToMemPointer1 = ToType1->castAs<MemberPointerType>(); 4575 const auto *FromMemPointer2 = FromType2->castAs<MemberPointerType>(); 4576 const auto *ToMemPointer2 = ToType2->castAs<MemberPointerType>(); 4577 const Type *FromPointeeType1 = FromMemPointer1->getClass(); 4578 const Type *ToPointeeType1 = ToMemPointer1->getClass(); 4579 const Type *FromPointeeType2 = FromMemPointer2->getClass(); 4580 const Type *ToPointeeType2 = ToMemPointer2->getClass(); 4581 QualType FromPointee1 = QualType(FromPointeeType1, 0).getUnqualifiedType(); 4582 QualType ToPointee1 = QualType(ToPointeeType1, 0).getUnqualifiedType(); 4583 QualType FromPointee2 = QualType(FromPointeeType2, 0).getUnqualifiedType(); 4584 QualType ToPointee2 = QualType(ToPointeeType2, 0).getUnqualifiedType(); 4585 // conversion of A::* to B::* is better than conversion of A::* to C::*, 4586 if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) { 4587 if (S.IsDerivedFrom(Loc, ToPointee1, ToPointee2)) 4588 return ImplicitConversionSequence::Worse; 4589 else if (S.IsDerivedFrom(Loc, ToPointee2, ToPointee1)) 4590 return ImplicitConversionSequence::Better; 4591 } 4592 // conversion of B::* to C::* is better than conversion of A::* to C::* 4593 if (ToPointee1 == ToPointee2 && FromPointee1 != FromPointee2) { 4594 if (S.IsDerivedFrom(Loc, FromPointee1, FromPointee2)) 4595 return ImplicitConversionSequence::Better; 4596 else if (S.IsDerivedFrom(Loc, FromPointee2, FromPointee1)) 4597 return ImplicitConversionSequence::Worse; 4598 } 4599 } 4600 4601 if (SCS1.Second == ICK_Derived_To_Base) { 4602 // -- conversion of C to B is better than conversion of C to A, 4603 // -- binding of an expression of type C to a reference of type 4604 // B& is better than binding an expression of type C to a 4605 // reference of type A&, 4606 if (S.Context.hasSameUnqualifiedType(FromType1, FromType2) && 4607 !S.Context.hasSameUnqualifiedType(ToType1, ToType2)) { 4608 if (S.IsDerivedFrom(Loc, ToType1, ToType2)) 4609 return ImplicitConversionSequence::Better; 4610 else if (S.IsDerivedFrom(Loc, ToType2, ToType1)) 4611 return ImplicitConversionSequence::Worse; 4612 } 4613 4614 // -- conversion of B to A is better than conversion of C to A. 4615 // -- binding of an expression of type B to a reference of type 4616 // A& is better than binding an expression of type C to a 4617 // reference of type A&, 4618 if (!S.Context.hasSameUnqualifiedType(FromType1, FromType2) && 4619 S.Context.hasSameUnqualifiedType(ToType1, ToType2)) { 4620 if (S.IsDerivedFrom(Loc, FromType2, FromType1)) 4621 return ImplicitConversionSequence::Better; 4622 else if (S.IsDerivedFrom(Loc, FromType1, FromType2)) 4623 return ImplicitConversionSequence::Worse; 4624 } 4625 } 4626 4627 return ImplicitConversionSequence::Indistinguishable; 4628 } 4629 4630 static QualType withoutUnaligned(ASTContext &Ctx, QualType T) { 4631 if (!T.getQualifiers().hasUnaligned()) 4632 return T; 4633 4634 Qualifiers Q; 4635 T = Ctx.getUnqualifiedArrayType(T, Q); 4636 Q.removeUnaligned(); 4637 return Ctx.getQualifiedType(T, Q); 4638 } 4639 4640 /// CompareReferenceRelationship - Compare the two types T1 and T2 to 4641 /// determine whether they are reference-compatible, 4642 /// reference-related, or incompatible, for use in C++ initialization by 4643 /// reference (C++ [dcl.ref.init]p4). Neither type can be a reference 4644 /// type, and the first type (T1) is the pointee type of the reference 4645 /// type being initialized. 4646 Sema::ReferenceCompareResult 4647 Sema::CompareReferenceRelationship(SourceLocation Loc, 4648 QualType OrigT1, QualType OrigT2, 4649 ReferenceConversions *ConvOut) { 4650 assert(!OrigT1->isReferenceType() && 4651 "T1 must be the pointee type of the reference type"); 4652 assert(!OrigT2->isReferenceType() && "T2 cannot be a reference type"); 4653 4654 QualType T1 = Context.getCanonicalType(OrigT1); 4655 QualType T2 = Context.getCanonicalType(OrigT2); 4656 Qualifiers T1Quals, T2Quals; 4657 QualType UnqualT1 = Context.getUnqualifiedArrayType(T1, T1Quals); 4658 QualType UnqualT2 = Context.getUnqualifiedArrayType(T2, T2Quals); 4659 4660 ReferenceConversions ConvTmp; 4661 ReferenceConversions &Conv = ConvOut ? *ConvOut : ConvTmp; 4662 Conv = ReferenceConversions(); 4663 4664 // C++2a [dcl.init.ref]p4: 4665 // Given types "cv1 T1" and "cv2 T2," "cv1 T1" is 4666 // reference-related to "cv2 T2" if T1 is similar to T2, or 4667 // T1 is a base class of T2. 4668 // "cv1 T1" is reference-compatible with "cv2 T2" if 4669 // a prvalue of type "pointer to cv2 T2" can be converted to the type 4670 // "pointer to cv1 T1" via a standard conversion sequence. 4671 4672 // Check for standard conversions we can apply to pointers: derived-to-base 4673 // conversions, ObjC pointer conversions, and function pointer conversions. 4674 // (Qualification conversions are checked last.) 4675 QualType ConvertedT2; 4676 if (UnqualT1 == UnqualT2) { 4677 // Nothing to do. 4678 } else if (isCompleteType(Loc, OrigT2) && 4679 IsDerivedFrom(Loc, UnqualT2, UnqualT1)) 4680 Conv |= ReferenceConversions::DerivedToBase; 4681 else if (UnqualT1->isObjCObjectOrInterfaceType() && 4682 UnqualT2->isObjCObjectOrInterfaceType() && 4683 Context.canBindObjCObjectType(UnqualT1, UnqualT2)) 4684 Conv |= ReferenceConversions::ObjC; 4685 else if (UnqualT2->isFunctionType() && 4686 IsFunctionConversion(UnqualT2, UnqualT1, ConvertedT2)) { 4687 Conv |= ReferenceConversions::Function; 4688 // No need to check qualifiers; function types don't have them. 4689 return Ref_Compatible; 4690 } 4691 bool ConvertedReferent = Conv != 0; 4692 4693 // We can have a qualification conversion. Compute whether the types are 4694 // similar at the same time. 4695 bool PreviousToQualsIncludeConst = true; 4696 bool TopLevel = true; 4697 do { 4698 if (T1 == T2) 4699 break; 4700 4701 // We will need a qualification conversion. 4702 Conv |= ReferenceConversions::Qualification; 4703 4704 // Track whether we performed a qualification conversion anywhere other 4705 // than the top level. This matters for ranking reference bindings in 4706 // overload resolution. 4707 if (!TopLevel) 4708 Conv |= ReferenceConversions::NestedQualification; 4709 4710 // MS compiler ignores __unaligned qualifier for references; do the same. 4711 T1 = withoutUnaligned(Context, T1); 4712 T2 = withoutUnaligned(Context, T2); 4713 4714 // If we find a qualifier mismatch, the types are not reference-compatible, 4715 // but are still be reference-related if they're similar. 4716 bool ObjCLifetimeConversion = false; 4717 if (!isQualificationConversionStep(T2, T1, /*CStyle=*/false, TopLevel, 4718 PreviousToQualsIncludeConst, 4719 ObjCLifetimeConversion)) 4720 return (ConvertedReferent || Context.hasSimilarType(T1, T2)) 4721 ? Ref_Related 4722 : Ref_Incompatible; 4723 4724 // FIXME: Should we track this for any level other than the first? 4725 if (ObjCLifetimeConversion) 4726 Conv |= ReferenceConversions::ObjCLifetime; 4727 4728 TopLevel = false; 4729 } while (Context.UnwrapSimilarTypes(T1, T2)); 4730 4731 // At this point, if the types are reference-related, we must either have the 4732 // same inner type (ignoring qualifiers), or must have already worked out how 4733 // to convert the referent. 4734 return (ConvertedReferent || Context.hasSameUnqualifiedType(T1, T2)) 4735 ? Ref_Compatible 4736 : Ref_Incompatible; 4737 } 4738 4739 /// Look for a user-defined conversion to a value reference-compatible 4740 /// with DeclType. Return true if something definite is found. 4741 static bool 4742 FindConversionForRefInit(Sema &S, ImplicitConversionSequence &ICS, 4743 QualType DeclType, SourceLocation DeclLoc, 4744 Expr *Init, QualType T2, bool AllowRvalues, 4745 bool AllowExplicit) { 4746 assert(T2->isRecordType() && "Can only find conversions of record types."); 4747 auto *T2RecordDecl = cast<CXXRecordDecl>(T2->castAs<RecordType>()->getDecl()); 4748 4749 OverloadCandidateSet CandidateSet( 4750 DeclLoc, OverloadCandidateSet::CSK_InitByUserDefinedConversion); 4751 const auto &Conversions = T2RecordDecl->getVisibleConversionFunctions(); 4752 for (auto I = Conversions.begin(), E = Conversions.end(); I != E; ++I) { 4753 NamedDecl *D = *I; 4754 CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(D->getDeclContext()); 4755 if (isa<UsingShadowDecl>(D)) 4756 D = cast<UsingShadowDecl>(D)->getTargetDecl(); 4757 4758 FunctionTemplateDecl *ConvTemplate 4759 = dyn_cast<FunctionTemplateDecl>(D); 4760 CXXConversionDecl *Conv; 4761 if (ConvTemplate) 4762 Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl()); 4763 else 4764 Conv = cast<CXXConversionDecl>(D); 4765 4766 if (AllowRvalues) { 4767 // If we are initializing an rvalue reference, don't permit conversion 4768 // functions that return lvalues. 4769 if (!ConvTemplate && DeclType->isRValueReferenceType()) { 4770 const ReferenceType *RefType 4771 = Conv->getConversionType()->getAs<LValueReferenceType>(); 4772 if (RefType && !RefType->getPointeeType()->isFunctionType()) 4773 continue; 4774 } 4775 4776 if (!ConvTemplate && 4777 S.CompareReferenceRelationship( 4778 DeclLoc, 4779 Conv->getConversionType() 4780 .getNonReferenceType() 4781 .getUnqualifiedType(), 4782 DeclType.getNonReferenceType().getUnqualifiedType()) == 4783 Sema::Ref_Incompatible) 4784 continue; 4785 } else { 4786 // If the conversion function doesn't return a reference type, 4787 // it can't be considered for this conversion. An rvalue reference 4788 // is only acceptable if its referencee is a function type. 4789 4790 const ReferenceType *RefType = 4791 Conv->getConversionType()->getAs<ReferenceType>(); 4792 if (!RefType || 4793 (!RefType->isLValueReferenceType() && 4794 !RefType->getPointeeType()->isFunctionType())) 4795 continue; 4796 } 4797 4798 if (ConvTemplate) 4799 S.AddTemplateConversionCandidate( 4800 ConvTemplate, I.getPair(), ActingDC, Init, DeclType, CandidateSet, 4801 /*AllowObjCConversionOnExplicit=*/false, AllowExplicit); 4802 else 4803 S.AddConversionCandidate( 4804 Conv, I.getPair(), ActingDC, Init, DeclType, CandidateSet, 4805 /*AllowObjCConversionOnExplicit=*/false, AllowExplicit); 4806 } 4807 4808 bool HadMultipleCandidates = (CandidateSet.size() > 1); 4809 4810 OverloadCandidateSet::iterator Best; 4811 switch (CandidateSet.BestViableFunction(S, DeclLoc, Best)) { 4812 case OR_Success: 4813 // C++ [over.ics.ref]p1: 4814 // 4815 // [...] If the parameter binds directly to the result of 4816 // applying a conversion function to the argument 4817 // expression, the implicit conversion sequence is a 4818 // user-defined conversion sequence (13.3.3.1.2), with the 4819 // second standard conversion sequence either an identity 4820 // conversion or, if the conversion function returns an 4821 // entity of a type that is a derived class of the parameter 4822 // type, a derived-to-base Conversion. 4823 if (!Best->FinalConversion.DirectBinding) 4824 return false; 4825 4826 ICS.setUserDefined(); 4827 ICS.UserDefined.Before = Best->Conversions[0].Standard; 4828 ICS.UserDefined.After = Best->FinalConversion; 4829 ICS.UserDefined.HadMultipleCandidates = HadMultipleCandidates; 4830 ICS.UserDefined.ConversionFunction = Best->Function; 4831 ICS.UserDefined.FoundConversionFunction = Best->FoundDecl; 4832 ICS.UserDefined.EllipsisConversion = false; 4833 assert(ICS.UserDefined.After.ReferenceBinding && 4834 ICS.UserDefined.After.DirectBinding && 4835 "Expected a direct reference binding!"); 4836 return true; 4837 4838 case OR_Ambiguous: 4839 ICS.setAmbiguous(); 4840 for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(); 4841 Cand != CandidateSet.end(); ++Cand) 4842 if (Cand->Best) 4843 ICS.Ambiguous.addConversion(Cand->FoundDecl, Cand->Function); 4844 return true; 4845 4846 case OR_No_Viable_Function: 4847 case OR_Deleted: 4848 // There was no suitable conversion, or we found a deleted 4849 // conversion; continue with other checks. 4850 return false; 4851 } 4852 4853 llvm_unreachable("Invalid OverloadResult!"); 4854 } 4855 4856 /// Compute an implicit conversion sequence for reference 4857 /// initialization. 4858 static ImplicitConversionSequence 4859 TryReferenceInit(Sema &S, Expr *Init, QualType DeclType, 4860 SourceLocation DeclLoc, 4861 bool SuppressUserConversions, 4862 bool AllowExplicit) { 4863 assert(DeclType->isReferenceType() && "Reference init needs a reference"); 4864 4865 // Most paths end in a failed conversion. 4866 ImplicitConversionSequence ICS; 4867 ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType); 4868 4869 QualType T1 = DeclType->castAs<ReferenceType>()->getPointeeType(); 4870 QualType T2 = Init->getType(); 4871 4872 // If the initializer is the address of an overloaded function, try 4873 // to resolve the overloaded function. If all goes well, T2 is the 4874 // type of the resulting function. 4875 if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) { 4876 DeclAccessPair Found; 4877 if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(Init, DeclType, 4878 false, Found)) 4879 T2 = Fn->getType(); 4880 } 4881 4882 // Compute some basic properties of the types and the initializer. 4883 bool isRValRef = DeclType->isRValueReferenceType(); 4884 Expr::Classification InitCategory = Init->Classify(S.Context); 4885 4886 Sema::ReferenceConversions RefConv; 4887 Sema::ReferenceCompareResult RefRelationship = 4888 S.CompareReferenceRelationship(DeclLoc, T1, T2, &RefConv); 4889 4890 auto SetAsReferenceBinding = [&](bool BindsDirectly) { 4891 ICS.setStandard(); 4892 ICS.Standard.First = ICK_Identity; 4893 // FIXME: A reference binding can be a function conversion too. We should 4894 // consider that when ordering reference-to-function bindings. 4895 ICS.Standard.Second = (RefConv & Sema::ReferenceConversions::DerivedToBase) 4896 ? ICK_Derived_To_Base 4897 : (RefConv & Sema::ReferenceConversions::ObjC) 4898 ? ICK_Compatible_Conversion 4899 : ICK_Identity; 4900 // FIXME: As a speculative fix to a defect introduced by CWG2352, we rank 4901 // a reference binding that performs a non-top-level qualification 4902 // conversion as a qualification conversion, not as an identity conversion. 4903 ICS.Standard.Third = (RefConv & 4904 Sema::ReferenceConversions::NestedQualification) 4905 ? ICK_Qualification 4906 : ICK_Identity; 4907 ICS.Standard.setFromType(T2); 4908 ICS.Standard.setToType(0, T2); 4909 ICS.Standard.setToType(1, T1); 4910 ICS.Standard.setToType(2, T1); 4911 ICS.Standard.ReferenceBinding = true; 4912 ICS.Standard.DirectBinding = BindsDirectly; 4913 ICS.Standard.IsLvalueReference = !isRValRef; 4914 ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType(); 4915 ICS.Standard.BindsToRvalue = InitCategory.isRValue(); 4916 ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false; 4917 ICS.Standard.ObjCLifetimeConversionBinding = 4918 (RefConv & Sema::ReferenceConversions::ObjCLifetime) != 0; 4919 ICS.Standard.CopyConstructor = nullptr; 4920 ICS.Standard.DeprecatedStringLiteralToCharPtr = false; 4921 }; 4922 4923 // C++0x [dcl.init.ref]p5: 4924 // A reference to type "cv1 T1" is initialized by an expression 4925 // of type "cv2 T2" as follows: 4926 4927 // -- If reference is an lvalue reference and the initializer expression 4928 if (!isRValRef) { 4929 // -- is an lvalue (but is not a bit-field), and "cv1 T1" is 4930 // reference-compatible with "cv2 T2," or 4931 // 4932 // Per C++ [over.ics.ref]p4, we don't check the bit-field property here. 4933 if (InitCategory.isLValue() && RefRelationship == Sema::Ref_Compatible) { 4934 // C++ [over.ics.ref]p1: 4935 // When a parameter of reference type binds directly (8.5.3) 4936 // to an argument expression, the implicit conversion sequence 4937 // is the identity conversion, unless the argument expression 4938 // has a type that is a derived class of the parameter type, 4939 // in which case the implicit conversion sequence is a 4940 // derived-to-base Conversion (13.3.3.1). 4941 SetAsReferenceBinding(/*BindsDirectly=*/true); 4942 4943 // Nothing more to do: the inaccessibility/ambiguity check for 4944 // derived-to-base conversions is suppressed when we're 4945 // computing the implicit conversion sequence (C++ 4946 // [over.best.ics]p2). 4947 return ICS; 4948 } 4949 4950 // -- has a class type (i.e., T2 is a class type), where T1 is 4951 // not reference-related to T2, and can be implicitly 4952 // converted to an lvalue of type "cv3 T3," where "cv1 T1" 4953 // is reference-compatible with "cv3 T3" 92) (this 4954 // conversion is selected by enumerating the applicable 4955 // conversion functions (13.3.1.6) and choosing the best 4956 // one through overload resolution (13.3)), 4957 if (!SuppressUserConversions && T2->isRecordType() && 4958 S.isCompleteType(DeclLoc, T2) && 4959 RefRelationship == Sema::Ref_Incompatible) { 4960 if (FindConversionForRefInit(S, ICS, DeclType, DeclLoc, 4961 Init, T2, /*AllowRvalues=*/false, 4962 AllowExplicit)) 4963 return ICS; 4964 } 4965 } 4966 4967 // -- Otherwise, the reference shall be an lvalue reference to a 4968 // non-volatile const type (i.e., cv1 shall be const), or the reference 4969 // shall be an rvalue reference. 4970 if (!isRValRef && (!T1.isConstQualified() || T1.isVolatileQualified())) { 4971 if (InitCategory.isRValue() && RefRelationship != Sema::Ref_Incompatible) 4972 ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, Init, DeclType); 4973 return ICS; 4974 } 4975 4976 // -- If the initializer expression 4977 // 4978 // -- is an xvalue, class prvalue, array prvalue or function 4979 // lvalue and "cv1 T1" is reference-compatible with "cv2 T2", or 4980 if (RefRelationship == Sema::Ref_Compatible && 4981 (InitCategory.isXValue() || 4982 (InitCategory.isPRValue() && 4983 (T2->isRecordType() || T2->isArrayType())) || 4984 (InitCategory.isLValue() && T2->isFunctionType()))) { 4985 // In C++11, this is always a direct binding. In C++98/03, it's a direct 4986 // binding unless we're binding to a class prvalue. 4987 // Note: Although xvalues wouldn't normally show up in C++98/03 code, we 4988 // allow the use of rvalue references in C++98/03 for the benefit of 4989 // standard library implementors; therefore, we need the xvalue check here. 4990 SetAsReferenceBinding(/*BindsDirectly=*/S.getLangOpts().CPlusPlus11 || 4991 !(InitCategory.isPRValue() || T2->isRecordType())); 4992 return ICS; 4993 } 4994 4995 // -- has a class type (i.e., T2 is a class type), where T1 is not 4996 // reference-related to T2, and can be implicitly converted to 4997 // an xvalue, class prvalue, or function lvalue of type 4998 // "cv3 T3", where "cv1 T1" is reference-compatible with 4999 // "cv3 T3", 5000 // 5001 // then the reference is bound to the value of the initializer 5002 // expression in the first case and to the result of the conversion 5003 // in the second case (or, in either case, to an appropriate base 5004 // class subobject). 5005 if (!SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible && 5006 T2->isRecordType() && S.isCompleteType(DeclLoc, T2) && 5007 FindConversionForRefInit(S, ICS, DeclType, DeclLoc, 5008 Init, T2, /*AllowRvalues=*/true, 5009 AllowExplicit)) { 5010 // In the second case, if the reference is an rvalue reference 5011 // and the second standard conversion sequence of the 5012 // user-defined conversion sequence includes an lvalue-to-rvalue 5013 // conversion, the program is ill-formed. 5014 if (ICS.isUserDefined() && isRValRef && 5015 ICS.UserDefined.After.First == ICK_Lvalue_To_Rvalue) 5016 ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType); 5017 5018 return ICS; 5019 } 5020 5021 // A temporary of function type cannot be created; don't even try. 5022 if (T1->isFunctionType()) 5023 return ICS; 5024 5025 // -- Otherwise, a temporary of type "cv1 T1" is created and 5026 // initialized from the initializer expression using the 5027 // rules for a non-reference copy initialization (8.5). The 5028 // reference is then bound to the temporary. If T1 is 5029 // reference-related to T2, cv1 must be the same 5030 // cv-qualification as, or greater cv-qualification than, 5031 // cv2; otherwise, the program is ill-formed. 5032 if (RefRelationship == Sema::Ref_Related) { 5033 // If cv1 == cv2 or cv1 is a greater cv-qualified than cv2, then 5034 // we would be reference-compatible or reference-compatible with 5035 // added qualification. But that wasn't the case, so the reference 5036 // initialization fails. 5037 // 5038 // Note that we only want to check address spaces and cvr-qualifiers here. 5039 // ObjC GC, lifetime and unaligned qualifiers aren't important. 5040 Qualifiers T1Quals = T1.getQualifiers(); 5041 Qualifiers T2Quals = T2.getQualifiers(); 5042 T1Quals.removeObjCGCAttr(); 5043 T1Quals.removeObjCLifetime(); 5044 T2Quals.removeObjCGCAttr(); 5045 T2Quals.removeObjCLifetime(); 5046 // MS compiler ignores __unaligned qualifier for references; do the same. 5047 T1Quals.removeUnaligned(); 5048 T2Quals.removeUnaligned(); 5049 if (!T1Quals.compatiblyIncludes(T2Quals)) 5050 return ICS; 5051 } 5052 5053 // If at least one of the types is a class type, the types are not 5054 // related, and we aren't allowed any user conversions, the 5055 // reference binding fails. This case is important for breaking 5056 // recursion, since TryImplicitConversion below will attempt to 5057 // create a temporary through the use of a copy constructor. 5058 if (SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible && 5059 (T1->isRecordType() || T2->isRecordType())) 5060 return ICS; 5061 5062 // If T1 is reference-related to T2 and the reference is an rvalue 5063 // reference, the initializer expression shall not be an lvalue. 5064 if (RefRelationship >= Sema::Ref_Related && isRValRef && 5065 Init->Classify(S.Context).isLValue()) { 5066 ICS.setBad(BadConversionSequence::rvalue_ref_to_lvalue, Init, DeclType); 5067 return ICS; 5068 } 5069 5070 // C++ [over.ics.ref]p2: 5071 // When a parameter of reference type is not bound directly to 5072 // an argument expression, the conversion sequence is the one 5073 // required to convert the argument expression to the 5074 // underlying type of the reference according to 5075 // 13.3.3.1. Conceptually, this conversion sequence corresponds 5076 // to copy-initializing a temporary of the underlying type with 5077 // the argument expression. Any difference in top-level 5078 // cv-qualification is subsumed by the initialization itself 5079 // and does not constitute a conversion. 5080 ICS = TryImplicitConversion(S, Init, T1, SuppressUserConversions, 5081 AllowedExplicit::None, 5082 /*InOverloadResolution=*/false, 5083 /*CStyle=*/false, 5084 /*AllowObjCWritebackConversion=*/false, 5085 /*AllowObjCConversionOnExplicit=*/false); 5086 5087 // Of course, that's still a reference binding. 5088 if (ICS.isStandard()) { 5089 ICS.Standard.ReferenceBinding = true; 5090 ICS.Standard.IsLvalueReference = !isRValRef; 5091 ICS.Standard.BindsToFunctionLvalue = false; 5092 ICS.Standard.BindsToRvalue = true; 5093 ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false; 5094 ICS.Standard.ObjCLifetimeConversionBinding = false; 5095 } else if (ICS.isUserDefined()) { 5096 const ReferenceType *LValRefType = 5097 ICS.UserDefined.ConversionFunction->getReturnType() 5098 ->getAs<LValueReferenceType>(); 5099 5100 // C++ [over.ics.ref]p3: 5101 // Except for an implicit object parameter, for which see 13.3.1, a 5102 // standard conversion sequence cannot be formed if it requires [...] 5103 // binding an rvalue reference to an lvalue other than a function 5104 // lvalue. 5105 // Note that the function case is not possible here. 5106 if (isRValRef && LValRefType) { 5107 ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType); 5108 return ICS; 5109 } 5110 5111 ICS.UserDefined.After.ReferenceBinding = true; 5112 ICS.UserDefined.After.IsLvalueReference = !isRValRef; 5113 ICS.UserDefined.After.BindsToFunctionLvalue = false; 5114 ICS.UserDefined.After.BindsToRvalue = !LValRefType; 5115 ICS.UserDefined.After.BindsImplicitObjectArgumentWithoutRefQualifier = false; 5116 ICS.UserDefined.After.ObjCLifetimeConversionBinding = false; 5117 } 5118 5119 return ICS; 5120 } 5121 5122 static ImplicitConversionSequence 5123 TryCopyInitialization(Sema &S, Expr *From, QualType ToType, 5124 bool SuppressUserConversions, 5125 bool InOverloadResolution, 5126 bool AllowObjCWritebackConversion, 5127 bool AllowExplicit = false); 5128 5129 /// TryListConversion - Try to copy-initialize a value of type ToType from the 5130 /// initializer list From. 5131 static ImplicitConversionSequence 5132 TryListConversion(Sema &S, InitListExpr *From, QualType ToType, 5133 bool SuppressUserConversions, 5134 bool InOverloadResolution, 5135 bool AllowObjCWritebackConversion) { 5136 // C++11 [over.ics.list]p1: 5137 // When an argument is an initializer list, it is not an expression and 5138 // special rules apply for converting it to a parameter type. 5139 5140 ImplicitConversionSequence Result; 5141 Result.setBad(BadConversionSequence::no_conversion, From, ToType); 5142 5143 // We need a complete type for what follows. With one C++20 exception, 5144 // incomplete types can never be initialized from init lists. 5145 QualType InitTy = ToType; 5146 const ArrayType *AT = S.Context.getAsArrayType(ToType); 5147 if (AT && S.getLangOpts().CPlusPlus20) 5148 if (const auto *IAT = dyn_cast<IncompleteArrayType>(AT)) 5149 // C++20 allows list initialization of an incomplete array type. 5150 InitTy = IAT->getElementType(); 5151 if (!S.isCompleteType(From->getBeginLoc(), InitTy)) 5152 return Result; 5153 5154 // C++20 [over.ics.list]/2: 5155 // If the initializer list is a designated-initializer-list, a conversion 5156 // is only possible if the parameter has an aggregate type 5157 // 5158 // FIXME: The exception for reference initialization here is not part of the 5159 // language rules, but follow other compilers in adding it as a tentative DR 5160 // resolution. 5161 bool IsDesignatedInit = From->hasDesignatedInit(); 5162 if (!ToType->isAggregateType() && !ToType->isReferenceType() && 5163 IsDesignatedInit) 5164 return Result; 5165 5166 // Per DR1467: 5167 // If the parameter type is a class X and the initializer list has a single 5168 // element of type cv U, where U is X or a class derived from X, the 5169 // implicit conversion sequence is the one required to convert the element 5170 // to the parameter type. 5171 // 5172 // Otherwise, if the parameter type is a character array [... ] 5173 // and the initializer list has a single element that is an 5174 // appropriately-typed string literal (8.5.2 [dcl.init.string]), the 5175 // implicit conversion sequence is the identity conversion. 5176 if (From->getNumInits() == 1 && !IsDesignatedInit) { 5177 if (ToType->isRecordType()) { 5178 QualType InitType = From->getInit(0)->getType(); 5179 if (S.Context.hasSameUnqualifiedType(InitType, ToType) || 5180 S.IsDerivedFrom(From->getBeginLoc(), InitType, ToType)) 5181 return TryCopyInitialization(S, From->getInit(0), ToType, 5182 SuppressUserConversions, 5183 InOverloadResolution, 5184 AllowObjCWritebackConversion); 5185 } 5186 5187 if (AT && S.IsStringInit(From->getInit(0), AT)) { 5188 InitializedEntity Entity = 5189 InitializedEntity::InitializeParameter(S.Context, ToType, 5190 /*Consumed=*/false); 5191 if (S.CanPerformCopyInitialization(Entity, From)) { 5192 Result.setStandard(); 5193 Result.Standard.setAsIdentityConversion(); 5194 Result.Standard.setFromType(ToType); 5195 Result.Standard.setAllToTypes(ToType); 5196 return Result; 5197 } 5198 } 5199 } 5200 5201 // C++14 [over.ics.list]p2: Otherwise, if the parameter type [...] (below). 5202 // C++11 [over.ics.list]p2: 5203 // If the parameter type is std::initializer_list<X> or "array of X" and 5204 // all the elements can be implicitly converted to X, the implicit 5205 // conversion sequence is the worst conversion necessary to convert an 5206 // element of the list to X. 5207 // 5208 // C++14 [over.ics.list]p3: 5209 // Otherwise, if the parameter type is "array of N X", if the initializer 5210 // list has exactly N elements or if it has fewer than N elements and X is 5211 // default-constructible, and if all the elements of the initializer list 5212 // can be implicitly converted to X, the implicit conversion sequence is 5213 // the worst conversion necessary to convert an element of the list to X. 5214 if ((AT || S.isStdInitializerList(ToType, &InitTy)) && !IsDesignatedInit) { 5215 unsigned e = From->getNumInits(); 5216 ImplicitConversionSequence DfltElt; 5217 DfltElt.setBad(BadConversionSequence::no_conversion, QualType(), 5218 QualType()); 5219 QualType ContTy = ToType; 5220 bool IsUnbounded = false; 5221 if (AT) { 5222 InitTy = AT->getElementType(); 5223 if (ConstantArrayType const *CT = dyn_cast<ConstantArrayType>(AT)) { 5224 if (CT->getSize().ult(e)) { 5225 // Too many inits, fatally bad 5226 Result.setBad(BadConversionSequence::too_many_initializers, From, 5227 ToType); 5228 Result.setInitializerListContainerType(ContTy, IsUnbounded); 5229 return Result; 5230 } 5231 if (CT->getSize().ugt(e)) { 5232 // Need an init from empty {}, is there one? 5233 InitListExpr EmptyList(S.Context, From->getEndLoc(), std::nullopt, 5234 From->getEndLoc()); 5235 EmptyList.setType(S.Context.VoidTy); 5236 DfltElt = TryListConversion( 5237 S, &EmptyList, InitTy, SuppressUserConversions, 5238 InOverloadResolution, AllowObjCWritebackConversion); 5239 if (DfltElt.isBad()) { 5240 // No {} init, fatally bad 5241 Result.setBad(BadConversionSequence::too_few_initializers, From, 5242 ToType); 5243 Result.setInitializerListContainerType(ContTy, IsUnbounded); 5244 return Result; 5245 } 5246 } 5247 } else { 5248 assert(isa<IncompleteArrayType>(AT) && "Expected incomplete array"); 5249 IsUnbounded = true; 5250 if (!e) { 5251 // Cannot convert to zero-sized. 5252 Result.setBad(BadConversionSequence::too_few_initializers, From, 5253 ToType); 5254 Result.setInitializerListContainerType(ContTy, IsUnbounded); 5255 return Result; 5256 } 5257 llvm::APInt Size(S.Context.getTypeSize(S.Context.getSizeType()), e); 5258 ContTy = S.Context.getConstantArrayType(InitTy, Size, nullptr, 5259 ArrayType::Normal, 0); 5260 } 5261 } 5262 5263 Result.setStandard(); 5264 Result.Standard.setAsIdentityConversion(); 5265 Result.Standard.setFromType(InitTy); 5266 Result.Standard.setAllToTypes(InitTy); 5267 for (unsigned i = 0; i < e; ++i) { 5268 Expr *Init = From->getInit(i); 5269 ImplicitConversionSequence ICS = TryCopyInitialization( 5270 S, Init, InitTy, SuppressUserConversions, InOverloadResolution, 5271 AllowObjCWritebackConversion); 5272 5273 // Keep the worse conversion seen so far. 5274 // FIXME: Sequences are not totally ordered, so 'worse' can be 5275 // ambiguous. CWG has been informed. 5276 if (CompareImplicitConversionSequences(S, From->getBeginLoc(), ICS, 5277 Result) == 5278 ImplicitConversionSequence::Worse) { 5279 Result = ICS; 5280 // Bail as soon as we find something unconvertible. 5281 if (Result.isBad()) { 5282 Result.setInitializerListContainerType(ContTy, IsUnbounded); 5283 return Result; 5284 } 5285 } 5286 } 5287 5288 // If we needed any implicit {} initialization, compare that now. 5289 // over.ics.list/6 indicates we should compare that conversion. Again CWG 5290 // has been informed that this might not be the best thing. 5291 if (!DfltElt.isBad() && CompareImplicitConversionSequences( 5292 S, From->getEndLoc(), DfltElt, Result) == 5293 ImplicitConversionSequence::Worse) 5294 Result = DfltElt; 5295 // Record the type being initialized so that we may compare sequences 5296 Result.setInitializerListContainerType(ContTy, IsUnbounded); 5297 return Result; 5298 } 5299 5300 // C++14 [over.ics.list]p4: 5301 // C++11 [over.ics.list]p3: 5302 // Otherwise, if the parameter is a non-aggregate class X and overload 5303 // resolution chooses a single best constructor [...] the implicit 5304 // conversion sequence is a user-defined conversion sequence. If multiple 5305 // constructors are viable but none is better than the others, the 5306 // implicit conversion sequence is a user-defined conversion sequence. 5307 if (ToType->isRecordType() && !ToType->isAggregateType()) { 5308 // This function can deal with initializer lists. 5309 return TryUserDefinedConversion(S, From, ToType, SuppressUserConversions, 5310 AllowedExplicit::None, 5311 InOverloadResolution, /*CStyle=*/false, 5312 AllowObjCWritebackConversion, 5313 /*AllowObjCConversionOnExplicit=*/false); 5314 } 5315 5316 // C++14 [over.ics.list]p5: 5317 // C++11 [over.ics.list]p4: 5318 // Otherwise, if the parameter has an aggregate type which can be 5319 // initialized from the initializer list [...] the implicit conversion 5320 // sequence is a user-defined conversion sequence. 5321 if (ToType->isAggregateType()) { 5322 // Type is an aggregate, argument is an init list. At this point it comes 5323 // down to checking whether the initialization works. 5324 // FIXME: Find out whether this parameter is consumed or not. 5325 InitializedEntity Entity = 5326 InitializedEntity::InitializeParameter(S.Context, ToType, 5327 /*Consumed=*/false); 5328 if (S.CanPerformAggregateInitializationForOverloadResolution(Entity, 5329 From)) { 5330 Result.setUserDefined(); 5331 Result.UserDefined.Before.setAsIdentityConversion(); 5332 // Initializer lists don't have a type. 5333 Result.UserDefined.Before.setFromType(QualType()); 5334 Result.UserDefined.Before.setAllToTypes(QualType()); 5335 5336 Result.UserDefined.After.setAsIdentityConversion(); 5337 Result.UserDefined.After.setFromType(ToType); 5338 Result.UserDefined.After.setAllToTypes(ToType); 5339 Result.UserDefined.ConversionFunction = nullptr; 5340 } 5341 return Result; 5342 } 5343 5344 // C++14 [over.ics.list]p6: 5345 // C++11 [over.ics.list]p5: 5346 // Otherwise, if the parameter is a reference, see 13.3.3.1.4. 5347 if (ToType->isReferenceType()) { 5348 // The standard is notoriously unclear here, since 13.3.3.1.4 doesn't 5349 // mention initializer lists in any way. So we go by what list- 5350 // initialization would do and try to extrapolate from that. 5351 5352 QualType T1 = ToType->castAs<ReferenceType>()->getPointeeType(); 5353 5354 // If the initializer list has a single element that is reference-related 5355 // to the parameter type, we initialize the reference from that. 5356 if (From->getNumInits() == 1 && !IsDesignatedInit) { 5357 Expr *Init = From->getInit(0); 5358 5359 QualType T2 = Init->getType(); 5360 5361 // If the initializer is the address of an overloaded function, try 5362 // to resolve the overloaded function. If all goes well, T2 is the 5363 // type of the resulting function. 5364 if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) { 5365 DeclAccessPair Found; 5366 if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction( 5367 Init, ToType, false, Found)) 5368 T2 = Fn->getType(); 5369 } 5370 5371 // Compute some basic properties of the types and the initializer. 5372 Sema::ReferenceCompareResult RefRelationship = 5373 S.CompareReferenceRelationship(From->getBeginLoc(), T1, T2); 5374 5375 if (RefRelationship >= Sema::Ref_Related) { 5376 return TryReferenceInit(S, Init, ToType, /*FIXME*/ From->getBeginLoc(), 5377 SuppressUserConversions, 5378 /*AllowExplicit=*/false); 5379 } 5380 } 5381 5382 // Otherwise, we bind the reference to a temporary created from the 5383 // initializer list. 5384 Result = TryListConversion(S, From, T1, SuppressUserConversions, 5385 InOverloadResolution, 5386 AllowObjCWritebackConversion); 5387 if (Result.isFailure()) 5388 return Result; 5389 assert(!Result.isEllipsis() && 5390 "Sub-initialization cannot result in ellipsis conversion."); 5391 5392 // Can we even bind to a temporary? 5393 if (ToType->isRValueReferenceType() || 5394 (T1.isConstQualified() && !T1.isVolatileQualified())) { 5395 StandardConversionSequence &SCS = Result.isStandard() ? Result.Standard : 5396 Result.UserDefined.After; 5397 SCS.ReferenceBinding = true; 5398 SCS.IsLvalueReference = ToType->isLValueReferenceType(); 5399 SCS.BindsToRvalue = true; 5400 SCS.BindsToFunctionLvalue = false; 5401 SCS.BindsImplicitObjectArgumentWithoutRefQualifier = false; 5402 SCS.ObjCLifetimeConversionBinding = false; 5403 } else 5404 Result.setBad(BadConversionSequence::lvalue_ref_to_rvalue, 5405 From, ToType); 5406 return Result; 5407 } 5408 5409 // C++14 [over.ics.list]p7: 5410 // C++11 [over.ics.list]p6: 5411 // Otherwise, if the parameter type is not a class: 5412 if (!ToType->isRecordType()) { 5413 // - if the initializer list has one element that is not itself an 5414 // initializer list, the implicit conversion sequence is the one 5415 // required to convert the element to the parameter type. 5416 unsigned NumInits = From->getNumInits(); 5417 if (NumInits == 1 && !isa<InitListExpr>(From->getInit(0))) 5418 Result = TryCopyInitialization(S, From->getInit(0), ToType, 5419 SuppressUserConversions, 5420 InOverloadResolution, 5421 AllowObjCWritebackConversion); 5422 // - if the initializer list has no elements, the implicit conversion 5423 // sequence is the identity conversion. 5424 else if (NumInits == 0) { 5425 Result.setStandard(); 5426 Result.Standard.setAsIdentityConversion(); 5427 Result.Standard.setFromType(ToType); 5428 Result.Standard.setAllToTypes(ToType); 5429 } 5430 return Result; 5431 } 5432 5433 // C++14 [over.ics.list]p8: 5434 // C++11 [over.ics.list]p7: 5435 // In all cases other than those enumerated above, no conversion is possible 5436 return Result; 5437 } 5438 5439 /// TryCopyInitialization - Try to copy-initialize a value of type 5440 /// ToType from the expression From. Return the implicit conversion 5441 /// sequence required to pass this argument, which may be a bad 5442 /// conversion sequence (meaning that the argument cannot be passed to 5443 /// a parameter of this type). If @p SuppressUserConversions, then we 5444 /// do not permit any user-defined conversion sequences. 5445 static ImplicitConversionSequence 5446 TryCopyInitialization(Sema &S, Expr *From, QualType ToType, 5447 bool SuppressUserConversions, 5448 bool InOverloadResolution, 5449 bool AllowObjCWritebackConversion, 5450 bool AllowExplicit) { 5451 if (InitListExpr *FromInitList = dyn_cast<InitListExpr>(From)) 5452 return TryListConversion(S, FromInitList, ToType, SuppressUserConversions, 5453 InOverloadResolution,AllowObjCWritebackConversion); 5454 5455 if (ToType->isReferenceType()) 5456 return TryReferenceInit(S, From, ToType, 5457 /*FIXME:*/ From->getBeginLoc(), 5458 SuppressUserConversions, AllowExplicit); 5459 5460 return TryImplicitConversion(S, From, ToType, 5461 SuppressUserConversions, 5462 AllowedExplicit::None, 5463 InOverloadResolution, 5464 /*CStyle=*/false, 5465 AllowObjCWritebackConversion, 5466 /*AllowObjCConversionOnExplicit=*/false); 5467 } 5468 5469 static bool TryCopyInitialization(const CanQualType FromQTy, 5470 const CanQualType ToQTy, 5471 Sema &S, 5472 SourceLocation Loc, 5473 ExprValueKind FromVK) { 5474 OpaqueValueExpr TmpExpr(Loc, FromQTy, FromVK); 5475 ImplicitConversionSequence ICS = 5476 TryCopyInitialization(S, &TmpExpr, ToQTy, true, true, false); 5477 5478 return !ICS.isBad(); 5479 } 5480 5481 /// TryObjectArgumentInitialization - Try to initialize the object 5482 /// parameter of the given member function (@c Method) from the 5483 /// expression @p From. 5484 static ImplicitConversionSequence 5485 TryObjectArgumentInitialization(Sema &S, SourceLocation Loc, QualType FromType, 5486 Expr::Classification FromClassification, 5487 CXXMethodDecl *Method, 5488 CXXRecordDecl *ActingContext) { 5489 QualType ClassType = S.Context.getTypeDeclType(ActingContext); 5490 // [class.dtor]p2: A destructor can be invoked for a const, volatile or 5491 // const volatile object. 5492 Qualifiers Quals = Method->getMethodQualifiers(); 5493 if (isa<CXXDestructorDecl>(Method)) { 5494 Quals.addConst(); 5495 Quals.addVolatile(); 5496 } 5497 5498 QualType ImplicitParamType = S.Context.getQualifiedType(ClassType, Quals); 5499 5500 // Set up the conversion sequence as a "bad" conversion, to allow us 5501 // to exit early. 5502 ImplicitConversionSequence ICS; 5503 5504 // We need to have an object of class type. 5505 if (const PointerType *PT = FromType->getAs<PointerType>()) { 5506 FromType = PT->getPointeeType(); 5507 5508 // When we had a pointer, it's implicitly dereferenced, so we 5509 // better have an lvalue. 5510 assert(FromClassification.isLValue()); 5511 } 5512 5513 assert(FromType->isRecordType()); 5514 5515 // C++0x [over.match.funcs]p4: 5516 // For non-static member functions, the type of the implicit object 5517 // parameter is 5518 // 5519 // - "lvalue reference to cv X" for functions declared without a 5520 // ref-qualifier or with the & ref-qualifier 5521 // - "rvalue reference to cv X" for functions declared with the && 5522 // ref-qualifier 5523 // 5524 // where X is the class of which the function is a member and cv is the 5525 // cv-qualification on the member function declaration. 5526 // 5527 // However, when finding an implicit conversion sequence for the argument, we 5528 // are not allowed to perform user-defined conversions 5529 // (C++ [over.match.funcs]p5). We perform a simplified version of 5530 // reference binding here, that allows class rvalues to bind to 5531 // non-constant references. 5532 5533 // First check the qualifiers. 5534 QualType FromTypeCanon = S.Context.getCanonicalType(FromType); 5535 if (ImplicitParamType.getCVRQualifiers() 5536 != FromTypeCanon.getLocalCVRQualifiers() && 5537 !ImplicitParamType.isAtLeastAsQualifiedAs(FromTypeCanon)) { 5538 ICS.setBad(BadConversionSequence::bad_qualifiers, 5539 FromType, ImplicitParamType); 5540 return ICS; 5541 } 5542 5543 if (FromTypeCanon.hasAddressSpace()) { 5544 Qualifiers QualsImplicitParamType = ImplicitParamType.getQualifiers(); 5545 Qualifiers QualsFromType = FromTypeCanon.getQualifiers(); 5546 if (!QualsImplicitParamType.isAddressSpaceSupersetOf(QualsFromType)) { 5547 ICS.setBad(BadConversionSequence::bad_qualifiers, 5548 FromType, ImplicitParamType); 5549 return ICS; 5550 } 5551 } 5552 5553 // Check that we have either the same type or a derived type. It 5554 // affects the conversion rank. 5555 QualType ClassTypeCanon = S.Context.getCanonicalType(ClassType); 5556 ImplicitConversionKind SecondKind; 5557 if (ClassTypeCanon == FromTypeCanon.getLocalUnqualifiedType()) { 5558 SecondKind = ICK_Identity; 5559 } else if (S.IsDerivedFrom(Loc, FromType, ClassType)) 5560 SecondKind = ICK_Derived_To_Base; 5561 else { 5562 ICS.setBad(BadConversionSequence::unrelated_class, 5563 FromType, ImplicitParamType); 5564 return ICS; 5565 } 5566 5567 // Check the ref-qualifier. 5568 switch (Method->getRefQualifier()) { 5569 case RQ_None: 5570 // Do nothing; we don't care about lvalueness or rvalueness. 5571 break; 5572 5573 case RQ_LValue: 5574 if (!FromClassification.isLValue() && !Quals.hasOnlyConst()) { 5575 // non-const lvalue reference cannot bind to an rvalue 5576 ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, FromType, 5577 ImplicitParamType); 5578 return ICS; 5579 } 5580 break; 5581 5582 case RQ_RValue: 5583 if (!FromClassification.isRValue()) { 5584 // rvalue reference cannot bind to an lvalue 5585 ICS.setBad(BadConversionSequence::rvalue_ref_to_lvalue, FromType, 5586 ImplicitParamType); 5587 return ICS; 5588 } 5589 break; 5590 } 5591 5592 // Success. Mark this as a reference binding. 5593 ICS.setStandard(); 5594 ICS.Standard.setAsIdentityConversion(); 5595 ICS.Standard.Second = SecondKind; 5596 ICS.Standard.setFromType(FromType); 5597 ICS.Standard.setAllToTypes(ImplicitParamType); 5598 ICS.Standard.ReferenceBinding = true; 5599 ICS.Standard.DirectBinding = true; 5600 ICS.Standard.IsLvalueReference = Method->getRefQualifier() != RQ_RValue; 5601 ICS.Standard.BindsToFunctionLvalue = false; 5602 ICS.Standard.BindsToRvalue = FromClassification.isRValue(); 5603 ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier 5604 = (Method->getRefQualifier() == RQ_None); 5605 return ICS; 5606 } 5607 5608 /// PerformObjectArgumentInitialization - Perform initialization of 5609 /// the implicit object parameter for the given Method with the given 5610 /// expression. 5611 ExprResult 5612 Sema::PerformObjectArgumentInitialization(Expr *From, 5613 NestedNameSpecifier *Qualifier, 5614 NamedDecl *FoundDecl, 5615 CXXMethodDecl *Method) { 5616 QualType FromRecordType, DestType; 5617 QualType ImplicitParamRecordType = 5618 Method->getThisType()->castAs<PointerType>()->getPointeeType(); 5619 5620 Expr::Classification FromClassification; 5621 if (const PointerType *PT = From->getType()->getAs<PointerType>()) { 5622 FromRecordType = PT->getPointeeType(); 5623 DestType = Method->getThisType(); 5624 FromClassification = Expr::Classification::makeSimpleLValue(); 5625 } else { 5626 FromRecordType = From->getType(); 5627 DestType = ImplicitParamRecordType; 5628 FromClassification = From->Classify(Context); 5629 5630 // When performing member access on a prvalue, materialize a temporary. 5631 if (From->isPRValue()) { 5632 From = CreateMaterializeTemporaryExpr(FromRecordType, From, 5633 Method->getRefQualifier() != 5634 RefQualifierKind::RQ_RValue); 5635 } 5636 } 5637 5638 // Note that we always use the true parent context when performing 5639 // the actual argument initialization. 5640 ImplicitConversionSequence ICS = TryObjectArgumentInitialization( 5641 *this, From->getBeginLoc(), From->getType(), FromClassification, Method, 5642 Method->getParent()); 5643 if (ICS.isBad()) { 5644 switch (ICS.Bad.Kind) { 5645 case BadConversionSequence::bad_qualifiers: { 5646 Qualifiers FromQs = FromRecordType.getQualifiers(); 5647 Qualifiers ToQs = DestType.getQualifiers(); 5648 unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers(); 5649 if (CVR) { 5650 Diag(From->getBeginLoc(), diag::err_member_function_call_bad_cvr) 5651 << Method->getDeclName() << FromRecordType << (CVR - 1) 5652 << From->getSourceRange(); 5653 Diag(Method->getLocation(), diag::note_previous_decl) 5654 << Method->getDeclName(); 5655 return ExprError(); 5656 } 5657 break; 5658 } 5659 5660 case BadConversionSequence::lvalue_ref_to_rvalue: 5661 case BadConversionSequence::rvalue_ref_to_lvalue: { 5662 bool IsRValueQualified = 5663 Method->getRefQualifier() == RefQualifierKind::RQ_RValue; 5664 Diag(From->getBeginLoc(), diag::err_member_function_call_bad_ref) 5665 << Method->getDeclName() << FromClassification.isRValue() 5666 << IsRValueQualified; 5667 Diag(Method->getLocation(), diag::note_previous_decl) 5668 << Method->getDeclName(); 5669 return ExprError(); 5670 } 5671 5672 case BadConversionSequence::no_conversion: 5673 case BadConversionSequence::unrelated_class: 5674 break; 5675 5676 case BadConversionSequence::too_few_initializers: 5677 case BadConversionSequence::too_many_initializers: 5678 llvm_unreachable("Lists are not objects"); 5679 } 5680 5681 return Diag(From->getBeginLoc(), diag::err_member_function_call_bad_type) 5682 << ImplicitParamRecordType << FromRecordType 5683 << From->getSourceRange(); 5684 } 5685 5686 if (ICS.Standard.Second == ICK_Derived_To_Base) { 5687 ExprResult FromRes = 5688 PerformObjectMemberConversion(From, Qualifier, FoundDecl, Method); 5689 if (FromRes.isInvalid()) 5690 return ExprError(); 5691 From = FromRes.get(); 5692 } 5693 5694 if (!Context.hasSameType(From->getType(), DestType)) { 5695 CastKind CK; 5696 QualType PteeTy = DestType->getPointeeType(); 5697 LangAS DestAS = 5698 PteeTy.isNull() ? DestType.getAddressSpace() : PteeTy.getAddressSpace(); 5699 if (FromRecordType.getAddressSpace() != DestAS) 5700 CK = CK_AddressSpaceConversion; 5701 else 5702 CK = CK_NoOp; 5703 From = ImpCastExprToType(From, DestType, CK, From->getValueKind()).get(); 5704 } 5705 return From; 5706 } 5707 5708 /// TryContextuallyConvertToBool - Attempt to contextually convert the 5709 /// expression From to bool (C++0x [conv]p3). 5710 static ImplicitConversionSequence 5711 TryContextuallyConvertToBool(Sema &S, Expr *From) { 5712 // C++ [dcl.init]/17.8: 5713 // - Otherwise, if the initialization is direct-initialization, the source 5714 // type is std::nullptr_t, and the destination type is bool, the initial 5715 // value of the object being initialized is false. 5716 if (From->getType()->isNullPtrType()) 5717 return ImplicitConversionSequence::getNullptrToBool(From->getType(), 5718 S.Context.BoolTy, 5719 From->isGLValue()); 5720 5721 // All other direct-initialization of bool is equivalent to an implicit 5722 // conversion to bool in which explicit conversions are permitted. 5723 return TryImplicitConversion(S, From, S.Context.BoolTy, 5724 /*SuppressUserConversions=*/false, 5725 AllowedExplicit::Conversions, 5726 /*InOverloadResolution=*/false, 5727 /*CStyle=*/false, 5728 /*AllowObjCWritebackConversion=*/false, 5729 /*AllowObjCConversionOnExplicit=*/false); 5730 } 5731 5732 /// PerformContextuallyConvertToBool - Perform a contextual conversion 5733 /// of the expression From to bool (C++0x [conv]p3). 5734 ExprResult Sema::PerformContextuallyConvertToBool(Expr *From) { 5735 if (checkPlaceholderForOverload(*this, From)) 5736 return ExprError(); 5737 5738 ImplicitConversionSequence ICS = TryContextuallyConvertToBool(*this, From); 5739 if (!ICS.isBad()) 5740 return PerformImplicitConversion(From, Context.BoolTy, ICS, AA_Converting); 5741 5742 if (!DiagnoseMultipleUserDefinedConversion(From, Context.BoolTy)) 5743 return Diag(From->getBeginLoc(), diag::err_typecheck_bool_condition) 5744 << From->getType() << From->getSourceRange(); 5745 return ExprError(); 5746 } 5747 5748 /// Check that the specified conversion is permitted in a converted constant 5749 /// expression, according to C++11 [expr.const]p3. Return true if the conversion 5750 /// is acceptable. 5751 static bool CheckConvertedConstantConversions(Sema &S, 5752 StandardConversionSequence &SCS) { 5753 // Since we know that the target type is an integral or unscoped enumeration 5754 // type, most conversion kinds are impossible. All possible First and Third 5755 // conversions are fine. 5756 switch (SCS.Second) { 5757 case ICK_Identity: 5758 case ICK_Integral_Promotion: 5759 case ICK_Integral_Conversion: // Narrowing conversions are checked elsewhere. 5760 case ICK_Zero_Queue_Conversion: 5761 return true; 5762 5763 case ICK_Boolean_Conversion: 5764 // Conversion from an integral or unscoped enumeration type to bool is 5765 // classified as ICK_Boolean_Conversion, but it's also arguably an integral 5766 // conversion, so we allow it in a converted constant expression. 5767 // 5768 // FIXME: Per core issue 1407, we should not allow this, but that breaks 5769 // a lot of popular code. We should at least add a warning for this 5770 // (non-conforming) extension. 5771 return SCS.getFromType()->isIntegralOrUnscopedEnumerationType() && 5772 SCS.getToType(2)->isBooleanType(); 5773 5774 case ICK_Pointer_Conversion: 5775 case ICK_Pointer_Member: 5776 // C++1z: null pointer conversions and null member pointer conversions are 5777 // only permitted if the source type is std::nullptr_t. 5778 return SCS.getFromType()->isNullPtrType(); 5779 5780 case ICK_Floating_Promotion: 5781 case ICK_Complex_Promotion: 5782 case ICK_Floating_Conversion: 5783 case ICK_Complex_Conversion: 5784 case ICK_Floating_Integral: 5785 case ICK_Compatible_Conversion: 5786 case ICK_Derived_To_Base: 5787 case ICK_Vector_Conversion: 5788 case ICK_SVE_Vector_Conversion: 5789 case ICK_RVV_Vector_Conversion: 5790 case ICK_Vector_Splat: 5791 case ICK_Complex_Real: 5792 case ICK_Block_Pointer_Conversion: 5793 case ICK_TransparentUnionConversion: 5794 case ICK_Writeback_Conversion: 5795 case ICK_Zero_Event_Conversion: 5796 case ICK_C_Only_Conversion: 5797 case ICK_Incompatible_Pointer_Conversion: 5798 return false; 5799 5800 case ICK_Lvalue_To_Rvalue: 5801 case ICK_Array_To_Pointer: 5802 case ICK_Function_To_Pointer: 5803 llvm_unreachable("found a first conversion kind in Second"); 5804 5805 case ICK_Function_Conversion: 5806 case ICK_Qualification: 5807 llvm_unreachable("found a third conversion kind in Second"); 5808 5809 case ICK_Num_Conversion_Kinds: 5810 break; 5811 } 5812 5813 llvm_unreachable("unknown conversion kind"); 5814 } 5815 5816 /// BuildConvertedConstantExpression - Check that the expression From is a 5817 /// converted constant expression of type T, perform the conversion but 5818 /// does not evaluate the expression 5819 static ExprResult BuildConvertedConstantExpression(Sema &S, Expr *From, 5820 QualType T, 5821 Sema::CCEKind CCE, 5822 NamedDecl *Dest, 5823 APValue &PreNarrowingValue) { 5824 assert(S.getLangOpts().CPlusPlus11 && 5825 "converted constant expression outside C++11"); 5826 5827 if (checkPlaceholderForOverload(S, From)) 5828 return ExprError(); 5829 5830 // C++1z [expr.const]p3: 5831 // A converted constant expression of type T is an expression, 5832 // implicitly converted to type T, where the converted 5833 // expression is a constant expression and the implicit conversion 5834 // sequence contains only [... list of conversions ...]. 5835 ImplicitConversionSequence ICS = 5836 (CCE == Sema::CCEK_ExplicitBool || CCE == Sema::CCEK_Noexcept) 5837 ? TryContextuallyConvertToBool(S, From) 5838 : TryCopyInitialization(S, From, T, 5839 /*SuppressUserConversions=*/false, 5840 /*InOverloadResolution=*/false, 5841 /*AllowObjCWritebackConversion=*/false, 5842 /*AllowExplicit=*/false); 5843 StandardConversionSequence *SCS = nullptr; 5844 switch (ICS.getKind()) { 5845 case ImplicitConversionSequence::StandardConversion: 5846 SCS = &ICS.Standard; 5847 break; 5848 case ImplicitConversionSequence::UserDefinedConversion: 5849 if (T->isRecordType()) 5850 SCS = &ICS.UserDefined.Before; 5851 else 5852 SCS = &ICS.UserDefined.After; 5853 break; 5854 case ImplicitConversionSequence::AmbiguousConversion: 5855 case ImplicitConversionSequence::BadConversion: 5856 if (!S.DiagnoseMultipleUserDefinedConversion(From, T)) 5857 return S.Diag(From->getBeginLoc(), 5858 diag::err_typecheck_converted_constant_expression) 5859 << From->getType() << From->getSourceRange() << T; 5860 return ExprError(); 5861 5862 case ImplicitConversionSequence::EllipsisConversion: 5863 case ImplicitConversionSequence::StaticObjectArgumentConversion: 5864 llvm_unreachable("bad conversion in converted constant expression"); 5865 } 5866 5867 // Check that we would only use permitted conversions. 5868 if (!CheckConvertedConstantConversions(S, *SCS)) { 5869 return S.Diag(From->getBeginLoc(), 5870 diag::err_typecheck_converted_constant_expression_disallowed) 5871 << From->getType() << From->getSourceRange() << T; 5872 } 5873 // [...] and where the reference binding (if any) binds directly. 5874 if (SCS->ReferenceBinding && !SCS->DirectBinding) { 5875 return S.Diag(From->getBeginLoc(), 5876 diag::err_typecheck_converted_constant_expression_indirect) 5877 << From->getType() << From->getSourceRange() << T; 5878 } 5879 5880 // Usually we can simply apply the ImplicitConversionSequence we formed 5881 // earlier, but that's not guaranteed to work when initializing an object of 5882 // class type. 5883 ExprResult Result; 5884 if (T->isRecordType()) { 5885 assert(CCE == Sema::CCEK_TemplateArg && 5886 "unexpected class type converted constant expr"); 5887 Result = S.PerformCopyInitialization( 5888 InitializedEntity::InitializeTemplateParameter( 5889 T, cast<NonTypeTemplateParmDecl>(Dest)), 5890 SourceLocation(), From); 5891 } else { 5892 Result = S.PerformImplicitConversion(From, T, ICS, Sema::AA_Converting); 5893 } 5894 if (Result.isInvalid()) 5895 return Result; 5896 5897 // C++2a [intro.execution]p5: 5898 // A full-expression is [...] a constant-expression [...] 5899 Result = S.ActOnFinishFullExpr(Result.get(), From->getExprLoc(), 5900 /*DiscardedValue=*/false, /*IsConstexpr=*/true, 5901 CCE == Sema::CCEKind::CCEK_TemplateArg); 5902 if (Result.isInvalid()) 5903 return Result; 5904 5905 // Check for a narrowing implicit conversion. 5906 bool ReturnPreNarrowingValue = false; 5907 QualType PreNarrowingType; 5908 switch (SCS->getNarrowingKind(S.Context, Result.get(), PreNarrowingValue, 5909 PreNarrowingType)) { 5910 case NK_Dependent_Narrowing: 5911 // Implicit conversion to a narrower type, but the expression is 5912 // value-dependent so we can't tell whether it's actually narrowing. 5913 case NK_Variable_Narrowing: 5914 // Implicit conversion to a narrower type, and the value is not a constant 5915 // expression. We'll diagnose this in a moment. 5916 case NK_Not_Narrowing: 5917 break; 5918 5919 case NK_Constant_Narrowing: 5920 if (CCE == Sema::CCEK_ArrayBound && 5921 PreNarrowingType->isIntegralOrEnumerationType() && 5922 PreNarrowingValue.isInt()) { 5923 // Don't diagnose array bound narrowing here; we produce more precise 5924 // errors by allowing the un-narrowed value through. 5925 ReturnPreNarrowingValue = true; 5926 break; 5927 } 5928 S.Diag(From->getBeginLoc(), diag::ext_cce_narrowing) 5929 << CCE << /*Constant*/ 1 5930 << PreNarrowingValue.getAsString(S.Context, PreNarrowingType) << T; 5931 break; 5932 5933 case NK_Type_Narrowing: 5934 // FIXME: It would be better to diagnose that the expression is not a 5935 // constant expression. 5936 S.Diag(From->getBeginLoc(), diag::ext_cce_narrowing) 5937 << CCE << /*Constant*/ 0 << From->getType() << T; 5938 break; 5939 } 5940 if (!ReturnPreNarrowingValue) 5941 PreNarrowingValue = {}; 5942 5943 return Result; 5944 } 5945 5946 /// EvaluateConvertedConstantExpression - Evaluate an Expression 5947 /// That is a converted constant expression 5948 /// (which was built with BuildConvertedConstantExpression) 5949 static ExprResult EvaluateConvertedConstantExpression( 5950 Sema &S, Expr *E, QualType T, APValue &Value, Sema::CCEKind CCE, 5951 bool RequireInt, const APValue &PreNarrowingValue) { 5952 ExprResult Result = E; 5953 // Check the expression is a constant expression. 5954 SmallVector<PartialDiagnosticAt, 8> Notes; 5955 Expr::EvalResult Eval; 5956 Eval.Diag = &Notes; 5957 5958 ConstantExprKind Kind; 5959 if (CCE == Sema::CCEK_TemplateArg && T->isRecordType()) 5960 Kind = ConstantExprKind::ClassTemplateArgument; 5961 else if (CCE == Sema::CCEK_TemplateArg) 5962 Kind = ConstantExprKind::NonClassTemplateArgument; 5963 else 5964 Kind = ConstantExprKind::Normal; 5965 5966 if (!E->EvaluateAsConstantExpr(Eval, S.Context, Kind) || 5967 (RequireInt && !Eval.Val.isInt())) { 5968 // The expression can't be folded, so we can't keep it at this position in 5969 // the AST. 5970 Result = ExprError(); 5971 } else { 5972 Value = Eval.Val; 5973 5974 if (Notes.empty()) { 5975 // It's a constant expression. 5976 Expr *E = ConstantExpr::Create(S.Context, Result.get(), Value); 5977 if (!PreNarrowingValue.isAbsent()) 5978 Value = std::move(PreNarrowingValue); 5979 return E; 5980 } 5981 } 5982 5983 // It's not a constant expression. Produce an appropriate diagnostic. 5984 if (Notes.size() == 1 && 5985 Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr) { 5986 S.Diag(Notes[0].first, diag::err_expr_not_cce) << CCE; 5987 } else if (!Notes.empty() && Notes[0].second.getDiagID() == 5988 diag::note_constexpr_invalid_template_arg) { 5989 Notes[0].second.setDiagID(diag::err_constexpr_invalid_template_arg); 5990 for (unsigned I = 0; I < Notes.size(); ++I) 5991 S.Diag(Notes[I].first, Notes[I].second); 5992 } else { 5993 S.Diag(E->getBeginLoc(), diag::err_expr_not_cce) 5994 << CCE << E->getSourceRange(); 5995 for (unsigned I = 0; I < Notes.size(); ++I) 5996 S.Diag(Notes[I].first, Notes[I].second); 5997 } 5998 return ExprError(); 5999 } 6000 6001 /// CheckConvertedConstantExpression - Check that the expression From is a 6002 /// converted constant expression of type T, perform the conversion and produce 6003 /// the converted expression, per C++11 [expr.const]p3. 6004 static ExprResult CheckConvertedConstantExpression(Sema &S, Expr *From, 6005 QualType T, APValue &Value, 6006 Sema::CCEKind CCE, 6007 bool RequireInt, 6008 NamedDecl *Dest) { 6009 6010 APValue PreNarrowingValue; 6011 ExprResult Result = BuildConvertedConstantExpression(S, From, T, CCE, Dest, 6012 PreNarrowingValue); 6013 if (Result.isInvalid() || Result.get()->isValueDependent()) { 6014 Value = APValue(); 6015 return Result; 6016 } 6017 return EvaluateConvertedConstantExpression(S, Result.get(), T, Value, CCE, 6018 RequireInt, PreNarrowingValue); 6019 } 6020 6021 ExprResult Sema::BuildConvertedConstantExpression(Expr *From, QualType T, 6022 CCEKind CCE, 6023 NamedDecl *Dest) { 6024 APValue PreNarrowingValue; 6025 return ::BuildConvertedConstantExpression(*this, From, T, CCE, Dest, 6026 PreNarrowingValue); 6027 } 6028 6029 ExprResult Sema::CheckConvertedConstantExpression(Expr *From, QualType T, 6030 APValue &Value, CCEKind CCE, 6031 NamedDecl *Dest) { 6032 return ::CheckConvertedConstantExpression(*this, From, T, Value, CCE, false, 6033 Dest); 6034 } 6035 6036 ExprResult Sema::CheckConvertedConstantExpression(Expr *From, QualType T, 6037 llvm::APSInt &Value, 6038 CCEKind CCE) { 6039 assert(T->isIntegralOrEnumerationType() && "unexpected converted const type"); 6040 6041 APValue V; 6042 auto R = ::CheckConvertedConstantExpression(*this, From, T, V, CCE, true, 6043 /*Dest=*/nullptr); 6044 if (!R.isInvalid() && !R.get()->isValueDependent()) 6045 Value = V.getInt(); 6046 return R; 6047 } 6048 6049 6050 /// dropPointerConversions - If the given standard conversion sequence 6051 /// involves any pointer conversions, remove them. This may change 6052 /// the result type of the conversion sequence. 6053 static void dropPointerConversion(StandardConversionSequence &SCS) { 6054 if (SCS.Second == ICK_Pointer_Conversion) { 6055 SCS.Second = ICK_Identity; 6056 SCS.Third = ICK_Identity; 6057 SCS.ToTypePtrs[2] = SCS.ToTypePtrs[1] = SCS.ToTypePtrs[0]; 6058 } 6059 } 6060 6061 /// TryContextuallyConvertToObjCPointer - Attempt to contextually 6062 /// convert the expression From to an Objective-C pointer type. 6063 static ImplicitConversionSequence 6064 TryContextuallyConvertToObjCPointer(Sema &S, Expr *From) { 6065 // Do an implicit conversion to 'id'. 6066 QualType Ty = S.Context.getObjCIdType(); 6067 ImplicitConversionSequence ICS 6068 = TryImplicitConversion(S, From, Ty, 6069 // FIXME: Are these flags correct? 6070 /*SuppressUserConversions=*/false, 6071 AllowedExplicit::Conversions, 6072 /*InOverloadResolution=*/false, 6073 /*CStyle=*/false, 6074 /*AllowObjCWritebackConversion=*/false, 6075 /*AllowObjCConversionOnExplicit=*/true); 6076 6077 // Strip off any final conversions to 'id'. 6078 switch (ICS.getKind()) { 6079 case ImplicitConversionSequence::BadConversion: 6080 case ImplicitConversionSequence::AmbiguousConversion: 6081 case ImplicitConversionSequence::EllipsisConversion: 6082 case ImplicitConversionSequence::StaticObjectArgumentConversion: 6083 break; 6084 6085 case ImplicitConversionSequence::UserDefinedConversion: 6086 dropPointerConversion(ICS.UserDefined.After); 6087 break; 6088 6089 case ImplicitConversionSequence::StandardConversion: 6090 dropPointerConversion(ICS.Standard); 6091 break; 6092 } 6093 6094 return ICS; 6095 } 6096 6097 /// PerformContextuallyConvertToObjCPointer - Perform a contextual 6098 /// conversion of the expression From to an Objective-C pointer type. 6099 /// Returns a valid but null ExprResult if no conversion sequence exists. 6100 ExprResult Sema::PerformContextuallyConvertToObjCPointer(Expr *From) { 6101 if (checkPlaceholderForOverload(*this, From)) 6102 return ExprError(); 6103 6104 QualType Ty = Context.getObjCIdType(); 6105 ImplicitConversionSequence ICS = 6106 TryContextuallyConvertToObjCPointer(*this, From); 6107 if (!ICS.isBad()) 6108 return PerformImplicitConversion(From, Ty, ICS, AA_Converting); 6109 return ExprResult(); 6110 } 6111 6112 /// Determine whether the provided type is an integral type, or an enumeration 6113 /// type of a permitted flavor. 6114 bool Sema::ICEConvertDiagnoser::match(QualType T) { 6115 return AllowScopedEnumerations ? T->isIntegralOrEnumerationType() 6116 : T->isIntegralOrUnscopedEnumerationType(); 6117 } 6118 6119 static ExprResult 6120 diagnoseAmbiguousConversion(Sema &SemaRef, SourceLocation Loc, Expr *From, 6121 Sema::ContextualImplicitConverter &Converter, 6122 QualType T, UnresolvedSetImpl &ViableConversions) { 6123 6124 if (Converter.Suppress) 6125 return ExprError(); 6126 6127 Converter.diagnoseAmbiguous(SemaRef, Loc, T) << From->getSourceRange(); 6128 for (unsigned I = 0, N = ViableConversions.size(); I != N; ++I) { 6129 CXXConversionDecl *Conv = 6130 cast<CXXConversionDecl>(ViableConversions[I]->getUnderlyingDecl()); 6131 QualType ConvTy = Conv->getConversionType().getNonReferenceType(); 6132 Converter.noteAmbiguous(SemaRef, Conv, ConvTy); 6133 } 6134 return From; 6135 } 6136 6137 static bool 6138 diagnoseNoViableConversion(Sema &SemaRef, SourceLocation Loc, Expr *&From, 6139 Sema::ContextualImplicitConverter &Converter, 6140 QualType T, bool HadMultipleCandidates, 6141 UnresolvedSetImpl &ExplicitConversions) { 6142 if (ExplicitConversions.size() == 1 && !Converter.Suppress) { 6143 DeclAccessPair Found = ExplicitConversions[0]; 6144 CXXConversionDecl *Conversion = 6145 cast<CXXConversionDecl>(Found->getUnderlyingDecl()); 6146 6147 // The user probably meant to invoke the given explicit 6148 // conversion; use it. 6149 QualType ConvTy = Conversion->getConversionType().getNonReferenceType(); 6150 std::string TypeStr; 6151 ConvTy.getAsStringInternal(TypeStr, SemaRef.getPrintingPolicy()); 6152 6153 Converter.diagnoseExplicitConv(SemaRef, Loc, T, ConvTy) 6154 << FixItHint::CreateInsertion(From->getBeginLoc(), 6155 "static_cast<" + TypeStr + ">(") 6156 << FixItHint::CreateInsertion( 6157 SemaRef.getLocForEndOfToken(From->getEndLoc()), ")"); 6158 Converter.noteExplicitConv(SemaRef, Conversion, ConvTy); 6159 6160 // If we aren't in a SFINAE context, build a call to the 6161 // explicit conversion function. 6162 if (SemaRef.isSFINAEContext()) 6163 return true; 6164 6165 SemaRef.CheckMemberOperatorAccess(From->getExprLoc(), From, nullptr, Found); 6166 ExprResult Result = SemaRef.BuildCXXMemberCallExpr(From, Found, Conversion, 6167 HadMultipleCandidates); 6168 if (Result.isInvalid()) 6169 return true; 6170 // Record usage of conversion in an implicit cast. 6171 From = ImplicitCastExpr::Create(SemaRef.Context, Result.get()->getType(), 6172 CK_UserDefinedConversion, Result.get(), 6173 nullptr, Result.get()->getValueKind(), 6174 SemaRef.CurFPFeatureOverrides()); 6175 } 6176 return false; 6177 } 6178 6179 static bool recordConversion(Sema &SemaRef, SourceLocation Loc, Expr *&From, 6180 Sema::ContextualImplicitConverter &Converter, 6181 QualType T, bool HadMultipleCandidates, 6182 DeclAccessPair &Found) { 6183 CXXConversionDecl *Conversion = 6184 cast<CXXConversionDecl>(Found->getUnderlyingDecl()); 6185 SemaRef.CheckMemberOperatorAccess(From->getExprLoc(), From, nullptr, Found); 6186 6187 QualType ToType = Conversion->getConversionType().getNonReferenceType(); 6188 if (!Converter.SuppressConversion) { 6189 if (SemaRef.isSFINAEContext()) 6190 return true; 6191 6192 Converter.diagnoseConversion(SemaRef, Loc, T, ToType) 6193 << From->getSourceRange(); 6194 } 6195 6196 ExprResult Result = SemaRef.BuildCXXMemberCallExpr(From, Found, Conversion, 6197 HadMultipleCandidates); 6198 if (Result.isInvalid()) 6199 return true; 6200 // Record usage of conversion in an implicit cast. 6201 From = ImplicitCastExpr::Create(SemaRef.Context, Result.get()->getType(), 6202 CK_UserDefinedConversion, Result.get(), 6203 nullptr, Result.get()->getValueKind(), 6204 SemaRef.CurFPFeatureOverrides()); 6205 return false; 6206 } 6207 6208 static ExprResult finishContextualImplicitConversion( 6209 Sema &SemaRef, SourceLocation Loc, Expr *From, 6210 Sema::ContextualImplicitConverter &Converter) { 6211 if (!Converter.match(From->getType()) && !Converter.Suppress) 6212 Converter.diagnoseNoMatch(SemaRef, Loc, From->getType()) 6213 << From->getSourceRange(); 6214 6215 return SemaRef.DefaultLvalueConversion(From); 6216 } 6217 6218 static void 6219 collectViableConversionCandidates(Sema &SemaRef, Expr *From, QualType ToType, 6220 UnresolvedSetImpl &ViableConversions, 6221 OverloadCandidateSet &CandidateSet) { 6222 for (unsigned I = 0, N = ViableConversions.size(); I != N; ++I) { 6223 DeclAccessPair FoundDecl = ViableConversions[I]; 6224 NamedDecl *D = FoundDecl.getDecl(); 6225 CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext()); 6226 if (isa<UsingShadowDecl>(D)) 6227 D = cast<UsingShadowDecl>(D)->getTargetDecl(); 6228 6229 CXXConversionDecl *Conv; 6230 FunctionTemplateDecl *ConvTemplate; 6231 if ((ConvTemplate = dyn_cast<FunctionTemplateDecl>(D))) 6232 Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl()); 6233 else 6234 Conv = cast<CXXConversionDecl>(D); 6235 6236 if (ConvTemplate) 6237 SemaRef.AddTemplateConversionCandidate( 6238 ConvTemplate, FoundDecl, ActingContext, From, ToType, CandidateSet, 6239 /*AllowObjCConversionOnExplicit=*/false, /*AllowExplicit*/ true); 6240 else 6241 SemaRef.AddConversionCandidate(Conv, FoundDecl, ActingContext, From, 6242 ToType, CandidateSet, 6243 /*AllowObjCConversionOnExplicit=*/false, 6244 /*AllowExplicit*/ true); 6245 } 6246 } 6247 6248 /// Attempt to convert the given expression to a type which is accepted 6249 /// by the given converter. 6250 /// 6251 /// This routine will attempt to convert an expression of class type to a 6252 /// type accepted by the specified converter. In C++11 and before, the class 6253 /// must have a single non-explicit conversion function converting to a matching 6254 /// type. In C++1y, there can be multiple such conversion functions, but only 6255 /// one target type. 6256 /// 6257 /// \param Loc The source location of the construct that requires the 6258 /// conversion. 6259 /// 6260 /// \param From The expression we're converting from. 6261 /// 6262 /// \param Converter Used to control and diagnose the conversion process. 6263 /// 6264 /// \returns The expression, converted to an integral or enumeration type if 6265 /// successful. 6266 ExprResult Sema::PerformContextualImplicitConversion( 6267 SourceLocation Loc, Expr *From, ContextualImplicitConverter &Converter) { 6268 // We can't perform any more checking for type-dependent expressions. 6269 if (From->isTypeDependent()) 6270 return From; 6271 6272 // Process placeholders immediately. 6273 if (From->hasPlaceholderType()) { 6274 ExprResult result = CheckPlaceholderExpr(From); 6275 if (result.isInvalid()) 6276 return result; 6277 From = result.get(); 6278 } 6279 6280 // If the expression already has a matching type, we're golden. 6281 QualType T = From->getType(); 6282 if (Converter.match(T)) 6283 return DefaultLvalueConversion(From); 6284 6285 // FIXME: Check for missing '()' if T is a function type? 6286 6287 // We can only perform contextual implicit conversions on objects of class 6288 // type. 6289 const RecordType *RecordTy = T->getAs<RecordType>(); 6290 if (!RecordTy || !getLangOpts().CPlusPlus) { 6291 if (!Converter.Suppress) 6292 Converter.diagnoseNoMatch(*this, Loc, T) << From->getSourceRange(); 6293 return From; 6294 } 6295 6296 // We must have a complete class type. 6297 struct TypeDiagnoserPartialDiag : TypeDiagnoser { 6298 ContextualImplicitConverter &Converter; 6299 Expr *From; 6300 6301 TypeDiagnoserPartialDiag(ContextualImplicitConverter &Converter, Expr *From) 6302 : Converter(Converter), From(From) {} 6303 6304 void diagnose(Sema &S, SourceLocation Loc, QualType T) override { 6305 Converter.diagnoseIncomplete(S, Loc, T) << From->getSourceRange(); 6306 } 6307 } IncompleteDiagnoser(Converter, From); 6308 6309 if (Converter.Suppress ? !isCompleteType(Loc, T) 6310 : RequireCompleteType(Loc, T, IncompleteDiagnoser)) 6311 return From; 6312 6313 // Look for a conversion to an integral or enumeration type. 6314 UnresolvedSet<4> 6315 ViableConversions; // These are *potentially* viable in C++1y. 6316 UnresolvedSet<4> ExplicitConversions; 6317 const auto &Conversions = 6318 cast<CXXRecordDecl>(RecordTy->getDecl())->getVisibleConversionFunctions(); 6319 6320 bool HadMultipleCandidates = 6321 (std::distance(Conversions.begin(), Conversions.end()) > 1); 6322 6323 // To check that there is only one target type, in C++1y: 6324 QualType ToType; 6325 bool HasUniqueTargetType = true; 6326 6327 // Collect explicit or viable (potentially in C++1y) conversions. 6328 for (auto I = Conversions.begin(), E = Conversions.end(); I != E; ++I) { 6329 NamedDecl *D = (*I)->getUnderlyingDecl(); 6330 CXXConversionDecl *Conversion; 6331 FunctionTemplateDecl *ConvTemplate = dyn_cast<FunctionTemplateDecl>(D); 6332 if (ConvTemplate) { 6333 if (getLangOpts().CPlusPlus14) 6334 Conversion = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl()); 6335 else 6336 continue; // C++11 does not consider conversion operator templates(?). 6337 } else 6338 Conversion = cast<CXXConversionDecl>(D); 6339 6340 assert((!ConvTemplate || getLangOpts().CPlusPlus14) && 6341 "Conversion operator templates are considered potentially " 6342 "viable in C++1y"); 6343 6344 QualType CurToType = Conversion->getConversionType().getNonReferenceType(); 6345 if (Converter.match(CurToType) || ConvTemplate) { 6346 6347 if (Conversion->isExplicit()) { 6348 // FIXME: For C++1y, do we need this restriction? 6349 // cf. diagnoseNoViableConversion() 6350 if (!ConvTemplate) 6351 ExplicitConversions.addDecl(I.getDecl(), I.getAccess()); 6352 } else { 6353 if (!ConvTemplate && getLangOpts().CPlusPlus14) { 6354 if (ToType.isNull()) 6355 ToType = CurToType.getUnqualifiedType(); 6356 else if (HasUniqueTargetType && 6357 (CurToType.getUnqualifiedType() != ToType)) 6358 HasUniqueTargetType = false; 6359 } 6360 ViableConversions.addDecl(I.getDecl(), I.getAccess()); 6361 } 6362 } 6363 } 6364 6365 if (getLangOpts().CPlusPlus14) { 6366 // C++1y [conv]p6: 6367 // ... An expression e of class type E appearing in such a context 6368 // is said to be contextually implicitly converted to a specified 6369 // type T and is well-formed if and only if e can be implicitly 6370 // converted to a type T that is determined as follows: E is searched 6371 // for conversion functions whose return type is cv T or reference to 6372 // cv T such that T is allowed by the context. There shall be 6373 // exactly one such T. 6374 6375 // If no unique T is found: 6376 if (ToType.isNull()) { 6377 if (diagnoseNoViableConversion(*this, Loc, From, Converter, T, 6378 HadMultipleCandidates, 6379 ExplicitConversions)) 6380 return ExprError(); 6381 return finishContextualImplicitConversion(*this, Loc, From, Converter); 6382 } 6383 6384 // If more than one unique Ts are found: 6385 if (!HasUniqueTargetType) 6386 return diagnoseAmbiguousConversion(*this, Loc, From, Converter, T, 6387 ViableConversions); 6388 6389 // If one unique T is found: 6390 // First, build a candidate set from the previously recorded 6391 // potentially viable conversions. 6392 OverloadCandidateSet CandidateSet(Loc, OverloadCandidateSet::CSK_Normal); 6393 collectViableConversionCandidates(*this, From, ToType, ViableConversions, 6394 CandidateSet); 6395 6396 // Then, perform overload resolution over the candidate set. 6397 OverloadCandidateSet::iterator Best; 6398 switch (CandidateSet.BestViableFunction(*this, Loc, Best)) { 6399 case OR_Success: { 6400 // Apply this conversion. 6401 DeclAccessPair Found = 6402 DeclAccessPair::make(Best->Function, Best->FoundDecl.getAccess()); 6403 if (recordConversion(*this, Loc, From, Converter, T, 6404 HadMultipleCandidates, Found)) 6405 return ExprError(); 6406 break; 6407 } 6408 case OR_Ambiguous: 6409 return diagnoseAmbiguousConversion(*this, Loc, From, Converter, T, 6410 ViableConversions); 6411 case OR_No_Viable_Function: 6412 if (diagnoseNoViableConversion(*this, Loc, From, Converter, T, 6413 HadMultipleCandidates, 6414 ExplicitConversions)) 6415 return ExprError(); 6416 [[fallthrough]]; 6417 case OR_Deleted: 6418 // We'll complain below about a non-integral condition type. 6419 break; 6420 } 6421 } else { 6422 switch (ViableConversions.size()) { 6423 case 0: { 6424 if (diagnoseNoViableConversion(*this, Loc, From, Converter, T, 6425 HadMultipleCandidates, 6426 ExplicitConversions)) 6427 return ExprError(); 6428 6429 // We'll complain below about a non-integral condition type. 6430 break; 6431 } 6432 case 1: { 6433 // Apply this conversion. 6434 DeclAccessPair Found = ViableConversions[0]; 6435 if (recordConversion(*this, Loc, From, Converter, T, 6436 HadMultipleCandidates, Found)) 6437 return ExprError(); 6438 break; 6439 } 6440 default: 6441 return diagnoseAmbiguousConversion(*this, Loc, From, Converter, T, 6442 ViableConversions); 6443 } 6444 } 6445 6446 return finishContextualImplicitConversion(*this, Loc, From, Converter); 6447 } 6448 6449 /// IsAcceptableNonMemberOperatorCandidate - Determine whether Fn is 6450 /// an acceptable non-member overloaded operator for a call whose 6451 /// arguments have types T1 (and, if non-empty, T2). This routine 6452 /// implements the check in C++ [over.match.oper]p3b2 concerning 6453 /// enumeration types. 6454 static bool IsAcceptableNonMemberOperatorCandidate(ASTContext &Context, 6455 FunctionDecl *Fn, 6456 ArrayRef<Expr *> Args) { 6457 QualType T1 = Args[0]->getType(); 6458 QualType T2 = Args.size() > 1 ? Args[1]->getType() : QualType(); 6459 6460 if (T1->isDependentType() || (!T2.isNull() && T2->isDependentType())) 6461 return true; 6462 6463 if (T1->isRecordType() || (!T2.isNull() && T2->isRecordType())) 6464 return true; 6465 6466 const auto *Proto = Fn->getType()->castAs<FunctionProtoType>(); 6467 if (Proto->getNumParams() < 1) 6468 return false; 6469 6470 if (T1->isEnumeralType()) { 6471 QualType ArgType = Proto->getParamType(0).getNonReferenceType(); 6472 if (Context.hasSameUnqualifiedType(T1, ArgType)) 6473 return true; 6474 } 6475 6476 if (Proto->getNumParams() < 2) 6477 return false; 6478 6479 if (!T2.isNull() && T2->isEnumeralType()) { 6480 QualType ArgType = Proto->getParamType(1).getNonReferenceType(); 6481 if (Context.hasSameUnqualifiedType(T2, ArgType)) 6482 return true; 6483 } 6484 6485 return false; 6486 } 6487 6488 /// AddOverloadCandidate - Adds the given function to the set of 6489 /// candidate functions, using the given function call arguments. If 6490 /// @p SuppressUserConversions, then don't allow user-defined 6491 /// conversions via constructors or conversion operators. 6492 /// 6493 /// \param PartialOverloading true if we are performing "partial" overloading 6494 /// based on an incomplete set of function arguments. This feature is used by 6495 /// code completion. 6496 void Sema::AddOverloadCandidate( 6497 FunctionDecl *Function, DeclAccessPair FoundDecl, ArrayRef<Expr *> Args, 6498 OverloadCandidateSet &CandidateSet, bool SuppressUserConversions, 6499 bool PartialOverloading, bool AllowExplicit, bool AllowExplicitConversions, 6500 ADLCallKind IsADLCandidate, ConversionSequenceList EarlyConversions, 6501 OverloadCandidateParamOrder PO, bool AggregateCandidateDeduction) { 6502 const FunctionProtoType *Proto 6503 = dyn_cast<FunctionProtoType>(Function->getType()->getAs<FunctionType>()); 6504 assert(Proto && "Functions without a prototype cannot be overloaded"); 6505 assert(!Function->getDescribedFunctionTemplate() && 6506 "Use AddTemplateOverloadCandidate for function templates"); 6507 6508 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Function)) { 6509 if (!isa<CXXConstructorDecl>(Method)) { 6510 // If we get here, it's because we're calling a member function 6511 // that is named without a member access expression (e.g., 6512 // "this->f") that was either written explicitly or created 6513 // implicitly. This can happen with a qualified call to a member 6514 // function, e.g., X::f(). We use an empty type for the implied 6515 // object argument (C++ [over.call.func]p3), and the acting context 6516 // is irrelevant. 6517 AddMethodCandidate(Method, FoundDecl, Method->getParent(), QualType(), 6518 Expr::Classification::makeSimpleLValue(), Args, 6519 CandidateSet, SuppressUserConversions, 6520 PartialOverloading, EarlyConversions, PO); 6521 return; 6522 } 6523 // We treat a constructor like a non-member function, since its object 6524 // argument doesn't participate in overload resolution. 6525 } 6526 6527 if (!CandidateSet.isNewCandidate(Function, PO)) 6528 return; 6529 6530 // C++11 [class.copy]p11: [DR1402] 6531 // A defaulted move constructor that is defined as deleted is ignored by 6532 // overload resolution. 6533 CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Function); 6534 if (Constructor && Constructor->isDefaulted() && Constructor->isDeleted() && 6535 Constructor->isMoveConstructor()) 6536 return; 6537 6538 // Overload resolution is always an unevaluated context. 6539 EnterExpressionEvaluationContext Unevaluated( 6540 *this, Sema::ExpressionEvaluationContext::Unevaluated); 6541 6542 // C++ [over.match.oper]p3: 6543 // if no operand has a class type, only those non-member functions in the 6544 // lookup set that have a first parameter of type T1 or "reference to 6545 // (possibly cv-qualified) T1", when T1 is an enumeration type, or (if there 6546 // is a right operand) a second parameter of type T2 or "reference to 6547 // (possibly cv-qualified) T2", when T2 is an enumeration type, are 6548 // candidate functions. 6549 if (CandidateSet.getKind() == OverloadCandidateSet::CSK_Operator && 6550 !IsAcceptableNonMemberOperatorCandidate(Context, Function, Args)) 6551 return; 6552 6553 // Add this candidate 6554 OverloadCandidate &Candidate = 6555 CandidateSet.addCandidate(Args.size(), EarlyConversions); 6556 Candidate.FoundDecl = FoundDecl; 6557 Candidate.Function = Function; 6558 Candidate.Viable = true; 6559 Candidate.RewriteKind = 6560 CandidateSet.getRewriteInfo().getRewriteKind(Function, PO); 6561 Candidate.IsSurrogate = false; 6562 Candidate.IsADLCandidate = IsADLCandidate; 6563 Candidate.IgnoreObjectArgument = false; 6564 Candidate.ExplicitCallArguments = Args.size(); 6565 6566 // Explicit functions are not actually candidates at all if we're not 6567 // allowing them in this context, but keep them around so we can point 6568 // to them in diagnostics. 6569 if (!AllowExplicit && ExplicitSpecifier::getFromDecl(Function).isExplicit()) { 6570 Candidate.Viable = false; 6571 Candidate.FailureKind = ovl_fail_explicit; 6572 return; 6573 } 6574 6575 // Functions with internal linkage are only viable in the same module unit. 6576 if (getLangOpts().CPlusPlusModules && Function->isInAnotherModuleUnit()) { 6577 /// FIXME: Currently, the semantics of linkage in clang is slightly 6578 /// different from the semantics in C++ spec. In C++ spec, only names 6579 /// have linkage. So that all entities of the same should share one 6580 /// linkage. But in clang, different entities of the same could have 6581 /// different linkage. 6582 NamedDecl *ND = Function; 6583 if (auto *SpecInfo = Function->getTemplateSpecializationInfo()) 6584 ND = SpecInfo->getTemplate(); 6585 6586 if (ND->getFormalLinkage() == Linkage::InternalLinkage) { 6587 Candidate.Viable = false; 6588 Candidate.FailureKind = ovl_fail_module_mismatched; 6589 return; 6590 } 6591 } 6592 6593 if (Function->isMultiVersion() && 6594 ((Function->hasAttr<TargetAttr>() && 6595 !Function->getAttr<TargetAttr>()->isDefaultVersion()) || 6596 (Function->hasAttr<TargetVersionAttr>() && 6597 !Function->getAttr<TargetVersionAttr>()->isDefaultVersion()))) { 6598 Candidate.Viable = false; 6599 Candidate.FailureKind = ovl_non_default_multiversion_function; 6600 return; 6601 } 6602 6603 if (Constructor) { 6604 // C++ [class.copy]p3: 6605 // A member function template is never instantiated to perform the copy 6606 // of a class object to an object of its class type. 6607 QualType ClassType = Context.getTypeDeclType(Constructor->getParent()); 6608 if (Args.size() == 1 && Constructor->isSpecializationCopyingObject() && 6609 (Context.hasSameUnqualifiedType(ClassType, Args[0]->getType()) || 6610 IsDerivedFrom(Args[0]->getBeginLoc(), Args[0]->getType(), 6611 ClassType))) { 6612 Candidate.Viable = false; 6613 Candidate.FailureKind = ovl_fail_illegal_constructor; 6614 return; 6615 } 6616 6617 // C++ [over.match.funcs]p8: (proposed DR resolution) 6618 // A constructor inherited from class type C that has a first parameter 6619 // of type "reference to P" (including such a constructor instantiated 6620 // from a template) is excluded from the set of candidate functions when 6621 // constructing an object of type cv D if the argument list has exactly 6622 // one argument and D is reference-related to P and P is reference-related 6623 // to C. 6624 auto *Shadow = dyn_cast<ConstructorUsingShadowDecl>(FoundDecl.getDecl()); 6625 if (Shadow && Args.size() == 1 && Constructor->getNumParams() >= 1 && 6626 Constructor->getParamDecl(0)->getType()->isReferenceType()) { 6627 QualType P = Constructor->getParamDecl(0)->getType()->getPointeeType(); 6628 QualType C = Context.getRecordType(Constructor->getParent()); 6629 QualType D = Context.getRecordType(Shadow->getParent()); 6630 SourceLocation Loc = Args.front()->getExprLoc(); 6631 if ((Context.hasSameUnqualifiedType(P, C) || IsDerivedFrom(Loc, P, C)) && 6632 (Context.hasSameUnqualifiedType(D, P) || IsDerivedFrom(Loc, D, P))) { 6633 Candidate.Viable = false; 6634 Candidate.FailureKind = ovl_fail_inhctor_slice; 6635 return; 6636 } 6637 } 6638 6639 // Check that the constructor is capable of constructing an object in the 6640 // destination address space. 6641 if (!Qualifiers::isAddressSpaceSupersetOf( 6642 Constructor->getMethodQualifiers().getAddressSpace(), 6643 CandidateSet.getDestAS())) { 6644 Candidate.Viable = false; 6645 Candidate.FailureKind = ovl_fail_object_addrspace_mismatch; 6646 } 6647 } 6648 6649 unsigned NumParams = Proto->getNumParams(); 6650 6651 // (C++ 13.3.2p2): A candidate function having fewer than m 6652 // parameters is viable only if it has an ellipsis in its parameter 6653 // list (8.3.5). 6654 if (TooManyArguments(NumParams, Args.size(), PartialOverloading) && 6655 !Proto->isVariadic() && 6656 shouldEnforceArgLimit(PartialOverloading, Function)) { 6657 Candidate.Viable = false; 6658 Candidate.FailureKind = ovl_fail_too_many_arguments; 6659 return; 6660 } 6661 6662 // (C++ 13.3.2p2): A candidate function having more than m parameters 6663 // is viable only if the (m+1)st parameter has a default argument 6664 // (8.3.6). For the purposes of overload resolution, the 6665 // parameter list is truncated on the right, so that there are 6666 // exactly m parameters. 6667 unsigned MinRequiredArgs = Function->getMinRequiredArguments(); 6668 if (!AggregateCandidateDeduction && Args.size() < MinRequiredArgs && 6669 !PartialOverloading) { 6670 // Not enough arguments. 6671 Candidate.Viable = false; 6672 Candidate.FailureKind = ovl_fail_too_few_arguments; 6673 return; 6674 } 6675 6676 // (CUDA B.1): Check for invalid calls between targets. 6677 if (getLangOpts().CUDA) 6678 if (const FunctionDecl *Caller = getCurFunctionDecl(/*AllowLambda=*/true)) 6679 // Skip the check for callers that are implicit members, because in this 6680 // case we may not yet know what the member's target is; the target is 6681 // inferred for the member automatically, based on the bases and fields of 6682 // the class. 6683 if (!Caller->isImplicit() && !IsAllowedCUDACall(Caller, Function)) { 6684 Candidate.Viable = false; 6685 Candidate.FailureKind = ovl_fail_bad_target; 6686 return; 6687 } 6688 6689 if (Function->getTrailingRequiresClause()) { 6690 ConstraintSatisfaction Satisfaction; 6691 if (CheckFunctionConstraints(Function, Satisfaction, /*Loc*/ {}, 6692 /*ForOverloadResolution*/ true) || 6693 !Satisfaction.IsSatisfied) { 6694 Candidate.Viable = false; 6695 Candidate.FailureKind = ovl_fail_constraints_not_satisfied; 6696 return; 6697 } 6698 } 6699 6700 // Determine the implicit conversion sequences for each of the 6701 // arguments. 6702 for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) { 6703 unsigned ConvIdx = 6704 PO == OverloadCandidateParamOrder::Reversed ? 1 - ArgIdx : ArgIdx; 6705 if (Candidate.Conversions[ConvIdx].isInitialized()) { 6706 // We already formed a conversion sequence for this parameter during 6707 // template argument deduction. 6708 } else if (ArgIdx < NumParams) { 6709 // (C++ 13.3.2p3): for F to be a viable function, there shall 6710 // exist for each argument an implicit conversion sequence 6711 // (13.3.3.1) that converts that argument to the corresponding 6712 // parameter of F. 6713 QualType ParamType = Proto->getParamType(ArgIdx); 6714 Candidate.Conversions[ConvIdx] = TryCopyInitialization( 6715 *this, Args[ArgIdx], ParamType, SuppressUserConversions, 6716 /*InOverloadResolution=*/true, 6717 /*AllowObjCWritebackConversion=*/ 6718 getLangOpts().ObjCAutoRefCount, AllowExplicitConversions); 6719 if (Candidate.Conversions[ConvIdx].isBad()) { 6720 Candidate.Viable = false; 6721 Candidate.FailureKind = ovl_fail_bad_conversion; 6722 return; 6723 } 6724 } else { 6725 // (C++ 13.3.2p2): For the purposes of overload resolution, any 6726 // argument for which there is no corresponding parameter is 6727 // considered to ""match the ellipsis" (C+ 13.3.3.1.3). 6728 Candidate.Conversions[ConvIdx].setEllipsis(); 6729 } 6730 } 6731 6732 if (EnableIfAttr *FailedAttr = 6733 CheckEnableIf(Function, CandidateSet.getLocation(), Args)) { 6734 Candidate.Viable = false; 6735 Candidate.FailureKind = ovl_fail_enable_if; 6736 Candidate.DeductionFailure.Data = FailedAttr; 6737 return; 6738 } 6739 } 6740 6741 ObjCMethodDecl * 6742 Sema::SelectBestMethod(Selector Sel, MultiExprArg Args, bool IsInstance, 6743 SmallVectorImpl<ObjCMethodDecl *> &Methods) { 6744 if (Methods.size() <= 1) 6745 return nullptr; 6746 6747 for (unsigned b = 0, e = Methods.size(); b < e; b++) { 6748 bool Match = true; 6749 ObjCMethodDecl *Method = Methods[b]; 6750 unsigned NumNamedArgs = Sel.getNumArgs(); 6751 // Method might have more arguments than selector indicates. This is due 6752 // to addition of c-style arguments in method. 6753 if (Method->param_size() > NumNamedArgs) 6754 NumNamedArgs = Method->param_size(); 6755 if (Args.size() < NumNamedArgs) 6756 continue; 6757 6758 for (unsigned i = 0; i < NumNamedArgs; i++) { 6759 // We can't do any type-checking on a type-dependent argument. 6760 if (Args[i]->isTypeDependent()) { 6761 Match = false; 6762 break; 6763 } 6764 6765 ParmVarDecl *param = Method->parameters()[i]; 6766 Expr *argExpr = Args[i]; 6767 assert(argExpr && "SelectBestMethod(): missing expression"); 6768 6769 // Strip the unbridged-cast placeholder expression off unless it's 6770 // a consumed argument. 6771 if (argExpr->hasPlaceholderType(BuiltinType::ARCUnbridgedCast) && 6772 !param->hasAttr<CFConsumedAttr>()) 6773 argExpr = stripARCUnbridgedCast(argExpr); 6774 6775 // If the parameter is __unknown_anytype, move on to the next method. 6776 if (param->getType() == Context.UnknownAnyTy) { 6777 Match = false; 6778 break; 6779 } 6780 6781 ImplicitConversionSequence ConversionState 6782 = TryCopyInitialization(*this, argExpr, param->getType(), 6783 /*SuppressUserConversions*/false, 6784 /*InOverloadResolution=*/true, 6785 /*AllowObjCWritebackConversion=*/ 6786 getLangOpts().ObjCAutoRefCount, 6787 /*AllowExplicit*/false); 6788 // This function looks for a reasonably-exact match, so we consider 6789 // incompatible pointer conversions to be a failure here. 6790 if (ConversionState.isBad() || 6791 (ConversionState.isStandard() && 6792 ConversionState.Standard.Second == 6793 ICK_Incompatible_Pointer_Conversion)) { 6794 Match = false; 6795 break; 6796 } 6797 } 6798 // Promote additional arguments to variadic methods. 6799 if (Match && Method->isVariadic()) { 6800 for (unsigned i = NumNamedArgs, e = Args.size(); i < e; ++i) { 6801 if (Args[i]->isTypeDependent()) { 6802 Match = false; 6803 break; 6804 } 6805 ExprResult Arg = DefaultVariadicArgumentPromotion(Args[i], VariadicMethod, 6806 nullptr); 6807 if (Arg.isInvalid()) { 6808 Match = false; 6809 break; 6810 } 6811 } 6812 } else { 6813 // Check for extra arguments to non-variadic methods. 6814 if (Args.size() != NumNamedArgs) 6815 Match = false; 6816 else if (Match && NumNamedArgs == 0 && Methods.size() > 1) { 6817 // Special case when selectors have no argument. In this case, select 6818 // one with the most general result type of 'id'. 6819 for (unsigned b = 0, e = Methods.size(); b < e; b++) { 6820 QualType ReturnT = Methods[b]->getReturnType(); 6821 if (ReturnT->isObjCIdType()) 6822 return Methods[b]; 6823 } 6824 } 6825 } 6826 6827 if (Match) 6828 return Method; 6829 } 6830 return nullptr; 6831 } 6832 6833 static bool convertArgsForAvailabilityChecks( 6834 Sema &S, FunctionDecl *Function, Expr *ThisArg, SourceLocation CallLoc, 6835 ArrayRef<Expr *> Args, Sema::SFINAETrap &Trap, bool MissingImplicitThis, 6836 Expr *&ConvertedThis, SmallVectorImpl<Expr *> &ConvertedArgs) { 6837 if (ThisArg) { 6838 CXXMethodDecl *Method = cast<CXXMethodDecl>(Function); 6839 assert(!isa<CXXConstructorDecl>(Method) && 6840 "Shouldn't have `this` for ctors!"); 6841 assert(!Method->isStatic() && "Shouldn't have `this` for static methods!"); 6842 ExprResult R = S.PerformObjectArgumentInitialization( 6843 ThisArg, /*Qualifier=*/nullptr, Method, Method); 6844 if (R.isInvalid()) 6845 return false; 6846 ConvertedThis = R.get(); 6847 } else { 6848 if (auto *MD = dyn_cast<CXXMethodDecl>(Function)) { 6849 (void)MD; 6850 assert((MissingImplicitThis || MD->isStatic() || 6851 isa<CXXConstructorDecl>(MD)) && 6852 "Expected `this` for non-ctor instance methods"); 6853 } 6854 ConvertedThis = nullptr; 6855 } 6856 6857 // Ignore any variadic arguments. Converting them is pointless, since the 6858 // user can't refer to them in the function condition. 6859 unsigned ArgSizeNoVarargs = std::min(Function->param_size(), Args.size()); 6860 6861 // Convert the arguments. 6862 for (unsigned I = 0; I != ArgSizeNoVarargs; ++I) { 6863 ExprResult R; 6864 R = S.PerformCopyInitialization(InitializedEntity::InitializeParameter( 6865 S.Context, Function->getParamDecl(I)), 6866 SourceLocation(), Args[I]); 6867 6868 if (R.isInvalid()) 6869 return false; 6870 6871 ConvertedArgs.push_back(R.get()); 6872 } 6873 6874 if (Trap.hasErrorOccurred()) 6875 return false; 6876 6877 // Push default arguments if needed. 6878 if (!Function->isVariadic() && Args.size() < Function->getNumParams()) { 6879 for (unsigned i = Args.size(), e = Function->getNumParams(); i != e; ++i) { 6880 ParmVarDecl *P = Function->getParamDecl(i); 6881 if (!P->hasDefaultArg()) 6882 return false; 6883 ExprResult R = S.BuildCXXDefaultArgExpr(CallLoc, Function, P); 6884 if (R.isInvalid()) 6885 return false; 6886 ConvertedArgs.push_back(R.get()); 6887 } 6888 6889 if (Trap.hasErrorOccurred()) 6890 return false; 6891 } 6892 return true; 6893 } 6894 6895 EnableIfAttr *Sema::CheckEnableIf(FunctionDecl *Function, 6896 SourceLocation CallLoc, 6897 ArrayRef<Expr *> Args, 6898 bool MissingImplicitThis) { 6899 auto EnableIfAttrs = Function->specific_attrs<EnableIfAttr>(); 6900 if (EnableIfAttrs.begin() == EnableIfAttrs.end()) 6901 return nullptr; 6902 6903 SFINAETrap Trap(*this); 6904 SmallVector<Expr *, 16> ConvertedArgs; 6905 // FIXME: We should look into making enable_if late-parsed. 6906 Expr *DiscardedThis; 6907 if (!convertArgsForAvailabilityChecks( 6908 *this, Function, /*ThisArg=*/nullptr, CallLoc, Args, Trap, 6909 /*MissingImplicitThis=*/true, DiscardedThis, ConvertedArgs)) 6910 return *EnableIfAttrs.begin(); 6911 6912 for (auto *EIA : EnableIfAttrs) { 6913 APValue Result; 6914 // FIXME: This doesn't consider value-dependent cases, because doing so is 6915 // very difficult. Ideally, we should handle them more gracefully. 6916 if (EIA->getCond()->isValueDependent() || 6917 !EIA->getCond()->EvaluateWithSubstitution( 6918 Result, Context, Function, llvm::ArrayRef(ConvertedArgs))) 6919 return EIA; 6920 6921 if (!Result.isInt() || !Result.getInt().getBoolValue()) 6922 return EIA; 6923 } 6924 return nullptr; 6925 } 6926 6927 template <typename CheckFn> 6928 static bool diagnoseDiagnoseIfAttrsWith(Sema &S, const NamedDecl *ND, 6929 bool ArgDependent, SourceLocation Loc, 6930 CheckFn &&IsSuccessful) { 6931 SmallVector<const DiagnoseIfAttr *, 8> Attrs; 6932 for (const auto *DIA : ND->specific_attrs<DiagnoseIfAttr>()) { 6933 if (ArgDependent == DIA->getArgDependent()) 6934 Attrs.push_back(DIA); 6935 } 6936 6937 // Common case: No diagnose_if attributes, so we can quit early. 6938 if (Attrs.empty()) 6939 return false; 6940 6941 auto WarningBegin = std::stable_partition( 6942 Attrs.begin(), Attrs.end(), 6943 [](const DiagnoseIfAttr *DIA) { return DIA->isError(); }); 6944 6945 // Note that diagnose_if attributes are late-parsed, so they appear in the 6946 // correct order (unlike enable_if attributes). 6947 auto ErrAttr = llvm::find_if(llvm::make_range(Attrs.begin(), WarningBegin), 6948 IsSuccessful); 6949 if (ErrAttr != WarningBegin) { 6950 const DiagnoseIfAttr *DIA = *ErrAttr; 6951 S.Diag(Loc, diag::err_diagnose_if_succeeded) << DIA->getMessage(); 6952 S.Diag(DIA->getLocation(), diag::note_from_diagnose_if) 6953 << DIA->getParent() << DIA->getCond()->getSourceRange(); 6954 return true; 6955 } 6956 6957 for (const auto *DIA : llvm::make_range(WarningBegin, Attrs.end())) 6958 if (IsSuccessful(DIA)) { 6959 S.Diag(Loc, diag::warn_diagnose_if_succeeded) << DIA->getMessage(); 6960 S.Diag(DIA->getLocation(), diag::note_from_diagnose_if) 6961 << DIA->getParent() << DIA->getCond()->getSourceRange(); 6962 } 6963 6964 return false; 6965 } 6966 6967 bool Sema::diagnoseArgDependentDiagnoseIfAttrs(const FunctionDecl *Function, 6968 const Expr *ThisArg, 6969 ArrayRef<const Expr *> Args, 6970 SourceLocation Loc) { 6971 return diagnoseDiagnoseIfAttrsWith( 6972 *this, Function, /*ArgDependent=*/true, Loc, 6973 [&](const DiagnoseIfAttr *DIA) { 6974 APValue Result; 6975 // It's sane to use the same Args for any redecl of this function, since 6976 // EvaluateWithSubstitution only cares about the position of each 6977 // argument in the arg list, not the ParmVarDecl* it maps to. 6978 if (!DIA->getCond()->EvaluateWithSubstitution( 6979 Result, Context, cast<FunctionDecl>(DIA->getParent()), Args, ThisArg)) 6980 return false; 6981 return Result.isInt() && Result.getInt().getBoolValue(); 6982 }); 6983 } 6984 6985 bool Sema::diagnoseArgIndependentDiagnoseIfAttrs(const NamedDecl *ND, 6986 SourceLocation Loc) { 6987 return diagnoseDiagnoseIfAttrsWith( 6988 *this, ND, /*ArgDependent=*/false, Loc, 6989 [&](const DiagnoseIfAttr *DIA) { 6990 bool Result; 6991 return DIA->getCond()->EvaluateAsBooleanCondition(Result, Context) && 6992 Result; 6993 }); 6994 } 6995 6996 /// Add all of the function declarations in the given function set to 6997 /// the overload candidate set. 6998 void Sema::AddFunctionCandidates(const UnresolvedSetImpl &Fns, 6999 ArrayRef<Expr *> Args, 7000 OverloadCandidateSet &CandidateSet, 7001 TemplateArgumentListInfo *ExplicitTemplateArgs, 7002 bool SuppressUserConversions, 7003 bool PartialOverloading, 7004 bool FirstArgumentIsBase) { 7005 for (UnresolvedSetIterator F = Fns.begin(), E = Fns.end(); F != E; ++F) { 7006 NamedDecl *D = F.getDecl()->getUnderlyingDecl(); 7007 ArrayRef<Expr *> FunctionArgs = Args; 7008 7009 FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(D); 7010 FunctionDecl *FD = 7011 FunTmpl ? FunTmpl->getTemplatedDecl() : cast<FunctionDecl>(D); 7012 7013 if (isa<CXXMethodDecl>(FD) && !cast<CXXMethodDecl>(FD)->isStatic()) { 7014 QualType ObjectType; 7015 Expr::Classification ObjectClassification; 7016 if (Args.size() > 0) { 7017 if (Expr *E = Args[0]) { 7018 // Use the explicit base to restrict the lookup: 7019 ObjectType = E->getType(); 7020 // Pointers in the object arguments are implicitly dereferenced, so we 7021 // always classify them as l-values. 7022 if (!ObjectType.isNull() && ObjectType->isPointerType()) 7023 ObjectClassification = Expr::Classification::makeSimpleLValue(); 7024 else 7025 ObjectClassification = E->Classify(Context); 7026 } // .. else there is an implicit base. 7027 FunctionArgs = Args.slice(1); 7028 } 7029 if (FunTmpl) { 7030 AddMethodTemplateCandidate( 7031 FunTmpl, F.getPair(), 7032 cast<CXXRecordDecl>(FunTmpl->getDeclContext()), 7033 ExplicitTemplateArgs, ObjectType, ObjectClassification, 7034 FunctionArgs, CandidateSet, SuppressUserConversions, 7035 PartialOverloading); 7036 } else { 7037 AddMethodCandidate(cast<CXXMethodDecl>(FD), F.getPair(), 7038 cast<CXXMethodDecl>(FD)->getParent(), ObjectType, 7039 ObjectClassification, FunctionArgs, CandidateSet, 7040 SuppressUserConversions, PartialOverloading); 7041 } 7042 } else { 7043 // This branch handles both standalone functions and static methods. 7044 7045 // Slice the first argument (which is the base) when we access 7046 // static method as non-static. 7047 if (Args.size() > 0 && 7048 (!Args[0] || (FirstArgumentIsBase && isa<CXXMethodDecl>(FD) && 7049 !isa<CXXConstructorDecl>(FD)))) { 7050 assert(cast<CXXMethodDecl>(FD)->isStatic()); 7051 FunctionArgs = Args.slice(1); 7052 } 7053 if (FunTmpl) { 7054 AddTemplateOverloadCandidate(FunTmpl, F.getPair(), 7055 ExplicitTemplateArgs, FunctionArgs, 7056 CandidateSet, SuppressUserConversions, 7057 PartialOverloading); 7058 } else { 7059 AddOverloadCandidate(FD, F.getPair(), FunctionArgs, CandidateSet, 7060 SuppressUserConversions, PartialOverloading); 7061 } 7062 } 7063 } 7064 } 7065 7066 /// AddMethodCandidate - Adds a named decl (which is some kind of 7067 /// method) as a method candidate to the given overload set. 7068 void Sema::AddMethodCandidate(DeclAccessPair FoundDecl, QualType ObjectType, 7069 Expr::Classification ObjectClassification, 7070 ArrayRef<Expr *> Args, 7071 OverloadCandidateSet &CandidateSet, 7072 bool SuppressUserConversions, 7073 OverloadCandidateParamOrder PO) { 7074 NamedDecl *Decl = FoundDecl.getDecl(); 7075 CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(Decl->getDeclContext()); 7076 7077 if (isa<UsingShadowDecl>(Decl)) 7078 Decl = cast<UsingShadowDecl>(Decl)->getTargetDecl(); 7079 7080 if (FunctionTemplateDecl *TD = dyn_cast<FunctionTemplateDecl>(Decl)) { 7081 assert(isa<CXXMethodDecl>(TD->getTemplatedDecl()) && 7082 "Expected a member function template"); 7083 AddMethodTemplateCandidate(TD, FoundDecl, ActingContext, 7084 /*ExplicitArgs*/ nullptr, ObjectType, 7085 ObjectClassification, Args, CandidateSet, 7086 SuppressUserConversions, false, PO); 7087 } else { 7088 AddMethodCandidate(cast<CXXMethodDecl>(Decl), FoundDecl, ActingContext, 7089 ObjectType, ObjectClassification, Args, CandidateSet, 7090 SuppressUserConversions, false, std::nullopt, PO); 7091 } 7092 } 7093 7094 /// AddMethodCandidate - Adds the given C++ member function to the set 7095 /// of candidate functions, using the given function call arguments 7096 /// and the object argument (@c Object). For example, in a call 7097 /// @c o.f(a1,a2), @c Object will contain @c o and @c Args will contain 7098 /// both @c a1 and @c a2. If @p SuppressUserConversions, then don't 7099 /// allow user-defined conversions via constructors or conversion 7100 /// operators. 7101 void 7102 Sema::AddMethodCandidate(CXXMethodDecl *Method, DeclAccessPair FoundDecl, 7103 CXXRecordDecl *ActingContext, QualType ObjectType, 7104 Expr::Classification ObjectClassification, 7105 ArrayRef<Expr *> Args, 7106 OverloadCandidateSet &CandidateSet, 7107 bool SuppressUserConversions, 7108 bool PartialOverloading, 7109 ConversionSequenceList EarlyConversions, 7110 OverloadCandidateParamOrder PO) { 7111 const FunctionProtoType *Proto 7112 = dyn_cast<FunctionProtoType>(Method->getType()->getAs<FunctionType>()); 7113 assert(Proto && "Methods without a prototype cannot be overloaded"); 7114 assert(!isa<CXXConstructorDecl>(Method) && 7115 "Use AddOverloadCandidate for constructors"); 7116 7117 if (!CandidateSet.isNewCandidate(Method, PO)) 7118 return; 7119 7120 // C++11 [class.copy]p23: [DR1402] 7121 // A defaulted move assignment operator that is defined as deleted is 7122 // ignored by overload resolution. 7123 if (Method->isDefaulted() && Method->isDeleted() && 7124 Method->isMoveAssignmentOperator()) 7125 return; 7126 7127 // Overload resolution is always an unevaluated context. 7128 EnterExpressionEvaluationContext Unevaluated( 7129 *this, Sema::ExpressionEvaluationContext::Unevaluated); 7130 7131 // Add this candidate 7132 OverloadCandidate &Candidate = 7133 CandidateSet.addCandidate(Args.size() + 1, EarlyConversions); 7134 Candidate.FoundDecl = FoundDecl; 7135 Candidate.Function = Method; 7136 Candidate.RewriteKind = 7137 CandidateSet.getRewriteInfo().getRewriteKind(Method, PO); 7138 Candidate.IsSurrogate = false; 7139 Candidate.IgnoreObjectArgument = false; 7140 Candidate.ExplicitCallArguments = Args.size(); 7141 7142 unsigned NumParams = Proto->getNumParams(); 7143 7144 // (C++ 13.3.2p2): A candidate function having fewer than m 7145 // parameters is viable only if it has an ellipsis in its parameter 7146 // list (8.3.5). 7147 if (TooManyArguments(NumParams, Args.size(), PartialOverloading) && 7148 !Proto->isVariadic() && 7149 shouldEnforceArgLimit(PartialOverloading, Method)) { 7150 Candidate.Viable = false; 7151 Candidate.FailureKind = ovl_fail_too_many_arguments; 7152 return; 7153 } 7154 7155 // (C++ 13.3.2p2): A candidate function having more than m parameters 7156 // is viable only if the (m+1)st parameter has a default argument 7157 // (8.3.6). For the purposes of overload resolution, the 7158 // parameter list is truncated on the right, so that there are 7159 // exactly m parameters. 7160 unsigned MinRequiredArgs = Method->getMinRequiredArguments(); 7161 if (Args.size() < MinRequiredArgs && !PartialOverloading) { 7162 // Not enough arguments. 7163 Candidate.Viable = false; 7164 Candidate.FailureKind = ovl_fail_too_few_arguments; 7165 return; 7166 } 7167 7168 Candidate.Viable = true; 7169 7170 unsigned FirstConvIdx = PO == OverloadCandidateParamOrder::Reversed ? 1 : 0; 7171 if (ObjectType.isNull()) 7172 Candidate.IgnoreObjectArgument = true; 7173 else if (Method->isStatic()) { 7174 // [over.best.ics.general]p8 7175 // When the parameter is the implicit object parameter of a static member 7176 // function, the implicit conversion sequence is a standard conversion 7177 // sequence that is neither better nor worse than any other standard 7178 // conversion sequence. 7179 // 7180 // This is a rule that was introduced in C++23 to support static lambdas. We 7181 // apply it retroactively because we want to support static lambdas as an 7182 // extension and it doesn't hurt previous code. 7183 Candidate.Conversions[FirstConvIdx].setStaticObjectArgument(); 7184 } else { 7185 // Determine the implicit conversion sequence for the object 7186 // parameter. 7187 Candidate.Conversions[FirstConvIdx] = TryObjectArgumentInitialization( 7188 *this, CandidateSet.getLocation(), ObjectType, ObjectClassification, 7189 Method, ActingContext); 7190 if (Candidate.Conversions[FirstConvIdx].isBad()) { 7191 Candidate.Viable = false; 7192 Candidate.FailureKind = ovl_fail_bad_conversion; 7193 return; 7194 } 7195 } 7196 7197 // (CUDA B.1): Check for invalid calls between targets. 7198 if (getLangOpts().CUDA) 7199 if (const FunctionDecl *Caller = getCurFunctionDecl(/*AllowLambda=*/true)) 7200 if (!IsAllowedCUDACall(Caller, Method)) { 7201 Candidate.Viable = false; 7202 Candidate.FailureKind = ovl_fail_bad_target; 7203 return; 7204 } 7205 7206 if (Method->getTrailingRequiresClause()) { 7207 ConstraintSatisfaction Satisfaction; 7208 if (CheckFunctionConstraints(Method, Satisfaction, /*Loc*/ {}, 7209 /*ForOverloadResolution*/ true) || 7210 !Satisfaction.IsSatisfied) { 7211 Candidate.Viable = false; 7212 Candidate.FailureKind = ovl_fail_constraints_not_satisfied; 7213 return; 7214 } 7215 } 7216 7217 // Determine the implicit conversion sequences for each of the 7218 // arguments. 7219 for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) { 7220 unsigned ConvIdx = 7221 PO == OverloadCandidateParamOrder::Reversed ? 0 : (ArgIdx + 1); 7222 if (Candidate.Conversions[ConvIdx].isInitialized()) { 7223 // We already formed a conversion sequence for this parameter during 7224 // template argument deduction. 7225 } else if (ArgIdx < NumParams) { 7226 // (C++ 13.3.2p3): for F to be a viable function, there shall 7227 // exist for each argument an implicit conversion sequence 7228 // (13.3.3.1) that converts that argument to the corresponding 7229 // parameter of F. 7230 QualType ParamType = Proto->getParamType(ArgIdx); 7231 Candidate.Conversions[ConvIdx] 7232 = TryCopyInitialization(*this, Args[ArgIdx], ParamType, 7233 SuppressUserConversions, 7234 /*InOverloadResolution=*/true, 7235 /*AllowObjCWritebackConversion=*/ 7236 getLangOpts().ObjCAutoRefCount); 7237 if (Candidate.Conversions[ConvIdx].isBad()) { 7238 Candidate.Viable = false; 7239 Candidate.FailureKind = ovl_fail_bad_conversion; 7240 return; 7241 } 7242 } else { 7243 // (C++ 13.3.2p2): For the purposes of overload resolution, any 7244 // argument for which there is no corresponding parameter is 7245 // considered to "match the ellipsis" (C+ 13.3.3.1.3). 7246 Candidate.Conversions[ConvIdx].setEllipsis(); 7247 } 7248 } 7249 7250 if (EnableIfAttr *FailedAttr = 7251 CheckEnableIf(Method, CandidateSet.getLocation(), Args, true)) { 7252 Candidate.Viable = false; 7253 Candidate.FailureKind = ovl_fail_enable_if; 7254 Candidate.DeductionFailure.Data = FailedAttr; 7255 return; 7256 } 7257 7258 if (Method->isMultiVersion() && 7259 ((Method->hasAttr<TargetAttr>() && 7260 !Method->getAttr<TargetAttr>()->isDefaultVersion()) || 7261 (Method->hasAttr<TargetVersionAttr>() && 7262 !Method->getAttr<TargetVersionAttr>()->isDefaultVersion()))) { 7263 Candidate.Viable = false; 7264 Candidate.FailureKind = ovl_non_default_multiversion_function; 7265 } 7266 } 7267 7268 /// Add a C++ member function template as a candidate to the candidate 7269 /// set, using template argument deduction to produce an appropriate member 7270 /// function template specialization. 7271 void Sema::AddMethodTemplateCandidate( 7272 FunctionTemplateDecl *MethodTmpl, DeclAccessPair FoundDecl, 7273 CXXRecordDecl *ActingContext, 7274 TemplateArgumentListInfo *ExplicitTemplateArgs, QualType ObjectType, 7275 Expr::Classification ObjectClassification, ArrayRef<Expr *> Args, 7276 OverloadCandidateSet &CandidateSet, bool SuppressUserConversions, 7277 bool PartialOverloading, OverloadCandidateParamOrder PO) { 7278 if (!CandidateSet.isNewCandidate(MethodTmpl, PO)) 7279 return; 7280 7281 // C++ [over.match.funcs]p7: 7282 // In each case where a candidate is a function template, candidate 7283 // function template specializations are generated using template argument 7284 // deduction (14.8.3, 14.8.2). Those candidates are then handled as 7285 // candidate functions in the usual way.113) A given name can refer to one 7286 // or more function templates and also to a set of overloaded non-template 7287 // functions. In such a case, the candidate functions generated from each 7288 // function template are combined with the set of non-template candidate 7289 // functions. 7290 TemplateDeductionInfo Info(CandidateSet.getLocation()); 7291 FunctionDecl *Specialization = nullptr; 7292 ConversionSequenceList Conversions; 7293 if (TemplateDeductionResult Result = DeduceTemplateArguments( 7294 MethodTmpl, ExplicitTemplateArgs, Args, Specialization, Info, 7295 PartialOverloading, /*AggregateDeductionCandidate=*/false, 7296 [&](ArrayRef<QualType> ParamTypes) { 7297 return CheckNonDependentConversions( 7298 MethodTmpl, ParamTypes, Args, CandidateSet, Conversions, 7299 SuppressUserConversions, ActingContext, ObjectType, 7300 ObjectClassification, PO); 7301 })) { 7302 OverloadCandidate &Candidate = 7303 CandidateSet.addCandidate(Conversions.size(), Conversions); 7304 Candidate.FoundDecl = FoundDecl; 7305 Candidate.Function = MethodTmpl->getTemplatedDecl(); 7306 Candidate.Viable = false; 7307 Candidate.RewriteKind = 7308 CandidateSet.getRewriteInfo().getRewriteKind(Candidate.Function, PO); 7309 Candidate.IsSurrogate = false; 7310 Candidate.IgnoreObjectArgument = 7311 cast<CXXMethodDecl>(Candidate.Function)->isStatic() || 7312 ObjectType.isNull(); 7313 Candidate.ExplicitCallArguments = Args.size(); 7314 if (Result == TDK_NonDependentConversionFailure) 7315 Candidate.FailureKind = ovl_fail_bad_conversion; 7316 else { 7317 Candidate.FailureKind = ovl_fail_bad_deduction; 7318 Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result, 7319 Info); 7320 } 7321 return; 7322 } 7323 7324 // Add the function template specialization produced by template argument 7325 // deduction as a candidate. 7326 assert(Specialization && "Missing member function template specialization?"); 7327 assert(isa<CXXMethodDecl>(Specialization) && 7328 "Specialization is not a member function?"); 7329 AddMethodCandidate(cast<CXXMethodDecl>(Specialization), FoundDecl, 7330 ActingContext, ObjectType, ObjectClassification, Args, 7331 CandidateSet, SuppressUserConversions, PartialOverloading, 7332 Conversions, PO); 7333 } 7334 7335 /// Determine whether a given function template has a simple explicit specifier 7336 /// or a non-value-dependent explicit-specification that evaluates to true. 7337 static bool isNonDependentlyExplicit(FunctionTemplateDecl *FTD) { 7338 return ExplicitSpecifier::getFromDecl(FTD->getTemplatedDecl()).isExplicit(); 7339 } 7340 7341 /// Add a C++ function template specialization as a candidate 7342 /// in the candidate set, using template argument deduction to produce 7343 /// an appropriate function template specialization. 7344 void Sema::AddTemplateOverloadCandidate( 7345 FunctionTemplateDecl *FunctionTemplate, DeclAccessPair FoundDecl, 7346 TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args, 7347 OverloadCandidateSet &CandidateSet, bool SuppressUserConversions, 7348 bool PartialOverloading, bool AllowExplicit, ADLCallKind IsADLCandidate, 7349 OverloadCandidateParamOrder PO, bool AggregateCandidateDeduction) { 7350 if (!CandidateSet.isNewCandidate(FunctionTemplate, PO)) 7351 return; 7352 7353 // If the function template has a non-dependent explicit specification, 7354 // exclude it now if appropriate; we are not permitted to perform deduction 7355 // and substitution in this case. 7356 if (!AllowExplicit && isNonDependentlyExplicit(FunctionTemplate)) { 7357 OverloadCandidate &Candidate = CandidateSet.addCandidate(); 7358 Candidate.FoundDecl = FoundDecl; 7359 Candidate.Function = FunctionTemplate->getTemplatedDecl(); 7360 Candidate.Viable = false; 7361 Candidate.FailureKind = ovl_fail_explicit; 7362 return; 7363 } 7364 7365 // C++ [over.match.funcs]p7: 7366 // In each case where a candidate is a function template, candidate 7367 // function template specializations are generated using template argument 7368 // deduction (14.8.3, 14.8.2). Those candidates are then handled as 7369 // candidate functions in the usual way.113) A given name can refer to one 7370 // or more function templates and also to a set of overloaded non-template 7371 // functions. In such a case, the candidate functions generated from each 7372 // function template are combined with the set of non-template candidate 7373 // functions. 7374 TemplateDeductionInfo Info(CandidateSet.getLocation()); 7375 FunctionDecl *Specialization = nullptr; 7376 ConversionSequenceList Conversions; 7377 if (TemplateDeductionResult Result = DeduceTemplateArguments( 7378 FunctionTemplate, ExplicitTemplateArgs, Args, Specialization, Info, 7379 PartialOverloading, AggregateCandidateDeduction, 7380 [&](ArrayRef<QualType> ParamTypes) { 7381 return CheckNonDependentConversions( 7382 FunctionTemplate, ParamTypes, Args, CandidateSet, Conversions, 7383 SuppressUserConversions, nullptr, QualType(), {}, PO); 7384 })) { 7385 OverloadCandidate &Candidate = 7386 CandidateSet.addCandidate(Conversions.size(), Conversions); 7387 Candidate.FoundDecl = FoundDecl; 7388 Candidate.Function = FunctionTemplate->getTemplatedDecl(); 7389 Candidate.Viable = false; 7390 Candidate.RewriteKind = 7391 CandidateSet.getRewriteInfo().getRewriteKind(Candidate.Function, PO); 7392 Candidate.IsSurrogate = false; 7393 Candidate.IsADLCandidate = IsADLCandidate; 7394 // Ignore the object argument if there is one, since we don't have an object 7395 // type. 7396 Candidate.IgnoreObjectArgument = 7397 isa<CXXMethodDecl>(Candidate.Function) && 7398 !isa<CXXConstructorDecl>(Candidate.Function); 7399 Candidate.ExplicitCallArguments = Args.size(); 7400 if (Result == TDK_NonDependentConversionFailure) 7401 Candidate.FailureKind = ovl_fail_bad_conversion; 7402 else { 7403 Candidate.FailureKind = ovl_fail_bad_deduction; 7404 Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result, 7405 Info); 7406 } 7407 return; 7408 } 7409 7410 // Add the function template specialization produced by template argument 7411 // deduction as a candidate. 7412 assert(Specialization && "Missing function template specialization?"); 7413 AddOverloadCandidate( 7414 Specialization, FoundDecl, Args, CandidateSet, SuppressUserConversions, 7415 PartialOverloading, AllowExplicit, 7416 /*AllowExplicitConversions=*/false, IsADLCandidate, Conversions, PO, 7417 Info.AggregateDeductionCandidateHasMismatchedArity); 7418 } 7419 7420 /// Check that implicit conversion sequences can be formed for each argument 7421 /// whose corresponding parameter has a non-dependent type, per DR1391's 7422 /// [temp.deduct.call]p10. 7423 bool Sema::CheckNonDependentConversions( 7424 FunctionTemplateDecl *FunctionTemplate, ArrayRef<QualType> ParamTypes, 7425 ArrayRef<Expr *> Args, OverloadCandidateSet &CandidateSet, 7426 ConversionSequenceList &Conversions, bool SuppressUserConversions, 7427 CXXRecordDecl *ActingContext, QualType ObjectType, 7428 Expr::Classification ObjectClassification, OverloadCandidateParamOrder PO) { 7429 // FIXME: The cases in which we allow explicit conversions for constructor 7430 // arguments never consider calling a constructor template. It's not clear 7431 // that is correct. 7432 const bool AllowExplicit = false; 7433 7434 auto *FD = FunctionTemplate->getTemplatedDecl(); 7435 auto *Method = dyn_cast<CXXMethodDecl>(FD); 7436 bool HasThisConversion = Method && !isa<CXXConstructorDecl>(Method); 7437 unsigned ThisConversions = HasThisConversion ? 1 : 0; 7438 7439 Conversions = 7440 CandidateSet.allocateConversionSequences(ThisConversions + Args.size()); 7441 7442 // Overload resolution is always an unevaluated context. 7443 EnterExpressionEvaluationContext Unevaluated( 7444 *this, Sema::ExpressionEvaluationContext::Unevaluated); 7445 7446 // For a method call, check the 'this' conversion here too. DR1391 doesn't 7447 // require that, but this check should never result in a hard error, and 7448 // overload resolution is permitted to sidestep instantiations. 7449 if (HasThisConversion && !cast<CXXMethodDecl>(FD)->isStatic() && 7450 !ObjectType.isNull()) { 7451 unsigned ConvIdx = PO == OverloadCandidateParamOrder::Reversed ? 1 : 0; 7452 Conversions[ConvIdx] = TryObjectArgumentInitialization( 7453 *this, CandidateSet.getLocation(), ObjectType, ObjectClassification, 7454 Method, ActingContext); 7455 if (Conversions[ConvIdx].isBad()) 7456 return true; 7457 } 7458 7459 for (unsigned I = 0, N = std::min(ParamTypes.size(), Args.size()); I != N; 7460 ++I) { 7461 QualType ParamType = ParamTypes[I]; 7462 if (!ParamType->isDependentType()) { 7463 unsigned ConvIdx = PO == OverloadCandidateParamOrder::Reversed 7464 ? 0 7465 : (ThisConversions + I); 7466 Conversions[ConvIdx] 7467 = TryCopyInitialization(*this, Args[I], ParamType, 7468 SuppressUserConversions, 7469 /*InOverloadResolution=*/true, 7470 /*AllowObjCWritebackConversion=*/ 7471 getLangOpts().ObjCAutoRefCount, 7472 AllowExplicit); 7473 if (Conversions[ConvIdx].isBad()) 7474 return true; 7475 } 7476 } 7477 7478 return false; 7479 } 7480 7481 /// Determine whether this is an allowable conversion from the result 7482 /// of an explicit conversion operator to the expected type, per C++ 7483 /// [over.match.conv]p1 and [over.match.ref]p1. 7484 /// 7485 /// \param ConvType The return type of the conversion function. 7486 /// 7487 /// \param ToType The type we are converting to. 7488 /// 7489 /// \param AllowObjCPointerConversion Allow a conversion from one 7490 /// Objective-C pointer to another. 7491 /// 7492 /// \returns true if the conversion is allowable, false otherwise. 7493 static bool isAllowableExplicitConversion(Sema &S, 7494 QualType ConvType, QualType ToType, 7495 bool AllowObjCPointerConversion) { 7496 QualType ToNonRefType = ToType.getNonReferenceType(); 7497 7498 // Easy case: the types are the same. 7499 if (S.Context.hasSameUnqualifiedType(ConvType, ToNonRefType)) 7500 return true; 7501 7502 // Allow qualification conversions. 7503 bool ObjCLifetimeConversion; 7504 if (S.IsQualificationConversion(ConvType, ToNonRefType, /*CStyle*/false, 7505 ObjCLifetimeConversion)) 7506 return true; 7507 7508 // If we're not allowed to consider Objective-C pointer conversions, 7509 // we're done. 7510 if (!AllowObjCPointerConversion) 7511 return false; 7512 7513 // Is this an Objective-C pointer conversion? 7514 bool IncompatibleObjC = false; 7515 QualType ConvertedType; 7516 return S.isObjCPointerConversion(ConvType, ToNonRefType, ConvertedType, 7517 IncompatibleObjC); 7518 } 7519 7520 /// AddConversionCandidate - Add a C++ conversion function as a 7521 /// candidate in the candidate set (C++ [over.match.conv], 7522 /// C++ [over.match.copy]). From is the expression we're converting from, 7523 /// and ToType is the type that we're eventually trying to convert to 7524 /// (which may or may not be the same type as the type that the 7525 /// conversion function produces). 7526 void Sema::AddConversionCandidate( 7527 CXXConversionDecl *Conversion, DeclAccessPair FoundDecl, 7528 CXXRecordDecl *ActingContext, Expr *From, QualType ToType, 7529 OverloadCandidateSet &CandidateSet, bool AllowObjCConversionOnExplicit, 7530 bool AllowExplicit, bool AllowResultConversion) { 7531 assert(!Conversion->getDescribedFunctionTemplate() && 7532 "Conversion function templates use AddTemplateConversionCandidate"); 7533 QualType ConvType = Conversion->getConversionType().getNonReferenceType(); 7534 if (!CandidateSet.isNewCandidate(Conversion)) 7535 return; 7536 7537 // If the conversion function has an undeduced return type, trigger its 7538 // deduction now. 7539 if (getLangOpts().CPlusPlus14 && ConvType->isUndeducedType()) { 7540 if (DeduceReturnType(Conversion, From->getExprLoc())) 7541 return; 7542 ConvType = Conversion->getConversionType().getNonReferenceType(); 7543 } 7544 7545 // If we don't allow any conversion of the result type, ignore conversion 7546 // functions that don't convert to exactly (possibly cv-qualified) T. 7547 if (!AllowResultConversion && 7548 !Context.hasSameUnqualifiedType(Conversion->getConversionType(), ToType)) 7549 return; 7550 7551 // Per C++ [over.match.conv]p1, [over.match.ref]p1, an explicit conversion 7552 // operator is only a candidate if its return type is the target type or 7553 // can be converted to the target type with a qualification conversion. 7554 // 7555 // FIXME: Include such functions in the candidate list and explain why we 7556 // can't select them. 7557 if (Conversion->isExplicit() && 7558 !isAllowableExplicitConversion(*this, ConvType, ToType, 7559 AllowObjCConversionOnExplicit)) 7560 return; 7561 7562 // Overload resolution is always an unevaluated context. 7563 EnterExpressionEvaluationContext Unevaluated( 7564 *this, Sema::ExpressionEvaluationContext::Unevaluated); 7565 7566 // Add this candidate 7567 OverloadCandidate &Candidate = CandidateSet.addCandidate(1); 7568 Candidate.FoundDecl = FoundDecl; 7569 Candidate.Function = Conversion; 7570 Candidate.IsSurrogate = false; 7571 Candidate.IgnoreObjectArgument = false; 7572 Candidate.FinalConversion.setAsIdentityConversion(); 7573 Candidate.FinalConversion.setFromType(ConvType); 7574 Candidate.FinalConversion.setAllToTypes(ToType); 7575 Candidate.Viable = true; 7576 Candidate.ExplicitCallArguments = 1; 7577 7578 // Explicit functions are not actually candidates at all if we're not 7579 // allowing them in this context, but keep them around so we can point 7580 // to them in diagnostics. 7581 if (!AllowExplicit && Conversion->isExplicit()) { 7582 Candidate.Viable = false; 7583 Candidate.FailureKind = ovl_fail_explicit; 7584 return; 7585 } 7586 7587 // C++ [over.match.funcs]p4: 7588 // For conversion functions, the function is considered to be a member of 7589 // the class of the implicit implied object argument for the purpose of 7590 // defining the type of the implicit object parameter. 7591 // 7592 // Determine the implicit conversion sequence for the implicit 7593 // object parameter. 7594 QualType ImplicitParamType = From->getType(); 7595 if (const PointerType *FromPtrType = ImplicitParamType->getAs<PointerType>()) 7596 ImplicitParamType = FromPtrType->getPointeeType(); 7597 CXXRecordDecl *ConversionContext 7598 = cast<CXXRecordDecl>(ImplicitParamType->castAs<RecordType>()->getDecl()); 7599 7600 Candidate.Conversions[0] = TryObjectArgumentInitialization( 7601 *this, CandidateSet.getLocation(), From->getType(), 7602 From->Classify(Context), Conversion, ConversionContext); 7603 7604 if (Candidate.Conversions[0].isBad()) { 7605 Candidate.Viable = false; 7606 Candidate.FailureKind = ovl_fail_bad_conversion; 7607 return; 7608 } 7609 7610 if (Conversion->getTrailingRequiresClause()) { 7611 ConstraintSatisfaction Satisfaction; 7612 if (CheckFunctionConstraints(Conversion, Satisfaction) || 7613 !Satisfaction.IsSatisfied) { 7614 Candidate.Viable = false; 7615 Candidate.FailureKind = ovl_fail_constraints_not_satisfied; 7616 return; 7617 } 7618 } 7619 7620 // We won't go through a user-defined type conversion function to convert a 7621 // derived to base as such conversions are given Conversion Rank. They only 7622 // go through a copy constructor. 13.3.3.1.2-p4 [over.ics.user] 7623 QualType FromCanon 7624 = Context.getCanonicalType(From->getType().getUnqualifiedType()); 7625 QualType ToCanon = Context.getCanonicalType(ToType).getUnqualifiedType(); 7626 if (FromCanon == ToCanon || 7627 IsDerivedFrom(CandidateSet.getLocation(), FromCanon, ToCanon)) { 7628 Candidate.Viable = false; 7629 Candidate.FailureKind = ovl_fail_trivial_conversion; 7630 return; 7631 } 7632 7633 // To determine what the conversion from the result of calling the 7634 // conversion function to the type we're eventually trying to 7635 // convert to (ToType), we need to synthesize a call to the 7636 // conversion function and attempt copy initialization from it. This 7637 // makes sure that we get the right semantics with respect to 7638 // lvalues/rvalues and the type. Fortunately, we can allocate this 7639 // call on the stack and we don't need its arguments to be 7640 // well-formed. 7641 DeclRefExpr ConversionRef(Context, Conversion, false, Conversion->getType(), 7642 VK_LValue, From->getBeginLoc()); 7643 ImplicitCastExpr ConversionFn(ImplicitCastExpr::OnStack, 7644 Context.getPointerType(Conversion->getType()), 7645 CK_FunctionToPointerDecay, &ConversionRef, 7646 VK_PRValue, FPOptionsOverride()); 7647 7648 QualType ConversionType = Conversion->getConversionType(); 7649 if (!isCompleteType(From->getBeginLoc(), ConversionType)) { 7650 Candidate.Viable = false; 7651 Candidate.FailureKind = ovl_fail_bad_final_conversion; 7652 return; 7653 } 7654 7655 ExprValueKind VK = Expr::getValueKindForType(ConversionType); 7656 7657 // Note that it is safe to allocate CallExpr on the stack here because 7658 // there are 0 arguments (i.e., nothing is allocated using ASTContext's 7659 // allocator). 7660 QualType CallResultType = ConversionType.getNonLValueExprType(Context); 7661 7662 alignas(CallExpr) char Buffer[sizeof(CallExpr) + sizeof(Stmt *)]; 7663 CallExpr *TheTemporaryCall = CallExpr::CreateTemporary( 7664 Buffer, &ConversionFn, CallResultType, VK, From->getBeginLoc()); 7665 7666 ImplicitConversionSequence ICS = 7667 TryCopyInitialization(*this, TheTemporaryCall, ToType, 7668 /*SuppressUserConversions=*/true, 7669 /*InOverloadResolution=*/false, 7670 /*AllowObjCWritebackConversion=*/false); 7671 7672 switch (ICS.getKind()) { 7673 case ImplicitConversionSequence::StandardConversion: 7674 Candidate.FinalConversion = ICS.Standard; 7675 7676 // C++ [over.ics.user]p3: 7677 // If the user-defined conversion is specified by a specialization of a 7678 // conversion function template, the second standard conversion sequence 7679 // shall have exact match rank. 7680 if (Conversion->getPrimaryTemplate() && 7681 GetConversionRank(ICS.Standard.Second) != ICR_Exact_Match) { 7682 Candidate.Viable = false; 7683 Candidate.FailureKind = ovl_fail_final_conversion_not_exact; 7684 return; 7685 } 7686 7687 // C++0x [dcl.init.ref]p5: 7688 // In the second case, if the reference is an rvalue reference and 7689 // the second standard conversion sequence of the user-defined 7690 // conversion sequence includes an lvalue-to-rvalue conversion, the 7691 // program is ill-formed. 7692 if (ToType->isRValueReferenceType() && 7693 ICS.Standard.First == ICK_Lvalue_To_Rvalue) { 7694 Candidate.Viable = false; 7695 Candidate.FailureKind = ovl_fail_bad_final_conversion; 7696 return; 7697 } 7698 break; 7699 7700 case ImplicitConversionSequence::BadConversion: 7701 Candidate.Viable = false; 7702 Candidate.FailureKind = ovl_fail_bad_final_conversion; 7703 return; 7704 7705 default: 7706 llvm_unreachable( 7707 "Can only end up with a standard conversion sequence or failure"); 7708 } 7709 7710 if (EnableIfAttr *FailedAttr = 7711 CheckEnableIf(Conversion, CandidateSet.getLocation(), std::nullopt)) { 7712 Candidate.Viable = false; 7713 Candidate.FailureKind = ovl_fail_enable_if; 7714 Candidate.DeductionFailure.Data = FailedAttr; 7715 return; 7716 } 7717 7718 if (Conversion->isMultiVersion() && 7719 ((Conversion->hasAttr<TargetAttr>() && 7720 !Conversion->getAttr<TargetAttr>()->isDefaultVersion()) || 7721 (Conversion->hasAttr<TargetVersionAttr>() && 7722 !Conversion->getAttr<TargetVersionAttr>()->isDefaultVersion()))) { 7723 Candidate.Viable = false; 7724 Candidate.FailureKind = ovl_non_default_multiversion_function; 7725 } 7726 } 7727 7728 /// Adds a conversion function template specialization 7729 /// candidate to the overload set, using template argument deduction 7730 /// to deduce the template arguments of the conversion function 7731 /// template from the type that we are converting to (C++ 7732 /// [temp.deduct.conv]). 7733 void Sema::AddTemplateConversionCandidate( 7734 FunctionTemplateDecl *FunctionTemplate, DeclAccessPair FoundDecl, 7735 CXXRecordDecl *ActingDC, Expr *From, QualType ToType, 7736 OverloadCandidateSet &CandidateSet, bool AllowObjCConversionOnExplicit, 7737 bool AllowExplicit, bool AllowResultConversion) { 7738 assert(isa<CXXConversionDecl>(FunctionTemplate->getTemplatedDecl()) && 7739 "Only conversion function templates permitted here"); 7740 7741 if (!CandidateSet.isNewCandidate(FunctionTemplate)) 7742 return; 7743 7744 // If the function template has a non-dependent explicit specification, 7745 // exclude it now if appropriate; we are not permitted to perform deduction 7746 // and substitution in this case. 7747 if (!AllowExplicit && isNonDependentlyExplicit(FunctionTemplate)) { 7748 OverloadCandidate &Candidate = CandidateSet.addCandidate(); 7749 Candidate.FoundDecl = FoundDecl; 7750 Candidate.Function = FunctionTemplate->getTemplatedDecl(); 7751 Candidate.Viable = false; 7752 Candidate.FailureKind = ovl_fail_explicit; 7753 return; 7754 } 7755 7756 TemplateDeductionInfo Info(CandidateSet.getLocation()); 7757 CXXConversionDecl *Specialization = nullptr; 7758 if (TemplateDeductionResult Result 7759 = DeduceTemplateArguments(FunctionTemplate, ToType, 7760 Specialization, Info)) { 7761 OverloadCandidate &Candidate = CandidateSet.addCandidate(); 7762 Candidate.FoundDecl = FoundDecl; 7763 Candidate.Function = FunctionTemplate->getTemplatedDecl(); 7764 Candidate.Viable = false; 7765 Candidate.FailureKind = ovl_fail_bad_deduction; 7766 Candidate.IsSurrogate = false; 7767 Candidate.IgnoreObjectArgument = false; 7768 Candidate.ExplicitCallArguments = 1; 7769 Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result, 7770 Info); 7771 return; 7772 } 7773 7774 // Add the conversion function template specialization produced by 7775 // template argument deduction as a candidate. 7776 assert(Specialization && "Missing function template specialization?"); 7777 AddConversionCandidate(Specialization, FoundDecl, ActingDC, From, ToType, 7778 CandidateSet, AllowObjCConversionOnExplicit, 7779 AllowExplicit, AllowResultConversion); 7780 } 7781 7782 /// AddSurrogateCandidate - Adds a "surrogate" candidate function that 7783 /// converts the given @c Object to a function pointer via the 7784 /// conversion function @c Conversion, and then attempts to call it 7785 /// with the given arguments (C++ [over.call.object]p2-4). Proto is 7786 /// the type of function that we'll eventually be calling. 7787 void Sema::AddSurrogateCandidate(CXXConversionDecl *Conversion, 7788 DeclAccessPair FoundDecl, 7789 CXXRecordDecl *ActingContext, 7790 const FunctionProtoType *Proto, 7791 Expr *Object, 7792 ArrayRef<Expr *> Args, 7793 OverloadCandidateSet& CandidateSet) { 7794 if (!CandidateSet.isNewCandidate(Conversion)) 7795 return; 7796 7797 // Overload resolution is always an unevaluated context. 7798 EnterExpressionEvaluationContext Unevaluated( 7799 *this, Sema::ExpressionEvaluationContext::Unevaluated); 7800 7801 OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size() + 1); 7802 Candidate.FoundDecl = FoundDecl; 7803 Candidate.Function = nullptr; 7804 Candidate.Surrogate = Conversion; 7805 Candidate.Viable = true; 7806 Candidate.IsSurrogate = true; 7807 Candidate.IgnoreObjectArgument = false; 7808 Candidate.ExplicitCallArguments = Args.size(); 7809 7810 // Determine the implicit conversion sequence for the implicit 7811 // object parameter. 7812 ImplicitConversionSequence ObjectInit = TryObjectArgumentInitialization( 7813 *this, CandidateSet.getLocation(), Object->getType(), 7814 Object->Classify(Context), Conversion, ActingContext); 7815 if (ObjectInit.isBad()) { 7816 Candidate.Viable = false; 7817 Candidate.FailureKind = ovl_fail_bad_conversion; 7818 Candidate.Conversions[0] = ObjectInit; 7819 return; 7820 } 7821 7822 // The first conversion is actually a user-defined conversion whose 7823 // first conversion is ObjectInit's standard conversion (which is 7824 // effectively a reference binding). Record it as such. 7825 Candidate.Conversions[0].setUserDefined(); 7826 Candidate.Conversions[0].UserDefined.Before = ObjectInit.Standard; 7827 Candidate.Conversions[0].UserDefined.EllipsisConversion = false; 7828 Candidate.Conversions[0].UserDefined.HadMultipleCandidates = false; 7829 Candidate.Conversions[0].UserDefined.ConversionFunction = Conversion; 7830 Candidate.Conversions[0].UserDefined.FoundConversionFunction = FoundDecl; 7831 Candidate.Conversions[0].UserDefined.After 7832 = Candidate.Conversions[0].UserDefined.Before; 7833 Candidate.Conversions[0].UserDefined.After.setAsIdentityConversion(); 7834 7835 // Find the 7836 unsigned NumParams = Proto->getNumParams(); 7837 7838 // (C++ 13.3.2p2): A candidate function having fewer than m 7839 // parameters is viable only if it has an ellipsis in its parameter 7840 // list (8.3.5). 7841 if (Args.size() > NumParams && !Proto->isVariadic()) { 7842 Candidate.Viable = false; 7843 Candidate.FailureKind = ovl_fail_too_many_arguments; 7844 return; 7845 } 7846 7847 // Function types don't have any default arguments, so just check if 7848 // we have enough arguments. 7849 if (Args.size() < NumParams) { 7850 // Not enough arguments. 7851 Candidate.Viable = false; 7852 Candidate.FailureKind = ovl_fail_too_few_arguments; 7853 return; 7854 } 7855 7856 // Determine the implicit conversion sequences for each of the 7857 // arguments. 7858 for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) { 7859 if (ArgIdx < NumParams) { 7860 // (C++ 13.3.2p3): for F to be a viable function, there shall 7861 // exist for each argument an implicit conversion sequence 7862 // (13.3.3.1) that converts that argument to the corresponding 7863 // parameter of F. 7864 QualType ParamType = Proto->getParamType(ArgIdx); 7865 Candidate.Conversions[ArgIdx + 1] 7866 = TryCopyInitialization(*this, Args[ArgIdx], ParamType, 7867 /*SuppressUserConversions=*/false, 7868 /*InOverloadResolution=*/false, 7869 /*AllowObjCWritebackConversion=*/ 7870 getLangOpts().ObjCAutoRefCount); 7871 if (Candidate.Conversions[ArgIdx + 1].isBad()) { 7872 Candidate.Viable = false; 7873 Candidate.FailureKind = ovl_fail_bad_conversion; 7874 return; 7875 } 7876 } else { 7877 // (C++ 13.3.2p2): For the purposes of overload resolution, any 7878 // argument for which there is no corresponding parameter is 7879 // considered to ""match the ellipsis" (C+ 13.3.3.1.3). 7880 Candidate.Conversions[ArgIdx + 1].setEllipsis(); 7881 } 7882 } 7883 7884 if (Conversion->getTrailingRequiresClause()) { 7885 ConstraintSatisfaction Satisfaction; 7886 if (CheckFunctionConstraints(Conversion, Satisfaction, /*Loc*/ {}, 7887 /*ForOverloadResolution*/ true) || 7888 !Satisfaction.IsSatisfied) { 7889 Candidate.Viable = false; 7890 Candidate.FailureKind = ovl_fail_constraints_not_satisfied; 7891 return; 7892 } 7893 } 7894 7895 if (EnableIfAttr *FailedAttr = 7896 CheckEnableIf(Conversion, CandidateSet.getLocation(), std::nullopt)) { 7897 Candidate.Viable = false; 7898 Candidate.FailureKind = ovl_fail_enable_if; 7899 Candidate.DeductionFailure.Data = FailedAttr; 7900 return; 7901 } 7902 } 7903 7904 /// Add all of the non-member operator function declarations in the given 7905 /// function set to the overload candidate set. 7906 void Sema::AddNonMemberOperatorCandidates( 7907 const UnresolvedSetImpl &Fns, ArrayRef<Expr *> Args, 7908 OverloadCandidateSet &CandidateSet, 7909 TemplateArgumentListInfo *ExplicitTemplateArgs) { 7910 for (UnresolvedSetIterator F = Fns.begin(), E = Fns.end(); F != E; ++F) { 7911 NamedDecl *D = F.getDecl()->getUnderlyingDecl(); 7912 ArrayRef<Expr *> FunctionArgs = Args; 7913 7914 FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(D); 7915 FunctionDecl *FD = 7916 FunTmpl ? FunTmpl->getTemplatedDecl() : cast<FunctionDecl>(D); 7917 7918 // Don't consider rewritten functions if we're not rewriting. 7919 if (!CandidateSet.getRewriteInfo().isAcceptableCandidate(FD)) 7920 continue; 7921 7922 assert(!isa<CXXMethodDecl>(FD) && 7923 "unqualified operator lookup found a member function"); 7924 7925 if (FunTmpl) { 7926 AddTemplateOverloadCandidate(FunTmpl, F.getPair(), ExplicitTemplateArgs, 7927 FunctionArgs, CandidateSet); 7928 if (CandidateSet.getRewriteInfo().shouldAddReversed(*this, Args, FD)) 7929 AddTemplateOverloadCandidate( 7930 FunTmpl, F.getPair(), ExplicitTemplateArgs, 7931 {FunctionArgs[1], FunctionArgs[0]}, CandidateSet, false, false, 7932 true, ADLCallKind::NotADL, OverloadCandidateParamOrder::Reversed); 7933 } else { 7934 if (ExplicitTemplateArgs) 7935 continue; 7936 AddOverloadCandidate(FD, F.getPair(), FunctionArgs, CandidateSet); 7937 if (CandidateSet.getRewriteInfo().shouldAddReversed(*this, Args, FD)) 7938 AddOverloadCandidate( 7939 FD, F.getPair(), {FunctionArgs[1], FunctionArgs[0]}, CandidateSet, 7940 false, false, true, false, ADLCallKind::NotADL, std::nullopt, 7941 OverloadCandidateParamOrder::Reversed); 7942 } 7943 } 7944 } 7945 7946 /// Add overload candidates for overloaded operators that are 7947 /// member functions. 7948 /// 7949 /// Add the overloaded operator candidates that are member functions 7950 /// for the operator Op that was used in an operator expression such 7951 /// as "x Op y". , Args/NumArgs provides the operator arguments, and 7952 /// CandidateSet will store the added overload candidates. (C++ 7953 /// [over.match.oper]). 7954 void Sema::AddMemberOperatorCandidates(OverloadedOperatorKind Op, 7955 SourceLocation OpLoc, 7956 ArrayRef<Expr *> Args, 7957 OverloadCandidateSet &CandidateSet, 7958 OverloadCandidateParamOrder PO) { 7959 DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op); 7960 7961 // C++ [over.match.oper]p3: 7962 // For a unary operator @ with an operand of a type whose 7963 // cv-unqualified version is T1, and for a binary operator @ with 7964 // a left operand of a type whose cv-unqualified version is T1 and 7965 // a right operand of a type whose cv-unqualified version is T2, 7966 // three sets of candidate functions, designated member 7967 // candidates, non-member candidates and built-in candidates, are 7968 // constructed as follows: 7969 QualType T1 = Args[0]->getType(); 7970 7971 // -- If T1 is a complete class type or a class currently being 7972 // defined, the set of member candidates is the result of the 7973 // qualified lookup of T1::operator@ (13.3.1.1.1); otherwise, 7974 // the set of member candidates is empty. 7975 if (const RecordType *T1Rec = T1->getAs<RecordType>()) { 7976 // Complete the type if it can be completed. 7977 if (!isCompleteType(OpLoc, T1) && !T1Rec->isBeingDefined()) 7978 return; 7979 // If the type is neither complete nor being defined, bail out now. 7980 if (!T1Rec->getDecl()->getDefinition()) 7981 return; 7982 7983 LookupResult Operators(*this, OpName, OpLoc, LookupOrdinaryName); 7984 LookupQualifiedName(Operators, T1Rec->getDecl()); 7985 Operators.suppressDiagnostics(); 7986 7987 for (LookupResult::iterator Oper = Operators.begin(), 7988 OperEnd = Operators.end(); 7989 Oper != OperEnd; ++Oper) { 7990 if (Oper->getAsFunction() && 7991 PO == OverloadCandidateParamOrder::Reversed && 7992 !CandidateSet.getRewriteInfo().shouldAddReversed( 7993 *this, {Args[1], Args[0]}, Oper->getAsFunction())) 7994 continue; 7995 AddMethodCandidate(Oper.getPair(), Args[0]->getType(), 7996 Args[0]->Classify(Context), Args.slice(1), 7997 CandidateSet, /*SuppressUserConversion=*/false, PO); 7998 } 7999 } 8000 } 8001 8002 /// AddBuiltinCandidate - Add a candidate for a built-in 8003 /// operator. ResultTy and ParamTys are the result and parameter types 8004 /// of the built-in candidate, respectively. Args and NumArgs are the 8005 /// arguments being passed to the candidate. IsAssignmentOperator 8006 /// should be true when this built-in candidate is an assignment 8007 /// operator. NumContextualBoolArguments is the number of arguments 8008 /// (at the beginning of the argument list) that will be contextually 8009 /// converted to bool. 8010 void Sema::AddBuiltinCandidate(QualType *ParamTys, ArrayRef<Expr *> Args, 8011 OverloadCandidateSet& CandidateSet, 8012 bool IsAssignmentOperator, 8013 unsigned NumContextualBoolArguments) { 8014 // Overload resolution is always an unevaluated context. 8015 EnterExpressionEvaluationContext Unevaluated( 8016 *this, Sema::ExpressionEvaluationContext::Unevaluated); 8017 8018 // Add this candidate 8019 OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size()); 8020 Candidate.FoundDecl = DeclAccessPair::make(nullptr, AS_none); 8021 Candidate.Function = nullptr; 8022 Candidate.IsSurrogate = false; 8023 Candidate.IgnoreObjectArgument = false; 8024 std::copy(ParamTys, ParamTys + Args.size(), Candidate.BuiltinParamTypes); 8025 8026 // Determine the implicit conversion sequences for each of the 8027 // arguments. 8028 Candidate.Viable = true; 8029 Candidate.ExplicitCallArguments = Args.size(); 8030 for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) { 8031 // C++ [over.match.oper]p4: 8032 // For the built-in assignment operators, conversions of the 8033 // left operand are restricted as follows: 8034 // -- no temporaries are introduced to hold the left operand, and 8035 // -- no user-defined conversions are applied to the left 8036 // operand to achieve a type match with the left-most 8037 // parameter of a built-in candidate. 8038 // 8039 // We block these conversions by turning off user-defined 8040 // conversions, since that is the only way that initialization of 8041 // a reference to a non-class type can occur from something that 8042 // is not of the same type. 8043 if (ArgIdx < NumContextualBoolArguments) { 8044 assert(ParamTys[ArgIdx] == Context.BoolTy && 8045 "Contextual conversion to bool requires bool type"); 8046 Candidate.Conversions[ArgIdx] 8047 = TryContextuallyConvertToBool(*this, Args[ArgIdx]); 8048 } else { 8049 Candidate.Conversions[ArgIdx] 8050 = TryCopyInitialization(*this, Args[ArgIdx], ParamTys[ArgIdx], 8051 ArgIdx == 0 && IsAssignmentOperator, 8052 /*InOverloadResolution=*/false, 8053 /*AllowObjCWritebackConversion=*/ 8054 getLangOpts().ObjCAutoRefCount); 8055 } 8056 if (Candidate.Conversions[ArgIdx].isBad()) { 8057 Candidate.Viable = false; 8058 Candidate.FailureKind = ovl_fail_bad_conversion; 8059 break; 8060 } 8061 } 8062 } 8063 8064 namespace { 8065 8066 /// BuiltinCandidateTypeSet - A set of types that will be used for the 8067 /// candidate operator functions for built-in operators (C++ 8068 /// [over.built]). The types are separated into pointer types and 8069 /// enumeration types. 8070 class BuiltinCandidateTypeSet { 8071 /// TypeSet - A set of types. 8072 typedef llvm::SmallSetVector<QualType, 8> TypeSet; 8073 8074 /// PointerTypes - The set of pointer types that will be used in the 8075 /// built-in candidates. 8076 TypeSet PointerTypes; 8077 8078 /// MemberPointerTypes - The set of member pointer types that will be 8079 /// used in the built-in candidates. 8080 TypeSet MemberPointerTypes; 8081 8082 /// EnumerationTypes - The set of enumeration types that will be 8083 /// used in the built-in candidates. 8084 TypeSet EnumerationTypes; 8085 8086 /// The set of vector types that will be used in the built-in 8087 /// candidates. 8088 TypeSet VectorTypes; 8089 8090 /// The set of matrix types that will be used in the built-in 8091 /// candidates. 8092 TypeSet MatrixTypes; 8093 8094 /// A flag indicating non-record types are viable candidates 8095 bool HasNonRecordTypes; 8096 8097 /// A flag indicating whether either arithmetic or enumeration types 8098 /// were present in the candidate set. 8099 bool HasArithmeticOrEnumeralTypes; 8100 8101 /// A flag indicating whether the nullptr type was present in the 8102 /// candidate set. 8103 bool HasNullPtrType; 8104 8105 /// Sema - The semantic analysis instance where we are building the 8106 /// candidate type set. 8107 Sema &SemaRef; 8108 8109 /// Context - The AST context in which we will build the type sets. 8110 ASTContext &Context; 8111 8112 bool AddPointerWithMoreQualifiedTypeVariants(QualType Ty, 8113 const Qualifiers &VisibleQuals); 8114 bool AddMemberPointerWithMoreQualifiedTypeVariants(QualType Ty); 8115 8116 public: 8117 /// iterator - Iterates through the types that are part of the set. 8118 typedef TypeSet::iterator iterator; 8119 8120 BuiltinCandidateTypeSet(Sema &SemaRef) 8121 : HasNonRecordTypes(false), 8122 HasArithmeticOrEnumeralTypes(false), 8123 HasNullPtrType(false), 8124 SemaRef(SemaRef), 8125 Context(SemaRef.Context) { } 8126 8127 void AddTypesConvertedFrom(QualType Ty, 8128 SourceLocation Loc, 8129 bool AllowUserConversions, 8130 bool AllowExplicitConversions, 8131 const Qualifiers &VisibleTypeConversionsQuals); 8132 8133 llvm::iterator_range<iterator> pointer_types() { return PointerTypes; } 8134 llvm::iterator_range<iterator> member_pointer_types() { 8135 return MemberPointerTypes; 8136 } 8137 llvm::iterator_range<iterator> enumeration_types() { 8138 return EnumerationTypes; 8139 } 8140 llvm::iterator_range<iterator> vector_types() { return VectorTypes; } 8141 llvm::iterator_range<iterator> matrix_types() { return MatrixTypes; } 8142 8143 bool containsMatrixType(QualType Ty) const { return MatrixTypes.count(Ty); } 8144 bool hasNonRecordTypes() { return HasNonRecordTypes; } 8145 bool hasArithmeticOrEnumeralTypes() { return HasArithmeticOrEnumeralTypes; } 8146 bool hasNullPtrType() const { return HasNullPtrType; } 8147 }; 8148 8149 } // end anonymous namespace 8150 8151 /// AddPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty to 8152 /// the set of pointer types along with any more-qualified variants of 8153 /// that type. For example, if @p Ty is "int const *", this routine 8154 /// will add "int const *", "int const volatile *", "int const 8155 /// restrict *", and "int const volatile restrict *" to the set of 8156 /// pointer types. Returns true if the add of @p Ty itself succeeded, 8157 /// false otherwise. 8158 /// 8159 /// FIXME: what to do about extended qualifiers? 8160 bool 8161 BuiltinCandidateTypeSet::AddPointerWithMoreQualifiedTypeVariants(QualType Ty, 8162 const Qualifiers &VisibleQuals) { 8163 8164 // Insert this type. 8165 if (!PointerTypes.insert(Ty)) 8166 return false; 8167 8168 QualType PointeeTy; 8169 const PointerType *PointerTy = Ty->getAs<PointerType>(); 8170 bool buildObjCPtr = false; 8171 if (!PointerTy) { 8172 const ObjCObjectPointerType *PTy = Ty->castAs<ObjCObjectPointerType>(); 8173 PointeeTy = PTy->getPointeeType(); 8174 buildObjCPtr = true; 8175 } else { 8176 PointeeTy = PointerTy->getPointeeType(); 8177 } 8178 8179 // Don't add qualified variants of arrays. For one, they're not allowed 8180 // (the qualifier would sink to the element type), and for another, the 8181 // only overload situation where it matters is subscript or pointer +- int, 8182 // and those shouldn't have qualifier variants anyway. 8183 if (PointeeTy->isArrayType()) 8184 return true; 8185 8186 unsigned BaseCVR = PointeeTy.getCVRQualifiers(); 8187 bool hasVolatile = VisibleQuals.hasVolatile(); 8188 bool hasRestrict = VisibleQuals.hasRestrict(); 8189 8190 // Iterate through all strict supersets of BaseCVR. 8191 for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) { 8192 if ((CVR | BaseCVR) != CVR) continue; 8193 // Skip over volatile if no volatile found anywhere in the types. 8194 if ((CVR & Qualifiers::Volatile) && !hasVolatile) continue; 8195 8196 // Skip over restrict if no restrict found anywhere in the types, or if 8197 // the type cannot be restrict-qualified. 8198 if ((CVR & Qualifiers::Restrict) && 8199 (!hasRestrict || 8200 (!(PointeeTy->isAnyPointerType() || PointeeTy->isReferenceType())))) 8201 continue; 8202 8203 // Build qualified pointee type. 8204 QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR); 8205 8206 // Build qualified pointer type. 8207 QualType QPointerTy; 8208 if (!buildObjCPtr) 8209 QPointerTy = Context.getPointerType(QPointeeTy); 8210 else 8211 QPointerTy = Context.getObjCObjectPointerType(QPointeeTy); 8212 8213 // Insert qualified pointer type. 8214 PointerTypes.insert(QPointerTy); 8215 } 8216 8217 return true; 8218 } 8219 8220 /// AddMemberPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty 8221 /// to the set of pointer types along with any more-qualified variants of 8222 /// that type. For example, if @p Ty is "int const *", this routine 8223 /// will add "int const *", "int const volatile *", "int const 8224 /// restrict *", and "int const volatile restrict *" to the set of 8225 /// pointer types. Returns true if the add of @p Ty itself succeeded, 8226 /// false otherwise. 8227 /// 8228 /// FIXME: what to do about extended qualifiers? 8229 bool 8230 BuiltinCandidateTypeSet::AddMemberPointerWithMoreQualifiedTypeVariants( 8231 QualType Ty) { 8232 // Insert this type. 8233 if (!MemberPointerTypes.insert(Ty)) 8234 return false; 8235 8236 const MemberPointerType *PointerTy = Ty->getAs<MemberPointerType>(); 8237 assert(PointerTy && "type was not a member pointer type!"); 8238 8239 QualType PointeeTy = PointerTy->getPointeeType(); 8240 // Don't add qualified variants of arrays. For one, they're not allowed 8241 // (the qualifier would sink to the element type), and for another, the 8242 // only overload situation where it matters is subscript or pointer +- int, 8243 // and those shouldn't have qualifier variants anyway. 8244 if (PointeeTy->isArrayType()) 8245 return true; 8246 const Type *ClassTy = PointerTy->getClass(); 8247 8248 // Iterate through all strict supersets of the pointee type's CVR 8249 // qualifiers. 8250 unsigned BaseCVR = PointeeTy.getCVRQualifiers(); 8251 for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) { 8252 if ((CVR | BaseCVR) != CVR) continue; 8253 8254 QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR); 8255 MemberPointerTypes.insert( 8256 Context.getMemberPointerType(QPointeeTy, ClassTy)); 8257 } 8258 8259 return true; 8260 } 8261 8262 /// AddTypesConvertedFrom - Add each of the types to which the type @p 8263 /// Ty can be implicit converted to the given set of @p Types. We're 8264 /// primarily interested in pointer types and enumeration types. We also 8265 /// take member pointer types, for the conditional operator. 8266 /// AllowUserConversions is true if we should look at the conversion 8267 /// functions of a class type, and AllowExplicitConversions if we 8268 /// should also include the explicit conversion functions of a class 8269 /// type. 8270 void 8271 BuiltinCandidateTypeSet::AddTypesConvertedFrom(QualType Ty, 8272 SourceLocation Loc, 8273 bool AllowUserConversions, 8274 bool AllowExplicitConversions, 8275 const Qualifiers &VisibleQuals) { 8276 // Only deal with canonical types. 8277 Ty = Context.getCanonicalType(Ty); 8278 8279 // Look through reference types; they aren't part of the type of an 8280 // expression for the purposes of conversions. 8281 if (const ReferenceType *RefTy = Ty->getAs<ReferenceType>()) 8282 Ty = RefTy->getPointeeType(); 8283 8284 // If we're dealing with an array type, decay to the pointer. 8285 if (Ty->isArrayType()) 8286 Ty = SemaRef.Context.getArrayDecayedType(Ty); 8287 8288 // Otherwise, we don't care about qualifiers on the type. 8289 Ty = Ty.getLocalUnqualifiedType(); 8290 8291 // Flag if we ever add a non-record type. 8292 const RecordType *TyRec = Ty->getAs<RecordType>(); 8293 HasNonRecordTypes = HasNonRecordTypes || !TyRec; 8294 8295 // Flag if we encounter an arithmetic type. 8296 HasArithmeticOrEnumeralTypes = 8297 HasArithmeticOrEnumeralTypes || Ty->isArithmeticType(); 8298 8299 if (Ty->isObjCIdType() || Ty->isObjCClassType()) 8300 PointerTypes.insert(Ty); 8301 else if (Ty->getAs<PointerType>() || Ty->getAs<ObjCObjectPointerType>()) { 8302 // Insert our type, and its more-qualified variants, into the set 8303 // of types. 8304 if (!AddPointerWithMoreQualifiedTypeVariants(Ty, VisibleQuals)) 8305 return; 8306 } else if (Ty->isMemberPointerType()) { 8307 // Member pointers are far easier, since the pointee can't be converted. 8308 if (!AddMemberPointerWithMoreQualifiedTypeVariants(Ty)) 8309 return; 8310 } else if (Ty->isEnumeralType()) { 8311 HasArithmeticOrEnumeralTypes = true; 8312 EnumerationTypes.insert(Ty); 8313 } else if (Ty->isVectorType()) { 8314 // We treat vector types as arithmetic types in many contexts as an 8315 // extension. 8316 HasArithmeticOrEnumeralTypes = true; 8317 VectorTypes.insert(Ty); 8318 } else if (Ty->isMatrixType()) { 8319 // Similar to vector types, we treat vector types as arithmetic types in 8320 // many contexts as an extension. 8321 HasArithmeticOrEnumeralTypes = true; 8322 MatrixTypes.insert(Ty); 8323 } else if (Ty->isNullPtrType()) { 8324 HasNullPtrType = true; 8325 } else if (AllowUserConversions && TyRec) { 8326 // No conversion functions in incomplete types. 8327 if (!SemaRef.isCompleteType(Loc, Ty)) 8328 return; 8329 8330 CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl()); 8331 for (NamedDecl *D : ClassDecl->getVisibleConversionFunctions()) { 8332 if (isa<UsingShadowDecl>(D)) 8333 D = cast<UsingShadowDecl>(D)->getTargetDecl(); 8334 8335 // Skip conversion function templates; they don't tell us anything 8336 // about which builtin types we can convert to. 8337 if (isa<FunctionTemplateDecl>(D)) 8338 continue; 8339 8340 CXXConversionDecl *Conv = cast<CXXConversionDecl>(D); 8341 if (AllowExplicitConversions || !Conv->isExplicit()) { 8342 AddTypesConvertedFrom(Conv->getConversionType(), Loc, false, false, 8343 VisibleQuals); 8344 } 8345 } 8346 } 8347 } 8348 /// Helper function for adjusting address spaces for the pointer or reference 8349 /// operands of builtin operators depending on the argument. 8350 static QualType AdjustAddressSpaceForBuiltinOperandType(Sema &S, QualType T, 8351 Expr *Arg) { 8352 return S.Context.getAddrSpaceQualType(T, Arg->getType().getAddressSpace()); 8353 } 8354 8355 /// Helper function for AddBuiltinOperatorCandidates() that adds 8356 /// the volatile- and non-volatile-qualified assignment operators for the 8357 /// given type to the candidate set. 8358 static void AddBuiltinAssignmentOperatorCandidates(Sema &S, 8359 QualType T, 8360 ArrayRef<Expr *> Args, 8361 OverloadCandidateSet &CandidateSet) { 8362 QualType ParamTypes[2]; 8363 8364 // T& operator=(T&, T) 8365 ParamTypes[0] = S.Context.getLValueReferenceType( 8366 AdjustAddressSpaceForBuiltinOperandType(S, T, Args[0])); 8367 ParamTypes[1] = T; 8368 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet, 8369 /*IsAssignmentOperator=*/true); 8370 8371 if (!S.Context.getCanonicalType(T).isVolatileQualified()) { 8372 // volatile T& operator=(volatile T&, T) 8373 ParamTypes[0] = S.Context.getLValueReferenceType( 8374 AdjustAddressSpaceForBuiltinOperandType(S, S.Context.getVolatileType(T), 8375 Args[0])); 8376 ParamTypes[1] = T; 8377 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet, 8378 /*IsAssignmentOperator=*/true); 8379 } 8380 } 8381 8382 /// CollectVRQualifiers - This routine returns Volatile/Restrict qualifiers, 8383 /// if any, found in visible type conversion functions found in ArgExpr's type. 8384 static Qualifiers CollectVRQualifiers(ASTContext &Context, Expr* ArgExpr) { 8385 Qualifiers VRQuals; 8386 const RecordType *TyRec; 8387 if (const MemberPointerType *RHSMPType = 8388 ArgExpr->getType()->getAs<MemberPointerType>()) 8389 TyRec = RHSMPType->getClass()->getAs<RecordType>(); 8390 else 8391 TyRec = ArgExpr->getType()->getAs<RecordType>(); 8392 if (!TyRec) { 8393 // Just to be safe, assume the worst case. 8394 VRQuals.addVolatile(); 8395 VRQuals.addRestrict(); 8396 return VRQuals; 8397 } 8398 8399 CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl()); 8400 if (!ClassDecl->hasDefinition()) 8401 return VRQuals; 8402 8403 for (NamedDecl *D : ClassDecl->getVisibleConversionFunctions()) { 8404 if (isa<UsingShadowDecl>(D)) 8405 D = cast<UsingShadowDecl>(D)->getTargetDecl(); 8406 if (CXXConversionDecl *Conv = dyn_cast<CXXConversionDecl>(D)) { 8407 QualType CanTy = Context.getCanonicalType(Conv->getConversionType()); 8408 if (const ReferenceType *ResTypeRef = CanTy->getAs<ReferenceType>()) 8409 CanTy = ResTypeRef->getPointeeType(); 8410 // Need to go down the pointer/mempointer chain and add qualifiers 8411 // as see them. 8412 bool done = false; 8413 while (!done) { 8414 if (CanTy.isRestrictQualified()) 8415 VRQuals.addRestrict(); 8416 if (const PointerType *ResTypePtr = CanTy->getAs<PointerType>()) 8417 CanTy = ResTypePtr->getPointeeType(); 8418 else if (const MemberPointerType *ResTypeMPtr = 8419 CanTy->getAs<MemberPointerType>()) 8420 CanTy = ResTypeMPtr->getPointeeType(); 8421 else 8422 done = true; 8423 if (CanTy.isVolatileQualified()) 8424 VRQuals.addVolatile(); 8425 if (VRQuals.hasRestrict() && VRQuals.hasVolatile()) 8426 return VRQuals; 8427 } 8428 } 8429 } 8430 return VRQuals; 8431 } 8432 8433 // Note: We're currently only handling qualifiers that are meaningful for the 8434 // LHS of compound assignment overloading. 8435 static void forAllQualifierCombinationsImpl( 8436 QualifiersAndAtomic Available, QualifiersAndAtomic Applied, 8437 llvm::function_ref<void(QualifiersAndAtomic)> Callback) { 8438 // _Atomic 8439 if (Available.hasAtomic()) { 8440 Available.removeAtomic(); 8441 forAllQualifierCombinationsImpl(Available, Applied.withAtomic(), Callback); 8442 forAllQualifierCombinationsImpl(Available, Applied, Callback); 8443 return; 8444 } 8445 8446 // volatile 8447 if (Available.hasVolatile()) { 8448 Available.removeVolatile(); 8449 assert(!Applied.hasVolatile()); 8450 forAllQualifierCombinationsImpl(Available, Applied.withVolatile(), 8451 Callback); 8452 forAllQualifierCombinationsImpl(Available, Applied, Callback); 8453 return; 8454 } 8455 8456 Callback(Applied); 8457 } 8458 8459 static void forAllQualifierCombinations( 8460 QualifiersAndAtomic Quals, 8461 llvm::function_ref<void(QualifiersAndAtomic)> Callback) { 8462 return forAllQualifierCombinationsImpl(Quals, QualifiersAndAtomic(), 8463 Callback); 8464 } 8465 8466 static QualType makeQualifiedLValueReferenceType(QualType Base, 8467 QualifiersAndAtomic Quals, 8468 Sema &S) { 8469 if (Quals.hasAtomic()) 8470 Base = S.Context.getAtomicType(Base); 8471 if (Quals.hasVolatile()) 8472 Base = S.Context.getVolatileType(Base); 8473 return S.Context.getLValueReferenceType(Base); 8474 } 8475 8476 namespace { 8477 8478 /// Helper class to manage the addition of builtin operator overload 8479 /// candidates. It provides shared state and utility methods used throughout 8480 /// the process, as well as a helper method to add each group of builtin 8481 /// operator overloads from the standard to a candidate set. 8482 class BuiltinOperatorOverloadBuilder { 8483 // Common instance state available to all overload candidate addition methods. 8484 Sema &S; 8485 ArrayRef<Expr *> Args; 8486 QualifiersAndAtomic VisibleTypeConversionsQuals; 8487 bool HasArithmeticOrEnumeralCandidateType; 8488 SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes; 8489 OverloadCandidateSet &CandidateSet; 8490 8491 static constexpr int ArithmeticTypesCap = 24; 8492 SmallVector<CanQualType, ArithmeticTypesCap> ArithmeticTypes; 8493 8494 // Define some indices used to iterate over the arithmetic types in 8495 // ArithmeticTypes. The "promoted arithmetic types" are the arithmetic 8496 // types are that preserved by promotion (C++ [over.built]p2). 8497 unsigned FirstIntegralType, 8498 LastIntegralType; 8499 unsigned FirstPromotedIntegralType, 8500 LastPromotedIntegralType; 8501 unsigned FirstPromotedArithmeticType, 8502 LastPromotedArithmeticType; 8503 unsigned NumArithmeticTypes; 8504 8505 void InitArithmeticTypes() { 8506 // Start of promoted types. 8507 FirstPromotedArithmeticType = 0; 8508 ArithmeticTypes.push_back(S.Context.FloatTy); 8509 ArithmeticTypes.push_back(S.Context.DoubleTy); 8510 ArithmeticTypes.push_back(S.Context.LongDoubleTy); 8511 if (S.Context.getTargetInfo().hasFloat128Type()) 8512 ArithmeticTypes.push_back(S.Context.Float128Ty); 8513 if (S.Context.getTargetInfo().hasIbm128Type()) 8514 ArithmeticTypes.push_back(S.Context.Ibm128Ty); 8515 8516 // Start of integral types. 8517 FirstIntegralType = ArithmeticTypes.size(); 8518 FirstPromotedIntegralType = ArithmeticTypes.size(); 8519 ArithmeticTypes.push_back(S.Context.IntTy); 8520 ArithmeticTypes.push_back(S.Context.LongTy); 8521 ArithmeticTypes.push_back(S.Context.LongLongTy); 8522 if (S.Context.getTargetInfo().hasInt128Type() || 8523 (S.Context.getAuxTargetInfo() && 8524 S.Context.getAuxTargetInfo()->hasInt128Type())) 8525 ArithmeticTypes.push_back(S.Context.Int128Ty); 8526 ArithmeticTypes.push_back(S.Context.UnsignedIntTy); 8527 ArithmeticTypes.push_back(S.Context.UnsignedLongTy); 8528 ArithmeticTypes.push_back(S.Context.UnsignedLongLongTy); 8529 if (S.Context.getTargetInfo().hasInt128Type() || 8530 (S.Context.getAuxTargetInfo() && 8531 S.Context.getAuxTargetInfo()->hasInt128Type())) 8532 ArithmeticTypes.push_back(S.Context.UnsignedInt128Ty); 8533 LastPromotedIntegralType = ArithmeticTypes.size(); 8534 LastPromotedArithmeticType = ArithmeticTypes.size(); 8535 // End of promoted types. 8536 8537 ArithmeticTypes.push_back(S.Context.BoolTy); 8538 ArithmeticTypes.push_back(S.Context.CharTy); 8539 ArithmeticTypes.push_back(S.Context.WCharTy); 8540 if (S.Context.getLangOpts().Char8) 8541 ArithmeticTypes.push_back(S.Context.Char8Ty); 8542 ArithmeticTypes.push_back(S.Context.Char16Ty); 8543 ArithmeticTypes.push_back(S.Context.Char32Ty); 8544 ArithmeticTypes.push_back(S.Context.SignedCharTy); 8545 ArithmeticTypes.push_back(S.Context.ShortTy); 8546 ArithmeticTypes.push_back(S.Context.UnsignedCharTy); 8547 ArithmeticTypes.push_back(S.Context.UnsignedShortTy); 8548 LastIntegralType = ArithmeticTypes.size(); 8549 NumArithmeticTypes = ArithmeticTypes.size(); 8550 // End of integral types. 8551 // FIXME: What about complex? What about half? 8552 8553 assert(ArithmeticTypes.size() <= ArithmeticTypesCap && 8554 "Enough inline storage for all arithmetic types."); 8555 } 8556 8557 /// Helper method to factor out the common pattern of adding overloads 8558 /// for '++' and '--' builtin operators. 8559 void addPlusPlusMinusMinusStyleOverloads(QualType CandidateTy, 8560 bool HasVolatile, 8561 bool HasRestrict) { 8562 QualType ParamTypes[2] = { 8563 S.Context.getLValueReferenceType(CandidateTy), 8564 S.Context.IntTy 8565 }; 8566 8567 // Non-volatile version. 8568 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet); 8569 8570 // Use a heuristic to reduce number of builtin candidates in the set: 8571 // add volatile version only if there are conversions to a volatile type. 8572 if (HasVolatile) { 8573 ParamTypes[0] = 8574 S.Context.getLValueReferenceType( 8575 S.Context.getVolatileType(CandidateTy)); 8576 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet); 8577 } 8578 8579 // Add restrict version only if there are conversions to a restrict type 8580 // and our candidate type is a non-restrict-qualified pointer. 8581 if (HasRestrict && CandidateTy->isAnyPointerType() && 8582 !CandidateTy.isRestrictQualified()) { 8583 ParamTypes[0] 8584 = S.Context.getLValueReferenceType( 8585 S.Context.getCVRQualifiedType(CandidateTy, Qualifiers::Restrict)); 8586 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet); 8587 8588 if (HasVolatile) { 8589 ParamTypes[0] 8590 = S.Context.getLValueReferenceType( 8591 S.Context.getCVRQualifiedType(CandidateTy, 8592 (Qualifiers::Volatile | 8593 Qualifiers::Restrict))); 8594 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet); 8595 } 8596 } 8597 8598 } 8599 8600 /// Helper to add an overload candidate for a binary builtin with types \p L 8601 /// and \p R. 8602 void AddCandidate(QualType L, QualType R) { 8603 QualType LandR[2] = {L, R}; 8604 S.AddBuiltinCandidate(LandR, Args, CandidateSet); 8605 } 8606 8607 public: 8608 BuiltinOperatorOverloadBuilder( 8609 Sema &S, ArrayRef<Expr *> Args, 8610 QualifiersAndAtomic VisibleTypeConversionsQuals, 8611 bool HasArithmeticOrEnumeralCandidateType, 8612 SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes, 8613 OverloadCandidateSet &CandidateSet) 8614 : S(S), Args(Args), 8615 VisibleTypeConversionsQuals(VisibleTypeConversionsQuals), 8616 HasArithmeticOrEnumeralCandidateType( 8617 HasArithmeticOrEnumeralCandidateType), 8618 CandidateTypes(CandidateTypes), 8619 CandidateSet(CandidateSet) { 8620 8621 InitArithmeticTypes(); 8622 } 8623 8624 // Increment is deprecated for bool since C++17. 8625 // 8626 // C++ [over.built]p3: 8627 // 8628 // For every pair (T, VQ), where T is an arithmetic type other 8629 // than bool, and VQ is either volatile or empty, there exist 8630 // candidate operator functions of the form 8631 // 8632 // VQ T& operator++(VQ T&); 8633 // T operator++(VQ T&, int); 8634 // 8635 // C++ [over.built]p4: 8636 // 8637 // For every pair (T, VQ), where T is an arithmetic type other 8638 // than bool, and VQ is either volatile or empty, there exist 8639 // candidate operator functions of the form 8640 // 8641 // VQ T& operator--(VQ T&); 8642 // T operator--(VQ T&, int); 8643 void addPlusPlusMinusMinusArithmeticOverloads(OverloadedOperatorKind Op) { 8644 if (!HasArithmeticOrEnumeralCandidateType) 8645 return; 8646 8647 for (unsigned Arith = 0; Arith < NumArithmeticTypes; ++Arith) { 8648 const auto TypeOfT = ArithmeticTypes[Arith]; 8649 if (TypeOfT == S.Context.BoolTy) { 8650 if (Op == OO_MinusMinus) 8651 continue; 8652 if (Op == OO_PlusPlus && S.getLangOpts().CPlusPlus17) 8653 continue; 8654 } 8655 addPlusPlusMinusMinusStyleOverloads( 8656 TypeOfT, 8657 VisibleTypeConversionsQuals.hasVolatile(), 8658 VisibleTypeConversionsQuals.hasRestrict()); 8659 } 8660 } 8661 8662 // C++ [over.built]p5: 8663 // 8664 // For every pair (T, VQ), where T is a cv-qualified or 8665 // cv-unqualified object type, and VQ is either volatile or 8666 // empty, there exist candidate operator functions of the form 8667 // 8668 // T*VQ& operator++(T*VQ&); 8669 // T*VQ& operator--(T*VQ&); 8670 // T* operator++(T*VQ&, int); 8671 // T* operator--(T*VQ&, int); 8672 void addPlusPlusMinusMinusPointerOverloads() { 8673 for (QualType PtrTy : CandidateTypes[0].pointer_types()) { 8674 // Skip pointer types that aren't pointers to object types. 8675 if (!PtrTy->getPointeeType()->isObjectType()) 8676 continue; 8677 8678 addPlusPlusMinusMinusStyleOverloads( 8679 PtrTy, 8680 (!PtrTy.isVolatileQualified() && 8681 VisibleTypeConversionsQuals.hasVolatile()), 8682 (!PtrTy.isRestrictQualified() && 8683 VisibleTypeConversionsQuals.hasRestrict())); 8684 } 8685 } 8686 8687 // C++ [over.built]p6: 8688 // For every cv-qualified or cv-unqualified object type T, there 8689 // exist candidate operator functions of the form 8690 // 8691 // T& operator*(T*); 8692 // 8693 // C++ [over.built]p7: 8694 // For every function type T that does not have cv-qualifiers or a 8695 // ref-qualifier, there exist candidate operator functions of the form 8696 // T& operator*(T*); 8697 void addUnaryStarPointerOverloads() { 8698 for (QualType ParamTy : CandidateTypes[0].pointer_types()) { 8699 QualType PointeeTy = ParamTy->getPointeeType(); 8700 if (!PointeeTy->isObjectType() && !PointeeTy->isFunctionType()) 8701 continue; 8702 8703 if (const FunctionProtoType *Proto =PointeeTy->getAs<FunctionProtoType>()) 8704 if (Proto->getMethodQuals() || Proto->getRefQualifier()) 8705 continue; 8706 8707 S.AddBuiltinCandidate(&ParamTy, Args, CandidateSet); 8708 } 8709 } 8710 8711 // C++ [over.built]p9: 8712 // For every promoted arithmetic type T, there exist candidate 8713 // operator functions of the form 8714 // 8715 // T operator+(T); 8716 // T operator-(T); 8717 void addUnaryPlusOrMinusArithmeticOverloads() { 8718 if (!HasArithmeticOrEnumeralCandidateType) 8719 return; 8720 8721 for (unsigned Arith = FirstPromotedArithmeticType; 8722 Arith < LastPromotedArithmeticType; ++Arith) { 8723 QualType ArithTy = ArithmeticTypes[Arith]; 8724 S.AddBuiltinCandidate(&ArithTy, Args, CandidateSet); 8725 } 8726 8727 // Extension: We also add these operators for vector types. 8728 for (QualType VecTy : CandidateTypes[0].vector_types()) 8729 S.AddBuiltinCandidate(&VecTy, Args, CandidateSet); 8730 } 8731 8732 // C++ [over.built]p8: 8733 // For every type T, there exist candidate operator functions of 8734 // the form 8735 // 8736 // T* operator+(T*); 8737 void addUnaryPlusPointerOverloads() { 8738 for (QualType ParamTy : CandidateTypes[0].pointer_types()) 8739 S.AddBuiltinCandidate(&ParamTy, Args, CandidateSet); 8740 } 8741 8742 // C++ [over.built]p10: 8743 // For every promoted integral type T, there exist candidate 8744 // operator functions of the form 8745 // 8746 // T operator~(T); 8747 void addUnaryTildePromotedIntegralOverloads() { 8748 if (!HasArithmeticOrEnumeralCandidateType) 8749 return; 8750 8751 for (unsigned Int = FirstPromotedIntegralType; 8752 Int < LastPromotedIntegralType; ++Int) { 8753 QualType IntTy = ArithmeticTypes[Int]; 8754 S.AddBuiltinCandidate(&IntTy, Args, CandidateSet); 8755 } 8756 8757 // Extension: We also add this operator for vector types. 8758 for (QualType VecTy : CandidateTypes[0].vector_types()) 8759 S.AddBuiltinCandidate(&VecTy, Args, CandidateSet); 8760 } 8761 8762 // C++ [over.match.oper]p16: 8763 // For every pointer to member type T or type std::nullptr_t, there 8764 // exist candidate operator functions of the form 8765 // 8766 // bool operator==(T,T); 8767 // bool operator!=(T,T); 8768 void addEqualEqualOrNotEqualMemberPointerOrNullptrOverloads() { 8769 /// Set of (canonical) types that we've already handled. 8770 llvm::SmallPtrSet<QualType, 8> AddedTypes; 8771 8772 for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) { 8773 for (QualType MemPtrTy : CandidateTypes[ArgIdx].member_pointer_types()) { 8774 // Don't add the same builtin candidate twice. 8775 if (!AddedTypes.insert(S.Context.getCanonicalType(MemPtrTy)).second) 8776 continue; 8777 8778 QualType ParamTypes[2] = {MemPtrTy, MemPtrTy}; 8779 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet); 8780 } 8781 8782 if (CandidateTypes[ArgIdx].hasNullPtrType()) { 8783 CanQualType NullPtrTy = S.Context.getCanonicalType(S.Context.NullPtrTy); 8784 if (AddedTypes.insert(NullPtrTy).second) { 8785 QualType ParamTypes[2] = { NullPtrTy, NullPtrTy }; 8786 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet); 8787 } 8788 } 8789 } 8790 } 8791 8792 // C++ [over.built]p15: 8793 // 8794 // For every T, where T is an enumeration type or a pointer type, 8795 // there exist candidate operator functions of the form 8796 // 8797 // bool operator<(T, T); 8798 // bool operator>(T, T); 8799 // bool operator<=(T, T); 8800 // bool operator>=(T, T); 8801 // bool operator==(T, T); 8802 // bool operator!=(T, T); 8803 // R operator<=>(T, T) 8804 void addGenericBinaryPointerOrEnumeralOverloads(bool IsSpaceship) { 8805 // C++ [over.match.oper]p3: 8806 // [...]the built-in candidates include all of the candidate operator 8807 // functions defined in 13.6 that, compared to the given operator, [...] 8808 // do not have the same parameter-type-list as any non-template non-member 8809 // candidate. 8810 // 8811 // Note that in practice, this only affects enumeration types because there 8812 // aren't any built-in candidates of record type, and a user-defined operator 8813 // must have an operand of record or enumeration type. Also, the only other 8814 // overloaded operator with enumeration arguments, operator=, 8815 // cannot be overloaded for enumeration types, so this is the only place 8816 // where we must suppress candidates like this. 8817 llvm::DenseSet<std::pair<CanQualType, CanQualType> > 8818 UserDefinedBinaryOperators; 8819 8820 for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) { 8821 if (!CandidateTypes[ArgIdx].enumeration_types().empty()) { 8822 for (OverloadCandidateSet::iterator C = CandidateSet.begin(), 8823 CEnd = CandidateSet.end(); 8824 C != CEnd; ++C) { 8825 if (!C->Viable || !C->Function || C->Function->getNumParams() != 2) 8826 continue; 8827 8828 if (C->Function->isFunctionTemplateSpecialization()) 8829 continue; 8830 8831 // We interpret "same parameter-type-list" as applying to the 8832 // "synthesized candidate, with the order of the two parameters 8833 // reversed", not to the original function. 8834 bool Reversed = C->isReversed(); 8835 QualType FirstParamType = C->Function->getParamDecl(Reversed ? 1 : 0) 8836 ->getType() 8837 .getUnqualifiedType(); 8838 QualType SecondParamType = C->Function->getParamDecl(Reversed ? 0 : 1) 8839 ->getType() 8840 .getUnqualifiedType(); 8841 8842 // Skip if either parameter isn't of enumeral type. 8843 if (!FirstParamType->isEnumeralType() || 8844 !SecondParamType->isEnumeralType()) 8845 continue; 8846 8847 // Add this operator to the set of known user-defined operators. 8848 UserDefinedBinaryOperators.insert( 8849 std::make_pair(S.Context.getCanonicalType(FirstParamType), 8850 S.Context.getCanonicalType(SecondParamType))); 8851 } 8852 } 8853 } 8854 8855 /// Set of (canonical) types that we've already handled. 8856 llvm::SmallPtrSet<QualType, 8> AddedTypes; 8857 8858 for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) { 8859 for (QualType PtrTy : CandidateTypes[ArgIdx].pointer_types()) { 8860 // Don't add the same builtin candidate twice. 8861 if (!AddedTypes.insert(S.Context.getCanonicalType(PtrTy)).second) 8862 continue; 8863 if (IsSpaceship && PtrTy->isFunctionPointerType()) 8864 continue; 8865 8866 QualType ParamTypes[2] = {PtrTy, PtrTy}; 8867 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet); 8868 } 8869 for (QualType EnumTy : CandidateTypes[ArgIdx].enumeration_types()) { 8870 CanQualType CanonType = S.Context.getCanonicalType(EnumTy); 8871 8872 // Don't add the same builtin candidate twice, or if a user defined 8873 // candidate exists. 8874 if (!AddedTypes.insert(CanonType).second || 8875 UserDefinedBinaryOperators.count(std::make_pair(CanonType, 8876 CanonType))) 8877 continue; 8878 QualType ParamTypes[2] = {EnumTy, EnumTy}; 8879 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet); 8880 } 8881 } 8882 } 8883 8884 // C++ [over.built]p13: 8885 // 8886 // For every cv-qualified or cv-unqualified object type T 8887 // there exist candidate operator functions of the form 8888 // 8889 // T* operator+(T*, ptrdiff_t); 8890 // T& operator[](T*, ptrdiff_t); [BELOW] 8891 // T* operator-(T*, ptrdiff_t); 8892 // T* operator+(ptrdiff_t, T*); 8893 // T& operator[](ptrdiff_t, T*); [BELOW] 8894 // 8895 // C++ [over.built]p14: 8896 // 8897 // For every T, where T is a pointer to object type, there 8898 // exist candidate operator functions of the form 8899 // 8900 // ptrdiff_t operator-(T, T); 8901 void addBinaryPlusOrMinusPointerOverloads(OverloadedOperatorKind Op) { 8902 /// Set of (canonical) types that we've already handled. 8903 llvm::SmallPtrSet<QualType, 8> AddedTypes; 8904 8905 for (int Arg = 0; Arg < 2; ++Arg) { 8906 QualType AsymmetricParamTypes[2] = { 8907 S.Context.getPointerDiffType(), 8908 S.Context.getPointerDiffType(), 8909 }; 8910 for (QualType PtrTy : CandidateTypes[Arg].pointer_types()) { 8911 QualType PointeeTy = PtrTy->getPointeeType(); 8912 if (!PointeeTy->isObjectType()) 8913 continue; 8914 8915 AsymmetricParamTypes[Arg] = PtrTy; 8916 if (Arg == 0 || Op == OO_Plus) { 8917 // operator+(T*, ptrdiff_t) or operator-(T*, ptrdiff_t) 8918 // T* operator+(ptrdiff_t, T*); 8919 S.AddBuiltinCandidate(AsymmetricParamTypes, Args, CandidateSet); 8920 } 8921 if (Op == OO_Minus) { 8922 // ptrdiff_t operator-(T, T); 8923 if (!AddedTypes.insert(S.Context.getCanonicalType(PtrTy)).second) 8924 continue; 8925 8926 QualType ParamTypes[2] = {PtrTy, PtrTy}; 8927 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet); 8928 } 8929 } 8930 } 8931 } 8932 8933 // C++ [over.built]p12: 8934 // 8935 // For every pair of promoted arithmetic types L and R, there 8936 // exist candidate operator functions of the form 8937 // 8938 // LR operator*(L, R); 8939 // LR operator/(L, R); 8940 // LR operator+(L, R); 8941 // LR operator-(L, R); 8942 // bool operator<(L, R); 8943 // bool operator>(L, R); 8944 // bool operator<=(L, R); 8945 // bool operator>=(L, R); 8946 // bool operator==(L, R); 8947 // bool operator!=(L, R); 8948 // 8949 // where LR is the result of the usual arithmetic conversions 8950 // between types L and R. 8951 // 8952 // C++ [over.built]p24: 8953 // 8954 // For every pair of promoted arithmetic types L and R, there exist 8955 // candidate operator functions of the form 8956 // 8957 // LR operator?(bool, L, R); 8958 // 8959 // where LR is the result of the usual arithmetic conversions 8960 // between types L and R. 8961 // Our candidates ignore the first parameter. 8962 void addGenericBinaryArithmeticOverloads() { 8963 if (!HasArithmeticOrEnumeralCandidateType) 8964 return; 8965 8966 for (unsigned Left = FirstPromotedArithmeticType; 8967 Left < LastPromotedArithmeticType; ++Left) { 8968 for (unsigned Right = FirstPromotedArithmeticType; 8969 Right < LastPromotedArithmeticType; ++Right) { 8970 QualType LandR[2] = { ArithmeticTypes[Left], 8971 ArithmeticTypes[Right] }; 8972 S.AddBuiltinCandidate(LandR, Args, CandidateSet); 8973 } 8974 } 8975 8976 // Extension: Add the binary operators ==, !=, <, <=, >=, >, *, /, and the 8977 // conditional operator for vector types. 8978 for (QualType Vec1Ty : CandidateTypes[0].vector_types()) 8979 for (QualType Vec2Ty : CandidateTypes[1].vector_types()) { 8980 QualType LandR[2] = {Vec1Ty, Vec2Ty}; 8981 S.AddBuiltinCandidate(LandR, Args, CandidateSet); 8982 } 8983 } 8984 8985 /// Add binary operator overloads for each candidate matrix type M1, M2: 8986 /// * (M1, M1) -> M1 8987 /// * (M1, M1.getElementType()) -> M1 8988 /// * (M2.getElementType(), M2) -> M2 8989 /// * (M2, M2) -> M2 // Only if M2 is not part of CandidateTypes[0]. 8990 void addMatrixBinaryArithmeticOverloads() { 8991 if (!HasArithmeticOrEnumeralCandidateType) 8992 return; 8993 8994 for (QualType M1 : CandidateTypes[0].matrix_types()) { 8995 AddCandidate(M1, cast<MatrixType>(M1)->getElementType()); 8996 AddCandidate(M1, M1); 8997 } 8998 8999 for (QualType M2 : CandidateTypes[1].matrix_types()) { 9000 AddCandidate(cast<MatrixType>(M2)->getElementType(), M2); 9001 if (!CandidateTypes[0].containsMatrixType(M2)) 9002 AddCandidate(M2, M2); 9003 } 9004 } 9005 9006 // C++2a [over.built]p14: 9007 // 9008 // For every integral type T there exists a candidate operator function 9009 // of the form 9010 // 9011 // std::strong_ordering operator<=>(T, T) 9012 // 9013 // C++2a [over.built]p15: 9014 // 9015 // For every pair of floating-point types L and R, there exists a candidate 9016 // operator function of the form 9017 // 9018 // std::partial_ordering operator<=>(L, R); 9019 // 9020 // FIXME: The current specification for integral types doesn't play nice with 9021 // the direction of p0946r0, which allows mixed integral and unscoped-enum 9022 // comparisons. Under the current spec this can lead to ambiguity during 9023 // overload resolution. For example: 9024 // 9025 // enum A : int {a}; 9026 // auto x = (a <=> (long)42); 9027 // 9028 // error: call is ambiguous for arguments 'A' and 'long'. 9029 // note: candidate operator<=>(int, int) 9030 // note: candidate operator<=>(long, long) 9031 // 9032 // To avoid this error, this function deviates from the specification and adds 9033 // the mixed overloads `operator<=>(L, R)` where L and R are promoted 9034 // arithmetic types (the same as the generic relational overloads). 9035 // 9036 // For now this function acts as a placeholder. 9037 void addThreeWayArithmeticOverloads() { 9038 addGenericBinaryArithmeticOverloads(); 9039 } 9040 9041 // C++ [over.built]p17: 9042 // 9043 // For every pair of promoted integral types L and R, there 9044 // exist candidate operator functions of the form 9045 // 9046 // LR operator%(L, R); 9047 // LR operator&(L, R); 9048 // LR operator^(L, R); 9049 // LR operator|(L, R); 9050 // L operator<<(L, R); 9051 // L operator>>(L, R); 9052 // 9053 // where LR is the result of the usual arithmetic conversions 9054 // between types L and R. 9055 void addBinaryBitwiseArithmeticOverloads() { 9056 if (!HasArithmeticOrEnumeralCandidateType) 9057 return; 9058 9059 for (unsigned Left = FirstPromotedIntegralType; 9060 Left < LastPromotedIntegralType; ++Left) { 9061 for (unsigned Right = FirstPromotedIntegralType; 9062 Right < LastPromotedIntegralType; ++Right) { 9063 QualType LandR[2] = { ArithmeticTypes[Left], 9064 ArithmeticTypes[Right] }; 9065 S.AddBuiltinCandidate(LandR, Args, CandidateSet); 9066 } 9067 } 9068 } 9069 9070 // C++ [over.built]p20: 9071 // 9072 // For every pair (T, VQ), where T is an enumeration or 9073 // pointer to member type and VQ is either volatile or 9074 // empty, there exist candidate operator functions of the form 9075 // 9076 // VQ T& operator=(VQ T&, T); 9077 void addAssignmentMemberPointerOrEnumeralOverloads() { 9078 /// Set of (canonical) types that we've already handled. 9079 llvm::SmallPtrSet<QualType, 8> AddedTypes; 9080 9081 for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) { 9082 for (QualType EnumTy : CandidateTypes[ArgIdx].enumeration_types()) { 9083 if (!AddedTypes.insert(S.Context.getCanonicalType(EnumTy)).second) 9084 continue; 9085 9086 AddBuiltinAssignmentOperatorCandidates(S, EnumTy, Args, CandidateSet); 9087 } 9088 9089 for (QualType MemPtrTy : CandidateTypes[ArgIdx].member_pointer_types()) { 9090 if (!AddedTypes.insert(S.Context.getCanonicalType(MemPtrTy)).second) 9091 continue; 9092 9093 AddBuiltinAssignmentOperatorCandidates(S, MemPtrTy, Args, CandidateSet); 9094 } 9095 } 9096 } 9097 9098 // C++ [over.built]p19: 9099 // 9100 // For every pair (T, VQ), where T is any type and VQ is either 9101 // volatile or empty, there exist candidate operator functions 9102 // of the form 9103 // 9104 // T*VQ& operator=(T*VQ&, T*); 9105 // 9106 // C++ [over.built]p21: 9107 // 9108 // For every pair (T, VQ), where T is a cv-qualified or 9109 // cv-unqualified object type and VQ is either volatile or 9110 // empty, there exist candidate operator functions of the form 9111 // 9112 // T*VQ& operator+=(T*VQ&, ptrdiff_t); 9113 // T*VQ& operator-=(T*VQ&, ptrdiff_t); 9114 void addAssignmentPointerOverloads(bool isEqualOp) { 9115 /// Set of (canonical) types that we've already handled. 9116 llvm::SmallPtrSet<QualType, 8> AddedTypes; 9117 9118 for (QualType PtrTy : CandidateTypes[0].pointer_types()) { 9119 // If this is operator=, keep track of the builtin candidates we added. 9120 if (isEqualOp) 9121 AddedTypes.insert(S.Context.getCanonicalType(PtrTy)); 9122 else if (!PtrTy->getPointeeType()->isObjectType()) 9123 continue; 9124 9125 // non-volatile version 9126 QualType ParamTypes[2] = { 9127 S.Context.getLValueReferenceType(PtrTy), 9128 isEqualOp ? PtrTy : S.Context.getPointerDiffType(), 9129 }; 9130 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet, 9131 /*IsAssignmentOperator=*/ isEqualOp); 9132 9133 bool NeedVolatile = !PtrTy.isVolatileQualified() && 9134 VisibleTypeConversionsQuals.hasVolatile(); 9135 if (NeedVolatile) { 9136 // volatile version 9137 ParamTypes[0] = 9138 S.Context.getLValueReferenceType(S.Context.getVolatileType(PtrTy)); 9139 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet, 9140 /*IsAssignmentOperator=*/isEqualOp); 9141 } 9142 9143 if (!PtrTy.isRestrictQualified() && 9144 VisibleTypeConversionsQuals.hasRestrict()) { 9145 // restrict version 9146 ParamTypes[0] = 9147 S.Context.getLValueReferenceType(S.Context.getRestrictType(PtrTy)); 9148 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet, 9149 /*IsAssignmentOperator=*/isEqualOp); 9150 9151 if (NeedVolatile) { 9152 // volatile restrict version 9153 ParamTypes[0] = 9154 S.Context.getLValueReferenceType(S.Context.getCVRQualifiedType( 9155 PtrTy, (Qualifiers::Volatile | Qualifiers::Restrict))); 9156 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet, 9157 /*IsAssignmentOperator=*/isEqualOp); 9158 } 9159 } 9160 } 9161 9162 if (isEqualOp) { 9163 for (QualType PtrTy : CandidateTypes[1].pointer_types()) { 9164 // Make sure we don't add the same candidate twice. 9165 if (!AddedTypes.insert(S.Context.getCanonicalType(PtrTy)).second) 9166 continue; 9167 9168 QualType ParamTypes[2] = { 9169 S.Context.getLValueReferenceType(PtrTy), 9170 PtrTy, 9171 }; 9172 9173 // non-volatile version 9174 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet, 9175 /*IsAssignmentOperator=*/true); 9176 9177 bool NeedVolatile = !PtrTy.isVolatileQualified() && 9178 VisibleTypeConversionsQuals.hasVolatile(); 9179 if (NeedVolatile) { 9180 // volatile version 9181 ParamTypes[0] = S.Context.getLValueReferenceType( 9182 S.Context.getVolatileType(PtrTy)); 9183 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet, 9184 /*IsAssignmentOperator=*/true); 9185 } 9186 9187 if (!PtrTy.isRestrictQualified() && 9188 VisibleTypeConversionsQuals.hasRestrict()) { 9189 // restrict version 9190 ParamTypes[0] = S.Context.getLValueReferenceType( 9191 S.Context.getRestrictType(PtrTy)); 9192 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet, 9193 /*IsAssignmentOperator=*/true); 9194 9195 if (NeedVolatile) { 9196 // volatile restrict version 9197 ParamTypes[0] = 9198 S.Context.getLValueReferenceType(S.Context.getCVRQualifiedType( 9199 PtrTy, (Qualifiers::Volatile | Qualifiers::Restrict))); 9200 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet, 9201 /*IsAssignmentOperator=*/true); 9202 } 9203 } 9204 } 9205 } 9206 } 9207 9208 // C++ [over.built]p18: 9209 // 9210 // For every triple (L, VQ, R), where L is an arithmetic type, 9211 // VQ is either volatile or empty, and R is a promoted 9212 // arithmetic type, there exist candidate operator functions of 9213 // the form 9214 // 9215 // VQ L& operator=(VQ L&, R); 9216 // VQ L& operator*=(VQ L&, R); 9217 // VQ L& operator/=(VQ L&, R); 9218 // VQ L& operator+=(VQ L&, R); 9219 // VQ L& operator-=(VQ L&, R); 9220 void addAssignmentArithmeticOverloads(bool isEqualOp) { 9221 if (!HasArithmeticOrEnumeralCandidateType) 9222 return; 9223 9224 for (unsigned Left = 0; Left < NumArithmeticTypes; ++Left) { 9225 for (unsigned Right = FirstPromotedArithmeticType; 9226 Right < LastPromotedArithmeticType; ++Right) { 9227 QualType ParamTypes[2]; 9228 ParamTypes[1] = ArithmeticTypes[Right]; 9229 auto LeftBaseTy = AdjustAddressSpaceForBuiltinOperandType( 9230 S, ArithmeticTypes[Left], Args[0]); 9231 9232 forAllQualifierCombinations( 9233 VisibleTypeConversionsQuals, [&](QualifiersAndAtomic Quals) { 9234 ParamTypes[0] = 9235 makeQualifiedLValueReferenceType(LeftBaseTy, Quals, S); 9236 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet, 9237 /*IsAssignmentOperator=*/isEqualOp); 9238 }); 9239 } 9240 } 9241 9242 // Extension: Add the binary operators =, +=, -=, *=, /= for vector types. 9243 for (QualType Vec1Ty : CandidateTypes[0].vector_types()) 9244 for (QualType Vec2Ty : CandidateTypes[0].vector_types()) { 9245 QualType ParamTypes[2]; 9246 ParamTypes[1] = Vec2Ty; 9247 // Add this built-in operator as a candidate (VQ is empty). 9248 ParamTypes[0] = S.Context.getLValueReferenceType(Vec1Ty); 9249 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet, 9250 /*IsAssignmentOperator=*/isEqualOp); 9251 9252 // Add this built-in operator as a candidate (VQ is 'volatile'). 9253 if (VisibleTypeConversionsQuals.hasVolatile()) { 9254 ParamTypes[0] = S.Context.getVolatileType(Vec1Ty); 9255 ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]); 9256 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet, 9257 /*IsAssignmentOperator=*/isEqualOp); 9258 } 9259 } 9260 } 9261 9262 // C++ [over.built]p22: 9263 // 9264 // For every triple (L, VQ, R), where L is an integral type, VQ 9265 // is either volatile or empty, and R is a promoted integral 9266 // type, there exist candidate operator functions of the form 9267 // 9268 // VQ L& operator%=(VQ L&, R); 9269 // VQ L& operator<<=(VQ L&, R); 9270 // VQ L& operator>>=(VQ L&, R); 9271 // VQ L& operator&=(VQ L&, R); 9272 // VQ L& operator^=(VQ L&, R); 9273 // VQ L& operator|=(VQ L&, R); 9274 void addAssignmentIntegralOverloads() { 9275 if (!HasArithmeticOrEnumeralCandidateType) 9276 return; 9277 9278 for (unsigned Left = FirstIntegralType; Left < LastIntegralType; ++Left) { 9279 for (unsigned Right = FirstPromotedIntegralType; 9280 Right < LastPromotedIntegralType; ++Right) { 9281 QualType ParamTypes[2]; 9282 ParamTypes[1] = ArithmeticTypes[Right]; 9283 auto LeftBaseTy = AdjustAddressSpaceForBuiltinOperandType( 9284 S, ArithmeticTypes[Left], Args[0]); 9285 9286 forAllQualifierCombinations( 9287 VisibleTypeConversionsQuals, [&](QualifiersAndAtomic Quals) { 9288 ParamTypes[0] = 9289 makeQualifiedLValueReferenceType(LeftBaseTy, Quals, S); 9290 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet); 9291 }); 9292 } 9293 } 9294 } 9295 9296 // C++ [over.operator]p23: 9297 // 9298 // There also exist candidate operator functions of the form 9299 // 9300 // bool operator!(bool); 9301 // bool operator&&(bool, bool); 9302 // bool operator||(bool, bool); 9303 void addExclaimOverload() { 9304 QualType ParamTy = S.Context.BoolTy; 9305 S.AddBuiltinCandidate(&ParamTy, Args, CandidateSet, 9306 /*IsAssignmentOperator=*/false, 9307 /*NumContextualBoolArguments=*/1); 9308 } 9309 void addAmpAmpOrPipePipeOverload() { 9310 QualType ParamTypes[2] = { S.Context.BoolTy, S.Context.BoolTy }; 9311 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet, 9312 /*IsAssignmentOperator=*/false, 9313 /*NumContextualBoolArguments=*/2); 9314 } 9315 9316 // C++ [over.built]p13: 9317 // 9318 // For every cv-qualified or cv-unqualified object type T there 9319 // exist candidate operator functions of the form 9320 // 9321 // T* operator+(T*, ptrdiff_t); [ABOVE] 9322 // T& operator[](T*, ptrdiff_t); 9323 // T* operator-(T*, ptrdiff_t); [ABOVE] 9324 // T* operator+(ptrdiff_t, T*); [ABOVE] 9325 // T& operator[](ptrdiff_t, T*); 9326 void addSubscriptOverloads() { 9327 for (QualType PtrTy : CandidateTypes[0].pointer_types()) { 9328 QualType ParamTypes[2] = {PtrTy, S.Context.getPointerDiffType()}; 9329 QualType PointeeType = PtrTy->getPointeeType(); 9330 if (!PointeeType->isObjectType()) 9331 continue; 9332 9333 // T& operator[](T*, ptrdiff_t) 9334 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet); 9335 } 9336 9337 for (QualType PtrTy : CandidateTypes[1].pointer_types()) { 9338 QualType ParamTypes[2] = {S.Context.getPointerDiffType(), PtrTy}; 9339 QualType PointeeType = PtrTy->getPointeeType(); 9340 if (!PointeeType->isObjectType()) 9341 continue; 9342 9343 // T& operator[](ptrdiff_t, T*) 9344 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet); 9345 } 9346 } 9347 9348 // C++ [over.built]p11: 9349 // For every quintuple (C1, C2, T, CV1, CV2), where C2 is a class type, 9350 // C1 is the same type as C2 or is a derived class of C2, T is an object 9351 // type or a function type, and CV1 and CV2 are cv-qualifier-seqs, 9352 // there exist candidate operator functions of the form 9353 // 9354 // CV12 T& operator->*(CV1 C1*, CV2 T C2::*); 9355 // 9356 // where CV12 is the union of CV1 and CV2. 9357 void addArrowStarOverloads() { 9358 for (QualType PtrTy : CandidateTypes[0].pointer_types()) { 9359 QualType C1Ty = PtrTy; 9360 QualType C1; 9361 QualifierCollector Q1; 9362 C1 = QualType(Q1.strip(C1Ty->getPointeeType()), 0); 9363 if (!isa<RecordType>(C1)) 9364 continue; 9365 // heuristic to reduce number of builtin candidates in the set. 9366 // Add volatile/restrict version only if there are conversions to a 9367 // volatile/restrict type. 9368 if (!VisibleTypeConversionsQuals.hasVolatile() && Q1.hasVolatile()) 9369 continue; 9370 if (!VisibleTypeConversionsQuals.hasRestrict() && Q1.hasRestrict()) 9371 continue; 9372 for (QualType MemPtrTy : CandidateTypes[1].member_pointer_types()) { 9373 const MemberPointerType *mptr = cast<MemberPointerType>(MemPtrTy); 9374 QualType C2 = QualType(mptr->getClass(), 0); 9375 C2 = C2.getUnqualifiedType(); 9376 if (C1 != C2 && !S.IsDerivedFrom(CandidateSet.getLocation(), C1, C2)) 9377 break; 9378 QualType ParamTypes[2] = {PtrTy, MemPtrTy}; 9379 // build CV12 T& 9380 QualType T = mptr->getPointeeType(); 9381 if (!VisibleTypeConversionsQuals.hasVolatile() && 9382 T.isVolatileQualified()) 9383 continue; 9384 if (!VisibleTypeConversionsQuals.hasRestrict() && 9385 T.isRestrictQualified()) 9386 continue; 9387 T = Q1.apply(S.Context, T); 9388 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet); 9389 } 9390 } 9391 } 9392 9393 // Note that we don't consider the first argument, since it has been 9394 // contextually converted to bool long ago. The candidates below are 9395 // therefore added as binary. 9396 // 9397 // C++ [over.built]p25: 9398 // For every type T, where T is a pointer, pointer-to-member, or scoped 9399 // enumeration type, there exist candidate operator functions of the form 9400 // 9401 // T operator?(bool, T, T); 9402 // 9403 void addConditionalOperatorOverloads() { 9404 /// Set of (canonical) types that we've already handled. 9405 llvm::SmallPtrSet<QualType, 8> AddedTypes; 9406 9407 for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) { 9408 for (QualType PtrTy : CandidateTypes[ArgIdx].pointer_types()) { 9409 if (!AddedTypes.insert(S.Context.getCanonicalType(PtrTy)).second) 9410 continue; 9411 9412 QualType ParamTypes[2] = {PtrTy, PtrTy}; 9413 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet); 9414 } 9415 9416 for (QualType MemPtrTy : CandidateTypes[ArgIdx].member_pointer_types()) { 9417 if (!AddedTypes.insert(S.Context.getCanonicalType(MemPtrTy)).second) 9418 continue; 9419 9420 QualType ParamTypes[2] = {MemPtrTy, MemPtrTy}; 9421 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet); 9422 } 9423 9424 if (S.getLangOpts().CPlusPlus11) { 9425 for (QualType EnumTy : CandidateTypes[ArgIdx].enumeration_types()) { 9426 if (!EnumTy->castAs<EnumType>()->getDecl()->isScoped()) 9427 continue; 9428 9429 if (!AddedTypes.insert(S.Context.getCanonicalType(EnumTy)).second) 9430 continue; 9431 9432 QualType ParamTypes[2] = {EnumTy, EnumTy}; 9433 S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet); 9434 } 9435 } 9436 } 9437 } 9438 }; 9439 9440 } // end anonymous namespace 9441 9442 /// AddBuiltinOperatorCandidates - Add the appropriate built-in 9443 /// operator overloads to the candidate set (C++ [over.built]), based 9444 /// on the operator @p Op and the arguments given. For example, if the 9445 /// operator is a binary '+', this routine might add "int 9446 /// operator+(int, int)" to cover integer addition. 9447 void Sema::AddBuiltinOperatorCandidates(OverloadedOperatorKind Op, 9448 SourceLocation OpLoc, 9449 ArrayRef<Expr *> Args, 9450 OverloadCandidateSet &CandidateSet) { 9451 // Find all of the types that the arguments can convert to, but only 9452 // if the operator we're looking at has built-in operator candidates 9453 // that make use of these types. Also record whether we encounter non-record 9454 // candidate types or either arithmetic or enumeral candidate types. 9455 QualifiersAndAtomic VisibleTypeConversionsQuals; 9456 VisibleTypeConversionsQuals.addConst(); 9457 for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) { 9458 VisibleTypeConversionsQuals += CollectVRQualifiers(Context, Args[ArgIdx]); 9459 if (Args[ArgIdx]->getType()->isAtomicType()) 9460 VisibleTypeConversionsQuals.addAtomic(); 9461 } 9462 9463 bool HasNonRecordCandidateType = false; 9464 bool HasArithmeticOrEnumeralCandidateType = false; 9465 SmallVector<BuiltinCandidateTypeSet, 2> CandidateTypes; 9466 for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) { 9467 CandidateTypes.emplace_back(*this); 9468 CandidateTypes[ArgIdx].AddTypesConvertedFrom(Args[ArgIdx]->getType(), 9469 OpLoc, 9470 true, 9471 (Op == OO_Exclaim || 9472 Op == OO_AmpAmp || 9473 Op == OO_PipePipe), 9474 VisibleTypeConversionsQuals); 9475 HasNonRecordCandidateType = HasNonRecordCandidateType || 9476 CandidateTypes[ArgIdx].hasNonRecordTypes(); 9477 HasArithmeticOrEnumeralCandidateType = 9478 HasArithmeticOrEnumeralCandidateType || 9479 CandidateTypes[ArgIdx].hasArithmeticOrEnumeralTypes(); 9480 } 9481 9482 // Exit early when no non-record types have been added to the candidate set 9483 // for any of the arguments to the operator. 9484 // 9485 // We can't exit early for !, ||, or &&, since there we have always have 9486 // 'bool' overloads. 9487 if (!HasNonRecordCandidateType && 9488 !(Op == OO_Exclaim || Op == OO_AmpAmp || Op == OO_PipePipe)) 9489 return; 9490 9491 // Setup an object to manage the common state for building overloads. 9492 BuiltinOperatorOverloadBuilder OpBuilder(*this, Args, 9493 VisibleTypeConversionsQuals, 9494 HasArithmeticOrEnumeralCandidateType, 9495 CandidateTypes, CandidateSet); 9496 9497 // Dispatch over the operation to add in only those overloads which apply. 9498 switch (Op) { 9499 case OO_None: 9500 case NUM_OVERLOADED_OPERATORS: 9501 llvm_unreachable("Expected an overloaded operator"); 9502 9503 case OO_New: 9504 case OO_Delete: 9505 case OO_Array_New: 9506 case OO_Array_Delete: 9507 case OO_Call: 9508 llvm_unreachable( 9509 "Special operators don't use AddBuiltinOperatorCandidates"); 9510 9511 case OO_Comma: 9512 case OO_Arrow: 9513 case OO_Coawait: 9514 // C++ [over.match.oper]p3: 9515 // -- For the operator ',', the unary operator '&', the 9516 // operator '->', or the operator 'co_await', the 9517 // built-in candidates set is empty. 9518 break; 9519 9520 case OO_Plus: // '+' is either unary or binary 9521 if (Args.size() == 1) 9522 OpBuilder.addUnaryPlusPointerOverloads(); 9523 [[fallthrough]]; 9524 9525 case OO_Minus: // '-' is either unary or binary 9526 if (Args.size() == 1) { 9527 OpBuilder.addUnaryPlusOrMinusArithmeticOverloads(); 9528 } else { 9529 OpBuilder.addBinaryPlusOrMinusPointerOverloads(Op); 9530 OpBuilder.addGenericBinaryArithmeticOverloads(); 9531 OpBuilder.addMatrixBinaryArithmeticOverloads(); 9532 } 9533 break; 9534 9535 case OO_Star: // '*' is either unary or binary 9536 if (Args.size() == 1) 9537 OpBuilder.addUnaryStarPointerOverloads(); 9538 else { 9539 OpBuilder.addGenericBinaryArithmeticOverloads(); 9540 OpBuilder.addMatrixBinaryArithmeticOverloads(); 9541 } 9542 break; 9543 9544 case OO_Slash: 9545 OpBuilder.addGenericBinaryArithmeticOverloads(); 9546 break; 9547 9548 case OO_PlusPlus: 9549 case OO_MinusMinus: 9550 OpBuilder.addPlusPlusMinusMinusArithmeticOverloads(Op); 9551 OpBuilder.addPlusPlusMinusMinusPointerOverloads(); 9552 break; 9553 9554 case OO_EqualEqual: 9555 case OO_ExclaimEqual: 9556 OpBuilder.addEqualEqualOrNotEqualMemberPointerOrNullptrOverloads(); 9557 OpBuilder.addGenericBinaryPointerOrEnumeralOverloads(/*IsSpaceship=*/false); 9558 OpBuilder.addGenericBinaryArithmeticOverloads(); 9559 break; 9560 9561 case OO_Less: 9562 case OO_Greater: 9563 case OO_LessEqual: 9564 case OO_GreaterEqual: 9565 OpBuilder.addGenericBinaryPointerOrEnumeralOverloads(/*IsSpaceship=*/false); 9566 OpBuilder.addGenericBinaryArithmeticOverloads(); 9567 break; 9568 9569 case OO_Spaceship: 9570 OpBuilder.addGenericBinaryPointerOrEnumeralOverloads(/*IsSpaceship=*/true); 9571 OpBuilder.addThreeWayArithmeticOverloads(); 9572 break; 9573 9574 case OO_Percent: 9575 case OO_Caret: 9576 case OO_Pipe: 9577 case OO_LessLess: 9578 case OO_GreaterGreater: 9579 OpBuilder.addBinaryBitwiseArithmeticOverloads(); 9580 break; 9581 9582 case OO_Amp: // '&' is either unary or binary 9583 if (Args.size() == 1) 9584 // C++ [over.match.oper]p3: 9585 // -- For the operator ',', the unary operator '&', or the 9586 // operator '->', the built-in candidates set is empty. 9587 break; 9588 9589 OpBuilder.addBinaryBitwiseArithmeticOverloads(); 9590 break; 9591 9592 case OO_Tilde: 9593 OpBuilder.addUnaryTildePromotedIntegralOverloads(); 9594 break; 9595 9596 case OO_Equal: 9597 OpBuilder.addAssignmentMemberPointerOrEnumeralOverloads(); 9598 [[fallthrough]]; 9599 9600 case OO_PlusEqual: 9601 case OO_MinusEqual: 9602 OpBuilder.addAssignmentPointerOverloads(Op == OO_Equal); 9603 [[fallthrough]]; 9604 9605 case OO_StarEqual: 9606 case OO_SlashEqual: 9607 OpBuilder.addAssignmentArithmeticOverloads(Op == OO_Equal); 9608 break; 9609 9610 case OO_PercentEqual: 9611 case OO_LessLessEqual: 9612 case OO_GreaterGreaterEqual: 9613 case OO_AmpEqual: 9614 case OO_CaretEqual: 9615 case OO_PipeEqual: 9616 OpBuilder.addAssignmentIntegralOverloads(); 9617 break; 9618 9619 case OO_Exclaim: 9620 OpBuilder.addExclaimOverload(); 9621 break; 9622 9623 case OO_AmpAmp: 9624 case OO_PipePipe: 9625 OpBuilder.addAmpAmpOrPipePipeOverload(); 9626 break; 9627 9628 case OO_Subscript: 9629 if (Args.size() == 2) 9630 OpBuilder.addSubscriptOverloads(); 9631 break; 9632 9633 case OO_ArrowStar: 9634 OpBuilder.addArrowStarOverloads(); 9635 break; 9636 9637 case OO_Conditional: 9638 OpBuilder.addConditionalOperatorOverloads(); 9639 OpBuilder.addGenericBinaryArithmeticOverloads(); 9640 break; 9641 } 9642 } 9643 9644 /// Add function candidates found via argument-dependent lookup 9645 /// to the set of overloading candidates. 9646 /// 9647 /// This routine performs argument-dependent name lookup based on the 9648 /// given function name (which may also be an operator name) and adds 9649 /// all of the overload candidates found by ADL to the overload 9650 /// candidate set (C++ [basic.lookup.argdep]). 9651 void 9652 Sema::AddArgumentDependentLookupCandidates(DeclarationName Name, 9653 SourceLocation Loc, 9654 ArrayRef<Expr *> Args, 9655 TemplateArgumentListInfo *ExplicitTemplateArgs, 9656 OverloadCandidateSet& CandidateSet, 9657 bool PartialOverloading) { 9658 ADLResult Fns; 9659 9660 // FIXME: This approach for uniquing ADL results (and removing 9661 // redundant candidates from the set) relies on pointer-equality, 9662 // which means we need to key off the canonical decl. However, 9663 // always going back to the canonical decl might not get us the 9664 // right set of default arguments. What default arguments are 9665 // we supposed to consider on ADL candidates, anyway? 9666 9667 // FIXME: Pass in the explicit template arguments? 9668 ArgumentDependentLookup(Name, Loc, Args, Fns); 9669 9670 // Erase all of the candidates we already knew about. 9671 for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(), 9672 CandEnd = CandidateSet.end(); 9673 Cand != CandEnd; ++Cand) 9674 if (Cand->Function) { 9675 Fns.erase(Cand->Function); 9676 if (FunctionTemplateDecl *FunTmpl = Cand->Function->getPrimaryTemplate()) 9677 Fns.erase(FunTmpl); 9678 } 9679 9680 // For each of the ADL candidates we found, add it to the overload 9681 // set. 9682 for (ADLResult::iterator I = Fns.begin(), E = Fns.end(); I != E; ++I) { 9683 DeclAccessPair FoundDecl = DeclAccessPair::make(*I, AS_none); 9684 9685 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) { 9686 if (ExplicitTemplateArgs) 9687 continue; 9688 9689 AddOverloadCandidate( 9690 FD, FoundDecl, Args, CandidateSet, /*SuppressUserConversions=*/false, 9691 PartialOverloading, /*AllowExplicit=*/true, 9692 /*AllowExplicitConversion=*/false, ADLCallKind::UsesADL); 9693 if (CandidateSet.getRewriteInfo().shouldAddReversed(*this, Args, FD)) { 9694 AddOverloadCandidate( 9695 FD, FoundDecl, {Args[1], Args[0]}, CandidateSet, 9696 /*SuppressUserConversions=*/false, PartialOverloading, 9697 /*AllowExplicit=*/true, /*AllowExplicitConversion=*/false, 9698 ADLCallKind::UsesADL, std::nullopt, 9699 OverloadCandidateParamOrder::Reversed); 9700 } 9701 } else { 9702 auto *FTD = cast<FunctionTemplateDecl>(*I); 9703 AddTemplateOverloadCandidate( 9704 FTD, FoundDecl, ExplicitTemplateArgs, Args, CandidateSet, 9705 /*SuppressUserConversions=*/false, PartialOverloading, 9706 /*AllowExplicit=*/true, ADLCallKind::UsesADL); 9707 if (CandidateSet.getRewriteInfo().shouldAddReversed( 9708 *this, Args, FTD->getTemplatedDecl())) { 9709 AddTemplateOverloadCandidate( 9710 FTD, FoundDecl, ExplicitTemplateArgs, {Args[1], Args[0]}, 9711 CandidateSet, /*SuppressUserConversions=*/false, PartialOverloading, 9712 /*AllowExplicit=*/true, ADLCallKind::UsesADL, 9713 OverloadCandidateParamOrder::Reversed); 9714 } 9715 } 9716 } 9717 } 9718 9719 namespace { 9720 enum class Comparison { Equal, Better, Worse }; 9721 } 9722 9723 /// Compares the enable_if attributes of two FunctionDecls, for the purposes of 9724 /// overload resolution. 9725 /// 9726 /// Cand1's set of enable_if attributes are said to be "better" than Cand2's iff 9727 /// Cand1's first N enable_if attributes have precisely the same conditions as 9728 /// Cand2's first N enable_if attributes (where N = the number of enable_if 9729 /// attributes on Cand2), and Cand1 has more than N enable_if attributes. 9730 /// 9731 /// Note that you can have a pair of candidates such that Cand1's enable_if 9732 /// attributes are worse than Cand2's, and Cand2's enable_if attributes are 9733 /// worse than Cand1's. 9734 static Comparison compareEnableIfAttrs(const Sema &S, const FunctionDecl *Cand1, 9735 const FunctionDecl *Cand2) { 9736 // Common case: One (or both) decls don't have enable_if attrs. 9737 bool Cand1Attr = Cand1->hasAttr<EnableIfAttr>(); 9738 bool Cand2Attr = Cand2->hasAttr<EnableIfAttr>(); 9739 if (!Cand1Attr || !Cand2Attr) { 9740 if (Cand1Attr == Cand2Attr) 9741 return Comparison::Equal; 9742 return Cand1Attr ? Comparison::Better : Comparison::Worse; 9743 } 9744 9745 auto Cand1Attrs = Cand1->specific_attrs<EnableIfAttr>(); 9746 auto Cand2Attrs = Cand2->specific_attrs<EnableIfAttr>(); 9747 9748 llvm::FoldingSetNodeID Cand1ID, Cand2ID; 9749 for (auto Pair : zip_longest(Cand1Attrs, Cand2Attrs)) { 9750 std::optional<EnableIfAttr *> Cand1A = std::get<0>(Pair); 9751 std::optional<EnableIfAttr *> Cand2A = std::get<1>(Pair); 9752 9753 // It's impossible for Cand1 to be better than (or equal to) Cand2 if Cand1 9754 // has fewer enable_if attributes than Cand2, and vice versa. 9755 if (!Cand1A) 9756 return Comparison::Worse; 9757 if (!Cand2A) 9758 return Comparison::Better; 9759 9760 Cand1ID.clear(); 9761 Cand2ID.clear(); 9762 9763 (*Cand1A)->getCond()->Profile(Cand1ID, S.getASTContext(), true); 9764 (*Cand2A)->getCond()->Profile(Cand2ID, S.getASTContext(), true); 9765 if (Cand1ID != Cand2ID) 9766 return Comparison::Worse; 9767 } 9768 9769 return Comparison::Equal; 9770 } 9771 9772 static Comparison 9773 isBetterMultiversionCandidate(const OverloadCandidate &Cand1, 9774 const OverloadCandidate &Cand2) { 9775 if (!Cand1.Function || !Cand1.Function->isMultiVersion() || !Cand2.Function || 9776 !Cand2.Function->isMultiVersion()) 9777 return Comparison::Equal; 9778 9779 // If both are invalid, they are equal. If one of them is invalid, the other 9780 // is better. 9781 if (Cand1.Function->isInvalidDecl()) { 9782 if (Cand2.Function->isInvalidDecl()) 9783 return Comparison::Equal; 9784 return Comparison::Worse; 9785 } 9786 if (Cand2.Function->isInvalidDecl()) 9787 return Comparison::Better; 9788 9789 // If this is a cpu_dispatch/cpu_specific multiversion situation, prefer 9790 // cpu_dispatch, else arbitrarily based on the identifiers. 9791 bool Cand1CPUDisp = Cand1.Function->hasAttr<CPUDispatchAttr>(); 9792 bool Cand2CPUDisp = Cand2.Function->hasAttr<CPUDispatchAttr>(); 9793 const auto *Cand1CPUSpec = Cand1.Function->getAttr<CPUSpecificAttr>(); 9794 const auto *Cand2CPUSpec = Cand2.Function->getAttr<CPUSpecificAttr>(); 9795 9796 if (!Cand1CPUDisp && !Cand2CPUDisp && !Cand1CPUSpec && !Cand2CPUSpec) 9797 return Comparison::Equal; 9798 9799 if (Cand1CPUDisp && !Cand2CPUDisp) 9800 return Comparison::Better; 9801 if (Cand2CPUDisp && !Cand1CPUDisp) 9802 return Comparison::Worse; 9803 9804 if (Cand1CPUSpec && Cand2CPUSpec) { 9805 if (Cand1CPUSpec->cpus_size() != Cand2CPUSpec->cpus_size()) 9806 return Cand1CPUSpec->cpus_size() < Cand2CPUSpec->cpus_size() 9807 ? Comparison::Better 9808 : Comparison::Worse; 9809 9810 std::pair<CPUSpecificAttr::cpus_iterator, CPUSpecificAttr::cpus_iterator> 9811 FirstDiff = std::mismatch( 9812 Cand1CPUSpec->cpus_begin(), Cand1CPUSpec->cpus_end(), 9813 Cand2CPUSpec->cpus_begin(), 9814 [](const IdentifierInfo *LHS, const IdentifierInfo *RHS) { 9815 return LHS->getName() == RHS->getName(); 9816 }); 9817 9818 assert(FirstDiff.first != Cand1CPUSpec->cpus_end() && 9819 "Two different cpu-specific versions should not have the same " 9820 "identifier list, otherwise they'd be the same decl!"); 9821 return (*FirstDiff.first)->getName() < (*FirstDiff.second)->getName() 9822 ? Comparison::Better 9823 : Comparison::Worse; 9824 } 9825 llvm_unreachable("No way to get here unless both had cpu_dispatch"); 9826 } 9827 9828 /// Compute the type of the implicit object parameter for the given function, 9829 /// if any. Returns std::nullopt if there is no implicit object parameter, and a 9830 /// null QualType if there is a 'matches anything' implicit object parameter. 9831 static std::optional<QualType> 9832 getImplicitObjectParamType(ASTContext &Context, const FunctionDecl *F) { 9833 if (!isa<CXXMethodDecl>(F) || isa<CXXConstructorDecl>(F)) 9834 return std::nullopt; 9835 9836 auto *M = cast<CXXMethodDecl>(F); 9837 // Static member functions' object parameters match all types. 9838 if (M->isStatic()) 9839 return QualType(); 9840 9841 QualType T = M->getThisObjectType(); 9842 if (M->getRefQualifier() == RQ_RValue) 9843 return Context.getRValueReferenceType(T); 9844 return Context.getLValueReferenceType(T); 9845 } 9846 9847 static bool haveSameParameterTypes(ASTContext &Context, const FunctionDecl *F1, 9848 const FunctionDecl *F2, unsigned NumParams) { 9849 if (declaresSameEntity(F1, F2)) 9850 return true; 9851 9852 auto NextParam = [&](const FunctionDecl *F, unsigned &I, bool First) { 9853 if (First) { 9854 if (std::optional<QualType> T = getImplicitObjectParamType(Context, F)) 9855 return *T; 9856 } 9857 assert(I < F->getNumParams()); 9858 return F->getParamDecl(I++)->getType(); 9859 }; 9860 9861 unsigned I1 = 0, I2 = 0; 9862 for (unsigned I = 0; I != NumParams; ++I) { 9863 QualType T1 = NextParam(F1, I1, I == 0); 9864 QualType T2 = NextParam(F2, I2, I == 0); 9865 assert(!T1.isNull() && !T2.isNull() && "Unexpected null param types"); 9866 if (!Context.hasSameUnqualifiedType(T1, T2)) 9867 return false; 9868 } 9869 return true; 9870 } 9871 9872 /// We're allowed to use constraints partial ordering only if the candidates 9873 /// have the same parameter types: 9874 /// [over.match.best]p2.6 9875 /// F1 and F2 are non-template functions with the same parameter-type-lists, 9876 /// and F1 is more constrained than F2 [...] 9877 static bool sameFunctionParameterTypeLists(Sema &S, 9878 const OverloadCandidate &Cand1, 9879 const OverloadCandidate &Cand2) { 9880 if (Cand1.Function && Cand2.Function) { 9881 auto *PT1 = cast<FunctionProtoType>(Cand1.Function->getFunctionType()); 9882 auto *PT2 = cast<FunctionProtoType>(Cand2.Function->getFunctionType()); 9883 if (PT1->getNumParams() == PT2->getNumParams() && 9884 PT1->isVariadic() == PT2->isVariadic() && 9885 S.FunctionParamTypesAreEqual(PT1, PT2, nullptr, 9886 Cand1.isReversed() ^ Cand2.isReversed())) 9887 return true; 9888 } 9889 return false; 9890 } 9891 9892 /// isBetterOverloadCandidate - Determines whether the first overload 9893 /// candidate is a better candidate than the second (C++ 13.3.3p1). 9894 bool clang::isBetterOverloadCandidate( 9895 Sema &S, const OverloadCandidate &Cand1, const OverloadCandidate &Cand2, 9896 SourceLocation Loc, OverloadCandidateSet::CandidateSetKind Kind) { 9897 // Define viable functions to be better candidates than non-viable 9898 // functions. 9899 if (!Cand2.Viable) 9900 return Cand1.Viable; 9901 else if (!Cand1.Viable) 9902 return false; 9903 9904 // [CUDA] A function with 'never' preference is marked not viable, therefore 9905 // is never shown up here. The worst preference shown up here is 'wrong side', 9906 // e.g. an H function called by a HD function in device compilation. This is 9907 // valid AST as long as the HD function is not emitted, e.g. it is an inline 9908 // function which is called only by an H function. A deferred diagnostic will 9909 // be triggered if it is emitted. However a wrong-sided function is still 9910 // a viable candidate here. 9911 // 9912 // If Cand1 can be emitted and Cand2 cannot be emitted in the current 9913 // context, Cand1 is better than Cand2. If Cand1 can not be emitted and Cand2 9914 // can be emitted, Cand1 is not better than Cand2. This rule should have 9915 // precedence over other rules. 9916 // 9917 // If both Cand1 and Cand2 can be emitted, or neither can be emitted, then 9918 // other rules should be used to determine which is better. This is because 9919 // host/device based overloading resolution is mostly for determining 9920 // viability of a function. If two functions are both viable, other factors 9921 // should take precedence in preference, e.g. the standard-defined preferences 9922 // like argument conversion ranks or enable_if partial-ordering. The 9923 // preference for pass-object-size parameters is probably most similar to a 9924 // type-based-overloading decision and so should take priority. 9925 // 9926 // If other rules cannot determine which is better, CUDA preference will be 9927 // used again to determine which is better. 9928 // 9929 // TODO: Currently IdentifyCUDAPreference does not return correct values 9930 // for functions called in global variable initializers due to missing 9931 // correct context about device/host. Therefore we can only enforce this 9932 // rule when there is a caller. We should enforce this rule for functions 9933 // in global variable initializers once proper context is added. 9934 // 9935 // TODO: We can only enable the hostness based overloading resolution when 9936 // -fgpu-exclude-wrong-side-overloads is on since this requires deferring 9937 // overloading resolution diagnostics. 9938 if (S.getLangOpts().CUDA && Cand1.Function && Cand2.Function && 9939 S.getLangOpts().GPUExcludeWrongSideOverloads) { 9940 if (FunctionDecl *Caller = S.getCurFunctionDecl(/*AllowLambda=*/true)) { 9941 bool IsCallerImplicitHD = Sema::isCUDAImplicitHostDeviceFunction(Caller); 9942 bool IsCand1ImplicitHD = 9943 Sema::isCUDAImplicitHostDeviceFunction(Cand1.Function); 9944 bool IsCand2ImplicitHD = 9945 Sema::isCUDAImplicitHostDeviceFunction(Cand2.Function); 9946 auto P1 = S.IdentifyCUDAPreference(Caller, Cand1.Function); 9947 auto P2 = S.IdentifyCUDAPreference(Caller, Cand2.Function); 9948 assert(P1 != Sema::CFP_Never && P2 != Sema::CFP_Never); 9949 // The implicit HD function may be a function in a system header which 9950 // is forced by pragma. In device compilation, if we prefer HD candidates 9951 // over wrong-sided candidates, overloading resolution may change, which 9952 // may result in non-deferrable diagnostics. As a workaround, we let 9953 // implicit HD candidates take equal preference as wrong-sided candidates. 9954 // This will preserve the overloading resolution. 9955 // TODO: We still need special handling of implicit HD functions since 9956 // they may incur other diagnostics to be deferred. We should make all 9957 // host/device related diagnostics deferrable and remove special handling 9958 // of implicit HD functions. 9959 auto EmitThreshold = 9960 (S.getLangOpts().CUDAIsDevice && IsCallerImplicitHD && 9961 (IsCand1ImplicitHD || IsCand2ImplicitHD)) 9962 ? Sema::CFP_Never 9963 : Sema::CFP_WrongSide; 9964 auto Cand1Emittable = P1 > EmitThreshold; 9965 auto Cand2Emittable = P2 > EmitThreshold; 9966 if (Cand1Emittable && !Cand2Emittable) 9967 return true; 9968 if (!Cand1Emittable && Cand2Emittable) 9969 return false; 9970 } 9971 } 9972 9973 // C++ [over.match.best]p1: (Changed in C++23) 9974 // 9975 // -- if F is a static member function, ICS1(F) is defined such 9976 // that ICS1(F) is neither better nor worse than ICS1(G) for 9977 // any function G, and, symmetrically, ICS1(G) is neither 9978 // better nor worse than ICS1(F). 9979 unsigned StartArg = 0; 9980 if (Cand1.IgnoreObjectArgument || Cand2.IgnoreObjectArgument) 9981 StartArg = 1; 9982 9983 auto IsIllFormedConversion = [&](const ImplicitConversionSequence &ICS) { 9984 // We don't allow incompatible pointer conversions in C++. 9985 if (!S.getLangOpts().CPlusPlus) 9986 return ICS.isStandard() && 9987 ICS.Standard.Second == ICK_Incompatible_Pointer_Conversion; 9988 9989 // The only ill-formed conversion we allow in C++ is the string literal to 9990 // char* conversion, which is only considered ill-formed after C++11. 9991 return S.getLangOpts().CPlusPlus11 && !S.getLangOpts().WritableStrings && 9992 hasDeprecatedStringLiteralToCharPtrConversion(ICS); 9993 }; 9994 9995 // Define functions that don't require ill-formed conversions for a given 9996 // argument to be better candidates than functions that do. 9997 unsigned NumArgs = Cand1.Conversions.size(); 9998 assert(Cand2.Conversions.size() == NumArgs && "Overload candidate mismatch"); 9999 bool HasBetterConversion = false; 10000 for (unsigned ArgIdx = StartArg; ArgIdx < NumArgs; ++ArgIdx) { 10001 bool Cand1Bad = IsIllFormedConversion(Cand1.Conversions[ArgIdx]); 10002 bool Cand2Bad = IsIllFormedConversion(Cand2.Conversions[ArgIdx]); 10003 if (Cand1Bad != Cand2Bad) { 10004 if (Cand1Bad) 10005 return false; 10006 HasBetterConversion = true; 10007 } 10008 } 10009 10010 if (HasBetterConversion) 10011 return true; 10012 10013 // C++ [over.match.best]p1: 10014 // A viable function F1 is defined to be a better function than another 10015 // viable function F2 if for all arguments i, ICSi(F1) is not a worse 10016 // conversion sequence than ICSi(F2), and then... 10017 bool HasWorseConversion = false; 10018 for (unsigned ArgIdx = StartArg; ArgIdx < NumArgs; ++ArgIdx) { 10019 switch (CompareImplicitConversionSequences(S, Loc, 10020 Cand1.Conversions[ArgIdx], 10021 Cand2.Conversions[ArgIdx])) { 10022 case ImplicitConversionSequence::Better: 10023 // Cand1 has a better conversion sequence. 10024 HasBetterConversion = true; 10025 break; 10026 10027 case ImplicitConversionSequence::Worse: 10028 if (Cand1.Function && Cand2.Function && 10029 Cand1.isReversed() != Cand2.isReversed() && 10030 haveSameParameterTypes(S.Context, Cand1.Function, Cand2.Function, 10031 NumArgs)) { 10032 // Work around large-scale breakage caused by considering reversed 10033 // forms of operator== in C++20: 10034 // 10035 // When comparing a function against a reversed function with the same 10036 // parameter types, if we have a better conversion for one argument and 10037 // a worse conversion for the other, the implicit conversion sequences 10038 // are treated as being equally good. 10039 // 10040 // This prevents a comparison function from being considered ambiguous 10041 // with a reversed form that is written in the same way. 10042 // 10043 // We diagnose this as an extension from CreateOverloadedBinOp. 10044 HasWorseConversion = true; 10045 break; 10046 } 10047 10048 // Cand1 can't be better than Cand2. 10049 return false; 10050 10051 case ImplicitConversionSequence::Indistinguishable: 10052 // Do nothing. 10053 break; 10054 } 10055 } 10056 10057 // -- for some argument j, ICSj(F1) is a better conversion sequence than 10058 // ICSj(F2), or, if not that, 10059 if (HasBetterConversion && !HasWorseConversion) 10060 return true; 10061 10062 // -- the context is an initialization by user-defined conversion 10063 // (see 8.5, 13.3.1.5) and the standard conversion sequence 10064 // from the return type of F1 to the destination type (i.e., 10065 // the type of the entity being initialized) is a better 10066 // conversion sequence than the standard conversion sequence 10067 // from the return type of F2 to the destination type. 10068 if (Kind == OverloadCandidateSet::CSK_InitByUserDefinedConversion && 10069 Cand1.Function && Cand2.Function && 10070 isa<CXXConversionDecl>(Cand1.Function) && 10071 isa<CXXConversionDecl>(Cand2.Function)) { 10072 // First check whether we prefer one of the conversion functions over the 10073 // other. This only distinguishes the results in non-standard, extension 10074 // cases such as the conversion from a lambda closure type to a function 10075 // pointer or block. 10076 ImplicitConversionSequence::CompareKind Result = 10077 compareConversionFunctions(S, Cand1.Function, Cand2.Function); 10078 if (Result == ImplicitConversionSequence::Indistinguishable) 10079 Result = CompareStandardConversionSequences(S, Loc, 10080 Cand1.FinalConversion, 10081 Cand2.FinalConversion); 10082 10083 if (Result != ImplicitConversionSequence::Indistinguishable) 10084 return Result == ImplicitConversionSequence::Better; 10085 10086 // FIXME: Compare kind of reference binding if conversion functions 10087 // convert to a reference type used in direct reference binding, per 10088 // C++14 [over.match.best]p1 section 2 bullet 3. 10089 } 10090 10091 // FIXME: Work around a defect in the C++17 guaranteed copy elision wording, 10092 // as combined with the resolution to CWG issue 243. 10093 // 10094 // When the context is initialization by constructor ([over.match.ctor] or 10095 // either phase of [over.match.list]), a constructor is preferred over 10096 // a conversion function. 10097 if (Kind == OverloadCandidateSet::CSK_InitByConstructor && NumArgs == 1 && 10098 Cand1.Function && Cand2.Function && 10099 isa<CXXConstructorDecl>(Cand1.Function) != 10100 isa<CXXConstructorDecl>(Cand2.Function)) 10101 return isa<CXXConstructorDecl>(Cand1.Function); 10102 10103 // -- F1 is a non-template function and F2 is a function template 10104 // specialization, or, if not that, 10105 bool Cand1IsSpecialization = Cand1.Function && 10106 Cand1.Function->getPrimaryTemplate(); 10107 bool Cand2IsSpecialization = Cand2.Function && 10108 Cand2.Function->getPrimaryTemplate(); 10109 if (Cand1IsSpecialization != Cand2IsSpecialization) 10110 return Cand2IsSpecialization; 10111 10112 // -- F1 and F2 are function template specializations, and the function 10113 // template for F1 is more specialized than the template for F2 10114 // according to the partial ordering rules described in 14.5.5.2, or, 10115 // if not that, 10116 if (Cand1IsSpecialization && Cand2IsSpecialization) { 10117 if (FunctionTemplateDecl *BetterTemplate = S.getMoreSpecializedTemplate( 10118 Cand1.Function->getPrimaryTemplate(), 10119 Cand2.Function->getPrimaryTemplate(), Loc, 10120 isa<CXXConversionDecl>(Cand1.Function) ? TPOC_Conversion 10121 : TPOC_Call, 10122 Cand1.ExplicitCallArguments, Cand2.ExplicitCallArguments, 10123 Cand1.isReversed() ^ Cand2.isReversed())) 10124 return BetterTemplate == Cand1.Function->getPrimaryTemplate(); 10125 } 10126 10127 // -— F1 and F2 are non-template functions with the same 10128 // parameter-type-lists, and F1 is more constrained than F2 [...], 10129 if (!Cand1IsSpecialization && !Cand2IsSpecialization && 10130 sameFunctionParameterTypeLists(S, Cand1, Cand2)) { 10131 FunctionDecl *Function1 = Cand1.Function; 10132 FunctionDecl *Function2 = Cand2.Function; 10133 if (FunctionDecl *MF = Function1->getInstantiatedFromMemberFunction()) 10134 Function1 = MF; 10135 if (FunctionDecl *MF = Function2->getInstantiatedFromMemberFunction()) 10136 Function2 = MF; 10137 10138 const Expr *RC1 = Function1->getTrailingRequiresClause(); 10139 const Expr *RC2 = Function2->getTrailingRequiresClause(); 10140 if (RC1 && RC2) { 10141 bool AtLeastAsConstrained1, AtLeastAsConstrained2; 10142 if (S.IsAtLeastAsConstrained(Function1, RC1, Function2, RC2, 10143 AtLeastAsConstrained1) || 10144 S.IsAtLeastAsConstrained(Function2, RC2, Function1, RC1, 10145 AtLeastAsConstrained2)) 10146 return false; 10147 if (AtLeastAsConstrained1 != AtLeastAsConstrained2) 10148 return AtLeastAsConstrained1; 10149 } else if (RC1 || RC2) { 10150 return RC1 != nullptr; 10151 } 10152 } 10153 10154 // -- F1 is a constructor for a class D, F2 is a constructor for a base 10155 // class B of D, and for all arguments the corresponding parameters of 10156 // F1 and F2 have the same type. 10157 // FIXME: Implement the "all parameters have the same type" check. 10158 bool Cand1IsInherited = 10159 isa_and_nonnull<ConstructorUsingShadowDecl>(Cand1.FoundDecl.getDecl()); 10160 bool Cand2IsInherited = 10161 isa_and_nonnull<ConstructorUsingShadowDecl>(Cand2.FoundDecl.getDecl()); 10162 if (Cand1IsInherited != Cand2IsInherited) 10163 return Cand2IsInherited; 10164 else if (Cand1IsInherited) { 10165 assert(Cand2IsInherited); 10166 auto *Cand1Class = cast<CXXRecordDecl>(Cand1.Function->getDeclContext()); 10167 auto *Cand2Class = cast<CXXRecordDecl>(Cand2.Function->getDeclContext()); 10168 if (Cand1Class->isDerivedFrom(Cand2Class)) 10169 return true; 10170 if (Cand2Class->isDerivedFrom(Cand1Class)) 10171 return false; 10172 // Inherited from sibling base classes: still ambiguous. 10173 } 10174 10175 // -- F2 is a rewritten candidate (12.4.1.2) and F1 is not 10176 // -- F1 and F2 are rewritten candidates, and F2 is a synthesized candidate 10177 // with reversed order of parameters and F1 is not 10178 // 10179 // We rank reversed + different operator as worse than just reversed, but 10180 // that comparison can never happen, because we only consider reversing for 10181 // the maximally-rewritten operator (== or <=>). 10182 if (Cand1.RewriteKind != Cand2.RewriteKind) 10183 return Cand1.RewriteKind < Cand2.RewriteKind; 10184 10185 // Check C++17 tie-breakers for deduction guides. 10186 { 10187 auto *Guide1 = dyn_cast_or_null<CXXDeductionGuideDecl>(Cand1.Function); 10188 auto *Guide2 = dyn_cast_or_null<CXXDeductionGuideDecl>(Cand2.Function); 10189 if (Guide1 && Guide2) { 10190 // -- F1 is generated from a deduction-guide and F2 is not 10191 if (Guide1->isImplicit() != Guide2->isImplicit()) 10192 return Guide2->isImplicit(); 10193 10194 // -- F1 is the copy deduction candidate(16.3.1.8) and F2 is not 10195 if (Guide1->getDeductionCandidateKind() == DeductionCandidate::Copy) 10196 return true; 10197 } 10198 } 10199 10200 // Check for enable_if value-based overload resolution. 10201 if (Cand1.Function && Cand2.Function) { 10202 Comparison Cmp = compareEnableIfAttrs(S, Cand1.Function, Cand2.Function); 10203 if (Cmp != Comparison::Equal) 10204 return Cmp == Comparison::Better; 10205 } 10206 10207 bool HasPS1 = Cand1.Function != nullptr && 10208 functionHasPassObjectSizeParams(Cand1.Function); 10209 bool HasPS2 = Cand2.Function != nullptr && 10210 functionHasPassObjectSizeParams(Cand2.Function); 10211 if (HasPS1 != HasPS2 && HasPS1) 10212 return true; 10213 10214 auto MV = isBetterMultiversionCandidate(Cand1, Cand2); 10215 if (MV == Comparison::Better) 10216 return true; 10217 if (MV == Comparison::Worse) 10218 return false; 10219 10220 // If other rules cannot determine which is better, CUDA preference is used 10221 // to determine which is better. 10222 if (S.getLangOpts().CUDA && Cand1.Function && Cand2.Function) { 10223 FunctionDecl *Caller = S.getCurFunctionDecl(/*AllowLambda=*/true); 10224 return S.IdentifyCUDAPreference(Caller, Cand1.Function) > 10225 S.IdentifyCUDAPreference(Caller, Cand2.Function); 10226 } 10227 10228 // General member function overloading is handled above, so this only handles 10229 // constructors with address spaces. 10230 // This only handles address spaces since C++ has no other 10231 // qualifier that can be used with constructors. 10232 const auto *CD1 = dyn_cast_or_null<CXXConstructorDecl>(Cand1.Function); 10233 const auto *CD2 = dyn_cast_or_null<CXXConstructorDecl>(Cand2.Function); 10234 if (CD1 && CD2) { 10235 LangAS AS1 = CD1->getMethodQualifiers().getAddressSpace(); 10236 LangAS AS2 = CD2->getMethodQualifiers().getAddressSpace(); 10237 if (AS1 != AS2) { 10238 if (Qualifiers::isAddressSpaceSupersetOf(AS2, AS1)) 10239 return true; 10240 if (Qualifiers::isAddressSpaceSupersetOf(AS2, AS1)) 10241 return false; 10242 } 10243 } 10244 10245 return false; 10246 } 10247 10248 /// Determine whether two declarations are "equivalent" for the purposes of 10249 /// name lookup and overload resolution. This applies when the same internal/no 10250 /// linkage entity is defined by two modules (probably by textually including 10251 /// the same header). In such a case, we don't consider the declarations to 10252 /// declare the same entity, but we also don't want lookups with both 10253 /// declarations visible to be ambiguous in some cases (this happens when using 10254 /// a modularized libstdc++). 10255 bool Sema::isEquivalentInternalLinkageDeclaration(const NamedDecl *A, 10256 const NamedDecl *B) { 10257 auto *VA = dyn_cast_or_null<ValueDecl>(A); 10258 auto *VB = dyn_cast_or_null<ValueDecl>(B); 10259 if (!VA || !VB) 10260 return false; 10261 10262 // The declarations must be declaring the same name as an internal linkage 10263 // entity in different modules. 10264 if (!VA->getDeclContext()->getRedeclContext()->Equals( 10265 VB->getDeclContext()->getRedeclContext()) || 10266 getOwningModule(VA) == getOwningModule(VB) || 10267 VA->isExternallyVisible() || VB->isExternallyVisible()) 10268 return false; 10269 10270 // Check that the declarations appear to be equivalent. 10271 // 10272 // FIXME: Checking the type isn't really enough to resolve the ambiguity. 10273 // For constants and functions, we should check the initializer or body is 10274 // the same. For non-constant variables, we shouldn't allow it at all. 10275 if (Context.hasSameType(VA->getType(), VB->getType())) 10276 return true; 10277 10278 // Enum constants within unnamed enumerations will have different types, but 10279 // may still be similar enough to be interchangeable for our purposes. 10280 if (auto *EA = dyn_cast<EnumConstantDecl>(VA)) { 10281 if (auto *EB = dyn_cast<EnumConstantDecl>(VB)) { 10282 // Only handle anonymous enums. If the enumerations were named and 10283 // equivalent, they would have been merged to the same type. 10284 auto *EnumA = cast<EnumDecl>(EA->getDeclContext()); 10285 auto *EnumB = cast<EnumDecl>(EB->getDeclContext()); 10286 if (EnumA->hasNameForLinkage() || EnumB->hasNameForLinkage() || 10287 !Context.hasSameType(EnumA->getIntegerType(), 10288 EnumB->getIntegerType())) 10289 return false; 10290 // Allow this only if the value is the same for both enumerators. 10291 return llvm::APSInt::isSameValue(EA->getInitVal(), EB->getInitVal()); 10292 } 10293 } 10294 10295 // Nothing else is sufficiently similar. 10296 return false; 10297 } 10298 10299 void Sema::diagnoseEquivalentInternalLinkageDeclarations( 10300 SourceLocation Loc, const NamedDecl *D, ArrayRef<const NamedDecl *> Equiv) { 10301 assert(D && "Unknown declaration"); 10302 Diag(Loc, diag::ext_equivalent_internal_linkage_decl_in_modules) << D; 10303 10304 Module *M = getOwningModule(D); 10305 Diag(D->getLocation(), diag::note_equivalent_internal_linkage_decl) 10306 << !M << (M ? M->getFullModuleName() : ""); 10307 10308 for (auto *E : Equiv) { 10309 Module *M = getOwningModule(E); 10310 Diag(E->getLocation(), diag::note_equivalent_internal_linkage_decl) 10311 << !M << (M ? M->getFullModuleName() : ""); 10312 } 10313 } 10314 10315 bool OverloadCandidate::NotValidBecauseConstraintExprHasError() const { 10316 return FailureKind == ovl_fail_bad_deduction && 10317 DeductionFailure.Result == Sema::TDK_ConstraintsNotSatisfied && 10318 static_cast<CNSInfo *>(DeductionFailure.Data) 10319 ->Satisfaction.ContainsErrors; 10320 } 10321 10322 /// Computes the best viable function (C++ 13.3.3) 10323 /// within an overload candidate set. 10324 /// 10325 /// \param Loc The location of the function name (or operator symbol) for 10326 /// which overload resolution occurs. 10327 /// 10328 /// \param Best If overload resolution was successful or found a deleted 10329 /// function, \p Best points to the candidate function found. 10330 /// 10331 /// \returns The result of overload resolution. 10332 OverloadingResult 10333 OverloadCandidateSet::BestViableFunction(Sema &S, SourceLocation Loc, 10334 iterator &Best) { 10335 llvm::SmallVector<OverloadCandidate *, 16> Candidates; 10336 std::transform(begin(), end(), std::back_inserter(Candidates), 10337 [](OverloadCandidate &Cand) { return &Cand; }); 10338 10339 // [CUDA] HD->H or HD->D calls are technically not allowed by CUDA but 10340 // are accepted by both clang and NVCC. However, during a particular 10341 // compilation mode only one call variant is viable. We need to 10342 // exclude non-viable overload candidates from consideration based 10343 // only on their host/device attributes. Specifically, if one 10344 // candidate call is WrongSide and the other is SameSide, we ignore 10345 // the WrongSide candidate. 10346 // We only need to remove wrong-sided candidates here if 10347 // -fgpu-exclude-wrong-side-overloads is off. When 10348 // -fgpu-exclude-wrong-side-overloads is on, all candidates are compared 10349 // uniformly in isBetterOverloadCandidate. 10350 if (S.getLangOpts().CUDA && !S.getLangOpts().GPUExcludeWrongSideOverloads) { 10351 const FunctionDecl *Caller = S.getCurFunctionDecl(/*AllowLambda=*/true); 10352 bool ContainsSameSideCandidate = 10353 llvm::any_of(Candidates, [&](OverloadCandidate *Cand) { 10354 // Check viable function only. 10355 return Cand->Viable && Cand->Function && 10356 S.IdentifyCUDAPreference(Caller, Cand->Function) == 10357 Sema::CFP_SameSide; 10358 }); 10359 if (ContainsSameSideCandidate) { 10360 auto IsWrongSideCandidate = [&](OverloadCandidate *Cand) { 10361 // Check viable function only to avoid unnecessary data copying/moving. 10362 return Cand->Viable && Cand->Function && 10363 S.IdentifyCUDAPreference(Caller, Cand->Function) == 10364 Sema::CFP_WrongSide; 10365 }; 10366 llvm::erase_if(Candidates, IsWrongSideCandidate); 10367 } 10368 } 10369 10370 // Find the best viable function. 10371 Best = end(); 10372 for (auto *Cand : Candidates) { 10373 Cand->Best = false; 10374 if (Cand->Viable) { 10375 if (Best == end() || 10376 isBetterOverloadCandidate(S, *Cand, *Best, Loc, Kind)) 10377 Best = Cand; 10378 } else if (Cand->NotValidBecauseConstraintExprHasError()) { 10379 // This candidate has constraint that we were unable to evaluate because 10380 // it referenced an expression that contained an error. Rather than fall 10381 // back onto a potentially unintended candidate (made worse by 10382 // subsuming constraints), treat this as 'no viable candidate'. 10383 Best = end(); 10384 return OR_No_Viable_Function; 10385 } 10386 } 10387 10388 // If we didn't find any viable functions, abort. 10389 if (Best == end()) 10390 return OR_No_Viable_Function; 10391 10392 llvm::SmallVector<const NamedDecl *, 4> EquivalentCands; 10393 10394 llvm::SmallVector<OverloadCandidate*, 4> PendingBest; 10395 PendingBest.push_back(&*Best); 10396 Best->Best = true; 10397 10398 // Make sure that this function is better than every other viable 10399 // function. If not, we have an ambiguity. 10400 while (!PendingBest.empty()) { 10401 auto *Curr = PendingBest.pop_back_val(); 10402 for (auto *Cand : Candidates) { 10403 if (Cand->Viable && !Cand->Best && 10404 !isBetterOverloadCandidate(S, *Curr, *Cand, Loc, Kind)) { 10405 PendingBest.push_back(Cand); 10406 Cand->Best = true; 10407 10408 if (S.isEquivalentInternalLinkageDeclaration(Cand->Function, 10409 Curr->Function)) 10410 EquivalentCands.push_back(Cand->Function); 10411 else 10412 Best = end(); 10413 } 10414 } 10415 } 10416 10417 // If we found more than one best candidate, this is ambiguous. 10418 if (Best == end()) 10419 return OR_Ambiguous; 10420 10421 // Best is the best viable function. 10422 if (Best->Function && Best->Function->isDeleted()) 10423 return OR_Deleted; 10424 10425 if (!EquivalentCands.empty()) 10426 S.diagnoseEquivalentInternalLinkageDeclarations(Loc, Best->Function, 10427 EquivalentCands); 10428 10429 return OR_Success; 10430 } 10431 10432 namespace { 10433 10434 enum OverloadCandidateKind { 10435 oc_function, 10436 oc_method, 10437 oc_reversed_binary_operator, 10438 oc_constructor, 10439 oc_implicit_default_constructor, 10440 oc_implicit_copy_constructor, 10441 oc_implicit_move_constructor, 10442 oc_implicit_copy_assignment, 10443 oc_implicit_move_assignment, 10444 oc_implicit_equality_comparison, 10445 oc_inherited_constructor 10446 }; 10447 10448 enum OverloadCandidateSelect { 10449 ocs_non_template, 10450 ocs_template, 10451 ocs_described_template, 10452 }; 10453 10454 static std::pair<OverloadCandidateKind, OverloadCandidateSelect> 10455 ClassifyOverloadCandidate(Sema &S, const NamedDecl *Found, 10456 const FunctionDecl *Fn, 10457 OverloadCandidateRewriteKind CRK, 10458 std::string &Description) { 10459 10460 bool isTemplate = Fn->isTemplateDecl() || Found->isTemplateDecl(); 10461 if (FunctionTemplateDecl *FunTmpl = Fn->getPrimaryTemplate()) { 10462 isTemplate = true; 10463 Description = S.getTemplateArgumentBindingsText( 10464 FunTmpl->getTemplateParameters(), *Fn->getTemplateSpecializationArgs()); 10465 } 10466 10467 OverloadCandidateSelect Select = [&]() { 10468 if (!Description.empty()) 10469 return ocs_described_template; 10470 return isTemplate ? ocs_template : ocs_non_template; 10471 }(); 10472 10473 OverloadCandidateKind Kind = [&]() { 10474 if (Fn->isImplicit() && Fn->getOverloadedOperator() == OO_EqualEqual) 10475 return oc_implicit_equality_comparison; 10476 10477 if (CRK & CRK_Reversed) 10478 return oc_reversed_binary_operator; 10479 10480 if (const auto *Ctor = dyn_cast<CXXConstructorDecl>(Fn)) { 10481 if (!Ctor->isImplicit()) { 10482 if (isa<ConstructorUsingShadowDecl>(Found)) 10483 return oc_inherited_constructor; 10484 else 10485 return oc_constructor; 10486 } 10487 10488 if (Ctor->isDefaultConstructor()) 10489 return oc_implicit_default_constructor; 10490 10491 if (Ctor->isMoveConstructor()) 10492 return oc_implicit_move_constructor; 10493 10494 assert(Ctor->isCopyConstructor() && 10495 "unexpected sort of implicit constructor"); 10496 return oc_implicit_copy_constructor; 10497 } 10498 10499 if (const auto *Meth = dyn_cast<CXXMethodDecl>(Fn)) { 10500 // This actually gets spelled 'candidate function' for now, but 10501 // it doesn't hurt to split it out. 10502 if (!Meth->isImplicit()) 10503 return oc_method; 10504 10505 if (Meth->isMoveAssignmentOperator()) 10506 return oc_implicit_move_assignment; 10507 10508 if (Meth->isCopyAssignmentOperator()) 10509 return oc_implicit_copy_assignment; 10510 10511 assert(isa<CXXConversionDecl>(Meth) && "expected conversion"); 10512 return oc_method; 10513 } 10514 10515 return oc_function; 10516 }(); 10517 10518 return std::make_pair(Kind, Select); 10519 } 10520 10521 void MaybeEmitInheritedConstructorNote(Sema &S, const Decl *FoundDecl) { 10522 // FIXME: It'd be nice to only emit a note once per using-decl per overload 10523 // set. 10524 if (const auto *Shadow = dyn_cast<ConstructorUsingShadowDecl>(FoundDecl)) 10525 S.Diag(FoundDecl->getLocation(), 10526 diag::note_ovl_candidate_inherited_constructor) 10527 << Shadow->getNominatedBaseClass(); 10528 } 10529 10530 } // end anonymous namespace 10531 10532 static bool isFunctionAlwaysEnabled(const ASTContext &Ctx, 10533 const FunctionDecl *FD) { 10534 for (auto *EnableIf : FD->specific_attrs<EnableIfAttr>()) { 10535 bool AlwaysTrue; 10536 if (EnableIf->getCond()->isValueDependent() || 10537 !EnableIf->getCond()->EvaluateAsBooleanCondition(AlwaysTrue, Ctx)) 10538 return false; 10539 if (!AlwaysTrue) 10540 return false; 10541 } 10542 return true; 10543 } 10544 10545 /// Returns true if we can take the address of the function. 10546 /// 10547 /// \param Complain - If true, we'll emit a diagnostic 10548 /// \param InOverloadResolution - For the purposes of emitting a diagnostic, are 10549 /// we in overload resolution? 10550 /// \param Loc - The location of the statement we're complaining about. Ignored 10551 /// if we're not complaining, or if we're in overload resolution. 10552 static bool checkAddressOfFunctionIsAvailable(Sema &S, const FunctionDecl *FD, 10553 bool Complain, 10554 bool InOverloadResolution, 10555 SourceLocation Loc) { 10556 if (!isFunctionAlwaysEnabled(S.Context, FD)) { 10557 if (Complain) { 10558 if (InOverloadResolution) 10559 S.Diag(FD->getBeginLoc(), 10560 diag::note_addrof_ovl_candidate_disabled_by_enable_if_attr); 10561 else 10562 S.Diag(Loc, diag::err_addrof_function_disabled_by_enable_if_attr) << FD; 10563 } 10564 return false; 10565 } 10566 10567 if (FD->getTrailingRequiresClause()) { 10568 ConstraintSatisfaction Satisfaction; 10569 if (S.CheckFunctionConstraints(FD, Satisfaction, Loc)) 10570 return false; 10571 if (!Satisfaction.IsSatisfied) { 10572 if (Complain) { 10573 if (InOverloadResolution) { 10574 SmallString<128> TemplateArgString; 10575 if (FunctionTemplateDecl *FunTmpl = FD->getPrimaryTemplate()) { 10576 TemplateArgString += " "; 10577 TemplateArgString += S.getTemplateArgumentBindingsText( 10578 FunTmpl->getTemplateParameters(), 10579 *FD->getTemplateSpecializationArgs()); 10580 } 10581 10582 S.Diag(FD->getBeginLoc(), 10583 diag::note_ovl_candidate_unsatisfied_constraints) 10584 << TemplateArgString; 10585 } else 10586 S.Diag(Loc, diag::err_addrof_function_constraints_not_satisfied) 10587 << FD; 10588 S.DiagnoseUnsatisfiedConstraint(Satisfaction); 10589 } 10590 return false; 10591 } 10592 } 10593 10594 auto I = llvm::find_if(FD->parameters(), [](const ParmVarDecl *P) { 10595 return P->hasAttr<PassObjectSizeAttr>(); 10596 }); 10597 if (I == FD->param_end()) 10598 return true; 10599 10600 if (Complain) { 10601 // Add one to ParamNo because it's user-facing 10602 unsigned ParamNo = std::distance(FD->param_begin(), I) + 1; 10603 if (InOverloadResolution) 10604 S.Diag(FD->getLocation(), 10605 diag::note_ovl_candidate_has_pass_object_size_params) 10606 << ParamNo; 10607 else 10608 S.Diag(Loc, diag::err_address_of_function_with_pass_object_size_params) 10609 << FD << ParamNo; 10610 } 10611 return false; 10612 } 10613 10614 static bool checkAddressOfCandidateIsAvailable(Sema &S, 10615 const FunctionDecl *FD) { 10616 return checkAddressOfFunctionIsAvailable(S, FD, /*Complain=*/true, 10617 /*InOverloadResolution=*/true, 10618 /*Loc=*/SourceLocation()); 10619 } 10620 10621 bool Sema::checkAddressOfFunctionIsAvailable(const FunctionDecl *Function, 10622 bool Complain, 10623 SourceLocation Loc) { 10624 return ::checkAddressOfFunctionIsAvailable(*this, Function, Complain, 10625 /*InOverloadResolution=*/false, 10626 Loc); 10627 } 10628 10629 // Don't print candidates other than the one that matches the calling 10630 // convention of the call operator, since that is guaranteed to exist. 10631 static bool shouldSkipNotingLambdaConversionDecl(const FunctionDecl *Fn) { 10632 const auto *ConvD = dyn_cast<CXXConversionDecl>(Fn); 10633 10634 if (!ConvD) 10635 return false; 10636 const auto *RD = cast<CXXRecordDecl>(Fn->getParent()); 10637 if (!RD->isLambda()) 10638 return false; 10639 10640 CXXMethodDecl *CallOp = RD->getLambdaCallOperator(); 10641 CallingConv CallOpCC = 10642 CallOp->getType()->castAs<FunctionType>()->getCallConv(); 10643 QualType ConvRTy = ConvD->getType()->castAs<FunctionType>()->getReturnType(); 10644 CallingConv ConvToCC = 10645 ConvRTy->getPointeeType()->castAs<FunctionType>()->getCallConv(); 10646 10647 return ConvToCC != CallOpCC; 10648 } 10649 10650 // Notes the location of an overload candidate. 10651 void Sema::NoteOverloadCandidate(const NamedDecl *Found, const FunctionDecl *Fn, 10652 OverloadCandidateRewriteKind RewriteKind, 10653 QualType DestType, bool TakingAddress) { 10654 if (TakingAddress && !checkAddressOfCandidateIsAvailable(*this, Fn)) 10655 return; 10656 if (Fn->isMultiVersion() && Fn->hasAttr<TargetAttr>() && 10657 !Fn->getAttr<TargetAttr>()->isDefaultVersion()) 10658 return; 10659 if (Fn->isMultiVersion() && Fn->hasAttr<TargetVersionAttr>() && 10660 !Fn->getAttr<TargetVersionAttr>()->isDefaultVersion()) 10661 return; 10662 if (shouldSkipNotingLambdaConversionDecl(Fn)) 10663 return; 10664 10665 std::string FnDesc; 10666 std::pair<OverloadCandidateKind, OverloadCandidateSelect> KSPair = 10667 ClassifyOverloadCandidate(*this, Found, Fn, RewriteKind, FnDesc); 10668 PartialDiagnostic PD = PDiag(diag::note_ovl_candidate) 10669 << (unsigned)KSPair.first << (unsigned)KSPair.second 10670 << Fn << FnDesc; 10671 10672 HandleFunctionTypeMismatch(PD, Fn->getType(), DestType); 10673 Diag(Fn->getLocation(), PD); 10674 MaybeEmitInheritedConstructorNote(*this, Found); 10675 } 10676 10677 static void 10678 MaybeDiagnoseAmbiguousConstraints(Sema &S, ArrayRef<OverloadCandidate> Cands) { 10679 // Perhaps the ambiguity was caused by two atomic constraints that are 10680 // 'identical' but not equivalent: 10681 // 10682 // void foo() requires (sizeof(T) > 4) { } // #1 10683 // void foo() requires (sizeof(T) > 4) && T::value { } // #2 10684 // 10685 // The 'sizeof(T) > 4' constraints are seemingly equivalent and should cause 10686 // #2 to subsume #1, but these constraint are not considered equivalent 10687 // according to the subsumption rules because they are not the same 10688 // source-level construct. This behavior is quite confusing and we should try 10689 // to help the user figure out what happened. 10690 10691 SmallVector<const Expr *, 3> FirstAC, SecondAC; 10692 FunctionDecl *FirstCand = nullptr, *SecondCand = nullptr; 10693 for (auto I = Cands.begin(), E = Cands.end(); I != E; ++I) { 10694 if (!I->Function) 10695 continue; 10696 SmallVector<const Expr *, 3> AC; 10697 if (auto *Template = I->Function->getPrimaryTemplate()) 10698 Template->getAssociatedConstraints(AC); 10699 else 10700 I->Function->getAssociatedConstraints(AC); 10701 if (AC.empty()) 10702 continue; 10703 if (FirstCand == nullptr) { 10704 FirstCand = I->Function; 10705 FirstAC = AC; 10706 } else if (SecondCand == nullptr) { 10707 SecondCand = I->Function; 10708 SecondAC = AC; 10709 } else { 10710 // We have more than one pair of constrained functions - this check is 10711 // expensive and we'd rather not try to diagnose it. 10712 return; 10713 } 10714 } 10715 if (!SecondCand) 10716 return; 10717 // The diagnostic can only happen if there are associated constraints on 10718 // both sides (there needs to be some identical atomic constraint). 10719 if (S.MaybeEmitAmbiguousAtomicConstraintsDiagnostic(FirstCand, FirstAC, 10720 SecondCand, SecondAC)) 10721 // Just show the user one diagnostic, they'll probably figure it out 10722 // from here. 10723 return; 10724 } 10725 10726 // Notes the location of all overload candidates designated through 10727 // OverloadedExpr 10728 void Sema::NoteAllOverloadCandidates(Expr *OverloadedExpr, QualType DestType, 10729 bool TakingAddress) { 10730 assert(OverloadedExpr->getType() == Context.OverloadTy); 10731 10732 OverloadExpr::FindResult Ovl = OverloadExpr::find(OverloadedExpr); 10733 OverloadExpr *OvlExpr = Ovl.Expression; 10734 10735 for (UnresolvedSetIterator I = OvlExpr->decls_begin(), 10736 IEnd = OvlExpr->decls_end(); 10737 I != IEnd; ++I) { 10738 if (FunctionTemplateDecl *FunTmpl = 10739 dyn_cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl()) ) { 10740 NoteOverloadCandidate(*I, FunTmpl->getTemplatedDecl(), CRK_None, DestType, 10741 TakingAddress); 10742 } else if (FunctionDecl *Fun 10743 = dyn_cast<FunctionDecl>((*I)->getUnderlyingDecl()) ) { 10744 NoteOverloadCandidate(*I, Fun, CRK_None, DestType, TakingAddress); 10745 } 10746 } 10747 } 10748 10749 /// Diagnoses an ambiguous conversion. The partial diagnostic is the 10750 /// "lead" diagnostic; it will be given two arguments, the source and 10751 /// target types of the conversion. 10752 void ImplicitConversionSequence::DiagnoseAmbiguousConversion( 10753 Sema &S, 10754 SourceLocation CaretLoc, 10755 const PartialDiagnostic &PDiag) const { 10756 S.Diag(CaretLoc, PDiag) 10757 << Ambiguous.getFromType() << Ambiguous.getToType(); 10758 unsigned CandsShown = 0; 10759 AmbiguousConversionSequence::const_iterator I, E; 10760 for (I = Ambiguous.begin(), E = Ambiguous.end(); I != E; ++I) { 10761 if (CandsShown >= S.Diags.getNumOverloadCandidatesToShow()) 10762 break; 10763 ++CandsShown; 10764 S.NoteOverloadCandidate(I->first, I->second); 10765 } 10766 S.Diags.overloadCandidatesShown(CandsShown); 10767 if (I != E) 10768 S.Diag(SourceLocation(), diag::note_ovl_too_many_candidates) << int(E - I); 10769 } 10770 10771 static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, 10772 unsigned I, bool TakingCandidateAddress) { 10773 const ImplicitConversionSequence &Conv = Cand->Conversions[I]; 10774 assert(Conv.isBad()); 10775 assert(Cand->Function && "for now, candidate must be a function"); 10776 FunctionDecl *Fn = Cand->Function; 10777 10778 // There's a conversion slot for the object argument if this is a 10779 // non-constructor method. Note that 'I' corresponds the 10780 // conversion-slot index. 10781 bool isObjectArgument = false; 10782 if (isa<CXXMethodDecl>(Fn) && !isa<CXXConstructorDecl>(Fn)) { 10783 if (I == 0) 10784 isObjectArgument = true; 10785 else 10786 I--; 10787 } 10788 10789 std::string FnDesc; 10790 std::pair<OverloadCandidateKind, OverloadCandidateSelect> FnKindPair = 10791 ClassifyOverloadCandidate(S, Cand->FoundDecl, Fn, Cand->getRewriteKind(), 10792 FnDesc); 10793 10794 Expr *FromExpr = Conv.Bad.FromExpr; 10795 QualType FromTy = Conv.Bad.getFromType(); 10796 QualType ToTy = Conv.Bad.getToType(); 10797 SourceRange ToParamRange = 10798 !isObjectArgument ? Fn->getParamDecl(I)->getSourceRange() : SourceRange(); 10799 10800 if (FromTy == S.Context.OverloadTy) { 10801 assert(FromExpr && "overload set argument came from implicit argument?"); 10802 Expr *E = FromExpr->IgnoreParens(); 10803 if (isa<UnaryOperator>(E)) 10804 E = cast<UnaryOperator>(E)->getSubExpr()->IgnoreParens(); 10805 DeclarationName Name = cast<OverloadExpr>(E)->getName(); 10806 10807 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_overload) 10808 << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc 10809 << ToParamRange << ToTy << Name << I + 1; 10810 MaybeEmitInheritedConstructorNote(S, Cand->FoundDecl); 10811 return; 10812 } 10813 10814 // Do some hand-waving analysis to see if the non-viability is due 10815 // to a qualifier mismatch. 10816 CanQualType CFromTy = S.Context.getCanonicalType(FromTy); 10817 CanQualType CToTy = S.Context.getCanonicalType(ToTy); 10818 if (CanQual<ReferenceType> RT = CToTy->getAs<ReferenceType>()) 10819 CToTy = RT->getPointeeType(); 10820 else { 10821 // TODO: detect and diagnose the full richness of const mismatches. 10822 if (CanQual<PointerType> FromPT = CFromTy->getAs<PointerType>()) 10823 if (CanQual<PointerType> ToPT = CToTy->getAs<PointerType>()) { 10824 CFromTy = FromPT->getPointeeType(); 10825 CToTy = ToPT->getPointeeType(); 10826 } 10827 } 10828 10829 if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && 10830 !CToTy.isAtLeastAsQualifiedAs(CFromTy)) { 10831 Qualifiers FromQs = CFromTy.getQualifiers(); 10832 Qualifiers ToQs = CToTy.getQualifiers(); 10833 10834 if (FromQs.getAddressSpace() != ToQs.getAddressSpace()) { 10835 if (isObjectArgument) 10836 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_addrspace_this) 10837 << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second 10838 << FnDesc << FromQs.getAddressSpace() << ToQs.getAddressSpace(); 10839 else 10840 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_addrspace) 10841 << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second 10842 << FnDesc << ToParamRange << FromQs.getAddressSpace() 10843 << ToQs.getAddressSpace() << ToTy->isReferenceType() << I + 1; 10844 MaybeEmitInheritedConstructorNote(S, Cand->FoundDecl); 10845 return; 10846 } 10847 10848 if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) { 10849 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_ownership) 10850 << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc 10851 << ToParamRange << FromTy << FromQs.getObjCLifetime() 10852 << ToQs.getObjCLifetime() << (unsigned)isObjectArgument << I + 1; 10853 MaybeEmitInheritedConstructorNote(S, Cand->FoundDecl); 10854 return; 10855 } 10856 10857 if (FromQs.getObjCGCAttr() != ToQs.getObjCGCAttr()) { 10858 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_gc) 10859 << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc 10860 << ToParamRange << FromTy << FromQs.getObjCGCAttr() 10861 << ToQs.getObjCGCAttr() << (unsigned)isObjectArgument << I + 1; 10862 MaybeEmitInheritedConstructorNote(S, Cand->FoundDecl); 10863 return; 10864 } 10865 10866 unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers(); 10867 assert(CVR && "expected qualifiers mismatch"); 10868 10869 if (isObjectArgument) { 10870 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr_this) 10871 << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc 10872 << FromTy << (CVR - 1); 10873 } else { 10874 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr) 10875 << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc 10876 << ToParamRange << FromTy << (CVR - 1) << I + 1; 10877 } 10878 MaybeEmitInheritedConstructorNote(S, Cand->FoundDecl); 10879 return; 10880 } 10881 10882 if (Conv.Bad.Kind == BadConversionSequence::lvalue_ref_to_rvalue || 10883 Conv.Bad.Kind == BadConversionSequence::rvalue_ref_to_lvalue) { 10884 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_value_category) 10885 << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc 10886 << (unsigned)isObjectArgument << I + 1 10887 << (Conv.Bad.Kind == BadConversionSequence::rvalue_ref_to_lvalue) 10888 << ToParamRange; 10889 MaybeEmitInheritedConstructorNote(S, Cand->FoundDecl); 10890 return; 10891 } 10892 10893 // Special diagnostic for failure to convert an initializer list, since 10894 // telling the user that it has type void is not useful. 10895 if (FromExpr && isa<InitListExpr>(FromExpr)) { 10896 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_list_argument) 10897 << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc 10898 << ToParamRange << FromTy << ToTy << (unsigned)isObjectArgument << I + 1 10899 << (Conv.Bad.Kind == BadConversionSequence::too_few_initializers ? 1 10900 : Conv.Bad.Kind == BadConversionSequence::too_many_initializers 10901 ? 2 10902 : 0); 10903 MaybeEmitInheritedConstructorNote(S, Cand->FoundDecl); 10904 return; 10905 } 10906 10907 // Diagnose references or pointers to incomplete types differently, 10908 // since it's far from impossible that the incompleteness triggered 10909 // the failure. 10910 QualType TempFromTy = FromTy.getNonReferenceType(); 10911 if (const PointerType *PTy = TempFromTy->getAs<PointerType>()) 10912 TempFromTy = PTy->getPointeeType(); 10913 if (TempFromTy->isIncompleteType()) { 10914 // Emit the generic diagnostic and, optionally, add the hints to it. 10915 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_conv_incomplete) 10916 << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc 10917 << ToParamRange << FromTy << ToTy << (unsigned)isObjectArgument << I + 1 10918 << (unsigned)(Cand->Fix.Kind); 10919 10920 MaybeEmitInheritedConstructorNote(S, Cand->FoundDecl); 10921 return; 10922 } 10923 10924 // Diagnose base -> derived pointer conversions. 10925 unsigned BaseToDerivedConversion = 0; 10926 if (const PointerType *FromPtrTy = FromTy->getAs<PointerType>()) { 10927 if (const PointerType *ToPtrTy = ToTy->getAs<PointerType>()) { 10928 if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs( 10929 FromPtrTy->getPointeeType()) && 10930 !FromPtrTy->getPointeeType()->isIncompleteType() && 10931 !ToPtrTy->getPointeeType()->isIncompleteType() && 10932 S.IsDerivedFrom(SourceLocation(), ToPtrTy->getPointeeType(), 10933 FromPtrTy->getPointeeType())) 10934 BaseToDerivedConversion = 1; 10935 } 10936 } else if (const ObjCObjectPointerType *FromPtrTy 10937 = FromTy->getAs<ObjCObjectPointerType>()) { 10938 if (const ObjCObjectPointerType *ToPtrTy 10939 = ToTy->getAs<ObjCObjectPointerType>()) 10940 if (const ObjCInterfaceDecl *FromIface = FromPtrTy->getInterfaceDecl()) 10941 if (const ObjCInterfaceDecl *ToIface = ToPtrTy->getInterfaceDecl()) 10942 if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs( 10943 FromPtrTy->getPointeeType()) && 10944 FromIface->isSuperClassOf(ToIface)) 10945 BaseToDerivedConversion = 2; 10946 } else if (const ReferenceType *ToRefTy = ToTy->getAs<ReferenceType>()) { 10947 if (ToRefTy->getPointeeType().isAtLeastAsQualifiedAs(FromTy) && 10948 !FromTy->isIncompleteType() && 10949 !ToRefTy->getPointeeType()->isIncompleteType() && 10950 S.IsDerivedFrom(SourceLocation(), ToRefTy->getPointeeType(), FromTy)) { 10951 BaseToDerivedConversion = 3; 10952 } 10953 } 10954 10955 if (BaseToDerivedConversion) { 10956 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_base_to_derived_conv) 10957 << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc 10958 << ToParamRange << (BaseToDerivedConversion - 1) << FromTy << ToTy 10959 << I + 1; 10960 MaybeEmitInheritedConstructorNote(S, Cand->FoundDecl); 10961 return; 10962 } 10963 10964 if (isa<ObjCObjectPointerType>(CFromTy) && 10965 isa<PointerType>(CToTy)) { 10966 Qualifiers FromQs = CFromTy.getQualifiers(); 10967 Qualifiers ToQs = CToTy.getQualifiers(); 10968 if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) { 10969 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_arc_conv) 10970 << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc 10971 << ToParamRange << FromTy << ToTy << (unsigned)isObjectArgument 10972 << I + 1; 10973 MaybeEmitInheritedConstructorNote(S, Cand->FoundDecl); 10974 return; 10975 } 10976 } 10977 10978 if (TakingCandidateAddress && 10979 !checkAddressOfCandidateIsAvailable(S, Cand->Function)) 10980 return; 10981 10982 // Emit the generic diagnostic and, optionally, add the hints to it. 10983 PartialDiagnostic FDiag = S.PDiag(diag::note_ovl_candidate_bad_conv); 10984 FDiag << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc 10985 << ToParamRange << FromTy << ToTy << (unsigned)isObjectArgument << I + 1 10986 << (unsigned)(Cand->Fix.Kind); 10987 10988 // Check that location of Fn is not in system header. 10989 if (!S.SourceMgr.isInSystemHeader(Fn->getLocation())) { 10990 // If we can fix the conversion, suggest the FixIts. 10991 for (const FixItHint &HI : Cand->Fix.Hints) 10992 FDiag << HI; 10993 } 10994 10995 S.Diag(Fn->getLocation(), FDiag); 10996 10997 MaybeEmitInheritedConstructorNote(S, Cand->FoundDecl); 10998 } 10999 11000 /// Additional arity mismatch diagnosis specific to a function overload 11001 /// candidates. This is not covered by the more general DiagnoseArityMismatch() 11002 /// over a candidate in any candidate set. 11003 static bool CheckArityMismatch(Sema &S, OverloadCandidate *Cand, 11004 unsigned NumArgs) { 11005 FunctionDecl *Fn = Cand->Function; 11006 unsigned MinParams = Fn->getMinRequiredArguments(); 11007 11008 // With invalid overloaded operators, it's possible that we think we 11009 // have an arity mismatch when in fact it looks like we have the 11010 // right number of arguments, because only overloaded operators have 11011 // the weird behavior of overloading member and non-member functions. 11012 // Just don't report anything. 11013 if (Fn->isInvalidDecl() && 11014 Fn->getDeclName().getNameKind() == DeclarationName::CXXOperatorName) 11015 return true; 11016 11017 if (NumArgs < MinParams) { 11018 assert((Cand->FailureKind == ovl_fail_too_few_arguments) || 11019 (Cand->FailureKind == ovl_fail_bad_deduction && 11020 Cand->DeductionFailure.Result == Sema::TDK_TooFewArguments)); 11021 } else { 11022 assert((Cand->FailureKind == ovl_fail_too_many_arguments) || 11023 (Cand->FailureKind == ovl_fail_bad_deduction && 11024 Cand->DeductionFailure.Result == Sema::TDK_TooManyArguments)); 11025 } 11026 11027 return false; 11028 } 11029 11030 /// General arity mismatch diagnosis over a candidate in a candidate set. 11031 static void DiagnoseArityMismatch(Sema &S, NamedDecl *Found, Decl *D, 11032 unsigned NumFormalArgs) { 11033 assert(isa<FunctionDecl>(D) && 11034 "The templated declaration should at least be a function" 11035 " when diagnosing bad template argument deduction due to too many" 11036 " or too few arguments"); 11037 11038 FunctionDecl *Fn = cast<FunctionDecl>(D); 11039 11040 // TODO: treat calls to a missing default constructor as a special case 11041 const auto *FnTy = Fn->getType()->castAs<FunctionProtoType>(); 11042 unsigned MinParams = Fn->getMinRequiredArguments(); 11043 11044 // at least / at most / exactly 11045 unsigned mode, modeCount; 11046 if (NumFormalArgs < MinParams) { 11047 if (MinParams != FnTy->getNumParams() || FnTy->isVariadic() || 11048 FnTy->isTemplateVariadic()) 11049 mode = 0; // "at least" 11050 else 11051 mode = 2; // "exactly" 11052 modeCount = MinParams; 11053 } else { 11054 if (MinParams != FnTy->getNumParams()) 11055 mode = 1; // "at most" 11056 else 11057 mode = 2; // "exactly" 11058 modeCount = FnTy->getNumParams(); 11059 } 11060 11061 std::string Description; 11062 std::pair<OverloadCandidateKind, OverloadCandidateSelect> FnKindPair = 11063 ClassifyOverloadCandidate(S, Found, Fn, CRK_None, Description); 11064 11065 if (modeCount == 1 && Fn->getParamDecl(0)->getDeclName()) 11066 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity_one) 11067 << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second 11068 << Description << mode << Fn->getParamDecl(0) << NumFormalArgs 11069 << Fn->getParametersSourceRange(); 11070 else 11071 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity) 11072 << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second 11073 << Description << mode << modeCount << NumFormalArgs 11074 << Fn->getParametersSourceRange(); 11075 11076 MaybeEmitInheritedConstructorNote(S, Found); 11077 } 11078 11079 /// Arity mismatch diagnosis specific to a function overload candidate. 11080 static void DiagnoseArityMismatch(Sema &S, OverloadCandidate *Cand, 11081 unsigned NumFormalArgs) { 11082 if (!CheckArityMismatch(S, Cand, NumFormalArgs)) 11083 DiagnoseArityMismatch(S, Cand->FoundDecl, Cand->Function, NumFormalArgs); 11084 } 11085 11086 static TemplateDecl *getDescribedTemplate(Decl *Templated) { 11087 if (TemplateDecl *TD = Templated->getDescribedTemplate()) 11088 return TD; 11089 llvm_unreachable("Unsupported: Getting the described template declaration" 11090 " for bad deduction diagnosis"); 11091 } 11092 11093 /// Diagnose a failed template-argument deduction. 11094 static void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, 11095 DeductionFailureInfo &DeductionFailure, 11096 unsigned NumArgs, 11097 bool TakingCandidateAddress) { 11098 TemplateParameter Param = DeductionFailure.getTemplateParameter(); 11099 NamedDecl *ParamD; 11100 (ParamD = Param.dyn_cast<TemplateTypeParmDecl*>()) || 11101 (ParamD = Param.dyn_cast<NonTypeTemplateParmDecl*>()) || 11102 (ParamD = Param.dyn_cast<TemplateTemplateParmDecl*>()); 11103 switch (DeductionFailure.Result) { 11104 case Sema::TDK_Success: 11105 llvm_unreachable("TDK_success while diagnosing bad deduction"); 11106 11107 case Sema::TDK_Incomplete: { 11108 assert(ParamD && "no parameter found for incomplete deduction result"); 11109 S.Diag(Templated->getLocation(), 11110 diag::note_ovl_candidate_incomplete_deduction) 11111 << ParamD->getDeclName(); 11112 MaybeEmitInheritedConstructorNote(S, Found); 11113 return; 11114 } 11115 11116 case Sema::TDK_IncompletePack: { 11117 assert(ParamD && "no parameter found for incomplete deduction result"); 11118 S.Diag(Templated->getLocation(), 11119 diag::note_ovl_candidate_incomplete_deduction_pack) 11120 << ParamD->getDeclName() 11121 << (DeductionFailure.getFirstArg()->pack_size() + 1) 11122 << *DeductionFailure.getFirstArg(); 11123 MaybeEmitInheritedConstructorNote(S, Found); 11124 return; 11125 } 11126 11127 case Sema::TDK_Underqualified: { 11128 assert(ParamD && "no parameter found for bad qualifiers deduction result"); 11129 TemplateTypeParmDecl *TParam = cast<TemplateTypeParmDecl>(ParamD); 11130 11131 QualType Param = DeductionFailure.getFirstArg()->getAsType(); 11132 11133 // Param will have been canonicalized, but it should just be a 11134 // qualified version of ParamD, so move the qualifiers to that. 11135 QualifierCollector Qs; 11136 Qs.strip(Param); 11137 QualType NonCanonParam = Qs.apply(S.Context, TParam->getTypeForDecl()); 11138 assert(S.Context.hasSameType(Param, NonCanonParam)); 11139 11140 // Arg has also been canonicalized, but there's nothing we can do 11141 // about that. It also doesn't matter as much, because it won't 11142 // have any template parameters in it (because deduction isn't 11143 // done on dependent types). 11144 QualType Arg = DeductionFailure.getSecondArg()->getAsType(); 11145 11146 S.Diag(Templated->getLocation(), diag::note_ovl_candidate_underqualified) 11147 << ParamD->getDeclName() << Arg << NonCanonParam; 11148 MaybeEmitInheritedConstructorNote(S, Found); 11149 return; 11150 } 11151 11152 case Sema::TDK_Inconsistent: { 11153 assert(ParamD && "no parameter found for inconsistent deduction result"); 11154 int which = 0; 11155 if (isa<TemplateTypeParmDecl>(ParamD)) 11156 which = 0; 11157 else if (isa<NonTypeTemplateParmDecl>(ParamD)) { 11158 // Deduction might have failed because we deduced arguments of two 11159 // different types for a non-type template parameter. 11160 // FIXME: Use a different TDK value for this. 11161 QualType T1 = 11162 DeductionFailure.getFirstArg()->getNonTypeTemplateArgumentType(); 11163 QualType T2 = 11164 DeductionFailure.getSecondArg()->getNonTypeTemplateArgumentType(); 11165 if (!T1.isNull() && !T2.isNull() && !S.Context.hasSameType(T1, T2)) { 11166 S.Diag(Templated->getLocation(), 11167 diag::note_ovl_candidate_inconsistent_deduction_types) 11168 << ParamD->getDeclName() << *DeductionFailure.getFirstArg() << T1 11169 << *DeductionFailure.getSecondArg() << T2; 11170 MaybeEmitInheritedConstructorNote(S, Found); 11171 return; 11172 } 11173 11174 which = 1; 11175 } else { 11176 which = 2; 11177 } 11178 11179 // Tweak the diagnostic if the problem is that we deduced packs of 11180 // different arities. We'll print the actual packs anyway in case that 11181 // includes additional useful information. 11182 if (DeductionFailure.getFirstArg()->getKind() == TemplateArgument::Pack && 11183 DeductionFailure.getSecondArg()->getKind() == TemplateArgument::Pack && 11184 DeductionFailure.getFirstArg()->pack_size() != 11185 DeductionFailure.getSecondArg()->pack_size()) { 11186 which = 3; 11187 } 11188 11189 S.Diag(Templated->getLocation(), 11190 diag::note_ovl_candidate_inconsistent_deduction) 11191 << which << ParamD->getDeclName() << *DeductionFailure.getFirstArg() 11192 << *DeductionFailure.getSecondArg(); 11193 MaybeEmitInheritedConstructorNote(S, Found); 11194 return; 11195 } 11196 11197 case Sema::TDK_InvalidExplicitArguments: 11198 assert(ParamD && "no parameter found for invalid explicit arguments"); 11199 if (ParamD->getDeclName()) 11200 S.Diag(Templated->getLocation(), 11201 diag::note_ovl_candidate_explicit_arg_mismatch_named) 11202 << ParamD->getDeclName(); 11203 else { 11204 int index = 0; 11205 if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(ParamD)) 11206 index = TTP->getIndex(); 11207 else if (NonTypeTemplateParmDecl *NTTP 11208 = dyn_cast<NonTypeTemplateParmDecl>(ParamD)) 11209 index = NTTP->getIndex(); 11210 else 11211 index = cast<TemplateTemplateParmDecl>(ParamD)->getIndex(); 11212 S.Diag(Templated->getLocation(), 11213 diag::note_ovl_candidate_explicit_arg_mismatch_unnamed) 11214 << (index + 1); 11215 } 11216 MaybeEmitInheritedConstructorNote(S, Found); 11217 return; 11218 11219 case Sema::TDK_ConstraintsNotSatisfied: { 11220 // Format the template argument list into the argument string. 11221 SmallString<128> TemplateArgString; 11222 TemplateArgumentList *Args = DeductionFailure.getTemplateArgumentList(); 11223 TemplateArgString = " "; 11224 TemplateArgString += S.getTemplateArgumentBindingsText( 11225 getDescribedTemplate(Templated)->getTemplateParameters(), *Args); 11226 if (TemplateArgString.size() == 1) 11227 TemplateArgString.clear(); 11228 S.Diag(Templated->getLocation(), 11229 diag::note_ovl_candidate_unsatisfied_constraints) 11230 << TemplateArgString; 11231 11232 S.DiagnoseUnsatisfiedConstraint( 11233 static_cast<CNSInfo*>(DeductionFailure.Data)->Satisfaction); 11234 return; 11235 } 11236 case Sema::TDK_TooManyArguments: 11237 case Sema::TDK_TooFewArguments: 11238 DiagnoseArityMismatch(S, Found, Templated, NumArgs); 11239 return; 11240 11241 case Sema::TDK_InstantiationDepth: 11242 S.Diag(Templated->getLocation(), 11243 diag::note_ovl_candidate_instantiation_depth); 11244 MaybeEmitInheritedConstructorNote(S, Found); 11245 return; 11246 11247 case Sema::TDK_SubstitutionFailure: { 11248 // Format the template argument list into the argument string. 11249 SmallString<128> TemplateArgString; 11250 if (TemplateArgumentList *Args = 11251 DeductionFailure.getTemplateArgumentList()) { 11252 TemplateArgString = " "; 11253 TemplateArgString += S.getTemplateArgumentBindingsText( 11254 getDescribedTemplate(Templated)->getTemplateParameters(), *Args); 11255 if (TemplateArgString.size() == 1) 11256 TemplateArgString.clear(); 11257 } 11258 11259 // If this candidate was disabled by enable_if, say so. 11260 PartialDiagnosticAt *PDiag = DeductionFailure.getSFINAEDiagnostic(); 11261 if (PDiag && PDiag->second.getDiagID() == 11262 diag::err_typename_nested_not_found_enable_if) { 11263 // FIXME: Use the source range of the condition, and the fully-qualified 11264 // name of the enable_if template. These are both present in PDiag. 11265 S.Diag(PDiag->first, diag::note_ovl_candidate_disabled_by_enable_if) 11266 << "'enable_if'" << TemplateArgString; 11267 return; 11268 } 11269 11270 // We found a specific requirement that disabled the enable_if. 11271 if (PDiag && PDiag->second.getDiagID() == 11272 diag::err_typename_nested_not_found_requirement) { 11273 S.Diag(Templated->getLocation(), 11274 diag::note_ovl_candidate_disabled_by_requirement) 11275 << PDiag->second.getStringArg(0) << TemplateArgString; 11276 return; 11277 } 11278 11279 // Format the SFINAE diagnostic into the argument string. 11280 // FIXME: Add a general mechanism to include a PartialDiagnostic *'s 11281 // formatted message in another diagnostic. 11282 SmallString<128> SFINAEArgString; 11283 SourceRange R; 11284 if (PDiag) { 11285 SFINAEArgString = ": "; 11286 R = SourceRange(PDiag->first, PDiag->first); 11287 PDiag->second.EmitToString(S.getDiagnostics(), SFINAEArgString); 11288 } 11289 11290 S.Diag(Templated->getLocation(), 11291 diag::note_ovl_candidate_substitution_failure) 11292 << TemplateArgString << SFINAEArgString << R; 11293 MaybeEmitInheritedConstructorNote(S, Found); 11294 return; 11295 } 11296 11297 case Sema::TDK_DeducedMismatch: 11298 case Sema::TDK_DeducedMismatchNested: { 11299 // Format the template argument list into the argument string. 11300 SmallString<128> TemplateArgString; 11301 if (TemplateArgumentList *Args = 11302 DeductionFailure.getTemplateArgumentList()) { 11303 TemplateArgString = " "; 11304 TemplateArgString += S.getTemplateArgumentBindingsText( 11305 getDescribedTemplate(Templated)->getTemplateParameters(), *Args); 11306 if (TemplateArgString.size() == 1) 11307 TemplateArgString.clear(); 11308 } 11309 11310 S.Diag(Templated->getLocation(), diag::note_ovl_candidate_deduced_mismatch) 11311 << (*DeductionFailure.getCallArgIndex() + 1) 11312 << *DeductionFailure.getFirstArg() << *DeductionFailure.getSecondArg() 11313 << TemplateArgString 11314 << (DeductionFailure.Result == Sema::TDK_DeducedMismatchNested); 11315 break; 11316 } 11317 11318 case Sema::TDK_NonDeducedMismatch: { 11319 // FIXME: Provide a source location to indicate what we couldn't match. 11320 TemplateArgument FirstTA = *DeductionFailure.getFirstArg(); 11321 TemplateArgument SecondTA = *DeductionFailure.getSecondArg(); 11322 if (FirstTA.getKind() == TemplateArgument::Template && 11323 SecondTA.getKind() == TemplateArgument::Template) { 11324 TemplateName FirstTN = FirstTA.getAsTemplate(); 11325 TemplateName SecondTN = SecondTA.getAsTemplate(); 11326 if (FirstTN.getKind() == TemplateName::Template && 11327 SecondTN.getKind() == TemplateName::Template) { 11328 if (FirstTN.getAsTemplateDecl()->getName() == 11329 SecondTN.getAsTemplateDecl()->getName()) { 11330 // FIXME: This fixes a bad diagnostic where both templates are named 11331 // the same. This particular case is a bit difficult since: 11332 // 1) It is passed as a string to the diagnostic printer. 11333 // 2) The diagnostic printer only attempts to find a better 11334 // name for types, not decls. 11335 // Ideally, this should folded into the diagnostic printer. 11336 S.Diag(Templated->getLocation(), 11337 diag::note_ovl_candidate_non_deduced_mismatch_qualified) 11338 << FirstTN.getAsTemplateDecl() << SecondTN.getAsTemplateDecl(); 11339 return; 11340 } 11341 } 11342 } 11343 11344 if (TakingCandidateAddress && isa<FunctionDecl>(Templated) && 11345 !checkAddressOfCandidateIsAvailable(S, cast<FunctionDecl>(Templated))) 11346 return; 11347 11348 // FIXME: For generic lambda parameters, check if the function is a lambda 11349 // call operator, and if so, emit a prettier and more informative 11350 // diagnostic that mentions 'auto' and lambda in addition to 11351 // (or instead of?) the canonical template type parameters. 11352 S.Diag(Templated->getLocation(), 11353 diag::note_ovl_candidate_non_deduced_mismatch) 11354 << FirstTA << SecondTA; 11355 return; 11356 } 11357 // TODO: diagnose these individually, then kill off 11358 // note_ovl_candidate_bad_deduction, which is uselessly vague. 11359 case Sema::TDK_MiscellaneousDeductionFailure: 11360 S.Diag(Templated->getLocation(), diag::note_ovl_candidate_bad_deduction); 11361 MaybeEmitInheritedConstructorNote(S, Found); 11362 return; 11363 case Sema::TDK_CUDATargetMismatch: 11364 S.Diag(Templated->getLocation(), 11365 diag::note_cuda_ovl_candidate_target_mismatch); 11366 return; 11367 } 11368 } 11369 11370 /// Diagnose a failed template-argument deduction, for function calls. 11371 static void DiagnoseBadDeduction(Sema &S, OverloadCandidate *Cand, 11372 unsigned NumArgs, 11373 bool TakingCandidateAddress) { 11374 unsigned TDK = Cand->DeductionFailure.Result; 11375 if (TDK == Sema::TDK_TooFewArguments || TDK == Sema::TDK_TooManyArguments) { 11376 if (CheckArityMismatch(S, Cand, NumArgs)) 11377 return; 11378 } 11379 DiagnoseBadDeduction(S, Cand->FoundDecl, Cand->Function, // pattern 11380 Cand->DeductionFailure, NumArgs, TakingCandidateAddress); 11381 } 11382 11383 /// CUDA: diagnose an invalid call across targets. 11384 static void DiagnoseBadTarget(Sema &S, OverloadCandidate *Cand) { 11385 FunctionDecl *Caller = S.getCurFunctionDecl(/*AllowLambda=*/true); 11386 FunctionDecl *Callee = Cand->Function; 11387 11388 Sema::CUDAFunctionTarget CallerTarget = S.IdentifyCUDATarget(Caller), 11389 CalleeTarget = S.IdentifyCUDATarget(Callee); 11390 11391 std::string FnDesc; 11392 std::pair<OverloadCandidateKind, OverloadCandidateSelect> FnKindPair = 11393 ClassifyOverloadCandidate(S, Cand->FoundDecl, Callee, 11394 Cand->getRewriteKind(), FnDesc); 11395 11396 S.Diag(Callee->getLocation(), diag::note_ovl_candidate_bad_target) 11397 << (unsigned)FnKindPair.first << (unsigned)ocs_non_template 11398 << FnDesc /* Ignored */ 11399 << CalleeTarget << CallerTarget; 11400 11401 // This could be an implicit constructor for which we could not infer the 11402 // target due to a collsion. Diagnose that case. 11403 CXXMethodDecl *Meth = dyn_cast<CXXMethodDecl>(Callee); 11404 if (Meth != nullptr && Meth->isImplicit()) { 11405 CXXRecordDecl *ParentClass = Meth->getParent(); 11406 Sema::CXXSpecialMember CSM; 11407 11408 switch (FnKindPair.first) { 11409 default: 11410 return; 11411 case oc_implicit_default_constructor: 11412 CSM = Sema::CXXDefaultConstructor; 11413 break; 11414 case oc_implicit_copy_constructor: 11415 CSM = Sema::CXXCopyConstructor; 11416 break; 11417 case oc_implicit_move_constructor: 11418 CSM = Sema::CXXMoveConstructor; 11419 break; 11420 case oc_implicit_copy_assignment: 11421 CSM = Sema::CXXCopyAssignment; 11422 break; 11423 case oc_implicit_move_assignment: 11424 CSM = Sema::CXXMoveAssignment; 11425 break; 11426 }; 11427 11428 bool ConstRHS = false; 11429 if (Meth->getNumParams()) { 11430 if (const ReferenceType *RT = 11431 Meth->getParamDecl(0)->getType()->getAs<ReferenceType>()) { 11432 ConstRHS = RT->getPointeeType().isConstQualified(); 11433 } 11434 } 11435 11436 S.inferCUDATargetForImplicitSpecialMember(ParentClass, CSM, Meth, 11437 /* ConstRHS */ ConstRHS, 11438 /* Diagnose */ true); 11439 } 11440 } 11441 11442 static void DiagnoseFailedEnableIfAttr(Sema &S, OverloadCandidate *Cand) { 11443 FunctionDecl *Callee = Cand->Function; 11444 EnableIfAttr *Attr = static_cast<EnableIfAttr*>(Cand->DeductionFailure.Data); 11445 11446 S.Diag(Callee->getLocation(), 11447 diag::note_ovl_candidate_disabled_by_function_cond_attr) 11448 << Attr->getCond()->getSourceRange() << Attr->getMessage(); 11449 } 11450 11451 static void DiagnoseFailedExplicitSpec(Sema &S, OverloadCandidate *Cand) { 11452 ExplicitSpecifier ES = ExplicitSpecifier::getFromDecl(Cand->Function); 11453 assert(ES.isExplicit() && "not an explicit candidate"); 11454 11455 unsigned Kind; 11456 switch (Cand->Function->getDeclKind()) { 11457 case Decl::Kind::CXXConstructor: 11458 Kind = 0; 11459 break; 11460 case Decl::Kind::CXXConversion: 11461 Kind = 1; 11462 break; 11463 case Decl::Kind::CXXDeductionGuide: 11464 Kind = Cand->Function->isImplicit() ? 0 : 2; 11465 break; 11466 default: 11467 llvm_unreachable("invalid Decl"); 11468 } 11469 11470 // Note the location of the first (in-class) declaration; a redeclaration 11471 // (particularly an out-of-class definition) will typically lack the 11472 // 'explicit' specifier. 11473 // FIXME: This is probably a good thing to do for all 'candidate' notes. 11474 FunctionDecl *First = Cand->Function->getFirstDecl(); 11475 if (FunctionDecl *Pattern = First->getTemplateInstantiationPattern()) 11476 First = Pattern->getFirstDecl(); 11477 11478 S.Diag(First->getLocation(), 11479 diag::note_ovl_candidate_explicit) 11480 << Kind << (ES.getExpr() ? 1 : 0) 11481 << (ES.getExpr() ? ES.getExpr()->getSourceRange() : SourceRange()); 11482 } 11483 11484 /// Generates a 'note' diagnostic for an overload candidate. We've 11485 /// already generated a primary error at the call site. 11486 /// 11487 /// It really does need to be a single diagnostic with its caret 11488 /// pointed at the candidate declaration. Yes, this creates some 11489 /// major challenges of technical writing. Yes, this makes pointing 11490 /// out problems with specific arguments quite awkward. It's still 11491 /// better than generating twenty screens of text for every failed 11492 /// overload. 11493 /// 11494 /// It would be great to be able to express per-candidate problems 11495 /// more richly for those diagnostic clients that cared, but we'd 11496 /// still have to be just as careful with the default diagnostics. 11497 /// \param CtorDestAS Addr space of object being constructed (for ctor 11498 /// candidates only). 11499 static void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand, 11500 unsigned NumArgs, 11501 bool TakingCandidateAddress, 11502 LangAS CtorDestAS = LangAS::Default) { 11503 FunctionDecl *Fn = Cand->Function; 11504 if (shouldSkipNotingLambdaConversionDecl(Fn)) 11505 return; 11506 11507 // There is no physical candidate declaration to point to for OpenCL builtins. 11508 // Except for failed conversions, the notes are identical for each candidate, 11509 // so do not generate such notes. 11510 if (S.getLangOpts().OpenCL && Fn->isImplicit() && 11511 Cand->FailureKind != ovl_fail_bad_conversion) 11512 return; 11513 11514 // Note deleted candidates, but only if they're viable. 11515 if (Cand->Viable) { 11516 if (Fn->isDeleted()) { 11517 std::string FnDesc; 11518 std::pair<OverloadCandidateKind, OverloadCandidateSelect> FnKindPair = 11519 ClassifyOverloadCandidate(S, Cand->FoundDecl, Fn, 11520 Cand->getRewriteKind(), FnDesc); 11521 11522 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_deleted) 11523 << (unsigned)FnKindPair.first << (unsigned)FnKindPair.second << FnDesc 11524 << (Fn->isDeleted() ? (Fn->isDeletedAsWritten() ? 1 : 2) : 0); 11525 MaybeEmitInheritedConstructorNote(S, Cand->FoundDecl); 11526 return; 11527 } 11528 11529 // We don't really have anything else to say about viable candidates. 11530 S.NoteOverloadCandidate(Cand->FoundDecl, Fn, Cand->getRewriteKind()); 11531 return; 11532 } 11533 11534 switch (Cand->FailureKind) { 11535 case ovl_fail_too_many_arguments: 11536 case ovl_fail_too_few_arguments: 11537 return DiagnoseArityMismatch(S, Cand, NumArgs); 11538 11539 case ovl_fail_bad_deduction: 11540 return DiagnoseBadDeduction(S, Cand, NumArgs, 11541 TakingCandidateAddress); 11542 11543 case ovl_fail_illegal_constructor: { 11544 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_illegal_constructor) 11545 << (Fn->getPrimaryTemplate() ? 1 : 0); 11546 MaybeEmitInheritedConstructorNote(S, Cand->FoundDecl); 11547 return; 11548 } 11549 11550 case ovl_fail_object_addrspace_mismatch: { 11551 Qualifiers QualsForPrinting; 11552 QualsForPrinting.setAddressSpace(CtorDestAS); 11553 S.Diag(Fn->getLocation(), 11554 diag::note_ovl_candidate_illegal_constructor_adrspace_mismatch) 11555 << QualsForPrinting; 11556 MaybeEmitInheritedConstructorNote(S, Cand->FoundDecl); 11557 return; 11558 } 11559 11560 case ovl_fail_trivial_conversion: 11561 case ovl_fail_bad_final_conversion: 11562 case ovl_fail_final_conversion_not_exact: 11563 return S.NoteOverloadCandidate(Cand->FoundDecl, Fn, Cand->getRewriteKind()); 11564 11565 case ovl_fail_bad_conversion: { 11566 unsigned I = (Cand->IgnoreObjectArgument ? 1 : 0); 11567 for (unsigned N = Cand->Conversions.size(); I != N; ++I) 11568 if (Cand->Conversions[I].isBad()) 11569 return DiagnoseBadConversion(S, Cand, I, TakingCandidateAddress); 11570 11571 // FIXME: this currently happens when we're called from SemaInit 11572 // when user-conversion overload fails. Figure out how to handle 11573 // those conditions and diagnose them well. 11574 return S.NoteOverloadCandidate(Cand->FoundDecl, Fn, Cand->getRewriteKind()); 11575 } 11576 11577 case ovl_fail_bad_target: 11578 return DiagnoseBadTarget(S, Cand); 11579 11580 case ovl_fail_enable_if: 11581 return DiagnoseFailedEnableIfAttr(S, Cand); 11582 11583 case ovl_fail_explicit: 11584 return DiagnoseFailedExplicitSpec(S, Cand); 11585 11586 case ovl_fail_inhctor_slice: 11587 // It's generally not interesting to note copy/move constructors here. 11588 if (cast<CXXConstructorDecl>(Fn)->isCopyOrMoveConstructor()) 11589 return; 11590 S.Diag(Fn->getLocation(), 11591 diag::note_ovl_candidate_inherited_constructor_slice) 11592 << (Fn->getPrimaryTemplate() ? 1 : 0) 11593 << Fn->getParamDecl(0)->getType()->isRValueReferenceType(); 11594 MaybeEmitInheritedConstructorNote(S, Cand->FoundDecl); 11595 return; 11596 11597 case ovl_fail_addr_not_available: { 11598 bool Available = checkAddressOfCandidateIsAvailable(S, Cand->Function); 11599 (void)Available; 11600 assert(!Available); 11601 break; 11602 } 11603 case ovl_non_default_multiversion_function: 11604 // Do nothing, these should simply be ignored. 11605 break; 11606 11607 case ovl_fail_constraints_not_satisfied: { 11608 std::string FnDesc; 11609 std::pair<OverloadCandidateKind, OverloadCandidateSelect> FnKindPair = 11610 ClassifyOverloadCandidate(S, Cand->FoundDecl, Fn, 11611 Cand->getRewriteKind(), FnDesc); 11612 11613 S.Diag(Fn->getLocation(), 11614 diag::note_ovl_candidate_constraints_not_satisfied) 11615 << (unsigned)FnKindPair.first << (unsigned)ocs_non_template 11616 << FnDesc /* Ignored */; 11617 ConstraintSatisfaction Satisfaction; 11618 if (S.CheckFunctionConstraints(Fn, Satisfaction)) 11619 break; 11620 S.DiagnoseUnsatisfiedConstraint(Satisfaction); 11621 } 11622 } 11623 } 11624 11625 static void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) { 11626 if (shouldSkipNotingLambdaConversionDecl(Cand->Surrogate)) 11627 return; 11628 11629 // Desugar the type of the surrogate down to a function type, 11630 // retaining as many typedefs as possible while still showing 11631 // the function type (and, therefore, its parameter types). 11632 QualType FnType = Cand->Surrogate->getConversionType(); 11633 bool isLValueReference = false; 11634 bool isRValueReference = false; 11635 bool isPointer = false; 11636 if (const LValueReferenceType *FnTypeRef = 11637 FnType->getAs<LValueReferenceType>()) { 11638 FnType = FnTypeRef->getPointeeType(); 11639 isLValueReference = true; 11640 } else if (const RValueReferenceType *FnTypeRef = 11641 FnType->getAs<RValueReferenceType>()) { 11642 FnType = FnTypeRef->getPointeeType(); 11643 isRValueReference = true; 11644 } 11645 if (const PointerType *FnTypePtr = FnType->getAs<PointerType>()) { 11646 FnType = FnTypePtr->getPointeeType(); 11647 isPointer = true; 11648 } 11649 // Desugar down to a function type. 11650 FnType = QualType(FnType->getAs<FunctionType>(), 0); 11651 // Reconstruct the pointer/reference as appropriate. 11652 if (isPointer) FnType = S.Context.getPointerType(FnType); 11653 if (isRValueReference) FnType = S.Context.getRValueReferenceType(FnType); 11654 if (isLValueReference) FnType = S.Context.getLValueReferenceType(FnType); 11655 11656 if (!Cand->Viable && 11657 Cand->FailureKind == ovl_fail_constraints_not_satisfied) { 11658 S.Diag(Cand->Surrogate->getLocation(), 11659 diag::note_ovl_surrogate_constraints_not_satisfied) 11660 << Cand->Surrogate; 11661 ConstraintSatisfaction Satisfaction; 11662 if (S.CheckFunctionConstraints(Cand->Surrogate, Satisfaction)) 11663 S.DiagnoseUnsatisfiedConstraint(Satisfaction); 11664 } else { 11665 S.Diag(Cand->Surrogate->getLocation(), diag::note_ovl_surrogate_cand) 11666 << FnType; 11667 } 11668 } 11669 11670 static void NoteBuiltinOperatorCandidate(Sema &S, StringRef Opc, 11671 SourceLocation OpLoc, 11672 OverloadCandidate *Cand) { 11673 assert(Cand->Conversions.size() <= 2 && "builtin operator is not binary"); 11674 std::string TypeStr("operator"); 11675 TypeStr += Opc; 11676 TypeStr += "("; 11677 TypeStr += Cand->BuiltinParamTypes[0].getAsString(); 11678 if (Cand->Conversions.size() == 1) { 11679 TypeStr += ")"; 11680 S.Diag(OpLoc, diag::note_ovl_builtin_candidate) << TypeStr; 11681 } else { 11682 TypeStr += ", "; 11683 TypeStr += Cand->BuiltinParamTypes[1].getAsString(); 11684 TypeStr += ")"; 11685 S.Diag(OpLoc, diag::note_ovl_builtin_candidate) << TypeStr; 11686 } 11687 } 11688 11689 static void NoteAmbiguousUserConversions(Sema &S, SourceLocation OpLoc, 11690 OverloadCandidate *Cand) { 11691 for (const ImplicitConversionSequence &ICS : Cand->Conversions) { 11692 if (ICS.isBad()) break; // all meaningless after first invalid 11693 if (!ICS.isAmbiguous()) continue; 11694 11695 ICS.DiagnoseAmbiguousConversion( 11696 S, OpLoc, S.PDiag(diag::note_ambiguous_type_conversion)); 11697 } 11698 } 11699 11700 static SourceLocation GetLocationForCandidate(const OverloadCandidate *Cand) { 11701 if (Cand->Function) 11702 return Cand->Function->getLocation(); 11703 if (Cand->IsSurrogate) 11704 return Cand->Surrogate->getLocation(); 11705 return SourceLocation(); 11706 } 11707 11708 static unsigned RankDeductionFailure(const DeductionFailureInfo &DFI) { 11709 switch ((Sema::TemplateDeductionResult)DFI.Result) { 11710 case Sema::TDK_Success: 11711 case Sema::TDK_NonDependentConversionFailure: 11712 case Sema::TDK_AlreadyDiagnosed: 11713 llvm_unreachable("non-deduction failure while diagnosing bad deduction"); 11714 11715 case Sema::TDK_Invalid: 11716 case Sema::TDK_Incomplete: 11717 case Sema::TDK_IncompletePack: 11718 return 1; 11719 11720 case Sema::TDK_Underqualified: 11721 case Sema::TDK_Inconsistent: 11722 return 2; 11723 11724 case Sema::TDK_SubstitutionFailure: 11725 case Sema::TDK_DeducedMismatch: 11726 case Sema::TDK_ConstraintsNotSatisfied: 11727 case Sema::TDK_DeducedMismatchNested: 11728 case Sema::TDK_NonDeducedMismatch: 11729 case Sema::TDK_MiscellaneousDeductionFailure: 11730 case Sema::TDK_CUDATargetMismatch: 11731 return 3; 11732 11733 case Sema::TDK_InstantiationDepth: 11734 return 4; 11735 11736 case Sema::TDK_InvalidExplicitArguments: 11737 return 5; 11738 11739 case Sema::TDK_TooManyArguments: 11740 case Sema::TDK_TooFewArguments: 11741 return 6; 11742 } 11743 llvm_unreachable("Unhandled deduction result"); 11744 } 11745 11746 namespace { 11747 struct CompareOverloadCandidatesForDisplay { 11748 Sema &S; 11749 SourceLocation Loc; 11750 size_t NumArgs; 11751 OverloadCandidateSet::CandidateSetKind CSK; 11752 11753 CompareOverloadCandidatesForDisplay( 11754 Sema &S, SourceLocation Loc, size_t NArgs, 11755 OverloadCandidateSet::CandidateSetKind CSK) 11756 : S(S), NumArgs(NArgs), CSK(CSK) {} 11757 11758 OverloadFailureKind EffectiveFailureKind(const OverloadCandidate *C) const { 11759 // If there are too many or too few arguments, that's the high-order bit we 11760 // want to sort by, even if the immediate failure kind was something else. 11761 if (C->FailureKind == ovl_fail_too_many_arguments || 11762 C->FailureKind == ovl_fail_too_few_arguments) 11763 return static_cast<OverloadFailureKind>(C->FailureKind); 11764 11765 if (C->Function) { 11766 if (NumArgs > C->Function->getNumParams() && !C->Function->isVariadic()) 11767 return ovl_fail_too_many_arguments; 11768 if (NumArgs < C->Function->getMinRequiredArguments()) 11769 return ovl_fail_too_few_arguments; 11770 } 11771 11772 return static_cast<OverloadFailureKind>(C->FailureKind); 11773 } 11774 11775 bool operator()(const OverloadCandidate *L, 11776 const OverloadCandidate *R) { 11777 // Fast-path this check. 11778 if (L == R) return false; 11779 11780 // Order first by viability. 11781 if (L->Viable) { 11782 if (!R->Viable) return true; 11783 11784 // TODO: introduce a tri-valued comparison for overload 11785 // candidates. Would be more worthwhile if we had a sort 11786 // that could exploit it. 11787 if (isBetterOverloadCandidate(S, *L, *R, SourceLocation(), CSK)) 11788 return true; 11789 if (isBetterOverloadCandidate(S, *R, *L, SourceLocation(), CSK)) 11790 return false; 11791 } else if (R->Viable) 11792 return false; 11793 11794 assert(L->Viable == R->Viable); 11795 11796 // Criteria by which we can sort non-viable candidates: 11797 if (!L->Viable) { 11798 OverloadFailureKind LFailureKind = EffectiveFailureKind(L); 11799 OverloadFailureKind RFailureKind = EffectiveFailureKind(R); 11800 11801 // 1. Arity mismatches come after other candidates. 11802 if (LFailureKind == ovl_fail_too_many_arguments || 11803 LFailureKind == ovl_fail_too_few_arguments) { 11804 if (RFailureKind == ovl_fail_too_many_arguments || 11805 RFailureKind == ovl_fail_too_few_arguments) { 11806 int LDist = std::abs((int)L->getNumParams() - (int)NumArgs); 11807 int RDist = std::abs((int)R->getNumParams() - (int)NumArgs); 11808 if (LDist == RDist) { 11809 if (LFailureKind == RFailureKind) 11810 // Sort non-surrogates before surrogates. 11811 return !L->IsSurrogate && R->IsSurrogate; 11812 // Sort candidates requiring fewer parameters than there were 11813 // arguments given after candidates requiring more parameters 11814 // than there were arguments given. 11815 return LFailureKind == ovl_fail_too_many_arguments; 11816 } 11817 return LDist < RDist; 11818 } 11819 return false; 11820 } 11821 if (RFailureKind == ovl_fail_too_many_arguments || 11822 RFailureKind == ovl_fail_too_few_arguments) 11823 return true; 11824 11825 // 2. Bad conversions come first and are ordered by the number 11826 // of bad conversions and quality of good conversions. 11827 if (LFailureKind == ovl_fail_bad_conversion) { 11828 if (RFailureKind != ovl_fail_bad_conversion) 11829 return true; 11830 11831 // The conversion that can be fixed with a smaller number of changes, 11832 // comes first. 11833 unsigned numLFixes = L->Fix.NumConversionsFixed; 11834 unsigned numRFixes = R->Fix.NumConversionsFixed; 11835 numLFixes = (numLFixes == 0) ? UINT_MAX : numLFixes; 11836 numRFixes = (numRFixes == 0) ? UINT_MAX : numRFixes; 11837 if (numLFixes != numRFixes) { 11838 return numLFixes < numRFixes; 11839 } 11840 11841 // If there's any ordering between the defined conversions... 11842 // FIXME: this might not be transitive. 11843 assert(L->Conversions.size() == R->Conversions.size()); 11844 11845 int leftBetter = 0; 11846 unsigned I = (L->IgnoreObjectArgument || R->IgnoreObjectArgument); 11847 for (unsigned E = L->Conversions.size(); I != E; ++I) { 11848 switch (CompareImplicitConversionSequences(S, Loc, 11849 L->Conversions[I], 11850 R->Conversions[I])) { 11851 case ImplicitConversionSequence::Better: 11852 leftBetter++; 11853 break; 11854 11855 case ImplicitConversionSequence::Worse: 11856 leftBetter--; 11857 break; 11858 11859 case ImplicitConversionSequence::Indistinguishable: 11860 break; 11861 } 11862 } 11863 if (leftBetter > 0) return true; 11864 if (leftBetter < 0) return false; 11865 11866 } else if (RFailureKind == ovl_fail_bad_conversion) 11867 return false; 11868 11869 if (LFailureKind == ovl_fail_bad_deduction) { 11870 if (RFailureKind != ovl_fail_bad_deduction) 11871 return true; 11872 11873 if (L->DeductionFailure.Result != R->DeductionFailure.Result) 11874 return RankDeductionFailure(L->DeductionFailure) 11875 < RankDeductionFailure(R->DeductionFailure); 11876 } else if (RFailureKind == ovl_fail_bad_deduction) 11877 return false; 11878 11879 // TODO: others? 11880 } 11881 11882 // Sort everything else by location. 11883 SourceLocation LLoc = GetLocationForCandidate(L); 11884 SourceLocation RLoc = GetLocationForCandidate(R); 11885 11886 // Put candidates without locations (e.g. builtins) at the end. 11887 if (LLoc.isInvalid()) return false; 11888 if (RLoc.isInvalid()) return true; 11889 11890 return S.SourceMgr.isBeforeInTranslationUnit(LLoc, RLoc); 11891 } 11892 }; 11893 } 11894 11895 /// CompleteNonViableCandidate - Normally, overload resolution only 11896 /// computes up to the first bad conversion. Produces the FixIt set if 11897 /// possible. 11898 static void 11899 CompleteNonViableCandidate(Sema &S, OverloadCandidate *Cand, 11900 ArrayRef<Expr *> Args, 11901 OverloadCandidateSet::CandidateSetKind CSK) { 11902 assert(!Cand->Viable); 11903 11904 // Don't do anything on failures other than bad conversion. 11905 if (Cand->FailureKind != ovl_fail_bad_conversion) 11906 return; 11907 11908 // We only want the FixIts if all the arguments can be corrected. 11909 bool Unfixable = false; 11910 // Use a implicit copy initialization to check conversion fixes. 11911 Cand->Fix.setConversionChecker(TryCopyInitialization); 11912 11913 // Attempt to fix the bad conversion. 11914 unsigned ConvCount = Cand->Conversions.size(); 11915 for (unsigned ConvIdx = (Cand->IgnoreObjectArgument ? 1 : 0); /**/; 11916 ++ConvIdx) { 11917 assert(ConvIdx != ConvCount && "no bad conversion in candidate"); 11918 if (Cand->Conversions[ConvIdx].isInitialized() && 11919 Cand->Conversions[ConvIdx].isBad()) { 11920 Unfixable = !Cand->TryToFixBadConversion(ConvIdx, S); 11921 break; 11922 } 11923 } 11924 11925 // FIXME: this should probably be preserved from the overload 11926 // operation somehow. 11927 bool SuppressUserConversions = false; 11928 11929 unsigned ConvIdx = 0; 11930 unsigned ArgIdx = 0; 11931 ArrayRef<QualType> ParamTypes; 11932 bool Reversed = Cand->isReversed(); 11933 11934 if (Cand->IsSurrogate) { 11935 QualType ConvType 11936 = Cand->Surrogate->getConversionType().getNonReferenceType(); 11937 if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>()) 11938 ConvType = ConvPtrType->getPointeeType(); 11939 ParamTypes = ConvType->castAs<FunctionProtoType>()->getParamTypes(); 11940 // Conversion 0 is 'this', which doesn't have a corresponding parameter. 11941 ConvIdx = 1; 11942 } else if (Cand->Function) { 11943 ParamTypes = 11944 Cand->Function->getType()->castAs<FunctionProtoType>()->getParamTypes(); 11945 if (isa<CXXMethodDecl>(Cand->Function) && 11946 !isa<CXXConstructorDecl>(Cand->Function) && !Reversed) { 11947 // Conversion 0 is 'this', which doesn't have a corresponding parameter. 11948 ConvIdx = 1; 11949 if (CSK == OverloadCandidateSet::CSK_Operator && 11950 Cand->Function->getDeclName().getCXXOverloadedOperator() != OO_Call && 11951 Cand->Function->getDeclName().getCXXOverloadedOperator() != 11952 OO_Subscript) 11953 // Argument 0 is 'this', which doesn't have a corresponding parameter. 11954 ArgIdx = 1; 11955 } 11956 } else { 11957 // Builtin operator. 11958 assert(ConvCount <= 3); 11959 ParamTypes = Cand->BuiltinParamTypes; 11960 } 11961 11962 // Fill in the rest of the conversions. 11963 for (unsigned ParamIdx = Reversed ? ParamTypes.size() - 1 : 0; 11964 ConvIdx != ConvCount; 11965 ++ConvIdx, ++ArgIdx, ParamIdx += (Reversed ? -1 : 1)) { 11966 assert(ArgIdx < Args.size() && "no argument for this arg conversion"); 11967 if (Cand->Conversions[ConvIdx].isInitialized()) { 11968 // We've already checked this conversion. 11969 } else if (ParamIdx < ParamTypes.size()) { 11970 if (ParamTypes[ParamIdx]->isDependentType()) 11971 Cand->Conversions[ConvIdx].setAsIdentityConversion( 11972 Args[ArgIdx]->getType()); 11973 else { 11974 Cand->Conversions[ConvIdx] = 11975 TryCopyInitialization(S, Args[ArgIdx], ParamTypes[ParamIdx], 11976 SuppressUserConversions, 11977 /*InOverloadResolution=*/true, 11978 /*AllowObjCWritebackConversion=*/ 11979 S.getLangOpts().ObjCAutoRefCount); 11980 // Store the FixIt in the candidate if it exists. 11981 if (!Unfixable && Cand->Conversions[ConvIdx].isBad()) 11982 Unfixable = !Cand->TryToFixBadConversion(ConvIdx, S); 11983 } 11984 } else 11985 Cand->Conversions[ConvIdx].setEllipsis(); 11986 } 11987 } 11988 11989 SmallVector<OverloadCandidate *, 32> OverloadCandidateSet::CompleteCandidates( 11990 Sema &S, OverloadCandidateDisplayKind OCD, ArrayRef<Expr *> Args, 11991 SourceLocation OpLoc, 11992 llvm::function_ref<bool(OverloadCandidate &)> Filter) { 11993 // Sort the candidates by viability and position. Sorting directly would 11994 // be prohibitive, so we make a set of pointers and sort those. 11995 SmallVector<OverloadCandidate*, 32> Cands; 11996 if (OCD == OCD_AllCandidates) Cands.reserve(size()); 11997 for (iterator Cand = begin(), LastCand = end(); Cand != LastCand; ++Cand) { 11998 if (!Filter(*Cand)) 11999 continue; 12000 switch (OCD) { 12001 case OCD_AllCandidates: 12002 if (!Cand->Viable) { 12003 if (!Cand->Function && !Cand->IsSurrogate) { 12004 // This a non-viable builtin candidate. We do not, in general, 12005 // want to list every possible builtin candidate. 12006 continue; 12007 } 12008 CompleteNonViableCandidate(S, Cand, Args, Kind); 12009 } 12010 break; 12011 12012 case OCD_ViableCandidates: 12013 if (!Cand->Viable) 12014 continue; 12015 break; 12016 12017 case OCD_AmbiguousCandidates: 12018 if (!Cand->Best) 12019 continue; 12020 break; 12021 } 12022 12023 Cands.push_back(Cand); 12024 } 12025 12026 llvm::stable_sort( 12027 Cands, CompareOverloadCandidatesForDisplay(S, OpLoc, Args.size(), Kind)); 12028 12029 return Cands; 12030 } 12031 12032 bool OverloadCandidateSet::shouldDeferDiags(Sema &S, ArrayRef<Expr *> Args, 12033 SourceLocation OpLoc) { 12034 bool DeferHint = false; 12035 if (S.getLangOpts().CUDA && S.getLangOpts().GPUDeferDiag) { 12036 // Defer diagnostic for CUDA/HIP if there are wrong-sided candidates or 12037 // host device candidates. 12038 auto WrongSidedCands = 12039 CompleteCandidates(S, OCD_AllCandidates, Args, OpLoc, [](auto &Cand) { 12040 return (Cand.Viable == false && 12041 Cand.FailureKind == ovl_fail_bad_target) || 12042 (Cand.Function && 12043 Cand.Function->template hasAttr<CUDAHostAttr>() && 12044 Cand.Function->template hasAttr<CUDADeviceAttr>()); 12045 }); 12046 DeferHint = !WrongSidedCands.empty(); 12047 } 12048 return DeferHint; 12049 } 12050 12051 /// When overload resolution fails, prints diagnostic messages containing the 12052 /// candidates in the candidate set. 12053 void OverloadCandidateSet::NoteCandidates( 12054 PartialDiagnosticAt PD, Sema &S, OverloadCandidateDisplayKind OCD, 12055 ArrayRef<Expr *> Args, StringRef Opc, SourceLocation OpLoc, 12056 llvm::function_ref<bool(OverloadCandidate &)> Filter) { 12057 12058 auto Cands = CompleteCandidates(S, OCD, Args, OpLoc, Filter); 12059 12060 S.Diag(PD.first, PD.second, shouldDeferDiags(S, Args, OpLoc)); 12061 12062 // In WebAssembly we don't want to emit further diagnostics if a table is 12063 // passed as an argument to a function. 12064 bool NoteCands = true; 12065 for (const Expr *Arg : Args) { 12066 if (Arg->getType()->isWebAssemblyTableType()) 12067 NoteCands = false; 12068 } 12069 12070 if (NoteCands) 12071 NoteCandidates(S, Args, Cands, Opc, OpLoc); 12072 12073 if (OCD == OCD_AmbiguousCandidates) 12074 MaybeDiagnoseAmbiguousConstraints(S, {begin(), end()}); 12075 } 12076 12077 void OverloadCandidateSet::NoteCandidates(Sema &S, ArrayRef<Expr *> Args, 12078 ArrayRef<OverloadCandidate *> Cands, 12079 StringRef Opc, SourceLocation OpLoc) { 12080 bool ReportedAmbiguousConversions = false; 12081 12082 const OverloadsShown ShowOverloads = S.Diags.getShowOverloads(); 12083 unsigned CandsShown = 0; 12084 auto I = Cands.begin(), E = Cands.end(); 12085 for (; I != E; ++I) { 12086 OverloadCandidate *Cand = *I; 12087 12088 if (CandsShown >= S.Diags.getNumOverloadCandidatesToShow() && 12089 ShowOverloads == Ovl_Best) { 12090 break; 12091 } 12092 ++CandsShown; 12093 12094 if (Cand->Function) 12095 NoteFunctionCandidate(S, Cand, Args.size(), 12096 /*TakingCandidateAddress=*/false, DestAS); 12097 else if (Cand->IsSurrogate) 12098 NoteSurrogateCandidate(S, Cand); 12099 else { 12100 assert(Cand->Viable && 12101 "Non-viable built-in candidates are not added to Cands."); 12102 // Generally we only see ambiguities including viable builtin 12103 // operators if overload resolution got screwed up by an 12104 // ambiguous user-defined conversion. 12105 // 12106 // FIXME: It's quite possible for different conversions to see 12107 // different ambiguities, though. 12108 if (!ReportedAmbiguousConversions) { 12109 NoteAmbiguousUserConversions(S, OpLoc, Cand); 12110 ReportedAmbiguousConversions = true; 12111 } 12112 12113 // If this is a viable builtin, print it. 12114 NoteBuiltinOperatorCandidate(S, Opc, OpLoc, Cand); 12115 } 12116 } 12117 12118 // Inform S.Diags that we've shown an overload set with N elements. This may 12119 // inform the future value of S.Diags.getNumOverloadCandidatesToShow(). 12120 S.Diags.overloadCandidatesShown(CandsShown); 12121 12122 if (I != E) 12123 S.Diag(OpLoc, diag::note_ovl_too_many_candidates, 12124 shouldDeferDiags(S, Args, OpLoc)) 12125 << int(E - I); 12126 } 12127 12128 static SourceLocation 12129 GetLocationForCandidate(const TemplateSpecCandidate *Cand) { 12130 return Cand->Specialization ? Cand->Specialization->getLocation() 12131 : SourceLocation(); 12132 } 12133 12134 namespace { 12135 struct CompareTemplateSpecCandidatesForDisplay { 12136 Sema &S; 12137 CompareTemplateSpecCandidatesForDisplay(Sema &S) : S(S) {} 12138 12139 bool operator()(const TemplateSpecCandidate *L, 12140 const TemplateSpecCandidate *R) { 12141 // Fast-path this check. 12142 if (L == R) 12143 return false; 12144 12145 // Assuming that both candidates are not matches... 12146 12147 // Sort by the ranking of deduction failures. 12148 if (L->DeductionFailure.Result != R->DeductionFailure.Result) 12149 return RankDeductionFailure(L->DeductionFailure) < 12150 RankDeductionFailure(R->DeductionFailure); 12151 12152 // Sort everything else by location. 12153 SourceLocation LLoc = GetLocationForCandidate(L); 12154 SourceLocation RLoc = GetLocationForCandidate(R); 12155 12156 // Put candidates without locations (e.g. builtins) at the end. 12157 if (LLoc.isInvalid()) 12158 return false; 12159 if (RLoc.isInvalid()) 12160 return true; 12161 12162 return S.SourceMgr.isBeforeInTranslationUnit(LLoc, RLoc); 12163 } 12164 }; 12165 } 12166 12167 /// Diagnose a template argument deduction failure. 12168 /// We are treating these failures as overload failures due to bad 12169 /// deductions. 12170 void TemplateSpecCandidate::NoteDeductionFailure(Sema &S, 12171 bool ForTakingAddress) { 12172 DiagnoseBadDeduction(S, FoundDecl, Specialization, // pattern 12173 DeductionFailure, /*NumArgs=*/0, ForTakingAddress); 12174 } 12175 12176 void TemplateSpecCandidateSet::destroyCandidates() { 12177 for (iterator i = begin(), e = end(); i != e; ++i) { 12178 i->DeductionFailure.Destroy(); 12179 } 12180 } 12181 12182 void TemplateSpecCandidateSet::clear() { 12183 destroyCandidates(); 12184 Candidates.clear(); 12185 } 12186 12187 /// NoteCandidates - When no template specialization match is found, prints 12188 /// diagnostic messages containing the non-matching specializations that form 12189 /// the candidate set. 12190 /// This is analoguous to OverloadCandidateSet::NoteCandidates() with 12191 /// OCD == OCD_AllCandidates and Cand->Viable == false. 12192 void TemplateSpecCandidateSet::NoteCandidates(Sema &S, SourceLocation Loc) { 12193 // Sort the candidates by position (assuming no candidate is a match). 12194 // Sorting directly would be prohibitive, so we make a set of pointers 12195 // and sort those. 12196 SmallVector<TemplateSpecCandidate *, 32> Cands; 12197 Cands.reserve(size()); 12198 for (iterator Cand = begin(), LastCand = end(); Cand != LastCand; ++Cand) { 12199 if (Cand->Specialization) 12200 Cands.push_back(Cand); 12201 // Otherwise, this is a non-matching builtin candidate. We do not, 12202 // in general, want to list every possible builtin candidate. 12203 } 12204 12205 llvm::sort(Cands, CompareTemplateSpecCandidatesForDisplay(S)); 12206 12207 // FIXME: Perhaps rename OverloadsShown and getShowOverloads() 12208 // for generalization purposes (?). 12209 const OverloadsShown ShowOverloads = S.Diags.getShowOverloads(); 12210 12211 SmallVectorImpl<TemplateSpecCandidate *>::iterator I, E; 12212 unsigned CandsShown = 0; 12213 for (I = Cands.begin(), E = Cands.end(); I != E; ++I) { 12214 TemplateSpecCandidate *Cand = *I; 12215 12216 // Set an arbitrary limit on the number of candidates we'll spam 12217 // the user with. FIXME: This limit should depend on details of the 12218 // candidate list. 12219 if (CandsShown >= 4 && ShowOverloads == Ovl_Best) 12220 break; 12221 ++CandsShown; 12222 12223 assert(Cand->Specialization && 12224 "Non-matching built-in candidates are not added to Cands."); 12225 Cand->NoteDeductionFailure(S, ForTakingAddress); 12226 } 12227 12228 if (I != E) 12229 S.Diag(Loc, diag::note_ovl_too_many_candidates) << int(E - I); 12230 } 12231 12232 // [PossiblyAFunctionType] --> [Return] 12233 // NonFunctionType --> NonFunctionType 12234 // R (A) --> R(A) 12235 // R (*)(A) --> R (A) 12236 // R (&)(A) --> R (A) 12237 // R (S::*)(A) --> R (A) 12238 QualType Sema::ExtractUnqualifiedFunctionType(QualType PossiblyAFunctionType) { 12239 QualType Ret = PossiblyAFunctionType; 12240 if (const PointerType *ToTypePtr = 12241 PossiblyAFunctionType->getAs<PointerType>()) 12242 Ret = ToTypePtr->getPointeeType(); 12243 else if (const ReferenceType *ToTypeRef = 12244 PossiblyAFunctionType->getAs<ReferenceType>()) 12245 Ret = ToTypeRef->getPointeeType(); 12246 else if (const MemberPointerType *MemTypePtr = 12247 PossiblyAFunctionType->getAs<MemberPointerType>()) 12248 Ret = MemTypePtr->getPointeeType(); 12249 Ret = 12250 Context.getCanonicalType(Ret).getUnqualifiedType(); 12251 return Ret; 12252 } 12253 12254 static bool completeFunctionType(Sema &S, FunctionDecl *FD, SourceLocation Loc, 12255 bool Complain = true) { 12256 if (S.getLangOpts().CPlusPlus14 && FD->getReturnType()->isUndeducedType() && 12257 S.DeduceReturnType(FD, Loc, Complain)) 12258 return true; 12259 12260 auto *FPT = FD->getType()->castAs<FunctionProtoType>(); 12261 if (S.getLangOpts().CPlusPlus17 && 12262 isUnresolvedExceptionSpec(FPT->getExceptionSpecType()) && 12263 !S.ResolveExceptionSpec(Loc, FPT)) 12264 return true; 12265 12266 return false; 12267 } 12268 12269 namespace { 12270 // A helper class to help with address of function resolution 12271 // - allows us to avoid passing around all those ugly parameters 12272 class AddressOfFunctionResolver { 12273 Sema& S; 12274 Expr* SourceExpr; 12275 const QualType& TargetType; 12276 QualType TargetFunctionType; // Extracted function type from target type 12277 12278 bool Complain; 12279 //DeclAccessPair& ResultFunctionAccessPair; 12280 ASTContext& Context; 12281 12282 bool TargetTypeIsNonStaticMemberFunction; 12283 bool FoundNonTemplateFunction; 12284 bool StaticMemberFunctionFromBoundPointer; 12285 bool HasComplained; 12286 12287 OverloadExpr::FindResult OvlExprInfo; 12288 OverloadExpr *OvlExpr; 12289 TemplateArgumentListInfo OvlExplicitTemplateArgs; 12290 SmallVector<std::pair<DeclAccessPair, FunctionDecl*>, 4> Matches; 12291 TemplateSpecCandidateSet FailedCandidates; 12292 12293 public: 12294 AddressOfFunctionResolver(Sema &S, Expr *SourceExpr, 12295 const QualType &TargetType, bool Complain) 12296 : S(S), SourceExpr(SourceExpr), TargetType(TargetType), 12297 Complain(Complain), Context(S.getASTContext()), 12298 TargetTypeIsNonStaticMemberFunction( 12299 !!TargetType->getAs<MemberPointerType>()), 12300 FoundNonTemplateFunction(false), 12301 StaticMemberFunctionFromBoundPointer(false), 12302 HasComplained(false), 12303 OvlExprInfo(OverloadExpr::find(SourceExpr)), 12304 OvlExpr(OvlExprInfo.Expression), 12305 FailedCandidates(OvlExpr->getNameLoc(), /*ForTakingAddress=*/true) { 12306 ExtractUnqualifiedFunctionTypeFromTargetType(); 12307 12308 if (TargetFunctionType->isFunctionType()) { 12309 if (UnresolvedMemberExpr *UME = dyn_cast<UnresolvedMemberExpr>(OvlExpr)) 12310 if (!UME->isImplicitAccess() && 12311 !S.ResolveSingleFunctionTemplateSpecialization(UME)) 12312 StaticMemberFunctionFromBoundPointer = true; 12313 } else if (OvlExpr->hasExplicitTemplateArgs()) { 12314 DeclAccessPair dap; 12315 if (FunctionDecl *Fn = S.ResolveSingleFunctionTemplateSpecialization( 12316 OvlExpr, false, &dap)) { 12317 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) 12318 if (!Method->isStatic()) { 12319 // If the target type is a non-function type and the function found 12320 // is a non-static member function, pretend as if that was the 12321 // target, it's the only possible type to end up with. 12322 TargetTypeIsNonStaticMemberFunction = true; 12323 12324 // And skip adding the function if its not in the proper form. 12325 // We'll diagnose this due to an empty set of functions. 12326 if (!OvlExprInfo.HasFormOfMemberPointer) 12327 return; 12328 } 12329 12330 Matches.push_back(std::make_pair(dap, Fn)); 12331 } 12332 return; 12333 } 12334 12335 if (OvlExpr->hasExplicitTemplateArgs()) 12336 OvlExpr->copyTemplateArgumentsInto(OvlExplicitTemplateArgs); 12337 12338 if (FindAllFunctionsThatMatchTargetTypeExactly()) { 12339 // C++ [over.over]p4: 12340 // If more than one function is selected, [...] 12341 if (Matches.size() > 1 && !eliminiateSuboptimalOverloadCandidates()) { 12342 if (FoundNonTemplateFunction) 12343 EliminateAllTemplateMatches(); 12344 else 12345 EliminateAllExceptMostSpecializedTemplate(); 12346 } 12347 } 12348 12349 if (S.getLangOpts().CUDA && Matches.size() > 1) 12350 EliminateSuboptimalCudaMatches(); 12351 } 12352 12353 bool hasComplained() const { return HasComplained; } 12354 12355 private: 12356 bool candidateHasExactlyCorrectType(const FunctionDecl *FD) { 12357 QualType Discard; 12358 return Context.hasSameUnqualifiedType(TargetFunctionType, FD->getType()) || 12359 S.IsFunctionConversion(FD->getType(), TargetFunctionType, Discard); 12360 } 12361 12362 /// \return true if A is considered a better overload candidate for the 12363 /// desired type than B. 12364 bool isBetterCandidate(const FunctionDecl *A, const FunctionDecl *B) { 12365 // If A doesn't have exactly the correct type, we don't want to classify it 12366 // as "better" than anything else. This way, the user is required to 12367 // disambiguate for us if there are multiple candidates and no exact match. 12368 return candidateHasExactlyCorrectType(A) && 12369 (!candidateHasExactlyCorrectType(B) || 12370 compareEnableIfAttrs(S, A, B) == Comparison::Better); 12371 } 12372 12373 /// \return true if we were able to eliminate all but one overload candidate, 12374 /// false otherwise. 12375 bool eliminiateSuboptimalOverloadCandidates() { 12376 // Same algorithm as overload resolution -- one pass to pick the "best", 12377 // another pass to be sure that nothing is better than the best. 12378 auto Best = Matches.begin(); 12379 for (auto I = Matches.begin()+1, E = Matches.end(); I != E; ++I) 12380 if (isBetterCandidate(I->second, Best->second)) 12381 Best = I; 12382 12383 const FunctionDecl *BestFn = Best->second; 12384 auto IsBestOrInferiorToBest = [this, BestFn]( 12385 const std::pair<DeclAccessPair, FunctionDecl *> &Pair) { 12386 return BestFn == Pair.second || isBetterCandidate(BestFn, Pair.second); 12387 }; 12388 12389 // Note: We explicitly leave Matches unmodified if there isn't a clear best 12390 // option, so we can potentially give the user a better error 12391 if (!llvm::all_of(Matches, IsBestOrInferiorToBest)) 12392 return false; 12393 Matches[0] = *Best; 12394 Matches.resize(1); 12395 return true; 12396 } 12397 12398 bool isTargetTypeAFunction() const { 12399 return TargetFunctionType->isFunctionType(); 12400 } 12401 12402 // [ToType] [Return] 12403 12404 // R (*)(A) --> R (A), IsNonStaticMemberFunction = false 12405 // R (&)(A) --> R (A), IsNonStaticMemberFunction = false 12406 // R (S::*)(A) --> R (A), IsNonStaticMemberFunction = true 12407 void inline ExtractUnqualifiedFunctionTypeFromTargetType() { 12408 TargetFunctionType = S.ExtractUnqualifiedFunctionType(TargetType); 12409 } 12410 12411 // return true if any matching specializations were found 12412 bool AddMatchingTemplateFunction(FunctionTemplateDecl* FunctionTemplate, 12413 const DeclAccessPair& CurAccessFunPair) { 12414 if (CXXMethodDecl *Method 12415 = dyn_cast<CXXMethodDecl>(FunctionTemplate->getTemplatedDecl())) { 12416 // Skip non-static function templates when converting to pointer, and 12417 // static when converting to member pointer. 12418 if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction) 12419 return false; 12420 } 12421 else if (TargetTypeIsNonStaticMemberFunction) 12422 return false; 12423 12424 // C++ [over.over]p2: 12425 // If the name is a function template, template argument deduction is 12426 // done (14.8.2.2), and if the argument deduction succeeds, the 12427 // resulting template argument list is used to generate a single 12428 // function template specialization, which is added to the set of 12429 // overloaded functions considered. 12430 FunctionDecl *Specialization = nullptr; 12431 TemplateDeductionInfo Info(FailedCandidates.getLocation()); 12432 if (Sema::TemplateDeductionResult Result 12433 = S.DeduceTemplateArguments(FunctionTemplate, 12434 &OvlExplicitTemplateArgs, 12435 TargetFunctionType, Specialization, 12436 Info, /*IsAddressOfFunction*/true)) { 12437 // Make a note of the failed deduction for diagnostics. 12438 FailedCandidates.addCandidate() 12439 .set(CurAccessFunPair, FunctionTemplate->getTemplatedDecl(), 12440 MakeDeductionFailureInfo(Context, Result, Info)); 12441 return false; 12442 } 12443 12444 // Template argument deduction ensures that we have an exact match or 12445 // compatible pointer-to-function arguments that would be adjusted by ICS. 12446 // This function template specicalization works. 12447 assert(S.isSameOrCompatibleFunctionType( 12448 Context.getCanonicalType(Specialization->getType()), 12449 Context.getCanonicalType(TargetFunctionType))); 12450 12451 if (!S.checkAddressOfFunctionIsAvailable(Specialization)) 12452 return false; 12453 12454 Matches.push_back(std::make_pair(CurAccessFunPair, Specialization)); 12455 return true; 12456 } 12457 12458 bool AddMatchingNonTemplateFunction(NamedDecl* Fn, 12459 const DeclAccessPair& CurAccessFunPair) { 12460 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) { 12461 // Skip non-static functions when converting to pointer, and static 12462 // when converting to member pointer. 12463 if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction) 12464 return false; 12465 } 12466 else if (TargetTypeIsNonStaticMemberFunction) 12467 return false; 12468 12469 if (FunctionDecl *FunDecl = dyn_cast<FunctionDecl>(Fn)) { 12470 if (S.getLangOpts().CUDA) 12471 if (FunctionDecl *Caller = S.getCurFunctionDecl(/*AllowLambda=*/true)) 12472 if (!Caller->isImplicit() && !S.IsAllowedCUDACall(Caller, FunDecl)) 12473 return false; 12474 if (FunDecl->isMultiVersion()) { 12475 const auto *TA = FunDecl->getAttr<TargetAttr>(); 12476 if (TA && !TA->isDefaultVersion()) 12477 return false; 12478 const auto *TVA = FunDecl->getAttr<TargetVersionAttr>(); 12479 if (TVA && !TVA->isDefaultVersion()) 12480 return false; 12481 } 12482 12483 // If any candidate has a placeholder return type, trigger its deduction 12484 // now. 12485 if (completeFunctionType(S, FunDecl, SourceExpr->getBeginLoc(), 12486 Complain)) { 12487 HasComplained |= Complain; 12488 return false; 12489 } 12490 12491 if (!S.checkAddressOfFunctionIsAvailable(FunDecl)) 12492 return false; 12493 12494 // If we're in C, we need to support types that aren't exactly identical. 12495 if (!S.getLangOpts().CPlusPlus || 12496 candidateHasExactlyCorrectType(FunDecl)) { 12497 Matches.push_back(std::make_pair( 12498 CurAccessFunPair, cast<FunctionDecl>(FunDecl->getCanonicalDecl()))); 12499 FoundNonTemplateFunction = true; 12500 return true; 12501 } 12502 } 12503 12504 return false; 12505 } 12506 12507 bool FindAllFunctionsThatMatchTargetTypeExactly() { 12508 bool Ret = false; 12509 12510 // If the overload expression doesn't have the form of a pointer to 12511 // member, don't try to convert it to a pointer-to-member type. 12512 if (IsInvalidFormOfPointerToMemberFunction()) 12513 return false; 12514 12515 for (UnresolvedSetIterator I = OvlExpr->decls_begin(), 12516 E = OvlExpr->decls_end(); 12517 I != E; ++I) { 12518 // Look through any using declarations to find the underlying function. 12519 NamedDecl *Fn = (*I)->getUnderlyingDecl(); 12520 12521 // C++ [over.over]p3: 12522 // Non-member functions and static member functions match 12523 // targets of type "pointer-to-function" or "reference-to-function." 12524 // Nonstatic member functions match targets of 12525 // type "pointer-to-member-function." 12526 // Note that according to DR 247, the containing class does not matter. 12527 if (FunctionTemplateDecl *FunctionTemplate 12528 = dyn_cast<FunctionTemplateDecl>(Fn)) { 12529 if (AddMatchingTemplateFunction(FunctionTemplate, I.getPair())) 12530 Ret = true; 12531 } 12532 // If we have explicit template arguments supplied, skip non-templates. 12533 else if (!OvlExpr->hasExplicitTemplateArgs() && 12534 AddMatchingNonTemplateFunction(Fn, I.getPair())) 12535 Ret = true; 12536 } 12537 assert(Ret || Matches.empty()); 12538 return Ret; 12539 } 12540 12541 void EliminateAllExceptMostSpecializedTemplate() { 12542 // [...] and any given function template specialization F1 is 12543 // eliminated if the set contains a second function template 12544 // specialization whose function template is more specialized 12545 // than the function template of F1 according to the partial 12546 // ordering rules of 14.5.5.2. 12547 12548 // The algorithm specified above is quadratic. We instead use a 12549 // two-pass algorithm (similar to the one used to identify the 12550 // best viable function in an overload set) that identifies the 12551 // best function template (if it exists). 12552 12553 UnresolvedSet<4> MatchesCopy; // TODO: avoid! 12554 for (unsigned I = 0, E = Matches.size(); I != E; ++I) 12555 MatchesCopy.addDecl(Matches[I].second, Matches[I].first.getAccess()); 12556 12557 // TODO: It looks like FailedCandidates does not serve much purpose 12558 // here, since the no_viable diagnostic has index 0. 12559 UnresolvedSetIterator Result = S.getMostSpecialized( 12560 MatchesCopy.begin(), MatchesCopy.end(), FailedCandidates, 12561 SourceExpr->getBeginLoc(), S.PDiag(), 12562 S.PDiag(diag::err_addr_ovl_ambiguous) 12563 << Matches[0].second->getDeclName(), 12564 S.PDiag(diag::note_ovl_candidate) 12565 << (unsigned)oc_function << (unsigned)ocs_described_template, 12566 Complain, TargetFunctionType); 12567 12568 if (Result != MatchesCopy.end()) { 12569 // Make it the first and only element 12570 Matches[0].first = Matches[Result - MatchesCopy.begin()].first; 12571 Matches[0].second = cast<FunctionDecl>(*Result); 12572 Matches.resize(1); 12573 } else 12574 HasComplained |= Complain; 12575 } 12576 12577 void EliminateAllTemplateMatches() { 12578 // [...] any function template specializations in the set are 12579 // eliminated if the set also contains a non-template function, [...] 12580 for (unsigned I = 0, N = Matches.size(); I != N; ) { 12581 if (Matches[I].second->getPrimaryTemplate() == nullptr) 12582 ++I; 12583 else { 12584 Matches[I] = Matches[--N]; 12585 Matches.resize(N); 12586 } 12587 } 12588 } 12589 12590 void EliminateSuboptimalCudaMatches() { 12591 S.EraseUnwantedCUDAMatches(S.getCurFunctionDecl(/*AllowLambda=*/true), 12592 Matches); 12593 } 12594 12595 public: 12596 void ComplainNoMatchesFound() const { 12597 assert(Matches.empty()); 12598 S.Diag(OvlExpr->getBeginLoc(), diag::err_addr_ovl_no_viable) 12599 << OvlExpr->getName() << TargetFunctionType 12600 << OvlExpr->getSourceRange(); 12601 if (FailedCandidates.empty()) 12602 S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType, 12603 /*TakingAddress=*/true); 12604 else { 12605 // We have some deduction failure messages. Use them to diagnose 12606 // the function templates, and diagnose the non-template candidates 12607 // normally. 12608 for (UnresolvedSetIterator I = OvlExpr->decls_begin(), 12609 IEnd = OvlExpr->decls_end(); 12610 I != IEnd; ++I) 12611 if (FunctionDecl *Fun = 12612 dyn_cast<FunctionDecl>((*I)->getUnderlyingDecl())) 12613 if (!functionHasPassObjectSizeParams(Fun)) 12614 S.NoteOverloadCandidate(*I, Fun, CRK_None, TargetFunctionType, 12615 /*TakingAddress=*/true); 12616 FailedCandidates.NoteCandidates(S, OvlExpr->getBeginLoc()); 12617 } 12618 } 12619 12620 bool IsInvalidFormOfPointerToMemberFunction() const { 12621 return TargetTypeIsNonStaticMemberFunction && 12622 !OvlExprInfo.HasFormOfMemberPointer; 12623 } 12624 12625 void ComplainIsInvalidFormOfPointerToMemberFunction() const { 12626 // TODO: Should we condition this on whether any functions might 12627 // have matched, or is it more appropriate to do that in callers? 12628 // TODO: a fixit wouldn't hurt. 12629 S.Diag(OvlExpr->getNameLoc(), diag::err_addr_ovl_no_qualifier) 12630 << TargetType << OvlExpr->getSourceRange(); 12631 } 12632 12633 bool IsStaticMemberFunctionFromBoundPointer() const { 12634 return StaticMemberFunctionFromBoundPointer; 12635 } 12636 12637 void ComplainIsStaticMemberFunctionFromBoundPointer() const { 12638 S.Diag(OvlExpr->getBeginLoc(), 12639 diag::err_invalid_form_pointer_member_function) 12640 << OvlExpr->getSourceRange(); 12641 } 12642 12643 void ComplainOfInvalidConversion() const { 12644 S.Diag(OvlExpr->getBeginLoc(), diag::err_addr_ovl_not_func_ptrref) 12645 << OvlExpr->getName() << TargetType; 12646 } 12647 12648 void ComplainMultipleMatchesFound() const { 12649 assert(Matches.size() > 1); 12650 S.Diag(OvlExpr->getBeginLoc(), diag::err_addr_ovl_ambiguous) 12651 << OvlExpr->getName() << OvlExpr->getSourceRange(); 12652 S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType, 12653 /*TakingAddress=*/true); 12654 } 12655 12656 bool hadMultipleCandidates() const { return (OvlExpr->getNumDecls() > 1); } 12657 12658 int getNumMatches() const { return Matches.size(); } 12659 12660 FunctionDecl* getMatchingFunctionDecl() const { 12661 if (Matches.size() != 1) return nullptr; 12662 return Matches[0].second; 12663 } 12664 12665 const DeclAccessPair* getMatchingFunctionAccessPair() const { 12666 if (Matches.size() != 1) return nullptr; 12667 return &Matches[0].first; 12668 } 12669 }; 12670 } 12671 12672 /// ResolveAddressOfOverloadedFunction - Try to resolve the address of 12673 /// an overloaded function (C++ [over.over]), where @p From is an 12674 /// expression with overloaded function type and @p ToType is the type 12675 /// we're trying to resolve to. For example: 12676 /// 12677 /// @code 12678 /// int f(double); 12679 /// int f(int); 12680 /// 12681 /// int (*pfd)(double) = f; // selects f(double) 12682 /// @endcode 12683 /// 12684 /// This routine returns the resulting FunctionDecl if it could be 12685 /// resolved, and NULL otherwise. When @p Complain is true, this 12686 /// routine will emit diagnostics if there is an error. 12687 FunctionDecl * 12688 Sema::ResolveAddressOfOverloadedFunction(Expr *AddressOfExpr, 12689 QualType TargetType, 12690 bool Complain, 12691 DeclAccessPair &FoundResult, 12692 bool *pHadMultipleCandidates) { 12693 assert(AddressOfExpr->getType() == Context.OverloadTy); 12694 12695 AddressOfFunctionResolver Resolver(*this, AddressOfExpr, TargetType, 12696 Complain); 12697 int NumMatches = Resolver.getNumMatches(); 12698 FunctionDecl *Fn = nullptr; 12699 bool ShouldComplain = Complain && !Resolver.hasComplained(); 12700 if (NumMatches == 0 && ShouldComplain) { 12701 if (Resolver.IsInvalidFormOfPointerToMemberFunction()) 12702 Resolver.ComplainIsInvalidFormOfPointerToMemberFunction(); 12703 else 12704 Resolver.ComplainNoMatchesFound(); 12705 } 12706 else if (NumMatches > 1 && ShouldComplain) 12707 Resolver.ComplainMultipleMatchesFound(); 12708 else if (NumMatches == 1) { 12709 Fn = Resolver.getMatchingFunctionDecl(); 12710 assert(Fn); 12711 if (auto *FPT = Fn->getType()->getAs<FunctionProtoType>()) 12712 ResolveExceptionSpec(AddressOfExpr->getExprLoc(), FPT); 12713 FoundResult = *Resolver.getMatchingFunctionAccessPair(); 12714 if (Complain) { 12715 if (Resolver.IsStaticMemberFunctionFromBoundPointer()) 12716 Resolver.ComplainIsStaticMemberFunctionFromBoundPointer(); 12717 else 12718 CheckAddressOfMemberAccess(AddressOfExpr, FoundResult); 12719 } 12720 } 12721 12722 if (pHadMultipleCandidates) 12723 *pHadMultipleCandidates = Resolver.hadMultipleCandidates(); 12724 return Fn; 12725 } 12726 12727 /// Given an expression that refers to an overloaded function, try to 12728 /// resolve that function to a single function that can have its address taken. 12729 /// This will modify `Pair` iff it returns non-null. 12730 /// 12731 /// This routine can only succeed if from all of the candidates in the overload 12732 /// set for SrcExpr that can have their addresses taken, there is one candidate 12733 /// that is more constrained than the rest. 12734 FunctionDecl * 12735 Sema::resolveAddressOfSingleOverloadCandidate(Expr *E, DeclAccessPair &Pair) { 12736 OverloadExpr::FindResult R = OverloadExpr::find(E); 12737 OverloadExpr *Ovl = R.Expression; 12738 bool IsResultAmbiguous = false; 12739 FunctionDecl *Result = nullptr; 12740 DeclAccessPair DAP; 12741 SmallVector<FunctionDecl *, 2> AmbiguousDecls; 12742 12743 auto CheckMoreConstrained = [&](FunctionDecl *FD1, 12744 FunctionDecl *FD2) -> std::optional<bool> { 12745 if (FunctionDecl *MF = FD1->getInstantiatedFromMemberFunction()) 12746 FD1 = MF; 12747 if (FunctionDecl *MF = FD2->getInstantiatedFromMemberFunction()) 12748 FD2 = MF; 12749 SmallVector<const Expr *, 1> AC1, AC2; 12750 FD1->getAssociatedConstraints(AC1); 12751 FD2->getAssociatedConstraints(AC2); 12752 bool AtLeastAsConstrained1, AtLeastAsConstrained2; 12753 if (IsAtLeastAsConstrained(FD1, AC1, FD2, AC2, AtLeastAsConstrained1)) 12754 return std::nullopt; 12755 if (IsAtLeastAsConstrained(FD2, AC2, FD1, AC1, AtLeastAsConstrained2)) 12756 return std::nullopt; 12757 if (AtLeastAsConstrained1 == AtLeastAsConstrained2) 12758 return std::nullopt; 12759 return AtLeastAsConstrained1; 12760 }; 12761 12762 // Don't use the AddressOfResolver because we're specifically looking for 12763 // cases where we have one overload candidate that lacks 12764 // enable_if/pass_object_size/... 12765 for (auto I = Ovl->decls_begin(), E = Ovl->decls_end(); I != E; ++I) { 12766 auto *FD = dyn_cast<FunctionDecl>(I->getUnderlyingDecl()); 12767 if (!FD) 12768 return nullptr; 12769 12770 if (!checkAddressOfFunctionIsAvailable(FD)) 12771 continue; 12772 12773 // We have more than one result - see if it is more constrained than the 12774 // previous one. 12775 if (Result) { 12776 std::optional<bool> MoreConstrainedThanPrevious = 12777 CheckMoreConstrained(FD, Result); 12778 if (!MoreConstrainedThanPrevious) { 12779 IsResultAmbiguous = true; 12780 AmbiguousDecls.push_back(FD); 12781 continue; 12782 } 12783 if (!*MoreConstrainedThanPrevious) 12784 continue; 12785 // FD is more constrained - replace Result with it. 12786 } 12787 IsResultAmbiguous = false; 12788 DAP = I.getPair(); 12789 Result = FD; 12790 } 12791 12792 if (IsResultAmbiguous) 12793 return nullptr; 12794 12795 if (Result) { 12796 SmallVector<const Expr *, 1> ResultAC; 12797 // We skipped over some ambiguous declarations which might be ambiguous with 12798 // the selected result. 12799 for (FunctionDecl *Skipped : AmbiguousDecls) 12800 if (!CheckMoreConstrained(Skipped, Result)) 12801 return nullptr; 12802 Pair = DAP; 12803 } 12804 return Result; 12805 } 12806 12807 /// Given an overloaded function, tries to turn it into a non-overloaded 12808 /// function reference using resolveAddressOfSingleOverloadCandidate. This 12809 /// will perform access checks, diagnose the use of the resultant decl, and, if 12810 /// requested, potentially perform a function-to-pointer decay. 12811 /// 12812 /// Returns false if resolveAddressOfSingleOverloadCandidate fails. 12813 /// Otherwise, returns true. This may emit diagnostics and return true. 12814 bool Sema::resolveAndFixAddressOfSingleOverloadCandidate( 12815 ExprResult &SrcExpr, bool DoFunctionPointerConversion) { 12816 Expr *E = SrcExpr.get(); 12817 assert(E->getType() == Context.OverloadTy && "SrcExpr must be an overload"); 12818 12819 DeclAccessPair DAP; 12820 FunctionDecl *Found = resolveAddressOfSingleOverloadCandidate(E, DAP); 12821 if (!Found || Found->isCPUDispatchMultiVersion() || 12822 Found->isCPUSpecificMultiVersion()) 12823 return false; 12824 12825 // Emitting multiple diagnostics for a function that is both inaccessible and 12826 // unavailable is consistent with our behavior elsewhere. So, always check 12827 // for both. 12828 DiagnoseUseOfDecl(Found, E->getExprLoc()); 12829 CheckAddressOfMemberAccess(E, DAP); 12830 Expr *Fixed = FixOverloadedFunctionReference(E, DAP, Found); 12831 if (DoFunctionPointerConversion && Fixed->getType()->isFunctionType()) 12832 SrcExpr = DefaultFunctionArrayConversion(Fixed, /*Diagnose=*/false); 12833 else 12834 SrcExpr = Fixed; 12835 return true; 12836 } 12837 12838 /// Given an expression that refers to an overloaded function, try to 12839 /// resolve that overloaded function expression down to a single function. 12840 /// 12841 /// This routine can only resolve template-ids that refer to a single function 12842 /// template, where that template-id refers to a single template whose template 12843 /// arguments are either provided by the template-id or have defaults, 12844 /// as described in C++0x [temp.arg.explicit]p3. 12845 /// 12846 /// If no template-ids are found, no diagnostics are emitted and NULL is 12847 /// returned. 12848 FunctionDecl *Sema::ResolveSingleFunctionTemplateSpecialization( 12849 OverloadExpr *ovl, bool Complain, DeclAccessPair *FoundResult, 12850 TemplateSpecCandidateSet *FailedTSC) { 12851 // C++ [over.over]p1: 12852 // [...] [Note: any redundant set of parentheses surrounding the 12853 // overloaded function name is ignored (5.1). ] 12854 // C++ [over.over]p1: 12855 // [...] The overloaded function name can be preceded by the & 12856 // operator. 12857 12858 // If we didn't actually find any template-ids, we're done. 12859 if (!ovl->hasExplicitTemplateArgs()) 12860 return nullptr; 12861 12862 TemplateArgumentListInfo ExplicitTemplateArgs; 12863 ovl->copyTemplateArgumentsInto(ExplicitTemplateArgs); 12864 12865 // Look through all of the overloaded functions, searching for one 12866 // whose type matches exactly. 12867 FunctionDecl *Matched = nullptr; 12868 for (UnresolvedSetIterator I = ovl->decls_begin(), 12869 E = ovl->decls_end(); I != E; ++I) { 12870 // C++0x [temp.arg.explicit]p3: 12871 // [...] In contexts where deduction is done and fails, or in contexts 12872 // where deduction is not done, if a template argument list is 12873 // specified and it, along with any default template arguments, 12874 // identifies a single function template specialization, then the 12875 // template-id is an lvalue for the function template specialization. 12876 FunctionTemplateDecl *FunctionTemplate 12877 = cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl()); 12878 12879 // C++ [over.over]p2: 12880 // If the name is a function template, template argument deduction is 12881 // done (14.8.2.2), and if the argument deduction succeeds, the 12882 // resulting template argument list is used to generate a single 12883 // function template specialization, which is added to the set of 12884 // overloaded functions considered. 12885 FunctionDecl *Specialization = nullptr; 12886 TemplateDeductionInfo Info(ovl->getNameLoc()); 12887 if (TemplateDeductionResult Result 12888 = DeduceTemplateArguments(FunctionTemplate, &ExplicitTemplateArgs, 12889 Specialization, Info, 12890 /*IsAddressOfFunction*/true)) { 12891 // Make a note of the failed deduction for diagnostics. 12892 if (FailedTSC) 12893 FailedTSC->addCandidate().set( 12894 I.getPair(), FunctionTemplate->getTemplatedDecl(), 12895 MakeDeductionFailureInfo(Context, Result, Info)); 12896 continue; 12897 } 12898 12899 assert(Specialization && "no specialization and no error?"); 12900 12901 // Multiple matches; we can't resolve to a single declaration. 12902 if (Matched) { 12903 if (Complain) { 12904 Diag(ovl->getExprLoc(), diag::err_addr_ovl_ambiguous) 12905 << ovl->getName(); 12906 NoteAllOverloadCandidates(ovl); 12907 } 12908 return nullptr; 12909 } 12910 12911 Matched = Specialization; 12912 if (FoundResult) *FoundResult = I.getPair(); 12913 } 12914 12915 if (Matched && 12916 completeFunctionType(*this, Matched, ovl->getExprLoc(), Complain)) 12917 return nullptr; 12918 12919 return Matched; 12920 } 12921 12922 // Resolve and fix an overloaded expression that can be resolved 12923 // because it identifies a single function template specialization. 12924 // 12925 // Last three arguments should only be supplied if Complain = true 12926 // 12927 // Return true if it was logically possible to so resolve the 12928 // expression, regardless of whether or not it succeeded. Always 12929 // returns true if 'complain' is set. 12930 bool Sema::ResolveAndFixSingleFunctionTemplateSpecialization( 12931 ExprResult &SrcExpr, bool doFunctionPointerConversion, bool complain, 12932 SourceRange OpRangeForComplaining, QualType DestTypeForComplaining, 12933 unsigned DiagIDForComplaining) { 12934 assert(SrcExpr.get()->getType() == Context.OverloadTy); 12935 12936 OverloadExpr::FindResult ovl = OverloadExpr::find(SrcExpr.get()); 12937 12938 DeclAccessPair found; 12939 ExprResult SingleFunctionExpression; 12940 if (FunctionDecl *fn = ResolveSingleFunctionTemplateSpecialization( 12941 ovl.Expression, /*complain*/ false, &found)) { 12942 if (DiagnoseUseOfDecl(fn, SrcExpr.get()->getBeginLoc())) { 12943 SrcExpr = ExprError(); 12944 return true; 12945 } 12946 12947 // It is only correct to resolve to an instance method if we're 12948 // resolving a form that's permitted to be a pointer to member. 12949 // Otherwise we'll end up making a bound member expression, which 12950 // is illegal in all the contexts we resolve like this. 12951 if (!ovl.HasFormOfMemberPointer && 12952 isa<CXXMethodDecl>(fn) && 12953 cast<CXXMethodDecl>(fn)->isInstance()) { 12954 if (!complain) return false; 12955 12956 Diag(ovl.Expression->getExprLoc(), 12957 diag::err_bound_member_function) 12958 << 0 << ovl.Expression->getSourceRange(); 12959 12960 // TODO: I believe we only end up here if there's a mix of 12961 // static and non-static candidates (otherwise the expression 12962 // would have 'bound member' type, not 'overload' type). 12963 // Ideally we would note which candidate was chosen and why 12964 // the static candidates were rejected. 12965 SrcExpr = ExprError(); 12966 return true; 12967 } 12968 12969 // Fix the expression to refer to 'fn'. 12970 SingleFunctionExpression = 12971 FixOverloadedFunctionReference(SrcExpr.get(), found, fn); 12972 12973 // If desired, do function-to-pointer decay. 12974 if (doFunctionPointerConversion) { 12975 SingleFunctionExpression = 12976 DefaultFunctionArrayLvalueConversion(SingleFunctionExpression.get()); 12977 if (SingleFunctionExpression.isInvalid()) { 12978 SrcExpr = ExprError(); 12979 return true; 12980 } 12981 } 12982 } 12983 12984 if (!SingleFunctionExpression.isUsable()) { 12985 if (complain) { 12986 Diag(OpRangeForComplaining.getBegin(), DiagIDForComplaining) 12987 << ovl.Expression->getName() 12988 << DestTypeForComplaining 12989 << OpRangeForComplaining 12990 << ovl.Expression->getQualifierLoc().getSourceRange(); 12991 NoteAllOverloadCandidates(SrcExpr.get()); 12992 12993 SrcExpr = ExprError(); 12994 return true; 12995 } 12996 12997 return false; 12998 } 12999 13000 SrcExpr = SingleFunctionExpression; 13001 return true; 13002 } 13003 13004 /// Add a single candidate to the overload set. 13005 static void AddOverloadedCallCandidate(Sema &S, 13006 DeclAccessPair FoundDecl, 13007 TemplateArgumentListInfo *ExplicitTemplateArgs, 13008 ArrayRef<Expr *> Args, 13009 OverloadCandidateSet &CandidateSet, 13010 bool PartialOverloading, 13011 bool KnownValid) { 13012 NamedDecl *Callee = FoundDecl.getDecl(); 13013 if (isa<UsingShadowDecl>(Callee)) 13014 Callee = cast<UsingShadowDecl>(Callee)->getTargetDecl(); 13015 13016 if (FunctionDecl *Func = dyn_cast<FunctionDecl>(Callee)) { 13017 if (ExplicitTemplateArgs) { 13018 assert(!KnownValid && "Explicit template arguments?"); 13019 return; 13020 } 13021 // Prevent ill-formed function decls to be added as overload candidates. 13022 if (!isa<FunctionProtoType>(Func->getType()->getAs<FunctionType>())) 13023 return; 13024 13025 S.AddOverloadCandidate(Func, FoundDecl, Args, CandidateSet, 13026 /*SuppressUserConversions=*/false, 13027 PartialOverloading); 13028 return; 13029 } 13030 13031 if (FunctionTemplateDecl *FuncTemplate 13032 = dyn_cast<FunctionTemplateDecl>(Callee)) { 13033 S.AddTemplateOverloadCandidate(FuncTemplate, FoundDecl, 13034 ExplicitTemplateArgs, Args, CandidateSet, 13035 /*SuppressUserConversions=*/false, 13036 PartialOverloading); 13037 return; 13038 } 13039 13040 assert(!KnownValid && "unhandled case in overloaded call candidate"); 13041 } 13042 13043 /// Add the overload candidates named by callee and/or found by argument 13044 /// dependent lookup to the given overload set. 13045 void Sema::AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE, 13046 ArrayRef<Expr *> Args, 13047 OverloadCandidateSet &CandidateSet, 13048 bool PartialOverloading) { 13049 13050 #ifndef NDEBUG 13051 // Verify that ArgumentDependentLookup is consistent with the rules 13052 // in C++0x [basic.lookup.argdep]p3: 13053 // 13054 // Let X be the lookup set produced by unqualified lookup (3.4.1) 13055 // and let Y be the lookup set produced by argument dependent 13056 // lookup (defined as follows). If X contains 13057 // 13058 // -- a declaration of a class member, or 13059 // 13060 // -- a block-scope function declaration that is not a 13061 // using-declaration, or 13062 // 13063 // -- a declaration that is neither a function or a function 13064 // template 13065 // 13066 // then Y is empty. 13067 13068 if (ULE->requiresADL()) { 13069 for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(), 13070 E = ULE->decls_end(); I != E; ++I) { 13071 assert(!(*I)->getDeclContext()->isRecord()); 13072 assert(isa<UsingShadowDecl>(*I) || 13073 !(*I)->getDeclContext()->isFunctionOrMethod()); 13074 assert((*I)->getUnderlyingDecl()->isFunctionOrFunctionTemplate()); 13075 } 13076 } 13077 #endif 13078 13079 // It would be nice to avoid this copy. 13080 TemplateArgumentListInfo TABuffer; 13081 TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr; 13082 if (ULE->hasExplicitTemplateArgs()) { 13083 ULE->copyTemplateArgumentsInto(TABuffer); 13084 ExplicitTemplateArgs = &TABuffer; 13085 } 13086 13087 for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(), 13088 E = ULE->decls_end(); I != E; ++I) 13089 AddOverloadedCallCandidate(*this, I.getPair(), ExplicitTemplateArgs, Args, 13090 CandidateSet, PartialOverloading, 13091 /*KnownValid*/ true); 13092 13093 if (ULE->requiresADL()) 13094 AddArgumentDependentLookupCandidates(ULE->getName(), ULE->getExprLoc(), 13095 Args, ExplicitTemplateArgs, 13096 CandidateSet, PartialOverloading); 13097 } 13098 13099 /// Add the call candidates from the given set of lookup results to the given 13100 /// overload set. Non-function lookup results are ignored. 13101 void Sema::AddOverloadedCallCandidates( 13102 LookupResult &R, TemplateArgumentListInfo *ExplicitTemplateArgs, 13103 ArrayRef<Expr *> Args, OverloadCandidateSet &CandidateSet) { 13104 for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I) 13105 AddOverloadedCallCandidate(*this, I.getPair(), ExplicitTemplateArgs, Args, 13106 CandidateSet, false, /*KnownValid*/ false); 13107 } 13108 13109 /// Determine whether a declaration with the specified name could be moved into 13110 /// a different namespace. 13111 static bool canBeDeclaredInNamespace(const DeclarationName &Name) { 13112 switch (Name.getCXXOverloadedOperator()) { 13113 case OO_New: case OO_Array_New: 13114 case OO_Delete: case OO_Array_Delete: 13115 return false; 13116 13117 default: 13118 return true; 13119 } 13120 } 13121 13122 /// Attempt to recover from an ill-formed use of a non-dependent name in a 13123 /// template, where the non-dependent name was declared after the template 13124 /// was defined. This is common in code written for a compilers which do not 13125 /// correctly implement two-stage name lookup. 13126 /// 13127 /// Returns true if a viable candidate was found and a diagnostic was issued. 13128 static bool DiagnoseTwoPhaseLookup( 13129 Sema &SemaRef, SourceLocation FnLoc, const CXXScopeSpec &SS, 13130 LookupResult &R, OverloadCandidateSet::CandidateSetKind CSK, 13131 TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args, 13132 CXXRecordDecl **FoundInClass = nullptr) { 13133 if (!SemaRef.inTemplateInstantiation() || !SS.isEmpty()) 13134 return false; 13135 13136 for (DeclContext *DC = SemaRef.CurContext; DC; DC = DC->getParent()) { 13137 if (DC->isTransparentContext()) 13138 continue; 13139 13140 SemaRef.LookupQualifiedName(R, DC); 13141 13142 if (!R.empty()) { 13143 R.suppressDiagnostics(); 13144 13145 OverloadCandidateSet Candidates(FnLoc, CSK); 13146 SemaRef.AddOverloadedCallCandidates(R, ExplicitTemplateArgs, Args, 13147 Candidates); 13148 13149 OverloadCandidateSet::iterator Best; 13150 OverloadingResult OR = 13151 Candidates.BestViableFunction(SemaRef, FnLoc, Best); 13152 13153 if (auto *RD = dyn_cast<CXXRecordDecl>(DC)) { 13154 // We either found non-function declarations or a best viable function 13155 // at class scope. A class-scope lookup result disables ADL. Don't 13156 // look past this, but let the caller know that we found something that 13157 // either is, or might be, usable in this class. 13158 if (FoundInClass) { 13159 *FoundInClass = RD; 13160 if (OR == OR_Success) { 13161 R.clear(); 13162 R.addDecl(Best->FoundDecl.getDecl(), Best->FoundDecl.getAccess()); 13163 R.resolveKind(); 13164 } 13165 } 13166 return false; 13167 } 13168 13169 if (OR != OR_Success) { 13170 // There wasn't a unique best function or function template. 13171 return false; 13172 } 13173 13174 // Find the namespaces where ADL would have looked, and suggest 13175 // declaring the function there instead. 13176 Sema::AssociatedNamespaceSet AssociatedNamespaces; 13177 Sema::AssociatedClassSet AssociatedClasses; 13178 SemaRef.FindAssociatedClassesAndNamespaces(FnLoc, Args, 13179 AssociatedNamespaces, 13180 AssociatedClasses); 13181 Sema::AssociatedNamespaceSet SuggestedNamespaces; 13182 if (canBeDeclaredInNamespace(R.getLookupName())) { 13183 DeclContext *Std = SemaRef.getStdNamespace(); 13184 for (Sema::AssociatedNamespaceSet::iterator 13185 it = AssociatedNamespaces.begin(), 13186 end = AssociatedNamespaces.end(); it != end; ++it) { 13187 // Never suggest declaring a function within namespace 'std'. 13188 if (Std && Std->Encloses(*it)) 13189 continue; 13190 13191 // Never suggest declaring a function within a namespace with a 13192 // reserved name, like __gnu_cxx. 13193 NamespaceDecl *NS = dyn_cast<NamespaceDecl>(*it); 13194 if (NS && 13195 NS->getQualifiedNameAsString().find("__") != std::string::npos) 13196 continue; 13197 13198 SuggestedNamespaces.insert(*it); 13199 } 13200 } 13201 13202 SemaRef.Diag(R.getNameLoc(), diag::err_not_found_by_two_phase_lookup) 13203 << R.getLookupName(); 13204 if (SuggestedNamespaces.empty()) { 13205 SemaRef.Diag(Best->Function->getLocation(), 13206 diag::note_not_found_by_two_phase_lookup) 13207 << R.getLookupName() << 0; 13208 } else if (SuggestedNamespaces.size() == 1) { 13209 SemaRef.Diag(Best->Function->getLocation(), 13210 diag::note_not_found_by_two_phase_lookup) 13211 << R.getLookupName() << 1 << *SuggestedNamespaces.begin(); 13212 } else { 13213 // FIXME: It would be useful to list the associated namespaces here, 13214 // but the diagnostics infrastructure doesn't provide a way to produce 13215 // a localized representation of a list of items. 13216 SemaRef.Diag(Best->Function->getLocation(), 13217 diag::note_not_found_by_two_phase_lookup) 13218 << R.getLookupName() << 2; 13219 } 13220 13221 // Try to recover by calling this function. 13222 return true; 13223 } 13224 13225 R.clear(); 13226 } 13227 13228 return false; 13229 } 13230 13231 /// Attempt to recover from ill-formed use of a non-dependent operator in a 13232 /// template, where the non-dependent operator was declared after the template 13233 /// was defined. 13234 /// 13235 /// Returns true if a viable candidate was found and a diagnostic was issued. 13236 static bool 13237 DiagnoseTwoPhaseOperatorLookup(Sema &SemaRef, OverloadedOperatorKind Op, 13238 SourceLocation OpLoc, 13239 ArrayRef<Expr *> Args) { 13240 DeclarationName OpName = 13241 SemaRef.Context.DeclarationNames.getCXXOperatorName(Op); 13242 LookupResult R(SemaRef, OpName, OpLoc, Sema::LookupOperatorName); 13243 return DiagnoseTwoPhaseLookup(SemaRef, OpLoc, CXXScopeSpec(), R, 13244 OverloadCandidateSet::CSK_Operator, 13245 /*ExplicitTemplateArgs=*/nullptr, Args); 13246 } 13247 13248 namespace { 13249 class BuildRecoveryCallExprRAII { 13250 Sema &SemaRef; 13251 Sema::SatisfactionStackResetRAII SatStack; 13252 13253 public: 13254 BuildRecoveryCallExprRAII(Sema &S) : SemaRef(S), SatStack(S) { 13255 assert(SemaRef.IsBuildingRecoveryCallExpr == false); 13256 SemaRef.IsBuildingRecoveryCallExpr = true; 13257 } 13258 13259 ~BuildRecoveryCallExprRAII() { SemaRef.IsBuildingRecoveryCallExpr = false; } 13260 }; 13261 } 13262 13263 /// Attempts to recover from a call where no functions were found. 13264 /// 13265 /// This function will do one of three things: 13266 /// * Diagnose, recover, and return a recovery expression. 13267 /// * Diagnose, fail to recover, and return ExprError(). 13268 /// * Do not diagnose, do not recover, and return ExprResult(). The caller is 13269 /// expected to diagnose as appropriate. 13270 static ExprResult 13271 BuildRecoveryCallExpr(Sema &SemaRef, Scope *S, Expr *Fn, 13272 UnresolvedLookupExpr *ULE, 13273 SourceLocation LParenLoc, 13274 MutableArrayRef<Expr *> Args, 13275 SourceLocation RParenLoc, 13276 bool EmptyLookup, bool AllowTypoCorrection) { 13277 // Do not try to recover if it is already building a recovery call. 13278 // This stops infinite loops for template instantiations like 13279 // 13280 // template <typename T> auto foo(T t) -> decltype(foo(t)) {} 13281 // template <typename T> auto foo(T t) -> decltype(foo(&t)) {} 13282 if (SemaRef.IsBuildingRecoveryCallExpr) 13283 return ExprResult(); 13284 BuildRecoveryCallExprRAII RCE(SemaRef); 13285 13286 CXXScopeSpec SS; 13287 SS.Adopt(ULE->getQualifierLoc()); 13288 SourceLocation TemplateKWLoc = ULE->getTemplateKeywordLoc(); 13289 13290 TemplateArgumentListInfo TABuffer; 13291 TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr; 13292 if (ULE->hasExplicitTemplateArgs()) { 13293 ULE->copyTemplateArgumentsInto(TABuffer); 13294 ExplicitTemplateArgs = &TABuffer; 13295 } 13296 13297 LookupResult R(SemaRef, ULE->getName(), ULE->getNameLoc(), 13298 Sema::LookupOrdinaryName); 13299 CXXRecordDecl *FoundInClass = nullptr; 13300 if (DiagnoseTwoPhaseLookup(SemaRef, Fn->getExprLoc(), SS, R, 13301 OverloadCandidateSet::CSK_Normal, 13302 ExplicitTemplateArgs, Args, &FoundInClass)) { 13303 // OK, diagnosed a two-phase lookup issue. 13304 } else if (EmptyLookup) { 13305 // Try to recover from an empty lookup with typo correction. 13306 R.clear(); 13307 NoTypoCorrectionCCC NoTypoValidator{}; 13308 FunctionCallFilterCCC FunctionCallValidator(SemaRef, Args.size(), 13309 ExplicitTemplateArgs != nullptr, 13310 dyn_cast<MemberExpr>(Fn)); 13311 CorrectionCandidateCallback &Validator = 13312 AllowTypoCorrection 13313 ? static_cast<CorrectionCandidateCallback &>(FunctionCallValidator) 13314 : static_cast<CorrectionCandidateCallback &>(NoTypoValidator); 13315 if (SemaRef.DiagnoseEmptyLookup(S, SS, R, Validator, ExplicitTemplateArgs, 13316 Args)) 13317 return ExprError(); 13318 } else if (FoundInClass && SemaRef.getLangOpts().MSVCCompat) { 13319 // We found a usable declaration of the name in a dependent base of some 13320 // enclosing class. 13321 // FIXME: We should also explain why the candidates found by name lookup 13322 // were not viable. 13323 if (SemaRef.DiagnoseDependentMemberLookup(R)) 13324 return ExprError(); 13325 } else { 13326 // We had viable candidates and couldn't recover; let the caller diagnose 13327 // this. 13328 return ExprResult(); 13329 } 13330 13331 // If we get here, we should have issued a diagnostic and formed a recovery 13332 // lookup result. 13333 assert(!R.empty() && "lookup results empty despite recovery"); 13334 13335 // If recovery created an ambiguity, just bail out. 13336 if (R.isAmbiguous()) { 13337 R.suppressDiagnostics(); 13338 return ExprError(); 13339 } 13340 13341 // Build an implicit member call if appropriate. Just drop the 13342 // casts and such from the call, we don't really care. 13343 ExprResult NewFn = ExprError(); 13344 if ((*R.begin())->isCXXClassMember()) 13345 NewFn = SemaRef.BuildPossibleImplicitMemberExpr(SS, TemplateKWLoc, R, 13346 ExplicitTemplateArgs, S); 13347 else if (ExplicitTemplateArgs || TemplateKWLoc.isValid()) 13348 NewFn = SemaRef.BuildTemplateIdExpr(SS, TemplateKWLoc, R, false, 13349 ExplicitTemplateArgs); 13350 else 13351 NewFn = SemaRef.BuildDeclarationNameExpr(SS, R, false); 13352 13353 if (NewFn.isInvalid()) 13354 return ExprError(); 13355 13356 // This shouldn't cause an infinite loop because we're giving it 13357 // an expression with viable lookup results, which should never 13358 // end up here. 13359 return SemaRef.BuildCallExpr(/*Scope*/ nullptr, NewFn.get(), LParenLoc, 13360 MultiExprArg(Args.data(), Args.size()), 13361 RParenLoc); 13362 } 13363 13364 /// Constructs and populates an OverloadedCandidateSet from 13365 /// the given function. 13366 /// \returns true when an the ExprResult output parameter has been set. 13367 bool Sema::buildOverloadedCallSet(Scope *S, Expr *Fn, 13368 UnresolvedLookupExpr *ULE, 13369 MultiExprArg Args, 13370 SourceLocation RParenLoc, 13371 OverloadCandidateSet *CandidateSet, 13372 ExprResult *Result) { 13373 #ifndef NDEBUG 13374 if (ULE->requiresADL()) { 13375 // To do ADL, we must have found an unqualified name. 13376 assert(!ULE->getQualifier() && "qualified name with ADL"); 13377 13378 // We don't perform ADL for implicit declarations of builtins. 13379 // Verify that this was correctly set up. 13380 FunctionDecl *F; 13381 if (ULE->decls_begin() != ULE->decls_end() && 13382 ULE->decls_begin() + 1 == ULE->decls_end() && 13383 (F = dyn_cast<FunctionDecl>(*ULE->decls_begin())) && 13384 F->getBuiltinID() && F->isImplicit()) 13385 llvm_unreachable("performing ADL for builtin"); 13386 13387 // We don't perform ADL in C. 13388 assert(getLangOpts().CPlusPlus && "ADL enabled in C"); 13389 } 13390 #endif 13391 13392 UnbridgedCastsSet UnbridgedCasts; 13393 if (checkArgPlaceholdersForOverload(*this, Args, UnbridgedCasts)) { 13394 *Result = ExprError(); 13395 return true; 13396 } 13397 13398 // Add the functions denoted by the callee to the set of candidate 13399 // functions, including those from argument-dependent lookup. 13400 AddOverloadedCallCandidates(ULE, Args, *CandidateSet); 13401 13402 if (getLangOpts().MSVCCompat && 13403 CurContext->isDependentContext() && !isSFINAEContext() && 13404 (isa<FunctionDecl>(CurContext) || isa<CXXRecordDecl>(CurContext))) { 13405 13406 OverloadCandidateSet::iterator Best; 13407 if (CandidateSet->empty() || 13408 CandidateSet->BestViableFunction(*this, Fn->getBeginLoc(), Best) == 13409 OR_No_Viable_Function) { 13410 // In Microsoft mode, if we are inside a template class member function 13411 // then create a type dependent CallExpr. The goal is to postpone name 13412 // lookup to instantiation time to be able to search into type dependent 13413 // base classes. 13414 CallExpr *CE = 13415 CallExpr::Create(Context, Fn, Args, Context.DependentTy, VK_PRValue, 13416 RParenLoc, CurFPFeatureOverrides()); 13417 CE->markDependentForPostponedNameLookup(); 13418 *Result = CE; 13419 return true; 13420 } 13421 } 13422 13423 if (CandidateSet->empty()) 13424 return false; 13425 13426 UnbridgedCasts.restore(); 13427 return false; 13428 } 13429 13430 // Guess at what the return type for an unresolvable overload should be. 13431 static QualType chooseRecoveryType(OverloadCandidateSet &CS, 13432 OverloadCandidateSet::iterator *Best) { 13433 std::optional<QualType> Result; 13434 // Adjust Type after seeing a candidate. 13435 auto ConsiderCandidate = [&](const OverloadCandidate &Candidate) { 13436 if (!Candidate.Function) 13437 return; 13438 if (Candidate.Function->isInvalidDecl()) 13439 return; 13440 QualType T = Candidate.Function->getReturnType(); 13441 if (T.isNull()) 13442 return; 13443 if (!Result) 13444 Result = T; 13445 else if (Result != T) 13446 Result = QualType(); 13447 }; 13448 13449 // Look for an unambiguous type from a progressively larger subset. 13450 // e.g. if types disagree, but all *viable* overloads return int, choose int. 13451 // 13452 // First, consider only the best candidate. 13453 if (Best && *Best != CS.end()) 13454 ConsiderCandidate(**Best); 13455 // Next, consider only viable candidates. 13456 if (!Result) 13457 for (const auto &C : CS) 13458 if (C.Viable) 13459 ConsiderCandidate(C); 13460 // Finally, consider all candidates. 13461 if (!Result) 13462 for (const auto &C : CS) 13463 ConsiderCandidate(C); 13464 13465 if (!Result) 13466 return QualType(); 13467 auto Value = *Result; 13468 if (Value.isNull() || Value->isUndeducedType()) 13469 return QualType(); 13470 return Value; 13471 } 13472 13473 /// FinishOverloadedCallExpr - given an OverloadCandidateSet, builds and returns 13474 /// the completed call expression. If overload resolution fails, emits 13475 /// diagnostics and returns ExprError() 13476 static ExprResult FinishOverloadedCallExpr(Sema &SemaRef, Scope *S, Expr *Fn, 13477 UnresolvedLookupExpr *ULE, 13478 SourceLocation LParenLoc, 13479 MultiExprArg Args, 13480 SourceLocation RParenLoc, 13481 Expr *ExecConfig, 13482 OverloadCandidateSet *CandidateSet, 13483 OverloadCandidateSet::iterator *Best, 13484 OverloadingResult OverloadResult, 13485 bool AllowTypoCorrection) { 13486 switch (OverloadResult) { 13487 case OR_Success: { 13488 FunctionDecl *FDecl = (*Best)->Function; 13489 SemaRef.CheckUnresolvedLookupAccess(ULE, (*Best)->FoundDecl); 13490 if (SemaRef.DiagnoseUseOfDecl(FDecl, ULE->getNameLoc())) 13491 return ExprError(); 13492 Fn = SemaRef.FixOverloadedFunctionReference(Fn, (*Best)->FoundDecl, FDecl); 13493 return SemaRef.BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, RParenLoc, 13494 ExecConfig, /*IsExecConfig=*/false, 13495 (*Best)->IsADLCandidate); 13496 } 13497 13498 case OR_No_Viable_Function: { 13499 // Try to recover by looking for viable functions which the user might 13500 // have meant to call. 13501 ExprResult Recovery = BuildRecoveryCallExpr(SemaRef, S, Fn, ULE, LParenLoc, 13502 Args, RParenLoc, 13503 CandidateSet->empty(), 13504 AllowTypoCorrection); 13505 if (Recovery.isInvalid() || Recovery.isUsable()) 13506 return Recovery; 13507 13508 // If the user passes in a function that we can't take the address of, we 13509 // generally end up emitting really bad error messages. Here, we attempt to 13510 // emit better ones. 13511 for (const Expr *Arg : Args) { 13512 if (!Arg->getType()->isFunctionType()) 13513 continue; 13514 if (auto *DRE = dyn_cast<DeclRefExpr>(Arg->IgnoreParenImpCasts())) { 13515 auto *FD = dyn_cast<FunctionDecl>(DRE->getDecl()); 13516 if (FD && 13517 !SemaRef.checkAddressOfFunctionIsAvailable(FD, /*Complain=*/true, 13518 Arg->getExprLoc())) 13519 return ExprError(); 13520 } 13521 } 13522 13523 CandidateSet->NoteCandidates( 13524 PartialDiagnosticAt( 13525 Fn->getBeginLoc(), 13526 SemaRef.PDiag(diag::err_ovl_no_viable_function_in_call) 13527 << ULE->getName() << Fn->getSourceRange()), 13528 SemaRef, OCD_AllCandidates, Args); 13529 break; 13530 } 13531 13532 case OR_Ambiguous: 13533 CandidateSet->NoteCandidates( 13534 PartialDiagnosticAt(Fn->getBeginLoc(), 13535 SemaRef.PDiag(diag::err_ovl_ambiguous_call) 13536 << ULE->getName() << Fn->getSourceRange()), 13537 SemaRef, OCD_AmbiguousCandidates, Args); 13538 break; 13539 13540 case OR_Deleted: { 13541 CandidateSet->NoteCandidates( 13542 PartialDiagnosticAt(Fn->getBeginLoc(), 13543 SemaRef.PDiag(diag::err_ovl_deleted_call) 13544 << ULE->getName() << Fn->getSourceRange()), 13545 SemaRef, OCD_AllCandidates, Args); 13546 13547 // We emitted an error for the unavailable/deleted function call but keep 13548 // the call in the AST. 13549 FunctionDecl *FDecl = (*Best)->Function; 13550 Fn = SemaRef.FixOverloadedFunctionReference(Fn, (*Best)->FoundDecl, FDecl); 13551 return SemaRef.BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, RParenLoc, 13552 ExecConfig, /*IsExecConfig=*/false, 13553 (*Best)->IsADLCandidate); 13554 } 13555 } 13556 13557 // Overload resolution failed, try to recover. 13558 SmallVector<Expr *, 8> SubExprs = {Fn}; 13559 SubExprs.append(Args.begin(), Args.end()); 13560 return SemaRef.CreateRecoveryExpr(Fn->getBeginLoc(), RParenLoc, SubExprs, 13561 chooseRecoveryType(*CandidateSet, Best)); 13562 } 13563 13564 static void markUnaddressableCandidatesUnviable(Sema &S, 13565 OverloadCandidateSet &CS) { 13566 for (auto I = CS.begin(), E = CS.end(); I != E; ++I) { 13567 if (I->Viable && 13568 !S.checkAddressOfFunctionIsAvailable(I->Function, /*Complain=*/false)) { 13569 I->Viable = false; 13570 I->FailureKind = ovl_fail_addr_not_available; 13571 } 13572 } 13573 } 13574 13575 /// BuildOverloadedCallExpr - Given the call expression that calls Fn 13576 /// (which eventually refers to the declaration Func) and the call 13577 /// arguments Args/NumArgs, attempt to resolve the function call down 13578 /// to a specific function. If overload resolution succeeds, returns 13579 /// the call expression produced by overload resolution. 13580 /// Otherwise, emits diagnostics and returns ExprError. 13581 ExprResult Sema::BuildOverloadedCallExpr(Scope *S, Expr *Fn, 13582 UnresolvedLookupExpr *ULE, 13583 SourceLocation LParenLoc, 13584 MultiExprArg Args, 13585 SourceLocation RParenLoc, 13586 Expr *ExecConfig, 13587 bool AllowTypoCorrection, 13588 bool CalleesAddressIsTaken) { 13589 OverloadCandidateSet CandidateSet(Fn->getExprLoc(), 13590 OverloadCandidateSet::CSK_Normal); 13591 ExprResult result; 13592 13593 if (buildOverloadedCallSet(S, Fn, ULE, Args, LParenLoc, &CandidateSet, 13594 &result)) 13595 return result; 13596 13597 // If the user handed us something like `(&Foo)(Bar)`, we need to ensure that 13598 // functions that aren't addressible are considered unviable. 13599 if (CalleesAddressIsTaken) 13600 markUnaddressableCandidatesUnviable(*this, CandidateSet); 13601 13602 OverloadCandidateSet::iterator Best; 13603 OverloadingResult OverloadResult = 13604 CandidateSet.BestViableFunction(*this, Fn->getBeginLoc(), Best); 13605 13606 return FinishOverloadedCallExpr(*this, S, Fn, ULE, LParenLoc, Args, RParenLoc, 13607 ExecConfig, &CandidateSet, &Best, 13608 OverloadResult, AllowTypoCorrection); 13609 } 13610 13611 static bool IsOverloaded(const UnresolvedSetImpl &Functions) { 13612 return Functions.size() > 1 || 13613 (Functions.size() == 1 && 13614 isa<FunctionTemplateDecl>((*Functions.begin())->getUnderlyingDecl())); 13615 } 13616 13617 ExprResult Sema::CreateUnresolvedLookupExpr(CXXRecordDecl *NamingClass, 13618 NestedNameSpecifierLoc NNSLoc, 13619 DeclarationNameInfo DNI, 13620 const UnresolvedSetImpl &Fns, 13621 bool PerformADL) { 13622 return UnresolvedLookupExpr::Create(Context, NamingClass, NNSLoc, DNI, 13623 PerformADL, IsOverloaded(Fns), 13624 Fns.begin(), Fns.end()); 13625 } 13626 13627 /// Create a unary operation that may resolve to an overloaded 13628 /// operator. 13629 /// 13630 /// \param OpLoc The location of the operator itself (e.g., '*'). 13631 /// 13632 /// \param Opc The UnaryOperatorKind that describes this operator. 13633 /// 13634 /// \param Fns The set of non-member functions that will be 13635 /// considered by overload resolution. The caller needs to build this 13636 /// set based on the context using, e.g., 13637 /// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This 13638 /// set should not contain any member functions; those will be added 13639 /// by CreateOverloadedUnaryOp(). 13640 /// 13641 /// \param Input The input argument. 13642 ExprResult 13643 Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, 13644 const UnresolvedSetImpl &Fns, 13645 Expr *Input, bool PerformADL) { 13646 OverloadedOperatorKind Op = UnaryOperator::getOverloadedOperator(Opc); 13647 assert(Op != OO_None && "Invalid opcode for overloaded unary operator"); 13648 DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op); 13649 // TODO: provide better source location info. 13650 DeclarationNameInfo OpNameInfo(OpName, OpLoc); 13651 13652 if (checkPlaceholderForOverload(*this, Input)) 13653 return ExprError(); 13654 13655 Expr *Args[2] = { Input, nullptr }; 13656 unsigned NumArgs = 1; 13657 13658 // For post-increment and post-decrement, add the implicit '0' as 13659 // the second argument, so that we know this is a post-increment or 13660 // post-decrement. 13661 if (Opc == UO_PostInc || Opc == UO_PostDec) { 13662 llvm::APSInt Zero(Context.getTypeSize(Context.IntTy), false); 13663 Args[1] = IntegerLiteral::Create(Context, Zero, Context.IntTy, 13664 SourceLocation()); 13665 NumArgs = 2; 13666 } 13667 13668 ArrayRef<Expr *> ArgsArray(Args, NumArgs); 13669 13670 if (Input->isTypeDependent()) { 13671 if (Fns.empty()) 13672 return UnaryOperator::Create(Context, Input, Opc, Context.DependentTy, 13673 VK_PRValue, OK_Ordinary, OpLoc, false, 13674 CurFPFeatureOverrides()); 13675 13676 CXXRecordDecl *NamingClass = nullptr; // lookup ignores member operators 13677 ExprResult Fn = CreateUnresolvedLookupExpr( 13678 NamingClass, NestedNameSpecifierLoc(), OpNameInfo, Fns); 13679 if (Fn.isInvalid()) 13680 return ExprError(); 13681 return CXXOperatorCallExpr::Create(Context, Op, Fn.get(), ArgsArray, 13682 Context.DependentTy, VK_PRValue, OpLoc, 13683 CurFPFeatureOverrides()); 13684 } 13685 13686 // Build an empty overload set. 13687 OverloadCandidateSet CandidateSet(OpLoc, OverloadCandidateSet::CSK_Operator); 13688 13689 // Add the candidates from the given function set. 13690 AddNonMemberOperatorCandidates(Fns, ArgsArray, CandidateSet); 13691 13692 // Add operator candidates that are member functions. 13693 AddMemberOperatorCandidates(Op, OpLoc, ArgsArray, CandidateSet); 13694 13695 // Add candidates from ADL. 13696 if (PerformADL) { 13697 AddArgumentDependentLookupCandidates(OpName, OpLoc, ArgsArray, 13698 /*ExplicitTemplateArgs*/nullptr, 13699 CandidateSet); 13700 } 13701 13702 // Add builtin operator candidates. 13703 AddBuiltinOperatorCandidates(Op, OpLoc, ArgsArray, CandidateSet); 13704 13705 bool HadMultipleCandidates = (CandidateSet.size() > 1); 13706 13707 // Perform overload resolution. 13708 OverloadCandidateSet::iterator Best; 13709 switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) { 13710 case OR_Success: { 13711 // We found a built-in operator or an overloaded operator. 13712 FunctionDecl *FnDecl = Best->Function; 13713 13714 if (FnDecl) { 13715 Expr *Base = nullptr; 13716 // We matched an overloaded operator. Build a call to that 13717 // operator. 13718 13719 // Convert the arguments. 13720 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) { 13721 CheckMemberOperatorAccess(OpLoc, Args[0], nullptr, Best->FoundDecl); 13722 13723 ExprResult InputRes = 13724 PerformObjectArgumentInitialization(Input, /*Qualifier=*/nullptr, 13725 Best->FoundDecl, Method); 13726 if (InputRes.isInvalid()) 13727 return ExprError(); 13728 Base = Input = InputRes.get(); 13729 } else { 13730 // Convert the arguments. 13731 ExprResult InputInit 13732 = PerformCopyInitialization(InitializedEntity::InitializeParameter( 13733 Context, 13734 FnDecl->getParamDecl(0)), 13735 SourceLocation(), 13736 Input); 13737 if (InputInit.isInvalid()) 13738 return ExprError(); 13739 Input = InputInit.get(); 13740 } 13741 13742 // Build the actual expression node. 13743 ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl, Best->FoundDecl, 13744 Base, HadMultipleCandidates, 13745 OpLoc); 13746 if (FnExpr.isInvalid()) 13747 return ExprError(); 13748 13749 // Determine the result type. 13750 QualType ResultTy = FnDecl->getReturnType(); 13751 ExprValueKind VK = Expr::getValueKindForType(ResultTy); 13752 ResultTy = ResultTy.getNonLValueExprType(Context); 13753 13754 Args[0] = Input; 13755 CallExpr *TheCall = CXXOperatorCallExpr::Create( 13756 Context, Op, FnExpr.get(), ArgsArray, ResultTy, VK, OpLoc, 13757 CurFPFeatureOverrides(), Best->IsADLCandidate); 13758 13759 if (CheckCallReturnType(FnDecl->getReturnType(), OpLoc, TheCall, FnDecl)) 13760 return ExprError(); 13761 13762 if (CheckFunctionCall(FnDecl, TheCall, 13763 FnDecl->getType()->castAs<FunctionProtoType>())) 13764 return ExprError(); 13765 return CheckForImmediateInvocation(MaybeBindToTemporary(TheCall), FnDecl); 13766 } else { 13767 // We matched a built-in operator. Convert the arguments, then 13768 // break out so that we will build the appropriate built-in 13769 // operator node. 13770 ExprResult InputRes = PerformImplicitConversion( 13771 Input, Best->BuiltinParamTypes[0], Best->Conversions[0], AA_Passing, 13772 CCK_ForBuiltinOverloadedOp); 13773 if (InputRes.isInvalid()) 13774 return ExprError(); 13775 Input = InputRes.get(); 13776 break; 13777 } 13778 } 13779 13780 case OR_No_Viable_Function: 13781 // This is an erroneous use of an operator which can be overloaded by 13782 // a non-member function. Check for non-member operators which were 13783 // defined too late to be candidates. 13784 if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc, ArgsArray)) 13785 // FIXME: Recover by calling the found function. 13786 return ExprError(); 13787 13788 // No viable function; fall through to handling this as a 13789 // built-in operator, which will produce an error message for us. 13790 break; 13791 13792 case OR_Ambiguous: 13793 CandidateSet.NoteCandidates( 13794 PartialDiagnosticAt(OpLoc, 13795 PDiag(diag::err_ovl_ambiguous_oper_unary) 13796 << UnaryOperator::getOpcodeStr(Opc) 13797 << Input->getType() << Input->getSourceRange()), 13798 *this, OCD_AmbiguousCandidates, ArgsArray, 13799 UnaryOperator::getOpcodeStr(Opc), OpLoc); 13800 return ExprError(); 13801 13802 case OR_Deleted: 13803 CandidateSet.NoteCandidates( 13804 PartialDiagnosticAt(OpLoc, PDiag(diag::err_ovl_deleted_oper) 13805 << UnaryOperator::getOpcodeStr(Opc) 13806 << Input->getSourceRange()), 13807 *this, OCD_AllCandidates, ArgsArray, UnaryOperator::getOpcodeStr(Opc), 13808 OpLoc); 13809 return ExprError(); 13810 } 13811 13812 // Either we found no viable overloaded operator or we matched a 13813 // built-in operator. In either case, fall through to trying to 13814 // build a built-in operation. 13815 return CreateBuiltinUnaryOp(OpLoc, Opc, Input); 13816 } 13817 13818 /// Perform lookup for an overloaded binary operator. 13819 void Sema::LookupOverloadedBinOp(OverloadCandidateSet &CandidateSet, 13820 OverloadedOperatorKind Op, 13821 const UnresolvedSetImpl &Fns, 13822 ArrayRef<Expr *> Args, bool PerformADL) { 13823 SourceLocation OpLoc = CandidateSet.getLocation(); 13824 13825 OverloadedOperatorKind ExtraOp = 13826 CandidateSet.getRewriteInfo().AllowRewrittenCandidates 13827 ? getRewrittenOverloadedOperator(Op) 13828 : OO_None; 13829 13830 // Add the candidates from the given function set. This also adds the 13831 // rewritten candidates using these functions if necessary. 13832 AddNonMemberOperatorCandidates(Fns, Args, CandidateSet); 13833 13834 // Add operator candidates that are member functions. 13835 AddMemberOperatorCandidates(Op, OpLoc, Args, CandidateSet); 13836 if (CandidateSet.getRewriteInfo().allowsReversed(Op)) 13837 AddMemberOperatorCandidates(Op, OpLoc, {Args[1], Args[0]}, CandidateSet, 13838 OverloadCandidateParamOrder::Reversed); 13839 13840 // In C++20, also add any rewritten member candidates. 13841 if (ExtraOp) { 13842 AddMemberOperatorCandidates(ExtraOp, OpLoc, Args, CandidateSet); 13843 if (CandidateSet.getRewriteInfo().allowsReversed(ExtraOp)) 13844 AddMemberOperatorCandidates(ExtraOp, OpLoc, {Args[1], Args[0]}, 13845 CandidateSet, 13846 OverloadCandidateParamOrder::Reversed); 13847 } 13848 13849 // Add candidates from ADL. Per [over.match.oper]p2, this lookup is not 13850 // performed for an assignment operator (nor for operator[] nor operator->, 13851 // which don't get here). 13852 if (Op != OO_Equal && PerformADL) { 13853 DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op); 13854 AddArgumentDependentLookupCandidates(OpName, OpLoc, Args, 13855 /*ExplicitTemplateArgs*/ nullptr, 13856 CandidateSet); 13857 if (ExtraOp) { 13858 DeclarationName ExtraOpName = 13859 Context.DeclarationNames.getCXXOperatorName(ExtraOp); 13860 AddArgumentDependentLookupCandidates(ExtraOpName, OpLoc, Args, 13861 /*ExplicitTemplateArgs*/ nullptr, 13862 CandidateSet); 13863 } 13864 } 13865 13866 // Add builtin operator candidates. 13867 // 13868 // FIXME: We don't add any rewritten candidates here. This is strictly 13869 // incorrect; a builtin candidate could be hidden by a non-viable candidate, 13870 // resulting in our selecting a rewritten builtin candidate. For example: 13871 // 13872 // enum class E { e }; 13873 // bool operator!=(E, E) requires false; 13874 // bool k = E::e != E::e; 13875 // 13876 // ... should select the rewritten builtin candidate 'operator==(E, E)'. But 13877 // it seems unreasonable to consider rewritten builtin candidates. A core 13878 // issue has been filed proposing to removed this requirement. 13879 AddBuiltinOperatorCandidates(Op, OpLoc, Args, CandidateSet); 13880 } 13881 13882 /// Create a binary operation that may resolve to an overloaded 13883 /// operator. 13884 /// 13885 /// \param OpLoc The location of the operator itself (e.g., '+'). 13886 /// 13887 /// \param Opc The BinaryOperatorKind that describes this operator. 13888 /// 13889 /// \param Fns The set of non-member functions that will be 13890 /// considered by overload resolution. The caller needs to build this 13891 /// set based on the context using, e.g., 13892 /// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This 13893 /// set should not contain any member functions; those will be added 13894 /// by CreateOverloadedBinOp(). 13895 /// 13896 /// \param LHS Left-hand argument. 13897 /// \param RHS Right-hand argument. 13898 /// \param PerformADL Whether to consider operator candidates found by ADL. 13899 /// \param AllowRewrittenCandidates Whether to consider candidates found by 13900 /// C++20 operator rewrites. 13901 /// \param DefaultedFn If we are synthesizing a defaulted operator function, 13902 /// the function in question. Such a function is never a candidate in 13903 /// our overload resolution. This also enables synthesizing a three-way 13904 /// comparison from < and == as described in C++20 [class.spaceship]p1. 13905 ExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, 13906 BinaryOperatorKind Opc, 13907 const UnresolvedSetImpl &Fns, Expr *LHS, 13908 Expr *RHS, bool PerformADL, 13909 bool AllowRewrittenCandidates, 13910 FunctionDecl *DefaultedFn) { 13911 Expr *Args[2] = { LHS, RHS }; 13912 LHS=RHS=nullptr; // Please use only Args instead of LHS/RHS couple 13913 13914 if (!getLangOpts().CPlusPlus20) 13915 AllowRewrittenCandidates = false; 13916 13917 OverloadedOperatorKind Op = BinaryOperator::getOverloadedOperator(Opc); 13918 13919 // If either side is type-dependent, create an appropriate dependent 13920 // expression. 13921 if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) { 13922 if (Fns.empty()) { 13923 // If there are no functions to store, just build a dependent 13924 // BinaryOperator or CompoundAssignment. 13925 if (BinaryOperator::isCompoundAssignmentOp(Opc)) 13926 return CompoundAssignOperator::Create( 13927 Context, Args[0], Args[1], Opc, Context.DependentTy, VK_LValue, 13928 OK_Ordinary, OpLoc, CurFPFeatureOverrides(), Context.DependentTy, 13929 Context.DependentTy); 13930 return BinaryOperator::Create( 13931 Context, Args[0], Args[1], Opc, Context.DependentTy, VK_PRValue, 13932 OK_Ordinary, OpLoc, CurFPFeatureOverrides()); 13933 } 13934 13935 // FIXME: save results of ADL from here? 13936 CXXRecordDecl *NamingClass = nullptr; // lookup ignores member operators 13937 // TODO: provide better source location info in DNLoc component. 13938 DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op); 13939 DeclarationNameInfo OpNameInfo(OpName, OpLoc); 13940 ExprResult Fn = CreateUnresolvedLookupExpr( 13941 NamingClass, NestedNameSpecifierLoc(), OpNameInfo, Fns, PerformADL); 13942 if (Fn.isInvalid()) 13943 return ExprError(); 13944 return CXXOperatorCallExpr::Create(Context, Op, Fn.get(), Args, 13945 Context.DependentTy, VK_PRValue, OpLoc, 13946 CurFPFeatureOverrides()); 13947 } 13948 13949 // Always do placeholder-like conversions on the RHS. 13950 if (checkPlaceholderForOverload(*this, Args[1])) 13951 return ExprError(); 13952 13953 // Do placeholder-like conversion on the LHS; note that we should 13954 // not get here with a PseudoObject LHS. 13955 assert(Args[0]->getObjectKind() != OK_ObjCProperty); 13956 if (checkPlaceholderForOverload(*this, Args[0])) 13957 return ExprError(); 13958 13959 // If this is the assignment operator, we only perform overload resolution 13960 // if the left-hand side is a class or enumeration type. This is actually 13961 // a hack. The standard requires that we do overload resolution between the 13962 // various built-in candidates, but as DR507 points out, this can lead to 13963 // problems. So we do it this way, which pretty much follows what GCC does. 13964 // Note that we go the traditional code path for compound assignment forms. 13965 if (Opc == BO_Assign && !Args[0]->getType()->isOverloadableType()) 13966 return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]); 13967 13968 // If this is the .* operator, which is not overloadable, just 13969 // create a built-in binary operator. 13970 if (Opc == BO_PtrMemD) 13971 return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]); 13972 13973 // Build the overload set. 13974 OverloadCandidateSet CandidateSet(OpLoc, OverloadCandidateSet::CSK_Operator, 13975 OverloadCandidateSet::OperatorRewriteInfo( 13976 Op, OpLoc, AllowRewrittenCandidates)); 13977 if (DefaultedFn) 13978 CandidateSet.exclude(DefaultedFn); 13979 LookupOverloadedBinOp(CandidateSet, Op, Fns, Args, PerformADL); 13980 13981 bool HadMultipleCandidates = (CandidateSet.size() > 1); 13982 13983 // Perform overload resolution. 13984 OverloadCandidateSet::iterator Best; 13985 switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) { 13986 case OR_Success: { 13987 // We found a built-in operator or an overloaded operator. 13988 FunctionDecl *FnDecl = Best->Function; 13989 13990 bool IsReversed = Best->isReversed(); 13991 if (IsReversed) 13992 std::swap(Args[0], Args[1]); 13993 13994 if (FnDecl) { 13995 Expr *Base = nullptr; 13996 // We matched an overloaded operator. Build a call to that 13997 // operator. 13998 13999 OverloadedOperatorKind ChosenOp = 14000 FnDecl->getDeclName().getCXXOverloadedOperator(); 14001 14002 // C++2a [over.match.oper]p9: 14003 // If a rewritten operator== candidate is selected by overload 14004 // resolution for an operator@, its return type shall be cv bool 14005 if (Best->RewriteKind && ChosenOp == OO_EqualEqual && 14006 !FnDecl->getReturnType()->isBooleanType()) { 14007 bool IsExtension = 14008 FnDecl->getReturnType()->isIntegralOrUnscopedEnumerationType(); 14009 Diag(OpLoc, IsExtension ? diag::ext_ovl_rewrite_equalequal_not_bool 14010 : diag::err_ovl_rewrite_equalequal_not_bool) 14011 << FnDecl->getReturnType() << BinaryOperator::getOpcodeStr(Opc) 14012 << Args[0]->getSourceRange() << Args[1]->getSourceRange(); 14013 Diag(FnDecl->getLocation(), diag::note_declared_at); 14014 if (!IsExtension) 14015 return ExprError(); 14016 } 14017 14018 if (AllowRewrittenCandidates && !IsReversed && 14019 CandidateSet.getRewriteInfo().isReversible()) { 14020 // We could have reversed this operator, but didn't. Check if some 14021 // reversed form was a viable candidate, and if so, if it had a 14022 // better conversion for either parameter. If so, this call is 14023 // formally ambiguous, and allowing it is an extension. 14024 llvm::SmallVector<FunctionDecl*, 4> AmbiguousWith; 14025 for (OverloadCandidate &Cand : CandidateSet) { 14026 if (Cand.Viable && Cand.Function && Cand.isReversed() && 14027 haveSameParameterTypes(Context, Cand.Function, FnDecl, 2)) { 14028 for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) { 14029 if (CompareImplicitConversionSequences( 14030 *this, OpLoc, Cand.Conversions[ArgIdx], 14031 Best->Conversions[ArgIdx]) == 14032 ImplicitConversionSequence::Better) { 14033 AmbiguousWith.push_back(Cand.Function); 14034 break; 14035 } 14036 } 14037 } 14038 } 14039 14040 if (!AmbiguousWith.empty()) { 14041 bool AmbiguousWithSelf = 14042 AmbiguousWith.size() == 1 && 14043 declaresSameEntity(AmbiguousWith.front(), FnDecl); 14044 Diag(OpLoc, diag::ext_ovl_ambiguous_oper_binary_reversed) 14045 << BinaryOperator::getOpcodeStr(Opc) 14046 << Args[0]->getType() << Args[1]->getType() << AmbiguousWithSelf 14047 << Args[0]->getSourceRange() << Args[1]->getSourceRange(); 14048 if (AmbiguousWithSelf) { 14049 Diag(FnDecl->getLocation(), 14050 diag::note_ovl_ambiguous_oper_binary_reversed_self); 14051 // Mark member== const or provide matching != to disallow reversed 14052 // args. Eg. 14053 // struct S { bool operator==(const S&); }; 14054 // S()==S(); 14055 if (auto *MD = dyn_cast<CXXMethodDecl>(FnDecl)) 14056 if (Op == OverloadedOperatorKind::OO_EqualEqual && 14057 !MD->isConst() && 14058 Context.hasSameUnqualifiedType( 14059 MD->getThisObjectType(), 14060 MD->getParamDecl(0)->getType().getNonReferenceType()) && 14061 Context.hasSameUnqualifiedType(MD->getThisObjectType(), 14062 Args[0]->getType()) && 14063 Context.hasSameUnqualifiedType(MD->getThisObjectType(), 14064 Args[1]->getType())) 14065 Diag(FnDecl->getLocation(), 14066 diag::note_ovl_ambiguous_eqeq_reversed_self_non_const); 14067 } else { 14068 Diag(FnDecl->getLocation(), 14069 diag::note_ovl_ambiguous_oper_binary_selected_candidate); 14070 for (auto *F : AmbiguousWith) 14071 Diag(F->getLocation(), 14072 diag::note_ovl_ambiguous_oper_binary_reversed_candidate); 14073 } 14074 } 14075 } 14076 14077 // Convert the arguments. 14078 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) { 14079 // Best->Access is only meaningful for class members. 14080 CheckMemberOperatorAccess(OpLoc, Args[0], Args[1], Best->FoundDecl); 14081 14082 ExprResult Arg1 = 14083 PerformCopyInitialization( 14084 InitializedEntity::InitializeParameter(Context, 14085 FnDecl->getParamDecl(0)), 14086 SourceLocation(), Args[1]); 14087 if (Arg1.isInvalid()) 14088 return ExprError(); 14089 14090 ExprResult Arg0 = 14091 PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/nullptr, 14092 Best->FoundDecl, Method); 14093 if (Arg0.isInvalid()) 14094 return ExprError(); 14095 Base = Args[0] = Arg0.getAs<Expr>(); 14096 Args[1] = RHS = Arg1.getAs<Expr>(); 14097 } else { 14098 // Convert the arguments. 14099 ExprResult Arg0 = PerformCopyInitialization( 14100 InitializedEntity::InitializeParameter(Context, 14101 FnDecl->getParamDecl(0)), 14102 SourceLocation(), Args[0]); 14103 if (Arg0.isInvalid()) 14104 return ExprError(); 14105 14106 ExprResult Arg1 = 14107 PerformCopyInitialization( 14108 InitializedEntity::InitializeParameter(Context, 14109 FnDecl->getParamDecl(1)), 14110 SourceLocation(), Args[1]); 14111 if (Arg1.isInvalid()) 14112 return ExprError(); 14113 Args[0] = LHS = Arg0.getAs<Expr>(); 14114 Args[1] = RHS = Arg1.getAs<Expr>(); 14115 } 14116 14117 // Build the actual expression node. 14118 ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl, 14119 Best->FoundDecl, Base, 14120 HadMultipleCandidates, OpLoc); 14121 if (FnExpr.isInvalid()) 14122 return ExprError(); 14123 14124 // Determine the result type. 14125 QualType ResultTy = FnDecl->getReturnType(); 14126 ExprValueKind VK = Expr::getValueKindForType(ResultTy); 14127 ResultTy = ResultTy.getNonLValueExprType(Context); 14128 14129 CXXOperatorCallExpr *TheCall = CXXOperatorCallExpr::Create( 14130 Context, ChosenOp, FnExpr.get(), Args, ResultTy, VK, OpLoc, 14131 CurFPFeatureOverrides(), Best->IsADLCandidate); 14132 14133 if (CheckCallReturnType(FnDecl->getReturnType(), OpLoc, TheCall, 14134 FnDecl)) 14135 return ExprError(); 14136 14137 ArrayRef<const Expr *> ArgsArray(Args, 2); 14138 const Expr *ImplicitThis = nullptr; 14139 // Cut off the implicit 'this'. 14140 if (isa<CXXMethodDecl>(FnDecl)) { 14141 ImplicitThis = ArgsArray[0]; 14142 ArgsArray = ArgsArray.slice(1); 14143 } 14144 14145 // Check for a self move. 14146 if (Op == OO_Equal) 14147 DiagnoseSelfMove(Args[0], Args[1], OpLoc); 14148 14149 if (ImplicitThis) { 14150 QualType ThisType = Context.getPointerType(ImplicitThis->getType()); 14151 QualType ThisTypeFromDecl = Context.getPointerType( 14152 cast<CXXMethodDecl>(FnDecl)->getThisObjectType()); 14153 14154 CheckArgAlignment(OpLoc, FnDecl, "'this'", ThisType, 14155 ThisTypeFromDecl); 14156 } 14157 14158 checkCall(FnDecl, nullptr, ImplicitThis, ArgsArray, 14159 isa<CXXMethodDecl>(FnDecl), OpLoc, TheCall->getSourceRange(), 14160 VariadicDoesNotApply); 14161 14162 ExprResult R = MaybeBindToTemporary(TheCall); 14163 if (R.isInvalid()) 14164 return ExprError(); 14165 14166 R = CheckForImmediateInvocation(R, FnDecl); 14167 if (R.isInvalid()) 14168 return ExprError(); 14169 14170 // For a rewritten candidate, we've already reversed the arguments 14171 // if needed. Perform the rest of the rewrite now. 14172 if ((Best->RewriteKind & CRK_DifferentOperator) || 14173 (Op == OO_Spaceship && IsReversed)) { 14174 if (Op == OO_ExclaimEqual) { 14175 assert(ChosenOp == OO_EqualEqual && "unexpected operator name"); 14176 R = CreateBuiltinUnaryOp(OpLoc, UO_LNot, R.get()); 14177 } else { 14178 assert(ChosenOp == OO_Spaceship && "unexpected operator name"); 14179 llvm::APSInt Zero(Context.getTypeSize(Context.IntTy), false); 14180 Expr *ZeroLiteral = 14181 IntegerLiteral::Create(Context, Zero, Context.IntTy, OpLoc); 14182 14183 Sema::CodeSynthesisContext Ctx; 14184 Ctx.Kind = Sema::CodeSynthesisContext::RewritingOperatorAsSpaceship; 14185 Ctx.Entity = FnDecl; 14186 pushCodeSynthesisContext(Ctx); 14187 14188 R = CreateOverloadedBinOp( 14189 OpLoc, Opc, Fns, IsReversed ? ZeroLiteral : R.get(), 14190 IsReversed ? R.get() : ZeroLiteral, /*PerformADL=*/true, 14191 /*AllowRewrittenCandidates=*/false); 14192 14193 popCodeSynthesisContext(); 14194 } 14195 if (R.isInvalid()) 14196 return ExprError(); 14197 } else { 14198 assert(ChosenOp == Op && "unexpected operator name"); 14199 } 14200 14201 // Make a note in the AST if we did any rewriting. 14202 if (Best->RewriteKind != CRK_None) 14203 R = new (Context) CXXRewrittenBinaryOperator(R.get(), IsReversed); 14204 14205 return R; 14206 } else { 14207 // We matched a built-in operator. Convert the arguments, then 14208 // break out so that we will build the appropriate built-in 14209 // operator node. 14210 ExprResult ArgsRes0 = PerformImplicitConversion( 14211 Args[0], Best->BuiltinParamTypes[0], Best->Conversions[0], 14212 AA_Passing, CCK_ForBuiltinOverloadedOp); 14213 if (ArgsRes0.isInvalid()) 14214 return ExprError(); 14215 Args[0] = ArgsRes0.get(); 14216 14217 ExprResult ArgsRes1 = PerformImplicitConversion( 14218 Args[1], Best->BuiltinParamTypes[1], Best->Conversions[1], 14219 AA_Passing, CCK_ForBuiltinOverloadedOp); 14220 if (ArgsRes1.isInvalid()) 14221 return ExprError(); 14222 Args[1] = ArgsRes1.get(); 14223 break; 14224 } 14225 } 14226 14227 case OR_No_Viable_Function: { 14228 // C++ [over.match.oper]p9: 14229 // If the operator is the operator , [...] and there are no 14230 // viable functions, then the operator is assumed to be the 14231 // built-in operator and interpreted according to clause 5. 14232 if (Opc == BO_Comma) 14233 break; 14234 14235 // When defaulting an 'operator<=>', we can try to synthesize a three-way 14236 // compare result using '==' and '<'. 14237 if (DefaultedFn && Opc == BO_Cmp) { 14238 ExprResult E = BuildSynthesizedThreeWayComparison(OpLoc, Fns, Args[0], 14239 Args[1], DefaultedFn); 14240 if (E.isInvalid() || E.isUsable()) 14241 return E; 14242 } 14243 14244 // For class as left operand for assignment or compound assignment 14245 // operator do not fall through to handling in built-in, but report that 14246 // no overloaded assignment operator found 14247 ExprResult Result = ExprError(); 14248 StringRef OpcStr = BinaryOperator::getOpcodeStr(Opc); 14249 auto Cands = CandidateSet.CompleteCandidates(*this, OCD_AllCandidates, 14250 Args, OpLoc); 14251 DeferDiagsRAII DDR(*this, 14252 CandidateSet.shouldDeferDiags(*this, Args, OpLoc)); 14253 if (Args[0]->getType()->isRecordType() && 14254 Opc >= BO_Assign && Opc <= BO_OrAssign) { 14255 Diag(OpLoc, diag::err_ovl_no_viable_oper) 14256 << BinaryOperator::getOpcodeStr(Opc) 14257 << Args[0]->getSourceRange() << Args[1]->getSourceRange(); 14258 if (Args[0]->getType()->isIncompleteType()) { 14259 Diag(OpLoc, diag::note_assign_lhs_incomplete) 14260 << Args[0]->getType() 14261 << Args[0]->getSourceRange() << Args[1]->getSourceRange(); 14262 } 14263 } else { 14264 // This is an erroneous use of an operator which can be overloaded by 14265 // a non-member function. Check for non-member operators which were 14266 // defined too late to be candidates. 14267 if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc, Args)) 14268 // FIXME: Recover by calling the found function. 14269 return ExprError(); 14270 14271 // No viable function; try to create a built-in operation, which will 14272 // produce an error. Then, show the non-viable candidates. 14273 Result = CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]); 14274 } 14275 assert(Result.isInvalid() && 14276 "C++ binary operator overloading is missing candidates!"); 14277 CandidateSet.NoteCandidates(*this, Args, Cands, OpcStr, OpLoc); 14278 return Result; 14279 } 14280 14281 case OR_Ambiguous: 14282 CandidateSet.NoteCandidates( 14283 PartialDiagnosticAt(OpLoc, PDiag(diag::err_ovl_ambiguous_oper_binary) 14284 << BinaryOperator::getOpcodeStr(Opc) 14285 << Args[0]->getType() 14286 << Args[1]->getType() 14287 << Args[0]->getSourceRange() 14288 << Args[1]->getSourceRange()), 14289 *this, OCD_AmbiguousCandidates, Args, BinaryOperator::getOpcodeStr(Opc), 14290 OpLoc); 14291 return ExprError(); 14292 14293 case OR_Deleted: 14294 if (isImplicitlyDeleted(Best->Function)) { 14295 FunctionDecl *DeletedFD = Best->Function; 14296 DefaultedFunctionKind DFK = getDefaultedFunctionKind(DeletedFD); 14297 if (DFK.isSpecialMember()) { 14298 Diag(OpLoc, diag::err_ovl_deleted_special_oper) 14299 << Args[0]->getType() << DFK.asSpecialMember(); 14300 } else { 14301 assert(DFK.isComparison()); 14302 Diag(OpLoc, diag::err_ovl_deleted_comparison) 14303 << Args[0]->getType() << DeletedFD; 14304 } 14305 14306 // The user probably meant to call this special member. Just 14307 // explain why it's deleted. 14308 NoteDeletedFunction(DeletedFD); 14309 return ExprError(); 14310 } 14311 CandidateSet.NoteCandidates( 14312 PartialDiagnosticAt( 14313 OpLoc, PDiag(diag::err_ovl_deleted_oper) 14314 << getOperatorSpelling(Best->Function->getDeclName() 14315 .getCXXOverloadedOperator()) 14316 << Args[0]->getSourceRange() 14317 << Args[1]->getSourceRange()), 14318 *this, OCD_AllCandidates, Args, BinaryOperator::getOpcodeStr(Opc), 14319 OpLoc); 14320 return ExprError(); 14321 } 14322 14323 // We matched a built-in operator; build it. 14324 return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]); 14325 } 14326 14327 ExprResult Sema::BuildSynthesizedThreeWayComparison( 14328 SourceLocation OpLoc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, 14329 FunctionDecl *DefaultedFn) { 14330 const ComparisonCategoryInfo *Info = 14331 Context.CompCategories.lookupInfoForType(DefaultedFn->getReturnType()); 14332 // If we're not producing a known comparison category type, we can't 14333 // synthesize a three-way comparison. Let the caller diagnose this. 14334 if (!Info) 14335 return ExprResult((Expr*)nullptr); 14336 14337 // If we ever want to perform this synthesis more generally, we will need to 14338 // apply the temporary materialization conversion to the operands. 14339 assert(LHS->isGLValue() && RHS->isGLValue() && 14340 "cannot use prvalue expressions more than once"); 14341 Expr *OrigLHS = LHS; 14342 Expr *OrigRHS = RHS; 14343 14344 // Replace the LHS and RHS with OpaqueValueExprs; we're going to refer to 14345 // each of them multiple times below. 14346 LHS = new (Context) 14347 OpaqueValueExpr(LHS->getExprLoc(), LHS->getType(), LHS->getValueKind(), 14348 LHS->getObjectKind(), LHS); 14349 RHS = new (Context) 14350 OpaqueValueExpr(RHS->getExprLoc(), RHS->getType(), RHS->getValueKind(), 14351 RHS->getObjectKind(), RHS); 14352 14353 ExprResult Eq = CreateOverloadedBinOp(OpLoc, BO_EQ, Fns, LHS, RHS, true, true, 14354 DefaultedFn); 14355 if (Eq.isInvalid()) 14356 return ExprError(); 14357 14358 ExprResult Less = CreateOverloadedBinOp(OpLoc, BO_LT, Fns, LHS, RHS, true, 14359 true, DefaultedFn); 14360 if (Less.isInvalid()) 14361 return ExprError(); 14362 14363 ExprResult Greater; 14364 if (Info->isPartial()) { 14365 Greater = CreateOverloadedBinOp(OpLoc, BO_LT, Fns, RHS, LHS, true, true, 14366 DefaultedFn); 14367 if (Greater.isInvalid()) 14368 return ExprError(); 14369 } 14370 14371 // Form the list of comparisons we're going to perform. 14372 struct Comparison { 14373 ExprResult Cmp; 14374 ComparisonCategoryResult Result; 14375 } Comparisons[4] = 14376 { {Eq, Info->isStrong() ? ComparisonCategoryResult::Equal 14377 : ComparisonCategoryResult::Equivalent}, 14378 {Less, ComparisonCategoryResult::Less}, 14379 {Greater, ComparisonCategoryResult::Greater}, 14380 {ExprResult(), ComparisonCategoryResult::Unordered}, 14381 }; 14382 14383 int I = Info->isPartial() ? 3 : 2; 14384 14385 // Combine the comparisons with suitable conditional expressions. 14386 ExprResult Result; 14387 for (; I >= 0; --I) { 14388 // Build a reference to the comparison category constant. 14389 auto *VI = Info->lookupValueInfo(Comparisons[I].Result); 14390 // FIXME: Missing a constant for a comparison category. Diagnose this? 14391 if (!VI) 14392 return ExprResult((Expr*)nullptr); 14393 ExprResult ThisResult = 14394 BuildDeclarationNameExpr(CXXScopeSpec(), DeclarationNameInfo(), VI->VD); 14395 if (ThisResult.isInvalid()) 14396 return ExprError(); 14397 14398 // Build a conditional unless this is the final case. 14399 if (Result.get()) { 14400 Result = ActOnConditionalOp(OpLoc, OpLoc, Comparisons[I].Cmp.get(), 14401 ThisResult.get(), Result.get()); 14402 if (Result.isInvalid()) 14403 return ExprError(); 14404 } else { 14405 Result = ThisResult; 14406 } 14407 } 14408 14409 // Build a PseudoObjectExpr to model the rewriting of an <=> operator, and to 14410 // bind the OpaqueValueExprs before they're (repeatedly) used. 14411 Expr *SyntacticForm = BinaryOperator::Create( 14412 Context, OrigLHS, OrigRHS, BO_Cmp, Result.get()->getType(), 14413 Result.get()->getValueKind(), Result.get()->getObjectKind(), OpLoc, 14414 CurFPFeatureOverrides()); 14415 Expr *SemanticForm[] = {LHS, RHS, Result.get()}; 14416 return PseudoObjectExpr::Create(Context, SyntacticForm, SemanticForm, 2); 14417 } 14418 14419 static bool PrepareArgumentsForCallToObjectOfClassType( 14420 Sema &S, SmallVectorImpl<Expr *> &MethodArgs, CXXMethodDecl *Method, 14421 MultiExprArg Args, SourceLocation LParenLoc) { 14422 14423 const auto *Proto = Method->getType()->castAs<FunctionProtoType>(); 14424 unsigned NumParams = Proto->getNumParams(); 14425 unsigned NumArgsSlots = 14426 MethodArgs.size() + std::max<unsigned>(Args.size(), NumParams); 14427 // Build the full argument list for the method call (the implicit object 14428 // parameter is placed at the beginning of the list). 14429 MethodArgs.reserve(MethodArgs.size() + NumArgsSlots); 14430 bool IsError = false; 14431 // Initialize the implicit object parameter. 14432 // Check the argument types. 14433 for (unsigned i = 0; i != NumParams; i++) { 14434 Expr *Arg; 14435 if (i < Args.size()) { 14436 Arg = Args[i]; 14437 ExprResult InputInit = 14438 S.PerformCopyInitialization(InitializedEntity::InitializeParameter( 14439 S.Context, Method->getParamDecl(i)), 14440 SourceLocation(), Arg); 14441 IsError |= InputInit.isInvalid(); 14442 Arg = InputInit.getAs<Expr>(); 14443 } else { 14444 ExprResult DefArg = 14445 S.BuildCXXDefaultArgExpr(LParenLoc, Method, Method->getParamDecl(i)); 14446 if (DefArg.isInvalid()) { 14447 IsError = true; 14448 break; 14449 } 14450 Arg = DefArg.getAs<Expr>(); 14451 } 14452 14453 MethodArgs.push_back(Arg); 14454 } 14455 return IsError; 14456 } 14457 14458 ExprResult Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc, 14459 SourceLocation RLoc, 14460 Expr *Base, 14461 MultiExprArg ArgExpr) { 14462 SmallVector<Expr *, 2> Args; 14463 Args.push_back(Base); 14464 for (auto *e : ArgExpr) { 14465 Args.push_back(e); 14466 } 14467 DeclarationName OpName = 14468 Context.DeclarationNames.getCXXOperatorName(OO_Subscript); 14469 14470 SourceRange Range = ArgExpr.empty() 14471 ? SourceRange{} 14472 : SourceRange(ArgExpr.front()->getBeginLoc(), 14473 ArgExpr.back()->getEndLoc()); 14474 14475 // If either side is type-dependent, create an appropriate dependent 14476 // expression. 14477 if (Expr::hasAnyTypeDependentArguments(Args)) { 14478 14479 CXXRecordDecl *NamingClass = nullptr; // lookup ignores member operators 14480 // CHECKME: no 'operator' keyword? 14481 DeclarationNameInfo OpNameInfo(OpName, LLoc); 14482 OpNameInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc)); 14483 ExprResult Fn = CreateUnresolvedLookupExpr( 14484 NamingClass, NestedNameSpecifierLoc(), OpNameInfo, UnresolvedSet<0>()); 14485 if (Fn.isInvalid()) 14486 return ExprError(); 14487 // Can't add any actual overloads yet 14488 14489 return CXXOperatorCallExpr::Create(Context, OO_Subscript, Fn.get(), Args, 14490 Context.DependentTy, VK_PRValue, RLoc, 14491 CurFPFeatureOverrides()); 14492 } 14493 14494 // Handle placeholders 14495 UnbridgedCastsSet UnbridgedCasts; 14496 if (checkArgPlaceholdersForOverload(*this, Args, UnbridgedCasts)) { 14497 return ExprError(); 14498 } 14499 // Build an empty overload set. 14500 OverloadCandidateSet CandidateSet(LLoc, OverloadCandidateSet::CSK_Operator); 14501 14502 // Subscript can only be overloaded as a member function. 14503 14504 // Add operator candidates that are member functions. 14505 AddMemberOperatorCandidates(OO_Subscript, LLoc, Args, CandidateSet); 14506 14507 // Add builtin operator candidates. 14508 if (Args.size() == 2) 14509 AddBuiltinOperatorCandidates(OO_Subscript, LLoc, Args, CandidateSet); 14510 14511 bool HadMultipleCandidates = (CandidateSet.size() > 1); 14512 14513 // Perform overload resolution. 14514 OverloadCandidateSet::iterator Best; 14515 switch (CandidateSet.BestViableFunction(*this, LLoc, Best)) { 14516 case OR_Success: { 14517 // We found a built-in operator or an overloaded operator. 14518 FunctionDecl *FnDecl = Best->Function; 14519 14520 if (FnDecl) { 14521 // We matched an overloaded operator. Build a call to that 14522 // operator. 14523 14524 CheckMemberOperatorAccess(LLoc, Args[0], ArgExpr, Best->FoundDecl); 14525 14526 // Convert the arguments. 14527 CXXMethodDecl *Method = cast<CXXMethodDecl>(FnDecl); 14528 SmallVector<Expr *, 2> MethodArgs; 14529 14530 // Handle 'this' parameter if the selected function is not static. 14531 if (Method->isInstance()) { 14532 ExprResult Arg0 = PerformObjectArgumentInitialization( 14533 Args[0], /*Qualifier=*/nullptr, Best->FoundDecl, Method); 14534 if (Arg0.isInvalid()) 14535 return ExprError(); 14536 14537 MethodArgs.push_back(Arg0.get()); 14538 } 14539 14540 bool IsError = PrepareArgumentsForCallToObjectOfClassType( 14541 *this, MethodArgs, Method, ArgExpr, LLoc); 14542 if (IsError) 14543 return ExprError(); 14544 14545 // Build the actual expression node. 14546 DeclarationNameInfo OpLocInfo(OpName, LLoc); 14547 OpLocInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc)); 14548 ExprResult FnExpr = CreateFunctionRefExpr( 14549 *this, FnDecl, Best->FoundDecl, Base, HadMultipleCandidates, 14550 OpLocInfo.getLoc(), OpLocInfo.getInfo()); 14551 if (FnExpr.isInvalid()) 14552 return ExprError(); 14553 14554 // Determine the result type 14555 QualType ResultTy = FnDecl->getReturnType(); 14556 ExprValueKind VK = Expr::getValueKindForType(ResultTy); 14557 ResultTy = ResultTy.getNonLValueExprType(Context); 14558 14559 CallExpr *TheCall; 14560 if (Method->isInstance()) 14561 TheCall = CXXOperatorCallExpr::Create( 14562 Context, OO_Subscript, FnExpr.get(), MethodArgs, ResultTy, VK, 14563 RLoc, CurFPFeatureOverrides()); 14564 else 14565 TheCall = 14566 CallExpr::Create(Context, FnExpr.get(), MethodArgs, ResultTy, VK, 14567 RLoc, CurFPFeatureOverrides()); 14568 14569 if (CheckCallReturnType(FnDecl->getReturnType(), LLoc, TheCall, FnDecl)) 14570 return ExprError(); 14571 14572 if (CheckFunctionCall(Method, TheCall, 14573 Method->getType()->castAs<FunctionProtoType>())) 14574 return ExprError(); 14575 14576 return CheckForImmediateInvocation(MaybeBindToTemporary(TheCall), 14577 FnDecl); 14578 } else { 14579 // We matched a built-in operator. Convert the arguments, then 14580 // break out so that we will build the appropriate built-in 14581 // operator node. 14582 ExprResult ArgsRes0 = PerformImplicitConversion( 14583 Args[0], Best->BuiltinParamTypes[0], Best->Conversions[0], 14584 AA_Passing, CCK_ForBuiltinOverloadedOp); 14585 if (ArgsRes0.isInvalid()) 14586 return ExprError(); 14587 Args[0] = ArgsRes0.get(); 14588 14589 ExprResult ArgsRes1 = PerformImplicitConversion( 14590 Args[1], Best->BuiltinParamTypes[1], Best->Conversions[1], 14591 AA_Passing, CCK_ForBuiltinOverloadedOp); 14592 if (ArgsRes1.isInvalid()) 14593 return ExprError(); 14594 Args[1] = ArgsRes1.get(); 14595 14596 break; 14597 } 14598 } 14599 14600 case OR_No_Viable_Function: { 14601 PartialDiagnostic PD = 14602 CandidateSet.empty() 14603 ? (PDiag(diag::err_ovl_no_oper) 14604 << Args[0]->getType() << /*subscript*/ 0 14605 << Args[0]->getSourceRange() << Range) 14606 : (PDiag(diag::err_ovl_no_viable_subscript) 14607 << Args[0]->getType() << Args[0]->getSourceRange() << Range); 14608 CandidateSet.NoteCandidates(PartialDiagnosticAt(LLoc, PD), *this, 14609 OCD_AllCandidates, ArgExpr, "[]", LLoc); 14610 return ExprError(); 14611 } 14612 14613 case OR_Ambiguous: 14614 if (Args.size() == 2) { 14615 CandidateSet.NoteCandidates( 14616 PartialDiagnosticAt( 14617 LLoc, PDiag(diag::err_ovl_ambiguous_oper_binary) 14618 << "[]" << Args[0]->getType() << Args[1]->getType() 14619 << Args[0]->getSourceRange() << Range), 14620 *this, OCD_AmbiguousCandidates, Args, "[]", LLoc); 14621 } else { 14622 CandidateSet.NoteCandidates( 14623 PartialDiagnosticAt(LLoc, 14624 PDiag(diag::err_ovl_ambiguous_subscript_call) 14625 << Args[0]->getType() 14626 << Args[0]->getSourceRange() << Range), 14627 *this, OCD_AmbiguousCandidates, Args, "[]", LLoc); 14628 } 14629 return ExprError(); 14630 14631 case OR_Deleted: 14632 CandidateSet.NoteCandidates( 14633 PartialDiagnosticAt(LLoc, PDiag(diag::err_ovl_deleted_oper) 14634 << "[]" << Args[0]->getSourceRange() 14635 << Range), 14636 *this, OCD_AllCandidates, Args, "[]", LLoc); 14637 return ExprError(); 14638 } 14639 14640 // We matched a built-in operator; build it. 14641 return CreateBuiltinArraySubscriptExpr(Args[0], LLoc, Args[1], RLoc); 14642 } 14643 14644 /// BuildCallToMemberFunction - Build a call to a member 14645 /// function. MemExpr is the expression that refers to the member 14646 /// function (and includes the object parameter), Args/NumArgs are the 14647 /// arguments to the function call (not including the object 14648 /// parameter). The caller needs to validate that the member 14649 /// expression refers to a non-static member function or an overloaded 14650 /// member function. 14651 ExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, 14652 SourceLocation LParenLoc, 14653 MultiExprArg Args, 14654 SourceLocation RParenLoc, 14655 Expr *ExecConfig, bool IsExecConfig, 14656 bool AllowRecovery) { 14657 assert(MemExprE->getType() == Context.BoundMemberTy || 14658 MemExprE->getType() == Context.OverloadTy); 14659 14660 // Dig out the member expression. This holds both the object 14661 // argument and the member function we're referring to. 14662 Expr *NakedMemExpr = MemExprE->IgnoreParens(); 14663 14664 // Determine whether this is a call to a pointer-to-member function. 14665 if (BinaryOperator *op = dyn_cast<BinaryOperator>(NakedMemExpr)) { 14666 assert(op->getType() == Context.BoundMemberTy); 14667 assert(op->getOpcode() == BO_PtrMemD || op->getOpcode() == BO_PtrMemI); 14668 14669 QualType fnType = 14670 op->getRHS()->getType()->castAs<MemberPointerType>()->getPointeeType(); 14671 14672 const FunctionProtoType *proto = fnType->castAs<FunctionProtoType>(); 14673 QualType resultType = proto->getCallResultType(Context); 14674 ExprValueKind valueKind = Expr::getValueKindForType(proto->getReturnType()); 14675 14676 // Check that the object type isn't more qualified than the 14677 // member function we're calling. 14678 Qualifiers funcQuals = proto->getMethodQuals(); 14679 14680 QualType objectType = op->getLHS()->getType(); 14681 if (op->getOpcode() == BO_PtrMemI) 14682 objectType = objectType->castAs<PointerType>()->getPointeeType(); 14683 Qualifiers objectQuals = objectType.getQualifiers(); 14684 14685 Qualifiers difference = objectQuals - funcQuals; 14686 difference.removeObjCGCAttr(); 14687 difference.removeAddressSpace(); 14688 if (difference) { 14689 std::string qualsString = difference.getAsString(); 14690 Diag(LParenLoc, diag::err_pointer_to_member_call_drops_quals) 14691 << fnType.getUnqualifiedType() 14692 << qualsString 14693 << (qualsString.find(' ') == std::string::npos ? 1 : 2); 14694 } 14695 14696 CXXMemberCallExpr *call = CXXMemberCallExpr::Create( 14697 Context, MemExprE, Args, resultType, valueKind, RParenLoc, 14698 CurFPFeatureOverrides(), proto->getNumParams()); 14699 14700 if (CheckCallReturnType(proto->getReturnType(), op->getRHS()->getBeginLoc(), 14701 call, nullptr)) 14702 return ExprError(); 14703 14704 if (ConvertArgumentsForCall(call, op, nullptr, proto, Args, RParenLoc)) 14705 return ExprError(); 14706 14707 if (CheckOtherCall(call, proto)) 14708 return ExprError(); 14709 14710 return MaybeBindToTemporary(call); 14711 } 14712 14713 // We only try to build a recovery expr at this level if we can preserve 14714 // the return type, otherwise we return ExprError() and let the caller 14715 // recover. 14716 auto BuildRecoveryExpr = [&](QualType Type) { 14717 if (!AllowRecovery) 14718 return ExprError(); 14719 std::vector<Expr *> SubExprs = {MemExprE}; 14720 llvm::append_range(SubExprs, Args); 14721 return CreateRecoveryExpr(MemExprE->getBeginLoc(), RParenLoc, SubExprs, 14722 Type); 14723 }; 14724 if (isa<CXXPseudoDestructorExpr>(NakedMemExpr)) 14725 return CallExpr::Create(Context, MemExprE, Args, Context.VoidTy, VK_PRValue, 14726 RParenLoc, CurFPFeatureOverrides()); 14727 14728 UnbridgedCastsSet UnbridgedCasts; 14729 if (checkArgPlaceholdersForOverload(*this, Args, UnbridgedCasts)) 14730 return ExprError(); 14731 14732 MemberExpr *MemExpr; 14733 CXXMethodDecl *Method = nullptr; 14734 DeclAccessPair FoundDecl = DeclAccessPair::make(nullptr, AS_public); 14735 NestedNameSpecifier *Qualifier = nullptr; 14736 if (isa<MemberExpr>(NakedMemExpr)) { 14737 MemExpr = cast<MemberExpr>(NakedMemExpr); 14738 Method = cast<CXXMethodDecl>(MemExpr->getMemberDecl()); 14739 FoundDecl = MemExpr->getFoundDecl(); 14740 Qualifier = MemExpr->getQualifier(); 14741 UnbridgedCasts.restore(); 14742 } else { 14743 UnresolvedMemberExpr *UnresExpr = cast<UnresolvedMemberExpr>(NakedMemExpr); 14744 Qualifier = UnresExpr->getQualifier(); 14745 14746 QualType ObjectType = UnresExpr->getBaseType(); 14747 Expr::Classification ObjectClassification 14748 = UnresExpr->isArrow()? Expr::Classification::makeSimpleLValue() 14749 : UnresExpr->getBase()->Classify(Context); 14750 14751 // Add overload candidates 14752 OverloadCandidateSet CandidateSet(UnresExpr->getMemberLoc(), 14753 OverloadCandidateSet::CSK_Normal); 14754 14755 // FIXME: avoid copy. 14756 TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = nullptr; 14757 if (UnresExpr->hasExplicitTemplateArgs()) { 14758 UnresExpr->copyTemplateArgumentsInto(TemplateArgsBuffer); 14759 TemplateArgs = &TemplateArgsBuffer; 14760 } 14761 14762 for (UnresolvedMemberExpr::decls_iterator I = UnresExpr->decls_begin(), 14763 E = UnresExpr->decls_end(); I != E; ++I) { 14764 14765 NamedDecl *Func = *I; 14766 CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(Func->getDeclContext()); 14767 if (isa<UsingShadowDecl>(Func)) 14768 Func = cast<UsingShadowDecl>(Func)->getTargetDecl(); 14769 14770 14771 // Microsoft supports direct constructor calls. 14772 if (getLangOpts().MicrosoftExt && isa<CXXConstructorDecl>(Func)) { 14773 AddOverloadCandidate(cast<CXXConstructorDecl>(Func), I.getPair(), Args, 14774 CandidateSet, 14775 /*SuppressUserConversions*/ false); 14776 } else if ((Method = dyn_cast<CXXMethodDecl>(Func))) { 14777 // If explicit template arguments were provided, we can't call a 14778 // non-template member function. 14779 if (TemplateArgs) 14780 continue; 14781 14782 AddMethodCandidate(Method, I.getPair(), ActingDC, ObjectType, 14783 ObjectClassification, Args, CandidateSet, 14784 /*SuppressUserConversions=*/false); 14785 } else { 14786 AddMethodTemplateCandidate( 14787 cast<FunctionTemplateDecl>(Func), I.getPair(), ActingDC, 14788 TemplateArgs, ObjectType, ObjectClassification, Args, CandidateSet, 14789 /*SuppressUserConversions=*/false); 14790 } 14791 } 14792 14793 DeclarationName DeclName = UnresExpr->getMemberName(); 14794 14795 UnbridgedCasts.restore(); 14796 14797 OverloadCandidateSet::iterator Best; 14798 bool Succeeded = false; 14799 switch (CandidateSet.BestViableFunction(*this, UnresExpr->getBeginLoc(), 14800 Best)) { 14801 case OR_Success: 14802 Method = cast<CXXMethodDecl>(Best->Function); 14803 FoundDecl = Best->FoundDecl; 14804 CheckUnresolvedMemberAccess(UnresExpr, Best->FoundDecl); 14805 if (DiagnoseUseOfOverloadedDecl(Best->FoundDecl, UnresExpr->getNameLoc())) 14806 break; 14807 // If FoundDecl is different from Method (such as if one is a template 14808 // and the other a specialization), make sure DiagnoseUseOfDecl is 14809 // called on both. 14810 // FIXME: This would be more comprehensively addressed by modifying 14811 // DiagnoseUseOfDecl to accept both the FoundDecl and the decl 14812 // being used. 14813 if (Method != FoundDecl.getDecl() && 14814 DiagnoseUseOfOverloadedDecl(Method, UnresExpr->getNameLoc())) 14815 break; 14816 Succeeded = true; 14817 break; 14818 14819 case OR_No_Viable_Function: 14820 CandidateSet.NoteCandidates( 14821 PartialDiagnosticAt( 14822 UnresExpr->getMemberLoc(), 14823 PDiag(diag::err_ovl_no_viable_member_function_in_call) 14824 << DeclName << MemExprE->getSourceRange()), 14825 *this, OCD_AllCandidates, Args); 14826 break; 14827 case OR_Ambiguous: 14828 CandidateSet.NoteCandidates( 14829 PartialDiagnosticAt(UnresExpr->getMemberLoc(), 14830 PDiag(diag::err_ovl_ambiguous_member_call) 14831 << DeclName << MemExprE->getSourceRange()), 14832 *this, OCD_AmbiguousCandidates, Args); 14833 break; 14834 case OR_Deleted: 14835 CandidateSet.NoteCandidates( 14836 PartialDiagnosticAt(UnresExpr->getMemberLoc(), 14837 PDiag(diag::err_ovl_deleted_member_call) 14838 << DeclName << MemExprE->getSourceRange()), 14839 *this, OCD_AllCandidates, Args); 14840 break; 14841 } 14842 // Overload resolution fails, try to recover. 14843 if (!Succeeded) 14844 return BuildRecoveryExpr(chooseRecoveryType(CandidateSet, &Best)); 14845 14846 MemExprE = FixOverloadedFunctionReference(MemExprE, FoundDecl, Method); 14847 14848 // If overload resolution picked a static member, build a 14849 // non-member call based on that function. 14850 if (Method->isStatic()) { 14851 return BuildResolvedCallExpr(MemExprE, Method, LParenLoc, Args, RParenLoc, 14852 ExecConfig, IsExecConfig); 14853 } 14854 14855 MemExpr = cast<MemberExpr>(MemExprE->IgnoreParens()); 14856 } 14857 14858 QualType ResultType = Method->getReturnType(); 14859 ExprValueKind VK = Expr::getValueKindForType(ResultType); 14860 ResultType = ResultType.getNonLValueExprType(Context); 14861 14862 assert(Method && "Member call to something that isn't a method?"); 14863 const auto *Proto = Method->getType()->castAs<FunctionProtoType>(); 14864 CXXMemberCallExpr *TheCall = CXXMemberCallExpr::Create( 14865 Context, MemExprE, Args, ResultType, VK, RParenLoc, 14866 CurFPFeatureOverrides(), Proto->getNumParams()); 14867 14868 // Check for a valid return type. 14869 if (CheckCallReturnType(Method->getReturnType(), MemExpr->getMemberLoc(), 14870 TheCall, Method)) 14871 return BuildRecoveryExpr(ResultType); 14872 14873 // Convert the object argument (for a non-static member function call). 14874 // We only need to do this if there was actually an overload; otherwise 14875 // it was done at lookup. 14876 if (!Method->isStatic()) { 14877 ExprResult ObjectArg = 14878 PerformObjectArgumentInitialization(MemExpr->getBase(), Qualifier, 14879 FoundDecl, Method); 14880 if (ObjectArg.isInvalid()) 14881 return ExprError(); 14882 MemExpr->setBase(ObjectArg.get()); 14883 } 14884 14885 // Convert the rest of the arguments 14886 if (ConvertArgumentsForCall(TheCall, MemExpr, Method, Proto, Args, 14887 RParenLoc)) 14888 return BuildRecoveryExpr(ResultType); 14889 14890 DiagnoseSentinelCalls(Method, LParenLoc, Args); 14891 14892 if (CheckFunctionCall(Method, TheCall, Proto)) 14893 return ExprError(); 14894 14895 // In the case the method to call was not selected by the overloading 14896 // resolution process, we still need to handle the enable_if attribute. Do 14897 // that here, so it will not hide previous -- and more relevant -- errors. 14898 if (auto *MemE = dyn_cast<MemberExpr>(NakedMemExpr)) { 14899 if (const EnableIfAttr *Attr = 14900 CheckEnableIf(Method, LParenLoc, Args, true)) { 14901 Diag(MemE->getMemberLoc(), 14902 diag::err_ovl_no_viable_member_function_in_call) 14903 << Method << Method->getSourceRange(); 14904 Diag(Method->getLocation(), 14905 diag::note_ovl_candidate_disabled_by_function_cond_attr) 14906 << Attr->getCond()->getSourceRange() << Attr->getMessage(); 14907 return ExprError(); 14908 } 14909 } 14910 14911 if ((isa<CXXConstructorDecl>(CurContext) || 14912 isa<CXXDestructorDecl>(CurContext)) && 14913 TheCall->getMethodDecl()->isPure()) { 14914 const CXXMethodDecl *MD = TheCall->getMethodDecl(); 14915 14916 if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts()) && 14917 MemExpr->performsVirtualDispatch(getLangOpts())) { 14918 Diag(MemExpr->getBeginLoc(), 14919 diag::warn_call_to_pure_virtual_member_function_from_ctor_dtor) 14920 << MD->getDeclName() << isa<CXXDestructorDecl>(CurContext) 14921 << MD->getParent(); 14922 14923 Diag(MD->getBeginLoc(), diag::note_previous_decl) << MD->getDeclName(); 14924 if (getLangOpts().AppleKext) 14925 Diag(MemExpr->getBeginLoc(), diag::note_pure_qualified_call_kext) 14926 << MD->getParent() << MD->getDeclName(); 14927 } 14928 } 14929 14930 if (CXXDestructorDecl *DD = 14931 dyn_cast<CXXDestructorDecl>(TheCall->getMethodDecl())) { 14932 // a->A::f() doesn't go through the vtable, except in AppleKext mode. 14933 bool CallCanBeVirtual = !MemExpr->hasQualifier() || getLangOpts().AppleKext; 14934 CheckVirtualDtorCall(DD, MemExpr->getBeginLoc(), /*IsDelete=*/false, 14935 CallCanBeVirtual, /*WarnOnNonAbstractTypes=*/true, 14936 MemExpr->getMemberLoc()); 14937 } 14938 14939 return CheckForImmediateInvocation(MaybeBindToTemporary(TheCall), 14940 TheCall->getMethodDecl()); 14941 } 14942 14943 /// BuildCallToObjectOfClassType - Build a call to an object of class 14944 /// type (C++ [over.call.object]), which can end up invoking an 14945 /// overloaded function call operator (@c operator()) or performing a 14946 /// user-defined conversion on the object argument. 14947 ExprResult 14948 Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj, 14949 SourceLocation LParenLoc, 14950 MultiExprArg Args, 14951 SourceLocation RParenLoc) { 14952 if (checkPlaceholderForOverload(*this, Obj)) 14953 return ExprError(); 14954 ExprResult Object = Obj; 14955 14956 UnbridgedCastsSet UnbridgedCasts; 14957 if (checkArgPlaceholdersForOverload(*this, Args, UnbridgedCasts)) 14958 return ExprError(); 14959 14960 assert(Object.get()->getType()->isRecordType() && 14961 "Requires object type argument"); 14962 14963 // C++ [over.call.object]p1: 14964 // If the primary-expression E in the function call syntax 14965 // evaluates to a class object of type "cv T", then the set of 14966 // candidate functions includes at least the function call 14967 // operators of T. The function call operators of T are obtained by 14968 // ordinary lookup of the name operator() in the context of 14969 // (E).operator(). 14970 OverloadCandidateSet CandidateSet(LParenLoc, 14971 OverloadCandidateSet::CSK_Operator); 14972 DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(OO_Call); 14973 14974 if (RequireCompleteType(LParenLoc, Object.get()->getType(), 14975 diag::err_incomplete_object_call, Object.get())) 14976 return true; 14977 14978 const auto *Record = Object.get()->getType()->castAs<RecordType>(); 14979 LookupResult R(*this, OpName, LParenLoc, LookupOrdinaryName); 14980 LookupQualifiedName(R, Record->getDecl()); 14981 R.suppressDiagnostics(); 14982 14983 for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end(); 14984 Oper != OperEnd; ++Oper) { 14985 AddMethodCandidate(Oper.getPair(), Object.get()->getType(), 14986 Object.get()->Classify(Context), Args, CandidateSet, 14987 /*SuppressUserConversion=*/false); 14988 } 14989 14990 // When calling a lambda, both the call operator, and 14991 // the conversion operator to function pointer 14992 // are considered. But when constraint checking 14993 // on the call operator fails, it will also fail on the 14994 // conversion operator as the constraints are always the same. 14995 // As the user probably does not intend to perform a surrogate call, 14996 // we filter them out to produce better error diagnostics, ie to avoid 14997 // showing 2 failed overloads instead of one. 14998 bool IgnoreSurrogateFunctions = false; 14999 if (CandidateSet.size() == 1 && Record->getAsCXXRecordDecl()->isLambda()) { 15000 const OverloadCandidate &Candidate = *CandidateSet.begin(); 15001 if (!Candidate.Viable && 15002 Candidate.FailureKind == ovl_fail_constraints_not_satisfied) 15003 IgnoreSurrogateFunctions = true; 15004 } 15005 15006 // C++ [over.call.object]p2: 15007 // In addition, for each (non-explicit in C++0x) conversion function 15008 // declared in T of the form 15009 // 15010 // operator conversion-type-id () cv-qualifier; 15011 // 15012 // where cv-qualifier is the same cv-qualification as, or a 15013 // greater cv-qualification than, cv, and where conversion-type-id 15014 // denotes the type "pointer to function of (P1,...,Pn) returning 15015 // R", or the type "reference to pointer to function of 15016 // (P1,...,Pn) returning R", or the type "reference to function 15017 // of (P1,...,Pn) returning R", a surrogate call function [...] 15018 // is also considered as a candidate function. Similarly, 15019 // surrogate call functions are added to the set of candidate 15020 // functions for each conversion function declared in an 15021 // accessible base class provided the function is not hidden 15022 // within T by another intervening declaration. 15023 const auto &Conversions = 15024 cast<CXXRecordDecl>(Record->getDecl())->getVisibleConversionFunctions(); 15025 for (auto I = Conversions.begin(), E = Conversions.end(); 15026 !IgnoreSurrogateFunctions && I != E; ++I) { 15027 NamedDecl *D = *I; 15028 CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext()); 15029 if (isa<UsingShadowDecl>(D)) 15030 D = cast<UsingShadowDecl>(D)->getTargetDecl(); 15031 15032 // Skip over templated conversion functions; they aren't 15033 // surrogates. 15034 if (isa<FunctionTemplateDecl>(D)) 15035 continue; 15036 15037 CXXConversionDecl *Conv = cast<CXXConversionDecl>(D); 15038 if (!Conv->isExplicit()) { 15039 // Strip the reference type (if any) and then the pointer type (if 15040 // any) to get down to what might be a function type. 15041 QualType ConvType = Conv->getConversionType().getNonReferenceType(); 15042 if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>()) 15043 ConvType = ConvPtrType->getPointeeType(); 15044 15045 if (const FunctionProtoType *Proto = ConvType->getAs<FunctionProtoType>()) 15046 { 15047 AddSurrogateCandidate(Conv, I.getPair(), ActingContext, Proto, 15048 Object.get(), Args, CandidateSet); 15049 } 15050 } 15051 } 15052 15053 bool HadMultipleCandidates = (CandidateSet.size() > 1); 15054 15055 // Perform overload resolution. 15056 OverloadCandidateSet::iterator Best; 15057 switch (CandidateSet.BestViableFunction(*this, Object.get()->getBeginLoc(), 15058 Best)) { 15059 case OR_Success: 15060 // Overload resolution succeeded; we'll build the appropriate call 15061 // below. 15062 break; 15063 15064 case OR_No_Viable_Function: { 15065 PartialDiagnostic PD = 15066 CandidateSet.empty() 15067 ? (PDiag(diag::err_ovl_no_oper) 15068 << Object.get()->getType() << /*call*/ 1 15069 << Object.get()->getSourceRange()) 15070 : (PDiag(diag::err_ovl_no_viable_object_call) 15071 << Object.get()->getType() << Object.get()->getSourceRange()); 15072 CandidateSet.NoteCandidates( 15073 PartialDiagnosticAt(Object.get()->getBeginLoc(), PD), *this, 15074 OCD_AllCandidates, Args); 15075 break; 15076 } 15077 case OR_Ambiguous: 15078 CandidateSet.NoteCandidates( 15079 PartialDiagnosticAt(Object.get()->getBeginLoc(), 15080 PDiag(diag::err_ovl_ambiguous_object_call) 15081 << Object.get()->getType() 15082 << Object.get()->getSourceRange()), 15083 *this, OCD_AmbiguousCandidates, Args); 15084 break; 15085 15086 case OR_Deleted: 15087 CandidateSet.NoteCandidates( 15088 PartialDiagnosticAt(Object.get()->getBeginLoc(), 15089 PDiag(diag::err_ovl_deleted_object_call) 15090 << Object.get()->getType() 15091 << Object.get()->getSourceRange()), 15092 *this, OCD_AllCandidates, Args); 15093 break; 15094 } 15095 15096 if (Best == CandidateSet.end()) 15097 return true; 15098 15099 UnbridgedCasts.restore(); 15100 15101 if (Best->Function == nullptr) { 15102 // Since there is no function declaration, this is one of the 15103 // surrogate candidates. Dig out the conversion function. 15104 CXXConversionDecl *Conv 15105 = cast<CXXConversionDecl>( 15106 Best->Conversions[0].UserDefined.ConversionFunction); 15107 15108 CheckMemberOperatorAccess(LParenLoc, Object.get(), nullptr, 15109 Best->FoundDecl); 15110 if (DiagnoseUseOfDecl(Best->FoundDecl, LParenLoc)) 15111 return ExprError(); 15112 assert(Conv == Best->FoundDecl.getDecl() && 15113 "Found Decl & conversion-to-functionptr should be same, right?!"); 15114 // We selected one of the surrogate functions that converts the 15115 // object parameter to a function pointer. Perform the conversion 15116 // on the object argument, then let BuildCallExpr finish the job. 15117 15118 // Create an implicit member expr to refer to the conversion operator. 15119 // and then call it. 15120 ExprResult Call = BuildCXXMemberCallExpr(Object.get(), Best->FoundDecl, 15121 Conv, HadMultipleCandidates); 15122 if (Call.isInvalid()) 15123 return ExprError(); 15124 // Record usage of conversion in an implicit cast. 15125 Call = ImplicitCastExpr::Create( 15126 Context, Call.get()->getType(), CK_UserDefinedConversion, Call.get(), 15127 nullptr, VK_PRValue, CurFPFeatureOverrides()); 15128 15129 return BuildCallExpr(S, Call.get(), LParenLoc, Args, RParenLoc); 15130 } 15131 15132 CheckMemberOperatorAccess(LParenLoc, Object.get(), nullptr, Best->FoundDecl); 15133 15134 // We found an overloaded operator(). Build a CXXOperatorCallExpr 15135 // that calls this method, using Object for the implicit object 15136 // parameter and passing along the remaining arguments. 15137 CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function); 15138 15139 // An error diagnostic has already been printed when parsing the declaration. 15140 if (Method->isInvalidDecl()) 15141 return ExprError(); 15142 15143 const auto *Proto = Method->getType()->castAs<FunctionProtoType>(); 15144 unsigned NumParams = Proto->getNumParams(); 15145 15146 DeclarationNameInfo OpLocInfo( 15147 Context.DeclarationNames.getCXXOperatorName(OO_Call), LParenLoc); 15148 OpLocInfo.setCXXOperatorNameRange(SourceRange(LParenLoc, RParenLoc)); 15149 ExprResult NewFn = CreateFunctionRefExpr(*this, Method, Best->FoundDecl, 15150 Obj, HadMultipleCandidates, 15151 OpLocInfo.getLoc(), 15152 OpLocInfo.getInfo()); 15153 if (NewFn.isInvalid()) 15154 return true; 15155 15156 SmallVector<Expr *, 8> MethodArgs; 15157 MethodArgs.reserve(NumParams + 1); 15158 15159 bool IsError = false; 15160 15161 // Initialize the implicit object parameter if needed. 15162 // Since C++23, this could also be a call to a static call operator 15163 // which we emit as a regular CallExpr. 15164 if (Method->isInstance()) { 15165 ExprResult ObjRes = PerformObjectArgumentInitialization( 15166 Object.get(), /*Qualifier=*/nullptr, Best->FoundDecl, Method); 15167 if (ObjRes.isInvalid()) 15168 IsError = true; 15169 else 15170 Object = ObjRes; 15171 MethodArgs.push_back(Object.get()); 15172 } 15173 15174 IsError |= PrepareArgumentsForCallToObjectOfClassType( 15175 *this, MethodArgs, Method, Args, LParenLoc); 15176 15177 // If this is a variadic call, handle args passed through "...". 15178 if (Proto->isVariadic()) { 15179 // Promote the arguments (C99 6.5.2.2p7). 15180 for (unsigned i = NumParams, e = Args.size(); i < e; i++) { 15181 ExprResult Arg = DefaultVariadicArgumentPromotion(Args[i], VariadicMethod, 15182 nullptr); 15183 IsError |= Arg.isInvalid(); 15184 MethodArgs.push_back(Arg.get()); 15185 } 15186 } 15187 15188 if (IsError) 15189 return true; 15190 15191 DiagnoseSentinelCalls(Method, LParenLoc, Args); 15192 15193 // Once we've built TheCall, all of the expressions are properly owned. 15194 QualType ResultTy = Method->getReturnType(); 15195 ExprValueKind VK = Expr::getValueKindForType(ResultTy); 15196 ResultTy = ResultTy.getNonLValueExprType(Context); 15197 15198 CallExpr *TheCall; 15199 if (Method->isInstance()) 15200 TheCall = CXXOperatorCallExpr::Create(Context, OO_Call, NewFn.get(), 15201 MethodArgs, ResultTy, VK, RParenLoc, 15202 CurFPFeatureOverrides()); 15203 else 15204 TheCall = CallExpr::Create(Context, NewFn.get(), MethodArgs, ResultTy, VK, 15205 RParenLoc, CurFPFeatureOverrides()); 15206 15207 if (CheckCallReturnType(Method->getReturnType(), LParenLoc, TheCall, Method)) 15208 return true; 15209 15210 if (CheckFunctionCall(Method, TheCall, Proto)) 15211 return true; 15212 15213 return CheckForImmediateInvocation(MaybeBindToTemporary(TheCall), Method); 15214 } 15215 15216 /// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator-> 15217 /// (if one exists), where @c Base is an expression of class type and 15218 /// @c Member is the name of the member we're trying to find. 15219 ExprResult 15220 Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, 15221 bool *NoArrowOperatorFound) { 15222 assert(Base->getType()->isRecordType() && 15223 "left-hand side must have class type"); 15224 15225 if (checkPlaceholderForOverload(*this, Base)) 15226 return ExprError(); 15227 15228 SourceLocation Loc = Base->getExprLoc(); 15229 15230 // C++ [over.ref]p1: 15231 // 15232 // [...] An expression x->m is interpreted as (x.operator->())->m 15233 // for a class object x of type T if T::operator->() exists and if 15234 // the operator is selected as the best match function by the 15235 // overload resolution mechanism (13.3). 15236 DeclarationName OpName = 15237 Context.DeclarationNames.getCXXOperatorName(OO_Arrow); 15238 OverloadCandidateSet CandidateSet(Loc, OverloadCandidateSet::CSK_Operator); 15239 15240 if (RequireCompleteType(Loc, Base->getType(), 15241 diag::err_typecheck_incomplete_tag, Base)) 15242 return ExprError(); 15243 15244 LookupResult R(*this, OpName, OpLoc, LookupOrdinaryName); 15245 LookupQualifiedName(R, Base->getType()->castAs<RecordType>()->getDecl()); 15246 R.suppressDiagnostics(); 15247 15248 for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end(); 15249 Oper != OperEnd; ++Oper) { 15250 AddMethodCandidate(Oper.getPair(), Base->getType(), Base->Classify(Context), 15251 std::nullopt, CandidateSet, 15252 /*SuppressUserConversion=*/false); 15253 } 15254 15255 bool HadMultipleCandidates = (CandidateSet.size() > 1); 15256 15257 // Perform overload resolution. 15258 OverloadCandidateSet::iterator Best; 15259 switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) { 15260 case OR_Success: 15261 // Overload resolution succeeded; we'll build the call below. 15262 break; 15263 15264 case OR_No_Viable_Function: { 15265 auto Cands = CandidateSet.CompleteCandidates(*this, OCD_AllCandidates, Base); 15266 if (CandidateSet.empty()) { 15267 QualType BaseType = Base->getType(); 15268 if (NoArrowOperatorFound) { 15269 // Report this specific error to the caller instead of emitting a 15270 // diagnostic, as requested. 15271 *NoArrowOperatorFound = true; 15272 return ExprError(); 15273 } 15274 Diag(OpLoc, diag::err_typecheck_member_reference_arrow) 15275 << BaseType << Base->getSourceRange(); 15276 if (BaseType->isRecordType() && !BaseType->isPointerType()) { 15277 Diag(OpLoc, diag::note_typecheck_member_reference_suggestion) 15278 << FixItHint::CreateReplacement(OpLoc, "."); 15279 } 15280 } else 15281 Diag(OpLoc, diag::err_ovl_no_viable_oper) 15282 << "operator->" << Base->getSourceRange(); 15283 CandidateSet.NoteCandidates(*this, Base, Cands); 15284 return ExprError(); 15285 } 15286 case OR_Ambiguous: 15287 CandidateSet.NoteCandidates( 15288 PartialDiagnosticAt(OpLoc, PDiag(diag::err_ovl_ambiguous_oper_unary) 15289 << "->" << Base->getType() 15290 << Base->getSourceRange()), 15291 *this, OCD_AmbiguousCandidates, Base); 15292 return ExprError(); 15293 15294 case OR_Deleted: 15295 CandidateSet.NoteCandidates( 15296 PartialDiagnosticAt(OpLoc, PDiag(diag::err_ovl_deleted_oper) 15297 << "->" << Base->getSourceRange()), 15298 *this, OCD_AllCandidates, Base); 15299 return ExprError(); 15300 } 15301 15302 CheckMemberOperatorAccess(OpLoc, Base, nullptr, Best->FoundDecl); 15303 15304 // Convert the object parameter. 15305 CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function); 15306 ExprResult BaseResult = 15307 PerformObjectArgumentInitialization(Base, /*Qualifier=*/nullptr, 15308 Best->FoundDecl, Method); 15309 if (BaseResult.isInvalid()) 15310 return ExprError(); 15311 Base = BaseResult.get(); 15312 15313 // Build the operator call. 15314 ExprResult FnExpr = CreateFunctionRefExpr(*this, Method, Best->FoundDecl, 15315 Base, HadMultipleCandidates, OpLoc); 15316 if (FnExpr.isInvalid()) 15317 return ExprError(); 15318 15319 QualType ResultTy = Method->getReturnType(); 15320 ExprValueKind VK = Expr::getValueKindForType(ResultTy); 15321 ResultTy = ResultTy.getNonLValueExprType(Context); 15322 CXXOperatorCallExpr *TheCall = 15323 CXXOperatorCallExpr::Create(Context, OO_Arrow, FnExpr.get(), Base, 15324 ResultTy, VK, OpLoc, CurFPFeatureOverrides()); 15325 15326 if (CheckCallReturnType(Method->getReturnType(), OpLoc, TheCall, Method)) 15327 return ExprError(); 15328 15329 if (CheckFunctionCall(Method, TheCall, 15330 Method->getType()->castAs<FunctionProtoType>())) 15331 return ExprError(); 15332 15333 return CheckForImmediateInvocation(MaybeBindToTemporary(TheCall), Method); 15334 } 15335 15336 /// BuildLiteralOperatorCall - Build a UserDefinedLiteral by creating a call to 15337 /// a literal operator described by the provided lookup results. 15338 ExprResult Sema::BuildLiteralOperatorCall(LookupResult &R, 15339 DeclarationNameInfo &SuffixInfo, 15340 ArrayRef<Expr*> Args, 15341 SourceLocation LitEndLoc, 15342 TemplateArgumentListInfo *TemplateArgs) { 15343 SourceLocation UDSuffixLoc = SuffixInfo.getCXXLiteralOperatorNameLoc(); 15344 15345 OverloadCandidateSet CandidateSet(UDSuffixLoc, 15346 OverloadCandidateSet::CSK_Normal); 15347 AddNonMemberOperatorCandidates(R.asUnresolvedSet(), Args, CandidateSet, 15348 TemplateArgs); 15349 15350 bool HadMultipleCandidates = (CandidateSet.size() > 1); 15351 15352 // Perform overload resolution. This will usually be trivial, but might need 15353 // to perform substitutions for a literal operator template. 15354 OverloadCandidateSet::iterator Best; 15355 switch (CandidateSet.BestViableFunction(*this, UDSuffixLoc, Best)) { 15356 case OR_Success: 15357 case OR_Deleted: 15358 break; 15359 15360 case OR_No_Viable_Function: 15361 CandidateSet.NoteCandidates( 15362 PartialDiagnosticAt(UDSuffixLoc, 15363 PDiag(diag::err_ovl_no_viable_function_in_call) 15364 << R.getLookupName()), 15365 *this, OCD_AllCandidates, Args); 15366 return ExprError(); 15367 15368 case OR_Ambiguous: 15369 CandidateSet.NoteCandidates( 15370 PartialDiagnosticAt(R.getNameLoc(), PDiag(diag::err_ovl_ambiguous_call) 15371 << R.getLookupName()), 15372 *this, OCD_AmbiguousCandidates, Args); 15373 return ExprError(); 15374 } 15375 15376 FunctionDecl *FD = Best->Function; 15377 ExprResult Fn = CreateFunctionRefExpr(*this, FD, Best->FoundDecl, 15378 nullptr, HadMultipleCandidates, 15379 SuffixInfo.getLoc(), 15380 SuffixInfo.getInfo()); 15381 if (Fn.isInvalid()) 15382 return true; 15383 15384 // Check the argument types. This should almost always be a no-op, except 15385 // that array-to-pointer decay is applied to string literals. 15386 Expr *ConvArgs[2]; 15387 for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) { 15388 ExprResult InputInit = PerformCopyInitialization( 15389 InitializedEntity::InitializeParameter(Context, FD->getParamDecl(ArgIdx)), 15390 SourceLocation(), Args[ArgIdx]); 15391 if (InputInit.isInvalid()) 15392 return true; 15393 ConvArgs[ArgIdx] = InputInit.get(); 15394 } 15395 15396 QualType ResultTy = FD->getReturnType(); 15397 ExprValueKind VK = Expr::getValueKindForType(ResultTy); 15398 ResultTy = ResultTy.getNonLValueExprType(Context); 15399 15400 UserDefinedLiteral *UDL = UserDefinedLiteral::Create( 15401 Context, Fn.get(), llvm::ArrayRef(ConvArgs, Args.size()), ResultTy, VK, 15402 LitEndLoc, UDSuffixLoc, CurFPFeatureOverrides()); 15403 15404 if (CheckCallReturnType(FD->getReturnType(), UDSuffixLoc, UDL, FD)) 15405 return ExprError(); 15406 15407 if (CheckFunctionCall(FD, UDL, nullptr)) 15408 return ExprError(); 15409 15410 return CheckForImmediateInvocation(MaybeBindToTemporary(UDL), FD); 15411 } 15412 15413 /// Build a call to 'begin' or 'end' for a C++11 for-range statement. If the 15414 /// given LookupResult is non-empty, it is assumed to describe a member which 15415 /// will be invoked. Otherwise, the function will be found via argument 15416 /// dependent lookup. 15417 /// CallExpr is set to a valid expression and FRS_Success returned on success, 15418 /// otherwise CallExpr is set to ExprError() and some non-success value 15419 /// is returned. 15420 Sema::ForRangeStatus 15421 Sema::BuildForRangeBeginEndCall(SourceLocation Loc, 15422 SourceLocation RangeLoc, 15423 const DeclarationNameInfo &NameInfo, 15424 LookupResult &MemberLookup, 15425 OverloadCandidateSet *CandidateSet, 15426 Expr *Range, ExprResult *CallExpr) { 15427 Scope *S = nullptr; 15428 15429 CandidateSet->clear(OverloadCandidateSet::CSK_Normal); 15430 if (!MemberLookup.empty()) { 15431 ExprResult MemberRef = 15432 BuildMemberReferenceExpr(Range, Range->getType(), Loc, 15433 /*IsPtr=*/false, CXXScopeSpec(), 15434 /*TemplateKWLoc=*/SourceLocation(), 15435 /*FirstQualifierInScope=*/nullptr, 15436 MemberLookup, 15437 /*TemplateArgs=*/nullptr, S); 15438 if (MemberRef.isInvalid()) { 15439 *CallExpr = ExprError(); 15440 return FRS_DiagnosticIssued; 15441 } 15442 *CallExpr = 15443 BuildCallExpr(S, MemberRef.get(), Loc, std::nullopt, Loc, nullptr); 15444 if (CallExpr->isInvalid()) { 15445 *CallExpr = ExprError(); 15446 return FRS_DiagnosticIssued; 15447 } 15448 } else { 15449 ExprResult FnR = CreateUnresolvedLookupExpr(/*NamingClass=*/nullptr, 15450 NestedNameSpecifierLoc(), 15451 NameInfo, UnresolvedSet<0>()); 15452 if (FnR.isInvalid()) 15453 return FRS_DiagnosticIssued; 15454 UnresolvedLookupExpr *Fn = cast<UnresolvedLookupExpr>(FnR.get()); 15455 15456 bool CandidateSetError = buildOverloadedCallSet(S, Fn, Fn, Range, Loc, 15457 CandidateSet, CallExpr); 15458 if (CandidateSet->empty() || CandidateSetError) { 15459 *CallExpr = ExprError(); 15460 return FRS_NoViableFunction; 15461 } 15462 OverloadCandidateSet::iterator Best; 15463 OverloadingResult OverloadResult = 15464 CandidateSet->BestViableFunction(*this, Fn->getBeginLoc(), Best); 15465 15466 if (OverloadResult == OR_No_Viable_Function) { 15467 *CallExpr = ExprError(); 15468 return FRS_NoViableFunction; 15469 } 15470 *CallExpr = FinishOverloadedCallExpr(*this, S, Fn, Fn, Loc, Range, 15471 Loc, nullptr, CandidateSet, &Best, 15472 OverloadResult, 15473 /*AllowTypoCorrection=*/false); 15474 if (CallExpr->isInvalid() || OverloadResult != OR_Success) { 15475 *CallExpr = ExprError(); 15476 return FRS_DiagnosticIssued; 15477 } 15478 } 15479 return FRS_Success; 15480 } 15481 15482 15483 /// FixOverloadedFunctionReference - E is an expression that refers to 15484 /// a C++ overloaded function (possibly with some parentheses and 15485 /// perhaps a '&' around it). We have resolved the overloaded function 15486 /// to the function declaration Fn, so patch up the expression E to 15487 /// refer (possibly indirectly) to Fn. Returns the new expr. 15488 Expr *Sema::FixOverloadedFunctionReference(Expr *E, DeclAccessPair Found, 15489 FunctionDecl *Fn) { 15490 if (ParenExpr *PE = dyn_cast<ParenExpr>(E)) { 15491 Expr *SubExpr = FixOverloadedFunctionReference(PE->getSubExpr(), 15492 Found, Fn); 15493 if (SubExpr == PE->getSubExpr()) 15494 return PE; 15495 15496 return new (Context) ParenExpr(PE->getLParen(), PE->getRParen(), SubExpr); 15497 } 15498 15499 if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) { 15500 Expr *SubExpr = FixOverloadedFunctionReference(ICE->getSubExpr(), 15501 Found, Fn); 15502 assert(Context.hasSameType(ICE->getSubExpr()->getType(), 15503 SubExpr->getType()) && 15504 "Implicit cast type cannot be determined from overload"); 15505 assert(ICE->path_empty() && "fixing up hierarchy conversion?"); 15506 if (SubExpr == ICE->getSubExpr()) 15507 return ICE; 15508 15509 return ImplicitCastExpr::Create(Context, ICE->getType(), ICE->getCastKind(), 15510 SubExpr, nullptr, ICE->getValueKind(), 15511 CurFPFeatureOverrides()); 15512 } 15513 15514 if (auto *GSE = dyn_cast<GenericSelectionExpr>(E)) { 15515 if (!GSE->isResultDependent()) { 15516 Expr *SubExpr = 15517 FixOverloadedFunctionReference(GSE->getResultExpr(), Found, Fn); 15518 if (SubExpr == GSE->getResultExpr()) 15519 return GSE; 15520 15521 // Replace the resulting type information before rebuilding the generic 15522 // selection expression. 15523 ArrayRef<Expr *> A = GSE->getAssocExprs(); 15524 SmallVector<Expr *, 4> AssocExprs(A.begin(), A.end()); 15525 unsigned ResultIdx = GSE->getResultIndex(); 15526 AssocExprs[ResultIdx] = SubExpr; 15527 15528 if (GSE->isExprPredicate()) 15529 return GenericSelectionExpr::Create( 15530 Context, GSE->getGenericLoc(), GSE->getControllingExpr(), 15531 GSE->getAssocTypeSourceInfos(), AssocExprs, GSE->getDefaultLoc(), 15532 GSE->getRParenLoc(), GSE->containsUnexpandedParameterPack(), 15533 ResultIdx); 15534 return GenericSelectionExpr::Create( 15535 Context, GSE->getGenericLoc(), GSE->getControllingType(), 15536 GSE->getAssocTypeSourceInfos(), AssocExprs, GSE->getDefaultLoc(), 15537 GSE->getRParenLoc(), GSE->containsUnexpandedParameterPack(), 15538 ResultIdx); 15539 } 15540 // Rather than fall through to the unreachable, return the original generic 15541 // selection expression. 15542 return GSE; 15543 } 15544 15545 if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(E)) { 15546 assert(UnOp->getOpcode() == UO_AddrOf && 15547 "Can only take the address of an overloaded function"); 15548 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) { 15549 if (Method->isStatic()) { 15550 // Do nothing: static member functions aren't any different 15551 // from non-member functions. 15552 } else { 15553 // Fix the subexpression, which really has to be an 15554 // UnresolvedLookupExpr holding an overloaded member function 15555 // or template. 15556 Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(), 15557 Found, Fn); 15558 if (SubExpr == UnOp->getSubExpr()) 15559 return UnOp; 15560 15561 assert(isa<DeclRefExpr>(SubExpr) 15562 && "fixed to something other than a decl ref"); 15563 assert(cast<DeclRefExpr>(SubExpr)->getQualifier() 15564 && "fixed to a member ref with no nested name qualifier"); 15565 15566 // We have taken the address of a pointer to member 15567 // function. Perform the computation here so that we get the 15568 // appropriate pointer to member type. 15569 QualType ClassType 15570 = Context.getTypeDeclType(cast<RecordDecl>(Method->getDeclContext())); 15571 QualType MemPtrType 15572 = Context.getMemberPointerType(Fn->getType(), ClassType.getTypePtr()); 15573 // Under the MS ABI, lock down the inheritance model now. 15574 if (Context.getTargetInfo().getCXXABI().isMicrosoft()) 15575 (void)isCompleteType(UnOp->getOperatorLoc(), MemPtrType); 15576 15577 return UnaryOperator::Create( 15578 Context, SubExpr, UO_AddrOf, MemPtrType, VK_PRValue, OK_Ordinary, 15579 UnOp->getOperatorLoc(), false, CurFPFeatureOverrides()); 15580 } 15581 } 15582 Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(), 15583 Found, Fn); 15584 if (SubExpr == UnOp->getSubExpr()) 15585 return UnOp; 15586 15587 // FIXME: This can't currently fail, but in principle it could. 15588 return CreateBuiltinUnaryOp(UnOp->getOperatorLoc(), UO_AddrOf, SubExpr) 15589 .get(); 15590 } 15591 15592 if (UnresolvedLookupExpr *ULE = dyn_cast<UnresolvedLookupExpr>(E)) { 15593 // FIXME: avoid copy. 15594 TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = nullptr; 15595 if (ULE->hasExplicitTemplateArgs()) { 15596 ULE->copyTemplateArgumentsInto(TemplateArgsBuffer); 15597 TemplateArgs = &TemplateArgsBuffer; 15598 } 15599 15600 QualType Type = Fn->getType(); 15601 ExprValueKind ValueKind = getLangOpts().CPlusPlus ? VK_LValue : VK_PRValue; 15602 15603 // FIXME: Duplicated from BuildDeclarationNameExpr. 15604 if (unsigned BID = Fn->getBuiltinID()) { 15605 if (!Context.BuiltinInfo.isDirectlyAddressable(BID)) { 15606 Type = Context.BuiltinFnTy; 15607 ValueKind = VK_PRValue; 15608 } 15609 } 15610 15611 DeclRefExpr *DRE = BuildDeclRefExpr( 15612 Fn, Type, ValueKind, ULE->getNameInfo(), ULE->getQualifierLoc(), 15613 Found.getDecl(), ULE->getTemplateKeywordLoc(), TemplateArgs); 15614 DRE->setHadMultipleCandidates(ULE->getNumDecls() > 1); 15615 return DRE; 15616 } 15617 15618 if (UnresolvedMemberExpr *MemExpr = dyn_cast<UnresolvedMemberExpr>(E)) { 15619 // FIXME: avoid copy. 15620 TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = nullptr; 15621 if (MemExpr->hasExplicitTemplateArgs()) { 15622 MemExpr->copyTemplateArgumentsInto(TemplateArgsBuffer); 15623 TemplateArgs = &TemplateArgsBuffer; 15624 } 15625 15626 Expr *Base; 15627 15628 // If we're filling in a static method where we used to have an 15629 // implicit member access, rewrite to a simple decl ref. 15630 if (MemExpr->isImplicitAccess()) { 15631 if (cast<CXXMethodDecl>(Fn)->isStatic()) { 15632 DeclRefExpr *DRE = BuildDeclRefExpr( 15633 Fn, Fn->getType(), VK_LValue, MemExpr->getNameInfo(), 15634 MemExpr->getQualifierLoc(), Found.getDecl(), 15635 MemExpr->getTemplateKeywordLoc(), TemplateArgs); 15636 DRE->setHadMultipleCandidates(MemExpr->getNumDecls() > 1); 15637 return DRE; 15638 } else { 15639 SourceLocation Loc = MemExpr->getMemberLoc(); 15640 if (MemExpr->getQualifier()) 15641 Loc = MemExpr->getQualifierLoc().getBeginLoc(); 15642 Base = 15643 BuildCXXThisExpr(Loc, MemExpr->getBaseType(), /*IsImplicit=*/true); 15644 } 15645 } else 15646 Base = MemExpr->getBase(); 15647 15648 ExprValueKind valueKind; 15649 QualType type; 15650 if (cast<CXXMethodDecl>(Fn)->isStatic()) { 15651 valueKind = VK_LValue; 15652 type = Fn->getType(); 15653 } else { 15654 valueKind = VK_PRValue; 15655 type = Context.BoundMemberTy; 15656 } 15657 15658 return BuildMemberExpr( 15659 Base, MemExpr->isArrow(), MemExpr->getOperatorLoc(), 15660 MemExpr->getQualifierLoc(), MemExpr->getTemplateKeywordLoc(), Fn, Found, 15661 /*HadMultipleCandidates=*/true, MemExpr->getMemberNameInfo(), 15662 type, valueKind, OK_Ordinary, TemplateArgs); 15663 } 15664 15665 llvm_unreachable("Invalid reference to overloaded function"); 15666 } 15667 15668 ExprResult Sema::FixOverloadedFunctionReference(ExprResult E, 15669 DeclAccessPair Found, 15670 FunctionDecl *Fn) { 15671 return FixOverloadedFunctionReference(E.get(), Found, Fn); 15672 } 15673 15674 bool clang::shouldEnforceArgLimit(bool PartialOverloading, 15675 FunctionDecl *Function) { 15676 if (!PartialOverloading || !Function) 15677 return true; 15678 if (Function->isVariadic()) 15679 return false; 15680 if (const auto *Proto = 15681 dyn_cast<FunctionProtoType>(Function->getFunctionType())) 15682 if (Proto->isTemplateVariadic()) 15683 return false; 15684 if (auto *Pattern = Function->getTemplateInstantiationPattern()) 15685 if (const auto *Proto = 15686 dyn_cast<FunctionProtoType>(Pattern->getFunctionType())) 15687 if (Proto->isTemplateVariadic()) 15688 return false; 15689 return true; 15690 } 15691