The command line version from messerlab.org is failing to build on my Linux machine. The machine is an Ubuntu 15.10:
Distributor ID: Ubuntu
Description: Ubuntu 15.10
Release: 15.10
Codename: wily
I see errors with the following compilers:
g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 5.2.1-22ubuntu2' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 5.2.1 20151010 (Ubuntu 5.2.1-22ubuntu2)
clang++-3.7 (I edited Makefile to use this).
I get the same errors with both. This is the list of errors from clang++ 3.7:
./core/slim_sim.cpp:1311:23: error: invalid operands to binary expression ('const std::type_info' and
'const std::type_info')
if ((typeid(_sig) != typeid(_previous_sig)) ||
~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~
1 error generated.
./eidos/eidos_functions.cpp:794:23: error: cannot initialize a parameter of type 'long long *' with an rvalue of type
'int64_t *' (aka 'long *')
bool overflow = Eidos_smulll_overflow(product, operand, &product);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./eidos/eidos_global.h:154:76: note: expanded from macro 'Eidos_smulll_overflow'
define Eidos_smulll_overflow(a, b, c) __builtin_smulll_overflow((a), (b), (c))
./eidos/eidos_functions.cpp:855:23: error: cannot initialize a parameter of type 'long long *' with an rvalue of type
'int64_t *' (aka 'long *')
bool overflow = Eidos_saddll_overflow(sum, operand, &sum);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./eidos/eidos_global.h:152:76: note: expanded from macro 'Eidos_saddll_overflow'
define Eidos_saddll_overflow(a, b, c) __builtin_saddll_overflow((a), (b), (c))
./eidos/eidos_functions.cpp:1284:23: error: cannot initialize a parameter of type 'long long *' with an rvalue of type
'int64_t *' (aka 'long *')
bool overflow = Eidos_smulll_overflow(old_product, temp, &product);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./eidos/eidos_global.h:154:76: note: expanded from macro 'Eidos_smulll_overflow'
define Eidos_smulll_overflow(a, b, c) __builtin_smulll_overflow((a), (b), (c))
./eidos/eidos_functions.cpp:1357:23: error: cannot initialize a parameter of type 'long long *' with an rvalue of type
'int64_t *' (aka 'long *')
bool overflow = Eidos_saddll_overflow(old_sum, temp, &sum);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./eidos/eidos_global.h:152:76: note: expanded from macro 'Eidos_saddll_overflow'
define Eidos_saddll_overflow(a, b, c) __builtin_saddll_overflow((a), (b), (c))
4 errors generated.
./eidos/eidos_interpreter.cpp:1449:22: error: cannot initialize a parameter of type 'long long *' with an rvalue of type
'int64_t *' (aka 'long *')
bool overflow = Eidos_saddll_overflow(first_operand, second_operand, &add_result);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./eidos/eidos_global.h:152:76: note: expanded from macro 'Eidos_saddll_overflow'
define Eidos_saddll_overflow(a, b, c) __builtin_saddll_overflow((a), (b), (c))
./eidos/eidos_interpreter.cpp:1471:23: error: cannot initialize a parameter of type 'long long *' with an rvalue of type
'int64_t *' (aka 'long *')
...bool overflow = Eidos_saddll_overflow(first_operand, second_operand, &add_result);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./eidos/eidos_global.h:152:76: note: expanded from macro 'Eidos_saddll_overflow'
define Eidos_saddll_overflow(a, b, c) __builtin_saddll_overflow((a), (b), (c))
./eidos/eidos_interpreter.cpp:1496:22: error: cannot initialize a parameter of type 'long long *' with an rvalue of type
'int64_t *' (aka 'long *')
bool overflow = Eidos_saddll_overflow(singleton_int, second_operand, &add_result);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./eidos/eidos_global.h:152:76: note: expanded from macro 'Eidos_saddll_overflow'
define Eidos_saddll_overflow(a, b, c) __builtin_saddll_overflow((a), (b), (c))
./eidos/eidos_interpreter.cpp:1520:22: error: cannot initialize a parameter of type 'long long *' with an rvalue of type
'int64_t *' (aka 'long *')
bool overflow = Eidos_saddll_overflow(first_operand, singleton_int, &add_result);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./eidos/eidos_global.h:152:76: note: expanded from macro 'Eidos_saddll_overflow'
define Eidos_saddll_overflow(a, b, c) __builtin_saddll_overflow((a), (b), (c))
./eidos/eidos_interpreter.cpp:1665:21: error: cannot initialize a parameter of type 'long long *' with an rvalue of type
'int64_t *' (aka 'long *')
bool overflow = Eidos_ssubll_overflow(0, operand, &subtract_result);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./eidos/eidos_global.h:153:76: note: expanded from macro 'Eidos_ssubll_overflow'
define Eidos_ssubll_overflow(a, b, c) __builtin_ssubll_overflow((a), (b), (c))
./eidos/eidos_interpreter.cpp:1685:22: error: cannot initialize a parameter of type 'long long *' with an rvalue of type
'int64_t *' (aka 'long *')
bool overflow = Eidos_ssubll_overflow(0, operand, &subtract_result);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./eidos/eidos_global.h:153:76: note: expanded from macro 'Eidos_ssubll_overflow'
define Eidos_ssubll_overflow(a, b, c) __builtin_ssubll_overflow((a), (b), (c))
./eidos/eidos_interpreter.cpp:1739:22: error: cannot initialize a parameter of type 'long long *' with an rvalue of type
'int64_t *' (aka 'long *')
...bool overflow = Eidos_ssubll_overflow(first_operand, second_operand, &subtract_result);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./eidos/eidos_global.h:153:76: note: expanded from macro 'Eidos_ssubll_overflow'
define Eidos_ssubll_overflow(a, b, c) __builtin_ssubll_overflow((a), (b), (c))
./eidos/eidos_interpreter.cpp:1761:23: error: cannot initialize a parameter of type 'long long *' with an rvalue of type
'int64_t *' (aka 'long *')
...bool overflow = Eidos_ssubll_overflow(first_operand, second_operand, &subtract_result);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./eidos/eidos_global.h:153:76: note: expanded from macro 'Eidos_ssubll_overflow'
define Eidos_ssubll_overflow(a, b, c) __builtin_ssubll_overflow((a), (b), (c))
./eidos/eidos_interpreter.cpp:1786:22: error: cannot initialize a parameter of type 'long long *' with an rvalue of type
'int64_t *' (aka 'long *')
...bool overflow = Eidos_ssubll_overflow(singleton_int, second_operand, &subtract_result);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./eidos/eidos_global.h:153:76: note: expanded from macro 'Eidos_ssubll_overflow'
define Eidos_ssubll_overflow(a, b, c) __builtin_ssubll_overflow((a), (b), (c))
./eidos/eidos_interpreter.cpp:1810:22: error: cannot initialize a parameter of type 'long long *' with an rvalue of type
'int64_t *' (aka 'long *')
...bool overflow = Eidos_ssubll_overflow(first_operand, singleton_int, &subtract_result);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./eidos/eidos_global.h:153:76: note: expanded from macro 'Eidos_ssubll_overflow'
define Eidos_ssubll_overflow(a, b, c) __builtin_ssubll_overflow((a), (b), (c))
./eidos/eidos_interpreter.cpp:2089:21: error: cannot initialize a parameter of type 'long long *' with an rvalue of type
'int64_t *' (aka 'long *')
bool overflow = Eidos_smulll_overflow(first_operand, second_operand, &multiply_result);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./eidos/eidos_global.h:154:76: note: expanded from macro 'Eidos_smulll_overflow'
define Eidos_smulll_overflow(a, b, c) __builtin_smulll_overflow((a), (b), (c))
./eidos/eidos_interpreter.cpp:2111:22: error: cannot initialize a parameter of type 'long long *' with an rvalue of type
'int64_t *' (aka 'long *')
...bool overflow = Eidos_smulll_overflow(first_operand, second_operand, &multiply_result);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./eidos/eidos_global.h:154:76: note: expanded from macro 'Eidos_smulll_overflow'
define Eidos_smulll_overflow(a, b, c) __builtin_smulll_overflow((a), (b), (c))
./eidos/eidos_interpreter.cpp:2199:21: error: cannot initialize a parameter of type 'long long *' with an rvalue of type
'int64_t *' (aka 'long *')
bool overflow = Eidos_smulll_overflow(first_operand, singleton_int, &multiply_result);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./eidos/eidos_global.h:154:76: note: expanded from macro 'Eidos_smulll_overflow'
define Eidos_smulll_overflow(a, b, c) __builtin_smulll_overflow((a), (b), (c))
./eidos/eidos_interpreter.cpp:2935:25: error: cannot initialize a parameter of type 'long long *' with an rvalue of type
'int64_t *' (aka 'long *')
...bool overflow = Eidos_saddll_overflow(operand1_value, operand2_value, &operand1_value);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./eidos/eidos_global.h:152:76: note: expanded from macro 'Eidos_saddll_overflow'
define Eidos_saddll_overflow(a, b, c) __builtin_saddll_overflow((a), (b), (c))
./eidos/eidos_interpreter.cpp:2944:25: error: cannot initialize a parameter of type 'long long *' with an rvalue of type
'int64_t *' (aka 'long *')
...bool overflow = Eidos_ssubll_overflow(operand1_value, operand2_value, &operand1_value);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./eidos/eidos_global.h:153:76: note: expanded from macro 'Eidos_ssubll_overflow'
define Eidos_ssubll_overflow(a, b, c) __builtin_ssubll_overflow((a), (b), (c))
./eidos/eidos_interpreter.cpp:2953:25: error: cannot initialize a parameter of type 'long long *' with an rvalue of type
'int64_t *' (aka 'long *')
...bool overflow = Eidos_smulll_overflow(operand1_value, operand2_value, &operand1_value);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./eidos/eidos_global.h:154:76: note: expanded from macro 'Eidos_smulll_overflow'
define Eidos_smulll_overflow(a, b, c) __builtin_smulll_overflow((a), (b), (c))
./eidos/eidos_interpreter.cpp:2974:26: error: cannot initialize a parameter of type 'long long *' with an rvalue of type
'int64_t *' (aka 'long *')
...bool overflow = Eidos_saddll_overflow(int_vec_value, operand2_value, &int_vec_value);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./eidos/eidos_global.h:152:76: note: expanded from macro 'Eidos_saddll_overflow'
define Eidos_saddll_overflow(a, b, c) __builtin_saddll_overflow((a), (b), (c))
./eidos/eidos_interpreter.cpp:2986:26: error: cannot initialize a parameter of type 'long long *' with an rvalue of type
'int64_t *' (aka 'long *')
...bool overflow = Eidos_ssubll_overflow(int_vec_value, operand2_value, &int_vec_value);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./eidos/eidos_global.h:153:76: note: expanded from macro 'Eidos_ssubll_overflow'
define Eidos_ssubll_overflow(a, b, c) __builtin_ssubll_overflow((a), (b), (c))
./eidos/eidos_interpreter.cpp:2998:26: error: cannot initialize a parameter of type 'long long *' with an rvalue of type
'int64_t *' (aka 'long *')
...bool overflow = Eidos_smulll_overflow(int_vec_value, operand2_value, &int_vec_value);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./eidos/eidos_global.h:154:76: note: expanded from macro 'Eidos_smulll_overflow'
define Eidos_smulll_overflow(a, b, c) __builtin_smulll_overflow((a), (b), (c))