http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53113
Bug #: 53113
Summary: Build fails in x86_avx.cc if AVX disabled but
supported by as (Solaris & Linux)
Classification: Unclassified
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libitm
AssignedTo: [email protected]
ReportedBy: [email protected]
4.7.0 fails to bootstrap on x86_64 (tested on Solaris 10 and CentOS 5.5) if the
CPU doesn't support AVX (Xeon E5420) but the assembler (GNU as 2.22) does. For
campatibility reasons I'm using "-march=core2", and GCC 4.6.3 builds without
any problem with the same build script.
checking whether
/opt/SP/build/gcc/gcc-4.7.0/host-x86_64-unknown-linux-gnu/gcc/xgcc
-B/opt/SP/build/gcc/gcc-4.7.0/host-x86_64-unknown-linux-gnu/gcc/
-B/opt/SP/gcc/gcc-4.7.0/x86_64-unknown-linux-gnu/bin/
-B/opt/SP/gcc/gcc-4.7.0/x86_64-unknown-linux-gnu/lib/ -isystem
/opt/SP/gcc/gcc-4.7.0/x86_64-unknown-linux-gnu/include -isystem
/opt/SP/gcc/gcc-4.7.0/x86_64-unknown-linux-gnu/sys-include -m32 and cc
understand -c and -o together... ../.././libitm/config/x86/x86_avx.cc:83:1:
error: â_ITM_TYPE_M256â does not name a type
../.././libitm/config/x86/x86_avx.cc:83:1: error: â_ITM_TYPE_M256â does not
name a type
../.././libitm/config/x86/x86_avx.cc:83:1: error: â_ITM_TYPE_M256â does not
name a type
../.././libitm/config/x86/x86_avx.cc:83:1: error: â_ITM_TYPE_M256â does not
name a type
../.././libitm/config/x86/x86_avx.cc:83:1: error: variable or field
â_ITM_WM256â declared void
../.././libitm/config/x86/x86_avx.cc:83:1: error: â_ITM_TYPE_M256â was not
declared in this scope
../.././libitm/config/x86/x86_avx.cc:83:1: error: âptrâ was not declared in
this scope
../.././libitm/config/x86/x86_avx.cc:83:1: error: â_ITM_TYPE_M256â was not
declared in this scope
../.././libitm/config/x86/x86_avx.cc:83:1: error: variable or field
â_ITM_WaRM256â declared void
../.././libitm/config/x86/x86_avx.cc:83:1: error: â_ITM_TYPE_M256â was not
declared in this scope
../.././libitm/config/x86/x86_avx.cc:83:1: error: âptrâ was not declared in
this scope
../.././libitm/config/x86/x86_avx.cc:83:1: error: â_ITM_TYPE_M256â was not
declared in this scope
../.././libitm/config/x86/x86_avx.cc:83:1: error: variable or field
â_ITM_WaWM256â declared void
../.././libitm/config/x86/x86_avx.cc:83:1: error: â_ITM_TYPE_M256â was not
declared in this scope
../.././libitm/config/x86/x86_avx.cc:83:1: error: âptrâ was not declared in
this scope
../.././libitm/config/x86/x86_avx.cc:83:1: error: â_ITM_TYPE_M256â was not
declared in this scope
../.././libitm/config/x86/x86_avx.cc:86:19: error: â_ITM_TYPE_M256â does not
name a type
../.././libitm/config/x86/x86_avx.cc:86:35: error: ISO C++ forbids declaration
of âptrâ with no type [-fpermissive]
gmake[4]: *** [x86_avx.lo] Error 1
gmake[4]: Leaving directory
`/opt/SP/build/gcc/gcc-4.7.0/x86_64-unknown-linux-gnu/libitm'
I'm not a programmer, but on a first look the declaration of _ITM_TYPE_M256
seems to be missing if __AVX__ is not set, but HAVE_AS_AVX:
./libitm/libitm.h
# ifdef __AVX__
typedef float _ITM_TYPE_M256 __attribute__((vector_size(32), may_alias));
ITM_BARRIERS(M256)
ITM_LOG(M256)
# endif
./libitm/config/x86/x86_avx.cc
#ifndef HAVE_AS_AVX
// If we don't have an AVX capable assembler, we didn't set -mavx on the
// command-line either, which means that libitm.h defined neither this type
// nor the functions in this file. Define the type and unconditionally
// wrap the file in extern "C" to make up for the lack of pre-declaration.
typedef float _ITM_TYPE_M256 __attribute__((vector_size(32), may_alias));
#endif
But simply adding the definition (if defined(__AVX__) || defined(HAVE_AS_AVX))
just leads to an "avx vector argument without avx enabled changes the abi"
error. As said above, I'm not a programmer.
Adding "-mno-avx" does not change anything. I would expect AVX to be completely
disabled if CPU and target architecture do not support it?