SemaOverload.cpp revision f5b132f7b373203eab7cf357b01f935bd88087bd
103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes//===--- SemaOverload.cpp - C++ Overloading ---------------------*- C++ -*-===//
203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes//
303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes//                     The LLVM Compiler Infrastructure
403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes//
503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes// This file is distributed under the University of Illinois Open Source
603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes// License. See LICENSE.TXT for details.
703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes//
803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes//===----------------------------------------------------------------------===//
903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes//
1003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes// This file provides Sema routines for C++ overloading.
1103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes//
1203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes//===----------------------------------------------------------------------===//
1303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
1403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/Sema/SemaInternal.h"
1503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/Sema/Lookup.h"
1603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/Sema/Initialization.h"
1703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/Sema/Template.h"
1803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/Sema/TemplateDeduction.h"
1903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/Basic/Diagnostic.h"
2003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/Lex/Preprocessor.h"
2103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/AST/ASTContext.h"
2203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/AST/CXXInheritance.h"
2303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/AST/DeclObjC.h"
2403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/AST/Expr.h"
2503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/AST/ExprCXX.h"
2603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/AST/ExprObjC.h"
2703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/AST/TypeOrdering.h"
2803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/Basic/PartialDiagnostic.h"
2903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "llvm/ADT/DenseSet.h"
3003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "llvm/ADT/SmallPtrSet.h"
3103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "llvm/ADT/SmallString.h"
3203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "llvm/ADT/STLExtras.h"
3303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include <algorithm>
3403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
3503333823c75a1c1887e923828113a1b0fd12020cElliott Hughesnamespace clang {
3603333823c75a1c1887e923828113a1b0fd12020cElliott Hughesusing namespace sema;
3703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
3803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// A convenience routine for creating a decayed reference to a
3903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// function.
4003333823c75a1c1887e923828113a1b0fd12020cElliott Hughesstatic ExprResult
4103333823c75a1c1887e923828113a1b0fd12020cElliott HughesCreateFunctionRefExpr(Sema &S, FunctionDecl *Fn, bool HadMultipleCandidates,
4203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes                      SourceLocation Loc = SourceLocation(),
4303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes                      const DeclarationNameLoc &LocInfo = DeclarationNameLoc()){
4403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  DeclRefExpr *DRE = new (S.Context) DeclRefExpr(Fn, false, Fn->getType(),
4503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes                                                 VK_LValue, Loc, LocInfo);
4603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  if (HadMultipleCandidates)
4703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    DRE->setHadMultipleCandidates(true);
4803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  ExprResult E = S.Owned(DRE);
4903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  E = S.DefaultFunctionArrayConversion(E.take());
5003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  if (E.isInvalid())
5103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    return ExprError();
5203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  return E;
5303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes}
5403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
5503333823c75a1c1887e923828113a1b0fd12020cElliott Hughesstatic bool IsStandardConversion(Sema &S, Expr* From, QualType ToType,
5603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes                                 bool InOverloadResolution,
5703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes                                 StandardConversionSequence &SCS,
5803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes                                 bool CStyle,
5903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes                                 bool AllowObjCWritebackConversion);
6003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
6103333823c75a1c1887e923828113a1b0fd12020cElliott Hughesstatic bool IsTransparentUnionStandardConversion(Sema &S, Expr* From,
6203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes                                                 QualType &ToType,
6303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes                                                 bool InOverloadResolution,
6403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes                                                 StandardConversionSequence &SCS,
6503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes                                                 bool CStyle);
6603333823c75a1c1887e923828113a1b0fd12020cElliott Hughesstatic OverloadingResult
6703333823c75a1c1887e923828113a1b0fd12020cElliott HughesIsUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
6803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes                        UserDefinedConversionSequence& User,
6903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes                        OverloadCandidateSet& Conversions,
7003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes                        bool AllowExplicit);
7103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
7203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
7303333823c75a1c1887e923828113a1b0fd12020cElliott Hughesstatic ImplicitConversionSequence::CompareKind
7403333823c75a1c1887e923828113a1b0fd12020cElliott HughesCompareStandardConversionSequences(Sema &S,
7503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes                                   const StandardConversionSequence& SCS1,
7603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes                                   const StandardConversionSequence& SCS2);
7703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
7803333823c75a1c1887e923828113a1b0fd12020cElliott Hughesstatic ImplicitConversionSequence::CompareKind
7903333823c75a1c1887e923828113a1b0fd12020cElliott HughesCompareQualificationConversions(Sema &S,
8003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes                                const StandardConversionSequence& SCS1,
8103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes                                const StandardConversionSequence& SCS2);
8203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
8303333823c75a1c1887e923828113a1b0fd12020cElliott Hughesstatic ImplicitConversionSequence::CompareKind
8403333823c75a1c1887e923828113a1b0fd12020cElliott HughesCompareDerivedToBaseConversions(Sema &S,
8503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes                                const StandardConversionSequence& SCS1,
8603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes                                const StandardConversionSequence& SCS2);
8703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
8803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
8903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
9003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// GetConversionCategory - Retrieve the implicit conversion
9103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// category corresponding to the given implicit conversion kind.
9203333823c75a1c1887e923828113a1b0fd12020cElliott HughesImplicitConversionCategory
9303333823c75a1c1887e923828113a1b0fd12020cElliott HughesGetConversionCategory(ImplicitConversionKind Kind) {
9403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  static const ImplicitConversionCategory
9503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    Category[(int)ICK_Num_Conversion_Kinds] = {
9603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICC_Identity,
9703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICC_Lvalue_Transformation,
9803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICC_Lvalue_Transformation,
9903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICC_Lvalue_Transformation,
10003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICC_Identity,
10103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICC_Qualification_Adjustment,
10203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICC_Promotion,
10303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICC_Promotion,
10403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICC_Promotion,
10503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICC_Conversion,
10603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICC_Conversion,
10703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICC_Conversion,
10803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICC_Conversion,
10903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICC_Conversion,
11003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICC_Conversion,
11103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICC_Conversion,
11203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICC_Conversion,
11303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICC_Conversion,
11403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICC_Conversion,
11503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICC_Conversion,
11603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICC_Conversion,
11703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICC_Conversion
11803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  };
11903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  return Category[(int)Kind];
12003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes}
12103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
12203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// GetConversionRank - Retrieve the implicit conversion rank
12303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// corresponding to the given implicit conversion kind.
12403333823c75a1c1887e923828113a1b0fd12020cElliott HughesImplicitConversionRank GetConversionRank(ImplicitConversionKind Kind) {
12503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  static const ImplicitConversionRank
12603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    Rank[(int)ICK_Num_Conversion_Kinds] = {
12703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICR_Exact_Match,
12803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICR_Exact_Match,
12903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICR_Exact_Match,
13003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICR_Exact_Match,
13103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICR_Exact_Match,
13203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICR_Exact_Match,
13303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICR_Promotion,
13403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICR_Promotion,
13503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICR_Promotion,
13603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICR_Conversion,
13703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICR_Conversion,
13803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICR_Conversion,
13903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICR_Conversion,
14003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICR_Conversion,
14103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICR_Conversion,
14203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICR_Conversion,
14303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICR_Conversion,
14403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICR_Conversion,
14503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICR_Conversion,
14603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICR_Conversion,
14703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICR_Complex_Real_Conversion,
14803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICR_Conversion,
14903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICR_Conversion,
15003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    ICR_Writeback_Conversion
15103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  };
15203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  return Rank[(int)Kind];
15303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes}
15403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
15503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// GetImplicitConversionName - Return the name of this kind of
15603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// implicit conversion.
15703333823c75a1c1887e923828113a1b0fd12020cElliott Hughesconst char* GetImplicitConversionName(ImplicitConversionKind Kind) {
15803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  static const char* const Name[(int)ICK_Num_Conversion_Kinds] = {
15903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    "No conversion",
16003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    "Lvalue-to-rvalue",
16103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    "Array-to-pointer",
16203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    "Function-to-pointer",
16303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    "Noreturn adjustment",
16403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    "Qualification",
16503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    "Integral promotion",
16603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    "Floating point promotion",
16703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    "Complex promotion",
16803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    "Integral conversion",
16903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    "Floating conversion",
17003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    "Complex conversion",
17103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    "Floating-integral conversion",
17203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    "Pointer conversion",
17303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    "Pointer-to-member conversion",
17403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    "Boolean conversion",
17503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    "Compatible-types conversion",
17603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    "Derived-to-base conversion",
17703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    "Vector conversion",
17803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    "Vector splat",
17903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    "Complex-real conversion",
18003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    "Block Pointer conversion",
18103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    "Transparent Union Conversion"
18203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    "Writeback conversion"
18303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  };
18403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  return Name[Kind];
18503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes}
18603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
18703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// StandardConversionSequence - Set the standard conversion
18803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// sequence to the identity conversion.
18903333823c75a1c1887e923828113a1b0fd12020cElliott Hughesvoid StandardConversionSequence::setAsIdentityConversion() {
19003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  First = ICK_Identity;
19103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  Second = ICK_Identity;
19203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  Third = ICK_Identity;
19303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  DeprecatedStringLiteralToCharPtr = false;
19403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  QualificationIncludesObjCLifetime = false;
19503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  ReferenceBinding = false;
19603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  DirectBinding = false;
19703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  IsLvalueReference = true;
19803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  BindsToFunctionLvalue = false;
19903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  BindsToRvalue = false;
20003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  BindsImplicitObjectArgumentWithoutRefQualifier = false;
20103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  ObjCLifetimeConversionBinding = false;
20203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  CopyConstructor = 0;
20303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes}
20403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
20503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// getRank - Retrieve the rank of this standard conversion sequence
20603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// (C++ 13.3.3.1.1p3). The rank is the largest rank of each of the
20703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// implicit conversions.
20803333823c75a1c1887e923828113a1b0fd12020cElliott HughesImplicitConversionRank StandardConversionSequence::getRank() const {
20903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  ImplicitConversionRank Rank = ICR_Exact_Match;
21003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  if  (GetConversionRank(First) > Rank)
21103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    Rank = GetConversionRank(First);
21203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  if  (GetConversionRank(Second) > Rank)
21303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    Rank = GetConversionRank(Second);
21403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  if  (GetConversionRank(Third) > Rank)
21503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    Rank = GetConversionRank(Third);
21603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  return Rank;
21703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes}
21803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
21903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// isPointerConversionToBool - Determines whether this conversion is
22003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// a conversion of a pointer or pointer-to-member to bool. This is
22103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// used as part of the ranking of standard conversion sequences
22203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// (C++ 13.3.3.2p4).
22303333823c75a1c1887e923828113a1b0fd12020cElliott Hughesbool StandardConversionSequence::isPointerConversionToBool() const {
22403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  // Note that FromType has not necessarily been transformed by the
22503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  // array-to-pointer or function-to-pointer implicit conversions, so
22603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  // check for their presence as well as checking whether FromType is
22703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  // a pointer.
22803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  if (getToType(1)->isBooleanType() &&
22903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes      (getFromType()->isPointerType() ||
23003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes       getFromType()->isObjCObjectPointerType() ||
23103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes       getFromType()->isBlockPointerType() ||
23203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes       getFromType()->isNullPtrType() ||
23303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes       First == ICK_Array_To_Pointer || First == ICK_Function_To_Pointer))
23403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    return true;
23503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
23603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  return false;
23703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes}
23803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
23903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// isPointerConversionToVoidPointer - Determines whether this
24003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// conversion is a conversion of a pointer to a void pointer. This is
24103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// used as part of the ranking of standard conversion sequences (C++
24203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// 13.3.3.2p4).
24303333823c75a1c1887e923828113a1b0fd12020cElliott Hughesbool
24403333823c75a1c1887e923828113a1b0fd12020cElliott HughesStandardConversionSequence::
24503333823c75a1c1887e923828113a1b0fd12020cElliott HughesisPointerConversionToVoidPointer(ASTContext& Context) const {
24603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  QualType FromType = getFromType();
24703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  QualType ToType = getToType(1);
24803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
24903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  // Note that FromType has not necessarily been transformed by the
25003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  // array-to-pointer implicit conversion, so check for its presence
25103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  // and redo the conversion to get a pointer.
25203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  if (First == ICK_Array_To_Pointer)
25303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    FromType = Context.getArrayDecayedType(FromType);
25403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
25503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  if (Second == ICK_Pointer_Conversion && FromType->isAnyPointerType())
25603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    if (const PointerType* ToPtrType = ToType->getAs<PointerType>())
25703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes      return ToPtrType->getPointeeType()->isVoidType();
25803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
25903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  return false;
26003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes}
26103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
26203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// Skip any implicit casts which could be either part of a narrowing conversion
26303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// or after one in an implicit conversion.
26403333823c75a1c1887e923828113a1b0fd12020cElliott Hughesstatic const Expr *IgnoreNarrowingConversion(const Expr *Converted) {
26503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  while (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(Converted)) {
26603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    switch (ICE->getCastKind()) {
26703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    case CK_NoOp:
26803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    case CK_IntegralCast:
26903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    case CK_IntegralToBoolean:
27003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    case CK_IntegralToFloating:
27103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    case CK_FloatingToIntegral:
27203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    case CK_FloatingToBoolean:
27303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    case CK_FloatingCast:
27403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes      Converted = ICE->getSubExpr();
27503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes      continue;
27603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
27703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    default:
27803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes      return Converted;
27903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    }
28003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  }
28103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
28203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  return Converted;
28303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes}
28403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
28503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// Check if this standard conversion sequence represents a narrowing
28603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// conversion, according to C++11 [dcl.init.list]p7.
28703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes///
28803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// \param Ctx  The AST context.
28903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// \param Converted  The result of applying this standard conversion sequence.
29003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// \param ConstantValue  If this is an NK_Constant_Narrowing conversion, the
29103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes///        value of the expression prior to the narrowing conversion.
29203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// \param ConstantType  If this is an NK_Constant_Narrowing conversion, the
29303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes///        type of the expression prior to the narrowing conversion.
29403333823c75a1c1887e923828113a1b0fd12020cElliott HughesNarrowingKind
29503333823c75a1c1887e923828113a1b0fd12020cElliott HughesStandardConversionSequence::getNarrowingKind(ASTContext &Ctx,
29603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes                                             const Expr *Converted,
29703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes                                             APValue &ConstantValue,
29803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes                                             QualType &ConstantType) const {
29903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  assert(Ctx.getLangOpts().CPlusPlus && "narrowing check outside C++");
30003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
30103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  // C++11 [dcl.init.list]p7:
30203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  //   A narrowing conversion is an implicit conversion ...
30303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  QualType FromType = getToType(0);
30403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  QualType ToType = getToType(1);
30503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  switch (Second) {
30603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  // -- from a floating-point type to an integer type, or
30703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  //
30803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  // -- from an integer type or unscoped enumeration type to a floating-point
30903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  //    type, except where the source is a constant expression and the actual
31003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  //    value after conversion will fit into the target type and will produce
31103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  //    the original value when converted back to the original type, or
31203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  case ICK_Floating_Integral:
31303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    if (FromType->isRealFloatingType() && ToType->isIntegralType(Ctx)) {
31403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes      return NK_Type_Narrowing;
31503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    } else if (FromType->isIntegralType(Ctx) && ToType->isRealFloatingType()) {
31603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes      llvm::APSInt IntConstantValue;
31703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes      const Expr *Initializer = IgnoreNarrowingConversion(Converted);
31803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes      if (Initializer &&
31903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes          Initializer->isIntegerConstantExpr(IntConstantValue, Ctx)) {
32003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes        // Convert the integer to the floating type.
32103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes        llvm::APFloat Result(Ctx.getFloatTypeSemantics(ToType));
32203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes        Result.convertFromAPInt(IntConstantValue, IntConstantValue.isSigned(),
32303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes                                llvm::APFloat::rmNearestTiesToEven);
32403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes        // And back.
32503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes        llvm::APSInt ConvertedValue = IntConstantValue;
32603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes        bool ignored;
32703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes        Result.convertToInteger(ConvertedValue,
32803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes                                llvm::APFloat::rmTowardZero, &ignored);
32903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes        // If the resulting value is different, this was a narrowing conversion.
33003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes        if (IntConstantValue != ConvertedValue) {
33103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes          ConstantValue = APValue(IntConstantValue);
33203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes          ConstantType = Initializer->getType();
33303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes          return NK_Constant_Narrowing;
33403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes        }
33503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes      } else {
33603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes        // Variables are always narrowings.
33703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes        return NK_Variable_Narrowing;
33803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes      }
33903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    }
34003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    return NK_Not_Narrowing;
34103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
34203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  // -- from long double to double or float, or from double to float, except
34303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  //    where the source is a constant expression and the actual value after
34403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  //    conversion is within the range of values that can be represented (even
34503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  //    if it cannot be represented exactly), or
34603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  case ICK_Floating_Conversion:
34703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    if (FromType->isRealFloatingType() && ToType->isRealFloatingType() &&
34803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes        Ctx.getFloatingTypeOrder(FromType, ToType) == 1) {
34903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes      // FromType is larger than ToType.
35003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes      const Expr *Initializer = IgnoreNarrowingConversion(Converted);
35103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes      if (Initializer->isCXX11ConstantExpr(Ctx, &ConstantValue)) {
35203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes        // Constant!
35303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes        assert(ConstantValue.isFloat());
35403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes        llvm::APFloat FloatVal = ConstantValue.getFloat();
35503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes        // Convert the source value into the target type.
35603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes        bool ignored;
35703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes        llvm::APFloat::opStatus ConvertStatus = FloatVal.convert(
35803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes          Ctx.getFloatTypeSemantics(ToType),
35903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes          llvm::APFloat::rmNearestTiesToEven, &ignored);
36003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes        // If there was no overflow, the source value is within the range of
36103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes        // values that can be represented.
36203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes        if (ConvertStatus & llvm::APFloat::opOverflow) {
36303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes          ConstantType = Initializer->getType();
36403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes          return NK_Constant_Narrowing;
36503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes        }
36603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes      } else {
36703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes        return NK_Variable_Narrowing;
36803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes      }
36903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    }
37003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes    return NK_Not_Narrowing;
37103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes
37203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  // -- from an integer type or unscoped enumeration type to an integer type
37303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  //    that cannot represent all the values of the original type, except where
37403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  //    the source is a constant expression and the actual value after
37503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  //    conversion will fit into the target type and will produce the original
37603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes  //    value when converted back to the original type.
377  case ICK_Boolean_Conversion:  // Bools are integers too.
378    if (!FromType->isIntegralOrUnscopedEnumerationType()) {
379      // Boolean conversions can be from pointers and pointers to members
380      // [conv.bool], and those aren't considered narrowing conversions.
381      return NK_Not_Narrowing;
382    }  // Otherwise, fall through to the integral case.
383  case ICK_Integral_Conversion: {
384    assert(FromType->isIntegralOrUnscopedEnumerationType());
385    assert(ToType->isIntegralOrUnscopedEnumerationType());
386    const bool FromSigned = FromType->isSignedIntegerOrEnumerationType();
387    const unsigned FromWidth = Ctx.getIntWidth(FromType);
388    const bool ToSigned = ToType->isSignedIntegerOrEnumerationType();
389    const unsigned ToWidth = Ctx.getIntWidth(ToType);
390
391    if (FromWidth > ToWidth ||
392        (FromWidth == ToWidth && FromSigned != ToSigned) ||
393        (FromSigned && !ToSigned)) {
394      // Not all values of FromType can be represented in ToType.
395      llvm::APSInt InitializerValue;
396      const Expr *Initializer = IgnoreNarrowingConversion(Converted);
397      if (!Initializer->isIntegerConstantExpr(InitializerValue, Ctx)) {
398        // Such conversions on variables are always narrowing.
399        return NK_Variable_Narrowing;
400      }
401      bool Narrowing = false;
402      if (FromWidth < ToWidth) {
403        // Negative -> unsigned is narrowing. Otherwise, more bits is never
404        // narrowing.
405        if (InitializerValue.isSigned() && InitializerValue.isNegative())
406          Narrowing = true;
407      } else {
408        // Add a bit to the InitializerValue so we don't have to worry about
409        // signed vs. unsigned comparisons.
410        InitializerValue = InitializerValue.extend(
411          InitializerValue.getBitWidth() + 1);
412        // Convert the initializer to and from the target width and signed-ness.
413        llvm::APSInt ConvertedValue = InitializerValue;
414        ConvertedValue = ConvertedValue.trunc(ToWidth);
415        ConvertedValue.setIsSigned(ToSigned);
416        ConvertedValue = ConvertedValue.extend(InitializerValue.getBitWidth());
417        ConvertedValue.setIsSigned(InitializerValue.isSigned());
418        // If the result is different, this was a narrowing conversion.
419        if (ConvertedValue != InitializerValue)
420          Narrowing = true;
421      }
422      if (Narrowing) {
423        ConstantType = Initializer->getType();
424        ConstantValue = APValue(InitializerValue);
425        return NK_Constant_Narrowing;
426      }
427    }
428    return NK_Not_Narrowing;
429  }
430
431  default:
432    // Other kinds of conversions are not narrowings.
433    return NK_Not_Narrowing;
434  }
435}
436
437/// DebugPrint - Print this standard conversion sequence to standard
438/// error. Useful for debugging overloading issues.
439void StandardConversionSequence::DebugPrint() const {
440  raw_ostream &OS = llvm::errs();
441  bool PrintedSomething = false;
442  if (First != ICK_Identity) {
443    OS << GetImplicitConversionName(First);
444    PrintedSomething = true;
445  }
446
447  if (Second != ICK_Identity) {
448    if (PrintedSomething) {
449      OS << " -> ";
450    }
451    OS << GetImplicitConversionName(Second);
452
453    if (CopyConstructor) {
454      OS << " (by copy constructor)";
455    } else if (DirectBinding) {
456      OS << " (direct reference binding)";
457    } else if (ReferenceBinding) {
458      OS << " (reference binding)";
459    }
460    PrintedSomething = true;
461  }
462
463  if (Third != ICK_Identity) {
464    if (PrintedSomething) {
465      OS << " -> ";
466    }
467    OS << GetImplicitConversionName(Third);
468    PrintedSomething = true;
469  }
470
471  if (!PrintedSomething) {
472    OS << "No conversions required";
473  }
474}
475
476/// DebugPrint - Print this user-defined conversion sequence to standard
477/// error. Useful for debugging overloading issues.
478void UserDefinedConversionSequence::DebugPrint() const {
479  raw_ostream &OS = llvm::errs();
480  if (Before.First || Before.Second || Before.Third) {
481    Before.DebugPrint();
482    OS << " -> ";
483  }
484  if (ConversionFunction)
485    OS << '\'' << *ConversionFunction << '\'';
486  else
487    OS << "aggregate initialization";
488  if (After.First || After.Second || After.Third) {
489    OS << " -> ";
490    After.DebugPrint();
491  }
492}
493
494/// DebugPrint - Print this implicit conversion sequence to standard
495/// error. Useful for debugging overloading issues.
496void ImplicitConversionSequence::DebugPrint() const {
497  raw_ostream &OS = llvm::errs();
498  switch (ConversionKind) {
499  case StandardConversion:
500    OS << "Standard conversion: ";
501    Standard.DebugPrint();
502    break;
503  case UserDefinedConversion:
504    OS << "User-defined conversion: ";
505    UserDefined.DebugPrint();
506    break;
507  case EllipsisConversion:
508    OS << "Ellipsis conversion";
509    break;
510  case AmbiguousConversion:
511    OS << "Ambiguous conversion";
512    break;
513  case BadConversion:
514    OS << "Bad conversion";
515    break;
516  }
517
518  OS << "\n";
519}
520
521void AmbiguousConversionSequence::construct() {
522  new (&conversions()) ConversionSet();
523}
524
525void AmbiguousConversionSequence::destruct() {
526  conversions().~ConversionSet();
527}
528
529void
530AmbiguousConversionSequence::copyFrom(const AmbiguousConversionSequence &O) {
531  FromTypePtr = O.FromTypePtr;
532  ToTypePtr = O.ToTypePtr;
533  new (&conversions()) ConversionSet(O.conversions());
534}
535
536namespace {
537  // Structure used by OverloadCandidate::DeductionFailureInfo to store
538  // template parameter and template argument information.
539  struct DFIParamWithArguments {
540    TemplateParameter Param;
541    TemplateArgument FirstArg;
542    TemplateArgument SecondArg;
543  };
544}
545
546/// \brief Convert from Sema's representation of template deduction information
547/// to the form used in overload-candidate information.
548OverloadCandidate::DeductionFailureInfo
549static MakeDeductionFailureInfo(ASTContext &Context,
550                                Sema::TemplateDeductionResult TDK,
551                                TemplateDeductionInfo &Info) {
552  OverloadCandidate::DeductionFailureInfo Result;
553  Result.Result = static_cast<unsigned>(TDK);
554  Result.HasDiagnostic = false;
555  Result.Data = 0;
556  switch (TDK) {
557  case Sema::TDK_Success:
558  case Sema::TDK_Invalid:
559  case Sema::TDK_InstantiationDepth:
560  case Sema::TDK_TooManyArguments:
561  case Sema::TDK_TooFewArguments:
562    break;
563
564  case Sema::TDK_Incomplete:
565  case Sema::TDK_InvalidExplicitArguments:
566    Result.Data = Info.Param.getOpaqueValue();
567    break;
568
569  case Sema::TDK_Inconsistent:
570  case Sema::TDK_Underqualified: {
571    // FIXME: Should allocate from normal heap so that we can free this later.
572    DFIParamWithArguments *Saved = new (Context) DFIParamWithArguments;
573    Saved->Param = Info.Param;
574    Saved->FirstArg = Info.FirstArg;
575    Saved->SecondArg = Info.SecondArg;
576    Result.Data = Saved;
577    break;
578  }
579
580  case Sema::TDK_SubstitutionFailure:
581    Result.Data = Info.take();
582    if (Info.hasSFINAEDiagnostic()) {
583      PartialDiagnosticAt *Diag = new (Result.Diagnostic) PartialDiagnosticAt(
584          SourceLocation(), PartialDiagnostic::NullDiagnostic());
585      Info.takeSFINAEDiagnostic(*Diag);
586      Result.HasDiagnostic = true;
587    }
588    break;
589
590  case Sema::TDK_NonDeducedMismatch:
591  case Sema::TDK_FailedOverloadResolution:
592    break;
593  }
594
595  return Result;
596}
597
598void OverloadCandidate::DeductionFailureInfo::Destroy() {
599  switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
600  case Sema::TDK_Success:
601  case Sema::TDK_Invalid:
602  case Sema::TDK_InstantiationDepth:
603  case Sema::TDK_Incomplete:
604  case Sema::TDK_TooManyArguments:
605  case Sema::TDK_TooFewArguments:
606  case Sema::TDK_InvalidExplicitArguments:
607    break;
608
609  case Sema::TDK_Inconsistent:
610  case Sema::TDK_Underqualified:
611    // FIXME: Destroy the data?
612    Data = 0;
613    break;
614
615  case Sema::TDK_SubstitutionFailure:
616    // FIXME: Destroy the template argument list?
617    Data = 0;
618    if (PartialDiagnosticAt *Diag = getSFINAEDiagnostic()) {
619      Diag->~PartialDiagnosticAt();
620      HasDiagnostic = false;
621    }
622    break;
623
624  // Unhandled
625  case Sema::TDK_NonDeducedMismatch:
626  case Sema::TDK_FailedOverloadResolution:
627    break;
628  }
629}
630
631PartialDiagnosticAt *
632OverloadCandidate::DeductionFailureInfo::getSFINAEDiagnostic() {
633  if (HasDiagnostic)
634    return static_cast<PartialDiagnosticAt*>(static_cast<void*>(Diagnostic));
635  return 0;
636}
637
638TemplateParameter
639OverloadCandidate::DeductionFailureInfo::getTemplateParameter() {
640  switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
641  case Sema::TDK_Success:
642  case Sema::TDK_Invalid:
643  case Sema::TDK_InstantiationDepth:
644  case Sema::TDK_TooManyArguments:
645  case Sema::TDK_TooFewArguments:
646  case Sema::TDK_SubstitutionFailure:
647    return TemplateParameter();
648
649  case Sema::TDK_Incomplete:
650  case Sema::TDK_InvalidExplicitArguments:
651    return TemplateParameter::getFromOpaqueValue(Data);
652
653  case Sema::TDK_Inconsistent:
654  case Sema::TDK_Underqualified:
655    return static_cast<DFIParamWithArguments*>(Data)->Param;
656
657  // Unhandled
658  case Sema::TDK_NonDeducedMismatch:
659  case Sema::TDK_FailedOverloadResolution:
660    break;
661  }
662
663  return TemplateParameter();
664}
665
666TemplateArgumentList *
667OverloadCandidate::DeductionFailureInfo::getTemplateArgumentList() {
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_Incomplete:
675    case Sema::TDK_InvalidExplicitArguments:
676    case Sema::TDK_Inconsistent:
677    case Sema::TDK_Underqualified:
678      return 0;
679
680    case Sema::TDK_SubstitutionFailure:
681      return static_cast<TemplateArgumentList*>(Data);
682
683    // Unhandled
684    case Sema::TDK_NonDeducedMismatch:
685    case Sema::TDK_FailedOverloadResolution:
686      break;
687  }
688
689  return 0;
690}
691
692const TemplateArgument *OverloadCandidate::DeductionFailureInfo::getFirstArg() {
693  switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
694  case Sema::TDK_Success:
695  case Sema::TDK_Invalid:
696  case Sema::TDK_InstantiationDepth:
697  case Sema::TDK_Incomplete:
698  case Sema::TDK_TooManyArguments:
699  case Sema::TDK_TooFewArguments:
700  case Sema::TDK_InvalidExplicitArguments:
701  case Sema::TDK_SubstitutionFailure:
702    return 0;
703
704  case Sema::TDK_Inconsistent:
705  case Sema::TDK_Underqualified:
706    return &static_cast<DFIParamWithArguments*>(Data)->FirstArg;
707
708  // Unhandled
709  case Sema::TDK_NonDeducedMismatch:
710  case Sema::TDK_FailedOverloadResolution:
711    break;
712  }
713
714  return 0;
715}
716
717const TemplateArgument *
718OverloadCandidate::DeductionFailureInfo::getSecondArg() {
719  switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
720  case Sema::TDK_Success:
721  case Sema::TDK_Invalid:
722  case Sema::TDK_InstantiationDepth:
723  case Sema::TDK_Incomplete:
724  case Sema::TDK_TooManyArguments:
725  case Sema::TDK_TooFewArguments:
726  case Sema::TDK_InvalidExplicitArguments:
727  case Sema::TDK_SubstitutionFailure:
728    return 0;
729
730  case Sema::TDK_Inconsistent:
731  case Sema::TDK_Underqualified:
732    return &static_cast<DFIParamWithArguments*>(Data)->SecondArg;
733
734  // Unhandled
735  case Sema::TDK_NonDeducedMismatch:
736  case Sema::TDK_FailedOverloadResolution:
737    break;
738  }
739
740  return 0;
741}
742
743void OverloadCandidateSet::destroyCandidates() {
744  for (iterator i = begin(), e = end(); i != e; ++i) {
745    for (unsigned ii = 0, ie = i->NumConversions; ii != ie; ++ii)
746      i->Conversions[ii].~ImplicitConversionSequence();
747    if (!i->Viable && i->FailureKind == ovl_fail_bad_deduction)
748      i->DeductionFailure.Destroy();
749  }
750}
751
752void OverloadCandidateSet::clear() {
753  destroyCandidates();
754  NumInlineSequences = 0;
755  Candidates.clear();
756  Functions.clear();
757}
758
759namespace {
760  class UnbridgedCastsSet {
761    struct Entry {
762      Expr **Addr;
763      Expr *Saved;
764    };
765    SmallVector<Entry, 2> Entries;
766
767  public:
768    void save(Sema &S, Expr *&E) {
769      assert(E->hasPlaceholderType(BuiltinType::ARCUnbridgedCast));
770      Entry entry = { &E, E };
771      Entries.push_back(entry);
772      E = S.stripARCUnbridgedCast(E);
773    }
774
775    void restore() {
776      for (SmallVectorImpl<Entry>::iterator
777             i = Entries.begin(), e = Entries.end(); i != e; ++i)
778        *i->Addr = i->Saved;
779    }
780  };
781}
782
783/// checkPlaceholderForOverload - Do any interesting placeholder-like
784/// preprocessing on the given expression.
785///
786/// \param unbridgedCasts a collection to which to add unbridged casts;
787///   without this, they will be immediately diagnosed as errors
788///
789/// Return true on unrecoverable error.
790static bool checkPlaceholderForOverload(Sema &S, Expr *&E,
791                                        UnbridgedCastsSet *unbridgedCasts = 0) {
792  if (const BuiltinType *placeholder =  E->getType()->getAsPlaceholderType()) {
793    // We can't handle overloaded expressions here because overload
794    // resolution might reasonably tweak them.
795    if (placeholder->getKind() == BuiltinType::Overload) return false;
796
797    // If the context potentially accepts unbridged ARC casts, strip
798    // the unbridged cast and add it to the collection for later restoration.
799    if (placeholder->getKind() == BuiltinType::ARCUnbridgedCast &&
800        unbridgedCasts) {
801      unbridgedCasts->save(S, E);
802      return false;
803    }
804
805    // Go ahead and check everything else.
806    ExprResult result = S.CheckPlaceholderExpr(E);
807    if (result.isInvalid())
808      return true;
809
810    E = result.take();
811    return false;
812  }
813
814  // Nothing to do.
815  return false;
816}
817
818/// checkArgPlaceholdersForOverload - Check a set of call operands for
819/// placeholders.
820static bool checkArgPlaceholdersForOverload(Sema &S, Expr **args,
821                                            unsigned numArgs,
822                                            UnbridgedCastsSet &unbridged) {
823  for (unsigned i = 0; i != numArgs; ++i)
824    if (checkPlaceholderForOverload(S, args[i], &unbridged))
825      return true;
826
827  return false;
828}
829
830// IsOverload - Determine whether the given New declaration is an
831// overload of the declarations in Old. This routine returns false if
832// New and Old cannot be overloaded, e.g., if New has the same
833// signature as some function in Old (C++ 1.3.10) or if the Old
834// declarations aren't functions (or function templates) at all. When
835// it does return false, MatchedDecl will point to the decl that New
836// cannot be overloaded with.  This decl may be a UsingShadowDecl on
837// top of the underlying declaration.
838//
839// Example: Given the following input:
840//
841//   void f(int, float); // #1
842//   void f(int, int); // #2
843//   int f(int, int); // #3
844//
845// When we process #1, there is no previous declaration of "f",
846// so IsOverload will not be used.
847//
848// When we process #2, Old contains only the FunctionDecl for #1.  By
849// comparing the parameter types, we see that #1 and #2 are overloaded
850// (since they have different signatures), so this routine returns
851// false; MatchedDecl is unchanged.
852//
853// When we process #3, Old is an overload set containing #1 and #2. We
854// compare the signatures of #3 to #1 (they're overloaded, so we do
855// nothing) and then #3 to #2. Since the signatures of #3 and #2 are
856// identical (return types of functions are not part of the
857// signature), IsOverload returns false and MatchedDecl will be set to
858// point to the FunctionDecl for #2.
859//
860// 'NewIsUsingShadowDecl' indicates that 'New' is being introduced
861// into a class by a using declaration.  The rules for whether to hide
862// shadow declarations ignore some properties which otherwise figure
863// into a function template's signature.
864Sema::OverloadKind
865Sema::CheckOverload(Scope *S, FunctionDecl *New, const LookupResult &Old,
866                    NamedDecl *&Match, bool NewIsUsingDecl) {
867  for (LookupResult::iterator I = Old.begin(), E = Old.end();
868         I != E; ++I) {
869    NamedDecl *OldD = *I;
870
871    bool OldIsUsingDecl = false;
872    if (isa<UsingShadowDecl>(OldD)) {
873      OldIsUsingDecl = true;
874
875      // We can always introduce two using declarations into the same
876      // context, even if they have identical signatures.
877      if (NewIsUsingDecl) continue;
878
879      OldD = cast<UsingShadowDecl>(OldD)->getTargetDecl();
880    }
881
882    // If either declaration was introduced by a using declaration,
883    // we'll need to use slightly different rules for matching.
884    // Essentially, these rules are the normal rules, except that
885    // function templates hide function templates with different
886    // return types or template parameter lists.
887    bool UseMemberUsingDeclRules =
888      (OldIsUsingDecl || NewIsUsingDecl) && CurContext->isRecord();
889
890    if (FunctionTemplateDecl *OldT = dyn_cast<FunctionTemplateDecl>(OldD)) {
891      if (!IsOverload(New, OldT->getTemplatedDecl(), UseMemberUsingDeclRules)) {
892        if (UseMemberUsingDeclRules && OldIsUsingDecl) {
893          HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I));
894          continue;
895        }
896
897        Match = *I;
898        return Ovl_Match;
899      }
900    } else if (FunctionDecl *OldF = dyn_cast<FunctionDecl>(OldD)) {
901      if (!IsOverload(New, OldF, UseMemberUsingDeclRules)) {
902        if (UseMemberUsingDeclRules && OldIsUsingDecl) {
903          HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I));
904          continue;
905        }
906
907        Match = *I;
908        return Ovl_Match;
909      }
910    } else if (isa<UsingDecl>(OldD)) {
911      // We can overload with these, which can show up when doing
912      // redeclaration checks for UsingDecls.
913      assert(Old.getLookupKind() == LookupUsingDeclName);
914    } else if (isa<TagDecl>(OldD)) {
915      // We can always overload with tags by hiding them.
916    } else if (isa<UnresolvedUsingValueDecl>(OldD)) {
917      // Optimistically assume that an unresolved using decl will
918      // overload; if it doesn't, we'll have to diagnose during
919      // template instantiation.
920    } else {
921      // (C++ 13p1):
922      //   Only function declarations can be overloaded; object and type
923      //   declarations cannot be overloaded.
924      Match = *I;
925      return Ovl_NonFunction;
926    }
927  }
928
929  return Ovl_Overload;
930}
931
932bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old,
933                      bool UseUsingDeclRules) {
934  // If both of the functions are extern "C", then they are not
935  // overloads.
936  if (Old->isExternC() && New->isExternC())
937    return false;
938
939  FunctionTemplateDecl *OldTemplate = Old->getDescribedFunctionTemplate();
940  FunctionTemplateDecl *NewTemplate = New->getDescribedFunctionTemplate();
941
942  // C++ [temp.fct]p2:
943  //   A function template can be overloaded with other function templates
944  //   and with normal (non-template) functions.
945  if ((OldTemplate == 0) != (NewTemplate == 0))
946    return true;
947
948  // Is the function New an overload of the function Old?
949  QualType OldQType = Context.getCanonicalType(Old->getType());
950  QualType NewQType = Context.getCanonicalType(New->getType());
951
952  // Compare the signatures (C++ 1.3.10) of the two functions to
953  // determine whether they are overloads. If we find any mismatch
954  // in the signature, they are overloads.
955
956  // If either of these functions is a K&R-style function (no
957  // prototype), then we consider them to have matching signatures.
958  if (isa<FunctionNoProtoType>(OldQType.getTypePtr()) ||
959      isa<FunctionNoProtoType>(NewQType.getTypePtr()))
960    return false;
961
962  const FunctionProtoType* OldType = cast<FunctionProtoType>(OldQType);
963  const FunctionProtoType* NewType = cast<FunctionProtoType>(NewQType);
964
965  // The signature of a function includes the types of its
966  // parameters (C++ 1.3.10), which includes the presence or absence
967  // of the ellipsis; see C++ DR 357).
968  if (OldQType != NewQType &&
969      (OldType->getNumArgs() != NewType->getNumArgs() ||
970       OldType->isVariadic() != NewType->isVariadic() ||
971       !FunctionArgTypesAreEqual(OldType, NewType)))
972    return true;
973
974  // C++ [temp.over.link]p4:
975  //   The signature of a function template consists of its function
976  //   signature, its return type and its template parameter list. The names
977  //   of the template parameters are significant only for establishing the
978  //   relationship between the template parameters and the rest of the
979  //   signature.
980  //
981  // We check the return type and template parameter lists for function
982  // templates first; the remaining checks follow.
983  //
984  // However, we don't consider either of these when deciding whether
985  // a member introduced by a shadow declaration is hidden.
986  if (!UseUsingDeclRules && NewTemplate &&
987      (!TemplateParameterListsAreEqual(NewTemplate->getTemplateParameters(),
988                                       OldTemplate->getTemplateParameters(),
989                                       false, TPL_TemplateMatch) ||
990       OldType->getResultType() != NewType->getResultType()))
991    return true;
992
993  // If the function is a class member, its signature includes the
994  // cv-qualifiers (if any) and ref-qualifier (if any) on the function itself.
995  //
996  // As part of this, also check whether one of the member functions
997  // is static, in which case they are not overloads (C++
998  // 13.1p2). While not part of the definition of the signature,
999  // this check is important to determine whether these functions
1000  // can be overloaded.
1001  CXXMethodDecl* OldMethod = dyn_cast<CXXMethodDecl>(Old);
1002  CXXMethodDecl* NewMethod = dyn_cast<CXXMethodDecl>(New);
1003  if (OldMethod && NewMethod &&
1004      !OldMethod->isStatic() && !NewMethod->isStatic() &&
1005      (OldMethod->getTypeQualifiers() != NewMethod->getTypeQualifiers() ||
1006       OldMethod->getRefQualifier() != NewMethod->getRefQualifier())) {
1007    if (!UseUsingDeclRules &&
1008        OldMethod->getRefQualifier() != NewMethod->getRefQualifier() &&
1009        (OldMethod->getRefQualifier() == RQ_None ||
1010         NewMethod->getRefQualifier() == RQ_None)) {
1011      // C++0x [over.load]p2:
1012      //   - Member function declarations with the same name and the same
1013      //     parameter-type-list as well as member function template
1014      //     declarations with the same name, the same parameter-type-list, and
1015      //     the same template parameter lists cannot be overloaded if any of
1016      //     them, but not all, have a ref-qualifier (8.3.5).
1017      Diag(NewMethod->getLocation(), diag::err_ref_qualifier_overload)
1018        << NewMethod->getRefQualifier() << OldMethod->getRefQualifier();
1019      Diag(OldMethod->getLocation(), diag::note_previous_declaration);
1020    }
1021
1022    return true;
1023  }
1024
1025  // The signatures match; this is not an overload.
1026  return false;
1027}
1028
1029/// \brief Checks availability of the function depending on the current
1030/// function context. Inside an unavailable function, unavailability is ignored.
1031///
1032/// \returns true if \arg FD is unavailable and current context is inside
1033/// an available function, false otherwise.
1034bool Sema::isFunctionConsideredUnavailable(FunctionDecl *FD) {
1035  return FD->isUnavailable() && !cast<Decl>(CurContext)->isUnavailable();
1036}
1037
1038/// \brief Tries a user-defined conversion from From to ToType.
1039///
1040/// Produces an implicit conversion sequence for when a standard conversion
1041/// is not an option. See TryImplicitConversion for more information.
1042static ImplicitConversionSequence
1043TryUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
1044                         bool SuppressUserConversions,
1045                         bool AllowExplicit,
1046                         bool InOverloadResolution,
1047                         bool CStyle,
1048                         bool AllowObjCWritebackConversion) {
1049  ImplicitConversionSequence ICS;
1050
1051  if (SuppressUserConversions) {
1052    // We're not in the case above, so there is no conversion that
1053    // we can perform.
1054    ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1055    return ICS;
1056  }
1057
1058  // Attempt user-defined conversion.
1059  OverloadCandidateSet Conversions(From->getExprLoc());
1060  OverloadingResult UserDefResult
1061    = IsUserDefinedConversion(S, From, ToType, ICS.UserDefined, Conversions,
1062                              AllowExplicit);
1063
1064  if (UserDefResult == OR_Success) {
1065    ICS.setUserDefined();
1066    // C++ [over.ics.user]p4:
1067    //   A conversion of an expression of class type to the same class
1068    //   type is given Exact Match rank, and a conversion of an
1069    //   expression of class type to a base class of that type is
1070    //   given Conversion rank, in spite of the fact that a copy
1071    //   constructor (i.e., a user-defined conversion function) is
1072    //   called for those cases.
1073    if (CXXConstructorDecl *Constructor
1074          = dyn_cast<CXXConstructorDecl>(ICS.UserDefined.ConversionFunction)) {
1075      QualType FromCanon
1076        = S.Context.getCanonicalType(From->getType().getUnqualifiedType());
1077      QualType ToCanon
1078        = S.Context.getCanonicalType(ToType).getUnqualifiedType();
1079      if (Constructor->isCopyConstructor() &&
1080          (FromCanon == ToCanon || S.IsDerivedFrom(FromCanon, ToCanon))) {
1081        // Turn this into a "standard" conversion sequence, so that it
1082        // gets ranked with standard conversion sequences.
1083        ICS.setStandard();
1084        ICS.Standard.setAsIdentityConversion();
1085        ICS.Standard.setFromType(From->getType());
1086        ICS.Standard.setAllToTypes(ToType);
1087        ICS.Standard.CopyConstructor = Constructor;
1088        if (ToCanon != FromCanon)
1089          ICS.Standard.Second = ICK_Derived_To_Base;
1090      }
1091    }
1092
1093    // C++ [over.best.ics]p4:
1094    //   However, when considering the argument of a user-defined
1095    //   conversion function that is a candidate by 13.3.1.3 when
1096    //   invoked for the copying of the temporary in the second step
1097    //   of a class copy-initialization, or by 13.3.1.4, 13.3.1.5, or
1098    //   13.3.1.6 in all cases, only standard conversion sequences and
1099    //   ellipsis conversion sequences are allowed.
1100    if (SuppressUserConversions && ICS.isUserDefined()) {
1101      ICS.setBad(BadConversionSequence::suppressed_user, From, ToType);
1102    }
1103  } else if (UserDefResult == OR_Ambiguous && !SuppressUserConversions) {
1104    ICS.setAmbiguous();
1105    ICS.Ambiguous.setFromType(From->getType());
1106    ICS.Ambiguous.setToType(ToType);
1107    for (OverloadCandidateSet::iterator Cand = Conversions.begin();
1108         Cand != Conversions.end(); ++Cand)
1109      if (Cand->Viable)
1110        ICS.Ambiguous.addConversion(Cand->Function);
1111  } else {
1112    ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1113  }
1114
1115  return ICS;
1116}
1117
1118/// TryImplicitConversion - Attempt to perform an implicit conversion
1119/// from the given expression (Expr) to the given type (ToType). This
1120/// function returns an implicit conversion sequence that can be used
1121/// to perform the initialization. Given
1122///
1123///   void f(float f);
1124///   void g(int i) { f(i); }
1125///
1126/// this routine would produce an implicit conversion sequence to
1127/// describe the initialization of f from i, which will be a standard
1128/// conversion sequence containing an lvalue-to-rvalue conversion (C++
1129/// 4.1) followed by a floating-integral conversion (C++ 4.9).
1130//
1131/// Note that this routine only determines how the conversion can be
1132/// performed; it does not actually perform the conversion. As such,
1133/// it will not produce any diagnostics if no conversion is available,
1134/// but will instead return an implicit conversion sequence of kind
1135/// "BadConversion".
1136///
1137/// If @p SuppressUserConversions, then user-defined conversions are
1138/// not permitted.
1139/// If @p AllowExplicit, then explicit user-defined conversions are
1140/// permitted.
1141///
1142/// \param AllowObjCWritebackConversion Whether we allow the Objective-C
1143/// writeback conversion, which allows __autoreleasing id* parameters to
1144/// be initialized with __strong id* or __weak id* arguments.
1145static ImplicitConversionSequence
1146TryImplicitConversion(Sema &S, Expr *From, QualType ToType,
1147                      bool SuppressUserConversions,
1148                      bool AllowExplicit,
1149                      bool InOverloadResolution,
1150                      bool CStyle,
1151                      bool AllowObjCWritebackConversion) {
1152  ImplicitConversionSequence ICS;
1153  if (IsStandardConversion(S, From, ToType, InOverloadResolution,
1154                           ICS.Standard, CStyle, AllowObjCWritebackConversion)){
1155    ICS.setStandard();
1156    return ICS;
1157  }
1158
1159  if (!S.getLangOpts().CPlusPlus) {
1160    ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1161    return ICS;
1162  }
1163
1164  // C++ [over.ics.user]p4:
1165  //   A conversion of an expression of class type to the same class
1166  //   type is given Exact Match rank, and a conversion of an
1167  //   expression of class type to a base class of that type is
1168  //   given Conversion rank, in spite of the fact that a copy/move
1169  //   constructor (i.e., a user-defined conversion function) is
1170  //   called for those cases.
1171  QualType FromType = From->getType();
1172  if (ToType->getAs<RecordType>() && FromType->getAs<RecordType>() &&
1173      (S.Context.hasSameUnqualifiedType(FromType, ToType) ||
1174       S.IsDerivedFrom(FromType, ToType))) {
1175    ICS.setStandard();
1176    ICS.Standard.setAsIdentityConversion();
1177    ICS.Standard.setFromType(FromType);
1178    ICS.Standard.setAllToTypes(ToType);
1179
1180    // We don't actually check at this point whether there is a valid
1181    // copy/move constructor, since overloading just assumes that it
1182    // exists. When we actually perform initialization, we'll find the
1183    // appropriate constructor to copy the returned object, if needed.
1184    ICS.Standard.CopyConstructor = 0;
1185
1186    // Determine whether this is considered a derived-to-base conversion.
1187    if (!S.Context.hasSameUnqualifiedType(FromType, ToType))
1188      ICS.Standard.Second = ICK_Derived_To_Base;
1189
1190    return ICS;
1191  }
1192
1193  return TryUserDefinedConversion(S, From, ToType, SuppressUserConversions,
1194                                  AllowExplicit, InOverloadResolution, CStyle,
1195                                  AllowObjCWritebackConversion);
1196}
1197
1198ImplicitConversionSequence
1199Sema::TryImplicitConversion(Expr *From, QualType ToType,
1200                            bool SuppressUserConversions,
1201                            bool AllowExplicit,
1202                            bool InOverloadResolution,
1203                            bool CStyle,
1204                            bool AllowObjCWritebackConversion) {
1205  return clang::TryImplicitConversion(*this, From, ToType,
1206                                      SuppressUserConversions, AllowExplicit,
1207                                      InOverloadResolution, CStyle,
1208                                      AllowObjCWritebackConversion);
1209}
1210
1211/// PerformImplicitConversion - Perform an implicit conversion of the
1212/// expression From to the type ToType. Returns the
1213/// converted expression. Flavor is the kind of conversion we're
1214/// performing, used in the error message. If @p AllowExplicit,
1215/// explicit user-defined conversions are permitted.
1216ExprResult
1217Sema::PerformImplicitConversion(Expr *From, QualType ToType,
1218                                AssignmentAction Action, bool AllowExplicit) {
1219  ImplicitConversionSequence ICS;
1220  return PerformImplicitConversion(From, ToType, Action, AllowExplicit, ICS);
1221}
1222
1223ExprResult
1224Sema::PerformImplicitConversion(Expr *From, QualType ToType,
1225                                AssignmentAction Action, bool AllowExplicit,
1226                                ImplicitConversionSequence& ICS) {
1227  if (checkPlaceholderForOverload(*this, From))
1228    return ExprError();
1229
1230  // Objective-C ARC: Determine whether we will allow the writeback conversion.
1231  bool AllowObjCWritebackConversion
1232    = getLangOpts().ObjCAutoRefCount &&
1233      (Action == AA_Passing || Action == AA_Sending);
1234
1235  ICS = clang::TryImplicitConversion(*this, From, ToType,
1236                                     /*SuppressUserConversions=*/false,
1237                                     AllowExplicit,
1238                                     /*InOverloadResolution=*/false,
1239                                     /*CStyle=*/false,
1240                                     AllowObjCWritebackConversion);
1241  return PerformImplicitConversion(From, ToType, ICS, Action);
1242}
1243
1244/// \brief Determine whether the conversion from FromType to ToType is a valid
1245/// conversion that strips "noreturn" off the nested function type.
1246bool Sema::IsNoReturnConversion(QualType FromType, QualType ToType,
1247                                QualType &ResultTy) {
1248  if (Context.hasSameUnqualifiedType(FromType, ToType))
1249    return false;
1250
1251  // Permit the conversion F(t __attribute__((noreturn))) -> F(t)
1252  // where F adds one of the following at most once:
1253  //   - a pointer
1254  //   - a member pointer
1255  //   - a block pointer
1256  CanQualType CanTo = Context.getCanonicalType(ToType);
1257  CanQualType CanFrom = Context.getCanonicalType(FromType);
1258  Type::TypeClass TyClass = CanTo->getTypeClass();
1259  if (TyClass != CanFrom->getTypeClass()) return false;
1260  if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto) {
1261    if (TyClass == Type::Pointer) {
1262      CanTo = CanTo.getAs<PointerType>()->getPointeeType();
1263      CanFrom = CanFrom.getAs<PointerType>()->getPointeeType();
1264    } else if (TyClass == Type::BlockPointer) {
1265      CanTo = CanTo.getAs<BlockPointerType>()->getPointeeType();
1266      CanFrom = CanFrom.getAs<BlockPointerType>()->getPointeeType();
1267    } else if (TyClass == Type::MemberPointer) {
1268      CanTo = CanTo.getAs<MemberPointerType>()->getPointeeType();
1269      CanFrom = CanFrom.getAs<MemberPointerType>()->getPointeeType();
1270    } else {
1271      return false;
1272    }
1273
1274    TyClass = CanTo->getTypeClass();
1275    if (TyClass != CanFrom->getTypeClass()) return false;
1276    if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto)
1277      return false;
1278  }
1279
1280  const FunctionType *FromFn = cast<FunctionType>(CanFrom);
1281  FunctionType::ExtInfo EInfo = FromFn->getExtInfo();
1282  if (!EInfo.getNoReturn()) return false;
1283
1284  FromFn = Context.adjustFunctionType(FromFn, EInfo.withNoReturn(false));
1285  assert(QualType(FromFn, 0).isCanonical());
1286  if (QualType(FromFn, 0) != CanTo) return false;
1287
1288  ResultTy = ToType;
1289  return true;
1290}
1291
1292/// \brief Determine whether the conversion from FromType to ToType is a valid
1293/// vector conversion.
1294///
1295/// \param ICK Will be set to the vector conversion kind, if this is a vector
1296/// conversion.
1297static bool IsVectorConversion(ASTContext &Context, QualType FromType,
1298                               QualType ToType, ImplicitConversionKind &ICK) {
1299  // We need at least one of these types to be a vector type to have a vector
1300  // conversion.
1301  if (!ToType->isVectorType() && !FromType->isVectorType())
1302    return false;
1303
1304  // Identical types require no conversions.
1305  if (Context.hasSameUnqualifiedType(FromType, ToType))
1306    return false;
1307
1308  // There are no conversions between extended vector types, only identity.
1309  if (ToType->isExtVectorType()) {
1310    // There are no conversions between extended vector types other than the
1311    // identity conversion.
1312    if (FromType->isExtVectorType())
1313      return false;
1314
1315    // Vector splat from any arithmetic type to a vector.
1316    if (FromType->isArithmeticType()) {
1317      ICK = ICK_Vector_Splat;
1318      return true;
1319    }
1320  }
1321
1322  // We can perform the conversion between vector types in the following cases:
1323  // 1)vector types are equivalent AltiVec and GCC vector types
1324  // 2)lax vector conversions are permitted and the vector types are of the
1325  //   same size
1326  if (ToType->isVectorType() && FromType->isVectorType()) {
1327    if (Context.areCompatibleVectorTypes(FromType, ToType) ||
1328        (Context.getLangOpts().LaxVectorConversions &&
1329         (Context.getTypeSize(FromType) == Context.getTypeSize(ToType)))) {
1330      ICK = ICK_Vector_Conversion;
1331      return true;
1332    }
1333  }
1334
1335  return false;
1336}
1337
1338static bool tryAtomicConversion(Sema &S, Expr *From, QualType ToType,
1339                                bool InOverloadResolution,
1340                                StandardConversionSequence &SCS,
1341                                bool CStyle);
1342
1343/// IsStandardConversion - Determines whether there is a standard
1344/// conversion sequence (C++ [conv], C++ [over.ics.scs]) from the
1345/// expression From to the type ToType. Standard conversion sequences
1346/// only consider non-class types; for conversions that involve class
1347/// types, use TryImplicitConversion. If a conversion exists, SCS will
1348/// contain the standard conversion sequence required to perform this
1349/// conversion and this routine will return true. Otherwise, this
1350/// routine will return false and the value of SCS is unspecified.
1351static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType,
1352                                 bool InOverloadResolution,
1353                                 StandardConversionSequence &SCS,
1354                                 bool CStyle,
1355                                 bool AllowObjCWritebackConversion) {
1356  QualType FromType = From->getType();
1357
1358  // Standard conversions (C++ [conv])
1359  SCS.setAsIdentityConversion();
1360  SCS.DeprecatedStringLiteralToCharPtr = false;
1361  SCS.IncompatibleObjC = false;
1362  SCS.setFromType(FromType);
1363  SCS.CopyConstructor = 0;
1364
1365  // There are no standard conversions for class types in C++, so
1366  // abort early. When overloading in C, however, we do permit
1367  if (FromType->isRecordType() || ToType->isRecordType()) {
1368    if (S.getLangOpts().CPlusPlus)
1369      return false;
1370
1371    // When we're overloading in C, we allow, as standard conversions,
1372  }
1373
1374  // The first conversion can be an lvalue-to-rvalue conversion,
1375  // array-to-pointer conversion, or function-to-pointer conversion
1376  // (C++ 4p1).
1377
1378  if (FromType == S.Context.OverloadTy) {
1379    DeclAccessPair AccessPair;
1380    if (FunctionDecl *Fn
1381          = S.ResolveAddressOfOverloadedFunction(From, ToType, false,
1382                                                 AccessPair)) {
1383      // We were able to resolve the address of the overloaded function,
1384      // so we can convert to the type of that function.
1385      FromType = Fn->getType();
1386
1387      // we can sometimes resolve &foo<int> regardless of ToType, so check
1388      // if the type matches (identity) or we are converting to bool
1389      if (!S.Context.hasSameUnqualifiedType(
1390                      S.ExtractUnqualifiedFunctionType(ToType), FromType)) {
1391        QualType resultTy;
1392        // if the function type matches except for [[noreturn]], it's ok
1393        if (!S.IsNoReturnConversion(FromType,
1394              S.ExtractUnqualifiedFunctionType(ToType), resultTy))
1395          // otherwise, only a boolean conversion is standard
1396          if (!ToType->isBooleanType())
1397            return false;
1398      }
1399
1400      // Check if the "from" expression is taking the address of an overloaded
1401      // function and recompute the FromType accordingly. Take advantage of the
1402      // fact that non-static member functions *must* have such an address-of
1403      // expression.
1404      CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn);
1405      if (Method && !Method->isStatic()) {
1406        assert(isa<UnaryOperator>(From->IgnoreParens()) &&
1407               "Non-unary operator on non-static member address");
1408        assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode()
1409               == UO_AddrOf &&
1410               "Non-address-of operator on non-static member address");
1411        const Type *ClassType
1412          = S.Context.getTypeDeclType(Method->getParent()).getTypePtr();
1413        FromType = S.Context.getMemberPointerType(FromType, ClassType);
1414      } else if (isa<UnaryOperator>(From->IgnoreParens())) {
1415        assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode() ==
1416               UO_AddrOf &&
1417               "Non-address-of operator for overloaded function expression");
1418        FromType = S.Context.getPointerType(FromType);
1419      }
1420
1421      // Check that we've computed the proper type after overload resolution.
1422      assert(S.Context.hasSameType(
1423        FromType,
1424        S.FixOverloadedFunctionReference(From, AccessPair, Fn)->getType()));
1425    } else {
1426      return false;
1427    }
1428  }
1429  // Lvalue-to-rvalue conversion (C++11 4.1):
1430  //   A glvalue (3.10) of a non-function, non-array type T can
1431  //   be converted to a prvalue.
1432  bool argIsLValue = From->isGLValue();
1433  if (argIsLValue &&
1434      !FromType->isFunctionType() && !FromType->isArrayType() &&
1435      S.Context.getCanonicalType(FromType) != S.Context.OverloadTy) {
1436    SCS.First = ICK_Lvalue_To_Rvalue;
1437
1438    // C11 6.3.2.1p2:
1439    //   ... if the lvalue has atomic type, the value has the non-atomic version
1440    //   of the type of the lvalue ...
1441    if (const AtomicType *Atomic = FromType->getAs<AtomicType>())
1442      FromType = Atomic->getValueType();
1443
1444    // If T is a non-class type, the type of the rvalue is the
1445    // cv-unqualified version of T. Otherwise, the type of the rvalue
1446    // is T (C++ 4.1p1). C++ can't get here with class types; in C, we
1447    // just strip the qualifiers because they don't matter.
1448    FromType = FromType.getUnqualifiedType();
1449  } else if (FromType->isArrayType()) {
1450    // Array-to-pointer conversion (C++ 4.2)
1451    SCS.First = ICK_Array_To_Pointer;
1452
1453    // An lvalue or rvalue of type "array of N T" or "array of unknown
1454    // bound of T" can be converted to an rvalue of type "pointer to
1455    // T" (C++ 4.2p1).
1456    FromType = S.Context.getArrayDecayedType(FromType);
1457
1458    if (S.IsStringLiteralToNonConstPointerConversion(From, ToType)) {
1459      // This conversion is deprecated. (C++ D.4).
1460      SCS.DeprecatedStringLiteralToCharPtr = true;
1461
1462      // For the purpose of ranking in overload resolution
1463      // (13.3.3.1.1), this conversion is considered an
1464      // array-to-pointer conversion followed by a qualification
1465      // conversion (4.4). (C++ 4.2p2)
1466      SCS.Second = ICK_Identity;
1467      SCS.Third = ICK_Qualification;
1468      SCS.QualificationIncludesObjCLifetime = false;
1469      SCS.setAllToTypes(FromType);
1470      return true;
1471    }
1472  } else if (FromType->isFunctionType() && argIsLValue) {
1473    // Function-to-pointer conversion (C++ 4.3).
1474    SCS.First = ICK_Function_To_Pointer;
1475
1476    // An lvalue of function type T can be converted to an rvalue of
1477    // type "pointer to T." The result is a pointer to the
1478    // function. (C++ 4.3p1).
1479    FromType = S.Context.getPointerType(FromType);
1480  } else {
1481    // We don't require any conversions for the first step.
1482    SCS.First = ICK_Identity;
1483  }
1484  SCS.setToType(0, FromType);
1485
1486  // The second conversion can be an integral promotion, floating
1487  // point promotion, integral conversion, floating point conversion,
1488  // floating-integral conversion, pointer conversion,
1489  // pointer-to-member conversion, or boolean conversion (C++ 4p1).
1490  // For overloading in C, this can also be a "compatible-type"
1491  // conversion.
1492  bool IncompatibleObjC = false;
1493  ImplicitConversionKind SecondICK = ICK_Identity;
1494  if (S.Context.hasSameUnqualifiedType(FromType, ToType)) {
1495    // The unqualified versions of the types are the same: there's no
1496    // conversion to do.
1497    SCS.Second = ICK_Identity;
1498  } else if (S.IsIntegralPromotion(From, FromType, ToType)) {
1499    // Integral promotion (C++ 4.5).
1500    SCS.Second = ICK_Integral_Promotion;
1501    FromType = ToType.getUnqualifiedType();
1502  } else if (S.IsFloatingPointPromotion(FromType, ToType)) {
1503    // Floating point promotion (C++ 4.6).
1504    SCS.Second = ICK_Floating_Promotion;
1505    FromType = ToType.getUnqualifiedType();
1506  } else if (S.IsComplexPromotion(FromType, ToType)) {
1507    // Complex promotion (Clang extension)
1508    SCS.Second = ICK_Complex_Promotion;
1509    FromType = ToType.getUnqualifiedType();
1510  } else if (ToType->isBooleanType() &&
1511             (FromType->isArithmeticType() ||
1512              FromType->isAnyPointerType() ||
1513              FromType->isBlockPointerType() ||
1514              FromType->isMemberPointerType() ||
1515              FromType->isNullPtrType())) {
1516    // Boolean conversions (C++ 4.12).
1517    SCS.Second = ICK_Boolean_Conversion;
1518    FromType = S.Context.BoolTy;
1519  } else if (FromType->isIntegralOrUnscopedEnumerationType() &&
1520             ToType->isIntegralType(S.Context)) {
1521    // Integral conversions (C++ 4.7).
1522    SCS.Second = ICK_Integral_Conversion;
1523    FromType = ToType.getUnqualifiedType();
1524  } else if (FromType->isAnyComplexType() && ToType->isComplexType()) {
1525    // Complex conversions (C99 6.3.1.6)
1526    SCS.Second = ICK_Complex_Conversion;
1527    FromType = ToType.getUnqualifiedType();
1528  } else if ((FromType->isAnyComplexType() && ToType->isArithmeticType()) ||
1529             (ToType->isAnyComplexType() && FromType->isArithmeticType())) {
1530    // Complex-real conversions (C99 6.3.1.7)
1531    SCS.Second = ICK_Complex_Real;
1532    FromType = ToType.getUnqualifiedType();
1533  } else if (FromType->isRealFloatingType() && ToType->isRealFloatingType()) {
1534    // Floating point conversions (C++ 4.8).
1535    SCS.Second = ICK_Floating_Conversion;
1536    FromType = ToType.getUnqualifiedType();
1537  } else if ((FromType->isRealFloatingType() &&
1538              ToType->isIntegralType(S.Context)) ||
1539             (FromType->isIntegralOrUnscopedEnumerationType() &&
1540              ToType->isRealFloatingType())) {
1541    // Floating-integral conversions (C++ 4.9).
1542    SCS.Second = ICK_Floating_Integral;
1543    FromType = ToType.getUnqualifiedType();
1544  } else if (S.IsBlockPointerConversion(FromType, ToType, FromType)) {
1545    SCS.Second = ICK_Block_Pointer_Conversion;
1546  } else if (AllowObjCWritebackConversion &&
1547             S.isObjCWritebackConversion(FromType, ToType, FromType)) {
1548    SCS.Second = ICK_Writeback_Conversion;
1549  } else if (S.IsPointerConversion(From, FromType, ToType, InOverloadResolution,
1550                                   FromType, IncompatibleObjC)) {
1551    // Pointer conversions (C++ 4.10).
1552    SCS.Second = ICK_Pointer_Conversion;
1553    SCS.IncompatibleObjC = IncompatibleObjC;
1554    FromType = FromType.getUnqualifiedType();
1555  } else if (S.IsMemberPointerConversion(From, FromType, ToType,
1556                                         InOverloadResolution, FromType)) {
1557    // Pointer to member conversions (4.11).
1558    SCS.Second = ICK_Pointer_Member;
1559  } else if (IsVectorConversion(S.Context, FromType, ToType, SecondICK)) {
1560    SCS.Second = SecondICK;
1561    FromType = ToType.getUnqualifiedType();
1562  } else if (!S.getLangOpts().CPlusPlus &&
1563             S.Context.typesAreCompatible(ToType, FromType)) {
1564    // Compatible conversions (Clang extension for C function overloading)
1565    SCS.Second = ICK_Compatible_Conversion;
1566    FromType = ToType.getUnqualifiedType();
1567  } else if (S.IsNoReturnConversion(FromType, ToType, FromType)) {
1568    // Treat a conversion that strips "noreturn" as an identity conversion.
1569    SCS.Second = ICK_NoReturn_Adjustment;
1570  } else if (IsTransparentUnionStandardConversion(S, From, ToType,
1571                                             InOverloadResolution,
1572                                             SCS, CStyle)) {
1573    SCS.Second = ICK_TransparentUnionConversion;
1574    FromType = ToType;
1575  } else if (tryAtomicConversion(S, From, ToType, InOverloadResolution, SCS,
1576                                 CStyle)) {
1577    // tryAtomicConversion has updated the standard conversion sequence
1578    // appropriately.
1579    return true;
1580  } else {
1581    // No second conversion required.
1582    SCS.Second = ICK_Identity;
1583  }
1584  SCS.setToType(1, FromType);
1585
1586  QualType CanonFrom;
1587  QualType CanonTo;
1588  // The third conversion can be a qualification conversion (C++ 4p1).
1589  bool ObjCLifetimeConversion;
1590  if (S.IsQualificationConversion(FromType, ToType, CStyle,
1591                                  ObjCLifetimeConversion)) {
1592    SCS.Third = ICK_Qualification;
1593    SCS.QualificationIncludesObjCLifetime = ObjCLifetimeConversion;
1594    FromType = ToType;
1595    CanonFrom = S.Context.getCanonicalType(FromType);
1596    CanonTo = S.Context.getCanonicalType(ToType);
1597  } else {
1598    // No conversion required
1599    SCS.Third = ICK_Identity;
1600
1601    // C++ [over.best.ics]p6:
1602    //   [...] Any difference in top-level cv-qualification is
1603    //   subsumed by the initialization itself and does not constitute
1604    //   a conversion. [...]
1605    CanonFrom = S.Context.getCanonicalType(FromType);
1606    CanonTo = S.Context.getCanonicalType(ToType);
1607    if (CanonFrom.getLocalUnqualifiedType()
1608                                       == CanonTo.getLocalUnqualifiedType() &&
1609        (CanonFrom.getLocalCVRQualifiers() != CanonTo.getLocalCVRQualifiers()
1610         || CanonFrom.getObjCGCAttr() != CanonTo.getObjCGCAttr()
1611         || CanonFrom.getObjCLifetime() != CanonTo.getObjCLifetime())) {
1612      FromType = ToType;
1613      CanonFrom = CanonTo;
1614    }
1615  }
1616  SCS.setToType(2, FromType);
1617
1618  // If we have not converted the argument type to the parameter type,
1619  // this is a bad conversion sequence.
1620  if (CanonFrom != CanonTo)
1621    return false;
1622
1623  return true;
1624}
1625
1626static bool
1627IsTransparentUnionStandardConversion(Sema &S, Expr* From,
1628                                     QualType &ToType,
1629                                     bool InOverloadResolution,
1630                                     StandardConversionSequence &SCS,
1631                                     bool CStyle) {
1632
1633  const RecordType *UT = ToType->getAsUnionType();
1634  if (!UT || !UT->getDecl()->hasAttr<TransparentUnionAttr>())
1635    return false;
1636  // The field to initialize within the transparent union.
1637  RecordDecl *UD = UT->getDecl();
1638  // It's compatible if the expression matches any of the fields.
1639  for (RecordDecl::field_iterator it = UD->field_begin(),
1640       itend = UD->field_end();
1641       it != itend; ++it) {
1642    if (IsStandardConversion(S, From, it->getType(), InOverloadResolution, SCS,
1643                             CStyle, /*ObjCWritebackConversion=*/false)) {
1644      ToType = it->getType();
1645      return true;
1646    }
1647  }
1648  return false;
1649}
1650
1651/// IsIntegralPromotion - Determines whether the conversion from the
1652/// expression From (whose potentially-adjusted type is FromType) to
1653/// ToType is an integral promotion (C++ 4.5). If so, returns true and
1654/// sets PromotedType to the promoted type.
1655bool Sema::IsIntegralPromotion(Expr *From, QualType FromType, QualType ToType) {
1656  const BuiltinType *To = ToType->getAs<BuiltinType>();
1657  // All integers are built-in.
1658  if (!To) {
1659    return false;
1660  }
1661
1662  // An rvalue of type char, signed char, unsigned char, short int, or
1663  // unsigned short int can be converted to an rvalue of type int if
1664  // int can represent all the values of the source type; otherwise,
1665  // the source rvalue can be converted to an rvalue of type unsigned
1666  // int (C++ 4.5p1).
1667  if (FromType->isPromotableIntegerType() && !FromType->isBooleanType() &&
1668      !FromType->isEnumeralType()) {
1669    if (// We can promote any signed, promotable integer type to an int
1670        (FromType->isSignedIntegerType() ||
1671         // We can promote any unsigned integer type whose size is
1672         // less than int to an int.
1673         (!FromType->isSignedIntegerType() &&
1674          Context.getTypeSize(FromType) < Context.getTypeSize(ToType)))) {
1675      return To->getKind() == BuiltinType::Int;
1676    }
1677
1678    return To->getKind() == BuiltinType::UInt;
1679  }
1680
1681  // C++11 [conv.prom]p3:
1682  //   A prvalue of an unscoped enumeration type whose underlying type is not
1683  //   fixed (7.2) can be converted to an rvalue a prvalue of the first of the
1684  //   following types that can represent all the values of the enumeration
1685  //   (i.e., the values in the range bmin to bmax as described in 7.2): int,
1686  //   unsigned int, long int, unsigned long int, long long int, or unsigned
1687  //   long long int. If none of the types in that list can represent all the
1688  //   values of the enumeration, an rvalue a prvalue of an unscoped enumeration
1689  //   type can be converted to an rvalue a prvalue of the extended integer type
1690  //   with lowest integer conversion rank (4.13) greater than the rank of long
1691  //   long in which all the values of the enumeration can be represented. If
1692  //   there are two such extended types, the signed one is chosen.
1693  // C++11 [conv.prom]p4:
1694  //   A prvalue of an unscoped enumeration type whose underlying type is fixed
1695  //   can be converted to a prvalue of its underlying type. Moreover, if
1696  //   integral promotion can be applied to its underlying type, a prvalue of an
1697  //   unscoped enumeration type whose underlying type is fixed can also be
1698  //   converted to a prvalue of the promoted underlying type.
1699  if (const EnumType *FromEnumType = FromType->getAs<EnumType>()) {
1700    // C++0x 7.2p9: Note that this implicit enum to int conversion is not
1701    // provided for a scoped enumeration.
1702    if (FromEnumType->getDecl()->isScoped())
1703      return false;
1704
1705    // We can perform an integral promotion to the underlying type of the enum,
1706    // even if that's not the promoted type.
1707    if (FromEnumType->getDecl()->isFixed()) {
1708      QualType Underlying = FromEnumType->getDecl()->getIntegerType();
1709      return Context.hasSameUnqualifiedType(Underlying, ToType) ||
1710             IsIntegralPromotion(From, Underlying, ToType);
1711    }
1712
1713    // We have already pre-calculated the promotion type, so this is trivial.
1714    if (ToType->isIntegerType() &&
1715        !RequireCompleteType(From->getLocStart(), FromType, 0))
1716      return Context.hasSameUnqualifiedType(ToType,
1717                                FromEnumType->getDecl()->getPromotionType());
1718  }
1719
1720  // C++0x [conv.prom]p2:
1721  //   A prvalue of type char16_t, char32_t, or wchar_t (3.9.1) can be converted
1722  //   to an rvalue a prvalue of the first of the following types that can
1723  //   represent all the values of its underlying type: int, unsigned int,
1724  //   long int, unsigned long int, long long int, or unsigned long long int.
1725  //   If none of the types in that list can represent all the values of its
1726  //   underlying type, an rvalue a prvalue of type char16_t, char32_t,
1727  //   or wchar_t can be converted to an rvalue a prvalue of its underlying
1728  //   type.
1729  if (FromType->isAnyCharacterType() && !FromType->isCharType() &&
1730      ToType->isIntegerType()) {
1731    // Determine whether the type we're converting from is signed or
1732    // unsigned.
1733    bool FromIsSigned = FromType->isSignedIntegerType();
1734    uint64_t FromSize = Context.getTypeSize(FromType);
1735
1736    // The types we'll try to promote to, in the appropriate
1737    // order. Try each of these types.
1738    QualType PromoteTypes[6] = {
1739      Context.IntTy, Context.UnsignedIntTy,
1740      Context.LongTy, Context.UnsignedLongTy ,
1741      Context.LongLongTy, Context.UnsignedLongLongTy
1742    };
1743    for (int Idx = 0; Idx < 6; ++Idx) {
1744      uint64_t ToSize = Context.getTypeSize(PromoteTypes[Idx]);
1745      if (FromSize < ToSize ||
1746          (FromSize == ToSize &&
1747           FromIsSigned == PromoteTypes[Idx]->isSignedIntegerType())) {
1748        // We found the type that we can promote to. If this is the
1749        // type we wanted, we have a promotion. Otherwise, no
1750        // promotion.
1751        return Context.hasSameUnqualifiedType(ToType, PromoteTypes[Idx]);
1752      }
1753    }
1754  }
1755
1756  // An rvalue for an integral bit-field (9.6) can be converted to an
1757  // rvalue of type int if int can represent all the values of the
1758  // bit-field; otherwise, it can be converted to unsigned int if
1759  // unsigned int can represent all the values of the bit-field. If
1760  // the bit-field is larger yet, no integral promotion applies to
1761  // it. If the bit-field has an enumerated type, it is treated as any
1762  // other value of that type for promotion purposes (C++ 4.5p3).
1763  // FIXME: We should delay checking of bit-fields until we actually perform the
1764  // conversion.
1765  using llvm::APSInt;
1766  if (From)
1767    if (FieldDecl *MemberDecl = From->getBitField()) {
1768      APSInt BitWidth;
1769      if (FromType->isIntegralType(Context) &&
1770          MemberDecl->getBitWidth()->isIntegerConstantExpr(BitWidth, Context)) {
1771        APSInt ToSize(BitWidth.getBitWidth(), BitWidth.isUnsigned());
1772        ToSize = Context.getTypeSize(ToType);
1773
1774        // Are we promoting to an int from a bitfield that fits in an int?
1775        if (BitWidth < ToSize ||
1776            (FromType->isSignedIntegerType() && BitWidth <= ToSize)) {
1777          return To->getKind() == BuiltinType::Int;
1778        }
1779
1780        // Are we promoting to an unsigned int from an unsigned bitfield
1781        // that fits into an unsigned int?
1782        if (FromType->isUnsignedIntegerType() && BitWidth <= ToSize) {
1783          return To->getKind() == BuiltinType::UInt;
1784        }
1785
1786        return false;
1787      }
1788    }
1789
1790  // An rvalue of type bool can be converted to an rvalue of type int,
1791  // with false becoming zero and true becoming one (C++ 4.5p4).
1792  if (FromType->isBooleanType() && To->getKind() == BuiltinType::Int) {
1793    return true;
1794  }
1795
1796  return false;
1797}
1798
1799/// IsFloatingPointPromotion - Determines whether the conversion from
1800/// FromType to ToType is a floating point promotion (C++ 4.6). If so,
1801/// returns true and sets PromotedType to the promoted type.
1802bool Sema::IsFloatingPointPromotion(QualType FromType, QualType ToType) {
1803  if (const BuiltinType *FromBuiltin = FromType->getAs<BuiltinType>())
1804    if (const BuiltinType *ToBuiltin = ToType->getAs<BuiltinType>()) {
1805      /// An rvalue of type float can be converted to an rvalue of type
1806      /// double. (C++ 4.6p1).
1807      if (FromBuiltin->getKind() == BuiltinType::Float &&
1808          ToBuiltin->getKind() == BuiltinType::Double)
1809        return true;
1810
1811      // C99 6.3.1.5p1:
1812      //   When a float is promoted to double or long double, or a
1813      //   double is promoted to long double [...].
1814      if (!getLangOpts().CPlusPlus &&
1815          (FromBuiltin->getKind() == BuiltinType::Float ||
1816           FromBuiltin->getKind() == BuiltinType::Double) &&
1817          (ToBuiltin->getKind() == BuiltinType::LongDouble))
1818        return true;
1819
1820      // Half can be promoted to float.
1821      if (FromBuiltin->getKind() == BuiltinType::Half &&
1822          ToBuiltin->getKind() == BuiltinType::Float)
1823        return true;
1824    }
1825
1826  return false;
1827}
1828
1829/// \brief Determine if a conversion is a complex promotion.
1830///
1831/// A complex promotion is defined as a complex -> complex conversion
1832/// where the conversion between the underlying real types is a
1833/// floating-point or integral promotion.
1834bool Sema::IsComplexPromotion(QualType FromType, QualType ToType) {
1835  const ComplexType *FromComplex = FromType->getAs<ComplexType>();
1836  if (!FromComplex)
1837    return false;
1838
1839  const ComplexType *ToComplex = ToType->getAs<ComplexType>();
1840  if (!ToComplex)
1841    return false;
1842
1843  return IsFloatingPointPromotion(FromComplex->getElementType(),
1844                                  ToComplex->getElementType()) ||
1845    IsIntegralPromotion(0, FromComplex->getElementType(),
1846                        ToComplex->getElementType());
1847}
1848
1849/// BuildSimilarlyQualifiedPointerType - In a pointer conversion from
1850/// the pointer type FromPtr to a pointer to type ToPointee, with the
1851/// same type qualifiers as FromPtr has on its pointee type. ToType,
1852/// if non-empty, will be a pointer to ToType that may or may not have
1853/// the right set of qualifiers on its pointee.
1854///
1855static QualType
1856BuildSimilarlyQualifiedPointerType(const Type *FromPtr,
1857                                   QualType ToPointee, QualType ToType,
1858                                   ASTContext &Context,
1859                                   bool StripObjCLifetime = false) {
1860  assert((FromPtr->getTypeClass() == Type::Pointer ||
1861          FromPtr->getTypeClass() == Type::ObjCObjectPointer) &&
1862         "Invalid similarly-qualified pointer type");
1863
1864  /// Conversions to 'id' subsume cv-qualifier conversions.
1865  if (ToType->isObjCIdType() || ToType->isObjCQualifiedIdType())
1866    return ToType.getUnqualifiedType();
1867
1868  QualType CanonFromPointee
1869    = Context.getCanonicalType(FromPtr->getPointeeType());
1870  QualType CanonToPointee = Context.getCanonicalType(ToPointee);
1871  Qualifiers Quals = CanonFromPointee.getQualifiers();
1872
1873  if (StripObjCLifetime)
1874    Quals.removeObjCLifetime();
1875
1876  // Exact qualifier match -> return the pointer type we're converting to.
1877  if (CanonToPointee.getLocalQualifiers() == Quals) {
1878    // ToType is exactly what we need. Return it.
1879    if (!ToType.isNull())
1880      return ToType.getUnqualifiedType();
1881
1882    // Build a pointer to ToPointee. It has the right qualifiers
1883    // already.
1884    if (isa<ObjCObjectPointerType>(ToType))
1885      return Context.getObjCObjectPointerType(ToPointee);
1886    return Context.getPointerType(ToPointee);
1887  }
1888
1889  // Just build a canonical type that has the right qualifiers.
1890  QualType QualifiedCanonToPointee
1891    = Context.getQualifiedType(CanonToPointee.getLocalUnqualifiedType(), Quals);
1892
1893  if (isa<ObjCObjectPointerType>(ToType))
1894    return Context.getObjCObjectPointerType(QualifiedCanonToPointee);
1895  return Context.getPointerType(QualifiedCanonToPointee);
1896}
1897
1898static bool isNullPointerConstantForConversion(Expr *Expr,
1899                                               bool InOverloadResolution,
1900                                               ASTContext &Context) {
1901  // Handle value-dependent integral null pointer constants correctly.
1902  // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#903
1903  if (Expr->isValueDependent() && !Expr->isTypeDependent() &&
1904      Expr->getType()->isIntegerType() && !Expr->getType()->isEnumeralType())
1905    return !InOverloadResolution;
1906
1907  return Expr->isNullPointerConstant(Context,
1908                    InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
1909                                        : Expr::NPC_ValueDependentIsNull);
1910}
1911
1912/// IsPointerConversion - Determines whether the conversion of the
1913/// expression From, which has the (possibly adjusted) type FromType,
1914/// can be converted to the type ToType via a pointer conversion (C++
1915/// 4.10). If so, returns true and places the converted type (that
1916/// might differ from ToType in its cv-qualifiers at some level) into
1917/// ConvertedType.
1918///
1919/// This routine also supports conversions to and from block pointers
1920/// and conversions with Objective-C's 'id', 'id<protocols...>', and
1921/// pointers to interfaces. FIXME: Once we've determined the
1922/// appropriate overloading rules for Objective-C, we may want to
1923/// split the Objective-C checks into a different routine; however,
1924/// GCC seems to consider all of these conversions to be pointer
1925/// conversions, so for now they live here. IncompatibleObjC will be
1926/// set if the conversion is an allowed Objective-C conversion that
1927/// should result in a warning.
1928bool Sema::IsPointerConversion(Expr *From, QualType FromType, QualType ToType,
1929                               bool InOverloadResolution,
1930                               QualType& ConvertedType,
1931                               bool &IncompatibleObjC) {
1932  IncompatibleObjC = false;
1933  if (isObjCPointerConversion(FromType, ToType, ConvertedType,
1934                              IncompatibleObjC))
1935    return true;
1936
1937  // Conversion from a null pointer constant to any Objective-C pointer type.
1938  if (ToType->isObjCObjectPointerType() &&
1939      isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
1940    ConvertedType = ToType;
1941    return true;
1942  }
1943
1944  // Blocks: Block pointers can be converted to void*.
1945  if (FromType->isBlockPointerType() && ToType->isPointerType() &&
1946      ToType->getAs<PointerType>()->getPointeeType()->isVoidType()) {
1947    ConvertedType = ToType;
1948    return true;
1949  }
1950  // Blocks: A null pointer constant can be converted to a block
1951  // pointer type.
1952  if (ToType->isBlockPointerType() &&
1953      isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
1954    ConvertedType = ToType;
1955    return true;
1956  }
1957
1958  // If the left-hand-side is nullptr_t, the right side can be a null
1959  // pointer constant.
1960  if (ToType->isNullPtrType() &&
1961      isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
1962    ConvertedType = ToType;
1963    return true;
1964  }
1965
1966  const PointerType* ToTypePtr = ToType->getAs<PointerType>();
1967  if (!ToTypePtr)
1968    return false;
1969
1970  // A null pointer constant can be converted to a pointer type (C++ 4.10p1).
1971  if (isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
1972    ConvertedType = ToType;
1973    return true;
1974  }
1975
1976  // Beyond this point, both types need to be pointers
1977  // , including objective-c pointers.
1978  QualType ToPointeeType = ToTypePtr->getPointeeType();
1979  if (FromType->isObjCObjectPointerType() && ToPointeeType->isVoidType() &&
1980      !getLangOpts().ObjCAutoRefCount) {
1981    ConvertedType = BuildSimilarlyQualifiedPointerType(
1982                                      FromType->getAs<ObjCObjectPointerType>(),
1983                                                       ToPointeeType,
1984                                                       ToType, Context);
1985    return true;
1986  }
1987  const PointerType *FromTypePtr = FromType->getAs<PointerType>();
1988  if (!FromTypePtr)
1989    return false;
1990
1991  QualType FromPointeeType = FromTypePtr->getPointeeType();
1992
1993  // If the unqualified pointee types are the same, this can't be a
1994  // pointer conversion, so don't do all of the work below.
1995  if (Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType))
1996    return false;
1997
1998  // An rvalue of type "pointer to cv T," where T is an object type,
1999  // can be converted to an rvalue of type "pointer to cv void" (C++
2000  // 4.10p2).
2001  if (FromPointeeType->isIncompleteOrObjectType() &&
2002      ToPointeeType->isVoidType()) {
2003    ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2004                                                       ToPointeeType,
2005                                                       ToType, Context,
2006                                                   /*StripObjCLifetime=*/true);
2007    return true;
2008  }
2009
2010  // MSVC allows implicit function to void* type conversion.
2011  if (getLangOpts().MicrosoftExt && FromPointeeType->isFunctionType() &&
2012      ToPointeeType->isVoidType()) {
2013    ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2014                                                       ToPointeeType,
2015                                                       ToType, Context);
2016    return true;
2017  }
2018
2019  // When we're overloading in C, we allow a special kind of pointer
2020  // conversion for compatible-but-not-identical pointee types.
2021  if (!getLangOpts().CPlusPlus &&
2022      Context.typesAreCompatible(FromPointeeType, ToPointeeType)) {
2023    ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2024                                                       ToPointeeType,
2025                                                       ToType, Context);
2026    return true;
2027  }
2028
2029  // C++ [conv.ptr]p3:
2030  //
2031  //   An rvalue of type "pointer to cv D," where D is a class type,
2032  //   can be converted to an rvalue of type "pointer to cv B," where
2033  //   B is a base class (clause 10) of D. If B is an inaccessible
2034  //   (clause 11) or ambiguous (10.2) base class of D, a program that
2035  //   necessitates this conversion is ill-formed. The result of the
2036  //   conversion is a pointer to the base class sub-object of the
2037  //   derived class object. The null pointer value is converted to
2038  //   the null pointer value of the destination type.
2039  //
2040  // Note that we do not check for ambiguity or inaccessibility
2041  // here. That is handled by CheckPointerConversion.
2042  if (getLangOpts().CPlusPlus &&
2043      FromPointeeType->isRecordType() && ToPointeeType->isRecordType() &&
2044      !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType) &&
2045      !RequireCompleteType(From->getLocStart(), FromPointeeType, 0) &&
2046      IsDerivedFrom(FromPointeeType, ToPointeeType)) {
2047    ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2048                                                       ToPointeeType,
2049                                                       ToType, Context);
2050    return true;
2051  }
2052
2053  if (FromPointeeType->isVectorType() && ToPointeeType->isVectorType() &&
2054      Context.areCompatibleVectorTypes(FromPointeeType, ToPointeeType)) {
2055    ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2056                                                       ToPointeeType,
2057                                                       ToType, Context);
2058    return true;
2059  }
2060
2061  return false;
2062}
2063
2064/// \brief Adopt the given qualifiers for the given type.
2065static QualType AdoptQualifiers(ASTContext &Context, QualType T, Qualifiers Qs){
2066  Qualifiers TQs = T.getQualifiers();
2067
2068  // Check whether qualifiers already match.
2069  if (TQs == Qs)
2070    return T;
2071
2072  if (Qs.compatiblyIncludes(TQs))
2073    return Context.getQualifiedType(T, Qs);
2074
2075  return Context.getQualifiedType(T.getUnqualifiedType(), Qs);
2076}
2077
2078/// isObjCPointerConversion - Determines whether this is an
2079/// Objective-C pointer conversion. Subroutine of IsPointerConversion,
2080/// with the same arguments and return values.
2081bool Sema::isObjCPointerConversion(QualType FromType, QualType ToType,
2082                                   QualType& ConvertedType,
2083                                   bool &IncompatibleObjC) {
2084  if (!getLangOpts().ObjC1)
2085    return false;
2086
2087  // The set of qualifiers on the type we're converting from.
2088  Qualifiers FromQualifiers = FromType.getQualifiers();
2089
2090  // First, we handle all conversions on ObjC object pointer types.
2091  const ObjCObjectPointerType* ToObjCPtr =
2092    ToType->getAs<ObjCObjectPointerType>();
2093  const ObjCObjectPointerType *FromObjCPtr =
2094    FromType->getAs<ObjCObjectPointerType>();
2095
2096  if (ToObjCPtr && FromObjCPtr) {
2097    // If the pointee types are the same (ignoring qualifications),
2098    // then this is not a pointer conversion.
2099    if (Context.hasSameUnqualifiedType(ToObjCPtr->getPointeeType(),
2100                                       FromObjCPtr->getPointeeType()))
2101      return false;
2102
2103    // Check for compatible
2104    // Objective C++: We're able to convert between "id" or "Class" and a
2105    // pointer to any interface (in both directions).
2106    if (ToObjCPtr->isObjCBuiltinType() && FromObjCPtr->isObjCBuiltinType()) {
2107      ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2108      return true;
2109    }
2110    // Conversions with Objective-C's id<...>.
2111    if ((FromObjCPtr->isObjCQualifiedIdType() ||
2112         ToObjCPtr->isObjCQualifiedIdType()) &&
2113        Context.ObjCQualifiedIdTypesAreCompatible(ToType, FromType,
2114                                                  /*compare=*/false)) {
2115      ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2116      return true;
2117    }
2118    // Objective C++: We're able to convert from a pointer to an
2119    // interface to a pointer to a different interface.
2120    if (Context.canAssignObjCInterfaces(ToObjCPtr, FromObjCPtr)) {
2121      const ObjCInterfaceType* LHS = ToObjCPtr->getInterfaceType();
2122      const ObjCInterfaceType* RHS = FromObjCPtr->getInterfaceType();
2123      if (getLangOpts().CPlusPlus && LHS && RHS &&
2124          !ToObjCPtr->getPointeeType().isAtLeastAsQualifiedAs(
2125                                                FromObjCPtr->getPointeeType()))
2126        return false;
2127      ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr,
2128                                                   ToObjCPtr->getPointeeType(),
2129                                                         ToType, Context);
2130      ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2131      return true;
2132    }
2133
2134    if (Context.canAssignObjCInterfaces(FromObjCPtr, ToObjCPtr)) {
2135      // Okay: this is some kind of implicit downcast of Objective-C
2136      // interfaces, which is permitted. However, we're going to
2137      // complain about it.
2138      IncompatibleObjC = true;
2139      ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr,
2140                                                   ToObjCPtr->getPointeeType(),
2141                                                         ToType, Context);
2142      ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2143      return true;
2144    }
2145  }
2146  // Beyond this point, both types need to be C pointers or block pointers.
2147  QualType ToPointeeType;
2148  if (const PointerType *ToCPtr = ToType->getAs<PointerType>())
2149    ToPointeeType = ToCPtr->getPointeeType();
2150  else if (const BlockPointerType *ToBlockPtr =
2151            ToType->getAs<BlockPointerType>()) {
2152    // Objective C++: We're able to convert from a pointer to any object
2153    // to a block pointer type.
2154    if (FromObjCPtr && FromObjCPtr->isObjCBuiltinType()) {
2155      ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2156      return true;
2157    }
2158    ToPointeeType = ToBlockPtr->getPointeeType();
2159  }
2160  else if (FromType->getAs<BlockPointerType>() &&
2161           ToObjCPtr && ToObjCPtr->isObjCBuiltinType()) {
2162    // Objective C++: We're able to convert from a block pointer type to a
2163    // pointer to any object.
2164    ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2165    return true;
2166  }
2167  else
2168    return false;
2169
2170  QualType FromPointeeType;
2171  if (const PointerType *FromCPtr = FromType->getAs<PointerType>())
2172    FromPointeeType = FromCPtr->getPointeeType();
2173  else if (const BlockPointerType *FromBlockPtr =
2174           FromType->getAs<BlockPointerType>())
2175    FromPointeeType = FromBlockPtr->getPointeeType();
2176  else
2177    return false;
2178
2179  // If we have pointers to pointers, recursively check whether this
2180  // is an Objective-C conversion.
2181  if (FromPointeeType->isPointerType() && ToPointeeType->isPointerType() &&
2182      isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
2183                              IncompatibleObjC)) {
2184    // We always complain about this conversion.
2185    IncompatibleObjC = true;
2186    ConvertedType = Context.getPointerType(ConvertedType);
2187    ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2188    return true;
2189  }
2190  // Allow conversion of pointee being objective-c pointer to another one;
2191  // as in I* to id.
2192  if (FromPointeeType->getAs<ObjCObjectPointerType>() &&
2193      ToPointeeType->getAs<ObjCObjectPointerType>() &&
2194      isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
2195                              IncompatibleObjC)) {
2196
2197    ConvertedType = Context.getPointerType(ConvertedType);
2198    ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2199    return true;
2200  }
2201
2202  // If we have pointers to functions or blocks, check whether the only
2203  // differences in the argument and result types are in Objective-C
2204  // pointer conversions. If so, we permit the conversion (but
2205  // complain about it).
2206  const FunctionProtoType *FromFunctionType
2207    = FromPointeeType->getAs<FunctionProtoType>();
2208  const FunctionProtoType *ToFunctionType
2209    = ToPointeeType->getAs<FunctionProtoType>();
2210  if (FromFunctionType && ToFunctionType) {
2211    // If the function types are exactly the same, this isn't an
2212    // Objective-C pointer conversion.
2213    if (Context.getCanonicalType(FromPointeeType)
2214          == Context.getCanonicalType(ToPointeeType))
2215      return false;
2216
2217    // Perform the quick checks that will tell us whether these
2218    // function types are obviously different.
2219    if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() ||
2220        FromFunctionType->isVariadic() != ToFunctionType->isVariadic() ||
2221        FromFunctionType->getTypeQuals() != ToFunctionType->getTypeQuals())
2222      return false;
2223
2224    bool HasObjCConversion = false;
2225    if (Context.getCanonicalType(FromFunctionType->getResultType())
2226          == Context.getCanonicalType(ToFunctionType->getResultType())) {
2227      // Okay, the types match exactly. Nothing to do.
2228    } else if (isObjCPointerConversion(FromFunctionType->getResultType(),
2229                                       ToFunctionType->getResultType(),
2230                                       ConvertedType, IncompatibleObjC)) {
2231      // Okay, we have an Objective-C pointer conversion.
2232      HasObjCConversion = true;
2233    } else {
2234      // Function types are too different. Abort.
2235      return false;
2236    }
2237
2238    // Check argument types.
2239    for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs();
2240         ArgIdx != NumArgs; ++ArgIdx) {
2241      QualType FromArgType = FromFunctionType->getArgType(ArgIdx);
2242      QualType ToArgType = ToFunctionType->getArgType(ArgIdx);
2243      if (Context.getCanonicalType(FromArgType)
2244            == Context.getCanonicalType(ToArgType)) {
2245        // Okay, the types match exactly. Nothing to do.
2246      } else if (isObjCPointerConversion(FromArgType, ToArgType,
2247                                         ConvertedType, IncompatibleObjC)) {
2248        // Okay, we have an Objective-C pointer conversion.
2249        HasObjCConversion = true;
2250      } else {
2251        // Argument types are too different. Abort.
2252        return false;
2253      }
2254    }
2255
2256    if (HasObjCConversion) {
2257      // We had an Objective-C conversion. Allow this pointer
2258      // conversion, but complain about it.
2259      ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2260      IncompatibleObjC = true;
2261      return true;
2262    }
2263  }
2264
2265  return false;
2266}
2267
2268/// \brief Determine whether this is an Objective-C writeback conversion,
2269/// used for parameter passing when performing automatic reference counting.
2270///
2271/// \param FromType The type we're converting form.
2272///
2273/// \param ToType The type we're converting to.
2274///
2275/// \param ConvertedType The type that will be produced after applying
2276/// this conversion.
2277bool Sema::isObjCWritebackConversion(QualType FromType, QualType ToType,
2278                                     QualType &ConvertedType) {
2279  if (!getLangOpts().ObjCAutoRefCount ||
2280      Context.hasSameUnqualifiedType(FromType, ToType))
2281    return false;
2282
2283  // Parameter must be a pointer to __autoreleasing (with no other qualifiers).
2284  QualType ToPointee;
2285  if (const PointerType *ToPointer = ToType->getAs<PointerType>())
2286    ToPointee = ToPointer->getPointeeType();
2287  else
2288    return false;
2289
2290  Qualifiers ToQuals = ToPointee.getQualifiers();
2291  if (!ToPointee->isObjCLifetimeType() ||
2292      ToQuals.getObjCLifetime() != Qualifiers::OCL_Autoreleasing ||
2293      !ToQuals.withoutObjCLifetime().empty())
2294    return false;
2295
2296  // Argument must be a pointer to __strong to __weak.
2297  QualType FromPointee;
2298  if (const PointerType *FromPointer = FromType->getAs<PointerType>())
2299    FromPointee = FromPointer->getPointeeType();
2300  else
2301    return false;
2302
2303  Qualifiers FromQuals = FromPointee.getQualifiers();
2304  if (!FromPointee->isObjCLifetimeType() ||
2305      (FromQuals.getObjCLifetime() != Qualifiers::OCL_Strong &&
2306       FromQuals.getObjCLifetime() != Qualifiers::OCL_Weak))
2307    return false;
2308
2309  // Make sure that we have compatible qualifiers.
2310  FromQuals.setObjCLifetime(Qualifiers::OCL_Autoreleasing);
2311  if (!ToQuals.compatiblyIncludes(FromQuals))
2312    return false;
2313
2314  // Remove qualifiers from the pointee type we're converting from; they
2315  // aren't used in the compatibility check belong, and we'll be adding back
2316  // qualifiers (with __autoreleasing) if the compatibility check succeeds.
2317  FromPointee = FromPointee.getUnqualifiedType();
2318
2319  // The unqualified form of the pointee types must be compatible.
2320  ToPointee = ToPointee.getUnqualifiedType();
2321  bool IncompatibleObjC;
2322  if (Context.typesAreCompatible(FromPointee, ToPointee))
2323    FromPointee = ToPointee;
2324  else if (!isObjCPointerConversion(FromPointee, ToPointee, FromPointee,
2325                                    IncompatibleObjC))
2326    return false;
2327
2328  /// \brief Construct the type we're converting to, which is a pointer to
2329  /// __autoreleasing pointee.
2330  FromPointee = Context.getQualifiedType(FromPointee, FromQuals);
2331  ConvertedType = Context.getPointerType(FromPointee);
2332  return true;
2333}
2334
2335bool Sema::IsBlockPointerConversion(QualType FromType, QualType ToType,
2336                                    QualType& ConvertedType) {
2337  QualType ToPointeeType;
2338  if (const BlockPointerType *ToBlockPtr =
2339        ToType->getAs<BlockPointerType>())
2340    ToPointeeType = ToBlockPtr->getPointeeType();
2341  else
2342    return false;
2343
2344  QualType FromPointeeType;
2345  if (const BlockPointerType *FromBlockPtr =
2346      FromType->getAs<BlockPointerType>())
2347    FromPointeeType = FromBlockPtr->getPointeeType();
2348  else
2349    return false;
2350  // We have pointer to blocks, check whether the only
2351  // differences in the argument and result types are in Objective-C
2352  // pointer conversions. If so, we permit the conversion.
2353
2354  const FunctionProtoType *FromFunctionType
2355    = FromPointeeType->getAs<FunctionProtoType>();
2356  const FunctionProtoType *ToFunctionType
2357    = ToPointeeType->getAs<FunctionProtoType>();
2358
2359  if (!FromFunctionType || !ToFunctionType)
2360    return false;
2361
2362  if (Context.hasSameType(FromPointeeType, ToPointeeType))
2363    return true;
2364
2365  // Perform the quick checks that will tell us whether these
2366  // function types are obviously different.
2367  if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() ||
2368      FromFunctionType->isVariadic() != ToFunctionType->isVariadic())
2369    return false;
2370
2371  FunctionType::ExtInfo FromEInfo = FromFunctionType->getExtInfo();
2372  FunctionType::ExtInfo ToEInfo = ToFunctionType->getExtInfo();
2373  if (FromEInfo != ToEInfo)
2374    return false;
2375
2376  bool IncompatibleObjC = false;
2377  if (Context.hasSameType(FromFunctionType->getResultType(),
2378                          ToFunctionType->getResultType())) {
2379    // Okay, the types match exactly. Nothing to do.
2380  } else {
2381    QualType RHS = FromFunctionType->getResultType();
2382    QualType LHS = ToFunctionType->getResultType();
2383    if ((!getLangOpts().CPlusPlus || !RHS->isRecordType()) &&
2384        !RHS.hasQualifiers() && LHS.hasQualifiers())
2385       LHS = LHS.getUnqualifiedType();
2386
2387     if (Context.hasSameType(RHS,LHS)) {
2388       // OK exact match.
2389     } else if (isObjCPointerConversion(RHS, LHS,
2390                                        ConvertedType, IncompatibleObjC)) {
2391     if (IncompatibleObjC)
2392       return false;
2393     // Okay, we have an Objective-C pointer conversion.
2394     }
2395     else
2396       return false;
2397   }
2398
2399   // Check argument types.
2400   for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs();
2401        ArgIdx != NumArgs; ++ArgIdx) {
2402     IncompatibleObjC = false;
2403     QualType FromArgType = FromFunctionType->getArgType(ArgIdx);
2404     QualType ToArgType = ToFunctionType->getArgType(ArgIdx);
2405     if (Context.hasSameType(FromArgType, ToArgType)) {
2406       // Okay, the types match exactly. Nothing to do.
2407     } else if (isObjCPointerConversion(ToArgType, FromArgType,
2408                                        ConvertedType, IncompatibleObjC)) {
2409       if (IncompatibleObjC)
2410         return false;
2411       // Okay, we have an Objective-C pointer conversion.
2412     } else
2413       // Argument types are too different. Abort.
2414       return false;
2415   }
2416   if (LangOpts.ObjCAutoRefCount &&
2417       !Context.FunctionTypesMatchOnNSConsumedAttrs(FromFunctionType,
2418                                                    ToFunctionType))
2419     return false;
2420
2421   ConvertedType = ToType;
2422   return true;
2423}
2424
2425enum {
2426  ft_default,
2427  ft_different_class,
2428  ft_parameter_arity,
2429  ft_parameter_mismatch,
2430  ft_return_type,
2431  ft_qualifer_mismatch
2432};
2433
2434/// HandleFunctionTypeMismatch - Gives diagnostic information for differeing
2435/// function types.  Catches different number of parameter, mismatch in
2436/// parameter types, and different return types.
2437void Sema::HandleFunctionTypeMismatch(PartialDiagnostic &PDiag,
2438                                      QualType FromType, QualType ToType) {
2439  // If either type is not valid, include no extra info.
2440  if (FromType.isNull() || ToType.isNull()) {
2441    PDiag << ft_default;
2442    return;
2443  }
2444
2445  // Get the function type from the pointers.
2446  if (FromType->isMemberPointerType() && ToType->isMemberPointerType()) {
2447    const MemberPointerType *FromMember = FromType->getAs<MemberPointerType>(),
2448                            *ToMember = ToType->getAs<MemberPointerType>();
2449    if (FromMember->getClass() != ToMember->getClass()) {
2450      PDiag << ft_different_class << QualType(ToMember->getClass(), 0)
2451            << QualType(FromMember->getClass(), 0);
2452      return;
2453    }
2454    FromType = FromMember->getPointeeType();
2455    ToType = ToMember->getPointeeType();
2456  }
2457
2458  if (FromType->isPointerType())
2459    FromType = FromType->getPointeeType();
2460  if (ToType->isPointerType())
2461    ToType = ToType->getPointeeType();
2462
2463  // Remove references.
2464  FromType = FromType.getNonReferenceType();
2465  ToType = ToType.getNonReferenceType();
2466
2467  // Don't print extra info for non-specialized template functions.
2468  if (FromType->isInstantiationDependentType() &&
2469      !FromType->getAs<TemplateSpecializationType>()) {
2470    PDiag << ft_default;
2471    return;
2472  }
2473
2474  // No extra info for same types.
2475  if (Context.hasSameType(FromType, ToType)) {
2476    PDiag << ft_default;
2477    return;
2478  }
2479
2480  const FunctionProtoType *FromFunction = FromType->getAs<FunctionProtoType>(),
2481                          *ToFunction = ToType->getAs<FunctionProtoType>();
2482
2483  // Both types need to be function types.
2484  if (!FromFunction || !ToFunction) {
2485    PDiag << ft_default;
2486    return;
2487  }
2488
2489  if (FromFunction->getNumArgs() != ToFunction->getNumArgs()) {
2490    PDiag << ft_parameter_arity << ToFunction->getNumArgs()
2491          << FromFunction->getNumArgs();
2492    return;
2493  }
2494
2495  // Handle different parameter types.
2496  unsigned ArgPos;
2497  if (!FunctionArgTypesAreEqual(FromFunction, ToFunction, &ArgPos)) {
2498    PDiag << ft_parameter_mismatch << ArgPos + 1
2499          << ToFunction->getArgType(ArgPos)
2500          << FromFunction->getArgType(ArgPos);
2501    return;
2502  }
2503
2504  // Handle different return type.
2505  if (!Context.hasSameType(FromFunction->getResultType(),
2506                           ToFunction->getResultType())) {
2507    PDiag << ft_return_type << ToFunction->getResultType()
2508          << FromFunction->getResultType();
2509    return;
2510  }
2511
2512  unsigned FromQuals = FromFunction->getTypeQuals(),
2513           ToQuals = ToFunction->getTypeQuals();
2514  if (FromQuals != ToQuals) {
2515    PDiag << ft_qualifer_mismatch << ToQuals << FromQuals;
2516    return;
2517  }
2518
2519  // Unable to find a difference, so add no extra info.
2520  PDiag << ft_default;
2521}
2522
2523/// FunctionArgTypesAreEqual - This routine checks two function proto types
2524/// for equality of their argument types. Caller has already checked that
2525/// they have same number of arguments. This routine assumes that Objective-C
2526/// pointer types which only differ in their protocol qualifiers are equal.
2527/// If the parameters are different, ArgPos will have the parameter index
2528/// of the first different parameter.
2529bool Sema::FunctionArgTypesAreEqual(const FunctionProtoType *OldType,
2530                                    const FunctionProtoType *NewType,
2531                                    unsigned *ArgPos) {
2532  if (!getLangOpts().ObjC1) {
2533    for (FunctionProtoType::arg_type_iterator O = OldType->arg_type_begin(),
2534         N = NewType->arg_type_begin(),
2535         E = OldType->arg_type_end(); O && (O != E); ++O, ++N) {
2536      if (!Context.hasSameType(*O, *N)) {
2537        if (ArgPos) *ArgPos = O - OldType->arg_type_begin();
2538        return false;
2539      }
2540    }
2541    return true;
2542  }
2543
2544  for (FunctionProtoType::arg_type_iterator O = OldType->arg_type_begin(),
2545       N = NewType->arg_type_begin(),
2546       E = OldType->arg_type_end(); O && (O != E); ++O, ++N) {
2547    QualType ToType = (*O);
2548    QualType FromType = (*N);
2549    if (!Context.hasSameType(ToType, FromType)) {
2550      if (const PointerType *PTTo = ToType->getAs<PointerType>()) {
2551        if (const PointerType *PTFr = FromType->getAs<PointerType>())
2552          if ((PTTo->getPointeeType()->isObjCQualifiedIdType() &&
2553               PTFr->getPointeeType()->isObjCQualifiedIdType()) ||
2554              (PTTo->getPointeeType()->isObjCQualifiedClassType() &&
2555               PTFr->getPointeeType()->isObjCQualifiedClassType()))
2556            continue;
2557      }
2558      else if (const ObjCObjectPointerType *PTTo =
2559                 ToType->getAs<ObjCObjectPointerType>()) {
2560        if (const ObjCObjectPointerType *PTFr =
2561              FromType->getAs<ObjCObjectPointerType>())
2562          if (Context.hasSameUnqualifiedType(
2563                PTTo->getObjectType()->getBaseType(),
2564                PTFr->getObjectType()->getBaseType()))
2565            continue;
2566      }
2567      if (ArgPos) *ArgPos = O - OldType->arg_type_begin();
2568      return false;
2569    }
2570  }
2571  return true;
2572}
2573
2574/// CheckPointerConversion - Check the pointer conversion from the
2575/// expression From to the type ToType. This routine checks for
2576/// ambiguous or inaccessible derived-to-base pointer
2577/// conversions for which IsPointerConversion has already returned
2578/// true. It returns true and produces a diagnostic if there was an
2579/// error, or returns false otherwise.
2580bool Sema::CheckPointerConversion(Expr *From, QualType ToType,
2581                                  CastKind &Kind,
2582                                  CXXCastPath& BasePath,
2583                                  bool IgnoreBaseAccess) {
2584  QualType FromType = From->getType();
2585  bool IsCStyleOrFunctionalCast = IgnoreBaseAccess;
2586
2587  Kind = CK_BitCast;
2588
2589  if (!IsCStyleOrFunctionalCast && !FromType->isAnyPointerType() &&
2590      From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull) ==
2591      Expr::NPCK_ZeroExpression) {
2592    if (Context.hasSameUnqualifiedType(From->getType(), Context.BoolTy))
2593      DiagRuntimeBehavior(From->getExprLoc(), From,
2594                          PDiag(diag::warn_impcast_bool_to_null_pointer)
2595                            << ToType << From->getSourceRange());
2596    else if (!isUnevaluatedContext())
2597      Diag(From->getExprLoc(), diag::warn_non_literal_null_pointer)
2598        << ToType << From->getSourceRange();
2599  }
2600  if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) {
2601    if (const PointerType *FromPtrType = FromType->getAs<PointerType>()) {
2602      QualType FromPointeeType = FromPtrType->getPointeeType(),
2603               ToPointeeType   = ToPtrType->getPointeeType();
2604
2605      if (FromPointeeType->isRecordType() && ToPointeeType->isRecordType() &&
2606          !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType)) {
2607        // We must have a derived-to-base conversion. Check an
2608        // ambiguous or inaccessible conversion.
2609        if (CheckDerivedToBaseConversion(FromPointeeType, ToPointeeType,
2610                                         From->getExprLoc(),
2611                                         From->getSourceRange(), &BasePath,
2612                                         IgnoreBaseAccess))
2613          return true;
2614
2615        // The conversion was successful.
2616        Kind = CK_DerivedToBase;
2617      }
2618    }
2619  } else if (const ObjCObjectPointerType *ToPtrType =
2620               ToType->getAs<ObjCObjectPointerType>()) {
2621    if (const ObjCObjectPointerType *FromPtrType =
2622          FromType->getAs<ObjCObjectPointerType>()) {
2623      // Objective-C++ conversions are always okay.
2624      // FIXME: We should have a different class of conversions for the
2625      // Objective-C++ implicit conversions.
2626      if (FromPtrType->isObjCBuiltinType() || ToPtrType->isObjCBuiltinType())
2627        return false;
2628    } else if (FromType->isBlockPointerType()) {
2629      Kind = CK_BlockPointerToObjCPointerCast;
2630    } else {
2631      Kind = CK_CPointerToObjCPointerCast;
2632    }
2633  } else if (ToType->isBlockPointerType()) {
2634    if (!FromType->isBlockPointerType())
2635      Kind = CK_AnyPointerToBlockPointerCast;
2636  }
2637
2638  // We shouldn't fall into this case unless it's valid for other
2639  // reasons.
2640  if (From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull))
2641    Kind = CK_NullToPointer;
2642
2643  return false;
2644}
2645
2646/// IsMemberPointerConversion - Determines whether the conversion of the
2647/// expression From, which has the (possibly adjusted) type FromType, can be
2648/// converted to the type ToType via a member pointer conversion (C++ 4.11).
2649/// If so, returns true and places the converted type (that might differ from
2650/// ToType in its cv-qualifiers at some level) into ConvertedType.
2651bool Sema::IsMemberPointerConversion(Expr *From, QualType FromType,
2652                                     QualType ToType,
2653                                     bool InOverloadResolution,
2654                                     QualType &ConvertedType) {
2655  const MemberPointerType *ToTypePtr = ToType->getAs<MemberPointerType>();
2656  if (!ToTypePtr)
2657    return false;
2658
2659  // A null pointer constant can be converted to a member pointer (C++ 4.11p1)
2660  if (From->isNullPointerConstant(Context,
2661                    InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
2662                                        : Expr::NPC_ValueDependentIsNull)) {
2663    ConvertedType = ToType;
2664    return true;
2665  }
2666
2667  // Otherwise, both types have to be member pointers.
2668  const MemberPointerType *FromTypePtr = FromType->getAs<MemberPointerType>();
2669  if (!FromTypePtr)
2670    return false;
2671
2672  // A pointer to member of B can be converted to a pointer to member of D,
2673  // where D is derived from B (C++ 4.11p2).
2674  QualType FromClass(FromTypePtr->getClass(), 0);
2675  QualType ToClass(ToTypePtr->getClass(), 0);
2676
2677  if (!Context.hasSameUnqualifiedType(FromClass, ToClass) &&
2678      !RequireCompleteType(From->getLocStart(), ToClass, 0) &&
2679      IsDerivedFrom(ToClass, FromClass)) {
2680    ConvertedType = Context.getMemberPointerType(FromTypePtr->getPointeeType(),
2681                                                 ToClass.getTypePtr());
2682    return true;
2683  }
2684
2685  return false;
2686}
2687
2688/// CheckMemberPointerConversion - Check the member pointer conversion from the
2689/// expression From to the type ToType. This routine checks for ambiguous or
2690/// virtual or inaccessible base-to-derived member pointer conversions
2691/// for which IsMemberPointerConversion has already returned true. It returns
2692/// true and produces a diagnostic if there was an error, or returns false
2693/// otherwise.
2694bool Sema::CheckMemberPointerConversion(Expr *From, QualType ToType,
2695                                        CastKind &Kind,
2696                                        CXXCastPath &BasePath,
2697                                        bool IgnoreBaseAccess) {
2698  QualType FromType = From->getType();
2699  const MemberPointerType *FromPtrType = FromType->getAs<MemberPointerType>();
2700  if (!FromPtrType) {
2701    // This must be a null pointer to member pointer conversion
2702    assert(From->isNullPointerConstant(Context,
2703                                       Expr::NPC_ValueDependentIsNull) &&
2704           "Expr must be null pointer constant!");
2705    Kind = CK_NullToMemberPointer;
2706    return false;
2707  }
2708
2709  const MemberPointerType *ToPtrType = ToType->getAs<MemberPointerType>();
2710  assert(ToPtrType && "No member pointer cast has a target type "
2711                      "that is not a member pointer.");
2712
2713  QualType FromClass = QualType(FromPtrType->getClass(), 0);
2714  QualType ToClass   = QualType(ToPtrType->getClass(), 0);
2715
2716  // FIXME: What about dependent types?
2717  assert(FromClass->isRecordType() && "Pointer into non-class.");
2718  assert(ToClass->isRecordType() && "Pointer into non-class.");
2719
2720  CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
2721                     /*DetectVirtual=*/true);
2722  bool DerivationOkay = IsDerivedFrom(ToClass, FromClass, Paths);
2723  assert(DerivationOkay &&
2724         "Should not have been called if derivation isn't OK.");
2725  (void)DerivationOkay;
2726
2727  if (Paths.isAmbiguous(Context.getCanonicalType(FromClass).
2728                                  getUnqualifiedType())) {
2729    std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths);
2730    Diag(From->getExprLoc(), diag::err_ambiguous_memptr_conv)
2731      << 0 << FromClass << ToClass << PathDisplayStr << From->getSourceRange();
2732    return true;
2733  }
2734
2735  if (const RecordType *VBase = Paths.getDetectedVirtual()) {
2736    Diag(From->getExprLoc(), diag::err_memptr_conv_via_virtual)
2737      << FromClass << ToClass << QualType(VBase, 0)
2738      << From->getSourceRange();
2739    return true;
2740  }
2741
2742  if (!IgnoreBaseAccess)
2743    CheckBaseClassAccess(From->getExprLoc(), FromClass, ToClass,
2744                         Paths.front(),
2745                         diag::err_downcast_from_inaccessible_base);
2746
2747  // Must be a base to derived member conversion.
2748  BuildBasePathArray(Paths, BasePath);
2749  Kind = CK_BaseToDerivedMemberPointer;
2750  return false;
2751}
2752
2753/// IsQualificationConversion - Determines whether the conversion from
2754/// an rvalue of type FromType to ToType is a qualification conversion
2755/// (C++ 4.4).
2756///
2757/// \param ObjCLifetimeConversion Output parameter that will be set to indicate
2758/// when the qualification conversion involves a change in the Objective-C
2759/// object lifetime.
2760bool
2761Sema::IsQualificationConversion(QualType FromType, QualType ToType,
2762                                bool CStyle, bool &ObjCLifetimeConversion) {
2763  FromType = Context.getCanonicalType(FromType);
2764  ToType = Context.getCanonicalType(ToType);
2765  ObjCLifetimeConversion = false;
2766
2767  // If FromType and ToType are the same type, this is not a
2768  // qualification conversion.
2769  if (FromType.getUnqualifiedType() == ToType.getUnqualifiedType())
2770    return false;
2771
2772  // (C++ 4.4p4):
2773  //   A conversion can add cv-qualifiers at levels other than the first
2774  //   in multi-level pointers, subject to the following rules: [...]
2775  bool PreviousToQualsIncludeConst = true;
2776  bool UnwrappedAnyPointer = false;
2777  while (Context.UnwrapSimilarPointerTypes(FromType, ToType)) {
2778    // Within each iteration of the loop, we check the qualifiers to
2779    // determine if this still looks like a qualification
2780    // conversion. Then, if all is well, we unwrap one more level of
2781    // pointers or pointers-to-members and do it all again
2782    // until there are no more pointers or pointers-to-members left to
2783    // unwrap.
2784    UnwrappedAnyPointer = true;
2785
2786    Qualifiers FromQuals = FromType.getQualifiers();
2787    Qualifiers ToQuals = ToType.getQualifiers();
2788
2789    // Objective-C ARC:
2790    //   Check Objective-C lifetime conversions.
2791    if (FromQuals.getObjCLifetime() != ToQuals.getObjCLifetime() &&
2792        UnwrappedAnyPointer) {
2793      if (ToQuals.compatiblyIncludesObjCLifetime(FromQuals)) {
2794        ObjCLifetimeConversion = true;
2795        FromQuals.removeObjCLifetime();
2796        ToQuals.removeObjCLifetime();
2797      } else {
2798        // Qualification conversions cannot cast between different
2799        // Objective-C lifetime qualifiers.
2800        return false;
2801      }
2802    }
2803
2804    // Allow addition/removal of GC attributes but not changing GC attributes.
2805    if (FromQuals.getObjCGCAttr() != ToQuals.getObjCGCAttr() &&
2806        (!FromQuals.hasObjCGCAttr() || !ToQuals.hasObjCGCAttr())) {
2807      FromQuals.removeObjCGCAttr();
2808      ToQuals.removeObjCGCAttr();
2809    }
2810
2811    //   -- for every j > 0, if const is in cv 1,j then const is in cv
2812    //      2,j, and similarly for volatile.
2813    if (!CStyle && !ToQuals.compatiblyIncludes(FromQuals))
2814      return false;
2815
2816    //   -- if the cv 1,j and cv 2,j are different, then const is in
2817    //      every cv for 0 < k < j.
2818    if (!CStyle && FromQuals.getCVRQualifiers() != ToQuals.getCVRQualifiers()
2819        && !PreviousToQualsIncludeConst)
2820      return false;
2821
2822    // Keep track of whether all prior cv-qualifiers in the "to" type
2823    // include const.
2824    PreviousToQualsIncludeConst
2825      = PreviousToQualsIncludeConst && ToQuals.hasConst();
2826  }
2827
2828  // We are left with FromType and ToType being the pointee types
2829  // after unwrapping the original FromType and ToType the same number
2830  // of types. If we unwrapped any pointers, and if FromType and
2831  // ToType have the same unqualified type (since we checked
2832  // qualifiers above), then this is a qualification conversion.
2833  return UnwrappedAnyPointer && Context.hasSameUnqualifiedType(FromType,ToType);
2834}
2835
2836/// \brief - Determine whether this is a conversion from a scalar type to an
2837/// atomic type.
2838///
2839/// If successful, updates \c SCS's second and third steps in the conversion
2840/// sequence to finish the conversion.
2841static bool tryAtomicConversion(Sema &S, Expr *From, QualType ToType,
2842                                bool InOverloadResolution,
2843                                StandardConversionSequence &SCS,
2844                                bool CStyle) {
2845  const AtomicType *ToAtomic = ToType->getAs<AtomicType>();
2846  if (!ToAtomic)
2847    return false;
2848
2849  StandardConversionSequence InnerSCS;
2850  if (!IsStandardConversion(S, From, ToAtomic->getValueType(),
2851                            InOverloadResolution, InnerSCS,
2852                            CStyle, /*AllowObjCWritebackConversion=*/false))
2853    return false;
2854
2855  SCS.Second = InnerSCS.Second;
2856  SCS.setToType(1, InnerSCS.getToType(1));
2857  SCS.Third = InnerSCS.Third;
2858  SCS.QualificationIncludesObjCLifetime
2859    = InnerSCS.QualificationIncludesObjCLifetime;
2860  SCS.setToType(2, InnerSCS.getToType(2));
2861  return true;
2862}
2863
2864static bool isFirstArgumentCompatibleWithType(ASTContext &Context,
2865                                              CXXConstructorDecl *Constructor,
2866                                              QualType Type) {
2867  const FunctionProtoType *CtorType =
2868      Constructor->getType()->getAs<FunctionProtoType>();
2869  if (CtorType->getNumArgs() > 0) {
2870    QualType FirstArg = CtorType->getArgType(0);
2871    if (Context.hasSameUnqualifiedType(Type, FirstArg.getNonReferenceType()))
2872      return true;
2873  }
2874  return false;
2875}
2876
2877static OverloadingResult
2878IsInitializerListConstructorConversion(Sema &S, Expr *From, QualType ToType,
2879                                       CXXRecordDecl *To,
2880                                       UserDefinedConversionSequence &User,
2881                                       OverloadCandidateSet &CandidateSet,
2882                                       bool AllowExplicit) {
2883  DeclContext::lookup_iterator Con, ConEnd;
2884  for (llvm::tie(Con, ConEnd) = S.LookupConstructors(To);
2885       Con != ConEnd; ++Con) {
2886    NamedDecl *D = *Con;
2887    DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess());
2888
2889    // Find the constructor (which may be a template).
2890    CXXConstructorDecl *Constructor = 0;
2891    FunctionTemplateDecl *ConstructorTmpl
2892      = dyn_cast<FunctionTemplateDecl>(D);
2893    if (ConstructorTmpl)
2894      Constructor
2895        = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl());
2896    else
2897      Constructor = cast<CXXConstructorDecl>(D);
2898
2899    bool Usable = !Constructor->isInvalidDecl() &&
2900                  S.isInitListConstructor(Constructor) &&
2901                  (AllowExplicit || !Constructor->isExplicit());
2902    if (Usable) {
2903      // If the first argument is (a reference to) the target type,
2904      // suppress conversions.
2905      bool SuppressUserConversions =
2906          isFirstArgumentCompatibleWithType(S.Context, Constructor, ToType);
2907      if (ConstructorTmpl)
2908        S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl,
2909                                       /*ExplicitArgs*/ 0,
2910                                       From, CandidateSet,
2911                                       SuppressUserConversions);
2912      else
2913        S.AddOverloadCandidate(Constructor, FoundDecl,
2914                               From, CandidateSet,
2915                               SuppressUserConversions);
2916    }
2917  }
2918
2919  bool HadMultipleCandidates = (CandidateSet.size() > 1);
2920
2921  OverloadCandidateSet::iterator Best;
2922  switch (CandidateSet.BestViableFunction(S, From->getLocStart(), Best, true)) {
2923  case OR_Success: {
2924    // Record the standard conversion we used and the conversion function.
2925    CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(Best->Function);
2926    S.MarkFunctionReferenced(From->getLocStart(), Constructor);
2927
2928    QualType ThisType = Constructor->getThisType(S.Context);
2929    // Initializer lists don't have conversions as such.
2930    User.Before.setAsIdentityConversion();
2931    User.HadMultipleCandidates = HadMultipleCandidates;
2932    User.ConversionFunction = Constructor;
2933    User.FoundConversionFunction = Best->FoundDecl;
2934    User.After.setAsIdentityConversion();
2935    User.After.setFromType(ThisType->getAs<PointerType>()->getPointeeType());
2936    User.After.setAllToTypes(ToType);
2937    return OR_Success;
2938  }
2939
2940  case OR_No_Viable_Function:
2941    return OR_No_Viable_Function;
2942  case OR_Deleted:
2943    return OR_Deleted;
2944  case OR_Ambiguous:
2945    return OR_Ambiguous;
2946  }
2947
2948  llvm_unreachable("Invalid OverloadResult!");
2949}
2950
2951/// Determines whether there is a user-defined conversion sequence
2952/// (C++ [over.ics.user]) that converts expression From to the type
2953/// ToType. If such a conversion exists, User will contain the
2954/// user-defined conversion sequence that performs such a conversion
2955/// and this routine will return true. Otherwise, this routine returns
2956/// false and User is unspecified.
2957///
2958/// \param AllowExplicit  true if the conversion should consider C++0x
2959/// "explicit" conversion functions as well as non-explicit conversion
2960/// functions (C++0x [class.conv.fct]p2).
2961static OverloadingResult
2962IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
2963                        UserDefinedConversionSequence &User,
2964                        OverloadCandidateSet &CandidateSet,
2965                        bool AllowExplicit) {
2966  // Whether we will only visit constructors.
2967  bool ConstructorsOnly = false;
2968
2969  // If the type we are conversion to is a class type, enumerate its
2970  // constructors.
2971  if (const RecordType *ToRecordType = ToType->getAs<RecordType>()) {
2972    // C++ [over.match.ctor]p1:
2973    //   When objects of class type are direct-initialized (8.5), or
2974    //   copy-initialized from an expression of the same or a
2975    //   derived class type (8.5), overload resolution selects the
2976    //   constructor. [...] For copy-initialization, the candidate
2977    //   functions are all the converting constructors (12.3.1) of
2978    //   that class. The argument list is the expression-list within
2979    //   the parentheses of the initializer.
2980    if (S.Context.hasSameUnqualifiedType(ToType, From->getType()) ||
2981        (From->getType()->getAs<RecordType>() &&
2982         S.IsDerivedFrom(From->getType(), ToType)))
2983      ConstructorsOnly = true;
2984
2985    S.RequireCompleteType(From->getLocStart(), ToType, 0);
2986    // RequireCompleteType may have returned true due to some invalid decl
2987    // during template instantiation, but ToType may be complete enough now
2988    // to try to recover.
2989    if (ToType->isIncompleteType()) {
2990      // We're not going to find any constructors.
2991    } else if (CXXRecordDecl *ToRecordDecl
2992                 = dyn_cast<CXXRecordDecl>(ToRecordType->getDecl())) {
2993
2994      Expr **Args = &From;
2995      unsigned NumArgs = 1;
2996      bool ListInitializing = false;
2997      if (InitListExpr *InitList = dyn_cast<InitListExpr>(From)) {
2998        // But first, see if there is an init-list-contructor that will work.
2999        OverloadingResult Result = IsInitializerListConstructorConversion(
3000            S, From, ToType, ToRecordDecl, User, CandidateSet, AllowExplicit);
3001        if (Result != OR_No_Viable_Function)
3002          return Result;
3003        // Never mind.
3004        CandidateSet.clear();
3005
3006        // If we're list-initializing, we pass the individual elements as
3007        // arguments, not the entire list.
3008        Args = InitList->getInits();
3009        NumArgs = InitList->getNumInits();
3010        ListInitializing = true;
3011      }
3012
3013      DeclContext::lookup_iterator Con, ConEnd;
3014      for (llvm::tie(Con, ConEnd) = S.LookupConstructors(ToRecordDecl);
3015           Con != ConEnd; ++Con) {
3016        NamedDecl *D = *Con;
3017        DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess());
3018
3019        // Find the constructor (which may be a template).
3020        CXXConstructorDecl *Constructor = 0;
3021        FunctionTemplateDecl *ConstructorTmpl
3022          = dyn_cast<FunctionTemplateDecl>(D);
3023        if (ConstructorTmpl)
3024          Constructor
3025            = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl());
3026        else
3027          Constructor = cast<CXXConstructorDecl>(D);
3028
3029        bool Usable = !Constructor->isInvalidDecl();
3030        if (ListInitializing)
3031          Usable = Usable && (AllowExplicit || !Constructor->isExplicit());
3032        else
3033          Usable = Usable &&Constructor->isConvertingConstructor(AllowExplicit);
3034        if (Usable) {
3035          bool SuppressUserConversions = !ConstructorsOnly;
3036          if (SuppressUserConversions && ListInitializing) {
3037            SuppressUserConversions = false;
3038            if (NumArgs == 1) {
3039              // If the first argument is (a reference to) the target type,
3040              // suppress conversions.
3041              SuppressUserConversions = isFirstArgumentCompatibleWithType(
3042                                                S.Context, Constructor, ToType);
3043            }
3044          }
3045          if (ConstructorTmpl)
3046            S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl,
3047                                           /*ExplicitArgs*/ 0,
3048                                           llvm::makeArrayRef(Args, NumArgs),
3049                                           CandidateSet, SuppressUserConversions);
3050          else
3051            // Allow one user-defined conversion when user specifies a
3052            // From->ToType conversion via an static cast (c-style, etc).
3053            S.AddOverloadCandidate(Constructor, FoundDecl,
3054                                   llvm::makeArrayRef(Args, NumArgs),
3055                                   CandidateSet, SuppressUserConversions);
3056        }
3057      }
3058    }
3059  }
3060
3061  // Enumerate conversion functions, if we're allowed to.
3062  if (ConstructorsOnly || isa<InitListExpr>(From)) {
3063  } else if (S.RequireCompleteType(From->getLocStart(), From->getType(), 0)) {
3064    // No conversion functions from incomplete types.
3065  } else if (const RecordType *FromRecordType
3066                                   = From->getType()->getAs<RecordType>()) {
3067    if (CXXRecordDecl *FromRecordDecl
3068         = dyn_cast<CXXRecordDecl>(FromRecordType->getDecl())) {
3069      // Add all of the conversion functions as candidates.
3070      const UnresolvedSetImpl *Conversions
3071        = FromRecordDecl->getVisibleConversionFunctions();
3072      for (UnresolvedSetImpl::iterator I = Conversions->begin(),
3073             E = Conversions->end(); I != E; ++I) {
3074        DeclAccessPair FoundDecl = I.getPair();
3075        NamedDecl *D = FoundDecl.getDecl();
3076        CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
3077        if (isa<UsingShadowDecl>(D))
3078          D = cast<UsingShadowDecl>(D)->getTargetDecl();
3079
3080        CXXConversionDecl *Conv;
3081        FunctionTemplateDecl *ConvTemplate;
3082        if ((ConvTemplate = dyn_cast<FunctionTemplateDecl>(D)))
3083          Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
3084        else
3085          Conv = cast<CXXConversionDecl>(D);
3086
3087        if (AllowExplicit || !Conv->isExplicit()) {
3088          if (ConvTemplate)
3089            S.AddTemplateConversionCandidate(ConvTemplate, FoundDecl,
3090                                             ActingContext, From, ToType,
3091                                             CandidateSet);
3092          else
3093            S.AddConversionCandidate(Conv, FoundDecl, ActingContext,
3094                                     From, ToType, CandidateSet);
3095        }
3096      }
3097    }
3098  }
3099
3100  bool HadMultipleCandidates = (CandidateSet.size() > 1);
3101
3102  OverloadCandidateSet::iterator Best;
3103  switch (CandidateSet.BestViableFunction(S, From->getLocStart(), Best, true)) {
3104  case OR_Success:
3105    // Record the standard conversion we used and the conversion function.
3106    if (CXXConstructorDecl *Constructor
3107          = dyn_cast<CXXConstructorDecl>(Best->Function)) {
3108      S.MarkFunctionReferenced(From->getLocStart(), Constructor);
3109
3110      // C++ [over.ics.user]p1:
3111      //   If the user-defined conversion is specified by a
3112      //   constructor (12.3.1), the initial standard conversion
3113      //   sequence converts the source type to the type required by
3114      //   the argument of the constructor.
3115      //
3116      QualType ThisType = Constructor->getThisType(S.Context);
3117      if (isa<InitListExpr>(From)) {
3118        // Initializer lists don't have conversions as such.
3119        User.Before.setAsIdentityConversion();
3120      } else {
3121        if (Best->Conversions[0].isEllipsis())
3122          User.EllipsisConversion = true;
3123        else {
3124          User.Before = Best->Conversions[0].Standard;
3125          User.EllipsisConversion = false;
3126        }
3127      }
3128      User.HadMultipleCandidates = HadMultipleCandidates;
3129      User.ConversionFunction = Constructor;
3130      User.FoundConversionFunction = Best->FoundDecl;
3131      User.After.setAsIdentityConversion();
3132      User.After.setFromType(ThisType->getAs<PointerType>()->getPointeeType());
3133      User.After.setAllToTypes(ToType);
3134      return OR_Success;
3135    }
3136    if (CXXConversionDecl *Conversion
3137                 = dyn_cast<CXXConversionDecl>(Best->Function)) {
3138      S.MarkFunctionReferenced(From->getLocStart(), Conversion);
3139
3140      // C++ [over.ics.user]p1:
3141      //
3142      //   [...] If the user-defined conversion is specified by a
3143      //   conversion function (12.3.2), the initial standard
3144      //   conversion sequence converts the source type to the
3145      //   implicit object parameter of the conversion function.
3146      User.Before = Best->Conversions[0].Standard;
3147      User.HadMultipleCandidates = HadMultipleCandidates;
3148      User.ConversionFunction = Conversion;
3149      User.FoundConversionFunction = Best->FoundDecl;
3150      User.EllipsisConversion = false;
3151
3152      // C++ [over.ics.user]p2:
3153      //   The second standard conversion sequence converts the
3154      //   result of the user-defined conversion to the target type
3155      //   for the sequence. Since an implicit conversion sequence
3156      //   is an initialization, the special rules for
3157      //   initialization by user-defined conversion apply when
3158      //   selecting the best user-defined conversion for a
3159      //   user-defined conversion sequence (see 13.3.3 and
3160      //   13.3.3.1).
3161      User.After = Best->FinalConversion;
3162      return OR_Success;
3163    }
3164    llvm_unreachable("Not a constructor or conversion function?");
3165
3166  case OR_No_Viable_Function:
3167    return OR_No_Viable_Function;
3168  case OR_Deleted:
3169    // No conversion here! We're done.
3170    return OR_Deleted;
3171
3172  case OR_Ambiguous:
3173    return OR_Ambiguous;
3174  }
3175
3176  llvm_unreachable("Invalid OverloadResult!");
3177}
3178
3179bool
3180Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {
3181  ImplicitConversionSequence ICS;
3182  OverloadCandidateSet CandidateSet(From->getExprLoc());
3183  OverloadingResult OvResult =
3184    IsUserDefinedConversion(*this, From, ToType, ICS.UserDefined,
3185                            CandidateSet, false);
3186  if (OvResult == OR_Ambiguous)
3187    Diag(From->getLocStart(),
3188         diag::err_typecheck_ambiguous_condition)
3189          << From->getType() << ToType << From->getSourceRange();
3190  else if (OvResult == OR_No_Viable_Function && !CandidateSet.empty())
3191    Diag(From->getLocStart(),
3192         diag::err_typecheck_nonviable_condition)
3193    << From->getType() << ToType << From->getSourceRange();
3194  else
3195    return false;
3196  CandidateSet.NoteCandidates(*this, OCD_AllCandidates, From);
3197  return true;
3198}
3199
3200/// \brief Compare the user-defined conversion functions or constructors
3201/// of two user-defined conversion sequences to determine whether any ordering
3202/// is possible.
3203static ImplicitConversionSequence::CompareKind
3204compareConversionFunctions(Sema &S,
3205                           FunctionDecl *Function1,
3206                           FunctionDecl *Function2) {
3207  if (!S.getLangOpts().ObjC1 || !S.getLangOpts().CPlusPlus0x)
3208    return ImplicitConversionSequence::Indistinguishable;
3209
3210  // Objective-C++:
3211  //   If both conversion functions are implicitly-declared conversions from
3212  //   a lambda closure type to a function pointer and a block pointer,
3213  //   respectively, always prefer the conversion to a function pointer,
3214  //   because the function pointer is more lightweight and is more likely
3215  //   to keep code working.
3216  CXXConversionDecl *Conv1 = dyn_cast<CXXConversionDecl>(Function1);
3217  if (!Conv1)
3218    return ImplicitConversionSequence::Indistinguishable;
3219
3220  CXXConversionDecl *Conv2 = dyn_cast<CXXConversionDecl>(Function2);
3221  if (!Conv2)
3222    return ImplicitConversionSequence::Indistinguishable;
3223
3224  if (Conv1->getParent()->isLambda() && Conv2->getParent()->isLambda()) {
3225    bool Block1 = Conv1->getConversionType()->isBlockPointerType();
3226    bool Block2 = Conv2->getConversionType()->isBlockPointerType();
3227    if (Block1 != Block2)
3228      return Block1? ImplicitConversionSequence::Worse
3229                   : ImplicitConversionSequence::Better;
3230  }
3231
3232  return ImplicitConversionSequence::Indistinguishable;
3233}
3234
3235/// CompareImplicitConversionSequences - Compare two implicit
3236/// conversion sequences to determine whether one is better than the
3237/// other or if they are indistinguishable (C++ 13.3.3.2).
3238static ImplicitConversionSequence::CompareKind
3239CompareImplicitConversionSequences(Sema &S,
3240                                   const ImplicitConversionSequence& ICS1,
3241                                   const ImplicitConversionSequence& ICS2)
3242{
3243  // (C++ 13.3.3.2p2): When comparing the basic forms of implicit
3244  // conversion sequences (as defined in 13.3.3.1)
3245  //   -- a standard conversion sequence (13.3.3.1.1) is a better
3246  //      conversion sequence than a user-defined conversion sequence or
3247  //      an ellipsis conversion sequence, and
3248  //   -- a user-defined conversion sequence (13.3.3.1.2) is a better
3249  //      conversion sequence than an ellipsis conversion sequence
3250  //      (13.3.3.1.3).
3251  //
3252  // C++0x [over.best.ics]p10:
3253  //   For the purpose of ranking implicit conversion sequences as
3254  //   described in 13.3.3.2, the ambiguous conversion sequence is
3255  //   treated as a user-defined sequence that is indistinguishable
3256  //   from any other user-defined conversion sequence.
3257  if (ICS1.getKindRank() < ICS2.getKindRank())
3258    return ImplicitConversionSequence::Better;
3259  if (ICS2.getKindRank() < ICS1.getKindRank())
3260    return ImplicitConversionSequence::Worse;
3261
3262  // The following checks require both conversion sequences to be of
3263  // the same kind.
3264  if (ICS1.getKind() != ICS2.getKind())
3265    return ImplicitConversionSequence::Indistinguishable;
3266
3267  ImplicitConversionSequence::CompareKind Result =
3268      ImplicitConversionSequence::Indistinguishable;
3269
3270  // Two implicit conversion sequences of the same form are
3271  // indistinguishable conversion sequences unless one of the
3272  // following rules apply: (C++ 13.3.3.2p3):
3273  if (ICS1.isStandard())
3274    Result = CompareStandardConversionSequences(S,
3275                                                ICS1.Standard, ICS2.Standard);
3276  else if (ICS1.isUserDefined()) {
3277    // User-defined conversion sequence U1 is a better conversion
3278    // sequence than another user-defined conversion sequence U2 if
3279    // they contain the same user-defined conversion function or
3280    // constructor and if the second standard conversion sequence of
3281    // U1 is better than the second standard conversion sequence of
3282    // U2 (C++ 13.3.3.2p3).
3283    if (ICS1.UserDefined.ConversionFunction ==
3284          ICS2.UserDefined.ConversionFunction)
3285      Result = CompareStandardConversionSequences(S,
3286                                                  ICS1.UserDefined.After,
3287                                                  ICS2.UserDefined.After);
3288    else
3289      Result = compareConversionFunctions(S,
3290                                          ICS1.UserDefined.ConversionFunction,
3291                                          ICS2.UserDefined.ConversionFunction);
3292  }
3293
3294  // List-initialization sequence L1 is a better conversion sequence than
3295  // list-initialization sequence L2 if L1 converts to std::initializer_list<X>
3296  // for some X and L2 does not.
3297  if (Result == ImplicitConversionSequence::Indistinguishable &&
3298      !ICS1.isBad() &&
3299      ICS1.isListInitializationSequence() &&
3300      ICS2.isListInitializationSequence()) {
3301    if (ICS1.isStdInitializerListElement() &&
3302        !ICS2.isStdInitializerListElement())
3303      return ImplicitConversionSequence::Better;
3304    if (!ICS1.isStdInitializerListElement() &&
3305        ICS2.isStdInitializerListElement())
3306      return ImplicitConversionSequence::Worse;
3307  }
3308
3309  return Result;
3310}
3311
3312static bool hasSimilarType(ASTContext &Context, QualType T1, QualType T2) {
3313  while (Context.UnwrapSimilarPointerTypes(T1, T2)) {
3314    Qualifiers Quals;
3315    T1 = Context.getUnqualifiedArrayType(T1, Quals);
3316    T2 = Context.getUnqualifiedArrayType(T2, Quals);
3317  }
3318
3319  return Context.hasSameUnqualifiedType(T1, T2);
3320}
3321
3322// Per 13.3.3.2p3, compare the given standard conversion sequences to
3323// determine if one is a proper subset of the other.
3324static ImplicitConversionSequence::CompareKind
3325compareStandardConversionSubsets(ASTContext &Context,
3326                                 const StandardConversionSequence& SCS1,
3327                                 const StandardConversionSequence& SCS2) {
3328  ImplicitConversionSequence::CompareKind Result
3329    = ImplicitConversionSequence::Indistinguishable;
3330
3331  // the identity conversion sequence is considered to be a subsequence of
3332  // any non-identity conversion sequence
3333  if (SCS1.isIdentityConversion() && !SCS2.isIdentityConversion())
3334    return ImplicitConversionSequence::Better;
3335  else if (!SCS1.isIdentityConversion() && SCS2.isIdentityConversion())
3336    return ImplicitConversionSequence::Worse;
3337
3338  if (SCS1.Second != SCS2.Second) {
3339    if (SCS1.Second == ICK_Identity)
3340      Result = ImplicitConversionSequence::Better;
3341    else if (SCS2.Second == ICK_Identity)
3342      Result = ImplicitConversionSequence::Worse;
3343    else
3344      return ImplicitConversionSequence::Indistinguishable;
3345  } else if (!hasSimilarType(Context, SCS1.getToType(1), SCS2.getToType(1)))
3346    return ImplicitConversionSequence::Indistinguishable;
3347
3348  if (SCS1.Third == SCS2.Third) {
3349    return Context.hasSameType(SCS1.getToType(2), SCS2.getToType(2))? Result
3350                             : ImplicitConversionSequence::Indistinguishable;
3351  }
3352
3353  if (SCS1.Third == ICK_Identity)
3354    return Result == ImplicitConversionSequence::Worse
3355             ? ImplicitConversionSequence::Indistinguishable
3356             : ImplicitConversionSequence::Better;
3357
3358  if (SCS2.Third == ICK_Identity)
3359    return Result == ImplicitConversionSequence::Better
3360             ? ImplicitConversionSequence::Indistinguishable
3361             : ImplicitConversionSequence::Worse;
3362
3363  return ImplicitConversionSequence::Indistinguishable;
3364}
3365
3366/// \brief Determine whether one of the given reference bindings is better
3367/// than the other based on what kind of bindings they are.
3368static bool isBetterReferenceBindingKind(const StandardConversionSequence &SCS1,
3369                                       const StandardConversionSequence &SCS2) {
3370  // C++0x [over.ics.rank]p3b4:
3371  //   -- S1 and S2 are reference bindings (8.5.3) and neither refers to an
3372  //      implicit object parameter of a non-static member function declared
3373  //      without a ref-qualifier, and *either* S1 binds an rvalue reference
3374  //      to an rvalue and S2 binds an lvalue reference *or S1 binds an
3375  //      lvalue reference to a function lvalue and S2 binds an rvalue
3376  //      reference*.
3377  //
3378  // FIXME: Rvalue references. We're going rogue with the above edits,
3379  // because the semantics in the current C++0x working paper (N3225 at the
3380  // time of this writing) break the standard definition of std::forward
3381  // and std::reference_wrapper when dealing with references to functions.
3382  // Proposed wording changes submitted to CWG for consideration.
3383  if (SCS1.BindsImplicitObjectArgumentWithoutRefQualifier ||
3384      SCS2.BindsImplicitObjectArgumentWithoutRefQualifier)
3385    return false;
3386
3387  return (!SCS1.IsLvalueReference && SCS1.BindsToRvalue &&
3388          SCS2.IsLvalueReference) ||
3389         (SCS1.IsLvalueReference && SCS1.BindsToFunctionLvalue &&
3390          !SCS2.IsLvalueReference);
3391}
3392
3393/// CompareStandardConversionSequences - Compare two standard
3394/// conversion sequences to determine whether one is better than the
3395/// other or if they are indistinguishable (C++ 13.3.3.2p3).
3396static ImplicitConversionSequence::CompareKind
3397CompareStandardConversionSequences(Sema &S,
3398                                   const StandardConversionSequence& SCS1,
3399                                   const StandardConversionSequence& SCS2)
3400{
3401  // Standard conversion sequence S1 is a better conversion sequence
3402  // than standard conversion sequence S2 if (C++ 13.3.3.2p3):
3403
3404  //  -- S1 is a proper subsequence of S2 (comparing the conversion
3405  //     sequences in the canonical form defined by 13.3.3.1.1,
3406  //     excluding any Lvalue Transformation; the identity conversion
3407  //     sequence is considered to be a subsequence of any
3408  //     non-identity conversion sequence) or, if not that,
3409  if (ImplicitConversionSequence::CompareKind CK
3410        = compareStandardConversionSubsets(S.Context, SCS1, SCS2))
3411    return CK;
3412
3413  //  -- the rank of S1 is better than the rank of S2 (by the rules
3414  //     defined below), or, if not that,
3415  ImplicitConversionRank Rank1 = SCS1.getRank();
3416  ImplicitConversionRank Rank2 = SCS2.getRank();
3417  if (Rank1 < Rank2)
3418    return ImplicitConversionSequence::Better;
3419  else if (Rank2 < Rank1)
3420    return ImplicitConversionSequence::Worse;
3421
3422  // (C++ 13.3.3.2p4): Two conversion sequences with the same rank
3423  // are indistinguishable unless one of the following rules
3424  // applies:
3425
3426  //   A conversion that is not a conversion of a pointer, or
3427  //   pointer to member, to bool is better than another conversion
3428  //   that is such a conversion.
3429  if (SCS1.isPointerConversionToBool() != SCS2.isPointerConversionToBool())
3430    return SCS2.isPointerConversionToBool()
3431             ? ImplicitConversionSequence::Better
3432             : ImplicitConversionSequence::Worse;
3433
3434  // C++ [over.ics.rank]p4b2:
3435  //
3436  //   If class B is derived directly or indirectly from class A,
3437  //   conversion of B* to A* is better than conversion of B* to
3438  //   void*, and conversion of A* to void* is better than conversion
3439  //   of B* to void*.
3440  bool SCS1ConvertsToVoid
3441    = SCS1.isPointerConversionToVoidPointer(S.Context);
3442  bool SCS2ConvertsToVoid
3443    = SCS2.isPointerConversionToVoidPointer(S.Context);
3444  if (SCS1ConvertsToVoid != SCS2ConvertsToVoid) {
3445    // Exactly one of the conversion sequences is a conversion to
3446    // a void pointer; it's the worse conversion.
3447    return SCS2ConvertsToVoid ? ImplicitConversionSequence::Better
3448                              : ImplicitConversionSequence::Worse;
3449  } else if (!SCS1ConvertsToVoid && !SCS2ConvertsToVoid) {
3450    // Neither conversion sequence converts to a void pointer; compare
3451    // their derived-to-base conversions.
3452    if (ImplicitConversionSequence::CompareKind DerivedCK
3453          = CompareDerivedToBaseConversions(S, SCS1, SCS2))
3454      return DerivedCK;
3455  } else if (SCS1ConvertsToVoid && SCS2ConvertsToVoid &&
3456             !S.Context.hasSameType(SCS1.getFromType(), SCS2.getFromType())) {
3457    // Both conversion sequences are conversions to void
3458    // pointers. Compare the source types to determine if there's an
3459    // inheritance relationship in their sources.
3460    QualType FromType1 = SCS1.getFromType();
3461    QualType FromType2 = SCS2.getFromType();
3462
3463    // Adjust the types we're converting from via the array-to-pointer
3464    // conversion, if we need to.
3465    if (SCS1.First == ICK_Array_To_Pointer)
3466      FromType1 = S.Context.getArrayDecayedType(FromType1);
3467    if (SCS2.First == ICK_Array_To_Pointer)
3468      FromType2 = S.Context.getArrayDecayedType(FromType2);
3469
3470    QualType FromPointee1 = FromType1->getPointeeType().getUnqualifiedType();
3471    QualType FromPointee2 = FromType2->getPointeeType().getUnqualifiedType();
3472
3473    if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3474      return ImplicitConversionSequence::Better;
3475    else if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3476      return ImplicitConversionSequence::Worse;
3477
3478    // Objective-C++: If one interface is more specific than the
3479    // other, it is the better one.
3480    const ObjCObjectPointerType* FromObjCPtr1
3481      = FromType1->getAs<ObjCObjectPointerType>();
3482    const ObjCObjectPointerType* FromObjCPtr2
3483      = FromType2->getAs<ObjCObjectPointerType>();
3484    if (FromObjCPtr1 && FromObjCPtr2) {
3485      bool AssignLeft = S.Context.canAssignObjCInterfaces(FromObjCPtr1,
3486                                                          FromObjCPtr2);
3487      bool AssignRight = S.Context.canAssignObjCInterfaces(FromObjCPtr2,
3488                                                           FromObjCPtr1);
3489      if (AssignLeft != AssignRight) {
3490        return AssignLeft? ImplicitConversionSequence::Better
3491                         : ImplicitConversionSequence::Worse;
3492      }
3493    }
3494  }
3495
3496  // Compare based on qualification conversions (C++ 13.3.3.2p3,
3497  // bullet 3).
3498  if (ImplicitConversionSequence::CompareKind QualCK
3499        = CompareQualificationConversions(S, SCS1, SCS2))
3500    return QualCK;
3501
3502  if (SCS1.ReferenceBinding && SCS2.ReferenceBinding) {
3503    // Check for a better reference binding based on the kind of bindings.
3504    if (isBetterReferenceBindingKind(SCS1, SCS2))
3505      return ImplicitConversionSequence::Better;
3506    else if (isBetterReferenceBindingKind(SCS2, SCS1))
3507      return ImplicitConversionSequence::Worse;
3508
3509    // C++ [over.ics.rank]p3b4:
3510    //   -- S1 and S2 are reference bindings (8.5.3), and the types to
3511    //      which the references refer are the same type except for
3512    //      top-level cv-qualifiers, and the type to which the reference
3513    //      initialized by S2 refers is more cv-qualified than the type
3514    //      to which the reference initialized by S1 refers.
3515    QualType T1 = SCS1.getToType(2);
3516    QualType T2 = SCS2.getToType(2);
3517    T1 = S.Context.getCanonicalType(T1);
3518    T2 = S.Context.getCanonicalType(T2);
3519    Qualifiers T1Quals, T2Quals;
3520    QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals);
3521    QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals);
3522    if (UnqualT1 == UnqualT2) {
3523      // Objective-C++ ARC: If the references refer to objects with different
3524      // lifetimes, prefer bindings that don't change lifetime.
3525      if (SCS1.ObjCLifetimeConversionBinding !=
3526                                          SCS2.ObjCLifetimeConversionBinding) {
3527        return SCS1.ObjCLifetimeConversionBinding
3528                                           ? ImplicitConversionSequence::Worse
3529                                           : ImplicitConversionSequence::Better;
3530      }
3531
3532      // If the type is an array type, promote the element qualifiers to the
3533      // type for comparison.
3534      if (isa<ArrayType>(T1) && T1Quals)
3535        T1 = S.Context.getQualifiedType(UnqualT1, T1Quals);
3536      if (isa<ArrayType>(T2) && T2Quals)
3537        T2 = S.Context.getQualifiedType(UnqualT2, T2Quals);
3538      if (T2.isMoreQualifiedThan(T1))
3539        return ImplicitConversionSequence::Better;
3540      else if (T1.isMoreQualifiedThan(T2))
3541        return ImplicitConversionSequence::Worse;
3542    }
3543  }
3544
3545  // In Microsoft mode, prefer an integral conversion to a
3546  // floating-to-integral conversion if the integral conversion
3547  // is between types of the same size.
3548  // For example:
3549  // void f(float);
3550  // void f(int);
3551  // int main {
3552  //    long a;
3553  //    f(a);
3554  // }
3555  // Here, MSVC will call f(int) instead of generating a compile error
3556  // as clang will do in standard mode.
3557  if (S.getLangOpts().MicrosoftMode &&
3558      SCS1.Second == ICK_Integral_Conversion &&
3559      SCS2.Second == ICK_Floating_Integral &&
3560      S.Context.getTypeSize(SCS1.getFromType()) ==
3561      S.Context.getTypeSize(SCS1.getToType(2)))
3562    return ImplicitConversionSequence::Better;
3563
3564  return ImplicitConversionSequence::Indistinguishable;
3565}
3566
3567/// CompareQualificationConversions - Compares two standard conversion
3568/// sequences to determine whether they can be ranked based on their
3569/// qualification conversions (C++ 13.3.3.2p3 bullet 3).
3570ImplicitConversionSequence::CompareKind
3571CompareQualificationConversions(Sema &S,
3572                                const StandardConversionSequence& SCS1,
3573                                const StandardConversionSequence& SCS2) {
3574  // C++ 13.3.3.2p3:
3575  //  -- S1 and S2 differ only in their qualification conversion and
3576  //     yield similar types T1 and T2 (C++ 4.4), respectively, and the
3577  //     cv-qualification signature of type T1 is a proper subset of
3578  //     the cv-qualification signature of type T2, and S1 is not the
3579  //     deprecated string literal array-to-pointer conversion (4.2).
3580  if (SCS1.First != SCS2.First || SCS1.Second != SCS2.Second ||
3581      SCS1.Third != SCS2.Third || SCS1.Third != ICK_Qualification)
3582    return ImplicitConversionSequence::Indistinguishable;
3583
3584  // FIXME: the example in the standard doesn't use a qualification
3585  // conversion (!)
3586  QualType T1 = SCS1.getToType(2);
3587  QualType T2 = SCS2.getToType(2);
3588  T1 = S.Context.getCanonicalType(T1);
3589  T2 = S.Context.getCanonicalType(T2);
3590  Qualifiers T1Quals, T2Quals;
3591  QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals);
3592  QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals);
3593
3594  // If the types are the same, we won't learn anything by unwrapped
3595  // them.
3596  if (UnqualT1 == UnqualT2)
3597    return ImplicitConversionSequence::Indistinguishable;
3598
3599  // If the type is an array type, promote the element qualifiers to the type
3600  // for comparison.
3601  if (isa<ArrayType>(T1) && T1Quals)
3602    T1 = S.Context.getQualifiedType(UnqualT1, T1Quals);
3603  if (isa<ArrayType>(T2) && T2Quals)
3604    T2 = S.Context.getQualifiedType(UnqualT2, T2Quals);
3605
3606  ImplicitConversionSequence::CompareKind Result
3607    = ImplicitConversionSequence::Indistinguishable;
3608
3609  // Objective-C++ ARC:
3610  //   Prefer qualification conversions not involving a change in lifetime
3611  //   to qualification conversions that do not change lifetime.
3612  if (SCS1.QualificationIncludesObjCLifetime !=
3613                                      SCS2.QualificationIncludesObjCLifetime) {
3614    Result = SCS1.QualificationIncludesObjCLifetime
3615               ? ImplicitConversionSequence::Worse
3616               : ImplicitConversionSequence::Better;
3617  }
3618
3619  while (S.Context.UnwrapSimilarPointerTypes(T1, T2)) {
3620    // Within each iteration of the loop, we check the qualifiers to
3621    // determine if this still looks like a qualification
3622    // conversion. Then, if all is well, we unwrap one more level of
3623    // pointers or pointers-to-members and do it all again
3624    // until there are no more pointers or pointers-to-members left
3625    // to unwrap. This essentially mimics what
3626    // IsQualificationConversion does, but here we're checking for a
3627    // strict subset of qualifiers.
3628    if (T1.getCVRQualifiers() == T2.getCVRQualifiers())
3629      // The qualifiers are the same, so this doesn't tell us anything
3630      // about how the sequences rank.
3631      ;
3632    else if (T2.isMoreQualifiedThan(T1)) {
3633      // T1 has fewer qualifiers, so it could be the better sequence.
3634      if (Result == ImplicitConversionSequence::Worse)
3635        // Neither has qualifiers that are a subset of the other's
3636        // qualifiers.
3637        return ImplicitConversionSequence::Indistinguishable;
3638
3639      Result = ImplicitConversionSequence::Better;
3640    } else if (T1.isMoreQualifiedThan(T2)) {
3641      // T2 has fewer qualifiers, so it could be the better sequence.
3642      if (Result == ImplicitConversionSequence::Better)
3643        // Neither has qualifiers that are a subset of the other's
3644        // qualifiers.
3645        return ImplicitConversionSequence::Indistinguishable;
3646
3647      Result = ImplicitConversionSequence::Worse;
3648    } else {
3649      // Qualifiers are disjoint.
3650      return ImplicitConversionSequence::Indistinguishable;
3651    }
3652
3653    // If the types after this point are equivalent, we're done.
3654    if (S.Context.hasSameUnqualifiedType(T1, T2))
3655      break;
3656  }
3657
3658  // Check that the winning standard conversion sequence isn't using
3659  // the deprecated string literal array to pointer conversion.
3660  switch (Result) {
3661  case ImplicitConversionSequence::Better:
3662    if (SCS1.DeprecatedStringLiteralToCharPtr)
3663      Result = ImplicitConversionSequence::Indistinguishable;
3664    break;
3665
3666  case ImplicitConversionSequence::Indistinguishable:
3667    break;
3668
3669  case ImplicitConversionSequence::Worse:
3670    if (SCS2.DeprecatedStringLiteralToCharPtr)
3671      Result = ImplicitConversionSequence::Indistinguishable;
3672    break;
3673  }
3674
3675  return Result;
3676}
3677
3678/// CompareDerivedToBaseConversions - Compares two standard conversion
3679/// sequences to determine whether they can be ranked based on their
3680/// various kinds of derived-to-base conversions (C++
3681/// [over.ics.rank]p4b3).  As part of these checks, we also look at
3682/// conversions between Objective-C interface types.
3683ImplicitConversionSequence::CompareKind
3684CompareDerivedToBaseConversions(Sema &S,
3685                                const StandardConversionSequence& SCS1,
3686                                const StandardConversionSequence& SCS2) {
3687  QualType FromType1 = SCS1.getFromType();
3688  QualType ToType1 = SCS1.getToType(1);
3689  QualType FromType2 = SCS2.getFromType();
3690  QualType ToType2 = SCS2.getToType(1);
3691
3692  // Adjust the types we're converting from via the array-to-pointer
3693  // conversion, if we need to.
3694  if (SCS1.First == ICK_Array_To_Pointer)
3695    FromType1 = S.Context.getArrayDecayedType(FromType1);
3696  if (SCS2.First == ICK_Array_To_Pointer)
3697    FromType2 = S.Context.getArrayDecayedType(FromType2);
3698
3699  // Canonicalize all of the types.
3700  FromType1 = S.Context.getCanonicalType(FromType1);
3701  ToType1 = S.Context.getCanonicalType(ToType1);
3702  FromType2 = S.Context.getCanonicalType(FromType2);
3703  ToType2 = S.Context.getCanonicalType(ToType2);
3704
3705  // C++ [over.ics.rank]p4b3:
3706  //
3707  //   If class B is derived directly or indirectly from class A and
3708  //   class C is derived directly or indirectly from B,
3709  //
3710  // Compare based on pointer conversions.
3711  if (SCS1.Second == ICK_Pointer_Conversion &&
3712      SCS2.Second == ICK_Pointer_Conversion &&
3713      /*FIXME: Remove if Objective-C id conversions get their own rank*/
3714      FromType1->isPointerType() && FromType2->isPointerType() &&
3715      ToType1->isPointerType() && ToType2->isPointerType()) {
3716    QualType FromPointee1
3717      = FromType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3718    QualType ToPointee1
3719      = ToType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3720    QualType FromPointee2
3721      = FromType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3722    QualType ToPointee2
3723      = ToType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3724
3725    //   -- conversion of C* to B* is better than conversion of C* to A*,
3726    if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
3727      if (S.IsDerivedFrom(ToPointee1, ToPointee2))
3728        return ImplicitConversionSequence::Better;
3729      else if (S.IsDerivedFrom(ToPointee2, ToPointee1))
3730        return ImplicitConversionSequence::Worse;
3731    }
3732
3733    //   -- conversion of B* to A* is better than conversion of C* to A*,
3734    if (FromPointee1 != FromPointee2 && ToPointee1 == ToPointee2) {
3735      if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3736        return ImplicitConversionSequence::Better;
3737      else if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3738        return ImplicitConversionSequence::Worse;
3739    }
3740  } else if (SCS1.Second == ICK_Pointer_Conversion &&
3741             SCS2.Second == ICK_Pointer_Conversion) {
3742    const ObjCObjectPointerType *FromPtr1
3743      = FromType1->getAs<ObjCObjectPointerType>();
3744    const ObjCObjectPointerType *FromPtr2
3745      = FromType2->getAs<ObjCObjectPointerType>();
3746    const ObjCObjectPointerType *ToPtr1
3747      = ToType1->getAs<ObjCObjectPointerType>();
3748    const ObjCObjectPointerType *ToPtr2
3749      = ToType2->getAs<ObjCObjectPointerType>();
3750
3751    if (FromPtr1 && FromPtr2 && ToPtr1 && ToPtr2) {
3752      // Apply the same conversion ranking rules for Objective-C pointer types
3753      // that we do for C++ pointers to class types. However, we employ the
3754      // Objective-C pseudo-subtyping relationship used for assignment of
3755      // Objective-C pointer types.
3756      bool FromAssignLeft
3757        = S.Context.canAssignObjCInterfaces(FromPtr1, FromPtr2);
3758      bool FromAssignRight
3759        = S.Context.canAssignObjCInterfaces(FromPtr2, FromPtr1);
3760      bool ToAssignLeft
3761        = S.Context.canAssignObjCInterfaces(ToPtr1, ToPtr2);
3762      bool ToAssignRight
3763        = S.Context.canAssignObjCInterfaces(ToPtr2, ToPtr1);
3764
3765      // A conversion to an a non-id object pointer type or qualified 'id'
3766      // type is better than a conversion to 'id'.
3767      if (ToPtr1->isObjCIdType() &&
3768          (ToPtr2->isObjCQualifiedIdType() || ToPtr2->getInterfaceDecl()))
3769        return ImplicitConversionSequence::Worse;
3770      if (ToPtr2->isObjCIdType() &&
3771          (ToPtr1->isObjCQualifiedIdType() || ToPtr1->getInterfaceDecl()))
3772        return ImplicitConversionSequence::Better;
3773
3774      // A conversion to a non-id object pointer type is better than a
3775      // conversion to a qualified 'id' type
3776      if (ToPtr1->isObjCQualifiedIdType() && ToPtr2->getInterfaceDecl())
3777        return ImplicitConversionSequence::Worse;
3778      if (ToPtr2->isObjCQualifiedIdType() && ToPtr1->getInterfaceDecl())
3779        return ImplicitConversionSequence::Better;
3780
3781      // A conversion to an a non-Class object pointer type or qualified 'Class'
3782      // type is better than a conversion to 'Class'.
3783      if (ToPtr1->isObjCClassType() &&
3784          (ToPtr2->isObjCQualifiedClassType() || ToPtr2->getInterfaceDecl()))
3785        return ImplicitConversionSequence::Worse;
3786      if (ToPtr2->isObjCClassType() &&
3787          (ToPtr1->isObjCQualifiedClassType() || ToPtr1->getInterfaceDecl()))
3788        return ImplicitConversionSequence::Better;
3789
3790      // A conversion to a non-Class object pointer type is better than a
3791      // conversion to a qualified 'Class' type.
3792      if (ToPtr1->isObjCQualifiedClassType() && ToPtr2->getInterfaceDecl())
3793        return ImplicitConversionSequence::Worse;
3794      if (ToPtr2->isObjCQualifiedClassType() && ToPtr1->getInterfaceDecl())
3795        return ImplicitConversionSequence::Better;
3796
3797      //   -- "conversion of C* to B* is better than conversion of C* to A*,"
3798      if (S.Context.hasSameType(FromType1, FromType2) &&
3799          !FromPtr1->isObjCIdType() && !FromPtr1->isObjCClassType() &&
3800          (ToAssignLeft != ToAssignRight))
3801        return ToAssignLeft? ImplicitConversionSequence::Worse
3802                           : ImplicitConversionSequence::Better;
3803
3804      //   -- "conversion of B* to A* is better than conversion of C* to A*,"
3805      if (S.Context.hasSameUnqualifiedType(ToType1, ToType2) &&
3806          (FromAssignLeft != FromAssignRight))
3807        return FromAssignLeft? ImplicitConversionSequence::Better
3808        : ImplicitConversionSequence::Worse;
3809    }
3810  }
3811
3812  // Ranking of member-pointer types.
3813  if (SCS1.Second == ICK_Pointer_Member && SCS2.Second == ICK_Pointer_Member &&
3814      FromType1->isMemberPointerType() && FromType2->isMemberPointerType() &&
3815      ToType1->isMemberPointerType() && ToType2->isMemberPointerType()) {
3816    const MemberPointerType * FromMemPointer1 =
3817                                        FromType1->getAs<MemberPointerType>();
3818    const MemberPointerType * ToMemPointer1 =
3819                                          ToType1->getAs<MemberPointerType>();
3820    const MemberPointerType * FromMemPointer2 =
3821                                          FromType2->getAs<MemberPointerType>();
3822    const MemberPointerType * ToMemPointer2 =
3823                                          ToType2->getAs<MemberPointerType>();
3824    const Type *FromPointeeType1 = FromMemPointer1->getClass();
3825    const Type *ToPointeeType1 = ToMemPointer1->getClass();
3826    const Type *FromPointeeType2 = FromMemPointer2->getClass();
3827    const Type *ToPointeeType2 = ToMemPointer2->getClass();
3828    QualType FromPointee1 = QualType(FromPointeeType1, 0).getUnqualifiedType();
3829    QualType ToPointee1 = QualType(ToPointeeType1, 0).getUnqualifiedType();
3830    QualType FromPointee2 = QualType(FromPointeeType2, 0).getUnqualifiedType();
3831    QualType ToPointee2 = QualType(ToPointeeType2, 0).getUnqualifiedType();
3832    // conversion of A::* to B::* is better than conversion of A::* to C::*,
3833    if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
3834      if (S.IsDerivedFrom(ToPointee1, ToPointee2))
3835        return ImplicitConversionSequence::Worse;
3836      else if (S.IsDerivedFrom(ToPointee2, ToPointee1))
3837        return ImplicitConversionSequence::Better;
3838    }
3839    // conversion of B::* to C::* is better than conversion of A::* to C::*
3840    if (ToPointee1 == ToPointee2 && FromPointee1 != FromPointee2) {
3841      if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3842        return ImplicitConversionSequence::Better;
3843      else if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3844        return ImplicitConversionSequence::Worse;
3845    }
3846  }
3847
3848  if (SCS1.Second == ICK_Derived_To_Base) {
3849    //   -- conversion of C to B is better than conversion of C to A,
3850    //   -- binding of an expression of type C to a reference of type
3851    //      B& is better than binding an expression of type C to a
3852    //      reference of type A&,
3853    if (S.Context.hasSameUnqualifiedType(FromType1, FromType2) &&
3854        !S.Context.hasSameUnqualifiedType(ToType1, ToType2)) {
3855      if (S.IsDerivedFrom(ToType1, ToType2))
3856        return ImplicitConversionSequence::Better;
3857      else if (S.IsDerivedFrom(ToType2, ToType1))
3858        return ImplicitConversionSequence::Worse;
3859    }
3860
3861    //   -- conversion of B to A is better than conversion of C to A.
3862    //   -- binding of an expression of type B to a reference of type
3863    //      A& is better than binding an expression of type C to a
3864    //      reference of type A&,
3865    if (!S.Context.hasSameUnqualifiedType(FromType1, FromType2) &&
3866        S.Context.hasSameUnqualifiedType(ToType1, ToType2)) {
3867      if (S.IsDerivedFrom(FromType2, FromType1))
3868        return ImplicitConversionSequence::Better;
3869      else if (S.IsDerivedFrom(FromType1, FromType2))
3870        return ImplicitConversionSequence::Worse;
3871    }
3872  }
3873
3874  return ImplicitConversionSequence::Indistinguishable;
3875}
3876
3877/// CompareReferenceRelationship - Compare the two types T1 and T2 to
3878/// determine whether they are reference-related,
3879/// reference-compatible, reference-compatible with added
3880/// qualification, or incompatible, for use in C++ initialization by
3881/// reference (C++ [dcl.ref.init]p4). Neither type can be a reference
3882/// type, and the first type (T1) is the pointee type of the reference
3883/// type being initialized.
3884Sema::ReferenceCompareResult
3885Sema::CompareReferenceRelationship(SourceLocation Loc,
3886                                   QualType OrigT1, QualType OrigT2,
3887                                   bool &DerivedToBase,
3888                                   bool &ObjCConversion,
3889                                   bool &ObjCLifetimeConversion) {
3890  assert(!OrigT1->isReferenceType() &&
3891    "T1 must be the pointee type of the reference type");
3892  assert(!OrigT2->isReferenceType() && "T2 cannot be a reference type");
3893
3894  QualType T1 = Context.getCanonicalType(OrigT1);
3895  QualType T2 = Context.getCanonicalType(OrigT2);
3896  Qualifiers T1Quals, T2Quals;
3897  QualType UnqualT1 = Context.getUnqualifiedArrayType(T1, T1Quals);
3898  QualType UnqualT2 = Context.getUnqualifiedArrayType(T2, T2Quals);
3899
3900  // C++ [dcl.init.ref]p4:
3901  //   Given types "cv1 T1" and "cv2 T2," "cv1 T1" is
3902  //   reference-related to "cv2 T2" if T1 is the same type as T2, or
3903  //   T1 is a base class of T2.
3904  DerivedToBase = false;
3905  ObjCConversion = false;
3906  ObjCLifetimeConversion = false;
3907  if (UnqualT1 == UnqualT2) {
3908    // Nothing to do.
3909  } else if (!RequireCompleteType(Loc, OrigT2, 0) &&
3910           IsDerivedFrom(UnqualT2, UnqualT1))
3911    DerivedToBase = true;
3912  else if (UnqualT1->isObjCObjectOrInterfaceType() &&
3913           UnqualT2->isObjCObjectOrInterfaceType() &&
3914           Context.canBindObjCObjectType(UnqualT1, UnqualT2))
3915    ObjCConversion = true;
3916  else
3917    return Ref_Incompatible;
3918
3919  // At this point, we know that T1 and T2 are reference-related (at
3920  // least).
3921
3922  // If the type is an array type, promote the element qualifiers to the type
3923  // for comparison.
3924  if (isa<ArrayType>(T1) && T1Quals)
3925    T1 = Context.getQualifiedType(UnqualT1, T1Quals);
3926  if (isa<ArrayType>(T2) && T2Quals)
3927    T2 = Context.getQualifiedType(UnqualT2, T2Quals);
3928
3929  // C++ [dcl.init.ref]p4:
3930  //   "cv1 T1" is reference-compatible with "cv2 T2" if T1 is
3931  //   reference-related to T2 and cv1 is the same cv-qualification
3932  //   as, or greater cv-qualification than, cv2. For purposes of
3933  //   overload resolution, cases for which cv1 is greater
3934  //   cv-qualification than cv2 are identified as
3935  //   reference-compatible with added qualification (see 13.3.3.2).
3936  //
3937  // Note that we also require equivalence of Objective-C GC and address-space
3938  // qualifiers when performing these computations, so that e.g., an int in
3939  // address space 1 is not reference-compatible with an int in address
3940  // space 2.
3941  if (T1Quals.getObjCLifetime() != T2Quals.getObjCLifetime() &&
3942      T1Quals.compatiblyIncludesObjCLifetime(T2Quals)) {
3943    T1Quals.removeObjCLifetime();
3944    T2Quals.removeObjCLifetime();
3945    ObjCLifetimeConversion = true;
3946  }
3947
3948  if (T1Quals == T2Quals)
3949    return Ref_Compatible;
3950  else if (T1Quals.compatiblyIncludes(T2Quals))
3951    return Ref_Compatible_With_Added_Qualification;
3952  else
3953    return Ref_Related;
3954}
3955
3956/// \brief Look for a user-defined conversion to an value reference-compatible
3957///        with DeclType. Return true if something definite is found.
3958static bool
3959FindConversionForRefInit(Sema &S, ImplicitConversionSequence &ICS,
3960                         QualType DeclType, SourceLocation DeclLoc,
3961                         Expr *Init, QualType T2, bool AllowRvalues,
3962                         bool AllowExplicit) {
3963  assert(T2->isRecordType() && "Can only find conversions of record types.");
3964  CXXRecordDecl *T2RecordDecl
3965    = dyn_cast<CXXRecordDecl>(T2->getAs<RecordType>()->getDecl());
3966
3967  OverloadCandidateSet CandidateSet(DeclLoc);
3968  const UnresolvedSetImpl *Conversions
3969    = T2RecordDecl->getVisibleConversionFunctions();
3970  for (UnresolvedSetImpl::iterator I = Conversions->begin(),
3971         E = Conversions->end(); I != E; ++I) {
3972    NamedDecl *D = *I;
3973    CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(D->getDeclContext());
3974    if (isa<UsingShadowDecl>(D))
3975      D = cast<UsingShadowDecl>(D)->getTargetDecl();
3976
3977    FunctionTemplateDecl *ConvTemplate
3978      = dyn_cast<FunctionTemplateDecl>(D);
3979    CXXConversionDecl *Conv;
3980    if (ConvTemplate)
3981      Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
3982    else
3983      Conv = cast<CXXConversionDecl>(D);
3984
3985    // If this is an explicit conversion, and we're not allowed to consider
3986    // explicit conversions, skip it.
3987    if (!AllowExplicit && Conv->isExplicit())
3988      continue;
3989
3990    if (AllowRvalues) {
3991      bool DerivedToBase = false;
3992      bool ObjCConversion = false;
3993      bool ObjCLifetimeConversion = false;
3994
3995      // If we are initializing an rvalue reference, don't permit conversion
3996      // functions that return lvalues.
3997      if (!ConvTemplate && DeclType->isRValueReferenceType()) {
3998        const ReferenceType *RefType
3999          = Conv->getConversionType()->getAs<LValueReferenceType>();
4000        if (RefType && !RefType->getPointeeType()->isFunctionType())
4001          continue;
4002      }
4003
4004      if (!ConvTemplate &&
4005          S.CompareReferenceRelationship(
4006            DeclLoc,
4007            Conv->getConversionType().getNonReferenceType()
4008              .getUnqualifiedType(),
4009            DeclType.getNonReferenceType().getUnqualifiedType(),
4010            DerivedToBase, ObjCConversion, ObjCLifetimeConversion) ==
4011          Sema::Ref_Incompatible)
4012        continue;
4013    } else {
4014      // If the conversion function doesn't return a reference type,
4015      // it can't be considered for this conversion. An rvalue reference
4016      // is only acceptable if its referencee is a function type.
4017
4018      const ReferenceType *RefType =
4019        Conv->getConversionType()->getAs<ReferenceType>();
4020      if (!RefType ||
4021          (!RefType->isLValueReferenceType() &&
4022           !RefType->getPointeeType()->isFunctionType()))
4023        continue;
4024    }
4025
4026    if (ConvTemplate)
4027      S.AddTemplateConversionCandidate(ConvTemplate, I.getPair(), ActingDC,
4028                                       Init, DeclType, CandidateSet);
4029    else
4030      S.AddConversionCandidate(Conv, I.getPair(), ActingDC, Init,
4031                               DeclType, CandidateSet);
4032  }
4033
4034  bool HadMultipleCandidates = (CandidateSet.size() > 1);
4035
4036  OverloadCandidateSet::iterator Best;
4037  switch (CandidateSet.BestViableFunction(S, DeclLoc, Best, true)) {
4038  case OR_Success:
4039    // C++ [over.ics.ref]p1:
4040    //
4041    //   [...] If the parameter binds directly to the result of
4042    //   applying a conversion function to the argument
4043    //   expression, the implicit conversion sequence is a
4044    //   user-defined conversion sequence (13.3.3.1.2), with the
4045    //   second standard conversion sequence either an identity
4046    //   conversion or, if the conversion function returns an
4047    //   entity of a type that is a derived class of the parameter
4048    //   type, a derived-to-base Conversion.
4049    if (!Best->FinalConversion.DirectBinding)
4050      return false;
4051
4052    if (Best->Function)
4053      S.MarkFunctionReferenced(DeclLoc, Best->Function);
4054    ICS.setUserDefined();
4055    ICS.UserDefined.Before = Best->Conversions[0].Standard;
4056    ICS.UserDefined.After = Best->FinalConversion;
4057    ICS.UserDefined.HadMultipleCandidates = HadMultipleCandidates;
4058    ICS.UserDefined.ConversionFunction = Best->Function;
4059    ICS.UserDefined.FoundConversionFunction = Best->FoundDecl;
4060    ICS.UserDefined.EllipsisConversion = false;
4061    assert(ICS.UserDefined.After.ReferenceBinding &&
4062           ICS.UserDefined.After.DirectBinding &&
4063           "Expected a direct reference binding!");
4064    return true;
4065
4066  case OR_Ambiguous:
4067    ICS.setAmbiguous();
4068    for (OverloadCandidateSet::iterator Cand = CandidateSet.begin();
4069         Cand != CandidateSet.end(); ++Cand)
4070      if (Cand->Viable)
4071        ICS.Ambiguous.addConversion(Cand->Function);
4072    return true;
4073
4074  case OR_No_Viable_Function:
4075  case OR_Deleted:
4076    // There was no suitable conversion, or we found a deleted
4077    // conversion; continue with other checks.
4078    return false;
4079  }
4080
4081  llvm_unreachable("Invalid OverloadResult!");
4082}
4083
4084/// \brief Compute an implicit conversion sequence for reference
4085/// initialization.
4086static ImplicitConversionSequence
4087TryReferenceInit(Sema &S, Expr *Init, QualType DeclType,
4088                 SourceLocation DeclLoc,
4089                 bool SuppressUserConversions,
4090                 bool AllowExplicit) {
4091  assert(DeclType->isReferenceType() && "Reference init needs a reference");
4092
4093  // Most paths end in a failed conversion.
4094  ImplicitConversionSequence ICS;
4095  ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType);
4096
4097  QualType T1 = DeclType->getAs<ReferenceType>()->getPointeeType();
4098  QualType T2 = Init->getType();
4099
4100  // If the initializer is the address of an overloaded function, try
4101  // to resolve the overloaded function. If all goes well, T2 is the
4102  // type of the resulting function.
4103  if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) {
4104    DeclAccessPair Found;
4105    if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(Init, DeclType,
4106                                                                false, Found))
4107      T2 = Fn->getType();
4108  }
4109
4110  // Compute some basic properties of the types and the initializer.
4111  bool isRValRef = DeclType->isRValueReferenceType();
4112  bool DerivedToBase = false;
4113  bool ObjCConversion = false;
4114  bool ObjCLifetimeConversion = false;
4115  Expr::Classification InitCategory = Init->Classify(S.Context);
4116  Sema::ReferenceCompareResult RefRelationship
4117    = S.CompareReferenceRelationship(DeclLoc, T1, T2, DerivedToBase,
4118                                     ObjCConversion, ObjCLifetimeConversion);
4119
4120
4121  // C++0x [dcl.init.ref]p5:
4122  //   A reference to type "cv1 T1" is initialized by an expression
4123  //   of type "cv2 T2" as follows:
4124
4125  //     -- If reference is an lvalue reference and the initializer expression
4126  if (!isRValRef) {
4127    //     -- is an lvalue (but is not a bit-field), and "cv1 T1" is
4128    //        reference-compatible with "cv2 T2," or
4129    //
4130    // Per C++ [over.ics.ref]p4, we don't check the bit-field property here.
4131    if (InitCategory.isLValue() &&
4132        RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification) {
4133      // C++ [over.ics.ref]p1:
4134      //   When a parameter of reference type binds directly (8.5.3)
4135      //   to an argument expression, the implicit conversion sequence
4136      //   is the identity conversion, unless the argument expression
4137      //   has a type that is a derived class of the parameter type,
4138      //   in which case the implicit conversion sequence is a
4139      //   derived-to-base Conversion (13.3.3.1).
4140      ICS.setStandard();
4141      ICS.Standard.First = ICK_Identity;
4142      ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base
4143                         : ObjCConversion? ICK_Compatible_Conversion
4144                         : ICK_Identity;
4145      ICS.Standard.Third = ICK_Identity;
4146      ICS.Standard.FromTypePtr = T2.getAsOpaquePtr();
4147      ICS.Standard.setToType(0, T2);
4148      ICS.Standard.setToType(1, T1);
4149      ICS.Standard.setToType(2, T1);
4150      ICS.Standard.ReferenceBinding = true;
4151      ICS.Standard.DirectBinding = true;
4152      ICS.Standard.IsLvalueReference = !isRValRef;
4153      ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4154      ICS.Standard.BindsToRvalue = false;
4155      ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4156      ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion;
4157      ICS.Standard.CopyConstructor = 0;
4158
4159      // Nothing more to do: the inaccessibility/ambiguity check for
4160      // derived-to-base conversions is suppressed when we're
4161      // computing the implicit conversion sequence (C++
4162      // [over.best.ics]p2).
4163      return ICS;
4164    }
4165
4166    //       -- has a class type (i.e., T2 is a class type), where T1 is
4167    //          not reference-related to T2, and can be implicitly
4168    //          converted to an lvalue of type "cv3 T3," where "cv1 T1"
4169    //          is reference-compatible with "cv3 T3" 92) (this
4170    //          conversion is selected by enumerating the applicable
4171    //          conversion functions (13.3.1.6) and choosing the best
4172    //          one through overload resolution (13.3)),
4173    if (!SuppressUserConversions && T2->isRecordType() &&
4174        !S.RequireCompleteType(DeclLoc, T2, 0) &&
4175        RefRelationship == Sema::Ref_Incompatible) {
4176      if (FindConversionForRefInit(S, ICS, DeclType, DeclLoc,
4177                                   Init, T2, /*AllowRvalues=*/false,
4178                                   AllowExplicit))
4179        return ICS;
4180    }
4181  }
4182
4183  //     -- Otherwise, the reference shall be an lvalue reference to a
4184  //        non-volatile const type (i.e., cv1 shall be const), or the reference
4185  //        shall be an rvalue reference.
4186  //
4187  // We actually handle one oddity of C++ [over.ics.ref] at this
4188  // point, which is that, due to p2 (which short-circuits reference
4189  // binding by only attempting a simple conversion for non-direct
4190  // bindings) and p3's strange wording, we allow a const volatile
4191  // reference to bind to an rvalue. Hence the check for the presence
4192  // of "const" rather than checking for "const" being the only
4193  // qualifier.
4194  // This is also the point where rvalue references and lvalue inits no longer
4195  // go together.
4196  if (!isRValRef && (!T1.isConstQualified() || T1.isVolatileQualified()))
4197    return ICS;
4198
4199  //       -- If the initializer expression
4200  //
4201  //            -- is an xvalue, class prvalue, array prvalue or function
4202  //               lvalue and "cv1 T1" is reference-compatible with "cv2 T2", or
4203  if (RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification &&
4204      (InitCategory.isXValue() ||
4205      (InitCategory.isPRValue() && (T2->isRecordType() || T2->isArrayType())) ||
4206      (InitCategory.isLValue() && T2->isFunctionType()))) {
4207    ICS.setStandard();
4208    ICS.Standard.First = ICK_Identity;
4209    ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base
4210                      : ObjCConversion? ICK_Compatible_Conversion
4211                      : ICK_Identity;
4212    ICS.Standard.Third = ICK_Identity;
4213    ICS.Standard.FromTypePtr = T2.getAsOpaquePtr();
4214    ICS.Standard.setToType(0, T2);
4215    ICS.Standard.setToType(1, T1);
4216    ICS.Standard.setToType(2, T1);
4217    ICS.Standard.ReferenceBinding = true;
4218    // In C++0x, this is always a direct binding. In C++98/03, it's a direct
4219    // binding unless we're binding to a class prvalue.
4220    // Note: Although xvalues wouldn't normally show up in C++98/03 code, we
4221    // allow the use of rvalue references in C++98/03 for the benefit of
4222    // standard library implementors; therefore, we need the xvalue check here.
4223    ICS.Standard.DirectBinding =
4224      S.getLangOpts().CPlusPlus0x ||
4225      (InitCategory.isPRValue() && !T2->isRecordType());
4226    ICS.Standard.IsLvalueReference = !isRValRef;
4227    ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4228    ICS.Standard.BindsToRvalue = InitCategory.isRValue();
4229    ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4230    ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion;
4231    ICS.Standard.CopyConstructor = 0;
4232    return ICS;
4233  }
4234
4235  //            -- has a class type (i.e., T2 is a class type), where T1 is not
4236  //               reference-related to T2, and can be implicitly converted to
4237  //               an xvalue, class prvalue, or function lvalue of type
4238  //               "cv3 T3", where "cv1 T1" is reference-compatible with
4239  //               "cv3 T3",
4240  //
4241  //          then the reference is bound to the value of the initializer
4242  //          expression in the first case and to the result of the conversion
4243  //          in the second case (or, in either case, to an appropriate base
4244  //          class subobject).
4245  if (!SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible &&
4246      T2->isRecordType() && !S.RequireCompleteType(DeclLoc, T2, 0) &&
4247      FindConversionForRefInit(S, ICS, DeclType, DeclLoc,
4248                               Init, T2, /*AllowRvalues=*/true,
4249                               AllowExplicit)) {
4250    // In the second case, if the reference is an rvalue reference
4251    // and the second standard conversion sequence of the
4252    // user-defined conversion sequence includes an lvalue-to-rvalue
4253    // conversion, the program is ill-formed.
4254    if (ICS.isUserDefined() && isRValRef &&
4255        ICS.UserDefined.After.First == ICK_Lvalue_To_Rvalue)
4256      ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType);
4257
4258    return ICS;
4259  }
4260
4261  //       -- Otherwise, a temporary of type "cv1 T1" is created and
4262  //          initialized from the initializer expression using the
4263  //          rules for a non-reference copy initialization (8.5). The
4264  //          reference is then bound to the temporary. If T1 is
4265  //          reference-related to T2, cv1 must be the same
4266  //          cv-qualification as, or greater cv-qualification than,
4267  //          cv2; otherwise, the program is ill-formed.
4268  if (RefRelationship == Sema::Ref_Related) {
4269    // If cv1 == cv2 or cv1 is a greater cv-qualified than cv2, then
4270    // we would be reference-compatible or reference-compatible with
4271    // added qualification. But that wasn't the case, so the reference
4272    // initialization fails.
4273    //
4274    // Note that we only want to check address spaces and cvr-qualifiers here.
4275    // ObjC GC and lifetime qualifiers aren't important.
4276    Qualifiers T1Quals = T1.getQualifiers();
4277    Qualifiers T2Quals = T2.getQualifiers();
4278    T1Quals.removeObjCGCAttr();
4279    T1Quals.removeObjCLifetime();
4280    T2Quals.removeObjCGCAttr();
4281    T2Quals.removeObjCLifetime();
4282    if (!T1Quals.compatiblyIncludes(T2Quals))
4283      return ICS;
4284  }
4285
4286  // If at least one of the types is a class type, the types are not
4287  // related, and we aren't allowed any user conversions, the
4288  // reference binding fails. This case is important for breaking
4289  // recursion, since TryImplicitConversion below will attempt to
4290  // create a temporary through the use of a copy constructor.
4291  if (SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible &&
4292      (T1->isRecordType() || T2->isRecordType()))
4293    return ICS;
4294
4295  // If T1 is reference-related to T2 and the reference is an rvalue
4296  // reference, the initializer expression shall not be an lvalue.
4297  if (RefRelationship >= Sema::Ref_Related &&
4298      isRValRef && Init->Classify(S.Context).isLValue())
4299    return ICS;
4300
4301  // C++ [over.ics.ref]p2:
4302  //   When a parameter of reference type is not bound directly to
4303  //   an argument expression, the conversion sequence is the one
4304  //   required to convert the argument expression to the
4305  //   underlying type of the reference according to
4306  //   13.3.3.1. Conceptually, this conversion sequence corresponds
4307  //   to copy-initializing a temporary of the underlying type with
4308  //   the argument expression. Any difference in top-level
4309  //   cv-qualification is subsumed by the initialization itself
4310  //   and does not constitute a conversion.
4311  ICS = TryImplicitConversion(S, Init, T1, SuppressUserConversions,
4312                              /*AllowExplicit=*/false,
4313                              /*InOverloadResolution=*/false,
4314                              /*CStyle=*/false,
4315                              /*AllowObjCWritebackConversion=*/false);
4316
4317  // Of course, that's still a reference binding.
4318  if (ICS.isStandard()) {
4319    ICS.Standard.ReferenceBinding = true;
4320    ICS.Standard.IsLvalueReference = !isRValRef;
4321    ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4322    ICS.Standard.BindsToRvalue = true;
4323    ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4324    ICS.Standard.ObjCLifetimeConversionBinding = false;
4325  } else if (ICS.isUserDefined()) {
4326    // Don't allow rvalue references to bind to lvalues.
4327    if (DeclType->isRValueReferenceType()) {
4328      if (const ReferenceType *RefType
4329            = ICS.UserDefined.ConversionFunction->getResultType()
4330                ->getAs<LValueReferenceType>()) {
4331        if (!RefType->getPointeeType()->isFunctionType()) {
4332          ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, Init,
4333                     DeclType);
4334          return ICS;
4335        }
4336      }
4337    }
4338
4339    ICS.UserDefined.After.ReferenceBinding = true;
4340    ICS.UserDefined.After.IsLvalueReference = !isRValRef;
4341    ICS.UserDefined.After.BindsToFunctionLvalue = T2->isFunctionType();
4342    ICS.UserDefined.After.BindsToRvalue = true;
4343    ICS.UserDefined.After.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4344    ICS.UserDefined.After.ObjCLifetimeConversionBinding = false;
4345  }
4346
4347  return ICS;
4348}
4349
4350static ImplicitConversionSequence
4351TryCopyInitialization(Sema &S, Expr *From, QualType ToType,
4352                      bool SuppressUserConversions,
4353                      bool InOverloadResolution,
4354                      bool AllowObjCWritebackConversion,
4355                      bool AllowExplicit = false);
4356
4357/// TryListConversion - Try to copy-initialize a value of type ToType from the
4358/// initializer list From.
4359static ImplicitConversionSequence
4360TryListConversion(Sema &S, InitListExpr *From, QualType ToType,
4361                  bool SuppressUserConversions,
4362                  bool InOverloadResolution,
4363                  bool AllowObjCWritebackConversion) {
4364  // C++11 [over.ics.list]p1:
4365  //   When an argument is an initializer list, it is not an expression and
4366  //   special rules apply for converting it to a parameter type.
4367
4368  ImplicitConversionSequence Result;
4369  Result.setBad(BadConversionSequence::no_conversion, From, ToType);
4370  Result.setListInitializationSequence();
4371
4372  // We need a complete type for what follows. Incomplete types can never be
4373  // initialized from init lists.
4374  if (S.RequireCompleteType(From->getLocStart(), ToType, 0))
4375    return Result;
4376
4377  // C++11 [over.ics.list]p2:
4378  //   If the parameter type is std::initializer_list<X> or "array of X" and
4379  //   all the elements can be implicitly converted to X, the implicit
4380  //   conversion sequence is the worst conversion necessary to convert an
4381  //   element of the list to X.
4382  bool toStdInitializerList = false;
4383  QualType X;
4384  if (ToType->isArrayType())
4385    X = S.Context.getBaseElementType(ToType);
4386  else
4387    toStdInitializerList = S.isStdInitializerList(ToType, &X);
4388  if (!X.isNull()) {
4389    for (unsigned i = 0, e = From->getNumInits(); i < e; ++i) {
4390      Expr *Init = From->getInit(i);
4391      ImplicitConversionSequence ICS =
4392          TryCopyInitialization(S, Init, X, SuppressUserConversions,
4393                                InOverloadResolution,
4394                                AllowObjCWritebackConversion);
4395      // If a single element isn't convertible, fail.
4396      if (ICS.isBad()) {
4397        Result = ICS;
4398        break;
4399      }
4400      // Otherwise, look for the worst conversion.
4401      if (Result.isBad() ||
4402          CompareImplicitConversionSequences(S, ICS, Result) ==
4403              ImplicitConversionSequence::Worse)
4404        Result = ICS;
4405    }
4406
4407    // For an empty list, we won't have computed any conversion sequence.
4408    // Introduce the identity conversion sequence.
4409    if (From->getNumInits() == 0) {
4410      Result.setStandard();
4411      Result.Standard.setAsIdentityConversion();
4412      Result.Standard.setFromType(ToType);
4413      Result.Standard.setAllToTypes(ToType);
4414    }
4415
4416    Result.setListInitializationSequence();
4417    Result.setStdInitializerListElement(toStdInitializerList);
4418    return Result;
4419  }
4420
4421  // C++11 [over.ics.list]p3:
4422  //   Otherwise, if the parameter is a non-aggregate class X and overload
4423  //   resolution chooses a single best constructor [...] the implicit
4424  //   conversion sequence is a user-defined conversion sequence. If multiple
4425  //   constructors are viable but none is better than the others, the
4426  //   implicit conversion sequence is a user-defined conversion sequence.
4427  if (ToType->isRecordType() && !ToType->isAggregateType()) {
4428    // This function can deal with initializer lists.
4429    Result = TryUserDefinedConversion(S, From, ToType, SuppressUserConversions,
4430                                      /*AllowExplicit=*/false,
4431                                      InOverloadResolution, /*CStyle=*/false,
4432                                      AllowObjCWritebackConversion);
4433    Result.setListInitializationSequence();
4434    return Result;
4435  }
4436
4437  // C++11 [over.ics.list]p4:
4438  //   Otherwise, if the parameter has an aggregate type which can be
4439  //   initialized from the initializer list [...] the implicit conversion
4440  //   sequence is a user-defined conversion sequence.
4441  if (ToType->isAggregateType()) {
4442    // Type is an aggregate, argument is an init list. At this point it comes
4443    // down to checking whether the initialization works.
4444    // FIXME: Find out whether this parameter is consumed or not.
4445    InitializedEntity Entity =
4446        InitializedEntity::InitializeParameter(S.Context, ToType,
4447                                               /*Consumed=*/false);
4448    if (S.CanPerformCopyInitialization(Entity, S.Owned(From))) {
4449      Result.setUserDefined();
4450      Result.UserDefined.Before.setAsIdentityConversion();
4451      // Initializer lists don't have a type.
4452      Result.UserDefined.Before.setFromType(QualType());
4453      Result.UserDefined.Before.setAllToTypes(QualType());
4454
4455      Result.UserDefined.After.setAsIdentityConversion();
4456      Result.UserDefined.After.setFromType(ToType);
4457      Result.UserDefined.After.setAllToTypes(ToType);
4458      Result.UserDefined.ConversionFunction = 0;
4459    }
4460    return Result;
4461  }
4462
4463  // C++11 [over.ics.list]p5:
4464  //   Otherwise, if the parameter is a reference, see 13.3.3.1.4.
4465  if (ToType->isReferenceType()) {
4466    // The standard is notoriously unclear here, since 13.3.3.1.4 doesn't
4467    // mention initializer lists in any way. So we go by what list-
4468    // initialization would do and try to extrapolate from that.
4469
4470    QualType T1 = ToType->getAs<ReferenceType>()->getPointeeType();
4471
4472    // If the initializer list has a single element that is reference-related
4473    // to the parameter type, we initialize the reference from that.
4474    if (From->getNumInits() == 1) {
4475      Expr *Init = From->getInit(0);
4476
4477      QualType T2 = Init->getType();
4478
4479      // If the initializer is the address of an overloaded function, try
4480      // to resolve the overloaded function. If all goes well, T2 is the
4481      // type of the resulting function.
4482      if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) {
4483        DeclAccessPair Found;
4484        if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(
4485                                   Init, ToType, false, Found))
4486          T2 = Fn->getType();
4487      }
4488
4489      // Compute some basic properties of the types and the initializer.
4490      bool dummy1 = false;
4491      bool dummy2 = false;
4492      bool dummy3 = false;
4493      Sema::ReferenceCompareResult RefRelationship
4494        = S.CompareReferenceRelationship(From->getLocStart(), T1, T2, dummy1,
4495                                         dummy2, dummy3);
4496
4497      if (RefRelationship >= Sema::Ref_Related)
4498        return TryReferenceInit(S, Init, ToType,
4499                                /*FIXME:*/From->getLocStart(),
4500                                SuppressUserConversions,
4501                                /*AllowExplicit=*/false);
4502    }
4503
4504    // Otherwise, we bind the reference to a temporary created from the
4505    // initializer list.
4506    Result = TryListConversion(S, From, T1, SuppressUserConversions,
4507                               InOverloadResolution,
4508                               AllowObjCWritebackConversion);
4509    if (Result.isFailure())
4510      return Result;
4511    assert(!Result.isEllipsis() &&
4512           "Sub-initialization cannot result in ellipsis conversion.");
4513
4514    // Can we even bind to a temporary?
4515    if (ToType->isRValueReferenceType() ||
4516        (T1.isConstQualified() && !T1.isVolatileQualified())) {
4517      StandardConversionSequence &SCS = Result.isStandard() ? Result.Standard :
4518                                            Result.UserDefined.After;
4519      SCS.ReferenceBinding = true;
4520      SCS.IsLvalueReference = ToType->isLValueReferenceType();
4521      SCS.BindsToRvalue = true;
4522      SCS.BindsToFunctionLvalue = false;
4523      SCS.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4524      SCS.ObjCLifetimeConversionBinding = false;
4525    } else
4526      Result.setBad(BadConversionSequence::lvalue_ref_to_rvalue,
4527                    From, ToType);
4528    return Result;
4529  }
4530
4531  // C++11 [over.ics.list]p6:
4532  //   Otherwise, if the parameter type is not a class:
4533  if (!ToType->isRecordType()) {
4534    //    - if the initializer list has one element, the implicit conversion
4535    //      sequence is the one required to convert the element to the
4536    //      parameter type.
4537    unsigned NumInits = From->getNumInits();
4538    if (NumInits == 1)
4539      Result = TryCopyInitialization(S, From->getInit(0), ToType,
4540                                     SuppressUserConversions,
4541                                     InOverloadResolution,
4542                                     AllowObjCWritebackConversion);
4543    //    - if the initializer list has no elements, the implicit conversion
4544    //      sequence is the identity conversion.
4545    else if (NumInits == 0) {
4546      Result.setStandard();
4547      Result.Standard.setAsIdentityConversion();
4548      Result.Standard.setFromType(ToType);
4549      Result.Standard.setAllToTypes(ToType);
4550    }
4551    Result.setListInitializationSequence();
4552    return Result;
4553  }
4554
4555  // C++11 [over.ics.list]p7:
4556  //   In all cases other than those enumerated above, no conversion is possible
4557  return Result;
4558}
4559
4560/// TryCopyInitialization - Try to copy-initialize a value of type
4561/// ToType from the expression From. Return the implicit conversion
4562/// sequence required to pass this argument, which may be a bad
4563/// conversion sequence (meaning that the argument cannot be passed to
4564/// a parameter of this type). If @p SuppressUserConversions, then we
4565/// do not permit any user-defined conversion sequences.
4566static ImplicitConversionSequence
4567TryCopyInitialization(Sema &S, Expr *From, QualType ToType,
4568                      bool SuppressUserConversions,
4569                      bool InOverloadResolution,
4570                      bool AllowObjCWritebackConversion,
4571                      bool AllowExplicit) {
4572  if (InitListExpr *FromInitList = dyn_cast<InitListExpr>(From))
4573    return TryListConversion(S, FromInitList, ToType, SuppressUserConversions,
4574                             InOverloadResolution,AllowObjCWritebackConversion);
4575
4576  if (ToType->isReferenceType())
4577    return TryReferenceInit(S, From, ToType,
4578                            /*FIXME:*/From->getLocStart(),
4579                            SuppressUserConversions,
4580                            AllowExplicit);
4581
4582  return TryImplicitConversion(S, From, ToType,
4583                               SuppressUserConversions,
4584                               /*AllowExplicit=*/false,
4585                               InOverloadResolution,
4586                               /*CStyle=*/false,
4587                               AllowObjCWritebackConversion);
4588}
4589
4590static bool TryCopyInitialization(const CanQualType FromQTy,
4591                                  const CanQualType ToQTy,
4592                                  Sema &S,
4593                                  SourceLocation Loc,
4594                                  ExprValueKind FromVK) {
4595  OpaqueValueExpr TmpExpr(Loc, FromQTy, FromVK);
4596  ImplicitConversionSequence ICS =
4597    TryCopyInitialization(S, &TmpExpr, ToQTy, true, true, false);
4598
4599  return !ICS.isBad();
4600}
4601
4602/// TryObjectArgumentInitialization - Try to initialize the object
4603/// parameter of the given member function (@c Method) from the
4604/// expression @p From.
4605static ImplicitConversionSequence
4606TryObjectArgumentInitialization(Sema &S, QualType OrigFromType,
4607                                Expr::Classification FromClassification,
4608                                CXXMethodDecl *Method,
4609                                CXXRecordDecl *ActingContext) {
4610  QualType ClassType = S.Context.getTypeDeclType(ActingContext);
4611  // [class.dtor]p2: A destructor can be invoked for a const, volatile or
4612  //                 const volatile object.
4613  unsigned Quals = isa<CXXDestructorDecl>(Method) ?
4614    Qualifiers::Const | Qualifiers::Volatile : Method->getTypeQualifiers();
4615  QualType ImplicitParamType =  S.Context.getCVRQualifiedType(ClassType, Quals);
4616
4617  // Set up the conversion sequence as a "bad" conversion, to allow us
4618  // to exit early.
4619  ImplicitConversionSequence ICS;
4620
4621  // We need to have an object of class type.
4622  QualType FromType = OrigFromType;
4623  if (const PointerType *PT = FromType->getAs<PointerType>()) {
4624    FromType = PT->getPointeeType();
4625
4626    // When we had a pointer, it's implicitly dereferenced, so we
4627    // better have an lvalue.
4628    assert(FromClassification.isLValue());
4629  }
4630
4631  assert(FromType->isRecordType());
4632
4633  // C++0x [over.match.funcs]p4:
4634  //   For non-static member functions, the type of the implicit object
4635  //   parameter is
4636  //
4637  //     - "lvalue reference to cv X" for functions declared without a
4638  //        ref-qualifier or with the & ref-qualifier
4639  //     - "rvalue reference to cv X" for functions declared with the &&
4640  //        ref-qualifier
4641  //
4642  // where X is the class of which the function is a member and cv is the
4643  // cv-qualification on the member function declaration.
4644  //
4645  // However, when finding an implicit conversion sequence for the argument, we
4646  // are not allowed to create temporaries or perform user-defined conversions
4647  // (C++ [over.match.funcs]p5). We perform a simplified version of
4648  // reference binding here, that allows class rvalues to bind to
4649  // non-constant references.
4650
4651  // First check the qualifiers.
4652  QualType FromTypeCanon = S.Context.getCanonicalType(FromType);
4653  if (ImplicitParamType.getCVRQualifiers()
4654                                    != FromTypeCanon.getLocalCVRQualifiers() &&
4655      !ImplicitParamType.isAtLeastAsQualifiedAs(FromTypeCanon)) {
4656    ICS.setBad(BadConversionSequence::bad_qualifiers,
4657               OrigFromType, ImplicitParamType);
4658    return ICS;
4659  }
4660
4661  // Check that we have either the same type or a derived type. It
4662  // affects the conversion rank.
4663  QualType ClassTypeCanon = S.Context.getCanonicalType(ClassType);
4664  ImplicitConversionKind SecondKind;
4665  if (ClassTypeCanon == FromTypeCanon.getLocalUnqualifiedType()) {
4666    SecondKind = ICK_Identity;
4667  } else if (S.IsDerivedFrom(FromType, ClassType))
4668    SecondKind = ICK_Derived_To_Base;
4669  else {
4670    ICS.setBad(BadConversionSequence::unrelated_class,
4671               FromType, ImplicitParamType);
4672    return ICS;
4673  }
4674
4675  // Check the ref-qualifier.
4676  switch (Method->getRefQualifier()) {
4677  case RQ_None:
4678    // Do nothing; we don't care about lvalueness or rvalueness.
4679    break;
4680
4681  case RQ_LValue:
4682    if (!FromClassification.isLValue() && Quals != Qualifiers::Const) {
4683      // non-const lvalue reference cannot bind to an rvalue
4684      ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, FromType,
4685                 ImplicitParamType);
4686      return ICS;
4687    }
4688    break;
4689
4690  case RQ_RValue:
4691    if (!FromClassification.isRValue()) {
4692      // rvalue reference cannot bind to an lvalue
4693      ICS.setBad(BadConversionSequence::rvalue_ref_to_lvalue, FromType,
4694                 ImplicitParamType);
4695      return ICS;
4696    }
4697    break;
4698  }
4699
4700  // Success. Mark this as a reference binding.
4701  ICS.setStandard();
4702  ICS.Standard.setAsIdentityConversion();
4703  ICS.Standard.Second = SecondKind;
4704  ICS.Standard.setFromType(FromType);
4705  ICS.Standard.setAllToTypes(ImplicitParamType);
4706  ICS.Standard.ReferenceBinding = true;
4707  ICS.Standard.DirectBinding = true;
4708  ICS.Standard.IsLvalueReference = Method->getRefQualifier() != RQ_RValue;
4709  ICS.Standard.BindsToFunctionLvalue = false;
4710  ICS.Standard.BindsToRvalue = FromClassification.isRValue();
4711  ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier
4712    = (Method->getRefQualifier() == RQ_None);
4713  return ICS;
4714}
4715
4716/// PerformObjectArgumentInitialization - Perform initialization of
4717/// the implicit object parameter for the given Method with the given
4718/// expression.
4719ExprResult
4720Sema::PerformObjectArgumentInitialization(Expr *From,
4721                                          NestedNameSpecifier *Qualifier,
4722                                          NamedDecl *FoundDecl,
4723                                          CXXMethodDecl *Method) {
4724  QualType FromRecordType, DestType;
4725  QualType ImplicitParamRecordType  =
4726    Method->getThisType(Context)->getAs<PointerType>()->getPointeeType();
4727
4728  Expr::Classification FromClassification;
4729  if (const PointerType *PT = From->getType()->getAs<PointerType>()) {
4730    FromRecordType = PT->getPointeeType();
4731    DestType = Method->getThisType(Context);
4732    FromClassification = Expr::Classification::makeSimpleLValue();
4733  } else {
4734    FromRecordType = From->getType();
4735    DestType = ImplicitParamRecordType;
4736    FromClassification = From->Classify(Context);
4737  }
4738
4739  // Note that we always use the true parent context when performing
4740  // the actual argument initialization.
4741  ImplicitConversionSequence ICS
4742    = TryObjectArgumentInitialization(*this, From->getType(), FromClassification,
4743                                      Method, Method->getParent());
4744  if (ICS.isBad()) {
4745    if (ICS.Bad.Kind == BadConversionSequence::bad_qualifiers) {
4746      Qualifiers FromQs = FromRecordType.getQualifiers();
4747      Qualifiers ToQs = DestType.getQualifiers();
4748      unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
4749      if (CVR) {
4750        Diag(From->getLocStart(),
4751             diag::err_member_function_call_bad_cvr)
4752          << Method->getDeclName() << FromRecordType << (CVR - 1)
4753          << From->getSourceRange();
4754        Diag(Method->getLocation(), diag::note_previous_decl)
4755          << Method->getDeclName();
4756        return ExprError();
4757      }
4758    }
4759
4760    return Diag(From->getLocStart(),
4761                diag::err_implicit_object_parameter_init)
4762       << ImplicitParamRecordType << FromRecordType << From->getSourceRange();
4763  }
4764
4765  if (ICS.Standard.Second == ICK_Derived_To_Base) {
4766    ExprResult FromRes =
4767      PerformObjectMemberConversion(From, Qualifier, FoundDecl, Method);
4768    if (FromRes.isInvalid())
4769      return ExprError();
4770    From = FromRes.take();
4771  }
4772
4773  if (!Context.hasSameType(From->getType(), DestType))
4774    From = ImpCastExprToType(From, DestType, CK_NoOp,
4775                             From->getValueKind()).take();
4776  return Owned(From);
4777}
4778
4779/// TryContextuallyConvertToBool - Attempt to contextually convert the
4780/// expression From to bool (C++0x [conv]p3).
4781static ImplicitConversionSequence
4782TryContextuallyConvertToBool(Sema &S, Expr *From) {
4783  // FIXME: This is pretty broken.
4784  return TryImplicitConversion(S, From, S.Context.BoolTy,
4785                               // FIXME: Are these flags correct?
4786                               /*SuppressUserConversions=*/false,
4787                               /*AllowExplicit=*/true,
4788                               /*InOverloadResolution=*/false,
4789                               /*CStyle=*/false,
4790                               /*AllowObjCWritebackConversion=*/false);
4791}
4792
4793/// PerformContextuallyConvertToBool - Perform a contextual conversion
4794/// of the expression From to bool (C++0x [conv]p3).
4795ExprResult Sema::PerformContextuallyConvertToBool(Expr *From) {
4796  if (checkPlaceholderForOverload(*this, From))
4797    return ExprError();
4798
4799  ImplicitConversionSequence ICS = TryContextuallyConvertToBool(*this, From);
4800  if (!ICS.isBad())
4801    return PerformImplicitConversion(From, Context.BoolTy, ICS, AA_Converting);
4802
4803  if (!DiagnoseMultipleUserDefinedConversion(From, Context.BoolTy))
4804    return Diag(From->getLocStart(),
4805                diag::err_typecheck_bool_condition)
4806                  << From->getType() << From->getSourceRange();
4807  return ExprError();
4808}
4809
4810/// Check that the specified conversion is permitted in a converted constant
4811/// expression, according to C++11 [expr.const]p3. Return true if the conversion
4812/// is acceptable.
4813static bool CheckConvertedConstantConversions(Sema &S,
4814                                              StandardConversionSequence &SCS) {
4815  // Since we know that the target type is an integral or unscoped enumeration
4816  // type, most conversion kinds are impossible. All possible First and Third
4817  // conversions are fine.
4818  switch (SCS.Second) {
4819  case ICK_Identity:
4820  case ICK_Integral_Promotion:
4821  case ICK_Integral_Conversion:
4822    return true;
4823
4824  case ICK_Boolean_Conversion:
4825    // Conversion from an integral or unscoped enumeration type to bool is
4826    // classified as ICK_Boolean_Conversion, but it's also an integral
4827    // conversion, so it's permitted in a converted constant expression.
4828    return SCS.getFromType()->isIntegralOrUnscopedEnumerationType() &&
4829           SCS.getToType(2)->isBooleanType();
4830
4831  case ICK_Floating_Integral:
4832  case ICK_Complex_Real:
4833    return false;
4834
4835  case ICK_Lvalue_To_Rvalue:
4836  case ICK_Array_To_Pointer:
4837  case ICK_Function_To_Pointer:
4838  case ICK_NoReturn_Adjustment:
4839  case ICK_Qualification:
4840  case ICK_Compatible_Conversion:
4841  case ICK_Vector_Conversion:
4842  case ICK_Vector_Splat:
4843  case ICK_Derived_To_Base:
4844  case ICK_Pointer_Conversion:
4845  case ICK_Pointer_Member:
4846  case ICK_Block_Pointer_Conversion:
4847  case ICK_Writeback_Conversion:
4848  case ICK_Floating_Promotion:
4849  case ICK_Complex_Promotion:
4850  case ICK_Complex_Conversion:
4851  case ICK_Floating_Conversion:
4852  case ICK_TransparentUnionConversion:
4853    llvm_unreachable("unexpected second conversion kind");
4854
4855  case ICK_Num_Conversion_Kinds:
4856    break;
4857  }
4858
4859  llvm_unreachable("unknown conversion kind");
4860}
4861
4862/// CheckConvertedConstantExpression - Check that the expression From is a
4863/// converted constant expression of type T, perform the conversion and produce
4864/// the converted expression, per C++11 [expr.const]p3.
4865ExprResult Sema::CheckConvertedConstantExpression(Expr *From, QualType T,
4866                                                  llvm::APSInt &Value,
4867                                                  CCEKind CCE) {
4868  assert(LangOpts.CPlusPlus0x && "converted constant expression outside C++11");
4869  assert(T->isIntegralOrEnumerationType() && "unexpected converted const type");
4870
4871  if (checkPlaceholderForOverload(*this, From))
4872    return ExprError();
4873
4874  // C++11 [expr.const]p3 with proposed wording fixes:
4875  //  A converted constant expression of type T is a core constant expression,
4876  //  implicitly converted to a prvalue of type T, where the converted
4877  //  expression is a literal constant expression and the implicit conversion
4878  //  sequence contains only user-defined conversions, lvalue-to-rvalue
4879  //  conversions, integral promotions, and integral conversions other than
4880  //  narrowing conversions.
4881  ImplicitConversionSequence ICS =
4882    TryImplicitConversion(From, T,
4883                          /*SuppressUserConversions=*/false,
4884                          /*AllowExplicit=*/false,
4885                          /*InOverloadResolution=*/false,
4886                          /*CStyle=*/false,
4887                          /*AllowObjcWritebackConversion=*/false);
4888  StandardConversionSequence *SCS = 0;
4889  switch (ICS.getKind()) {
4890  case ImplicitConversionSequence::StandardConversion:
4891    if (!CheckConvertedConstantConversions(*this, ICS.Standard))
4892      return Diag(From->getLocStart(),
4893                  diag::err_typecheck_converted_constant_expression_disallowed)
4894               << From->getType() << From->getSourceRange() << T;
4895    SCS = &ICS.Standard;
4896    break;
4897  case ImplicitConversionSequence::UserDefinedConversion:
4898    // We are converting from class type to an integral or enumeration type, so
4899    // the Before sequence must be trivial.
4900    if (!CheckConvertedConstantConversions(*this, ICS.UserDefined.After))
4901      return Diag(From->getLocStart(),
4902                  diag::err_typecheck_converted_constant_expression_disallowed)
4903               << From->getType() << From->getSourceRange() << T;
4904    SCS = &ICS.UserDefined.After;
4905    break;
4906  case ImplicitConversionSequence::AmbiguousConversion:
4907  case ImplicitConversionSequence::BadConversion:
4908    if (!DiagnoseMultipleUserDefinedConversion(From, T))
4909      return Diag(From->getLocStart(),
4910                  diag::err_typecheck_converted_constant_expression)
4911                    << From->getType() << From->getSourceRange() << T;
4912    return ExprError();
4913
4914  case ImplicitConversionSequence::EllipsisConversion:
4915    llvm_unreachable("ellipsis conversion in converted constant expression");
4916  }
4917
4918  ExprResult Result = PerformImplicitConversion(From, T, ICS, AA_Converting);
4919  if (Result.isInvalid())
4920    return Result;
4921
4922  // Check for a narrowing implicit conversion.
4923  APValue PreNarrowingValue;
4924  QualType PreNarrowingType;
4925  switch (SCS->getNarrowingKind(Context, Result.get(), PreNarrowingValue,
4926                                PreNarrowingType)) {
4927  case NK_Variable_Narrowing:
4928    // Implicit conversion to a narrower type, and the value is not a constant
4929    // expression. We'll diagnose this in a moment.
4930  case NK_Not_Narrowing:
4931    break;
4932
4933  case NK_Constant_Narrowing:
4934    Diag(From->getLocStart(),
4935         isSFINAEContext() ? diag::err_cce_narrowing_sfinae :
4936                             diag::err_cce_narrowing)
4937      << CCE << /*Constant*/1
4938      << PreNarrowingValue.getAsString(Context, PreNarrowingType) << T;
4939    break;
4940
4941  case NK_Type_Narrowing:
4942    Diag(From->getLocStart(),
4943         isSFINAEContext() ? diag::err_cce_narrowing_sfinae :
4944                             diag::err_cce_narrowing)
4945      << CCE << /*Constant*/0 << From->getType() << T;
4946    break;
4947  }
4948
4949  // Check the expression is a constant expression.
4950  llvm::SmallVector<PartialDiagnosticAt, 8> Notes;
4951  Expr::EvalResult Eval;
4952  Eval.Diag = &Notes;
4953
4954  if (!Result.get()->EvaluateAsRValue(Eval, Context)) {
4955    // The expression can't be folded, so we can't keep it at this position in
4956    // the AST.
4957    Result = ExprError();
4958  } else {
4959    Value = Eval.Val.getInt();
4960
4961    if (Notes.empty()) {
4962      // It's a constant expression.
4963      return Result;
4964    }
4965  }
4966
4967  // It's not a constant expression. Produce an appropriate diagnostic.
4968  if (Notes.size() == 1 &&
4969      Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr)
4970    Diag(Notes[0].first, diag::err_expr_not_cce) << CCE;
4971  else {
4972    Diag(From->getLocStart(), diag::err_expr_not_cce)
4973      << CCE << From->getSourceRange();
4974    for (unsigned I = 0; I < Notes.size(); ++I)
4975      Diag(Notes[I].first, Notes[I].second);
4976  }
4977  return Result;
4978}
4979
4980/// dropPointerConversions - If the given standard conversion sequence
4981/// involves any pointer conversions, remove them.  This may change
4982/// the result type of the conversion sequence.
4983static void dropPointerConversion(StandardConversionSequence &SCS) {
4984  if (SCS.Second == ICK_Pointer_Conversion) {
4985    SCS.Second = ICK_Identity;
4986    SCS.Third = ICK_Identity;
4987    SCS.ToTypePtrs[2] = SCS.ToTypePtrs[1] = SCS.ToTypePtrs[0];
4988  }
4989}
4990
4991/// TryContextuallyConvertToObjCPointer - Attempt to contextually
4992/// convert the expression From to an Objective-C pointer type.
4993static ImplicitConversionSequence
4994TryContextuallyConvertToObjCPointer(Sema &S, Expr *From) {
4995  // Do an implicit conversion to 'id'.
4996  QualType Ty = S.Context.getObjCIdType();
4997  ImplicitConversionSequence ICS
4998    = TryImplicitConversion(S, From, Ty,
4999                            // FIXME: Are these flags correct?
5000                            /*SuppressUserConversions=*/false,
5001                            /*AllowExplicit=*/true,
5002                            /*InOverloadResolution=*/false,
5003                            /*CStyle=*/false,
5004                            /*AllowObjCWritebackConversion=*/false);
5005
5006  // Strip off any final conversions to 'id'.
5007  switch (ICS.getKind()) {
5008  case ImplicitConversionSequence::BadConversion:
5009  case ImplicitConversionSequence::AmbiguousConversion:
5010  case ImplicitConversionSequence::EllipsisConversion:
5011    break;
5012
5013  case ImplicitConversionSequence::UserDefinedConversion:
5014    dropPointerConversion(ICS.UserDefined.After);
5015    break;
5016
5017  case ImplicitConversionSequence::StandardConversion:
5018    dropPointerConversion(ICS.Standard);
5019    break;
5020  }
5021
5022  return ICS;
5023}
5024
5025/// PerformContextuallyConvertToObjCPointer - Perform a contextual
5026/// conversion of the expression From to an Objective-C pointer type.
5027ExprResult Sema::PerformContextuallyConvertToObjCPointer(Expr *From) {
5028  if (checkPlaceholderForOverload(*this, From))
5029    return ExprError();
5030
5031  QualType Ty = Context.getObjCIdType();
5032  ImplicitConversionSequence ICS =
5033    TryContextuallyConvertToObjCPointer(*this, From);
5034  if (!ICS.isBad())
5035    return PerformImplicitConversion(From, Ty, ICS, AA_Converting);
5036  return ExprError();
5037}
5038
5039/// Determine whether the provided type is an integral type, or an enumeration
5040/// type of a permitted flavor.
5041static bool isIntegralOrEnumerationType(QualType T, bool AllowScopedEnum) {
5042  return AllowScopedEnum ? T->isIntegralOrEnumerationType()
5043                         : T->isIntegralOrUnscopedEnumerationType();
5044}
5045
5046/// \brief Attempt to convert the given expression to an integral or
5047/// enumeration type.
5048///
5049/// This routine will attempt to convert an expression of class type to an
5050/// integral or enumeration type, if that class type only has a single
5051/// conversion to an integral or enumeration type.
5052///
5053/// \param Loc The source location of the construct that requires the
5054/// conversion.
5055///
5056/// \param From The expression we're converting from.
5057///
5058/// \param Diagnoser Used to output any diagnostics.
5059///
5060/// \param AllowScopedEnumerations Specifies whether conversions to scoped
5061/// enumerations should be considered.
5062///
5063/// \returns The expression, converted to an integral or enumeration type if
5064/// successful.
5065ExprResult
5066Sema::ConvertToIntegralOrEnumerationType(SourceLocation Loc, Expr *From,
5067                                         ICEConvertDiagnoser &Diagnoser,
5068                                         bool AllowScopedEnumerations) {
5069  // We can't perform any more checking for type-dependent expressions.
5070  if (From->isTypeDependent())
5071    return Owned(From);
5072
5073  // Process placeholders immediately.
5074  if (From->hasPlaceholderType()) {
5075    ExprResult result = CheckPlaceholderExpr(From);
5076    if (result.isInvalid()) return result;
5077    From = result.take();
5078  }
5079
5080  // If the expression already has integral or enumeration type, we're golden.
5081  QualType T = From->getType();
5082  if (isIntegralOrEnumerationType(T, AllowScopedEnumerations))
5083    return DefaultLvalueConversion(From);
5084
5085  // FIXME: Check for missing '()' if T is a function type?
5086
5087  // If we don't have a class type in C++, there's no way we can get an
5088  // expression of integral or enumeration type.
5089  const RecordType *RecordTy = T->getAs<RecordType>();
5090  if (!RecordTy || !getLangOpts().CPlusPlus) {
5091    if (!Diagnoser.Suppress)
5092      Diagnoser.diagnoseNotInt(*this, Loc, T) << From->getSourceRange();
5093    return Owned(From);
5094  }
5095
5096  // We must have a complete class type.
5097  struct TypeDiagnoserPartialDiag : TypeDiagnoser {
5098    ICEConvertDiagnoser &Diagnoser;
5099    Expr *From;
5100
5101    TypeDiagnoserPartialDiag(ICEConvertDiagnoser &Diagnoser, Expr *From)
5102      : TypeDiagnoser(Diagnoser.Suppress), Diagnoser(Diagnoser), From(From) {}
5103
5104    virtual void diagnose(Sema &S, SourceLocation Loc, QualType T) {
5105      Diagnoser.diagnoseIncomplete(S, Loc, T) << From->getSourceRange();
5106    }
5107  } IncompleteDiagnoser(Diagnoser, From);
5108
5109  if (RequireCompleteType(Loc, T, IncompleteDiagnoser))
5110    return Owned(From);
5111
5112  // Look for a conversion to an integral or enumeration type.
5113  UnresolvedSet<4> ViableConversions;
5114  UnresolvedSet<4> ExplicitConversions;
5115  const UnresolvedSetImpl *Conversions
5116    = cast<CXXRecordDecl>(RecordTy->getDecl())->getVisibleConversionFunctions();
5117
5118  bool HadMultipleCandidates = (Conversions->size() > 1);
5119
5120  for (UnresolvedSetImpl::iterator I = Conversions->begin(),
5121                                   E = Conversions->end();
5122       I != E;
5123       ++I) {
5124    if (CXXConversionDecl *Conversion
5125          = dyn_cast<CXXConversionDecl>((*I)->getUnderlyingDecl())) {
5126      if (isIntegralOrEnumerationType(
5127            Conversion->getConversionType().getNonReferenceType(),
5128            AllowScopedEnumerations)) {
5129        if (Conversion->isExplicit())
5130          ExplicitConversions.addDecl(I.getDecl(), I.getAccess());
5131        else
5132          ViableConversions.addDecl(I.getDecl(), I.getAccess());
5133      }
5134    }
5135  }
5136
5137  switch (ViableConversions.size()) {
5138  case 0:
5139    if (ExplicitConversions.size() == 1 && !Diagnoser.Suppress) {
5140      DeclAccessPair Found = ExplicitConversions[0];
5141      CXXConversionDecl *Conversion
5142        = cast<CXXConversionDecl>(Found->getUnderlyingDecl());
5143
5144      // The user probably meant to invoke the given explicit
5145      // conversion; use it.
5146      QualType ConvTy
5147        = Conversion->getConversionType().getNonReferenceType();
5148      std::string TypeStr;
5149      ConvTy.getAsStringInternal(TypeStr, getPrintingPolicy());
5150
5151      Diagnoser.diagnoseExplicitConv(*this, Loc, T, ConvTy)
5152        << FixItHint::CreateInsertion(From->getLocStart(),
5153                                      "static_cast<" + TypeStr + ">(")
5154        << FixItHint::CreateInsertion(PP.getLocForEndOfToken(From->getLocEnd()),
5155                                      ")");
5156      Diagnoser.noteExplicitConv(*this, Conversion, ConvTy);
5157
5158      // If we aren't in a SFINAE context, build a call to the
5159      // explicit conversion function.
5160      if (isSFINAEContext())
5161        return ExprError();
5162
5163      CheckMemberOperatorAccess(From->getExprLoc(), From, 0, Found);
5164      ExprResult Result = BuildCXXMemberCallExpr(From, Found, Conversion,
5165                                                 HadMultipleCandidates);
5166      if (Result.isInvalid())
5167        return ExprError();
5168      // Record usage of conversion in an implicit cast.
5169      From = ImplicitCastExpr::Create(Context, Result.get()->getType(),
5170                                      CK_UserDefinedConversion,
5171                                      Result.get(), 0,
5172                                      Result.get()->getValueKind());
5173    }
5174
5175    // We'll complain below about a non-integral condition type.
5176    break;
5177
5178  case 1: {
5179    // Apply this conversion.
5180    DeclAccessPair Found = ViableConversions[0];
5181    CheckMemberOperatorAccess(From->getExprLoc(), From, 0, Found);
5182
5183    CXXConversionDecl *Conversion
5184      = cast<CXXConversionDecl>(Found->getUnderlyingDecl());
5185    QualType ConvTy
5186      = Conversion->getConversionType().getNonReferenceType();
5187    if (!Diagnoser.SuppressConversion) {
5188      if (isSFINAEContext())
5189        return ExprError();
5190
5191      Diagnoser.diagnoseConversion(*this, Loc, T, ConvTy)
5192        << From->getSourceRange();
5193    }
5194
5195    ExprResult Result = BuildCXXMemberCallExpr(From, Found, Conversion,
5196                                               HadMultipleCandidates);
5197    if (Result.isInvalid())
5198      return ExprError();
5199    // Record usage of conversion in an implicit cast.
5200    From = ImplicitCastExpr::Create(Context, Result.get()->getType(),
5201                                    CK_UserDefinedConversion,
5202                                    Result.get(), 0,
5203                                    Result.get()->getValueKind());
5204    break;
5205  }
5206
5207  default:
5208    if (Diagnoser.Suppress)
5209      return ExprError();
5210
5211    Diagnoser.diagnoseAmbiguous(*this, Loc, T) << From->getSourceRange();
5212    for (unsigned I = 0, N = ViableConversions.size(); I != N; ++I) {
5213      CXXConversionDecl *Conv
5214        = cast<CXXConversionDecl>(ViableConversions[I]->getUnderlyingDecl());
5215      QualType ConvTy = Conv->getConversionType().getNonReferenceType();
5216      Diagnoser.noteAmbiguous(*this, Conv, ConvTy);
5217    }
5218    return Owned(From);
5219  }
5220
5221  if (!isIntegralOrEnumerationType(From->getType(), AllowScopedEnumerations) &&
5222      !Diagnoser.Suppress) {
5223    Diagnoser.diagnoseNotInt(*this, Loc, From->getType())
5224      << From->getSourceRange();
5225  }
5226
5227  return DefaultLvalueConversion(From);
5228}
5229
5230/// AddOverloadCandidate - Adds the given function to the set of
5231/// candidate functions, using the given function call arguments.  If
5232/// @p SuppressUserConversions, then don't allow user-defined
5233/// conversions via constructors or conversion operators.
5234///
5235/// \param PartialOverloading true if we are performing "partial" overloading
5236/// based on an incomplete set of function arguments. This feature is used by
5237/// code completion.
5238void
5239Sema::AddOverloadCandidate(FunctionDecl *Function,
5240                           DeclAccessPair FoundDecl,
5241                           llvm::ArrayRef<Expr *> Args,
5242                           OverloadCandidateSet& CandidateSet,
5243                           bool SuppressUserConversions,
5244                           bool PartialOverloading,
5245                           bool AllowExplicit) {
5246  const FunctionProtoType* Proto
5247    = dyn_cast<FunctionProtoType>(Function->getType()->getAs<FunctionType>());
5248  assert(Proto && "Functions without a prototype cannot be overloaded");
5249  assert(!Function->getDescribedFunctionTemplate() &&
5250         "Use AddTemplateOverloadCandidate for function templates");
5251
5252  if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Function)) {
5253    if (!isa<CXXConstructorDecl>(Method)) {
5254      // If we get here, it's because we're calling a member function
5255      // that is named without a member access expression (e.g.,
5256      // "this->f") that was either written explicitly or created
5257      // implicitly. This can happen with a qualified call to a member
5258      // function, e.g., X::f(). We use an empty type for the implied
5259      // object argument (C++ [over.call.func]p3), and the acting context
5260      // is irrelevant.
5261      AddMethodCandidate(Method, FoundDecl, Method->getParent(),
5262                         QualType(), Expr::Classification::makeSimpleLValue(),
5263                         Args, CandidateSet, SuppressUserConversions);
5264      return;
5265    }
5266    // We treat a constructor like a non-member function, since its object
5267    // argument doesn't participate in overload resolution.
5268  }
5269
5270  if (!CandidateSet.isNewCandidate(Function))
5271    return;
5272
5273  // Overload resolution is always an unevaluated context.
5274  EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5275
5276  if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Function)){
5277    // C++ [class.copy]p3:
5278    //   A member function template is never instantiated to perform the copy
5279    //   of a class object to an object of its class type.
5280    QualType ClassType = Context.getTypeDeclType(Constructor->getParent());
5281    if (Args.size() == 1 &&
5282        Constructor->isSpecializationCopyingObject() &&
5283        (Context.hasSameUnqualifiedType(ClassType, Args[0]->getType()) ||
5284         IsDerivedFrom(Args[0]->getType(), ClassType)))
5285      return;
5286  }
5287
5288  // Add this candidate
5289  OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size());
5290  Candidate.FoundDecl = FoundDecl;
5291  Candidate.Function = Function;
5292  Candidate.Viable = true;
5293  Candidate.IsSurrogate = false;
5294  Candidate.IgnoreObjectArgument = false;
5295  Candidate.ExplicitCallArguments = Args.size();
5296
5297  unsigned NumArgsInProto = Proto->getNumArgs();
5298
5299  // (C++ 13.3.2p2): A candidate function having fewer than m
5300  // parameters is viable only if it has an ellipsis in its parameter
5301  // list (8.3.5).
5302  if ((Args.size() + (PartialOverloading && Args.size())) > NumArgsInProto &&
5303      !Proto->isVariadic()) {
5304    Candidate.Viable = false;
5305    Candidate.FailureKind = ovl_fail_too_many_arguments;
5306    return;
5307  }
5308
5309  // (C++ 13.3.2p2): A candidate function having more than m parameters
5310  // is viable only if the (m+1)st parameter has a default argument
5311  // (8.3.6). For the purposes of overload resolution, the
5312  // parameter list is truncated on the right, so that there are
5313  // exactly m parameters.
5314  unsigned MinRequiredArgs = Function->getMinRequiredArguments();
5315  if (Args.size() < MinRequiredArgs && !PartialOverloading) {
5316    // Not enough arguments.
5317    Candidate.Viable = false;
5318    Candidate.FailureKind = ovl_fail_too_few_arguments;
5319    return;
5320  }
5321
5322  // (CUDA B.1): Check for invalid calls between targets.
5323  if (getLangOpts().CUDA)
5324    if (const FunctionDecl *Caller = dyn_cast<FunctionDecl>(CurContext))
5325      if (CheckCUDATarget(Caller, Function)) {
5326        Candidate.Viable = false;
5327        Candidate.FailureKind = ovl_fail_bad_target;
5328        return;
5329      }
5330
5331  // Determine the implicit conversion sequences for each of the
5332  // arguments.
5333  for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
5334    if (ArgIdx < NumArgsInProto) {
5335      // (C++ 13.3.2p3): for F to be a viable function, there shall
5336      // exist for each argument an implicit conversion sequence
5337      // (13.3.3.1) that converts that argument to the corresponding
5338      // parameter of F.
5339      QualType ParamType = Proto->getArgType(ArgIdx);
5340      Candidate.Conversions[ArgIdx]
5341        = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5342                                SuppressUserConversions,
5343                                /*InOverloadResolution=*/true,
5344                                /*AllowObjCWritebackConversion=*/
5345                                  getLangOpts().ObjCAutoRefCount,
5346                                AllowExplicit);
5347      if (Candidate.Conversions[ArgIdx].isBad()) {
5348        Candidate.Viable = false;
5349        Candidate.FailureKind = ovl_fail_bad_conversion;
5350        break;
5351      }
5352    } else {
5353      // (C++ 13.3.2p2): For the purposes of overload resolution, any
5354      // argument for which there is no corresponding parameter is
5355      // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
5356      Candidate.Conversions[ArgIdx].setEllipsis();
5357    }
5358  }
5359}
5360
5361/// \brief Add all of the function declarations in the given function set to
5362/// the overload canddiate set.
5363void Sema::AddFunctionCandidates(const UnresolvedSetImpl &Fns,
5364                                 llvm::ArrayRef<Expr *> Args,
5365                                 OverloadCandidateSet& CandidateSet,
5366                                 bool SuppressUserConversions,
5367                               TemplateArgumentListInfo *ExplicitTemplateArgs) {
5368  for (UnresolvedSetIterator F = Fns.begin(), E = Fns.end(); F != E; ++F) {
5369    NamedDecl *D = F.getDecl()->getUnderlyingDecl();
5370    if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
5371      if (isa<CXXMethodDecl>(FD) && !cast<CXXMethodDecl>(FD)->isStatic())
5372        AddMethodCandidate(cast<CXXMethodDecl>(FD), F.getPair(),
5373                           cast<CXXMethodDecl>(FD)->getParent(),
5374                           Args[0]->getType(), Args[0]->Classify(Context),
5375                           Args.slice(1), CandidateSet,
5376                           SuppressUserConversions);
5377      else
5378        AddOverloadCandidate(FD, F.getPair(), Args, CandidateSet,
5379                             SuppressUserConversions);
5380    } else {
5381      FunctionTemplateDecl *FunTmpl = cast<FunctionTemplateDecl>(D);
5382      if (isa<CXXMethodDecl>(FunTmpl->getTemplatedDecl()) &&
5383          !cast<CXXMethodDecl>(FunTmpl->getTemplatedDecl())->isStatic())
5384        AddMethodTemplateCandidate(FunTmpl, F.getPair(),
5385                              cast<CXXRecordDecl>(FunTmpl->getDeclContext()),
5386                                   ExplicitTemplateArgs,
5387                                   Args[0]->getType(),
5388                                   Args[0]->Classify(Context), Args.slice(1),
5389                                   CandidateSet, SuppressUserConversions);
5390      else
5391        AddTemplateOverloadCandidate(FunTmpl, F.getPair(),
5392                                     ExplicitTemplateArgs, Args,
5393                                     CandidateSet, SuppressUserConversions);
5394    }
5395  }
5396}
5397
5398/// AddMethodCandidate - Adds a named decl (which is some kind of
5399/// method) as a method candidate to the given overload set.
5400void Sema::AddMethodCandidate(DeclAccessPair FoundDecl,
5401                              QualType ObjectType,
5402                              Expr::Classification ObjectClassification,
5403                              Expr **Args, unsigned NumArgs,
5404                              OverloadCandidateSet& CandidateSet,
5405                              bool SuppressUserConversions) {
5406  NamedDecl *Decl = FoundDecl.getDecl();
5407  CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(Decl->getDeclContext());
5408
5409  if (isa<UsingShadowDecl>(Decl))
5410    Decl = cast<UsingShadowDecl>(Decl)->getTargetDecl();
5411
5412  if (FunctionTemplateDecl *TD = dyn_cast<FunctionTemplateDecl>(Decl)) {
5413    assert(isa<CXXMethodDecl>(TD->getTemplatedDecl()) &&
5414           "Expected a member function template");
5415    AddMethodTemplateCandidate(TD, FoundDecl, ActingContext,
5416                               /*ExplicitArgs*/ 0,
5417                               ObjectType, ObjectClassification,
5418                               llvm::makeArrayRef(Args, NumArgs), CandidateSet,
5419                               SuppressUserConversions);
5420  } else {
5421    AddMethodCandidate(cast<CXXMethodDecl>(Decl), FoundDecl, ActingContext,
5422                       ObjectType, ObjectClassification,
5423                       llvm::makeArrayRef(Args, NumArgs),
5424                       CandidateSet, SuppressUserConversions);
5425  }
5426}
5427
5428/// AddMethodCandidate - Adds the given C++ member function to the set
5429/// of candidate functions, using the given function call arguments
5430/// and the object argument (@c Object). For example, in a call
5431/// @c o.f(a1,a2), @c Object will contain @c o and @c Args will contain
5432/// both @c a1 and @c a2. If @p SuppressUserConversions, then don't
5433/// allow user-defined conversions via constructors or conversion
5434/// operators.
5435void
5436Sema::AddMethodCandidate(CXXMethodDecl *Method, DeclAccessPair FoundDecl,
5437                         CXXRecordDecl *ActingContext, QualType ObjectType,
5438                         Expr::Classification ObjectClassification,
5439                         llvm::ArrayRef<Expr *> Args,
5440                         OverloadCandidateSet& CandidateSet,
5441                         bool SuppressUserConversions) {
5442  const FunctionProtoType* Proto
5443    = dyn_cast<FunctionProtoType>(Method->getType()->getAs<FunctionType>());
5444  assert(Proto && "Methods without a prototype cannot be overloaded");
5445  assert(!isa<CXXConstructorDecl>(Method) &&
5446         "Use AddOverloadCandidate for constructors");
5447
5448  if (!CandidateSet.isNewCandidate(Method))
5449    return;
5450
5451  // Overload resolution is always an unevaluated context.
5452  EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5453
5454  // Add this candidate
5455  OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size() + 1);
5456  Candidate.FoundDecl = FoundDecl;
5457  Candidate.Function = Method;
5458  Candidate.IsSurrogate = false;
5459  Candidate.IgnoreObjectArgument = false;
5460  Candidate.ExplicitCallArguments = Args.size();
5461
5462  unsigned NumArgsInProto = Proto->getNumArgs();
5463
5464  // (C++ 13.3.2p2): A candidate function having fewer than m
5465  // parameters is viable only if it has an ellipsis in its parameter
5466  // list (8.3.5).
5467  if (Args.size() > NumArgsInProto && !Proto->isVariadic()) {
5468    Candidate.Viable = false;
5469    Candidate.FailureKind = ovl_fail_too_many_arguments;
5470    return;
5471  }
5472
5473  // (C++ 13.3.2p2): A candidate function having more than m parameters
5474  // is viable only if the (m+1)st parameter has a default argument
5475  // (8.3.6). For the purposes of overload resolution, the
5476  // parameter list is truncated on the right, so that there are
5477  // exactly m parameters.
5478  unsigned MinRequiredArgs = Method->getMinRequiredArguments();
5479  if (Args.size() < MinRequiredArgs) {
5480    // Not enough arguments.
5481    Candidate.Viable = false;
5482    Candidate.FailureKind = ovl_fail_too_few_arguments;
5483    return;
5484  }
5485
5486  Candidate.Viable = true;
5487
5488  if (Method->isStatic() || ObjectType.isNull())
5489    // The implicit object argument is ignored.
5490    Candidate.IgnoreObjectArgument = true;
5491  else {
5492    // Determine the implicit conversion sequence for the object
5493    // parameter.
5494    Candidate.Conversions[0]
5495      = TryObjectArgumentInitialization(*this, ObjectType, ObjectClassification,
5496                                        Method, ActingContext);
5497    if (Candidate.Conversions[0].isBad()) {
5498      Candidate.Viable = false;
5499      Candidate.FailureKind = ovl_fail_bad_conversion;
5500      return;
5501    }
5502  }
5503
5504  // Determine the implicit conversion sequences for each of the
5505  // arguments.
5506  for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
5507    if (ArgIdx < NumArgsInProto) {
5508      // (C++ 13.3.2p3): for F to be a viable function, there shall
5509      // exist for each argument an implicit conversion sequence
5510      // (13.3.3.1) that converts that argument to the corresponding
5511      // parameter of F.
5512      QualType ParamType = Proto->getArgType(ArgIdx);
5513      Candidate.Conversions[ArgIdx + 1]
5514        = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5515                                SuppressUserConversions,
5516                                /*InOverloadResolution=*/true,
5517                                /*AllowObjCWritebackConversion=*/
5518                                  getLangOpts().ObjCAutoRefCount);
5519      if (Candidate.Conversions[ArgIdx + 1].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 + 1].setEllipsis();
5529    }
5530  }
5531}
5532
5533/// \brief Add a C++ member function template as a candidate to the candidate
5534/// set, using template argument deduction to produce an appropriate member
5535/// function template specialization.
5536void
5537Sema::AddMethodTemplateCandidate(FunctionTemplateDecl *MethodTmpl,
5538                                 DeclAccessPair FoundDecl,
5539                                 CXXRecordDecl *ActingContext,
5540                                 TemplateArgumentListInfo *ExplicitTemplateArgs,
5541                                 QualType ObjectType,
5542                                 Expr::Classification ObjectClassification,
5543                                 llvm::ArrayRef<Expr *> Args,
5544                                 OverloadCandidateSet& CandidateSet,
5545                                 bool SuppressUserConversions) {
5546  if (!CandidateSet.isNewCandidate(MethodTmpl))
5547    return;
5548
5549  // C++ [over.match.funcs]p7:
5550  //   In each case where a candidate is a function template, candidate
5551  //   function template specializations are generated using template argument
5552  //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
5553  //   candidate functions in the usual way.113) A given name can refer to one
5554  //   or more function templates and also to a set of overloaded non-template
5555  //   functions. In such a case, the candidate functions generated from each
5556  //   function template are combined with the set of non-template candidate
5557  //   functions.
5558  TemplateDeductionInfo Info(CandidateSet.getLocation());
5559  FunctionDecl *Specialization = 0;
5560  if (TemplateDeductionResult Result
5561      = DeduceTemplateArguments(MethodTmpl, ExplicitTemplateArgs, Args,
5562                                Specialization, Info)) {
5563    OverloadCandidate &Candidate = CandidateSet.addCandidate();
5564    Candidate.FoundDecl = FoundDecl;
5565    Candidate.Function = MethodTmpl->getTemplatedDecl();
5566    Candidate.Viable = false;
5567    Candidate.FailureKind = ovl_fail_bad_deduction;
5568    Candidate.IsSurrogate = false;
5569    Candidate.IgnoreObjectArgument = false;
5570    Candidate.ExplicitCallArguments = Args.size();
5571    Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5572                                                          Info);
5573    return;
5574  }
5575
5576  // Add the function template specialization produced by template argument
5577  // deduction as a candidate.
5578  assert(Specialization && "Missing member function template specialization?");
5579  assert(isa<CXXMethodDecl>(Specialization) &&
5580         "Specialization is not a member function?");
5581  AddMethodCandidate(cast<CXXMethodDecl>(Specialization), FoundDecl,
5582                     ActingContext, ObjectType, ObjectClassification, Args,
5583                     CandidateSet, SuppressUserConversions);
5584}
5585
5586/// \brief Add a C++ function template specialization as a candidate
5587/// in the candidate set, using template argument deduction to produce
5588/// an appropriate function template specialization.
5589void
5590Sema::AddTemplateOverloadCandidate(FunctionTemplateDecl *FunctionTemplate,
5591                                   DeclAccessPair FoundDecl,
5592                                 TemplateArgumentListInfo *ExplicitTemplateArgs,
5593                                   llvm::ArrayRef<Expr *> Args,
5594                                   OverloadCandidateSet& CandidateSet,
5595                                   bool SuppressUserConversions) {
5596  if (!CandidateSet.isNewCandidate(FunctionTemplate))
5597    return;
5598
5599  // C++ [over.match.funcs]p7:
5600  //   In each case where a candidate is a function template, candidate
5601  //   function template specializations are generated using template argument
5602  //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
5603  //   candidate functions in the usual way.113) A given name can refer to one
5604  //   or more function templates and also to a set of overloaded non-template
5605  //   functions. In such a case, the candidate functions generated from each
5606  //   function template are combined with the set of non-template candidate
5607  //   functions.
5608  TemplateDeductionInfo Info(CandidateSet.getLocation());
5609  FunctionDecl *Specialization = 0;
5610  if (TemplateDeductionResult Result
5611        = DeduceTemplateArguments(FunctionTemplate, ExplicitTemplateArgs, Args,
5612                                  Specialization, Info)) {
5613    OverloadCandidate &Candidate = CandidateSet.addCandidate();
5614    Candidate.FoundDecl = FoundDecl;
5615    Candidate.Function = FunctionTemplate->getTemplatedDecl();
5616    Candidate.Viable = false;
5617    Candidate.FailureKind = ovl_fail_bad_deduction;
5618    Candidate.IsSurrogate = false;
5619    Candidate.IgnoreObjectArgument = false;
5620    Candidate.ExplicitCallArguments = Args.size();
5621    Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5622                                                          Info);
5623    return;
5624  }
5625
5626  // Add the function template specialization produced by template argument
5627  // deduction as a candidate.
5628  assert(Specialization && "Missing function template specialization?");
5629  AddOverloadCandidate(Specialization, FoundDecl, Args, CandidateSet,
5630                       SuppressUserConversions);
5631}
5632
5633/// AddConversionCandidate - Add a C++ conversion function as a
5634/// candidate in the candidate set (C++ [over.match.conv],
5635/// C++ [over.match.copy]). From is the expression we're converting from,
5636/// and ToType is the type that we're eventually trying to convert to
5637/// (which may or may not be the same type as the type that the
5638/// conversion function produces).
5639void
5640Sema::AddConversionCandidate(CXXConversionDecl *Conversion,
5641                             DeclAccessPair FoundDecl,
5642                             CXXRecordDecl *ActingContext,
5643                             Expr *From, QualType ToType,
5644                             OverloadCandidateSet& CandidateSet) {
5645  assert(!Conversion->getDescribedFunctionTemplate() &&
5646         "Conversion function templates use AddTemplateConversionCandidate");
5647  QualType ConvType = Conversion->getConversionType().getNonReferenceType();
5648  if (!CandidateSet.isNewCandidate(Conversion))
5649    return;
5650
5651  // Overload resolution is always an unevaluated context.
5652  EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5653
5654  // Add this candidate
5655  OverloadCandidate &Candidate = CandidateSet.addCandidate(1);
5656  Candidate.FoundDecl = FoundDecl;
5657  Candidate.Function = Conversion;
5658  Candidate.IsSurrogate = false;
5659  Candidate.IgnoreObjectArgument = false;
5660  Candidate.FinalConversion.setAsIdentityConversion();
5661  Candidate.FinalConversion.setFromType(ConvType);
5662  Candidate.FinalConversion.setAllToTypes(ToType);
5663  Candidate.Viable = true;
5664  Candidate.ExplicitCallArguments = 1;
5665
5666  // C++ [over.match.funcs]p4:
5667  //   For conversion functions, the function is considered to be a member of
5668  //   the class of the implicit implied object argument for the purpose of
5669  //   defining the type of the implicit object parameter.
5670  //
5671  // Determine the implicit conversion sequence for the implicit
5672  // object parameter.
5673  QualType ImplicitParamType = From->getType();
5674  if (const PointerType *FromPtrType = ImplicitParamType->getAs<PointerType>())
5675    ImplicitParamType = FromPtrType->getPointeeType();
5676  CXXRecordDecl *ConversionContext
5677    = cast<CXXRecordDecl>(ImplicitParamType->getAs<RecordType>()->getDecl());
5678
5679  Candidate.Conversions[0]
5680    = TryObjectArgumentInitialization(*this, From->getType(),
5681                                      From->Classify(Context),
5682                                      Conversion, ConversionContext);
5683
5684  if (Candidate.Conversions[0].isBad()) {
5685    Candidate.Viable = false;
5686    Candidate.FailureKind = ovl_fail_bad_conversion;
5687    return;
5688  }
5689
5690  // We won't go through a user-define type conversion function to convert a
5691  // derived to base as such conversions are given Conversion Rank. They only
5692  // go through a copy constructor. 13.3.3.1.2-p4 [over.ics.user]
5693  QualType FromCanon
5694    = Context.getCanonicalType(From->getType().getUnqualifiedType());
5695  QualType ToCanon = Context.getCanonicalType(ToType).getUnqualifiedType();
5696  if (FromCanon == ToCanon || IsDerivedFrom(FromCanon, ToCanon)) {
5697    Candidate.Viable = false;
5698    Candidate.FailureKind = ovl_fail_trivial_conversion;
5699    return;
5700  }
5701
5702  // To determine what the conversion from the result of calling the
5703  // conversion function to the type we're eventually trying to
5704  // convert to (ToType), we need to synthesize a call to the
5705  // conversion function and attempt copy initialization from it. This
5706  // makes sure that we get the right semantics with respect to
5707  // lvalues/rvalues and the type. Fortunately, we can allocate this
5708  // call on the stack and we don't need its arguments to be
5709  // well-formed.
5710  DeclRefExpr ConversionRef(Conversion, false, Conversion->getType(),
5711                            VK_LValue, From->getLocStart());
5712  ImplicitCastExpr ConversionFn(ImplicitCastExpr::OnStack,
5713                                Context.getPointerType(Conversion->getType()),
5714                                CK_FunctionToPointerDecay,
5715                                &ConversionRef, VK_RValue);
5716
5717  QualType ConversionType = Conversion->getConversionType();
5718  if (RequireCompleteType(From->getLocStart(), ConversionType, 0)) {
5719    Candidate.Viable = false;
5720    Candidate.FailureKind = ovl_fail_bad_final_conversion;
5721    return;
5722  }
5723
5724  ExprValueKind VK = Expr::getValueKindForType(ConversionType);
5725
5726  // Note that it is safe to allocate CallExpr on the stack here because
5727  // there are 0 arguments (i.e., nothing is allocated using ASTContext's
5728  // allocator).
5729  QualType CallResultType = ConversionType.getNonLValueExprType(Context);
5730  CallExpr Call(Context, &ConversionFn, MultiExprArg(), CallResultType, VK,
5731                From->getLocStart());
5732  ImplicitConversionSequence ICS =
5733    TryCopyInitialization(*this, &Call, ToType,
5734                          /*SuppressUserConversions=*/true,
5735                          /*InOverloadResolution=*/false,
5736                          /*AllowObjCWritebackConversion=*/false);
5737
5738  switch (ICS.getKind()) {
5739  case ImplicitConversionSequence::StandardConversion:
5740    Candidate.FinalConversion = ICS.Standard;
5741
5742    // C++ [over.ics.user]p3:
5743    //   If the user-defined conversion is specified by a specialization of a
5744    //   conversion function template, the second standard conversion sequence
5745    //   shall have exact match rank.
5746    if (Conversion->getPrimaryTemplate() &&
5747        GetConversionRank(ICS.Standard.Second) != ICR_Exact_Match) {
5748      Candidate.Viable = false;
5749      Candidate.FailureKind = ovl_fail_final_conversion_not_exact;
5750    }
5751
5752    // C++0x [dcl.init.ref]p5:
5753    //    In the second case, if the reference is an rvalue reference and
5754    //    the second standard conversion sequence of the user-defined
5755    //    conversion sequence includes an lvalue-to-rvalue conversion, the
5756    //    program is ill-formed.
5757    if (ToType->isRValueReferenceType() &&
5758        ICS.Standard.First == ICK_Lvalue_To_Rvalue) {
5759      Candidate.Viable = false;
5760      Candidate.FailureKind = ovl_fail_bad_final_conversion;
5761    }
5762    break;
5763
5764  case ImplicitConversionSequence::BadConversion:
5765    Candidate.Viable = false;
5766    Candidate.FailureKind = ovl_fail_bad_final_conversion;
5767    break;
5768
5769  default:
5770    llvm_unreachable(
5771           "Can only end up with a standard conversion sequence or failure");
5772  }
5773}
5774
5775/// \brief Adds a conversion function template specialization
5776/// candidate to the overload set, using template argument deduction
5777/// to deduce the template arguments of the conversion function
5778/// template from the type that we are converting to (C++
5779/// [temp.deduct.conv]).
5780void
5781Sema::AddTemplateConversionCandidate(FunctionTemplateDecl *FunctionTemplate,
5782                                     DeclAccessPair FoundDecl,
5783                                     CXXRecordDecl *ActingDC,
5784                                     Expr *From, QualType ToType,
5785                                     OverloadCandidateSet &CandidateSet) {
5786  assert(isa<CXXConversionDecl>(FunctionTemplate->getTemplatedDecl()) &&
5787         "Only conversion function templates permitted here");
5788
5789  if (!CandidateSet.isNewCandidate(FunctionTemplate))
5790    return;
5791
5792  TemplateDeductionInfo Info(CandidateSet.getLocation());
5793  CXXConversionDecl *Specialization = 0;
5794  if (TemplateDeductionResult Result
5795        = DeduceTemplateArguments(FunctionTemplate, ToType,
5796                                  Specialization, Info)) {
5797    OverloadCandidate &Candidate = CandidateSet.addCandidate();
5798    Candidate.FoundDecl = FoundDecl;
5799    Candidate.Function = FunctionTemplate->getTemplatedDecl();
5800    Candidate.Viable = false;
5801    Candidate.FailureKind = ovl_fail_bad_deduction;
5802    Candidate.IsSurrogate = false;
5803    Candidate.IgnoreObjectArgument = false;
5804    Candidate.ExplicitCallArguments = 1;
5805    Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5806                                                          Info);
5807    return;
5808  }
5809
5810  // Add the conversion function template specialization produced by
5811  // template argument deduction as a candidate.
5812  assert(Specialization && "Missing function template specialization?");
5813  AddConversionCandidate(Specialization, FoundDecl, ActingDC, From, ToType,
5814                         CandidateSet);
5815}
5816
5817/// AddSurrogateCandidate - Adds a "surrogate" candidate function that
5818/// converts the given @c Object to a function pointer via the
5819/// conversion function @c Conversion, and then attempts to call it
5820/// with the given arguments (C++ [over.call.object]p2-4). Proto is
5821/// the type of function that we'll eventually be calling.
5822void Sema::AddSurrogateCandidate(CXXConversionDecl *Conversion,
5823                                 DeclAccessPair FoundDecl,
5824                                 CXXRecordDecl *ActingContext,
5825                                 const FunctionProtoType *Proto,
5826                                 Expr *Object,
5827                                 llvm::ArrayRef<Expr *> Args,
5828                                 OverloadCandidateSet& CandidateSet) {
5829  if (!CandidateSet.isNewCandidate(Conversion))
5830    return;
5831
5832  // Overload resolution is always an unevaluated context.
5833  EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5834
5835  OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size() + 1);
5836  Candidate.FoundDecl = FoundDecl;
5837  Candidate.Function = 0;
5838  Candidate.Surrogate = Conversion;
5839  Candidate.Viable = true;
5840  Candidate.IsSurrogate = true;
5841  Candidate.IgnoreObjectArgument = false;
5842  Candidate.ExplicitCallArguments = Args.size();
5843
5844  // Determine the implicit conversion sequence for the implicit
5845  // object parameter.
5846  ImplicitConversionSequence ObjectInit
5847    = TryObjectArgumentInitialization(*this, Object->getType(),
5848                                      Object->Classify(Context),
5849                                      Conversion, ActingContext);
5850  if (ObjectInit.isBad()) {
5851    Candidate.Viable = false;
5852    Candidate.FailureKind = ovl_fail_bad_conversion;
5853    Candidate.Conversions[0] = ObjectInit;
5854    return;
5855  }
5856
5857  // The first conversion is actually a user-defined conversion whose
5858  // first conversion is ObjectInit's standard conversion (which is
5859  // effectively a reference binding). Record it as such.
5860  Candidate.Conversions[0].setUserDefined();
5861  Candidate.Conversions[0].UserDefined.Before = ObjectInit.Standard;
5862  Candidate.Conversions[0].UserDefined.EllipsisConversion = false;
5863  Candidate.Conversions[0].UserDefined.HadMultipleCandidates = false;
5864  Candidate.Conversions[0].UserDefined.ConversionFunction = Conversion;
5865  Candidate.Conversions[0].UserDefined.FoundConversionFunction = FoundDecl;
5866  Candidate.Conversions[0].UserDefined.After
5867    = Candidate.Conversions[0].UserDefined.Before;
5868  Candidate.Conversions[0].UserDefined.After.setAsIdentityConversion();
5869
5870  // Find the
5871  unsigned NumArgsInProto = Proto->getNumArgs();
5872
5873  // (C++ 13.3.2p2): A candidate function having fewer than m
5874  // parameters is viable only if it has an ellipsis in its parameter
5875  // list (8.3.5).
5876  if (Args.size() > NumArgsInProto && !Proto->isVariadic()) {
5877    Candidate.Viable = false;
5878    Candidate.FailureKind = ovl_fail_too_many_arguments;
5879    return;
5880  }
5881
5882  // Function types don't have any default arguments, so just check if
5883  // we have enough arguments.
5884  if (Args.size() < NumArgsInProto) {
5885    // Not enough arguments.
5886    Candidate.Viable = false;
5887    Candidate.FailureKind = ovl_fail_too_few_arguments;
5888    return;
5889  }
5890
5891  // Determine the implicit conversion sequences for each of the
5892  // arguments.
5893  for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
5894    if (ArgIdx < NumArgsInProto) {
5895      // (C++ 13.3.2p3): for F to be a viable function, there shall
5896      // exist for each argument an implicit conversion sequence
5897      // (13.3.3.1) that converts that argument to the corresponding
5898      // parameter of F.
5899      QualType ParamType = Proto->getArgType(ArgIdx);
5900      Candidate.Conversions[ArgIdx + 1]
5901        = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5902                                /*SuppressUserConversions=*/false,
5903                                /*InOverloadResolution=*/false,
5904                                /*AllowObjCWritebackConversion=*/
5905                                  getLangOpts().ObjCAutoRefCount);
5906      if (Candidate.Conversions[ArgIdx + 1].isBad()) {
5907        Candidate.Viable = false;
5908        Candidate.FailureKind = ovl_fail_bad_conversion;
5909        break;
5910      }
5911    } else {
5912      // (C++ 13.3.2p2): For the purposes of overload resolution, any
5913      // argument for which there is no corresponding parameter is
5914      // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
5915      Candidate.Conversions[ArgIdx + 1].setEllipsis();
5916    }
5917  }
5918}
5919
5920/// \brief Add overload candidates for overloaded operators that are
5921/// member functions.
5922///
5923/// Add the overloaded operator candidates that are member functions
5924/// for the operator Op that was used in an operator expression such
5925/// as "x Op y". , Args/NumArgs provides the operator arguments, and
5926/// CandidateSet will store the added overload candidates. (C++
5927/// [over.match.oper]).
5928void Sema::AddMemberOperatorCandidates(OverloadedOperatorKind Op,
5929                                       SourceLocation OpLoc,
5930                                       Expr **Args, unsigned NumArgs,
5931                                       OverloadCandidateSet& CandidateSet,
5932                                       SourceRange OpRange) {
5933  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
5934
5935  // C++ [over.match.oper]p3:
5936  //   For a unary operator @ with an operand of a type whose
5937  //   cv-unqualified version is T1, and for a binary operator @ with
5938  //   a left operand of a type whose cv-unqualified version is T1 and
5939  //   a right operand of a type whose cv-unqualified version is T2,
5940  //   three sets of candidate functions, designated member
5941  //   candidates, non-member candidates and built-in candidates, are
5942  //   constructed as follows:
5943  QualType T1 = Args[0]->getType();
5944
5945  //     -- If T1 is a class type, the set of member candidates is the
5946  //        result of the qualified lookup of T1::operator@
5947  //        (13.3.1.1.1); otherwise, the set of member candidates is
5948  //        empty.
5949  if (const RecordType *T1Rec = T1->getAs<RecordType>()) {
5950    // Complete the type if it can be completed. Otherwise, we're done.
5951    if (RequireCompleteType(OpLoc, T1, 0))
5952      return;
5953
5954    LookupResult Operators(*this, OpName, OpLoc, LookupOrdinaryName);
5955    LookupQualifiedName(Operators, T1Rec->getDecl());
5956    Operators.suppressDiagnostics();
5957
5958    for (LookupResult::iterator Oper = Operators.begin(),
5959                             OperEnd = Operators.end();
5960         Oper != OperEnd;
5961         ++Oper)
5962      AddMethodCandidate(Oper.getPair(), Args[0]->getType(),
5963                         Args[0]->Classify(Context), Args + 1, NumArgs - 1,
5964                         CandidateSet,
5965                         /* SuppressUserConversions = */ false);
5966  }
5967}
5968
5969/// AddBuiltinCandidate - Add a candidate for a built-in
5970/// operator. ResultTy and ParamTys are the result and parameter types
5971/// of the built-in candidate, respectively. Args and NumArgs are the
5972/// arguments being passed to the candidate. IsAssignmentOperator
5973/// should be true when this built-in candidate is an assignment
5974/// operator. NumContextualBoolArguments is the number of arguments
5975/// (at the beginning of the argument list) that will be contextually
5976/// converted to bool.
5977void Sema::AddBuiltinCandidate(QualType ResultTy, QualType *ParamTys,
5978                               Expr **Args, unsigned NumArgs,
5979                               OverloadCandidateSet& CandidateSet,
5980                               bool IsAssignmentOperator,
5981                               unsigned NumContextualBoolArguments) {
5982  // Overload resolution is always an unevaluated context.
5983  EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5984
5985  // Add this candidate
5986  OverloadCandidate &Candidate = CandidateSet.addCandidate(NumArgs);
5987  Candidate.FoundDecl = DeclAccessPair::make(0, AS_none);
5988  Candidate.Function = 0;
5989  Candidate.IsSurrogate = false;
5990  Candidate.IgnoreObjectArgument = false;
5991  Candidate.BuiltinTypes.ResultTy = ResultTy;
5992  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
5993    Candidate.BuiltinTypes.ParamTypes[ArgIdx] = ParamTys[ArgIdx];
5994
5995  // Determine the implicit conversion sequences for each of the
5996  // arguments.
5997  Candidate.Viable = true;
5998  Candidate.ExplicitCallArguments = NumArgs;
5999  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
6000    // C++ [over.match.oper]p4:
6001    //   For the built-in assignment operators, conversions of the
6002    //   left operand are restricted as follows:
6003    //     -- no temporaries are introduced to hold the left operand, and
6004    //     -- no user-defined conversions are applied to the left
6005    //        operand to achieve a type match with the left-most
6006    //        parameter of a built-in candidate.
6007    //
6008    // We block these conversions by turning off user-defined
6009    // conversions, since that is the only way that initialization of
6010    // a reference to a non-class type can occur from something that
6011    // is not of the same type.
6012    if (ArgIdx < NumContextualBoolArguments) {
6013      assert(ParamTys[ArgIdx] == Context.BoolTy &&
6014             "Contextual conversion to bool requires bool type");
6015      Candidate.Conversions[ArgIdx]
6016        = TryContextuallyConvertToBool(*this, Args[ArgIdx]);
6017    } else {
6018      Candidate.Conversions[ArgIdx]
6019        = TryCopyInitialization(*this, Args[ArgIdx], ParamTys[ArgIdx],
6020                                ArgIdx == 0 && IsAssignmentOperator,
6021                                /*InOverloadResolution=*/false,
6022                                /*AllowObjCWritebackConversion=*/
6023                                  getLangOpts().ObjCAutoRefCount);
6024    }
6025    if (Candidate.Conversions[ArgIdx].isBad()) {
6026      Candidate.Viable = false;
6027      Candidate.FailureKind = ovl_fail_bad_conversion;
6028      break;
6029    }
6030  }
6031}
6032
6033/// BuiltinCandidateTypeSet - A set of types that will be used for the
6034/// candidate operator functions for built-in operators (C++
6035/// [over.built]). The types are separated into pointer types and
6036/// enumeration types.
6037class BuiltinCandidateTypeSet  {
6038  /// TypeSet - A set of types.
6039  typedef llvm::SmallPtrSet<QualType, 8> TypeSet;
6040
6041  /// PointerTypes - The set of pointer types that will be used in the
6042  /// built-in candidates.
6043  TypeSet PointerTypes;
6044
6045  /// MemberPointerTypes - The set of member pointer types that will be
6046  /// used in the built-in candidates.
6047  TypeSet MemberPointerTypes;
6048
6049  /// EnumerationTypes - The set of enumeration types that will be
6050  /// used in the built-in candidates.
6051  TypeSet EnumerationTypes;
6052
6053  /// \brief The set of vector types that will be used in the built-in
6054  /// candidates.
6055  TypeSet VectorTypes;
6056
6057  /// \brief A flag indicating non-record types are viable candidates
6058  bool HasNonRecordTypes;
6059
6060  /// \brief A flag indicating whether either arithmetic or enumeration types
6061  /// were present in the candidate set.
6062  bool HasArithmeticOrEnumeralTypes;
6063
6064  /// \brief A flag indicating whether the nullptr type was present in the
6065  /// candidate set.
6066  bool HasNullPtrType;
6067
6068  /// Sema - The semantic analysis instance where we are building the
6069  /// candidate type set.
6070  Sema &SemaRef;
6071
6072  /// Context - The AST context in which we will build the type sets.
6073  ASTContext &Context;
6074
6075  bool AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
6076                                               const Qualifiers &VisibleQuals);
6077  bool AddMemberPointerWithMoreQualifiedTypeVariants(QualType Ty);
6078
6079public:
6080  /// iterator - Iterates through the types that are part of the set.
6081  typedef TypeSet::iterator iterator;
6082
6083  BuiltinCandidateTypeSet(Sema &SemaRef)
6084    : HasNonRecordTypes(false),
6085      HasArithmeticOrEnumeralTypes(false),
6086      HasNullPtrType(false),
6087      SemaRef(SemaRef),
6088      Context(SemaRef.Context) { }
6089
6090  void AddTypesConvertedFrom(QualType Ty,
6091                             SourceLocation Loc,
6092                             bool AllowUserConversions,
6093                             bool AllowExplicitConversions,
6094                             const Qualifiers &VisibleTypeConversionsQuals);
6095
6096  /// pointer_begin - First pointer type found;
6097  iterator pointer_begin() { return PointerTypes.begin(); }
6098
6099  /// pointer_end - Past the last pointer type found;
6100  iterator pointer_end() { return PointerTypes.end(); }
6101
6102  /// member_pointer_begin - First member pointer type found;
6103  iterator member_pointer_begin() { return MemberPointerTypes.begin(); }
6104
6105  /// member_pointer_end - Past the last member pointer type found;
6106  iterator member_pointer_end() { return MemberPointerTypes.end(); }
6107
6108  /// enumeration_begin - First enumeration type found;
6109  iterator enumeration_begin() { return EnumerationTypes.begin(); }
6110
6111  /// enumeration_end - Past the last enumeration type found;
6112  iterator enumeration_end() { return EnumerationTypes.end(); }
6113
6114  iterator vector_begin() { return VectorTypes.begin(); }
6115  iterator vector_end() { return VectorTypes.end(); }
6116
6117  bool hasNonRecordTypes() { return HasNonRecordTypes; }
6118  bool hasArithmeticOrEnumeralTypes() { return HasArithmeticOrEnumeralTypes; }
6119  bool hasNullPtrType() const { return HasNullPtrType; }
6120};
6121
6122/// AddPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty to
6123/// the set of pointer types along with any more-qualified variants of
6124/// that type. For example, if @p Ty is "int const *", this routine
6125/// will add "int const *", "int const volatile *", "int const
6126/// restrict *", and "int const volatile restrict *" to the set of
6127/// pointer types. Returns true if the add of @p Ty itself succeeded,
6128/// false otherwise.
6129///
6130/// FIXME: what to do about extended qualifiers?
6131bool
6132BuiltinCandidateTypeSet::AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
6133                                             const Qualifiers &VisibleQuals) {
6134
6135  // Insert this type.
6136  if (!PointerTypes.insert(Ty))
6137    return false;
6138
6139  QualType PointeeTy;
6140  const PointerType *PointerTy = Ty->getAs<PointerType>();
6141  bool buildObjCPtr = false;
6142  if (!PointerTy) {
6143    const ObjCObjectPointerType *PTy = Ty->castAs<ObjCObjectPointerType>();
6144    PointeeTy = PTy->getPointeeType();
6145    buildObjCPtr = true;
6146  } else {
6147    PointeeTy = PointerTy->getPointeeType();
6148  }
6149
6150  // Don't add qualified variants of arrays. For one, they're not allowed
6151  // (the qualifier would sink to the element type), and for another, the
6152  // only overload situation where it matters is subscript or pointer +- int,
6153  // and those shouldn't have qualifier variants anyway.
6154  if (PointeeTy->isArrayType())
6155    return true;
6156
6157  unsigned BaseCVR = PointeeTy.getCVRQualifiers();
6158  bool hasVolatile = VisibleQuals.hasVolatile();
6159  bool hasRestrict = VisibleQuals.hasRestrict();
6160
6161  // Iterate through all strict supersets of BaseCVR.
6162  for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
6163    if ((CVR | BaseCVR) != CVR) continue;
6164    // Skip over volatile if no volatile found anywhere in the types.
6165    if ((CVR & Qualifiers::Volatile) && !hasVolatile) continue;
6166
6167    // Skip over restrict if no restrict found anywhere in the types, or if
6168    // the type cannot be restrict-qualified.
6169    if ((CVR & Qualifiers::Restrict) &&
6170        (!hasRestrict ||
6171         (!(PointeeTy->isAnyPointerType() || PointeeTy->isReferenceType()))))
6172      continue;
6173
6174    // Build qualified pointee type.
6175    QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
6176
6177    // Build qualified pointer type.
6178    QualType QPointerTy;
6179    if (!buildObjCPtr)
6180      QPointerTy = Context.getPointerType(QPointeeTy);
6181    else
6182      QPointerTy = Context.getObjCObjectPointerType(QPointeeTy);
6183
6184    // Insert qualified pointer type.
6185    PointerTypes.insert(QPointerTy);
6186  }
6187
6188  return true;
6189}
6190
6191/// AddMemberPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty
6192/// to the set of pointer types along with any more-qualified variants of
6193/// that type. For example, if @p Ty is "int const *", this routine
6194/// will add "int const *", "int const volatile *", "int const
6195/// restrict *", and "int const volatile restrict *" to the set of
6196/// pointer types. Returns true if the add of @p Ty itself succeeded,
6197/// false otherwise.
6198///
6199/// FIXME: what to do about extended qualifiers?
6200bool
6201BuiltinCandidateTypeSet::AddMemberPointerWithMoreQualifiedTypeVariants(
6202    QualType Ty) {
6203  // Insert this type.
6204  if (!MemberPointerTypes.insert(Ty))
6205    return false;
6206
6207  const MemberPointerType *PointerTy = Ty->getAs<MemberPointerType>();
6208  assert(PointerTy && "type was not a member pointer type!");
6209
6210  QualType PointeeTy = PointerTy->getPointeeType();
6211  // Don't add qualified variants of arrays. For one, they're not allowed
6212  // (the qualifier would sink to the element type), and for another, the
6213  // only overload situation where it matters is subscript or pointer +- int,
6214  // and those shouldn't have qualifier variants anyway.
6215  if (PointeeTy->isArrayType())
6216    return true;
6217  const Type *ClassTy = PointerTy->getClass();
6218
6219  // Iterate through all strict supersets of the pointee type's CVR
6220  // qualifiers.
6221  unsigned BaseCVR = PointeeTy.getCVRQualifiers();
6222  for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
6223    if ((CVR | BaseCVR) != CVR) continue;
6224
6225    QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
6226    MemberPointerTypes.insert(
6227      Context.getMemberPointerType(QPointeeTy, ClassTy));
6228  }
6229
6230  return true;
6231}
6232
6233/// AddTypesConvertedFrom - Add each of the types to which the type @p
6234/// Ty can be implicit converted to the given set of @p Types. We're
6235/// primarily interested in pointer types and enumeration types. We also
6236/// take member pointer types, for the conditional operator.
6237/// AllowUserConversions is true if we should look at the conversion
6238/// functions of a class type, and AllowExplicitConversions if we
6239/// should also include the explicit conversion functions of a class
6240/// type.
6241void
6242BuiltinCandidateTypeSet::AddTypesConvertedFrom(QualType Ty,
6243                                               SourceLocation Loc,
6244                                               bool AllowUserConversions,
6245                                               bool AllowExplicitConversions,
6246                                               const Qualifiers &VisibleQuals) {
6247  // Only deal with canonical types.
6248  Ty = Context.getCanonicalType(Ty);
6249
6250  // Look through reference types; they aren't part of the type of an
6251  // expression for the purposes of conversions.
6252  if (const ReferenceType *RefTy = Ty->getAs<ReferenceType>())
6253    Ty = RefTy->getPointeeType();
6254
6255  // If we're dealing with an array type, decay to the pointer.
6256  if (Ty->isArrayType())
6257    Ty = SemaRef.Context.getArrayDecayedType(Ty);
6258
6259  // Otherwise, we don't care about qualifiers on the type.
6260  Ty = Ty.getLocalUnqualifiedType();
6261
6262  // Flag if we ever add a non-record type.
6263  const RecordType *TyRec = Ty->getAs<RecordType>();
6264  HasNonRecordTypes = HasNonRecordTypes || !TyRec;
6265
6266  // Flag if we encounter an arithmetic type.
6267  HasArithmeticOrEnumeralTypes =
6268    HasArithmeticOrEnumeralTypes || Ty->isArithmeticType();
6269
6270  if (Ty->isObjCIdType() || Ty->isObjCClassType())
6271    PointerTypes.insert(Ty);
6272  else if (Ty->getAs<PointerType>() || Ty->getAs<ObjCObjectPointerType>()) {
6273    // Insert our type, and its more-qualified variants, into the set
6274    // of types.
6275    if (!AddPointerWithMoreQualifiedTypeVariants(Ty, VisibleQuals))
6276      return;
6277  } else if (Ty->isMemberPointerType()) {
6278    // Member pointers are far easier, since the pointee can't be converted.
6279    if (!AddMemberPointerWithMoreQualifiedTypeVariants(Ty))
6280      return;
6281  } else if (Ty->isEnumeralType()) {
6282    HasArithmeticOrEnumeralTypes = true;
6283    EnumerationTypes.insert(Ty);
6284  } else if (Ty->isVectorType()) {
6285    // We treat vector types as arithmetic types in many contexts as an
6286    // extension.
6287    HasArithmeticOrEnumeralTypes = true;
6288    VectorTypes.insert(Ty);
6289  } else if (Ty->isNullPtrType()) {
6290    HasNullPtrType = true;
6291  } else if (AllowUserConversions && TyRec) {
6292    // No conversion functions in incomplete types.
6293    if (SemaRef.RequireCompleteType(Loc, Ty, 0))
6294      return;
6295
6296    CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
6297    const UnresolvedSetImpl *Conversions
6298      = ClassDecl->getVisibleConversionFunctions();
6299    for (UnresolvedSetImpl::iterator I = Conversions->begin(),
6300           E = Conversions->end(); I != E; ++I) {
6301      NamedDecl *D = I.getDecl();
6302      if (isa<UsingShadowDecl>(D))
6303        D = cast<UsingShadowDecl>(D)->getTargetDecl();
6304
6305      // Skip conversion function templates; they don't tell us anything
6306      // about which builtin types we can convert to.
6307      if (isa<FunctionTemplateDecl>(D))
6308        continue;
6309
6310      CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
6311      if (AllowExplicitConversions || !Conv->isExplicit()) {
6312        AddTypesConvertedFrom(Conv->getConversionType(), Loc, false, false,
6313                              VisibleQuals);
6314      }
6315    }
6316  }
6317}
6318
6319/// \brief Helper function for AddBuiltinOperatorCandidates() that adds
6320/// the volatile- and non-volatile-qualified assignment operators for the
6321/// given type to the candidate set.
6322static void AddBuiltinAssignmentOperatorCandidates(Sema &S,
6323                                                   QualType T,
6324                                                   Expr **Args,
6325                                                   unsigned NumArgs,
6326                                    OverloadCandidateSet &CandidateSet) {
6327  QualType ParamTypes[2];
6328
6329  // T& operator=(T&, T)
6330  ParamTypes[0] = S.Context.getLValueReferenceType(T);
6331  ParamTypes[1] = T;
6332  S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
6333                        /*IsAssignmentOperator=*/true);
6334
6335  if (!S.Context.getCanonicalType(T).isVolatileQualified()) {
6336    // volatile T& operator=(volatile T&, T)
6337    ParamTypes[0]
6338      = S.Context.getLValueReferenceType(S.Context.getVolatileType(T));
6339    ParamTypes[1] = T;
6340    S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
6341                          /*IsAssignmentOperator=*/true);
6342  }
6343}
6344
6345/// CollectVRQualifiers - This routine returns Volatile/Restrict qualifiers,
6346/// if any, found in visible type conversion functions found in ArgExpr's type.
6347static  Qualifiers CollectVRQualifiers(ASTContext &Context, Expr* ArgExpr) {
6348    Qualifiers VRQuals;
6349    const RecordType *TyRec;
6350    if (const MemberPointerType *RHSMPType =
6351        ArgExpr->getType()->getAs<MemberPointerType>())
6352      TyRec = RHSMPType->getClass()->getAs<RecordType>();
6353    else
6354      TyRec = ArgExpr->getType()->getAs<RecordType>();
6355    if (!TyRec) {
6356      // Just to be safe, assume the worst case.
6357      VRQuals.addVolatile();
6358      VRQuals.addRestrict();
6359      return VRQuals;
6360    }
6361
6362    CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
6363    if (!ClassDecl->hasDefinition())
6364      return VRQuals;
6365
6366    const UnresolvedSetImpl *Conversions =
6367      ClassDecl->getVisibleConversionFunctions();
6368
6369    for (UnresolvedSetImpl::iterator I = Conversions->begin(),
6370           E = Conversions->end(); I != E; ++I) {
6371      NamedDecl *D = I.getDecl();
6372      if (isa<UsingShadowDecl>(D))
6373        D = cast<UsingShadowDecl>(D)->getTargetDecl();
6374      if (CXXConversionDecl *Conv = dyn_cast<CXXConversionDecl>(D)) {
6375        QualType CanTy = Context.getCanonicalType(Conv->getConversionType());
6376        if (const ReferenceType *ResTypeRef = CanTy->getAs<ReferenceType>())
6377          CanTy = ResTypeRef->getPointeeType();
6378        // Need to go down the pointer/mempointer chain and add qualifiers
6379        // as see them.
6380        bool done = false;
6381        while (!done) {
6382          if (CanTy.isRestrictQualified())
6383            VRQuals.addRestrict();
6384          if (const PointerType *ResTypePtr = CanTy->getAs<PointerType>())
6385            CanTy = ResTypePtr->getPointeeType();
6386          else if (const MemberPointerType *ResTypeMPtr =
6387                CanTy->getAs<MemberPointerType>())
6388            CanTy = ResTypeMPtr->getPointeeType();
6389          else
6390            done = true;
6391          if (CanTy.isVolatileQualified())
6392            VRQuals.addVolatile();
6393          if (VRQuals.hasRestrict() && VRQuals.hasVolatile())
6394            return VRQuals;
6395        }
6396      }
6397    }
6398    return VRQuals;
6399}
6400
6401namespace {
6402
6403/// \brief Helper class to manage the addition of builtin operator overload
6404/// candidates. It provides shared state and utility methods used throughout
6405/// the process, as well as a helper method to add each group of builtin
6406/// operator overloads from the standard to a candidate set.
6407class BuiltinOperatorOverloadBuilder {
6408  // Common instance state available to all overload candidate addition methods.
6409  Sema &S;
6410  Expr **Args;
6411  unsigned NumArgs;
6412  Qualifiers VisibleTypeConversionsQuals;
6413  bool HasArithmeticOrEnumeralCandidateType;
6414  SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes;
6415  OverloadCandidateSet &CandidateSet;
6416
6417  // Define some constants used to index and iterate over the arithemetic types
6418  // provided via the getArithmeticType() method below.
6419  // The "promoted arithmetic types" are the arithmetic
6420  // types are that preserved by promotion (C++ [over.built]p2).
6421  static const unsigned FirstIntegralType = 3;
6422  static const unsigned LastIntegralType = 20;
6423  static const unsigned FirstPromotedIntegralType = 3,
6424                        LastPromotedIntegralType = 11;
6425  static const unsigned FirstPromotedArithmeticType = 0,
6426                        LastPromotedArithmeticType = 11;
6427  static const unsigned NumArithmeticTypes = 20;
6428
6429  /// \brief Get the canonical type for a given arithmetic type index.
6430  CanQualType getArithmeticType(unsigned index) {
6431    assert(index < NumArithmeticTypes);
6432    static CanQualType ASTContext::* const
6433      ArithmeticTypes[NumArithmeticTypes] = {
6434      // Start of promoted types.
6435      &ASTContext::FloatTy,
6436      &ASTContext::DoubleTy,
6437      &ASTContext::LongDoubleTy,
6438
6439      // Start of integral types.
6440      &ASTContext::IntTy,
6441      &ASTContext::LongTy,
6442      &ASTContext::LongLongTy,
6443      &ASTContext::Int128Ty,
6444      &ASTContext::UnsignedIntTy,
6445      &ASTContext::UnsignedLongTy,
6446      &ASTContext::UnsignedLongLongTy,
6447      &ASTContext::UnsignedInt128Ty,
6448      // End of promoted types.
6449
6450      &ASTContext::BoolTy,
6451      &ASTContext::CharTy,
6452      &ASTContext::WCharTy,
6453      &ASTContext::Char16Ty,
6454      &ASTContext::Char32Ty,
6455      &ASTContext::SignedCharTy,
6456      &ASTContext::ShortTy,
6457      &ASTContext::UnsignedCharTy,
6458      &ASTContext::UnsignedShortTy,
6459      // End of integral types.
6460      // FIXME: What about complex? What about half?
6461    };
6462    return S.Context.*ArithmeticTypes[index];
6463  }
6464
6465  /// \brief Gets the canonical type resulting from the usual arithemetic
6466  /// converions for the given arithmetic types.
6467  CanQualType getUsualArithmeticConversions(unsigned L, unsigned R) {
6468    // Accelerator table for performing the usual arithmetic conversions.
6469    // The rules are basically:
6470    //   - if either is floating-point, use the wider floating-point
6471    //   - if same signedness, use the higher rank
6472    //   - if same size, use unsigned of the higher rank
6473    //   - use the larger type
6474    // These rules, together with the axiom that higher ranks are
6475    // never smaller, are sufficient to precompute all of these results
6476    // *except* when dealing with signed types of higher rank.
6477    // (we could precompute SLL x UI for all known platforms, but it's
6478    // better not to make any assumptions).
6479    // We assume that int128 has a higher rank than long long on all platforms.
6480    enum PromotedType {
6481            Dep=-1,
6482            Flt,  Dbl, LDbl,   SI,   SL,  SLL, S128,   UI,   UL,  ULL, U128
6483    };
6484    static const PromotedType ConversionsTable[LastPromotedArithmeticType]
6485                                        [LastPromotedArithmeticType] = {
6486/* Flt*/ {  Flt,  Dbl, LDbl,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt },
6487/* Dbl*/ {  Dbl,  Dbl, LDbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl },
6488/*LDbl*/ { LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl },
6489/*  SI*/ {  Flt,  Dbl, LDbl,   SI,   SL,  SLL, S128,   UI,   UL,  ULL, U128 },
6490/*  SL*/ {  Flt,  Dbl, LDbl,   SL,   SL,  SLL, S128,  Dep,   UL,  ULL, U128 },
6491/* SLL*/ {  Flt,  Dbl, LDbl,  SLL,  SLL,  SLL, S128,  Dep,  Dep,  ULL, U128 },
6492/*S128*/ {  Flt,  Dbl, LDbl, S128, S128, S128, S128, S128, S128, S128, U128 },
6493/*  UI*/ {  Flt,  Dbl, LDbl,   UI,  Dep,  Dep, S128,   UI,   UL,  ULL, U128 },
6494/*  UL*/ {  Flt,  Dbl, LDbl,   UL,   UL,  Dep, S128,   UL,   UL,  ULL, U128 },
6495/* ULL*/ {  Flt,  Dbl, LDbl,  ULL,  ULL,  ULL, S128,  ULL,  ULL,  ULL, U128 },
6496/*U128*/ {  Flt,  Dbl, LDbl, U128, U128, U128, U128, U128, U128, U128, U128 },
6497    };
6498
6499    assert(L < LastPromotedArithmeticType);
6500    assert(R < LastPromotedArithmeticType);
6501    int Idx = ConversionsTable[L][R];
6502
6503    // Fast path: the table gives us a concrete answer.
6504    if (Idx != Dep) return getArithmeticType(Idx);
6505
6506    // Slow path: we need to compare widths.
6507    // An invariant is that the signed type has higher rank.
6508    CanQualType LT = getArithmeticType(L),
6509                RT = getArithmeticType(R);
6510    unsigned LW = S.Context.getIntWidth(LT),
6511             RW = S.Context.getIntWidth(RT);
6512
6513    // If they're different widths, use the signed type.
6514    if (LW > RW) return LT;
6515    else if (LW < RW) return RT;
6516
6517    // Otherwise, use the unsigned type of the signed type's rank.
6518    if (L == SL || R == SL) return S.Context.UnsignedLongTy;
6519    assert(L == SLL || R == SLL);
6520    return S.Context.UnsignedLongLongTy;
6521  }
6522
6523  /// \brief Helper method to factor out the common pattern of adding overloads
6524  /// for '++' and '--' builtin operators.
6525  void addPlusPlusMinusMinusStyleOverloads(QualType CandidateTy,
6526                                           bool HasVolatile,
6527                                           bool HasRestrict) {
6528    QualType ParamTypes[2] = {
6529      S.Context.getLValueReferenceType(CandidateTy),
6530      S.Context.IntTy
6531    };
6532
6533    // Non-volatile version.
6534    if (NumArgs == 1)
6535      S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
6536    else
6537      S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet);
6538
6539    // Use a heuristic to reduce number of builtin candidates in the set:
6540    // add volatile version only if there are conversions to a volatile type.
6541    if (HasVolatile) {
6542      ParamTypes[0] =
6543        S.Context.getLValueReferenceType(
6544          S.Context.getVolatileType(CandidateTy));
6545      if (NumArgs == 1)
6546        S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
6547      else
6548        S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet);
6549    }
6550
6551    // Add restrict version only if there are conversions to a restrict type
6552    // and our candidate type is a non-restrict-qualified pointer.
6553    if (HasRestrict && CandidateTy->isAnyPointerType() &&
6554        !CandidateTy.isRestrictQualified()) {
6555      ParamTypes[0]
6556        = S.Context.getLValueReferenceType(
6557            S.Context.getCVRQualifiedType(CandidateTy, Qualifiers::Restrict));
6558      if (NumArgs == 1)
6559        S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
6560      else
6561        S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet);
6562
6563      if (HasVolatile) {
6564        ParamTypes[0]
6565          = S.Context.getLValueReferenceType(
6566              S.Context.getCVRQualifiedType(CandidateTy,
6567                                            (Qualifiers::Volatile |
6568                                             Qualifiers::Restrict)));
6569        if (NumArgs == 1)
6570          S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1,
6571                                CandidateSet);
6572        else
6573          S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet);
6574      }
6575    }
6576
6577  }
6578
6579public:
6580  BuiltinOperatorOverloadBuilder(
6581    Sema &S, Expr **Args, unsigned NumArgs,
6582    Qualifiers VisibleTypeConversionsQuals,
6583    bool HasArithmeticOrEnumeralCandidateType,
6584    SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes,
6585    OverloadCandidateSet &CandidateSet)
6586    : S(S), Args(Args), NumArgs(NumArgs),
6587      VisibleTypeConversionsQuals(VisibleTypeConversionsQuals),
6588      HasArithmeticOrEnumeralCandidateType(
6589        HasArithmeticOrEnumeralCandidateType),
6590      CandidateTypes(CandidateTypes),
6591      CandidateSet(CandidateSet) {
6592    // Validate some of our static helper constants in debug builds.
6593    assert(getArithmeticType(FirstPromotedIntegralType) == S.Context.IntTy &&
6594           "Invalid first promoted integral type");
6595    assert(getArithmeticType(LastPromotedIntegralType - 1)
6596             == S.Context.UnsignedInt128Ty &&
6597           "Invalid last promoted integral type");
6598    assert(getArithmeticType(FirstPromotedArithmeticType)
6599             == S.Context.FloatTy &&
6600           "Invalid first promoted arithmetic type");
6601    assert(getArithmeticType(LastPromotedArithmeticType - 1)
6602             == S.Context.UnsignedInt128Ty &&
6603           "Invalid last promoted arithmetic type");
6604  }
6605
6606  // C++ [over.built]p3:
6607  //
6608  //   For every pair (T, VQ), where T is an arithmetic type, and VQ
6609  //   is either volatile or empty, there exist candidate operator
6610  //   functions of the form
6611  //
6612  //       VQ T&      operator++(VQ T&);
6613  //       T          operator++(VQ T&, int);
6614  //
6615  // C++ [over.built]p4:
6616  //
6617  //   For every pair (T, VQ), where T is an arithmetic type other
6618  //   than bool, and VQ is either volatile or empty, there exist
6619  //   candidate operator functions of the form
6620  //
6621  //       VQ T&      operator--(VQ T&);
6622  //       T          operator--(VQ T&, int);
6623  void addPlusPlusMinusMinusArithmeticOverloads(OverloadedOperatorKind Op) {
6624    if (!HasArithmeticOrEnumeralCandidateType)
6625      return;
6626
6627    for (unsigned Arith = (Op == OO_PlusPlus? 0 : 1);
6628         Arith < NumArithmeticTypes; ++Arith) {
6629      addPlusPlusMinusMinusStyleOverloads(
6630        getArithmeticType(Arith),
6631        VisibleTypeConversionsQuals.hasVolatile(),
6632        VisibleTypeConversionsQuals.hasRestrict());
6633    }
6634  }
6635
6636  // C++ [over.built]p5:
6637  //
6638  //   For every pair (T, VQ), where T is a cv-qualified or
6639  //   cv-unqualified object type, and VQ is either volatile or
6640  //   empty, there exist candidate operator functions of the form
6641  //
6642  //       T*VQ&      operator++(T*VQ&);
6643  //       T*VQ&      operator--(T*VQ&);
6644  //       T*         operator++(T*VQ&, int);
6645  //       T*         operator--(T*VQ&, int);
6646  void addPlusPlusMinusMinusPointerOverloads() {
6647    for (BuiltinCandidateTypeSet::iterator
6648              Ptr = CandidateTypes[0].pointer_begin(),
6649           PtrEnd = CandidateTypes[0].pointer_end();
6650         Ptr != PtrEnd; ++Ptr) {
6651      // Skip pointer types that aren't pointers to object types.
6652      if (!(*Ptr)->getPointeeType()->isObjectType())
6653        continue;
6654
6655      addPlusPlusMinusMinusStyleOverloads(*Ptr,
6656        (!(*Ptr).isVolatileQualified() &&
6657         VisibleTypeConversionsQuals.hasVolatile()),
6658        (!(*Ptr).isRestrictQualified() &&
6659         VisibleTypeConversionsQuals.hasRestrict()));
6660    }
6661  }
6662
6663  // C++ [over.built]p6:
6664  //   For every cv-qualified or cv-unqualified object type T, there
6665  //   exist candidate operator functions of the form
6666  //
6667  //       T&         operator*(T*);
6668  //
6669  // C++ [over.built]p7:
6670  //   For every function type T that does not have cv-qualifiers or a
6671  //   ref-qualifier, there exist candidate operator functions of the form
6672  //       T&         operator*(T*);
6673  void addUnaryStarPointerOverloads() {
6674    for (BuiltinCandidateTypeSet::iterator
6675              Ptr = CandidateTypes[0].pointer_begin(),
6676           PtrEnd = CandidateTypes[0].pointer_end();
6677         Ptr != PtrEnd; ++Ptr) {
6678      QualType ParamTy = *Ptr;
6679      QualType PointeeTy = ParamTy->getPointeeType();
6680      if (!PointeeTy->isObjectType() && !PointeeTy->isFunctionType())
6681        continue;
6682
6683      if (const FunctionProtoType *Proto =PointeeTy->getAs<FunctionProtoType>())
6684        if (Proto->getTypeQuals() || Proto->getRefQualifier())
6685          continue;
6686
6687      S.AddBuiltinCandidate(S.Context.getLValueReferenceType(PointeeTy),
6688                            &ParamTy, Args, 1, CandidateSet);
6689    }
6690  }
6691
6692  // C++ [over.built]p9:
6693  //  For every promoted arithmetic type T, there exist candidate
6694  //  operator functions of the form
6695  //
6696  //       T         operator+(T);
6697  //       T         operator-(T);
6698  void addUnaryPlusOrMinusArithmeticOverloads() {
6699    if (!HasArithmeticOrEnumeralCandidateType)
6700      return;
6701
6702    for (unsigned Arith = FirstPromotedArithmeticType;
6703         Arith < LastPromotedArithmeticType; ++Arith) {
6704      QualType ArithTy = getArithmeticType(Arith);
6705      S.AddBuiltinCandidate(ArithTy, &ArithTy, Args, 1, CandidateSet);
6706    }
6707
6708    // Extension: We also add these operators for vector types.
6709    for (BuiltinCandidateTypeSet::iterator
6710              Vec = CandidateTypes[0].vector_begin(),
6711           VecEnd = CandidateTypes[0].vector_end();
6712         Vec != VecEnd; ++Vec) {
6713      QualType VecTy = *Vec;
6714      S.AddBuiltinCandidate(VecTy, &VecTy, Args, 1, CandidateSet);
6715    }
6716  }
6717
6718  // C++ [over.built]p8:
6719  //   For every type T, there exist candidate operator functions of
6720  //   the form
6721  //
6722  //       T*         operator+(T*);
6723  void addUnaryPlusPointerOverloads() {
6724    for (BuiltinCandidateTypeSet::iterator
6725              Ptr = CandidateTypes[0].pointer_begin(),
6726           PtrEnd = CandidateTypes[0].pointer_end();
6727         Ptr != PtrEnd; ++Ptr) {
6728      QualType ParamTy = *Ptr;
6729      S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, 1, CandidateSet);
6730    }
6731  }
6732
6733  // C++ [over.built]p10:
6734  //   For every promoted integral type T, there exist candidate
6735  //   operator functions of the form
6736  //
6737  //        T         operator~(T);
6738  void addUnaryTildePromotedIntegralOverloads() {
6739    if (!HasArithmeticOrEnumeralCandidateType)
6740      return;
6741
6742    for (unsigned Int = FirstPromotedIntegralType;
6743         Int < LastPromotedIntegralType; ++Int) {
6744      QualType IntTy = getArithmeticType(Int);
6745      S.AddBuiltinCandidate(IntTy, &IntTy, Args, 1, CandidateSet);
6746    }
6747
6748    // Extension: We also add this operator for vector types.
6749    for (BuiltinCandidateTypeSet::iterator
6750              Vec = CandidateTypes[0].vector_begin(),
6751           VecEnd = CandidateTypes[0].vector_end();
6752         Vec != VecEnd; ++Vec) {
6753      QualType VecTy = *Vec;
6754      S.AddBuiltinCandidate(VecTy, &VecTy, Args, 1, CandidateSet);
6755    }
6756  }
6757
6758  // C++ [over.match.oper]p16:
6759  //   For every pointer to member type T, there exist candidate operator
6760  //   functions of the form
6761  //
6762  //        bool operator==(T,T);
6763  //        bool operator!=(T,T);
6764  void addEqualEqualOrNotEqualMemberPointerOverloads() {
6765    /// Set of (canonical) types that we've already handled.
6766    llvm::SmallPtrSet<QualType, 8> AddedTypes;
6767
6768    for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
6769      for (BuiltinCandidateTypeSet::iterator
6770                MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
6771             MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
6772           MemPtr != MemPtrEnd;
6773           ++MemPtr) {
6774        // Don't add the same builtin candidate twice.
6775        if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
6776          continue;
6777
6778        QualType ParamTypes[2] = { *MemPtr, *MemPtr };
6779        S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2,
6780                              CandidateSet);
6781      }
6782    }
6783  }
6784
6785  // C++ [over.built]p15:
6786  //
6787  //   For every T, where T is an enumeration type, a pointer type, or
6788  //   std::nullptr_t, there exist candidate operator functions of the form
6789  //
6790  //        bool       operator<(T, T);
6791  //        bool       operator>(T, T);
6792  //        bool       operator<=(T, T);
6793  //        bool       operator>=(T, T);
6794  //        bool       operator==(T, T);
6795  //        bool       operator!=(T, T);
6796  void addRelationalPointerOrEnumeralOverloads() {
6797    // C++ [over.match.oper]p3:
6798    //   [...]the built-in candidates include all of the candidate operator
6799    //   functions defined in 13.6 that, compared to the given operator, [...]
6800    //   do not have the same parameter-type-list as any non-template non-member
6801    //   candidate.
6802    //
6803    // Note that in practice, this only affects enumeration types because there
6804    // aren't any built-in candidates of record type, and a user-defined operator
6805    // must have an operand of record or enumeration type. Also, the only other
6806    // overloaded operator with enumeration arguments, operator=,
6807    // cannot be overloaded for enumeration types, so this is the only place
6808    // where we must suppress candidates like this.
6809    llvm::DenseSet<std::pair<CanQualType, CanQualType> >
6810      UserDefinedBinaryOperators;
6811
6812    for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
6813      if (CandidateTypes[ArgIdx].enumeration_begin() !=
6814          CandidateTypes[ArgIdx].enumeration_end()) {
6815        for (OverloadCandidateSet::iterator C = CandidateSet.begin(),
6816                                         CEnd = CandidateSet.end();
6817             C != CEnd; ++C) {
6818          if (!C->Viable || !C->Function || C->Function->getNumParams() != 2)
6819            continue;
6820
6821          if (C->Function->isFunctionTemplateSpecialization())
6822            continue;
6823
6824          QualType FirstParamType =
6825            C->Function->getParamDecl(0)->getType().getUnqualifiedType();
6826          QualType SecondParamType =
6827            C->Function->getParamDecl(1)->getType().getUnqualifiedType();
6828
6829          // Skip if either parameter isn't of enumeral type.
6830          if (!FirstParamType->isEnumeralType() ||
6831              !SecondParamType->isEnumeralType())
6832            continue;
6833
6834          // Add this operator to the set of known user-defined operators.
6835          UserDefinedBinaryOperators.insert(
6836            std::make_pair(S.Context.getCanonicalType(FirstParamType),
6837                           S.Context.getCanonicalType(SecondParamType)));
6838        }
6839      }
6840    }
6841
6842    /// Set of (canonical) types that we've already handled.
6843    llvm::SmallPtrSet<QualType, 8> AddedTypes;
6844
6845    for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
6846      for (BuiltinCandidateTypeSet::iterator
6847                Ptr = CandidateTypes[ArgIdx].pointer_begin(),
6848             PtrEnd = CandidateTypes[ArgIdx].pointer_end();
6849           Ptr != PtrEnd; ++Ptr) {
6850        // Don't add the same builtin candidate twice.
6851        if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
6852          continue;
6853
6854        QualType ParamTypes[2] = { *Ptr, *Ptr };
6855        S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2,
6856                              CandidateSet);
6857      }
6858      for (BuiltinCandidateTypeSet::iterator
6859                Enum = CandidateTypes[ArgIdx].enumeration_begin(),
6860             EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
6861           Enum != EnumEnd; ++Enum) {
6862        CanQualType CanonType = S.Context.getCanonicalType(*Enum);
6863
6864        // Don't add the same builtin candidate twice, or if a user defined
6865        // candidate exists.
6866        if (!AddedTypes.insert(CanonType) ||
6867            UserDefinedBinaryOperators.count(std::make_pair(CanonType,
6868                                                            CanonType)))
6869          continue;
6870
6871        QualType ParamTypes[2] = { *Enum, *Enum };
6872        S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2,
6873                              CandidateSet);
6874      }
6875
6876      if (CandidateTypes[ArgIdx].hasNullPtrType()) {
6877        CanQualType NullPtrTy = S.Context.getCanonicalType(S.Context.NullPtrTy);
6878        if (AddedTypes.insert(NullPtrTy) &&
6879            !UserDefinedBinaryOperators.count(std::make_pair(NullPtrTy,
6880                                                             NullPtrTy))) {
6881          QualType ParamTypes[2] = { NullPtrTy, NullPtrTy };
6882          S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2,
6883                                CandidateSet);
6884        }
6885      }
6886    }
6887  }
6888
6889  // C++ [over.built]p13:
6890  //
6891  //   For every cv-qualified or cv-unqualified object type T
6892  //   there exist candidate operator functions of the form
6893  //
6894  //      T*         operator+(T*, ptrdiff_t);
6895  //      T&         operator[](T*, ptrdiff_t);    [BELOW]
6896  //      T*         operator-(T*, ptrdiff_t);
6897  //      T*         operator+(ptrdiff_t, T*);
6898  //      T&         operator[](ptrdiff_t, T*);    [BELOW]
6899  //
6900  // C++ [over.built]p14:
6901  //
6902  //   For every T, where T is a pointer to object type, there
6903  //   exist candidate operator functions of the form
6904  //
6905  //      ptrdiff_t  operator-(T, T);
6906  void addBinaryPlusOrMinusPointerOverloads(OverloadedOperatorKind Op) {
6907    /// Set of (canonical) types that we've already handled.
6908    llvm::SmallPtrSet<QualType, 8> AddedTypes;
6909
6910    for (int Arg = 0; Arg < 2; ++Arg) {
6911      QualType AsymetricParamTypes[2] = {
6912        S.Context.getPointerDiffType(),
6913        S.Context.getPointerDiffType(),
6914      };
6915      for (BuiltinCandidateTypeSet::iterator
6916                Ptr = CandidateTypes[Arg].pointer_begin(),
6917             PtrEnd = CandidateTypes[Arg].pointer_end();
6918           Ptr != PtrEnd; ++Ptr) {
6919        QualType PointeeTy = (*Ptr)->getPointeeType();
6920        if (!PointeeTy->isObjectType())
6921          continue;
6922
6923        AsymetricParamTypes[Arg] = *Ptr;
6924        if (Arg == 0 || Op == OO_Plus) {
6925          // operator+(T*, ptrdiff_t) or operator-(T*, ptrdiff_t)
6926          // T* operator+(ptrdiff_t, T*);
6927          S.AddBuiltinCandidate(*Ptr, AsymetricParamTypes, Args, 2,
6928                                CandidateSet);
6929        }
6930        if (Op == OO_Minus) {
6931          // ptrdiff_t operator-(T, T);
6932          if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
6933            continue;
6934
6935          QualType ParamTypes[2] = { *Ptr, *Ptr };
6936          S.AddBuiltinCandidate(S.Context.getPointerDiffType(), ParamTypes,
6937                                Args, 2, CandidateSet);
6938        }
6939      }
6940    }
6941  }
6942
6943  // C++ [over.built]p12:
6944  //
6945  //   For every pair of promoted arithmetic types L and R, there
6946  //   exist candidate operator functions of the form
6947  //
6948  //        LR         operator*(L, R);
6949  //        LR         operator/(L, R);
6950  //        LR         operator+(L, R);
6951  //        LR         operator-(L, R);
6952  //        bool       operator<(L, R);
6953  //        bool       operator>(L, R);
6954  //        bool       operator<=(L, R);
6955  //        bool       operator>=(L, R);
6956  //        bool       operator==(L, R);
6957  //        bool       operator!=(L, R);
6958  //
6959  //   where LR is the result of the usual arithmetic conversions
6960  //   between types L and R.
6961  //
6962  // C++ [over.built]p24:
6963  //
6964  //   For every pair of promoted arithmetic types L and R, there exist
6965  //   candidate operator functions of the form
6966  //
6967  //        LR       operator?(bool, L, R);
6968  //
6969  //   where LR is the result of the usual arithmetic conversions
6970  //   between types L and R.
6971  // Our candidates ignore the first parameter.
6972  void addGenericBinaryArithmeticOverloads(bool isComparison) {
6973    if (!HasArithmeticOrEnumeralCandidateType)
6974      return;
6975
6976    for (unsigned Left = FirstPromotedArithmeticType;
6977         Left < LastPromotedArithmeticType; ++Left) {
6978      for (unsigned Right = FirstPromotedArithmeticType;
6979           Right < LastPromotedArithmeticType; ++Right) {
6980        QualType LandR[2] = { getArithmeticType(Left),
6981                              getArithmeticType(Right) };
6982        QualType Result =
6983          isComparison ? S.Context.BoolTy
6984                       : getUsualArithmeticConversions(Left, Right);
6985        S.AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
6986      }
6987    }
6988
6989    // Extension: Add the binary operators ==, !=, <, <=, >=, >, *, /, and the
6990    // conditional operator for vector types.
6991    for (BuiltinCandidateTypeSet::iterator
6992              Vec1 = CandidateTypes[0].vector_begin(),
6993           Vec1End = CandidateTypes[0].vector_end();
6994         Vec1 != Vec1End; ++Vec1) {
6995      for (BuiltinCandidateTypeSet::iterator
6996                Vec2 = CandidateTypes[1].vector_begin(),
6997             Vec2End = CandidateTypes[1].vector_end();
6998           Vec2 != Vec2End; ++Vec2) {
6999        QualType LandR[2] = { *Vec1, *Vec2 };
7000        QualType Result = S.Context.BoolTy;
7001        if (!isComparison) {
7002          if ((*Vec1)->isExtVectorType() || !(*Vec2)->isExtVectorType())
7003            Result = *Vec1;
7004          else
7005            Result = *Vec2;
7006        }
7007
7008        S.AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
7009      }
7010    }
7011  }
7012
7013  // C++ [over.built]p17:
7014  //
7015  //   For every pair of promoted integral types L and R, there
7016  //   exist candidate operator functions of the form
7017  //
7018  //      LR         operator%(L, R);
7019  //      LR         operator&(L, R);
7020  //      LR         operator^(L, R);
7021  //      LR         operator|(L, R);
7022  //      L          operator<<(L, R);
7023  //      L          operator>>(L, R);
7024  //
7025  //   where LR is the result of the usual arithmetic conversions
7026  //   between types L and R.
7027  void addBinaryBitwiseArithmeticOverloads(OverloadedOperatorKind Op) {
7028    if (!HasArithmeticOrEnumeralCandidateType)
7029      return;
7030
7031    for (unsigned Left = FirstPromotedIntegralType;
7032         Left < LastPromotedIntegralType; ++Left) {
7033      for (unsigned Right = FirstPromotedIntegralType;
7034           Right < LastPromotedIntegralType; ++Right) {
7035        QualType LandR[2] = { getArithmeticType(Left),
7036                              getArithmeticType(Right) };
7037        QualType Result = (Op == OO_LessLess || Op == OO_GreaterGreater)
7038            ? LandR[0]
7039            : getUsualArithmeticConversions(Left, Right);
7040        S.AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
7041      }
7042    }
7043  }
7044
7045  // C++ [over.built]p20:
7046  //
7047  //   For every pair (T, VQ), where T is an enumeration or
7048  //   pointer to member type and VQ is either volatile or
7049  //   empty, there exist candidate operator functions of the form
7050  //
7051  //        VQ T&      operator=(VQ T&, T);
7052  void addAssignmentMemberPointerOrEnumeralOverloads() {
7053    /// Set of (canonical) types that we've already handled.
7054    llvm::SmallPtrSet<QualType, 8> AddedTypes;
7055
7056    for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) {
7057      for (BuiltinCandidateTypeSet::iterator
7058                Enum = CandidateTypes[ArgIdx].enumeration_begin(),
7059             EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
7060           Enum != EnumEnd; ++Enum) {
7061        if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum)))
7062          continue;
7063
7064        AddBuiltinAssignmentOperatorCandidates(S, *Enum, Args, 2,
7065                                               CandidateSet);
7066      }
7067
7068      for (BuiltinCandidateTypeSet::iterator
7069                MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
7070             MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
7071           MemPtr != MemPtrEnd; ++MemPtr) {
7072        if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
7073          continue;
7074
7075        AddBuiltinAssignmentOperatorCandidates(S, *MemPtr, Args, 2,
7076                                               CandidateSet);
7077      }
7078    }
7079  }
7080
7081  // C++ [over.built]p19:
7082  //
7083  //   For every pair (T, VQ), where T is any type and VQ is either
7084  //   volatile or empty, there exist candidate operator functions
7085  //   of the form
7086  //
7087  //        T*VQ&      operator=(T*VQ&, T*);
7088  //
7089  // C++ [over.built]p21:
7090  //
7091  //   For every pair (T, VQ), where T is a cv-qualified or
7092  //   cv-unqualified object type and VQ is either volatile or
7093  //   empty, there exist candidate operator functions of the form
7094  //
7095  //        T*VQ&      operator+=(T*VQ&, ptrdiff_t);
7096  //        T*VQ&      operator-=(T*VQ&, ptrdiff_t);
7097  void addAssignmentPointerOverloads(bool isEqualOp) {
7098    /// Set of (canonical) types that we've already handled.
7099    llvm::SmallPtrSet<QualType, 8> AddedTypes;
7100
7101    for (BuiltinCandidateTypeSet::iterator
7102              Ptr = CandidateTypes[0].pointer_begin(),
7103           PtrEnd = CandidateTypes[0].pointer_end();
7104         Ptr != PtrEnd; ++Ptr) {
7105      // If this is operator=, keep track of the builtin candidates we added.
7106      if (isEqualOp)
7107        AddedTypes.insert(S.Context.getCanonicalType(*Ptr));
7108      else if (!(*Ptr)->getPointeeType()->isObjectType())
7109        continue;
7110
7111      // non-volatile version
7112      QualType ParamTypes[2] = {
7113        S.Context.getLValueReferenceType(*Ptr),
7114        isEqualOp ? *Ptr : S.Context.getPointerDiffType(),
7115      };
7116      S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7117                            /*IsAssigmentOperator=*/ isEqualOp);
7118
7119      bool NeedVolatile = !(*Ptr).isVolatileQualified() &&
7120                          VisibleTypeConversionsQuals.hasVolatile();
7121      if (NeedVolatile) {
7122        // volatile version
7123        ParamTypes[0] =
7124          S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr));
7125        S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7126                              /*IsAssigmentOperator=*/isEqualOp);
7127      }
7128
7129      if (!(*Ptr).isRestrictQualified() &&
7130          VisibleTypeConversionsQuals.hasRestrict()) {
7131        // restrict version
7132        ParamTypes[0]
7133          = S.Context.getLValueReferenceType(S.Context.getRestrictType(*Ptr));
7134        S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7135                              /*IsAssigmentOperator=*/isEqualOp);
7136
7137        if (NeedVolatile) {
7138          // volatile restrict version
7139          ParamTypes[0]
7140            = S.Context.getLValueReferenceType(
7141                S.Context.getCVRQualifiedType(*Ptr,
7142                                              (Qualifiers::Volatile |
7143                                               Qualifiers::Restrict)));
7144          S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7145                                CandidateSet,
7146                                /*IsAssigmentOperator=*/isEqualOp);
7147        }
7148      }
7149    }
7150
7151    if (isEqualOp) {
7152      for (BuiltinCandidateTypeSet::iterator
7153                Ptr = CandidateTypes[1].pointer_begin(),
7154             PtrEnd = CandidateTypes[1].pointer_end();
7155           Ptr != PtrEnd; ++Ptr) {
7156        // Make sure we don't add the same candidate twice.
7157        if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7158          continue;
7159
7160        QualType ParamTypes[2] = {
7161          S.Context.getLValueReferenceType(*Ptr),
7162          *Ptr,
7163        };
7164
7165        // non-volatile version
7166        S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7167                              /*IsAssigmentOperator=*/true);
7168
7169        bool NeedVolatile = !(*Ptr).isVolatileQualified() &&
7170                           VisibleTypeConversionsQuals.hasVolatile();
7171        if (NeedVolatile) {
7172          // volatile version
7173          ParamTypes[0] =
7174            S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr));
7175          S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7176                                CandidateSet, /*IsAssigmentOperator=*/true);
7177        }
7178
7179        if (!(*Ptr).isRestrictQualified() &&
7180            VisibleTypeConversionsQuals.hasRestrict()) {
7181          // restrict version
7182          ParamTypes[0]
7183            = S.Context.getLValueReferenceType(S.Context.getRestrictType(*Ptr));
7184          S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7185                                CandidateSet, /*IsAssigmentOperator=*/true);
7186
7187          if (NeedVolatile) {
7188            // volatile restrict version
7189            ParamTypes[0]
7190              = S.Context.getLValueReferenceType(
7191                  S.Context.getCVRQualifiedType(*Ptr,
7192                                                (Qualifiers::Volatile |
7193                                                 Qualifiers::Restrict)));
7194            S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7195                                  CandidateSet, /*IsAssigmentOperator=*/true);
7196
7197          }
7198        }
7199      }
7200    }
7201  }
7202
7203  // C++ [over.built]p18:
7204  //
7205  //   For every triple (L, VQ, R), where L is an arithmetic type,
7206  //   VQ is either volatile or empty, and R is a promoted
7207  //   arithmetic type, there exist candidate operator functions of
7208  //   the form
7209  //
7210  //        VQ L&      operator=(VQ L&, R);
7211  //        VQ L&      operator*=(VQ L&, R);
7212  //        VQ L&      operator/=(VQ L&, R);
7213  //        VQ L&      operator+=(VQ L&, R);
7214  //        VQ L&      operator-=(VQ L&, R);
7215  void addAssignmentArithmeticOverloads(bool isEqualOp) {
7216    if (!HasArithmeticOrEnumeralCandidateType)
7217      return;
7218
7219    for (unsigned Left = 0; Left < NumArithmeticTypes; ++Left) {
7220      for (unsigned Right = FirstPromotedArithmeticType;
7221           Right < LastPromotedArithmeticType; ++Right) {
7222        QualType ParamTypes[2];
7223        ParamTypes[1] = getArithmeticType(Right);
7224
7225        // Add this built-in operator as a candidate (VQ is empty).
7226        ParamTypes[0] =
7227          S.Context.getLValueReferenceType(getArithmeticType(Left));
7228        S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7229                              /*IsAssigmentOperator=*/isEqualOp);
7230
7231        // Add this built-in operator as a candidate (VQ is 'volatile').
7232        if (VisibleTypeConversionsQuals.hasVolatile()) {
7233          ParamTypes[0] =
7234            S.Context.getVolatileType(getArithmeticType(Left));
7235          ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7236          S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7237                                CandidateSet,
7238                                /*IsAssigmentOperator=*/isEqualOp);
7239        }
7240      }
7241    }
7242
7243    // Extension: Add the binary operators =, +=, -=, *=, /= for vector types.
7244    for (BuiltinCandidateTypeSet::iterator
7245              Vec1 = CandidateTypes[0].vector_begin(),
7246           Vec1End = CandidateTypes[0].vector_end();
7247         Vec1 != Vec1End; ++Vec1) {
7248      for (BuiltinCandidateTypeSet::iterator
7249                Vec2 = CandidateTypes[1].vector_begin(),
7250             Vec2End = CandidateTypes[1].vector_end();
7251           Vec2 != Vec2End; ++Vec2) {
7252        QualType ParamTypes[2];
7253        ParamTypes[1] = *Vec2;
7254        // Add this built-in operator as a candidate (VQ is empty).
7255        ParamTypes[0] = S.Context.getLValueReferenceType(*Vec1);
7256        S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7257                              /*IsAssigmentOperator=*/isEqualOp);
7258
7259        // Add this built-in operator as a candidate (VQ is 'volatile').
7260        if (VisibleTypeConversionsQuals.hasVolatile()) {
7261          ParamTypes[0] = S.Context.getVolatileType(*Vec1);
7262          ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7263          S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7264                                CandidateSet,
7265                                /*IsAssigmentOperator=*/isEqualOp);
7266        }
7267      }
7268    }
7269  }
7270
7271  // C++ [over.built]p22:
7272  //
7273  //   For every triple (L, VQ, R), where L is an integral type, VQ
7274  //   is either volatile or empty, and R is a promoted integral
7275  //   type, there exist candidate operator functions of the form
7276  //
7277  //        VQ L&       operator%=(VQ L&, R);
7278  //        VQ L&       operator<<=(VQ L&, R);
7279  //        VQ L&       operator>>=(VQ L&, R);
7280  //        VQ L&       operator&=(VQ L&, R);
7281  //        VQ L&       operator^=(VQ L&, R);
7282  //        VQ L&       operator|=(VQ L&, R);
7283  void addAssignmentIntegralOverloads() {
7284    if (!HasArithmeticOrEnumeralCandidateType)
7285      return;
7286
7287    for (unsigned Left = FirstIntegralType; Left < LastIntegralType; ++Left) {
7288      for (unsigned Right = FirstPromotedIntegralType;
7289           Right < LastPromotedIntegralType; ++Right) {
7290        QualType ParamTypes[2];
7291        ParamTypes[1] = getArithmeticType(Right);
7292
7293        // Add this built-in operator as a candidate (VQ is empty).
7294        ParamTypes[0] =
7295          S.Context.getLValueReferenceType(getArithmeticType(Left));
7296        S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet);
7297        if (VisibleTypeConversionsQuals.hasVolatile()) {
7298          // Add this built-in operator as a candidate (VQ is 'volatile').
7299          ParamTypes[0] = getArithmeticType(Left);
7300          ParamTypes[0] = S.Context.getVolatileType(ParamTypes[0]);
7301          ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7302          S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7303                                CandidateSet);
7304        }
7305      }
7306    }
7307  }
7308
7309  // C++ [over.operator]p23:
7310  //
7311  //   There also exist candidate operator functions of the form
7312  //
7313  //        bool        operator!(bool);
7314  //        bool        operator&&(bool, bool);
7315  //        bool        operator||(bool, bool);
7316  void addExclaimOverload() {
7317    QualType ParamTy = S.Context.BoolTy;
7318    S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, 1, CandidateSet,
7319                          /*IsAssignmentOperator=*/false,
7320                          /*NumContextualBoolArguments=*/1);
7321  }
7322  void addAmpAmpOrPipePipeOverload() {
7323    QualType ParamTypes[2] = { S.Context.BoolTy, S.Context.BoolTy };
7324    S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2, CandidateSet,
7325                          /*IsAssignmentOperator=*/false,
7326                          /*NumContextualBoolArguments=*/2);
7327  }
7328
7329  // C++ [over.built]p13:
7330  //
7331  //   For every cv-qualified or cv-unqualified object type T there
7332  //   exist candidate operator functions of the form
7333  //
7334  //        T*         operator+(T*, ptrdiff_t);     [ABOVE]
7335  //        T&         operator[](T*, ptrdiff_t);
7336  //        T*         operator-(T*, ptrdiff_t);     [ABOVE]
7337  //        T*         operator+(ptrdiff_t, T*);     [ABOVE]
7338  //        T&         operator[](ptrdiff_t, T*);
7339  void addSubscriptOverloads() {
7340    for (BuiltinCandidateTypeSet::iterator
7341              Ptr = CandidateTypes[0].pointer_begin(),
7342           PtrEnd = CandidateTypes[0].pointer_end();
7343         Ptr != PtrEnd; ++Ptr) {
7344      QualType ParamTypes[2] = { *Ptr, S.Context.getPointerDiffType() };
7345      QualType PointeeType = (*Ptr)->getPointeeType();
7346      if (!PointeeType->isObjectType())
7347        continue;
7348
7349      QualType ResultTy = S.Context.getLValueReferenceType(PointeeType);
7350
7351      // T& operator[](T*, ptrdiff_t)
7352      S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
7353    }
7354
7355    for (BuiltinCandidateTypeSet::iterator
7356              Ptr = CandidateTypes[1].pointer_begin(),
7357           PtrEnd = CandidateTypes[1].pointer_end();
7358         Ptr != PtrEnd; ++Ptr) {
7359      QualType ParamTypes[2] = { S.Context.getPointerDiffType(), *Ptr };
7360      QualType PointeeType = (*Ptr)->getPointeeType();
7361      if (!PointeeType->isObjectType())
7362        continue;
7363
7364      QualType ResultTy = S.Context.getLValueReferenceType(PointeeType);
7365
7366      // T& operator[](ptrdiff_t, T*)
7367      S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
7368    }
7369  }
7370
7371  // C++ [over.built]p11:
7372  //    For every quintuple (C1, C2, T, CV1, CV2), where C2 is a class type,
7373  //    C1 is the same type as C2 or is a derived class of C2, T is an object
7374  //    type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
7375  //    there exist candidate operator functions of the form
7376  //
7377  //      CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
7378  //
7379  //    where CV12 is the union of CV1 and CV2.
7380  void addArrowStarOverloads() {
7381    for (BuiltinCandidateTypeSet::iterator
7382             Ptr = CandidateTypes[0].pointer_begin(),
7383           PtrEnd = CandidateTypes[0].pointer_end();
7384         Ptr != PtrEnd; ++Ptr) {
7385      QualType C1Ty = (*Ptr);
7386      QualType C1;
7387      QualifierCollector Q1;
7388      C1 = QualType(Q1.strip(C1Ty->getPointeeType()), 0);
7389      if (!isa<RecordType>(C1))
7390        continue;
7391      // heuristic to reduce number of builtin candidates in the set.
7392      // Add volatile/restrict version only if there are conversions to a
7393      // volatile/restrict type.
7394      if (!VisibleTypeConversionsQuals.hasVolatile() && Q1.hasVolatile())
7395        continue;
7396      if (!VisibleTypeConversionsQuals.hasRestrict() && Q1.hasRestrict())
7397        continue;
7398      for (BuiltinCandidateTypeSet::iterator
7399                MemPtr = CandidateTypes[1].member_pointer_begin(),
7400             MemPtrEnd = CandidateTypes[1].member_pointer_end();
7401           MemPtr != MemPtrEnd; ++MemPtr) {
7402        const MemberPointerType *mptr = cast<MemberPointerType>(*MemPtr);
7403        QualType C2 = QualType(mptr->getClass(), 0);
7404        C2 = C2.getUnqualifiedType();
7405        if (C1 != C2 && !S.IsDerivedFrom(C1, C2))
7406          break;
7407        QualType ParamTypes[2] = { *Ptr, *MemPtr };
7408        // build CV12 T&
7409        QualType T = mptr->getPointeeType();
7410        if (!VisibleTypeConversionsQuals.hasVolatile() &&
7411            T.isVolatileQualified())
7412          continue;
7413        if (!VisibleTypeConversionsQuals.hasRestrict() &&
7414            T.isRestrictQualified())
7415          continue;
7416        T = Q1.apply(S.Context, T);
7417        QualType ResultTy = S.Context.getLValueReferenceType(T);
7418        S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
7419      }
7420    }
7421  }
7422
7423  // Note that we don't consider the first argument, since it has been
7424  // contextually converted to bool long ago. The candidates below are
7425  // therefore added as binary.
7426  //
7427  // C++ [over.built]p25:
7428  //   For every type T, where T is a pointer, pointer-to-member, or scoped
7429  //   enumeration type, there exist candidate operator functions of the form
7430  //
7431  //        T        operator?(bool, T, T);
7432  //
7433  void addConditionalOperatorOverloads() {
7434    /// Set of (canonical) types that we've already handled.
7435    llvm::SmallPtrSet<QualType, 8> AddedTypes;
7436
7437    for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) {
7438      for (BuiltinCandidateTypeSet::iterator
7439                Ptr = CandidateTypes[ArgIdx].pointer_begin(),
7440             PtrEnd = CandidateTypes[ArgIdx].pointer_end();
7441           Ptr != PtrEnd; ++Ptr) {
7442        if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7443          continue;
7444
7445        QualType ParamTypes[2] = { *Ptr, *Ptr };
7446        S.AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
7447      }
7448
7449      for (BuiltinCandidateTypeSet::iterator
7450                MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
7451             MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
7452           MemPtr != MemPtrEnd; ++MemPtr) {
7453        if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
7454          continue;
7455
7456        QualType ParamTypes[2] = { *MemPtr, *MemPtr };
7457        S.AddBuiltinCandidate(*MemPtr, ParamTypes, Args, 2, CandidateSet);
7458      }
7459
7460      if (S.getLangOpts().CPlusPlus0x) {
7461        for (BuiltinCandidateTypeSet::iterator
7462                  Enum = CandidateTypes[ArgIdx].enumeration_begin(),
7463               EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
7464             Enum != EnumEnd; ++Enum) {
7465          if (!(*Enum)->getAs<EnumType>()->getDecl()->isScoped())
7466            continue;
7467
7468          if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum)))
7469            continue;
7470
7471          QualType ParamTypes[2] = { *Enum, *Enum };
7472          S.AddBuiltinCandidate(*Enum, ParamTypes, Args, 2, CandidateSet);
7473        }
7474      }
7475    }
7476  }
7477};
7478
7479} // end anonymous namespace
7480
7481/// AddBuiltinOperatorCandidates - Add the appropriate built-in
7482/// operator overloads to the candidate set (C++ [over.built]), based
7483/// on the operator @p Op and the arguments given. For example, if the
7484/// operator is a binary '+', this routine might add "int
7485/// operator+(int, int)" to cover integer addition.
7486void
7487Sema::AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,
7488                                   SourceLocation OpLoc,
7489                                   Expr **Args, unsigned NumArgs,
7490                                   OverloadCandidateSet& CandidateSet) {
7491  // Find all of the types that the arguments can convert to, but only
7492  // if the operator we're looking at has built-in operator candidates
7493  // that make use of these types. Also record whether we encounter non-record
7494  // candidate types or either arithmetic or enumeral candidate types.
7495  Qualifiers VisibleTypeConversionsQuals;
7496  VisibleTypeConversionsQuals.addConst();
7497  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
7498    VisibleTypeConversionsQuals += CollectVRQualifiers(Context, Args[ArgIdx]);
7499
7500  bool HasNonRecordCandidateType = false;
7501  bool HasArithmeticOrEnumeralCandidateType = false;
7502  SmallVector<BuiltinCandidateTypeSet, 2> CandidateTypes;
7503  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
7504    CandidateTypes.push_back(BuiltinCandidateTypeSet(*this));
7505    CandidateTypes[ArgIdx].AddTypesConvertedFrom(Args[ArgIdx]->getType(),
7506                                                 OpLoc,
7507                                                 true,
7508                                                 (Op == OO_Exclaim ||
7509                                                  Op == OO_AmpAmp ||
7510                                                  Op == OO_PipePipe),
7511                                                 VisibleTypeConversionsQuals);
7512    HasNonRecordCandidateType = HasNonRecordCandidateType ||
7513        CandidateTypes[ArgIdx].hasNonRecordTypes();
7514    HasArithmeticOrEnumeralCandidateType =
7515        HasArithmeticOrEnumeralCandidateType ||
7516        CandidateTypes[ArgIdx].hasArithmeticOrEnumeralTypes();
7517  }
7518
7519  // Exit early when no non-record types have been added to the candidate set
7520  // for any of the arguments to the operator.
7521  //
7522  // We can't exit early for !, ||, or &&, since there we have always have
7523  // 'bool' overloads.
7524  if (!HasNonRecordCandidateType &&
7525      !(Op == OO_Exclaim || Op == OO_AmpAmp || Op == OO_PipePipe))
7526    return;
7527
7528  // Setup an object to manage the common state for building overloads.
7529  BuiltinOperatorOverloadBuilder OpBuilder(*this, Args, NumArgs,
7530                                           VisibleTypeConversionsQuals,
7531                                           HasArithmeticOrEnumeralCandidateType,
7532                                           CandidateTypes, CandidateSet);
7533
7534  // Dispatch over the operation to add in only those overloads which apply.
7535  switch (Op) {
7536  case OO_None:
7537  case NUM_OVERLOADED_OPERATORS:
7538    llvm_unreachable("Expected an overloaded operator");
7539
7540  case OO_New:
7541  case OO_Delete:
7542  case OO_Array_New:
7543  case OO_Array_Delete:
7544  case OO_Call:
7545    llvm_unreachable(
7546                    "Special operators don't use AddBuiltinOperatorCandidates");
7547
7548  case OO_Comma:
7549  case OO_Arrow:
7550    // C++ [over.match.oper]p3:
7551    //   -- For the operator ',', the unary operator '&', or the
7552    //      operator '->', the built-in candidates set is empty.
7553    break;
7554
7555  case OO_Plus: // '+' is either unary or binary
7556    if (NumArgs == 1)
7557      OpBuilder.addUnaryPlusPointerOverloads();
7558    // Fall through.
7559
7560  case OO_Minus: // '-' is either unary or binary
7561    if (NumArgs == 1) {
7562      OpBuilder.addUnaryPlusOrMinusArithmeticOverloads();
7563    } else {
7564      OpBuilder.addBinaryPlusOrMinusPointerOverloads(Op);
7565      OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7566    }
7567    break;
7568
7569  case OO_Star: // '*' is either unary or binary
7570    if (NumArgs == 1)
7571      OpBuilder.addUnaryStarPointerOverloads();
7572    else
7573      OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7574    break;
7575
7576  case OO_Slash:
7577    OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7578    break;
7579
7580  case OO_PlusPlus:
7581  case OO_MinusMinus:
7582    OpBuilder.addPlusPlusMinusMinusArithmeticOverloads(Op);
7583    OpBuilder.addPlusPlusMinusMinusPointerOverloads();
7584    break;
7585
7586  case OO_EqualEqual:
7587  case OO_ExclaimEqual:
7588    OpBuilder.addEqualEqualOrNotEqualMemberPointerOverloads();
7589    // Fall through.
7590
7591  case OO_Less:
7592  case OO_Greater:
7593  case OO_LessEqual:
7594  case OO_GreaterEqual:
7595    OpBuilder.addRelationalPointerOrEnumeralOverloads();
7596    OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/true);
7597    break;
7598
7599  case OO_Percent:
7600  case OO_Caret:
7601  case OO_Pipe:
7602  case OO_LessLess:
7603  case OO_GreaterGreater:
7604    OpBuilder.addBinaryBitwiseArithmeticOverloads(Op);
7605    break;
7606
7607  case OO_Amp: // '&' is either unary or binary
7608    if (NumArgs == 1)
7609      // C++ [over.match.oper]p3:
7610      //   -- For the operator ',', the unary operator '&', or the
7611      //      operator '->', the built-in candidates set is empty.
7612      break;
7613
7614    OpBuilder.addBinaryBitwiseArithmeticOverloads(Op);
7615    break;
7616
7617  case OO_Tilde:
7618    OpBuilder.addUnaryTildePromotedIntegralOverloads();
7619    break;
7620
7621  case OO_Equal:
7622    OpBuilder.addAssignmentMemberPointerOrEnumeralOverloads();
7623    // Fall through.
7624
7625  case OO_PlusEqual:
7626  case OO_MinusEqual:
7627    OpBuilder.addAssignmentPointerOverloads(Op == OO_Equal);
7628    // Fall through.
7629
7630  case OO_StarEqual:
7631  case OO_SlashEqual:
7632    OpBuilder.addAssignmentArithmeticOverloads(Op == OO_Equal);
7633    break;
7634
7635  case OO_PercentEqual:
7636  case OO_LessLessEqual:
7637  case OO_GreaterGreaterEqual:
7638  case OO_AmpEqual:
7639  case OO_CaretEqual:
7640  case OO_PipeEqual:
7641    OpBuilder.addAssignmentIntegralOverloads();
7642    break;
7643
7644  case OO_Exclaim:
7645    OpBuilder.addExclaimOverload();
7646    break;
7647
7648  case OO_AmpAmp:
7649  case OO_PipePipe:
7650    OpBuilder.addAmpAmpOrPipePipeOverload();
7651    break;
7652
7653  case OO_Subscript:
7654    OpBuilder.addSubscriptOverloads();
7655    break;
7656
7657  case OO_ArrowStar:
7658    OpBuilder.addArrowStarOverloads();
7659    break;
7660
7661  case OO_Conditional:
7662    OpBuilder.addConditionalOperatorOverloads();
7663    OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7664    break;
7665  }
7666}
7667
7668/// \brief Add function candidates found via argument-dependent lookup
7669/// to the set of overloading candidates.
7670///
7671/// This routine performs argument-dependent name lookup based on the
7672/// given function name (which may also be an operator name) and adds
7673/// all of the overload candidates found by ADL to the overload
7674/// candidate set (C++ [basic.lookup.argdep]).
7675void
7676Sema::AddArgumentDependentLookupCandidates(DeclarationName Name,
7677                                           bool Operator, SourceLocation Loc,
7678                                           llvm::ArrayRef<Expr *> Args,
7679                                 TemplateArgumentListInfo *ExplicitTemplateArgs,
7680                                           OverloadCandidateSet& CandidateSet,
7681                                           bool PartialOverloading,
7682                                           bool StdNamespaceIsAssociated) {
7683  ADLResult Fns;
7684
7685  // FIXME: This approach for uniquing ADL results (and removing
7686  // redundant candidates from the set) relies on pointer-equality,
7687  // which means we need to key off the canonical decl.  However,
7688  // always going back to the canonical decl might not get us the
7689  // right set of default arguments.  What default arguments are
7690  // we supposed to consider on ADL candidates, anyway?
7691
7692  // FIXME: Pass in the explicit template arguments?
7693  ArgumentDependentLookup(Name, Operator, Loc, Args, Fns,
7694                          StdNamespaceIsAssociated);
7695
7696  // Erase all of the candidates we already knew about.
7697  for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(),
7698                                   CandEnd = CandidateSet.end();
7699       Cand != CandEnd; ++Cand)
7700    if (Cand->Function) {
7701      Fns.erase(Cand->Function);
7702      if (FunctionTemplateDecl *FunTmpl = Cand->Function->getPrimaryTemplate())
7703        Fns.erase(FunTmpl);
7704    }
7705
7706  // For each of the ADL candidates we found, add it to the overload
7707  // set.
7708  for (ADLResult::iterator I = Fns.begin(), E = Fns.end(); I != E; ++I) {
7709    DeclAccessPair FoundDecl = DeclAccessPair::make(*I, AS_none);
7710    if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
7711      if (ExplicitTemplateArgs)
7712        continue;
7713
7714      AddOverloadCandidate(FD, FoundDecl, Args, CandidateSet, false,
7715                           PartialOverloading);
7716    } else
7717      AddTemplateOverloadCandidate(cast<FunctionTemplateDecl>(*I),
7718                                   FoundDecl, ExplicitTemplateArgs,
7719                                   Args, CandidateSet);
7720  }
7721}
7722
7723/// isBetterOverloadCandidate - Determines whether the first overload
7724/// candidate is a better candidate than the second (C++ 13.3.3p1).
7725bool
7726isBetterOverloadCandidate(Sema &S,
7727                          const OverloadCandidate &Cand1,
7728                          const OverloadCandidate &Cand2,
7729                          SourceLocation Loc,
7730                          bool UserDefinedConversion) {
7731  // Define viable functions to be better candidates than non-viable
7732  // functions.
7733  if (!Cand2.Viable)
7734    return Cand1.Viable;
7735  else if (!Cand1.Viable)
7736    return false;
7737
7738  // C++ [over.match.best]p1:
7739  //
7740  //   -- if F is a static member function, ICS1(F) is defined such
7741  //      that ICS1(F) is neither better nor worse than ICS1(G) for
7742  //      any function G, and, symmetrically, ICS1(G) is neither
7743  //      better nor worse than ICS1(F).
7744  unsigned StartArg = 0;
7745  if (Cand1.IgnoreObjectArgument || Cand2.IgnoreObjectArgument)
7746    StartArg = 1;
7747
7748  // C++ [over.match.best]p1:
7749  //   A viable function F1 is defined to be a better function than another
7750  //   viable function F2 if for all arguments i, ICSi(F1) is not a worse
7751  //   conversion sequence than ICSi(F2), and then...
7752  unsigned NumArgs = Cand1.NumConversions;
7753  assert(Cand2.NumConversions == NumArgs && "Overload candidate mismatch");
7754  bool HasBetterConversion = false;
7755  for (unsigned ArgIdx = StartArg; ArgIdx < NumArgs; ++ArgIdx) {
7756    switch (CompareImplicitConversionSequences(S,
7757                                               Cand1.Conversions[ArgIdx],
7758                                               Cand2.Conversions[ArgIdx])) {
7759    case ImplicitConversionSequence::Better:
7760      // Cand1 has a better conversion sequence.
7761      HasBetterConversion = true;
7762      break;
7763
7764    case ImplicitConversionSequence::Worse:
7765      // Cand1 can't be better than Cand2.
7766      return false;
7767
7768    case ImplicitConversionSequence::Indistinguishable:
7769      // Do nothing.
7770      break;
7771    }
7772  }
7773
7774  //    -- for some argument j, ICSj(F1) is a better conversion sequence than
7775  //       ICSj(F2), or, if not that,
7776  if (HasBetterConversion)
7777    return true;
7778
7779  //     - F1 is a non-template function and F2 is a function template
7780  //       specialization, or, if not that,
7781  if ((!Cand1.Function || !Cand1.Function->getPrimaryTemplate()) &&
7782      Cand2.Function && Cand2.Function->getPrimaryTemplate())
7783    return true;
7784
7785  //   -- F1 and F2 are function template specializations, and the function
7786  //      template for F1 is more specialized than the template for F2
7787  //      according to the partial ordering rules described in 14.5.5.2, or,
7788  //      if not that,
7789  if (Cand1.Function && Cand1.Function->getPrimaryTemplate() &&
7790      Cand2.Function && Cand2.Function->getPrimaryTemplate()) {
7791    if (FunctionTemplateDecl *BetterTemplate
7792          = S.getMoreSpecializedTemplate(Cand1.Function->getPrimaryTemplate(),
7793                                         Cand2.Function->getPrimaryTemplate(),
7794                                         Loc,
7795                       isa<CXXConversionDecl>(Cand1.Function)? TPOC_Conversion
7796                                                             : TPOC_Call,
7797                                         Cand1.ExplicitCallArguments))
7798      return BetterTemplate == Cand1.Function->getPrimaryTemplate();
7799  }
7800
7801  //   -- the context is an initialization by user-defined conversion
7802  //      (see 8.5, 13.3.1.5) and the standard conversion sequence
7803  //      from the return type of F1 to the destination type (i.e.,
7804  //      the type of the entity being initialized) is a better
7805  //      conversion sequence than the standard conversion sequence
7806  //      from the return type of F2 to the destination type.
7807  if (UserDefinedConversion && Cand1.Function && Cand2.Function &&
7808      isa<CXXConversionDecl>(Cand1.Function) &&
7809      isa<CXXConversionDecl>(Cand2.Function)) {
7810    // First check whether we prefer one of the conversion functions over the
7811    // other. This only distinguishes the results in non-standard, extension
7812    // cases such as the conversion from a lambda closure type to a function
7813    // pointer or block.
7814    ImplicitConversionSequence::CompareKind FuncResult
7815      = compareConversionFunctions(S, Cand1.Function, Cand2.Function);
7816    if (FuncResult != ImplicitConversionSequence::Indistinguishable)
7817      return FuncResult;
7818
7819    switch (CompareStandardConversionSequences(S,
7820                                               Cand1.FinalConversion,
7821                                               Cand2.FinalConversion)) {
7822    case ImplicitConversionSequence::Better:
7823      // Cand1 has a better conversion sequence.
7824      return true;
7825
7826    case ImplicitConversionSequence::Worse:
7827      // Cand1 can't be better than Cand2.
7828      return false;
7829
7830    case ImplicitConversionSequence::Indistinguishable:
7831      // Do nothing
7832      break;
7833    }
7834  }
7835
7836  return false;
7837}
7838
7839/// \brief Computes the best viable function (C++ 13.3.3)
7840/// within an overload candidate set.
7841///
7842/// \param Loc The location of the function name (or operator symbol) for
7843/// which overload resolution occurs.
7844///
7845/// \param Best If overload resolution was successful or found a deleted
7846/// function, \p Best points to the candidate function found.
7847///
7848/// \returns The result of overload resolution.
7849OverloadingResult
7850OverloadCandidateSet::BestViableFunction(Sema &S, SourceLocation Loc,
7851                                         iterator &Best,
7852                                         bool UserDefinedConversion) {
7853  // Find the best viable function.
7854  Best = end();
7855  for (iterator Cand = begin(); Cand != end(); ++Cand) {
7856    if (Cand->Viable)
7857      if (Best == end() || isBetterOverloadCandidate(S, *Cand, *Best, Loc,
7858                                                     UserDefinedConversion))
7859        Best = Cand;
7860  }
7861
7862  // If we didn't find any viable functions, abort.
7863  if (Best == end())
7864    return OR_No_Viable_Function;
7865
7866  // Make sure that this function is better than every other viable
7867  // function. If not, we have an ambiguity.
7868  for (iterator Cand = begin(); Cand != end(); ++Cand) {
7869    if (Cand->Viable &&
7870        Cand != Best &&
7871        !isBetterOverloadCandidate(S, *Best, *Cand, Loc,
7872                                   UserDefinedConversion)) {
7873      Best = end();
7874      return OR_Ambiguous;
7875    }
7876  }
7877
7878  // Best is the best viable function.
7879  if (Best->Function &&
7880      (Best->Function->isDeleted() ||
7881       S.isFunctionConsideredUnavailable(Best->Function)))
7882    return OR_Deleted;
7883
7884  return OR_Success;
7885}
7886
7887namespace {
7888
7889enum OverloadCandidateKind {
7890  oc_function,
7891  oc_method,
7892  oc_constructor,
7893  oc_function_template,
7894  oc_method_template,
7895  oc_constructor_template,
7896  oc_implicit_default_constructor,
7897  oc_implicit_copy_constructor,
7898  oc_implicit_move_constructor,
7899  oc_implicit_copy_assignment,
7900  oc_implicit_move_assignment,
7901  oc_implicit_inherited_constructor
7902};
7903
7904OverloadCandidateKind ClassifyOverloadCandidate(Sema &S,
7905                                                FunctionDecl *Fn,
7906                                                std::string &Description) {
7907  bool isTemplate = false;
7908
7909  if (FunctionTemplateDecl *FunTmpl = Fn->getPrimaryTemplate()) {
7910    isTemplate = true;
7911    Description = S.getTemplateArgumentBindingsText(
7912      FunTmpl->getTemplateParameters(), *Fn->getTemplateSpecializationArgs());
7913  }
7914
7915  if (CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn)) {
7916    if (!Ctor->isImplicit())
7917      return isTemplate ? oc_constructor_template : oc_constructor;
7918
7919    if (Ctor->getInheritedConstructor())
7920      return oc_implicit_inherited_constructor;
7921
7922    if (Ctor->isDefaultConstructor())
7923      return oc_implicit_default_constructor;
7924
7925    if (Ctor->isMoveConstructor())
7926      return oc_implicit_move_constructor;
7927
7928    assert(Ctor->isCopyConstructor() &&
7929           "unexpected sort of implicit constructor");
7930    return oc_implicit_copy_constructor;
7931  }
7932
7933  if (CXXMethodDecl *Meth = dyn_cast<CXXMethodDecl>(Fn)) {
7934    // This actually gets spelled 'candidate function' for now, but
7935    // it doesn't hurt to split it out.
7936    if (!Meth->isImplicit())
7937      return isTemplate ? oc_method_template : oc_method;
7938
7939    if (Meth->isMoveAssignmentOperator())
7940      return oc_implicit_move_assignment;
7941
7942    if (Meth->isCopyAssignmentOperator())
7943      return oc_implicit_copy_assignment;
7944
7945    assert(isa<CXXConversionDecl>(Meth) && "expected conversion");
7946    return oc_method;
7947  }
7948
7949  return isTemplate ? oc_function_template : oc_function;
7950}
7951
7952void MaybeEmitInheritedConstructorNote(Sema &S, FunctionDecl *Fn) {
7953  const CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn);
7954  if (!Ctor) return;
7955
7956  Ctor = Ctor->getInheritedConstructor();
7957  if (!Ctor) return;
7958
7959  S.Diag(Ctor->getLocation(), diag::note_ovl_candidate_inherited_constructor);
7960}
7961
7962} // end anonymous namespace
7963
7964// Notes the location of an overload candidate.
7965void Sema::NoteOverloadCandidate(FunctionDecl *Fn, QualType DestType) {
7966  std::string FnDesc;
7967  OverloadCandidateKind K = ClassifyOverloadCandidate(*this, Fn, FnDesc);
7968  PartialDiagnostic PD = PDiag(diag::note_ovl_candidate)
7969                             << (unsigned) K << FnDesc;
7970  HandleFunctionTypeMismatch(PD, Fn->getType(), DestType);
7971  Diag(Fn->getLocation(), PD);
7972  MaybeEmitInheritedConstructorNote(*this, Fn);
7973}
7974
7975//Notes the location of all overload candidates designated through
7976// OverloadedExpr
7977void Sema::NoteAllOverloadCandidates(Expr* OverloadedExpr, QualType DestType) {
7978  assert(OverloadedExpr->getType() == Context.OverloadTy);
7979
7980  OverloadExpr::FindResult Ovl = OverloadExpr::find(OverloadedExpr);
7981  OverloadExpr *OvlExpr = Ovl.Expression;
7982
7983  for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
7984                            IEnd = OvlExpr->decls_end();
7985       I != IEnd; ++I) {
7986    if (FunctionTemplateDecl *FunTmpl =
7987                dyn_cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl()) ) {
7988      NoteOverloadCandidate(FunTmpl->getTemplatedDecl(), DestType);
7989    } else if (FunctionDecl *Fun
7990                      = dyn_cast<FunctionDecl>((*I)->getUnderlyingDecl()) ) {
7991      NoteOverloadCandidate(Fun, DestType);
7992    }
7993  }
7994}
7995
7996/// Diagnoses an ambiguous conversion.  The partial diagnostic is the
7997/// "lead" diagnostic; it will be given two arguments, the source and
7998/// target types of the conversion.
7999void ImplicitConversionSequence::DiagnoseAmbiguousConversion(
8000                                 Sema &S,
8001                                 SourceLocation CaretLoc,
8002                                 const PartialDiagnostic &PDiag) const {
8003  S.Diag(CaretLoc, PDiag)
8004    << Ambiguous.getFromType() << Ambiguous.getToType();
8005  for (AmbiguousConversionSequence::const_iterator
8006         I = Ambiguous.begin(), E = Ambiguous.end(); I != E; ++I) {
8007    S.NoteOverloadCandidate(*I);
8008  }
8009}
8010
8011namespace {
8012
8013void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I) {
8014  const ImplicitConversionSequence &Conv = Cand->Conversions[I];
8015  assert(Conv.isBad());
8016  assert(Cand->Function && "for now, candidate must be a function");
8017  FunctionDecl *Fn = Cand->Function;
8018
8019  // There's a conversion slot for the object argument if this is a
8020  // non-constructor method.  Note that 'I' corresponds the
8021  // conversion-slot index.
8022  bool isObjectArgument = false;
8023  if (isa<CXXMethodDecl>(Fn) && !isa<CXXConstructorDecl>(Fn)) {
8024    if (I == 0)
8025      isObjectArgument = true;
8026    else
8027      I--;
8028  }
8029
8030  std::string FnDesc;
8031  OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
8032
8033  Expr *FromExpr = Conv.Bad.FromExpr;
8034  QualType FromTy = Conv.Bad.getFromType();
8035  QualType ToTy = Conv.Bad.getToType();
8036
8037  if (FromTy == S.Context.OverloadTy) {
8038    assert(FromExpr && "overload set argument came from implicit argument?");
8039    Expr *E = FromExpr->IgnoreParens();
8040    if (isa<UnaryOperator>(E))
8041      E = cast<UnaryOperator>(E)->getSubExpr()->IgnoreParens();
8042    DeclarationName Name = cast<OverloadExpr>(E)->getName();
8043
8044    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_overload)
8045      << (unsigned) FnKind << FnDesc
8046      << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8047      << ToTy << Name << I+1;
8048    MaybeEmitInheritedConstructorNote(S, Fn);
8049    return;
8050  }
8051
8052  // Do some hand-waving analysis to see if the non-viability is due
8053  // to a qualifier mismatch.
8054  CanQualType CFromTy = S.Context.getCanonicalType(FromTy);
8055  CanQualType CToTy = S.Context.getCanonicalType(ToTy);
8056  if (CanQual<ReferenceType> RT = CToTy->getAs<ReferenceType>())
8057    CToTy = RT->getPointeeType();
8058  else {
8059    // TODO: detect and diagnose the full richness of const mismatches.
8060    if (CanQual<PointerType> FromPT = CFromTy->getAs<PointerType>())
8061      if (CanQual<PointerType> ToPT = CToTy->getAs<PointerType>())
8062        CFromTy = FromPT->getPointeeType(), CToTy = ToPT->getPointeeType();
8063  }
8064
8065  if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() &&
8066      !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {
8067    Qualifiers FromQs = CFromTy.getQualifiers();
8068    Qualifiers ToQs = CToTy.getQualifiers();
8069
8070    if (FromQs.getAddressSpace() != ToQs.getAddressSpace()) {
8071      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_addrspace)
8072        << (unsigned) FnKind << FnDesc
8073        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8074        << FromTy
8075        << FromQs.getAddressSpace() << ToQs.getAddressSpace()
8076        << (unsigned) isObjectArgument << I+1;
8077      MaybeEmitInheritedConstructorNote(S, Fn);
8078      return;
8079    }
8080
8081    if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {
8082      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_ownership)
8083        << (unsigned) FnKind << FnDesc
8084        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8085        << FromTy
8086        << FromQs.getObjCLifetime() << ToQs.getObjCLifetime()
8087        << (unsigned) isObjectArgument << I+1;
8088      MaybeEmitInheritedConstructorNote(S, Fn);
8089      return;
8090    }
8091
8092    if (FromQs.getObjCGCAttr() != ToQs.getObjCGCAttr()) {
8093      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_gc)
8094      << (unsigned) FnKind << FnDesc
8095      << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8096      << FromTy
8097      << FromQs.getObjCGCAttr() << ToQs.getObjCGCAttr()
8098      << (unsigned) isObjectArgument << I+1;
8099      MaybeEmitInheritedConstructorNote(S, Fn);
8100      return;
8101    }
8102
8103    unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
8104    assert(CVR && "unexpected qualifiers mismatch");
8105
8106    if (isObjectArgument) {
8107      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr_this)
8108        << (unsigned) FnKind << FnDesc
8109        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8110        << FromTy << (CVR - 1);
8111    } else {
8112      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr)
8113        << (unsigned) FnKind << FnDesc
8114        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8115        << FromTy << (CVR - 1) << I+1;
8116    }
8117    MaybeEmitInheritedConstructorNote(S, Fn);
8118    return;
8119  }
8120
8121  // Special diagnostic for failure to convert an initializer list, since
8122  // telling the user that it has type void is not useful.
8123  if (FromExpr && isa<InitListExpr>(FromExpr)) {
8124    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_list_argument)
8125      << (unsigned) FnKind << FnDesc
8126      << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8127      << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8128    MaybeEmitInheritedConstructorNote(S, Fn);
8129    return;
8130  }
8131
8132  // Diagnose references or pointers to incomplete types differently,
8133  // since it's far from impossible that the incompleteness triggered
8134  // the failure.
8135  QualType TempFromTy = FromTy.getNonReferenceType();
8136  if (const PointerType *PTy = TempFromTy->getAs<PointerType>())
8137    TempFromTy = PTy->getPointeeType();
8138  if (TempFromTy->isIncompleteType()) {
8139    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_conv_incomplete)
8140      << (unsigned) FnKind << FnDesc
8141      << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8142      << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8143    MaybeEmitInheritedConstructorNote(S, Fn);
8144    return;
8145  }
8146
8147  // Diagnose base -> derived pointer conversions.
8148  unsigned BaseToDerivedConversion = 0;
8149  if (const PointerType *FromPtrTy = FromTy->getAs<PointerType>()) {
8150    if (const PointerType *ToPtrTy = ToTy->getAs<PointerType>()) {
8151      if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs(
8152                                               FromPtrTy->getPointeeType()) &&
8153          !FromPtrTy->getPointeeType()->isIncompleteType() &&
8154          !ToPtrTy->getPointeeType()->isIncompleteType() &&
8155          S.IsDerivedFrom(ToPtrTy->getPointeeType(),
8156                          FromPtrTy->getPointeeType()))
8157        BaseToDerivedConversion = 1;
8158    }
8159  } else if (const ObjCObjectPointerType *FromPtrTy
8160                                    = FromTy->getAs<ObjCObjectPointerType>()) {
8161    if (const ObjCObjectPointerType *ToPtrTy
8162                                        = ToTy->getAs<ObjCObjectPointerType>())
8163      if (const ObjCInterfaceDecl *FromIface = FromPtrTy->getInterfaceDecl())
8164        if (const ObjCInterfaceDecl *ToIface = ToPtrTy->getInterfaceDecl())
8165          if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs(
8166                                                FromPtrTy->getPointeeType()) &&
8167              FromIface->isSuperClassOf(ToIface))
8168            BaseToDerivedConversion = 2;
8169  } else if (const ReferenceType *ToRefTy = ToTy->getAs<ReferenceType>()) {
8170    if (ToRefTy->getPointeeType().isAtLeastAsQualifiedAs(FromTy) &&
8171        !FromTy->isIncompleteType() &&
8172        !ToRefTy->getPointeeType()->isIncompleteType() &&
8173        S.IsDerivedFrom(ToRefTy->getPointeeType(), FromTy)) {
8174      BaseToDerivedConversion = 3;
8175    } else if (ToTy->isLValueReferenceType() && !FromExpr->isLValue() &&
8176               ToTy.getNonReferenceType().getCanonicalType() ==
8177               FromTy.getNonReferenceType().getCanonicalType()) {
8178      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_lvalue)
8179        << (unsigned) FnKind << FnDesc
8180        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8181        << (unsigned) isObjectArgument << I + 1;
8182      MaybeEmitInheritedConstructorNote(S, Fn);
8183      return;
8184    }
8185  }
8186
8187  if (BaseToDerivedConversion) {
8188    S.Diag(Fn->getLocation(),
8189           diag::note_ovl_candidate_bad_base_to_derived_conv)
8190      << (unsigned) FnKind << FnDesc
8191      << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8192      << (BaseToDerivedConversion - 1)
8193      << FromTy << ToTy << I+1;
8194    MaybeEmitInheritedConstructorNote(S, Fn);
8195    return;
8196  }
8197
8198  if (isa<ObjCObjectPointerType>(CFromTy) &&
8199      isa<PointerType>(CToTy)) {
8200      Qualifiers FromQs = CFromTy.getQualifiers();
8201      Qualifiers ToQs = CToTy.getQualifiers();
8202      if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {
8203        S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_arc_conv)
8204        << (unsigned) FnKind << FnDesc
8205        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8206        << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8207        MaybeEmitInheritedConstructorNote(S, Fn);
8208        return;
8209      }
8210  }
8211
8212  // Emit the generic diagnostic and, optionally, add the hints to it.
8213  PartialDiagnostic FDiag = S.PDiag(diag::note_ovl_candidate_bad_conv);
8214  FDiag << (unsigned) FnKind << FnDesc
8215    << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8216    << FromTy << ToTy << (unsigned) isObjectArgument << I + 1
8217    << (unsigned) (Cand->Fix.Kind);
8218
8219  // If we can fix the conversion, suggest the FixIts.
8220  for (std::vector<FixItHint>::iterator HI = Cand->Fix.Hints.begin(),
8221       HE = Cand->Fix.Hints.end(); HI != HE; ++HI)
8222    FDiag << *HI;
8223  S.Diag(Fn->getLocation(), FDiag);
8224
8225  MaybeEmitInheritedConstructorNote(S, Fn);
8226}
8227
8228void DiagnoseArityMismatch(Sema &S, OverloadCandidate *Cand,
8229                           unsigned NumFormalArgs) {
8230  // TODO: treat calls to a missing default constructor as a special case
8231
8232  FunctionDecl *Fn = Cand->Function;
8233  const FunctionProtoType *FnTy = Fn->getType()->getAs<FunctionProtoType>();
8234
8235  unsigned MinParams = Fn->getMinRequiredArguments();
8236
8237  // With invalid overloaded operators, it's possible that we think we
8238  // have an arity mismatch when it fact it looks like we have the
8239  // right number of arguments, because only overloaded operators have
8240  // the weird behavior of overloading member and non-member functions.
8241  // Just don't report anything.
8242  if (Fn->isInvalidDecl() &&
8243      Fn->getDeclName().getNameKind() == DeclarationName::CXXOperatorName)
8244    return;
8245
8246  // at least / at most / exactly
8247  unsigned mode, modeCount;
8248  if (NumFormalArgs < MinParams) {
8249    assert((Cand->FailureKind == ovl_fail_too_few_arguments) ||
8250           (Cand->FailureKind == ovl_fail_bad_deduction &&
8251            Cand->DeductionFailure.Result == Sema::TDK_TooFewArguments));
8252    if (MinParams != FnTy->getNumArgs() ||
8253        FnTy->isVariadic() || FnTy->isTemplateVariadic())
8254      mode = 0; // "at least"
8255    else
8256      mode = 2; // "exactly"
8257    modeCount = MinParams;
8258  } else {
8259    assert((Cand->FailureKind == ovl_fail_too_many_arguments) ||
8260           (Cand->FailureKind == ovl_fail_bad_deduction &&
8261            Cand->DeductionFailure.Result == Sema::TDK_TooManyArguments));
8262    if (MinParams != FnTy->getNumArgs())
8263      mode = 1; // "at most"
8264    else
8265      mode = 2; // "exactly"
8266    modeCount = FnTy->getNumArgs();
8267  }
8268
8269  std::string Description;
8270  OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, Description);
8271
8272  if (modeCount == 1 && Fn->getParamDecl(0)->getDeclName())
8273    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity_one)
8274      << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != 0) << mode
8275      << Fn->getParamDecl(0) << NumFormalArgs;
8276  else
8277    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity)
8278      << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != 0) << mode
8279      << modeCount << NumFormalArgs;
8280  MaybeEmitInheritedConstructorNote(S, Fn);
8281}
8282
8283/// Diagnose a failed template-argument deduction.
8284void DiagnoseBadDeduction(Sema &S, OverloadCandidate *Cand,
8285                          unsigned NumArgs) {
8286  FunctionDecl *Fn = Cand->Function; // pattern
8287
8288  TemplateParameter Param = Cand->DeductionFailure.getTemplateParameter();
8289  NamedDecl *ParamD;
8290  (ParamD = Param.dyn_cast<TemplateTypeParmDecl*>()) ||
8291  (ParamD = Param.dyn_cast<NonTypeTemplateParmDecl*>()) ||
8292  (ParamD = Param.dyn_cast<TemplateTemplateParmDecl*>());
8293  switch (Cand->DeductionFailure.Result) {
8294  case Sema::TDK_Success:
8295    llvm_unreachable("TDK_success while diagnosing bad deduction");
8296
8297  case Sema::TDK_Incomplete: {
8298    assert(ParamD && "no parameter found for incomplete deduction result");
8299    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_incomplete_deduction)
8300      << ParamD->getDeclName();
8301    MaybeEmitInheritedConstructorNote(S, Fn);
8302    return;
8303  }
8304
8305  case Sema::TDK_Underqualified: {
8306    assert(ParamD && "no parameter found for bad qualifiers deduction result");
8307    TemplateTypeParmDecl *TParam = cast<TemplateTypeParmDecl>(ParamD);
8308
8309    QualType Param = Cand->DeductionFailure.getFirstArg()->getAsType();
8310
8311    // Param will have been canonicalized, but it should just be a
8312    // qualified version of ParamD, so move the qualifiers to that.
8313    QualifierCollector Qs;
8314    Qs.strip(Param);
8315    QualType NonCanonParam = Qs.apply(S.Context, TParam->getTypeForDecl());
8316    assert(S.Context.hasSameType(Param, NonCanonParam));
8317
8318    // Arg has also been canonicalized, but there's nothing we can do
8319    // about that.  It also doesn't matter as much, because it won't
8320    // have any template parameters in it (because deduction isn't
8321    // done on dependent types).
8322    QualType Arg = Cand->DeductionFailure.getSecondArg()->getAsType();
8323
8324    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_underqualified)
8325      << ParamD->getDeclName() << Arg << NonCanonParam;
8326    MaybeEmitInheritedConstructorNote(S, Fn);
8327    return;
8328  }
8329
8330  case Sema::TDK_Inconsistent: {
8331    assert(ParamD && "no parameter found for inconsistent deduction result");
8332    int which = 0;
8333    if (isa<TemplateTypeParmDecl>(ParamD))
8334      which = 0;
8335    else if (isa<NonTypeTemplateParmDecl>(ParamD))
8336      which = 1;
8337    else {
8338      which = 2;
8339    }
8340
8341    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_inconsistent_deduction)
8342      << which << ParamD->getDeclName()
8343      << *Cand->DeductionFailure.getFirstArg()
8344      << *Cand->DeductionFailure.getSecondArg();
8345    MaybeEmitInheritedConstructorNote(S, Fn);
8346    return;
8347  }
8348
8349  case Sema::TDK_InvalidExplicitArguments:
8350    assert(ParamD && "no parameter found for invalid explicit arguments");
8351    if (ParamD->getDeclName())
8352      S.Diag(Fn->getLocation(),
8353             diag::note_ovl_candidate_explicit_arg_mismatch_named)
8354        << ParamD->getDeclName();
8355    else {
8356      int index = 0;
8357      if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(ParamD))
8358        index = TTP->getIndex();
8359      else if (NonTypeTemplateParmDecl *NTTP
8360                                  = dyn_cast<NonTypeTemplateParmDecl>(ParamD))
8361        index = NTTP->getIndex();
8362      else
8363        index = cast<TemplateTemplateParmDecl>(ParamD)->getIndex();
8364      S.Diag(Fn->getLocation(),
8365             diag::note_ovl_candidate_explicit_arg_mismatch_unnamed)
8366        << (index + 1);
8367    }
8368    MaybeEmitInheritedConstructorNote(S, Fn);
8369    return;
8370
8371  case Sema::TDK_TooManyArguments:
8372  case Sema::TDK_TooFewArguments:
8373    DiagnoseArityMismatch(S, Cand, NumArgs);
8374    return;
8375
8376  case Sema::TDK_InstantiationDepth:
8377    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_instantiation_depth);
8378    MaybeEmitInheritedConstructorNote(S, Fn);
8379    return;
8380
8381  case Sema::TDK_SubstitutionFailure: {
8382    // Format the template argument list into the argument string.
8383    llvm::SmallString<128> TemplateArgString;
8384    if (TemplateArgumentList *Args =
8385          Cand->DeductionFailure.getTemplateArgumentList()) {
8386      TemplateArgString = " ";
8387      TemplateArgString += S.getTemplateArgumentBindingsText(
8388          Fn->getDescribedFunctionTemplate()->getTemplateParameters(), *Args);
8389    }
8390
8391    // If this candidate was disabled by enable_if, say so.
8392    PartialDiagnosticAt *PDiag = Cand->DeductionFailure.getSFINAEDiagnostic();
8393    if (PDiag && PDiag->second.getDiagID() ==
8394          diag::err_typename_nested_not_found_enable_if) {
8395      // FIXME: Use the source range of the condition, and the fully-qualified
8396      //        name of the enable_if template. These are both present in PDiag.
8397      S.Diag(PDiag->first, diag::note_ovl_candidate_disabled_by_enable_if)
8398        << "'enable_if'" << TemplateArgString;
8399      return;
8400    }
8401
8402    // Format the SFINAE diagnostic into the argument string.
8403    // FIXME: Add a general mechanism to include a PartialDiagnostic *'s
8404    //        formatted message in another diagnostic.
8405    llvm::SmallString<128> SFINAEArgString;
8406    SourceRange R;
8407    if (PDiag) {
8408      SFINAEArgString = ": ";
8409      R = SourceRange(PDiag->first, PDiag->first);
8410      PDiag->second.EmitToString(S.getDiagnostics(), SFINAEArgString);
8411    }
8412
8413    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_substitution_failure)
8414      << TemplateArgString << SFINAEArgString << R;
8415    MaybeEmitInheritedConstructorNote(S, Fn);
8416    return;
8417  }
8418
8419  // TODO: diagnose these individually, then kill off
8420  // note_ovl_candidate_bad_deduction, which is uselessly vague.
8421  case Sema::TDK_NonDeducedMismatch:
8422  case Sema::TDK_FailedOverloadResolution:
8423    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_deduction);
8424    MaybeEmitInheritedConstructorNote(S, Fn);
8425    return;
8426  }
8427}
8428
8429/// CUDA: diagnose an invalid call across targets.
8430void DiagnoseBadTarget(Sema &S, OverloadCandidate *Cand) {
8431  FunctionDecl *Caller = cast<FunctionDecl>(S.CurContext);
8432  FunctionDecl *Callee = Cand->Function;
8433
8434  Sema::CUDAFunctionTarget CallerTarget = S.IdentifyCUDATarget(Caller),
8435                           CalleeTarget = S.IdentifyCUDATarget(Callee);
8436
8437  std::string FnDesc;
8438  OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Callee, FnDesc);
8439
8440  S.Diag(Callee->getLocation(), diag::note_ovl_candidate_bad_target)
8441      << (unsigned) FnKind << CalleeTarget << CallerTarget;
8442}
8443
8444/// Generates a 'note' diagnostic for an overload candidate.  We've
8445/// already generated a primary error at the call site.
8446///
8447/// It really does need to be a single diagnostic with its caret
8448/// pointed at the candidate declaration.  Yes, this creates some
8449/// major challenges of technical writing.  Yes, this makes pointing
8450/// out problems with specific arguments quite awkward.  It's still
8451/// better than generating twenty screens of text for every failed
8452/// overload.
8453///
8454/// It would be great to be able to express per-candidate problems
8455/// more richly for those diagnostic clients that cared, but we'd
8456/// still have to be just as careful with the default diagnostics.
8457void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand,
8458                           unsigned NumArgs) {
8459  FunctionDecl *Fn = Cand->Function;
8460
8461  // Note deleted candidates, but only if they're viable.
8462  if (Cand->Viable && (Fn->isDeleted() ||
8463      S.isFunctionConsideredUnavailable(Fn))) {
8464    std::string FnDesc;
8465    OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
8466
8467    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_deleted)
8468      << FnKind << FnDesc
8469      << (Fn->isDeleted() ? (Fn->isDeletedAsWritten() ? 1 : 2) : 0);
8470    MaybeEmitInheritedConstructorNote(S, Fn);
8471    return;
8472  }
8473
8474  // We don't really have anything else to say about viable candidates.
8475  if (Cand->Viable) {
8476    S.NoteOverloadCandidate(Fn);
8477    return;
8478  }
8479
8480  switch (Cand->FailureKind) {
8481  case ovl_fail_too_many_arguments:
8482  case ovl_fail_too_few_arguments:
8483    return DiagnoseArityMismatch(S, Cand, NumArgs);
8484
8485  case ovl_fail_bad_deduction:
8486    return DiagnoseBadDeduction(S, Cand, NumArgs);
8487
8488  case ovl_fail_trivial_conversion:
8489  case ovl_fail_bad_final_conversion:
8490  case ovl_fail_final_conversion_not_exact:
8491    return S.NoteOverloadCandidate(Fn);
8492
8493  case ovl_fail_bad_conversion: {
8494    unsigned I = (Cand->IgnoreObjectArgument ? 1 : 0);
8495    for (unsigned N = Cand->NumConversions; I != N; ++I)
8496      if (Cand->Conversions[I].isBad())
8497        return DiagnoseBadConversion(S, Cand, I);
8498
8499    // FIXME: this currently happens when we're called from SemaInit
8500    // when user-conversion overload fails.  Figure out how to handle
8501    // those conditions and diagnose them well.
8502    return S.NoteOverloadCandidate(Fn);
8503  }
8504
8505  case ovl_fail_bad_target:
8506    return DiagnoseBadTarget(S, Cand);
8507  }
8508}
8509
8510void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) {
8511  // Desugar the type of the surrogate down to a function type,
8512  // retaining as many typedefs as possible while still showing
8513  // the function type (and, therefore, its parameter types).
8514  QualType FnType = Cand->Surrogate->getConversionType();
8515  bool isLValueReference = false;
8516  bool isRValueReference = false;
8517  bool isPointer = false;
8518  if (const LValueReferenceType *FnTypeRef =
8519        FnType->getAs<LValueReferenceType>()) {
8520    FnType = FnTypeRef->getPointeeType();
8521    isLValueReference = true;
8522  } else if (const RValueReferenceType *FnTypeRef =
8523               FnType->getAs<RValueReferenceType>()) {
8524    FnType = FnTypeRef->getPointeeType();
8525    isRValueReference = true;
8526  }
8527  if (const PointerType *FnTypePtr = FnType->getAs<PointerType>()) {
8528    FnType = FnTypePtr->getPointeeType();
8529    isPointer = true;
8530  }
8531  // Desugar down to a function type.
8532  FnType = QualType(FnType->getAs<FunctionType>(), 0);
8533  // Reconstruct the pointer/reference as appropriate.
8534  if (isPointer) FnType = S.Context.getPointerType(FnType);
8535  if (isRValueReference) FnType = S.Context.getRValueReferenceType(FnType);
8536  if (isLValueReference) FnType = S.Context.getLValueReferenceType(FnType);
8537
8538  S.Diag(Cand->Surrogate->getLocation(), diag::note_ovl_surrogate_cand)
8539    << FnType;
8540  MaybeEmitInheritedConstructorNote(S, Cand->Surrogate);
8541}
8542
8543void NoteBuiltinOperatorCandidate(Sema &S,
8544                                  StringRef Opc,
8545                                  SourceLocation OpLoc,
8546                                  OverloadCandidate *Cand) {
8547  assert(Cand->NumConversions <= 2 && "builtin operator is not binary");
8548  std::string TypeStr("operator");
8549  TypeStr += Opc;
8550  TypeStr += "(";
8551  TypeStr += Cand->BuiltinTypes.ParamTypes[0].getAsString();
8552  if (Cand->NumConversions == 1) {
8553    TypeStr += ")";
8554    S.Diag(OpLoc, diag::note_ovl_builtin_unary_candidate) << TypeStr;
8555  } else {
8556    TypeStr += ", ";
8557    TypeStr += Cand->BuiltinTypes.ParamTypes[1].getAsString();
8558    TypeStr += ")";
8559    S.Diag(OpLoc, diag::note_ovl_builtin_binary_candidate) << TypeStr;
8560  }
8561}
8562
8563void NoteAmbiguousUserConversions(Sema &S, SourceLocation OpLoc,
8564                                  OverloadCandidate *Cand) {
8565  unsigned NoOperands = Cand->NumConversions;
8566  for (unsigned ArgIdx = 0; ArgIdx < NoOperands; ++ArgIdx) {
8567    const ImplicitConversionSequence &ICS = Cand->Conversions[ArgIdx];
8568    if (ICS.isBad()) break; // all meaningless after first invalid
8569    if (!ICS.isAmbiguous()) continue;
8570
8571    ICS.DiagnoseAmbiguousConversion(S, OpLoc,
8572                              S.PDiag(diag::note_ambiguous_type_conversion));
8573  }
8574}
8575
8576SourceLocation GetLocationForCandidate(const OverloadCandidate *Cand) {
8577  if (Cand->Function)
8578    return Cand->Function->getLocation();
8579  if (Cand->IsSurrogate)
8580    return Cand->Surrogate->getLocation();
8581  return SourceLocation();
8582}
8583
8584static unsigned
8585RankDeductionFailure(const OverloadCandidate::DeductionFailureInfo &DFI) {
8586  switch ((Sema::TemplateDeductionResult)DFI.Result) {
8587  case Sema::TDK_Success:
8588    llvm_unreachable("TDK_success while diagnosing bad deduction");
8589
8590  case Sema::TDK_Invalid:
8591  case Sema::TDK_Incomplete:
8592    return 1;
8593
8594  case Sema::TDK_Underqualified:
8595  case Sema::TDK_Inconsistent:
8596    return 2;
8597
8598  case Sema::TDK_SubstitutionFailure:
8599  case Sema::TDK_NonDeducedMismatch:
8600    return 3;
8601
8602  case Sema::TDK_InstantiationDepth:
8603  case Sema::TDK_FailedOverloadResolution:
8604    return 4;
8605
8606  case Sema::TDK_InvalidExplicitArguments:
8607    return 5;
8608
8609  case Sema::TDK_TooManyArguments:
8610  case Sema::TDK_TooFewArguments:
8611    return 6;
8612  }
8613  llvm_unreachable("Unhandled deduction result");
8614}
8615
8616struct CompareOverloadCandidatesForDisplay {
8617  Sema &S;
8618  CompareOverloadCandidatesForDisplay(Sema &S) : S(S) {}
8619
8620  bool operator()(const OverloadCandidate *L,
8621                  const OverloadCandidate *R) {
8622    // Fast-path this check.
8623    if (L == R) return false;
8624
8625    // Order first by viability.
8626    if (L->Viable) {
8627      if (!R->Viable) return true;
8628
8629      // TODO: introduce a tri-valued comparison for overload
8630      // candidates.  Would be more worthwhile if we had a sort
8631      // that could exploit it.
8632      if (isBetterOverloadCandidate(S, *L, *R, SourceLocation())) return true;
8633      if (isBetterOverloadCandidate(S, *R, *L, SourceLocation())) return false;
8634    } else if (R->Viable)
8635      return false;
8636
8637    assert(L->Viable == R->Viable);
8638
8639    // Criteria by which we can sort non-viable candidates:
8640    if (!L->Viable) {
8641      // 1. Arity mismatches come after other candidates.
8642      if (L->FailureKind == ovl_fail_too_many_arguments ||
8643          L->FailureKind == ovl_fail_too_few_arguments)
8644        return false;
8645      if (R->FailureKind == ovl_fail_too_many_arguments ||
8646          R->FailureKind == ovl_fail_too_few_arguments)
8647        return true;
8648
8649      // 2. Bad conversions come first and are ordered by the number
8650      // of bad conversions and quality of good conversions.
8651      if (L->FailureKind == ovl_fail_bad_conversion) {
8652        if (R->FailureKind != ovl_fail_bad_conversion)
8653          return true;
8654
8655        // The conversion that can be fixed with a smaller number of changes,
8656        // comes first.
8657        unsigned numLFixes = L->Fix.NumConversionsFixed;
8658        unsigned numRFixes = R->Fix.NumConversionsFixed;
8659        numLFixes = (numLFixes == 0) ? UINT_MAX : numLFixes;
8660        numRFixes = (numRFixes == 0) ? UINT_MAX : numRFixes;
8661        if (numLFixes != numRFixes) {
8662          if (numLFixes < numRFixes)
8663            return true;
8664          else
8665            return false;
8666        }
8667
8668        // If there's any ordering between the defined conversions...
8669        // FIXME: this might not be transitive.
8670        assert(L->NumConversions == R->NumConversions);
8671
8672        int leftBetter = 0;
8673        unsigned I = (L->IgnoreObjectArgument || R->IgnoreObjectArgument);
8674        for (unsigned E = L->NumConversions; I != E; ++I) {
8675          switch (CompareImplicitConversionSequences(S,
8676                                                     L->Conversions[I],
8677                                                     R->Conversions[I])) {
8678          case ImplicitConversionSequence::Better:
8679            leftBetter++;
8680            break;
8681
8682          case ImplicitConversionSequence::Worse:
8683            leftBetter--;
8684            break;
8685
8686          case ImplicitConversionSequence::Indistinguishable:
8687            break;
8688          }
8689        }
8690        if (leftBetter > 0) return true;
8691        if (leftBetter < 0) return false;
8692
8693      } else if (R->FailureKind == ovl_fail_bad_conversion)
8694        return false;
8695
8696      if (L->FailureKind == ovl_fail_bad_deduction) {
8697        if (R->FailureKind != ovl_fail_bad_deduction)
8698          return true;
8699
8700        if (L->DeductionFailure.Result != R->DeductionFailure.Result)
8701          return RankDeductionFailure(L->DeductionFailure)
8702               < RankDeductionFailure(R->DeductionFailure);
8703      } else if (R->FailureKind == ovl_fail_bad_deduction)
8704        return false;
8705
8706      // TODO: others?
8707    }
8708
8709    // Sort everything else by location.
8710    SourceLocation LLoc = GetLocationForCandidate(L);
8711    SourceLocation RLoc = GetLocationForCandidate(R);
8712
8713    // Put candidates without locations (e.g. builtins) at the end.
8714    if (LLoc.isInvalid()) return false;
8715    if (RLoc.isInvalid()) return true;
8716
8717    return S.SourceMgr.isBeforeInTranslationUnit(LLoc, RLoc);
8718  }
8719};
8720
8721/// CompleteNonViableCandidate - Normally, overload resolution only
8722/// computes up to the first. Produces the FixIt set if possible.
8723void CompleteNonViableCandidate(Sema &S, OverloadCandidate *Cand,
8724                                llvm::ArrayRef<Expr *> Args) {
8725  assert(!Cand->Viable);
8726
8727  // Don't do anything on failures other than bad conversion.
8728  if (Cand->FailureKind != ovl_fail_bad_conversion) return;
8729
8730  // We only want the FixIts if all the arguments can be corrected.
8731  bool Unfixable = false;
8732  // Use a implicit copy initialization to check conversion fixes.
8733  Cand->Fix.setConversionChecker(TryCopyInitialization);
8734
8735  // Skip forward to the first bad conversion.
8736  unsigned ConvIdx = (Cand->IgnoreObjectArgument ? 1 : 0);
8737  unsigned ConvCount = Cand->NumConversions;
8738  while (true) {
8739    assert(ConvIdx != ConvCount && "no bad conversion in candidate");
8740    ConvIdx++;
8741    if (Cand->Conversions[ConvIdx - 1].isBad()) {
8742      Unfixable = !Cand->TryToFixBadConversion(ConvIdx - 1, S);
8743      break;
8744    }
8745  }
8746
8747  if (ConvIdx == ConvCount)
8748    return;
8749
8750  assert(!Cand->Conversions[ConvIdx].isInitialized() &&
8751         "remaining conversion is initialized?");
8752
8753  // FIXME: this should probably be preserved from the overload
8754  // operation somehow.
8755  bool SuppressUserConversions = false;
8756
8757  const FunctionProtoType* Proto;
8758  unsigned ArgIdx = ConvIdx;
8759
8760  if (Cand->IsSurrogate) {
8761    QualType ConvType
8762      = Cand->Surrogate->getConversionType().getNonReferenceType();
8763    if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
8764      ConvType = ConvPtrType->getPointeeType();
8765    Proto = ConvType->getAs<FunctionProtoType>();
8766    ArgIdx--;
8767  } else if (Cand->Function) {
8768    Proto = Cand->Function->getType()->getAs<FunctionProtoType>();
8769    if (isa<CXXMethodDecl>(Cand->Function) &&
8770        !isa<CXXConstructorDecl>(Cand->Function))
8771      ArgIdx--;
8772  } else {
8773    // Builtin binary operator with a bad first conversion.
8774    assert(ConvCount <= 3);
8775    for (; ConvIdx != ConvCount; ++ConvIdx)
8776      Cand->Conversions[ConvIdx]
8777        = TryCopyInitialization(S, Args[ConvIdx],
8778                                Cand->BuiltinTypes.ParamTypes[ConvIdx],
8779                                SuppressUserConversions,
8780                                /*InOverloadResolution*/ true,
8781                                /*AllowObjCWritebackConversion=*/
8782                                  S.getLangOpts().ObjCAutoRefCount);
8783    return;
8784  }
8785
8786  // Fill in the rest of the conversions.
8787  unsigned NumArgsInProto = Proto->getNumArgs();
8788  for (; ConvIdx != ConvCount; ++ConvIdx, ++ArgIdx) {
8789    if (ArgIdx < NumArgsInProto) {
8790      Cand->Conversions[ConvIdx]
8791        = TryCopyInitialization(S, Args[ArgIdx], Proto->getArgType(ArgIdx),
8792                                SuppressUserConversions,
8793                                /*InOverloadResolution=*/true,
8794                                /*AllowObjCWritebackConversion=*/
8795                                  S.getLangOpts().ObjCAutoRefCount);
8796      // Store the FixIt in the candidate if it exists.
8797      if (!Unfixable && Cand->Conversions[ConvIdx].isBad())
8798        Unfixable = !Cand->TryToFixBadConversion(ConvIdx, S);
8799    }
8800    else
8801      Cand->Conversions[ConvIdx].setEllipsis();
8802  }
8803}
8804
8805} // end anonymous namespace
8806
8807/// PrintOverloadCandidates - When overload resolution fails, prints
8808/// diagnostic messages containing the candidates in the candidate
8809/// set.
8810void OverloadCandidateSet::NoteCandidates(Sema &S,
8811                                          OverloadCandidateDisplayKind OCD,
8812                                          llvm::ArrayRef<Expr *> Args,
8813                                          StringRef Opc,
8814                                          SourceLocation OpLoc) {
8815  // Sort the candidates by viability and position.  Sorting directly would
8816  // be prohibitive, so we make a set of pointers and sort those.
8817  SmallVector<OverloadCandidate*, 32> Cands;
8818  if (OCD == OCD_AllCandidates) Cands.reserve(size());
8819  for (iterator Cand = begin(), LastCand = end(); Cand != LastCand; ++Cand) {
8820    if (Cand->Viable)
8821      Cands.push_back(Cand);
8822    else if (OCD == OCD_AllCandidates) {
8823      CompleteNonViableCandidate(S, Cand, Args);
8824      if (Cand->Function || Cand->IsSurrogate)
8825        Cands.push_back(Cand);
8826      // Otherwise, this a non-viable builtin candidate.  We do not, in general,
8827      // want to list every possible builtin candidate.
8828    }
8829  }
8830
8831  std::sort(Cands.begin(), Cands.end(),
8832            CompareOverloadCandidatesForDisplay(S));
8833
8834  bool ReportedAmbiguousConversions = false;
8835
8836  SmallVectorImpl<OverloadCandidate*>::iterator I, E;
8837  const DiagnosticsEngine::OverloadsShown ShowOverloads =
8838      S.Diags.getShowOverloads();
8839  unsigned CandsShown = 0;
8840  for (I = Cands.begin(), E = Cands.end(); I != E; ++I) {
8841    OverloadCandidate *Cand = *I;
8842
8843    // Set an arbitrary limit on the number of candidate functions we'll spam
8844    // the user with.  FIXME: This limit should depend on details of the
8845    // candidate list.
8846    if (CandsShown >= 4 && ShowOverloads == DiagnosticsEngine::Ovl_Best) {
8847      break;
8848    }
8849    ++CandsShown;
8850
8851    if (Cand->Function)
8852      NoteFunctionCandidate(S, Cand, Args.size());
8853    else if (Cand->IsSurrogate)
8854      NoteSurrogateCandidate(S, Cand);
8855    else {
8856      assert(Cand->Viable &&
8857             "Non-viable built-in candidates are not added to Cands.");
8858      // Generally we only see ambiguities including viable builtin
8859      // operators if overload resolution got screwed up by an
8860      // ambiguous user-defined conversion.
8861      //
8862      // FIXME: It's quite possible for different conversions to see
8863      // different ambiguities, though.
8864      if (!ReportedAmbiguousConversions) {
8865        NoteAmbiguousUserConversions(S, OpLoc, Cand);
8866        ReportedAmbiguousConversions = true;
8867      }
8868
8869      // If this is a viable builtin, print it.
8870      NoteBuiltinOperatorCandidate(S, Opc, OpLoc, Cand);
8871    }
8872  }
8873
8874  if (I != E)
8875    S.Diag(OpLoc, diag::note_ovl_too_many_candidates) << int(E - I);
8876}
8877
8878// [PossiblyAFunctionType]  -->   [Return]
8879// NonFunctionType --> NonFunctionType
8880// R (A) --> R(A)
8881// R (*)(A) --> R (A)
8882// R (&)(A) --> R (A)
8883// R (S::*)(A) --> R (A)
8884QualType Sema::ExtractUnqualifiedFunctionType(QualType PossiblyAFunctionType) {
8885  QualType Ret = PossiblyAFunctionType;
8886  if (const PointerType *ToTypePtr =
8887    PossiblyAFunctionType->getAs<PointerType>())
8888    Ret = ToTypePtr->getPointeeType();
8889  else if (const ReferenceType *ToTypeRef =
8890    PossiblyAFunctionType->getAs<ReferenceType>())
8891    Ret = ToTypeRef->getPointeeType();
8892  else if (const MemberPointerType *MemTypePtr =
8893    PossiblyAFunctionType->getAs<MemberPointerType>())
8894    Ret = MemTypePtr->getPointeeType();
8895  Ret =
8896    Context.getCanonicalType(Ret).getUnqualifiedType();
8897  return Ret;
8898}
8899
8900// A helper class to help with address of function resolution
8901// - allows us to avoid passing around all those ugly parameters
8902class AddressOfFunctionResolver
8903{
8904  Sema& S;
8905  Expr* SourceExpr;
8906  const QualType& TargetType;
8907  QualType TargetFunctionType; // Extracted function type from target type
8908
8909  bool Complain;
8910  //DeclAccessPair& ResultFunctionAccessPair;
8911  ASTContext& Context;
8912
8913  bool TargetTypeIsNonStaticMemberFunction;
8914  bool FoundNonTemplateFunction;
8915
8916  OverloadExpr::FindResult OvlExprInfo;
8917  OverloadExpr *OvlExpr;
8918  TemplateArgumentListInfo OvlExplicitTemplateArgs;
8919  SmallVector<std::pair<DeclAccessPair, FunctionDecl*>, 4> Matches;
8920
8921public:
8922  AddressOfFunctionResolver(Sema &S, Expr* SourceExpr,
8923                            const QualType& TargetType, bool Complain)
8924    : S(S), SourceExpr(SourceExpr), TargetType(TargetType),
8925      Complain(Complain), Context(S.getASTContext()),
8926      TargetTypeIsNonStaticMemberFunction(
8927                                    !!TargetType->getAs<MemberPointerType>()),
8928      FoundNonTemplateFunction(false),
8929      OvlExprInfo(OverloadExpr::find(SourceExpr)),
8930      OvlExpr(OvlExprInfo.Expression)
8931  {
8932    ExtractUnqualifiedFunctionTypeFromTargetType();
8933
8934    if (!TargetFunctionType->isFunctionType()) {
8935      if (OvlExpr->hasExplicitTemplateArgs()) {
8936        DeclAccessPair dap;
8937        if (FunctionDecl* Fn = S.ResolveSingleFunctionTemplateSpecialization(
8938                                            OvlExpr, false, &dap) ) {
8939
8940          if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
8941            if (!Method->isStatic()) {
8942              // If the target type is a non-function type and the function
8943              // found is a non-static member function, pretend as if that was
8944              // the target, it's the only possible type to end up with.
8945              TargetTypeIsNonStaticMemberFunction = true;
8946
8947              // And skip adding the function if its not in the proper form.
8948              // We'll diagnose this due to an empty set of functions.
8949              if (!OvlExprInfo.HasFormOfMemberPointer)
8950                return;
8951            }
8952          }
8953
8954          Matches.push_back(std::make_pair(dap,Fn));
8955        }
8956      }
8957      return;
8958    }
8959
8960    if (OvlExpr->hasExplicitTemplateArgs())
8961      OvlExpr->getExplicitTemplateArgs().copyInto(OvlExplicitTemplateArgs);
8962
8963    if (FindAllFunctionsThatMatchTargetTypeExactly()) {
8964      // C++ [over.over]p4:
8965      //   If more than one function is selected, [...]
8966      if (Matches.size() > 1) {
8967        if (FoundNonTemplateFunction)
8968          EliminateAllTemplateMatches();
8969        else
8970          EliminateAllExceptMostSpecializedTemplate();
8971      }
8972    }
8973  }
8974
8975private:
8976  bool isTargetTypeAFunction() const {
8977    return TargetFunctionType->isFunctionType();
8978  }
8979
8980  // [ToType]     [Return]
8981
8982  // R (*)(A) --> R (A), IsNonStaticMemberFunction = false
8983  // R (&)(A) --> R (A), IsNonStaticMemberFunction = false
8984  // R (S::*)(A) --> R (A), IsNonStaticMemberFunction = true
8985  void inline ExtractUnqualifiedFunctionTypeFromTargetType() {
8986    TargetFunctionType = S.ExtractUnqualifiedFunctionType(TargetType);
8987  }
8988
8989  // return true if any matching specializations were found
8990  bool AddMatchingTemplateFunction(FunctionTemplateDecl* FunctionTemplate,
8991                                   const DeclAccessPair& CurAccessFunPair) {
8992    if (CXXMethodDecl *Method
8993              = dyn_cast<CXXMethodDecl>(FunctionTemplate->getTemplatedDecl())) {
8994      // Skip non-static function templates when converting to pointer, and
8995      // static when converting to member pointer.
8996      if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction)
8997        return false;
8998    }
8999    else if (TargetTypeIsNonStaticMemberFunction)
9000      return false;
9001
9002    // C++ [over.over]p2:
9003    //   If the name is a function template, template argument deduction is
9004    //   done (14.8.2.2), and if the argument deduction succeeds, the
9005    //   resulting template argument list is used to generate a single
9006    //   function template specialization, which is added to the set of
9007    //   overloaded functions considered.
9008    FunctionDecl *Specialization = 0;
9009    TemplateDeductionInfo Info(OvlExpr->getNameLoc());
9010    if (Sema::TemplateDeductionResult Result
9011          = S.DeduceTemplateArguments(FunctionTemplate,
9012                                      &OvlExplicitTemplateArgs,
9013                                      TargetFunctionType, Specialization,
9014                                      Info)) {
9015      // FIXME: make a note of the failed deduction for diagnostics.
9016      (void)Result;
9017      return false;
9018    }
9019
9020    // Template argument deduction ensures that we have an exact match.
9021    // This function template specicalization works.
9022    Specialization = cast<FunctionDecl>(Specialization->getCanonicalDecl());
9023    assert(TargetFunctionType
9024                      == Context.getCanonicalType(Specialization->getType()));
9025    Matches.push_back(std::make_pair(CurAccessFunPair, Specialization));
9026    return true;
9027  }
9028
9029  bool AddMatchingNonTemplateFunction(NamedDecl* Fn,
9030                                      const DeclAccessPair& CurAccessFunPair) {
9031    if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
9032      // Skip non-static functions when converting to pointer, and static
9033      // when converting to member pointer.
9034      if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction)
9035        return false;
9036    }
9037    else if (TargetTypeIsNonStaticMemberFunction)
9038      return false;
9039
9040    if (FunctionDecl *FunDecl = dyn_cast<FunctionDecl>(Fn)) {
9041      if (S.getLangOpts().CUDA)
9042        if (FunctionDecl *Caller = dyn_cast<FunctionDecl>(S.CurContext))
9043          if (S.CheckCUDATarget(Caller, FunDecl))
9044            return false;
9045
9046      QualType ResultTy;
9047      if (Context.hasSameUnqualifiedType(TargetFunctionType,
9048                                         FunDecl->getType()) ||
9049          S.IsNoReturnConversion(FunDecl->getType(), TargetFunctionType,
9050                                 ResultTy)) {
9051        Matches.push_back(std::make_pair(CurAccessFunPair,
9052          cast<FunctionDecl>(FunDecl->getCanonicalDecl())));
9053        FoundNonTemplateFunction = true;
9054        return true;
9055      }
9056    }
9057
9058    return false;
9059  }
9060
9061  bool FindAllFunctionsThatMatchTargetTypeExactly() {
9062    bool Ret = false;
9063
9064    // If the overload expression doesn't have the form of a pointer to
9065    // member, don't try to convert it to a pointer-to-member type.
9066    if (IsInvalidFormOfPointerToMemberFunction())
9067      return false;
9068
9069    for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
9070                               E = OvlExpr->decls_end();
9071         I != E; ++I) {
9072      // Look through any using declarations to find the underlying function.
9073      NamedDecl *Fn = (*I)->getUnderlyingDecl();
9074
9075      // C++ [over.over]p3:
9076      //   Non-member functions and static member functions match
9077      //   targets of type "pointer-to-function" or "reference-to-function."
9078      //   Nonstatic member functions match targets of
9079      //   type "pointer-to-member-function."
9080      // Note that according to DR 247, the containing class does not matter.
9081      if (FunctionTemplateDecl *FunctionTemplate
9082                                        = dyn_cast<FunctionTemplateDecl>(Fn)) {
9083        if (AddMatchingTemplateFunction(FunctionTemplate, I.getPair()))
9084          Ret = true;
9085      }
9086      // If we have explicit template arguments supplied, skip non-templates.
9087      else if (!OvlExpr->hasExplicitTemplateArgs() &&
9088               AddMatchingNonTemplateFunction(Fn, I.getPair()))
9089        Ret = true;
9090    }
9091    assert(Ret || Matches.empty());
9092    return Ret;
9093  }
9094
9095  void EliminateAllExceptMostSpecializedTemplate() {
9096    //   [...] and any given function template specialization F1 is
9097    //   eliminated if the set contains a second function template
9098    //   specialization whose function template is more specialized
9099    //   than the function template of F1 according to the partial
9100    //   ordering rules of 14.5.5.2.
9101
9102    // The algorithm specified above is quadratic. We instead use a
9103    // two-pass algorithm (similar to the one used to identify the
9104    // best viable function in an overload set) that identifies the
9105    // best function template (if it exists).
9106
9107    UnresolvedSet<4> MatchesCopy; // TODO: avoid!
9108    for (unsigned I = 0, E = Matches.size(); I != E; ++I)
9109      MatchesCopy.addDecl(Matches[I].second, Matches[I].first.getAccess());
9110
9111    UnresolvedSetIterator Result =
9112      S.getMostSpecialized(MatchesCopy.begin(), MatchesCopy.end(),
9113                           TPOC_Other, 0, SourceExpr->getLocStart(),
9114                           S.PDiag(),
9115                           S.PDiag(diag::err_addr_ovl_ambiguous)
9116                             << Matches[0].second->getDeclName(),
9117                           S.PDiag(diag::note_ovl_candidate)
9118                             << (unsigned) oc_function_template,
9119                           Complain, TargetFunctionType);
9120
9121    if (Result != MatchesCopy.end()) {
9122      // Make it the first and only element
9123      Matches[0].first = Matches[Result - MatchesCopy.begin()].first;
9124      Matches[0].second = cast<FunctionDecl>(*Result);
9125      Matches.resize(1);
9126    }
9127  }
9128
9129  void EliminateAllTemplateMatches() {
9130    //   [...] any function template specializations in the set are
9131    //   eliminated if the set also contains a non-template function, [...]
9132    for (unsigned I = 0, N = Matches.size(); I != N; ) {
9133      if (Matches[I].second->getPrimaryTemplate() == 0)
9134        ++I;
9135      else {
9136        Matches[I] = Matches[--N];
9137        Matches.set_size(N);
9138      }
9139    }
9140  }
9141
9142public:
9143  void ComplainNoMatchesFound() const {
9144    assert(Matches.empty());
9145    S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_no_viable)
9146        << OvlExpr->getName() << TargetFunctionType
9147        << OvlExpr->getSourceRange();
9148    S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType);
9149  }
9150
9151  bool IsInvalidFormOfPointerToMemberFunction() const {
9152    return TargetTypeIsNonStaticMemberFunction &&
9153      !OvlExprInfo.HasFormOfMemberPointer;
9154  }
9155
9156  void ComplainIsInvalidFormOfPointerToMemberFunction() const {
9157      // TODO: Should we condition this on whether any functions might
9158      // have matched, or is it more appropriate to do that in callers?
9159      // TODO: a fixit wouldn't hurt.
9160      S.Diag(OvlExpr->getNameLoc(), diag::err_addr_ovl_no_qualifier)
9161        << TargetType << OvlExpr->getSourceRange();
9162  }
9163
9164  void ComplainOfInvalidConversion() const {
9165    S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_not_func_ptrref)
9166      << OvlExpr->getName() << TargetType;
9167  }
9168
9169  void ComplainMultipleMatchesFound() const {
9170    assert(Matches.size() > 1);
9171    S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_ambiguous)
9172      << OvlExpr->getName()
9173      << OvlExpr->getSourceRange();
9174    S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType);
9175  }
9176
9177  bool hadMultipleCandidates() const { return (OvlExpr->getNumDecls() > 1); }
9178
9179  int getNumMatches() const { return Matches.size(); }
9180
9181  FunctionDecl* getMatchingFunctionDecl() const {
9182    if (Matches.size() != 1) return 0;
9183    return Matches[0].second;
9184  }
9185
9186  const DeclAccessPair* getMatchingFunctionAccessPair() const {
9187    if (Matches.size() != 1) return 0;
9188    return &Matches[0].first;
9189  }
9190};
9191
9192/// ResolveAddressOfOverloadedFunction - Try to resolve the address of
9193/// an overloaded function (C++ [over.over]), where @p From is an
9194/// expression with overloaded function type and @p ToType is the type
9195/// we're trying to resolve to. For example:
9196///
9197/// @code
9198/// int f(double);
9199/// int f(int);
9200///
9201/// int (*pfd)(double) = f; // selects f(double)
9202/// @endcode
9203///
9204/// This routine returns the resulting FunctionDecl if it could be
9205/// resolved, and NULL otherwise. When @p Complain is true, this
9206/// routine will emit diagnostics if there is an error.
9207FunctionDecl *
9208Sema::ResolveAddressOfOverloadedFunction(Expr *AddressOfExpr,
9209                                         QualType TargetType,
9210                                         bool Complain,
9211                                         DeclAccessPair &FoundResult,
9212                                         bool *pHadMultipleCandidates) {
9213  assert(AddressOfExpr->getType() == Context.OverloadTy);
9214
9215  AddressOfFunctionResolver Resolver(*this, AddressOfExpr, TargetType,
9216                                     Complain);
9217  int NumMatches = Resolver.getNumMatches();
9218  FunctionDecl* Fn = 0;
9219  if (NumMatches == 0 && Complain) {
9220    if (Resolver.IsInvalidFormOfPointerToMemberFunction())
9221      Resolver.ComplainIsInvalidFormOfPointerToMemberFunction();
9222    else
9223      Resolver.ComplainNoMatchesFound();
9224  }
9225  else if (NumMatches > 1 && Complain)
9226    Resolver.ComplainMultipleMatchesFound();
9227  else if (NumMatches == 1) {
9228    Fn = Resolver.getMatchingFunctionDecl();
9229    assert(Fn);
9230    FoundResult = *Resolver.getMatchingFunctionAccessPair();
9231    MarkFunctionReferenced(AddressOfExpr->getLocStart(), Fn);
9232    if (Complain)
9233      CheckAddressOfMemberAccess(AddressOfExpr, FoundResult);
9234  }
9235
9236  if (pHadMultipleCandidates)
9237    *pHadMultipleCandidates = Resolver.hadMultipleCandidates();
9238  return Fn;
9239}
9240
9241/// \brief Given an expression that refers to an overloaded function, try to
9242/// resolve that overloaded function expression down to a single function.
9243///
9244/// This routine can only resolve template-ids that refer to a single function
9245/// template, where that template-id refers to a single template whose template
9246/// arguments are either provided by the template-id or have defaults,
9247/// as described in C++0x [temp.arg.explicit]p3.
9248FunctionDecl *
9249Sema::ResolveSingleFunctionTemplateSpecialization(OverloadExpr *ovl,
9250                                                  bool Complain,
9251                                                  DeclAccessPair *FoundResult) {
9252  // C++ [over.over]p1:
9253  //   [...] [Note: any redundant set of parentheses surrounding the
9254  //   overloaded function name is ignored (5.1). ]
9255  // C++ [over.over]p1:
9256  //   [...] The overloaded function name can be preceded by the &
9257  //   operator.
9258
9259  // If we didn't actually find any template-ids, we're done.
9260  if (!ovl->hasExplicitTemplateArgs())
9261    return 0;
9262
9263  TemplateArgumentListInfo ExplicitTemplateArgs;
9264  ovl->getExplicitTemplateArgs().copyInto(ExplicitTemplateArgs);
9265
9266  // Look through all of the overloaded functions, searching for one
9267  // whose type matches exactly.
9268  FunctionDecl *Matched = 0;
9269  for (UnresolvedSetIterator I = ovl->decls_begin(),
9270         E = ovl->decls_end(); I != E; ++I) {
9271    // C++0x [temp.arg.explicit]p3:
9272    //   [...] In contexts where deduction is done and fails, or in contexts
9273    //   where deduction is not done, if a template argument list is
9274    //   specified and it, along with any default template arguments,
9275    //   identifies a single function template specialization, then the
9276    //   template-id is an lvalue for the function template specialization.
9277    FunctionTemplateDecl *FunctionTemplate
9278      = cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl());
9279
9280    // C++ [over.over]p2:
9281    //   If the name is a function template, template argument deduction is
9282    //   done (14.8.2.2), and if the argument deduction succeeds, the
9283    //   resulting template argument list is used to generate a single
9284    //   function template specialization, which is added to the set of
9285    //   overloaded functions considered.
9286    FunctionDecl *Specialization = 0;
9287    TemplateDeductionInfo Info(ovl->getNameLoc());
9288    if (TemplateDeductionResult Result
9289          = DeduceTemplateArguments(FunctionTemplate, &ExplicitTemplateArgs,
9290                                    Specialization, Info)) {
9291      // FIXME: make a note of the failed deduction for diagnostics.
9292      (void)Result;
9293      continue;
9294    }
9295
9296    assert(Specialization && "no specialization and no error?");
9297
9298    // Multiple matches; we can't resolve to a single declaration.
9299    if (Matched) {
9300      if (Complain) {
9301        Diag(ovl->getExprLoc(), diag::err_addr_ovl_ambiguous)
9302          << ovl->getName();
9303        NoteAllOverloadCandidates(ovl);
9304      }
9305      return 0;
9306    }
9307
9308    Matched = Specialization;
9309    if (FoundResult) *FoundResult = I.getPair();
9310  }
9311
9312  return Matched;
9313}
9314
9315
9316
9317
9318// Resolve and fix an overloaded expression that can be resolved
9319// because it identifies a single function template specialization.
9320//
9321// Last three arguments should only be supplied if Complain = true
9322//
9323// Return true if it was logically possible to so resolve the
9324// expression, regardless of whether or not it succeeded.  Always
9325// returns true if 'complain' is set.
9326bool Sema::ResolveAndFixSingleFunctionTemplateSpecialization(
9327                      ExprResult &SrcExpr, bool doFunctionPointerConverion,
9328                   bool complain, const SourceRange& OpRangeForComplaining,
9329                                           QualType DestTypeForComplaining,
9330                                            unsigned DiagIDForComplaining) {
9331  assert(SrcExpr.get()->getType() == Context.OverloadTy);
9332
9333  OverloadExpr::FindResult ovl = OverloadExpr::find(SrcExpr.get());
9334
9335  DeclAccessPair found;
9336  ExprResult SingleFunctionExpression;
9337  if (FunctionDecl *fn = ResolveSingleFunctionTemplateSpecialization(
9338                           ovl.Expression, /*complain*/ false, &found)) {
9339    if (DiagnoseUseOfDecl(fn, SrcExpr.get()->getLocStart())) {
9340      SrcExpr = ExprError();
9341      return true;
9342    }
9343
9344    // It is only correct to resolve to an instance method if we're
9345    // resolving a form that's permitted to be a pointer to member.
9346    // Otherwise we'll end up making a bound member expression, which
9347    // is illegal in all the contexts we resolve like this.
9348    if (!ovl.HasFormOfMemberPointer &&
9349        isa<CXXMethodDecl>(fn) &&
9350        cast<CXXMethodDecl>(fn)->isInstance()) {
9351      if (!complain) return false;
9352
9353      Diag(ovl.Expression->getExprLoc(),
9354           diag::err_bound_member_function)
9355        << 0 << ovl.Expression->getSourceRange();
9356
9357      // TODO: I believe we only end up here if there's a mix of
9358      // static and non-static candidates (otherwise the expression
9359      // would have 'bound member' type, not 'overload' type).
9360      // Ideally we would note which candidate was chosen and why
9361      // the static candidates were rejected.
9362      SrcExpr = ExprError();
9363      return true;
9364    }
9365
9366    // Fix the expression to refer to 'fn'.
9367    SingleFunctionExpression =
9368      Owned(FixOverloadedFunctionReference(SrcExpr.take(), found, fn));
9369
9370    // If desired, do function-to-pointer decay.
9371    if (doFunctionPointerConverion) {
9372      SingleFunctionExpression =
9373        DefaultFunctionArrayLvalueConversion(SingleFunctionExpression.take());
9374      if (SingleFunctionExpression.isInvalid()) {
9375        SrcExpr = ExprError();
9376        return true;
9377      }
9378    }
9379  }
9380
9381  if (!SingleFunctionExpression.isUsable()) {
9382    if (complain) {
9383      Diag(OpRangeForComplaining.getBegin(), DiagIDForComplaining)
9384        << ovl.Expression->getName()
9385        << DestTypeForComplaining
9386        << OpRangeForComplaining
9387        << ovl.Expression->getQualifierLoc().getSourceRange();
9388      NoteAllOverloadCandidates(SrcExpr.get());
9389
9390      SrcExpr = ExprError();
9391      return true;
9392    }
9393
9394    return false;
9395  }
9396
9397  SrcExpr = SingleFunctionExpression;
9398  return true;
9399}
9400
9401/// \brief Add a single candidate to the overload set.
9402static void AddOverloadedCallCandidate(Sema &S,
9403                                       DeclAccessPair FoundDecl,
9404                                 TemplateArgumentListInfo *ExplicitTemplateArgs,
9405                                       llvm::ArrayRef<Expr *> Args,
9406                                       OverloadCandidateSet &CandidateSet,
9407                                       bool PartialOverloading,
9408                                       bool KnownValid) {
9409  NamedDecl *Callee = FoundDecl.getDecl();
9410  if (isa<UsingShadowDecl>(Callee))
9411    Callee = cast<UsingShadowDecl>(Callee)->getTargetDecl();
9412
9413  if (FunctionDecl *Func = dyn_cast<FunctionDecl>(Callee)) {
9414    if (ExplicitTemplateArgs) {
9415      assert(!KnownValid && "Explicit template arguments?");
9416      return;
9417    }
9418    S.AddOverloadCandidate(Func, FoundDecl, Args, CandidateSet, false,
9419                           PartialOverloading);
9420    return;
9421  }
9422
9423  if (FunctionTemplateDecl *FuncTemplate
9424      = dyn_cast<FunctionTemplateDecl>(Callee)) {
9425    S.AddTemplateOverloadCandidate(FuncTemplate, FoundDecl,
9426                                   ExplicitTemplateArgs, Args, CandidateSet);
9427    return;
9428  }
9429
9430  assert(!KnownValid && "unhandled case in overloaded call candidate");
9431}
9432
9433/// \brief Add the overload candidates named by callee and/or found by argument
9434/// dependent lookup to the given overload set.
9435void Sema::AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE,
9436                                       llvm::ArrayRef<Expr *> Args,
9437                                       OverloadCandidateSet &CandidateSet,
9438                                       bool PartialOverloading) {
9439
9440#ifndef NDEBUG
9441  // Verify that ArgumentDependentLookup is consistent with the rules
9442  // in C++0x [basic.lookup.argdep]p3:
9443  //
9444  //   Let X be the lookup set produced by unqualified lookup (3.4.1)
9445  //   and let Y be the lookup set produced by argument dependent
9446  //   lookup (defined as follows). If X contains
9447  //
9448  //     -- a declaration of a class member, or
9449  //
9450  //     -- a block-scope function declaration that is not a
9451  //        using-declaration, or
9452  //
9453  //     -- a declaration that is neither a function or a function
9454  //        template
9455  //
9456  //   then Y is empty.
9457
9458  if (ULE->requiresADL()) {
9459    for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
9460           E = ULE->decls_end(); I != E; ++I) {
9461      assert(!(*I)->getDeclContext()->isRecord());
9462      assert(isa<UsingShadowDecl>(*I) ||
9463             !(*I)->getDeclContext()->isFunctionOrMethod());
9464      assert((*I)->getUnderlyingDecl()->isFunctionOrFunctionTemplate());
9465    }
9466  }
9467#endif
9468
9469  // It would be nice to avoid this copy.
9470  TemplateArgumentListInfo TABuffer;
9471  TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
9472  if (ULE->hasExplicitTemplateArgs()) {
9473    ULE->copyTemplateArgumentsInto(TABuffer);
9474    ExplicitTemplateArgs = &TABuffer;
9475  }
9476
9477  for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
9478         E = ULE->decls_end(); I != E; ++I)
9479    AddOverloadedCallCandidate(*this, I.getPair(), ExplicitTemplateArgs, Args,
9480                               CandidateSet, PartialOverloading,
9481                               /*KnownValid*/ true);
9482
9483  if (ULE->requiresADL())
9484    AddArgumentDependentLookupCandidates(ULE->getName(), /*Operator*/ false,
9485                                         ULE->getExprLoc(),
9486                                         Args, ExplicitTemplateArgs,
9487                                         CandidateSet, PartialOverloading,
9488                                         ULE->isStdAssociatedNamespace());
9489}
9490
9491/// Attempt to recover from an ill-formed use of a non-dependent name in a
9492/// template, where the non-dependent name was declared after the template
9493/// was defined. This is common in code written for a compilers which do not
9494/// correctly implement two-stage name lookup.
9495///
9496/// Returns true if a viable candidate was found and a diagnostic was issued.
9497static bool
9498DiagnoseTwoPhaseLookup(Sema &SemaRef, SourceLocation FnLoc,
9499                       const CXXScopeSpec &SS, LookupResult &R,
9500                       TemplateArgumentListInfo *ExplicitTemplateArgs,
9501                       llvm::ArrayRef<Expr *> Args) {
9502  if (SemaRef.ActiveTemplateInstantiations.empty() || !SS.isEmpty())
9503    return false;
9504
9505  for (DeclContext *DC = SemaRef.CurContext; DC; DC = DC->getParent()) {
9506    if (DC->isTransparentContext())
9507      continue;
9508
9509    SemaRef.LookupQualifiedName(R, DC);
9510
9511    if (!R.empty()) {
9512      R.suppressDiagnostics();
9513
9514      if (isa<CXXRecordDecl>(DC)) {
9515        // Don't diagnose names we find in classes; we get much better
9516        // diagnostics for these from DiagnoseEmptyLookup.
9517        R.clear();
9518        return false;
9519      }
9520
9521      OverloadCandidateSet Candidates(FnLoc);
9522      for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)
9523        AddOverloadedCallCandidate(SemaRef, I.getPair(),
9524                                   ExplicitTemplateArgs, Args,
9525                                   Candidates, false, /*KnownValid*/ false);
9526
9527      OverloadCandidateSet::iterator Best;
9528      if (Candidates.BestViableFunction(SemaRef, FnLoc, Best) != OR_Success) {
9529        // No viable functions. Don't bother the user with notes for functions
9530        // which don't work and shouldn't be found anyway.
9531        R.clear();
9532        return false;
9533      }
9534
9535      // Find the namespaces where ADL would have looked, and suggest
9536      // declaring the function there instead.
9537      Sema::AssociatedNamespaceSet AssociatedNamespaces;
9538      Sema::AssociatedClassSet AssociatedClasses;
9539      SemaRef.FindAssociatedClassesAndNamespaces(FnLoc, Args,
9540                                                 AssociatedNamespaces,
9541                                                 AssociatedClasses);
9542      // Never suggest declaring a function within namespace 'std'.
9543      Sema::AssociatedNamespaceSet SuggestedNamespaces;
9544      if (DeclContext *Std = SemaRef.getStdNamespace()) {
9545        for (Sema::AssociatedNamespaceSet::iterator
9546               it = AssociatedNamespaces.begin(),
9547               end = AssociatedNamespaces.end(); it != end; ++it) {
9548          if (!Std->Encloses(*it))
9549            SuggestedNamespaces.insert(*it);
9550        }
9551      } else {
9552        // Lacking the 'std::' namespace, use all of the associated namespaces.
9553        SuggestedNamespaces = AssociatedNamespaces;
9554      }
9555
9556      SemaRef.Diag(R.getNameLoc(), diag::err_not_found_by_two_phase_lookup)
9557        << R.getLookupName();
9558      if (SuggestedNamespaces.empty()) {
9559        SemaRef.Diag(Best->Function->getLocation(),
9560                     diag::note_not_found_by_two_phase_lookup)
9561          << R.getLookupName() << 0;
9562      } else if (SuggestedNamespaces.size() == 1) {
9563        SemaRef.Diag(Best->Function->getLocation(),
9564                     diag::note_not_found_by_two_phase_lookup)
9565          << R.getLookupName() << 1 << *SuggestedNamespaces.begin();
9566      } else {
9567        // FIXME: It would be useful to list the associated namespaces here,
9568        // but the diagnostics infrastructure doesn't provide a way to produce
9569        // a localized representation of a list of items.
9570        SemaRef.Diag(Best->Function->getLocation(),
9571                     diag::note_not_found_by_two_phase_lookup)
9572          << R.getLookupName() << 2;
9573      }
9574
9575      // Try to recover by calling this function.
9576      return true;
9577    }
9578
9579    R.clear();
9580  }
9581
9582  return false;
9583}
9584
9585/// Attempt to recover from ill-formed use of a non-dependent operator in a
9586/// template, where the non-dependent operator was declared after the template
9587/// was defined.
9588///
9589/// Returns true if a viable candidate was found and a diagnostic was issued.
9590static bool
9591DiagnoseTwoPhaseOperatorLookup(Sema &SemaRef, OverloadedOperatorKind Op,
9592                               SourceLocation OpLoc,
9593                               llvm::ArrayRef<Expr *> Args) {
9594  DeclarationName OpName =
9595    SemaRef.Context.DeclarationNames.getCXXOperatorName(Op);
9596  LookupResult R(SemaRef, OpName, OpLoc, Sema::LookupOperatorName);
9597  return DiagnoseTwoPhaseLookup(SemaRef, OpLoc, CXXScopeSpec(), R,
9598                                /*ExplicitTemplateArgs=*/0, Args);
9599}
9600
9601namespace {
9602// Callback to limit the allowed keywords and to only accept typo corrections
9603// that are keywords or whose decls refer to functions (or template functions)
9604// that accept the given number of arguments.
9605class RecoveryCallCCC : public CorrectionCandidateCallback {
9606 public:
9607  RecoveryCallCCC(Sema &SemaRef, unsigned NumArgs, bool HasExplicitTemplateArgs)
9608      : NumArgs(NumArgs), HasExplicitTemplateArgs(HasExplicitTemplateArgs) {
9609    WantTypeSpecifiers = SemaRef.getLangOpts().CPlusPlus;
9610    WantRemainingKeywords = false;
9611  }
9612
9613  virtual bool ValidateCandidate(const TypoCorrection &candidate) {
9614    if (!candidate.getCorrectionDecl())
9615      return candidate.isKeyword();
9616
9617    for (TypoCorrection::const_decl_iterator DI = candidate.begin(),
9618           DIEnd = candidate.end(); DI != DIEnd; ++DI) {
9619      FunctionDecl *FD = 0;
9620      NamedDecl *ND = (*DI)->getUnderlyingDecl();
9621      if (FunctionTemplateDecl *FTD = dyn_cast<FunctionTemplateDecl>(ND))
9622        FD = FTD->getTemplatedDecl();
9623      if (!HasExplicitTemplateArgs && !FD) {
9624        if (!(FD = dyn_cast<FunctionDecl>(ND)) && isa<ValueDecl>(ND)) {
9625          // If the Decl is neither a function nor a template function,
9626          // determine if it is a pointer or reference to a function. If so,
9627          // check against the number of arguments expected for the pointee.
9628          QualType ValType = cast<ValueDecl>(ND)->getType();
9629          if (ValType->isAnyPointerType() || ValType->isReferenceType())
9630            ValType = ValType->getPointeeType();
9631          if (const FunctionProtoType *FPT = ValType->getAs<FunctionProtoType>())
9632            if (FPT->getNumArgs() == NumArgs)
9633              return true;
9634        }
9635      }
9636      if (FD && FD->getNumParams() >= NumArgs &&
9637          FD->getMinRequiredArguments() <= NumArgs)
9638        return true;
9639    }
9640    return false;
9641  }
9642
9643 private:
9644  unsigned NumArgs;
9645  bool HasExplicitTemplateArgs;
9646};
9647
9648// Callback that effectively disabled typo correction
9649class NoTypoCorrectionCCC : public CorrectionCandidateCallback {
9650 public:
9651  NoTypoCorrectionCCC() {
9652    WantTypeSpecifiers = false;
9653    WantExpressionKeywords = false;
9654    WantCXXNamedCasts = false;
9655    WantRemainingKeywords = false;
9656  }
9657
9658  virtual bool ValidateCandidate(const TypoCorrection &candidate) {
9659    return false;
9660  }
9661};
9662
9663class BuildRecoveryCallExprRAII {
9664  Sema &SemaRef;
9665public:
9666  BuildRecoveryCallExprRAII(Sema &S) : SemaRef(S) {
9667    assert(SemaRef.IsBuildingRecoveryCallExpr == false);
9668    SemaRef.IsBuildingRecoveryCallExpr = true;
9669  }
9670
9671  ~BuildRecoveryCallExprRAII() {
9672    SemaRef.IsBuildingRecoveryCallExpr = false;
9673  }
9674};
9675
9676}
9677
9678/// Attempts to recover from a call where no functions were found.
9679///
9680/// Returns true if new candidates were found.
9681static ExprResult
9682BuildRecoveryCallExpr(Sema &SemaRef, Scope *S, Expr *Fn,
9683                      UnresolvedLookupExpr *ULE,
9684                      SourceLocation LParenLoc,
9685                      llvm::MutableArrayRef<Expr *> Args,
9686                      SourceLocation RParenLoc,
9687                      bool EmptyLookup, bool AllowTypoCorrection) {
9688  // Do not try to recover if it is already building a recovery call.
9689  // This stops infinite loops for template instantiations like
9690  //
9691  // template <typename T> auto foo(T t) -> decltype(foo(t)) {}
9692  // template <typename T> auto foo(T t) -> decltype(foo(&t)) {}
9693  //
9694  if (SemaRef.IsBuildingRecoveryCallExpr)
9695    return ExprError();
9696  BuildRecoveryCallExprRAII RCE(SemaRef);
9697
9698  CXXScopeSpec SS;
9699  SS.Adopt(ULE->getQualifierLoc());
9700  SourceLocation TemplateKWLoc = ULE->getTemplateKeywordLoc();
9701
9702  TemplateArgumentListInfo TABuffer;
9703  TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
9704  if (ULE->hasExplicitTemplateArgs()) {
9705    ULE->copyTemplateArgumentsInto(TABuffer);
9706    ExplicitTemplateArgs = &TABuffer;
9707  }
9708
9709  LookupResult R(SemaRef, ULE->getName(), ULE->getNameLoc(),
9710                 Sema::LookupOrdinaryName);
9711  RecoveryCallCCC Validator(SemaRef, Args.size(), ExplicitTemplateArgs != 0);
9712  NoTypoCorrectionCCC RejectAll;
9713  CorrectionCandidateCallback *CCC = AllowTypoCorrection ?
9714      (CorrectionCandidateCallback*)&Validator :
9715      (CorrectionCandidateCallback*)&RejectAll;
9716  if (!DiagnoseTwoPhaseLookup(SemaRef, Fn->getExprLoc(), SS, R,
9717                              ExplicitTemplateArgs, Args) &&
9718      (!EmptyLookup ||
9719       SemaRef.DiagnoseEmptyLookup(S, SS, R, *CCC,
9720                                   ExplicitTemplateArgs, Args)))
9721    return ExprError();
9722
9723  assert(!R.empty() && "lookup results empty despite recovery");
9724
9725  // Build an implicit member call if appropriate.  Just drop the
9726  // casts and such from the call, we don't really care.
9727  ExprResult NewFn = ExprError();
9728  if ((*R.begin())->isCXXClassMember())
9729    NewFn = SemaRef.BuildPossibleImplicitMemberExpr(SS, TemplateKWLoc,
9730                                                    R, ExplicitTemplateArgs);
9731  else if (ExplicitTemplateArgs || TemplateKWLoc.isValid())
9732    NewFn = SemaRef.BuildTemplateIdExpr(SS, TemplateKWLoc, R, false,
9733                                        ExplicitTemplateArgs);
9734  else
9735    NewFn = SemaRef.BuildDeclarationNameExpr(SS, R, false);
9736
9737  if (NewFn.isInvalid())
9738    return ExprError();
9739
9740  // This shouldn't cause an infinite loop because we're giving it
9741  // an expression with viable lookup results, which should never
9742  // end up here.
9743  return SemaRef.ActOnCallExpr(/*Scope*/ 0, NewFn.take(), LParenLoc,
9744                               MultiExprArg(Args.data(), Args.size()),
9745                               RParenLoc);
9746}
9747
9748/// \brief Constructs and populates an OverloadedCandidateSet from
9749/// the given function.
9750/// \returns true when an the ExprResult output parameter has been set.
9751bool Sema::buildOverloadedCallSet(Scope *S, Expr *Fn,
9752                                  UnresolvedLookupExpr *ULE,
9753                                  Expr **Args, unsigned NumArgs,
9754                                  SourceLocation RParenLoc,
9755                                  OverloadCandidateSet *CandidateSet,
9756                                  ExprResult *Result) {
9757#ifndef NDEBUG
9758  if (ULE->requiresADL()) {
9759    // To do ADL, we must have found an unqualified name.
9760    assert(!ULE->getQualifier() && "qualified name with ADL");
9761
9762    // We don't perform ADL for implicit declarations of builtins.
9763    // Verify that this was correctly set up.
9764    FunctionDecl *F;
9765    if (ULE->decls_begin() + 1 == ULE->decls_end() &&
9766        (F = dyn_cast<FunctionDecl>(*ULE->decls_begin())) &&
9767        F->getBuiltinID() && F->isImplicit())
9768      llvm_unreachable("performing ADL for builtin");
9769
9770    // We don't perform ADL in C.
9771    assert(getLangOpts().CPlusPlus && "ADL enabled in C");
9772  } else
9773    assert(!ULE->isStdAssociatedNamespace() &&
9774           "std is associated namespace but not doing ADL");
9775#endif
9776
9777  UnbridgedCastsSet UnbridgedCasts;
9778  if (checkArgPlaceholdersForOverload(*this, Args, NumArgs, UnbridgedCasts)) {
9779    *Result = ExprError();
9780    return true;
9781  }
9782
9783  // Add the functions denoted by the callee to the set of candidate
9784  // functions, including those from argument-dependent lookup.
9785  AddOverloadedCallCandidates(ULE, llvm::makeArrayRef(Args, NumArgs),
9786                              *CandidateSet);
9787
9788  // If we found nothing, try to recover.
9789  // BuildRecoveryCallExpr diagnoses the error itself, so we just bail
9790  // out if it fails.
9791  if (CandidateSet->empty()) {
9792    // In Microsoft mode, if we are inside a template class member function then
9793    // create a type dependent CallExpr. The goal is to postpone name lookup
9794    // to instantiation time to be able to search into type dependent base
9795    // classes.
9796    if (getLangOpts().MicrosoftMode && CurContext->isDependentContext() &&
9797        (isa<FunctionDecl>(CurContext) || isa<CXXRecordDecl>(CurContext))) {
9798      CallExpr *CE = new (Context) CallExpr(Context, Fn,
9799                                            llvm::makeArrayRef(Args, NumArgs),
9800                                            Context.DependentTy, VK_RValue,
9801                                            RParenLoc);
9802      CE->setTypeDependent(true);
9803      *Result = Owned(CE);
9804      return true;
9805    }
9806    return false;
9807  }
9808
9809  UnbridgedCasts.restore();
9810  return false;
9811}
9812
9813/// FinishOverloadedCallExpr - given an OverloadCandidateSet, builds and returns
9814/// the completed call expression. If overload resolution fails, emits
9815/// diagnostics and returns ExprError()
9816static ExprResult FinishOverloadedCallExpr(Sema &SemaRef, Scope *S, Expr *Fn,
9817                                           UnresolvedLookupExpr *ULE,
9818                                           SourceLocation LParenLoc,
9819                                           Expr **Args, unsigned NumArgs,
9820                                           SourceLocation RParenLoc,
9821                                           Expr *ExecConfig,
9822                                           OverloadCandidateSet *CandidateSet,
9823                                           OverloadCandidateSet::iterator *Best,
9824                                           OverloadingResult OverloadResult,
9825                                           bool AllowTypoCorrection) {
9826  if (CandidateSet->empty())
9827    return BuildRecoveryCallExpr(SemaRef, S, Fn, ULE, LParenLoc,
9828                                 llvm::MutableArrayRef<Expr *>(Args, NumArgs),
9829                                 RParenLoc, /*EmptyLookup=*/true,
9830                                 AllowTypoCorrection);
9831
9832  switch (OverloadResult) {
9833  case OR_Success: {
9834    FunctionDecl *FDecl = (*Best)->Function;
9835    SemaRef.MarkFunctionReferenced(Fn->getExprLoc(), FDecl);
9836    SemaRef.CheckUnresolvedLookupAccess(ULE, (*Best)->FoundDecl);
9837    SemaRef.DiagnoseUseOfDecl(FDecl, ULE->getNameLoc());
9838    Fn = SemaRef.FixOverloadedFunctionReference(Fn, (*Best)->FoundDecl, FDecl);
9839    return SemaRef.BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, NumArgs,
9840                                         RParenLoc, ExecConfig);
9841  }
9842
9843  case OR_No_Viable_Function: {
9844    // Try to recover by looking for viable functions which the user might
9845    // have meant to call.
9846    ExprResult Recovery = BuildRecoveryCallExpr(SemaRef, S, Fn, ULE, LParenLoc,
9847                                  llvm::MutableArrayRef<Expr *>(Args, NumArgs),
9848                                                RParenLoc,
9849                                                /*EmptyLookup=*/false,
9850                                                AllowTypoCorrection);
9851    if (!Recovery.isInvalid())
9852      return Recovery;
9853
9854    SemaRef.Diag(Fn->getLocStart(),
9855         diag::err_ovl_no_viable_function_in_call)
9856      << ULE->getName() << Fn->getSourceRange();
9857    CandidateSet->NoteCandidates(SemaRef, OCD_AllCandidates,
9858                                 llvm::makeArrayRef(Args, NumArgs));
9859    break;
9860  }
9861
9862  case OR_Ambiguous:
9863    SemaRef.Diag(Fn->getLocStart(), diag::err_ovl_ambiguous_call)
9864      << ULE->getName() << Fn->getSourceRange();
9865    CandidateSet->NoteCandidates(SemaRef, OCD_ViableCandidates,
9866                                 llvm::makeArrayRef(Args, NumArgs));
9867    break;
9868
9869  case OR_Deleted: {
9870    SemaRef.Diag(Fn->getLocStart(), diag::err_ovl_deleted_call)
9871      << (*Best)->Function->isDeleted()
9872      << ULE->getName()
9873      << SemaRef.getDeletedOrUnavailableSuffix((*Best)->Function)
9874      << Fn->getSourceRange();
9875    CandidateSet->NoteCandidates(SemaRef, OCD_AllCandidates,
9876                                 llvm::makeArrayRef(Args, NumArgs));
9877
9878    // We emitted an error for the unvailable/deleted function call but keep
9879    // the call in the AST.
9880    FunctionDecl *FDecl = (*Best)->Function;
9881    Fn = SemaRef.FixOverloadedFunctionReference(Fn, (*Best)->FoundDecl, FDecl);
9882    return SemaRef.BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, NumArgs,
9883                                 RParenLoc, ExecConfig);
9884  }
9885  }
9886
9887  // Overload resolution failed.
9888  return ExprError();
9889}
9890
9891/// BuildOverloadedCallExpr - Given the call expression that calls Fn
9892/// (which eventually refers to the declaration Func) and the call
9893/// arguments Args/NumArgs, attempt to resolve the function call down
9894/// to a specific function. If overload resolution succeeds, returns
9895/// the call expression produced by overload resolution.
9896/// Otherwise, emits diagnostics and returns ExprError.
9897ExprResult Sema::BuildOverloadedCallExpr(Scope *S, Expr *Fn,
9898                                         UnresolvedLookupExpr *ULE,
9899                                         SourceLocation LParenLoc,
9900                                         Expr **Args, unsigned NumArgs,
9901                                         SourceLocation RParenLoc,
9902                                         Expr *ExecConfig,
9903                                         bool AllowTypoCorrection) {
9904  OverloadCandidateSet CandidateSet(Fn->getExprLoc());
9905  ExprResult result;
9906
9907  if (buildOverloadedCallSet(S, Fn, ULE, Args, NumArgs, LParenLoc,
9908                             &CandidateSet, &result))
9909    return result;
9910
9911  OverloadCandidateSet::iterator Best;
9912  OverloadingResult OverloadResult =
9913      CandidateSet.BestViableFunction(*this, Fn->getLocStart(), Best);
9914
9915  return FinishOverloadedCallExpr(*this, S, Fn, ULE, LParenLoc, Args, NumArgs,
9916                                  RParenLoc, ExecConfig, &CandidateSet,
9917                                  &Best, OverloadResult,
9918                                  AllowTypoCorrection);
9919}
9920
9921static bool IsOverloaded(const UnresolvedSetImpl &Functions) {
9922  return Functions.size() > 1 ||
9923    (Functions.size() == 1 && isa<FunctionTemplateDecl>(*Functions.begin()));
9924}
9925
9926/// \brief Create a unary operation that may resolve to an overloaded
9927/// operator.
9928///
9929/// \param OpLoc The location of the operator itself (e.g., '*').
9930///
9931/// \param OpcIn The UnaryOperator::Opcode that describes this
9932/// operator.
9933///
9934/// \param Fns The set of non-member functions that will be
9935/// considered by overload resolution. The caller needs to build this
9936/// set based on the context using, e.g.,
9937/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
9938/// set should not contain any member functions; those will be added
9939/// by CreateOverloadedUnaryOp().
9940///
9941/// \param Input The input argument.
9942ExprResult
9943Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, unsigned OpcIn,
9944                              const UnresolvedSetImpl &Fns,
9945                              Expr *Input) {
9946  UnaryOperator::Opcode Opc = static_cast<UnaryOperator::Opcode>(OpcIn);
9947
9948  OverloadedOperatorKind Op = UnaryOperator::getOverloadedOperator(Opc);
9949  assert(Op != OO_None && "Invalid opcode for overloaded unary operator");
9950  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
9951  // TODO: provide better source location info.
9952  DeclarationNameInfo OpNameInfo(OpName, OpLoc);
9953
9954  if (checkPlaceholderForOverload(*this, Input))
9955    return ExprError();
9956
9957  Expr *Args[2] = { Input, 0 };
9958  unsigned NumArgs = 1;
9959
9960  // For post-increment and post-decrement, add the implicit '0' as
9961  // the second argument, so that we know this is a post-increment or
9962  // post-decrement.
9963  if (Opc == UO_PostInc || Opc == UO_PostDec) {
9964    llvm::APSInt Zero(Context.getTypeSize(Context.IntTy), false);
9965    Args[1] = IntegerLiteral::Create(Context, Zero, Context.IntTy,
9966                                     SourceLocation());
9967    NumArgs = 2;
9968  }
9969
9970  if (Input->isTypeDependent()) {
9971    if (Fns.empty())
9972      return Owned(new (Context) UnaryOperator(Input,
9973                                               Opc,
9974                                               Context.DependentTy,
9975                                               VK_RValue, OK_Ordinary,
9976                                               OpLoc));
9977
9978    CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
9979    UnresolvedLookupExpr *Fn
9980      = UnresolvedLookupExpr::Create(Context, NamingClass,
9981                                     NestedNameSpecifierLoc(), OpNameInfo,
9982                                     /*ADL*/ true, IsOverloaded(Fns),
9983                                     Fns.begin(), Fns.end());
9984    return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn,
9985                                              llvm::makeArrayRef(Args, NumArgs),
9986                                                   Context.DependentTy,
9987                                                   VK_RValue,
9988                                                   OpLoc, false));
9989  }
9990
9991  // Build an empty overload set.
9992  OverloadCandidateSet CandidateSet(OpLoc);
9993
9994  // Add the candidates from the given function set.
9995  AddFunctionCandidates(Fns, llvm::makeArrayRef(Args, NumArgs), CandidateSet,
9996                        false);
9997
9998  // Add operator candidates that are member functions.
9999  AddMemberOperatorCandidates(Op, OpLoc, &Args[0], NumArgs, CandidateSet);
10000
10001  // Add candidates from ADL.
10002  AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true,
10003                                       OpLoc, llvm::makeArrayRef(Args, NumArgs),
10004                                       /*ExplicitTemplateArgs*/ 0,
10005                                       CandidateSet);
10006
10007  // Add builtin operator candidates.
10008  AddBuiltinOperatorCandidates(Op, OpLoc, &Args[0], NumArgs, CandidateSet);
10009
10010  bool HadMultipleCandidates = (CandidateSet.size() > 1);
10011
10012  // Perform overload resolution.
10013  OverloadCandidateSet::iterator Best;
10014  switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
10015  case OR_Success: {
10016    // We found a built-in operator or an overloaded operator.
10017    FunctionDecl *FnDecl = Best->Function;
10018
10019    if (FnDecl) {
10020      // We matched an overloaded operator. Build a call to that
10021      // operator.
10022
10023      MarkFunctionReferenced(OpLoc, FnDecl);
10024
10025      // Convert the arguments.
10026      if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
10027        CheckMemberOperatorAccess(OpLoc, Args[0], 0, Best->FoundDecl);
10028
10029        ExprResult InputRes =
10030          PerformObjectArgumentInitialization(Input, /*Qualifier=*/0,
10031                                              Best->FoundDecl, Method);
10032        if (InputRes.isInvalid())
10033          return ExprError();
10034        Input = InputRes.take();
10035      } else {
10036        // Convert the arguments.
10037        ExprResult InputInit
10038          = PerformCopyInitialization(InitializedEntity::InitializeParameter(
10039                                                      Context,
10040                                                      FnDecl->getParamDecl(0)),
10041                                      SourceLocation(),
10042                                      Input);
10043        if (InputInit.isInvalid())
10044          return ExprError();
10045        Input = InputInit.take();
10046      }
10047
10048      DiagnoseUseOfDecl(Best->FoundDecl, OpLoc);
10049
10050      // Determine the result type.
10051      QualType ResultTy = FnDecl->getResultType();
10052      ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10053      ResultTy = ResultTy.getNonLValueExprType(Context);
10054
10055      // Build the actual expression node.
10056      ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
10057                                                HadMultipleCandidates, OpLoc);
10058      if (FnExpr.isInvalid())
10059        return ExprError();
10060
10061      Args[0] = Input;
10062      CallExpr *TheCall =
10063        new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.take(),
10064                                          llvm::makeArrayRef(Args, NumArgs),
10065                                          ResultTy, VK, OpLoc, false);
10066
10067      if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall,
10068                              FnDecl))
10069        return ExprError();
10070
10071      return MaybeBindToTemporary(TheCall);
10072    } else {
10073      // We matched a built-in operator. Convert the arguments, then
10074      // break out so that we will build the appropriate built-in
10075      // operator node.
10076      ExprResult InputRes =
10077        PerformImplicitConversion(Input, Best->BuiltinTypes.ParamTypes[0],
10078                                  Best->Conversions[0], AA_Passing);
10079      if (InputRes.isInvalid())
10080        return ExprError();
10081      Input = InputRes.take();
10082      break;
10083    }
10084  }
10085
10086  case OR_No_Viable_Function:
10087    // This is an erroneous use of an operator which can be overloaded by
10088    // a non-member function. Check for non-member operators which were
10089    // defined too late to be candidates.
10090    if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc,
10091                                       llvm::makeArrayRef(Args, NumArgs)))
10092      // FIXME: Recover by calling the found function.
10093      return ExprError();
10094
10095    // No viable function; fall through to handling this as a
10096    // built-in operator, which will produce an error message for us.
10097    break;
10098
10099  case OR_Ambiguous:
10100    Diag(OpLoc,  diag::err_ovl_ambiguous_oper_unary)
10101        << UnaryOperator::getOpcodeStr(Opc)
10102        << Input->getType()
10103        << Input->getSourceRange();
10104    CandidateSet.NoteCandidates(*this, OCD_ViableCandidates,
10105                                llvm::makeArrayRef(Args, NumArgs),
10106                                UnaryOperator::getOpcodeStr(Opc), OpLoc);
10107    return ExprError();
10108
10109  case OR_Deleted:
10110    Diag(OpLoc, diag::err_ovl_deleted_oper)
10111      << Best->Function->isDeleted()
10112      << UnaryOperator::getOpcodeStr(Opc)
10113      << getDeletedOrUnavailableSuffix(Best->Function)
10114      << Input->getSourceRange();
10115    CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
10116                                llvm::makeArrayRef(Args, NumArgs),
10117                                UnaryOperator::getOpcodeStr(Opc), OpLoc);
10118    return ExprError();
10119  }
10120
10121  // Either we found no viable overloaded operator or we matched a
10122  // built-in operator. In either case, fall through to trying to
10123  // build a built-in operation.
10124  return CreateBuiltinUnaryOp(OpLoc, Opc, Input);
10125}
10126
10127/// \brief Create a binary operation that may resolve to an overloaded
10128/// operator.
10129///
10130/// \param OpLoc The location of the operator itself (e.g., '+').
10131///
10132/// \param OpcIn The BinaryOperator::Opcode that describes this
10133/// operator.
10134///
10135/// \param Fns The set of non-member functions that will be
10136/// considered by overload resolution. The caller needs to build this
10137/// set based on the context using, e.g.,
10138/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
10139/// set should not contain any member functions; those will be added
10140/// by CreateOverloadedBinOp().
10141///
10142/// \param LHS Left-hand argument.
10143/// \param RHS Right-hand argument.
10144ExprResult
10145Sema::CreateOverloadedBinOp(SourceLocation OpLoc,
10146                            unsigned OpcIn,
10147                            const UnresolvedSetImpl &Fns,
10148                            Expr *LHS, Expr *RHS) {
10149  Expr *Args[2] = { LHS, RHS };
10150  LHS=RHS=0; //Please use only Args instead of LHS/RHS couple
10151
10152  BinaryOperator::Opcode Opc = static_cast<BinaryOperator::Opcode>(OpcIn);
10153  OverloadedOperatorKind Op = BinaryOperator::getOverloadedOperator(Opc);
10154  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
10155
10156  // If either side is type-dependent, create an appropriate dependent
10157  // expression.
10158  if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
10159    if (Fns.empty()) {
10160      // If there are no functions to store, just build a dependent
10161      // BinaryOperator or CompoundAssignment.
10162      if (Opc <= BO_Assign || Opc > BO_OrAssign)
10163        return Owned(new (Context) BinaryOperator(Args[0], Args[1], Opc,
10164                                                  Context.DependentTy,
10165                                                  VK_RValue, OK_Ordinary,
10166                                                  OpLoc,
10167                                                  FPFeatures.fp_contract));
10168
10169      return Owned(new (Context) CompoundAssignOperator(Args[0], Args[1], Opc,
10170                                                        Context.DependentTy,
10171                                                        VK_LValue,
10172                                                        OK_Ordinary,
10173                                                        Context.DependentTy,
10174                                                        Context.DependentTy,
10175                                                        OpLoc,
10176                                                        FPFeatures.fp_contract));
10177    }
10178
10179    // FIXME: save results of ADL from here?
10180    CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
10181    // TODO: provide better source location info in DNLoc component.
10182    DeclarationNameInfo OpNameInfo(OpName, OpLoc);
10183    UnresolvedLookupExpr *Fn
10184      = UnresolvedLookupExpr::Create(Context, NamingClass,
10185                                     NestedNameSpecifierLoc(), OpNameInfo,
10186                                     /*ADL*/ true, IsOverloaded(Fns),
10187                                     Fns.begin(), Fns.end());
10188    return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn, Args,
10189                                                Context.DependentTy, VK_RValue,
10190                                                OpLoc, FPFeatures.fp_contract));
10191  }
10192
10193  // Always do placeholder-like conversions on the RHS.
10194  if (checkPlaceholderForOverload(*this, Args[1]))
10195    return ExprError();
10196
10197  // Do placeholder-like conversion on the LHS; note that we should
10198  // not get here with a PseudoObject LHS.
10199  assert(Args[0]->getObjectKind() != OK_ObjCProperty);
10200  if (checkPlaceholderForOverload(*this, Args[0]))
10201    return ExprError();
10202
10203  // If this is the assignment operator, we only perform overload resolution
10204  // if the left-hand side is a class or enumeration type. This is actually
10205  // a hack. The standard requires that we do overload resolution between the
10206  // various built-in candidates, but as DR507 points out, this can lead to
10207  // problems. So we do it this way, which pretty much follows what GCC does.
10208  // Note that we go the traditional code path for compound assignment forms.
10209  if (Opc == BO_Assign && !Args[0]->getType()->isOverloadableType())
10210    return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10211
10212  // If this is the .* operator, which is not overloadable, just
10213  // create a built-in binary operator.
10214  if (Opc == BO_PtrMemD)
10215    return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10216
10217  // Build an empty overload set.
10218  OverloadCandidateSet CandidateSet(OpLoc);
10219
10220  // Add the candidates from the given function set.
10221  AddFunctionCandidates(Fns, Args, CandidateSet, false);
10222
10223  // Add operator candidates that are member functions.
10224  AddMemberOperatorCandidates(Op, OpLoc, Args, 2, CandidateSet);
10225
10226  // Add candidates from ADL.
10227  AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true,
10228                                       OpLoc, Args,
10229                                       /*ExplicitTemplateArgs*/ 0,
10230                                       CandidateSet);
10231
10232  // Add builtin operator candidates.
10233  AddBuiltinOperatorCandidates(Op, OpLoc, Args, 2, CandidateSet);
10234
10235  bool HadMultipleCandidates = (CandidateSet.size() > 1);
10236
10237  // Perform overload resolution.
10238  OverloadCandidateSet::iterator Best;
10239  switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
10240    case OR_Success: {
10241      // We found a built-in operator or an overloaded operator.
10242      FunctionDecl *FnDecl = Best->Function;
10243
10244      if (FnDecl) {
10245        // We matched an overloaded operator. Build a call to that
10246        // operator.
10247
10248        MarkFunctionReferenced(OpLoc, FnDecl);
10249
10250        // Convert the arguments.
10251        if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
10252          // Best->Access is only meaningful for class members.
10253          CheckMemberOperatorAccess(OpLoc, Args[0], Args[1], Best->FoundDecl);
10254
10255          ExprResult Arg1 =
10256            PerformCopyInitialization(
10257              InitializedEntity::InitializeParameter(Context,
10258                                                     FnDecl->getParamDecl(0)),
10259              SourceLocation(), Owned(Args[1]));
10260          if (Arg1.isInvalid())
10261            return ExprError();
10262
10263          ExprResult Arg0 =
10264            PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0,
10265                                                Best->FoundDecl, Method);
10266          if (Arg0.isInvalid())
10267            return ExprError();
10268          Args[0] = Arg0.takeAs<Expr>();
10269          Args[1] = RHS = Arg1.takeAs<Expr>();
10270        } else {
10271          // Convert the arguments.
10272          ExprResult Arg0 = PerformCopyInitialization(
10273            InitializedEntity::InitializeParameter(Context,
10274                                                   FnDecl->getParamDecl(0)),
10275            SourceLocation(), Owned(Args[0]));
10276          if (Arg0.isInvalid())
10277            return ExprError();
10278
10279          ExprResult Arg1 =
10280            PerformCopyInitialization(
10281              InitializedEntity::InitializeParameter(Context,
10282                                                     FnDecl->getParamDecl(1)),
10283              SourceLocation(), Owned(Args[1]));
10284          if (Arg1.isInvalid())
10285            return ExprError();
10286          Args[0] = LHS = Arg0.takeAs<Expr>();
10287          Args[1] = RHS = Arg1.takeAs<Expr>();
10288        }
10289
10290        DiagnoseUseOfDecl(Best->FoundDecl, OpLoc);
10291
10292        // Determine the result type.
10293        QualType ResultTy = FnDecl->getResultType();
10294        ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10295        ResultTy = ResultTy.getNonLValueExprType(Context);
10296
10297        // Build the actual expression node.
10298        ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
10299                                                  HadMultipleCandidates, OpLoc);
10300        if (FnExpr.isInvalid())
10301          return ExprError();
10302
10303        CXXOperatorCallExpr *TheCall =
10304          new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.take(),
10305                                            Args, ResultTy, VK, OpLoc,
10306                                            FPFeatures.fp_contract);
10307
10308        if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall,
10309                                FnDecl))
10310          return ExprError();
10311
10312        return MaybeBindToTemporary(TheCall);
10313      } else {
10314        // We matched a built-in operator. Convert the arguments, then
10315        // break out so that we will build the appropriate built-in
10316        // operator node.
10317        ExprResult ArgsRes0 =
10318          PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
10319                                    Best->Conversions[0], AA_Passing);
10320        if (ArgsRes0.isInvalid())
10321          return ExprError();
10322        Args[0] = ArgsRes0.take();
10323
10324        ExprResult ArgsRes1 =
10325          PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
10326                                    Best->Conversions[1], AA_Passing);
10327        if (ArgsRes1.isInvalid())
10328          return ExprError();
10329        Args[1] = ArgsRes1.take();
10330        break;
10331      }
10332    }
10333
10334    case OR_No_Viable_Function: {
10335      // C++ [over.match.oper]p9:
10336      //   If the operator is the operator , [...] and there are no
10337      //   viable functions, then the operator is assumed to be the
10338      //   built-in operator and interpreted according to clause 5.
10339      if (Opc == BO_Comma)
10340        break;
10341
10342      // For class as left operand for assignment or compound assigment
10343      // operator do not fall through to handling in built-in, but report that
10344      // no overloaded assignment operator found
10345      ExprResult Result = ExprError();
10346      if (Args[0]->getType()->isRecordType() &&
10347          Opc >= BO_Assign && Opc <= BO_OrAssign) {
10348        Diag(OpLoc,  diag::err_ovl_no_viable_oper)
10349             << BinaryOperator::getOpcodeStr(Opc)
10350             << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10351      } else {
10352        // This is an erroneous use of an operator which can be overloaded by
10353        // a non-member function. Check for non-member operators which were
10354        // defined too late to be candidates.
10355        if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc, Args))
10356          // FIXME: Recover by calling the found function.
10357          return ExprError();
10358
10359        // No viable function; try to create a built-in operation, which will
10360        // produce an error. Then, show the non-viable candidates.
10361        Result = CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10362      }
10363      assert(Result.isInvalid() &&
10364             "C++ binary operator overloading is missing candidates!");
10365      if (Result.isInvalid())
10366        CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10367                                    BinaryOperator::getOpcodeStr(Opc), OpLoc);
10368      return Result;
10369    }
10370
10371    case OR_Ambiguous:
10372      Diag(OpLoc,  diag::err_ovl_ambiguous_oper_binary)
10373          << BinaryOperator::getOpcodeStr(Opc)
10374          << Args[0]->getType() << Args[1]->getType()
10375          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10376      CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args,
10377                                  BinaryOperator::getOpcodeStr(Opc), OpLoc);
10378      return ExprError();
10379
10380    case OR_Deleted:
10381      if (isImplicitlyDeleted(Best->Function)) {
10382        CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
10383        Diag(OpLoc, diag::err_ovl_deleted_special_oper)
10384          << getSpecialMember(Method)
10385          << BinaryOperator::getOpcodeStr(Opc)
10386          << getDeletedOrUnavailableSuffix(Best->Function);
10387
10388        if (getSpecialMember(Method) != CXXInvalid) {
10389          // The user probably meant to call this special member. Just
10390          // explain why it's deleted.
10391          NoteDeletedFunction(Method);
10392          return ExprError();
10393        }
10394      } else {
10395        Diag(OpLoc, diag::err_ovl_deleted_oper)
10396          << Best->Function->isDeleted()
10397          << BinaryOperator::getOpcodeStr(Opc)
10398          << getDeletedOrUnavailableSuffix(Best->Function)
10399          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10400      }
10401      CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10402                                  BinaryOperator::getOpcodeStr(Opc), OpLoc);
10403      return ExprError();
10404  }
10405
10406  // We matched a built-in operator; build it.
10407  return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10408}
10409
10410ExprResult
10411Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc,
10412                                         SourceLocation RLoc,
10413                                         Expr *Base, Expr *Idx) {
10414  Expr *Args[2] = { Base, Idx };
10415  DeclarationName OpName =
10416      Context.DeclarationNames.getCXXOperatorName(OO_Subscript);
10417
10418  // If either side is type-dependent, create an appropriate dependent
10419  // expression.
10420  if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
10421
10422    CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
10423    // CHECKME: no 'operator' keyword?
10424    DeclarationNameInfo OpNameInfo(OpName, LLoc);
10425    OpNameInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc));
10426    UnresolvedLookupExpr *Fn
10427      = UnresolvedLookupExpr::Create(Context, NamingClass,
10428                                     NestedNameSpecifierLoc(), OpNameInfo,
10429                                     /*ADL*/ true, /*Overloaded*/ false,
10430                                     UnresolvedSetIterator(),
10431                                     UnresolvedSetIterator());
10432    // Can't add any actual overloads yet
10433
10434    return Owned(new (Context) CXXOperatorCallExpr(Context, OO_Subscript, Fn,
10435                                                   Args,
10436                                                   Context.DependentTy,
10437                                                   VK_RValue,
10438                                                   RLoc, false));
10439  }
10440
10441  // Handle placeholders on both operands.
10442  if (checkPlaceholderForOverload(*this, Args[0]))
10443    return ExprError();
10444  if (checkPlaceholderForOverload(*this, Args[1]))
10445    return ExprError();
10446
10447  // Build an empty overload set.
10448  OverloadCandidateSet CandidateSet(LLoc);
10449
10450  // Subscript can only be overloaded as a member function.
10451
10452  // Add operator candidates that are member functions.
10453  AddMemberOperatorCandidates(OO_Subscript, LLoc, Args, 2, CandidateSet);
10454
10455  // Add builtin operator candidates.
10456  AddBuiltinOperatorCandidates(OO_Subscript, LLoc, Args, 2, CandidateSet);
10457
10458  bool HadMultipleCandidates = (CandidateSet.size() > 1);
10459
10460  // Perform overload resolution.
10461  OverloadCandidateSet::iterator Best;
10462  switch (CandidateSet.BestViableFunction(*this, LLoc, Best)) {
10463    case OR_Success: {
10464      // We found a built-in operator or an overloaded operator.
10465      FunctionDecl *FnDecl = Best->Function;
10466
10467      if (FnDecl) {
10468        // We matched an overloaded operator. Build a call to that
10469        // operator.
10470
10471        MarkFunctionReferenced(LLoc, FnDecl);
10472
10473        CheckMemberOperatorAccess(LLoc, Args[0], Args[1], Best->FoundDecl);
10474        DiagnoseUseOfDecl(Best->FoundDecl, LLoc);
10475
10476        // Convert the arguments.
10477        CXXMethodDecl *Method = cast<CXXMethodDecl>(FnDecl);
10478        ExprResult Arg0 =
10479          PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0,
10480                                              Best->FoundDecl, Method);
10481        if (Arg0.isInvalid())
10482          return ExprError();
10483        Args[0] = Arg0.take();
10484
10485        // Convert the arguments.
10486        ExprResult InputInit
10487          = PerformCopyInitialization(InitializedEntity::InitializeParameter(
10488                                                      Context,
10489                                                      FnDecl->getParamDecl(0)),
10490                                      SourceLocation(),
10491                                      Owned(Args[1]));
10492        if (InputInit.isInvalid())
10493          return ExprError();
10494
10495        Args[1] = InputInit.takeAs<Expr>();
10496
10497        // Determine the result type
10498        QualType ResultTy = FnDecl->getResultType();
10499        ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10500        ResultTy = ResultTy.getNonLValueExprType(Context);
10501
10502        // Build the actual expression node.
10503        DeclarationNameInfo OpLocInfo(OpName, LLoc);
10504        OpLocInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc));
10505        ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
10506                                                  HadMultipleCandidates,
10507                                                  OpLocInfo.getLoc(),
10508                                                  OpLocInfo.getInfo());
10509        if (FnExpr.isInvalid())
10510          return ExprError();
10511
10512        CXXOperatorCallExpr *TheCall =
10513          new (Context) CXXOperatorCallExpr(Context, OO_Subscript,
10514                                            FnExpr.take(), Args,
10515                                            ResultTy, VK, RLoc,
10516                                            false);
10517
10518        if (CheckCallReturnType(FnDecl->getResultType(), LLoc, TheCall,
10519                                FnDecl))
10520          return ExprError();
10521
10522        return MaybeBindToTemporary(TheCall);
10523      } else {
10524        // We matched a built-in operator. Convert the arguments, then
10525        // break out so that we will build the appropriate built-in
10526        // operator node.
10527        ExprResult ArgsRes0 =
10528          PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
10529                                    Best->Conversions[0], AA_Passing);
10530        if (ArgsRes0.isInvalid())
10531          return ExprError();
10532        Args[0] = ArgsRes0.take();
10533
10534        ExprResult ArgsRes1 =
10535          PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
10536                                    Best->Conversions[1], AA_Passing);
10537        if (ArgsRes1.isInvalid())
10538          return ExprError();
10539        Args[1] = ArgsRes1.take();
10540
10541        break;
10542      }
10543    }
10544
10545    case OR_No_Viable_Function: {
10546      if (CandidateSet.empty())
10547        Diag(LLoc, diag::err_ovl_no_oper)
10548          << Args[0]->getType() << /*subscript*/ 0
10549          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10550      else
10551        Diag(LLoc, diag::err_ovl_no_viable_subscript)
10552          << Args[0]->getType()
10553          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10554      CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10555                                  "[]", LLoc);
10556      return ExprError();
10557    }
10558
10559    case OR_Ambiguous:
10560      Diag(LLoc,  diag::err_ovl_ambiguous_oper_binary)
10561          << "[]"
10562          << Args[0]->getType() << Args[1]->getType()
10563          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10564      CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args,
10565                                  "[]", LLoc);
10566      return ExprError();
10567
10568    case OR_Deleted:
10569      Diag(LLoc, diag::err_ovl_deleted_oper)
10570        << Best->Function->isDeleted() << "[]"
10571        << getDeletedOrUnavailableSuffix(Best->Function)
10572        << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10573      CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10574                                  "[]", LLoc);
10575      return ExprError();
10576    }
10577
10578  // We matched a built-in operator; build it.
10579  return CreateBuiltinArraySubscriptExpr(Args[0], LLoc, Args[1], RLoc);
10580}
10581
10582/// BuildCallToMemberFunction - Build a call to a member
10583/// function. MemExpr is the expression that refers to the member
10584/// function (and includes the object parameter), Args/NumArgs are the
10585/// arguments to the function call (not including the object
10586/// parameter). The caller needs to validate that the member
10587/// expression refers to a non-static member function or an overloaded
10588/// member function.
10589ExprResult
10590Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE,
10591                                SourceLocation LParenLoc, Expr **Args,
10592                                unsigned NumArgs, SourceLocation RParenLoc) {
10593  assert(MemExprE->getType() == Context.BoundMemberTy ||
10594         MemExprE->getType() == Context.OverloadTy);
10595
10596  // Dig out the member expression. This holds both the object
10597  // argument and the member function we're referring to.
10598  Expr *NakedMemExpr = MemExprE->IgnoreParens();
10599
10600  // Determine whether this is a call to a pointer-to-member function.
10601  if (BinaryOperator *op = dyn_cast<BinaryOperator>(NakedMemExpr)) {
10602    assert(op->getType() == Context.BoundMemberTy);
10603    assert(op->getOpcode() == BO_PtrMemD || op->getOpcode() == BO_PtrMemI);
10604
10605    QualType fnType =
10606      op->getRHS()->getType()->castAs<MemberPointerType>()->getPointeeType();
10607
10608    const FunctionProtoType *proto = fnType->castAs<FunctionProtoType>();
10609    QualType resultType = proto->getCallResultType(Context);
10610    ExprValueKind valueKind = Expr::getValueKindForType(proto->getResultType());
10611
10612    // Check that the object type isn't more qualified than the
10613    // member function we're calling.
10614    Qualifiers funcQuals = Qualifiers::fromCVRMask(proto->getTypeQuals());
10615
10616    QualType objectType = op->getLHS()->getType();
10617    if (op->getOpcode() == BO_PtrMemI)
10618      objectType = objectType->castAs<PointerType>()->getPointeeType();
10619    Qualifiers objectQuals = objectType.getQualifiers();
10620
10621    Qualifiers difference = objectQuals - funcQuals;
10622    difference.removeObjCGCAttr();
10623    difference.removeAddressSpace();
10624    if (difference) {
10625      std::string qualsString = difference.getAsString();
10626      Diag(LParenLoc, diag::err_pointer_to_member_call_drops_quals)
10627        << fnType.getUnqualifiedType()
10628        << qualsString
10629        << (qualsString.find(' ') == std::string::npos ? 1 : 2);
10630    }
10631
10632    CXXMemberCallExpr *call
10633      = new (Context) CXXMemberCallExpr(Context, MemExprE,
10634                                        llvm::makeArrayRef(Args, NumArgs),
10635                                        resultType, valueKind, RParenLoc);
10636
10637    if (CheckCallReturnType(proto->getResultType(),
10638                            op->getRHS()->getLocStart(),
10639                            call, 0))
10640      return ExprError();
10641
10642    if (ConvertArgumentsForCall(call, op, 0, proto, Args, NumArgs, RParenLoc))
10643      return ExprError();
10644
10645    return MaybeBindToTemporary(call);
10646  }
10647
10648  UnbridgedCastsSet UnbridgedCasts;
10649  if (checkArgPlaceholdersForOverload(*this, Args, NumArgs, UnbridgedCasts))
10650    return ExprError();
10651
10652  MemberExpr *MemExpr;
10653  CXXMethodDecl *Method = 0;
10654  DeclAccessPair FoundDecl = DeclAccessPair::make(0, AS_public);
10655  NestedNameSpecifier *Qualifier = 0;
10656  if (isa<MemberExpr>(NakedMemExpr)) {
10657    MemExpr = cast<MemberExpr>(NakedMemExpr);
10658    Method = cast<CXXMethodDecl>(MemExpr->getMemberDecl());
10659    FoundDecl = MemExpr->getFoundDecl();
10660    Qualifier = MemExpr->getQualifier();
10661    UnbridgedCasts.restore();
10662  } else {
10663    UnresolvedMemberExpr *UnresExpr = cast<UnresolvedMemberExpr>(NakedMemExpr);
10664    Qualifier = UnresExpr->getQualifier();
10665
10666    QualType ObjectType = UnresExpr->getBaseType();
10667    Expr::Classification ObjectClassification
10668      = UnresExpr->isArrow()? Expr::Classification::makeSimpleLValue()
10669                            : UnresExpr->getBase()->Classify(Context);
10670
10671    // Add overload candidates
10672    OverloadCandidateSet CandidateSet(UnresExpr->getMemberLoc());
10673
10674    // FIXME: avoid copy.
10675    TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
10676    if (UnresExpr->hasExplicitTemplateArgs()) {
10677      UnresExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
10678      TemplateArgs = &TemplateArgsBuffer;
10679    }
10680
10681    for (UnresolvedMemberExpr::decls_iterator I = UnresExpr->decls_begin(),
10682           E = UnresExpr->decls_end(); I != E; ++I) {
10683
10684      NamedDecl *Func = *I;
10685      CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(Func->getDeclContext());
10686      if (isa<UsingShadowDecl>(Func))
10687        Func = cast<UsingShadowDecl>(Func)->getTargetDecl();
10688
10689
10690      // Microsoft supports direct constructor calls.
10691      if (getLangOpts().MicrosoftExt && isa<CXXConstructorDecl>(Func)) {
10692        AddOverloadCandidate(cast<CXXConstructorDecl>(Func), I.getPair(),
10693                             llvm::makeArrayRef(Args, NumArgs), CandidateSet);
10694      } else if ((Method = dyn_cast<CXXMethodDecl>(Func))) {
10695        // If explicit template arguments were provided, we can't call a
10696        // non-template member function.
10697        if (TemplateArgs)
10698          continue;
10699
10700        AddMethodCandidate(Method, I.getPair(), ActingDC, ObjectType,
10701                           ObjectClassification,
10702                           llvm::makeArrayRef(Args, NumArgs), CandidateSet,
10703                           /*SuppressUserConversions=*/false);
10704      } else {
10705        AddMethodTemplateCandidate(cast<FunctionTemplateDecl>(Func),
10706                                   I.getPair(), ActingDC, TemplateArgs,
10707                                   ObjectType,  ObjectClassification,
10708                                   llvm::makeArrayRef(Args, NumArgs),
10709                                   CandidateSet,
10710                                   /*SuppressUsedConversions=*/false);
10711      }
10712    }
10713
10714    DeclarationName DeclName = UnresExpr->getMemberName();
10715
10716    UnbridgedCasts.restore();
10717
10718    OverloadCandidateSet::iterator Best;
10719    switch (CandidateSet.BestViableFunction(*this, UnresExpr->getLocStart(),
10720                                            Best)) {
10721    case OR_Success:
10722      Method = cast<CXXMethodDecl>(Best->Function);
10723      MarkFunctionReferenced(UnresExpr->getMemberLoc(), Method);
10724      FoundDecl = Best->FoundDecl;
10725      CheckUnresolvedMemberAccess(UnresExpr, Best->FoundDecl);
10726      DiagnoseUseOfDecl(Best->FoundDecl, UnresExpr->getNameLoc());
10727      break;
10728
10729    case OR_No_Viable_Function:
10730      Diag(UnresExpr->getMemberLoc(),
10731           diag::err_ovl_no_viable_member_function_in_call)
10732        << DeclName << MemExprE->getSourceRange();
10733      CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
10734                                  llvm::makeArrayRef(Args, NumArgs));
10735      // FIXME: Leaking incoming expressions!
10736      return ExprError();
10737
10738    case OR_Ambiguous:
10739      Diag(UnresExpr->getMemberLoc(), diag::err_ovl_ambiguous_member_call)
10740        << DeclName << MemExprE->getSourceRange();
10741      CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
10742                                  llvm::makeArrayRef(Args, NumArgs));
10743      // FIXME: Leaking incoming expressions!
10744      return ExprError();
10745
10746    case OR_Deleted:
10747      Diag(UnresExpr->getMemberLoc(), diag::err_ovl_deleted_member_call)
10748        << Best->Function->isDeleted()
10749        << DeclName
10750        << getDeletedOrUnavailableSuffix(Best->Function)
10751        << MemExprE->getSourceRange();
10752      CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
10753                                  llvm::makeArrayRef(Args, NumArgs));
10754      // FIXME: Leaking incoming expressions!
10755      return ExprError();
10756    }
10757
10758    MemExprE = FixOverloadedFunctionReference(MemExprE, FoundDecl, Method);
10759
10760    // If overload resolution picked a static member, build a
10761    // non-member call based on that function.
10762    if (Method->isStatic()) {
10763      return BuildResolvedCallExpr(MemExprE, Method, LParenLoc,
10764                                   Args, NumArgs, RParenLoc);
10765    }
10766
10767    MemExpr = cast<MemberExpr>(MemExprE->IgnoreParens());
10768  }
10769
10770  QualType ResultType = Method->getResultType();
10771  ExprValueKind VK = Expr::getValueKindForType(ResultType);
10772  ResultType = ResultType.getNonLValueExprType(Context);
10773
10774  assert(Method && "Member call to something that isn't a method?");
10775  CXXMemberCallExpr *TheCall =
10776    new (Context) CXXMemberCallExpr(Context, MemExprE,
10777                                    llvm::makeArrayRef(Args, NumArgs),
10778                                    ResultType, VK, RParenLoc);
10779
10780  // Check for a valid return type.
10781  if (CheckCallReturnType(Method->getResultType(), MemExpr->getMemberLoc(),
10782                          TheCall, Method))
10783    return ExprError();
10784
10785  // Convert the object argument (for a non-static member function call).
10786  // We only need to do this if there was actually an overload; otherwise
10787  // it was done at lookup.
10788  if (!Method->isStatic()) {
10789    ExprResult ObjectArg =
10790      PerformObjectArgumentInitialization(MemExpr->getBase(), Qualifier,
10791                                          FoundDecl, Method);
10792    if (ObjectArg.isInvalid())
10793      return ExprError();
10794    MemExpr->setBase(ObjectArg.take());
10795  }
10796
10797  // Convert the rest of the arguments
10798  const FunctionProtoType *Proto =
10799    Method->getType()->getAs<FunctionProtoType>();
10800  if (ConvertArgumentsForCall(TheCall, MemExpr, Method, Proto, Args, NumArgs,
10801                              RParenLoc))
10802    return ExprError();
10803
10804  DiagnoseSentinelCalls(Method, LParenLoc, Args, NumArgs);
10805
10806  if (CheckFunctionCall(Method, TheCall, Proto))
10807    return ExprError();
10808
10809  if ((isa<CXXConstructorDecl>(CurContext) ||
10810       isa<CXXDestructorDecl>(CurContext)) &&
10811      TheCall->getMethodDecl()->isPure()) {
10812    const CXXMethodDecl *MD = TheCall->getMethodDecl();
10813
10814    if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts())) {
10815      Diag(MemExpr->getLocStart(),
10816           diag::warn_call_to_pure_virtual_member_function_from_ctor_dtor)
10817        << MD->getDeclName() << isa<CXXDestructorDecl>(CurContext)
10818        << MD->getParent()->getDeclName();
10819
10820      Diag(MD->getLocStart(), diag::note_previous_decl) << MD->getDeclName();
10821    }
10822  }
10823  return MaybeBindToTemporary(TheCall);
10824}
10825
10826/// BuildCallToObjectOfClassType - Build a call to an object of class
10827/// type (C++ [over.call.object]), which can end up invoking an
10828/// overloaded function call operator (@c operator()) or performing a
10829/// user-defined conversion on the object argument.
10830ExprResult
10831Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj,
10832                                   SourceLocation LParenLoc,
10833                                   Expr **Args, unsigned NumArgs,
10834                                   SourceLocation RParenLoc) {
10835  if (checkPlaceholderForOverload(*this, Obj))
10836    return ExprError();
10837  ExprResult Object = Owned(Obj);
10838
10839  UnbridgedCastsSet UnbridgedCasts;
10840  if (checkArgPlaceholdersForOverload(*this, Args, NumArgs, UnbridgedCasts))
10841    return ExprError();
10842
10843  assert(Object.get()->getType()->isRecordType() && "Requires object type argument");
10844  const RecordType *Record = Object.get()->getType()->getAs<RecordType>();
10845
10846  // C++ [over.call.object]p1:
10847  //  If the primary-expression E in the function call syntax
10848  //  evaluates to a class object of type "cv T", then the set of
10849  //  candidate functions includes at least the function call
10850  //  operators of T. The function call operators of T are obtained by
10851  //  ordinary lookup of the name operator() in the context of
10852  //  (E).operator().
10853  OverloadCandidateSet CandidateSet(LParenLoc);
10854  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(OO_Call);
10855
10856  if (RequireCompleteType(LParenLoc, Object.get()->getType(),
10857                          diag::err_incomplete_object_call, Object.get()))
10858    return true;
10859
10860  LookupResult R(*this, OpName, LParenLoc, LookupOrdinaryName);
10861  LookupQualifiedName(R, Record->getDecl());
10862  R.suppressDiagnostics();
10863
10864  for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
10865       Oper != OperEnd; ++Oper) {
10866    AddMethodCandidate(Oper.getPair(), Object.get()->getType(),
10867                       Object.get()->Classify(Context), Args, NumArgs, CandidateSet,
10868                       /*SuppressUserConversions=*/ false);
10869  }
10870
10871  // C++ [over.call.object]p2:
10872  //   In addition, for each (non-explicit in C++0x) conversion function
10873  //   declared in T of the form
10874  //
10875  //        operator conversion-type-id () cv-qualifier;
10876  //
10877  //   where cv-qualifier is the same cv-qualification as, or a
10878  //   greater cv-qualification than, cv, and where conversion-type-id
10879  //   denotes the type "pointer to function of (P1,...,Pn) returning
10880  //   R", or the type "reference to pointer to function of
10881  //   (P1,...,Pn) returning R", or the type "reference to function
10882  //   of (P1,...,Pn) returning R", a surrogate call function [...]
10883  //   is also considered as a candidate function. Similarly,
10884  //   surrogate call functions are added to the set of candidate
10885  //   functions for each conversion function declared in an
10886  //   accessible base class provided the function is not hidden
10887  //   within T by another intervening declaration.
10888  const UnresolvedSetImpl *Conversions
10889    = cast<CXXRecordDecl>(Record->getDecl())->getVisibleConversionFunctions();
10890  for (UnresolvedSetImpl::iterator I = Conversions->begin(),
10891         E = Conversions->end(); I != E; ++I) {
10892    NamedDecl *D = *I;
10893    CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
10894    if (isa<UsingShadowDecl>(D))
10895      D = cast<UsingShadowDecl>(D)->getTargetDecl();
10896
10897    // Skip over templated conversion functions; they aren't
10898    // surrogates.
10899    if (isa<FunctionTemplateDecl>(D))
10900      continue;
10901
10902    CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
10903    if (!Conv->isExplicit()) {
10904      // Strip the reference type (if any) and then the pointer type (if
10905      // any) to get down to what might be a function type.
10906      QualType ConvType = Conv->getConversionType().getNonReferenceType();
10907      if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
10908        ConvType = ConvPtrType->getPointeeType();
10909
10910      if (const FunctionProtoType *Proto = ConvType->getAs<FunctionProtoType>())
10911      {
10912        AddSurrogateCandidate(Conv, I.getPair(), ActingContext, Proto,
10913                              Object.get(), llvm::makeArrayRef(Args, NumArgs),
10914                              CandidateSet);
10915      }
10916    }
10917  }
10918
10919  bool HadMultipleCandidates = (CandidateSet.size() > 1);
10920
10921  // Perform overload resolution.
10922  OverloadCandidateSet::iterator Best;
10923  switch (CandidateSet.BestViableFunction(*this, Object.get()->getLocStart(),
10924                             Best)) {
10925  case OR_Success:
10926    // Overload resolution succeeded; we'll build the appropriate call
10927    // below.
10928    break;
10929
10930  case OR_No_Viable_Function:
10931    if (CandidateSet.empty())
10932      Diag(Object.get()->getLocStart(), diag::err_ovl_no_oper)
10933        << Object.get()->getType() << /*call*/ 1
10934        << Object.get()->getSourceRange();
10935    else
10936      Diag(Object.get()->getLocStart(),
10937           diag::err_ovl_no_viable_object_call)
10938        << Object.get()->getType() << Object.get()->getSourceRange();
10939    CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
10940                                llvm::makeArrayRef(Args, NumArgs));
10941    break;
10942
10943  case OR_Ambiguous:
10944    Diag(Object.get()->getLocStart(),
10945         diag::err_ovl_ambiguous_object_call)
10946      << Object.get()->getType() << Object.get()->getSourceRange();
10947    CandidateSet.NoteCandidates(*this, OCD_ViableCandidates,
10948                                llvm::makeArrayRef(Args, NumArgs));
10949    break;
10950
10951  case OR_Deleted:
10952    Diag(Object.get()->getLocStart(),
10953         diag::err_ovl_deleted_object_call)
10954      << Best->Function->isDeleted()
10955      << Object.get()->getType()
10956      << getDeletedOrUnavailableSuffix(Best->Function)
10957      << Object.get()->getSourceRange();
10958    CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
10959                                llvm::makeArrayRef(Args, NumArgs));
10960    break;
10961  }
10962
10963  if (Best == CandidateSet.end())
10964    return true;
10965
10966  UnbridgedCasts.restore();
10967
10968  if (Best->Function == 0) {
10969    // Since there is no function declaration, this is one of the
10970    // surrogate candidates. Dig out the conversion function.
10971    CXXConversionDecl *Conv
10972      = cast<CXXConversionDecl>(
10973                         Best->Conversions[0].UserDefined.ConversionFunction);
10974
10975    CheckMemberOperatorAccess(LParenLoc, Object.get(), 0, Best->FoundDecl);
10976    DiagnoseUseOfDecl(Best->FoundDecl, LParenLoc);
10977
10978    // We selected one of the surrogate functions that converts the
10979    // object parameter to a function pointer. Perform the conversion
10980    // on the object argument, then let ActOnCallExpr finish the job.
10981
10982    // Create an implicit member expr to refer to the conversion operator.
10983    // and then call it.
10984    ExprResult Call = BuildCXXMemberCallExpr(Object.get(), Best->FoundDecl,
10985                                             Conv, HadMultipleCandidates);
10986    if (Call.isInvalid())
10987      return ExprError();
10988    // Record usage of conversion in an implicit cast.
10989    Call = Owned(ImplicitCastExpr::Create(Context, Call.get()->getType(),
10990                                          CK_UserDefinedConversion,
10991                                          Call.get(), 0, VK_RValue));
10992
10993    return ActOnCallExpr(S, Call.get(), LParenLoc, MultiExprArg(Args, NumArgs),
10994                         RParenLoc);
10995  }
10996
10997  MarkFunctionReferenced(LParenLoc, Best->Function);
10998  CheckMemberOperatorAccess(LParenLoc, Object.get(), 0, Best->FoundDecl);
10999  DiagnoseUseOfDecl(Best->FoundDecl, LParenLoc);
11000
11001  // We found an overloaded operator(). Build a CXXOperatorCallExpr
11002  // that calls this method, using Object for the implicit object
11003  // parameter and passing along the remaining arguments.
11004  CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
11005  const FunctionProtoType *Proto =
11006    Method->getType()->getAs<FunctionProtoType>();
11007
11008  unsigned NumArgsInProto = Proto->getNumArgs();
11009  unsigned NumArgsToCheck = NumArgs;
11010
11011  // Build the full argument list for the method call (the
11012  // implicit object parameter is placed at the beginning of the
11013  // list).
11014  Expr **MethodArgs;
11015  if (NumArgs < NumArgsInProto) {
11016    NumArgsToCheck = NumArgsInProto;
11017    MethodArgs = new Expr*[NumArgsInProto + 1];
11018  } else {
11019    MethodArgs = new Expr*[NumArgs + 1];
11020  }
11021  MethodArgs[0] = Object.get();
11022  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
11023    MethodArgs[ArgIdx + 1] = Args[ArgIdx];
11024
11025  DeclarationNameInfo OpLocInfo(
11026               Context.DeclarationNames.getCXXOperatorName(OO_Call), LParenLoc);
11027  OpLocInfo.setCXXOperatorNameRange(SourceRange(LParenLoc, RParenLoc));
11028  ExprResult NewFn = CreateFunctionRefExpr(*this, Method,
11029                                           HadMultipleCandidates,
11030                                           OpLocInfo.getLoc(),
11031                                           OpLocInfo.getInfo());
11032  if (NewFn.isInvalid())
11033    return true;
11034
11035  // Once we've built TheCall, all of the expressions are properly
11036  // owned.
11037  QualType ResultTy = Method->getResultType();
11038  ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11039  ResultTy = ResultTy.getNonLValueExprType(Context);
11040
11041  CXXOperatorCallExpr *TheCall =
11042    new (Context) CXXOperatorCallExpr(Context, OO_Call, NewFn.take(),
11043                                      llvm::makeArrayRef(MethodArgs, NumArgs+1),
11044                                      ResultTy, VK, RParenLoc, false);
11045  delete [] MethodArgs;
11046
11047  if (CheckCallReturnType(Method->getResultType(), LParenLoc, TheCall,
11048                          Method))
11049    return true;
11050
11051  // We may have default arguments. If so, we need to allocate more
11052  // slots in the call for them.
11053  if (NumArgs < NumArgsInProto)
11054    TheCall->setNumArgs(Context, NumArgsInProto + 1);
11055  else if (NumArgs > NumArgsInProto)
11056    NumArgsToCheck = NumArgsInProto;
11057
11058  bool IsError = false;
11059
11060  // Initialize the implicit object parameter.
11061  ExprResult ObjRes =
11062    PerformObjectArgumentInitialization(Object.get(), /*Qualifier=*/0,
11063                                        Best->FoundDecl, Method);
11064  if (ObjRes.isInvalid())
11065    IsError = true;
11066  else
11067    Object = ObjRes;
11068  TheCall->setArg(0, Object.take());
11069
11070  // Check the argument types.
11071  for (unsigned i = 0; i != NumArgsToCheck; i++) {
11072    Expr *Arg;
11073    if (i < NumArgs) {
11074      Arg = Args[i];
11075
11076      // Pass the argument.
11077
11078      ExprResult InputInit
11079        = PerformCopyInitialization(InitializedEntity::InitializeParameter(
11080                                                    Context,
11081                                                    Method->getParamDecl(i)),
11082                                    SourceLocation(), Arg);
11083
11084      IsError |= InputInit.isInvalid();
11085      Arg = InputInit.takeAs<Expr>();
11086    } else {
11087      ExprResult DefArg
11088        = BuildCXXDefaultArgExpr(LParenLoc, Method, Method->getParamDecl(i));
11089      if (DefArg.isInvalid()) {
11090        IsError = true;
11091        break;
11092      }
11093
11094      Arg = DefArg.takeAs<Expr>();
11095    }
11096
11097    TheCall->setArg(i + 1, Arg);
11098  }
11099
11100  // If this is a variadic call, handle args passed through "...".
11101  if (Proto->isVariadic()) {
11102    // Promote the arguments (C99 6.5.2.2p7).
11103    for (unsigned i = NumArgsInProto; i < NumArgs; i++) {
11104      ExprResult Arg = DefaultVariadicArgumentPromotion(Args[i], VariadicMethod, 0);
11105      IsError |= Arg.isInvalid();
11106      TheCall->setArg(i + 1, Arg.take());
11107    }
11108  }
11109
11110  if (IsError) return true;
11111
11112  DiagnoseSentinelCalls(Method, LParenLoc, Args, NumArgs);
11113
11114  if (CheckFunctionCall(Method, TheCall, Proto))
11115    return true;
11116
11117  return MaybeBindToTemporary(TheCall);
11118}
11119
11120/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->
11121///  (if one exists), where @c Base is an expression of class type and
11122/// @c Member is the name of the member we're trying to find.
11123ExprResult
11124Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc) {
11125  assert(Base->getType()->isRecordType() &&
11126         "left-hand side must have class type");
11127
11128  if (checkPlaceholderForOverload(*this, Base))
11129    return ExprError();
11130
11131  SourceLocation Loc = Base->getExprLoc();
11132
11133  // C++ [over.ref]p1:
11134  //
11135  //   [...] An expression x->m is interpreted as (x.operator->())->m
11136  //   for a class object x of type T if T::operator->() exists and if
11137  //   the operator is selected as the best match function by the
11138  //   overload resolution mechanism (13.3).
11139  DeclarationName OpName =
11140    Context.DeclarationNames.getCXXOperatorName(OO_Arrow);
11141  OverloadCandidateSet CandidateSet(Loc);
11142  const RecordType *BaseRecord = Base->getType()->getAs<RecordType>();
11143
11144  if (RequireCompleteType(Loc, Base->getType(),
11145                          diag::err_typecheck_incomplete_tag, Base))
11146    return ExprError();
11147
11148  LookupResult R(*this, OpName, OpLoc, LookupOrdinaryName);
11149  LookupQualifiedName(R, BaseRecord->getDecl());
11150  R.suppressDiagnostics();
11151
11152  for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
11153       Oper != OperEnd; ++Oper) {
11154    AddMethodCandidate(Oper.getPair(), Base->getType(), Base->Classify(Context),
11155                       0, 0, CandidateSet, /*SuppressUserConversions=*/false);
11156  }
11157
11158  bool HadMultipleCandidates = (CandidateSet.size() > 1);
11159
11160  // Perform overload resolution.
11161  OverloadCandidateSet::iterator Best;
11162  switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
11163  case OR_Success:
11164    // Overload resolution succeeded; we'll build the call below.
11165    break;
11166
11167  case OR_No_Viable_Function:
11168    if (CandidateSet.empty())
11169      Diag(OpLoc, diag::err_typecheck_member_reference_arrow)
11170        << Base->getType() << Base->getSourceRange();
11171    else
11172      Diag(OpLoc, diag::err_ovl_no_viable_oper)
11173        << "operator->" << Base->getSourceRange();
11174    CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Base);
11175    return ExprError();
11176
11177  case OR_Ambiguous:
11178    Diag(OpLoc,  diag::err_ovl_ambiguous_oper_unary)
11179      << "->" << Base->getType() << Base->getSourceRange();
11180    CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Base);
11181    return ExprError();
11182
11183  case OR_Deleted:
11184    Diag(OpLoc,  diag::err_ovl_deleted_oper)
11185      << Best->Function->isDeleted()
11186      << "->"
11187      << getDeletedOrUnavailableSuffix(Best->Function)
11188      << Base->getSourceRange();
11189    CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Base);
11190    return ExprError();
11191  }
11192
11193  MarkFunctionReferenced(OpLoc, Best->Function);
11194  CheckMemberOperatorAccess(OpLoc, Base, 0, Best->FoundDecl);
11195  DiagnoseUseOfDecl(Best->FoundDecl, OpLoc);
11196
11197  // Convert the object parameter.
11198  CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
11199  ExprResult BaseResult =
11200    PerformObjectArgumentInitialization(Base, /*Qualifier=*/0,
11201                                        Best->FoundDecl, Method);
11202  if (BaseResult.isInvalid())
11203    return ExprError();
11204  Base = BaseResult.take();
11205
11206  // Build the operator call.
11207  ExprResult FnExpr = CreateFunctionRefExpr(*this, Method,
11208                                            HadMultipleCandidates, OpLoc);
11209  if (FnExpr.isInvalid())
11210    return ExprError();
11211
11212  QualType ResultTy = Method->getResultType();
11213  ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11214  ResultTy = ResultTy.getNonLValueExprType(Context);
11215  CXXOperatorCallExpr *TheCall =
11216    new (Context) CXXOperatorCallExpr(Context, OO_Arrow, FnExpr.take(),
11217                                      Base, ResultTy, VK, OpLoc, false);
11218
11219  if (CheckCallReturnType(Method->getResultType(), OpLoc, TheCall,
11220                          Method))
11221          return ExprError();
11222
11223  return MaybeBindToTemporary(TheCall);
11224}
11225
11226/// BuildLiteralOperatorCall - Build a UserDefinedLiteral by creating a call to
11227/// a literal operator described by the provided lookup results.
11228ExprResult Sema::BuildLiteralOperatorCall(LookupResult &R,
11229                                          DeclarationNameInfo &SuffixInfo,
11230                                          ArrayRef<Expr*> Args,
11231                                          SourceLocation LitEndLoc,
11232                                       TemplateArgumentListInfo *TemplateArgs) {
11233  SourceLocation UDSuffixLoc = SuffixInfo.getCXXLiteralOperatorNameLoc();
11234
11235  OverloadCandidateSet CandidateSet(UDSuffixLoc);
11236  AddFunctionCandidates(R.asUnresolvedSet(), Args, CandidateSet, true,
11237                        TemplateArgs);
11238
11239  bool HadMultipleCandidates = (CandidateSet.size() > 1);
11240
11241  // Perform overload resolution. This will usually be trivial, but might need
11242  // to perform substitutions for a literal operator template.
11243  OverloadCandidateSet::iterator Best;
11244  switch (CandidateSet.BestViableFunction(*this, UDSuffixLoc, Best)) {
11245  case OR_Success:
11246  case OR_Deleted:
11247    break;
11248
11249  case OR_No_Viable_Function:
11250    Diag(UDSuffixLoc, diag::err_ovl_no_viable_function_in_call)
11251      << R.getLookupName();
11252    CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11253    return ExprError();
11254
11255  case OR_Ambiguous:
11256    Diag(R.getNameLoc(), diag::err_ovl_ambiguous_call) << R.getLookupName();
11257    CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args);
11258    return ExprError();
11259  }
11260
11261  FunctionDecl *FD = Best->Function;
11262  MarkFunctionReferenced(UDSuffixLoc, FD);
11263  DiagnoseUseOfDecl(Best->FoundDecl, UDSuffixLoc);
11264
11265  ExprResult Fn = CreateFunctionRefExpr(*this, FD, HadMultipleCandidates,
11266                                        SuffixInfo.getLoc(),
11267                                        SuffixInfo.getInfo());
11268  if (Fn.isInvalid())
11269    return true;
11270
11271  // Check the argument types. This should almost always be a no-op, except
11272  // that array-to-pointer decay is applied to string literals.
11273  Expr *ConvArgs[2];
11274  for (unsigned ArgIdx = 0; ArgIdx != Args.size(); ++ArgIdx) {
11275    ExprResult InputInit = PerformCopyInitialization(
11276      InitializedEntity::InitializeParameter(Context, FD->getParamDecl(ArgIdx)),
11277      SourceLocation(), Args[ArgIdx]);
11278    if (InputInit.isInvalid())
11279      return true;
11280    ConvArgs[ArgIdx] = InputInit.take();
11281  }
11282
11283  QualType ResultTy = FD->getResultType();
11284  ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11285  ResultTy = ResultTy.getNonLValueExprType(Context);
11286
11287  UserDefinedLiteral *UDL =
11288    new (Context) UserDefinedLiteral(Context, Fn.take(),
11289                                     llvm::makeArrayRef(ConvArgs, Args.size()),
11290                                     ResultTy, VK, LitEndLoc, UDSuffixLoc);
11291
11292  if (CheckCallReturnType(FD->getResultType(), UDSuffixLoc, UDL, FD))
11293    return ExprError();
11294
11295  if (CheckFunctionCall(FD, UDL, NULL))
11296    return ExprError();
11297
11298  return MaybeBindToTemporary(UDL);
11299}
11300
11301/// Build a call to 'begin' or 'end' for a C++11 for-range statement. If the
11302/// given LookupResult is non-empty, it is assumed to describe a member which
11303/// will be invoked. Otherwise, the function will be found via argument
11304/// dependent lookup.
11305/// CallExpr is set to a valid expression and FRS_Success returned on success,
11306/// otherwise CallExpr is set to ExprError() and some non-success value
11307/// is returned.
11308Sema::ForRangeStatus
11309Sema::BuildForRangeBeginEndCall(Scope *S, SourceLocation Loc,
11310                                SourceLocation RangeLoc, VarDecl *Decl,
11311                                BeginEndFunction BEF,
11312                                const DeclarationNameInfo &NameInfo,
11313                                LookupResult &MemberLookup,
11314                                OverloadCandidateSet *CandidateSet,
11315                                Expr *Range, ExprResult *CallExpr) {
11316  CandidateSet->clear();
11317  if (!MemberLookup.empty()) {
11318    ExprResult MemberRef =
11319        BuildMemberReferenceExpr(Range, Range->getType(), Loc,
11320                                 /*IsPtr=*/false, CXXScopeSpec(),
11321                                 /*TemplateKWLoc=*/SourceLocation(),
11322                                 /*FirstQualifierInScope=*/0,
11323                                 MemberLookup,
11324                                 /*TemplateArgs=*/0);
11325    if (MemberRef.isInvalid()) {
11326      *CallExpr = ExprError();
11327      Diag(Range->getLocStart(), diag::note_in_for_range)
11328          << RangeLoc << BEF << Range->getType();
11329      return FRS_DiagnosticIssued;
11330    }
11331    *CallExpr = ActOnCallExpr(S, MemberRef.get(), Loc, MultiExprArg(), Loc, 0);
11332    if (CallExpr->isInvalid()) {
11333      *CallExpr = ExprError();
11334      Diag(Range->getLocStart(), diag::note_in_for_range)
11335          << RangeLoc << BEF << Range->getType();
11336      return FRS_DiagnosticIssued;
11337    }
11338  } else {
11339    UnresolvedSet<0> FoundNames;
11340    // C++11 [stmt.ranged]p1: For the purposes of this name lookup, namespace
11341    // std is an associated namespace.
11342    UnresolvedLookupExpr *Fn =
11343      UnresolvedLookupExpr::Create(Context, /*NamingClass=*/0,
11344                                   NestedNameSpecifierLoc(), NameInfo,
11345                                   /*NeedsADL=*/true, /*Overloaded=*/false,
11346                                   FoundNames.begin(), FoundNames.end(),
11347                                   /*LookInStdNamespace=*/true);
11348
11349    bool CandidateSetError = buildOverloadedCallSet(S, Fn, Fn, &Range, 1, Loc,
11350                                                    CandidateSet, CallExpr);
11351    if (CandidateSet->empty() || CandidateSetError) {
11352      *CallExpr = ExprError();
11353      return FRS_NoViableFunction;
11354    }
11355    OverloadCandidateSet::iterator Best;
11356    OverloadingResult OverloadResult =
11357        CandidateSet->BestViableFunction(*this, Fn->getLocStart(), Best);
11358
11359    if (OverloadResult == OR_No_Viable_Function) {
11360      *CallExpr = ExprError();
11361      return FRS_NoViableFunction;
11362    }
11363    *CallExpr = FinishOverloadedCallExpr(*this, S, Fn, Fn, Loc, &Range, 1,
11364                                         Loc, 0, CandidateSet, &Best,
11365                                         OverloadResult,
11366                                         /*AllowTypoCorrection=*/false);
11367    if (CallExpr->isInvalid() || OverloadResult != OR_Success) {
11368      *CallExpr = ExprError();
11369      Diag(Range->getLocStart(), diag::note_in_for_range)
11370          << RangeLoc << BEF << Range->getType();
11371      return FRS_DiagnosticIssued;
11372    }
11373  }
11374  return FRS_Success;
11375}
11376
11377
11378/// FixOverloadedFunctionReference - E is an expression that refers to
11379/// a C++ overloaded function (possibly with some parentheses and
11380/// perhaps a '&' around it). We have resolved the overloaded function
11381/// to the function declaration Fn, so patch up the expression E to
11382/// refer (possibly indirectly) to Fn. Returns the new expr.
11383Expr *Sema::FixOverloadedFunctionReference(Expr *E, DeclAccessPair Found,
11384                                           FunctionDecl *Fn) {
11385  if (ParenExpr *PE = dyn_cast<ParenExpr>(E)) {
11386    Expr *SubExpr = FixOverloadedFunctionReference(PE->getSubExpr(),
11387                                                   Found, Fn);
11388    if (SubExpr == PE->getSubExpr())
11389      return PE;
11390
11391    return new (Context) ParenExpr(PE->getLParen(), PE->getRParen(), SubExpr);
11392  }
11393
11394  if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) {
11395    Expr *SubExpr = FixOverloadedFunctionReference(ICE->getSubExpr(),
11396                                                   Found, Fn);
11397    assert(Context.hasSameType(ICE->getSubExpr()->getType(),
11398                               SubExpr->getType()) &&
11399           "Implicit cast type cannot be determined from overload");
11400    assert(ICE->path_empty() && "fixing up hierarchy conversion?");
11401    if (SubExpr == ICE->getSubExpr())
11402      return ICE;
11403
11404    return ImplicitCastExpr::Create(Context, ICE->getType(),
11405                                    ICE->getCastKind(),
11406                                    SubExpr, 0,
11407                                    ICE->getValueKind());
11408  }
11409
11410  if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(E)) {
11411    assert(UnOp->getOpcode() == UO_AddrOf &&
11412           "Can only take the address of an overloaded function");
11413    if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
11414      if (Method->isStatic()) {
11415        // Do nothing: static member functions aren't any different
11416        // from non-member functions.
11417      } else {
11418        // Fix the sub expression, which really has to be an
11419        // UnresolvedLookupExpr holding an overloaded member function
11420        // or template.
11421        Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(),
11422                                                       Found, Fn);
11423        if (SubExpr == UnOp->getSubExpr())
11424          return UnOp;
11425
11426        assert(isa<DeclRefExpr>(SubExpr)
11427               && "fixed to something other than a decl ref");
11428        assert(cast<DeclRefExpr>(SubExpr)->getQualifier()
11429               && "fixed to a member ref with no nested name qualifier");
11430
11431        // We have taken the address of a pointer to member
11432        // function. Perform the computation here so that we get the
11433        // appropriate pointer to member type.
11434        QualType ClassType
11435          = Context.getTypeDeclType(cast<RecordDecl>(Method->getDeclContext()));
11436        QualType MemPtrType
11437          = Context.getMemberPointerType(Fn->getType(), ClassType.getTypePtr());
11438
11439        return new (Context) UnaryOperator(SubExpr, UO_AddrOf, MemPtrType,
11440                                           VK_RValue, OK_Ordinary,
11441                                           UnOp->getOperatorLoc());
11442      }
11443    }
11444    Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(),
11445                                                   Found, Fn);
11446    if (SubExpr == UnOp->getSubExpr())
11447      return UnOp;
11448
11449    return new (Context) UnaryOperator(SubExpr, UO_AddrOf,
11450                                     Context.getPointerType(SubExpr->getType()),
11451                                       VK_RValue, OK_Ordinary,
11452                                       UnOp->getOperatorLoc());
11453  }
11454
11455  if (UnresolvedLookupExpr *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {
11456    // FIXME: avoid copy.
11457    TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
11458    if (ULE->hasExplicitTemplateArgs()) {
11459      ULE->copyTemplateArgumentsInto(TemplateArgsBuffer);
11460      TemplateArgs = &TemplateArgsBuffer;
11461    }
11462
11463    DeclRefExpr *DRE = DeclRefExpr::Create(Context,
11464                                           ULE->getQualifierLoc(),
11465                                           ULE->getTemplateKeywordLoc(),
11466                                           Fn,
11467                                           /*enclosing*/ false, // FIXME?
11468                                           ULE->getNameLoc(),
11469                                           Fn->getType(),
11470                                           VK_LValue,
11471                                           Found.getDecl(),
11472                                           TemplateArgs);
11473    MarkDeclRefReferenced(DRE);
11474    DRE->setHadMultipleCandidates(ULE->getNumDecls() > 1);
11475    return DRE;
11476  }
11477
11478  if (UnresolvedMemberExpr *MemExpr = dyn_cast<UnresolvedMemberExpr>(E)) {
11479    // FIXME: avoid copy.
11480    TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
11481    if (MemExpr->hasExplicitTemplateArgs()) {
11482      MemExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
11483      TemplateArgs = &TemplateArgsBuffer;
11484    }
11485
11486    Expr *Base;
11487
11488    // If we're filling in a static method where we used to have an
11489    // implicit member access, rewrite to a simple decl ref.
11490    if (MemExpr->isImplicitAccess()) {
11491      if (cast<CXXMethodDecl>(Fn)->isStatic()) {
11492        DeclRefExpr *DRE = DeclRefExpr::Create(Context,
11493                                               MemExpr->getQualifierLoc(),
11494                                               MemExpr->getTemplateKeywordLoc(),
11495                                               Fn,
11496                                               /*enclosing*/ false,
11497                                               MemExpr->getMemberLoc(),
11498                                               Fn->getType(),
11499                                               VK_LValue,
11500                                               Found.getDecl(),
11501                                               TemplateArgs);
11502        MarkDeclRefReferenced(DRE);
11503        DRE->setHadMultipleCandidates(MemExpr->getNumDecls() > 1);
11504        return DRE;
11505      } else {
11506        SourceLocation Loc = MemExpr->getMemberLoc();
11507        if (MemExpr->getQualifier())
11508          Loc = MemExpr->getQualifierLoc().getBeginLoc();
11509        CheckCXXThisCapture(Loc);
11510        Base = new (Context) CXXThisExpr(Loc,
11511                                         MemExpr->getBaseType(),
11512                                         /*isImplicit=*/true);
11513      }
11514    } else
11515      Base = MemExpr->getBase();
11516
11517    ExprValueKind valueKind;
11518    QualType type;
11519    if (cast<CXXMethodDecl>(Fn)->isStatic()) {
11520      valueKind = VK_LValue;
11521      type = Fn->getType();
11522    } else {
11523      valueKind = VK_RValue;
11524      type = Context.BoundMemberTy;
11525    }
11526
11527    MemberExpr *ME = MemberExpr::Create(Context, Base,
11528                                        MemExpr->isArrow(),
11529                                        MemExpr->getQualifierLoc(),
11530                                        MemExpr->getTemplateKeywordLoc(),
11531                                        Fn,
11532                                        Found,
11533                                        MemExpr->getMemberNameInfo(),
11534                                        TemplateArgs,
11535                                        type, valueKind, OK_Ordinary);
11536    ME->setHadMultipleCandidates(true);
11537    return ME;
11538  }
11539
11540  llvm_unreachable("Invalid reference to overloaded function");
11541}
11542
11543ExprResult Sema::FixOverloadedFunctionReference(ExprResult E,
11544                                                DeclAccessPair Found,
11545                                                FunctionDecl *Fn) {
11546  return Owned(FixOverloadedFunctionReference((Expr *)E.get(), Found, Fn));
11547}
11548
11549} // end namespace clang
11550