From c2c4e2618f7f168b0c489ae8b599ee64a14056b0 Mon Sep 17 00:00:00 2001 From: Slavey Karadzhov Date: Wed, 4 May 2022 14:14:08 +0200 Subject: [PATCH 1/3] Allow pmf-conversion only for selected functions. More about pmf-conversions: https://gcc.gnu.org/onlinedocs/gcc/Bound-member-functions.html More about disabling compile-type warnings in GCC and Clang: https://www.fluentcpp.com/2019/08/30/how-to-disable-a-warning-in-cpp/ --- src/rpcCall.tcc | 5 +++++ src/signature.tcc | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/rpcCall.tcc b/src/rpcCall.tcc index 408d81d..9338e78 100644 --- a/src/rpcCall.tcc +++ b/src/rpcCall.tcc @@ -111,6 +111,9 @@ void rpcCall(Stream& io, R (*f)(FArgs...)) { _call(io, (void (*)(FArgs...))f, f); } +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpmf-conversions" + /*! \ingroup call * Call a class method. * @@ -125,4 +128,6 @@ void rpcCall(Stream& io, Tuple t) { _call(io, (void (*)(FArgs...))t.tail.head, t); } +#pragma GCC diagnostic pop + #endif diff --git a/src/signature.tcc b/src/signature.tcc index bc51111..37c9f66 100644 --- a/src/signature.tcc +++ b/src/signature.tcc @@ -62,6 +62,9 @@ void signature(Stream& io, R (*f)(FArgs...)) { _parameterTypes(io, (void (*)(FArgs...))f); } +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpmf-conversions" + /*! \ingroup signature * \copydoc signature(Stream&, R (*)(FArgs...)) */ template @@ -69,6 +72,8 @@ void signature(Stream& io, R (C::*f)(FArgs...)) { signature(io, (R (*)(FArgs...))f); } +#pragma GCC diagnostic pop + /*! \ingroup signature * \copydoc signature(Stream&, R (*)(FArgs...)) */ template @@ -77,6 +82,9 @@ void signature(Stream& io, void (*f)(FArgs...)) { _parameterTypes(io, f); } +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpmf-conversions" + /*! \ingroup signature * \copydoc signature(Stream&, R (*)(FArgs...)) */ template @@ -84,4 +92,6 @@ void signature(Stream& io, void (C::*f)(FArgs...)) { signature(io, (void (*)(FArgs...))f); } +#pragma GCC diagnostic pop + #endif From 2ae99d2b5acca3eb3e4117d7b0537d77c9d0adb4 Mon Sep 17 00:00:00 2001 From: Slavey Karadzhov Date: Thu, 5 May 2022 11:50:28 +0200 Subject: [PATCH 2/3] Applying review changes. --- src/rpcCall.tcc | 5 ----- src/signature.tcc | 10 ---------- src/simpleRPC.h | 5 +++++ tests/Makefile | 2 +- 4 files changed, 6 insertions(+), 16 deletions(-) diff --git a/src/rpcCall.tcc b/src/rpcCall.tcc index 9338e78..408d81d 100644 --- a/src/rpcCall.tcc +++ b/src/rpcCall.tcc @@ -111,9 +111,6 @@ void rpcCall(Stream& io, R (*f)(FArgs...)) { _call(io, (void (*)(FArgs...))f, f); } -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wpmf-conversions" - /*! \ingroup call * Call a class method. * @@ -128,6 +125,4 @@ void rpcCall(Stream& io, Tuple t) { _call(io, (void (*)(FArgs...))t.tail.head, t); } -#pragma GCC diagnostic pop - #endif diff --git a/src/signature.tcc b/src/signature.tcc index 37c9f66..bc51111 100644 --- a/src/signature.tcc +++ b/src/signature.tcc @@ -62,9 +62,6 @@ void signature(Stream& io, R (*f)(FArgs...)) { _parameterTypes(io, (void (*)(FArgs...))f); } -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wpmf-conversions" - /*! \ingroup signature * \copydoc signature(Stream&, R (*)(FArgs...)) */ template @@ -72,8 +69,6 @@ void signature(Stream& io, R (C::*f)(FArgs...)) { signature(io, (R (*)(FArgs...))f); } -#pragma GCC diagnostic pop - /*! \ingroup signature * \copydoc signature(Stream&, R (*)(FArgs...)) */ template @@ -82,9 +77,6 @@ void signature(Stream& io, void (*f)(FArgs...)) { _parameterTypes(io, f); } -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wpmf-conversions" - /*! \ingroup signature * \copydoc signature(Stream&, R (*)(FArgs...)) */ template @@ -92,6 +84,4 @@ void signature(Stream& io, void (C::*f)(FArgs...)) { signature(io, (void (*)(FArgs...))f); } -#pragma GCC diagnostic pop - #endif diff --git a/src/simpleRPC.h b/src/simpleRPC.h index cc49131..50555d6 100644 --- a/src/simpleRPC.h +++ b/src/simpleRPC.h @@ -1,9 +1,14 @@ #ifndef SIMPLE_RPC_H_ #define SIMPLE_RPC_H_ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpmf-conversions" + #include "interface.tcc" // I/O plugins. #include "plugins/half_duplex/stream.h" +#pragma GCC diagnostic pop + #endif diff --git a/tests/Makefile b/tests/Makefile index 91bf051..b26a149 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -6,7 +6,7 @@ FIXTURES := arduino-serial-fixture/src/Arduino CC := g++ -CC_ARGS := -std=c++11 -Wno-pmf-conversions \ +CC_ARGS := -std=c++11 \ -I arduino-serial-fixture/src -I plugins From b77263a102809dd689e451d6a5432764f890f3b7 Mon Sep 17 00:00:00 2001 From: Slavey Karadzhov Date: Thu, 5 May 2022 12:19:35 +0200 Subject: [PATCH 3/3] Revert tests/Makefile changes. --- tests/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Makefile b/tests/Makefile index b26a149..91bf051 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -6,7 +6,7 @@ FIXTURES := arduino-serial-fixture/src/Arduino CC := g++ -CC_ARGS := -std=c++11 \ +CC_ARGS := -std=c++11 -Wno-pmf-conversions \ -I arduino-serial-fixture/src -I plugins