Оболочка для `__m256`, создающая ошибку сегментации с помощью конструктора - Windows 64 + MinGW + AVX

У меня есть профсоюз, который выглядит так

 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;
    }
}

__m256 должен быть выровнен по 32-байтовой границе для использования с функциями SSE и должен автоматически, даже внутри объединения.

И когда я делаю это

bareVec8f test = _mm256_set1_ps(1.0f);

Я получаю ошибку сегментации. Этот код должен работать из-за созданного мной конструктора. Тем не менее, когда я делаю это

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

Я не получаю ошибку сегментации.

Таким образом, поскольку это работает нормально, объединение, вероятно, выровнено должным образом, это просто ошибка сегментации, вызываемая конструктором

Я использую 64-битный компилятор Windows GCC

--------------------------------- РЕДАКТИРОВАТЬ Мэтту удалось привести простейший пример ошибки, которая, по-видимому, происходит здесь ,

#include <immintrin.h>

void foo(__m256 x) {}

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

Я собираю с-std=c++11 -mavx

Ответы на вопрос(1)

Ваш ответ на вопрос