L'istanza minima del mio problema che mi è venuto in mente è la seguente:Segmentation fault dopo il ritorno di una struttura allineata
struct __attribute__((aligned(16))) Foo {
float x, y, z;
Foo(float x, float y, float z) : x(x), y(y), z(z) {}
};
class Bar {
public:
Foo foo;
Bar(const Foo &foo) : foo(foo) {}
Foo bar() { return foo; }
};
int main()
{
Bar *bar = new Bar(Foo(0.0f, 0.0f, 0.0f));
bar->bar();
return 0;
}
Questo pezzo di risultati di codice in segmentation fault quando eseguito se compilato con clang++
(versione 3.4, quello predefinito disponibile in Ubuntu 14.04). Il problema non si verifica quando compilo questo con g++
(versione 4.8.4). È un bug del compilatore o c'è qualche problema con il mio codice?
Come nota: il programma non si blocca se bar
è STACK-assegnati, cioè .:
Bar bar(Foo(0.0f, 0.0f, 0.0f));
bar.bar();
funziona come previsto.
Fa alcuna differenza se si cancella la barra; prima di uscire? –
@ BarışUşaklı: No. Il problema è precisamente con l'istruzione 'return foo;' Se lo sostituisco, ad esempio, 'return Foo (0.0f, 0.0f, 0.0f);' il problema è scomparso. – mrhania
Sollevalo come un bug nel sito del bug appropriato? Questo non è un sito di segnalazione bug. –