Clang compilation fixes

This commit is contained in:
Nikita Lisitsa 2021-01-18 18:01:03 +03:00
parent 2c1d486068
commit e7cac4a618
13 changed files with 41 additions and 41 deletions

View file

@ -425,7 +425,7 @@ struct controller
static constexpr std::size_t inputs = 24 * 7; static constexpr std::size_t inputs = 24 * 7;
static constexpr std::size_t outputs = 23; static constexpr std::size_t outputs = 23;
static constexpr std::size_t layer1 = outputs; // static constexpr std::size_t layer1 = outputs;
// static constexpr std::size_t layer2 = 4; // static constexpr std::size_t layer2 = 4;
// static constexpr std::size_t layer3 = outputs; // static constexpr std::size_t layer3 = outputs;
@ -529,8 +529,6 @@ void controller::from_eigen(Eigen::VectorXf const & v)
template <typename RNG> template <typename RNG>
void controller::mutate(RNG && rng, float amplitude) void controller::mutate(RNG && rng, float amplitude)
{ {
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
random::normal_distribution<float> d{}; random::normal_distribution<float> d{};
auto visit_m = [&rng, &d, amplitude](auto & m) auto visit_m = [&rng, &d, amplitude](auto & m)
@ -558,7 +556,6 @@ void controller::mutate(RNG && rng, float amplitude)
visit_v(t1); visit_v(t1);
// visit_v(t2); // visit_v(t2);
// visit_v(t3); // visit_v(t3);
#pragma GCC diagnostic pop
} }
void controller::reset() void controller::reset()
@ -1448,7 +1445,7 @@ void animation_2d_app::do_test()
} }
else else
{ {
physics.advance(frame_clock.restart().count(), sel, [this](system const & physics){ physics.advance(frame_clock.restart().count(), sel, [](system const & physics){
return std::vector<float>(physics.joints.size(), 0.f); return std::vector<float>(physics.joints.size(), 0.f);
}); });
} }

View file

@ -261,6 +261,7 @@ struct node
virtual bool draw(int level) = 0; virtual bool draw(int level) = 0;
virtual node * child(int id) = 0; virtual node * child(int id) = 0;
virtual ~node() {}
}; };
struct node_controller struct node_controller
@ -389,7 +390,7 @@ bool node_controller::node_impl::draw(int level)
if (!height_data_future.ready()) return false; if (!height_data_future.ready()) return false;
auto height_data = std::move(height_data_future.get()); auto height_data = height_data_future.get();
for (auto h : height_data) for (auto h : height_data)
height_range |= exaggeration * static_cast<float>(h); height_range |= exaggeration * static_cast<float>(h);
@ -402,7 +403,7 @@ bool node_controller::node_impl::draw(int level)
array.bind(); array.bind();
std::size_t offset = controller->index_counts_[level]; std::size_t offset = controller->index_counts_[level];
std::size_t count = controller->index_counts_[level + 1] - offset; std::size_t count = controller->index_counts_[level + 1] - offset;
gl::DrawElements(gl::TRIANGLE_STRIP, count, gl::UNSIGNED_SHORT, (std::uint16_t const *)(nullptr) + offset); gl::DrawElements(gl::TRIANGLE_STRIP, count, gl::UNSIGNED_SHORT, reinterpret_cast<void const *>(offset * sizeof(std::uint16_t)));
return true; return true;
} }

View file

@ -83,7 +83,7 @@ void water_2d_app::update()
return std::pair{N - p.second, p.first - p.second}; return std::pair{N - p.second, p.first - p.second};
}; };
auto const rot2 = [this, rot1](std::pair<int, int> const & p) auto const rot2 = [rot1](std::pair<int, int> const & p)
{ {
return rot1(rot1(p)); return rot1(rot1(p));
}; };

View file

@ -86,7 +86,7 @@ namespace psemek::audio
, spec(spec) , spec(spec)
{} {}
void volume(float value) void volume(float value) override
{ {
int v = std::min(128, std::max(0, static_cast<int>(std::round(value * MIX_MAX_VOLUME)))); int v = std::min(128, std::max(0, static_cast<int>(std::round(value * MIX_MAX_VOLUME))));
Mix_Volume(channel, v); Mix_Volume(channel, v);

View file

@ -10,7 +10,7 @@ namespace psemek::geom
template <typename T, std::size_t N> template <typename T, std::size_t N>
struct box struct box
{ {
detail::array<interval<T>, N>::type axes; typename detail::array<interval<T>, N>::type axes;
using point_type = point<T, N>; using point_type = point<T, N>;
using vector_type = vector<T, N>; using vector_type = vector<T, N>;

View file

@ -16,7 +16,7 @@ namespace psemek::geom
static constexpr std::size_t static_rows = R; static constexpr std::size_t static_rows = R;
static constexpr std::size_t static_columns = C; static constexpr std::size_t static_columns = C;
detail::array<T, R * C>::type coords; typename detail::array<T, R * C>::type coords;
std::size_t rows() const std::size_t rows() const
{ {

View file

@ -12,7 +12,7 @@ namespace psemek::geom
using scalar_type = T; using scalar_type = T;
static constexpr std::size_t static_dimension = N; static constexpr std::size_t static_dimension = N;
detail::array<T, N>::type coords; typename detail::array<T, N>::type coords;
point() = default; point() = default;
point(point const &) = default; point(point const &) = default;

View file

@ -17,7 +17,7 @@ namespace psemek::geom
using scalar_type = T; using scalar_type = T;
static constexpr std::size_t static_dimension = N; static constexpr std::size_t static_dimension = N;
detail::array<T, N>::type coords; typename detail::array<T, N>::type coords;
vector() = default; vector() = default;
vector(vector const &) = default; vector(vector const &) = default;

View file

@ -492,6 +492,7 @@ namespace psemek::gfx
// Guard against unsigned char // Guard against unsigned char
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wtype-limits" #pragma GCC diagnostic ignored "-Wtype-limits"
#pragma GCC diagnostic ignored "-Wtautological-constant-out-of-range-compare"
if ((c < 32) || (c >= 128)) c = '?'; if ((c < 32) || (c >= 128)) c = '?';
#pragma GCC diagnostic pop #pragma GCC diagnostic pop

View file

@ -55,7 +55,7 @@ namespace psemek::random
// see https://en.cppreference.com/w/cpp/numeric/random/generate_canonical // see https://en.cppreference.com/w/cpp/numeric/random/generate_canonical
static constexpr std::size_t digits = std::numeric_limits<T>::digits; static constexpr std::size_t digits = std::numeric_limits<T>::digits;
static constexpr T const limit = std::pow<T>(2, digits); static T const limit = std::pow<T>(2, digits);
T const R = static_cast<T>(rng.max()) - static_cast<T>(rng.min()) + 1; T const R = static_cast<T>(rng.max()) - static_cast<T>(rng.min()) + 1;

View file

@ -223,12 +223,12 @@ namespace psemek::util
template <typename Handle, typename ... Types> template <typename Handle, typename ... Types>
void heterogeneous_container<Handle, Types...>::erase(handle h) void heterogeneous_container<Handle, Types...>::erase(handle h)
{ {
auto [i, hh] = unpack_handle(h); auto u = unpack_handle(h);
if (i >= types_count) if (u.first >= types_count)
throw bad_handle{}; throw bad_handle{};
detail::tuple_apply_at([hh](auto & t) -> void { detail::tuple_apply_at([&u](auto & t) -> void {
t.erase(hh); t.erase(u.second);
}, storage_, i); }, storage_, u.first);
} }
template <typename Handle, typename ... Types> template <typename Handle, typename ... Types>
@ -240,12 +240,12 @@ namespace psemek::util
} }
template <typename Handle, typename ... Types> template <typename Handle, typename ... Types>
heterogeneous_container<Handle, Types...>::any heterogeneous_container<Handle, Types...>::get(handle h) const typename heterogeneous_container<Handle, Types...>::any heterogeneous_container<Handle, Types...>::get(handle h) const
{ {
auto [i, hh] = unpack_handle(h); auto u = unpack_handle(h);
return detail::tuple_apply_at([hh](auto & t) -> any { return detail::tuple_apply_at([&u](auto & t) -> any {
return t[hh]; return t[u.second];
}, storage_, i); }, storage_, u.first);
} }
template <typename Handle, typename ... Types> template <typename Handle, typename ... Types>

View file

@ -1,6 +1,7 @@
#include <psemek/test/test.hpp> #include <psemek/test/test.hpp>
#include <psemek/util/function.hpp> #include <psemek/util/function.hpp>
#include <psemek/util/unused.hpp>
#include <memory> #include <memory>
@ -23,7 +24,7 @@ static void util_function_assign_test(bool light)
if (light) if (light)
f = [&counter]{ ++counter; }; f = [&counter]{ ++counter; };
else else
f = [&counter, h = heavy{}]{ ++counter; }; f = [&counter, h = heavy{}]{ unused(h); ++counter; };
expect(f); expect(f);
expect_equal(counter, 0); expect_equal(counter, 0);
@ -42,7 +43,7 @@ static void util_function_move_test(bool light)
if (light) if (light)
f = [&counter]{ ++counter; }; f = [&counter]{ ++counter; };
else else
f = [&counter, h = heavy{}]{ ++counter; }; f = [&counter, h = heavy{}]{ unused(h); ++counter; };
expect(f); expect(f);
function<void()> g; function<void()> g;
@ -88,8 +89,8 @@ static void util_function_destroy_test(bool light)
} }
else else
{ {
f = [p, h = heavy{}]{ ++*p; }; f = [p, h = heavy{}]{ unused(h); ++*p; };
g = [p, h = heavy{}]{ --*p; }; g = [p, h = heavy{}]{ unused(h); --*p; };
} }
expect(f); expect(f);
expect(g); expect(g);

View file

@ -82,27 +82,27 @@ void name ## _test_case (::psemek::test::context &); \
static const auto name ## _test_case_registrator = []{ ::psemek::test::add_test_case(#name, &(name ## _test_case)); return 0; }(); \ static const auto name ## _test_case_registrator = []{ ::psemek::test::add_test_case(#name, &(name ## _test_case)); return 0; }(); \
void name ## _test_case ([[maybe_unused]] ::psemek::test::context & _ctx) void name ## _test_case ([[maybe_unused]] ::psemek::test::context & _ctx)
#define fail(...) throw ::psemek::test::failure(::psemek::util::to_string(__VA_ARGS__), ::psemek::util::to_string(__FILE__, ":", __LINE__)) #define psemek_test_fail(...) throw ::psemek::test::failure(::psemek::util::to_string(__VA_ARGS__), ::psemek::util::to_string(__FILE__, ":", __LINE__))
#define expect(cond) if (!static_cast<bool>(cond)) fail("!(" #cond ")") #define expect(cond) if (!static_cast<bool>(cond)) psemek_test_fail("!(" #cond ")")
#define expect_equal(expr1, expr2) if ((expr1) != (expr2)) fail(#expr1, " (", (expr1), ") != ", #expr2, " (", (expr2), ")") #define expect_equal(expr1, expr2) if ((expr1) != (expr2)) psemek_test_fail(#expr1, " (", (expr1), ") != ", #expr2, " (", (expr2), ")")
#define expect_equal_ptr(expr1, expr2) if ((expr1) != (expr2)) fail(#expr1, " (", (void*)(expr1), ") != ", #expr2, " (", (void*)(expr2), ")") #define expect_equal_ptr(expr1, expr2) if ((expr1) != (expr2)) psemek_test_fail(#expr1, " (", (void*)(expr1), ") != ", #expr2, " (", (void*)(expr2), ")")
#define expect_different(expr1, expr2) if ((expr1) == (expr2)) fail(#expr1, " (", (expr1), ") == ", #expr2, " (", (expr2), ")") #define expect_different(expr1, expr2) if ((expr1) == (expr2)) psemek_test_fail(#expr1, " (", (expr1), ") == ", #expr2, " (", (expr2), ")")
#define expect_different_ptr(expr1, expr2) if ((expr1) == (expr2)) fail(#expr1, " (", (void*)(expr1), ") == ", #expr2, " (", (void*)(expr2), ")") #define expect_different_ptr(expr1, expr2) if ((expr1) == (expr2)) psemek_test_fail(#expr1, " (", (void*)(expr1), ") == ", #expr2, " (", (void*)(expr2), ")")
#define expect_less(expr1, expr2) if ((expr1) >= (expr2)) fail(#expr1, " (", (expr1), ") >= ", #expr2, " (", (expr2), ")") #define expect_less(expr1, expr2) if ((expr1) >= (expr2)) psemek_test_fail(#expr1, " (", (expr1), ") >= ", #expr2, " (", (expr2), ")")
#define expect_lequal(expr1, expr2) if ((expr2) > (expr2)) fail(#expr1, " (", (expr1), ") > ", #expr2, " (", (expr2), ")") #define expect_lequal(expr1, expr2) if ((expr2) > (expr2)) psemek_test_fail(#expr1, " (", (expr1), ") > ", #expr2, " (", (expr2), ")")
#define expect_greater(expr1, expr2) if ((expr1) <= (expr2)) fail(#expr1, " (", (expr1), ") <= ", #expr2, " (", (expr2), ")") #define expect_greater(expr1, expr2) if ((expr1) <= (expr2)) psemek_test_fail(#expr1, " (", (expr1), ") <= ", #expr2, " (", (expr2), ")")
#define expect_gequal(expr1, expr2) if ((expr1) < (expr2)) fail(#expr1, " (", (expr1), ") < ", #expr2, " (", (expr2), ")") #define expect_gequal(expr1, expr2) if ((expr1) < (expr2)) psemek_test_fail(#expr1, " (", (expr1), ") < ", #expr2, " (", (expr2), ")")
#define expect_small(expr1, expr2) if (std::abs((expr1)) > (expr2)) fail("abs(", #expr1, ") (", std::abs((expr1)), ") >= ", #expr2, " (", (expr2), ")") #define expect_small(expr1, expr2) if (std::abs((expr1)) > (expr2)) psemek_test_fail("abs(", #expr1, ") (", std::abs((expr1)), ") >= ", #expr2, " (", (expr2), ")")
#define expect_close(expr1, expr2, expr3) if (std::abs((expr1) - (expr2)) > (expr3)) fail("abs(", #expr1, " - ", #expr2, ") (", std::abs((expr1) - (expr2)), ") >= ", #expr3, " (", (expr3), ")") #define expect_close(expr1, expr2, expr3) if (std::abs((expr1) - (expr2)) > (expr3)) psemek_test_fail("abs(", #expr1, " - ", #expr2, ") (", std::abs((expr1) - (expr2)), ") >= ", #expr3, " (", (expr3), ")")
#define expect_throw(expr, type) do { bool thrown = false; try { (void)(expr); } catch (type const &) { thrown = true; } if (!thrown) fail(#expr, " didn't throw ", #type); } while (false) #define expect_throw(expr, type) do { bool thrown = false; try { (void)(expr); } catch (type const &) { thrown = true; } if (!thrown) psemek_test_fail(#expr, " didn't throw ", #type); } while (false)
#define test_profile(name) \ #define test_profile(name) \
if (::psemek::test::profiler name ## _profiler(#name, _ctx); true) if (::psemek::test::profiler name ## _profiler(#name, _ctx); true)