http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56038
Bug #: 56038
Summary: declarations in xmmintrin.h conflict with mingw-w64
intrin.h in c++ mode
Classification: Unclassified
Product: gcc
Version: 4.8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: erik-gcc-bugzi...@vanpienbroek.nl
CC: ktiet...@googlemail.com
Target: i686-w64-mingw32
Build: gcc 4.8 20130106 snapshot, r194954
While testing gcc 4.8 (for the target i686-w64-mingw32) I stumbled across a
compile failure while trying to build Qt5. Here's a minimal testcase to
reproduce this compile failure:
#include algorithm
#include intrin.h
int main()
{
return 0;
}
When trying to build this with gcc 4.8 and a recent mingw-w64 trunk snapshot
the following error occurs:
$ i686-w64-mingw32-g++ -O2 -msse2 -std=c++11 test.cpp
In file included from
/usr/lib64/gcc/i686-w64-mingw32/4.8.0/include/x86intrin.h:34:0,
from
/usr/i686-w64-mingw32/sys-root/mingw/include/c++/bits/opt_random.h:33,
from
/usr/i686-w64-mingw32/sys-root/mingw/include/c++/random:51,
from
/usr/i686-w64-mingw32/sys-root/mingw/include/c++/bits/stl_algo.h:67,
from
/usr/i686-w64-mingw32/sys-root/mingw/include/c++/algorithm:63,
from test.cpp:1:
/usr/lib64/gcc/i686-w64-mingw32/4.8.0/include/xmmintrin.h:997:1: error:
previous declaration of 'int _m_pextrw(__m64, int)' with 'C++' linkage
_m_pextrw (__m64 const __A, int const __N)
^
In file included from test.cpp:2:0:
/usr/i686-w64-mingw32/sys-root/mingw/include/intrin.h:561:5: error: conflicts
with new declaration with 'C' linkage
__MACHINEX86X_NOX64(int _m_pextrw(__m64,int))
^
In file included from
/usr/lib64/gcc/i686-w64-mingw32/4.8.0/include/x86intrin.h:34:0,
from
/usr/i686-w64-mingw32/sys-root/mingw/include/c++/bits/opt_random.h:33,
from
/usr/i686-w64-mingw32/sys-root/mingw/include/c++/random:51,
from
/usr/i686-w64-mingw32/sys-root/mingw/include/c++/bits/stl_algo.h:67,
from
/usr/i686-w64-mingw32/sys-root/mingw/include/c++/algorithm:63,
from test.cpp:1:
/usr/lib64/gcc/i686-w64-mingw32/4.8.0/include/xmmintrin.h:1018:1: error:
previous declaration of '__m64 _m_pinsrw(__m64, int, int)' with 'C++' linkage
_m_pinsrw (__m64 const __A, int const __D, int const __N)
^
In file included from test.cpp:2:0:
/usr/i686-w64-mingw32/sys-root/mingw/include/intrin.h:566:5: error: conflicts
with new declaration with 'C' linkage
__MACHINEX86X_NOX64(__m64 _m_pinsrw(__m64,int,int))
^
In file included from
/usr/lib64/gcc/i686-w64-mingw32/4.8.0/include/x86intrin.h:34:0,
from
/usr/i686-w64-mingw32/sys-root/mingw/include/c++/bits/opt_random.h:33,
from
/usr/i686-w64-mingw32/sys-root/mingw/include/c++/random:51,
from
/usr/i686-w64-mingw32/sys-root/mingw/include/c++/bits/stl_algo.h:67,
from
/usr/i686-w64-mingw32/sys-root/mingw/include/c++/algorithm:63,
from test.cpp:1:
/usr/lib64/gcc/i686-w64-mingw32/4.8.0/include/xmmintrin.h:1119:1: error:
previous declaration of '__m64 _m_pshufw(__m64, int)' with 'C++' linkage
_m_pshufw (__m64 __A, int const __N)
^
In file included from test.cpp:2:0:
/usr/i686-w64-mingw32/sys-root/mingw/include/intrin.h:578:5: error: conflicts
with new declaration with 'C' linkage
__MACHINEX86X_NOX64(__m64 _m_pshufw(__m64,int))
^
In file included from
/usr/lib64/gcc/i686-w64-mingw32/4.8.0/include/x86intrin.h:34:0,
from
/usr/i686-w64-mingw32/sys-root/mingw/include/c++/bits/opt_random.h:33,
from
/usr/i686-w64-mingw32/sys-root/mingw/include/c++/random:51,
from
/usr/i686-w64-mingw32/sys-root/mingw/include/c++/bits/stl_algo.h:67,
from
/usr/i686-w64-mingw32/sys-root/mingw/include/c++/algorithm:63,
from test.cpp:1:
/usr/lib64/gcc/i686-w64-mingw32/4.8.0/include/xmmintrin.h:716:1: error:
previous declaration of '__m128 _mm_shuffle_ps(__m128, __m128, int)' with 'C++'
linkage
_mm_shuffle_ps (__m128 __A, __m128 __B, int const __mask)
^
In file included from test.cpp:2:0:
/usr/i686-w64-mingw32/sys-root/mingw/include/intrin.h:656:5: error: conflicts
with new declaration with 'C' linkage
__MACHINEX86X_NOIA64(__m128 _mm_shuffle_ps(__m128,__m128,int const))
^
The above testcase built fine with gcc 4.7 and the exact same version of
mingw-w64, so I consider this a regression in gcc 4.8
With the (pretty straightforward) change below I managed to resolve the issue:
--- gcc/config/i386/xmmintrin.h.orig2013-01-18 14:57:27.762645582