diff --git a/libuavcan/CMakeLists.txt b/libuavcan/CMakeLists.txt index f40f0f8c5b..780a2215d6 100644 --- a/libuavcan/CMakeLists.txt +++ b/libuavcan/CMakeLists.txt @@ -103,7 +103,7 @@ if (DEBUG_BUILD) if (COMPILER_IS_GCC_COMPATIBLE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror -pedantic -Wfloat-equal -Wconversion") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsign-conversion -Wcast-align -Wmissing-declarations -Wlogical-op") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=array-bounds") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wtype-limits -Wno-error=array-bounds") set(cpp03_flags "-std=c++03 -Wno-variadic-macros -Wno-long-long") set(optim_flags "-O3 -DNDEBUG -g0") else () diff --git a/libuavcan/include/uavcan/marshal/array.hpp b/libuavcan/include/uavcan/marshal/array.hpp index c7263d106e..2205925466 100644 --- a/libuavcan/include/uavcan/marshal/array.hpp +++ b/libuavcan/include/uavcan/marshal/array.hpp @@ -480,6 +480,10 @@ class UAVCAN_EXPORT Array : public ArrayImpl return 1; } +#if __GNUC__ +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wtype-limits" +#endif int decodeImpl(ScalarCodec& codec, const TailArrayOptimizationMode tao_mode, TrueType) /// Dynamic { StaticAssert::check(); @@ -513,7 +517,7 @@ class UAVCAN_EXPORT Array : public ArrayImpl { return res_sz; } - if (static_cast(sz) > MaxSize_) + if (static_cast(sz) > MaxSize_) // False 'type-limits' warning occurs here { return -ErrInvalidMarshalData; } @@ -527,6 +531,9 @@ class UAVCAN_EXPORT Array : public ArrayImpl UAVCAN_ASSERT(0); // Unreachable return -ErrLogic; } +#if __GNUC__ +# pragma GCC diagnostic pop +#endif template void packSquareMatrixImpl(const InputIter src_row_major)