1 //===--- SemaOverload.cpp - C++ Overloading -------------------------------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file provides Sema routines for C++ overloading.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #include "clang/Sema/Overload.h"
15 #include "clang/AST/ASTContext.h"
16 #include "clang/AST/CXXInheritance.h"
17 #include "clang/AST/DeclObjC.h"
18 #include "clang/AST/Expr.h"
19 #include "clang/AST/ExprCXX.h"
20 #include "clang/AST/ExprObjC.h"
21 #include "clang/AST/TypeOrdering.h"
22 #include "clang/Basic/Diagnostic.h"
23 #include "clang/Basic/PartialDiagnostic.h"
24 #include "clang/Lex/Preprocessor.h"
25 #include "clang/Sema/Initialization.h"
26 #include "clang/Sema/Lookup.h"
27 #include "clang/Sema/SemaInternal.h"
28 #include "clang/Sema/Template.h"
29 #include "clang/Sema/TemplateDeduction.h"
30 #include "llvm/ADT/DenseSet.h"
31 #include "llvm/ADT/STLExtras.h"
32 #include "llvm/ADT/SmallPtrSet.h"
33 #include "llvm/ADT/SmallString.h"
34 #include <algorithm>
35
36 namespace clang {
37 using namespace sema;
38
39 /// A convenience routine for creating a decayed reference to a function.
40 static ExprResult
CreateFunctionRefExpr(Sema & S,FunctionDecl * Fn,NamedDecl * FoundDecl,bool HadMultipleCandidates,SourceLocation Loc=SourceLocation (),const DeclarationNameLoc & LocInfo=DeclarationNameLoc ())41 CreateFunctionRefExpr(Sema &S, FunctionDecl *Fn, NamedDecl *FoundDecl,
42 bool HadMultipleCandidates,
43 SourceLocation Loc = SourceLocation(),
44 const DeclarationNameLoc &LocInfo = DeclarationNameLoc()){
45 if (S.DiagnoseUseOfDecl(FoundDecl, Loc))
46 return ExprError();
47 // If FoundDecl is different from Fn (such as if one is a template
48 // and the other a specialization), make sure DiagnoseUseOfDecl is
49 // called on both.
50 // FIXME: This would be more comprehensively addressed by modifying
51 // DiagnoseUseOfDecl to accept both the FoundDecl and the decl
52 // being used.
53 if (FoundDecl != Fn && S.DiagnoseUseOfDecl(Fn, Loc))
54 return ExprError();
55 DeclRefExpr *DRE = new (S.Context) DeclRefExpr(Fn, false, Fn->getType(),
56 VK_LValue, Loc, LocInfo);
57 if (HadMultipleCandidates)
58 DRE->setHadMultipleCandidates(true);
59
60 S.MarkDeclRefReferenced(DRE);
61
62 ExprResult E = S.Owned(DRE);
63 E = S.DefaultFunctionArrayConversion(E.take());
64 if (E.isInvalid())
65 return ExprError();
66 return E;
67 }
68
69 static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType,
70 bool InOverloadResolution,
71 StandardConversionSequence &SCS,
72 bool CStyle,
73 bool AllowObjCWritebackConversion);
74
75 static bool IsTransparentUnionStandardConversion(Sema &S, Expr* From,
76 QualType &ToType,
77 bool InOverloadResolution,
78 StandardConversionSequence &SCS,
79 bool CStyle);
80 static OverloadingResult
81 IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
82 UserDefinedConversionSequence& User,
83 OverloadCandidateSet& Conversions,
84 bool AllowExplicit);
85
86
87 static ImplicitConversionSequence::CompareKind
88 CompareStandardConversionSequences(Sema &S,
89 const StandardConversionSequence& SCS1,
90 const StandardConversionSequence& SCS2);
91
92 static ImplicitConversionSequence::CompareKind
93 CompareQualificationConversions(Sema &S,
94 const StandardConversionSequence& SCS1,
95 const StandardConversionSequence& SCS2);
96
97 static ImplicitConversionSequence::CompareKind
98 CompareDerivedToBaseConversions(Sema &S,
99 const StandardConversionSequence& SCS1,
100 const StandardConversionSequence& SCS2);
101
102
103
104 /// GetConversionCategory - Retrieve the implicit conversion
105 /// category corresponding to the given implicit conversion kind.
106 ImplicitConversionCategory
GetConversionCategory(ImplicitConversionKind Kind)107 GetConversionCategory(ImplicitConversionKind Kind) {
108 static const ImplicitConversionCategory
109 Category[(int)ICK_Num_Conversion_Kinds] = {
110 ICC_Identity,
111 ICC_Lvalue_Transformation,
112 ICC_Lvalue_Transformation,
113 ICC_Lvalue_Transformation,
114 ICC_Identity,
115 ICC_Qualification_Adjustment,
116 ICC_Promotion,
117 ICC_Promotion,
118 ICC_Promotion,
119 ICC_Conversion,
120 ICC_Conversion,
121 ICC_Conversion,
122 ICC_Conversion,
123 ICC_Conversion,
124 ICC_Conversion,
125 ICC_Conversion,
126 ICC_Conversion,
127 ICC_Conversion,
128 ICC_Conversion,
129 ICC_Conversion,
130 ICC_Conversion,
131 ICC_Conversion
132 };
133 return Category[(int)Kind];
134 }
135
136 /// GetConversionRank - Retrieve the implicit conversion rank
137 /// corresponding to the given implicit conversion kind.
GetConversionRank(ImplicitConversionKind Kind)138 ImplicitConversionRank GetConversionRank(ImplicitConversionKind Kind) {
139 static const ImplicitConversionRank
140 Rank[(int)ICK_Num_Conversion_Kinds] = {
141 ICR_Exact_Match,
142 ICR_Exact_Match,
143 ICR_Exact_Match,
144 ICR_Exact_Match,
145 ICR_Exact_Match,
146 ICR_Exact_Match,
147 ICR_Promotion,
148 ICR_Promotion,
149 ICR_Promotion,
150 ICR_Conversion,
151 ICR_Conversion,
152 ICR_Conversion,
153 ICR_Conversion,
154 ICR_Conversion,
155 ICR_Conversion,
156 ICR_Conversion,
157 ICR_Conversion,
158 ICR_Conversion,
159 ICR_Conversion,
160 ICR_Conversion,
161 ICR_Complex_Real_Conversion,
162 ICR_Conversion,
163 ICR_Conversion,
164 ICR_Writeback_Conversion
165 };
166 return Rank[(int)Kind];
167 }
168
169 /// GetImplicitConversionName - Return the name of this kind of
170 /// implicit conversion.
GetImplicitConversionName(ImplicitConversionKind Kind)171 const char* GetImplicitConversionName(ImplicitConversionKind Kind) {
172 static const char* const Name[(int)ICK_Num_Conversion_Kinds] = {
173 "No conversion",
174 "Lvalue-to-rvalue",
175 "Array-to-pointer",
176 "Function-to-pointer",
177 "Noreturn adjustment",
178 "Qualification",
179 "Integral promotion",
180 "Floating point promotion",
181 "Complex promotion",
182 "Integral conversion",
183 "Floating conversion",
184 "Complex conversion",
185 "Floating-integral conversion",
186 "Pointer conversion",
187 "Pointer-to-member conversion",
188 "Boolean conversion",
189 "Compatible-types conversion",
190 "Derived-to-base conversion",
191 "Vector conversion",
192 "Vector splat",
193 "Complex-real conversion",
194 "Block Pointer conversion",
195 "Transparent Union Conversion"
196 "Writeback conversion"
197 };
198 return Name[Kind];
199 }
200
201 /// StandardConversionSequence - Set the standard conversion
202 /// sequence to the identity conversion.
setAsIdentityConversion()203 void StandardConversionSequence::setAsIdentityConversion() {
204 First = ICK_Identity;
205 Second = ICK_Identity;
206 Third = ICK_Identity;
207 DeprecatedStringLiteralToCharPtr = false;
208 QualificationIncludesObjCLifetime = false;
209 ReferenceBinding = false;
210 DirectBinding = false;
211 IsLvalueReference = true;
212 BindsToFunctionLvalue = false;
213 BindsToRvalue = false;
214 BindsImplicitObjectArgumentWithoutRefQualifier = false;
215 ObjCLifetimeConversionBinding = false;
216 CopyConstructor = 0;
217 }
218
219 /// getRank - Retrieve the rank of this standard conversion sequence
220 /// (C++ 13.3.3.1.1p3). The rank is the largest rank of each of the
221 /// implicit conversions.
getRank() const222 ImplicitConversionRank StandardConversionSequence::getRank() const {
223 ImplicitConversionRank Rank = ICR_Exact_Match;
224 if (GetConversionRank(First) > Rank)
225 Rank = GetConversionRank(First);
226 if (GetConversionRank(Second) > Rank)
227 Rank = GetConversionRank(Second);
228 if (GetConversionRank(Third) > Rank)
229 Rank = GetConversionRank(Third);
230 return Rank;
231 }
232
233 /// isPointerConversionToBool - Determines whether this conversion is
234 /// a conversion of a pointer or pointer-to-member to bool. This is
235 /// used as part of the ranking of standard conversion sequences
236 /// (C++ 13.3.3.2p4).
isPointerConversionToBool() const237 bool StandardConversionSequence::isPointerConversionToBool() const {
238 // Note that FromType has not necessarily been transformed by the
239 // array-to-pointer or function-to-pointer implicit conversions, so
240 // check for their presence as well as checking whether FromType is
241 // a pointer.
242 if (getToType(1)->isBooleanType() &&
243 (getFromType()->isPointerType() ||
244 getFromType()->isObjCObjectPointerType() ||
245 getFromType()->isBlockPointerType() ||
246 getFromType()->isNullPtrType() ||
247 First == ICK_Array_To_Pointer || First == ICK_Function_To_Pointer))
248 return true;
249
250 return false;
251 }
252
253 /// isPointerConversionToVoidPointer - Determines whether this
254 /// conversion is a conversion of a pointer to a void pointer. This is
255 /// used as part of the ranking of standard conversion sequences (C++
256 /// 13.3.3.2p4).
257 bool
258 StandardConversionSequence::
isPointerConversionToVoidPointer(ASTContext & Context) const259 isPointerConversionToVoidPointer(ASTContext& Context) const {
260 QualType FromType = getFromType();
261 QualType ToType = getToType(1);
262
263 // Note that FromType has not necessarily been transformed by the
264 // array-to-pointer implicit conversion, so check for its presence
265 // and redo the conversion to get a pointer.
266 if (First == ICK_Array_To_Pointer)
267 FromType = Context.getArrayDecayedType(FromType);
268
269 if (Second == ICK_Pointer_Conversion && FromType->isAnyPointerType())
270 if (const PointerType* ToPtrType = ToType->getAs<PointerType>())
271 return ToPtrType->getPointeeType()->isVoidType();
272
273 return false;
274 }
275
276 /// Skip any implicit casts which could be either part of a narrowing conversion
277 /// or after one in an implicit conversion.
IgnoreNarrowingConversion(const Expr * Converted)278 static const Expr *IgnoreNarrowingConversion(const Expr *Converted) {
279 while (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(Converted)) {
280 switch (ICE->getCastKind()) {
281 case CK_NoOp:
282 case CK_IntegralCast:
283 case CK_IntegralToBoolean:
284 case CK_IntegralToFloating:
285 case CK_FloatingToIntegral:
286 case CK_FloatingToBoolean:
287 case CK_FloatingCast:
288 Converted = ICE->getSubExpr();
289 continue;
290
291 default:
292 return Converted;
293 }
294 }
295
296 return Converted;
297 }
298
299 /// Check if this standard conversion sequence represents a narrowing
300 /// conversion, according to C++11 [dcl.init.list]p7.
301 ///
302 /// \param Ctx The AST context.
303 /// \param Converted The result of applying this standard conversion sequence.
304 /// \param ConstantValue If this is an NK_Constant_Narrowing conversion, the
305 /// value of the expression prior to the narrowing conversion.
306 /// \param ConstantType If this is an NK_Constant_Narrowing conversion, the
307 /// type of the expression prior to the narrowing conversion.
308 NarrowingKind
getNarrowingKind(ASTContext & Ctx,const Expr * Converted,APValue & ConstantValue,QualType & ConstantType) const309 StandardConversionSequence::getNarrowingKind(ASTContext &Ctx,
310 const Expr *Converted,
311 APValue &ConstantValue,
312 QualType &ConstantType) const {
313 assert(Ctx.getLangOpts().CPlusPlus && "narrowing check outside C++");
314
315 // C++11 [dcl.init.list]p7:
316 // A narrowing conversion is an implicit conversion ...
317 QualType FromType = getToType(0);
318 QualType ToType = getToType(1);
319 switch (Second) {
320 // -- from a floating-point type to an integer type, or
321 //
322 // -- from an integer type or unscoped enumeration type to a floating-point
323 // type, except where the source is a constant expression and the actual
324 // value after conversion will fit into the target type and will produce
325 // the original value when converted back to the original type, or
326 case ICK_Floating_Integral:
327 if (FromType->isRealFloatingType() && ToType->isIntegralType(Ctx)) {
328 return NK_Type_Narrowing;
329 } else if (FromType->isIntegralType(Ctx) && ToType->isRealFloatingType()) {
330 llvm::APSInt IntConstantValue;
331 const Expr *Initializer = IgnoreNarrowingConversion(Converted);
332 if (Initializer &&
333 Initializer->isIntegerConstantExpr(IntConstantValue, Ctx)) {
334 // Convert the integer to the floating type.
335 llvm::APFloat Result(Ctx.getFloatTypeSemantics(ToType));
336 Result.convertFromAPInt(IntConstantValue, IntConstantValue.isSigned(),
337 llvm::APFloat::rmNearestTiesToEven);
338 // And back.
339 llvm::APSInt ConvertedValue = IntConstantValue;
340 bool ignored;
341 Result.convertToInteger(ConvertedValue,
342 llvm::APFloat::rmTowardZero, &ignored);
343 // If the resulting value is different, this was a narrowing conversion.
344 if (IntConstantValue != ConvertedValue) {
345 ConstantValue = APValue(IntConstantValue);
346 ConstantType = Initializer->getType();
347 return NK_Constant_Narrowing;
348 }
349 } else {
350 // Variables are always narrowings.
351 return NK_Variable_Narrowing;
352 }
353 }
354 return NK_Not_Narrowing;
355
356 // -- from long double to double or float, or from double to float, except
357 // where the source is a constant expression and the actual value after
358 // conversion is within the range of values that can be represented (even
359 // if it cannot be represented exactly), or
360 case ICK_Floating_Conversion:
361 if (FromType->isRealFloatingType() && ToType->isRealFloatingType() &&
362 Ctx.getFloatingTypeOrder(FromType, ToType) == 1) {
363 // FromType is larger than ToType.
364 const Expr *Initializer = IgnoreNarrowingConversion(Converted);
365 if (Initializer->isCXX11ConstantExpr(Ctx, &ConstantValue)) {
366 // Constant!
367 assert(ConstantValue.isFloat());
368 llvm::APFloat FloatVal = ConstantValue.getFloat();
369 // Convert the source value into the target type.
370 bool ignored;
371 llvm::APFloat::opStatus ConvertStatus = FloatVal.convert(
372 Ctx.getFloatTypeSemantics(ToType),
373 llvm::APFloat::rmNearestTiesToEven, &ignored);
374 // If there was no overflow, the source value is within the range of
375 // values that can be represented.
376 if (ConvertStatus & llvm::APFloat::opOverflow) {
377 ConstantType = Initializer->getType();
378 return NK_Constant_Narrowing;
379 }
380 } else {
381 return NK_Variable_Narrowing;
382 }
383 }
384 return NK_Not_Narrowing;
385
386 // -- from an integer type or unscoped enumeration type to an integer type
387 // that cannot represent all the values of the original type, except where
388 // the source is a constant expression and the actual value after
389 // conversion will fit into the target type and will produce the original
390 // value when converted back to the original type.
391 case ICK_Boolean_Conversion: // Bools are integers too.
392 if (!FromType->isIntegralOrUnscopedEnumerationType()) {
393 // Boolean conversions can be from pointers and pointers to members
394 // [conv.bool], and those aren't considered narrowing conversions.
395 return NK_Not_Narrowing;
396 } // Otherwise, fall through to the integral case.
397 case ICK_Integral_Conversion: {
398 assert(FromType->isIntegralOrUnscopedEnumerationType());
399 assert(ToType->isIntegralOrUnscopedEnumerationType());
400 const bool FromSigned = FromType->isSignedIntegerOrEnumerationType();
401 const unsigned FromWidth = Ctx.getIntWidth(FromType);
402 const bool ToSigned = ToType->isSignedIntegerOrEnumerationType();
403 const unsigned ToWidth = Ctx.getIntWidth(ToType);
404
405 if (FromWidth > ToWidth ||
406 (FromWidth == ToWidth && FromSigned != ToSigned) ||
407 (FromSigned && !ToSigned)) {
408 // Not all values of FromType can be represented in ToType.
409 llvm::APSInt InitializerValue;
410 const Expr *Initializer = IgnoreNarrowingConversion(Converted);
411 if (!Initializer->isIntegerConstantExpr(InitializerValue, Ctx)) {
412 // Such conversions on variables are always narrowing.
413 return NK_Variable_Narrowing;
414 }
415 bool Narrowing = false;
416 if (FromWidth < ToWidth) {
417 // Negative -> unsigned is narrowing. Otherwise, more bits is never
418 // narrowing.
419 if (InitializerValue.isSigned() && InitializerValue.isNegative())
420 Narrowing = true;
421 } else {
422 // Add a bit to the InitializerValue so we don't have to worry about
423 // signed vs. unsigned comparisons.
424 InitializerValue = InitializerValue.extend(
425 InitializerValue.getBitWidth() + 1);
426 // Convert the initializer to and from the target width and signed-ness.
427 llvm::APSInt ConvertedValue = InitializerValue;
428 ConvertedValue = ConvertedValue.trunc(ToWidth);
429 ConvertedValue.setIsSigned(ToSigned);
430 ConvertedValue = ConvertedValue.extend(InitializerValue.getBitWidth());
431 ConvertedValue.setIsSigned(InitializerValue.isSigned());
432 // If the result is different, this was a narrowing conversion.
433 if (ConvertedValue != InitializerValue)
434 Narrowing = true;
435 }
436 if (Narrowing) {
437 ConstantType = Initializer->getType();
438 ConstantValue = APValue(InitializerValue);
439 return NK_Constant_Narrowing;
440 }
441 }
442 return NK_Not_Narrowing;
443 }
444
445 default:
446 // Other kinds of conversions are not narrowings.
447 return NK_Not_Narrowing;
448 }
449 }
450
451 /// DebugPrint - Print this standard conversion sequence to standard
452 /// error. Useful for debugging overloading issues.
DebugPrint() const453 void StandardConversionSequence::DebugPrint() const {
454 raw_ostream &OS = llvm::errs();
455 bool PrintedSomething = false;
456 if (First != ICK_Identity) {
457 OS << GetImplicitConversionName(First);
458 PrintedSomething = true;
459 }
460
461 if (Second != ICK_Identity) {
462 if (PrintedSomething) {
463 OS << " -> ";
464 }
465 OS << GetImplicitConversionName(Second);
466
467 if (CopyConstructor) {
468 OS << " (by copy constructor)";
469 } else if (DirectBinding) {
470 OS << " (direct reference binding)";
471 } else if (ReferenceBinding) {
472 OS << " (reference binding)";
473 }
474 PrintedSomething = true;
475 }
476
477 if (Third != ICK_Identity) {
478 if (PrintedSomething) {
479 OS << " -> ";
480 }
481 OS << GetImplicitConversionName(Third);
482 PrintedSomething = true;
483 }
484
485 if (!PrintedSomething) {
486 OS << "No conversions required";
487 }
488 }
489
490 /// DebugPrint - Print this user-defined conversion sequence to standard
491 /// error. Useful for debugging overloading issues.
DebugPrint() const492 void UserDefinedConversionSequence::DebugPrint() const {
493 raw_ostream &OS = llvm::errs();
494 if (Before.First || Before.Second || Before.Third) {
495 Before.DebugPrint();
496 OS << " -> ";
497 }
498 if (ConversionFunction)
499 OS << '\'' << *ConversionFunction << '\'';
500 else
501 OS << "aggregate initialization";
502 if (After.First || After.Second || After.Third) {
503 OS << " -> ";
504 After.DebugPrint();
505 }
506 }
507
508 /// DebugPrint - Print this implicit conversion sequence to standard
509 /// error. Useful for debugging overloading issues.
DebugPrint() const510 void ImplicitConversionSequence::DebugPrint() const {
511 raw_ostream &OS = llvm::errs();
512 switch (ConversionKind) {
513 case StandardConversion:
514 OS << "Standard conversion: ";
515 Standard.DebugPrint();
516 break;
517 case UserDefinedConversion:
518 OS << "User-defined conversion: ";
519 UserDefined.DebugPrint();
520 break;
521 case EllipsisConversion:
522 OS << "Ellipsis conversion";
523 break;
524 case AmbiguousConversion:
525 OS << "Ambiguous conversion";
526 break;
527 case BadConversion:
528 OS << "Bad conversion";
529 break;
530 }
531
532 OS << "\n";
533 }
534
construct()535 void AmbiguousConversionSequence::construct() {
536 new (&conversions()) ConversionSet();
537 }
538
destruct()539 void AmbiguousConversionSequence::destruct() {
540 conversions().~ConversionSet();
541 }
542
543 void
copyFrom(const AmbiguousConversionSequence & O)544 AmbiguousConversionSequence::copyFrom(const AmbiguousConversionSequence &O) {
545 FromTypePtr = O.FromTypePtr;
546 ToTypePtr = O.ToTypePtr;
547 new (&conversions()) ConversionSet(O.conversions());
548 }
549
550 namespace {
551 // Structure used by DeductionFailureInfo to store
552 // template argument information.
553 struct DFIArguments {
554 TemplateArgument FirstArg;
555 TemplateArgument SecondArg;
556 };
557 // Structure used by DeductionFailureInfo to store
558 // template parameter and template argument information.
559 struct DFIParamWithArguments : DFIArguments {
560 TemplateParameter Param;
561 };
562 }
563
564 /// \brief Convert from Sema's representation of template deduction information
565 /// to the form used in overload-candidate information.
MakeDeductionFailureInfo(ASTContext & Context,Sema::TemplateDeductionResult TDK,TemplateDeductionInfo & Info)566 DeductionFailureInfo MakeDeductionFailureInfo(ASTContext &Context,
567 Sema::TemplateDeductionResult TDK,
568 TemplateDeductionInfo &Info) {
569 DeductionFailureInfo Result;
570 Result.Result = static_cast<unsigned>(TDK);
571 Result.HasDiagnostic = false;
572 Result.Data = 0;
573 switch (TDK) {
574 case Sema::TDK_Success:
575 case Sema::TDK_Invalid:
576 case Sema::TDK_InstantiationDepth:
577 case Sema::TDK_TooManyArguments:
578 case Sema::TDK_TooFewArguments:
579 break;
580
581 case Sema::TDK_Incomplete:
582 case Sema::TDK_InvalidExplicitArguments:
583 Result.Data = Info.Param.getOpaqueValue();
584 break;
585
586 case Sema::TDK_NonDeducedMismatch: {
587 // FIXME: Should allocate from normal heap so that we can free this later.
588 DFIArguments *Saved = new (Context) DFIArguments;
589 Saved->FirstArg = Info.FirstArg;
590 Saved->SecondArg = Info.SecondArg;
591 Result.Data = Saved;
592 break;
593 }
594
595 case Sema::TDK_Inconsistent:
596 case Sema::TDK_Underqualified: {
597 // FIXME: Should allocate from normal heap so that we can free this later.
598 DFIParamWithArguments *Saved = new (Context) DFIParamWithArguments;
599 Saved->Param = Info.Param;
600 Saved->FirstArg = Info.FirstArg;
601 Saved->SecondArg = Info.SecondArg;
602 Result.Data = Saved;
603 break;
604 }
605
606 case Sema::TDK_SubstitutionFailure:
607 Result.Data = Info.take();
608 if (Info.hasSFINAEDiagnostic()) {
609 PartialDiagnosticAt *Diag = new (Result.Diagnostic) PartialDiagnosticAt(
610 SourceLocation(), PartialDiagnostic::NullDiagnostic());
611 Info.takeSFINAEDiagnostic(*Diag);
612 Result.HasDiagnostic = true;
613 }
614 break;
615
616 case Sema::TDK_FailedOverloadResolution:
617 Result.Data = Info.Expression;
618 break;
619
620 case Sema::TDK_MiscellaneousDeductionFailure:
621 break;
622 }
623
624 return Result;
625 }
626
Destroy()627 void DeductionFailureInfo::Destroy() {
628 switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
629 case Sema::TDK_Success:
630 case Sema::TDK_Invalid:
631 case Sema::TDK_InstantiationDepth:
632 case Sema::TDK_Incomplete:
633 case Sema::TDK_TooManyArguments:
634 case Sema::TDK_TooFewArguments:
635 case Sema::TDK_InvalidExplicitArguments:
636 case Sema::TDK_FailedOverloadResolution:
637 break;
638
639 case Sema::TDK_Inconsistent:
640 case Sema::TDK_Underqualified:
641 case Sema::TDK_NonDeducedMismatch:
642 // FIXME: Destroy the data?
643 Data = 0;
644 break;
645
646 case Sema::TDK_SubstitutionFailure:
647 // FIXME: Destroy the template argument list?
648 Data = 0;
649 if (PartialDiagnosticAt *Diag = getSFINAEDiagnostic()) {
650 Diag->~PartialDiagnosticAt();
651 HasDiagnostic = false;
652 }
653 break;
654
655 // Unhandled
656 case Sema::TDK_MiscellaneousDeductionFailure:
657 break;
658 }
659 }
660
getSFINAEDiagnostic()661 PartialDiagnosticAt *DeductionFailureInfo::getSFINAEDiagnostic() {
662 if (HasDiagnostic)
663 return static_cast<PartialDiagnosticAt*>(static_cast<void*>(Diagnostic));
664 return 0;
665 }
666
getTemplateParameter()667 TemplateParameter DeductionFailureInfo::getTemplateParameter() {
668 switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
669 case Sema::TDK_Success:
670 case Sema::TDK_Invalid:
671 case Sema::TDK_InstantiationDepth:
672 case Sema::TDK_TooManyArguments:
673 case Sema::TDK_TooFewArguments:
674 case Sema::TDK_SubstitutionFailure:
675 case Sema::TDK_NonDeducedMismatch:
676 case Sema::TDK_FailedOverloadResolution:
677 return TemplateParameter();
678
679 case Sema::TDK_Incomplete:
680 case Sema::TDK_InvalidExplicitArguments:
681 return TemplateParameter::getFromOpaqueValue(Data);
682
683 case Sema::TDK_Inconsistent:
684 case Sema::TDK_Underqualified:
685 return static_cast<DFIParamWithArguments*>(Data)->Param;
686
687 // Unhandled
688 case Sema::TDK_MiscellaneousDeductionFailure:
689 break;
690 }
691
692 return TemplateParameter();
693 }
694
getTemplateArgumentList()695 TemplateArgumentList *DeductionFailureInfo::getTemplateArgumentList() {
696 switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
697 case Sema::TDK_Success:
698 case Sema::TDK_Invalid:
699 case Sema::TDK_InstantiationDepth:
700 case Sema::TDK_TooManyArguments:
701 case Sema::TDK_TooFewArguments:
702 case Sema::TDK_Incomplete:
703 case Sema::TDK_InvalidExplicitArguments:
704 case Sema::TDK_Inconsistent:
705 case Sema::TDK_Underqualified:
706 case Sema::TDK_NonDeducedMismatch:
707 case Sema::TDK_FailedOverloadResolution:
708 return 0;
709
710 case Sema::TDK_SubstitutionFailure:
711 return static_cast<TemplateArgumentList*>(Data);
712
713 // Unhandled
714 case Sema::TDK_MiscellaneousDeductionFailure:
715 break;
716 }
717
718 return 0;
719 }
720
getFirstArg()721 const TemplateArgument *DeductionFailureInfo::getFirstArg() {
722 switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
723 case Sema::TDK_Success:
724 case Sema::TDK_Invalid:
725 case Sema::TDK_InstantiationDepth:
726 case Sema::TDK_Incomplete:
727 case Sema::TDK_TooManyArguments:
728 case Sema::TDK_TooFewArguments:
729 case Sema::TDK_InvalidExplicitArguments:
730 case Sema::TDK_SubstitutionFailure:
731 case Sema::TDK_FailedOverloadResolution:
732 return 0;
733
734 case Sema::TDK_Inconsistent:
735 case Sema::TDK_Underqualified:
736 case Sema::TDK_NonDeducedMismatch:
737 return &static_cast<DFIArguments*>(Data)->FirstArg;
738
739 // Unhandled
740 case Sema::TDK_MiscellaneousDeductionFailure:
741 break;
742 }
743
744 return 0;
745 }
746
getSecondArg()747 const TemplateArgument *DeductionFailureInfo::getSecondArg() {
748 switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
749 case Sema::TDK_Success:
750 case Sema::TDK_Invalid:
751 case Sema::TDK_InstantiationDepth:
752 case Sema::TDK_Incomplete:
753 case Sema::TDK_TooManyArguments:
754 case Sema::TDK_TooFewArguments:
755 case Sema::TDK_InvalidExplicitArguments:
756 case Sema::TDK_SubstitutionFailure:
757 case Sema::TDK_FailedOverloadResolution:
758 return 0;
759
760 case Sema::TDK_Inconsistent:
761 case Sema::TDK_Underqualified:
762 case Sema::TDK_NonDeducedMismatch:
763 return &static_cast<DFIArguments*>(Data)->SecondArg;
764
765 // Unhandled
766 case Sema::TDK_MiscellaneousDeductionFailure:
767 break;
768 }
769
770 return 0;
771 }
772
getExpr()773 Expr *DeductionFailureInfo::getExpr() {
774 if (static_cast<Sema::TemplateDeductionResult>(Result) ==
775 Sema::TDK_FailedOverloadResolution)
776 return static_cast<Expr*>(Data);
777
778 return 0;
779 }
780
destroyCandidates()781 void OverloadCandidateSet::destroyCandidates() {
782 for (iterator i = begin(), e = end(); i != e; ++i) {
783 for (unsigned ii = 0, ie = i->NumConversions; ii != ie; ++ii)
784 i->Conversions[ii].~ImplicitConversionSequence();
785 if (!i->Viable && i->FailureKind == ovl_fail_bad_deduction)
786 i->DeductionFailure.Destroy();
787 }
788 }
789
clear()790 void OverloadCandidateSet::clear() {
791 destroyCandidates();
792 NumInlineSequences = 0;
793 Candidates.clear();
794 Functions.clear();
795 }
796
797 namespace {
798 class UnbridgedCastsSet {
799 struct Entry {
800 Expr **Addr;
801 Expr *Saved;
802 };
803 SmallVector<Entry, 2> Entries;
804
805 public:
save(Sema & S,Expr * & E)806 void save(Sema &S, Expr *&E) {
807 assert(E->hasPlaceholderType(BuiltinType::ARCUnbridgedCast));
808 Entry entry = { &E, E };
809 Entries.push_back(entry);
810 E = S.stripARCUnbridgedCast(E);
811 }
812
restore()813 void restore() {
814 for (SmallVectorImpl<Entry>::iterator
815 i = Entries.begin(), e = Entries.end(); i != e; ++i)
816 *i->Addr = i->Saved;
817 }
818 };
819 }
820
821 /// checkPlaceholderForOverload - Do any interesting placeholder-like
822 /// preprocessing on the given expression.
823 ///
824 /// \param unbridgedCasts a collection to which to add unbridged casts;
825 /// without this, they will be immediately diagnosed as errors
826 ///
827 /// Return true on unrecoverable error.
checkPlaceholderForOverload(Sema & S,Expr * & E,UnbridgedCastsSet * unbridgedCasts=0)828 static bool checkPlaceholderForOverload(Sema &S, Expr *&E,
829 UnbridgedCastsSet *unbridgedCasts = 0) {
830 if (const BuiltinType *placeholder = E->getType()->getAsPlaceholderType()) {
831 // We can't handle overloaded expressions here because overload
832 // resolution might reasonably tweak them.
833 if (placeholder->getKind() == BuiltinType::Overload) return false;
834
835 // If the context potentially accepts unbridged ARC casts, strip
836 // the unbridged cast and add it to the collection for later restoration.
837 if (placeholder->getKind() == BuiltinType::ARCUnbridgedCast &&
838 unbridgedCasts) {
839 unbridgedCasts->save(S, E);
840 return false;
841 }
842
843 // Go ahead and check everything else.
844 ExprResult result = S.CheckPlaceholderExpr(E);
845 if (result.isInvalid())
846 return true;
847
848 E = result.take();
849 return false;
850 }
851
852 // Nothing to do.
853 return false;
854 }
855
856 /// checkArgPlaceholdersForOverload - Check a set of call operands for
857 /// placeholders.
checkArgPlaceholdersForOverload(Sema & S,MultiExprArg Args,UnbridgedCastsSet & unbridged)858 static bool checkArgPlaceholdersForOverload(Sema &S,
859 MultiExprArg Args,
860 UnbridgedCastsSet &unbridged) {
861 for (unsigned i = 0, e = Args.size(); i != e; ++i)
862 if (checkPlaceholderForOverload(S, Args[i], &unbridged))
863 return true;
864
865 return false;
866 }
867
868 // IsOverload - Determine whether the given New declaration is an
869 // overload of the declarations in Old. This routine returns false if
870 // New and Old cannot be overloaded, e.g., if New has the same
871 // signature as some function in Old (C++ 1.3.10) or if the Old
872 // declarations aren't functions (or function templates) at all. When
873 // it does return false, MatchedDecl will point to the decl that New
874 // cannot be overloaded with. This decl may be a UsingShadowDecl on
875 // top of the underlying declaration.
876 //
877 // Example: Given the following input:
878 //
879 // void f(int, float); // #1
880 // void f(int, int); // #2
881 // int f(int, int); // #3
882 //
883 // When we process #1, there is no previous declaration of "f",
884 // so IsOverload will not be used.
885 //
886 // When we process #2, Old contains only the FunctionDecl for #1. By
887 // comparing the parameter types, we see that #1 and #2 are overloaded
888 // (since they have different signatures), so this routine returns
889 // false; MatchedDecl is unchanged.
890 //
891 // When we process #3, Old is an overload set containing #1 and #2. We
892 // compare the signatures of #3 to #1 (they're overloaded, so we do
893 // nothing) and then #3 to #2. Since the signatures of #3 and #2 are
894 // identical (return types of functions are not part of the
895 // signature), IsOverload returns false and MatchedDecl will be set to
896 // point to the FunctionDecl for #2.
897 //
898 // 'NewIsUsingShadowDecl' indicates that 'New' is being introduced
899 // into a class by a using declaration. The rules for whether to hide
900 // shadow declarations ignore some properties which otherwise figure
901 // into a function template's signature.
902 Sema::OverloadKind
CheckOverload(Scope * S,FunctionDecl * New,const LookupResult & Old,NamedDecl * & Match,bool NewIsUsingDecl)903 Sema::CheckOverload(Scope *S, FunctionDecl *New, const LookupResult &Old,
904 NamedDecl *&Match, bool NewIsUsingDecl) {
905 for (LookupResult::iterator I = Old.begin(), E = Old.end();
906 I != E; ++I) {
907 NamedDecl *OldD = *I;
908
909 bool OldIsUsingDecl = false;
910 if (isa<UsingShadowDecl>(OldD)) {
911 OldIsUsingDecl = true;
912
913 // We can always introduce two using declarations into the same
914 // context, even if they have identical signatures.
915 if (NewIsUsingDecl) continue;
916
917 OldD = cast<UsingShadowDecl>(OldD)->getTargetDecl();
918 }
919
920 // If either declaration was introduced by a using declaration,
921 // we'll need to use slightly different rules for matching.
922 // Essentially, these rules are the normal rules, except that
923 // function templates hide function templates with different
924 // return types or template parameter lists.
925 bool UseMemberUsingDeclRules =
926 (OldIsUsingDecl || NewIsUsingDecl) && CurContext->isRecord() &&
927 !New->getFriendObjectKind();
928
929 if (FunctionTemplateDecl *OldT = dyn_cast<FunctionTemplateDecl>(OldD)) {
930 if (!IsOverload(New, OldT->getTemplatedDecl(), UseMemberUsingDeclRules)) {
931 if (UseMemberUsingDeclRules && OldIsUsingDecl) {
932 HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I));
933 continue;
934 }
935
936 Match = *I;
937 return Ovl_Match;
938 }
939 } else if (FunctionDecl *OldF = dyn_cast<FunctionDecl>(OldD)) {
940 if (!IsOverload(New, OldF, UseMemberUsingDeclRules)) {
941 if (UseMemberUsingDeclRules && OldIsUsingDecl) {
942 HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I));
943 continue;
944 }
945
946 if (!shouldLinkPossiblyHiddenDecl(*I, New))
947 continue;
948
949 Match = *I;
950 return Ovl_Match;
951 }
952 } else if (isa<UsingDecl>(OldD)) {
953 // We can overload with these, which can show up when doing
954 // redeclaration checks for UsingDecls.
955 assert(Old.getLookupKind() == LookupUsingDeclName);
956 } else if (isa<TagDecl>(OldD)) {
957 // We can always overload with tags by hiding them.
958 } else if (isa<UnresolvedUsingValueDecl>(OldD)) {
959 // Optimistically assume that an unresolved using decl will
960 // overload; if it doesn't, we'll have to diagnose during
961 // template instantiation.
962 } else {
963 // (C++ 13p1):
964 // Only function declarations can be overloaded; object and type
965 // declarations cannot be overloaded.
966 Match = *I;
967 return Ovl_NonFunction;
968 }
969 }
970
971 return Ovl_Overload;
972 }
973
IsOverload(FunctionDecl * New,FunctionDecl * Old,bool UseUsingDeclRules)974 bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old,
975 bool UseUsingDeclRules) {
976 // C++ [basic.start.main]p2: This function shall not be overloaded.
977 if (New->isMain())
978 return false;
979
980 FunctionTemplateDecl *OldTemplate = Old->getDescribedFunctionTemplate();
981 FunctionTemplateDecl *NewTemplate = New->getDescribedFunctionTemplate();
982
983 // C++ [temp.fct]p2:
984 // A function template can be overloaded with other function templates
985 // and with normal (non-template) functions.
986 if ((OldTemplate == 0) != (NewTemplate == 0))
987 return true;
988
989 // Is the function New an overload of the function Old?
990 QualType OldQType = Context.getCanonicalType(Old->getType());
991 QualType NewQType = Context.getCanonicalType(New->getType());
992
993 // Compare the signatures (C++ 1.3.10) of the two functions to
994 // determine whether they are overloads. If we find any mismatch
995 // in the signature, they are overloads.
996
997 // If either of these functions is a K&R-style function (no
998 // prototype), then we consider them to have matching signatures.
999 if (isa<FunctionNoProtoType>(OldQType.getTypePtr()) ||
1000 isa<FunctionNoProtoType>(NewQType.getTypePtr()))
1001 return false;
1002
1003 const FunctionProtoType* OldType = cast<FunctionProtoType>(OldQType);
1004 const FunctionProtoType* NewType = cast<FunctionProtoType>(NewQType);
1005
1006 // The signature of a function includes the types of its
1007 // parameters (C++ 1.3.10), which includes the presence or absence
1008 // of the ellipsis; see C++ DR 357).
1009 if (OldQType != NewQType &&
1010 (OldType->getNumArgs() != NewType->getNumArgs() ||
1011 OldType->isVariadic() != NewType->isVariadic() ||
1012 !FunctionArgTypesAreEqual(OldType, NewType)))
1013 return true;
1014
1015 // C++ [temp.over.link]p4:
1016 // The signature of a function template consists of its function
1017 // signature, its return type and its template parameter list. The names
1018 // of the template parameters are significant only for establishing the
1019 // relationship between the template parameters and the rest of the
1020 // signature.
1021 //
1022 // We check the return type and template parameter lists for function
1023 // templates first; the remaining checks follow.
1024 //
1025 // However, we don't consider either of these when deciding whether
1026 // a member introduced by a shadow declaration is hidden.
1027 if (!UseUsingDeclRules && NewTemplate &&
1028 (!TemplateParameterListsAreEqual(NewTemplate->getTemplateParameters(),
1029 OldTemplate->getTemplateParameters(),
1030 false, TPL_TemplateMatch) ||
1031 OldType->getResultType() != NewType->getResultType()))
1032 return true;
1033
1034 // If the function is a class member, its signature includes the
1035 // cv-qualifiers (if any) and ref-qualifier (if any) on the function itself.
1036 //
1037 // As part of this, also check whether one of the member functions
1038 // is static, in which case they are not overloads (C++
1039 // 13.1p2). While not part of the definition of the signature,
1040 // this check is important to determine whether these functions
1041 // can be overloaded.
1042 CXXMethodDecl *OldMethod = dyn_cast<CXXMethodDecl>(Old);
1043 CXXMethodDecl *NewMethod = dyn_cast<CXXMethodDecl>(New);
1044 if (OldMethod && NewMethod &&
1045 !OldMethod->isStatic() && !NewMethod->isStatic()) {
1046 if (OldMethod->getRefQualifier() != NewMethod->getRefQualifier()) {
1047 if (!UseUsingDeclRules &&
1048 (OldMethod->getRefQualifier() == RQ_None ||
1049 NewMethod->getRefQualifier() == RQ_None)) {
1050 // C++0x [over.load]p2:
1051 // - Member function declarations with the same name and the same
1052 // parameter-type-list as well as member function template
1053 // declarations with the same name, the same parameter-type-list, and
1054 // the same template parameter lists cannot be overloaded if any of
1055 // them, but not all, have a ref-qualifier (8.3.5).
1056 Diag(NewMethod->getLocation(), diag::err_ref_qualifier_overload)
1057 << NewMethod->getRefQualifier() << OldMethod->getRefQualifier();
1058 Diag(OldMethod->getLocation(), diag::note_previous_declaration);
1059 }
1060 return true;
1061 }
1062
1063 // We may not have applied the implicit const for a constexpr member
1064 // function yet (because we haven't yet resolved whether this is a static
1065 // or non-static member function). Add it now, on the assumption that this
1066 // is a redeclaration of OldMethod.
1067 unsigned NewQuals = NewMethod->getTypeQualifiers();
1068 if (!getLangOpts().CPlusPlus1y && NewMethod->isConstexpr() &&
1069 !isa<CXXConstructorDecl>(NewMethod))
1070 NewQuals |= Qualifiers::Const;
1071 if (OldMethod->getTypeQualifiers() != NewQuals)
1072 return true;
1073 }
1074
1075 // The signatures match; this is not an overload.
1076 return false;
1077 }
1078
1079 /// \brief Checks availability of the function depending on the current
1080 /// function context. Inside an unavailable function, unavailability is ignored.
1081 ///
1082 /// \returns true if \arg FD is unavailable and current context is inside
1083 /// an available function, false otherwise.
isFunctionConsideredUnavailable(FunctionDecl * FD)1084 bool Sema::isFunctionConsideredUnavailable(FunctionDecl *FD) {
1085 return FD->isUnavailable() && !cast<Decl>(CurContext)->isUnavailable();
1086 }
1087
1088 /// \brief Tries a user-defined conversion from From to ToType.
1089 ///
1090 /// Produces an implicit conversion sequence for when a standard conversion
1091 /// is not an option. See TryImplicitConversion for more information.
1092 static ImplicitConversionSequence
TryUserDefinedConversion(Sema & S,Expr * From,QualType ToType,bool SuppressUserConversions,bool AllowExplicit,bool InOverloadResolution,bool CStyle,bool AllowObjCWritebackConversion)1093 TryUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
1094 bool SuppressUserConversions,
1095 bool AllowExplicit,
1096 bool InOverloadResolution,
1097 bool CStyle,
1098 bool AllowObjCWritebackConversion) {
1099 ImplicitConversionSequence ICS;
1100
1101 if (SuppressUserConversions) {
1102 // We're not in the case above, so there is no conversion that
1103 // we can perform.
1104 ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1105 return ICS;
1106 }
1107
1108 // Attempt user-defined conversion.
1109 OverloadCandidateSet Conversions(From->getExprLoc());
1110 OverloadingResult UserDefResult
1111 = IsUserDefinedConversion(S, From, ToType, ICS.UserDefined, Conversions,
1112 AllowExplicit);
1113
1114 if (UserDefResult == OR_Success) {
1115 ICS.setUserDefined();
1116 // C++ [over.ics.user]p4:
1117 // A conversion of an expression of class type to the same class
1118 // type is given Exact Match rank, and a conversion of an
1119 // expression of class type to a base class of that type is
1120 // given Conversion rank, in spite of the fact that a copy
1121 // constructor (i.e., a user-defined conversion function) is
1122 // called for those cases.
1123 if (CXXConstructorDecl *Constructor
1124 = dyn_cast<CXXConstructorDecl>(ICS.UserDefined.ConversionFunction)) {
1125 QualType FromCanon
1126 = S.Context.getCanonicalType(From->getType().getUnqualifiedType());
1127 QualType ToCanon
1128 = S.Context.getCanonicalType(ToType).getUnqualifiedType();
1129 if (Constructor->isCopyConstructor() &&
1130 (FromCanon == ToCanon || S.IsDerivedFrom(FromCanon, ToCanon))) {
1131 // Turn this into a "standard" conversion sequence, so that it
1132 // gets ranked with standard conversion sequences.
1133 ICS.setStandard();
1134 ICS.Standard.setAsIdentityConversion();
1135 ICS.Standard.setFromType(From->getType());
1136 ICS.Standard.setAllToTypes(ToType);
1137 ICS.Standard.CopyConstructor = Constructor;
1138 if (ToCanon != FromCanon)
1139 ICS.Standard.Second = ICK_Derived_To_Base;
1140 }
1141 }
1142
1143 // C++ [over.best.ics]p4:
1144 // However, when considering the argument of a user-defined
1145 // conversion function that is a candidate by 13.3.1.3 when
1146 // invoked for the copying of the temporary in the second step
1147 // of a class copy-initialization, or by 13.3.1.4, 13.3.1.5, or
1148 // 13.3.1.6 in all cases, only standard conversion sequences and
1149 // ellipsis conversion sequences are allowed.
1150 if (SuppressUserConversions && ICS.isUserDefined()) {
1151 ICS.setBad(BadConversionSequence::suppressed_user, From, ToType);
1152 }
1153 } else if (UserDefResult == OR_Ambiguous && !SuppressUserConversions) {
1154 ICS.setAmbiguous();
1155 ICS.Ambiguous.setFromType(From->getType());
1156 ICS.Ambiguous.setToType(ToType);
1157 for (OverloadCandidateSet::iterator Cand = Conversions.begin();
1158 Cand != Conversions.end(); ++Cand)
1159 if (Cand->Viable)
1160 ICS.Ambiguous.addConversion(Cand->Function);
1161 } else {
1162 ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1163 }
1164
1165 return ICS;
1166 }
1167
1168 /// TryImplicitConversion - Attempt to perform an implicit conversion
1169 /// from the given expression (Expr) to the given type (ToType). This
1170 /// function returns an implicit conversion sequence that can be used
1171 /// to perform the initialization. Given
1172 ///
1173 /// void f(float f);
1174 /// void g(int i) { f(i); }
1175 ///
1176 /// this routine would produce an implicit conversion sequence to
1177 /// describe the initialization of f from i, which will be a standard
1178 /// conversion sequence containing an lvalue-to-rvalue conversion (C++
1179 /// 4.1) followed by a floating-integral conversion (C++ 4.9).
1180 //
1181 /// Note that this routine only determines how the conversion can be
1182 /// performed; it does not actually perform the conversion. As such,
1183 /// it will not produce any diagnostics if no conversion is available,
1184 /// but will instead return an implicit conversion sequence of kind
1185 /// "BadConversion".
1186 ///
1187 /// If @p SuppressUserConversions, then user-defined conversions are
1188 /// not permitted.
1189 /// If @p AllowExplicit, then explicit user-defined conversions are
1190 /// permitted.
1191 ///
1192 /// \param AllowObjCWritebackConversion Whether we allow the Objective-C
1193 /// writeback conversion, which allows __autoreleasing id* parameters to
1194 /// be initialized with __strong id* or __weak id* arguments.
1195 static ImplicitConversionSequence
TryImplicitConversion(Sema & S,Expr * From,QualType ToType,bool SuppressUserConversions,bool AllowExplicit,bool InOverloadResolution,bool CStyle,bool AllowObjCWritebackConversion)1196 TryImplicitConversion(Sema &S, Expr *From, QualType ToType,
1197 bool SuppressUserConversions,
1198 bool AllowExplicit,
1199 bool InOverloadResolution,
1200 bool CStyle,
1201 bool AllowObjCWritebackConversion) {
1202 ImplicitConversionSequence ICS;
1203 if (IsStandardConversion(S, From, ToType, InOverloadResolution,
1204 ICS.Standard, CStyle, AllowObjCWritebackConversion)){
1205 ICS.setStandard();
1206 return ICS;
1207 }
1208
1209 if (!S.getLangOpts().CPlusPlus) {
1210 ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1211 return ICS;
1212 }
1213
1214 // C++ [over.ics.user]p4:
1215 // A conversion of an expression of class type to the same class
1216 // type is given Exact Match rank, and a conversion of an
1217 // expression of class type to a base class of that type is
1218 // given Conversion rank, in spite of the fact that a copy/move
1219 // constructor (i.e., a user-defined conversion function) is
1220 // called for those cases.
1221 QualType FromType = From->getType();
1222 if (ToType->getAs<RecordType>() && FromType->getAs<RecordType>() &&
1223 (S.Context.hasSameUnqualifiedType(FromType, ToType) ||
1224 S.IsDerivedFrom(FromType, ToType))) {
1225 ICS.setStandard();
1226 ICS.Standard.setAsIdentityConversion();
1227 ICS.Standard.setFromType(FromType);
1228 ICS.Standard.setAllToTypes(ToType);
1229
1230 // We don't actually check at this point whether there is a valid
1231 // copy/move constructor, since overloading just assumes that it
1232 // exists. When we actually perform initialization, we'll find the
1233 // appropriate constructor to copy the returned object, if needed.
1234 ICS.Standard.CopyConstructor = 0;
1235
1236 // Determine whether this is considered a derived-to-base conversion.
1237 if (!S.Context.hasSameUnqualifiedType(FromType, ToType))
1238 ICS.Standard.Second = ICK_Derived_To_Base;
1239
1240 return ICS;
1241 }
1242
1243 return TryUserDefinedConversion(S, From, ToType, SuppressUserConversions,
1244 AllowExplicit, InOverloadResolution, CStyle,
1245 AllowObjCWritebackConversion);
1246 }
1247
1248 ImplicitConversionSequence
TryImplicitConversion(Expr * From,QualType ToType,bool SuppressUserConversions,bool AllowExplicit,bool InOverloadResolution,bool CStyle,bool AllowObjCWritebackConversion)1249 Sema::TryImplicitConversion(Expr *From, QualType ToType,
1250 bool SuppressUserConversions,
1251 bool AllowExplicit,
1252 bool InOverloadResolution,
1253 bool CStyle,
1254 bool AllowObjCWritebackConversion) {
1255 return clang::TryImplicitConversion(*this, From, ToType,
1256 SuppressUserConversions, AllowExplicit,
1257 InOverloadResolution, CStyle,
1258 AllowObjCWritebackConversion);
1259 }
1260
1261 /// PerformImplicitConversion - Perform an implicit conversion of the
1262 /// expression From to the type ToType. Returns the
1263 /// converted expression. Flavor is the kind of conversion we're
1264 /// performing, used in the error message. If @p AllowExplicit,
1265 /// explicit user-defined conversions are permitted.
1266 ExprResult
PerformImplicitConversion(Expr * From,QualType ToType,AssignmentAction Action,bool AllowExplicit)1267 Sema::PerformImplicitConversion(Expr *From, QualType ToType,
1268 AssignmentAction Action, bool AllowExplicit) {
1269 ImplicitConversionSequence ICS;
1270 return PerformImplicitConversion(From, ToType, Action, AllowExplicit, ICS);
1271 }
1272
1273 ExprResult
PerformImplicitConversion(Expr * From,QualType ToType,AssignmentAction Action,bool AllowExplicit,ImplicitConversionSequence & ICS)1274 Sema::PerformImplicitConversion(Expr *From, QualType ToType,
1275 AssignmentAction Action, bool AllowExplicit,
1276 ImplicitConversionSequence& ICS) {
1277 if (checkPlaceholderForOverload(*this, From))
1278 return ExprError();
1279
1280 // Objective-C ARC: Determine whether we will allow the writeback conversion.
1281 bool AllowObjCWritebackConversion
1282 = getLangOpts().ObjCAutoRefCount &&
1283 (Action == AA_Passing || Action == AA_Sending);
1284
1285 ICS = clang::TryImplicitConversion(*this, From, ToType,
1286 /*SuppressUserConversions=*/false,
1287 AllowExplicit,
1288 /*InOverloadResolution=*/false,
1289 /*CStyle=*/false,
1290 AllowObjCWritebackConversion);
1291 return PerformImplicitConversion(From, ToType, ICS, Action);
1292 }
1293
1294 /// \brief Determine whether the conversion from FromType to ToType is a valid
1295 /// conversion that strips "noreturn" off the nested function type.
IsNoReturnConversion(QualType FromType,QualType ToType,QualType & ResultTy)1296 bool Sema::IsNoReturnConversion(QualType FromType, QualType ToType,
1297 QualType &ResultTy) {
1298 if (Context.hasSameUnqualifiedType(FromType, ToType))
1299 return false;
1300
1301 // Permit the conversion F(t __attribute__((noreturn))) -> F(t)
1302 // where F adds one of the following at most once:
1303 // - a pointer
1304 // - a member pointer
1305 // - a block pointer
1306 CanQualType CanTo = Context.getCanonicalType(ToType);
1307 CanQualType CanFrom = Context.getCanonicalType(FromType);
1308 Type::TypeClass TyClass = CanTo->getTypeClass();
1309 if (TyClass != CanFrom->getTypeClass()) return false;
1310 if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto) {
1311 if (TyClass == Type::Pointer) {
1312 CanTo = CanTo.getAs<PointerType>()->getPointeeType();
1313 CanFrom = CanFrom.getAs<PointerType>()->getPointeeType();
1314 } else if (TyClass == Type::BlockPointer) {
1315 CanTo = CanTo.getAs<BlockPointerType>()->getPointeeType();
1316 CanFrom = CanFrom.getAs<BlockPointerType>()->getPointeeType();
1317 } else if (TyClass == Type::MemberPointer) {
1318 CanTo = CanTo.getAs<MemberPointerType>()->getPointeeType();
1319 CanFrom = CanFrom.getAs<MemberPointerType>()->getPointeeType();
1320 } else {
1321 return false;
1322 }
1323
1324 TyClass = CanTo->getTypeClass();
1325 if (TyClass != CanFrom->getTypeClass()) return false;
1326 if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto)
1327 return false;
1328 }
1329
1330 const FunctionType *FromFn = cast<FunctionType>(CanFrom);
1331 FunctionType::ExtInfo EInfo = FromFn->getExtInfo();
1332 if (!EInfo.getNoReturn()) return false;
1333
1334 FromFn = Context.adjustFunctionType(FromFn, EInfo.withNoReturn(false));
1335 assert(QualType(FromFn, 0).isCanonical());
1336 if (QualType(FromFn, 0) != CanTo) return false;
1337
1338 ResultTy = ToType;
1339 return true;
1340 }
1341
1342 /// \brief Determine whether the conversion from FromType to ToType is a valid
1343 /// vector conversion.
1344 ///
1345 /// \param ICK Will be set to the vector conversion kind, if this is a vector
1346 /// conversion.
IsVectorConversion(ASTContext & Context,QualType FromType,QualType ToType,ImplicitConversionKind & ICK)1347 static bool IsVectorConversion(ASTContext &Context, QualType FromType,
1348 QualType ToType, ImplicitConversionKind &ICK) {
1349 // We need at least one of these types to be a vector type to have a vector
1350 // conversion.
1351 if (!ToType->isVectorType() && !FromType->isVectorType())
1352 return false;
1353
1354 // Identical types require no conversions.
1355 if (Context.hasSameUnqualifiedType(FromType, ToType))
1356 return false;
1357
1358 // There are no conversions between extended vector types, only identity.
1359 if (ToType->isExtVectorType()) {
1360 // There are no conversions between extended vector types other than the
1361 // identity conversion.
1362 if (FromType->isExtVectorType())
1363 return false;
1364
1365 // Vector splat from any arithmetic type to a vector.
1366 if (FromType->isArithmeticType()) {
1367 ICK = ICK_Vector_Splat;
1368 return true;
1369 }
1370 }
1371
1372 // We can perform the conversion between vector types in the following cases:
1373 // 1)vector types are equivalent AltiVec and GCC vector types
1374 // 2)lax vector conversions are permitted and the vector types are of the
1375 // same size
1376 if (ToType->isVectorType() && FromType->isVectorType()) {
1377 if (Context.areCompatibleVectorTypes(FromType, ToType) ||
1378 (Context.getLangOpts().LaxVectorConversions &&
1379 (Context.getTypeSize(FromType) == Context.getTypeSize(ToType)))) {
1380 ICK = ICK_Vector_Conversion;
1381 return true;
1382 }
1383 }
1384
1385 return false;
1386 }
1387
1388 static bool tryAtomicConversion(Sema &S, Expr *From, QualType ToType,
1389 bool InOverloadResolution,
1390 StandardConversionSequence &SCS,
1391 bool CStyle);
1392
1393 /// IsStandardConversion - Determines whether there is a standard
1394 /// conversion sequence (C++ [conv], C++ [over.ics.scs]) from the
1395 /// expression From to the type ToType. Standard conversion sequences
1396 /// only consider non-class types; for conversions that involve class
1397 /// types, use TryImplicitConversion. If a conversion exists, SCS will
1398 /// contain the standard conversion sequence required to perform this
1399 /// conversion and this routine will return true. Otherwise, this
1400 /// routine will return false and the value of SCS is unspecified.
IsStandardConversion(Sema & S,Expr * From,QualType ToType,bool InOverloadResolution,StandardConversionSequence & SCS,bool CStyle,bool AllowObjCWritebackConversion)1401 static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType,
1402 bool InOverloadResolution,
1403 StandardConversionSequence &SCS,
1404 bool CStyle,
1405 bool AllowObjCWritebackConversion) {
1406 QualType FromType = From->getType();
1407
1408 // Standard conversions (C++ [conv])
1409 SCS.setAsIdentityConversion();
1410 SCS.DeprecatedStringLiteralToCharPtr = false;
1411 SCS.IncompatibleObjC = false;
1412 SCS.setFromType(FromType);
1413 SCS.CopyConstructor = 0;
1414
1415 // There are no standard conversions for class types in C++, so
1416 // abort early. When overloading in C, however, we do permit
1417 if (FromType->isRecordType() || ToType->isRecordType()) {
1418 if (S.getLangOpts().CPlusPlus)
1419 return false;
1420
1421 // When we're overloading in C, we allow, as standard conversions,
1422 }
1423
1424 // The first conversion can be an lvalue-to-rvalue conversion,
1425 // array-to-pointer conversion, or function-to-pointer conversion
1426 // (C++ 4p1).
1427
1428 if (FromType == S.Context.OverloadTy) {
1429 DeclAccessPair AccessPair;
1430 if (FunctionDecl *Fn
1431 = S.ResolveAddressOfOverloadedFunction(From, ToType, false,
1432 AccessPair)) {
1433 // We were able to resolve the address of the overloaded function,
1434 // so we can convert to the type of that function.
1435 FromType = Fn->getType();
1436
1437 // we can sometimes resolve &foo<int> regardless of ToType, so check
1438 // if the type matches (identity) or we are converting to bool
1439 if (!S.Context.hasSameUnqualifiedType(
1440 S.ExtractUnqualifiedFunctionType(ToType), FromType)) {
1441 QualType resultTy;
1442 // if the function type matches except for [[noreturn]], it's ok
1443 if (!S.IsNoReturnConversion(FromType,
1444 S.ExtractUnqualifiedFunctionType(ToType), resultTy))
1445 // otherwise, only a boolean conversion is standard
1446 if (!ToType->isBooleanType())
1447 return false;
1448 }
1449
1450 // Check if the "from" expression is taking the address of an overloaded
1451 // function and recompute the FromType accordingly. Take advantage of the
1452 // fact that non-static member functions *must* have such an address-of
1453 // expression.
1454 CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn);
1455 if (Method && !Method->isStatic()) {
1456 assert(isa<UnaryOperator>(From->IgnoreParens()) &&
1457 "Non-unary operator on non-static member address");
1458 assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode()
1459 == UO_AddrOf &&
1460 "Non-address-of operator on non-static member address");
1461 const Type *ClassType
1462 = S.Context.getTypeDeclType(Method->getParent()).getTypePtr();
1463 FromType = S.Context.getMemberPointerType(FromType, ClassType);
1464 } else if (isa<UnaryOperator>(From->IgnoreParens())) {
1465 assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode() ==
1466 UO_AddrOf &&
1467 "Non-address-of operator for overloaded function expression");
1468 FromType = S.Context.getPointerType(FromType);
1469 }
1470
1471 // Check that we've computed the proper type after overload resolution.
1472 assert(S.Context.hasSameType(
1473 FromType,
1474 S.FixOverloadedFunctionReference(From, AccessPair, Fn)->getType()));
1475 } else {
1476 return false;
1477 }
1478 }
1479 // Lvalue-to-rvalue conversion (C++11 4.1):
1480 // A glvalue (3.10) of a non-function, non-array type T can
1481 // be converted to a prvalue.
1482 bool argIsLValue = From->isGLValue();
1483 if (argIsLValue &&
1484 !FromType->isFunctionType() && !FromType->isArrayType() &&
1485 S.Context.getCanonicalType(FromType) != S.Context.OverloadTy) {
1486 SCS.First = ICK_Lvalue_To_Rvalue;
1487
1488 // C11 6.3.2.1p2:
1489 // ... if the lvalue has atomic type, the value has the non-atomic version
1490 // of the type of the lvalue ...
1491 if (const AtomicType *Atomic = FromType->getAs<AtomicType>())
1492 FromType = Atomic->getValueType();
1493
1494 // If T is a non-class type, the type of the rvalue is the
1495 // cv-unqualified version of T. Otherwise, the type of the rvalue
1496 // is T (C++ 4.1p1). C++ can't get here with class types; in C, we
1497 // just strip the qualifiers because they don't matter.
1498 FromType = FromType.getUnqualifiedType();
1499 } else if (FromType->isArrayType()) {
1500 // Array-to-pointer conversion (C++ 4.2)
1501 SCS.First = ICK_Array_To_Pointer;
1502
1503 // An lvalue or rvalue of type "array of N T" or "array of unknown
1504 // bound of T" can be converted to an rvalue of type "pointer to
1505 // T" (C++ 4.2p1).
1506 FromType = S.Context.getArrayDecayedType(FromType);
1507
1508 if (S.IsStringLiteralToNonConstPointerConversion(From, ToType)) {
1509 // This conversion is deprecated. (C++ D.4).
1510 SCS.DeprecatedStringLiteralToCharPtr = true;
1511
1512 // For the purpose of ranking in overload resolution
1513 // (13.3.3.1.1), this conversion is considered an
1514 // array-to-pointer conversion followed by a qualification
1515 // conversion (4.4). (C++ 4.2p2)
1516 SCS.Second = ICK_Identity;
1517 SCS.Third = ICK_Qualification;
1518 SCS.QualificationIncludesObjCLifetime = false;
1519 SCS.setAllToTypes(FromType);
1520 return true;
1521 }
1522 } else if (FromType->isFunctionType() && argIsLValue) {
1523 // Function-to-pointer conversion (C++ 4.3).
1524 SCS.First = ICK_Function_To_Pointer;
1525
1526 // An lvalue of function type T can be converted to an rvalue of
1527 // type "pointer to T." The result is a pointer to the
1528 // function. (C++ 4.3p1).
1529 FromType = S.Context.getPointerType(FromType);
1530 } else {
1531 // We don't require any conversions for the first step.
1532 SCS.First = ICK_Identity;
1533 }
1534 SCS.setToType(0, FromType);
1535
1536 // The second conversion can be an integral promotion, floating
1537 // point promotion, integral conversion, floating point conversion,
1538 // floating-integral conversion, pointer conversion,
1539 // pointer-to-member conversion, or boolean conversion (C++ 4p1).
1540 // For overloading in C, this can also be a "compatible-type"
1541 // conversion.
1542 bool IncompatibleObjC = false;
1543 ImplicitConversionKind SecondICK = ICK_Identity;
1544 if (S.Context.hasSameUnqualifiedType(FromType, ToType)) {
1545 // The unqualified versions of the types are the same: there's no
1546 // conversion to do.
1547 SCS.Second = ICK_Identity;
1548 } else if (S.IsIntegralPromotion(From, FromType, ToType)) {
1549 // Integral promotion (C++ 4.5).
1550 SCS.Second = ICK_Integral_Promotion;
1551 FromType = ToType.getUnqualifiedType();
1552 } else if (S.IsFloatingPointPromotion(FromType, ToType)) {
1553 // Floating point promotion (C++ 4.6).
1554 SCS.Second = ICK_Floating_Promotion;
1555 FromType = ToType.getUnqualifiedType();
1556 } else if (S.IsComplexPromotion(FromType, ToType)) {
1557 // Complex promotion (Clang extension)
1558 SCS.Second = ICK_Complex_Promotion;
1559 FromType = ToType.getUnqualifiedType();
1560 } else if (ToType->isBooleanType() &&
1561 (FromType->isArithmeticType() ||
1562 FromType->isAnyPointerType() ||
1563 FromType->isBlockPointerType() ||
1564 FromType->isMemberPointerType() ||
1565 FromType->isNullPtrType())) {
1566 // Boolean conversions (C++ 4.12).
1567 SCS.Second = ICK_Boolean_Conversion;
1568 FromType = S.Context.BoolTy;
1569 } else if (FromType->isIntegralOrUnscopedEnumerationType() &&
1570 ToType->isIntegralType(S.Context)) {
1571 // Integral conversions (C++ 4.7).
1572 SCS.Second = ICK_Integral_Conversion;
1573 FromType = ToType.getUnqualifiedType();
1574 } else if (FromType->isAnyComplexType() && ToType->isAnyComplexType()) {
1575 // Complex conversions (C99 6.3.1.6)
1576 SCS.Second = ICK_Complex_Conversion;
1577 FromType = ToType.getUnqualifiedType();
1578 } else if ((FromType->isAnyComplexType() && ToType->isArithmeticType()) ||
1579 (ToType->isAnyComplexType() && FromType->isArithmeticType())) {
1580 // Complex-real conversions (C99 6.3.1.7)
1581 SCS.Second = ICK_Complex_Real;
1582 FromType = ToType.getUnqualifiedType();
1583 } else if (FromType->isRealFloatingType() && ToType->isRealFloatingType()) {
1584 // Floating point conversions (C++ 4.8).
1585 SCS.Second = ICK_Floating_Conversion;
1586 FromType = ToType.getUnqualifiedType();
1587 } else if ((FromType->isRealFloatingType() &&
1588 ToType->isIntegralType(S.Context)) ||
1589 (FromType->isIntegralOrUnscopedEnumerationType() &&
1590 ToType->isRealFloatingType())) {
1591 // Floating-integral conversions (C++ 4.9).
1592 SCS.Second = ICK_Floating_Integral;
1593 FromType = ToType.getUnqualifiedType();
1594 } else if (S.IsBlockPointerConversion(FromType, ToType, FromType)) {
1595 SCS.Second = ICK_Block_Pointer_Conversion;
1596 } else if (AllowObjCWritebackConversion &&
1597 S.isObjCWritebackConversion(FromType, ToType, FromType)) {
1598 SCS.Second = ICK_Writeback_Conversion;
1599 } else if (S.IsPointerConversion(From, FromType, ToType, InOverloadResolution,
1600 FromType, IncompatibleObjC)) {
1601 // Pointer conversions (C++ 4.10).
1602 SCS.Second = ICK_Pointer_Conversion;
1603 SCS.IncompatibleObjC = IncompatibleObjC;
1604 FromType = FromType.getUnqualifiedType();
1605 } else if (S.IsMemberPointerConversion(From, FromType, ToType,
1606 InOverloadResolution, FromType)) {
1607 // Pointer to member conversions (4.11).
1608 SCS.Second = ICK_Pointer_Member;
1609 } else if (IsVectorConversion(S.Context, FromType, ToType, SecondICK)) {
1610 SCS.Second = SecondICK;
1611 FromType = ToType.getUnqualifiedType();
1612 } else if (!S.getLangOpts().CPlusPlus &&
1613 S.Context.typesAreCompatible(ToType, FromType)) {
1614 // Compatible conversions (Clang extension for C function overloading)
1615 SCS.Second = ICK_Compatible_Conversion;
1616 FromType = ToType.getUnqualifiedType();
1617 } else if (S.IsNoReturnConversion(FromType, ToType, FromType)) {
1618 // Treat a conversion that strips "noreturn" as an identity conversion.
1619 SCS.Second = ICK_NoReturn_Adjustment;
1620 } else if (IsTransparentUnionStandardConversion(S, From, ToType,
1621 InOverloadResolution,
1622 SCS, CStyle)) {
1623 SCS.Second = ICK_TransparentUnionConversion;
1624 FromType = ToType;
1625 } else if (tryAtomicConversion(S, From, ToType, InOverloadResolution, SCS,
1626 CStyle)) {
1627 // tryAtomicConversion has updated the standard conversion sequence
1628 // appropriately.
1629 return true;
1630 } else if (ToType->isEventT() &&
1631 From->isIntegerConstantExpr(S.getASTContext()) &&
1632 (From->EvaluateKnownConstInt(S.getASTContext()) == 0)) {
1633 SCS.Second = ICK_Zero_Event_Conversion;
1634 FromType = ToType;
1635 } else {
1636 // No second conversion required.
1637 SCS.Second = ICK_Identity;
1638 }
1639 SCS.setToType(1, FromType);
1640
1641 QualType CanonFrom;
1642 QualType CanonTo;
1643 // The third conversion can be a qualification conversion (C++ 4p1).
1644 bool ObjCLifetimeConversion;
1645 if (S.IsQualificationConversion(FromType, ToType, CStyle,
1646 ObjCLifetimeConversion)) {
1647 SCS.Third = ICK_Qualification;
1648 SCS.QualificationIncludesObjCLifetime = ObjCLifetimeConversion;
1649 FromType = ToType;
1650 CanonFrom = S.Context.getCanonicalType(FromType);
1651 CanonTo = S.Context.getCanonicalType(ToType);
1652 } else {
1653 // No conversion required
1654 SCS.Third = ICK_Identity;
1655
1656 // C++ [over.best.ics]p6:
1657 // [...] Any difference in top-level cv-qualification is
1658 // subsumed by the initialization itself and does not constitute
1659 // a conversion. [...]
1660 CanonFrom = S.Context.getCanonicalType(FromType);
1661 CanonTo = S.Context.getCanonicalType(ToType);
1662 if (CanonFrom.getLocalUnqualifiedType()
1663 == CanonTo.getLocalUnqualifiedType() &&
1664 CanonFrom.getLocalQualifiers() != CanonTo.getLocalQualifiers()) {
1665 FromType = ToType;
1666 CanonFrom = CanonTo;
1667 }
1668 }
1669 SCS.setToType(2, FromType);
1670
1671 // If we have not converted the argument type to the parameter type,
1672 // this is a bad conversion sequence.
1673 if (CanonFrom != CanonTo)
1674 return false;
1675
1676 return true;
1677 }
1678
1679 static bool
IsTransparentUnionStandardConversion(Sema & S,Expr * From,QualType & ToType,bool InOverloadResolution,StandardConversionSequence & SCS,bool CStyle)1680 IsTransparentUnionStandardConversion(Sema &S, Expr* From,
1681 QualType &ToType,
1682 bool InOverloadResolution,
1683 StandardConversionSequence &SCS,
1684 bool CStyle) {
1685
1686 const RecordType *UT = ToType->getAsUnionType();
1687 if (!UT || !UT->getDecl()->hasAttr<TransparentUnionAttr>())
1688 return false;
1689 // The field to initialize within the transparent union.
1690 RecordDecl *UD = UT->getDecl();
1691 // It's compatible if the expression matches any of the fields.
1692 for (RecordDecl::field_iterator it = UD->field_begin(),
1693 itend = UD->field_end();
1694 it != itend; ++it) {
1695 if (IsStandardConversion(S, From, it->getType(), InOverloadResolution, SCS,
1696 CStyle, /*ObjCWritebackConversion=*/false)) {
1697 ToType = it->getType();
1698 return true;
1699 }
1700 }
1701 return false;
1702 }
1703
1704 /// IsIntegralPromotion - Determines whether the conversion from the
1705 /// expression From (whose potentially-adjusted type is FromType) to
1706 /// ToType is an integral promotion (C++ 4.5). If so, returns true and
1707 /// sets PromotedType to the promoted type.
IsIntegralPromotion(Expr * From,QualType FromType,QualType ToType)1708 bool Sema::IsIntegralPromotion(Expr *From, QualType FromType, QualType ToType) {
1709 const BuiltinType *To = ToType->getAs<BuiltinType>();
1710 // All integers are built-in.
1711 if (!To) {
1712 return false;
1713 }
1714
1715 // An rvalue of type char, signed char, unsigned char, short int, or
1716 // unsigned short int can be converted to an rvalue of type int if
1717 // int can represent all the values of the source type; otherwise,
1718 // the source rvalue can be converted to an rvalue of type unsigned
1719 // int (C++ 4.5p1).
1720 if (FromType->isPromotableIntegerType() && !FromType->isBooleanType() &&
1721 !FromType->isEnumeralType()) {
1722 if (// We can promote any signed, promotable integer type to an int
1723 (FromType->isSignedIntegerType() ||
1724 // We can promote any unsigned integer type whose size is
1725 // less than int to an int.
1726 (!FromType->isSignedIntegerType() &&
1727 Context.getTypeSize(FromType) < Context.getTypeSize(ToType)))) {
1728 return To->getKind() == BuiltinType::Int;
1729 }
1730
1731 return To->getKind() == BuiltinType::UInt;
1732 }
1733
1734 // C++11 [conv.prom]p3:
1735 // A prvalue of an unscoped enumeration type whose underlying type is not
1736 // fixed (7.2) can be converted to an rvalue a prvalue of the first of the
1737 // following types that can represent all the values of the enumeration
1738 // (i.e., the values in the range bmin to bmax as described in 7.2): int,
1739 // unsigned int, long int, unsigned long int, long long int, or unsigned
1740 // long long int. If none of the types in that list can represent all the
1741 // values of the enumeration, an rvalue a prvalue of an unscoped enumeration
1742 // type can be converted to an rvalue a prvalue of the extended integer type
1743 // with lowest integer conversion rank (4.13) greater than the rank of long
1744 // long in which all the values of the enumeration can be represented. If
1745 // there are two such extended types, the signed one is chosen.
1746 // C++11 [conv.prom]p4:
1747 // A prvalue of an unscoped enumeration type whose underlying type is fixed
1748 // can be converted to a prvalue of its underlying type. Moreover, if
1749 // integral promotion can be applied to its underlying type, a prvalue of an
1750 // unscoped enumeration type whose underlying type is fixed can also be
1751 // converted to a prvalue of the promoted underlying type.
1752 if (const EnumType *FromEnumType = FromType->getAs<EnumType>()) {
1753 // C++0x 7.2p9: Note that this implicit enum to int conversion is not
1754 // provided for a scoped enumeration.
1755 if (FromEnumType->getDecl()->isScoped())
1756 return false;
1757
1758 // We can perform an integral promotion to the underlying type of the enum,
1759 // even if that's not the promoted type.
1760 if (FromEnumType->getDecl()->isFixed()) {
1761 QualType Underlying = FromEnumType->getDecl()->getIntegerType();
1762 return Context.hasSameUnqualifiedType(Underlying, ToType) ||
1763 IsIntegralPromotion(From, Underlying, ToType);
1764 }
1765
1766 // We have already pre-calculated the promotion type, so this is trivial.
1767 if (ToType->isIntegerType() &&
1768 !RequireCompleteType(From->getLocStart(), FromType, 0))
1769 return Context.hasSameUnqualifiedType(ToType,
1770 FromEnumType->getDecl()->getPromotionType());
1771 }
1772
1773 // C++0x [conv.prom]p2:
1774 // A prvalue of type char16_t, char32_t, or wchar_t (3.9.1) can be converted
1775 // to an rvalue a prvalue of the first of the following types that can
1776 // represent all the values of its underlying type: int, unsigned int,
1777 // long int, unsigned long int, long long int, or unsigned long long int.
1778 // If none of the types in that list can represent all the values of its
1779 // underlying type, an rvalue a prvalue of type char16_t, char32_t,
1780 // or wchar_t can be converted to an rvalue a prvalue of its underlying
1781 // type.
1782 if (FromType->isAnyCharacterType() && !FromType->isCharType() &&
1783 ToType->isIntegerType()) {
1784 // Determine whether the type we're converting from is signed or
1785 // unsigned.
1786 bool FromIsSigned = FromType->isSignedIntegerType();
1787 uint64_t FromSize = Context.getTypeSize(FromType);
1788
1789 // The types we'll try to promote to, in the appropriate
1790 // order. Try each of these types.
1791 QualType PromoteTypes[6] = {
1792 Context.IntTy, Context.UnsignedIntTy,
1793 Context.LongTy, Context.UnsignedLongTy ,
1794 Context.LongLongTy, Context.UnsignedLongLongTy
1795 };
1796 for (int Idx = 0; Idx < 6; ++Idx) {
1797 uint64_t ToSize = Context.getTypeSize(PromoteTypes[Idx]);
1798 if (FromSize < ToSize ||
1799 (FromSize == ToSize &&
1800 FromIsSigned == PromoteTypes[Idx]->isSignedIntegerType())) {
1801 // We found the type that we can promote to. If this is the
1802 // type we wanted, we have a promotion. Otherwise, no
1803 // promotion.
1804 return Context.hasSameUnqualifiedType(ToType, PromoteTypes[Idx]);
1805 }
1806 }
1807 }
1808
1809 // An rvalue for an integral bit-field (9.6) can be converted to an
1810 // rvalue of type int if int can represent all the values of the
1811 // bit-field; otherwise, it can be converted to unsigned int if
1812 // unsigned int can represent all the values of the bit-field. If
1813 // the bit-field is larger yet, no integral promotion applies to
1814 // it. If the bit-field has an enumerated type, it is treated as any
1815 // other value of that type for promotion purposes (C++ 4.5p3).
1816 // FIXME: We should delay checking of bit-fields until we actually perform the
1817 // conversion.
1818 using llvm::APSInt;
1819 if (From)
1820 if (FieldDecl *MemberDecl = From->getSourceBitField()) {
1821 APSInt BitWidth;
1822 if (FromType->isIntegralType(Context) &&
1823 MemberDecl->getBitWidth()->isIntegerConstantExpr(BitWidth, Context)) {
1824 APSInt ToSize(BitWidth.getBitWidth(), BitWidth.isUnsigned());
1825 ToSize = Context.getTypeSize(ToType);
1826
1827 // Are we promoting to an int from a bitfield that fits in an int?
1828 if (BitWidth < ToSize ||
1829 (FromType->isSignedIntegerType() && BitWidth <= ToSize)) {
1830 return To->getKind() == BuiltinType::Int;
1831 }
1832
1833 // Are we promoting to an unsigned int from an unsigned bitfield
1834 // that fits into an unsigned int?
1835 if (FromType->isUnsignedIntegerType() && BitWidth <= ToSize) {
1836 return To->getKind() == BuiltinType::UInt;
1837 }
1838
1839 return false;
1840 }
1841 }
1842
1843 // An rvalue of type bool can be converted to an rvalue of type int,
1844 // with false becoming zero and true becoming one (C++ 4.5p4).
1845 if (FromType->isBooleanType() && To->getKind() == BuiltinType::Int) {
1846 return true;
1847 }
1848
1849 return false;
1850 }
1851
1852 /// IsFloatingPointPromotion - Determines whether the conversion from
1853 /// FromType to ToType is a floating point promotion (C++ 4.6). If so,
1854 /// returns true and sets PromotedType to the promoted type.
IsFloatingPointPromotion(QualType FromType,QualType ToType)1855 bool Sema::IsFloatingPointPromotion(QualType FromType, QualType ToType) {
1856 if (const BuiltinType *FromBuiltin = FromType->getAs<BuiltinType>())
1857 if (const BuiltinType *ToBuiltin = ToType->getAs<BuiltinType>()) {
1858 /// An rvalue of type float can be converted to an rvalue of type
1859 /// double. (C++ 4.6p1).
1860 if (FromBuiltin->getKind() == BuiltinType::Float &&
1861 ToBuiltin->getKind() == BuiltinType::Double)
1862 return true;
1863
1864 // C99 6.3.1.5p1:
1865 // When a float is promoted to double or long double, or a
1866 // double is promoted to long double [...].
1867 if (!getLangOpts().CPlusPlus &&
1868 (FromBuiltin->getKind() == BuiltinType::Float ||
1869 FromBuiltin->getKind() == BuiltinType::Double) &&
1870 (ToBuiltin->getKind() == BuiltinType::LongDouble))
1871 return true;
1872
1873 // Half can be promoted to float.
1874 if (!getLangOpts().NativeHalfType &&
1875 FromBuiltin->getKind() == BuiltinType::Half &&
1876 ToBuiltin->getKind() == BuiltinType::Float)
1877 return true;
1878 }
1879
1880 return false;
1881 }
1882
1883 /// \brief Determine if a conversion is a complex promotion.
1884 ///
1885 /// A complex promotion is defined as a complex -> complex conversion
1886 /// where the conversion between the underlying real types is a
1887 /// floating-point or integral promotion.
IsComplexPromotion(QualType FromType,QualType ToType)1888 bool Sema::IsComplexPromotion(QualType FromType, QualType ToType) {
1889 const ComplexType *FromComplex = FromType->getAs<ComplexType>();
1890 if (!FromComplex)
1891 return false;
1892
1893 const ComplexType *ToComplex = ToType->getAs<ComplexType>();
1894 if (!ToComplex)
1895 return false;
1896
1897 return IsFloatingPointPromotion(FromComplex->getElementType(),
1898 ToComplex->getElementType()) ||
1899 IsIntegralPromotion(0, FromComplex->getElementType(),
1900 ToComplex->getElementType());
1901 }
1902
1903 /// BuildSimilarlyQualifiedPointerType - In a pointer conversion from
1904 /// the pointer type FromPtr to a pointer to type ToPointee, with the
1905 /// same type qualifiers as FromPtr has on its pointee type. ToType,
1906 /// if non-empty, will be a pointer to ToType that may or may not have
1907 /// the right set of qualifiers on its pointee.
1908 ///
1909 static QualType
BuildSimilarlyQualifiedPointerType(const Type * FromPtr,QualType ToPointee,QualType ToType,ASTContext & Context,bool StripObjCLifetime=false)1910 BuildSimilarlyQualifiedPointerType(const Type *FromPtr,
1911 QualType ToPointee, QualType ToType,
1912 ASTContext &Context,
1913 bool StripObjCLifetime = false) {
1914 assert((FromPtr->getTypeClass() == Type::Pointer ||
1915 FromPtr->getTypeClass() == Type::ObjCObjectPointer) &&
1916 "Invalid similarly-qualified pointer type");
1917
1918 /// Conversions to 'id' subsume cv-qualifier conversions.
1919 if (ToType->isObjCIdType() || ToType->isObjCQualifiedIdType())
1920 return ToType.getUnqualifiedType();
1921
1922 QualType CanonFromPointee
1923 = Context.getCanonicalType(FromPtr->getPointeeType());
1924 QualType CanonToPointee = Context.getCanonicalType(ToPointee);
1925 Qualifiers Quals = CanonFromPointee.getQualifiers();
1926
1927 if (StripObjCLifetime)
1928 Quals.removeObjCLifetime();
1929
1930 // Exact qualifier match -> return the pointer type we're converting to.
1931 if (CanonToPointee.getLocalQualifiers() == Quals) {
1932 // ToType is exactly what we need. Return it.
1933 if (!ToType.isNull())
1934 return ToType.getUnqualifiedType();
1935
1936 // Build a pointer to ToPointee. It has the right qualifiers
1937 // already.
1938 if (isa<ObjCObjectPointerType>(ToType))
1939 return Context.getObjCObjectPointerType(ToPointee);
1940 return Context.getPointerType(ToPointee);
1941 }
1942
1943 // Just build a canonical type that has the right qualifiers.
1944 QualType QualifiedCanonToPointee
1945 = Context.getQualifiedType(CanonToPointee.getLocalUnqualifiedType(), Quals);
1946
1947 if (isa<ObjCObjectPointerType>(ToType))
1948 return Context.getObjCObjectPointerType(QualifiedCanonToPointee);
1949 return Context.getPointerType(QualifiedCanonToPointee);
1950 }
1951
isNullPointerConstantForConversion(Expr * Expr,bool InOverloadResolution,ASTContext & Context)1952 static bool isNullPointerConstantForConversion(Expr *Expr,
1953 bool InOverloadResolution,
1954 ASTContext &Context) {
1955 // Handle value-dependent integral null pointer constants correctly.
1956 // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#903
1957 if (Expr->isValueDependent() && !Expr->isTypeDependent() &&
1958 Expr->getType()->isIntegerType() && !Expr->getType()->isEnumeralType())
1959 return !InOverloadResolution;
1960
1961 return Expr->isNullPointerConstant(Context,
1962 InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
1963 : Expr::NPC_ValueDependentIsNull);
1964 }
1965
1966 /// IsPointerConversion - Determines whether the conversion of the
1967 /// expression From, which has the (possibly adjusted) type FromType,
1968 /// can be converted to the type ToType via a pointer conversion (C++
1969 /// 4.10). If so, returns true and places the converted type (that
1970 /// might differ from ToType in its cv-qualifiers at some level) into
1971 /// ConvertedType.
1972 ///
1973 /// This routine also supports conversions to and from block pointers
1974 /// and conversions with Objective-C's 'id', 'id<protocols...>', and
1975 /// pointers to interfaces. FIXME: Once we've determined the
1976 /// appropriate overloading rules for Objective-C, we may want to
1977 /// split the Objective-C checks into a different routine; however,
1978 /// GCC seems to consider all of these conversions to be pointer
1979 /// conversions, so for now they live here. IncompatibleObjC will be
1980 /// set if the conversion is an allowed Objective-C conversion that
1981 /// should result in a warning.
IsPointerConversion(Expr * From,QualType FromType,QualType ToType,bool InOverloadResolution,QualType & ConvertedType,bool & IncompatibleObjC)1982 bool Sema::IsPointerConversion(Expr *From, QualType FromType, QualType ToType,
1983 bool InOverloadResolution,
1984 QualType& ConvertedType,
1985 bool &IncompatibleObjC) {
1986 IncompatibleObjC = false;
1987 if (isObjCPointerConversion(FromType, ToType, ConvertedType,
1988 IncompatibleObjC))
1989 return true;
1990
1991 // Conversion from a null pointer constant to any Objective-C pointer type.
1992 if (ToType->isObjCObjectPointerType() &&
1993 isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
1994 ConvertedType = ToType;
1995 return true;
1996 }
1997
1998 // Blocks: Block pointers can be converted to void*.
1999 if (FromType->isBlockPointerType() && ToType->isPointerType() &&
2000 ToType->getAs<PointerType>()->getPointeeType()->isVoidType()) {
2001 ConvertedType = ToType;
2002 return true;
2003 }
2004 // Blocks: A null pointer constant can be converted to a block
2005 // pointer type.
2006 if (ToType->isBlockPointerType() &&
2007 isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
2008 ConvertedType = ToType;
2009 return true;
2010 }
2011
2012 // If the left-hand-side is nullptr_t, the right side can be a null
2013 // pointer constant.
2014 if (ToType->isNullPtrType() &&
2015 isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
2016 ConvertedType = ToType;
2017 return true;
2018 }
2019
2020 const PointerType* ToTypePtr = ToType->getAs<PointerType>();
2021 if (!ToTypePtr)
2022 return false;
2023
2024 // A null pointer constant can be converted to a pointer type (C++ 4.10p1).
2025 if (isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
2026 ConvertedType = ToType;
2027 return true;
2028 }
2029
2030 // Beyond this point, both types need to be pointers
2031 // , including objective-c pointers.
2032 QualType ToPointeeType = ToTypePtr->getPointeeType();
2033 if (FromType->isObjCObjectPointerType() && ToPointeeType->isVoidType() &&
2034 !getLangOpts().ObjCAutoRefCount) {
2035 ConvertedType = BuildSimilarlyQualifiedPointerType(
2036 FromType->getAs<ObjCObjectPointerType>(),
2037 ToPointeeType,
2038 ToType, Context);
2039 return true;
2040 }
2041 const PointerType *FromTypePtr = FromType->getAs<PointerType>();
2042 if (!FromTypePtr)
2043 return false;
2044
2045 QualType FromPointeeType = FromTypePtr->getPointeeType();
2046
2047 // If the unqualified pointee types are the same, this can't be a
2048 // pointer conversion, so don't do all of the work below.
2049 if (Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType))
2050 return false;
2051
2052 // An rvalue of type "pointer to cv T," where T is an object type,
2053 // can be converted to an rvalue of type "pointer to cv void" (C++
2054 // 4.10p2).
2055 if (FromPointeeType->isIncompleteOrObjectType() &&
2056 ToPointeeType->isVoidType()) {
2057 ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2058 ToPointeeType,
2059 ToType, Context,
2060 /*StripObjCLifetime=*/true);
2061 return true;
2062 }
2063
2064 // MSVC allows implicit function to void* type conversion.
2065 if (getLangOpts().MicrosoftExt && FromPointeeType->isFunctionType() &&
2066 ToPointeeType->isVoidType()) {
2067 ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2068 ToPointeeType,
2069 ToType, Context);
2070 return true;
2071 }
2072
2073 // When we're overloading in C, we allow a special kind of pointer
2074 // conversion for compatible-but-not-identical pointee types.
2075 if (!getLangOpts().CPlusPlus &&
2076 Context.typesAreCompatible(FromPointeeType, ToPointeeType)) {
2077 ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2078 ToPointeeType,
2079 ToType, Context);
2080 return true;
2081 }
2082
2083 // C++ [conv.ptr]p3:
2084 //
2085 // An rvalue of type "pointer to cv D," where D is a class type,
2086 // can be converted to an rvalue of type "pointer to cv B," where
2087 // B is a base class (clause 10) of D. If B is an inaccessible
2088 // (clause 11) or ambiguous (10.2) base class of D, a program that
2089 // necessitates this conversion is ill-formed. The result of the
2090 // conversion is a pointer to the base class sub-object of the
2091 // derived class object. The null pointer value is converted to
2092 // the null pointer value of the destination type.
2093 //
2094 // Note that we do not check for ambiguity or inaccessibility
2095 // here. That is handled by CheckPointerConversion.
2096 if (getLangOpts().CPlusPlus &&
2097 FromPointeeType->isRecordType() && ToPointeeType->isRecordType() &&
2098 !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType) &&
2099 !RequireCompleteType(From->getLocStart(), FromPointeeType, 0) &&
2100 IsDerivedFrom(FromPointeeType, ToPointeeType)) {
2101 ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2102 ToPointeeType,
2103 ToType, Context);
2104 return true;
2105 }
2106
2107 if (FromPointeeType->isVectorType() && ToPointeeType->isVectorType() &&
2108 Context.areCompatibleVectorTypes(FromPointeeType, ToPointeeType)) {
2109 ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2110 ToPointeeType,
2111 ToType, Context);
2112 return true;
2113 }
2114
2115 return false;
2116 }
2117
2118 /// \brief Adopt the given qualifiers for the given type.
AdoptQualifiers(ASTContext & Context,QualType T,Qualifiers Qs)2119 static QualType AdoptQualifiers(ASTContext &Context, QualType T, Qualifiers Qs){
2120 Qualifiers TQs = T.getQualifiers();
2121
2122 // Check whether qualifiers already match.
2123 if (TQs == Qs)
2124 return T;
2125
2126 if (Qs.compatiblyIncludes(TQs))
2127 return Context.getQualifiedType(T, Qs);
2128
2129 return Context.getQualifiedType(T.getUnqualifiedType(), Qs);
2130 }
2131
2132 /// isObjCPointerConversion - Determines whether this is an
2133 /// Objective-C pointer conversion. Subroutine of IsPointerConversion,
2134 /// with the same arguments and return values.
isObjCPointerConversion(QualType FromType,QualType ToType,QualType & ConvertedType,bool & IncompatibleObjC)2135 bool Sema::isObjCPointerConversion(QualType FromType, QualType ToType,
2136 QualType& ConvertedType,
2137 bool &IncompatibleObjC) {
2138 if (!getLangOpts().ObjC1)
2139 return false;
2140
2141 // The set of qualifiers on the type we're converting from.
2142 Qualifiers FromQualifiers = FromType.getQualifiers();
2143
2144 // First, we handle all conversions on ObjC object pointer types.
2145 const ObjCObjectPointerType* ToObjCPtr =
2146 ToType->getAs<ObjCObjectPointerType>();
2147 const ObjCObjectPointerType *FromObjCPtr =
2148 FromType->getAs<ObjCObjectPointerType>();
2149
2150 if (ToObjCPtr && FromObjCPtr) {
2151 // If the pointee types are the same (ignoring qualifications),
2152 // then this is not a pointer conversion.
2153 if (Context.hasSameUnqualifiedType(ToObjCPtr->getPointeeType(),
2154 FromObjCPtr->getPointeeType()))
2155 return false;
2156
2157 // Check for compatible
2158 // Objective C++: We're able to convert between "id" or "Class" and a
2159 // pointer to any interface (in both directions).
2160 if (ToObjCPtr->isObjCBuiltinType() && FromObjCPtr->isObjCBuiltinType()) {
2161 ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2162 return true;
2163 }
2164 // Conversions with Objective-C's id<...>.
2165 if ((FromObjCPtr->isObjCQualifiedIdType() ||
2166 ToObjCPtr->isObjCQualifiedIdType()) &&
2167 Context.ObjCQualifiedIdTypesAreCompatible(ToType, FromType,
2168 /*compare=*/false)) {
2169 ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2170 return true;
2171 }
2172 // Objective C++: We're able to convert from a pointer to an
2173 // interface to a pointer to a different interface.
2174 if (Context.canAssignObjCInterfaces(ToObjCPtr, FromObjCPtr)) {
2175 const ObjCInterfaceType* LHS = ToObjCPtr->getInterfaceType();
2176 const ObjCInterfaceType* RHS = FromObjCPtr->getInterfaceType();
2177 if (getLangOpts().CPlusPlus && LHS && RHS &&
2178 !ToObjCPtr->getPointeeType().isAtLeastAsQualifiedAs(
2179 FromObjCPtr->getPointeeType()))
2180 return false;
2181 ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr,
2182 ToObjCPtr->getPointeeType(),
2183 ToType, Context);
2184 ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2185 return true;
2186 }
2187
2188 if (Context.canAssignObjCInterfaces(FromObjCPtr, ToObjCPtr)) {
2189 // Okay: this is some kind of implicit downcast of Objective-C
2190 // interfaces, which is permitted. However, we're going to
2191 // complain about it.
2192 IncompatibleObjC = true;
2193 ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr,
2194 ToObjCPtr->getPointeeType(),
2195 ToType, Context);
2196 ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2197 return true;
2198 }
2199 }
2200 // Beyond this point, both types need to be C pointers or block pointers.
2201 QualType ToPointeeType;
2202 if (const PointerType *ToCPtr = ToType->getAs<PointerType>())
2203 ToPointeeType = ToCPtr->getPointeeType();
2204 else if (const BlockPointerType *ToBlockPtr =
2205 ToType->getAs<BlockPointerType>()) {
2206 // Objective C++: We're able to convert from a pointer to any object
2207 // to a block pointer type.
2208 if (FromObjCPtr && FromObjCPtr->isObjCBuiltinType()) {
2209 ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2210 return true;
2211 }
2212 ToPointeeType = ToBlockPtr->getPointeeType();
2213 }
2214 else if (FromType->getAs<BlockPointerType>() &&
2215 ToObjCPtr && ToObjCPtr->isObjCBuiltinType()) {
2216 // Objective C++: We're able to convert from a block pointer type to a
2217 // pointer to any object.
2218 ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2219 return true;
2220 }
2221 else
2222 return false;
2223
2224 QualType FromPointeeType;
2225 if (const PointerType *FromCPtr = FromType->getAs<PointerType>())
2226 FromPointeeType = FromCPtr->getPointeeType();
2227 else if (const BlockPointerType *FromBlockPtr =
2228 FromType->getAs<BlockPointerType>())
2229 FromPointeeType = FromBlockPtr->getPointeeType();
2230 else
2231 return false;
2232
2233 // If we have pointers to pointers, recursively check whether this
2234 // is an Objective-C conversion.
2235 if (FromPointeeType->isPointerType() && ToPointeeType->isPointerType() &&
2236 isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
2237 IncompatibleObjC)) {
2238 // We always complain about this conversion.
2239 IncompatibleObjC = true;
2240 ConvertedType = Context.getPointerType(ConvertedType);
2241 ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2242 return true;
2243 }
2244 // Allow conversion of pointee being objective-c pointer to another one;
2245 // as in I* to id.
2246 if (FromPointeeType->getAs<ObjCObjectPointerType>() &&
2247 ToPointeeType->getAs<ObjCObjectPointerType>() &&
2248 isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
2249 IncompatibleObjC)) {
2250
2251 ConvertedType = Context.getPointerType(ConvertedType);
2252 ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2253 return true;
2254 }
2255
2256 // If we have pointers to functions or blocks, check whether the only
2257 // differences in the argument and result types are in Objective-C
2258 // pointer conversions. If so, we permit the conversion (but
2259 // complain about it).
2260 const FunctionProtoType *FromFunctionType
2261 = FromPointeeType->getAs<FunctionProtoType>();
2262 const FunctionProtoType *ToFunctionType
2263 = ToPointeeType->getAs<FunctionProtoType>();
2264 if (FromFunctionType && ToFunctionType) {
2265 // If the function types are exactly the same, this isn't an
2266 // Objective-C pointer conversion.
2267 if (Context.getCanonicalType(FromPointeeType)
2268 == Context.getCanonicalType(ToPointeeType))
2269 return false;
2270
2271 // Perform the quick checks that will tell us whether these
2272 // function types are obviously different.
2273 if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() ||
2274 FromFunctionType->isVariadic() != ToFunctionType->isVariadic() ||
2275 FromFunctionType->getTypeQuals() != ToFunctionType->getTypeQuals())
2276 return false;
2277
2278 bool HasObjCConversion = false;
2279 if (Context.getCanonicalType(FromFunctionType->getResultType())
2280 == Context.getCanonicalType(ToFunctionType->getResultType())) {
2281 // Okay, the types match exactly. Nothing to do.
2282 } else if (isObjCPointerConversion(FromFunctionType->getResultType(),
2283 ToFunctionType->getResultType(),
2284 ConvertedType, IncompatibleObjC)) {
2285 // Okay, we have an Objective-C pointer conversion.
2286 HasObjCConversion = true;
2287 } else {
2288 // Function types are too different. Abort.
2289 return false;
2290 }
2291
2292 // Check argument types.
2293 for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs();
2294 ArgIdx != NumArgs; ++ArgIdx) {
2295 QualType FromArgType = FromFunctionType->getArgType(ArgIdx);
2296 QualType ToArgType = ToFunctionType->getArgType(ArgIdx);
2297 if (Context.getCanonicalType(FromArgType)
2298 == Context.getCanonicalType(ToArgType)) {
2299 // Okay, the types match exactly. Nothing to do.
2300 } else if (isObjCPointerConversion(FromArgType, ToArgType,
2301 ConvertedType, IncompatibleObjC)) {
2302 // Okay, we have an Objective-C pointer conversion.
2303 HasObjCConversion = true;
2304 } else {
2305 // Argument types are too different. Abort.
2306 return false;
2307 }
2308 }
2309
2310 if (HasObjCConversion) {
2311 // We had an Objective-C conversion. Allow this pointer
2312 // conversion, but complain about it.
2313 ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2314 IncompatibleObjC = true;
2315 return true;
2316 }
2317 }
2318
2319 return false;
2320 }
2321
2322 /// \brief Determine whether this is an Objective-C writeback conversion,
2323 /// used for parameter passing when performing automatic reference counting.
2324 ///
2325 /// \param FromType The type we're converting form.
2326 ///
2327 /// \param ToType The type we're converting to.
2328 ///
2329 /// \param ConvertedType The type that will be produced after applying
2330 /// this conversion.
isObjCWritebackConversion(QualType FromType,QualType ToType,QualType & ConvertedType)2331 bool Sema::isObjCWritebackConversion(QualType FromType, QualType ToType,
2332 QualType &ConvertedType) {
2333 if (!getLangOpts().ObjCAutoRefCount ||
2334 Context.hasSameUnqualifiedType(FromType, ToType))
2335 return false;
2336
2337 // Parameter must be a pointer to __autoreleasing (with no other qualifiers).
2338 QualType ToPointee;
2339 if (const PointerType *ToPointer = ToType->getAs<PointerType>())
2340 ToPointee = ToPointer->getPointeeType();
2341 else
2342 return false;
2343
2344 Qualifiers ToQuals = ToPointee.getQualifiers();
2345 if (!ToPointee->isObjCLifetimeType() ||
2346 ToQuals.getObjCLifetime() != Qualifiers::OCL_Autoreleasing ||
2347 !ToQuals.withoutObjCLifetime().empty())
2348 return false;
2349
2350 // Argument must be a pointer to __strong to __weak.
2351 QualType FromPointee;
2352 if (const PointerType *FromPointer = FromType->getAs<PointerType>())
2353 FromPointee = FromPointer->getPointeeType();
2354 else
2355 return false;
2356
2357 Qualifiers FromQuals = FromPointee.getQualifiers();
2358 if (!FromPointee->isObjCLifetimeType() ||
2359 (FromQuals.getObjCLifetime() != Qualifiers::OCL_Strong &&
2360 FromQuals.getObjCLifetime() != Qualifiers::OCL_Weak))
2361 return false;
2362
2363 // Make sure that we have compatible qualifiers.
2364 FromQuals.setObjCLifetime(Qualifiers::OCL_Autoreleasing);
2365 if (!ToQuals.compatiblyIncludes(FromQuals))
2366 return false;
2367
2368 // Remove qualifiers from the pointee type we're converting from; they
2369 // aren't used in the compatibility check belong, and we'll be adding back
2370 // qualifiers (with __autoreleasing) if the compatibility check succeeds.
2371 FromPointee = FromPointee.getUnqualifiedType();
2372
2373 // The unqualified form of the pointee types must be compatible.
2374 ToPointee = ToPointee.getUnqualifiedType();
2375 bool IncompatibleObjC;
2376 if (Context.typesAreCompatible(FromPointee, ToPointee))
2377 FromPointee = ToPointee;
2378 else if (!isObjCPointerConversion(FromPointee, ToPointee, FromPointee,
2379 IncompatibleObjC))
2380 return false;
2381
2382 /// \brief Construct the type we're converting to, which is a pointer to
2383 /// __autoreleasing pointee.
2384 FromPointee = Context.getQualifiedType(FromPointee, FromQuals);
2385 ConvertedType = Context.getPointerType(FromPointee);
2386 return true;
2387 }
2388
IsBlockPointerConversion(QualType FromType,QualType ToType,QualType & ConvertedType)2389 bool Sema::IsBlockPointerConversion(QualType FromType, QualType ToType,
2390 QualType& ConvertedType) {
2391 QualType ToPointeeType;
2392 if (const BlockPointerType *ToBlockPtr =
2393 ToType->getAs<BlockPointerType>())
2394 ToPointeeType = ToBlockPtr->getPointeeType();
2395 else
2396 return false;
2397
2398 QualType FromPointeeType;
2399 if (const BlockPointerType *FromBlockPtr =
2400 FromType->getAs<BlockPointerType>())
2401 FromPointeeType = FromBlockPtr->getPointeeType();
2402 else
2403 return false;
2404 // We have pointer to blocks, check whether the only
2405 // differences in the argument and result types are in Objective-C
2406 // pointer conversions. If so, we permit the conversion.
2407
2408 const FunctionProtoType *FromFunctionType
2409 = FromPointeeType->getAs<FunctionProtoType>();
2410 const FunctionProtoType *ToFunctionType
2411 = ToPointeeType->getAs<FunctionProtoType>();
2412
2413 if (!FromFunctionType || !ToFunctionType)
2414 return false;
2415
2416 if (Context.hasSameType(FromPointeeType, ToPointeeType))
2417 return true;
2418
2419 // Perform the quick checks that will tell us whether these
2420 // function types are obviously different.
2421 if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() ||
2422 FromFunctionType->isVariadic() != ToFunctionType->isVariadic())
2423 return false;
2424
2425 FunctionType::ExtInfo FromEInfo = FromFunctionType->getExtInfo();
2426 FunctionType::ExtInfo ToEInfo = ToFunctionType->getExtInfo();
2427 if (FromEInfo != ToEInfo)
2428 return false;
2429
2430 bool IncompatibleObjC = false;
2431 if (Context.hasSameType(FromFunctionType->getResultType(),
2432 ToFunctionType->getResultType())) {
2433 // Okay, the types match exactly. Nothing to do.
2434 } else {
2435 QualType RHS = FromFunctionType->getResultType();
2436 QualType LHS = ToFunctionType->getResultType();
2437 if ((!getLangOpts().CPlusPlus || !RHS->isRecordType()) &&
2438 !RHS.hasQualifiers() && LHS.hasQualifiers())
2439 LHS = LHS.getUnqualifiedType();
2440
2441 if (Context.hasSameType(RHS,LHS)) {
2442 // OK exact match.
2443 } else if (isObjCPointerConversion(RHS, LHS,
2444 ConvertedType, IncompatibleObjC)) {
2445 if (IncompatibleObjC)
2446 return false;
2447 // Okay, we have an Objective-C pointer conversion.
2448 }
2449 else
2450 return false;
2451 }
2452
2453 // Check argument types.
2454 for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs();
2455 ArgIdx != NumArgs; ++ArgIdx) {
2456 IncompatibleObjC = false;
2457 QualType FromArgType = FromFunctionType->getArgType(ArgIdx);
2458 QualType ToArgType = ToFunctionType->getArgType(ArgIdx);
2459 if (Context.hasSameType(FromArgType, ToArgType)) {
2460 // Okay, the types match exactly. Nothing to do.
2461 } else if (isObjCPointerConversion(ToArgType, FromArgType,
2462 ConvertedType, IncompatibleObjC)) {
2463 if (IncompatibleObjC)
2464 return false;
2465 // Okay, we have an Objective-C pointer conversion.
2466 } else
2467 // Argument types are too different. Abort.
2468 return false;
2469 }
2470 if (LangOpts.ObjCAutoRefCount &&
2471 !Context.FunctionTypesMatchOnNSConsumedAttrs(FromFunctionType,
2472 ToFunctionType))
2473 return false;
2474
2475 ConvertedType = ToType;
2476 return true;
2477 }
2478
2479 enum {
2480 ft_default,
2481 ft_different_class,
2482 ft_parameter_arity,
2483 ft_parameter_mismatch,
2484 ft_return_type,
2485 ft_qualifer_mismatch
2486 };
2487
2488 /// HandleFunctionTypeMismatch - Gives diagnostic information for differeing
2489 /// function types. Catches different number of parameter, mismatch in
2490 /// parameter types, and different return types.
HandleFunctionTypeMismatch(PartialDiagnostic & PDiag,QualType FromType,QualType ToType)2491 void Sema::HandleFunctionTypeMismatch(PartialDiagnostic &PDiag,
2492 QualType FromType, QualType ToType) {
2493 // If either type is not valid, include no extra info.
2494 if (FromType.isNull() || ToType.isNull()) {
2495 PDiag << ft_default;
2496 return;
2497 }
2498
2499 // Get the function type from the pointers.
2500 if (FromType->isMemberPointerType() && ToType->isMemberPointerType()) {
2501 const MemberPointerType *FromMember = FromType->getAs<MemberPointerType>(),
2502 *ToMember = ToType->getAs<MemberPointerType>();
2503 if (FromMember->getClass() != ToMember->getClass()) {
2504 PDiag << ft_different_class << QualType(ToMember->getClass(), 0)
2505 << QualType(FromMember->getClass(), 0);
2506 return;
2507 }
2508 FromType = FromMember->getPointeeType();
2509 ToType = ToMember->getPointeeType();
2510 }
2511
2512 if (FromType->isPointerType())
2513 FromType = FromType->getPointeeType();
2514 if (ToType->isPointerType())
2515 ToType = ToType->getPointeeType();
2516
2517 // Remove references.
2518 FromType = FromType.getNonReferenceType();
2519 ToType = ToType.getNonReferenceType();
2520
2521 // Don't print extra info for non-specialized template functions.
2522 if (FromType->isInstantiationDependentType() &&
2523 !FromType->getAs<TemplateSpecializationType>()) {
2524 PDiag << ft_default;
2525 return;
2526 }
2527
2528 // No extra info for same types.
2529 if (Context.hasSameType(FromType, ToType)) {
2530 PDiag << ft_default;
2531 return;
2532 }
2533
2534 const FunctionProtoType *FromFunction = FromType->getAs<FunctionProtoType>(),
2535 *ToFunction = ToType->getAs<FunctionProtoType>();
2536
2537 // Both types need to be function types.
2538 if (!FromFunction || !ToFunction) {
2539 PDiag << ft_default;
2540 return;
2541 }
2542
2543 if (FromFunction->getNumArgs() != ToFunction->getNumArgs()) {
2544 PDiag << ft_parameter_arity << ToFunction->getNumArgs()
2545 << FromFunction->getNumArgs();
2546 return;
2547 }
2548
2549 // Handle different parameter types.
2550 unsigned ArgPos;
2551 if (!FunctionArgTypesAreEqual(FromFunction, ToFunction, &ArgPos)) {
2552 PDiag << ft_parameter_mismatch << ArgPos + 1
2553 << ToFunction->getArgType(ArgPos)
2554 << FromFunction->getArgType(ArgPos);
2555 return;
2556 }
2557
2558 // Handle different return type.
2559 if (!Context.hasSameType(FromFunction->getResultType(),
2560 ToFunction->getResultType())) {
2561 PDiag << ft_return_type << ToFunction->getResultType()
2562 << FromFunction->getResultType();
2563 return;
2564 }
2565
2566 unsigned FromQuals = FromFunction->getTypeQuals(),
2567 ToQuals = ToFunction->getTypeQuals();
2568 if (FromQuals != ToQuals) {
2569 PDiag << ft_qualifer_mismatch << ToQuals << FromQuals;
2570 return;
2571 }
2572
2573 // Unable to find a difference, so add no extra info.
2574 PDiag << ft_default;
2575 }
2576
2577 /// FunctionArgTypesAreEqual - This routine checks two function proto types
2578 /// for equality of their argument types. Caller has already checked that
2579 /// they have same number of arguments. If the parameters are different,
2580 /// ArgPos will have the parameter index of the first different parameter.
FunctionArgTypesAreEqual(const FunctionProtoType * OldType,const FunctionProtoType * NewType,unsigned * ArgPos)2581 bool Sema::FunctionArgTypesAreEqual(const FunctionProtoType *OldType,
2582 const FunctionProtoType *NewType,
2583 unsigned *ArgPos) {
2584 for (FunctionProtoType::arg_type_iterator O = OldType->arg_type_begin(),
2585 N = NewType->arg_type_begin(),
2586 E = OldType->arg_type_end(); O && (O != E); ++O, ++N) {
2587 if (!Context.hasSameType(*O, *N)) {
2588 if (ArgPos) *ArgPos = O - OldType->arg_type_begin();
2589 return false;
2590 }
2591 }
2592 return true;
2593 }
2594
2595 /// CheckPointerConversion - Check the pointer conversion from the
2596 /// expression From to the type ToType. This routine checks for
2597 /// ambiguous or inaccessible derived-to-base pointer
2598 /// conversions for which IsPointerConversion has already returned
2599 /// true. It returns true and produces a diagnostic if there was an
2600 /// error, or returns false otherwise.
CheckPointerConversion(Expr * From,QualType ToType,CastKind & Kind,CXXCastPath & BasePath,bool IgnoreBaseAccess)2601 bool Sema::CheckPointerConversion(Expr *From, QualType ToType,
2602 CastKind &Kind,
2603 CXXCastPath& BasePath,
2604 bool IgnoreBaseAccess) {
2605 QualType FromType = From->getType();
2606 bool IsCStyleOrFunctionalCast = IgnoreBaseAccess;
2607
2608 Kind = CK_BitCast;
2609
2610 if (!IsCStyleOrFunctionalCast && !FromType->isAnyPointerType() &&
2611 From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull) ==
2612 Expr::NPCK_ZeroExpression) {
2613 if (Context.hasSameUnqualifiedType(From->getType(), Context.BoolTy))
2614 DiagRuntimeBehavior(From->getExprLoc(), From,
2615 PDiag(diag::warn_impcast_bool_to_null_pointer)
2616 << ToType << From->getSourceRange());
2617 else if (!isUnevaluatedContext())
2618 Diag(From->getExprLoc(), diag::warn_non_literal_null_pointer)
2619 << ToType << From->getSourceRange();
2620 }
2621 if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) {
2622 if (const PointerType *FromPtrType = FromType->getAs<PointerType>()) {
2623 QualType FromPointeeType = FromPtrType->getPointeeType(),
2624 ToPointeeType = ToPtrType->getPointeeType();
2625
2626 if (FromPointeeType->isRecordType() && ToPointeeType->isRecordType() &&
2627 !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType)) {
2628 // We must have a derived-to-base conversion. Check an
2629 // ambiguous or inaccessible conversion.
2630 if (CheckDerivedToBaseConversion(FromPointeeType, ToPointeeType,
2631 From->getExprLoc(),
2632 From->getSourceRange(), &BasePath,
2633 IgnoreBaseAccess))
2634 return true;
2635
2636 // The conversion was successful.
2637 Kind = CK_DerivedToBase;
2638 }
2639 }
2640 } else if (const ObjCObjectPointerType *ToPtrType =
2641 ToType->getAs<ObjCObjectPointerType>()) {
2642 if (const ObjCObjectPointerType *FromPtrType =
2643 FromType->getAs<ObjCObjectPointerType>()) {
2644 // Objective-C++ conversions are always okay.
2645 // FIXME: We should have a different class of conversions for the
2646 // Objective-C++ implicit conversions.
2647 if (FromPtrType->isObjCBuiltinType() || ToPtrType->isObjCBuiltinType())
2648 return false;
2649 } else if (FromType->isBlockPointerType()) {
2650 Kind = CK_BlockPointerToObjCPointerCast;
2651 } else {
2652 Kind = CK_CPointerToObjCPointerCast;
2653 }
2654 } else if (ToType->isBlockPointerType()) {
2655 if (!FromType->isBlockPointerType())
2656 Kind = CK_AnyPointerToBlockPointerCast;
2657 }
2658
2659 // We shouldn't fall into this case unless it's valid for other
2660 // reasons.
2661 if (From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull))
2662 Kind = CK_NullToPointer;
2663
2664 return false;
2665 }
2666
2667 /// IsMemberPointerConversion - Determines whether the conversion of the
2668 /// expression From, which has the (possibly adjusted) type FromType, can be
2669 /// converted to the type ToType via a member pointer conversion (C++ 4.11).
2670 /// If so, returns true and places the converted type (that might differ from
2671 /// ToType in its cv-qualifiers at some level) into ConvertedType.
IsMemberPointerConversion(Expr * From,QualType FromType,QualType ToType,bool InOverloadResolution,QualType & ConvertedType)2672 bool Sema::IsMemberPointerConversion(Expr *From, QualType FromType,
2673 QualType ToType,
2674 bool InOverloadResolution,
2675 QualType &ConvertedType) {
2676 const MemberPointerType *ToTypePtr = ToType->getAs<MemberPointerType>();
2677 if (!ToTypePtr)
2678 return false;
2679
2680 // A null pointer constant can be converted to a member pointer (C++ 4.11p1)
2681 if (From->isNullPointerConstant(Context,
2682 InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
2683 : Expr::NPC_ValueDependentIsNull)) {
2684 ConvertedType = ToType;
2685 return true;
2686 }
2687
2688 // Otherwise, both types have to be member pointers.
2689 const MemberPointerType *FromTypePtr = FromType->getAs<MemberPointerType>();
2690 if (!FromTypePtr)
2691 return false;
2692
2693 // A pointer to member of B can be converted to a pointer to member of D,
2694 // where D is derived from B (C++ 4.11p2).
2695 QualType FromClass(FromTypePtr->getClass(), 0);
2696 QualType ToClass(ToTypePtr->getClass(), 0);
2697
2698 if (!Context.hasSameUnqualifiedType(FromClass, ToClass) &&
2699 !RequireCompleteType(From->getLocStart(), ToClass, 0) &&
2700 IsDerivedFrom(ToClass, FromClass)) {
2701 ConvertedType = Context.getMemberPointerType(FromTypePtr->getPointeeType(),
2702 ToClass.getTypePtr());
2703 return true;
2704 }
2705
2706 return false;
2707 }
2708
2709 /// CheckMemberPointerConversion - Check the member pointer conversion from the
2710 /// expression From to the type ToType. This routine checks for ambiguous or
2711 /// virtual or inaccessible base-to-derived member pointer conversions
2712 /// for which IsMemberPointerConversion has already returned true. It returns
2713 /// true and produces a diagnostic if there was an error, or returns false
2714 /// otherwise.
CheckMemberPointerConversion(Expr * From,QualType ToType,CastKind & Kind,CXXCastPath & BasePath,bool IgnoreBaseAccess)2715 bool Sema::CheckMemberPointerConversion(Expr *From, QualType ToType,
2716 CastKind &Kind,
2717 CXXCastPath &BasePath,
2718 bool IgnoreBaseAccess) {
2719 QualType FromType = From->getType();
2720 const MemberPointerType *FromPtrType = FromType->getAs<MemberPointerType>();
2721 if (!FromPtrType) {
2722 // This must be a null pointer to member pointer conversion
2723 assert(From->isNullPointerConstant(Context,
2724 Expr::NPC_ValueDependentIsNull) &&
2725 "Expr must be null pointer constant!");
2726 Kind = CK_NullToMemberPointer;
2727 return false;
2728 }
2729
2730 const MemberPointerType *ToPtrType = ToType->getAs<MemberPointerType>();
2731 assert(ToPtrType && "No member pointer cast has a target type "
2732 "that is not a member pointer.");
2733
2734 QualType FromClass = QualType(FromPtrType->getClass(), 0);
2735 QualType ToClass = QualType(ToPtrType->getClass(), 0);
2736
2737 // FIXME: What about dependent types?
2738 assert(FromClass->isRecordType() && "Pointer into non-class.");
2739 assert(ToClass->isRecordType() && "Pointer into non-class.");
2740
2741 CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
2742 /*DetectVirtual=*/true);
2743 bool DerivationOkay = IsDerivedFrom(ToClass, FromClass, Paths);
2744 assert(DerivationOkay &&
2745 "Should not have been called if derivation isn't OK.");
2746 (void)DerivationOkay;
2747
2748 if (Paths.isAmbiguous(Context.getCanonicalType(FromClass).
2749 getUnqualifiedType())) {
2750 std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths);
2751 Diag(From->getExprLoc(), diag::err_ambiguous_memptr_conv)
2752 << 0 << FromClass << ToClass << PathDisplayStr << From->getSourceRange();
2753 return true;
2754 }
2755
2756 if (const RecordType *VBase = Paths.getDetectedVirtual()) {
2757 Diag(From->getExprLoc(), diag::err_memptr_conv_via_virtual)
2758 << FromClass << ToClass << QualType(VBase, 0)
2759 << From->getSourceRange();
2760 return true;
2761 }
2762
2763 if (!IgnoreBaseAccess)
2764 CheckBaseClassAccess(From->getExprLoc(), FromClass, ToClass,
2765 Paths.front(),
2766 diag::err_downcast_from_inaccessible_base);
2767
2768 // Must be a base to derived member conversion.
2769 BuildBasePathArray(Paths, BasePath);
2770 Kind = CK_BaseToDerivedMemberPointer;
2771 return false;
2772 }
2773
2774 /// IsQualificationConversion - Determines whether the conversion from
2775 /// an rvalue of type FromType to ToType is a qualification conversion
2776 /// (C++ 4.4).
2777 ///
2778 /// \param ObjCLifetimeConversion Output parameter that will be set to indicate
2779 /// when the qualification conversion involves a change in the Objective-C
2780 /// object lifetime.
2781 bool
IsQualificationConversion(QualType FromType,QualType ToType,bool CStyle,bool & ObjCLifetimeConversion)2782 Sema::IsQualificationConversion(QualType FromType, QualType ToType,
2783 bool CStyle, bool &ObjCLifetimeConversion) {
2784 FromType = Context.getCanonicalType(FromType);
2785 ToType = Context.getCanonicalType(ToType);
2786 ObjCLifetimeConversion = false;
2787
2788 // If FromType and ToType are the same type, this is not a
2789 // qualification conversion.
2790 if (FromType.getUnqualifiedType() == ToType.getUnqualifiedType())
2791 return false;
2792
2793 // (C++ 4.4p4):
2794 // A conversion can add cv-qualifiers at levels other than the first
2795 // in multi-level pointers, subject to the following rules: [...]
2796 bool PreviousToQualsIncludeConst = true;
2797 bool UnwrappedAnyPointer = false;
2798 while (Context.UnwrapSimilarPointerTypes(FromType, ToType)) {
2799 // Within each iteration of the loop, we check the qualifiers to
2800 // determine if this still looks like a qualification
2801 // conversion. Then, if all is well, we unwrap one more level of
2802 // pointers or pointers-to-members and do it all again
2803 // until there are no more pointers or pointers-to-members left to
2804 // unwrap.
2805 UnwrappedAnyPointer = true;
2806
2807 Qualifiers FromQuals = FromType.getQualifiers();
2808 Qualifiers ToQuals = ToType.getQualifiers();
2809
2810 // Objective-C ARC:
2811 // Check Objective-C lifetime conversions.
2812 if (FromQuals.getObjCLifetime() != ToQuals.getObjCLifetime() &&
2813 UnwrappedAnyPointer) {
2814 if (ToQuals.compatiblyIncludesObjCLifetime(FromQuals)) {
2815 ObjCLifetimeConversion = true;
2816 FromQuals.removeObjCLifetime();
2817 ToQuals.removeObjCLifetime();
2818 } else {
2819 // Qualification conversions cannot cast between different
2820 // Objective-C lifetime qualifiers.
2821 return false;
2822 }
2823 }
2824
2825 // Allow addition/removal of GC attributes but not changing GC attributes.
2826 if (FromQuals.getObjCGCAttr() != ToQuals.getObjCGCAttr() &&
2827 (!FromQuals.hasObjCGCAttr() || !ToQuals.hasObjCGCAttr())) {
2828 FromQuals.removeObjCGCAttr();
2829 ToQuals.removeObjCGCAttr();
2830 }
2831
2832 // -- for every j > 0, if const is in cv 1,j then const is in cv
2833 // 2,j, and similarly for volatile.
2834 if (!CStyle && !ToQuals.compatiblyIncludes(FromQuals))
2835 return false;
2836
2837 // -- if the cv 1,j and cv 2,j are different, then const is in
2838 // every cv for 0 < k < j.
2839 if (!CStyle && FromQuals.getCVRQualifiers() != ToQuals.getCVRQualifiers()
2840 && !PreviousToQualsIncludeConst)
2841 return false;
2842
2843 // Keep track of whether all prior cv-qualifiers in the "to" type
2844 // include const.
2845 PreviousToQualsIncludeConst
2846 = PreviousToQualsIncludeConst && ToQuals.hasConst();
2847 }
2848
2849 // We are left with FromType and ToType being the pointee types
2850 // after unwrapping the original FromType and ToType the same number
2851 // of types. If we unwrapped any pointers, and if FromType and
2852 // ToType have the same unqualified type (since we checked
2853 // qualifiers above), then this is a qualification conversion.
2854 return UnwrappedAnyPointer && Context.hasSameUnqualifiedType(FromType,ToType);
2855 }
2856
2857 /// \brief - Determine whether this is a conversion from a scalar type to an
2858 /// atomic type.
2859 ///
2860 /// If successful, updates \c SCS's second and third steps in the conversion
2861 /// sequence to finish the conversion.
tryAtomicConversion(Sema & S,Expr * From,QualType ToType,bool InOverloadResolution,StandardConversionSequence & SCS,bool CStyle)2862 static bool tryAtomicConversion(Sema &S, Expr *From, QualType ToType,
2863 bool InOverloadResolution,
2864 StandardConversionSequence &SCS,
2865 bool CStyle) {
2866 const AtomicType *ToAtomic = ToType->getAs<AtomicType>();
2867 if (!ToAtomic)
2868 return false;
2869
2870 StandardConversionSequence InnerSCS;
2871 if (!IsStandardConversion(S, From, ToAtomic->getValueType(),
2872 InOverloadResolution, InnerSCS,
2873 CStyle, /*AllowObjCWritebackConversion=*/false))
2874 return false;
2875
2876 SCS.Second = InnerSCS.Second;
2877 SCS.setToType(1, InnerSCS.getToType(1));
2878 SCS.Third = InnerSCS.Third;
2879 SCS.QualificationIncludesObjCLifetime
2880 = InnerSCS.QualificationIncludesObjCLifetime;
2881 SCS.setToType(2, InnerSCS.getToType(2));
2882 return true;
2883 }
2884
isFirstArgumentCompatibleWithType(ASTContext & Context,CXXConstructorDecl * Constructor,QualType Type)2885 static bool isFirstArgumentCompatibleWithType(ASTContext &Context,
2886 CXXConstructorDecl *Constructor,
2887 QualType Type) {
2888 const FunctionProtoType *CtorType =
2889 Constructor->getType()->getAs<FunctionProtoType>();
2890 if (CtorType->getNumArgs() > 0) {
2891 QualType FirstArg = CtorType->getArgType(0);
2892 if (Context.hasSameUnqualifiedType(Type, FirstArg.getNonReferenceType()))
2893 return true;
2894 }
2895 return false;
2896 }
2897
2898 static OverloadingResult
IsInitializerListConstructorConversion(Sema & S,Expr * From,QualType ToType,CXXRecordDecl * To,UserDefinedConversionSequence & User,OverloadCandidateSet & CandidateSet,bool AllowExplicit)2899 IsInitializerListConstructorConversion(Sema &S, Expr *From, QualType ToType,
2900 CXXRecordDecl *To,
2901 UserDefinedConversionSequence &User,
2902 OverloadCandidateSet &CandidateSet,
2903 bool AllowExplicit) {
2904 DeclContext::lookup_result R = S.LookupConstructors(To);
2905 for (DeclContext::lookup_iterator Con = R.begin(), ConEnd = R.end();
2906 Con != ConEnd; ++Con) {
2907 NamedDecl *D = *Con;
2908 DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess());
2909
2910 // Find the constructor (which may be a template).
2911 CXXConstructorDecl *Constructor = 0;
2912 FunctionTemplateDecl *ConstructorTmpl
2913 = dyn_cast<FunctionTemplateDecl>(D);
2914 if (ConstructorTmpl)
2915 Constructor
2916 = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl());
2917 else
2918 Constructor = cast<CXXConstructorDecl>(D);
2919
2920 bool Usable = !Constructor->isInvalidDecl() &&
2921 S.isInitListConstructor(Constructor) &&
2922 (AllowExplicit || !Constructor->isExplicit());
2923 if (Usable) {
2924 // If the first argument is (a reference to) the target type,
2925 // suppress conversions.
2926 bool SuppressUserConversions =
2927 isFirstArgumentCompatibleWithType(S.Context, Constructor, ToType);
2928 if (ConstructorTmpl)
2929 S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl,
2930 /*ExplicitArgs*/ 0,
2931 From, CandidateSet,
2932 SuppressUserConversions);
2933 else
2934 S.AddOverloadCandidate(Constructor, FoundDecl,
2935 From, CandidateSet,
2936 SuppressUserConversions);
2937 }
2938 }
2939
2940 bool HadMultipleCandidates = (CandidateSet.size() > 1);
2941
2942 OverloadCandidateSet::iterator Best;
2943 switch (CandidateSet.BestViableFunction(S, From->getLocStart(), Best, true)) {
2944 case OR_Success: {
2945 // Record the standard conversion we used and the conversion function.
2946 CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(Best->Function);
2947 QualType ThisType = Constructor->getThisType(S.Context);
2948 // Initializer lists don't have conversions as such.
2949 User.Before.setAsIdentityConversion();
2950 User.HadMultipleCandidates = HadMultipleCandidates;
2951 User.ConversionFunction = Constructor;
2952 User.FoundConversionFunction = Best->FoundDecl;
2953 User.After.setAsIdentityConversion();
2954 User.After.setFromType(ThisType->getAs<PointerType>()->getPointeeType());
2955 User.After.setAllToTypes(ToType);
2956 return OR_Success;
2957 }
2958
2959 case OR_No_Viable_Function:
2960 return OR_No_Viable_Function;
2961 case OR_Deleted:
2962 return OR_Deleted;
2963 case OR_Ambiguous:
2964 return OR_Ambiguous;
2965 }
2966
2967 llvm_unreachable("Invalid OverloadResult!");
2968 }
2969
2970 /// Determines whether there is a user-defined conversion sequence
2971 /// (C++ [over.ics.user]) that converts expression From to the type
2972 /// ToType. If such a conversion exists, User will contain the
2973 /// user-defined conversion sequence that performs such a conversion
2974 /// and this routine will return true. Otherwise, this routine returns
2975 /// false and User is unspecified.
2976 ///
2977 /// \param AllowExplicit true if the conversion should consider C++0x
2978 /// "explicit" conversion functions as well as non-explicit conversion
2979 /// functions (C++0x [class.conv.fct]p2).
2980 static OverloadingResult
IsUserDefinedConversion(Sema & S,Expr * From,QualType ToType,UserDefinedConversionSequence & User,OverloadCandidateSet & CandidateSet,bool AllowExplicit)2981 IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
2982 UserDefinedConversionSequence &User,
2983 OverloadCandidateSet &CandidateSet,
2984 bool AllowExplicit) {
2985 // Whether we will only visit constructors.
2986 bool ConstructorsOnly = false;
2987
2988 // If the type we are conversion to is a class type, enumerate its
2989 // constructors.
2990 if (const RecordType *ToRecordType = ToType->getAs<RecordType>()) {
2991 // C++ [over.match.ctor]p1:
2992 // When objects of class type are direct-initialized (8.5), or
2993 // copy-initialized from an expression of the same or a
2994 // derived class type (8.5), overload resolution selects the
2995 // constructor. [...] For copy-initialization, the candidate
2996 // functions are all the converting constructors (12.3.1) of
2997 // that class. The argument list is the expression-list within
2998 // the parentheses of the initializer.
2999 if (S.Context.hasSameUnqualifiedType(ToType, From->getType()) ||
3000 (From->getType()->getAs<RecordType>() &&
3001 S.IsDerivedFrom(From->getType(), ToType)))
3002 ConstructorsOnly = true;
3003
3004 S.RequireCompleteType(From->getExprLoc(), ToType, 0);
3005 // RequireCompleteType may have returned true due to some invalid decl
3006 // during template instantiation, but ToType may be complete enough now
3007 // to try to recover.
3008 if (ToType->isIncompleteType()) {
3009 // We're not going to find any constructors.
3010 } else if (CXXRecordDecl *ToRecordDecl
3011 = dyn_cast<CXXRecordDecl>(ToRecordType->getDecl())) {
3012
3013 Expr **Args = &From;
3014 unsigned NumArgs = 1;
3015 bool ListInitializing = false;
3016 if (InitListExpr *InitList = dyn_cast<InitListExpr>(From)) {
3017 // But first, see if there is an init-list-contructor that will work.
3018 OverloadingResult Result = IsInitializerListConstructorConversion(
3019 S, From, ToType, ToRecordDecl, User, CandidateSet, AllowExplicit);
3020 if (Result != OR_No_Viable_Function)
3021 return Result;
3022 // Never mind.
3023 CandidateSet.clear();
3024
3025 // If we're list-initializing, we pass the individual elements as
3026 // arguments, not the entire list.
3027 Args = InitList->getInits();
3028 NumArgs = InitList->getNumInits();
3029 ListInitializing = true;
3030 }
3031
3032 DeclContext::lookup_result R = S.LookupConstructors(ToRecordDecl);
3033 for (DeclContext::lookup_iterator Con = R.begin(), ConEnd = R.end();
3034 Con != ConEnd; ++Con) {
3035 NamedDecl *D = *Con;
3036 DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess());
3037
3038 // Find the constructor (which may be a template).
3039 CXXConstructorDecl *Constructor = 0;
3040 FunctionTemplateDecl *ConstructorTmpl
3041 = dyn_cast<FunctionTemplateDecl>(D);
3042 if (ConstructorTmpl)
3043 Constructor
3044 = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl());
3045 else
3046 Constructor = cast<CXXConstructorDecl>(D);
3047
3048 bool Usable = !Constructor->isInvalidDecl();
3049 if (ListInitializing)
3050 Usable = Usable && (AllowExplicit || !Constructor->isExplicit());
3051 else
3052 Usable = Usable &&Constructor->isConvertingConstructor(AllowExplicit);
3053 if (Usable) {
3054 bool SuppressUserConversions = !ConstructorsOnly;
3055 if (SuppressUserConversions && ListInitializing) {
3056 SuppressUserConversions = false;
3057 if (NumArgs == 1) {
3058 // If the first argument is (a reference to) the target type,
3059 // suppress conversions.
3060 SuppressUserConversions = isFirstArgumentCompatibleWithType(
3061 S.Context, Constructor, ToType);
3062 }
3063 }
3064 if (ConstructorTmpl)
3065 S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl,
3066 /*ExplicitArgs*/ 0,
3067 llvm::makeArrayRef(Args, NumArgs),
3068 CandidateSet, SuppressUserConversions);
3069 else
3070 // Allow one user-defined conversion when user specifies a
3071 // From->ToType conversion via an static cast (c-style, etc).
3072 S.AddOverloadCandidate(Constructor, FoundDecl,
3073 llvm::makeArrayRef(Args, NumArgs),
3074 CandidateSet, SuppressUserConversions);
3075 }
3076 }
3077 }
3078 }
3079
3080 // Enumerate conversion functions, if we're allowed to.
3081 if (ConstructorsOnly || isa<InitListExpr>(From)) {
3082 } else if (S.RequireCompleteType(From->getLocStart(), From->getType(), 0)) {
3083 // No conversion functions from incomplete types.
3084 } else if (const RecordType *FromRecordType
3085 = From->getType()->getAs<RecordType>()) {
3086 if (CXXRecordDecl *FromRecordDecl
3087 = dyn_cast<CXXRecordDecl>(FromRecordType->getDecl())) {
3088 // Add all of the conversion functions as candidates.
3089 std::pair<CXXRecordDecl::conversion_iterator,
3090 CXXRecordDecl::conversion_iterator>
3091 Conversions = FromRecordDecl->getVisibleConversionFunctions();
3092 for (CXXRecordDecl::conversion_iterator
3093 I = Conversions.first, E = Conversions.second; I != E; ++I) {
3094 DeclAccessPair FoundDecl = I.getPair();
3095 NamedDecl *D = FoundDecl.getDecl();
3096 CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
3097 if (isa<UsingShadowDecl>(D))
3098 D = cast<UsingShadowDecl>(D)->getTargetDecl();
3099
3100 CXXConversionDecl *Conv;
3101 FunctionTemplateDecl *ConvTemplate;
3102 if ((ConvTemplate = dyn_cast<FunctionTemplateDecl>(D)))
3103 Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
3104 else
3105 Conv = cast<CXXConversionDecl>(D);
3106
3107 if (AllowExplicit || !Conv->isExplicit()) {
3108 if (ConvTemplate)
3109 S.AddTemplateConversionCandidate(ConvTemplate, FoundDecl,
3110 ActingContext, From, ToType,
3111 CandidateSet);
3112 else
3113 S.AddConversionCandidate(Conv, FoundDecl, ActingContext,
3114 From, ToType, CandidateSet);
3115 }
3116 }
3117 }
3118 }
3119
3120 bool HadMultipleCandidates = (CandidateSet.size() > 1);
3121
3122 OverloadCandidateSet::iterator Best;
3123 switch (CandidateSet.BestViableFunction(S, From->getLocStart(), Best, true)) {
3124 case OR_Success:
3125 // Record the standard conversion we used and the conversion function.
3126 if (CXXConstructorDecl *Constructor
3127 = dyn_cast<CXXConstructorDecl>(Best->Function)) {
3128 // C++ [over.ics.user]p1:
3129 // If the user-defined conversion is specified by a
3130 // constructor (12.3.1), the initial standard conversion
3131 // sequence converts the source type to the type required by
3132 // the argument of the constructor.
3133 //
3134 QualType ThisType = Constructor->getThisType(S.Context);
3135 if (isa<InitListExpr>(From)) {
3136 // Initializer lists don't have conversions as such.
3137 User.Before.setAsIdentityConversion();
3138 } else {
3139 if (Best->Conversions[0].isEllipsis())
3140 User.EllipsisConversion = true;
3141 else {
3142 User.Before = Best->Conversions[0].Standard;
3143 User.EllipsisConversion = false;
3144 }
3145 }
3146 User.HadMultipleCandidates = HadMultipleCandidates;
3147 User.ConversionFunction = Constructor;
3148 User.FoundConversionFunction = Best->FoundDecl;
3149 User.After.setAsIdentityConversion();
3150 User.After.setFromType(ThisType->getAs<PointerType>()->getPointeeType());
3151 User.After.setAllToTypes(ToType);
3152 return OR_Success;
3153 }
3154 if (CXXConversionDecl *Conversion
3155 = dyn_cast<CXXConversionDecl>(Best->Function)) {
3156 // C++ [over.ics.user]p1:
3157 //
3158 // [...] If the user-defined conversion is specified by a
3159 // conversion function (12.3.2), the initial standard
3160 // conversion sequence converts the source type to the
3161 // implicit object parameter of the conversion function.
3162 User.Before = Best->Conversions[0].Standard;
3163 User.HadMultipleCandidates = HadMultipleCandidates;
3164 User.ConversionFunction = Conversion;
3165 User.FoundConversionFunction = Best->FoundDecl;
3166 User.EllipsisConversion = false;
3167
3168 // C++ [over.ics.user]p2:
3169 // The second standard conversion sequence converts the
3170 // result of the user-defined conversion to the target type
3171 // for the sequence. Since an implicit conversion sequence
3172 // is an initialization, the special rules for
3173 // initialization by user-defined conversion apply when
3174 // selecting the best user-defined conversion for a
3175 // user-defined conversion sequence (see 13.3.3 and
3176 // 13.3.3.1).
3177 User.After = Best->FinalConversion;
3178 return OR_Success;
3179 }
3180 llvm_unreachable("Not a constructor or conversion function?");
3181
3182 case OR_No_Viable_Function:
3183 return OR_No_Viable_Function;
3184 case OR_Deleted:
3185 // No conversion here! We're done.
3186 return OR_Deleted;
3187
3188 case OR_Ambiguous:
3189 return OR_Ambiguous;
3190 }
3191
3192 llvm_unreachable("Invalid OverloadResult!");
3193 }
3194
3195 bool
DiagnoseMultipleUserDefinedConversion(Expr * From,QualType ToType)3196 Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {
3197 ImplicitConversionSequence ICS;
3198 OverloadCandidateSet CandidateSet(From->getExprLoc());
3199 OverloadingResult OvResult =
3200 IsUserDefinedConversion(*this, From, ToType, ICS.UserDefined,
3201 CandidateSet, false);
3202 if (OvResult == OR_Ambiguous)
3203 Diag(From->getLocStart(),
3204 diag::err_typecheck_ambiguous_condition)
3205 << From->getType() << ToType << From->getSourceRange();
3206 else if (OvResult == OR_No_Viable_Function && !CandidateSet.empty()) {
3207 if (!RequireCompleteType(From->getLocStart(), ToType,
3208 diag::err_typecheck_nonviable_condition_incomplete,
3209 From->getType(), From->getSourceRange()))
3210 Diag(From->getLocStart(),
3211 diag::err_typecheck_nonviable_condition)
3212 << From->getType() << From->getSourceRange() << ToType;
3213 }
3214 else
3215 return false;
3216 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, From);
3217 return true;
3218 }
3219
3220 /// \brief Compare the user-defined conversion functions or constructors
3221 /// of two user-defined conversion sequences to determine whether any ordering
3222 /// is possible.
3223 static ImplicitConversionSequence::CompareKind
compareConversionFunctions(Sema & S,FunctionDecl * Function1,FunctionDecl * Function2)3224 compareConversionFunctions(Sema &S,
3225 FunctionDecl *Function1,
3226 FunctionDecl *Function2) {
3227 if (!S.getLangOpts().ObjC1 || !S.getLangOpts().CPlusPlus11)
3228 return ImplicitConversionSequence::Indistinguishable;
3229
3230 // Objective-C++:
3231 // If both conversion functions are implicitly-declared conversions from
3232 // a lambda closure type to a function pointer and a block pointer,
3233 // respectively, always prefer the conversion to a function pointer,
3234 // because the function pointer is more lightweight and is more likely
3235 // to keep code working.
3236 CXXConversionDecl *Conv1 = dyn_cast<CXXConversionDecl>(Function1);
3237 if (!Conv1)
3238 return ImplicitConversionSequence::Indistinguishable;
3239
3240 CXXConversionDecl *Conv2 = dyn_cast<CXXConversionDecl>(Function2);
3241 if (!Conv2)
3242 return ImplicitConversionSequence::Indistinguishable;
3243
3244 if (Conv1->getParent()->isLambda() && Conv2->getParent()->isLambda()) {
3245 bool Block1 = Conv1->getConversionType()->isBlockPointerType();
3246 bool Block2 = Conv2->getConversionType()->isBlockPointerType();
3247 if (Block1 != Block2)
3248 return Block1? ImplicitConversionSequence::Worse
3249 : ImplicitConversionSequence::Better;
3250 }
3251
3252 return ImplicitConversionSequence::Indistinguishable;
3253 }
3254
3255 /// CompareImplicitConversionSequences - Compare two implicit
3256 /// conversion sequences to determine whether one is better than the
3257 /// other or if they are indistinguishable (C++ 13.3.3.2).
3258 static ImplicitConversionSequence::CompareKind
CompareImplicitConversionSequences(Sema & S,const ImplicitConversionSequence & ICS1,const ImplicitConversionSequence & ICS2)3259 CompareImplicitConversionSequences(Sema &S,
3260 const ImplicitConversionSequence& ICS1,
3261 const ImplicitConversionSequence& ICS2)
3262 {
3263 // (C++ 13.3.3.2p2): When comparing the basic forms of implicit
3264 // conversion sequences (as defined in 13.3.3.1)
3265 // -- a standard conversion sequence (13.3.3.1.1) is a better
3266 // conversion sequence than a user-defined conversion sequence or
3267 // an ellipsis conversion sequence, and
3268 // -- a user-defined conversion sequence (13.3.3.1.2) is a better
3269 // conversion sequence than an ellipsis conversion sequence
3270 // (13.3.3.1.3).
3271 //
3272 // C++0x [over.best.ics]p10:
3273 // For the purpose of ranking implicit conversion sequences as
3274 // described in 13.3.3.2, the ambiguous conversion sequence is
3275 // treated as a user-defined sequence that is indistinguishable
3276 // from any other user-defined conversion sequence.
3277 if (ICS1.getKindRank() < ICS2.getKindRank())
3278 return ImplicitConversionSequence::Better;
3279 if (ICS2.getKindRank() < ICS1.getKindRank())
3280 return ImplicitConversionSequence::Worse;
3281
3282 // The following checks require both conversion sequences to be of
3283 // the same kind.
3284 if (ICS1.getKind() != ICS2.getKind())
3285 return ImplicitConversionSequence::Indistinguishable;
3286
3287 ImplicitConversionSequence::CompareKind Result =
3288 ImplicitConversionSequence::Indistinguishable;
3289
3290 // Two implicit conversion sequences of the same form are
3291 // indistinguishable conversion sequences unless one of the
3292 // following rules apply: (C++ 13.3.3.2p3):
3293 if (ICS1.isStandard())
3294 Result = CompareStandardConversionSequences(S,
3295 ICS1.Standard, ICS2.Standard);
3296 else if (ICS1.isUserDefined()) {
3297 // User-defined conversion sequence U1 is a better conversion
3298 // sequence than another user-defined conversion sequence U2 if
3299 // they contain the same user-defined conversion function or
3300 // constructor and if the second standard conversion sequence of
3301 // U1 is better than the second standard conversion sequence of
3302 // U2 (C++ 13.3.3.2p3).
3303 if (ICS1.UserDefined.ConversionFunction ==
3304 ICS2.UserDefined.ConversionFunction)
3305 Result = CompareStandardConversionSequences(S,
3306 ICS1.UserDefined.After,
3307 ICS2.UserDefined.After);
3308 else
3309 Result = compareConversionFunctions(S,
3310 ICS1.UserDefined.ConversionFunction,
3311 ICS2.UserDefined.ConversionFunction);
3312 }
3313
3314 // List-initialization sequence L1 is a better conversion sequence than
3315 // list-initialization sequence L2 if L1 converts to std::initializer_list<X>
3316 // for some X and L2 does not.
3317 if (Result == ImplicitConversionSequence::Indistinguishable &&
3318 !ICS1.isBad() &&
3319 ICS1.isListInitializationSequence() &&
3320 ICS2.isListInitializationSequence()) {
3321 if (ICS1.isStdInitializerListElement() &&
3322 !ICS2.isStdInitializerListElement())
3323 return ImplicitConversionSequence::Better;
3324 if (!ICS1.isStdInitializerListElement() &&
3325 ICS2.isStdInitializerListElement())
3326 return ImplicitConversionSequence::Worse;
3327 }
3328
3329 return Result;
3330 }
3331
hasSimilarType(ASTContext & Context,QualType T1,QualType T2)3332 static bool hasSimilarType(ASTContext &Context, QualType T1, QualType T2) {
3333 while (Context.UnwrapSimilarPointerTypes(T1, T2)) {
3334 Qualifiers Quals;
3335 T1 = Context.getUnqualifiedArrayType(T1, Quals);
3336 T2 = Context.getUnqualifiedArrayType(T2, Quals);
3337 }
3338
3339 return Context.hasSameUnqualifiedType(T1, T2);
3340 }
3341
3342 // Per 13.3.3.2p3, compare the given standard conversion sequences to
3343 // determine if one is a proper subset of the other.
3344 static ImplicitConversionSequence::CompareKind
compareStandardConversionSubsets(ASTContext & Context,const StandardConversionSequence & SCS1,const StandardConversionSequence & SCS2)3345 compareStandardConversionSubsets(ASTContext &Context,
3346 const StandardConversionSequence& SCS1,
3347 const StandardConversionSequence& SCS2) {
3348 ImplicitConversionSequence::CompareKind Result
3349 = ImplicitConversionSequence::Indistinguishable;
3350
3351 // the identity conversion sequence is considered to be a subsequence of
3352 // any non-identity conversion sequence
3353 if (SCS1.isIdentityConversion() && !SCS2.isIdentityConversion())
3354 return ImplicitConversionSequence::Better;
3355 else if (!SCS1.isIdentityConversion() && SCS2.isIdentityConversion())
3356 return ImplicitConversionSequence::Worse;
3357
3358 if (SCS1.Second != SCS2.Second) {
3359 if (SCS1.Second == ICK_Identity)
3360 Result = ImplicitConversionSequence::Better;
3361 else if (SCS2.Second == ICK_Identity)
3362 Result = ImplicitConversionSequence::Worse;
3363 else
3364 return ImplicitConversionSequence::Indistinguishable;
3365 } else if (!hasSimilarType(Context, SCS1.getToType(1), SCS2.getToType(1)))
3366 return ImplicitConversionSequence::Indistinguishable;
3367
3368 if (SCS1.Third == SCS2.Third) {
3369 return Context.hasSameType(SCS1.getToType(2), SCS2.getToType(2))? Result
3370 : ImplicitConversionSequence::Indistinguishable;
3371 }
3372
3373 if (SCS1.Third == ICK_Identity)
3374 return Result == ImplicitConversionSequence::Worse
3375 ? ImplicitConversionSequence::Indistinguishable
3376 : ImplicitConversionSequence::Better;
3377
3378 if (SCS2.Third == ICK_Identity)
3379 return Result == ImplicitConversionSequence::Better
3380 ? ImplicitConversionSequence::Indistinguishable
3381 : ImplicitConversionSequence::Worse;
3382
3383 return ImplicitConversionSequence::Indistinguishable;
3384 }
3385
3386 /// \brief Determine whether one of the given reference bindings is better
3387 /// than the other based on what kind of bindings they are.
isBetterReferenceBindingKind(const StandardConversionSequence & SCS1,const StandardConversionSequence & SCS2)3388 static bool isBetterReferenceBindingKind(const StandardConversionSequence &SCS1,
3389 const StandardConversionSequence &SCS2) {
3390 // C++0x [over.ics.rank]p3b4:
3391 // -- S1 and S2 are reference bindings (8.5.3) and neither refers to an
3392 // implicit object parameter of a non-static member function declared
3393 // without a ref-qualifier, and *either* S1 binds an rvalue reference
3394 // to an rvalue and S2 binds an lvalue reference *or S1 binds an
3395 // lvalue reference to a function lvalue and S2 binds an rvalue
3396 // reference*.
3397 //
3398 // FIXME: Rvalue references. We're going rogue with the above edits,
3399 // because the semantics in the current C++0x working paper (N3225 at the
3400 // time of this writing) break the standard definition of std::forward
3401 // and std::reference_wrapper when dealing with references to functions.
3402 // Proposed wording changes submitted to CWG for consideration.
3403 if (SCS1.BindsImplicitObjectArgumentWithoutRefQualifier ||
3404 SCS2.BindsImplicitObjectArgumentWithoutRefQualifier)
3405 return false;
3406
3407 return (!SCS1.IsLvalueReference && SCS1.BindsToRvalue &&
3408 SCS2.IsLvalueReference) ||
3409 (SCS1.IsLvalueReference && SCS1.BindsToFunctionLvalue &&
3410 !SCS2.IsLvalueReference);
3411 }
3412
3413 /// CompareStandardConversionSequences - Compare two standard
3414 /// conversion sequences to determine whether one is better than the
3415 /// other or if they are indistinguishable (C++ 13.3.3.2p3).
3416 static ImplicitConversionSequence::CompareKind
CompareStandardConversionSequences(Sema & S,const StandardConversionSequence & SCS1,const StandardConversionSequence & SCS2)3417 CompareStandardConversionSequences(Sema &S,
3418 const StandardConversionSequence& SCS1,
3419 const StandardConversionSequence& SCS2)
3420 {
3421 // Standard conversion sequence S1 is a better conversion sequence
3422 // than standard conversion sequence S2 if (C++ 13.3.3.2p3):
3423
3424 // -- S1 is a proper subsequence of S2 (comparing the conversion
3425 // sequences in the canonical form defined by 13.3.3.1.1,
3426 // excluding any Lvalue Transformation; the identity conversion
3427 // sequence is considered to be a subsequence of any
3428 // non-identity conversion sequence) or, if not that,
3429 if (ImplicitConversionSequence::CompareKind CK
3430 = compareStandardConversionSubsets(S.Context, SCS1, SCS2))
3431 return CK;
3432
3433 // -- the rank of S1 is better than the rank of S2 (by the rules
3434 // defined below), or, if not that,
3435 ImplicitConversionRank Rank1 = SCS1.getRank();
3436 ImplicitConversionRank Rank2 = SCS2.getRank();
3437 if (Rank1 < Rank2)
3438 return ImplicitConversionSequence::Better;
3439 else if (Rank2 < Rank1)
3440 return ImplicitConversionSequence::Worse;
3441
3442 // (C++ 13.3.3.2p4): Two conversion sequences with the same rank
3443 // are indistinguishable unless one of the following rules
3444 // applies:
3445
3446 // A conversion that is not a conversion of a pointer, or
3447 // pointer to member, to bool is better than another conversion
3448 // that is such a conversion.
3449 if (SCS1.isPointerConversionToBool() != SCS2.isPointerConversionToBool())
3450 return SCS2.isPointerConversionToBool()
3451 ? ImplicitConversionSequence::Better
3452 : ImplicitConversionSequence::Worse;
3453
3454 // C++ [over.ics.rank]p4b2:
3455 //
3456 // If class B is derived directly or indirectly from class A,
3457 // conversion of B* to A* is better than conversion of B* to
3458 // void*, and conversion of A* to void* is better than conversion
3459 // of B* to void*.
3460 bool SCS1ConvertsToVoid
3461 = SCS1.isPointerConversionToVoidPointer(S.Context);
3462 bool SCS2ConvertsToVoid
3463 = SCS2.isPointerConversionToVoidPointer(S.Context);
3464 if (SCS1ConvertsToVoid != SCS2ConvertsToVoid) {
3465 // Exactly one of the conversion sequences is a conversion to
3466 // a void pointer; it's the worse conversion.
3467 return SCS2ConvertsToVoid ? ImplicitConversionSequence::Better
3468 : ImplicitConversionSequence::Worse;
3469 } else if (!SCS1ConvertsToVoid && !SCS2ConvertsToVoid) {
3470 // Neither conversion sequence converts to a void pointer; compare
3471 // their derived-to-base conversions.
3472 if (ImplicitConversionSequence::CompareKind DerivedCK
3473 = CompareDerivedToBaseConversions(S, SCS1, SCS2))
3474 return DerivedCK;
3475 } else if (SCS1ConvertsToVoid && SCS2ConvertsToVoid &&
3476 !S.Context.hasSameType(SCS1.getFromType(), SCS2.getFromType())) {
3477 // Both conversion sequences are conversions to void
3478 // pointers. Compare the source types to determine if there's an
3479 // inheritance relationship in their sources.
3480 QualType FromType1 = SCS1.getFromType();
3481 QualType FromType2 = SCS2.getFromType();
3482
3483 // Adjust the types we're converting from via the array-to-pointer
3484 // conversion, if we need to.
3485 if (SCS1.First == ICK_Array_To_Pointer)
3486 FromType1 = S.Context.getArrayDecayedType(FromType1);
3487 if (SCS2.First == ICK_Array_To_Pointer)
3488 FromType2 = S.Context.getArrayDecayedType(FromType2);
3489
3490 QualType FromPointee1 = FromType1->getPointeeType().getUnqualifiedType();
3491 QualType FromPointee2 = FromType2->getPointeeType().getUnqualifiedType();
3492
3493 if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3494 return ImplicitConversionSequence::Better;
3495 else if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3496 return ImplicitConversionSequence::Worse;
3497
3498 // Objective-C++: If one interface is more specific than the
3499 // other, it is the better one.
3500 const ObjCObjectPointerType* FromObjCPtr1
3501 = FromType1->getAs<ObjCObjectPointerType>();
3502 const ObjCObjectPointerType* FromObjCPtr2
3503 = FromType2->getAs<ObjCObjectPointerType>();
3504 if (FromObjCPtr1 && FromObjCPtr2) {
3505 bool AssignLeft = S.Context.canAssignObjCInterfaces(FromObjCPtr1,
3506 FromObjCPtr2);
3507 bool AssignRight = S.Context.canAssignObjCInterfaces(FromObjCPtr2,
3508 FromObjCPtr1);
3509 if (AssignLeft != AssignRight) {
3510 return AssignLeft? ImplicitConversionSequence::Better
3511 : ImplicitConversionSequence::Worse;
3512 }
3513 }
3514 }
3515
3516 // Compare based on qualification conversions (C++ 13.3.3.2p3,
3517 // bullet 3).
3518 if (ImplicitConversionSequence::CompareKind QualCK
3519 = CompareQualificationConversions(S, SCS1, SCS2))
3520 return QualCK;
3521
3522 if (SCS1.ReferenceBinding && SCS2.ReferenceBinding) {
3523 // Check for a better reference binding based on the kind of bindings.
3524 if (isBetterReferenceBindingKind(SCS1, SCS2))
3525 return ImplicitConversionSequence::Better;
3526 else if (isBetterReferenceBindingKind(SCS2, SCS1))
3527 return ImplicitConversionSequence::Worse;
3528
3529 // C++ [over.ics.rank]p3b4:
3530 // -- S1 and S2 are reference bindings (8.5.3), and the types to
3531 // which the references refer are the same type except for
3532 // top-level cv-qualifiers, and the type to which the reference
3533 // initialized by S2 refers is more cv-qualified than the type
3534 // to which the reference initialized by S1 refers.
3535 QualType T1 = SCS1.getToType(2);
3536 QualType T2 = SCS2.getToType(2);
3537 T1 = S.Context.getCanonicalType(T1);
3538 T2 = S.Context.getCanonicalType(T2);
3539 Qualifiers T1Quals, T2Quals;
3540 QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals);
3541 QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals);
3542 if (UnqualT1 == UnqualT2) {
3543 // Objective-C++ ARC: If the references refer to objects with different
3544 // lifetimes, prefer bindings that don't change lifetime.
3545 if (SCS1.ObjCLifetimeConversionBinding !=
3546 SCS2.ObjCLifetimeConversionBinding) {
3547 return SCS1.ObjCLifetimeConversionBinding
3548 ? ImplicitConversionSequence::Worse
3549 : ImplicitConversionSequence::Better;
3550 }
3551
3552 // If the type is an array type, promote the element qualifiers to the
3553 // type for comparison.
3554 if (isa<ArrayType>(T1) && T1Quals)
3555 T1 = S.Context.getQualifiedType(UnqualT1, T1Quals);
3556 if (isa<ArrayType>(T2) && T2Quals)
3557 T2 = S.Context.getQualifiedType(UnqualT2, T2Quals);
3558 if (T2.isMoreQualifiedThan(T1))
3559 return ImplicitConversionSequence::Better;
3560 else if (T1.isMoreQualifiedThan(T2))
3561 return ImplicitConversionSequence::Worse;
3562 }
3563 }
3564
3565 // In Microsoft mode, prefer an integral conversion to a
3566 // floating-to-integral conversion if the integral conversion
3567 // is between types of the same size.
3568 // For example:
3569 // void f(float);
3570 // void f(int);
3571 // int main {
3572 // long a;
3573 // f(a);
3574 // }
3575 // Here, MSVC will call f(int) instead of generating a compile error
3576 // as clang will do in standard mode.
3577 if (S.getLangOpts().MicrosoftMode &&
3578 SCS1.Second == ICK_Integral_Conversion &&
3579 SCS2.Second == ICK_Floating_Integral &&
3580 S.Context.getTypeSize(SCS1.getFromType()) ==
3581 S.Context.getTypeSize(SCS1.getToType(2)))
3582 return ImplicitConversionSequence::Better;
3583
3584 return ImplicitConversionSequence::Indistinguishable;
3585 }
3586
3587 /// CompareQualificationConversions - Compares two standard conversion
3588 /// sequences to determine whether they can be ranked based on their
3589 /// qualification conversions (C++ 13.3.3.2p3 bullet 3).
3590 ImplicitConversionSequence::CompareKind
CompareQualificationConversions(Sema & S,const StandardConversionSequence & SCS1,const StandardConversionSequence & SCS2)3591 CompareQualificationConversions(Sema &S,
3592 const StandardConversionSequence& SCS1,
3593 const StandardConversionSequence& SCS2) {
3594 // C++ 13.3.3.2p3:
3595 // -- S1 and S2 differ only in their qualification conversion and
3596 // yield similar types T1 and T2 (C++ 4.4), respectively, and the
3597 // cv-qualification signature of type T1 is a proper subset of
3598 // the cv-qualification signature of type T2, and S1 is not the
3599 // deprecated string literal array-to-pointer conversion (4.2).
3600 if (SCS1.First != SCS2.First || SCS1.Second != SCS2.Second ||
3601 SCS1.Third != SCS2.Third || SCS1.Third != ICK_Qualification)
3602 return ImplicitConversionSequence::Indistinguishable;
3603
3604 // FIXME: the example in the standard doesn't use a qualification
3605 // conversion (!)
3606 QualType T1 = SCS1.getToType(2);
3607 QualType T2 = SCS2.getToType(2);
3608 T1 = S.Context.getCanonicalType(T1);
3609 T2 = S.Context.getCanonicalType(T2);
3610 Qualifiers T1Quals, T2Quals;
3611 QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals);
3612 QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals);
3613
3614 // If the types are the same, we won't learn anything by unwrapped
3615 // them.
3616 if (UnqualT1 == UnqualT2)
3617 return ImplicitConversionSequence::Indistinguishable;
3618
3619 // If the type is an array type, promote the element qualifiers to the type
3620 // for comparison.
3621 if (isa<ArrayType>(T1) && T1Quals)
3622 T1 = S.Context.getQualifiedType(UnqualT1, T1Quals);
3623 if (isa<ArrayType>(T2) && T2Quals)
3624 T2 = S.Context.getQualifiedType(UnqualT2, T2Quals);
3625
3626 ImplicitConversionSequence::CompareKind Result
3627 = ImplicitConversionSequence::Indistinguishable;
3628
3629 // Objective-C++ ARC:
3630 // Prefer qualification conversions not involving a change in lifetime
3631 // to qualification conversions that do not change lifetime.
3632 if (SCS1.QualificationIncludesObjCLifetime !=
3633 SCS2.QualificationIncludesObjCLifetime) {
3634 Result = SCS1.QualificationIncludesObjCLifetime
3635 ? ImplicitConversionSequence::Worse
3636 : ImplicitConversionSequence::Better;
3637 }
3638
3639 while (S.Context.UnwrapSimilarPointerTypes(T1, T2)) {
3640 // Within each iteration of the loop, we check the qualifiers to
3641 // determine if this still looks like a qualification
3642 // conversion. Then, if all is well, we unwrap one more level of
3643 // pointers or pointers-to-members and do it all again
3644 // until there are no more pointers or pointers-to-members left
3645 // to unwrap. This essentially mimics what
3646 // IsQualificationConversion does, but here we're checking for a
3647 // strict subset of qualifiers.
3648 if (T1.getCVRQualifiers() == T2.getCVRQualifiers())
3649 // The qualifiers are the same, so this doesn't tell us anything
3650 // about how the sequences rank.
3651 ;
3652 else if (T2.isMoreQualifiedThan(T1)) {
3653 // T1 has fewer qualifiers, so it could be the better sequence.
3654 if (Result == ImplicitConversionSequence::Worse)
3655 // Neither has qualifiers that are a subset of the other's
3656 // qualifiers.
3657 return ImplicitConversionSequence::Indistinguishable;
3658
3659 Result = ImplicitConversionSequence::Better;
3660 } else if (T1.isMoreQualifiedThan(T2)) {
3661 // T2 has fewer qualifiers, so it could be the better sequence.
3662 if (Result == ImplicitConversionSequence::Better)
3663 // Neither has qualifiers that are a subset of the other's
3664 // qualifiers.
3665 return ImplicitConversionSequence::Indistinguishable;
3666
3667 Result = ImplicitConversionSequence::Worse;
3668 } else {
3669 // Qualifiers are disjoint.
3670 return ImplicitConversionSequence::Indistinguishable;
3671 }
3672
3673 // If the types after this point are equivalent, we're done.
3674 if (S.Context.hasSameUnqualifiedType(T1, T2))
3675 break;
3676 }
3677
3678 // Check that the winning standard conversion sequence isn't using
3679 // the deprecated string literal array to pointer conversion.
3680 switch (Result) {
3681 case ImplicitConversionSequence::Better:
3682 if (SCS1.DeprecatedStringLiteralToCharPtr)
3683 Result = ImplicitConversionSequence::Indistinguishable;
3684 break;
3685
3686 case ImplicitConversionSequence::Indistinguishable:
3687 break;
3688
3689 case ImplicitConversionSequence::Worse:
3690 if (SCS2.DeprecatedStringLiteralToCharPtr)
3691 Result = ImplicitConversionSequence::Indistinguishable;
3692 break;
3693 }
3694
3695 return Result;
3696 }
3697
3698 /// CompareDerivedToBaseConversions - Compares two standard conversion
3699 /// sequences to determine whether they can be ranked based on their
3700 /// various kinds of derived-to-base conversions (C++
3701 /// [over.ics.rank]p4b3). As part of these checks, we also look at
3702 /// conversions between Objective-C interface types.
3703 ImplicitConversionSequence::CompareKind
CompareDerivedToBaseConversions(Sema & S,const StandardConversionSequence & SCS1,const StandardConversionSequence & SCS2)3704 CompareDerivedToBaseConversions(Sema &S,
3705 const StandardConversionSequence& SCS1,
3706 const StandardConversionSequence& SCS2) {
3707 QualType FromType1 = SCS1.getFromType();
3708 QualType ToType1 = SCS1.getToType(1);
3709 QualType FromType2 = SCS2.getFromType();
3710 QualType ToType2 = SCS2.getToType(1);
3711
3712 // Adjust the types we're converting from via the array-to-pointer
3713 // conversion, if we need to.
3714 if (SCS1.First == ICK_Array_To_Pointer)
3715 FromType1 = S.Context.getArrayDecayedType(FromType1);
3716 if (SCS2.First == ICK_Array_To_Pointer)
3717 FromType2 = S.Context.getArrayDecayedType(FromType2);
3718
3719 // Canonicalize all of the types.
3720 FromType1 = S.Context.getCanonicalType(FromType1);
3721 ToType1 = S.Context.getCanonicalType(ToType1);
3722 FromType2 = S.Context.getCanonicalType(FromType2);
3723 ToType2 = S.Context.getCanonicalType(ToType2);
3724
3725 // C++ [over.ics.rank]p4b3:
3726 //
3727 // If class B is derived directly or indirectly from class A and
3728 // class C is derived directly or indirectly from B,
3729 //
3730 // Compare based on pointer conversions.
3731 if (SCS1.Second == ICK_Pointer_Conversion &&
3732 SCS2.Second == ICK_Pointer_Conversion &&
3733 /*FIXME: Remove if Objective-C id conversions get their own rank*/
3734 FromType1->isPointerType() && FromType2->isPointerType() &&
3735 ToType1->isPointerType() && ToType2->isPointerType()) {
3736 QualType FromPointee1
3737 = FromType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3738 QualType ToPointee1
3739 = ToType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3740 QualType FromPointee2
3741 = FromType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3742 QualType ToPointee2
3743 = ToType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3744
3745 // -- conversion of C* to B* is better than conversion of C* to A*,
3746 if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
3747 if (S.IsDerivedFrom(ToPointee1, ToPointee2))
3748 return ImplicitConversionSequence::Better;
3749 else if (S.IsDerivedFrom(ToPointee2, ToPointee1))
3750 return ImplicitConversionSequence::Worse;
3751 }
3752
3753 // -- conversion of B* to A* is better than conversion of C* to A*,
3754 if (FromPointee1 != FromPointee2 && ToPointee1 == ToPointee2) {
3755 if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3756 return ImplicitConversionSequence::Better;
3757 else if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3758 return ImplicitConversionSequence::Worse;
3759 }
3760 } else if (SCS1.Second == ICK_Pointer_Conversion &&
3761 SCS2.Second == ICK_Pointer_Conversion) {
3762 const ObjCObjectPointerType *FromPtr1
3763 = FromType1->getAs<ObjCObjectPointerType>();
3764 const ObjCObjectPointerType *FromPtr2
3765 = FromType2->getAs<ObjCObjectPointerType>();
3766 const ObjCObjectPointerType *ToPtr1
3767 = ToType1->getAs<ObjCObjectPointerType>();
3768 const ObjCObjectPointerType *ToPtr2
3769 = ToType2->getAs<ObjCObjectPointerType>();
3770
3771 if (FromPtr1 && FromPtr2 && ToPtr1 && ToPtr2) {
3772 // Apply the same conversion ranking rules for Objective-C pointer types
3773 // that we do for C++ pointers to class types. However, we employ the
3774 // Objective-C pseudo-subtyping relationship used for assignment of
3775 // Objective-C pointer types.
3776 bool FromAssignLeft
3777 = S.Context.canAssignObjCInterfaces(FromPtr1, FromPtr2);
3778 bool FromAssignRight
3779 = S.Context.canAssignObjCInterfaces(FromPtr2, FromPtr1);
3780 bool ToAssignLeft
3781 = S.Context.canAssignObjCInterfaces(ToPtr1, ToPtr2);
3782 bool ToAssignRight
3783 = S.Context.canAssignObjCInterfaces(ToPtr2, ToPtr1);
3784
3785 // A conversion to an a non-id object pointer type or qualified 'id'
3786 // type is better than a conversion to 'id'.
3787 if (ToPtr1->isObjCIdType() &&
3788 (ToPtr2->isObjCQualifiedIdType() || ToPtr2->getInterfaceDecl()))
3789 return ImplicitConversionSequence::Worse;
3790 if (ToPtr2->isObjCIdType() &&
3791 (ToPtr1->isObjCQualifiedIdType() || ToPtr1->getInterfaceDecl()))
3792 return ImplicitConversionSequence::Better;
3793
3794 // A conversion to a non-id object pointer type is better than a
3795 // conversion to a qualified 'id' type
3796 if (ToPtr1->isObjCQualifiedIdType() && ToPtr2->getInterfaceDecl())
3797 return ImplicitConversionSequence::Worse;
3798 if (ToPtr2->isObjCQualifiedIdType() && ToPtr1->getInterfaceDecl())
3799 return ImplicitConversionSequence::Better;
3800
3801 // A conversion to an a non-Class object pointer type or qualified 'Class'
3802 // type is better than a conversion to 'Class'.
3803 if (ToPtr1->isObjCClassType() &&
3804 (ToPtr2->isObjCQualifiedClassType() || ToPtr2->getInterfaceDecl()))
3805 return ImplicitConversionSequence::Worse;
3806 if (ToPtr2->isObjCClassType() &&
3807 (ToPtr1->isObjCQualifiedClassType() || ToPtr1->getInterfaceDecl()))
3808 return ImplicitConversionSequence::Better;
3809
3810 // A conversion to a non-Class object pointer type is better than a
3811 // conversion to a qualified 'Class' type.
3812 if (ToPtr1->isObjCQualifiedClassType() && ToPtr2->getInterfaceDecl())
3813 return ImplicitConversionSequence::Worse;
3814 if (ToPtr2->isObjCQualifiedClassType() && ToPtr1->getInterfaceDecl())
3815 return ImplicitConversionSequence::Better;
3816
3817 // -- "conversion of C* to B* is better than conversion of C* to A*,"
3818 if (S.Context.hasSameType(FromType1, FromType2) &&
3819 !FromPtr1->isObjCIdType() && !FromPtr1->isObjCClassType() &&
3820 (ToAssignLeft != ToAssignRight))
3821 return ToAssignLeft? ImplicitConversionSequence::Worse
3822 : ImplicitConversionSequence::Better;
3823
3824 // -- "conversion of B* to A* is better than conversion of C* to A*,"
3825 if (S.Context.hasSameUnqualifiedType(ToType1, ToType2) &&
3826 (FromAssignLeft != FromAssignRight))
3827 return FromAssignLeft? ImplicitConversionSequence::Better
3828 : ImplicitConversionSequence::Worse;
3829 }
3830 }
3831
3832 // Ranking of member-pointer types.
3833 if (SCS1.Second == ICK_Pointer_Member && SCS2.Second == ICK_Pointer_Member &&
3834 FromType1->isMemberPointerType() && FromType2->isMemberPointerType() &&
3835 ToType1->isMemberPointerType() && ToType2->isMemberPointerType()) {
3836 const MemberPointerType * FromMemPointer1 =
3837 FromType1->getAs<MemberPointerType>();
3838 const MemberPointerType * ToMemPointer1 =
3839 ToType1->getAs<MemberPointerType>();
3840 const MemberPointerType * FromMemPointer2 =
3841 FromType2->getAs<MemberPointerType>();
3842 const MemberPointerType * ToMemPointer2 =
3843 ToType2->getAs<MemberPointerType>();
3844 const Type *FromPointeeType1 = FromMemPointer1->getClass();
3845 const Type *ToPointeeType1 = ToMemPointer1->getClass();
3846 const Type *FromPointeeType2 = FromMemPointer2->getClass();
3847 const Type *ToPointeeType2 = ToMemPointer2->getClass();
3848 QualType FromPointee1 = QualType(FromPointeeType1, 0).getUnqualifiedType();
3849 QualType ToPointee1 = QualType(ToPointeeType1, 0).getUnqualifiedType();
3850 QualType FromPointee2 = QualType(FromPointeeType2, 0).getUnqualifiedType();
3851 QualType ToPointee2 = QualType(ToPointeeType2, 0).getUnqualifiedType();
3852 // conversion of A::* to B::* is better than conversion of A::* to C::*,
3853 if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
3854 if (S.IsDerivedFrom(ToPointee1, ToPointee2))
3855 return ImplicitConversionSequence::Worse;
3856 else if (S.IsDerivedFrom(ToPointee2, ToPointee1))
3857 return ImplicitConversionSequence::Better;
3858 }
3859 // conversion of B::* to C::* is better than conversion of A::* to C::*
3860 if (ToPointee1 == ToPointee2 && FromPointee1 != FromPointee2) {
3861 if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3862 return ImplicitConversionSequence::Better;
3863 else if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3864 return ImplicitConversionSequence::Worse;
3865 }
3866 }
3867
3868 if (SCS1.Second == ICK_Derived_To_Base) {
3869 // -- conversion of C to B is better than conversion of C to A,
3870 // -- binding of an expression of type C to a reference of type
3871 // B& is better than binding an expression of type C to a
3872 // reference of type A&,
3873 if (S.Context.hasSameUnqualifiedType(FromType1, FromType2) &&
3874 !S.Context.hasSameUnqualifiedType(ToType1, ToType2)) {
3875 if (S.IsDerivedFrom(ToType1, ToType2))
3876 return ImplicitConversionSequence::Better;
3877 else if (S.IsDerivedFrom(ToType2, ToType1))
3878 return ImplicitConversionSequence::Worse;
3879 }
3880
3881 // -- conversion of B to A is better than conversion of C to A.
3882 // -- binding of an expression of type B to a reference of type
3883 // A& is better than binding an expression of type C to a
3884 // reference of type A&,
3885 if (!S.Context.hasSameUnqualifiedType(FromType1, FromType2) &&
3886 S.Context.hasSameUnqualifiedType(ToType1, ToType2)) {
3887 if (S.IsDerivedFrom(FromType2, FromType1))
3888 return ImplicitConversionSequence::Better;
3889 else if (S.IsDerivedFrom(FromType1, FromType2))
3890 return ImplicitConversionSequence::Worse;
3891 }
3892 }
3893
3894 return ImplicitConversionSequence::Indistinguishable;
3895 }
3896
3897 /// \brief Determine whether the given type is valid, e.g., it is not an invalid
3898 /// C++ class.
isTypeValid(QualType T)3899 static bool isTypeValid(QualType T) {
3900 if (CXXRecordDecl *Record = T->getAsCXXRecordDecl())
3901 return !Record->isInvalidDecl();
3902
3903 return true;
3904 }
3905
3906 /// CompareReferenceRelationship - Compare the two types T1 and T2 to
3907 /// determine whether they are reference-related,
3908 /// reference-compatible, reference-compatible with added
3909 /// qualification, or incompatible, for use in C++ initialization by
3910 /// reference (C++ [dcl.ref.init]p4). Neither type can be a reference
3911 /// type, and the first type (T1) is the pointee type of the reference
3912 /// type being initialized.
3913 Sema::ReferenceCompareResult
CompareReferenceRelationship(SourceLocation Loc,QualType OrigT1,QualType OrigT2,bool & DerivedToBase,bool & ObjCConversion,bool & ObjCLifetimeConversion)3914 Sema::CompareReferenceRelationship(SourceLocation Loc,
3915 QualType OrigT1, QualType OrigT2,
3916 bool &DerivedToBase,
3917 bool &ObjCConversion,
3918 bool &ObjCLifetimeConversion) {
3919 assert(!OrigT1->isReferenceType() &&
3920 "T1 must be the pointee type of the reference type");
3921 assert(!OrigT2->isReferenceType() && "T2 cannot be a reference type");
3922
3923 QualType T1 = Context.getCanonicalType(OrigT1);
3924 QualType T2 = Context.getCanonicalType(OrigT2);
3925 Qualifiers T1Quals, T2Quals;
3926 QualType UnqualT1 = Context.getUnqualifiedArrayType(T1, T1Quals);
3927 QualType UnqualT2 = Context.getUnqualifiedArrayType(T2, T2Quals);
3928
3929 // C++ [dcl.init.ref]p4:
3930 // Given types "cv1 T1" and "cv2 T2," "cv1 T1" is
3931 // reference-related to "cv2 T2" if T1 is the same type as T2, or
3932 // T1 is a base class of T2.
3933 DerivedToBase = false;
3934 ObjCConversion = false;
3935 ObjCLifetimeConversion = false;
3936 if (UnqualT1 == UnqualT2) {
3937 // Nothing to do.
3938 } else if (!RequireCompleteType(Loc, OrigT2, 0) &&
3939 isTypeValid(UnqualT1) && isTypeValid(UnqualT2) &&
3940 IsDerivedFrom(UnqualT2, UnqualT1))
3941 DerivedToBase = true;
3942 else if (UnqualT1->isObjCObjectOrInterfaceType() &&
3943 UnqualT2->isObjCObjectOrInterfaceType() &&
3944 Context.canBindObjCObjectType(UnqualT1, UnqualT2))
3945 ObjCConversion = true;
3946 else
3947 return Ref_Incompatible;
3948
3949 // At this point, we know that T1 and T2 are reference-related (at
3950 // least).
3951
3952 // If the type is an array type, promote the element qualifiers to the type
3953 // for comparison.
3954 if (isa<ArrayType>(T1) && T1Quals)
3955 T1 = Context.getQualifiedType(UnqualT1, T1Quals);
3956 if (isa<ArrayType>(T2) && T2Quals)
3957 T2 = Context.getQualifiedType(UnqualT2, T2Quals);
3958
3959 // C++ [dcl.init.ref]p4:
3960 // "cv1 T1" is reference-compatible with "cv2 T2" if T1 is
3961 // reference-related to T2 and cv1 is the same cv-qualification
3962 // as, or greater cv-qualification than, cv2. For purposes of
3963 // overload resolution, cases for which cv1 is greater
3964 // cv-qualification than cv2 are identified as
3965 // reference-compatible with added qualification (see 13.3.3.2).
3966 //
3967 // Note that we also require equivalence of Objective-C GC and address-space
3968 // qualifiers when performing these computations, so that e.g., an int in
3969 // address space 1 is not reference-compatible with an int in address
3970 // space 2.
3971 if (T1Quals.getObjCLifetime() != T2Quals.getObjCLifetime() &&
3972 T1Quals.compatiblyIncludesObjCLifetime(T2Quals)) {
3973 T1Quals.removeObjCLifetime();
3974 T2Quals.removeObjCLifetime();
3975 ObjCLifetimeConversion = true;
3976 }
3977
3978 if (T1Quals == T2Quals)
3979 return Ref_Compatible;
3980 else if (T1Quals.compatiblyIncludes(T2Quals))
3981 return Ref_Compatible_With_Added_Qualification;
3982 else
3983 return Ref_Related;
3984 }
3985
3986 /// \brief Look for a user-defined conversion to an value reference-compatible
3987 /// with DeclType. Return true if something definite is found.
3988 static bool
FindConversionForRefInit(Sema & S,ImplicitConversionSequence & ICS,QualType DeclType,SourceLocation DeclLoc,Expr * Init,QualType T2,bool AllowRvalues,bool AllowExplicit)3989 FindConversionForRefInit(Sema &S, ImplicitConversionSequence &ICS,
3990 QualType DeclType, SourceLocation DeclLoc,
3991 Expr *Init, QualType T2, bool AllowRvalues,
3992 bool AllowExplicit) {
3993 assert(T2->isRecordType() && "Can only find conversions of record types.");
3994 CXXRecordDecl *T2RecordDecl
3995 = dyn_cast<CXXRecordDecl>(T2->getAs<RecordType>()->getDecl());
3996
3997 OverloadCandidateSet CandidateSet(DeclLoc);
3998 std::pair<CXXRecordDecl::conversion_iterator,
3999 CXXRecordDecl::conversion_iterator>
4000 Conversions = T2RecordDecl->getVisibleConversionFunctions();
4001 for (CXXRecordDecl::conversion_iterator
4002 I = Conversions.first, E = Conversions.second; I != E; ++I) {
4003 NamedDecl *D = *I;
4004 CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(D->getDeclContext());
4005 if (isa<UsingShadowDecl>(D))
4006 D = cast<UsingShadowDecl>(D)->getTargetDecl();
4007
4008 FunctionTemplateDecl *ConvTemplate
4009 = dyn_cast<FunctionTemplateDecl>(D);
4010 CXXConversionDecl *Conv;
4011 if (ConvTemplate)
4012 Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
4013 else
4014 Conv = cast<CXXConversionDecl>(D);
4015
4016 // If this is an explicit conversion, and we're not allowed to consider
4017 // explicit conversions, skip it.
4018 if (!AllowExplicit && Conv->isExplicit())
4019 continue;
4020
4021 if (AllowRvalues) {
4022 bool DerivedToBase = false;
4023 bool ObjCConversion = false;
4024 bool ObjCLifetimeConversion = false;
4025
4026 // If we are initializing an rvalue reference, don't permit conversion
4027 // functions that return lvalues.
4028 if (!ConvTemplate && DeclType->isRValueReferenceType()) {
4029 const ReferenceType *RefType
4030 = Conv->getConversionType()->getAs<LValueReferenceType>();
4031 if (RefType && !RefType->getPointeeType()->isFunctionType())
4032 continue;
4033 }
4034
4035 if (!ConvTemplate &&
4036 S.CompareReferenceRelationship(
4037 DeclLoc,
4038 Conv->getConversionType().getNonReferenceType()
4039 .getUnqualifiedType(),
4040 DeclType.getNonReferenceType().getUnqualifiedType(),
4041 DerivedToBase, ObjCConversion, ObjCLifetimeConversion) ==
4042 Sema::Ref_Incompatible)
4043 continue;
4044 } else {
4045 // If the conversion function doesn't return a reference type,
4046 // it can't be considered for this conversion. An rvalue reference
4047 // is only acceptable if its referencee is a function type.
4048
4049 const ReferenceType *RefType =
4050 Conv->getConversionType()->getAs<ReferenceType>();
4051 if (!RefType ||
4052 (!RefType->isLValueReferenceType() &&
4053 !RefType->getPointeeType()->isFunctionType()))
4054 continue;
4055 }
4056
4057 if (ConvTemplate)
4058 S.AddTemplateConversionCandidate(ConvTemplate, I.getPair(), ActingDC,
4059 Init, DeclType, CandidateSet);
4060 else
4061 S.AddConversionCandidate(Conv, I.getPair(), ActingDC, Init,
4062 DeclType, CandidateSet);
4063 }
4064
4065 bool HadMultipleCandidates = (CandidateSet.size() > 1);
4066
4067 OverloadCandidateSet::iterator Best;
4068 switch (CandidateSet.BestViableFunction(S, DeclLoc, Best, true)) {
4069 case OR_Success:
4070 // C++ [over.ics.ref]p1:
4071 //
4072 // [...] If the parameter binds directly to the result of
4073 // applying a conversion function to the argument
4074 // expression, the implicit conversion sequence is a
4075 // user-defined conversion sequence (13.3.3.1.2), with the
4076 // second standard conversion sequence either an identity
4077 // conversion or, if the conversion function returns an
4078 // entity of a type that is a derived class of the parameter
4079 // type, a derived-to-base Conversion.
4080 if (!Best->FinalConversion.DirectBinding)
4081 return false;
4082
4083 ICS.setUserDefined();
4084 ICS.UserDefined.Before = Best->Conversions[0].Standard;
4085 ICS.UserDefined.After = Best->FinalConversion;
4086 ICS.UserDefined.HadMultipleCandidates = HadMultipleCandidates;
4087 ICS.UserDefined.ConversionFunction = Best->Function;
4088 ICS.UserDefined.FoundConversionFunction = Best->FoundDecl;
4089 ICS.UserDefined.EllipsisConversion = false;
4090 assert(ICS.UserDefined.After.ReferenceBinding &&
4091 ICS.UserDefined.After.DirectBinding &&
4092 "Expected a direct reference binding!");
4093 return true;
4094
4095 case OR_Ambiguous:
4096 ICS.setAmbiguous();
4097 for (OverloadCandidateSet::iterator Cand = CandidateSet.begin();
4098 Cand != CandidateSet.end(); ++Cand)
4099 if (Cand->Viable)
4100 ICS.Ambiguous.addConversion(Cand->Function);
4101 return true;
4102
4103 case OR_No_Viable_Function:
4104 case OR_Deleted:
4105 // There was no suitable conversion, or we found a deleted
4106 // conversion; continue with other checks.
4107 return false;
4108 }
4109
4110 llvm_unreachable("Invalid OverloadResult!");
4111 }
4112
4113 /// \brief Compute an implicit conversion sequence for reference
4114 /// initialization.
4115 static ImplicitConversionSequence
TryReferenceInit(Sema & S,Expr * Init,QualType DeclType,SourceLocation DeclLoc,bool SuppressUserConversions,bool AllowExplicit)4116 TryReferenceInit(Sema &S, Expr *Init, QualType DeclType,
4117 SourceLocation DeclLoc,
4118 bool SuppressUserConversions,
4119 bool AllowExplicit) {
4120 assert(DeclType->isReferenceType() && "Reference init needs a reference");
4121
4122 // Most paths end in a failed conversion.
4123 ImplicitConversionSequence ICS;
4124 ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType);
4125
4126 QualType T1 = DeclType->getAs<ReferenceType>()->getPointeeType();
4127 QualType T2 = Init->getType();
4128
4129 // If the initializer is the address of an overloaded function, try
4130 // to resolve the overloaded function. If all goes well, T2 is the
4131 // type of the resulting function.
4132 if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) {
4133 DeclAccessPair Found;
4134 if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(Init, DeclType,
4135 false, Found))
4136 T2 = Fn->getType();
4137 }
4138
4139 // Compute some basic properties of the types and the initializer.
4140 bool isRValRef = DeclType->isRValueReferenceType();
4141 bool DerivedToBase = false;
4142 bool ObjCConversion = false;
4143 bool ObjCLifetimeConversion = false;
4144 Expr::Classification InitCategory = Init->Classify(S.Context);
4145 Sema::ReferenceCompareResult RefRelationship
4146 = S.CompareReferenceRelationship(DeclLoc, T1, T2, DerivedToBase,
4147 ObjCConversion, ObjCLifetimeConversion);
4148
4149
4150 // C++0x [dcl.init.ref]p5:
4151 // A reference to type "cv1 T1" is initialized by an expression
4152 // of type "cv2 T2" as follows:
4153
4154 // -- If reference is an lvalue reference and the initializer expression
4155 if (!isRValRef) {
4156 // -- is an lvalue (but is not a bit-field), and "cv1 T1" is
4157 // reference-compatible with "cv2 T2," or
4158 //
4159 // Per C++ [over.ics.ref]p4, we don't check the bit-field property here.
4160 if (InitCategory.isLValue() &&
4161 RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification) {
4162 // C++ [over.ics.ref]p1:
4163 // When a parameter of reference type binds directly (8.5.3)
4164 // to an argument expression, the implicit conversion sequence
4165 // is the identity conversion, unless the argument expression
4166 // has a type that is a derived class of the parameter type,
4167 // in which case the implicit conversion sequence is a
4168 // derived-to-base Conversion (13.3.3.1).
4169 ICS.setStandard();
4170 ICS.Standard.First = ICK_Identity;
4171 ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base
4172 : ObjCConversion? ICK_Compatible_Conversion
4173 : ICK_Identity;
4174 ICS.Standard.Third = ICK_Identity;
4175 ICS.Standard.FromTypePtr = T2.getAsOpaquePtr();
4176 ICS.Standard.setToType(0, T2);
4177 ICS.Standard.setToType(1, T1);
4178 ICS.Standard.setToType(2, T1);
4179 ICS.Standard.ReferenceBinding = true;
4180 ICS.Standard.DirectBinding = true;
4181 ICS.Standard.IsLvalueReference = !isRValRef;
4182 ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4183 ICS.Standard.BindsToRvalue = false;
4184 ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4185 ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion;
4186 ICS.Standard.CopyConstructor = 0;
4187
4188 // Nothing more to do: the inaccessibility/ambiguity check for
4189 // derived-to-base conversions is suppressed when we're
4190 // computing the implicit conversion sequence (C++
4191 // [over.best.ics]p2).
4192 return ICS;
4193 }
4194
4195 // -- has a class type (i.e., T2 is a class type), where T1 is
4196 // not reference-related to T2, and can be implicitly
4197 // converted to an lvalue of type "cv3 T3," where "cv1 T1"
4198 // is reference-compatible with "cv3 T3" 92) (this
4199 // conversion is selected by enumerating the applicable
4200 // conversion functions (13.3.1.6) and choosing the best
4201 // one through overload resolution (13.3)),
4202 if (!SuppressUserConversions && T2->isRecordType() &&
4203 !S.RequireCompleteType(DeclLoc, T2, 0) &&
4204 RefRelationship == Sema::Ref_Incompatible) {
4205 if (FindConversionForRefInit(S, ICS, DeclType, DeclLoc,
4206 Init, T2, /*AllowRvalues=*/false,
4207 AllowExplicit))
4208 return ICS;
4209 }
4210 }
4211
4212 // -- Otherwise, the reference shall be an lvalue reference to a
4213 // non-volatile const type (i.e., cv1 shall be const), or the reference
4214 // shall be an rvalue reference.
4215 //
4216 // We actually handle one oddity of C++ [over.ics.ref] at this
4217 // point, which is that, due to p2 (which short-circuits reference
4218 // binding by only attempting a simple conversion for non-direct
4219 // bindings) and p3's strange wording, we allow a const volatile
4220 // reference to bind to an rvalue. Hence the check for the presence
4221 // of "const" rather than checking for "const" being the only
4222 // qualifier.
4223 // This is also the point where rvalue references and lvalue inits no longer
4224 // go together.
4225 if (!isRValRef && (!T1.isConstQualified() || T1.isVolatileQualified()))
4226 return ICS;
4227
4228 // -- If the initializer expression
4229 //
4230 // -- is an xvalue, class prvalue, array prvalue or function
4231 // lvalue and "cv1 T1" is reference-compatible with "cv2 T2", or
4232 if (RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification &&
4233 (InitCategory.isXValue() ||
4234 (InitCategory.isPRValue() && (T2->isRecordType() || T2->isArrayType())) ||
4235 (InitCategory.isLValue() && T2->isFunctionType()))) {
4236 ICS.setStandard();
4237 ICS.Standard.First = ICK_Identity;
4238 ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base
4239 : ObjCConversion? ICK_Compatible_Conversion
4240 : ICK_Identity;
4241 ICS.Standard.Third = ICK_Identity;
4242 ICS.Standard.FromTypePtr = T2.getAsOpaquePtr();
4243 ICS.Standard.setToType(0, T2);
4244 ICS.Standard.setToType(1, T1);
4245 ICS.Standard.setToType(2, T1);
4246 ICS.Standard.ReferenceBinding = true;
4247 // In C++0x, this is always a direct binding. In C++98/03, it's a direct
4248 // binding unless we're binding to a class prvalue.
4249 // Note: Although xvalues wouldn't normally show up in C++98/03 code, we
4250 // allow the use of rvalue references in C++98/03 for the benefit of
4251 // standard library implementors; therefore, we need the xvalue check here.
4252 ICS.Standard.DirectBinding =
4253 S.getLangOpts().CPlusPlus11 ||
4254 (InitCategory.isPRValue() && !T2->isRecordType());
4255 ICS.Standard.IsLvalueReference = !isRValRef;
4256 ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4257 ICS.Standard.BindsToRvalue = InitCategory.isRValue();
4258 ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4259 ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion;
4260 ICS.Standard.CopyConstructor = 0;
4261 return ICS;
4262 }
4263
4264 // -- has a class type (i.e., T2 is a class type), where T1 is not
4265 // reference-related to T2, and can be implicitly converted to
4266 // an xvalue, class prvalue, or function lvalue of type
4267 // "cv3 T3", where "cv1 T1" is reference-compatible with
4268 // "cv3 T3",
4269 //
4270 // then the reference is bound to the value of the initializer
4271 // expression in the first case and to the result of the conversion
4272 // in the second case (or, in either case, to an appropriate base
4273 // class subobject).
4274 if (!SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible &&
4275 T2->isRecordType() && !S.RequireCompleteType(DeclLoc, T2, 0) &&
4276 FindConversionForRefInit(S, ICS, DeclType, DeclLoc,
4277 Init, T2, /*AllowRvalues=*/true,
4278 AllowExplicit)) {
4279 // In the second case, if the reference is an rvalue reference
4280 // and the second standard conversion sequence of the
4281 // user-defined conversion sequence includes an lvalue-to-rvalue
4282 // conversion, the program is ill-formed.
4283 if (ICS.isUserDefined() && isRValRef &&
4284 ICS.UserDefined.After.First == ICK_Lvalue_To_Rvalue)
4285 ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType);
4286
4287 return ICS;
4288 }
4289
4290 // -- Otherwise, a temporary of type "cv1 T1" is created and
4291 // initialized from the initializer expression using the
4292 // rules for a non-reference copy initialization (8.5). The
4293 // reference is then bound to the temporary. If T1 is
4294 // reference-related to T2, cv1 must be the same
4295 // cv-qualification as, or greater cv-qualification than,
4296 // cv2; otherwise, the program is ill-formed.
4297 if (RefRelationship == Sema::Ref_Related) {
4298 // If cv1 == cv2 or cv1 is a greater cv-qualified than cv2, then
4299 // we would be reference-compatible or reference-compatible with
4300 // added qualification. But that wasn't the case, so the reference
4301 // initialization fails.
4302 //
4303 // Note that we only want to check address spaces and cvr-qualifiers here.
4304 // ObjC GC and lifetime qualifiers aren't important.
4305 Qualifiers T1Quals = T1.getQualifiers();
4306 Qualifiers T2Quals = T2.getQualifiers();
4307 T1Quals.removeObjCGCAttr();
4308 T1Quals.removeObjCLifetime();
4309 T2Quals.removeObjCGCAttr();
4310 T2Quals.removeObjCLifetime();
4311 if (!T1Quals.compatiblyIncludes(T2Quals))
4312 return ICS;
4313 }
4314
4315 // If at least one of the types is a class type, the types are not
4316 // related, and we aren't allowed any user conversions, the
4317 // reference binding fails. This case is important for breaking
4318 // recursion, since TryImplicitConversion below will attempt to
4319 // create a temporary through the use of a copy constructor.
4320 if (SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible &&
4321 (T1->isRecordType() || T2->isRecordType()))
4322 return ICS;
4323
4324 // If T1 is reference-related to T2 and the reference is an rvalue
4325 // reference, the initializer expression shall not be an lvalue.
4326 if (RefRelationship >= Sema::Ref_Related &&
4327 isRValRef && Init->Classify(S.Context).isLValue())
4328 return ICS;
4329
4330 // C++ [over.ics.ref]p2:
4331 // When a parameter of reference type is not bound directly to
4332 // an argument expression, the conversion sequence is the one
4333 // required to convert the argument expression to the
4334 // underlying type of the reference according to
4335 // 13.3.3.1. Conceptually, this conversion sequence corresponds
4336 // to copy-initializing a temporary of the underlying type with
4337 // the argument expression. Any difference in top-level
4338 // cv-qualification is subsumed by the initialization itself
4339 // and does not constitute a conversion.
4340 ICS = TryImplicitConversion(S, Init, T1, SuppressUserConversions,
4341 /*AllowExplicit=*/false,
4342 /*InOverloadResolution=*/false,
4343 /*CStyle=*/false,
4344 /*AllowObjCWritebackConversion=*/false);
4345
4346 // Of course, that's still a reference binding.
4347 if (ICS.isStandard()) {
4348 ICS.Standard.ReferenceBinding = true;
4349 ICS.Standard.IsLvalueReference = !isRValRef;
4350 ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4351 ICS.Standard.BindsToRvalue = true;
4352 ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4353 ICS.Standard.ObjCLifetimeConversionBinding = false;
4354 } else if (ICS.isUserDefined()) {
4355 // Don't allow rvalue references to bind to lvalues.
4356 if (DeclType->isRValueReferenceType()) {
4357 if (const ReferenceType *RefType
4358 = ICS.UserDefined.ConversionFunction->getResultType()
4359 ->getAs<LValueReferenceType>()) {
4360 if (!RefType->getPointeeType()->isFunctionType()) {
4361 ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, Init,
4362 DeclType);
4363 return ICS;
4364 }
4365 }
4366 }
4367
4368 ICS.UserDefined.After.ReferenceBinding = true;
4369 ICS.UserDefined.After.IsLvalueReference = !isRValRef;
4370 ICS.UserDefined.After.BindsToFunctionLvalue = T2->isFunctionType();
4371 ICS.UserDefined.After.BindsToRvalue = true;
4372 ICS.UserDefined.After.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4373 ICS.UserDefined.After.ObjCLifetimeConversionBinding = false;
4374 }
4375
4376 return ICS;
4377 }
4378
4379 static ImplicitConversionSequence
4380 TryCopyInitialization(Sema &S, Expr *From, QualType ToType,
4381 bool SuppressUserConversions,
4382 bool InOverloadResolution,
4383 bool AllowObjCWritebackConversion,
4384 bool AllowExplicit = false);
4385
4386 /// TryListConversion - Try to copy-initialize a value of type ToType from the
4387 /// initializer list From.
4388 static ImplicitConversionSequence
TryListConversion(Sema & S,InitListExpr * From,QualType ToType,bool SuppressUserConversions,bool InOverloadResolution,bool AllowObjCWritebackConversion)4389 TryListConversion(Sema &S, InitListExpr *From, QualType ToType,
4390 bool SuppressUserConversions,
4391 bool InOverloadResolution,
4392 bool AllowObjCWritebackConversion) {
4393 // C++11 [over.ics.list]p1:
4394 // When an argument is an initializer list, it is not an expression and
4395 // special rules apply for converting it to a parameter type.
4396
4397 ImplicitConversionSequence Result;
4398 Result.setBad(BadConversionSequence::no_conversion, From, ToType);
4399 Result.setListInitializationSequence();
4400
4401 // We need a complete type for what follows. Incomplete types can never be
4402 // initialized from init lists.
4403 if (S.RequireCompleteType(From->getLocStart(), ToType, 0))
4404 return Result;
4405
4406 // C++11 [over.ics.list]p2:
4407 // If the parameter type is std::initializer_list<X> or "array of X" and
4408 // all the elements can be implicitly converted to X, the implicit
4409 // conversion sequence is the worst conversion necessary to convert an
4410 // element of the list to X.
4411 bool toStdInitializerList = false;
4412 QualType X;
4413 if (ToType->isArrayType())
4414 X = S.Context.getAsArrayType(ToType)->getElementType();
4415 else
4416 toStdInitializerList = S.isStdInitializerList(ToType, &X);
4417 if (!X.isNull()) {
4418 for (unsigned i = 0, e = From->getNumInits(); i < e; ++i) {
4419 Expr *Init = From->getInit(i);
4420 ImplicitConversionSequence ICS =
4421 TryCopyInitialization(S, Init, X, SuppressUserConversions,
4422 InOverloadResolution,
4423 AllowObjCWritebackConversion);
4424 // If a single element isn't convertible, fail.
4425 if (ICS.isBad()) {
4426 Result = ICS;
4427 break;
4428 }
4429 // Otherwise, look for the worst conversion.
4430 if (Result.isBad() ||
4431 CompareImplicitConversionSequences(S, ICS, Result) ==
4432 ImplicitConversionSequence::Worse)
4433 Result = ICS;
4434 }
4435
4436 // For an empty list, we won't have computed any conversion sequence.
4437 // Introduce the identity conversion sequence.
4438 if (From->getNumInits() == 0) {
4439 Result.setStandard();
4440 Result.Standard.setAsIdentityConversion();
4441 Result.Standard.setFromType(ToType);
4442 Result.Standard.setAllToTypes(ToType);
4443 }
4444
4445 Result.setListInitializationSequence();
4446 Result.setStdInitializerListElement(toStdInitializerList);
4447 return Result;
4448 }
4449
4450 // C++11 [over.ics.list]p3:
4451 // Otherwise, if the parameter is a non-aggregate class X and overload
4452 // resolution chooses a single best constructor [...] the implicit
4453 // conversion sequence is a user-defined conversion sequence. If multiple
4454 // constructors are viable but none is better than the others, the
4455 // implicit conversion sequence is a user-defined conversion sequence.
4456 if (ToType->isRecordType() && !ToType->isAggregateType()) {
4457 // This function can deal with initializer lists.
4458 Result = TryUserDefinedConversion(S, From, ToType, SuppressUserConversions,
4459 /*AllowExplicit=*/false,
4460 InOverloadResolution, /*CStyle=*/false,
4461 AllowObjCWritebackConversion);
4462 Result.setListInitializationSequence();
4463 return Result;
4464 }
4465
4466 // C++11 [over.ics.list]p4:
4467 // Otherwise, if the parameter has an aggregate type which can be
4468 // initialized from the initializer list [...] the implicit conversion
4469 // sequence is a user-defined conversion sequence.
4470 if (ToType->isAggregateType()) {
4471 // Type is an aggregate, argument is an init list. At this point it comes
4472 // down to checking whether the initialization works.
4473 // FIXME: Find out whether this parameter is consumed or not.
4474 InitializedEntity Entity =
4475 InitializedEntity::InitializeParameter(S.Context, ToType,
4476 /*Consumed=*/false);
4477 if (S.CanPerformCopyInitialization(Entity, S.Owned(From))) {
4478 Result.setUserDefined();
4479 Result.UserDefined.Before.setAsIdentityConversion();
4480 // Initializer lists don't have a type.
4481 Result.UserDefined.Before.setFromType(QualType());
4482 Result.UserDefined.Before.setAllToTypes(QualType());
4483
4484 Result.UserDefined.After.setAsIdentityConversion();
4485 Result.UserDefined.After.setFromType(ToType);
4486 Result.UserDefined.After.setAllToTypes(ToType);
4487 Result.UserDefined.ConversionFunction = 0;
4488 }
4489 return Result;
4490 }
4491
4492 // C++11 [over.ics.list]p5:
4493 // Otherwise, if the parameter is a reference, see 13.3.3.1.4.
4494 if (ToType->isReferenceType()) {
4495 // The standard is notoriously unclear here, since 13.3.3.1.4 doesn't
4496 // mention initializer lists in any way. So we go by what list-
4497 // initialization would do and try to extrapolate from that.
4498
4499 QualType T1 = ToType->getAs<ReferenceType>()->getPointeeType();
4500
4501 // If the initializer list has a single element that is reference-related
4502 // to the parameter type, we initialize the reference from that.
4503 if (From->getNumInits() == 1) {
4504 Expr *Init = From->getInit(0);
4505
4506 QualType T2 = Init->getType();
4507
4508 // If the initializer is the address of an overloaded function, try
4509 // to resolve the overloaded function. If all goes well, T2 is the
4510 // type of the resulting function.
4511 if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) {
4512 DeclAccessPair Found;
4513 if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(
4514 Init, ToType, false, Found))
4515 T2 = Fn->getType();
4516 }
4517
4518 // Compute some basic properties of the types and the initializer.
4519 bool dummy1 = false;
4520 bool dummy2 = false;
4521 bool dummy3 = false;
4522 Sema::ReferenceCompareResult RefRelationship
4523 = S.CompareReferenceRelationship(From->getLocStart(), T1, T2, dummy1,
4524 dummy2, dummy3);
4525
4526 if (RefRelationship >= Sema::Ref_Related)
4527 return TryReferenceInit(S, Init, ToType,
4528 /*FIXME:*/From->getLocStart(),
4529 SuppressUserConversions,
4530 /*AllowExplicit=*/false);
4531 }
4532
4533 // Otherwise, we bind the reference to a temporary created from the
4534 // initializer list.
4535 Result = TryListConversion(S, From, T1, SuppressUserConversions,
4536 InOverloadResolution,
4537 AllowObjCWritebackConversion);
4538 if (Result.isFailure())
4539 return Result;
4540 assert(!Result.isEllipsis() &&
4541 "Sub-initialization cannot result in ellipsis conversion.");
4542
4543 // Can we even bind to a temporary?
4544 if (ToType->isRValueReferenceType() ||
4545 (T1.isConstQualified() && !T1.isVolatileQualified())) {
4546 StandardConversionSequence &SCS = Result.isStandard() ? Result.Standard :
4547 Result.UserDefined.After;
4548 SCS.ReferenceBinding = true;
4549 SCS.IsLvalueReference = ToType->isLValueReferenceType();
4550 SCS.BindsToRvalue = true;
4551 SCS.BindsToFunctionLvalue = false;
4552 SCS.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4553 SCS.ObjCLifetimeConversionBinding = false;
4554 } else
4555 Result.setBad(BadConversionSequence::lvalue_ref_to_rvalue,
4556 From, ToType);
4557 return Result;
4558 }
4559
4560 // C++11 [over.ics.list]p6:
4561 // Otherwise, if the parameter type is not a class:
4562 if (!ToType->isRecordType()) {
4563 // - if the initializer list has one element, the implicit conversion
4564 // sequence is the one required to convert the element to the
4565 // parameter type.
4566 unsigned NumInits = From->getNumInits();
4567 if (NumInits == 1)
4568 Result = TryCopyInitialization(S, From->getInit(0), ToType,
4569 SuppressUserConversions,
4570 InOverloadResolution,
4571 AllowObjCWritebackConversion);
4572 // - if the initializer list has no elements, the implicit conversion
4573 // sequence is the identity conversion.
4574 else if (NumInits == 0) {
4575 Result.setStandard();
4576 Result.Standard.setAsIdentityConversion();
4577 Result.Standard.setFromType(ToType);
4578 Result.Standard.setAllToTypes(ToType);
4579 }
4580 Result.setListInitializationSequence();
4581 return Result;
4582 }
4583
4584 // C++11 [over.ics.list]p7:
4585 // In all cases other than those enumerated above, no conversion is possible
4586 return Result;
4587 }
4588
4589 /// TryCopyInitialization - Try to copy-initialize a value of type
4590 /// ToType from the expression From. Return the implicit conversion
4591 /// sequence required to pass this argument, which may be a bad
4592 /// conversion sequence (meaning that the argument cannot be passed to
4593 /// a parameter of this type). If @p SuppressUserConversions, then we
4594 /// do not permit any user-defined conversion sequences.
4595 static ImplicitConversionSequence
TryCopyInitialization(Sema & S,Expr * From,QualType ToType,bool SuppressUserConversions,bool InOverloadResolution,bool AllowObjCWritebackConversion,bool AllowExplicit)4596 TryCopyInitialization(Sema &S, Expr *From, QualType ToType,
4597 bool SuppressUserConversions,
4598 bool InOverloadResolution,
4599 bool AllowObjCWritebackConversion,
4600 bool AllowExplicit) {
4601 if (InitListExpr *FromInitList = dyn_cast<InitListExpr>(From))
4602 return TryListConversion(S, FromInitList, ToType, SuppressUserConversions,
4603 InOverloadResolution,AllowObjCWritebackConversion);
4604
4605 if (ToType->isReferenceType())
4606 return TryReferenceInit(S, From, ToType,
4607 /*FIXME:*/From->getLocStart(),
4608 SuppressUserConversions,
4609 AllowExplicit);
4610
4611 return TryImplicitConversion(S, From, ToType,
4612 SuppressUserConversions,
4613 /*AllowExplicit=*/false,
4614 InOverloadResolution,
4615 /*CStyle=*/false,
4616 AllowObjCWritebackConversion);
4617 }
4618
TryCopyInitialization(const CanQualType FromQTy,const CanQualType ToQTy,Sema & S,SourceLocation Loc,ExprValueKind FromVK)4619 static bool TryCopyInitialization(const CanQualType FromQTy,
4620 const CanQualType ToQTy,
4621 Sema &S,
4622 SourceLocation Loc,
4623 ExprValueKind FromVK) {
4624 OpaqueValueExpr TmpExpr(Loc, FromQTy, FromVK);
4625 ImplicitConversionSequence ICS =
4626 TryCopyInitialization(S, &TmpExpr, ToQTy, true, true, false);
4627
4628 return !ICS.isBad();
4629 }
4630
4631 /// TryObjectArgumentInitialization - Try to initialize the object
4632 /// parameter of the given member function (@c Method) from the
4633 /// expression @p From.
4634 static ImplicitConversionSequence
TryObjectArgumentInitialization(Sema & S,QualType FromType,Expr::Classification FromClassification,CXXMethodDecl * Method,CXXRecordDecl * ActingContext)4635 TryObjectArgumentInitialization(Sema &S, QualType FromType,
4636 Expr::Classification FromClassification,
4637 CXXMethodDecl *Method,
4638 CXXRecordDecl *ActingContext) {
4639 QualType ClassType = S.Context.getTypeDeclType(ActingContext);
4640 // [class.dtor]p2: A destructor can be invoked for a const, volatile or
4641 // const volatile object.
4642 unsigned Quals = isa<CXXDestructorDecl>(Method) ?
4643 Qualifiers::Const | Qualifiers::Volatile : Method->getTypeQualifiers();
4644 QualType ImplicitParamType = S.Context.getCVRQualifiedType(ClassType, Quals);
4645
4646 // Set up the conversion sequence as a "bad" conversion, to allow us
4647 // to exit early.
4648 ImplicitConversionSequence ICS;
4649
4650 // We need to have an object of class type.
4651 if (const PointerType *PT = FromType->getAs<PointerType>()) {
4652 FromType = PT->getPointeeType();
4653
4654 // When we had a pointer, it's implicitly dereferenced, so we
4655 // better have an lvalue.
4656 assert(FromClassification.isLValue());
4657 }
4658
4659 assert(FromType->isRecordType());
4660
4661 // C++0x [over.match.funcs]p4:
4662 // For non-static member functions, the type of the implicit object
4663 // parameter is
4664 //
4665 // - "lvalue reference to cv X" for functions declared without a
4666 // ref-qualifier or with the & ref-qualifier
4667 // - "rvalue reference to cv X" for functions declared with the &&
4668 // ref-qualifier
4669 //
4670 // where X is the class of which the function is a member and cv is the
4671 // cv-qualification on the member function declaration.
4672 //
4673 // However, when finding an implicit conversion sequence for the argument, we
4674 // are not allowed to create temporaries or perform user-defined conversions
4675 // (C++ [over.match.funcs]p5). We perform a simplified version of
4676 // reference binding here, that allows class rvalues to bind to
4677 // non-constant references.
4678
4679 // First check the qualifiers.
4680 QualType FromTypeCanon = S.Context.getCanonicalType(FromType);
4681 if (ImplicitParamType.getCVRQualifiers()
4682 != FromTypeCanon.getLocalCVRQualifiers() &&
4683 !ImplicitParamType.isAtLeastAsQualifiedAs(FromTypeCanon)) {
4684 ICS.setBad(BadConversionSequence::bad_qualifiers,
4685 FromType, ImplicitParamType);
4686 return ICS;
4687 }
4688
4689 // Check that we have either the same type or a derived type. It
4690 // affects the conversion rank.
4691 QualType ClassTypeCanon = S.Context.getCanonicalType(ClassType);
4692 ImplicitConversionKind SecondKind;
4693 if (ClassTypeCanon == FromTypeCanon.getLocalUnqualifiedType()) {
4694 SecondKind = ICK_Identity;
4695 } else if (S.IsDerivedFrom(FromType, ClassType))
4696 SecondKind = ICK_Derived_To_Base;
4697 else {
4698 ICS.setBad(BadConversionSequence::unrelated_class,
4699 FromType, ImplicitParamType);
4700 return ICS;
4701 }
4702
4703 // Check the ref-qualifier.
4704 switch (Method->getRefQualifier()) {
4705 case RQ_None:
4706 // Do nothing; we don't care about lvalueness or rvalueness.
4707 break;
4708
4709 case RQ_LValue:
4710 if (!FromClassification.isLValue() && Quals != Qualifiers::Const) {
4711 // non-const lvalue reference cannot bind to an rvalue
4712 ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, FromType,
4713 ImplicitParamType);
4714 return ICS;
4715 }
4716 break;
4717
4718 case RQ_RValue:
4719 if (!FromClassification.isRValue()) {
4720 // rvalue reference cannot bind to an lvalue
4721 ICS.setBad(BadConversionSequence::rvalue_ref_to_lvalue, FromType,
4722 ImplicitParamType);
4723 return ICS;
4724 }
4725 break;
4726 }
4727
4728 // Success. Mark this as a reference binding.
4729 ICS.setStandard();
4730 ICS.Standard.setAsIdentityConversion();
4731 ICS.Standard.Second = SecondKind;
4732 ICS.Standard.setFromType(FromType);
4733 ICS.Standard.setAllToTypes(ImplicitParamType);
4734 ICS.Standard.ReferenceBinding = true;
4735 ICS.Standard.DirectBinding = true;
4736 ICS.Standard.IsLvalueReference = Method->getRefQualifier() != RQ_RValue;
4737 ICS.Standard.BindsToFunctionLvalue = false;
4738 ICS.Standard.BindsToRvalue = FromClassification.isRValue();
4739 ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier
4740 = (Method->getRefQualifier() == RQ_None);
4741 return ICS;
4742 }
4743
4744 /// PerformObjectArgumentInitialization - Perform initialization of
4745 /// the implicit object parameter for the given Method with the given
4746 /// expression.
4747 ExprResult
PerformObjectArgumentInitialization(Expr * From,NestedNameSpecifier * Qualifier,NamedDecl * FoundDecl,CXXMethodDecl * Method)4748 Sema::PerformObjectArgumentInitialization(Expr *From,
4749 NestedNameSpecifier *Qualifier,
4750 NamedDecl *FoundDecl,
4751 CXXMethodDecl *Method) {
4752 QualType FromRecordType, DestType;
4753 QualType ImplicitParamRecordType =
4754 Method->getThisType(Context)->getAs<PointerType>()->getPointeeType();
4755
4756 Expr::Classification FromClassification;
4757 if (const PointerType *PT = From->getType()->getAs<PointerType>()) {
4758 FromRecordType = PT->getPointeeType();
4759 DestType = Method->getThisType(Context);
4760 FromClassification = Expr::Classification::makeSimpleLValue();
4761 } else {
4762 FromRecordType = From->getType();
4763 DestType = ImplicitParamRecordType;
4764 FromClassification = From->Classify(Context);
4765 }
4766
4767 // Note that we always use the true parent context when performing
4768 // the actual argument initialization.
4769 ImplicitConversionSequence ICS
4770 = TryObjectArgumentInitialization(*this, From->getType(), FromClassification,
4771 Method, Method->getParent());
4772 if (ICS.isBad()) {
4773 if (ICS.Bad.Kind == BadConversionSequence::bad_qualifiers) {
4774 Qualifiers FromQs = FromRecordType.getQualifiers();
4775 Qualifiers ToQs = DestType.getQualifiers();
4776 unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
4777 if (CVR) {
4778 Diag(From->getLocStart(),
4779 diag::err_member_function_call_bad_cvr)
4780 << Method->getDeclName() << FromRecordType << (CVR - 1)
4781 << From->getSourceRange();
4782 Diag(Method->getLocation(), diag::note_previous_decl)
4783 << Method->getDeclName();
4784 return ExprError();
4785 }
4786 }
4787
4788 return Diag(From->getLocStart(),
4789 diag::err_implicit_object_parameter_init)
4790 << ImplicitParamRecordType << FromRecordType << From->getSourceRange();
4791 }
4792
4793 if (ICS.Standard.Second == ICK_Derived_To_Base) {
4794 ExprResult FromRes =
4795 PerformObjectMemberConversion(From, Qualifier, FoundDecl, Method);
4796 if (FromRes.isInvalid())
4797 return ExprError();
4798 From = FromRes.take();
4799 }
4800
4801 if (!Context.hasSameType(From->getType(), DestType))
4802 From = ImpCastExprToType(From, DestType, CK_NoOp,
4803 From->getValueKind()).take();
4804 return Owned(From);
4805 }
4806
4807 /// TryContextuallyConvertToBool - Attempt to contextually convert the
4808 /// expression From to bool (C++0x [conv]p3).
4809 static ImplicitConversionSequence
TryContextuallyConvertToBool(Sema & S,Expr * From)4810 TryContextuallyConvertToBool(Sema &S, Expr *From) {
4811 // FIXME: This is pretty broken.
4812 return TryImplicitConversion(S, From, S.Context.BoolTy,
4813 // FIXME: Are these flags correct?
4814 /*SuppressUserConversions=*/false,
4815 /*AllowExplicit=*/true,
4816 /*InOverloadResolution=*/false,
4817 /*CStyle=*/false,
4818 /*AllowObjCWritebackConversion=*/false);
4819 }
4820
4821 /// PerformContextuallyConvertToBool - Perform a contextual conversion
4822 /// of the expression From to bool (C++0x [conv]p3).
PerformContextuallyConvertToBool(Expr * From)4823 ExprResult Sema::PerformContextuallyConvertToBool(Expr *From) {
4824 if (checkPlaceholderForOverload(*this, From))
4825 return ExprError();
4826
4827 ImplicitConversionSequence ICS = TryContextuallyConvertToBool(*this, From);
4828 if (!ICS.isBad())
4829 return PerformImplicitConversion(From, Context.BoolTy, ICS, AA_Converting);
4830
4831 if (!DiagnoseMultipleUserDefinedConversion(From, Context.BoolTy))
4832 return Diag(From->getLocStart(),
4833 diag::err_typecheck_bool_condition)
4834 << From->getType() << From->getSourceRange();
4835 return ExprError();
4836 }
4837
4838 /// Check that the specified conversion is permitted in a converted constant
4839 /// expression, according to C++11 [expr.const]p3. Return true if the conversion
4840 /// is acceptable.
CheckConvertedConstantConversions(Sema & S,StandardConversionSequence & SCS)4841 static bool CheckConvertedConstantConversions(Sema &S,
4842 StandardConversionSequence &SCS) {
4843 // Since we know that the target type is an integral or unscoped enumeration
4844 // type, most conversion kinds are impossible. All possible First and Third
4845 // conversions are fine.
4846 switch (SCS.Second) {
4847 case ICK_Identity:
4848 case ICK_Integral_Promotion:
4849 case ICK_Integral_Conversion:
4850 case ICK_Zero_Event_Conversion:
4851 return true;
4852
4853 case ICK_Boolean_Conversion:
4854 // Conversion from an integral or unscoped enumeration type to bool is
4855 // classified as ICK_Boolean_Conversion, but it's also an integral
4856 // conversion, so it's permitted in a converted constant expression.
4857 return SCS.getFromType()->isIntegralOrUnscopedEnumerationType() &&
4858 SCS.getToType(2)->isBooleanType();
4859
4860 case ICK_Floating_Integral:
4861 case ICK_Complex_Real:
4862 return false;
4863
4864 case ICK_Lvalue_To_Rvalue:
4865 case ICK_Array_To_Pointer:
4866 case ICK_Function_To_Pointer:
4867 case ICK_NoReturn_Adjustment:
4868 case ICK_Qualification:
4869 case ICK_Compatible_Conversion:
4870 case ICK_Vector_Conversion:
4871 case ICK_Vector_Splat:
4872 case ICK_Derived_To_Base:
4873 case ICK_Pointer_Conversion:
4874 case ICK_Pointer_Member:
4875 case ICK_Block_Pointer_Conversion:
4876 case ICK_Writeback_Conversion:
4877 case ICK_Floating_Promotion:
4878 case ICK_Complex_Promotion:
4879 case ICK_Complex_Conversion:
4880 case ICK_Floating_Conversion:
4881 case ICK_TransparentUnionConversion:
4882 llvm_unreachable("unexpected second conversion kind");
4883
4884 case ICK_Num_Conversion_Kinds:
4885 break;
4886 }
4887
4888 llvm_unreachable("unknown conversion kind");
4889 }
4890
4891 /// CheckConvertedConstantExpression - Check that the expression From is a
4892 /// converted constant expression of type T, perform the conversion and produce
4893 /// the converted expression, per C++11 [expr.const]p3.
CheckConvertedConstantExpression(Expr * From,QualType T,llvm::APSInt & Value,CCEKind CCE)4894 ExprResult Sema::CheckConvertedConstantExpression(Expr *From, QualType T,
4895 llvm::APSInt &Value,
4896 CCEKind CCE) {
4897 assert(LangOpts.CPlusPlus11 && "converted constant expression outside C++11");
4898 assert(T->isIntegralOrEnumerationType() && "unexpected converted const type");
4899
4900 if (checkPlaceholderForOverload(*this, From))
4901 return ExprError();
4902
4903 // C++11 [expr.const]p3 with proposed wording fixes:
4904 // A converted constant expression of type T is a core constant expression,
4905 // implicitly converted to a prvalue of type T, where the converted
4906 // expression is a literal constant expression and the implicit conversion
4907 // sequence contains only user-defined conversions, lvalue-to-rvalue
4908 // conversions, integral promotions, and integral conversions other than
4909 // narrowing conversions.
4910 ImplicitConversionSequence ICS =
4911 TryImplicitConversion(From, T,
4912 /*SuppressUserConversions=*/false,
4913 /*AllowExplicit=*/false,
4914 /*InOverloadResolution=*/false,
4915 /*CStyle=*/false,
4916 /*AllowObjcWritebackConversion=*/false);
4917 StandardConversionSequence *SCS = 0;
4918 switch (ICS.getKind()) {
4919 case ImplicitConversionSequence::StandardConversion:
4920 if (!CheckConvertedConstantConversions(*this, ICS.Standard))
4921 return Diag(From->getLocStart(),
4922 diag::err_typecheck_converted_constant_expression_disallowed)
4923 << From->getType() << From->getSourceRange() << T;
4924 SCS = &ICS.Standard;
4925 break;
4926 case ImplicitConversionSequence::UserDefinedConversion:
4927 // We are converting from class type to an integral or enumeration type, so
4928 // the Before sequence must be trivial.
4929 if (!CheckConvertedConstantConversions(*this, ICS.UserDefined.After))
4930 return Diag(From->getLocStart(),
4931 diag::err_typecheck_converted_constant_expression_disallowed)
4932 << From->getType() << From->getSourceRange() << T;
4933 SCS = &ICS.UserDefined.After;
4934 break;
4935 case ImplicitConversionSequence::AmbiguousConversion:
4936 case ImplicitConversionSequence::BadConversion:
4937 if (!DiagnoseMultipleUserDefinedConversion(From, T))
4938 return Diag(From->getLocStart(),
4939 diag::err_typecheck_converted_constant_expression)
4940 << From->getType() << From->getSourceRange() << T;
4941 return ExprError();
4942
4943 case ImplicitConversionSequence::EllipsisConversion:
4944 llvm_unreachable("ellipsis conversion in converted constant expression");
4945 }
4946
4947 ExprResult Result = PerformImplicitConversion(From, T, ICS, AA_Converting);
4948 if (Result.isInvalid())
4949 return Result;
4950
4951 // Check for a narrowing implicit conversion.
4952 APValue PreNarrowingValue;
4953 QualType PreNarrowingType;
4954 switch (SCS->getNarrowingKind(Context, Result.get(), PreNarrowingValue,
4955 PreNarrowingType)) {
4956 case NK_Variable_Narrowing:
4957 // Implicit conversion to a narrower type, and the value is not a constant
4958 // expression. We'll diagnose this in a moment.
4959 case NK_Not_Narrowing:
4960 break;
4961
4962 case NK_Constant_Narrowing:
4963 Diag(From->getLocStart(),
4964 isSFINAEContext() ? diag::err_cce_narrowing_sfinae :
4965 diag::err_cce_narrowing)
4966 << CCE << /*Constant*/1
4967 << PreNarrowingValue.getAsString(Context, PreNarrowingType) << T;
4968 break;
4969
4970 case NK_Type_Narrowing:
4971 Diag(From->getLocStart(),
4972 isSFINAEContext() ? diag::err_cce_narrowing_sfinae :
4973 diag::err_cce_narrowing)
4974 << CCE << /*Constant*/0 << From->getType() << T;
4975 break;
4976 }
4977
4978 // Check the expression is a constant expression.
4979 SmallVector<PartialDiagnosticAt, 8> Notes;
4980 Expr::EvalResult Eval;
4981 Eval.Diag = &Notes;
4982
4983 if (!Result.get()->EvaluateAsRValue(Eval, Context) || !Eval.Val.isInt()) {
4984 // The expression can't be folded, so we can't keep it at this position in
4985 // the AST.
4986 Result = ExprError();
4987 } else {
4988 Value = Eval.Val.getInt();
4989
4990 if (Notes.empty()) {
4991 // It's a constant expression.
4992 return Result;
4993 }
4994 }
4995
4996 // It's not a constant expression. Produce an appropriate diagnostic.
4997 if (Notes.size() == 1 &&
4998 Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr)
4999 Diag(Notes[0].first, diag::err_expr_not_cce) << CCE;
5000 else {
5001 Diag(From->getLocStart(), diag::err_expr_not_cce)
5002 << CCE << From->getSourceRange();
5003 for (unsigned I = 0; I < Notes.size(); ++I)
5004 Diag(Notes[I].first, Notes[I].second);
5005 }
5006 return Result;
5007 }
5008
5009 /// dropPointerConversions - If the given standard conversion sequence
5010 /// involves any pointer conversions, remove them. This may change
5011 /// the result type of the conversion sequence.
dropPointerConversion(StandardConversionSequence & SCS)5012 static void dropPointerConversion(StandardConversionSequence &SCS) {
5013 if (SCS.Second == ICK_Pointer_Conversion) {
5014 SCS.Second = ICK_Identity;
5015 SCS.Third = ICK_Identity;
5016 SCS.ToTypePtrs[2] = SCS.ToTypePtrs[1] = SCS.ToTypePtrs[0];
5017 }
5018 }
5019
5020 /// TryContextuallyConvertToObjCPointer - Attempt to contextually
5021 /// convert the expression From to an Objective-C pointer type.
5022 static ImplicitConversionSequence
TryContextuallyConvertToObjCPointer(Sema & S,Expr * From)5023 TryContextuallyConvertToObjCPointer(Sema &S, Expr *From) {
5024 // Do an implicit conversion to 'id'.
5025 QualType Ty = S.Context.getObjCIdType();
5026 ImplicitConversionSequence ICS
5027 = TryImplicitConversion(S, From, Ty,
5028 // FIXME: Are these flags correct?
5029 /*SuppressUserConversions=*/false,
5030 /*AllowExplicit=*/true,
5031 /*InOverloadResolution=*/false,
5032 /*CStyle=*/false,
5033 /*AllowObjCWritebackConversion=*/false);
5034
5035 // Strip off any final conversions to 'id'.
5036 switch (ICS.getKind()) {
5037 case ImplicitConversionSequence::BadConversion:
5038 case ImplicitConversionSequence::AmbiguousConversion:
5039 case ImplicitConversionSequence::EllipsisConversion:
5040 break;
5041
5042 case ImplicitConversionSequence::UserDefinedConversion:
5043 dropPointerConversion(ICS.UserDefined.After);
5044 break;
5045
5046 case ImplicitConversionSequence::StandardConversion:
5047 dropPointerConversion(ICS.Standard);
5048 break;
5049 }
5050
5051 return ICS;
5052 }
5053
5054 /// PerformContextuallyConvertToObjCPointer - Perform a contextual
5055 /// conversion of the expression From to an Objective-C pointer type.
PerformContextuallyConvertToObjCPointer(Expr * From)5056 ExprResult Sema::PerformContextuallyConvertToObjCPointer(Expr *From) {
5057 if (checkPlaceholderForOverload(*this, From))
5058 return ExprError();
5059
5060 QualType Ty = Context.getObjCIdType();
5061 ImplicitConversionSequence ICS =
5062 TryContextuallyConvertToObjCPointer(*this, From);
5063 if (!ICS.isBad())
5064 return PerformImplicitConversion(From, Ty, ICS, AA_Converting);
5065 return ExprError();
5066 }
5067
5068 /// Determine whether the provided type is an integral type, or an enumeration
5069 /// type of a permitted flavor.
match(QualType T)5070 bool Sema::ICEConvertDiagnoser::match(QualType T) {
5071 return AllowScopedEnumerations ? T->isIntegralOrEnumerationType()
5072 : T->isIntegralOrUnscopedEnumerationType();
5073 }
5074
5075 static ExprResult
diagnoseAmbiguousConversion(Sema & SemaRef,SourceLocation Loc,Expr * From,Sema::ContextualImplicitConverter & Converter,QualType T,UnresolvedSetImpl & ViableConversions)5076 diagnoseAmbiguousConversion(Sema &SemaRef, SourceLocation Loc, Expr *From,
5077 Sema::ContextualImplicitConverter &Converter,
5078 QualType T, UnresolvedSetImpl &ViableConversions) {
5079
5080 if (Converter.Suppress)
5081 return ExprError();
5082
5083 Converter.diagnoseAmbiguous(SemaRef, Loc, T) << From->getSourceRange();
5084 for (unsigned I = 0, N = ViableConversions.size(); I != N; ++I) {
5085 CXXConversionDecl *Conv =
5086 cast<CXXConversionDecl>(ViableConversions[I]->getUnderlyingDecl());
5087 QualType ConvTy = Conv->getConversionType().getNonReferenceType();
5088 Converter.noteAmbiguous(SemaRef, Conv, ConvTy);
5089 }
5090 return SemaRef.Owned(From);
5091 }
5092
5093 static bool
diagnoseNoViableConversion(Sema & SemaRef,SourceLocation Loc,Expr * & From,Sema::ContextualImplicitConverter & Converter,QualType T,bool HadMultipleCandidates,UnresolvedSetImpl & ExplicitConversions)5094 diagnoseNoViableConversion(Sema &SemaRef, SourceLocation Loc, Expr *&From,
5095 Sema::ContextualImplicitConverter &Converter,
5096 QualType T, bool HadMultipleCandidates,
5097 UnresolvedSetImpl &ExplicitConversions) {
5098 if (ExplicitConversions.size() == 1 && !Converter.Suppress) {
5099 DeclAccessPair Found = ExplicitConversions[0];
5100 CXXConversionDecl *Conversion =
5101 cast<CXXConversionDecl>(Found->getUnderlyingDecl());
5102
5103 // The user probably meant to invoke the given explicit
5104 // conversion; use it.
5105 QualType ConvTy = Conversion->getConversionType().getNonReferenceType();
5106 std::string TypeStr;
5107 ConvTy.getAsStringInternal(TypeStr, SemaRef.getPrintingPolicy());
5108
5109 Converter.diagnoseExplicitConv(SemaRef, Loc, T, ConvTy)
5110 << FixItHint::CreateInsertion(From->getLocStart(),
5111 "static_cast<" + TypeStr + ">(")
5112 << FixItHint::CreateInsertion(
5113 SemaRef.PP.getLocForEndOfToken(From->getLocEnd()), ")");
5114 Converter.noteExplicitConv(SemaRef, Conversion, ConvTy);
5115
5116 // If we aren't in a SFINAE context, build a call to the
5117 // explicit conversion function.
5118 if (SemaRef.isSFINAEContext())
5119 return true;
5120
5121 SemaRef.CheckMemberOperatorAccess(From->getExprLoc(), From, 0, Found);
5122 ExprResult Result = SemaRef.BuildCXXMemberCallExpr(From, Found, Conversion,
5123 HadMultipleCandidates);
5124 if (Result.isInvalid())
5125 return true;
5126 // Record usage of conversion in an implicit cast.
5127 From = ImplicitCastExpr::Create(SemaRef.Context, Result.get()->getType(),
5128 CK_UserDefinedConversion, Result.get(), 0,
5129 Result.get()->getValueKind());
5130 }
5131 return false;
5132 }
5133
recordConversion(Sema & SemaRef,SourceLocation Loc,Expr * & From,Sema::ContextualImplicitConverter & Converter,QualType T,bool HadMultipleCandidates,DeclAccessPair & Found)5134 static bool recordConversion(Sema &SemaRef, SourceLocation Loc, Expr *&From,
5135 Sema::ContextualImplicitConverter &Converter,
5136 QualType T, bool HadMultipleCandidates,
5137 DeclAccessPair &Found) {
5138 CXXConversionDecl *Conversion =
5139 cast<CXXConversionDecl>(Found->getUnderlyingDecl());
5140 SemaRef.CheckMemberOperatorAccess(From->getExprLoc(), From, 0, Found);
5141
5142 QualType ToType = Conversion->getConversionType().getNonReferenceType();
5143 if (!Converter.SuppressConversion) {
5144 if (SemaRef.isSFINAEContext())
5145 return true;
5146
5147 Converter.diagnoseConversion(SemaRef, Loc, T, ToType)
5148 << From->getSourceRange();
5149 }
5150
5151 ExprResult Result = SemaRef.BuildCXXMemberCallExpr(From, Found, Conversion,
5152 HadMultipleCandidates);
5153 if (Result.isInvalid())
5154 return true;
5155 // Record usage of conversion in an implicit cast.
5156 From = ImplicitCastExpr::Create(SemaRef.Context, Result.get()->getType(),
5157 CK_UserDefinedConversion, Result.get(), 0,
5158 Result.get()->getValueKind());
5159 return false;
5160 }
5161
finishContextualImplicitConversion(Sema & SemaRef,SourceLocation Loc,Expr * From,Sema::ContextualImplicitConverter & Converter)5162 static ExprResult finishContextualImplicitConversion(
5163 Sema &SemaRef, SourceLocation Loc, Expr *From,
5164 Sema::ContextualImplicitConverter &Converter) {
5165 if (!Converter.match(From->getType()) && !Converter.Suppress)
5166 Converter.diagnoseNoMatch(SemaRef, Loc, From->getType())
5167 << From->getSourceRange();
5168
5169 return SemaRef.DefaultLvalueConversion(From);
5170 }
5171
5172 static void
collectViableConversionCandidates(Sema & SemaRef,Expr * From,QualType ToType,UnresolvedSetImpl & ViableConversions,OverloadCandidateSet & CandidateSet)5173 collectViableConversionCandidates(Sema &SemaRef, Expr *From, QualType ToType,
5174 UnresolvedSetImpl &ViableConversions,
5175 OverloadCandidateSet &CandidateSet) {
5176 for (unsigned I = 0, N = ViableConversions.size(); I != N; ++I) {
5177 DeclAccessPair FoundDecl = ViableConversions[I];
5178 NamedDecl *D = FoundDecl.getDecl();
5179 CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
5180 if (isa<UsingShadowDecl>(D))
5181 D = cast<UsingShadowDecl>(D)->getTargetDecl();
5182
5183 CXXConversionDecl *Conv;
5184 FunctionTemplateDecl *ConvTemplate;
5185 if ((ConvTemplate = dyn_cast<FunctionTemplateDecl>(D)))
5186 Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
5187 else
5188 Conv = cast<CXXConversionDecl>(D);
5189
5190 if (ConvTemplate)
5191 SemaRef.AddTemplateConversionCandidate(
5192 ConvTemplate, FoundDecl, ActingContext, From, ToType, CandidateSet);
5193 else
5194 SemaRef.AddConversionCandidate(Conv, FoundDecl, ActingContext, From,
5195 ToType, CandidateSet);
5196 }
5197 }
5198
5199 /// \brief Attempt to convert the given expression to a type which is accepted
5200 /// by the given converter.
5201 ///
5202 /// This routine will attempt to convert an expression of class type to a
5203 /// type accepted by the specified converter. In C++11 and before, the class
5204 /// must have a single non-explicit conversion function converting to a matching
5205 /// type. In C++1y, there can be multiple such conversion functions, but only
5206 /// one target type.
5207 ///
5208 /// \param Loc The source location of the construct that requires the
5209 /// conversion.
5210 ///
5211 /// \param From The expression we're converting from.
5212 ///
5213 /// \param Converter Used to control and diagnose the conversion process.
5214 ///
5215 /// \returns The expression, converted to an integral or enumeration type if
5216 /// successful.
PerformContextualImplicitConversion(SourceLocation Loc,Expr * From,ContextualImplicitConverter & Converter)5217 ExprResult Sema::PerformContextualImplicitConversion(
5218 SourceLocation Loc, Expr *From, ContextualImplicitConverter &Converter) {
5219 // We can't perform any more checking for type-dependent expressions.
5220 if (From->isTypeDependent())
5221 return Owned(From);
5222
5223 // Process placeholders immediately.
5224 if (From->hasPlaceholderType()) {
5225 ExprResult result = CheckPlaceholderExpr(From);
5226 if (result.isInvalid())
5227 return result;
5228 From = result.take();
5229 }
5230
5231 // If the expression already has a matching type, we're golden.
5232 QualType T = From->getType();
5233 if (Converter.match(T))
5234 return DefaultLvalueConversion(From);
5235
5236 // FIXME: Check for missing '()' if T is a function type?
5237
5238 // We can only perform contextual implicit conversions on objects of class
5239 // type.
5240 const RecordType *RecordTy = T->getAs<RecordType>();
5241 if (!RecordTy || !getLangOpts().CPlusPlus) {
5242 if (!Converter.Suppress)
5243 Converter.diagnoseNoMatch(*this, Loc, T) << From->getSourceRange();
5244 return Owned(From);
5245 }
5246
5247 // We must have a complete class type.
5248 struct TypeDiagnoserPartialDiag : TypeDiagnoser {
5249 ContextualImplicitConverter &Converter;
5250 Expr *From;
5251
5252 TypeDiagnoserPartialDiag(ContextualImplicitConverter &Converter, Expr *From)
5253 : TypeDiagnoser(Converter.Suppress), Converter(Converter), From(From) {}
5254
5255 virtual void diagnose(Sema &S, SourceLocation Loc, QualType T) {
5256 Converter.diagnoseIncomplete(S, Loc, T) << From->getSourceRange();
5257 }
5258 } IncompleteDiagnoser(Converter, From);
5259
5260 if (RequireCompleteType(Loc, T, IncompleteDiagnoser))
5261 return Owned(From);
5262
5263 // Look for a conversion to an integral or enumeration type.
5264 UnresolvedSet<4>
5265 ViableConversions; // These are *potentially* viable in C++1y.
5266 UnresolvedSet<4> ExplicitConversions;
5267 std::pair<CXXRecordDecl::conversion_iterator,
5268 CXXRecordDecl::conversion_iterator> Conversions =
5269 cast<CXXRecordDecl>(RecordTy->getDecl())->getVisibleConversionFunctions();
5270
5271 bool HadMultipleCandidates =
5272 (std::distance(Conversions.first, Conversions.second) > 1);
5273
5274 // To check that there is only one target type, in C++1y:
5275 QualType ToType;
5276 bool HasUniqueTargetType = true;
5277
5278 // Collect explicit or viable (potentially in C++1y) conversions.
5279 for (CXXRecordDecl::conversion_iterator I = Conversions.first,
5280 E = Conversions.second;
5281 I != E; ++I) {
5282 NamedDecl *D = (*I)->getUnderlyingDecl();
5283 CXXConversionDecl *Conversion;
5284 FunctionTemplateDecl *ConvTemplate = dyn_cast<FunctionTemplateDecl>(D);
5285 if (ConvTemplate) {
5286 if (getLangOpts().CPlusPlus1y)
5287 Conversion = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
5288 else
5289 continue; // C++11 does not consider conversion operator templates(?).
5290 } else
5291 Conversion = cast<CXXConversionDecl>(D);
5292
5293 assert((!ConvTemplate || getLangOpts().CPlusPlus1y) &&
5294 "Conversion operator templates are considered potentially "
5295 "viable in C++1y");
5296
5297 QualType CurToType = Conversion->getConversionType().getNonReferenceType();
5298 if (Converter.match(CurToType) || ConvTemplate) {
5299
5300 if (Conversion->isExplicit()) {
5301 // FIXME: For C++1y, do we need this restriction?
5302 // cf. diagnoseNoViableConversion()
5303 if (!ConvTemplate)
5304 ExplicitConversions.addDecl(I.getDecl(), I.getAccess());
5305 } else {
5306 if (!ConvTemplate && getLangOpts().CPlusPlus1y) {
5307 if (ToType.isNull())
5308 ToType = CurToType.getUnqualifiedType();
5309 else if (HasUniqueTargetType &&
5310 (CurToType.getUnqualifiedType() != ToType))
5311 HasUniqueTargetType = false;
5312 }
5313 ViableConversions.addDecl(I.getDecl(), I.getAccess());
5314 }
5315 }
5316 }
5317
5318 if (getLangOpts().CPlusPlus1y) {
5319 // C++1y [conv]p6:
5320 // ... An expression e of class type E appearing in such a context
5321 // is said to be contextually implicitly converted to a specified
5322 // type T and is well-formed if and only if e can be implicitly
5323 // converted to a type T that is determined as follows: E is searched
5324 // for conversion functions whose return type is cv T or reference to
5325 // cv T such that T is allowed by the context. There shall be
5326 // exactly one such T.
5327
5328 // If no unique T is found:
5329 if (ToType.isNull()) {
5330 if (diagnoseNoViableConversion(*this, Loc, From, Converter, T,
5331 HadMultipleCandidates,
5332 ExplicitConversions))
5333 return ExprError();
5334 return finishContextualImplicitConversion(*this, Loc, From, Converter);
5335 }
5336
5337 // If more than one unique Ts are found:
5338 if (!HasUniqueTargetType)
5339 return diagnoseAmbiguousConversion(*this, Loc, From, Converter, T,
5340 ViableConversions);
5341
5342 // If one unique T is found:
5343 // First, build a candidate set from the previously recorded
5344 // potentially viable conversions.
5345 OverloadCandidateSet CandidateSet(Loc);
5346 collectViableConversionCandidates(*this, From, ToType, ViableConversions,
5347 CandidateSet);
5348
5349 // Then, perform overload resolution over the candidate set.
5350 OverloadCandidateSet::iterator Best;
5351 switch (CandidateSet.BestViableFunction(*this, Loc, Best)) {
5352 case OR_Success: {
5353 // Apply this conversion.
5354 DeclAccessPair Found =
5355 DeclAccessPair::make(Best->Function, Best->FoundDecl.getAccess());
5356 if (recordConversion(*this, Loc, From, Converter, T,
5357 HadMultipleCandidates, Found))
5358 return ExprError();
5359 break;
5360 }
5361 case OR_Ambiguous:
5362 return diagnoseAmbiguousConversion(*this, Loc, From, Converter, T,
5363 ViableConversions);
5364 case OR_No_Viable_Function:
5365 if (diagnoseNoViableConversion(*this, Loc, From, Converter, T,
5366 HadMultipleCandidates,
5367 ExplicitConversions))
5368 return ExprError();
5369 // fall through 'OR_Deleted' case.
5370 case OR_Deleted:
5371 // We'll complain below about a non-integral condition type.
5372 break;
5373 }
5374 } else {
5375 switch (ViableConversions.size()) {
5376 case 0: {
5377 if (diagnoseNoViableConversion(*this, Loc, From, Converter, T,
5378 HadMultipleCandidates,
5379 ExplicitConversions))
5380 return ExprError();
5381
5382 // We'll complain below about a non-integral condition type.
5383 break;
5384 }
5385 case 1: {
5386 // Apply this conversion.
5387 DeclAccessPair Found = ViableConversions[0];
5388 if (recordConversion(*this, Loc, From, Converter, T,
5389 HadMultipleCandidates, Found))
5390 return ExprError();
5391 break;
5392 }
5393 default:
5394 return diagnoseAmbiguousConversion(*this, Loc, From, Converter, T,
5395 ViableConversions);
5396 }
5397 }
5398
5399 return finishContextualImplicitConversion(*this, Loc, From, Converter);
5400 }
5401
5402 /// AddOverloadCandidate - Adds the given function to the set of
5403 /// candidate functions, using the given function call arguments. If
5404 /// @p SuppressUserConversions, then don't allow user-defined
5405 /// conversions via constructors or conversion operators.
5406 ///
5407 /// \param PartialOverloading true if we are performing "partial" overloading
5408 /// based on an incomplete set of function arguments. This feature is used by
5409 /// code completion.
5410 void
AddOverloadCandidate(FunctionDecl * Function,DeclAccessPair FoundDecl,ArrayRef<Expr * > Args,OverloadCandidateSet & CandidateSet,bool SuppressUserConversions,bool PartialOverloading,bool AllowExplicit)5411 Sema::AddOverloadCandidate(FunctionDecl *Function,
5412 DeclAccessPair FoundDecl,
5413 ArrayRef<Expr *> Args,
5414 OverloadCandidateSet& CandidateSet,
5415 bool SuppressUserConversions,
5416 bool PartialOverloading,
5417 bool AllowExplicit) {
5418 const FunctionProtoType* Proto
5419 = dyn_cast<FunctionProtoType>(Function->getType()->getAs<FunctionType>());
5420 assert(Proto && "Functions without a prototype cannot be overloaded");
5421 assert(!Function->getDescribedFunctionTemplate() &&
5422 "Use AddTemplateOverloadCandidate for function templates");
5423
5424 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Function)) {
5425 if (!isa<CXXConstructorDecl>(Method)) {
5426 // If we get here, it's because we're calling a member function
5427 // that is named without a member access expression (e.g.,
5428 // "this->f") that was either written explicitly or created
5429 // implicitly. This can happen with a qualified call to a member
5430 // function, e.g., X::f(). We use an empty type for the implied
5431 // object argument (C++ [over.call.func]p3), and the acting context
5432 // is irrelevant.
5433 AddMethodCandidate(Method, FoundDecl, Method->getParent(),
5434 QualType(), Expr::Classification::makeSimpleLValue(),
5435 Args, CandidateSet, SuppressUserConversions);
5436 return;
5437 }
5438 // We treat a constructor like a non-member function, since its object
5439 // argument doesn't participate in overload resolution.
5440 }
5441
5442 if (!CandidateSet.isNewCandidate(Function))
5443 return;
5444
5445 // Overload resolution is always an unevaluated context.
5446 EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5447
5448 if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Function)){
5449 // C++ [class.copy]p3:
5450 // A member function template is never instantiated to perform the copy
5451 // of a class object to an object of its class type.
5452 QualType ClassType = Context.getTypeDeclType(Constructor->getParent());
5453 if (Args.size() == 1 &&
5454 Constructor->isSpecializationCopyingObject() &&
5455 (Context.hasSameUnqualifiedType(ClassType, Args[0]->getType()) ||
5456 IsDerivedFrom(Args[0]->getType(), ClassType)))
5457 return;
5458 }
5459
5460 // Add this candidate
5461 OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size());
5462 Candidate.FoundDecl = FoundDecl;
5463 Candidate.Function = Function;
5464 Candidate.Viable = true;
5465 Candidate.IsSurrogate = false;
5466 Candidate.IgnoreObjectArgument = false;
5467 Candidate.ExplicitCallArguments = Args.size();
5468
5469 unsigned NumArgsInProto = Proto->getNumArgs();
5470
5471 // (C++ 13.3.2p2): A candidate function having fewer than m
5472 // parameters is viable only if it has an ellipsis in its parameter
5473 // list (8.3.5).
5474 if ((Args.size() + (PartialOverloading && Args.size())) > NumArgsInProto &&
5475 !Proto->isVariadic()) {
5476 Candidate.Viable = false;
5477 Candidate.FailureKind = ovl_fail_too_many_arguments;
5478 return;
5479 }
5480
5481 // (C++ 13.3.2p2): A candidate function having more than m parameters
5482 // is viable only if the (m+1)st parameter has a default argument
5483 // (8.3.6). For the purposes of overload resolution, the
5484 // parameter list is truncated on the right, so that there are
5485 // exactly m parameters.
5486 unsigned MinRequiredArgs = Function->getMinRequiredArguments();
5487 if (Args.size() < MinRequiredArgs && !PartialOverloading) {
5488 // Not enough arguments.
5489 Candidate.Viable = false;
5490 Candidate.FailureKind = ovl_fail_too_few_arguments;
5491 return;
5492 }
5493
5494 // (CUDA B.1): Check for invalid calls between targets.
5495 if (getLangOpts().CUDA)
5496 if (const FunctionDecl *Caller = dyn_cast<FunctionDecl>(CurContext))
5497 if (CheckCUDATarget(Caller, Function)) {
5498 Candidate.Viable = false;
5499 Candidate.FailureKind = ovl_fail_bad_target;
5500 return;
5501 }
5502
5503 // Determine the implicit conversion sequences for each of the
5504 // arguments.
5505 for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
5506 if (ArgIdx < NumArgsInProto) {
5507 // (C++ 13.3.2p3): for F to be a viable function, there shall
5508 // exist for each argument an implicit conversion sequence
5509 // (13.3.3.1) that converts that argument to the corresponding
5510 // parameter of F.
5511 QualType ParamType = Proto->getArgType(ArgIdx);
5512 Candidate.Conversions[ArgIdx]
5513 = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5514 SuppressUserConversions,
5515 /*InOverloadResolution=*/true,
5516 /*AllowObjCWritebackConversion=*/
5517 getLangOpts().ObjCAutoRefCount,
5518 AllowExplicit);
5519 if (Candidate.Conversions[ArgIdx].isBad()) {
5520 Candidate.Viable = false;
5521 Candidate.FailureKind = ovl_fail_bad_conversion;
5522 break;
5523 }
5524 } else {
5525 // (C++ 13.3.2p2): For the purposes of overload resolution, any
5526 // argument for which there is no corresponding parameter is
5527 // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
5528 Candidate.Conversions[ArgIdx].setEllipsis();
5529 }
5530 }
5531 }
5532
5533 /// \brief Add all of the function declarations in the given function set to
5534 /// the overload canddiate set.
AddFunctionCandidates(const UnresolvedSetImpl & Fns,ArrayRef<Expr * > Args,OverloadCandidateSet & CandidateSet,bool SuppressUserConversions,TemplateArgumentListInfo * ExplicitTemplateArgs)5535 void Sema::AddFunctionCandidates(const UnresolvedSetImpl &Fns,
5536 ArrayRef<Expr *> Args,
5537 OverloadCandidateSet& CandidateSet,
5538 bool SuppressUserConversions,
5539 TemplateArgumentListInfo *ExplicitTemplateArgs) {
5540 for (UnresolvedSetIterator F = Fns.begin(), E = Fns.end(); F != E; ++F) {
5541 NamedDecl *D = F.getDecl()->getUnderlyingDecl();
5542 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
5543 if (isa<CXXMethodDecl>(FD) && !cast<CXXMethodDecl>(FD)->isStatic())
5544 AddMethodCandidate(cast<CXXMethodDecl>(FD), F.getPair(),
5545 cast<CXXMethodDecl>(FD)->getParent(),
5546 Args[0]->getType(), Args[0]->Classify(Context),
5547 Args.slice(1), CandidateSet,
5548 SuppressUserConversions);
5549 else
5550 AddOverloadCandidate(FD, F.getPair(), Args, CandidateSet,
5551 SuppressUserConversions);
5552 } else {
5553 FunctionTemplateDecl *FunTmpl = cast<FunctionTemplateDecl>(D);
5554 if (isa<CXXMethodDecl>(FunTmpl->getTemplatedDecl()) &&
5555 !cast<CXXMethodDecl>(FunTmpl->getTemplatedDecl())->isStatic())
5556 AddMethodTemplateCandidate(FunTmpl, F.getPair(),
5557 cast<CXXRecordDecl>(FunTmpl->getDeclContext()),
5558 ExplicitTemplateArgs,
5559 Args[0]->getType(),
5560 Args[0]->Classify(Context), Args.slice(1),
5561 CandidateSet, SuppressUserConversions);
5562 else
5563 AddTemplateOverloadCandidate(FunTmpl, F.getPair(),
5564 ExplicitTemplateArgs, Args,
5565 CandidateSet, SuppressUserConversions);
5566 }
5567 }
5568 }
5569
5570 /// AddMethodCandidate - Adds a named decl (which is some kind of
5571 /// method) as a method candidate to the given overload set.
AddMethodCandidate(DeclAccessPair FoundDecl,QualType ObjectType,Expr::Classification ObjectClassification,ArrayRef<Expr * > Args,OverloadCandidateSet & CandidateSet,bool SuppressUserConversions)5572 void Sema::AddMethodCandidate(DeclAccessPair FoundDecl,
5573 QualType ObjectType,
5574 Expr::Classification ObjectClassification,
5575 ArrayRef<Expr *> Args,
5576 OverloadCandidateSet& CandidateSet,
5577 bool SuppressUserConversions) {
5578 NamedDecl *Decl = FoundDecl.getDecl();
5579 CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(Decl->getDeclContext());
5580
5581 if (isa<UsingShadowDecl>(Decl))
5582 Decl = cast<UsingShadowDecl>(Decl)->getTargetDecl();
5583
5584 if (FunctionTemplateDecl *TD = dyn_cast<FunctionTemplateDecl>(Decl)) {
5585 assert(isa<CXXMethodDecl>(TD->getTemplatedDecl()) &&
5586 "Expected a member function template");
5587 AddMethodTemplateCandidate(TD, FoundDecl, ActingContext,
5588 /*ExplicitArgs*/ 0,
5589 ObjectType, ObjectClassification,
5590 Args, CandidateSet,
5591 SuppressUserConversions);
5592 } else {
5593 AddMethodCandidate(cast<CXXMethodDecl>(Decl), FoundDecl, ActingContext,
5594 ObjectType, ObjectClassification,
5595 Args,
5596 CandidateSet, SuppressUserConversions);
5597 }
5598 }
5599
5600 /// AddMethodCandidate - Adds the given C++ member function to the set
5601 /// of candidate functions, using the given function call arguments
5602 /// and the object argument (@c Object). For example, in a call
5603 /// @c o.f(a1,a2), @c Object will contain @c o and @c Args will contain
5604 /// both @c a1 and @c a2. If @p SuppressUserConversions, then don't
5605 /// allow user-defined conversions via constructors or conversion
5606 /// operators.
5607 void
AddMethodCandidate(CXXMethodDecl * Method,DeclAccessPair FoundDecl,CXXRecordDecl * ActingContext,QualType ObjectType,Expr::Classification ObjectClassification,ArrayRef<Expr * > Args,OverloadCandidateSet & CandidateSet,bool SuppressUserConversions)5608 Sema::AddMethodCandidate(CXXMethodDecl *Method, DeclAccessPair FoundDecl,
5609 CXXRecordDecl *ActingContext, QualType ObjectType,
5610 Expr::Classification ObjectClassification,
5611 ArrayRef<Expr *> Args,
5612 OverloadCandidateSet& CandidateSet,
5613 bool SuppressUserConversions) {
5614 const FunctionProtoType* Proto
5615 = dyn_cast<FunctionProtoType>(Method->getType()->getAs<FunctionType>());
5616 assert(Proto && "Methods without a prototype cannot be overloaded");
5617 assert(!isa<CXXConstructorDecl>(Method) &&
5618 "Use AddOverloadCandidate for constructors");
5619
5620 if (!CandidateSet.isNewCandidate(Method))
5621 return;
5622
5623 // Overload resolution is always an unevaluated context.
5624 EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5625
5626 // Add this candidate
5627 OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size() + 1);
5628 Candidate.FoundDecl = FoundDecl;
5629 Candidate.Function = Method;
5630 Candidate.IsSurrogate = false;
5631 Candidate.IgnoreObjectArgument = false;
5632 Candidate.ExplicitCallArguments = Args.size();
5633
5634 unsigned NumArgsInProto = Proto->getNumArgs();
5635
5636 // (C++ 13.3.2p2): A candidate function having fewer than m
5637 // parameters is viable only if it has an ellipsis in its parameter
5638 // list (8.3.5).
5639 if (Args.size() > NumArgsInProto && !Proto->isVariadic()) {
5640 Candidate.Viable = false;
5641 Candidate.FailureKind = ovl_fail_too_many_arguments;
5642 return;
5643 }
5644
5645 // (C++ 13.3.2p2): A candidate function having more than m parameters
5646 // is viable only if the (m+1)st parameter has a default argument
5647 // (8.3.6). For the purposes of overload resolution, the
5648 // parameter list is truncated on the right, so that there are
5649 // exactly m parameters.
5650 unsigned MinRequiredArgs = Method->getMinRequiredArguments();
5651 if (Args.size() < MinRequiredArgs) {
5652 // Not enough arguments.
5653 Candidate.Viable = false;
5654 Candidate.FailureKind = ovl_fail_too_few_arguments;
5655 return;
5656 }
5657
5658 Candidate.Viable = true;
5659
5660 if (Method->isStatic() || ObjectType.isNull())
5661 // The implicit object argument is ignored.
5662 Candidate.IgnoreObjectArgument = true;
5663 else {
5664 // Determine the implicit conversion sequence for the object
5665 // parameter.
5666 Candidate.Conversions[0]
5667 = TryObjectArgumentInitialization(*this, ObjectType, ObjectClassification,
5668 Method, ActingContext);
5669 if (Candidate.Conversions[0].isBad()) {
5670 Candidate.Viable = false;
5671 Candidate.FailureKind = ovl_fail_bad_conversion;
5672 return;
5673 }
5674 }
5675
5676 // Determine the implicit conversion sequences for each of the
5677 // arguments.
5678 for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
5679 if (ArgIdx < NumArgsInProto) {
5680 // (C++ 13.3.2p3): for F to be a viable function, there shall
5681 // exist for each argument an implicit conversion sequence
5682 // (13.3.3.1) that converts that argument to the corresponding
5683 // parameter of F.
5684 QualType ParamType = Proto->getArgType(ArgIdx);
5685 Candidate.Conversions[ArgIdx + 1]
5686 = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5687 SuppressUserConversions,
5688 /*InOverloadResolution=*/true,
5689 /*AllowObjCWritebackConversion=*/
5690 getLangOpts().ObjCAutoRefCount);
5691 if (Candidate.Conversions[ArgIdx + 1].isBad()) {
5692 Candidate.Viable = false;
5693 Candidate.FailureKind = ovl_fail_bad_conversion;
5694 break;
5695 }
5696 } else {
5697 // (C++ 13.3.2p2): For the purposes of overload resolution, any
5698 // argument for which there is no corresponding parameter is
5699 // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
5700 Candidate.Conversions[ArgIdx + 1].setEllipsis();
5701 }
5702 }
5703 }
5704
5705 /// \brief Add a C++ member function template as a candidate to the candidate
5706 /// set, using template argument deduction to produce an appropriate member
5707 /// function template specialization.
5708 void
AddMethodTemplateCandidate(FunctionTemplateDecl * MethodTmpl,DeclAccessPair FoundDecl,CXXRecordDecl * ActingContext,TemplateArgumentListInfo * ExplicitTemplateArgs,QualType ObjectType,Expr::Classification ObjectClassification,ArrayRef<Expr * > Args,OverloadCandidateSet & CandidateSet,bool SuppressUserConversions)5709 Sema::AddMethodTemplateCandidate(FunctionTemplateDecl *MethodTmpl,
5710 DeclAccessPair FoundDecl,
5711 CXXRecordDecl *ActingContext,
5712 TemplateArgumentListInfo *ExplicitTemplateArgs,
5713 QualType ObjectType,
5714 Expr::Classification ObjectClassification,
5715 ArrayRef<Expr *> Args,
5716 OverloadCandidateSet& CandidateSet,
5717 bool SuppressUserConversions) {
5718 if (!CandidateSet.isNewCandidate(MethodTmpl))
5719 return;
5720
5721 // C++ [over.match.funcs]p7:
5722 // In each case where a candidate is a function template, candidate
5723 // function template specializations are generated using template argument
5724 // deduction (14.8.3, 14.8.2). Those candidates are then handled as
5725 // candidate functions in the usual way.113) A given name can refer to one
5726 // or more function templates and also to a set of overloaded non-template
5727 // functions. In such a case, the candidate functions generated from each
5728 // function template are combined with the set of non-template candidate
5729 // functions.
5730 TemplateDeductionInfo Info(CandidateSet.getLocation());
5731 FunctionDecl *Specialization = 0;
5732 if (TemplateDeductionResult Result
5733 = DeduceTemplateArguments(MethodTmpl, ExplicitTemplateArgs, Args,
5734 Specialization, Info)) {
5735 OverloadCandidate &Candidate = CandidateSet.addCandidate();
5736 Candidate.FoundDecl = FoundDecl;
5737 Candidate.Function = MethodTmpl->getTemplatedDecl();
5738 Candidate.Viable = false;
5739 Candidate.FailureKind = ovl_fail_bad_deduction;
5740 Candidate.IsSurrogate = false;
5741 Candidate.IgnoreObjectArgument = false;
5742 Candidate.ExplicitCallArguments = Args.size();
5743 Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5744 Info);
5745 return;
5746 }
5747
5748 // Add the function template specialization produced by template argument
5749 // deduction as a candidate.
5750 assert(Specialization && "Missing member function template specialization?");
5751 assert(isa<CXXMethodDecl>(Specialization) &&
5752 "Specialization is not a member function?");
5753 AddMethodCandidate(cast<CXXMethodDecl>(Specialization), FoundDecl,
5754 ActingContext, ObjectType, ObjectClassification, Args,
5755 CandidateSet, SuppressUserConversions);
5756 }
5757
5758 /// \brief Add a C++ function template specialization as a candidate
5759 /// in the candidate set, using template argument deduction to produce
5760 /// an appropriate function template specialization.
5761 void
AddTemplateOverloadCandidate(FunctionTemplateDecl * FunctionTemplate,DeclAccessPair FoundDecl,TemplateArgumentListInfo * ExplicitTemplateArgs,ArrayRef<Expr * > Args,OverloadCandidateSet & CandidateSet,bool SuppressUserConversions)5762 Sema::AddTemplateOverloadCandidate(FunctionTemplateDecl *FunctionTemplate,
5763 DeclAccessPair FoundDecl,
5764 TemplateArgumentListInfo *ExplicitTemplateArgs,
5765 ArrayRef<Expr *> Args,
5766 OverloadCandidateSet& CandidateSet,
5767 bool SuppressUserConversions) {
5768 if (!CandidateSet.isNewCandidate(FunctionTemplate))
5769 return;
5770
5771 // C++ [over.match.funcs]p7:
5772 // In each case where a candidate is a function template, candidate
5773 // function template specializations are generated using template argument
5774 // deduction (14.8.3, 14.8.2). Those candidates are then handled as
5775 // candidate functions in the usual way.113) A given name can refer to one
5776 // or more function templates and also to a set of overloaded non-template
5777 // functions. In such a case, the candidate functions generated from each
5778 // function template are combined with the set of non-template candidate
5779 // functions.
5780 TemplateDeductionInfo Info(CandidateSet.getLocation());
5781 FunctionDecl *Specialization = 0;
5782 if (TemplateDeductionResult Result
5783 = DeduceTemplateArguments(FunctionTemplate, ExplicitTemplateArgs, Args,
5784 Specialization, Info)) {
5785 OverloadCandidate &Candidate = CandidateSet.addCandidate();
5786 Candidate.FoundDecl = FoundDecl;
5787 Candidate.Function = FunctionTemplate->getTemplatedDecl();
5788 Candidate.Viable = false;
5789 Candidate.FailureKind = ovl_fail_bad_deduction;
5790 Candidate.IsSurrogate = false;
5791 Candidate.IgnoreObjectArgument = false;
5792 Candidate.ExplicitCallArguments = Args.size();
5793 Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5794 Info);
5795 return;
5796 }
5797
5798 // Add the function template specialization produced by template argument
5799 // deduction as a candidate.
5800 assert(Specialization && "Missing function template specialization?");
5801 AddOverloadCandidate(Specialization, FoundDecl, Args, CandidateSet,
5802 SuppressUserConversions);
5803 }
5804
5805 /// AddConversionCandidate - Add a C++ conversion function as a
5806 /// candidate in the candidate set (C++ [over.match.conv],
5807 /// C++ [over.match.copy]). From is the expression we're converting from,
5808 /// and ToType is the type that we're eventually trying to convert to
5809 /// (which may or may not be the same type as the type that the
5810 /// conversion function produces).
5811 void
AddConversionCandidate(CXXConversionDecl * Conversion,DeclAccessPair FoundDecl,CXXRecordDecl * ActingContext,Expr * From,QualType ToType,OverloadCandidateSet & CandidateSet)5812 Sema::AddConversionCandidate(CXXConversionDecl *Conversion,
5813 DeclAccessPair FoundDecl,
5814 CXXRecordDecl *ActingContext,
5815 Expr *From, QualType ToType,
5816 OverloadCandidateSet& CandidateSet) {
5817 assert(!Conversion->getDescribedFunctionTemplate() &&
5818 "Conversion function templates use AddTemplateConversionCandidate");
5819 QualType ConvType = Conversion->getConversionType().getNonReferenceType();
5820 if (!CandidateSet.isNewCandidate(Conversion))
5821 return;
5822
5823 // If the conversion function has an undeduced return type, trigger its
5824 // deduction now.
5825 if (getLangOpts().CPlusPlus1y && ConvType->isUndeducedType()) {
5826 if (DeduceReturnType(Conversion, From->getExprLoc()))
5827 return;
5828 ConvType = Conversion->getConversionType().getNonReferenceType();
5829 }
5830
5831 // Overload resolution is always an unevaluated context.
5832 EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5833
5834 // Add this candidate
5835 OverloadCandidate &Candidate = CandidateSet.addCandidate(1);
5836 Candidate.FoundDecl = FoundDecl;
5837 Candidate.Function = Conversion;
5838 Candidate.IsSurrogate = false;
5839 Candidate.IgnoreObjectArgument = false;
5840 Candidate.FinalConversion.setAsIdentityConversion();
5841 Candidate.FinalConversion.setFromType(ConvType);
5842 Candidate.FinalConversion.setAllToTypes(ToType);
5843 Candidate.Viable = true;
5844 Candidate.ExplicitCallArguments = 1;
5845
5846 // C++ [over.match.funcs]p4:
5847 // For conversion functions, the function is considered to be a member of
5848 // the class of the implicit implied object argument for the purpose of
5849 // defining the type of the implicit object parameter.
5850 //
5851 // Determine the implicit conversion sequence for the implicit
5852 // object parameter.
5853 QualType ImplicitParamType = From->getType();
5854 if (const PointerType *FromPtrType = ImplicitParamType->getAs<PointerType>())
5855 ImplicitParamType = FromPtrType->getPointeeType();
5856 CXXRecordDecl *ConversionContext
5857 = cast<CXXRecordDecl>(ImplicitParamType->getAs<RecordType>()->getDecl());
5858
5859 Candidate.Conversions[0]
5860 = TryObjectArgumentInitialization(*this, From->getType(),
5861 From->Classify(Context),
5862 Conversion, ConversionContext);
5863
5864 if (Candidate.Conversions[0].isBad()) {
5865 Candidate.Viable = false;
5866 Candidate.FailureKind = ovl_fail_bad_conversion;
5867 return;
5868 }
5869
5870 // We won't go through a user-define type conversion function to convert a
5871 // derived to base as such conversions are given Conversion Rank. They only
5872 // go through a copy constructor. 13.3.3.1.2-p4 [over.ics.user]
5873 QualType FromCanon
5874 = Context.getCanonicalType(From->getType().getUnqualifiedType());
5875 QualType ToCanon = Context.getCanonicalType(ToType).getUnqualifiedType();
5876 if (FromCanon == ToCanon || IsDerivedFrom(FromCanon, ToCanon)) {
5877 Candidate.Viable = false;
5878 Candidate.FailureKind = ovl_fail_trivial_conversion;
5879 return;
5880 }
5881
5882 // To determine what the conversion from the result of calling the
5883 // conversion function to the type we're eventually trying to
5884 // convert to (ToType), we need to synthesize a call to the
5885 // conversion function and attempt copy initialization from it. This
5886 // makes sure that we get the right semantics with respect to
5887 // lvalues/rvalues and the type. Fortunately, we can allocate this
5888 // call on the stack and we don't need its arguments to be
5889 // well-formed.
5890 DeclRefExpr ConversionRef(Conversion, false, Conversion->getType(),
5891 VK_LValue, From->getLocStart());
5892 ImplicitCastExpr ConversionFn(ImplicitCastExpr::OnStack,
5893 Context.getPointerType(Conversion->getType()),
5894 CK_FunctionToPointerDecay,
5895 &ConversionRef, VK_RValue);
5896
5897 QualType ConversionType = Conversion->getConversionType();
5898 if (RequireCompleteType(From->getLocStart(), ConversionType, 0)) {
5899 Candidate.Viable = false;
5900 Candidate.FailureKind = ovl_fail_bad_final_conversion;
5901 return;
5902 }
5903
5904 ExprValueKind VK = Expr::getValueKindForType(ConversionType);
5905
5906 // Note that it is safe to allocate CallExpr on the stack here because
5907 // there are 0 arguments (i.e., nothing is allocated using ASTContext's
5908 // allocator).
5909 QualType CallResultType = ConversionType.getNonLValueExprType(Context);
5910 CallExpr Call(Context, &ConversionFn, None, CallResultType, VK,
5911 From->getLocStart());
5912 ImplicitConversionSequence ICS =
5913 TryCopyInitialization(*this, &Call, ToType,
5914 /*SuppressUserConversions=*/true,
5915 /*InOverloadResolution=*/false,
5916 /*AllowObjCWritebackConversion=*/false);
5917
5918 switch (ICS.getKind()) {
5919 case ImplicitConversionSequence::StandardConversion:
5920 Candidate.FinalConversion = ICS.Standard;
5921
5922 // C++ [over.ics.user]p3:
5923 // If the user-defined conversion is specified by a specialization of a
5924 // conversion function template, the second standard conversion sequence
5925 // shall have exact match rank.
5926 if (Conversion->getPrimaryTemplate() &&
5927 GetConversionRank(ICS.Standard.Second) != ICR_Exact_Match) {
5928 Candidate.Viable = false;
5929 Candidate.FailureKind = ovl_fail_final_conversion_not_exact;
5930 }
5931
5932 // C++0x [dcl.init.ref]p5:
5933 // In the second case, if the reference is an rvalue reference and
5934 // the second standard conversion sequence of the user-defined
5935 // conversion sequence includes an lvalue-to-rvalue conversion, the
5936 // program is ill-formed.
5937 if (ToType->isRValueReferenceType() &&
5938 ICS.Standard.First == ICK_Lvalue_To_Rvalue) {
5939 Candidate.Viable = false;
5940 Candidate.FailureKind = ovl_fail_bad_final_conversion;
5941 }
5942 break;
5943
5944 case ImplicitConversionSequence::BadConversion:
5945 Candidate.Viable = false;
5946 Candidate.FailureKind = ovl_fail_bad_final_conversion;
5947 break;
5948
5949 default:
5950 llvm_unreachable(
5951 "Can only end up with a standard conversion sequence or failure");
5952 }
5953 }
5954
5955 /// \brief Adds a conversion function template specialization
5956 /// candidate to the overload set, using template argument deduction
5957 /// to deduce the template arguments of the conversion function
5958 /// template from the type that we are converting to (C++
5959 /// [temp.deduct.conv]).
5960 void
AddTemplateConversionCandidate(FunctionTemplateDecl * FunctionTemplate,DeclAccessPair FoundDecl,CXXRecordDecl * ActingDC,Expr * From,QualType ToType,OverloadCandidateSet & CandidateSet)5961 Sema::AddTemplateConversionCandidate(FunctionTemplateDecl *FunctionTemplate,
5962 DeclAccessPair FoundDecl,
5963 CXXRecordDecl *ActingDC,
5964 Expr *From, QualType ToType,
5965 OverloadCandidateSet &CandidateSet) {
5966 assert(isa<CXXConversionDecl>(FunctionTemplate->getTemplatedDecl()) &&
5967 "Only conversion function templates permitted here");
5968
5969 if (!CandidateSet.isNewCandidate(FunctionTemplate))
5970 return;
5971
5972 TemplateDeductionInfo Info(CandidateSet.getLocation());
5973 CXXConversionDecl *Specialization = 0;
5974 if (TemplateDeductionResult Result
5975 = DeduceTemplateArguments(FunctionTemplate, ToType,
5976 Specialization, Info)) {
5977 OverloadCandidate &Candidate = CandidateSet.addCandidate();
5978 Candidate.FoundDecl = FoundDecl;
5979 Candidate.Function = FunctionTemplate->getTemplatedDecl();
5980 Candidate.Viable = false;
5981 Candidate.FailureKind = ovl_fail_bad_deduction;
5982 Candidate.IsSurrogate = false;
5983 Candidate.IgnoreObjectArgument = false;
5984 Candidate.ExplicitCallArguments = 1;
5985 Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5986 Info);
5987 return;
5988 }
5989
5990 // Add the conversion function template specialization produced by
5991 // template argument deduction as a candidate.
5992 assert(Specialization && "Missing function template specialization?");
5993 AddConversionCandidate(Specialization, FoundDecl, ActingDC, From, ToType,
5994 CandidateSet);
5995 }
5996
5997 /// AddSurrogateCandidate - Adds a "surrogate" candidate function that
5998 /// converts the given @c Object to a function pointer via the
5999 /// conversion function @c Conversion, and then attempts to call it
6000 /// with the given arguments (C++ [over.call.object]p2-4). Proto is
6001 /// the type of function that we'll eventually be calling.
AddSurrogateCandidate(CXXConversionDecl * Conversion,DeclAccessPair FoundDecl,CXXRecordDecl * ActingContext,const FunctionProtoType * Proto,Expr * Object,ArrayRef<Expr * > Args,OverloadCandidateSet & CandidateSet)6002 void Sema::AddSurrogateCandidate(CXXConversionDecl *Conversion,
6003 DeclAccessPair FoundDecl,
6004 CXXRecordDecl *ActingContext,
6005 const FunctionProtoType *Proto,
6006 Expr *Object,
6007 ArrayRef<Expr *> Args,
6008 OverloadCandidateSet& CandidateSet) {
6009 if (!CandidateSet.isNewCandidate(Conversion))
6010 return;
6011
6012 // Overload resolution is always an unevaluated context.
6013 EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
6014
6015 OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size() + 1);
6016 Candidate.FoundDecl = FoundDecl;
6017 Candidate.Function = 0;
6018 Candidate.Surrogate = Conversion;
6019 Candidate.Viable = true;
6020 Candidate.IsSurrogate = true;
6021 Candidate.IgnoreObjectArgument = false;
6022 Candidate.ExplicitCallArguments = Args.size();
6023
6024 // Determine the implicit conversion sequence for the implicit
6025 // object parameter.
6026 ImplicitConversionSequence ObjectInit
6027 = TryObjectArgumentInitialization(*this, Object->getType(),
6028 Object->Classify(Context),
6029 Conversion, ActingContext);
6030 if (ObjectInit.isBad()) {
6031 Candidate.Viable = false;
6032 Candidate.FailureKind = ovl_fail_bad_conversion;
6033 Candidate.Conversions[0] = ObjectInit;
6034 return;
6035 }
6036
6037 // The first conversion is actually a user-defined conversion whose
6038 // first conversion is ObjectInit's standard conversion (which is
6039 // effectively a reference binding). Record it as such.
6040 Candidate.Conversions[0].setUserDefined();
6041 Candidate.Conversions[0].UserDefined.Before = ObjectInit.Standard;
6042 Candidate.Conversions[0].UserDefined.EllipsisConversion = false;
6043 Candidate.Conversions[0].UserDefined.HadMultipleCandidates = false;
6044 Candidate.Conversions[0].UserDefined.ConversionFunction = Conversion;
6045 Candidate.Conversions[0].UserDefined.FoundConversionFunction = FoundDecl;
6046 Candidate.Conversions[0].UserDefined.After
6047 = Candidate.Conversions[0].UserDefined.Before;
6048 Candidate.Conversions[0].UserDefined.After.setAsIdentityConversion();
6049
6050 // Find the
6051 unsigned NumArgsInProto = Proto->getNumArgs();
6052
6053 // (C++ 13.3.2p2): A candidate function having fewer than m
6054 // parameters is viable only if it has an ellipsis in its parameter
6055 // list (8.3.5).
6056 if (Args.size() > NumArgsInProto && !Proto->isVariadic()) {
6057 Candidate.Viable = false;
6058 Candidate.FailureKind = ovl_fail_too_many_arguments;
6059 return;
6060 }
6061
6062 // Function types don't have any default arguments, so just check if
6063 // we have enough arguments.
6064 if (Args.size() < NumArgsInProto) {
6065 // Not enough arguments.
6066 Candidate.Viable = false;
6067 Candidate.FailureKind = ovl_fail_too_few_arguments;
6068 return;
6069 }
6070
6071 // Determine the implicit conversion sequences for each of the
6072 // arguments.
6073 for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
6074 if (ArgIdx < NumArgsInProto) {
6075 // (C++ 13.3.2p3): for F to be a viable function, there shall
6076 // exist for each argument an implicit conversion sequence
6077 // (13.3.3.1) that converts that argument to the corresponding
6078 // parameter of F.
6079 QualType ParamType = Proto->getArgType(ArgIdx);
6080 Candidate.Conversions[ArgIdx + 1]
6081 = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
6082 /*SuppressUserConversions=*/false,
6083 /*InOverloadResolution=*/false,
6084 /*AllowObjCWritebackConversion=*/
6085 getLangOpts().ObjCAutoRefCount);
6086 if (Candidate.Conversions[ArgIdx + 1].isBad()) {
6087 Candidate.Viable = false;
6088 Candidate.FailureKind = ovl_fail_bad_conversion;
6089 break;
6090 }
6091 } else {
6092 // (C++ 13.3.2p2): For the purposes of overload resolution, any
6093 // argument for which there is no corresponding parameter is
6094 // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
6095 Candidate.Conversions[ArgIdx + 1].setEllipsis();
6096 }
6097 }
6098 }
6099
6100 /// \brief Add overload candidates for overloaded operators that are
6101 /// member functions.
6102 ///
6103 /// Add the overloaded operator candidates that are member functions
6104 /// for the operator Op that was used in an operator expression such
6105 /// as "x Op y". , Args/NumArgs provides the operator arguments, and
6106 /// CandidateSet will store the added overload candidates. (C++
6107 /// [over.match.oper]).
AddMemberOperatorCandidates(OverloadedOperatorKind Op,SourceLocation OpLoc,ArrayRef<Expr * > Args,OverloadCandidateSet & CandidateSet,SourceRange OpRange)6108 void Sema::AddMemberOperatorCandidates(OverloadedOperatorKind Op,
6109 SourceLocation OpLoc,
6110 ArrayRef<Expr *> Args,
6111 OverloadCandidateSet& CandidateSet,
6112 SourceRange OpRange) {
6113 DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
6114
6115 // C++ [over.match.oper]p3:
6116 // For a unary operator @ with an operand of a type whose
6117 // cv-unqualified version is T1, and for a binary operator @ with
6118 // a left operand of a type whose cv-unqualified version is T1 and
6119 // a right operand of a type whose cv-unqualified version is T2,
6120 // three sets of candidate functions, designated member
6121 // candidates, non-member candidates and built-in candidates, are
6122 // constructed as follows:
6123 QualType T1 = Args[0]->getType();
6124
6125 // -- If T1 is a complete class type or a class currently being
6126 // defined, the set of member candidates is the result of the
6127 // qualified lookup of T1::operator@ (13.3.1.1.1); otherwise,
6128 // the set of member candidates is empty.
6129 if (const RecordType *T1Rec = T1->getAs<RecordType>()) {
6130 // Complete the type if it can be completed.
6131 RequireCompleteType(OpLoc, T1, 0);
6132 // If the type is neither complete nor being defined, bail out now.
6133 if (!T1Rec->getDecl()->getDefinition())
6134 return;
6135
6136 LookupResult Operators(*this, OpName, OpLoc, LookupOrdinaryName);
6137 LookupQualifiedName(Operators, T1Rec->getDecl());
6138 Operators.suppressDiagnostics();
6139
6140 for (LookupResult::iterator Oper = Operators.begin(),
6141 OperEnd = Operators.end();
6142 Oper != OperEnd;
6143 ++Oper)
6144 AddMethodCandidate(Oper.getPair(), Args[0]->getType(),
6145 Args[0]->Classify(Context),
6146 Args.slice(1),
6147 CandidateSet,
6148 /* SuppressUserConversions = */ false);
6149 }
6150 }
6151
6152 /// AddBuiltinCandidate - Add a candidate for a built-in
6153 /// operator. ResultTy and ParamTys are the result and parameter types
6154 /// of the built-in candidate, respectively. Args and NumArgs are the
6155 /// arguments being passed to the candidate. IsAssignmentOperator
6156 /// should be true when this built-in candidate is an assignment
6157 /// operator. NumContextualBoolArguments is the number of arguments
6158 /// (at the beginning of the argument list) that will be contextually
6159 /// converted to bool.
AddBuiltinCandidate(QualType ResultTy,QualType * ParamTys,ArrayRef<Expr * > Args,OverloadCandidateSet & CandidateSet,bool IsAssignmentOperator,unsigned NumContextualBoolArguments)6160 void Sema::AddBuiltinCandidate(QualType ResultTy, QualType *ParamTys,
6161 ArrayRef<Expr *> Args,
6162 OverloadCandidateSet& CandidateSet,
6163 bool IsAssignmentOperator,
6164 unsigned NumContextualBoolArguments) {
6165 // Overload resolution is always an unevaluated context.
6166 EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
6167
6168 // Add this candidate
6169 OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size());
6170 Candidate.FoundDecl = DeclAccessPair::make(0, AS_none);
6171 Candidate.Function = 0;
6172 Candidate.IsSurrogate = false;
6173 Candidate.IgnoreObjectArgument = false;
6174 Candidate.BuiltinTypes.ResultTy = ResultTy;
6175 for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx)
6176 Candidate.BuiltinTypes.ParamTypes[ArgIdx] = ParamTys[ArgIdx];
6177
6178 // Determine the implicit conversion sequences for each of the
6179 // arguments.
6180 Candidate.Viable = true;
6181 Candidate.ExplicitCallArguments = Args.size();
6182 for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
6183 // C++ [over.match.oper]p4:
6184 // For the built-in assignment operators, conversions of the
6185 // left operand are restricted as follows:
6186 // -- no temporaries are introduced to hold the left operand, and
6187 // -- no user-defined conversions are applied to the left
6188 // operand to achieve a type match with the left-most
6189 // parameter of a built-in candidate.
6190 //
6191 // We block these conversions by turning off user-defined
6192 // conversions, since that is the only way that initialization of
6193 // a reference to a non-class type can occur from something that
6194 // is not of the same type.
6195 if (ArgIdx < NumContextualBoolArguments) {
6196 assert(ParamTys[ArgIdx] == Context.BoolTy &&
6197 "Contextual conversion to bool requires bool type");
6198 Candidate.Conversions[ArgIdx]
6199 = TryContextuallyConvertToBool(*this, Args[ArgIdx]);
6200 } else {
6201 Candidate.Conversions[ArgIdx]
6202 = TryCopyInitialization(*this, Args[ArgIdx], ParamTys[ArgIdx],
6203 ArgIdx == 0 && IsAssignmentOperator,
6204 /*InOverloadResolution=*/false,
6205 /*AllowObjCWritebackConversion=*/
6206 getLangOpts().ObjCAutoRefCount);
6207 }
6208 if (Candidate.Conversions[ArgIdx].isBad()) {
6209 Candidate.Viable = false;
6210 Candidate.FailureKind = ovl_fail_bad_conversion;
6211 break;
6212 }
6213 }
6214 }
6215
6216 namespace {
6217
6218 /// BuiltinCandidateTypeSet - A set of types that will be used for the
6219 /// candidate operator functions for built-in operators (C++
6220 /// [over.built]). The types are separated into pointer types and
6221 /// enumeration types.
6222 class BuiltinCandidateTypeSet {
6223 /// TypeSet - A set of types.
6224 typedef llvm::SmallPtrSet<QualType, 8> TypeSet;
6225
6226 /// PointerTypes - The set of pointer types that will be used in the
6227 /// built-in candidates.
6228 TypeSet PointerTypes;
6229
6230 /// MemberPointerTypes - The set of member pointer types that will be
6231 /// used in the built-in candidates.
6232 TypeSet MemberPointerTypes;
6233
6234 /// EnumerationTypes - The set of enumeration types that will be
6235 /// used in the built-in candidates.
6236 TypeSet EnumerationTypes;
6237
6238 /// \brief The set of vector types that will be used in the built-in
6239 /// candidates.
6240 TypeSet VectorTypes;
6241
6242 /// \brief A flag indicating non-record types are viable candidates
6243 bool HasNonRecordTypes;
6244
6245 /// \brief A flag indicating whether either arithmetic or enumeration types
6246 /// were present in the candidate set.
6247 bool HasArithmeticOrEnumeralTypes;
6248
6249 /// \brief A flag indicating whether the nullptr type was present in the
6250 /// candidate set.
6251 bool HasNullPtrType;
6252
6253 /// Sema - The semantic analysis instance where we are building the
6254 /// candidate type set.
6255 Sema &SemaRef;
6256
6257 /// Context - The AST context in which we will build the type sets.
6258 ASTContext &Context;
6259
6260 bool AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
6261 const Qualifiers &VisibleQuals);
6262 bool AddMemberPointerWithMoreQualifiedTypeVariants(QualType Ty);
6263
6264 public:
6265 /// iterator - Iterates through the types that are part of the set.
6266 typedef TypeSet::iterator iterator;
6267
BuiltinCandidateTypeSet(Sema & SemaRef)6268 BuiltinCandidateTypeSet(Sema &SemaRef)
6269 : HasNonRecordTypes(false),
6270 HasArithmeticOrEnumeralTypes(false),
6271 HasNullPtrType(false),
6272 SemaRef(SemaRef),
6273 Context(SemaRef.Context) { }
6274
6275 void AddTypesConvertedFrom(QualType Ty,
6276 SourceLocation Loc,
6277 bool AllowUserConversions,
6278 bool AllowExplicitConversions,
6279 const Qualifiers &VisibleTypeConversionsQuals);
6280
6281 /// pointer_begin - First pointer type found;
pointer_begin()6282 iterator pointer_begin() { return PointerTypes.begin(); }
6283
6284 /// pointer_end - Past the last pointer type found;
pointer_end()6285 iterator pointer_end() { return PointerTypes.end(); }
6286
6287 /// member_pointer_begin - First member pointer type found;
member_pointer_begin()6288 iterator member_pointer_begin() { return MemberPointerTypes.begin(); }
6289
6290 /// member_pointer_end - Past the last member pointer type found;
member_pointer_end()6291 iterator member_pointer_end() { return MemberPointerTypes.end(); }
6292
6293 /// enumeration_begin - First enumeration type found;
enumeration_begin()6294 iterator enumeration_begin() { return EnumerationTypes.begin(); }
6295
6296 /// enumeration_end - Past the last enumeration type found;
enumeration_end()6297 iterator enumeration_end() { return EnumerationTypes.end(); }
6298
vector_begin()6299 iterator vector_begin() { return VectorTypes.begin(); }
vector_end()6300 iterator vector_end() { return VectorTypes.end(); }
6301
hasNonRecordTypes()6302 bool hasNonRecordTypes() { return HasNonRecordTypes; }
hasArithmeticOrEnumeralTypes()6303 bool hasArithmeticOrEnumeralTypes() { return HasArithmeticOrEnumeralTypes; }
hasNullPtrType() const6304 bool hasNullPtrType() const { return HasNullPtrType; }
6305 };
6306
6307 } // end anonymous namespace
6308
6309 /// AddPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty to
6310 /// the set of pointer types along with any more-qualified variants of
6311 /// that type. For example, if @p Ty is "int const *", this routine
6312 /// will add "int const *", "int const volatile *", "int const
6313 /// restrict *", and "int const volatile restrict *" to the set of
6314 /// pointer types. Returns true if the add of @p Ty itself succeeded,
6315 /// false otherwise.
6316 ///
6317 /// FIXME: what to do about extended qualifiers?
6318 bool
AddPointerWithMoreQualifiedTypeVariants(QualType Ty,const Qualifiers & VisibleQuals)6319 BuiltinCandidateTypeSet::AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
6320 const Qualifiers &VisibleQuals) {
6321
6322 // Insert this type.
6323 if (!PointerTypes.insert(Ty))
6324 return false;
6325
6326 QualType PointeeTy;
6327 const PointerType *PointerTy = Ty->getAs<PointerType>();
6328 bool buildObjCPtr = false;
6329 if (!PointerTy) {
6330 const ObjCObjectPointerType *PTy = Ty->castAs<ObjCObjectPointerType>();
6331 PointeeTy = PTy->getPointeeType();
6332 buildObjCPtr = true;
6333 } else {
6334 PointeeTy = PointerTy->getPointeeType();
6335 }
6336
6337 // Don't add qualified variants of arrays. For one, they're not allowed
6338 // (the qualifier would sink to the element type), and for another, the
6339 // only overload situation where it matters is subscript or pointer +- int,
6340 // and those shouldn't have qualifier variants anyway.
6341 if (PointeeTy->isArrayType())
6342 return true;
6343
6344 unsigned BaseCVR = PointeeTy.getCVRQualifiers();
6345 bool hasVolatile = VisibleQuals.hasVolatile();
6346 bool hasRestrict = VisibleQuals.hasRestrict();
6347
6348 // Iterate through all strict supersets of BaseCVR.
6349 for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
6350 if ((CVR | BaseCVR) != CVR) continue;
6351 // Skip over volatile if no volatile found anywhere in the types.
6352 if ((CVR & Qualifiers::Volatile) && !hasVolatile) continue;
6353
6354 // Skip over restrict if no restrict found anywhere in the types, or if
6355 // the type cannot be restrict-qualified.
6356 if ((CVR & Qualifiers::Restrict) &&
6357 (!hasRestrict ||
6358 (!(PointeeTy->isAnyPointerType() || PointeeTy->isReferenceType()))))
6359 continue;
6360
6361 // Build qualified pointee type.
6362 QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
6363
6364 // Build qualified pointer type.
6365 QualType QPointerTy;
6366 if (!buildObjCPtr)
6367 QPointerTy = Context.getPointerType(QPointeeTy);
6368 else
6369 QPointerTy = Context.getObjCObjectPointerType(QPointeeTy);
6370
6371 // Insert qualified pointer type.
6372 PointerTypes.insert(QPointerTy);
6373 }
6374
6375 return true;
6376 }
6377
6378 /// AddMemberPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty
6379 /// to the set of pointer types along with any more-qualified variants of
6380 /// that type. For example, if @p Ty is "int const *", this routine
6381 /// will add "int const *", "int const volatile *", "int const
6382 /// restrict *", and "int const volatile restrict *" to the set of
6383 /// pointer types. Returns true if the add of @p Ty itself succeeded,
6384 /// false otherwise.
6385 ///
6386 /// FIXME: what to do about extended qualifiers?
6387 bool
AddMemberPointerWithMoreQualifiedTypeVariants(QualType Ty)6388 BuiltinCandidateTypeSet::AddMemberPointerWithMoreQualifiedTypeVariants(
6389 QualType Ty) {
6390 // Insert this type.
6391 if (!MemberPointerTypes.insert(Ty))
6392 return false;
6393
6394 const MemberPointerType *PointerTy = Ty->getAs<MemberPointerType>();
6395 assert(PointerTy && "type was not a member pointer type!");
6396
6397 QualType PointeeTy = PointerTy->getPointeeType();
6398 // Don't add qualified variants of arrays. For one, they're not allowed
6399 // (the qualifier would sink to the element type), and for another, the
6400 // only overload situation where it matters is subscript or pointer +- int,
6401 // and those shouldn't have qualifier variants anyway.
6402 if (PointeeTy->isArrayType())
6403 return true;
6404 const Type *ClassTy = PointerTy->getClass();
6405
6406 // Iterate through all strict supersets of the pointee type's CVR
6407 // qualifiers.
6408 unsigned BaseCVR = PointeeTy.getCVRQualifiers();
6409 for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
6410 if ((CVR | BaseCVR) != CVR) continue;
6411
6412 QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
6413 MemberPointerTypes.insert(
6414 Context.getMemberPointerType(QPointeeTy, ClassTy));
6415 }
6416
6417 return true;
6418 }
6419
6420 /// AddTypesConvertedFrom - Add each of the types to which the type @p
6421 /// Ty can be implicit converted to the given set of @p Types. We're
6422 /// primarily interested in pointer types and enumeration types. We also
6423 /// take member pointer types, for the conditional operator.
6424 /// AllowUserConversions is true if we should look at the conversion
6425 /// functions of a class type, and AllowExplicitConversions if we
6426 /// should also include the explicit conversion functions of a class
6427 /// type.
6428 void
AddTypesConvertedFrom(QualType Ty,SourceLocation Loc,bool AllowUserConversions,bool AllowExplicitConversions,const Qualifiers & VisibleQuals)6429 BuiltinCandidateTypeSet::AddTypesConvertedFrom(QualType Ty,
6430 SourceLocation Loc,
6431 bool AllowUserConversions,
6432 bool AllowExplicitConversions,
6433 const Qualifiers &VisibleQuals) {
6434 // Only deal with canonical types.
6435 Ty = Context.getCanonicalType(Ty);
6436
6437 // Look through reference types; they aren't part of the type of an
6438 // expression for the purposes of conversions.
6439 if (const ReferenceType *RefTy = Ty->getAs<ReferenceType>())
6440 Ty = RefTy->getPointeeType();
6441
6442 // If we're dealing with an array type, decay to the pointer.
6443 if (Ty->isArrayType())
6444 Ty = SemaRef.Context.getArrayDecayedType(Ty);
6445
6446 // Otherwise, we don't care about qualifiers on the type.
6447 Ty = Ty.getLocalUnqualifiedType();
6448
6449 // Flag if we ever add a non-record type.
6450 const RecordType *TyRec = Ty->getAs<RecordType>();
6451 HasNonRecordTypes = HasNonRecordTypes || !TyRec;
6452
6453 // Flag if we encounter an arithmetic type.
6454 HasArithmeticOrEnumeralTypes =
6455 HasArithmeticOrEnumeralTypes || Ty->isArithmeticType();
6456
6457 if (Ty->isObjCIdType() || Ty->isObjCClassType())
6458 PointerTypes.insert(Ty);
6459 else if (Ty->getAs<PointerType>() || Ty->getAs<ObjCObjectPointerType>()) {
6460 // Insert our type, and its more-qualified variants, into the set
6461 // of types.
6462 if (!AddPointerWithMoreQualifiedTypeVariants(Ty, VisibleQuals))
6463 return;
6464 } else if (Ty->isMemberPointerType()) {
6465 // Member pointers are far easier, since the pointee can't be converted.
6466 if (!AddMemberPointerWithMoreQualifiedTypeVariants(Ty))
6467 return;
6468 } else if (Ty->isEnumeralType()) {
6469 HasArithmeticOrEnumeralTypes = true;
6470 EnumerationTypes.insert(Ty);
6471 } else if (Ty->isVectorType()) {
6472 // We treat vector types as arithmetic types in many contexts as an
6473 // extension.
6474 HasArithmeticOrEnumeralTypes = true;
6475 VectorTypes.insert(Ty);
6476 } else if (Ty->isNullPtrType()) {
6477 HasNullPtrType = true;
6478 } else if (AllowUserConversions && TyRec) {
6479 // No conversion functions in incomplete types.
6480 if (SemaRef.RequireCompleteType(Loc, Ty, 0))
6481 return;
6482
6483 CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
6484 std::pair<CXXRecordDecl::conversion_iterator,
6485 CXXRecordDecl::conversion_iterator>
6486 Conversions = ClassDecl->getVisibleConversionFunctions();
6487 for (CXXRecordDecl::conversion_iterator
6488 I = Conversions.first, E = Conversions.second; I != E; ++I) {
6489 NamedDecl *D = I.getDecl();
6490 if (isa<UsingShadowDecl>(D))
6491 D = cast<UsingShadowDecl>(D)->getTargetDecl();
6492
6493 // Skip conversion function templates; they don't tell us anything
6494 // about which builtin types we can convert to.
6495 if (isa<FunctionTemplateDecl>(D))
6496 continue;
6497
6498 CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
6499 if (AllowExplicitConversions || !Conv->isExplicit()) {
6500 AddTypesConvertedFrom(Conv->getConversionType(), Loc, false, false,
6501 VisibleQuals);
6502 }
6503 }
6504 }
6505 }
6506
6507 /// \brief Helper function for AddBuiltinOperatorCandidates() that adds
6508 /// the volatile- and non-volatile-qualified assignment operators for the
6509 /// given type to the candidate set.
AddBuiltinAssignmentOperatorCandidates(Sema & S,QualType T,ArrayRef<Expr * > Args,OverloadCandidateSet & CandidateSet)6510 static void AddBuiltinAssignmentOperatorCandidates(Sema &S,
6511 QualType T,
6512 ArrayRef<Expr *> Args,
6513 OverloadCandidateSet &CandidateSet) {
6514 QualType ParamTypes[2];
6515
6516 // T& operator=(T&, T)
6517 ParamTypes[0] = S.Context.getLValueReferenceType(T);
6518 ParamTypes[1] = T;
6519 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
6520 /*IsAssignmentOperator=*/true);
6521
6522 if (!S.Context.getCanonicalType(T).isVolatileQualified()) {
6523 // volatile T& operator=(volatile T&, T)
6524 ParamTypes[0]
6525 = S.Context.getLValueReferenceType(S.Context.getVolatileType(T));
6526 ParamTypes[1] = T;
6527 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
6528 /*IsAssignmentOperator=*/true);
6529 }
6530 }
6531
6532 /// CollectVRQualifiers - This routine returns Volatile/Restrict qualifiers,
6533 /// if any, found in visible type conversion functions found in ArgExpr's type.
CollectVRQualifiers(ASTContext & Context,Expr * ArgExpr)6534 static Qualifiers CollectVRQualifiers(ASTContext &Context, Expr* ArgExpr) {
6535 Qualifiers VRQuals;
6536 const RecordType *TyRec;
6537 if (const MemberPointerType *RHSMPType =
6538 ArgExpr->getType()->getAs<MemberPointerType>())
6539 TyRec = RHSMPType->getClass()->getAs<RecordType>();
6540 else
6541 TyRec = ArgExpr->getType()->getAs<RecordType>();
6542 if (!TyRec) {
6543 // Just to be safe, assume the worst case.
6544 VRQuals.addVolatile();
6545 VRQuals.addRestrict();
6546 return VRQuals;
6547 }
6548
6549 CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
6550 if (!ClassDecl->hasDefinition())
6551 return VRQuals;
6552
6553 std::pair<CXXRecordDecl::conversion_iterator,
6554 CXXRecordDecl::conversion_iterator>
6555 Conversions = ClassDecl->getVisibleConversionFunctions();
6556
6557 for (CXXRecordDecl::conversion_iterator
6558 I = Conversions.first, E = Conversions.second; I != E; ++I) {
6559 NamedDecl *D = I.getDecl();
6560 if (isa<UsingShadowDecl>(D))
6561 D = cast<UsingShadowDecl>(D)->getTargetDecl();
6562 if (CXXConversionDecl *Conv = dyn_cast<CXXConversionDecl>(D)) {
6563 QualType CanTy = Context.getCanonicalType(Conv->getConversionType());
6564 if (const ReferenceType *ResTypeRef = CanTy->getAs<ReferenceType>())
6565 CanTy = ResTypeRef->getPointeeType();
6566 // Need to go down the pointer/mempointer chain and add qualifiers
6567 // as see them.
6568 bool done = false;
6569 while (!done) {
6570 if (CanTy.isRestrictQualified())
6571 VRQuals.addRestrict();
6572 if (const PointerType *ResTypePtr = CanTy->getAs<PointerType>())
6573 CanTy = ResTypePtr->getPointeeType();
6574 else if (const MemberPointerType *ResTypeMPtr =
6575 CanTy->getAs<MemberPointerType>())
6576 CanTy = ResTypeMPtr->getPointeeType();
6577 else
6578 done = true;
6579 if (CanTy.isVolatileQualified())
6580 VRQuals.addVolatile();
6581 if (VRQuals.hasRestrict() && VRQuals.hasVolatile())
6582 return VRQuals;
6583 }
6584 }
6585 }
6586 return VRQuals;
6587 }
6588
6589 namespace {
6590
6591 /// \brief Helper class to manage the addition of builtin operator overload
6592 /// candidates. It provides shared state and utility methods used throughout
6593 /// the process, as well as a helper method to add each group of builtin
6594 /// operator overloads from the standard to a candidate set.
6595 class BuiltinOperatorOverloadBuilder {
6596 // Common instance state available to all overload candidate addition methods.
6597 Sema &S;
6598 ArrayRef<Expr *> Args;
6599 Qualifiers VisibleTypeConversionsQuals;
6600 bool HasArithmeticOrEnumeralCandidateType;
6601 SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes;
6602 OverloadCandidateSet &CandidateSet;
6603
6604 // Define some constants used to index and iterate over the arithemetic types
6605 // provided via the getArithmeticType() method below.
6606 // The "promoted arithmetic types" are the arithmetic
6607 // types are that preserved by promotion (C++ [over.built]p2).
6608 static const unsigned FirstIntegralType = 3;
6609 static const unsigned LastIntegralType = 20;
6610 static const unsigned FirstPromotedIntegralType = 3,
6611 LastPromotedIntegralType = 11;
6612 static const unsigned FirstPromotedArithmeticType = 0,
6613 LastPromotedArithmeticType = 11;
6614 static const unsigned NumArithmeticTypes = 20;
6615
6616 /// \brief Get the canonical type for a given arithmetic type index.
getArithmeticType(unsigned index)6617 CanQualType getArithmeticType(unsigned index) {
6618 assert(index < NumArithmeticTypes);
6619 static CanQualType ASTContext::* const
6620 ArithmeticTypes[NumArithmeticTypes] = {
6621 // Start of promoted types.
6622 &ASTContext::FloatTy,
6623 &ASTContext::DoubleTy,
6624 &ASTContext::LongDoubleTy,
6625
6626 // Start of integral types.
6627 &ASTContext::IntTy,
6628 &ASTContext::LongTy,
6629 &ASTContext::LongLongTy,
6630 &ASTContext::Int128Ty,
6631 &ASTContext::UnsignedIntTy,
6632 &ASTContext::UnsignedLongTy,
6633 &ASTContext::UnsignedLongLongTy,
6634 &ASTContext::UnsignedInt128Ty,
6635 // End of promoted types.
6636
6637 &ASTContext::BoolTy,
6638 &ASTContext::CharTy,
6639 &ASTContext::WCharTy,
6640 &ASTContext::Char16Ty,
6641 &ASTContext::Char32Ty,
6642 &ASTContext::SignedCharTy,
6643 &ASTContext::ShortTy,
6644 &ASTContext::UnsignedCharTy,
6645 &ASTContext::UnsignedShortTy,
6646 // End of integral types.
6647 // FIXME: What about complex? What about half?
6648 };
6649 return S.Context.*ArithmeticTypes[index];
6650 }
6651
6652 /// \brief Gets the canonical type resulting from the usual arithemetic
6653 /// converions for the given arithmetic types.
getUsualArithmeticConversions(unsigned L,unsigned R)6654 CanQualType getUsualArithmeticConversions(unsigned L, unsigned R) {
6655 // Accelerator table for performing the usual arithmetic conversions.
6656 // The rules are basically:
6657 // - if either is floating-point, use the wider floating-point
6658 // - if same signedness, use the higher rank
6659 // - if same size, use unsigned of the higher rank
6660 // - use the larger type
6661 // These rules, together with the axiom that higher ranks are
6662 // never smaller, are sufficient to precompute all of these results
6663 // *except* when dealing with signed types of higher rank.
6664 // (we could precompute SLL x UI for all known platforms, but it's
6665 // better not to make any assumptions).
6666 // We assume that int128 has a higher rank than long long on all platforms.
6667 enum PromotedType {
6668 Dep=-1,
6669 Flt, Dbl, LDbl, SI, SL, SLL, S128, UI, UL, ULL, U128
6670 };
6671 static const PromotedType ConversionsTable[LastPromotedArithmeticType]
6672 [LastPromotedArithmeticType] = {
6673 /* Flt*/ { Flt, Dbl, LDbl, Flt, Flt, Flt, Flt, Flt, Flt, Flt, Flt },
6674 /* Dbl*/ { Dbl, Dbl, LDbl, Dbl, Dbl, Dbl, Dbl, Dbl, Dbl, Dbl, Dbl },
6675 /*LDbl*/ { LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl },
6676 /* SI*/ { Flt, Dbl, LDbl, SI, SL, SLL, S128, UI, UL, ULL, U128 },
6677 /* SL*/ { Flt, Dbl, LDbl, SL, SL, SLL, S128, Dep, UL, ULL, U128 },
6678 /* SLL*/ { Flt, Dbl, LDbl, SLL, SLL, SLL, S128, Dep, Dep, ULL, U128 },
6679 /*S128*/ { Flt, Dbl, LDbl, S128, S128, S128, S128, S128, S128, S128, U128 },
6680 /* UI*/ { Flt, Dbl, LDbl, UI, Dep, Dep, S128, UI, UL, ULL, U128 },
6681 /* UL*/ { Flt, Dbl, LDbl, UL, UL, Dep, S128, UL, UL, ULL, U128 },
6682 /* ULL*/ { Flt, Dbl, LDbl, ULL, ULL, ULL, S128, ULL, ULL, ULL, U128 },
6683 /*U128*/ { Flt, Dbl, LDbl, U128, U128, U128, U128, U128, U128, U128, U128 },
6684 };
6685
6686 assert(L < LastPromotedArithmeticType);
6687 assert(R < LastPromotedArithmeticType);
6688 int Idx = ConversionsTable[L][R];
6689
6690 // Fast path: the table gives us a concrete answer.
6691 if (Idx != Dep) return getArithmeticType(Idx);
6692
6693 // Slow path: we need to compare widths.
6694 // An invariant is that the signed type has higher rank.
6695 CanQualType LT = getArithmeticType(L),
6696 RT = getArithmeticType(R);
6697 unsigned LW = S.Context.getIntWidth(LT),
6698 RW = S.Context.getIntWidth(RT);
6699
6700 // If they're different widths, use the signed type.
6701 if (LW > RW) return LT;
6702 else if (LW < RW) return RT;
6703
6704 // Otherwise, use the unsigned type of the signed type's rank.
6705 if (L == SL || R == SL) return S.Context.UnsignedLongTy;
6706 assert(L == SLL || R == SLL);
6707 return S.Context.UnsignedLongLongTy;
6708 }
6709
6710 /// \brief Helper method to factor out the common pattern of adding overloads
6711 /// for '++' and '--' builtin operators.
addPlusPlusMinusMinusStyleOverloads(QualType CandidateTy,bool HasVolatile,bool HasRestrict)6712 void addPlusPlusMinusMinusStyleOverloads(QualType CandidateTy,
6713 bool HasVolatile,
6714 bool HasRestrict) {
6715 QualType ParamTypes[2] = {
6716 S.Context.getLValueReferenceType(CandidateTy),
6717 S.Context.IntTy
6718 };
6719
6720 // Non-volatile version.
6721 if (Args.size() == 1)
6722 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
6723 else
6724 S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, CandidateSet);
6725
6726 // Use a heuristic to reduce number of builtin candidates in the set:
6727 // add volatile version only if there are conversions to a volatile type.
6728 if (HasVolatile) {
6729 ParamTypes[0] =
6730 S.Context.getLValueReferenceType(
6731 S.Context.getVolatileType(CandidateTy));
6732 if (Args.size() == 1)
6733 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
6734 else
6735 S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, CandidateSet);
6736 }
6737
6738 // Add restrict version only if there are conversions to a restrict type
6739 // and our candidate type is a non-restrict-qualified pointer.
6740 if (HasRestrict && CandidateTy->isAnyPointerType() &&
6741 !CandidateTy.isRestrictQualified()) {
6742 ParamTypes[0]
6743 = S.Context.getLValueReferenceType(
6744 S.Context.getCVRQualifiedType(CandidateTy, Qualifiers::Restrict));
6745 if (Args.size() == 1)
6746 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
6747 else
6748 S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, CandidateSet);
6749
6750 if (HasVolatile) {
6751 ParamTypes[0]
6752 = S.Context.getLValueReferenceType(
6753 S.Context.getCVRQualifiedType(CandidateTy,
6754 (Qualifiers::Volatile |
6755 Qualifiers::Restrict)));
6756 if (Args.size() == 1)
6757 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
6758 else
6759 S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, CandidateSet);
6760 }
6761 }
6762
6763 }
6764
6765 public:
BuiltinOperatorOverloadBuilder(Sema & S,ArrayRef<Expr * > Args,Qualifiers VisibleTypeConversionsQuals,bool HasArithmeticOrEnumeralCandidateType,SmallVectorImpl<BuiltinCandidateTypeSet> & CandidateTypes,OverloadCandidateSet & CandidateSet)6766 BuiltinOperatorOverloadBuilder(
6767 Sema &S, ArrayRef<Expr *> Args,
6768 Qualifiers VisibleTypeConversionsQuals,
6769 bool HasArithmeticOrEnumeralCandidateType,
6770 SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes,
6771 OverloadCandidateSet &CandidateSet)
6772 : S(S), Args(Args),
6773 VisibleTypeConversionsQuals(VisibleTypeConversionsQuals),
6774 HasArithmeticOrEnumeralCandidateType(
6775 HasArithmeticOrEnumeralCandidateType),
6776 CandidateTypes(CandidateTypes),
6777 CandidateSet(CandidateSet) {
6778 // Validate some of our static helper constants in debug builds.
6779 assert(getArithmeticType(FirstPromotedIntegralType) == S.Context.IntTy &&
6780 "Invalid first promoted integral type");
6781 assert(getArithmeticType(LastPromotedIntegralType - 1)
6782 == S.Context.UnsignedInt128Ty &&
6783 "Invalid last promoted integral type");
6784 assert(getArithmeticType(FirstPromotedArithmeticType)
6785 == S.Context.FloatTy &&
6786 "Invalid first promoted arithmetic type");
6787 assert(getArithmeticType(LastPromotedArithmeticType - 1)
6788 == S.Context.UnsignedInt128Ty &&
6789 "Invalid last promoted arithmetic type");
6790 }
6791
6792 // C++ [over.built]p3:
6793 //
6794 // For every pair (T, VQ), where T is an arithmetic type, and VQ
6795 // is either volatile or empty, there exist candidate operator
6796 // functions of the form
6797 //
6798 // VQ T& operator++(VQ T&);
6799 // T operator++(VQ T&, int);
6800 //
6801 // C++ [over.built]p4:
6802 //
6803 // For every pair (T, VQ), where T is an arithmetic type other
6804 // than bool, and VQ is either volatile or empty, there exist
6805 // candidate operator functions of the form
6806 //
6807 // VQ T& operator--(VQ T&);
6808 // T operator--(VQ T&, int);
addPlusPlusMinusMinusArithmeticOverloads(OverloadedOperatorKind Op)6809 void addPlusPlusMinusMinusArithmeticOverloads(OverloadedOperatorKind Op) {
6810 if (!HasArithmeticOrEnumeralCandidateType)
6811 return;
6812
6813 for (unsigned Arith = (Op == OO_PlusPlus? 0 : 1);
6814 Arith < NumArithmeticTypes; ++Arith) {
6815 addPlusPlusMinusMinusStyleOverloads(
6816 getArithmeticType(Arith),
6817 VisibleTypeConversionsQuals.hasVolatile(),
6818 VisibleTypeConversionsQuals.hasRestrict());
6819 }
6820 }
6821
6822 // C++ [over.built]p5:
6823 //
6824 // For every pair (T, VQ), where T is a cv-qualified or
6825 // cv-unqualified object type, and VQ is either volatile or
6826 // empty, there exist candidate operator functions of the form
6827 //
6828 // T*VQ& operator++(T*VQ&);
6829 // T*VQ& operator--(T*VQ&);
6830 // T* operator++(T*VQ&, int);
6831 // T* operator--(T*VQ&, int);
addPlusPlusMinusMinusPointerOverloads()6832 void addPlusPlusMinusMinusPointerOverloads() {
6833 for (BuiltinCandidateTypeSet::iterator
6834 Ptr = CandidateTypes[0].pointer_begin(),
6835 PtrEnd = CandidateTypes[0].pointer_end();
6836 Ptr != PtrEnd; ++Ptr) {
6837 // Skip pointer types that aren't pointers to object types.
6838 if (!(*Ptr)->getPointeeType()->isObjectType())
6839 continue;
6840
6841 addPlusPlusMinusMinusStyleOverloads(*Ptr,
6842 (!(*Ptr).isVolatileQualified() &&
6843 VisibleTypeConversionsQuals.hasVolatile()),
6844 (!(*Ptr).isRestrictQualified() &&
6845 VisibleTypeConversionsQuals.hasRestrict()));
6846 }
6847 }
6848
6849 // C++ [over.built]p6:
6850 // For every cv-qualified or cv-unqualified object type T, there
6851 // exist candidate operator functions of the form
6852 //
6853 // T& operator*(T*);
6854 //
6855 // C++ [over.built]p7:
6856 // For every function type T that does not have cv-qualifiers or a
6857 // ref-qualifier, there exist candidate operator functions of the form
6858 // T& operator*(T*);
addUnaryStarPointerOverloads()6859 void addUnaryStarPointerOverloads() {
6860 for (BuiltinCandidateTypeSet::iterator
6861 Ptr = CandidateTypes[0].pointer_begin(),
6862 PtrEnd = CandidateTypes[0].pointer_end();
6863 Ptr != PtrEnd; ++Ptr) {
6864 QualType ParamTy = *Ptr;
6865 QualType PointeeTy = ParamTy->getPointeeType();
6866 if (!PointeeTy->isObjectType() && !PointeeTy->isFunctionType())
6867 continue;
6868
6869 if (const FunctionProtoType *Proto =PointeeTy->getAs<FunctionProtoType>())
6870 if (Proto->getTypeQuals() || Proto->getRefQualifier())
6871 continue;
6872
6873 S.AddBuiltinCandidate(S.Context.getLValueReferenceType(PointeeTy),
6874 &ParamTy, Args, CandidateSet);
6875 }
6876 }
6877
6878 // C++ [over.built]p9:
6879 // For every promoted arithmetic type T, there exist candidate
6880 // operator functions of the form
6881 //
6882 // T operator+(T);
6883 // T operator-(T);
addUnaryPlusOrMinusArithmeticOverloads()6884 void addUnaryPlusOrMinusArithmeticOverloads() {
6885 if (!HasArithmeticOrEnumeralCandidateType)
6886 return;
6887
6888 for (unsigned Arith = FirstPromotedArithmeticType;
6889 Arith < LastPromotedArithmeticType; ++Arith) {
6890 QualType ArithTy = getArithmeticType(Arith);
6891 S.AddBuiltinCandidate(ArithTy, &ArithTy, Args, CandidateSet);
6892 }
6893
6894 // Extension: We also add these operators for vector types.
6895 for (BuiltinCandidateTypeSet::iterator
6896 Vec = CandidateTypes[0].vector_begin(),
6897 VecEnd = CandidateTypes[0].vector_end();
6898 Vec != VecEnd; ++Vec) {
6899 QualType VecTy = *Vec;
6900 S.AddBuiltinCandidate(VecTy, &VecTy, Args, CandidateSet);
6901 }
6902 }
6903
6904 // C++ [over.built]p8:
6905 // For every type T, there exist candidate operator functions of
6906 // the form
6907 //
6908 // T* operator+(T*);
addUnaryPlusPointerOverloads()6909 void addUnaryPlusPointerOverloads() {
6910 for (BuiltinCandidateTypeSet::iterator
6911 Ptr = CandidateTypes[0].pointer_begin(),
6912 PtrEnd = CandidateTypes[0].pointer_end();
6913 Ptr != PtrEnd; ++Ptr) {
6914 QualType ParamTy = *Ptr;
6915 S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, CandidateSet);
6916 }
6917 }
6918
6919 // C++ [over.built]p10:
6920 // For every promoted integral type T, there exist candidate
6921 // operator functions of the form
6922 //
6923 // T operator~(T);
addUnaryTildePromotedIntegralOverloads()6924 void addUnaryTildePromotedIntegralOverloads() {
6925 if (!HasArithmeticOrEnumeralCandidateType)
6926 return;
6927
6928 for (unsigned Int = FirstPromotedIntegralType;
6929 Int < LastPromotedIntegralType; ++Int) {
6930 QualType IntTy = getArithmeticType(Int);
6931 S.AddBuiltinCandidate(IntTy, &IntTy, Args, CandidateSet);
6932 }
6933
6934 // Extension: We also add this operator for vector types.
6935 for (BuiltinCandidateTypeSet::iterator
6936 Vec = CandidateTypes[0].vector_begin(),
6937 VecEnd = CandidateTypes[0].vector_end();
6938 Vec != VecEnd; ++Vec) {
6939 QualType VecTy = *Vec;
6940 S.AddBuiltinCandidate(VecTy, &VecTy, Args, CandidateSet);
6941 }
6942 }
6943
6944 // C++ [over.match.oper]p16:
6945 // For every pointer to member type T, there exist candidate operator
6946 // functions of the form
6947 //
6948 // bool operator==(T,T);
6949 // bool operator!=(T,T);
addEqualEqualOrNotEqualMemberPointerOverloads()6950 void addEqualEqualOrNotEqualMemberPointerOverloads() {
6951 /// Set of (canonical) types that we've already handled.
6952 llvm::SmallPtrSet<QualType, 8> AddedTypes;
6953
6954 for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
6955 for (BuiltinCandidateTypeSet::iterator
6956 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
6957 MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
6958 MemPtr != MemPtrEnd;
6959 ++MemPtr) {
6960 // Don't add the same builtin candidate twice.
6961 if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
6962 continue;
6963
6964 QualType ParamTypes[2] = { *MemPtr, *MemPtr };
6965 S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, CandidateSet);
6966 }
6967 }
6968 }
6969
6970 // C++ [over.built]p15:
6971 //
6972 // For every T, where T is an enumeration type, a pointer type, or
6973 // std::nullptr_t, there exist candidate operator functions of the form
6974 //
6975 // bool operator<(T, T);
6976 // bool operator>(T, T);
6977 // bool operator<=(T, T);
6978 // bool operator>=(T, T);
6979 // bool operator==(T, T);
6980 // bool operator!=(T, T);
addRelationalPointerOrEnumeralOverloads()6981 void addRelationalPointerOrEnumeralOverloads() {
6982 // C++ [over.match.oper]p3:
6983 // [...]the built-in candidates include all of the candidate operator
6984 // functions defined in 13.6 that, compared to the given operator, [...]
6985 // do not have the same parameter-type-list as any non-template non-member
6986 // candidate.
6987 //
6988 // Note that in practice, this only affects enumeration types because there
6989 // aren't any built-in candidates of record type, and a user-defined operator
6990 // must have an operand of record or enumeration type. Also, the only other
6991 // overloaded operator with enumeration arguments, operator=,
6992 // cannot be overloaded for enumeration types, so this is the only place
6993 // where we must suppress candidates like this.
6994 llvm::DenseSet<std::pair<CanQualType, CanQualType> >
6995 UserDefinedBinaryOperators;
6996
6997 for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
6998 if (CandidateTypes[ArgIdx].enumeration_begin() !=
6999 CandidateTypes[ArgIdx].enumeration_end()) {
7000 for (OverloadCandidateSet::iterator C = CandidateSet.begin(),
7001 CEnd = CandidateSet.end();
7002 C != CEnd; ++C) {
7003 if (!C->Viable || !C->Function || C->Function->getNumParams() != 2)
7004 continue;
7005
7006 if (C->Function->isFunctionTemplateSpecialization())
7007 continue;
7008
7009 QualType FirstParamType =
7010 C->Function->getParamDecl(0)->getType().getUnqualifiedType();
7011 QualType SecondParamType =
7012 C->Function->getParamDecl(1)->getType().getUnqualifiedType();
7013
7014 // Skip if either parameter isn't of enumeral type.
7015 if (!FirstParamType->isEnumeralType() ||
7016 !SecondParamType->isEnumeralType())
7017 continue;
7018
7019 // Add this operator to the set of known user-defined operators.
7020 UserDefinedBinaryOperators.insert(
7021 std::make_pair(S.Context.getCanonicalType(FirstParamType),
7022 S.Context.getCanonicalType(SecondParamType)));
7023 }
7024 }
7025 }
7026
7027 /// Set of (canonical) types that we've already handled.
7028 llvm::SmallPtrSet<QualType, 8> AddedTypes;
7029
7030 for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
7031 for (BuiltinCandidateTypeSet::iterator
7032 Ptr = CandidateTypes[ArgIdx].pointer_begin(),
7033 PtrEnd = CandidateTypes[ArgIdx].pointer_end();
7034 Ptr != PtrEnd; ++Ptr) {
7035 // Don't add the same builtin candidate twice.
7036 if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7037 continue;
7038
7039 QualType ParamTypes[2] = { *Ptr, *Ptr };
7040 S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, CandidateSet);
7041 }
7042 for (BuiltinCandidateTypeSet::iterator
7043 Enum = CandidateTypes[ArgIdx].enumeration_begin(),
7044 EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
7045 Enum != EnumEnd; ++Enum) {
7046 CanQualType CanonType = S.Context.getCanonicalType(*Enum);
7047
7048 // Don't add the same builtin candidate twice, or if a user defined
7049 // candidate exists.
7050 if (!AddedTypes.insert(CanonType) ||
7051 UserDefinedBinaryOperators.count(std::make_pair(CanonType,
7052 CanonType)))
7053 continue;
7054
7055 QualType ParamTypes[2] = { *Enum, *Enum };
7056 S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, CandidateSet);
7057 }
7058
7059 if (CandidateTypes[ArgIdx].hasNullPtrType()) {
7060 CanQualType NullPtrTy = S.Context.getCanonicalType(S.Context.NullPtrTy);
7061 if (AddedTypes.insert(NullPtrTy) &&
7062 !UserDefinedBinaryOperators.count(std::make_pair(NullPtrTy,
7063 NullPtrTy))) {
7064 QualType ParamTypes[2] = { NullPtrTy, NullPtrTy };
7065 S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args,
7066 CandidateSet);
7067 }
7068 }
7069 }
7070 }
7071
7072 // C++ [over.built]p13:
7073 //
7074 // For every cv-qualified or cv-unqualified object type T
7075 // there exist candidate operator functions of the form
7076 //
7077 // T* operator+(T*, ptrdiff_t);
7078 // T& operator[](T*, ptrdiff_t); [BELOW]
7079 // T* operator-(T*, ptrdiff_t);
7080 // T* operator+(ptrdiff_t, T*);
7081 // T& operator[](ptrdiff_t, T*); [BELOW]
7082 //
7083 // C++ [over.built]p14:
7084 //
7085 // For every T, where T is a pointer to object type, there
7086 // exist candidate operator functions of the form
7087 //
7088 // ptrdiff_t operator-(T, T);
addBinaryPlusOrMinusPointerOverloads(OverloadedOperatorKind Op)7089 void addBinaryPlusOrMinusPointerOverloads(OverloadedOperatorKind Op) {
7090 /// Set of (canonical) types that we've already handled.
7091 llvm::SmallPtrSet<QualType, 8> AddedTypes;
7092
7093 for (int Arg = 0; Arg < 2; ++Arg) {
7094 QualType AsymetricParamTypes[2] = {
7095 S.Context.getPointerDiffType(),
7096 S.Context.getPointerDiffType(),
7097 };
7098 for (BuiltinCandidateTypeSet::iterator
7099 Ptr = CandidateTypes[Arg].pointer_begin(),
7100 PtrEnd = CandidateTypes[Arg].pointer_end();
7101 Ptr != PtrEnd; ++Ptr) {
7102 QualType PointeeTy = (*Ptr)->getPointeeType();
7103 if (!PointeeTy->isObjectType())
7104 continue;
7105
7106 AsymetricParamTypes[Arg] = *Ptr;
7107 if (Arg == 0 || Op == OO_Plus) {
7108 // operator+(T*, ptrdiff_t) or operator-(T*, ptrdiff_t)
7109 // T* operator+(ptrdiff_t, T*);
7110 S.AddBuiltinCandidate(*Ptr, AsymetricParamTypes, Args, CandidateSet);
7111 }
7112 if (Op == OO_Minus) {
7113 // ptrdiff_t operator-(T, T);
7114 if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7115 continue;
7116
7117 QualType ParamTypes[2] = { *Ptr, *Ptr };
7118 S.AddBuiltinCandidate(S.Context.getPointerDiffType(), ParamTypes,
7119 Args, CandidateSet);
7120 }
7121 }
7122 }
7123 }
7124
7125 // C++ [over.built]p12:
7126 //
7127 // For every pair of promoted arithmetic types L and R, there
7128 // exist candidate operator functions of the form
7129 //
7130 // LR operator*(L, R);
7131 // LR operator/(L, R);
7132 // LR operator+(L, R);
7133 // LR operator-(L, R);
7134 // bool operator<(L, R);
7135 // bool operator>(L, R);
7136 // bool operator<=(L, R);
7137 // bool operator>=(L, R);
7138 // bool operator==(L, R);
7139 // bool operator!=(L, R);
7140 //
7141 // where LR is the result of the usual arithmetic conversions
7142 // between types L and R.
7143 //
7144 // C++ [over.built]p24:
7145 //
7146 // For every pair of promoted arithmetic types L and R, there exist
7147 // candidate operator functions of the form
7148 //
7149 // LR operator?(bool, L, R);
7150 //
7151 // where LR is the result of the usual arithmetic conversions
7152 // between types L and R.
7153 // Our candidates ignore the first parameter.
addGenericBinaryArithmeticOverloads(bool isComparison)7154 void addGenericBinaryArithmeticOverloads(bool isComparison) {
7155 if (!HasArithmeticOrEnumeralCandidateType)
7156 return;
7157
7158 for (unsigned Left = FirstPromotedArithmeticType;
7159 Left < LastPromotedArithmeticType; ++Left) {
7160 for (unsigned Right = FirstPromotedArithmeticType;
7161 Right < LastPromotedArithmeticType; ++Right) {
7162 QualType LandR[2] = { getArithmeticType(Left),
7163 getArithmeticType(Right) };
7164 QualType Result =
7165 isComparison ? S.Context.BoolTy
7166 : getUsualArithmeticConversions(Left, Right);
7167 S.AddBuiltinCandidate(Result, LandR, Args, CandidateSet);
7168 }
7169 }
7170
7171 // Extension: Add the binary operators ==, !=, <, <=, >=, >, *, /, and the
7172 // conditional operator for vector types.
7173 for (BuiltinCandidateTypeSet::iterator
7174 Vec1 = CandidateTypes[0].vector_begin(),
7175 Vec1End = CandidateTypes[0].vector_end();
7176 Vec1 != Vec1End; ++Vec1) {
7177 for (BuiltinCandidateTypeSet::iterator
7178 Vec2 = CandidateTypes[1].vector_begin(),
7179 Vec2End = CandidateTypes[1].vector_end();
7180 Vec2 != Vec2End; ++Vec2) {
7181 QualType LandR[2] = { *Vec1, *Vec2 };
7182 QualType Result = S.Context.BoolTy;
7183 if (!isComparison) {
7184 if ((*Vec1)->isExtVectorType() || !(*Vec2)->isExtVectorType())
7185 Result = *Vec1;
7186 else
7187 Result = *Vec2;
7188 }
7189
7190 S.AddBuiltinCandidate(Result, LandR, Args, CandidateSet);
7191 }
7192 }
7193 }
7194
7195 // C++ [over.built]p17:
7196 //
7197 // For every pair of promoted integral types L and R, there
7198 // exist candidate operator functions of the form
7199 //
7200 // LR operator%(L, R);
7201 // LR operator&(L, R);
7202 // LR operator^(L, R);
7203 // LR operator|(L, R);
7204 // L operator<<(L, R);
7205 // L operator>>(L, R);
7206 //
7207 // where LR is the result of the usual arithmetic conversions
7208 // between types L and R.
addBinaryBitwiseArithmeticOverloads(OverloadedOperatorKind Op)7209 void addBinaryBitwiseArithmeticOverloads(OverloadedOperatorKind Op) {
7210 if (!HasArithmeticOrEnumeralCandidateType)
7211 return;
7212
7213 for (unsigned Left = FirstPromotedIntegralType;
7214 Left < LastPromotedIntegralType; ++Left) {
7215 for (unsigned Right = FirstPromotedIntegralType;
7216 Right < LastPromotedIntegralType; ++Right) {
7217 QualType LandR[2] = { getArithmeticType(Left),
7218 getArithmeticType(Right) };
7219 QualType Result = (Op == OO_LessLess || Op == OO_GreaterGreater)
7220 ? LandR[0]
7221 : getUsualArithmeticConversions(Left, Right);
7222 S.AddBuiltinCandidate(Result, LandR, Args, CandidateSet);
7223 }
7224 }
7225 }
7226
7227 // C++ [over.built]p20:
7228 //
7229 // For every pair (T, VQ), where T is an enumeration or
7230 // pointer to member type and VQ is either volatile or
7231 // empty, there exist candidate operator functions of the form
7232 //
7233 // VQ T& operator=(VQ T&, T);
addAssignmentMemberPointerOrEnumeralOverloads()7234 void addAssignmentMemberPointerOrEnumeralOverloads() {
7235 /// Set of (canonical) types that we've already handled.
7236 llvm::SmallPtrSet<QualType, 8> AddedTypes;
7237
7238 for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) {
7239 for (BuiltinCandidateTypeSet::iterator
7240 Enum = CandidateTypes[ArgIdx].enumeration_begin(),
7241 EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
7242 Enum != EnumEnd; ++Enum) {
7243 if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum)))
7244 continue;
7245
7246 AddBuiltinAssignmentOperatorCandidates(S, *Enum, Args, CandidateSet);
7247 }
7248
7249 for (BuiltinCandidateTypeSet::iterator
7250 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
7251 MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
7252 MemPtr != MemPtrEnd; ++MemPtr) {
7253 if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
7254 continue;
7255
7256 AddBuiltinAssignmentOperatorCandidates(S, *MemPtr, Args, CandidateSet);
7257 }
7258 }
7259 }
7260
7261 // C++ [over.built]p19:
7262 //
7263 // For every pair (T, VQ), where T is any type and VQ is either
7264 // volatile or empty, there exist candidate operator functions
7265 // of the form
7266 //
7267 // T*VQ& operator=(T*VQ&, T*);
7268 //
7269 // C++ [over.built]p21:
7270 //
7271 // For every pair (T, VQ), where T is a cv-qualified or
7272 // cv-unqualified object type and VQ is either volatile or
7273 // empty, there exist candidate operator functions of the form
7274 //
7275 // T*VQ& operator+=(T*VQ&, ptrdiff_t);
7276 // T*VQ& operator-=(T*VQ&, ptrdiff_t);
addAssignmentPointerOverloads(bool isEqualOp)7277 void addAssignmentPointerOverloads(bool isEqualOp) {
7278 /// Set of (canonical) types that we've already handled.
7279 llvm::SmallPtrSet<QualType, 8> AddedTypes;
7280
7281 for (BuiltinCandidateTypeSet::iterator
7282 Ptr = CandidateTypes[0].pointer_begin(),
7283 PtrEnd = CandidateTypes[0].pointer_end();
7284 Ptr != PtrEnd; ++Ptr) {
7285 // If this is operator=, keep track of the builtin candidates we added.
7286 if (isEqualOp)
7287 AddedTypes.insert(S.Context.getCanonicalType(*Ptr));
7288 else if (!(*Ptr)->getPointeeType()->isObjectType())
7289 continue;
7290
7291 // non-volatile version
7292 QualType ParamTypes[2] = {
7293 S.Context.getLValueReferenceType(*Ptr),
7294 isEqualOp ? *Ptr : S.Context.getPointerDiffType(),
7295 };
7296 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7297 /*IsAssigmentOperator=*/ isEqualOp);
7298
7299 bool NeedVolatile = !(*Ptr).isVolatileQualified() &&
7300 VisibleTypeConversionsQuals.hasVolatile();
7301 if (NeedVolatile) {
7302 // volatile version
7303 ParamTypes[0] =
7304 S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr));
7305 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7306 /*IsAssigmentOperator=*/isEqualOp);
7307 }
7308
7309 if (!(*Ptr).isRestrictQualified() &&
7310 VisibleTypeConversionsQuals.hasRestrict()) {
7311 // restrict version
7312 ParamTypes[0]
7313 = S.Context.getLValueReferenceType(S.Context.getRestrictType(*Ptr));
7314 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7315 /*IsAssigmentOperator=*/isEqualOp);
7316
7317 if (NeedVolatile) {
7318 // volatile restrict version
7319 ParamTypes[0]
7320 = S.Context.getLValueReferenceType(
7321 S.Context.getCVRQualifiedType(*Ptr,
7322 (Qualifiers::Volatile |
7323 Qualifiers::Restrict)));
7324 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7325 /*IsAssigmentOperator=*/isEqualOp);
7326 }
7327 }
7328 }
7329
7330 if (isEqualOp) {
7331 for (BuiltinCandidateTypeSet::iterator
7332 Ptr = CandidateTypes[1].pointer_begin(),
7333 PtrEnd = CandidateTypes[1].pointer_end();
7334 Ptr != PtrEnd; ++Ptr) {
7335 // Make sure we don't add the same candidate twice.
7336 if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7337 continue;
7338
7339 QualType ParamTypes[2] = {
7340 S.Context.getLValueReferenceType(*Ptr),
7341 *Ptr,
7342 };
7343
7344 // non-volatile version
7345 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7346 /*IsAssigmentOperator=*/true);
7347
7348 bool NeedVolatile = !(*Ptr).isVolatileQualified() &&
7349 VisibleTypeConversionsQuals.hasVolatile();
7350 if (NeedVolatile) {
7351 // volatile version
7352 ParamTypes[0] =
7353 S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr));
7354 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7355 /*IsAssigmentOperator=*/true);
7356 }
7357
7358 if (!(*Ptr).isRestrictQualified() &&
7359 VisibleTypeConversionsQuals.hasRestrict()) {
7360 // restrict version
7361 ParamTypes[0]
7362 = S.Context.getLValueReferenceType(S.Context.getRestrictType(*Ptr));
7363 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7364 /*IsAssigmentOperator=*/true);
7365
7366 if (NeedVolatile) {
7367 // volatile restrict version
7368 ParamTypes[0]
7369 = S.Context.getLValueReferenceType(
7370 S.Context.getCVRQualifiedType(*Ptr,
7371 (Qualifiers::Volatile |
7372 Qualifiers::Restrict)));
7373 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7374 /*IsAssigmentOperator=*/true);
7375 }
7376 }
7377 }
7378 }
7379 }
7380
7381 // C++ [over.built]p18:
7382 //
7383 // For every triple (L, VQ, R), where L is an arithmetic type,
7384 // VQ is either volatile or empty, and R is a promoted
7385 // arithmetic type, there exist candidate operator functions of
7386 // the form
7387 //
7388 // VQ L& operator=(VQ L&, R);
7389 // VQ L& operator*=(VQ L&, R);
7390 // VQ L& operator/=(VQ L&, R);
7391 // VQ L& operator+=(VQ L&, R);
7392 // VQ L& operator-=(VQ L&, R);
addAssignmentArithmeticOverloads(bool isEqualOp)7393 void addAssignmentArithmeticOverloads(bool isEqualOp) {
7394 if (!HasArithmeticOrEnumeralCandidateType)
7395 return;
7396
7397 for (unsigned Left = 0; Left < NumArithmeticTypes; ++Left) {
7398 for (unsigned Right = FirstPromotedArithmeticType;
7399 Right < LastPromotedArithmeticType; ++Right) {
7400 QualType ParamTypes[2];
7401 ParamTypes[1] = getArithmeticType(Right);
7402
7403 // Add this built-in operator as a candidate (VQ is empty).
7404 ParamTypes[0] =
7405 S.Context.getLValueReferenceType(getArithmeticType(Left));
7406 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7407 /*IsAssigmentOperator=*/isEqualOp);
7408
7409 // Add this built-in operator as a candidate (VQ is 'volatile').
7410 if (VisibleTypeConversionsQuals.hasVolatile()) {
7411 ParamTypes[0] =
7412 S.Context.getVolatileType(getArithmeticType(Left));
7413 ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7414 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7415 /*IsAssigmentOperator=*/isEqualOp);
7416 }
7417 }
7418 }
7419
7420 // Extension: Add the binary operators =, +=, -=, *=, /= for vector types.
7421 for (BuiltinCandidateTypeSet::iterator
7422 Vec1 = CandidateTypes[0].vector_begin(),
7423 Vec1End = CandidateTypes[0].vector_end();
7424 Vec1 != Vec1End; ++Vec1) {
7425 for (BuiltinCandidateTypeSet::iterator
7426 Vec2 = CandidateTypes[1].vector_begin(),
7427 Vec2End = CandidateTypes[1].vector_end();
7428 Vec2 != Vec2End; ++Vec2) {
7429 QualType ParamTypes[2];
7430 ParamTypes[1] = *Vec2;
7431 // Add this built-in operator as a candidate (VQ is empty).
7432 ParamTypes[0] = S.Context.getLValueReferenceType(*Vec1);
7433 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7434 /*IsAssigmentOperator=*/isEqualOp);
7435
7436 // Add this built-in operator as a candidate (VQ is 'volatile').
7437 if (VisibleTypeConversionsQuals.hasVolatile()) {
7438 ParamTypes[0] = S.Context.getVolatileType(*Vec1);
7439 ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7440 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7441 /*IsAssigmentOperator=*/isEqualOp);
7442 }
7443 }
7444 }
7445 }
7446
7447 // C++ [over.built]p22:
7448 //
7449 // For every triple (L, VQ, R), where L is an integral type, VQ
7450 // is either volatile or empty, and R is a promoted integral
7451 // type, there exist candidate operator functions of the form
7452 //
7453 // VQ L& operator%=(VQ L&, R);
7454 // VQ L& operator<<=(VQ L&, R);
7455 // VQ L& operator>>=(VQ L&, R);
7456 // VQ L& operator&=(VQ L&, R);
7457 // VQ L& operator^=(VQ L&, R);
7458 // VQ L& operator|=(VQ L&, R);
addAssignmentIntegralOverloads()7459 void addAssignmentIntegralOverloads() {
7460 if (!HasArithmeticOrEnumeralCandidateType)
7461 return;
7462
7463 for (unsigned Left = FirstIntegralType; Left < LastIntegralType; ++Left) {
7464 for (unsigned Right = FirstPromotedIntegralType;
7465 Right < LastPromotedIntegralType; ++Right) {
7466 QualType ParamTypes[2];
7467 ParamTypes[1] = getArithmeticType(Right);
7468
7469 // Add this built-in operator as a candidate (VQ is empty).
7470 ParamTypes[0] =
7471 S.Context.getLValueReferenceType(getArithmeticType(Left));
7472 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
7473 if (VisibleTypeConversionsQuals.hasVolatile()) {
7474 // Add this built-in operator as a candidate (VQ is 'volatile').
7475 ParamTypes[0] = getArithmeticType(Left);
7476 ParamTypes[0] = S.Context.getVolatileType(ParamTypes[0]);
7477 ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7478 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
7479 }
7480 }
7481 }
7482 }
7483
7484 // C++ [over.operator]p23:
7485 //
7486 // There also exist candidate operator functions of the form
7487 //
7488 // bool operator!(bool);
7489 // bool operator&&(bool, bool);
7490 // bool operator||(bool, bool);
addExclaimOverload()7491 void addExclaimOverload() {
7492 QualType ParamTy = S.Context.BoolTy;
7493 S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, CandidateSet,
7494 /*IsAssignmentOperator=*/false,
7495 /*NumContextualBoolArguments=*/1);
7496 }
addAmpAmpOrPipePipeOverload()7497 void addAmpAmpOrPipePipeOverload() {
7498 QualType ParamTypes[2] = { S.Context.BoolTy, S.Context.BoolTy };
7499 S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, CandidateSet,
7500 /*IsAssignmentOperator=*/false,
7501 /*NumContextualBoolArguments=*/2);
7502 }
7503
7504 // C++ [over.built]p13:
7505 //
7506 // For every cv-qualified or cv-unqualified object type T there
7507 // exist candidate operator functions of the form
7508 //
7509 // T* operator+(T*, ptrdiff_t); [ABOVE]
7510 // T& operator[](T*, ptrdiff_t);
7511 // T* operator-(T*, ptrdiff_t); [ABOVE]
7512 // T* operator+(ptrdiff_t, T*); [ABOVE]
7513 // T& operator[](ptrdiff_t, T*);
addSubscriptOverloads()7514 void addSubscriptOverloads() {
7515 for (BuiltinCandidateTypeSet::iterator
7516 Ptr = CandidateTypes[0].pointer_begin(),
7517 PtrEnd = CandidateTypes[0].pointer_end();
7518 Ptr != PtrEnd; ++Ptr) {
7519 QualType ParamTypes[2] = { *Ptr, S.Context.getPointerDiffType() };
7520 QualType PointeeType = (*Ptr)->getPointeeType();
7521 if (!PointeeType->isObjectType())
7522 continue;
7523
7524 QualType ResultTy = S.Context.getLValueReferenceType(PointeeType);
7525
7526 // T& operator[](T*, ptrdiff_t)
7527 S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, CandidateSet);
7528 }
7529
7530 for (BuiltinCandidateTypeSet::iterator
7531 Ptr = CandidateTypes[1].pointer_begin(),
7532 PtrEnd = CandidateTypes[1].pointer_end();
7533 Ptr != PtrEnd; ++Ptr) {
7534 QualType ParamTypes[2] = { S.Context.getPointerDiffType(), *Ptr };
7535 QualType PointeeType = (*Ptr)->getPointeeType();
7536 if (!PointeeType->isObjectType())
7537 continue;
7538
7539 QualType ResultTy = S.Context.getLValueReferenceType(PointeeType);
7540
7541 // T& operator[](ptrdiff_t, T*)
7542 S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, CandidateSet);
7543 }
7544 }
7545
7546 // C++ [over.built]p11:
7547 // For every quintuple (C1, C2, T, CV1, CV2), where C2 is a class type,
7548 // C1 is the same type as C2 or is a derived class of C2, T is an object
7549 // type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
7550 // there exist candidate operator functions of the form
7551 //
7552 // CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
7553 //
7554 // where CV12 is the union of CV1 and CV2.
addArrowStarOverloads()7555 void addArrowStarOverloads() {
7556 for (BuiltinCandidateTypeSet::iterator
7557 Ptr = CandidateTypes[0].pointer_begin(),
7558 PtrEnd = CandidateTypes[0].pointer_end();
7559 Ptr != PtrEnd; ++Ptr) {
7560 QualType C1Ty = (*Ptr);
7561 QualType C1;
7562 QualifierCollector Q1;
7563 C1 = QualType(Q1.strip(C1Ty->getPointeeType()), 0);
7564 if (!isa<RecordType>(C1))
7565 continue;
7566 // heuristic to reduce number of builtin candidates in the set.
7567 // Add volatile/restrict version only if there are conversions to a
7568 // volatile/restrict type.
7569 if (!VisibleTypeConversionsQuals.hasVolatile() && Q1.hasVolatile())
7570 continue;
7571 if (!VisibleTypeConversionsQuals.hasRestrict() && Q1.hasRestrict())
7572 continue;
7573 for (BuiltinCandidateTypeSet::iterator
7574 MemPtr = CandidateTypes[1].member_pointer_begin(),
7575 MemPtrEnd = CandidateTypes[1].member_pointer_end();
7576 MemPtr != MemPtrEnd; ++MemPtr) {
7577 const MemberPointerType *mptr = cast<MemberPointerType>(*MemPtr);
7578 QualType C2 = QualType(mptr->getClass(), 0);
7579 C2 = C2.getUnqualifiedType();
7580 if (C1 != C2 && !S.IsDerivedFrom(C1, C2))
7581 break;
7582 QualType ParamTypes[2] = { *Ptr, *MemPtr };
7583 // build CV12 T&
7584 QualType T = mptr->getPointeeType();
7585 if (!VisibleTypeConversionsQuals.hasVolatile() &&
7586 T.isVolatileQualified())
7587 continue;
7588 if (!VisibleTypeConversionsQuals.hasRestrict() &&
7589 T.isRestrictQualified())
7590 continue;
7591 T = Q1.apply(S.Context, T);
7592 QualType ResultTy = S.Context.getLValueReferenceType(T);
7593 S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, CandidateSet);
7594 }
7595 }
7596 }
7597
7598 // Note that we don't consider the first argument, since it has been
7599 // contextually converted to bool long ago. The candidates below are
7600 // therefore added as binary.
7601 //
7602 // C++ [over.built]p25:
7603 // For every type T, where T is a pointer, pointer-to-member, or scoped
7604 // enumeration type, there exist candidate operator functions of the form
7605 //
7606 // T operator?(bool, T, T);
7607 //
addConditionalOperatorOverloads()7608 void addConditionalOperatorOverloads() {
7609 /// Set of (canonical) types that we've already handled.
7610 llvm::SmallPtrSet<QualType, 8> AddedTypes;
7611
7612 for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) {
7613 for (BuiltinCandidateTypeSet::iterator
7614 Ptr = CandidateTypes[ArgIdx].pointer_begin(),
7615 PtrEnd = CandidateTypes[ArgIdx].pointer_end();
7616 Ptr != PtrEnd; ++Ptr) {
7617 if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7618 continue;
7619
7620 QualType ParamTypes[2] = { *Ptr, *Ptr };
7621 S.AddBuiltinCandidate(*Ptr, ParamTypes, Args, CandidateSet);
7622 }
7623
7624 for (BuiltinCandidateTypeSet::iterator
7625 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
7626 MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
7627 MemPtr != MemPtrEnd; ++MemPtr) {
7628 if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
7629 continue;
7630
7631 QualType ParamTypes[2] = { *MemPtr, *MemPtr };
7632 S.AddBuiltinCandidate(*MemPtr, ParamTypes, Args, CandidateSet);
7633 }
7634
7635 if (S.getLangOpts().CPlusPlus11) {
7636 for (BuiltinCandidateTypeSet::iterator
7637 Enum = CandidateTypes[ArgIdx].enumeration_begin(),
7638 EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
7639 Enum != EnumEnd; ++Enum) {
7640 if (!(*Enum)->getAs<EnumType>()->getDecl()->isScoped())
7641 continue;
7642
7643 if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum)))
7644 continue;
7645
7646 QualType ParamTypes[2] = { *Enum, *Enum };
7647 S.AddBuiltinCandidate(*Enum, ParamTypes, Args, CandidateSet);
7648 }
7649 }
7650 }
7651 }
7652 };
7653
7654 } // end anonymous namespace
7655
7656 /// AddBuiltinOperatorCandidates - Add the appropriate built-in
7657 /// operator overloads to the candidate set (C++ [over.built]), based
7658 /// on the operator @p Op and the arguments given. For example, if the
7659 /// operator is a binary '+', this routine might add "int
7660 /// operator+(int, int)" to cover integer addition.
7661 void
AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,SourceLocation OpLoc,llvm::ArrayRef<Expr * > Args,OverloadCandidateSet & CandidateSet)7662 Sema::AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,
7663 SourceLocation OpLoc,
7664 llvm::ArrayRef<Expr *> Args,
7665 OverloadCandidateSet& CandidateSet) {
7666 // Find all of the types that the arguments can convert to, but only
7667 // if the operator we're looking at has built-in operator candidates
7668 // that make use of these types. Also record whether we encounter non-record
7669 // candidate types or either arithmetic or enumeral candidate types.
7670 Qualifiers VisibleTypeConversionsQuals;
7671 VisibleTypeConversionsQuals.addConst();
7672 for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx)
7673 VisibleTypeConversionsQuals += CollectVRQualifiers(Context, Args[ArgIdx]);
7674
7675 bool HasNonRecordCandidateType = false;
7676 bool HasArithmeticOrEnumeralCandidateType = false;
7677 SmallVector<BuiltinCandidateTypeSet, 2> CandidateTypes;
7678 for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
7679 CandidateTypes.push_back(BuiltinCandidateTypeSet(*this));
7680 CandidateTypes[ArgIdx].AddTypesConvertedFrom(Args[ArgIdx]->getType(),
7681 OpLoc,
7682 true,
7683 (Op == OO_Exclaim ||
7684 Op == OO_AmpAmp ||
7685 Op == OO_PipePipe),
7686 VisibleTypeConversionsQuals);
7687 HasNonRecordCandidateType = HasNonRecordCandidateType ||
7688 CandidateTypes[ArgIdx].hasNonRecordTypes();
7689 HasArithmeticOrEnumeralCandidateType =
7690 HasArithmeticOrEnumeralCandidateType ||
7691 CandidateTypes[ArgIdx].hasArithmeticOrEnumeralTypes();
7692 }
7693
7694 // Exit early when no non-record types have been added to the candidate set
7695 // for any of the arguments to the operator.
7696 //
7697 // We can't exit early for !, ||, or &&, since there we have always have
7698 // 'bool' overloads.
7699 if (!HasNonRecordCandidateType &&
7700 !(Op == OO_Exclaim || Op == OO_AmpAmp || Op == OO_PipePipe))
7701 return;
7702
7703 // Setup an object to manage the common state for building overloads.
7704 BuiltinOperatorOverloadBuilder OpBuilder(*this, Args,
7705 VisibleTypeConversionsQuals,
7706 HasArithmeticOrEnumeralCandidateType,
7707 CandidateTypes, CandidateSet);
7708
7709 // Dispatch over the operation to add in only those overloads which apply.
7710 switch (Op) {
7711 case OO_None:
7712 case NUM_OVERLOADED_OPERATORS:
7713 llvm_unreachable("Expected an overloaded operator");
7714
7715 case OO_New:
7716 case OO_Delete:
7717 case OO_Array_New:
7718 case OO_Array_Delete:
7719 case OO_Call:
7720 llvm_unreachable(
7721 "Special operators don't use AddBuiltinOperatorCandidates");
7722
7723 case OO_Comma:
7724 case OO_Arrow:
7725 // C++ [over.match.oper]p3:
7726 // -- For the operator ',', the unary operator '&', or the
7727 // operator '->', the built-in candidates set is empty.
7728 break;
7729
7730 case OO_Plus: // '+' is either unary or binary
7731 if (Args.size() == 1)
7732 OpBuilder.addUnaryPlusPointerOverloads();
7733 // Fall through.
7734
7735 case OO_Minus: // '-' is either unary or binary
7736 if (Args.size() == 1) {
7737 OpBuilder.addUnaryPlusOrMinusArithmeticOverloads();
7738 } else {
7739 OpBuilder.addBinaryPlusOrMinusPointerOverloads(Op);
7740 OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7741 }
7742 break;
7743
7744 case OO_Star: // '*' is either unary or binary
7745 if (Args.size() == 1)
7746 OpBuilder.addUnaryStarPointerOverloads();
7747 else
7748 OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7749 break;
7750
7751 case OO_Slash:
7752 OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7753 break;
7754
7755 case OO_PlusPlus:
7756 case OO_MinusMinus:
7757 OpBuilder.addPlusPlusMinusMinusArithmeticOverloads(Op);
7758 OpBuilder.addPlusPlusMinusMinusPointerOverloads();
7759 break;
7760
7761 case OO_EqualEqual:
7762 case OO_ExclaimEqual:
7763 OpBuilder.addEqualEqualOrNotEqualMemberPointerOverloads();
7764 // Fall through.
7765
7766 case OO_Less:
7767 case OO_Greater:
7768 case OO_LessEqual:
7769 case OO_GreaterEqual:
7770 OpBuilder.addRelationalPointerOrEnumeralOverloads();
7771 OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/true);
7772 break;
7773
7774 case OO_Percent:
7775 case OO_Caret:
7776 case OO_Pipe:
7777 case OO_LessLess:
7778 case OO_GreaterGreater:
7779 OpBuilder.addBinaryBitwiseArithmeticOverloads(Op);
7780 break;
7781
7782 case OO_Amp: // '&' is either unary or binary
7783 if (Args.size() == 1)
7784 // C++ [over.match.oper]p3:
7785 // -- For the operator ',', the unary operator '&', or the
7786 // operator '->', the built-in candidates set is empty.
7787 break;
7788
7789 OpBuilder.addBinaryBitwiseArithmeticOverloads(Op);
7790 break;
7791
7792 case OO_Tilde:
7793 OpBuilder.addUnaryTildePromotedIntegralOverloads();
7794 break;
7795
7796 case OO_Equal:
7797 OpBuilder.addAssignmentMemberPointerOrEnumeralOverloads();
7798 // Fall through.
7799
7800 case OO_PlusEqual:
7801 case OO_MinusEqual:
7802 OpBuilder.addAssignmentPointerOverloads(Op == OO_Equal);
7803 // Fall through.
7804
7805 case OO_StarEqual:
7806 case OO_SlashEqual:
7807 OpBuilder.addAssignmentArithmeticOverloads(Op == OO_Equal);
7808 break;
7809
7810 case OO_PercentEqual:
7811 case OO_LessLessEqual:
7812 case OO_GreaterGreaterEqual:
7813 case OO_AmpEqual:
7814 case OO_CaretEqual:
7815 case OO_PipeEqual:
7816 OpBuilder.addAssignmentIntegralOverloads();
7817 break;
7818
7819 case OO_Exclaim:
7820 OpBuilder.addExclaimOverload();
7821 break;
7822
7823 case OO_AmpAmp:
7824 case OO_PipePipe:
7825 OpBuilder.addAmpAmpOrPipePipeOverload();
7826 break;
7827
7828 case OO_Subscript:
7829 OpBuilder.addSubscriptOverloads();
7830 break;
7831
7832 case OO_ArrowStar:
7833 OpBuilder.addArrowStarOverloads();
7834 break;
7835
7836 case OO_Conditional:
7837 OpBuilder.addConditionalOperatorOverloads();
7838 OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7839 break;
7840 }
7841 }
7842
7843 /// \brief Add function candidates found via argument-dependent lookup
7844 /// to the set of overloading candidates.
7845 ///
7846 /// This routine performs argument-dependent name lookup based on the
7847 /// given function name (which may also be an operator name) and adds
7848 /// all of the overload candidates found by ADL to the overload
7849 /// candidate set (C++ [basic.lookup.argdep]).
7850 void
AddArgumentDependentLookupCandidates(DeclarationName Name,bool Operator,SourceLocation Loc,ArrayRef<Expr * > Args,TemplateArgumentListInfo * ExplicitTemplateArgs,OverloadCandidateSet & CandidateSet,bool PartialOverloading)7851 Sema::AddArgumentDependentLookupCandidates(DeclarationName Name,
7852 bool Operator, SourceLocation Loc,
7853 ArrayRef<Expr *> Args,
7854 TemplateArgumentListInfo *ExplicitTemplateArgs,
7855 OverloadCandidateSet& CandidateSet,
7856 bool PartialOverloading) {
7857 ADLResult Fns;
7858
7859 // FIXME: This approach for uniquing ADL results (and removing
7860 // redundant candidates from the set) relies on pointer-equality,
7861 // which means we need to key off the canonical decl. However,
7862 // always going back to the canonical decl might not get us the
7863 // right set of default arguments. What default arguments are
7864 // we supposed to consider on ADL candidates, anyway?
7865
7866 // FIXME: Pass in the explicit template arguments?
7867 ArgumentDependentLookup(Name, Operator, Loc, Args, Fns);
7868
7869 // Erase all of the candidates we already knew about.
7870 for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(),
7871 CandEnd = CandidateSet.end();
7872 Cand != CandEnd; ++Cand)
7873 if (Cand->Function) {
7874 Fns.erase(Cand->Function);
7875 if (FunctionTemplateDecl *FunTmpl = Cand->Function->getPrimaryTemplate())
7876 Fns.erase(FunTmpl);
7877 }
7878
7879 // For each of the ADL candidates we found, add it to the overload
7880 // set.
7881 for (ADLResult::iterator I = Fns.begin(), E = Fns.end(); I != E; ++I) {
7882 DeclAccessPair FoundDecl = DeclAccessPair::make(*I, AS_none);
7883 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
7884 if (ExplicitTemplateArgs)
7885 continue;
7886
7887 AddOverloadCandidate(FD, FoundDecl, Args, CandidateSet, false,
7888 PartialOverloading);
7889 } else
7890 AddTemplateOverloadCandidate(cast<FunctionTemplateDecl>(*I),
7891 FoundDecl, ExplicitTemplateArgs,
7892 Args, CandidateSet);
7893 }
7894 }
7895
7896 /// isBetterOverloadCandidate - Determines whether the first overload
7897 /// candidate is a better candidate than the second (C++ 13.3.3p1).
7898 bool
isBetterOverloadCandidate(Sema & S,const OverloadCandidate & Cand1,const OverloadCandidate & Cand2,SourceLocation Loc,bool UserDefinedConversion)7899 isBetterOverloadCandidate(Sema &S,
7900 const OverloadCandidate &Cand1,
7901 const OverloadCandidate &Cand2,
7902 SourceLocation Loc,
7903 bool UserDefinedConversion) {
7904 // Define viable functions to be better candidates than non-viable
7905 // functions.
7906 if (!Cand2.Viable)
7907 return Cand1.Viable;
7908 else if (!Cand1.Viable)
7909 return false;
7910
7911 // C++ [over.match.best]p1:
7912 //
7913 // -- if F is a static member function, ICS1(F) is defined such
7914 // that ICS1(F) is neither better nor worse than ICS1(G) for
7915 // any function G, and, symmetrically, ICS1(G) is neither
7916 // better nor worse than ICS1(F).
7917 unsigned StartArg = 0;
7918 if (Cand1.IgnoreObjectArgument || Cand2.IgnoreObjectArgument)
7919 StartArg = 1;
7920
7921 // C++ [over.match.best]p1:
7922 // A viable function F1 is defined to be a better function than another
7923 // viable function F2 if for all arguments i, ICSi(F1) is not a worse
7924 // conversion sequence than ICSi(F2), and then...
7925 unsigned NumArgs = Cand1.NumConversions;
7926 assert(Cand2.NumConversions == NumArgs && "Overload candidate mismatch");
7927 bool HasBetterConversion = false;
7928 for (unsigned ArgIdx = StartArg; ArgIdx < NumArgs; ++ArgIdx) {
7929 switch (CompareImplicitConversionSequences(S,
7930 Cand1.Conversions[ArgIdx],
7931 Cand2.Conversions[ArgIdx])) {
7932 case ImplicitConversionSequence::Better:
7933 // Cand1 has a better conversion sequence.
7934 HasBetterConversion = true;
7935 break;
7936
7937 case ImplicitConversionSequence::Worse:
7938 // Cand1 can't be better than Cand2.
7939 return false;
7940
7941 case ImplicitConversionSequence::Indistinguishable:
7942 // Do nothing.
7943 break;
7944 }
7945 }
7946
7947 // -- for some argument j, ICSj(F1) is a better conversion sequence than
7948 // ICSj(F2), or, if not that,
7949 if (HasBetterConversion)
7950 return true;
7951
7952 // - F1 is a non-template function and F2 is a function template
7953 // specialization, or, if not that,
7954 if ((!Cand1.Function || !Cand1.Function->getPrimaryTemplate()) &&
7955 Cand2.Function && Cand2.Function->getPrimaryTemplate())
7956 return true;
7957
7958 // -- F1 and F2 are function template specializations, and the function
7959 // template for F1 is more specialized than the template for F2
7960 // according to the partial ordering rules described in 14.5.5.2, or,
7961 // if not that,
7962 if (Cand1.Function && Cand1.Function->getPrimaryTemplate() &&
7963 Cand2.Function && Cand2.Function->getPrimaryTemplate()) {
7964 if (FunctionTemplateDecl *BetterTemplate
7965 = S.getMoreSpecializedTemplate(Cand1.Function->getPrimaryTemplate(),
7966 Cand2.Function->getPrimaryTemplate(),
7967 Loc,
7968 isa<CXXConversionDecl>(Cand1.Function)? TPOC_Conversion
7969 : TPOC_Call,
7970 Cand1.ExplicitCallArguments))
7971 return BetterTemplate == Cand1.Function->getPrimaryTemplate();
7972 }
7973
7974 // -- the context is an initialization by user-defined conversion
7975 // (see 8.5, 13.3.1.5) and the standard conversion sequence
7976 // from the return type of F1 to the destination type (i.e.,
7977 // the type of the entity being initialized) is a better
7978 // conversion sequence than the standard conversion sequence
7979 // from the return type of F2 to the destination type.
7980 if (UserDefinedConversion && Cand1.Function && Cand2.Function &&
7981 isa<CXXConversionDecl>(Cand1.Function) &&
7982 isa<CXXConversionDecl>(Cand2.Function)) {
7983 // First check whether we prefer one of the conversion functions over the
7984 // other. This only distinguishes the results in non-standard, extension
7985 // cases such as the conversion from a lambda closure type to a function
7986 // pointer or block.
7987 ImplicitConversionSequence::CompareKind FuncResult
7988 = compareConversionFunctions(S, Cand1.Function, Cand2.Function);
7989 if (FuncResult != ImplicitConversionSequence::Indistinguishable)
7990 return FuncResult;
7991
7992 switch (CompareStandardConversionSequences(S,
7993 Cand1.FinalConversion,
7994 Cand2.FinalConversion)) {
7995 case ImplicitConversionSequence::Better:
7996 // Cand1 has a better conversion sequence.
7997 return true;
7998
7999 case ImplicitConversionSequence::Worse:
8000 // Cand1 can't be better than Cand2.
8001 return false;
8002
8003 case ImplicitConversionSequence::Indistinguishable:
8004 // Do nothing
8005 break;
8006 }
8007 }
8008
8009 return false;
8010 }
8011
8012 /// \brief Computes the best viable function (C++ 13.3.3)
8013 /// within an overload candidate set.
8014 ///
8015 /// \param Loc The location of the function name (or operator symbol) for
8016 /// which overload resolution occurs.
8017 ///
8018 /// \param Best If overload resolution was successful or found a deleted
8019 /// function, \p Best points to the candidate function found.
8020 ///
8021 /// \returns The result of overload resolution.
8022 OverloadingResult
BestViableFunction(Sema & S,SourceLocation Loc,iterator & Best,bool UserDefinedConversion)8023 OverloadCandidateSet::BestViableFunction(Sema &S, SourceLocation Loc,
8024 iterator &Best,
8025 bool UserDefinedConversion) {
8026 // Find the best viable function.
8027 Best = end();
8028 for (iterator Cand = begin(); Cand != end(); ++Cand) {
8029 if (Cand->Viable)
8030 if (Best == end() || isBetterOverloadCandidate(S, *Cand, *Best, Loc,
8031 UserDefinedConversion))
8032 Best = Cand;
8033 }
8034
8035 // If we didn't find any viable functions, abort.
8036 if (Best == end())
8037 return OR_No_Viable_Function;
8038
8039 // Make sure that this function is better than every other viable
8040 // function. If not, we have an ambiguity.
8041 for (iterator Cand = begin(); Cand != end(); ++Cand) {
8042 if (Cand->Viable &&
8043 Cand != Best &&
8044 !isBetterOverloadCandidate(S, *Best, *Cand, Loc,
8045 UserDefinedConversion)) {
8046 Best = end();
8047 return OR_Ambiguous;
8048 }
8049 }
8050
8051 // Best is the best viable function.
8052 if (Best->Function &&
8053 (Best->Function->isDeleted() ||
8054 S.isFunctionConsideredUnavailable(Best->Function)))
8055 return OR_Deleted;
8056
8057 return OR_Success;
8058 }
8059
8060 namespace {
8061
8062 enum OverloadCandidateKind {
8063 oc_function,
8064 oc_method,
8065 oc_constructor,
8066 oc_function_template,
8067 oc_method_template,
8068 oc_constructor_template,
8069 oc_implicit_default_constructor,
8070 oc_implicit_copy_constructor,
8071 oc_implicit_move_constructor,
8072 oc_implicit_copy_assignment,
8073 oc_implicit_move_assignment,
8074 oc_implicit_inherited_constructor
8075 };
8076
ClassifyOverloadCandidate(Sema & S,FunctionDecl * Fn,std::string & Description)8077 OverloadCandidateKind ClassifyOverloadCandidate(Sema &S,
8078 FunctionDecl *Fn,
8079 std::string &Description) {
8080 bool isTemplate = false;
8081
8082 if (FunctionTemplateDecl *FunTmpl = Fn->getPrimaryTemplate()) {
8083 isTemplate = true;
8084 Description = S.getTemplateArgumentBindingsText(
8085 FunTmpl->getTemplateParameters(), *Fn->getTemplateSpecializationArgs());
8086 }
8087
8088 if (CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn)) {
8089 if (!Ctor->isImplicit())
8090 return isTemplate ? oc_constructor_template : oc_constructor;
8091
8092 if (Ctor->getInheritedConstructor())
8093 return oc_implicit_inherited_constructor;
8094
8095 if (Ctor->isDefaultConstructor())
8096 return oc_implicit_default_constructor;
8097
8098 if (Ctor->isMoveConstructor())
8099 return oc_implicit_move_constructor;
8100
8101 assert(Ctor->isCopyConstructor() &&
8102 "unexpected sort of implicit constructor");
8103 return oc_implicit_copy_constructor;
8104 }
8105
8106 if (CXXMethodDecl *Meth = dyn_cast<CXXMethodDecl>(Fn)) {
8107 // This actually gets spelled 'candidate function' for now, but
8108 // it doesn't hurt to split it out.
8109 if (!Meth->isImplicit())
8110 return isTemplate ? oc_method_template : oc_method;
8111
8112 if (Meth->isMoveAssignmentOperator())
8113 return oc_implicit_move_assignment;
8114
8115 if (Meth->isCopyAssignmentOperator())
8116 return oc_implicit_copy_assignment;
8117
8118 assert(isa<CXXConversionDecl>(Meth) && "expected conversion");
8119 return oc_method;
8120 }
8121
8122 return isTemplate ? oc_function_template : oc_function;
8123 }
8124
MaybeEmitInheritedConstructorNote(Sema & S,Decl * Fn)8125 void MaybeEmitInheritedConstructorNote(Sema &S, Decl *Fn) {
8126 const CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn);
8127 if (!Ctor) return;
8128
8129 Ctor = Ctor->getInheritedConstructor();
8130 if (!Ctor) return;
8131
8132 S.Diag(Ctor->getLocation(), diag::note_ovl_candidate_inherited_constructor);
8133 }
8134
8135 } // end anonymous namespace
8136
8137 // Notes the location of an overload candidate.
NoteOverloadCandidate(FunctionDecl * Fn,QualType DestType)8138 void Sema::NoteOverloadCandidate(FunctionDecl *Fn, QualType DestType) {
8139 std::string FnDesc;
8140 OverloadCandidateKind K = ClassifyOverloadCandidate(*this, Fn, FnDesc);
8141 PartialDiagnostic PD = PDiag(diag::note_ovl_candidate)
8142 << (unsigned) K << FnDesc;
8143 HandleFunctionTypeMismatch(PD, Fn->getType(), DestType);
8144 Diag(Fn->getLocation(), PD);
8145 MaybeEmitInheritedConstructorNote(*this, Fn);
8146 }
8147
8148 //Notes the location of all overload candidates designated through
8149 // OverloadedExpr
NoteAllOverloadCandidates(Expr * OverloadedExpr,QualType DestType)8150 void Sema::NoteAllOverloadCandidates(Expr* OverloadedExpr, QualType DestType) {
8151 assert(OverloadedExpr->getType() == Context.OverloadTy);
8152
8153 OverloadExpr::FindResult Ovl = OverloadExpr::find(OverloadedExpr);
8154 OverloadExpr *OvlExpr = Ovl.Expression;
8155
8156 for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
8157 IEnd = OvlExpr->decls_end();
8158 I != IEnd; ++I) {
8159 if (FunctionTemplateDecl *FunTmpl =
8160 dyn_cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl()) ) {
8161 NoteOverloadCandidate(FunTmpl->getTemplatedDecl(), DestType);
8162 } else if (FunctionDecl *Fun
8163 = dyn_cast<FunctionDecl>((*I)->getUnderlyingDecl()) ) {
8164 NoteOverloadCandidate(Fun, DestType);
8165 }
8166 }
8167 }
8168
8169 /// Diagnoses an ambiguous conversion. The partial diagnostic is the
8170 /// "lead" diagnostic; it will be given two arguments, the source and
8171 /// target types of the conversion.
DiagnoseAmbiguousConversion(Sema & S,SourceLocation CaretLoc,const PartialDiagnostic & PDiag) const8172 void ImplicitConversionSequence::DiagnoseAmbiguousConversion(
8173 Sema &S,
8174 SourceLocation CaretLoc,
8175 const PartialDiagnostic &PDiag) const {
8176 S.Diag(CaretLoc, PDiag)
8177 << Ambiguous.getFromType() << Ambiguous.getToType();
8178 // FIXME: The note limiting machinery is borrowed from
8179 // OverloadCandidateSet::NoteCandidates; there's an opportunity for
8180 // refactoring here.
8181 const OverloadsShown ShowOverloads = S.Diags.getShowOverloads();
8182 unsigned CandsShown = 0;
8183 AmbiguousConversionSequence::const_iterator I, E;
8184 for (I = Ambiguous.begin(), E = Ambiguous.end(); I != E; ++I) {
8185 if (CandsShown >= 4 && ShowOverloads == Ovl_Best)
8186 break;
8187 ++CandsShown;
8188 S.NoteOverloadCandidate(*I);
8189 }
8190 if (I != E)
8191 S.Diag(SourceLocation(), diag::note_ovl_too_many_candidates) << int(E - I);
8192 }
8193
8194 namespace {
8195
DiagnoseBadConversion(Sema & S,OverloadCandidate * Cand,unsigned I)8196 void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I) {
8197 const ImplicitConversionSequence &Conv = Cand->Conversions[I];
8198 assert(Conv.isBad());
8199 assert(Cand->Function && "for now, candidate must be a function");
8200 FunctionDecl *Fn = Cand->Function;
8201
8202 // There's a conversion slot for the object argument if this is a
8203 // non-constructor method. Note that 'I' corresponds the
8204 // conversion-slot index.
8205 bool isObjectArgument = false;
8206 if (isa<CXXMethodDecl>(Fn) && !isa<CXXConstructorDecl>(Fn)) {
8207 if (I == 0)
8208 isObjectArgument = true;
8209 else
8210 I--;
8211 }
8212
8213 std::string FnDesc;
8214 OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
8215
8216 Expr *FromExpr = Conv.Bad.FromExpr;
8217 QualType FromTy = Conv.Bad.getFromType();
8218 QualType ToTy = Conv.Bad.getToType();
8219
8220 if (FromTy == S.Context.OverloadTy) {
8221 assert(FromExpr && "overload set argument came from implicit argument?");
8222 Expr *E = FromExpr->IgnoreParens();
8223 if (isa<UnaryOperator>(E))
8224 E = cast<UnaryOperator>(E)->getSubExpr()->IgnoreParens();
8225 DeclarationName Name = cast<OverloadExpr>(E)->getName();
8226
8227 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_overload)
8228 << (unsigned) FnKind << FnDesc
8229 << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8230 << ToTy << Name << I+1;
8231 MaybeEmitInheritedConstructorNote(S, Fn);
8232 return;
8233 }
8234
8235 // Do some hand-waving analysis to see if the non-viability is due
8236 // to a qualifier mismatch.
8237 CanQualType CFromTy = S.Context.getCanonicalType(FromTy);
8238 CanQualType CToTy = S.Context.getCanonicalType(ToTy);
8239 if (CanQual<ReferenceType> RT = CToTy->getAs<ReferenceType>())
8240 CToTy = RT->getPointeeType();
8241 else {
8242 // TODO: detect and diagnose the full richness of const mismatches.
8243 if (CanQual<PointerType> FromPT = CFromTy->getAs<PointerType>())
8244 if (CanQual<PointerType> ToPT = CToTy->getAs<PointerType>())
8245 CFromTy = FromPT->getPointeeType(), CToTy = ToPT->getPointeeType();
8246 }
8247
8248 if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() &&
8249 !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {
8250 Qualifiers FromQs = CFromTy.getQualifiers();
8251 Qualifiers ToQs = CToTy.getQualifiers();
8252
8253 if (FromQs.getAddressSpace() != ToQs.getAddressSpace()) {
8254 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_addrspace)
8255 << (unsigned) FnKind << FnDesc
8256 << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8257 << FromTy
8258 << FromQs.getAddressSpace() << ToQs.getAddressSpace()
8259 << (unsigned) isObjectArgument << I+1;
8260 MaybeEmitInheritedConstructorNote(S, Fn);
8261 return;
8262 }
8263
8264 if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {
8265 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_ownership)
8266 << (unsigned) FnKind << FnDesc
8267 << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8268 << FromTy
8269 << FromQs.getObjCLifetime() << ToQs.getObjCLifetime()
8270 << (unsigned) isObjectArgument << I+1;
8271 MaybeEmitInheritedConstructorNote(S, Fn);
8272 return;
8273 }
8274
8275 if (FromQs.getObjCGCAttr() != ToQs.getObjCGCAttr()) {
8276 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_gc)
8277 << (unsigned) FnKind << FnDesc
8278 << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8279 << FromTy
8280 << FromQs.getObjCGCAttr() << ToQs.getObjCGCAttr()
8281 << (unsigned) isObjectArgument << I+1;
8282 MaybeEmitInheritedConstructorNote(S, Fn);
8283 return;
8284 }
8285
8286 unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
8287 assert(CVR && "unexpected qualifiers mismatch");
8288
8289 if (isObjectArgument) {
8290 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr_this)
8291 << (unsigned) FnKind << FnDesc
8292 << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8293 << FromTy << (CVR - 1);
8294 } else {
8295 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr)
8296 << (unsigned) FnKind << FnDesc
8297 << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8298 << FromTy << (CVR - 1) << I+1;
8299 }
8300 MaybeEmitInheritedConstructorNote(S, Fn);
8301 return;
8302 }
8303
8304 // Special diagnostic for failure to convert an initializer list, since
8305 // telling the user that it has type void is not useful.
8306 if (FromExpr && isa<InitListExpr>(FromExpr)) {
8307 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_list_argument)
8308 << (unsigned) FnKind << FnDesc
8309 << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8310 << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8311 MaybeEmitInheritedConstructorNote(S, Fn);
8312 return;
8313 }
8314
8315 // Diagnose references or pointers to incomplete types differently,
8316 // since it's far from impossible that the incompleteness triggered
8317 // the failure.
8318 QualType TempFromTy = FromTy.getNonReferenceType();
8319 if (const PointerType *PTy = TempFromTy->getAs<PointerType>())
8320 TempFromTy = PTy->getPointeeType();
8321 if (TempFromTy->isIncompleteType()) {
8322 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_conv_incomplete)
8323 << (unsigned) FnKind << FnDesc
8324 << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8325 << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8326 MaybeEmitInheritedConstructorNote(S, Fn);
8327 return;
8328 }
8329
8330 // Diagnose base -> derived pointer conversions.
8331 unsigned BaseToDerivedConversion = 0;
8332 if (const PointerType *FromPtrTy = FromTy->getAs<PointerType>()) {
8333 if (const PointerType *ToPtrTy = ToTy->getAs<PointerType>()) {
8334 if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs(
8335 FromPtrTy->getPointeeType()) &&
8336 !FromPtrTy->getPointeeType()->isIncompleteType() &&
8337 !ToPtrTy->getPointeeType()->isIncompleteType() &&
8338 S.IsDerivedFrom(ToPtrTy->getPointeeType(),
8339 FromPtrTy->getPointeeType()))
8340 BaseToDerivedConversion = 1;
8341 }
8342 } else if (const ObjCObjectPointerType *FromPtrTy
8343 = FromTy->getAs<ObjCObjectPointerType>()) {
8344 if (const ObjCObjectPointerType *ToPtrTy
8345 = ToTy->getAs<ObjCObjectPointerType>())
8346 if (const ObjCInterfaceDecl *FromIface = FromPtrTy->getInterfaceDecl())
8347 if (const ObjCInterfaceDecl *ToIface = ToPtrTy->getInterfaceDecl())
8348 if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs(
8349 FromPtrTy->getPointeeType()) &&
8350 FromIface->isSuperClassOf(ToIface))
8351 BaseToDerivedConversion = 2;
8352 } else if (const ReferenceType *ToRefTy = ToTy->getAs<ReferenceType>()) {
8353 if (ToRefTy->getPointeeType().isAtLeastAsQualifiedAs(FromTy) &&
8354 !FromTy->isIncompleteType() &&
8355 !ToRefTy->getPointeeType()->isIncompleteType() &&
8356 S.IsDerivedFrom(ToRefTy->getPointeeType(), FromTy)) {
8357 BaseToDerivedConversion = 3;
8358 } else if (ToTy->isLValueReferenceType() && !FromExpr->isLValue() &&
8359 ToTy.getNonReferenceType().getCanonicalType() ==
8360 FromTy.getNonReferenceType().getCanonicalType()) {
8361 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_lvalue)
8362 << (unsigned) FnKind << FnDesc
8363 << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8364 << (unsigned) isObjectArgument << I + 1;
8365 MaybeEmitInheritedConstructorNote(S, Fn);
8366 return;
8367 }
8368 }
8369
8370 if (BaseToDerivedConversion) {
8371 S.Diag(Fn->getLocation(),
8372 diag::note_ovl_candidate_bad_base_to_derived_conv)
8373 << (unsigned) FnKind << FnDesc
8374 << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8375 << (BaseToDerivedConversion - 1)
8376 << FromTy << ToTy << I+1;
8377 MaybeEmitInheritedConstructorNote(S, Fn);
8378 return;
8379 }
8380
8381 if (isa<ObjCObjectPointerType>(CFromTy) &&
8382 isa<PointerType>(CToTy)) {
8383 Qualifiers FromQs = CFromTy.getQualifiers();
8384 Qualifiers ToQs = CToTy.getQualifiers();
8385 if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {
8386 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_arc_conv)
8387 << (unsigned) FnKind << FnDesc
8388 << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8389 << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8390 MaybeEmitInheritedConstructorNote(S, Fn);
8391 return;
8392 }
8393 }
8394
8395 // Emit the generic diagnostic and, optionally, add the hints to it.
8396 PartialDiagnostic FDiag = S.PDiag(diag::note_ovl_candidate_bad_conv);
8397 FDiag << (unsigned) FnKind << FnDesc
8398 << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8399 << FromTy << ToTy << (unsigned) isObjectArgument << I + 1
8400 << (unsigned) (Cand->Fix.Kind);
8401
8402 // If we can fix the conversion, suggest the FixIts.
8403 for (std::vector<FixItHint>::iterator HI = Cand->Fix.Hints.begin(),
8404 HE = Cand->Fix.Hints.end(); HI != HE; ++HI)
8405 FDiag << *HI;
8406 S.Diag(Fn->getLocation(), FDiag);
8407
8408 MaybeEmitInheritedConstructorNote(S, Fn);
8409 }
8410
8411 /// Additional arity mismatch diagnosis specific to a function overload
8412 /// candidates. This is not covered by the more general DiagnoseArityMismatch()
8413 /// over a candidate in any candidate set.
CheckArityMismatch(Sema & S,OverloadCandidate * Cand,unsigned NumArgs)8414 bool CheckArityMismatch(Sema &S, OverloadCandidate *Cand,
8415 unsigned NumArgs) {
8416 FunctionDecl *Fn = Cand->Function;
8417 unsigned MinParams = Fn->getMinRequiredArguments();
8418
8419 // With invalid overloaded operators, it's possible that we think we
8420 // have an arity mismatch when in fact it looks like we have the
8421 // right number of arguments, because only overloaded operators have
8422 // the weird behavior of overloading member and non-member functions.
8423 // Just don't report anything.
8424 if (Fn->isInvalidDecl() &&
8425 Fn->getDeclName().getNameKind() == DeclarationName::CXXOperatorName)
8426 return true;
8427
8428 if (NumArgs < MinParams) {
8429 assert((Cand->FailureKind == ovl_fail_too_few_arguments) ||
8430 (Cand->FailureKind == ovl_fail_bad_deduction &&
8431 Cand->DeductionFailure.Result == Sema::TDK_TooFewArguments));
8432 } else {
8433 assert((Cand->FailureKind == ovl_fail_too_many_arguments) ||
8434 (Cand->FailureKind == ovl_fail_bad_deduction &&
8435 Cand->DeductionFailure.Result == Sema::TDK_TooManyArguments));
8436 }
8437
8438 return false;
8439 }
8440
8441 /// General arity mismatch diagnosis over a candidate in a candidate set.
DiagnoseArityMismatch(Sema & S,Decl * D,unsigned NumFormalArgs)8442 void DiagnoseArityMismatch(Sema &S, Decl *D, unsigned NumFormalArgs) {
8443 assert(isa<FunctionDecl>(D) &&
8444 "The templated declaration should at least be a function"
8445 " when diagnosing bad template argument deduction due to too many"
8446 " or too few arguments");
8447
8448 FunctionDecl *Fn = cast<FunctionDecl>(D);
8449
8450 // TODO: treat calls to a missing default constructor as a special case
8451 const FunctionProtoType *FnTy = Fn->getType()->getAs<FunctionProtoType>();
8452 unsigned MinParams = Fn->getMinRequiredArguments();
8453
8454 // at least / at most / exactly
8455 unsigned mode, modeCount;
8456 if (NumFormalArgs < MinParams) {
8457 if (MinParams != FnTy->getNumArgs() ||
8458 FnTy->isVariadic() || FnTy->isTemplateVariadic())
8459 mode = 0; // "at least"
8460 else
8461 mode = 2; // "exactly"
8462 modeCount = MinParams;
8463 } else {
8464 if (MinParams != FnTy->getNumArgs())
8465 mode = 1; // "at most"
8466 else
8467 mode = 2; // "exactly"
8468 modeCount = FnTy->getNumArgs();
8469 }
8470
8471 std::string Description;
8472 OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, Description);
8473
8474 if (modeCount == 1 && Fn->getParamDecl(0)->getDeclName())
8475 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity_one)
8476 << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != 0) << mode
8477 << Fn->getParamDecl(0) << NumFormalArgs;
8478 else
8479 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity)
8480 << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != 0) << mode
8481 << modeCount << NumFormalArgs;
8482 MaybeEmitInheritedConstructorNote(S, Fn);
8483 }
8484
8485 /// Arity mismatch diagnosis specific to a function overload candidate.
DiagnoseArityMismatch(Sema & S,OverloadCandidate * Cand,unsigned NumFormalArgs)8486 void DiagnoseArityMismatch(Sema &S, OverloadCandidate *Cand,
8487 unsigned NumFormalArgs) {
8488 if (!CheckArityMismatch(S, Cand, NumFormalArgs))
8489 DiagnoseArityMismatch(S, Cand->Function, NumFormalArgs);
8490 }
8491
getDescribedTemplate(Decl * Templated)8492 TemplateDecl *getDescribedTemplate(Decl *Templated) {
8493 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(Templated))
8494 return FD->getDescribedFunctionTemplate();
8495 else if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(Templated))
8496 return RD->getDescribedClassTemplate();
8497
8498 llvm_unreachable("Unsupported: Getting the described template declaration"
8499 " for bad deduction diagnosis");
8500 }
8501
8502 /// Diagnose a failed template-argument deduction.
DiagnoseBadDeduction(Sema & S,Decl * Templated,DeductionFailureInfo & DeductionFailure,unsigned NumArgs)8503 void DiagnoseBadDeduction(Sema &S, Decl *Templated,
8504 DeductionFailureInfo &DeductionFailure,
8505 unsigned NumArgs) {
8506 TemplateParameter Param = DeductionFailure.getTemplateParameter();
8507 NamedDecl *ParamD;
8508 (ParamD = Param.dyn_cast<TemplateTypeParmDecl*>()) ||
8509 (ParamD = Param.dyn_cast<NonTypeTemplateParmDecl*>()) ||
8510 (ParamD = Param.dyn_cast<TemplateTemplateParmDecl*>());
8511 switch (DeductionFailure.Result) {
8512 case Sema::TDK_Success:
8513 llvm_unreachable("TDK_success while diagnosing bad deduction");
8514
8515 case Sema::TDK_Incomplete: {
8516 assert(ParamD && "no parameter found for incomplete deduction result");
8517 S.Diag(Templated->getLocation(),
8518 diag::note_ovl_candidate_incomplete_deduction)
8519 << ParamD->getDeclName();
8520 MaybeEmitInheritedConstructorNote(S, Templated);
8521 return;
8522 }
8523
8524 case Sema::TDK_Underqualified: {
8525 assert(ParamD && "no parameter found for bad qualifiers deduction result");
8526 TemplateTypeParmDecl *TParam = cast<TemplateTypeParmDecl>(ParamD);
8527
8528 QualType Param = DeductionFailure.getFirstArg()->getAsType();
8529
8530 // Param will have been canonicalized, but it should just be a
8531 // qualified version of ParamD, so move the qualifiers to that.
8532 QualifierCollector Qs;
8533 Qs.strip(Param);
8534 QualType NonCanonParam = Qs.apply(S.Context, TParam->getTypeForDecl());
8535 assert(S.Context.hasSameType(Param, NonCanonParam));
8536
8537 // Arg has also been canonicalized, but there's nothing we can do
8538 // about that. It also doesn't matter as much, because it won't
8539 // have any template parameters in it (because deduction isn't
8540 // done on dependent types).
8541 QualType Arg = DeductionFailure.getSecondArg()->getAsType();
8542
8543 S.Diag(Templated->getLocation(), diag::note_ovl_candidate_underqualified)
8544 << ParamD->getDeclName() << Arg << NonCanonParam;
8545 MaybeEmitInheritedConstructorNote(S, Templated);
8546 return;
8547 }
8548
8549 case Sema::TDK_Inconsistent: {
8550 assert(ParamD && "no parameter found for inconsistent deduction result");
8551 int which = 0;
8552 if (isa<TemplateTypeParmDecl>(ParamD))
8553 which = 0;
8554 else if (isa<NonTypeTemplateParmDecl>(ParamD))
8555 which = 1;
8556 else {
8557 which = 2;
8558 }
8559
8560 S.Diag(Templated->getLocation(),
8561 diag::note_ovl_candidate_inconsistent_deduction)
8562 << which << ParamD->getDeclName() << *DeductionFailure.getFirstArg()
8563 << *DeductionFailure.getSecondArg();
8564 MaybeEmitInheritedConstructorNote(S, Templated);
8565 return;
8566 }
8567
8568 case Sema::TDK_InvalidExplicitArguments:
8569 assert(ParamD && "no parameter found for invalid explicit arguments");
8570 if (ParamD->getDeclName())
8571 S.Diag(Templated->getLocation(),
8572 diag::note_ovl_candidate_explicit_arg_mismatch_named)
8573 << ParamD->getDeclName();
8574 else {
8575 int index = 0;
8576 if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(ParamD))
8577 index = TTP->getIndex();
8578 else if (NonTypeTemplateParmDecl *NTTP
8579 = dyn_cast<NonTypeTemplateParmDecl>(ParamD))
8580 index = NTTP->getIndex();
8581 else
8582 index = cast<TemplateTemplateParmDecl>(ParamD)->getIndex();
8583 S.Diag(Templated->getLocation(),
8584 diag::note_ovl_candidate_explicit_arg_mismatch_unnamed)
8585 << (index + 1);
8586 }
8587 MaybeEmitInheritedConstructorNote(S, Templated);
8588 return;
8589
8590 case Sema::TDK_TooManyArguments:
8591 case Sema::TDK_TooFewArguments:
8592 DiagnoseArityMismatch(S, Templated, NumArgs);
8593 return;
8594
8595 case Sema::TDK_InstantiationDepth:
8596 S.Diag(Templated->getLocation(),
8597 diag::note_ovl_candidate_instantiation_depth);
8598 MaybeEmitInheritedConstructorNote(S, Templated);
8599 return;
8600
8601 case Sema::TDK_SubstitutionFailure: {
8602 // Format the template argument list into the argument string.
8603 SmallString<128> TemplateArgString;
8604 if (TemplateArgumentList *Args =
8605 DeductionFailure.getTemplateArgumentList()) {
8606 TemplateArgString = " ";
8607 TemplateArgString += S.getTemplateArgumentBindingsText(
8608 getDescribedTemplate(Templated)->getTemplateParameters(), *Args);
8609 }
8610
8611 // If this candidate was disabled by enable_if, say so.
8612 PartialDiagnosticAt *PDiag = DeductionFailure.getSFINAEDiagnostic();
8613 if (PDiag && PDiag->second.getDiagID() ==
8614 diag::err_typename_nested_not_found_enable_if) {
8615 // FIXME: Use the source range of the condition, and the fully-qualified
8616 // name of the enable_if template. These are both present in PDiag.
8617 S.Diag(PDiag->first, diag::note_ovl_candidate_disabled_by_enable_if)
8618 << "'enable_if'" << TemplateArgString;
8619 return;
8620 }
8621
8622 // Format the SFINAE diagnostic into the argument string.
8623 // FIXME: Add a general mechanism to include a PartialDiagnostic *'s
8624 // formatted message in another diagnostic.
8625 SmallString<128> SFINAEArgString;
8626 SourceRange R;
8627 if (PDiag) {
8628 SFINAEArgString = ": ";
8629 R = SourceRange(PDiag->first, PDiag->first);
8630 PDiag->second.EmitToString(S.getDiagnostics(), SFINAEArgString);
8631 }
8632
8633 S.Diag(Templated->getLocation(),
8634 diag::note_ovl_candidate_substitution_failure)
8635 << TemplateArgString << SFINAEArgString << R;
8636 MaybeEmitInheritedConstructorNote(S, Templated);
8637 return;
8638 }
8639
8640 case Sema::TDK_FailedOverloadResolution: {
8641 OverloadExpr::FindResult R = OverloadExpr::find(DeductionFailure.getExpr());
8642 S.Diag(Templated->getLocation(),
8643 diag::note_ovl_candidate_failed_overload_resolution)
8644 << R.Expression->getName();
8645 return;
8646 }
8647
8648 case Sema::TDK_NonDeducedMismatch: {
8649 // FIXME: Provide a source location to indicate what we couldn't match.
8650 TemplateArgument FirstTA = *DeductionFailure.getFirstArg();
8651 TemplateArgument SecondTA = *DeductionFailure.getSecondArg();
8652 if (FirstTA.getKind() == TemplateArgument::Template &&
8653 SecondTA.getKind() == TemplateArgument::Template) {
8654 TemplateName FirstTN = FirstTA.getAsTemplate();
8655 TemplateName SecondTN = SecondTA.getAsTemplate();
8656 if (FirstTN.getKind() == TemplateName::Template &&
8657 SecondTN.getKind() == TemplateName::Template) {
8658 if (FirstTN.getAsTemplateDecl()->getName() ==
8659 SecondTN.getAsTemplateDecl()->getName()) {
8660 // FIXME: This fixes a bad diagnostic where both templates are named
8661 // the same. This particular case is a bit difficult since:
8662 // 1) It is passed as a string to the diagnostic printer.
8663 // 2) The diagnostic printer only attempts to find a better
8664 // name for types, not decls.
8665 // Ideally, this should folded into the diagnostic printer.
8666 S.Diag(Templated->getLocation(),
8667 diag::note_ovl_candidate_non_deduced_mismatch_qualified)
8668 << FirstTN.getAsTemplateDecl() << SecondTN.getAsTemplateDecl();
8669 return;
8670 }
8671 }
8672 }
8673 S.Diag(Templated->getLocation(),
8674 diag::note_ovl_candidate_non_deduced_mismatch)
8675 << FirstTA << SecondTA;
8676 return;
8677 }
8678 // TODO: diagnose these individually, then kill off
8679 // note_ovl_candidate_bad_deduction, which is uselessly vague.
8680 case Sema::TDK_MiscellaneousDeductionFailure:
8681 S.Diag(Templated->getLocation(), diag::note_ovl_candidate_bad_deduction);
8682 MaybeEmitInheritedConstructorNote(S, Templated);
8683 return;
8684 }
8685 }
8686
8687 /// Diagnose a failed template-argument deduction, for function calls.
DiagnoseBadDeduction(Sema & S,OverloadCandidate * Cand,unsigned NumArgs)8688 void DiagnoseBadDeduction(Sema &S, OverloadCandidate *Cand, unsigned NumArgs) {
8689 unsigned TDK = Cand->DeductionFailure.Result;
8690 if (TDK == Sema::TDK_TooFewArguments || TDK == Sema::TDK_TooManyArguments) {
8691 if (CheckArityMismatch(S, Cand, NumArgs))
8692 return;
8693 }
8694 DiagnoseBadDeduction(S, Cand->Function, // pattern
8695 Cand->DeductionFailure, NumArgs);
8696 }
8697
8698 /// CUDA: diagnose an invalid call across targets.
DiagnoseBadTarget(Sema & S,OverloadCandidate * Cand)8699 void DiagnoseBadTarget(Sema &S, OverloadCandidate *Cand) {
8700 FunctionDecl *Caller = cast<FunctionDecl>(S.CurContext);
8701 FunctionDecl *Callee = Cand->Function;
8702
8703 Sema::CUDAFunctionTarget CallerTarget = S.IdentifyCUDATarget(Caller),
8704 CalleeTarget = S.IdentifyCUDATarget(Callee);
8705
8706 std::string FnDesc;
8707 OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Callee, FnDesc);
8708
8709 S.Diag(Callee->getLocation(), diag::note_ovl_candidate_bad_target)
8710 << (unsigned) FnKind << CalleeTarget << CallerTarget;
8711 }
8712
8713 /// Generates a 'note' diagnostic for an overload candidate. We've
8714 /// already generated a primary error at the call site.
8715 ///
8716 /// It really does need to be a single diagnostic with its caret
8717 /// pointed at the candidate declaration. Yes, this creates some
8718 /// major challenges of technical writing. Yes, this makes pointing
8719 /// out problems with specific arguments quite awkward. It's still
8720 /// better than generating twenty screens of text for every failed
8721 /// overload.
8722 ///
8723 /// It would be great to be able to express per-candidate problems
8724 /// more richly for those diagnostic clients that cared, but we'd
8725 /// still have to be just as careful with the default diagnostics.
NoteFunctionCandidate(Sema & S,OverloadCandidate * Cand,unsigned NumArgs)8726 void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand,
8727 unsigned NumArgs) {
8728 FunctionDecl *Fn = Cand->Function;
8729
8730 // Note deleted candidates, but only if they're viable.
8731 if (Cand->Viable && (Fn->isDeleted() ||
8732 S.isFunctionConsideredUnavailable(Fn))) {
8733 std::string FnDesc;
8734 OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
8735
8736 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_deleted)
8737 << FnKind << FnDesc
8738 << (Fn->isDeleted() ? (Fn->isDeletedAsWritten() ? 1 : 2) : 0);
8739 MaybeEmitInheritedConstructorNote(S, Fn);
8740 return;
8741 }
8742
8743 // We don't really have anything else to say about viable candidates.
8744 if (Cand->Viable) {
8745 S.NoteOverloadCandidate(Fn);
8746 return;
8747 }
8748
8749 switch (Cand->FailureKind) {
8750 case ovl_fail_too_many_arguments:
8751 case ovl_fail_too_few_arguments:
8752 return DiagnoseArityMismatch(S, Cand, NumArgs);
8753
8754 case ovl_fail_bad_deduction:
8755 return DiagnoseBadDeduction(S, Cand, NumArgs);
8756
8757 case ovl_fail_trivial_conversion:
8758 case ovl_fail_bad_final_conversion:
8759 case ovl_fail_final_conversion_not_exact:
8760 return S.NoteOverloadCandidate(Fn);
8761
8762 case ovl_fail_bad_conversion: {
8763 unsigned I = (Cand->IgnoreObjectArgument ? 1 : 0);
8764 for (unsigned N = Cand->NumConversions; I != N; ++I)
8765 if (Cand->Conversions[I].isBad())
8766 return DiagnoseBadConversion(S, Cand, I);
8767
8768 // FIXME: this currently happens when we're called from SemaInit
8769 // when user-conversion overload fails. Figure out how to handle
8770 // those conditions and diagnose them well.
8771 return S.NoteOverloadCandidate(Fn);
8772 }
8773
8774 case ovl_fail_bad_target:
8775 return DiagnoseBadTarget(S, Cand);
8776 }
8777 }
8778
NoteSurrogateCandidate(Sema & S,OverloadCandidate * Cand)8779 void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) {
8780 // Desugar the type of the surrogate down to a function type,
8781 // retaining as many typedefs as possible while still showing
8782 // the function type (and, therefore, its parameter types).
8783 QualType FnType = Cand->Surrogate->getConversionType();
8784 bool isLValueReference = false;
8785 bool isRValueReference = false;
8786 bool isPointer = false;
8787 if (const LValueReferenceType *FnTypeRef =
8788 FnType->getAs<LValueReferenceType>()) {
8789 FnType = FnTypeRef->getPointeeType();
8790 isLValueReference = true;
8791 } else if (const RValueReferenceType *FnTypeRef =
8792 FnType->getAs<RValueReferenceType>()) {
8793 FnType = FnTypeRef->getPointeeType();
8794 isRValueReference = true;
8795 }
8796 if (const PointerType *FnTypePtr = FnType->getAs<PointerType>()) {
8797 FnType = FnTypePtr->getPointeeType();
8798 isPointer = true;
8799 }
8800 // Desugar down to a function type.
8801 FnType = QualType(FnType->getAs<FunctionType>(), 0);
8802 // Reconstruct the pointer/reference as appropriate.
8803 if (isPointer) FnType = S.Context.getPointerType(FnType);
8804 if (isRValueReference) FnType = S.Context.getRValueReferenceType(FnType);
8805 if (isLValueReference) FnType = S.Context.getLValueReferenceType(FnType);
8806
8807 S.Diag(Cand->Surrogate->getLocation(), diag::note_ovl_surrogate_cand)
8808 << FnType;
8809 MaybeEmitInheritedConstructorNote(S, Cand->Surrogate);
8810 }
8811
NoteBuiltinOperatorCandidate(Sema & S,StringRef Opc,SourceLocation OpLoc,OverloadCandidate * Cand)8812 void NoteBuiltinOperatorCandidate(Sema &S,
8813 StringRef Opc,
8814 SourceLocation OpLoc,
8815 OverloadCandidate *Cand) {
8816 assert(Cand->NumConversions <= 2 && "builtin operator is not binary");
8817 std::string TypeStr("operator");
8818 TypeStr += Opc;
8819 TypeStr += "(";
8820 TypeStr += Cand->BuiltinTypes.ParamTypes[0].getAsString();
8821 if (Cand->NumConversions == 1) {
8822 TypeStr += ")";
8823 S.Diag(OpLoc, diag::note_ovl_builtin_unary_candidate) << TypeStr;
8824 } else {
8825 TypeStr += ", ";
8826 TypeStr += Cand->BuiltinTypes.ParamTypes[1].getAsString();
8827 TypeStr += ")";
8828 S.Diag(OpLoc, diag::note_ovl_builtin_binary_candidate) << TypeStr;
8829 }
8830 }
8831
NoteAmbiguousUserConversions(Sema & S,SourceLocation OpLoc,OverloadCandidate * Cand)8832 void NoteAmbiguousUserConversions(Sema &S, SourceLocation OpLoc,
8833 OverloadCandidate *Cand) {
8834 unsigned NoOperands = Cand->NumConversions;
8835 for (unsigned ArgIdx = 0; ArgIdx < NoOperands; ++ArgIdx) {
8836 const ImplicitConversionSequence &ICS = Cand->Conversions[ArgIdx];
8837 if (ICS.isBad()) break; // all meaningless after first invalid
8838 if (!ICS.isAmbiguous()) continue;
8839
8840 ICS.DiagnoseAmbiguousConversion(S, OpLoc,
8841 S.PDiag(diag::note_ambiguous_type_conversion));
8842 }
8843 }
8844
GetLocationForCandidate(const OverloadCandidate * Cand)8845 static SourceLocation GetLocationForCandidate(const OverloadCandidate *Cand) {
8846 if (Cand->Function)
8847 return Cand->Function->getLocation();
8848 if (Cand->IsSurrogate)
8849 return Cand->Surrogate->getLocation();
8850 return SourceLocation();
8851 }
8852
RankDeductionFailure(const DeductionFailureInfo & DFI)8853 static unsigned RankDeductionFailure(const DeductionFailureInfo &DFI) {
8854 switch ((Sema::TemplateDeductionResult)DFI.Result) {
8855 case Sema::TDK_Success:
8856 llvm_unreachable("TDK_success while diagnosing bad deduction");
8857
8858 case Sema::TDK_Invalid:
8859 case Sema::TDK_Incomplete:
8860 return 1;
8861
8862 case Sema::TDK_Underqualified:
8863 case Sema::TDK_Inconsistent:
8864 return 2;
8865
8866 case Sema::TDK_SubstitutionFailure:
8867 case Sema::TDK_NonDeducedMismatch:
8868 case Sema::TDK_MiscellaneousDeductionFailure:
8869 return 3;
8870
8871 case Sema::TDK_InstantiationDepth:
8872 case Sema::TDK_FailedOverloadResolution:
8873 return 4;
8874
8875 case Sema::TDK_InvalidExplicitArguments:
8876 return 5;
8877
8878 case Sema::TDK_TooManyArguments:
8879 case Sema::TDK_TooFewArguments:
8880 return 6;
8881 }
8882 llvm_unreachable("Unhandled deduction result");
8883 }
8884
8885 struct CompareOverloadCandidatesForDisplay {
8886 Sema &S;
CompareOverloadCandidatesForDisplayclang::__anon0637eb3d0711::CompareOverloadCandidatesForDisplay8887 CompareOverloadCandidatesForDisplay(Sema &S) : S(S) {}
8888
operator ()clang::__anon0637eb3d0711::CompareOverloadCandidatesForDisplay8889 bool operator()(const OverloadCandidate *L,
8890 const OverloadCandidate *R) {
8891 // Fast-path this check.
8892 if (L == R) return false;
8893
8894 // Order first by viability.
8895 if (L->Viable) {
8896 if (!R->Viable) return true;
8897
8898 // TODO: introduce a tri-valued comparison for overload
8899 // candidates. Would be more worthwhile if we had a sort
8900 // that could exploit it.
8901 if (isBetterOverloadCandidate(S, *L, *R, SourceLocation())) return true;
8902 if (isBetterOverloadCandidate(S, *R, *L, SourceLocation())) return false;
8903 } else if (R->Viable)
8904 return false;
8905
8906 assert(L->Viable == R->Viable);
8907
8908 // Criteria by which we can sort non-viable candidates:
8909 if (!L->Viable) {
8910 // 1. Arity mismatches come after other candidates.
8911 if (L->FailureKind == ovl_fail_too_many_arguments ||
8912 L->FailureKind == ovl_fail_too_few_arguments)
8913 return false;
8914 if (R->FailureKind == ovl_fail_too_many_arguments ||
8915 R->FailureKind == ovl_fail_too_few_arguments)
8916 return true;
8917
8918 // 2. Bad conversions come first and are ordered by the number
8919 // of bad conversions and quality of good conversions.
8920 if (L->FailureKind == ovl_fail_bad_conversion) {
8921 if (R->FailureKind != ovl_fail_bad_conversion)
8922 return true;
8923
8924 // The conversion that can be fixed with a smaller number of changes,
8925 // comes first.
8926 unsigned numLFixes = L->Fix.NumConversionsFixed;
8927 unsigned numRFixes = R->Fix.NumConversionsFixed;
8928 numLFixes = (numLFixes == 0) ? UINT_MAX : numLFixes;
8929 numRFixes = (numRFixes == 0) ? UINT_MAX : numRFixes;
8930 if (numLFixes != numRFixes) {
8931 if (numLFixes < numRFixes)
8932 return true;
8933 else
8934 return false;
8935 }
8936
8937 // If there's any ordering between the defined conversions...
8938 // FIXME: this might not be transitive.
8939 assert(L->NumConversions == R->NumConversions);
8940
8941 int leftBetter = 0;
8942 unsigned I = (L->IgnoreObjectArgument || R->IgnoreObjectArgument);
8943 for (unsigned E = L->NumConversions; I != E; ++I) {
8944 switch (CompareImplicitConversionSequences(S,
8945 L->Conversions[I],
8946 R->Conversions[I])) {
8947 case ImplicitConversionSequence::Better:
8948 leftBetter++;
8949 break;
8950
8951 case ImplicitConversionSequence::Worse:
8952 leftBetter--;
8953 break;
8954
8955 case ImplicitConversionSequence::Indistinguishable:
8956 break;
8957 }
8958 }
8959 if (leftBetter > 0) return true;
8960 if (leftBetter < 0) return false;
8961
8962 } else if (R->FailureKind == ovl_fail_bad_conversion)
8963 return false;
8964
8965 if (L->FailureKind == ovl_fail_bad_deduction) {
8966 if (R->FailureKind != ovl_fail_bad_deduction)
8967 return true;
8968
8969 if (L->DeductionFailure.Result != R->DeductionFailure.Result)
8970 return RankDeductionFailure(L->DeductionFailure)
8971 < RankDeductionFailure(R->DeductionFailure);
8972 } else if (R->FailureKind == ovl_fail_bad_deduction)
8973 return false;
8974
8975 // TODO: others?
8976 }
8977
8978 // Sort everything else by location.
8979 SourceLocation LLoc = GetLocationForCandidate(L);
8980 SourceLocation RLoc = GetLocationForCandidate(R);
8981
8982 // Put candidates without locations (e.g. builtins) at the end.
8983 if (LLoc.isInvalid()) return false;
8984 if (RLoc.isInvalid()) return true;
8985
8986 return S.SourceMgr.isBeforeInTranslationUnit(LLoc, RLoc);
8987 }
8988 };
8989
8990 /// CompleteNonViableCandidate - Normally, overload resolution only
8991 /// computes up to the first. Produces the FixIt set if possible.
CompleteNonViableCandidate(Sema & S,OverloadCandidate * Cand,ArrayRef<Expr * > Args)8992 void CompleteNonViableCandidate(Sema &S, OverloadCandidate *Cand,
8993 ArrayRef<Expr *> Args) {
8994 assert(!Cand->Viable);
8995
8996 // Don't do anything on failures other than bad conversion.
8997 if (Cand->FailureKind != ovl_fail_bad_conversion) return;
8998
8999 // We only want the FixIts if all the arguments can be corrected.
9000 bool Unfixable = false;
9001 // Use a implicit copy initialization to check conversion fixes.
9002 Cand->Fix.setConversionChecker(TryCopyInitialization);
9003
9004 // Skip forward to the first bad conversion.
9005 unsigned ConvIdx = (Cand->IgnoreObjectArgument ? 1 : 0);
9006 unsigned ConvCount = Cand->NumConversions;
9007 while (true) {
9008 assert(ConvIdx != ConvCount && "no bad conversion in candidate");
9009 ConvIdx++;
9010 if (Cand->Conversions[ConvIdx - 1].isBad()) {
9011 Unfixable = !Cand->TryToFixBadConversion(ConvIdx - 1, S);
9012 break;
9013 }
9014 }
9015
9016 if (ConvIdx == ConvCount)
9017 return;
9018
9019 assert(!Cand->Conversions[ConvIdx].isInitialized() &&
9020 "remaining conversion is initialized?");
9021
9022 // FIXME: this should probably be preserved from the overload
9023 // operation somehow.
9024 bool SuppressUserConversions = false;
9025
9026 const FunctionProtoType* Proto;
9027 unsigned ArgIdx = ConvIdx;
9028
9029 if (Cand->IsSurrogate) {
9030 QualType ConvType
9031 = Cand->Surrogate->getConversionType().getNonReferenceType();
9032 if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
9033 ConvType = ConvPtrType->getPointeeType();
9034 Proto = ConvType->getAs<FunctionProtoType>();
9035 ArgIdx--;
9036 } else if (Cand->Function) {
9037 Proto = Cand->Function->getType()->getAs<FunctionProtoType>();
9038 if (isa<CXXMethodDecl>(Cand->Function) &&
9039 !isa<CXXConstructorDecl>(Cand->Function))
9040 ArgIdx--;
9041 } else {
9042 // Builtin binary operator with a bad first conversion.
9043 assert(ConvCount <= 3);
9044 for (; ConvIdx != ConvCount; ++ConvIdx)
9045 Cand->Conversions[ConvIdx]
9046 = TryCopyInitialization(S, Args[ConvIdx],
9047 Cand->BuiltinTypes.ParamTypes[ConvIdx],
9048 SuppressUserConversions,
9049 /*InOverloadResolution*/ true,
9050 /*AllowObjCWritebackConversion=*/
9051 S.getLangOpts().ObjCAutoRefCount);
9052 return;
9053 }
9054
9055 // Fill in the rest of the conversions.
9056 unsigned NumArgsInProto = Proto->getNumArgs();
9057 for (; ConvIdx != ConvCount; ++ConvIdx, ++ArgIdx) {
9058 if (ArgIdx < NumArgsInProto) {
9059 Cand->Conversions[ConvIdx]
9060 = TryCopyInitialization(S, Args[ArgIdx], Proto->getArgType(ArgIdx),
9061 SuppressUserConversions,
9062 /*InOverloadResolution=*/true,
9063 /*AllowObjCWritebackConversion=*/
9064 S.getLangOpts().ObjCAutoRefCount);
9065 // Store the FixIt in the candidate if it exists.
9066 if (!Unfixable && Cand->Conversions[ConvIdx].isBad())
9067 Unfixable = !Cand->TryToFixBadConversion(ConvIdx, S);
9068 }
9069 else
9070 Cand->Conversions[ConvIdx].setEllipsis();
9071 }
9072 }
9073
9074 } // end anonymous namespace
9075
9076 /// PrintOverloadCandidates - When overload resolution fails, prints
9077 /// diagnostic messages containing the candidates in the candidate
9078 /// set.
NoteCandidates(Sema & S,OverloadCandidateDisplayKind OCD,ArrayRef<Expr * > Args,StringRef Opc,SourceLocation OpLoc)9079 void OverloadCandidateSet::NoteCandidates(Sema &S,
9080 OverloadCandidateDisplayKind OCD,
9081 ArrayRef<Expr *> Args,
9082 StringRef Opc,
9083 SourceLocation OpLoc) {
9084 // Sort the candidates by viability and position. Sorting directly would
9085 // be prohibitive, so we make a set of pointers and sort those.
9086 SmallVector<OverloadCandidate*, 32> Cands;
9087 if (OCD == OCD_AllCandidates) Cands.reserve(size());
9088 for (iterator Cand = begin(), LastCand = end(); Cand != LastCand; ++Cand) {
9089 if (Cand->Viable)
9090 Cands.push_back(Cand);
9091 else if (OCD == OCD_AllCandidates) {
9092 CompleteNonViableCandidate(S, Cand, Args);
9093 if (Cand->Function || Cand->IsSurrogate)
9094 Cands.push_back(Cand);
9095 // Otherwise, this a non-viable builtin candidate. We do not, in general,
9096 // want to list every possible builtin candidate.
9097 }
9098 }
9099
9100 std::sort(Cands.begin(), Cands.end(),
9101 CompareOverloadCandidatesForDisplay(S));
9102
9103 bool ReportedAmbiguousConversions = false;
9104
9105 SmallVectorImpl<OverloadCandidate*>::iterator I, E;
9106 const OverloadsShown ShowOverloads = S.Diags.getShowOverloads();
9107 unsigned CandsShown = 0;
9108 for (I = Cands.begin(), E = Cands.end(); I != E; ++I) {
9109 OverloadCandidate *Cand = *I;
9110
9111 // Set an arbitrary limit on the number of candidate functions we'll spam
9112 // the user with. FIXME: This limit should depend on details of the
9113 // candidate list.
9114 if (CandsShown >= 4 && ShowOverloads == Ovl_Best) {
9115 break;
9116 }
9117 ++CandsShown;
9118
9119 if (Cand->Function)
9120 NoteFunctionCandidate(S, Cand, Args.size());
9121 else if (Cand->IsSurrogate)
9122 NoteSurrogateCandidate(S, Cand);
9123 else {
9124 assert(Cand->Viable &&
9125 "Non-viable built-in candidates are not added to Cands.");
9126 // Generally we only see ambiguities including viable builtin
9127 // operators if overload resolution got screwed up by an
9128 // ambiguous user-defined conversion.
9129 //
9130 // FIXME: It's quite possible for different conversions to see
9131 // different ambiguities, though.
9132 if (!ReportedAmbiguousConversions) {
9133 NoteAmbiguousUserConversions(S, OpLoc, Cand);
9134 ReportedAmbiguousConversions = true;
9135 }
9136
9137 // If this is a viable builtin, print it.
9138 NoteBuiltinOperatorCandidate(S, Opc, OpLoc, Cand);
9139 }
9140 }
9141
9142 if (I != E)
9143 S.Diag(OpLoc, diag::note_ovl_too_many_candidates) << int(E - I);
9144 }
9145
9146 static SourceLocation
GetLocationForCandidate(const TemplateSpecCandidate * Cand)9147 GetLocationForCandidate(const TemplateSpecCandidate *Cand) {
9148 return Cand->Specialization ? Cand->Specialization->getLocation()
9149 : SourceLocation();
9150 }
9151
9152 struct CompareTemplateSpecCandidatesForDisplay {
9153 Sema &S;
CompareTemplateSpecCandidatesForDisplayclang::CompareTemplateSpecCandidatesForDisplay9154 CompareTemplateSpecCandidatesForDisplay(Sema &S) : S(S) {}
9155
operator ()clang::CompareTemplateSpecCandidatesForDisplay9156 bool operator()(const TemplateSpecCandidate *L,
9157 const TemplateSpecCandidate *R) {
9158 // Fast-path this check.
9159 if (L == R)
9160 return false;
9161
9162 // Assuming that both candidates are not matches...
9163
9164 // Sort by the ranking of deduction failures.
9165 if (L->DeductionFailure.Result != R->DeductionFailure.Result)
9166 return RankDeductionFailure(L->DeductionFailure) <
9167 RankDeductionFailure(R->DeductionFailure);
9168
9169 // Sort everything else by location.
9170 SourceLocation LLoc = GetLocationForCandidate(L);
9171 SourceLocation RLoc = GetLocationForCandidate(R);
9172
9173 // Put candidates without locations (e.g. builtins) at the end.
9174 if (LLoc.isInvalid())
9175 return false;
9176 if (RLoc.isInvalid())
9177 return true;
9178
9179 return S.SourceMgr.isBeforeInTranslationUnit(LLoc, RLoc);
9180 }
9181 };
9182
9183 /// Diagnose a template argument deduction failure.
9184 /// We are treating these failures as overload failures due to bad
9185 /// deductions.
NoteDeductionFailure(Sema & S)9186 void TemplateSpecCandidate::NoteDeductionFailure(Sema &S) {
9187 DiagnoseBadDeduction(S, Specialization, // pattern
9188 DeductionFailure, /*NumArgs=*/0);
9189 }
9190
destroyCandidates()9191 void TemplateSpecCandidateSet::destroyCandidates() {
9192 for (iterator i = begin(), e = end(); i != e; ++i) {
9193 i->DeductionFailure.Destroy();
9194 }
9195 }
9196
clear()9197 void TemplateSpecCandidateSet::clear() {
9198 destroyCandidates();
9199 Candidates.clear();
9200 }
9201
9202 /// NoteCandidates - When no template specialization match is found, prints
9203 /// diagnostic messages containing the non-matching specializations that form
9204 /// the candidate set.
9205 /// This is analoguous to OverloadCandidateSet::NoteCandidates() with
9206 /// OCD == OCD_AllCandidates and Cand->Viable == false.
NoteCandidates(Sema & S,SourceLocation Loc)9207 void TemplateSpecCandidateSet::NoteCandidates(Sema &S, SourceLocation Loc) {
9208 // Sort the candidates by position (assuming no candidate is a match).
9209 // Sorting directly would be prohibitive, so we make a set of pointers
9210 // and sort those.
9211 SmallVector<TemplateSpecCandidate *, 32> Cands;
9212 Cands.reserve(size());
9213 for (iterator Cand = begin(), LastCand = end(); Cand != LastCand; ++Cand) {
9214 if (Cand->Specialization)
9215 Cands.push_back(Cand);
9216 // Otherwise, this is a non matching builtin candidate. We do not,
9217 // in general, want to list every possible builtin candidate.
9218 }
9219
9220 std::sort(Cands.begin(), Cands.end(),
9221 CompareTemplateSpecCandidatesForDisplay(S));
9222
9223 // FIXME: Perhaps rename OverloadsShown and getShowOverloads()
9224 // for generalization purposes (?).
9225 const OverloadsShown ShowOverloads = S.Diags.getShowOverloads();
9226
9227 SmallVectorImpl<TemplateSpecCandidate *>::iterator I, E;
9228 unsigned CandsShown = 0;
9229 for (I = Cands.begin(), E = Cands.end(); I != E; ++I) {
9230 TemplateSpecCandidate *Cand = *I;
9231
9232 // Set an arbitrary limit on the number of candidates we'll spam
9233 // the user with. FIXME: This limit should depend on details of the
9234 // candidate list.
9235 if (CandsShown >= 4 && ShowOverloads == Ovl_Best)
9236 break;
9237 ++CandsShown;
9238
9239 assert(Cand->Specialization &&
9240 "Non-matching built-in candidates are not added to Cands.");
9241 Cand->NoteDeductionFailure(S);
9242 }
9243
9244 if (I != E)
9245 S.Diag(Loc, diag::note_ovl_too_many_candidates) << int(E - I);
9246 }
9247
9248 // [PossiblyAFunctionType] --> [Return]
9249 // NonFunctionType --> NonFunctionType
9250 // R (A) --> R(A)
9251 // R (*)(A) --> R (A)
9252 // R (&)(A) --> R (A)
9253 // R (S::*)(A) --> R (A)
ExtractUnqualifiedFunctionType(QualType PossiblyAFunctionType)9254 QualType Sema::ExtractUnqualifiedFunctionType(QualType PossiblyAFunctionType) {
9255 QualType Ret = PossiblyAFunctionType;
9256 if (const PointerType *ToTypePtr =
9257 PossiblyAFunctionType->getAs<PointerType>())
9258 Ret = ToTypePtr->getPointeeType();
9259 else if (const ReferenceType *ToTypeRef =
9260 PossiblyAFunctionType->getAs<ReferenceType>())
9261 Ret = ToTypeRef->getPointeeType();
9262 else if (const MemberPointerType *MemTypePtr =
9263 PossiblyAFunctionType->getAs<MemberPointerType>())
9264 Ret = MemTypePtr->getPointeeType();
9265 Ret =
9266 Context.getCanonicalType(Ret).getUnqualifiedType();
9267 return Ret;
9268 }
9269
9270 // A helper class to help with address of function resolution
9271 // - allows us to avoid passing around all those ugly parameters
9272 class AddressOfFunctionResolver
9273 {
9274 Sema& S;
9275 Expr* SourceExpr;
9276 const QualType& TargetType;
9277 QualType TargetFunctionType; // Extracted function type from target type
9278
9279 bool Complain;
9280 //DeclAccessPair& ResultFunctionAccessPair;
9281 ASTContext& Context;
9282
9283 bool TargetTypeIsNonStaticMemberFunction;
9284 bool FoundNonTemplateFunction;
9285 bool StaticMemberFunctionFromBoundPointer;
9286
9287 OverloadExpr::FindResult OvlExprInfo;
9288 OverloadExpr *OvlExpr;
9289 TemplateArgumentListInfo OvlExplicitTemplateArgs;
9290 SmallVector<std::pair<DeclAccessPair, FunctionDecl*>, 4> Matches;
9291 TemplateSpecCandidateSet FailedCandidates;
9292
9293 public:
AddressOfFunctionResolver(Sema & S,Expr * SourceExpr,const QualType & TargetType,bool Complain)9294 AddressOfFunctionResolver(Sema &S, Expr *SourceExpr,
9295 const QualType &TargetType, bool Complain)
9296 : S(S), SourceExpr(SourceExpr), TargetType(TargetType),
9297 Complain(Complain), Context(S.getASTContext()),
9298 TargetTypeIsNonStaticMemberFunction(
9299 !!TargetType->getAs<MemberPointerType>()),
9300 FoundNonTemplateFunction(false),
9301 StaticMemberFunctionFromBoundPointer(false),
9302 OvlExprInfo(OverloadExpr::find(SourceExpr)),
9303 OvlExpr(OvlExprInfo.Expression),
9304 FailedCandidates(OvlExpr->getNameLoc()) {
9305 ExtractUnqualifiedFunctionTypeFromTargetType();
9306
9307 if (TargetFunctionType->isFunctionType()) {
9308 if (UnresolvedMemberExpr *UME = dyn_cast<UnresolvedMemberExpr>(OvlExpr))
9309 if (!UME->isImplicitAccess() &&
9310 !S.ResolveSingleFunctionTemplateSpecialization(UME))
9311 StaticMemberFunctionFromBoundPointer = true;
9312 } else if (OvlExpr->hasExplicitTemplateArgs()) {
9313 DeclAccessPair dap;
9314 if (FunctionDecl *Fn = S.ResolveSingleFunctionTemplateSpecialization(
9315 OvlExpr, false, &dap)) {
9316 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn))
9317 if (!Method->isStatic()) {
9318 // If the target type is a non-function type and the function found
9319 // is a non-static member function, pretend as if that was the
9320 // target, it's the only possible type to end up with.
9321 TargetTypeIsNonStaticMemberFunction = true;
9322
9323 // And skip adding the function if its not in the proper form.
9324 // We'll diagnose this due to an empty set of functions.
9325 if (!OvlExprInfo.HasFormOfMemberPointer)
9326 return;
9327 }
9328
9329 Matches.push_back(std::make_pair(dap, Fn));
9330 }
9331 return;
9332 }
9333
9334 if (OvlExpr->hasExplicitTemplateArgs())
9335 OvlExpr->getExplicitTemplateArgs().copyInto(OvlExplicitTemplateArgs);
9336
9337 if (FindAllFunctionsThatMatchTargetTypeExactly()) {
9338 // C++ [over.over]p4:
9339 // If more than one function is selected, [...]
9340 if (Matches.size() > 1) {
9341 if (FoundNonTemplateFunction)
9342 EliminateAllTemplateMatches();
9343 else
9344 EliminateAllExceptMostSpecializedTemplate();
9345 }
9346 }
9347 }
9348
9349 private:
isTargetTypeAFunction() const9350 bool isTargetTypeAFunction() const {
9351 return TargetFunctionType->isFunctionType();
9352 }
9353
9354 // [ToType] [Return]
9355
9356 // R (*)(A) --> R (A), IsNonStaticMemberFunction = false
9357 // R (&)(A) --> R (A), IsNonStaticMemberFunction = false
9358 // R (S::*)(A) --> R (A), IsNonStaticMemberFunction = true
ExtractUnqualifiedFunctionTypeFromTargetType()9359 void inline ExtractUnqualifiedFunctionTypeFromTargetType() {
9360 TargetFunctionType = S.ExtractUnqualifiedFunctionType(TargetType);
9361 }
9362
9363 // return true if any matching specializations were found
AddMatchingTemplateFunction(FunctionTemplateDecl * FunctionTemplate,const DeclAccessPair & CurAccessFunPair)9364 bool AddMatchingTemplateFunction(FunctionTemplateDecl* FunctionTemplate,
9365 const DeclAccessPair& CurAccessFunPair) {
9366 if (CXXMethodDecl *Method
9367 = dyn_cast<CXXMethodDecl>(FunctionTemplate->getTemplatedDecl())) {
9368 // Skip non-static function templates when converting to pointer, and
9369 // static when converting to member pointer.
9370 if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction)
9371 return false;
9372 }
9373 else if (TargetTypeIsNonStaticMemberFunction)
9374 return false;
9375
9376 // C++ [over.over]p2:
9377 // If the name is a function template, template argument deduction is
9378 // done (14.8.2.2), and if the argument deduction succeeds, the
9379 // resulting template argument list is used to generate a single
9380 // function template specialization, which is added to the set of
9381 // overloaded functions considered.
9382 FunctionDecl *Specialization = 0;
9383 TemplateDeductionInfo Info(FailedCandidates.getLocation());
9384 if (Sema::TemplateDeductionResult Result
9385 = S.DeduceTemplateArguments(FunctionTemplate,
9386 &OvlExplicitTemplateArgs,
9387 TargetFunctionType, Specialization,
9388 Info, /*InOverloadResolution=*/true)) {
9389 // Make a note of the failed deduction for diagnostics.
9390 FailedCandidates.addCandidate()
9391 .set(FunctionTemplate->getTemplatedDecl(),
9392 MakeDeductionFailureInfo(Context, Result, Info));
9393 (void)Result;
9394 return false;
9395 }
9396
9397 // Template argument deduction ensures that we have an exact match or
9398 // compatible pointer-to-function arguments that would be adjusted by ICS.
9399 // This function template specicalization works.
9400 Specialization = cast<FunctionDecl>(Specialization->getCanonicalDecl());
9401 assert(S.isSameOrCompatibleFunctionType(
9402 Context.getCanonicalType(Specialization->getType()),
9403 Context.getCanonicalType(TargetFunctionType)));
9404 Matches.push_back(std::make_pair(CurAccessFunPair, Specialization));
9405 return true;
9406 }
9407
AddMatchingNonTemplateFunction(NamedDecl * Fn,const DeclAccessPair & CurAccessFunPair)9408 bool AddMatchingNonTemplateFunction(NamedDecl* Fn,
9409 const DeclAccessPair& CurAccessFunPair) {
9410 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
9411 // Skip non-static functions when converting to pointer, and static
9412 // when converting to member pointer.
9413 if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction)
9414 return false;
9415 }
9416 else if (TargetTypeIsNonStaticMemberFunction)
9417 return false;
9418
9419 if (FunctionDecl *FunDecl = dyn_cast<FunctionDecl>(Fn)) {
9420 if (S.getLangOpts().CUDA)
9421 if (FunctionDecl *Caller = dyn_cast<FunctionDecl>(S.CurContext))
9422 if (S.CheckCUDATarget(Caller, FunDecl))
9423 return false;
9424
9425 // If any candidate has a placeholder return type, trigger its deduction
9426 // now.
9427 if (S.getLangOpts().CPlusPlus1y &&
9428 FunDecl->getResultType()->isUndeducedType() &&
9429 S.DeduceReturnType(FunDecl, SourceExpr->getLocStart(), Complain))
9430 return false;
9431
9432 QualType ResultTy;
9433 if (Context.hasSameUnqualifiedType(TargetFunctionType,
9434 FunDecl->getType()) ||
9435 S.IsNoReturnConversion(FunDecl->getType(), TargetFunctionType,
9436 ResultTy)) {
9437 Matches.push_back(std::make_pair(CurAccessFunPair,
9438 cast<FunctionDecl>(FunDecl->getCanonicalDecl())));
9439 FoundNonTemplateFunction = true;
9440 return true;
9441 }
9442 }
9443
9444 return false;
9445 }
9446
FindAllFunctionsThatMatchTargetTypeExactly()9447 bool FindAllFunctionsThatMatchTargetTypeExactly() {
9448 bool Ret = false;
9449
9450 // If the overload expression doesn't have the form of a pointer to
9451 // member, don't try to convert it to a pointer-to-member type.
9452 if (IsInvalidFormOfPointerToMemberFunction())
9453 return false;
9454
9455 for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
9456 E = OvlExpr->decls_end();
9457 I != E; ++I) {
9458 // Look through any using declarations to find the underlying function.
9459 NamedDecl *Fn = (*I)->getUnderlyingDecl();
9460
9461 // C++ [over.over]p3:
9462 // Non-member functions and static member functions match
9463 // targets of type "pointer-to-function" or "reference-to-function."
9464 // Nonstatic member functions match targets of
9465 // type "pointer-to-member-function."
9466 // Note that according to DR 247, the containing class does not matter.
9467 if (FunctionTemplateDecl *FunctionTemplate
9468 = dyn_cast<FunctionTemplateDecl>(Fn)) {
9469 if (AddMatchingTemplateFunction(FunctionTemplate, I.getPair()))
9470 Ret = true;
9471 }
9472 // If we have explicit template arguments supplied, skip non-templates.
9473 else if (!OvlExpr->hasExplicitTemplateArgs() &&
9474 AddMatchingNonTemplateFunction(Fn, I.getPair()))
9475 Ret = true;
9476 }
9477 assert(Ret || Matches.empty());
9478 return Ret;
9479 }
9480
EliminateAllExceptMostSpecializedTemplate()9481 void EliminateAllExceptMostSpecializedTemplate() {
9482 // [...] and any given function template specialization F1 is
9483 // eliminated if the set contains a second function template
9484 // specialization whose function template is more specialized
9485 // than the function template of F1 according to the partial
9486 // ordering rules of 14.5.5.2.
9487
9488 // The algorithm specified above is quadratic. We instead use a
9489 // two-pass algorithm (similar to the one used to identify the
9490 // best viable function in an overload set) that identifies the
9491 // best function template (if it exists).
9492
9493 UnresolvedSet<4> MatchesCopy; // TODO: avoid!
9494 for (unsigned I = 0, E = Matches.size(); I != E; ++I)
9495 MatchesCopy.addDecl(Matches[I].second, Matches[I].first.getAccess());
9496
9497 // TODO: It looks like FailedCandidates does not serve much purpose
9498 // here, since the no_viable diagnostic has index 0.
9499 UnresolvedSetIterator Result = S.getMostSpecialized(
9500 MatchesCopy.begin(), MatchesCopy.end(), FailedCandidates, TPOC_Other, 0,
9501 SourceExpr->getLocStart(), S.PDiag(),
9502 S.PDiag(diag::err_addr_ovl_ambiguous) << Matches[0]
9503 .second->getDeclName(),
9504 S.PDiag(diag::note_ovl_candidate) << (unsigned)oc_function_template,
9505 Complain, TargetFunctionType);
9506
9507 if (Result != MatchesCopy.end()) {
9508 // Make it the first and only element
9509 Matches[0].first = Matches[Result - MatchesCopy.begin()].first;
9510 Matches[0].second = cast<FunctionDecl>(*Result);
9511 Matches.resize(1);
9512 }
9513 }
9514
EliminateAllTemplateMatches()9515 void EliminateAllTemplateMatches() {
9516 // [...] any function template specializations in the set are
9517 // eliminated if the set also contains a non-template function, [...]
9518 for (unsigned I = 0, N = Matches.size(); I != N; ) {
9519 if (Matches[I].second->getPrimaryTemplate() == 0)
9520 ++I;
9521 else {
9522 Matches[I] = Matches[--N];
9523 Matches.set_size(N);
9524 }
9525 }
9526 }
9527
9528 public:
ComplainNoMatchesFound() const9529 void ComplainNoMatchesFound() const {
9530 assert(Matches.empty());
9531 S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_no_viable)
9532 << OvlExpr->getName() << TargetFunctionType
9533 << OvlExpr->getSourceRange();
9534 FailedCandidates.NoteCandidates(S, OvlExpr->getLocStart());
9535 S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType);
9536 }
9537
IsInvalidFormOfPointerToMemberFunction() const9538 bool IsInvalidFormOfPointerToMemberFunction() const {
9539 return TargetTypeIsNonStaticMemberFunction &&
9540 !OvlExprInfo.HasFormOfMemberPointer;
9541 }
9542
ComplainIsInvalidFormOfPointerToMemberFunction() const9543 void ComplainIsInvalidFormOfPointerToMemberFunction() const {
9544 // TODO: Should we condition this on whether any functions might
9545 // have matched, or is it more appropriate to do that in callers?
9546 // TODO: a fixit wouldn't hurt.
9547 S.Diag(OvlExpr->getNameLoc(), diag::err_addr_ovl_no_qualifier)
9548 << TargetType << OvlExpr->getSourceRange();
9549 }
9550
IsStaticMemberFunctionFromBoundPointer() const9551 bool IsStaticMemberFunctionFromBoundPointer() const {
9552 return StaticMemberFunctionFromBoundPointer;
9553 }
9554
ComplainIsStaticMemberFunctionFromBoundPointer() const9555 void ComplainIsStaticMemberFunctionFromBoundPointer() const {
9556 S.Diag(OvlExpr->getLocStart(),
9557 diag::err_invalid_form_pointer_member_function)
9558 << OvlExpr->getSourceRange();
9559 }
9560
ComplainOfInvalidConversion() const9561 void ComplainOfInvalidConversion() const {
9562 S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_not_func_ptrref)
9563 << OvlExpr->getName() << TargetType;
9564 }
9565
ComplainMultipleMatchesFound() const9566 void ComplainMultipleMatchesFound() const {
9567 assert(Matches.size() > 1);
9568 S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_ambiguous)
9569 << OvlExpr->getName()
9570 << OvlExpr->getSourceRange();
9571 S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType);
9572 }
9573
hadMultipleCandidates() const9574 bool hadMultipleCandidates() const { return (OvlExpr->getNumDecls() > 1); }
9575
getNumMatches() const9576 int getNumMatches() const { return Matches.size(); }
9577
getMatchingFunctionDecl() const9578 FunctionDecl* getMatchingFunctionDecl() const {
9579 if (Matches.size() != 1) return 0;
9580 return Matches[0].second;
9581 }
9582
getMatchingFunctionAccessPair() const9583 const DeclAccessPair* getMatchingFunctionAccessPair() const {
9584 if (Matches.size() != 1) return 0;
9585 return &Matches[0].first;
9586 }
9587 };
9588
9589 /// ResolveAddressOfOverloadedFunction - Try to resolve the address of
9590 /// an overloaded function (C++ [over.over]), where @p From is an
9591 /// expression with overloaded function type and @p ToType is the type
9592 /// we're trying to resolve to. For example:
9593 ///
9594 /// @code
9595 /// int f(double);
9596 /// int f(int);
9597 ///
9598 /// int (*pfd)(double) = f; // selects f(double)
9599 /// @endcode
9600 ///
9601 /// This routine returns the resulting FunctionDecl if it could be
9602 /// resolved, and NULL otherwise. When @p Complain is true, this
9603 /// routine will emit diagnostics if there is an error.
9604 FunctionDecl *
ResolveAddressOfOverloadedFunction(Expr * AddressOfExpr,QualType TargetType,bool Complain,DeclAccessPair & FoundResult,bool * pHadMultipleCandidates)9605 Sema::ResolveAddressOfOverloadedFunction(Expr *AddressOfExpr,
9606 QualType TargetType,
9607 bool Complain,
9608 DeclAccessPair &FoundResult,
9609 bool *pHadMultipleCandidates) {
9610 assert(AddressOfExpr->getType() == Context.OverloadTy);
9611
9612 AddressOfFunctionResolver Resolver(*this, AddressOfExpr, TargetType,
9613 Complain);
9614 int NumMatches = Resolver.getNumMatches();
9615 FunctionDecl* Fn = 0;
9616 if (NumMatches == 0 && Complain) {
9617 if (Resolver.IsInvalidFormOfPointerToMemberFunction())
9618 Resolver.ComplainIsInvalidFormOfPointerToMemberFunction();
9619 else
9620 Resolver.ComplainNoMatchesFound();
9621 }
9622 else if (NumMatches > 1 && Complain)
9623 Resolver.ComplainMultipleMatchesFound();
9624 else if (NumMatches == 1) {
9625 Fn = Resolver.getMatchingFunctionDecl();
9626 assert(Fn);
9627 FoundResult = *Resolver.getMatchingFunctionAccessPair();
9628 if (Complain) {
9629 if (Resolver.IsStaticMemberFunctionFromBoundPointer())
9630 Resolver.ComplainIsStaticMemberFunctionFromBoundPointer();
9631 else
9632 CheckAddressOfMemberAccess(AddressOfExpr, FoundResult);
9633 }
9634 }
9635
9636 if (pHadMultipleCandidates)
9637 *pHadMultipleCandidates = Resolver.hadMultipleCandidates();
9638 return Fn;
9639 }
9640
9641 /// \brief Given an expression that refers to an overloaded function, try to
9642 /// resolve that overloaded function expression down to a single function.
9643 ///
9644 /// This routine can only resolve template-ids that refer to a single function
9645 /// template, where that template-id refers to a single template whose template
9646 /// arguments are either provided by the template-id or have defaults,
9647 /// as described in C++0x [temp.arg.explicit]p3.
9648 FunctionDecl *
ResolveSingleFunctionTemplateSpecialization(OverloadExpr * ovl,bool Complain,DeclAccessPair * FoundResult)9649 Sema::ResolveSingleFunctionTemplateSpecialization(OverloadExpr *ovl,
9650 bool Complain,
9651 DeclAccessPair *FoundResult) {
9652 // C++ [over.over]p1:
9653 // [...] [Note: any redundant set of parentheses surrounding the
9654 // overloaded function name is ignored (5.1). ]
9655 // C++ [over.over]p1:
9656 // [...] The overloaded function name can be preceded by the &
9657 // operator.
9658
9659 // If we didn't actually find any template-ids, we're done.
9660 if (!ovl->hasExplicitTemplateArgs())
9661 return 0;
9662
9663 TemplateArgumentListInfo ExplicitTemplateArgs;
9664 ovl->getExplicitTemplateArgs().copyInto(ExplicitTemplateArgs);
9665 TemplateSpecCandidateSet FailedCandidates(ovl->getNameLoc());
9666
9667 // Look through all of the overloaded functions, searching for one
9668 // whose type matches exactly.
9669 FunctionDecl *Matched = 0;
9670 for (UnresolvedSetIterator I = ovl->decls_begin(),
9671 E = ovl->decls_end(); I != E; ++I) {
9672 // C++0x [temp.arg.explicit]p3:
9673 // [...] In contexts where deduction is done and fails, or in contexts
9674 // where deduction is not done, if a template argument list is
9675 // specified and it, along with any default template arguments,
9676 // identifies a single function template specialization, then the
9677 // template-id is an lvalue for the function template specialization.
9678 FunctionTemplateDecl *FunctionTemplate
9679 = cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl());
9680
9681 // C++ [over.over]p2:
9682 // If the name is a function template, template argument deduction is
9683 // done (14.8.2.2), and if the argument deduction succeeds, the
9684 // resulting template argument list is used to generate a single
9685 // function template specialization, which is added to the set of
9686 // overloaded functions considered.
9687 FunctionDecl *Specialization = 0;
9688 TemplateDeductionInfo Info(FailedCandidates.getLocation());
9689 if (TemplateDeductionResult Result
9690 = DeduceTemplateArguments(FunctionTemplate, &ExplicitTemplateArgs,
9691 Specialization, Info,
9692 /*InOverloadResolution=*/true)) {
9693 // Make a note of the failed deduction for diagnostics.
9694 // TODO: Actually use the failed-deduction info?
9695 FailedCandidates.addCandidate()
9696 .set(FunctionTemplate->getTemplatedDecl(),
9697 MakeDeductionFailureInfo(Context, Result, Info));
9698 (void)Result;
9699 continue;
9700 }
9701
9702 assert(Specialization && "no specialization and no error?");
9703
9704 // Multiple matches; we can't resolve to a single declaration.
9705 if (Matched) {
9706 if (Complain) {
9707 Diag(ovl->getExprLoc(), diag::err_addr_ovl_ambiguous)
9708 << ovl->getName();
9709 NoteAllOverloadCandidates(ovl);
9710 }
9711 return 0;
9712 }
9713
9714 Matched = Specialization;
9715 if (FoundResult) *FoundResult = I.getPair();
9716 }
9717
9718 if (Matched && getLangOpts().CPlusPlus1y &&
9719 Matched->getResultType()->isUndeducedType() &&
9720 DeduceReturnType(Matched, ovl->getExprLoc(), Complain))
9721 return 0;
9722
9723 return Matched;
9724 }
9725
9726
9727
9728
9729 // Resolve and fix an overloaded expression that can be resolved
9730 // because it identifies a single function template specialization.
9731 //
9732 // Last three arguments should only be supplied if Complain = true
9733 //
9734 // Return true if it was logically possible to so resolve the
9735 // expression, regardless of whether or not it succeeded. Always
9736 // returns true if 'complain' is set.
ResolveAndFixSingleFunctionTemplateSpecialization(ExprResult & SrcExpr,bool doFunctionPointerConverion,bool complain,const SourceRange & OpRangeForComplaining,QualType DestTypeForComplaining,unsigned DiagIDForComplaining)9737 bool Sema::ResolveAndFixSingleFunctionTemplateSpecialization(
9738 ExprResult &SrcExpr, bool doFunctionPointerConverion,
9739 bool complain, const SourceRange& OpRangeForComplaining,
9740 QualType DestTypeForComplaining,
9741 unsigned DiagIDForComplaining) {
9742 assert(SrcExpr.get()->getType() == Context.OverloadTy);
9743
9744 OverloadExpr::FindResult ovl = OverloadExpr::find(SrcExpr.get());
9745
9746 DeclAccessPair found;
9747 ExprResult SingleFunctionExpression;
9748 if (FunctionDecl *fn = ResolveSingleFunctionTemplateSpecialization(
9749 ovl.Expression, /*complain*/ false, &found)) {
9750 if (DiagnoseUseOfDecl(fn, SrcExpr.get()->getLocStart())) {
9751 SrcExpr = ExprError();
9752 return true;
9753 }
9754
9755 // It is only correct to resolve to an instance method if we're
9756 // resolving a form that's permitted to be a pointer to member.
9757 // Otherwise we'll end up making a bound member expression, which
9758 // is illegal in all the contexts we resolve like this.
9759 if (!ovl.HasFormOfMemberPointer &&
9760 isa<CXXMethodDecl>(fn) &&
9761 cast<CXXMethodDecl>(fn)->isInstance()) {
9762 if (!complain) return false;
9763
9764 Diag(ovl.Expression->getExprLoc(),
9765 diag::err_bound_member_function)
9766 << 0 << ovl.Expression->getSourceRange();
9767
9768 // TODO: I believe we only end up here if there's a mix of
9769 // static and non-static candidates (otherwise the expression
9770 // would have 'bound member' type, not 'overload' type).
9771 // Ideally we would note which candidate was chosen and why
9772 // the static candidates were rejected.
9773 SrcExpr = ExprError();
9774 return true;
9775 }
9776
9777 // Fix the expression to refer to 'fn'.
9778 SingleFunctionExpression =
9779 Owned(FixOverloadedFunctionReference(SrcExpr.take(), found, fn));
9780
9781 // If desired, do function-to-pointer decay.
9782 if (doFunctionPointerConverion) {
9783 SingleFunctionExpression =
9784 DefaultFunctionArrayLvalueConversion(SingleFunctionExpression.take());
9785 if (SingleFunctionExpression.isInvalid()) {
9786 SrcExpr = ExprError();
9787 return true;
9788 }
9789 }
9790 }
9791
9792 if (!SingleFunctionExpression.isUsable()) {
9793 if (complain) {
9794 Diag(OpRangeForComplaining.getBegin(), DiagIDForComplaining)
9795 << ovl.Expression->getName()
9796 << DestTypeForComplaining
9797 << OpRangeForComplaining
9798 << ovl.Expression->getQualifierLoc().getSourceRange();
9799 NoteAllOverloadCandidates(SrcExpr.get());
9800
9801 SrcExpr = ExprError();
9802 return true;
9803 }
9804
9805 return false;
9806 }
9807
9808 SrcExpr = SingleFunctionExpression;
9809 return true;
9810 }
9811
9812 /// \brief Add a single candidate to the overload set.
AddOverloadedCallCandidate(Sema & S,DeclAccessPair FoundDecl,TemplateArgumentListInfo * ExplicitTemplateArgs,ArrayRef<Expr * > Args,OverloadCandidateSet & CandidateSet,bool PartialOverloading,bool KnownValid)9813 static void AddOverloadedCallCandidate(Sema &S,
9814 DeclAccessPair FoundDecl,
9815 TemplateArgumentListInfo *ExplicitTemplateArgs,
9816 ArrayRef<Expr *> Args,
9817 OverloadCandidateSet &CandidateSet,
9818 bool PartialOverloading,
9819 bool KnownValid) {
9820 NamedDecl *Callee = FoundDecl.getDecl();
9821 if (isa<UsingShadowDecl>(Callee))
9822 Callee = cast<UsingShadowDecl>(Callee)->getTargetDecl();
9823
9824 if (FunctionDecl *Func = dyn_cast<FunctionDecl>(Callee)) {
9825 if (ExplicitTemplateArgs) {
9826 assert(!KnownValid && "Explicit template arguments?");
9827 return;
9828 }
9829 S.AddOverloadCandidate(Func, FoundDecl, Args, CandidateSet, false,
9830 PartialOverloading);
9831 return;
9832 }
9833
9834 if (FunctionTemplateDecl *FuncTemplate
9835 = dyn_cast<FunctionTemplateDecl>(Callee)) {
9836 S.AddTemplateOverloadCandidate(FuncTemplate, FoundDecl,
9837 ExplicitTemplateArgs, Args, CandidateSet);
9838 return;
9839 }
9840
9841 assert(!KnownValid && "unhandled case in overloaded call candidate");
9842 }
9843
9844 /// \brief Add the overload candidates named by callee and/or found by argument
9845 /// dependent lookup to the given overload set.
AddOverloadedCallCandidates(UnresolvedLookupExpr * ULE,ArrayRef<Expr * > Args,OverloadCandidateSet & CandidateSet,bool PartialOverloading)9846 void Sema::AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE,
9847 ArrayRef<Expr *> Args,
9848 OverloadCandidateSet &CandidateSet,
9849 bool PartialOverloading) {
9850
9851 #ifndef NDEBUG
9852 // Verify that ArgumentDependentLookup is consistent with the rules
9853 // in C++0x [basic.lookup.argdep]p3:
9854 //
9855 // Let X be the lookup set produced by unqualified lookup (3.4.1)
9856 // and let Y be the lookup set produced by argument dependent
9857 // lookup (defined as follows). If X contains
9858 //
9859 // -- a declaration of a class member, or
9860 //
9861 // -- a block-scope function declaration that is not a
9862 // using-declaration, or
9863 //
9864 // -- a declaration that is neither a function or a function
9865 // template
9866 //
9867 // then Y is empty.
9868
9869 if (ULE->requiresADL()) {
9870 for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
9871 E = ULE->decls_end(); I != E; ++I) {
9872 assert(!(*I)->getDeclContext()->isRecord());
9873 assert(isa<UsingShadowDecl>(*I) ||
9874 !(*I)->getDeclContext()->isFunctionOrMethod());
9875 assert((*I)->getUnderlyingDecl()->isFunctionOrFunctionTemplate());
9876 }
9877 }
9878 #endif
9879
9880 // It would be nice to avoid this copy.
9881 TemplateArgumentListInfo TABuffer;
9882 TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
9883 if (ULE->hasExplicitTemplateArgs()) {
9884 ULE->copyTemplateArgumentsInto(TABuffer);
9885 ExplicitTemplateArgs = &TABuffer;
9886 }
9887
9888 for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
9889 E = ULE->decls_end(); I != E; ++I)
9890 AddOverloadedCallCandidate(*this, I.getPair(), ExplicitTemplateArgs, Args,
9891 CandidateSet, PartialOverloading,
9892 /*KnownValid*/ true);
9893
9894 if (ULE->requiresADL())
9895 AddArgumentDependentLookupCandidates(ULE->getName(), /*Operator*/ false,
9896 ULE->getExprLoc(),
9897 Args, ExplicitTemplateArgs,
9898 CandidateSet, PartialOverloading);
9899 }
9900
9901 /// Determine whether a declaration with the specified name could be moved into
9902 /// a different namespace.
canBeDeclaredInNamespace(const DeclarationName & Name)9903 static bool canBeDeclaredInNamespace(const DeclarationName &Name) {
9904 switch (Name.getCXXOverloadedOperator()) {
9905 case OO_New: case OO_Array_New:
9906 case OO_Delete: case OO_Array_Delete:
9907 return false;
9908
9909 default:
9910 return true;
9911 }
9912 }
9913
9914 /// Attempt to recover from an ill-formed use of a non-dependent name in a
9915 /// template, where the non-dependent name was declared after the template
9916 /// was defined. This is common in code written for a compilers which do not
9917 /// correctly implement two-stage name lookup.
9918 ///
9919 /// Returns true if a viable candidate was found and a diagnostic was issued.
9920 static bool
DiagnoseTwoPhaseLookup(Sema & SemaRef,SourceLocation FnLoc,const CXXScopeSpec & SS,LookupResult & R,TemplateArgumentListInfo * ExplicitTemplateArgs,ArrayRef<Expr * > Args)9921 DiagnoseTwoPhaseLookup(Sema &SemaRef, SourceLocation FnLoc,
9922 const CXXScopeSpec &SS, LookupResult &R,
9923 TemplateArgumentListInfo *ExplicitTemplateArgs,
9924 ArrayRef<Expr *> Args) {
9925 if (SemaRef.ActiveTemplateInstantiations.empty() || !SS.isEmpty())
9926 return false;
9927
9928 for (DeclContext *DC = SemaRef.CurContext; DC; DC = DC->getParent()) {
9929 if (DC->isTransparentContext())
9930 continue;
9931
9932 SemaRef.LookupQualifiedName(R, DC);
9933
9934 if (!R.empty()) {
9935 R.suppressDiagnostics();
9936
9937 if (isa<CXXRecordDecl>(DC)) {
9938 // Don't diagnose names we find in classes; we get much better
9939 // diagnostics for these from DiagnoseEmptyLookup.
9940 R.clear();
9941 return false;
9942 }
9943
9944 OverloadCandidateSet Candidates(FnLoc);
9945 for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)
9946 AddOverloadedCallCandidate(SemaRef, I.getPair(),
9947 ExplicitTemplateArgs, Args,
9948 Candidates, false, /*KnownValid*/ false);
9949
9950 OverloadCandidateSet::iterator Best;
9951 if (Candidates.BestViableFunction(SemaRef, FnLoc, Best) != OR_Success) {
9952 // No viable functions. Don't bother the user with notes for functions
9953 // which don't work and shouldn't be found anyway.
9954 R.clear();
9955 return false;
9956 }
9957
9958 // Find the namespaces where ADL would have looked, and suggest
9959 // declaring the function there instead.
9960 Sema::AssociatedNamespaceSet AssociatedNamespaces;
9961 Sema::AssociatedClassSet AssociatedClasses;
9962 SemaRef.FindAssociatedClassesAndNamespaces(FnLoc, Args,
9963 AssociatedNamespaces,
9964 AssociatedClasses);
9965 Sema::AssociatedNamespaceSet SuggestedNamespaces;
9966 if (canBeDeclaredInNamespace(R.getLookupName())) {
9967 DeclContext *Std = SemaRef.getStdNamespace();
9968 for (Sema::AssociatedNamespaceSet::iterator
9969 it = AssociatedNamespaces.begin(),
9970 end = AssociatedNamespaces.end(); it != end; ++it) {
9971 // Never suggest declaring a function within namespace 'std'.
9972 if (Std && Std->Encloses(*it))
9973 continue;
9974
9975 // Never suggest declaring a function within a namespace with a
9976 // reserved name, like __gnu_cxx.
9977 NamespaceDecl *NS = dyn_cast<NamespaceDecl>(*it);
9978 if (NS &&
9979 NS->getQualifiedNameAsString().find("__") != std::string::npos)
9980 continue;
9981
9982 SuggestedNamespaces.insert(*it);
9983 }
9984 }
9985
9986 SemaRef.Diag(R.getNameLoc(), diag::err_not_found_by_two_phase_lookup)
9987 << R.getLookupName();
9988 if (SuggestedNamespaces.empty()) {
9989 SemaRef.Diag(Best->Function->getLocation(),
9990 diag::note_not_found_by_two_phase_lookup)
9991 << R.getLookupName() << 0;
9992 } else if (SuggestedNamespaces.size() == 1) {
9993 SemaRef.Diag(Best->Function->getLocation(),
9994 diag::note_not_found_by_two_phase_lookup)
9995 << R.getLookupName() << 1 << *SuggestedNamespaces.begin();
9996 } else {
9997 // FIXME: It would be useful to list the associated namespaces here,
9998 // but the diagnostics infrastructure doesn't provide a way to produce
9999 // a localized representation of a list of items.
10000 SemaRef.Diag(Best->Function->getLocation(),
10001 diag::note_not_found_by_two_phase_lookup)
10002 << R.getLookupName() << 2;
10003 }
10004
10005 // Try to recover by calling this function.
10006 return true;
10007 }
10008
10009 R.clear();
10010 }
10011
10012 return false;
10013 }
10014
10015 /// Attempt to recover from ill-formed use of a non-dependent operator in a
10016 /// template, where the non-dependent operator was declared after the template
10017 /// was defined.
10018 ///
10019 /// Returns true if a viable candidate was found and a diagnostic was issued.
10020 static bool
DiagnoseTwoPhaseOperatorLookup(Sema & SemaRef,OverloadedOperatorKind Op,SourceLocation OpLoc,ArrayRef<Expr * > Args)10021 DiagnoseTwoPhaseOperatorLookup(Sema &SemaRef, OverloadedOperatorKind Op,
10022 SourceLocation OpLoc,
10023 ArrayRef<Expr *> Args) {
10024 DeclarationName OpName =
10025 SemaRef.Context.DeclarationNames.getCXXOperatorName(Op);
10026 LookupResult R(SemaRef, OpName, OpLoc, Sema::LookupOperatorName);
10027 return DiagnoseTwoPhaseLookup(SemaRef, OpLoc, CXXScopeSpec(), R,
10028 /*ExplicitTemplateArgs=*/0, Args);
10029 }
10030
10031 namespace {
10032 class BuildRecoveryCallExprRAII {
10033 Sema &SemaRef;
10034 public:
BuildRecoveryCallExprRAII(Sema & S)10035 BuildRecoveryCallExprRAII(Sema &S) : SemaRef(S) {
10036 assert(SemaRef.IsBuildingRecoveryCallExpr == false);
10037 SemaRef.IsBuildingRecoveryCallExpr = true;
10038 }
10039
~BuildRecoveryCallExprRAII()10040 ~BuildRecoveryCallExprRAII() {
10041 SemaRef.IsBuildingRecoveryCallExpr = false;
10042 }
10043 };
10044
10045 }
10046
10047 /// Attempts to recover from a call where no functions were found.
10048 ///
10049 /// Returns true if new candidates were found.
10050 static ExprResult
BuildRecoveryCallExpr(Sema & SemaRef,Scope * S,Expr * Fn,UnresolvedLookupExpr * ULE,SourceLocation LParenLoc,llvm::MutableArrayRef<Expr * > Args,SourceLocation RParenLoc,bool EmptyLookup,bool AllowTypoCorrection)10051 BuildRecoveryCallExpr(Sema &SemaRef, Scope *S, Expr *Fn,
10052 UnresolvedLookupExpr *ULE,
10053 SourceLocation LParenLoc,
10054 llvm::MutableArrayRef<Expr *> Args,
10055 SourceLocation RParenLoc,
10056 bool EmptyLookup, bool AllowTypoCorrection) {
10057 // Do not try to recover if it is already building a recovery call.
10058 // This stops infinite loops for template instantiations like
10059 //
10060 // template <typename T> auto foo(T t) -> decltype(foo(t)) {}
10061 // template <typename T> auto foo(T t) -> decltype(foo(&t)) {}
10062 //
10063 if (SemaRef.IsBuildingRecoveryCallExpr)
10064 return ExprError();
10065 BuildRecoveryCallExprRAII RCE(SemaRef);
10066
10067 CXXScopeSpec SS;
10068 SS.Adopt(ULE->getQualifierLoc());
10069 SourceLocation TemplateKWLoc = ULE->getTemplateKeywordLoc();
10070
10071 TemplateArgumentListInfo TABuffer;
10072 TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
10073 if (ULE->hasExplicitTemplateArgs()) {
10074 ULE->copyTemplateArgumentsInto(TABuffer);
10075 ExplicitTemplateArgs = &TABuffer;
10076 }
10077
10078 LookupResult R(SemaRef, ULE->getName(), ULE->getNameLoc(),
10079 Sema::LookupOrdinaryName);
10080 FunctionCallFilterCCC Validator(SemaRef, Args.size(),
10081 ExplicitTemplateArgs != 0);
10082 NoTypoCorrectionCCC RejectAll;
10083 CorrectionCandidateCallback *CCC = AllowTypoCorrection ?
10084 (CorrectionCandidateCallback*)&Validator :
10085 (CorrectionCandidateCallback*)&RejectAll;
10086 if (!DiagnoseTwoPhaseLookup(SemaRef, Fn->getExprLoc(), SS, R,
10087 ExplicitTemplateArgs, Args) &&
10088 (!EmptyLookup ||
10089 SemaRef.DiagnoseEmptyLookup(S, SS, R, *CCC,
10090 ExplicitTemplateArgs, Args)))
10091 return ExprError();
10092
10093 assert(!R.empty() && "lookup results empty despite recovery");
10094
10095 // Build an implicit member call if appropriate. Just drop the
10096 // casts and such from the call, we don't really care.
10097 ExprResult NewFn = ExprError();
10098 if ((*R.begin())->isCXXClassMember())
10099 NewFn = SemaRef.BuildPossibleImplicitMemberExpr(SS, TemplateKWLoc,
10100 R, ExplicitTemplateArgs);
10101 else if (ExplicitTemplateArgs || TemplateKWLoc.isValid())
10102 NewFn = SemaRef.BuildTemplateIdExpr(SS, TemplateKWLoc, R, false,
10103 ExplicitTemplateArgs);
10104 else
10105 NewFn = SemaRef.BuildDeclarationNameExpr(SS, R, false);
10106
10107 if (NewFn.isInvalid())
10108 return ExprError();
10109
10110 // This shouldn't cause an infinite loop because we're giving it
10111 // an expression with viable lookup results, which should never
10112 // end up here.
10113 return SemaRef.ActOnCallExpr(/*Scope*/ 0, NewFn.take(), LParenLoc,
10114 MultiExprArg(Args.data(), Args.size()),
10115 RParenLoc);
10116 }
10117
10118 /// \brief Constructs and populates an OverloadedCandidateSet from
10119 /// the given function.
10120 /// \returns true when an the ExprResult output parameter has been set.
buildOverloadedCallSet(Scope * S,Expr * Fn,UnresolvedLookupExpr * ULE,MultiExprArg Args,SourceLocation RParenLoc,OverloadCandidateSet * CandidateSet,ExprResult * Result)10121 bool Sema::buildOverloadedCallSet(Scope *S, Expr *Fn,
10122 UnresolvedLookupExpr *ULE,
10123 MultiExprArg Args,
10124 SourceLocation RParenLoc,
10125 OverloadCandidateSet *CandidateSet,
10126 ExprResult *Result) {
10127 #ifndef NDEBUG
10128 if (ULE->requiresADL()) {
10129 // To do ADL, we must have found an unqualified name.
10130 assert(!ULE->getQualifier() && "qualified name with ADL");
10131
10132 // We don't perform ADL for implicit declarations of builtins.
10133 // Verify that this was correctly set up.
10134 FunctionDecl *F;
10135 if (ULE->decls_begin() + 1 == ULE->decls_end() &&
10136 (F = dyn_cast<FunctionDecl>(*ULE->decls_begin())) &&
10137 F->getBuiltinID() && F->isImplicit())
10138 llvm_unreachable("performing ADL for builtin");
10139
10140 // We don't perform ADL in C.
10141 assert(getLangOpts().CPlusPlus && "ADL enabled in C");
10142 }
10143 #endif
10144
10145 UnbridgedCastsSet UnbridgedCasts;
10146 if (checkArgPlaceholdersForOverload(*this, Args, UnbridgedCasts)) {
10147 *Result = ExprError();
10148 return true;
10149 }
10150
10151 // Add the functions denoted by the callee to the set of candidate
10152 // functions, including those from argument-dependent lookup.
10153 AddOverloadedCallCandidates(ULE, Args, *CandidateSet);
10154
10155 // If we found nothing, try to recover.
10156 // BuildRecoveryCallExpr diagnoses the error itself, so we just bail
10157 // out if it fails.
10158 if (CandidateSet->empty()) {
10159 // In Microsoft mode, if we are inside a template class member function then
10160 // create a type dependent CallExpr. The goal is to postpone name lookup
10161 // to instantiation time to be able to search into type dependent base
10162 // classes.
10163 if (getLangOpts().MicrosoftMode && CurContext->isDependentContext() &&
10164 (isa<FunctionDecl>(CurContext) || isa<CXXRecordDecl>(CurContext))) {
10165 CallExpr *CE = new (Context) CallExpr(Context, Fn, Args,
10166 Context.DependentTy, VK_RValue,
10167 RParenLoc);
10168 CE->setTypeDependent(true);
10169 *Result = Owned(CE);
10170 return true;
10171 }
10172 return false;
10173 }
10174
10175 UnbridgedCasts.restore();
10176 return false;
10177 }
10178
10179 /// FinishOverloadedCallExpr - given an OverloadCandidateSet, builds and returns
10180 /// the completed call expression. If overload resolution fails, emits
10181 /// diagnostics and returns ExprError()
FinishOverloadedCallExpr(Sema & SemaRef,Scope * S,Expr * Fn,UnresolvedLookupExpr * ULE,SourceLocation LParenLoc,MultiExprArg Args,SourceLocation RParenLoc,Expr * ExecConfig,OverloadCandidateSet * CandidateSet,OverloadCandidateSet::iterator * Best,OverloadingResult OverloadResult,bool AllowTypoCorrection)10182 static ExprResult FinishOverloadedCallExpr(Sema &SemaRef, Scope *S, Expr *Fn,
10183 UnresolvedLookupExpr *ULE,
10184 SourceLocation LParenLoc,
10185 MultiExprArg Args,
10186 SourceLocation RParenLoc,
10187 Expr *ExecConfig,
10188 OverloadCandidateSet *CandidateSet,
10189 OverloadCandidateSet::iterator *Best,
10190 OverloadingResult OverloadResult,
10191 bool AllowTypoCorrection) {
10192 if (CandidateSet->empty())
10193 return BuildRecoveryCallExpr(SemaRef, S, Fn, ULE, LParenLoc, Args,
10194 RParenLoc, /*EmptyLookup=*/true,
10195 AllowTypoCorrection);
10196
10197 switch (OverloadResult) {
10198 case OR_Success: {
10199 FunctionDecl *FDecl = (*Best)->Function;
10200 SemaRef.CheckUnresolvedLookupAccess(ULE, (*Best)->FoundDecl);
10201 if (SemaRef.DiagnoseUseOfDecl(FDecl, ULE->getNameLoc()))
10202 return ExprError();
10203 Fn = SemaRef.FixOverloadedFunctionReference(Fn, (*Best)->FoundDecl, FDecl);
10204 return SemaRef.BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, RParenLoc,
10205 ExecConfig);
10206 }
10207
10208 case OR_No_Viable_Function: {
10209 // Try to recover by looking for viable functions which the user might
10210 // have meant to call.
10211 ExprResult Recovery = BuildRecoveryCallExpr(SemaRef, S, Fn, ULE, LParenLoc,
10212 Args, RParenLoc,
10213 /*EmptyLookup=*/false,
10214 AllowTypoCorrection);
10215 if (!Recovery.isInvalid())
10216 return Recovery;
10217
10218 SemaRef.Diag(Fn->getLocStart(),
10219 diag::err_ovl_no_viable_function_in_call)
10220 << ULE->getName() << Fn->getSourceRange();
10221 CandidateSet->NoteCandidates(SemaRef, OCD_AllCandidates, Args);
10222 break;
10223 }
10224
10225 case OR_Ambiguous:
10226 SemaRef.Diag(Fn->getLocStart(), diag::err_ovl_ambiguous_call)
10227 << ULE->getName() << Fn->getSourceRange();
10228 CandidateSet->NoteCandidates(SemaRef, OCD_ViableCandidates, Args);
10229 break;
10230
10231 case OR_Deleted: {
10232 SemaRef.Diag(Fn->getLocStart(), diag::err_ovl_deleted_call)
10233 << (*Best)->Function->isDeleted()
10234 << ULE->getName()
10235 << SemaRef.getDeletedOrUnavailableSuffix((*Best)->Function)
10236 << Fn->getSourceRange();
10237 CandidateSet->NoteCandidates(SemaRef, OCD_AllCandidates, Args);
10238
10239 // We emitted an error for the unvailable/deleted function call but keep
10240 // the call in the AST.
10241 FunctionDecl *FDecl = (*Best)->Function;
10242 Fn = SemaRef.FixOverloadedFunctionReference(Fn, (*Best)->FoundDecl, FDecl);
10243 return SemaRef.BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, RParenLoc,
10244 ExecConfig);
10245 }
10246 }
10247
10248 // Overload resolution failed.
10249 return ExprError();
10250 }
10251
10252 /// BuildOverloadedCallExpr - Given the call expression that calls Fn
10253 /// (which eventually refers to the declaration Func) and the call
10254 /// arguments Args/NumArgs, attempt to resolve the function call down
10255 /// to a specific function. If overload resolution succeeds, returns
10256 /// the call expression produced by overload resolution.
10257 /// Otherwise, emits diagnostics and returns ExprError.
BuildOverloadedCallExpr(Scope * S,Expr * Fn,UnresolvedLookupExpr * ULE,SourceLocation LParenLoc,MultiExprArg Args,SourceLocation RParenLoc,Expr * ExecConfig,bool AllowTypoCorrection)10258 ExprResult Sema::BuildOverloadedCallExpr(Scope *S, Expr *Fn,
10259 UnresolvedLookupExpr *ULE,
10260 SourceLocation LParenLoc,
10261 MultiExprArg Args,
10262 SourceLocation RParenLoc,
10263 Expr *ExecConfig,
10264 bool AllowTypoCorrection) {
10265 OverloadCandidateSet CandidateSet(Fn->getExprLoc());
10266 ExprResult result;
10267
10268 if (buildOverloadedCallSet(S, Fn, ULE, Args, LParenLoc, &CandidateSet,
10269 &result))
10270 return result;
10271
10272 OverloadCandidateSet::iterator Best;
10273 OverloadingResult OverloadResult =
10274 CandidateSet.BestViableFunction(*this, Fn->getLocStart(), Best);
10275
10276 return FinishOverloadedCallExpr(*this, S, Fn, ULE, LParenLoc, Args,
10277 RParenLoc, ExecConfig, &CandidateSet,
10278 &Best, OverloadResult,
10279 AllowTypoCorrection);
10280 }
10281
IsOverloaded(const UnresolvedSetImpl & Functions)10282 static bool IsOverloaded(const UnresolvedSetImpl &Functions) {
10283 return Functions.size() > 1 ||
10284 (Functions.size() == 1 && isa<FunctionTemplateDecl>(*Functions.begin()));
10285 }
10286
10287 /// \brief Create a unary operation that may resolve to an overloaded
10288 /// operator.
10289 ///
10290 /// \param OpLoc The location of the operator itself (e.g., '*').
10291 ///
10292 /// \param OpcIn The UnaryOperator::Opcode that describes this
10293 /// operator.
10294 ///
10295 /// \param Fns The set of non-member functions that will be
10296 /// considered by overload resolution. The caller needs to build this
10297 /// set based on the context using, e.g.,
10298 /// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
10299 /// set should not contain any member functions; those will be added
10300 /// by CreateOverloadedUnaryOp().
10301 ///
10302 /// \param Input The input argument.
10303 ExprResult
CreateOverloadedUnaryOp(SourceLocation OpLoc,unsigned OpcIn,const UnresolvedSetImpl & Fns,Expr * Input)10304 Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, unsigned OpcIn,
10305 const UnresolvedSetImpl &Fns,
10306 Expr *Input) {
10307 UnaryOperator::Opcode Opc = static_cast<UnaryOperator::Opcode>(OpcIn);
10308
10309 OverloadedOperatorKind Op = UnaryOperator::getOverloadedOperator(Opc);
10310 assert(Op != OO_None && "Invalid opcode for overloaded unary operator");
10311 DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
10312 // TODO: provide better source location info.
10313 DeclarationNameInfo OpNameInfo(OpName, OpLoc);
10314
10315 if (checkPlaceholderForOverload(*this, Input))
10316 return ExprError();
10317
10318 Expr *Args[2] = { Input, 0 };
10319 unsigned NumArgs = 1;
10320
10321 // For post-increment and post-decrement, add the implicit '0' as
10322 // the second argument, so that we know this is a post-increment or
10323 // post-decrement.
10324 if (Opc == UO_PostInc || Opc == UO_PostDec) {
10325 llvm::APSInt Zero(Context.getTypeSize(Context.IntTy), false);
10326 Args[1] = IntegerLiteral::Create(Context, Zero, Context.IntTy,
10327 SourceLocation());
10328 NumArgs = 2;
10329 }
10330
10331 ArrayRef<Expr *> ArgsArray(Args, NumArgs);
10332
10333 if (Input->isTypeDependent()) {
10334 if (Fns.empty())
10335 return Owned(new (Context) UnaryOperator(Input,
10336 Opc,
10337 Context.DependentTy,
10338 VK_RValue, OK_Ordinary,
10339 OpLoc));
10340
10341 CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
10342 UnresolvedLookupExpr *Fn
10343 = UnresolvedLookupExpr::Create(Context, NamingClass,
10344 NestedNameSpecifierLoc(), OpNameInfo,
10345 /*ADL*/ true, IsOverloaded(Fns),
10346 Fns.begin(), Fns.end());
10347 return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn, ArgsArray,
10348 Context.DependentTy,
10349 VK_RValue,
10350 OpLoc, false));
10351 }
10352
10353 // Build an empty overload set.
10354 OverloadCandidateSet CandidateSet(OpLoc);
10355
10356 // Add the candidates from the given function set.
10357 AddFunctionCandidates(Fns, ArgsArray, CandidateSet, false);
10358
10359 // Add operator candidates that are member functions.
10360 AddMemberOperatorCandidates(Op, OpLoc, ArgsArray, CandidateSet);
10361
10362 // Add candidates from ADL.
10363 AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true, OpLoc,
10364 ArgsArray, /*ExplicitTemplateArgs*/ 0,
10365 CandidateSet);
10366
10367 // Add builtin operator candidates.
10368 AddBuiltinOperatorCandidates(Op, OpLoc, ArgsArray, CandidateSet);
10369
10370 bool HadMultipleCandidates = (CandidateSet.size() > 1);
10371
10372 // Perform overload resolution.
10373 OverloadCandidateSet::iterator Best;
10374 switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
10375 case OR_Success: {
10376 // We found a built-in operator or an overloaded operator.
10377 FunctionDecl *FnDecl = Best->Function;
10378
10379 if (FnDecl) {
10380 // We matched an overloaded operator. Build a call to that
10381 // operator.
10382
10383 // Convert the arguments.
10384 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
10385 CheckMemberOperatorAccess(OpLoc, Args[0], 0, Best->FoundDecl);
10386
10387 ExprResult InputRes =
10388 PerformObjectArgumentInitialization(Input, /*Qualifier=*/0,
10389 Best->FoundDecl, Method);
10390 if (InputRes.isInvalid())
10391 return ExprError();
10392 Input = InputRes.take();
10393 } else {
10394 // Convert the arguments.
10395 ExprResult InputInit
10396 = PerformCopyInitialization(InitializedEntity::InitializeParameter(
10397 Context,
10398 FnDecl->getParamDecl(0)),
10399 SourceLocation(),
10400 Input);
10401 if (InputInit.isInvalid())
10402 return ExprError();
10403 Input = InputInit.take();
10404 }
10405
10406 // Determine the result type.
10407 QualType ResultTy = FnDecl->getResultType();
10408 ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10409 ResultTy = ResultTy.getNonLValueExprType(Context);
10410
10411 // Build the actual expression node.
10412 ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl, Best->FoundDecl,
10413 HadMultipleCandidates, OpLoc);
10414 if (FnExpr.isInvalid())
10415 return ExprError();
10416
10417 Args[0] = Input;
10418 CallExpr *TheCall =
10419 new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.take(), ArgsArray,
10420 ResultTy, VK, OpLoc, false);
10421
10422 if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall,
10423 FnDecl))
10424 return ExprError();
10425
10426 return MaybeBindToTemporary(TheCall);
10427 } else {
10428 // We matched a built-in operator. Convert the arguments, then
10429 // break out so that we will build the appropriate built-in
10430 // operator node.
10431 ExprResult InputRes =
10432 PerformImplicitConversion(Input, Best->BuiltinTypes.ParamTypes[0],
10433 Best->Conversions[0], AA_Passing);
10434 if (InputRes.isInvalid())
10435 return ExprError();
10436 Input = InputRes.take();
10437 break;
10438 }
10439 }
10440
10441 case OR_No_Viable_Function:
10442 // This is an erroneous use of an operator which can be overloaded by
10443 // a non-member function. Check for non-member operators which were
10444 // defined too late to be candidates.
10445 if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc, ArgsArray))
10446 // FIXME: Recover by calling the found function.
10447 return ExprError();
10448
10449 // No viable function; fall through to handling this as a
10450 // built-in operator, which will produce an error message for us.
10451 break;
10452
10453 case OR_Ambiguous:
10454 Diag(OpLoc, diag::err_ovl_ambiguous_oper_unary)
10455 << UnaryOperator::getOpcodeStr(Opc)
10456 << Input->getType()
10457 << Input->getSourceRange();
10458 CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, ArgsArray,
10459 UnaryOperator::getOpcodeStr(Opc), OpLoc);
10460 return ExprError();
10461
10462 case OR_Deleted:
10463 Diag(OpLoc, diag::err_ovl_deleted_oper)
10464 << Best->Function->isDeleted()
10465 << UnaryOperator::getOpcodeStr(Opc)
10466 << getDeletedOrUnavailableSuffix(Best->Function)
10467 << Input->getSourceRange();
10468 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, ArgsArray,
10469 UnaryOperator::getOpcodeStr(Opc), OpLoc);
10470 return ExprError();
10471 }
10472
10473 // Either we found no viable overloaded operator or we matched a
10474 // built-in operator. In either case, fall through to trying to
10475 // build a built-in operation.
10476 return CreateBuiltinUnaryOp(OpLoc, Opc, Input);
10477 }
10478
10479 /// \brief Create a binary operation that may resolve to an overloaded
10480 /// operator.
10481 ///
10482 /// \param OpLoc The location of the operator itself (e.g., '+').
10483 ///
10484 /// \param OpcIn The BinaryOperator::Opcode that describes this
10485 /// operator.
10486 ///
10487 /// \param Fns The set of non-member functions that will be
10488 /// considered by overload resolution. The caller needs to build this
10489 /// set based on the context using, e.g.,
10490 /// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
10491 /// set should not contain any member functions; those will be added
10492 /// by CreateOverloadedBinOp().
10493 ///
10494 /// \param LHS Left-hand argument.
10495 /// \param RHS Right-hand argument.
10496 ExprResult
CreateOverloadedBinOp(SourceLocation OpLoc,unsigned OpcIn,const UnresolvedSetImpl & Fns,Expr * LHS,Expr * RHS)10497 Sema::CreateOverloadedBinOp(SourceLocation OpLoc,
10498 unsigned OpcIn,
10499 const UnresolvedSetImpl &Fns,
10500 Expr *LHS, Expr *RHS) {
10501 Expr *Args[2] = { LHS, RHS };
10502 LHS=RHS=0; //Please use only Args instead of LHS/RHS couple
10503
10504 BinaryOperator::Opcode Opc = static_cast<BinaryOperator::Opcode>(OpcIn);
10505 OverloadedOperatorKind Op = BinaryOperator::getOverloadedOperator(Opc);
10506 DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
10507
10508 // If either side is type-dependent, create an appropriate dependent
10509 // expression.
10510 if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
10511 if (Fns.empty()) {
10512 // If there are no functions to store, just build a dependent
10513 // BinaryOperator or CompoundAssignment.
10514 if (Opc <= BO_Assign || Opc > BO_OrAssign)
10515 return Owned(new (Context) BinaryOperator(Args[0], Args[1], Opc,
10516 Context.DependentTy,
10517 VK_RValue, OK_Ordinary,
10518 OpLoc,
10519 FPFeatures.fp_contract));
10520
10521 return Owned(new (Context) CompoundAssignOperator(Args[0], Args[1], Opc,
10522 Context.DependentTy,
10523 VK_LValue,
10524 OK_Ordinary,
10525 Context.DependentTy,
10526 Context.DependentTy,
10527 OpLoc,
10528 FPFeatures.fp_contract));
10529 }
10530
10531 // FIXME: save results of ADL from here?
10532 CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
10533 // TODO: provide better source location info in DNLoc component.
10534 DeclarationNameInfo OpNameInfo(OpName, OpLoc);
10535 UnresolvedLookupExpr *Fn
10536 = UnresolvedLookupExpr::Create(Context, NamingClass,
10537 NestedNameSpecifierLoc(), OpNameInfo,
10538 /*ADL*/ true, IsOverloaded(Fns),
10539 Fns.begin(), Fns.end());
10540 return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn, Args,
10541 Context.DependentTy, VK_RValue,
10542 OpLoc, FPFeatures.fp_contract));
10543 }
10544
10545 // Always do placeholder-like conversions on the RHS.
10546 if (checkPlaceholderForOverload(*this, Args[1]))
10547 return ExprError();
10548
10549 // Do placeholder-like conversion on the LHS; note that we should
10550 // not get here with a PseudoObject LHS.
10551 assert(Args[0]->getObjectKind() != OK_ObjCProperty);
10552 if (checkPlaceholderForOverload(*this, Args[0]))
10553 return ExprError();
10554
10555 // If this is the assignment operator, we only perform overload resolution
10556 // if the left-hand side is a class or enumeration type. This is actually
10557 // a hack. The standard requires that we do overload resolution between the
10558 // various built-in candidates, but as DR507 points out, this can lead to
10559 // problems. So we do it this way, which pretty much follows what GCC does.
10560 // Note that we go the traditional code path for compound assignment forms.
10561 if (Opc == BO_Assign && !Args[0]->getType()->isOverloadableType())
10562 return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10563
10564 // If this is the .* operator, which is not overloadable, just
10565 // create a built-in binary operator.
10566 if (Opc == BO_PtrMemD)
10567 return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10568
10569 // Build an empty overload set.
10570 OverloadCandidateSet CandidateSet(OpLoc);
10571
10572 // Add the candidates from the given function set.
10573 AddFunctionCandidates(Fns, Args, CandidateSet, false);
10574
10575 // Add operator candidates that are member functions.
10576 AddMemberOperatorCandidates(Op, OpLoc, Args, CandidateSet);
10577
10578 // Add candidates from ADL.
10579 AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true,
10580 OpLoc, Args,
10581 /*ExplicitTemplateArgs*/ 0,
10582 CandidateSet);
10583
10584 // Add builtin operator candidates.
10585 AddBuiltinOperatorCandidates(Op, OpLoc, Args, CandidateSet);
10586
10587 bool HadMultipleCandidates = (CandidateSet.size() > 1);
10588
10589 // Perform overload resolution.
10590 OverloadCandidateSet::iterator Best;
10591 switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
10592 case OR_Success: {
10593 // We found a built-in operator or an overloaded operator.
10594 FunctionDecl *FnDecl = Best->Function;
10595
10596 if (FnDecl) {
10597 // We matched an overloaded operator. Build a call to that
10598 // operator.
10599
10600 // Convert the arguments.
10601 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
10602 // Best->Access is only meaningful for class members.
10603 CheckMemberOperatorAccess(OpLoc, Args[0], Args[1], Best->FoundDecl);
10604
10605 ExprResult Arg1 =
10606 PerformCopyInitialization(
10607 InitializedEntity::InitializeParameter(Context,
10608 FnDecl->getParamDecl(0)),
10609 SourceLocation(), Owned(Args[1]));
10610 if (Arg1.isInvalid())
10611 return ExprError();
10612
10613 ExprResult Arg0 =
10614 PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0,
10615 Best->FoundDecl, Method);
10616 if (Arg0.isInvalid())
10617 return ExprError();
10618 Args[0] = Arg0.takeAs<Expr>();
10619 Args[1] = RHS = Arg1.takeAs<Expr>();
10620 } else {
10621 // Convert the arguments.
10622 ExprResult Arg0 = PerformCopyInitialization(
10623 InitializedEntity::InitializeParameter(Context,
10624 FnDecl->getParamDecl(0)),
10625 SourceLocation(), Owned(Args[0]));
10626 if (Arg0.isInvalid())
10627 return ExprError();
10628
10629 ExprResult Arg1 =
10630 PerformCopyInitialization(
10631 InitializedEntity::InitializeParameter(Context,
10632 FnDecl->getParamDecl(1)),
10633 SourceLocation(), Owned(Args[1]));
10634 if (Arg1.isInvalid())
10635 return ExprError();
10636 Args[0] = LHS = Arg0.takeAs<Expr>();
10637 Args[1] = RHS = Arg1.takeAs<Expr>();
10638 }
10639
10640 // Determine the result type.
10641 QualType ResultTy = FnDecl->getResultType();
10642 ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10643 ResultTy = ResultTy.getNonLValueExprType(Context);
10644
10645 // Build the actual expression node.
10646 ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
10647 Best->FoundDecl,
10648 HadMultipleCandidates, OpLoc);
10649 if (FnExpr.isInvalid())
10650 return ExprError();
10651
10652 CXXOperatorCallExpr *TheCall =
10653 new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.take(),
10654 Args, ResultTy, VK, OpLoc,
10655 FPFeatures.fp_contract);
10656
10657 if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall,
10658 FnDecl))
10659 return ExprError();
10660
10661 ArrayRef<const Expr *> ArgsArray(Args, 2);
10662 // Cut off the implicit 'this'.
10663 if (isa<CXXMethodDecl>(FnDecl))
10664 ArgsArray = ArgsArray.slice(1);
10665 checkCall(FnDecl, ArgsArray, 0, isa<CXXMethodDecl>(FnDecl), OpLoc,
10666 TheCall->getSourceRange(), VariadicDoesNotApply);
10667
10668 return MaybeBindToTemporary(TheCall);
10669 } else {
10670 // We matched a built-in operator. Convert the arguments, then
10671 // break out so that we will build the appropriate built-in
10672 // operator node.
10673 ExprResult ArgsRes0 =
10674 PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
10675 Best->Conversions[0], AA_Passing);
10676 if (ArgsRes0.isInvalid())
10677 return ExprError();
10678 Args[0] = ArgsRes0.take();
10679
10680 ExprResult ArgsRes1 =
10681 PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
10682 Best->Conversions[1], AA_Passing);
10683 if (ArgsRes1.isInvalid())
10684 return ExprError();
10685 Args[1] = ArgsRes1.take();
10686 break;
10687 }
10688 }
10689
10690 case OR_No_Viable_Function: {
10691 // C++ [over.match.oper]p9:
10692 // If the operator is the operator , [...] and there are no
10693 // viable functions, then the operator is assumed to be the
10694 // built-in operator and interpreted according to clause 5.
10695 if (Opc == BO_Comma)
10696 break;
10697
10698 // For class as left operand for assignment or compound assigment
10699 // operator do not fall through to handling in built-in, but report that
10700 // no overloaded assignment operator found
10701 ExprResult Result = ExprError();
10702 if (Args[0]->getType()->isRecordType() &&
10703 Opc >= BO_Assign && Opc <= BO_OrAssign) {
10704 Diag(OpLoc, diag::err_ovl_no_viable_oper)
10705 << BinaryOperator::getOpcodeStr(Opc)
10706 << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10707 } else {
10708 // This is an erroneous use of an operator which can be overloaded by
10709 // a non-member function. Check for non-member operators which were
10710 // defined too late to be candidates.
10711 if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc, Args))
10712 // FIXME: Recover by calling the found function.
10713 return ExprError();
10714
10715 // No viable function; try to create a built-in operation, which will
10716 // produce an error. Then, show the non-viable candidates.
10717 Result = CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10718 }
10719 assert(Result.isInvalid() &&
10720 "C++ binary operator overloading is missing candidates!");
10721 if (Result.isInvalid())
10722 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10723 BinaryOperator::getOpcodeStr(Opc), OpLoc);
10724 return Result;
10725 }
10726
10727 case OR_Ambiguous:
10728 Diag(OpLoc, diag::err_ovl_ambiguous_oper_binary)
10729 << BinaryOperator::getOpcodeStr(Opc)
10730 << Args[0]->getType() << Args[1]->getType()
10731 << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10732 CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args,
10733 BinaryOperator::getOpcodeStr(Opc), OpLoc);
10734 return ExprError();
10735
10736 case OR_Deleted:
10737 if (isImplicitlyDeleted(Best->Function)) {
10738 CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
10739 Diag(OpLoc, diag::err_ovl_deleted_special_oper)
10740 << Context.getRecordType(Method->getParent())
10741 << getSpecialMember(Method);
10742
10743 // The user probably meant to call this special member. Just
10744 // explain why it's deleted.
10745 NoteDeletedFunction(Method);
10746 return ExprError();
10747 } else {
10748 Diag(OpLoc, diag::err_ovl_deleted_oper)
10749 << Best->Function->isDeleted()
10750 << BinaryOperator::getOpcodeStr(Opc)
10751 << getDeletedOrUnavailableSuffix(Best->Function)
10752 << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10753 }
10754 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10755 BinaryOperator::getOpcodeStr(Opc), OpLoc);
10756 return ExprError();
10757 }
10758
10759 // We matched a built-in operator; build it.
10760 return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10761 }
10762
10763 ExprResult
CreateOverloadedArraySubscriptExpr(SourceLocation LLoc,SourceLocation RLoc,Expr * Base,Expr * Idx)10764 Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc,
10765 SourceLocation RLoc,
10766 Expr *Base, Expr *Idx) {
10767 Expr *Args[2] = { Base, Idx };
10768 DeclarationName OpName =
10769 Context.DeclarationNames.getCXXOperatorName(OO_Subscript);
10770
10771 // If either side is type-dependent, create an appropriate dependent
10772 // expression.
10773 if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
10774
10775 CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
10776 // CHECKME: no 'operator' keyword?
10777 DeclarationNameInfo OpNameInfo(OpName, LLoc);
10778 OpNameInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc));
10779 UnresolvedLookupExpr *Fn
10780 = UnresolvedLookupExpr::Create(Context, NamingClass,
10781 NestedNameSpecifierLoc(), OpNameInfo,
10782 /*ADL*/ true, /*Overloaded*/ false,
10783 UnresolvedSetIterator(),
10784 UnresolvedSetIterator());
10785 // Can't add any actual overloads yet
10786
10787 return Owned(new (Context) CXXOperatorCallExpr(Context, OO_Subscript, Fn,
10788 Args,
10789 Context.DependentTy,
10790 VK_RValue,
10791 RLoc, false));
10792 }
10793
10794 // Handle placeholders on both operands.
10795 if (checkPlaceholderForOverload(*this, Args[0]))
10796 return ExprError();
10797 if (checkPlaceholderForOverload(*this, Args[1]))
10798 return ExprError();
10799
10800 // Build an empty overload set.
10801 OverloadCandidateSet CandidateSet(LLoc);
10802
10803 // Subscript can only be overloaded as a member function.
10804
10805 // Add operator candidates that are member functions.
10806 AddMemberOperatorCandidates(OO_Subscript, LLoc, Args, CandidateSet);
10807
10808 // Add builtin operator candidates.
10809 AddBuiltinOperatorCandidates(OO_Subscript, LLoc, Args, CandidateSet);
10810
10811 bool HadMultipleCandidates = (CandidateSet.size() > 1);
10812
10813 // Perform overload resolution.
10814 OverloadCandidateSet::iterator Best;
10815 switch (CandidateSet.BestViableFunction(*this, LLoc, Best)) {
10816 case OR_Success: {
10817 // We found a built-in operator or an overloaded operator.
10818 FunctionDecl *FnDecl = Best->Function;
10819
10820 if (FnDecl) {
10821 // We matched an overloaded operator. Build a call to that
10822 // operator.
10823
10824 CheckMemberOperatorAccess(LLoc, Args[0], Args[1], Best->FoundDecl);
10825
10826 // Convert the arguments.
10827 CXXMethodDecl *Method = cast<CXXMethodDecl>(FnDecl);
10828 ExprResult Arg0 =
10829 PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0,
10830 Best->FoundDecl, Method);
10831 if (Arg0.isInvalid())
10832 return ExprError();
10833 Args[0] = Arg0.take();
10834
10835 // Convert the arguments.
10836 ExprResult InputInit
10837 = PerformCopyInitialization(InitializedEntity::InitializeParameter(
10838 Context,
10839 FnDecl->getParamDecl(0)),
10840 SourceLocation(),
10841 Owned(Args[1]));
10842 if (InputInit.isInvalid())
10843 return ExprError();
10844
10845 Args[1] = InputInit.takeAs<Expr>();
10846
10847 // Determine the result type
10848 QualType ResultTy = FnDecl->getResultType();
10849 ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10850 ResultTy = ResultTy.getNonLValueExprType(Context);
10851
10852 // Build the actual expression node.
10853 DeclarationNameInfo OpLocInfo(OpName, LLoc);
10854 OpLocInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc));
10855 ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
10856 Best->FoundDecl,
10857 HadMultipleCandidates,
10858 OpLocInfo.getLoc(),
10859 OpLocInfo.getInfo());
10860 if (FnExpr.isInvalid())
10861 return ExprError();
10862
10863 CXXOperatorCallExpr *TheCall =
10864 new (Context) CXXOperatorCallExpr(Context, OO_Subscript,
10865 FnExpr.take(), Args,
10866 ResultTy, VK, RLoc,
10867 false);
10868
10869 if (CheckCallReturnType(FnDecl->getResultType(), LLoc, TheCall,
10870 FnDecl))
10871 return ExprError();
10872
10873 return MaybeBindToTemporary(TheCall);
10874 } else {
10875 // We matched a built-in operator. Convert the arguments, then
10876 // break out so that we will build the appropriate built-in
10877 // operator node.
10878 ExprResult ArgsRes0 =
10879 PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
10880 Best->Conversions[0], AA_Passing);
10881 if (ArgsRes0.isInvalid())
10882 return ExprError();
10883 Args[0] = ArgsRes0.take();
10884
10885 ExprResult ArgsRes1 =
10886 PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
10887 Best->Conversions[1], AA_Passing);
10888 if (ArgsRes1.isInvalid())
10889 return ExprError();
10890 Args[1] = ArgsRes1.take();
10891
10892 break;
10893 }
10894 }
10895
10896 case OR_No_Viable_Function: {
10897 if (CandidateSet.empty())
10898 Diag(LLoc, diag::err_ovl_no_oper)
10899 << Args[0]->getType() << /*subscript*/ 0
10900 << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10901 else
10902 Diag(LLoc, diag::err_ovl_no_viable_subscript)
10903 << Args[0]->getType()
10904 << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10905 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10906 "[]", LLoc);
10907 return ExprError();
10908 }
10909
10910 case OR_Ambiguous:
10911 Diag(LLoc, diag::err_ovl_ambiguous_oper_binary)
10912 << "[]"
10913 << Args[0]->getType() << Args[1]->getType()
10914 << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10915 CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args,
10916 "[]", LLoc);
10917 return ExprError();
10918
10919 case OR_Deleted:
10920 Diag(LLoc, diag::err_ovl_deleted_oper)
10921 << Best->Function->isDeleted() << "[]"
10922 << getDeletedOrUnavailableSuffix(Best->Function)
10923 << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10924 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10925 "[]", LLoc);
10926 return ExprError();
10927 }
10928
10929 // We matched a built-in operator; build it.
10930 return CreateBuiltinArraySubscriptExpr(Args[0], LLoc, Args[1], RLoc);
10931 }
10932
10933 /// BuildCallToMemberFunction - Build a call to a member
10934 /// function. MemExpr is the expression that refers to the member
10935 /// function (and includes the object parameter), Args/NumArgs are the
10936 /// arguments to the function call (not including the object
10937 /// parameter). The caller needs to validate that the member
10938 /// expression refers to a non-static member function or an overloaded
10939 /// member function.
10940 ExprResult
BuildCallToMemberFunction(Scope * S,Expr * MemExprE,SourceLocation LParenLoc,MultiExprArg Args,SourceLocation RParenLoc)10941 Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE,
10942 SourceLocation LParenLoc,
10943 MultiExprArg Args,
10944 SourceLocation RParenLoc) {
10945 assert(MemExprE->getType() == Context.BoundMemberTy ||
10946 MemExprE->getType() == Context.OverloadTy);
10947
10948 // Dig out the member expression. This holds both the object
10949 // argument and the member function we're referring to.
10950 Expr *NakedMemExpr = MemExprE->IgnoreParens();
10951
10952 // Determine whether this is a call to a pointer-to-member function.
10953 if (BinaryOperator *op = dyn_cast<BinaryOperator>(NakedMemExpr)) {
10954 assert(op->getType() == Context.BoundMemberTy);
10955 assert(op->getOpcode() == BO_PtrMemD || op->getOpcode() == BO_PtrMemI);
10956
10957 QualType fnType =
10958 op->getRHS()->getType()->castAs<MemberPointerType>()->getPointeeType();
10959
10960 const FunctionProtoType *proto = fnType->castAs<FunctionProtoType>();
10961 QualType resultType = proto->getCallResultType(Context);
10962 ExprValueKind valueKind = Expr::getValueKindForType(proto->getResultType());
10963
10964 // Check that the object type isn't more qualified than the
10965 // member function we're calling.
10966 Qualifiers funcQuals = Qualifiers::fromCVRMask(proto->getTypeQuals());
10967
10968 QualType objectType = op->getLHS()->getType();
10969 if (op->getOpcode() == BO_PtrMemI)
10970 objectType = objectType->castAs<PointerType>()->getPointeeType();
10971 Qualifiers objectQuals = objectType.getQualifiers();
10972
10973 Qualifiers difference = objectQuals - funcQuals;
10974 difference.removeObjCGCAttr();
10975 difference.removeAddressSpace();
10976 if (difference) {
10977 std::string qualsString = difference.getAsString();
10978 Diag(LParenLoc, diag::err_pointer_to_member_call_drops_quals)
10979 << fnType.getUnqualifiedType()
10980 << qualsString
10981 << (qualsString.find(' ') == std::string::npos ? 1 : 2);
10982 }
10983
10984 CXXMemberCallExpr *call
10985 = new (Context) CXXMemberCallExpr(Context, MemExprE, Args,
10986 resultType, valueKind, RParenLoc);
10987
10988 if (CheckCallReturnType(proto->getResultType(),
10989 op->getRHS()->getLocStart(),
10990 call, 0))
10991 return ExprError();
10992
10993 if (ConvertArgumentsForCall(call, op, 0, proto, Args, RParenLoc))
10994 return ExprError();
10995
10996 if (CheckOtherCall(call, proto))
10997 return ExprError();
10998
10999 return MaybeBindToTemporary(call);
11000 }
11001
11002 UnbridgedCastsSet UnbridgedCasts;
11003 if (checkArgPlaceholdersForOverload(*this, Args, UnbridgedCasts))
11004 return ExprError();
11005
11006 MemberExpr *MemExpr;
11007 CXXMethodDecl *Method = 0;
11008 DeclAccessPair FoundDecl = DeclAccessPair::make(0, AS_public);
11009 NestedNameSpecifier *Qualifier = 0;
11010 if (isa<MemberExpr>(NakedMemExpr)) {
11011 MemExpr = cast<MemberExpr>(NakedMemExpr);
11012 Method = cast<CXXMethodDecl>(MemExpr->getMemberDecl());
11013 FoundDecl = MemExpr->getFoundDecl();
11014 Qualifier = MemExpr->getQualifier();
11015 UnbridgedCasts.restore();
11016 } else {
11017 UnresolvedMemberExpr *UnresExpr = cast<UnresolvedMemberExpr>(NakedMemExpr);
11018 Qualifier = UnresExpr->getQualifier();
11019
11020 QualType ObjectType = UnresExpr->getBaseType();
11021 Expr::Classification ObjectClassification
11022 = UnresExpr->isArrow()? Expr::Classification::makeSimpleLValue()
11023 : UnresExpr->getBase()->Classify(Context);
11024
11025 // Add overload candidates
11026 OverloadCandidateSet CandidateSet(UnresExpr->getMemberLoc());
11027
11028 // FIXME: avoid copy.
11029 TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
11030 if (UnresExpr->hasExplicitTemplateArgs()) {
11031 UnresExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
11032 TemplateArgs = &TemplateArgsBuffer;
11033 }
11034
11035 for (UnresolvedMemberExpr::decls_iterator I = UnresExpr->decls_begin(),
11036 E = UnresExpr->decls_end(); I != E; ++I) {
11037
11038 NamedDecl *Func = *I;
11039 CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(Func->getDeclContext());
11040 if (isa<UsingShadowDecl>(Func))
11041 Func = cast<UsingShadowDecl>(Func)->getTargetDecl();
11042
11043
11044 // Microsoft supports direct constructor calls.
11045 if (getLangOpts().MicrosoftExt && isa<CXXConstructorDecl>(Func)) {
11046 AddOverloadCandidate(cast<CXXConstructorDecl>(Func), I.getPair(),
11047 Args, CandidateSet);
11048 } else if ((Method = dyn_cast<CXXMethodDecl>(Func))) {
11049 // If explicit template arguments were provided, we can't call a
11050 // non-template member function.
11051 if (TemplateArgs)
11052 continue;
11053
11054 AddMethodCandidate(Method, I.getPair(), ActingDC, ObjectType,
11055 ObjectClassification, Args, CandidateSet,
11056 /*SuppressUserConversions=*/false);
11057 } else {
11058 AddMethodTemplateCandidate(cast<FunctionTemplateDecl>(Func),
11059 I.getPair(), ActingDC, TemplateArgs,
11060 ObjectType, ObjectClassification,
11061 Args, CandidateSet,
11062 /*SuppressUsedConversions=*/false);
11063 }
11064 }
11065
11066 DeclarationName DeclName = UnresExpr->getMemberName();
11067
11068 UnbridgedCasts.restore();
11069
11070 OverloadCandidateSet::iterator Best;
11071 switch (CandidateSet.BestViableFunction(*this, UnresExpr->getLocStart(),
11072 Best)) {
11073 case OR_Success:
11074 Method = cast<CXXMethodDecl>(Best->Function);
11075 FoundDecl = Best->FoundDecl;
11076 CheckUnresolvedMemberAccess(UnresExpr, Best->FoundDecl);
11077 if (DiagnoseUseOfDecl(Best->FoundDecl, UnresExpr->getNameLoc()))
11078 return ExprError();
11079 // If FoundDecl is different from Method (such as if one is a template
11080 // and the other a specialization), make sure DiagnoseUseOfDecl is
11081 // called on both.
11082 // FIXME: This would be more comprehensively addressed by modifying
11083 // DiagnoseUseOfDecl to accept both the FoundDecl and the decl
11084 // being used.
11085 if (Method != FoundDecl.getDecl() &&
11086 DiagnoseUseOfDecl(Method, UnresExpr->getNameLoc()))
11087 return ExprError();
11088 break;
11089
11090 case OR_No_Viable_Function:
11091 Diag(UnresExpr->getMemberLoc(),
11092 diag::err_ovl_no_viable_member_function_in_call)
11093 << DeclName << MemExprE->getSourceRange();
11094 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11095 // FIXME: Leaking incoming expressions!
11096 return ExprError();
11097
11098 case OR_Ambiguous:
11099 Diag(UnresExpr->getMemberLoc(), diag::err_ovl_ambiguous_member_call)
11100 << DeclName << MemExprE->getSourceRange();
11101 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11102 // FIXME: Leaking incoming expressions!
11103 return ExprError();
11104
11105 case OR_Deleted:
11106 Diag(UnresExpr->getMemberLoc(), diag::err_ovl_deleted_member_call)
11107 << Best->Function->isDeleted()
11108 << DeclName
11109 << getDeletedOrUnavailableSuffix(Best->Function)
11110 << MemExprE->getSourceRange();
11111 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11112 // FIXME: Leaking incoming expressions!
11113 return ExprError();
11114 }
11115
11116 MemExprE = FixOverloadedFunctionReference(MemExprE, FoundDecl, Method);
11117
11118 // If overload resolution picked a static member, build a
11119 // non-member call based on that function.
11120 if (Method->isStatic()) {
11121 return BuildResolvedCallExpr(MemExprE, Method, LParenLoc, Args,
11122 RParenLoc);
11123 }
11124
11125 MemExpr = cast<MemberExpr>(MemExprE->IgnoreParens());
11126 }
11127
11128 QualType ResultType = Method->getResultType();
11129 ExprValueKind VK = Expr::getValueKindForType(ResultType);
11130 ResultType = ResultType.getNonLValueExprType(Context);
11131
11132 assert(Method && "Member call to something that isn't a method?");
11133 CXXMemberCallExpr *TheCall =
11134 new (Context) CXXMemberCallExpr(Context, MemExprE, Args,
11135 ResultType, VK, RParenLoc);
11136
11137 // Check for a valid return type.
11138 if (CheckCallReturnType(Method->getResultType(), MemExpr->getMemberLoc(),
11139 TheCall, Method))
11140 return ExprError();
11141
11142 // Convert the object argument (for a non-static member function call).
11143 // We only need to do this if there was actually an overload; otherwise
11144 // it was done at lookup.
11145 if (!Method->isStatic()) {
11146 ExprResult ObjectArg =
11147 PerformObjectArgumentInitialization(MemExpr->getBase(), Qualifier,
11148 FoundDecl, Method);
11149 if (ObjectArg.isInvalid())
11150 return ExprError();
11151 MemExpr->setBase(ObjectArg.take());
11152 }
11153
11154 // Convert the rest of the arguments
11155 const FunctionProtoType *Proto =
11156 Method->getType()->getAs<FunctionProtoType>();
11157 if (ConvertArgumentsForCall(TheCall, MemExpr, Method, Proto, Args,
11158 RParenLoc))
11159 return ExprError();
11160
11161 DiagnoseSentinelCalls(Method, LParenLoc, Args);
11162
11163 if (CheckFunctionCall(Method, TheCall, Proto))
11164 return ExprError();
11165
11166 if ((isa<CXXConstructorDecl>(CurContext) ||
11167 isa<CXXDestructorDecl>(CurContext)) &&
11168 TheCall->getMethodDecl()->isPure()) {
11169 const CXXMethodDecl *MD = TheCall->getMethodDecl();
11170
11171 if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts())) {
11172 Diag(MemExpr->getLocStart(),
11173 diag::warn_call_to_pure_virtual_member_function_from_ctor_dtor)
11174 << MD->getDeclName() << isa<CXXDestructorDecl>(CurContext)
11175 << MD->getParent()->getDeclName();
11176
11177 Diag(MD->getLocStart(), diag::note_previous_decl) << MD->getDeclName();
11178 }
11179 }
11180 return MaybeBindToTemporary(TheCall);
11181 }
11182
11183 /// BuildCallToObjectOfClassType - Build a call to an object of class
11184 /// type (C++ [over.call.object]), which can end up invoking an
11185 /// overloaded function call operator (@c operator()) or performing a
11186 /// user-defined conversion on the object argument.
11187 ExprResult
BuildCallToObjectOfClassType(Scope * S,Expr * Obj,SourceLocation LParenLoc,MultiExprArg Args,SourceLocation RParenLoc)11188 Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj,
11189 SourceLocation LParenLoc,
11190 MultiExprArg Args,
11191 SourceLocation RParenLoc) {
11192 if (checkPlaceholderForOverload(*this, Obj))
11193 return ExprError();
11194 ExprResult Object = Owned(Obj);
11195
11196 UnbridgedCastsSet UnbridgedCasts;
11197 if (checkArgPlaceholdersForOverload(*this, Args, UnbridgedCasts))
11198 return ExprError();
11199
11200 assert(Object.get()->getType()->isRecordType() && "Requires object type argument");
11201 const RecordType *Record = Object.get()->getType()->getAs<RecordType>();
11202
11203 // C++ [over.call.object]p1:
11204 // If the primary-expression E in the function call syntax
11205 // evaluates to a class object of type "cv T", then the set of
11206 // candidate functions includes at least the function call
11207 // operators of T. The function call operators of T are obtained by
11208 // ordinary lookup of the name operator() in the context of
11209 // (E).operator().
11210 OverloadCandidateSet CandidateSet(LParenLoc);
11211 DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(OO_Call);
11212
11213 if (RequireCompleteType(LParenLoc, Object.get()->getType(),
11214 diag::err_incomplete_object_call, Object.get()))
11215 return true;
11216
11217 LookupResult R(*this, OpName, LParenLoc, LookupOrdinaryName);
11218 LookupQualifiedName(R, Record->getDecl());
11219 R.suppressDiagnostics();
11220
11221 for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
11222 Oper != OperEnd; ++Oper) {
11223 AddMethodCandidate(Oper.getPair(), Object.get()->getType(),
11224 Object.get()->Classify(Context),
11225 Args, CandidateSet,
11226 /*SuppressUserConversions=*/ false);
11227 }
11228
11229 // C++ [over.call.object]p2:
11230 // In addition, for each (non-explicit in C++0x) conversion function
11231 // declared in T of the form
11232 //
11233 // operator conversion-type-id () cv-qualifier;
11234 //
11235 // where cv-qualifier is the same cv-qualification as, or a
11236 // greater cv-qualification than, cv, and where conversion-type-id
11237 // denotes the type "pointer to function of (P1,...,Pn) returning
11238 // R", or the type "reference to pointer to function of
11239 // (P1,...,Pn) returning R", or the type "reference to function
11240 // of (P1,...,Pn) returning R", a surrogate call function [...]
11241 // is also considered as a candidate function. Similarly,
11242 // surrogate call functions are added to the set of candidate
11243 // functions for each conversion function declared in an
11244 // accessible base class provided the function is not hidden
11245 // within T by another intervening declaration.
11246 std::pair<CXXRecordDecl::conversion_iterator,
11247 CXXRecordDecl::conversion_iterator> Conversions
11248 = cast<CXXRecordDecl>(Record->getDecl())->getVisibleConversionFunctions();
11249 for (CXXRecordDecl::conversion_iterator
11250 I = Conversions.first, E = Conversions.second; I != E; ++I) {
11251 NamedDecl *D = *I;
11252 CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
11253 if (isa<UsingShadowDecl>(D))
11254 D = cast<UsingShadowDecl>(D)->getTargetDecl();
11255
11256 // Skip over templated conversion functions; they aren't
11257 // surrogates.
11258 if (isa<FunctionTemplateDecl>(D))
11259 continue;
11260
11261 CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
11262 if (!Conv->isExplicit()) {
11263 // Strip the reference type (if any) and then the pointer type (if
11264 // any) to get down to what might be a function type.
11265 QualType ConvType = Conv->getConversionType().getNonReferenceType();
11266 if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
11267 ConvType = ConvPtrType->getPointeeType();
11268
11269 if (const FunctionProtoType *Proto = ConvType->getAs<FunctionProtoType>())
11270 {
11271 AddSurrogateCandidate(Conv, I.getPair(), ActingContext, Proto,
11272 Object.get(), Args, CandidateSet);
11273 }
11274 }
11275 }
11276
11277 bool HadMultipleCandidates = (CandidateSet.size() > 1);
11278
11279 // Perform overload resolution.
11280 OverloadCandidateSet::iterator Best;
11281 switch (CandidateSet.BestViableFunction(*this, Object.get()->getLocStart(),
11282 Best)) {
11283 case OR_Success:
11284 // Overload resolution succeeded; we'll build the appropriate call
11285 // below.
11286 break;
11287
11288 case OR_No_Viable_Function:
11289 if (CandidateSet.empty())
11290 Diag(Object.get()->getLocStart(), diag::err_ovl_no_oper)
11291 << Object.get()->getType() << /*call*/ 1
11292 << Object.get()->getSourceRange();
11293 else
11294 Diag(Object.get()->getLocStart(),
11295 diag::err_ovl_no_viable_object_call)
11296 << Object.get()->getType() << Object.get()->getSourceRange();
11297 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11298 break;
11299
11300 case OR_Ambiguous:
11301 Diag(Object.get()->getLocStart(),
11302 diag::err_ovl_ambiguous_object_call)
11303 << Object.get()->getType() << Object.get()->getSourceRange();
11304 CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args);
11305 break;
11306
11307 case OR_Deleted:
11308 Diag(Object.get()->getLocStart(),
11309 diag::err_ovl_deleted_object_call)
11310 << Best->Function->isDeleted()
11311 << Object.get()->getType()
11312 << getDeletedOrUnavailableSuffix(Best->Function)
11313 << Object.get()->getSourceRange();
11314 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11315 break;
11316 }
11317
11318 if (Best == CandidateSet.end())
11319 return true;
11320
11321 UnbridgedCasts.restore();
11322
11323 if (Best->Function == 0) {
11324 // Since there is no function declaration, this is one of the
11325 // surrogate candidates. Dig out the conversion function.
11326 CXXConversionDecl *Conv
11327 = cast<CXXConversionDecl>(
11328 Best->Conversions[0].UserDefined.ConversionFunction);
11329
11330 CheckMemberOperatorAccess(LParenLoc, Object.get(), 0, Best->FoundDecl);
11331 if (DiagnoseUseOfDecl(Best->FoundDecl, LParenLoc))
11332 return ExprError();
11333 assert(Conv == Best->FoundDecl.getDecl() &&
11334 "Found Decl & conversion-to-functionptr should be same, right?!");
11335 // We selected one of the surrogate functions that converts the
11336 // object parameter to a function pointer. Perform the conversion
11337 // on the object argument, then let ActOnCallExpr finish the job.
11338
11339 // Create an implicit member expr to refer to the conversion operator.
11340 // and then call it.
11341 ExprResult Call = BuildCXXMemberCallExpr(Object.get(), Best->FoundDecl,
11342 Conv, HadMultipleCandidates);
11343 if (Call.isInvalid())
11344 return ExprError();
11345 // Record usage of conversion in an implicit cast.
11346 Call = Owned(ImplicitCastExpr::Create(Context, Call.get()->getType(),
11347 CK_UserDefinedConversion,
11348 Call.get(), 0, VK_RValue));
11349
11350 return ActOnCallExpr(S, Call.get(), LParenLoc, Args, RParenLoc);
11351 }
11352
11353 CheckMemberOperatorAccess(LParenLoc, Object.get(), 0, Best->FoundDecl);
11354
11355 // We found an overloaded operator(). Build a CXXOperatorCallExpr
11356 // that calls this method, using Object for the implicit object
11357 // parameter and passing along the remaining arguments.
11358 CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
11359
11360 // An error diagnostic has already been printed when parsing the declaration.
11361 if (Method->isInvalidDecl())
11362 return ExprError();
11363
11364 const FunctionProtoType *Proto =
11365 Method->getType()->getAs<FunctionProtoType>();
11366
11367 unsigned NumArgsInProto = Proto->getNumArgs();
11368 unsigned NumArgsToCheck = Args.size();
11369
11370 // Build the full argument list for the method call (the
11371 // implicit object parameter is placed at the beginning of the
11372 // list).
11373 Expr **MethodArgs;
11374 if (Args.size() < NumArgsInProto) {
11375 NumArgsToCheck = NumArgsInProto;
11376 MethodArgs = new Expr*[NumArgsInProto + 1];
11377 } else {
11378 MethodArgs = new Expr*[Args.size() + 1];
11379 }
11380 MethodArgs[0] = Object.get();
11381 for (unsigned ArgIdx = 0, e = Args.size(); ArgIdx != e; ++ArgIdx)
11382 MethodArgs[ArgIdx + 1] = Args[ArgIdx];
11383
11384 DeclarationNameInfo OpLocInfo(
11385 Context.DeclarationNames.getCXXOperatorName(OO_Call), LParenLoc);
11386 OpLocInfo.setCXXOperatorNameRange(SourceRange(LParenLoc, RParenLoc));
11387 ExprResult NewFn = CreateFunctionRefExpr(*this, Method, Best->FoundDecl,
11388 HadMultipleCandidates,
11389 OpLocInfo.getLoc(),
11390 OpLocInfo.getInfo());
11391 if (NewFn.isInvalid())
11392 return true;
11393
11394 // Once we've built TheCall, all of the expressions are properly
11395 // owned.
11396 QualType ResultTy = Method->getResultType();
11397 ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11398 ResultTy = ResultTy.getNonLValueExprType(Context);
11399
11400 CXXOperatorCallExpr *TheCall =
11401 new (Context) CXXOperatorCallExpr(Context, OO_Call, NewFn.take(),
11402 llvm::makeArrayRef(MethodArgs, Args.size()+1),
11403 ResultTy, VK, RParenLoc, false);
11404 delete [] MethodArgs;
11405
11406 if (CheckCallReturnType(Method->getResultType(), LParenLoc, TheCall,
11407 Method))
11408 return true;
11409
11410 // We may have default arguments. If so, we need to allocate more
11411 // slots in the call for them.
11412 if (Args.size() < NumArgsInProto)
11413 TheCall->setNumArgs(Context, NumArgsInProto + 1);
11414 else if (Args.size() > NumArgsInProto)
11415 NumArgsToCheck = NumArgsInProto;
11416
11417 bool IsError = false;
11418
11419 // Initialize the implicit object parameter.
11420 ExprResult ObjRes =
11421 PerformObjectArgumentInitialization(Object.get(), /*Qualifier=*/0,
11422 Best->FoundDecl, Method);
11423 if (ObjRes.isInvalid())
11424 IsError = true;
11425 else
11426 Object = ObjRes;
11427 TheCall->setArg(0, Object.take());
11428
11429 // Check the argument types.
11430 for (unsigned i = 0; i != NumArgsToCheck; i++) {
11431 Expr *Arg;
11432 if (i < Args.size()) {
11433 Arg = Args[i];
11434
11435 // Pass the argument.
11436
11437 ExprResult InputInit
11438 = PerformCopyInitialization(InitializedEntity::InitializeParameter(
11439 Context,
11440 Method->getParamDecl(i)),
11441 SourceLocation(), Arg);
11442
11443 IsError |= InputInit.isInvalid();
11444 Arg = InputInit.takeAs<Expr>();
11445 } else {
11446 ExprResult DefArg
11447 = BuildCXXDefaultArgExpr(LParenLoc, Method, Method->getParamDecl(i));
11448 if (DefArg.isInvalid()) {
11449 IsError = true;
11450 break;
11451 }
11452
11453 Arg = DefArg.takeAs<Expr>();
11454 }
11455
11456 TheCall->setArg(i + 1, Arg);
11457 }
11458
11459 // If this is a variadic call, handle args passed through "...".
11460 if (Proto->isVariadic()) {
11461 // Promote the arguments (C99 6.5.2.2p7).
11462 for (unsigned i = NumArgsInProto, e = Args.size(); i < e; i++) {
11463 ExprResult Arg = DefaultVariadicArgumentPromotion(Args[i], VariadicMethod, 0);
11464 IsError |= Arg.isInvalid();
11465 TheCall->setArg(i + 1, Arg.take());
11466 }
11467 }
11468
11469 if (IsError) return true;
11470
11471 DiagnoseSentinelCalls(Method, LParenLoc, Args);
11472
11473 if (CheckFunctionCall(Method, TheCall, Proto))
11474 return true;
11475
11476 return MaybeBindToTemporary(TheCall);
11477 }
11478
11479 /// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->
11480 /// (if one exists), where @c Base is an expression of class type and
11481 /// @c Member is the name of the member we're trying to find.
11482 ExprResult
BuildOverloadedArrowExpr(Scope * S,Expr * Base,SourceLocation OpLoc,bool * NoArrowOperatorFound)11483 Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc,
11484 bool *NoArrowOperatorFound) {
11485 assert(Base->getType()->isRecordType() &&
11486 "left-hand side must have class type");
11487
11488 if (checkPlaceholderForOverload(*this, Base))
11489 return ExprError();
11490
11491 SourceLocation Loc = Base->getExprLoc();
11492
11493 // C++ [over.ref]p1:
11494 //
11495 // [...] An expression x->m is interpreted as (x.operator->())->m
11496 // for a class object x of type T if T::operator->() exists and if
11497 // the operator is selected as the best match function by the
11498 // overload resolution mechanism (13.3).
11499 DeclarationName OpName =
11500 Context.DeclarationNames.getCXXOperatorName(OO_Arrow);
11501 OverloadCandidateSet CandidateSet(Loc);
11502 const RecordType *BaseRecord = Base->getType()->getAs<RecordType>();
11503
11504 if (RequireCompleteType(Loc, Base->getType(),
11505 diag::err_typecheck_incomplete_tag, Base))
11506 return ExprError();
11507
11508 LookupResult R(*this, OpName, OpLoc, LookupOrdinaryName);
11509 LookupQualifiedName(R, BaseRecord->getDecl());
11510 R.suppressDiagnostics();
11511
11512 for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
11513 Oper != OperEnd; ++Oper) {
11514 AddMethodCandidate(Oper.getPair(), Base->getType(), Base->Classify(Context),
11515 None, CandidateSet, /*SuppressUserConversions=*/false);
11516 }
11517
11518 bool HadMultipleCandidates = (CandidateSet.size() > 1);
11519
11520 // Perform overload resolution.
11521 OverloadCandidateSet::iterator Best;
11522 switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
11523 case OR_Success:
11524 // Overload resolution succeeded; we'll build the call below.
11525 break;
11526
11527 case OR_No_Viable_Function:
11528 if (CandidateSet.empty()) {
11529 QualType BaseType = Base->getType();
11530 if (NoArrowOperatorFound) {
11531 // Report this specific error to the caller instead of emitting a
11532 // diagnostic, as requested.
11533 *NoArrowOperatorFound = true;
11534 return ExprError();
11535 }
11536 Diag(OpLoc, diag::err_typecheck_member_reference_arrow)
11537 << BaseType << Base->getSourceRange();
11538 if (BaseType->isRecordType() && !BaseType->isPointerType()) {
11539 Diag(OpLoc, diag::note_typecheck_member_reference_suggestion)
11540 << FixItHint::CreateReplacement(OpLoc, ".");
11541 }
11542 } else
11543 Diag(OpLoc, diag::err_ovl_no_viable_oper)
11544 << "operator->" << Base->getSourceRange();
11545 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Base);
11546 return ExprError();
11547
11548 case OR_Ambiguous:
11549 Diag(OpLoc, diag::err_ovl_ambiguous_oper_unary)
11550 << "->" << Base->getType() << Base->getSourceRange();
11551 CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Base);
11552 return ExprError();
11553
11554 case OR_Deleted:
11555 Diag(OpLoc, diag::err_ovl_deleted_oper)
11556 << Best->Function->isDeleted()
11557 << "->"
11558 << getDeletedOrUnavailableSuffix(Best->Function)
11559 << Base->getSourceRange();
11560 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Base);
11561 return ExprError();
11562 }
11563
11564 CheckMemberOperatorAccess(OpLoc, Base, 0, Best->FoundDecl);
11565
11566 // Convert the object parameter.
11567 CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
11568 ExprResult BaseResult =
11569 PerformObjectArgumentInitialization(Base, /*Qualifier=*/0,
11570 Best->FoundDecl, Method);
11571 if (BaseResult.isInvalid())
11572 return ExprError();
11573 Base = BaseResult.take();
11574
11575 // Build the operator call.
11576 ExprResult FnExpr = CreateFunctionRefExpr(*this, Method, Best->FoundDecl,
11577 HadMultipleCandidates, OpLoc);
11578 if (FnExpr.isInvalid())
11579 return ExprError();
11580
11581 QualType ResultTy = Method->getResultType();
11582 ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11583 ResultTy = ResultTy.getNonLValueExprType(Context);
11584 CXXOperatorCallExpr *TheCall =
11585 new (Context) CXXOperatorCallExpr(Context, OO_Arrow, FnExpr.take(),
11586 Base, ResultTy, VK, OpLoc, false);
11587
11588 if (CheckCallReturnType(Method->getResultType(), OpLoc, TheCall,
11589 Method))
11590 return ExprError();
11591
11592 return MaybeBindToTemporary(TheCall);
11593 }
11594
11595 /// BuildLiteralOperatorCall - Build a UserDefinedLiteral by creating a call to
11596 /// a literal operator described by the provided lookup results.
BuildLiteralOperatorCall(LookupResult & R,DeclarationNameInfo & SuffixInfo,ArrayRef<Expr * > Args,SourceLocation LitEndLoc,TemplateArgumentListInfo * TemplateArgs)11597 ExprResult Sema::BuildLiteralOperatorCall(LookupResult &R,
11598 DeclarationNameInfo &SuffixInfo,
11599 ArrayRef<Expr*> Args,
11600 SourceLocation LitEndLoc,
11601 TemplateArgumentListInfo *TemplateArgs) {
11602 SourceLocation UDSuffixLoc = SuffixInfo.getCXXLiteralOperatorNameLoc();
11603
11604 OverloadCandidateSet CandidateSet(UDSuffixLoc);
11605 AddFunctionCandidates(R.asUnresolvedSet(), Args, CandidateSet, true,
11606 TemplateArgs);
11607
11608 bool HadMultipleCandidates = (CandidateSet.size() > 1);
11609
11610 // Perform overload resolution. This will usually be trivial, but might need
11611 // to perform substitutions for a literal operator template.
11612 OverloadCandidateSet::iterator Best;
11613 switch (CandidateSet.BestViableFunction(*this, UDSuffixLoc, Best)) {
11614 case OR_Success:
11615 case OR_Deleted:
11616 break;
11617
11618 case OR_No_Viable_Function:
11619 Diag(UDSuffixLoc, diag::err_ovl_no_viable_function_in_call)
11620 << R.getLookupName();
11621 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11622 return ExprError();
11623
11624 case OR_Ambiguous:
11625 Diag(R.getNameLoc(), diag::err_ovl_ambiguous_call) << R.getLookupName();
11626 CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args);
11627 return ExprError();
11628 }
11629
11630 FunctionDecl *FD = Best->Function;
11631 ExprResult Fn = CreateFunctionRefExpr(*this, FD, Best->FoundDecl,
11632 HadMultipleCandidates,
11633 SuffixInfo.getLoc(),
11634 SuffixInfo.getInfo());
11635 if (Fn.isInvalid())
11636 return true;
11637
11638 // Check the argument types. This should almost always be a no-op, except
11639 // that array-to-pointer decay is applied to string literals.
11640 Expr *ConvArgs[2];
11641 for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
11642 ExprResult InputInit = PerformCopyInitialization(
11643 InitializedEntity::InitializeParameter(Context, FD->getParamDecl(ArgIdx)),
11644 SourceLocation(), Args[ArgIdx]);
11645 if (InputInit.isInvalid())
11646 return true;
11647 ConvArgs[ArgIdx] = InputInit.take();
11648 }
11649
11650 QualType ResultTy = FD->getResultType();
11651 ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11652 ResultTy = ResultTy.getNonLValueExprType(Context);
11653
11654 UserDefinedLiteral *UDL =
11655 new (Context) UserDefinedLiteral(Context, Fn.take(),
11656 llvm::makeArrayRef(ConvArgs, Args.size()),
11657 ResultTy, VK, LitEndLoc, UDSuffixLoc);
11658
11659 if (CheckCallReturnType(FD->getResultType(), UDSuffixLoc, UDL, FD))
11660 return ExprError();
11661
11662 if (CheckFunctionCall(FD, UDL, NULL))
11663 return ExprError();
11664
11665 return MaybeBindToTemporary(UDL);
11666 }
11667
11668 /// Build a call to 'begin' or 'end' for a C++11 for-range statement. If the
11669 /// given LookupResult is non-empty, it is assumed to describe a member which
11670 /// will be invoked. Otherwise, the function will be found via argument
11671 /// dependent lookup.
11672 /// CallExpr is set to a valid expression and FRS_Success returned on success,
11673 /// otherwise CallExpr is set to ExprError() and some non-success value
11674 /// is returned.
11675 Sema::ForRangeStatus
BuildForRangeBeginEndCall(Scope * S,SourceLocation Loc,SourceLocation RangeLoc,VarDecl * Decl,BeginEndFunction BEF,const DeclarationNameInfo & NameInfo,LookupResult & MemberLookup,OverloadCandidateSet * CandidateSet,Expr * Range,ExprResult * CallExpr)11676 Sema::BuildForRangeBeginEndCall(Scope *S, SourceLocation Loc,
11677 SourceLocation RangeLoc, VarDecl *Decl,
11678 BeginEndFunction BEF,
11679 const DeclarationNameInfo &NameInfo,
11680 LookupResult &MemberLookup,
11681 OverloadCandidateSet *CandidateSet,
11682 Expr *Range, ExprResult *CallExpr) {
11683 CandidateSet->clear();
11684 if (!MemberLookup.empty()) {
11685 ExprResult MemberRef =
11686 BuildMemberReferenceExpr(Range, Range->getType(), Loc,
11687 /*IsPtr=*/false, CXXScopeSpec(),
11688 /*TemplateKWLoc=*/SourceLocation(),
11689 /*FirstQualifierInScope=*/0,
11690 MemberLookup,
11691 /*TemplateArgs=*/0);
11692 if (MemberRef.isInvalid()) {
11693 *CallExpr = ExprError();
11694 Diag(Range->getLocStart(), diag::note_in_for_range)
11695 << RangeLoc << BEF << Range->getType();
11696 return FRS_DiagnosticIssued;
11697 }
11698 *CallExpr = ActOnCallExpr(S, MemberRef.get(), Loc, None, Loc, 0);
11699 if (CallExpr->isInvalid()) {
11700 *CallExpr = ExprError();
11701 Diag(Range->getLocStart(), diag::note_in_for_range)
11702 << RangeLoc << BEF << Range->getType();
11703 return FRS_DiagnosticIssued;
11704 }
11705 } else {
11706 UnresolvedSet<0> FoundNames;
11707 UnresolvedLookupExpr *Fn =
11708 UnresolvedLookupExpr::Create(Context, /*NamingClass=*/0,
11709 NestedNameSpecifierLoc(), NameInfo,
11710 /*NeedsADL=*/true, /*Overloaded=*/false,
11711 FoundNames.begin(), FoundNames.end());
11712
11713 bool CandidateSetError = buildOverloadedCallSet(S, Fn, Fn, Range, Loc,
11714 CandidateSet, CallExpr);
11715 if (CandidateSet->empty() || CandidateSetError) {
11716 *CallExpr = ExprError();
11717 return FRS_NoViableFunction;
11718 }
11719 OverloadCandidateSet::iterator Best;
11720 OverloadingResult OverloadResult =
11721 CandidateSet->BestViableFunction(*this, Fn->getLocStart(), Best);
11722
11723 if (OverloadResult == OR_No_Viable_Function) {
11724 *CallExpr = ExprError();
11725 return FRS_NoViableFunction;
11726 }
11727 *CallExpr = FinishOverloadedCallExpr(*this, S, Fn, Fn, Loc, Range,
11728 Loc, 0, CandidateSet, &Best,
11729 OverloadResult,
11730 /*AllowTypoCorrection=*/false);
11731 if (CallExpr->isInvalid() || OverloadResult != OR_Success) {
11732 *CallExpr = ExprError();
11733 Diag(Range->getLocStart(), diag::note_in_for_range)
11734 << RangeLoc << BEF << Range->getType();
11735 return FRS_DiagnosticIssued;
11736 }
11737 }
11738 return FRS_Success;
11739 }
11740
11741
11742 /// FixOverloadedFunctionReference - E is an expression that refers to
11743 /// a C++ overloaded function (possibly with some parentheses and
11744 /// perhaps a '&' around it). We have resolved the overloaded function
11745 /// to the function declaration Fn, so patch up the expression E to
11746 /// refer (possibly indirectly) to Fn. Returns the new expr.
FixOverloadedFunctionReference(Expr * E,DeclAccessPair Found,FunctionDecl * Fn)11747 Expr *Sema::FixOverloadedFunctionReference(Expr *E, DeclAccessPair Found,
11748 FunctionDecl *Fn) {
11749 if (ParenExpr *PE = dyn_cast<ParenExpr>(E)) {
11750 Expr *SubExpr = FixOverloadedFunctionReference(PE->getSubExpr(),
11751 Found, Fn);
11752 if (SubExpr == PE->getSubExpr())
11753 return PE;
11754
11755 return new (Context) ParenExpr(PE->getLParen(), PE->getRParen(), SubExpr);
11756 }
11757
11758 if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) {
11759 Expr *SubExpr = FixOverloadedFunctionReference(ICE->getSubExpr(),
11760 Found, Fn);
11761 assert(Context.hasSameType(ICE->getSubExpr()->getType(),
11762 SubExpr->getType()) &&
11763 "Implicit cast type cannot be determined from overload");
11764 assert(ICE->path_empty() && "fixing up hierarchy conversion?");
11765 if (SubExpr == ICE->getSubExpr())
11766 return ICE;
11767
11768 return ImplicitCastExpr::Create(Context, ICE->getType(),
11769 ICE->getCastKind(),
11770 SubExpr, 0,
11771 ICE->getValueKind());
11772 }
11773
11774 if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(E)) {
11775 assert(UnOp->getOpcode() == UO_AddrOf &&
11776 "Can only take the address of an overloaded function");
11777 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
11778 if (Method->isStatic()) {
11779 // Do nothing: static member functions aren't any different
11780 // from non-member functions.
11781 } else {
11782 // Fix the sub expression, which really has to be an
11783 // UnresolvedLookupExpr holding an overloaded member function
11784 // or template.
11785 Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(),
11786 Found, Fn);
11787 if (SubExpr == UnOp->getSubExpr())
11788 return UnOp;
11789
11790 assert(isa<DeclRefExpr>(SubExpr)
11791 && "fixed to something other than a decl ref");
11792 assert(cast<DeclRefExpr>(SubExpr)->getQualifier()
11793 && "fixed to a member ref with no nested name qualifier");
11794
11795 // We have taken the address of a pointer to member
11796 // function. Perform the computation here so that we get the
11797 // appropriate pointer to member type.
11798 QualType ClassType
11799 = Context.getTypeDeclType(cast<RecordDecl>(Method->getDeclContext()));
11800 QualType MemPtrType
11801 = Context.getMemberPointerType(Fn->getType(), ClassType.getTypePtr());
11802
11803 return new (Context) UnaryOperator(SubExpr, UO_AddrOf, MemPtrType,
11804 VK_RValue, OK_Ordinary,
11805 UnOp->getOperatorLoc());
11806 }
11807 }
11808 Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(),
11809 Found, Fn);
11810 if (SubExpr == UnOp->getSubExpr())
11811 return UnOp;
11812
11813 return new (Context) UnaryOperator(SubExpr, UO_AddrOf,
11814 Context.getPointerType(SubExpr->getType()),
11815 VK_RValue, OK_Ordinary,
11816 UnOp->getOperatorLoc());
11817 }
11818
11819 if (UnresolvedLookupExpr *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {
11820 // FIXME: avoid copy.
11821 TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
11822 if (ULE->hasExplicitTemplateArgs()) {
11823 ULE->copyTemplateArgumentsInto(TemplateArgsBuffer);
11824 TemplateArgs = &TemplateArgsBuffer;
11825 }
11826
11827 DeclRefExpr *DRE = DeclRefExpr::Create(Context,
11828 ULE->getQualifierLoc(),
11829 ULE->getTemplateKeywordLoc(),
11830 Fn,
11831 /*enclosing*/ false, // FIXME?
11832 ULE->getNameLoc(),
11833 Fn->getType(),
11834 VK_LValue,
11835 Found.getDecl(),
11836 TemplateArgs);
11837 MarkDeclRefReferenced(DRE);
11838 DRE->setHadMultipleCandidates(ULE->getNumDecls() > 1);
11839 return DRE;
11840 }
11841
11842 if (UnresolvedMemberExpr *MemExpr = dyn_cast<UnresolvedMemberExpr>(E)) {
11843 // FIXME: avoid copy.
11844 TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
11845 if (MemExpr->hasExplicitTemplateArgs()) {
11846 MemExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
11847 TemplateArgs = &TemplateArgsBuffer;
11848 }
11849
11850 Expr *Base;
11851
11852 // If we're filling in a static method where we used to have an
11853 // implicit member access, rewrite to a simple decl ref.
11854 if (MemExpr->isImplicitAccess()) {
11855 if (cast<CXXMethodDecl>(Fn)->isStatic()) {
11856 DeclRefExpr *DRE = DeclRefExpr::Create(Context,
11857 MemExpr->getQualifierLoc(),
11858 MemExpr->getTemplateKeywordLoc(),
11859 Fn,
11860 /*enclosing*/ false,
11861 MemExpr->getMemberLoc(),
11862 Fn->getType(),
11863 VK_LValue,
11864 Found.getDecl(),
11865 TemplateArgs);
11866 MarkDeclRefReferenced(DRE);
11867 DRE->setHadMultipleCandidates(MemExpr->getNumDecls() > 1);
11868 return DRE;
11869 } else {
11870 SourceLocation Loc = MemExpr->getMemberLoc();
11871 if (MemExpr->getQualifier())
11872 Loc = MemExpr->getQualifierLoc().getBeginLoc();
11873 CheckCXXThisCapture(Loc);
11874 Base = new (Context) CXXThisExpr(Loc,
11875 MemExpr->getBaseType(),
11876 /*isImplicit=*/true);
11877 }
11878 } else
11879 Base = MemExpr->getBase();
11880
11881 ExprValueKind valueKind;
11882 QualType type;
11883 if (cast<CXXMethodDecl>(Fn)->isStatic()) {
11884 valueKind = VK_LValue;
11885 type = Fn->getType();
11886 } else {
11887 valueKind = VK_RValue;
11888 type = Context.BoundMemberTy;
11889 }
11890
11891 MemberExpr *ME = MemberExpr::Create(Context, Base,
11892 MemExpr->isArrow(),
11893 MemExpr->getQualifierLoc(),
11894 MemExpr->getTemplateKeywordLoc(),
11895 Fn,
11896 Found,
11897 MemExpr->getMemberNameInfo(),
11898 TemplateArgs,
11899 type, valueKind, OK_Ordinary);
11900 ME->setHadMultipleCandidates(true);
11901 MarkMemberReferenced(ME);
11902 return ME;
11903 }
11904
11905 llvm_unreachable("Invalid reference to overloaded function");
11906 }
11907
FixOverloadedFunctionReference(ExprResult E,DeclAccessPair Found,FunctionDecl * Fn)11908 ExprResult Sema::FixOverloadedFunctionReference(ExprResult E,
11909 DeclAccessPair Found,
11910 FunctionDecl *Fn) {
11911 return Owned(FixOverloadedFunctionReference((Expr *)E.get(), Found, Fn));
11912 }
11913
11914 } // end namespace clang
11915