Wrapper para `__m256` produzindo falha de segmentação com construtor - Windows 64 + MinGW + AVX Issues

Eu tenho uma união que se parece com isso

 union bareVec8f { 
    __m256 m256; //avx 8x float vector
    float floats[8];
    int ints[8];
    inline bareVec8f(){
    }
    inline bareVec8f(__m256 vec){
        this->m256 = vec;
    }
    inline bareVec8f &operator=(__m256 m256) {
        this->m256 = m256;
        return *this;
    }

    inline operator __m256 &() {
        return m256;
    }
}

o __m256 precisa estar alinhado no limite de 32 bytes para ser usado com as funções SSE e deve ser automaticamente, mesmo dentro da união.

E quando eu faço isso

bareVec8f test = _mm256_set1_ps(1.0f);

Eu recebo uma falha de segmentação. Este código deve funcionar por causa do construtor que fiz. No entanto, quando eu faço isso

bareVec8f test;
test.m256 = _mm256_set1_ps(8.f);

Não recebo uma falha de segmentação.

Então, como isso funciona bem, a união provavelmente está alinhada corretamente, apenas algumas falhas de segmentação são causadas pelo construtor que parece

Estou usando o compilador gcc de 64 bits do windows

--------------------------------- EDIT Matt conseguiu produzir o exemplo mais simples do erro que parece estar acontecendo aqui .

#include <immintrin.h>

void foo(__m256 x) {}

int main()
{
    __m256 r = _mm256_set1_ps(0.0f);
    foo(r);
}

Estou compilando com-std=c++11 -mavx

questionAnswers(1)

yourAnswerToTheQuestion