diff --git a/clang/test/SemaCXX/vector.cpp b/clang/test/SemaCXX/vector.cpp --- a/clang/test/SemaCXX/vector.cpp +++ b/clang/test/SemaCXX/vector.cpp @@ -772,3 +772,27 @@ } #endif } + +namespace { +// Test ext_vector_type builtin operators in the presence of implicit conversions + +typedef int __attribute__((ext_vector_type(4))) vec4i; + +struct simd4i { + vec4i x; + + simd4i(const vec4i& val): x(val) {} + operator vec4i() const { return x; } +}; + +simd4i operator| (const simd4i& lhs, const simd4i& rhs) { return vec4i(lhs) | vec4i(rhs); } +simd4i& operator|= (simd4i& lhs, const simd4i& rhs) { return lhs = lhs | rhs; } + +simd4i test1(simd4i a, vec4i b) { + return a |= b; +} + +simd4i test2(simd4i a, vec4i b) { + return a | b; +} +}