X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fpayload-view.h;h=af8519ab32641aaab739fa66985179ee025b47ba;hp=57a8342d70578c7be479c3bacfc6035a203937d9;hb=7966af5763c4aaca39df9bbfa9277ff15715c720;hpb=3a5f70173aa04d11ccb22694d5d31a702cad33ab diff --git a/src/common/payload-view.h b/src/common/payload-view.h index 57a8342d7..af8519ab3 100644 --- a/src/common/payload-view.h +++ b/src/common/payload-view.h @@ -11,6 +11,10 @@ #include #include +#ifdef __cplusplus +extern "C" { +#endif + struct lttng_payload; struct fd_handle; @@ -46,7 +50,26 @@ struct fd_handle; struct lttng_payload_view { struct lttng_buffer_view buffer; /* private */ - const struct lttng_dynamic_pointer_array _fd_handles; + + /* + * Avoid a -Wreturn-type-c-linkage warning with clang. + * gcc is more permissive with regards to this warning, but + * clang is right that a structure containing a _const_ structure is not + * a trivial type in the eyes of the C++ standard, theoritically affecting its + * compatibility with C from an ABI standpoint: + * A trivial class is a class that is trivially copyable and has one or + * more default constructors, all of which are either trivial or deleted and + * at least one of which is not deleted. + * + * A const member implicitly deletes lttng_payload_view's constructor, + * making it non-trivial. This is not a problem for the moment as we are + * transitioning all code to C++11. + */ +#if !defined(__cplusplus) + const +#endif + struct lttng_dynamic_pointer_array _fd_handles; + struct { size_t *p_fd_handles_position; size_t fd_handles_position; @@ -159,4 +182,8 @@ int lttng_payload_view_get_fd_handle_count( struct fd_handle *lttng_payload_view_pop_fd_handle( struct lttng_payload_view *payload_view); +#ifdef __cplusplus +} +#endif + #endif /* LTTNG_PAYLOAD_VIEW_H */