// RUN: %clang_cc1 %s -triple=amdgcn-amd-amdhsa -emit-llvm -o - | FileCheck %s template struct my_vector_base; template struct my_vector_base { typedef T Native_vec_ __attribute__((ext_vector_type(1))); union { Native_vec_ data; struct { T x; }; }; }; template struct my_vector_type : public my_vector_base { using my_vector_base::data; using typename my_vector_base::Native_vec_; template< typename U> my_vector_type(U x) noexcept { for (auto i = 0u; i != rank; ++i) data[i] = x; } my_vector_type& operator+=(const my_vector_type& x) noexcept { data += x.data; return *this; } }; template inline my_vector_type operator+( const my_vector_type& x, const my_vector_type& y) noexcept { return my_vector_type{x} += y; } using char1 = my_vector_type; int mane() { char1 f1{1}; char1 f2{1}; // CHECK: %[[a:[^ ]+]] = addrspacecast i16 addrspace(5)* %{{[^ ]+}} to i16* // CHECK: %[[a:[^ ]+]] = addrspacecast %{{[^ ]+}} addrspace(5)* %{{[^ ]+}} to %{{[^ ]+}} char1 f3 = f1 + f2; }