1/* { dg-do compile } */
2/* { dg-options "-msse" { target { i?86-*-* x86_64-*-* } } } */
3// This used to fail as we would try to expand a VCE where one side had
4// a mode of BLKmode and the other side was a vector mode.
5#define vector __attribute__((vector_size(16) ))
6struct struct1  {
7  union { float a[3]; }    vmx;
8  struct struct2   {
9    struct2(const struct2& r) {}
10  } w;
11} __attribute__((aligned(16)));
12struct struct3  {
13  vector float vmx;
14  operator const struct1& () const{
15    return *reinterpret_cast<const struct1*>(this);
16  }
17};
18struct3 func3( struct3 V1);
19struct3 func2( void );
20void func1( )  {
21  struct1 vVec = func2() ;
22  func3 ( (struct3&)vVec );
23}
24