r181626 - PR15966: don't get confused by a complex integer -> complex integer conversion

Richard Smith richard-llvm at metafoo.co.uk
Fri May 10 13:29:50 PDT 2013


Author: rsmith
Date: Fri May 10 15:29:50 2013
New Revision: 181626

URL: http://llvm.org/viewvc/llvm-project?rev=181626&view=rev
Log:
PR15966: don't get confused by a complex integer -> complex integer conversion
and misclassify it as a complex-real conversion.

Modified:
    cfe/trunk/lib/Sema/SemaOverload.cpp
    cfe/trunk/test/SemaCXX/complex-overload.cpp

Modified: cfe/trunk/lib/Sema/SemaOverload.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaOverload.cpp?rev=181626&r1=181625&r2=181626&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaOverload.cpp (original)
+++ cfe/trunk/lib/Sema/SemaOverload.cpp Fri May 10 15:29:50 2013
@@ -1591,7 +1591,7 @@ static bool IsStandardConversion(Sema &S
     // 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();

Modified: cfe/trunk/test/SemaCXX/complex-overload.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/complex-overload.cpp?rev=181626&r1=181625&r2=181626&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/complex-overload.cpp (original)
+++ cfe/trunk/test/SemaCXX/complex-overload.cpp Fri May 10 15:29:50 2013
@@ -42,9 +42,15 @@ void test_promote_or_convert2(float _Com
   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);





More information about the cfe-commits mailing list