Skip to content

Commit 083cd28

Browse files
authored
Merge pull request #2274 from serge-sans-paille/fix/all-warnings
Provide a -Werror mode and ensure xtensor passes with it
2 parents 06cb913 + 48aa4a3 commit 083cd28

3 files changed

Lines changed: 21 additions & 0 deletions

File tree

test/CMakeLists.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ if(NOT _cxx_std_flag)
6464
message(FATAL_ERROR "xtensor-blas needs a C++14-compliant compiler.")
6565
endif()
6666

67+
OPTION(XTENSOR_ENABLE_WERROR "Turn on -Werror" OFF)
68+
6769
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR (CMAKE_CXX_COMPILER_ID MATCHES "Intel" AND NOT WIN32))
6870
CHECK_CXX_COMPILER_FLAG(-march=native arch_native_supported)
6971
if(arch_native_supported AND NOT CMAKE_CXX_FLAGS MATCHES "-march")
@@ -74,6 +76,9 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR (CMAKE_CXX_COMPILER_ID MATCHES "Intel"
7476
if (XTENSOR_DISABLE_EXCEPTIONS)
7577
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")
7678
endif()
79+
if (XTENSOR_ENABLE_WERROR)
80+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -DSKIP_ON_WERROR")
81+
endif()
7782
elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
7883
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_cxx_std_flag} /MP /bigobj")
7984
set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} /MANIFEST:NO)
@@ -95,6 +100,9 @@ elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
95100
if (XTENSOR_DISABLE_EXCEPTIONS)
96101
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")
97102
endif()
103+
if (XTENSOR_ENABLE_WERROR)
104+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -DSKIP_ON_WERROR")
105+
endif()
98106
else() # We are using clang-cl
99107
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_cxx_std_flag} /bigobj")
100108
set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} /MANIFEST:NO)

test/test_xnan_functions.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,15 +268,21 @@ namespace xt
268268
/**********************
269269
* long long *
270270
**********************/
271+
#ifndef SKIP_ON_WERROR
272+
// intermediate computation done in double may imply precision loss
271273
CHECK_RESULT_TYPE_FOR_ALL(along, signed long long);
274+
#endif
272275
CHECK_TEMPLATED_RESULT_TYPE_FOR_ALL(along, int, signed long long, double);
273276
CHECK_TEMPLATED_RESULT_TYPE_FOR_ALL(along, long, signed long long, double);
274277
CHECK_TEMPLATED_RESULT_TYPE_FOR_ALL(along, signed long long, signed long long, double);
275278

276279
/**********************
277280
* unsigned long long *
278281
**********************/
282+
#ifndef SKIP_ON_WERROR
283+
// intermediate computation done in double may imply precision loss
279284
CHECK_RESULT_TYPE_FOR_ALL(aulong, unsigned long long);
285+
#endif
280286
CHECK_TEMPLATED_RESULT_TYPE_FOR_ALL(aulong, unsigned int, unsigned long long, double);
281287
CHECK_TEMPLATED_RESULT_TYPE_FOR_ALL(aulong, unsigned long, unsigned long long, double);
282288
CHECK_TEMPLATED_RESULT_TYPE_FOR_ALL(aulong, unsigned long long, unsigned long long, double);
@@ -285,7 +291,10 @@ namespace xt
285291
* float *
286292
*********/
287293
CHECK_RESULT_TYPE_FOR_ALL(afloat, float);
294+
#ifndef SKIP_ON_WERROR
295+
// final conversion to int may imply conversion loss
288296
CHECK_TEMPLATED_RESULT_TYPE_FOR_ALL(afloat, int, float, float);
297+
#endif
289298
CHECK_TEMPLATED_RESULT_TYPE_FOR_ALL(afloat, float, float, float);
290299
CHECK_TEMPLATED_RESULT_TYPE_FOR_ALL(afloat, double, double, double);
291300

test/test_xreducer.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -544,8 +544,12 @@ namespace xt
544544
EXPECT_TRUE(all(equal(mean0, expect0)));
545545
EXPECT_TRUE(all(equal(mean1, expect1)));
546546

547+
#ifndef SKIP_ON_WERROR
548+
// may loose precision because uint8_t is casted to long for intermediate
549+
// computations and then divided by a double for mean
547550
xarray<uint8_t> c = {1, 2};
548551
EXPECT_EQ(mean(c)(), 1.5);
552+
#endif
549553

550554
const auto rvalue_xarray = [] () { return xtensor<double, 1>({1, 2}); };
551555
EXPECT_EQ(mean(rvalue_xarray(), {0})(), 1.5);

0 commit comments

Comments
 (0)