diff options
author | Scott Murray <scott.murray@konsulko.com> | 2021-07-12 15:51:18 -0400 |
---|---|---|
committer | Scott Murray <scott.murray@konsulko.com> | 2021-07-12 20:48:08 +0000 |
commit | c5c15f86d2eaaa5ac72f0ac00634a978326daae9 (patch) | |
tree | dd23637a7c453c663e3070f67bcfbf1bfd8cdfc8 /include/afb/c++/binding-wrap.hpp | |
parent | 9a8aea1b682f522d7b278312b9bd85ed12fab820 (diff) |
gcc 11.x fixesneedlefish_13.93.0needlefish/13.93.0marlin_12.93.0marlin_12.92.0marlin_12.91.0marlin_12.90.1marlin/12.93.0marlin/12.92.0marlin/12.91.0marlin/12.90.113.93.012.93.012.92.012.91.012.90.1
Changes for compiling with gcc 11.x:
- g++ now seems to instantiate duplicate entries for the set member
function in the contextclass template class in binding-wrap.hpp.
The use of a closure as a default argument value seems to be the
culprit, as it seems there are longstanding issues with respect to
using closures like that and resulting symbol names (i.e. the use
of a closure isn't necessarily recognized as generating unique
instantiations). In theory, C++17 should explicitly allow this
when the closure has no captures, but bumping up to -std=gnu++17
did not fix the issue. To avoid it, replace the closure usage
with a private static member function.
- In afb-hook.c, tweaked the ignoring of the writev return code to
make the stricter checking in gcc 11 happy.
- In decode_base64 in wrap-json.c, initialize u16 as gcc now seems
to miss that it will be initialized on the first loop iteration.
Bug-AGL: SPEC-3819
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
Change-Id: I8876db196b46cc35ecd2798e20d5ec3425df865e
Diffstat (limited to 'include/afb/c++/binding-wrap.hpp')
-rw-r--r-- | include/afb/c++/binding-wrap.hpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/include/afb/c++/binding-wrap.hpp b/include/afb/c++/binding-wrap.hpp index f94d1bc5..b798cf11 100644 --- a/include/afb/c++/binding-wrap.hpp +++ b/include/afb/c++/binding-wrap.hpp @@ -300,6 +300,7 @@ public: friend class req; afb_req_t req_; contextclass(afb_req_t r) : req_(r) {} + static void default_destroyer(T*t) { delete t; } public: inline operator T *() const { return get(); } @@ -312,7 +313,7 @@ public: nullptr)); } - inline void set(T *value, void (*destroyer)(T*) = [](T*t){delete t;}) const { + inline void set(T *value, void (*destroyer)(T*) = default_destroyer) const { afb_req_context(req_, 1, nullptr, reinterpret_cast<void(*)(void*)>(destroyer), |