From c6820a6316c86fb7f67fd344832f8e31cac62dc1 Mon Sep 17 00:00:00 2001 From: David Tellenbach Date: Fri, 14 Aug 2020 17:24:37 +0200 Subject: [PATCH] Replace the call to int64_t in the blasutil test by explicit types Some platforms define int64_t to be long long even for C++03. If this is the case we miss the definition of internal::make_unsigned for this type. If we just define the template we get duplicated definitions errors for platforms defining int64_t as signed long for C++03. We need to find a way to distinguish both cases at compile-time. --- Eigen/src/Core/util/Meta.h | 4 ++++ test/blasutil.cpp | 18 ++++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/Eigen/src/Core/util/Meta.h b/Eigen/src/Core/util/Meta.h index c892e499c..68452ecfa 100755 --- a/Eigen/src/Core/util/Meta.h +++ b/Eigen/src/Core/util/Meta.h @@ -160,6 +160,10 @@ template<> struct make_unsigned { typedef unsigned long type; template<> struct make_unsigned { typedef unsigned __int64 type; }; template<> struct make_unsigned { typedef unsigned __int64 type; }; #endif + +// TODO: Some platforms define int64_t as long long even for C++03. In this case +// we are missing the definition for make_unsigned. If we just define it, we get +// duplicated definitions for platforms defining int64_t as signed long for C++03 #endif template struct add_const { typedef const T type; }; diff --git a/test/blasutil.cpp b/test/blasutil.cpp index cd8716351..255d2a6ca 100644 --- a/test/blasutil.cpp +++ b/test/blasutil.cpp @@ -186,11 +186,17 @@ EIGEN_DECLARE_TEST(blasutil) { for(int i = 0; i < g_repeat; i++) { - CALL_SUBTEST_1(run_test()); - CALL_SUBTEST_2(run_test()); - CALL_SUBTEST_3(run_test()); - CALL_SUBTEST_4(run_test()); - CALL_SUBTEST_5(run_test()); - CALL_SUBTEST_6(run_test()); + CALL_SUBTEST_1(run_test()); + CALL_SUBTEST_2(run_test()); + CALL_SUBTEST_3(run_test()); +// TODO: Replace this by a call to numext::int64_t as soon as we have a way to +// detect the typedef for int64_t on all platforms +#if EIGEN_HAS_CXX11 + CALL_SUBTEST_4(run_test()); +#else + CALL_SUBTEST_4(run_test()); +#endif + CALL_SUBTEST_5(run_test()); + CALL_SUBTEST_6(run_test()); } } \ No newline at end of file