]> granicus.if.org Git - clang/commitdiff
Add an InOverloadResolution flag to TryCopyInitialization.
authorAnders Carlsson <andersca@mac.com>
Thu, 27 Aug 2009 17:37:39 +0000 (17:37 +0000)
committerAnders Carlsson <andersca@mac.com>
Thu, 27 Aug 2009 17:37:39 +0000 (17:37 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80261 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/Sema.h
lib/Sema/SemaExprCXX.cpp
lib/Sema/SemaInit.cpp
lib/Sema/SemaOverload.cpp

index 45e66694620f97cbbe0d57968dedb5b34eacc821..ee4a9e49e7f0fb691f8a3f44676394f3756a024e 100644 (file)
@@ -766,7 +766,8 @@ public:
 
   ImplicitConversionSequence 
   TryCopyInitialization(Expr* From, QualType ToType,
-                        bool SuppressUserConversions, bool ForceRValue);
+                        bool SuppressUserConversions, bool ForceRValue,
+                        bool InOverloadResolution);
   bool PerformCopyInitialization(Expr *&From, QualType ToType, 
                                  const char *Flavor, bool Elidable = false);
 
index 55417c77d65f2769a212179cb2532bc92ab841b7..cdda6ab32ffe9e0ab450bbffab4326ddce0d16e8 100644 (file)
@@ -1238,7 +1238,8 @@ static bool TryClassUnification(Sema &Self, Expr *From, Expr *To,
       // standard doesn't say.
       ICS = Self.TryCopyInitialization(From, TTy, 
                                        /*SuppressUserConversions=*/false,
-                                       /*ForceRValue=*/false);
+                                       /*ForceRValue=*/false,
+                                       /*InOverloadResolution=*/false);
     }
   } else {
     //     -- Otherwise: E1 can be converted to match E2 if E1 can be
index f545db83f62271a8e44a7a830aea8af1025e5a54..fb75ff3cd6cc8f678bbad275e6b9865a7fbd6050 100644 (file)
@@ -666,7 +666,8 @@ void InitListChecker::CheckSubElementType(InitListExpr *IList,
       ImplicitConversionSequence ICS 
         = SemaRef.TryCopyInitialization(expr, ElemType,
                                         /*SuppressUserConversions=*/false,
-                                        /*ForceRValue=*/false);
+                                        /*ForceRValue=*/false,
+                                        /*InOverloadResolution=*/false);
 
       if (ICS.ConversionKind != ImplicitConversionSequence::BadConversion) {
         if (SemaRef.PerformImplicitConversion(expr, ElemType, ICS, 
index b4f25812ba2d9953f8e408624f50a6e5d2c1fb70..5c92e12f6973adcb2035d8ec520f6373f2e48e43 100644 (file)
@@ -1922,7 +1922,8 @@ Sema::CompareDerivedToBaseConversions(const StandardConversionSequence& SCS1,
 /// then we treat @p From as an rvalue, even if it is an lvalue.
 ImplicitConversionSequence 
 Sema::TryCopyInitialization(Expr *From, QualType ToType, 
-                            bool SuppressUserConversions, bool ForceRValue) {
+                            bool SuppressUserConversions, bool ForceRValue,
+                            bool InOverloadResolution) {
   if (ToType->isReferenceType()) {
     ImplicitConversionSequence ICS;
     CheckReferenceInit(From, ToType, 
@@ -2172,7 +2173,8 @@ Sema::AddOverloadCandidate(FunctionDecl *Function,
       QualType ParamType = Proto->getArgType(ArgIdx);
       Candidate.Conversions[ArgIdx] 
         = TryCopyInitialization(Args[ArgIdx], ParamType, 
-                                SuppressUserConversions, ForceRValue);
+                                SuppressUserConversions, ForceRValue,
+                                /*InOverloadResolution=*/true);
       if (Candidate.Conversions[ArgIdx].ConversionKind 
             == ImplicitConversionSequence::BadConversion) {
         Candidate.Viable = false;
@@ -2288,7 +2290,8 @@ Sema::AddMethodCandidate(CXXMethodDecl *Method, Expr *Object,
       QualType ParamType = Proto->getArgType(ArgIdx);
       Candidate.Conversions[ArgIdx + 1] 
         = TryCopyInitialization(Args[ArgIdx], ParamType, 
-                                SuppressUserConversions, ForceRValue);
+                                SuppressUserConversions, ForceRValue,
+                                /*InOverloadResolution=*/false);
       if (Candidate.Conversions[ArgIdx + 1].ConversionKind 
             == ImplicitConversionSequence::BadConversion) {
         Candidate.Viable = false;
@@ -2445,7 +2448,8 @@ Sema::AddConversionCandidate(CXXConversionDecl *Conversion,
   ImplicitConversionSequence ICS = 
     TryCopyInitialization(&Call, ToType, 
                           /*SuppressUserConversions=*/true,
-                          /*ForceRValue=*/false);
+                          /*ForceRValue=*/false,
+                          /*InOverloadResolution=*/false);
   
   switch (ICS.ConversionKind) {
   case ImplicitConversionSequence::StandardConversion:
@@ -2560,7 +2564,8 @@ void Sema::AddSurrogateCandidate(CXXConversionDecl *Conversion,
       Candidate.Conversions[ArgIdx + 1] 
         = TryCopyInitialization(Args[ArgIdx], ParamType, 
                                 /*SuppressUserConversions=*/false,
-                                /*ForceRValue=*/false);
+                                /*ForceRValue=*/false,
+                                /*InOverloadResolution=*/false);
       if (Candidate.Conversions[ArgIdx + 1].ConversionKind 
             == ImplicitConversionSequence::BadConversion) {
         Candidate.Viable = false;
@@ -2692,7 +2697,8 @@ void Sema::AddBuiltinCandidate(QualType ResultTy, QualType *ParamTys,
       Candidate.Conversions[ArgIdx] 
         = TryCopyInitialization(Args[ArgIdx], ParamTys[ArgIdx], 
                                 ArgIdx == 0 && IsAssignmentOperator,
-                                /*ForceRValue=*/false);
+                                /*ForceRValue=*/false,
+                                /*InOverloadResolution=*/false);
     }
     if (Candidate.Conversions[ArgIdx].ConversionKind 
         == ImplicitConversionSequence::BadConversion) {