From 42860f1133f1ea37cc7a8a590436f169bdfc8755 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 10 May 2013 20:29:50 +0000 Subject: [PATCH] PR15966: don't get confused by a complex integer -> complex integer conversion and misclassify it as a complex-real conversion. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181626 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaOverload.cpp | 2 +- test/SemaCXX/complex-overload.cpp | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp index 3461f91ff3..dbe151c782 100644 --- a/lib/Sema/SemaOverload.cpp +++ b/lib/Sema/SemaOverload.cpp @@ -1591,7 +1591,7 @@ static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType, // Integral conversions (C++ 4.7). SCS.Second = ICK_Integral_Conversion; FromType = ToType.getUnqualifiedType(); - } else if (FromType->isAnyComplexType() && ToType->isComplexType()) { + } else if (FromType->isAnyComplexType() && ToType->isAnyComplexType()) { // Complex conversions (C99 6.3.1.6) SCS.Second = ICK_Complex_Conversion; FromType = ToType.getUnqualifiedType(); diff --git a/test/SemaCXX/complex-overload.cpp b/test/SemaCXX/complex-overload.cpp index 719a850dbf..1381968751 100644 --- a/test/SemaCXX/complex-overload.cpp +++ b/test/SemaCXX/complex-overload.cpp @@ -42,9 +42,15 @@ void test_promote_or_convert2(float _Complex fc) { int *cp = promote_or_convert2(fc); } -char *promote_or_convert3(int _Complex); -int *promote_or_convert3(long _Complex); +char *promote_or_convert3(int _Complex); // expected-note {{candidate}} +int *promote_or_convert3(long _Complex); // expected-note {{candidate}} void test_promote_or_convert3(short _Complex sc) { - char *cp = promote_or_convert3(sc); + char *cp1 = promote_or_convert3(sc); + char *cp2 = promote_or_convert3(1i); + int *cp3 = promote_or_convert3(1il); + int *cp4 = promote_or_convert3(1ill); // expected-error {{ambiguous}} } + +char &convert4(short _Complex); +char &test_convert4 = convert4(1i); -- 2.40.0