diff options
author | Kjell Ahlstedt <kjellahlstedt@gmail.com> | 2018-07-17 16:43:30 +0200 |
---|---|---|
committer | Kjell Ahlstedt <kjellahlstedt@gmail.com> | 2018-07-17 16:43:30 +0200 |
commit | 9e457844f544793ab2b727351fca0805ddc0c20a (patch) | |
tree | 2af56a507a630f8a0d1782e6c806407b2a2f842d | |
parent | 5d953603f30f0452cb9da35e3083a3fc145c3f57 (diff) | |
download | glibmm-9e457844f544793ab2b727351fca0805ddc0c20a.tar.gz |
Revert "Avoid compiler warnings from function pointer conversions"
This reverts commit 5d953603f30f0452cb9da35e3083a3fc145c3f57.
This can be done in a better way by keeping the union in a template function.
-rw-r--r-- | gio/giomm/socketsource.cc | 24 | ||||
-rw-r--r-- | glib/glibmm/main.cc | 23 | ||||
-rw-r--r-- | tests/glibmm_vector/main.cc | 13 |
3 files changed, 8 insertions, 52 deletions
diff --git a/gio/giomm/socketsource.cc b/gio/giomm/socketsource.cc index 8bad8f5b..af1e9740 100644 --- a/gio/giomm/socketsource.cc +++ b/gio/giomm/socketsource.cc @@ -54,19 +54,6 @@ giomm_socketsource_callback(GSocket*, GIOCondition condition, void* user_data) return giomm_generic_socket_callback(slot, condition); } -GSourceFunc giomm_socketsource_cb_as_gsourcefunc() -{ - // Conversion between different types of function pointers with - // reinterpret_cast can make gcc8 print a warning. - // https://github.com/libsigcplusplus/libsigcplusplus/issues/1 - union { - GSourceFunc ps; - decltype(&giomm_socketsource_callback) pss; - } u; - u.pss = &giomm_socketsource_callback; - return u.ps; -} - } // anonymous namespace namespace Gio @@ -85,13 +72,8 @@ SignalSocket::connect(const sigc::slot<bool, Glib::IOCondition>& slot, { GSource* const source = g_socket_create_source(socket->gobj(), (GIOCondition)condition, Glib::unwrap(cancellable)); - - union { - GSourceFunc ps; - decltype(&giomm_signalsocket_callback) pss; - } u; - u.pss = &giomm_signalsocket_callback; - return Glib::Source::attach_signal_source(slot, priority, source, context_, u.ps); + return Glib::Source::attach_signal_source( + slot, priority, source, context_, (GSourceFunc)&giomm_signalsocket_callback); } SignalSocket @@ -114,7 +96,7 @@ SocketSource::SocketSource(const Glib::RefPtr<Socket>& socket, Glib::IOCondition const Glib::RefPtr<Cancellable>& cancellable) : IOSource( g_socket_create_source(socket->gobj(), (GIOCondition)condition, Glib::unwrap(cancellable)), - giomm_socketsource_cb_as_gsourcefunc()) + (GSourceFunc)&giomm_socketsource_callback) { } diff --git a/glib/glibmm/main.cc b/glib/glibmm/main.cc index 45ba817e..30a294c4 100644 --- a/glib/glibmm/main.cc +++ b/glib/glibmm/main.cc @@ -278,19 +278,6 @@ glibmm_iosource_callback(GIOChannel*, GIOCondition condition, void* data) return 0; } -GSourceFunc glibmm_iosource_cb_as_gsourcefunc() -{ - // Conversion between different types of function pointers with - // reinterpret_cast can make gcc8 print a warning. - // https://github.com/libsigcplusplus/libsigcplusplus/issues/1 - union { - GSourceFunc ps; - decltype(&glibmm_iosource_callback) pios; - } u; - u.pios = &glibmm_iosource_callback; - return u.ps; -} - /* Only used by SignalChildWatch::connect(). * These don't use Glib::Source, to avoid the unnecessary overhead * of a completely unused wrapper object. @@ -553,12 +540,8 @@ SignalChildWatch::connect(const sigc::slot<void, GPid, int>& slot, GPid pid, int if (priority != G_PRIORITY_DEFAULT) g_source_set_priority(source, priority); - union { - GSourceFunc ps; - decltype(&glibmm_child_watch_callback) pcw; - } u; - u.pcw = &glibmm_child_watch_callback; - g_source_set_callback(source, u.ps, conn_node, &SourceConnectionNode::destroy_notify_callback); + g_source_set_callback(source, (GSourceFunc)&glibmm_child_watch_callback, conn_node, + &SourceConnectionNode::destroy_notify_callback); conn_node->install(source); g_source_attach(source, context_); @@ -1326,7 +1309,7 @@ IOSource::IOSource(PollFD::fd_t fd, IOCondition condition) : poll_fd_(fd, condit IOSource::IOSource(const Glib::RefPtr<IOChannel>& channel, IOCondition condition) : Source(g_io_create_watch(channel->gobj(), (GIOCondition)condition), - glibmm_iosource_cb_as_gsourcefunc()) + (GSourceFunc)&glibmm_iosource_callback) { } diff --git a/tests/glibmm_vector/main.cc b/tests/glibmm_vector/main.cc index 0f039356..31138cf0 100644 --- a/tests/glibmm_vector/main.cc +++ b/tests/glibmm_vector/main.cc @@ -196,23 +196,14 @@ public: ~Cache() { - // Conversion between different types of function pointers with - // reinterpret_cast can make gcc8 print a warning. - // https://github.com/libsigcplusplus/libsigcplusplus/issues/1 - union { - GFunc pf; - decltype(&g_object_unref) pou; - } u; - u.pou = &g_object_unref; - if (glist_) { - g_list_foreach(glist_, u.pf, nullptr); + g_list_foreach(glist_, reinterpret_cast<GFunc>(g_object_unref), nullptr); g_list_free(glist_); } if (gslist_) { - g_slist_foreach(gslist_, u.pf, nullptr); + g_slist_foreach(gslist_, reinterpret_cast<GFunc>(g_object_unref), nullptr); g_slist_free(gslist_); } if (garray_) |