https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80583
Bug ID: 80583 Summary: ICE with target_clones and vectorized float: internal compiler error: in convert_move, at expr.c:270 Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: blaffablaffa at gmail dot com Target Milestone: --- The test case in attachment unfortunately is relatively large, but I couldn't isolate the issue. The main() of this source file is prepended with #ifdef __x86_64__ __attribute__((target_clones("default","avx","avx2"))) #endif I use some operations on vector float types: typedef float __attribute__((vector_size(32))) float8; typedef float __attribute__((vector_size(16))) float4; typedef float __attribute__((vector_size(8))) float2; The compiler appears to stumble on some arithmetic operations on these Compile with "g++ -std=c++1y -Wall -c -o main.o main.cpp". Error is: In file included from /usr/include/c++/6.3.1/bits/stl_algo.h:61:0, from /usr/include/c++/6.3.1/algorithm:62, from main.cpp:4: /usr/include/c++/6.3.1/bits/stl_heap.h: In function ‘void std::__adjust_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare) [with _RandomAccessIterator = armorset*; _Distance = long int; _Tp = armorset; _Compare = __gnu_cxx::__ops::_Iter_less_iter]’: /usr/include/c++/6.3.1/bits/stl_heap.h:209:5: note: The ABI for passing parameters with 32-byte alignment has changed in GCC 4.6 __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex, ^~~~~~~~~~~~~ main.cpp: In function ‘int main.avx.298(int, char**)’: main.cpp:477:85: internal compiler error: in convert_move, at expr.c:270 auto body_legs_abs = (body->absorptions.all - 100) * (legs->absorptions.all - 100); ^ Please submit a full bug report, with preprocessed source if appropriate. See <http://bugzilla.redhat.com/bugzilla> for instructions. Preprocessed source stored into /tmp/ccUaXkg3.out file, please attach this to your bugreport. [pisto@pisto ds3]$ g++ -std=c++1y -Wall -c -o main.o main.cpp In file included from /usr/include/c++/6.3.1/bits/stl_algo.h:61:0, from /usr/include/c++/6.3.1/algorithm:62, from main.cpp:4: /usr/include/c++/6.3.1/bits/stl_heap.h: In function ‘void std::__adjust_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare) [with _RandomAccessIterator = armorset*; _Distance = long int; _Tp = armorset; _Compare = __gnu_cxx::__ops::_Iter_less_iter]’: /usr/include/c++/6.3.1/bits/stl_heap.h:209:5: note: The ABI for passing parameters with 32-byte alignment has changed in GCC 4.6 __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex, ^~~~~~~~~~~~~ main.cpp: In function ‘int main.avx.0(int, char**)’: main.cpp:477:44: internal compiler error: in convert_move, at expr.c:270 auto body_legs_abs = (body->absorptions.all - 100) * (legs->absorptions.all - 100); ~~~~~~~~~~~~~~~~~~^~~ Please submit a full bug report, with preprocessed source if appropriate. See <http://bugzilla.redhat.com/bugzilla> for instructions. Preprocessed source stored into /tmp/cc8Qjc34.out file, please attach this to your bugreport.