Author: dpolukhin Date: Tue Jul 19 06:29:16 2016 New Revision: 275970 URL: http://llvm.org/viewvc/llvm-project?rev=275970&view=rev Log: Deprecated (legacy) string literal conversion to 'char *' causes strange overloading resolution
It's a patch for PR28050. Seems like overloading resolution wipes out the first standard conversion sequence (before user-defined conversion) in case of deprecated string literal conversion. Differential revision: https://reviews.llvm.org/D21228 Patch by Alexander Makarov Added: cfe/trunk/test/SemaCXX/pr28050.cpp (with props) Modified: cfe/trunk/include/clang/Sema/Overload.h cfe/trunk/lib/Sema/SemaOverload.cpp Modified: cfe/trunk/include/clang/Sema/Overload.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Overload.h?rev=275970&r1=275969&r2=275970&view=diff ============================================================================== --- cfe/trunk/include/clang/Sema/Overload.h (original) +++ cfe/trunk/include/clang/Sema/Overload.h Tue Jul 19 06:29:16 2016 @@ -428,8 +428,11 @@ namespace clang { }; ImplicitConversionSequence() - : ConversionKind(Uninitialized), StdInitializerListElement(false) - {} + : ConversionKind(Uninitialized), StdInitializerListElement(false) { + Standard.First = ICK_Identity; + Standard.Second = ICK_Identity; + Standard.Third = ICK_Identity; + } ~ImplicitConversionSequence() { destruct(); } Modified: cfe/trunk/lib/Sema/SemaOverload.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaOverload.cpp?rev=275970&r1=275969&r2=275970&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaOverload.cpp (original) +++ cfe/trunk/lib/Sema/SemaOverload.cpp Tue Jul 19 06:29:16 2016 @@ -1199,7 +1199,6 @@ TryUserDefinedConversion(Sema &S, Expr * case OR_Success: case OR_Deleted: ICS.setUserDefined(); - ICS.UserDefined.Before.setAsIdentityConversion(); // C++ [over.ics.user]p4: // A conversion of an expression of class type to the same class // type is given Exact Match rank, and a conversion of an @@ -4540,7 +4539,6 @@ TryReferenceInit(Sema &S, Expr *Init, Qu return ICS; } - ICS.UserDefined.Before.setAsIdentityConversion(); ICS.UserDefined.After.ReferenceBinding = true; ICS.UserDefined.After.IsLvalueReference = !isRValRef; ICS.UserDefined.After.BindsToFunctionLvalue = false; Added: cfe/trunk/test/SemaCXX/pr28050.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/pr28050.cpp?rev=275970&view=auto ============================================================================== --- cfe/trunk/test/SemaCXX/pr28050.cpp (added) +++ cfe/trunk/test/SemaCXX/pr28050.cpp Tue Jul 19 06:29:16 2016 @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -triple x86_64-pc-windows-msvc -std=c++11 %s -fsyntax-only +// +// expected-no-diagnostics + +class A { +public: + A(char *s) {} + A(A &&) = delete; +}; + +int main() { A a("OK"); } Propchange: cfe/trunk/test/SemaCXX/pr28050.cpp ------------------------------------------------------------------------------ svn:eol-style = native Propchange: cfe/trunk/test/SemaCXX/pr28050.cpp ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Rev URL" Propchange: cfe/trunk/test/SemaCXX/pr28050.cpp ------------------------------------------------------------------------------ svn:mime-type = text/plain _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits