[cfe-commits] r104085 - /cfe/trunk/test/SemaCXX/vector.cpp
Douglas Gregor
dgregor at apple.com
Tue May 18 16:05:44 PDT 2010
Author: dgregor
Date: Tue May 18 18:05:44 2010
New Revision: 104085
URL: http://llvm.org/viewvc/llvm-project?rev=104085&view=rev
Log:
Basic test for user-defined conversions involving vector types
Modified:
cfe/trunk/test/SemaCXX/vector.cpp
Modified: cfe/trunk/test/SemaCXX/vector.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/vector.cpp?rev=104085&r1=104084&r2=104085&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/vector.cpp (original)
+++ cfe/trunk/test/SemaCXX/vector.cpp Tue May 18 18:05:44 2010
@@ -4,7 +4,6 @@
typedef char char16_e __attribute__ ((__ext_vector_type__ (16)));
typedef long long longlong16_e __attribute__ ((__ext_vector_type__ (2)));
-#if 1
// Test overloading and function calls with vector types.
void f0(char16);
@@ -25,7 +24,8 @@
f1(ll16e); // expected-error{{call to 'f1' is ambiguous}}
}
-void f2(char16_e); // expected-note{{no known conversion from 'longlong16_e' to 'char16_e' for 1st argument}}
+void f2(char16_e); // expected-note{{no known conversion from 'longlong16_e' to 'char16_e' for 1st argument}} \
+ // expected-note{{candidate function not viable: no known conversion from 'convertible_to<longlong16_e>' to 'char16_e' for 1st argument}}
void f2_test(char16 c16, longlong16 ll16, char16_e c16e, longlong16_e ll16e) {
f2(c16);
@@ -35,7 +35,6 @@
f2('a');
f2(17);
}
-#endif
// Test the conditional operator with vector types.
void conditional(bool Cond, char16 c16, longlong16 ll16, char16_e c16e,
@@ -100,3 +99,24 @@
(void)reinterpret_cast<longlong16>(ll16e);
(void)reinterpret_cast<longlong16_e>(ll16e);
}
+
+template<typename T>
+struct convertible_to {
+ operator T() const;
+};
+
+void test_implicit_conversions(char16 c16, longlong16 ll16, char16_e c16e,
+ longlong16_e ll16e,
+ convertible_to<char16> to_c16,
+ convertible_to<longlong16> to_ll16,
+ convertible_to<char16_e> to_c16e,
+ convertible_to<longlong16_e> to_ll16e) {
+ f0(to_c16);
+ f0(to_ll16);
+ f0(to_c16e);
+ f0(to_ll16e);
+ f2(to_c16);
+ f2(to_ll16);
+ f2(to_c16e);
+ f2(to_ll16e); // expected-error{{no matching function}}
+}
More information about the cfe-commits
mailing list