fix clang/-Wcast-function-type-strict warning
Fixes:
src/utils/context_switch.cc:133:7: error:
cast from 'void (*)(LocalContext *)' to 'LPFIBER_START_ROUTINE' (aka
'void (*)(void *)') converts to incompatible function type
[-Werror,-Wcast-function-type-strict]
133 | (LPFIBER_START_ROUTINE)suspendable_function, (LPVOID)&context_);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Change-Id: Ie47ada32c1ed1cb17755697688cf0fed05d5c36b
Reviewed-on: https://chromium-review.googlesource.com/c/codecs/libwebp2/+/5445185
Reviewed-by: Yannis Guyon <yguyon@google.com>
Tested-by: WebM Builds <builds@webmproject.org>
diff --git a/src/dec/incr/decoder_context.cc b/src/dec/incr/decoder_context.cc
index b7b9ae6..ab3a126 100644
--- a/src/dec/incr/decoder_context.cc
+++ b/src/dec/incr/decoder_context.cc
@@ -19,13 +19,16 @@
#include "src/dec/incr/decoder_context.h"
+#include "src/utils/context_switch.h"
+
#if defined(WP2_USE_CONTEXT_SWITCH) && (WP2_USE_CONTEXT_SWITCH > 0)
namespace WP2 {
//------------------------------------------------------------------------------
-void ContextTileDecoder::SuspendingDecode(LocalContext* const context) {
+void ContextTileDecoder::SuspendingDecode(void* const local_context) {
+ LocalContext* const context = reinterpret_cast<LocalContext*>(local_context);
InterContextData* const inter_context_data =
(InterContextData*)context->GetInterContextData();
inter_context_data->input.SetContext(context); // Enable suspension.
diff --git a/src/dec/incr/decoder_context.h b/src/dec/incr/decoder_context.h
index 4fa3258..85edefd 100644
--- a/src/dec/incr/decoder_context.h
+++ b/src/dec/incr/decoder_context.h
@@ -42,7 +42,7 @@
protected:
// To be called only through MainContext::CreateLocalContext().
- static void SuspendingDecode(LocalContext* const context);
+ static void SuspendingDecode(void* local_context);
// Resumes decoding and sets partial_tile_.status.
void DecodePartialTile();
diff --git a/src/utils/context_switch.cc b/src/utils/context_switch.cc
index 6795a74..125cb16 100644
--- a/src/utils/context_switch.cc
+++ b/src/utils/context_switch.cc
@@ -105,8 +105,8 @@
//------------------------------------------------------------------------------
-bool MainContext::CreateLocalContext(
- void (*suspendable_function)(LocalContext*), void* inter_context_data) {
+bool MainContext::CreateLocalContext(void (*suspendable_function)(void*),
+ void* inter_context_data) {
if (!context_.closed_) {
LOG_CONTEXT_ERROR("Another context is already created.");
return false;
diff --git a/src/utils/context_switch.h b/src/utils/context_switch.h
index 7d66eae..6dcbaed 100644
--- a/src/utils/context_switch.h
+++ b/src/utils/context_switch.h
@@ -164,7 +164,7 @@
// MainContext::Resume() is called. It must end with a LocalContext::Close().
// The 'inter_context_data' can be accessed with
// LocalContext::GetInterContextData().
- bool CreateLocalContext(void (*suspendable_function)(LocalContext*),
+ bool CreateLocalContext(void (*suspendable_function)(void*),
void* inter_context_data);
// Give back control to the local context. Returns false if local context
diff --git a/tests/test_context.cc b/tests/test_context.cc
index 3df66e3..021fcb4 100644
--- a/tests/test_context.cc
+++ b/tests/test_context.cc
@@ -44,12 +44,14 @@
inter_context_data->data += 16;
}
-void RunContext(LocalContext* const context) {
+void RunContext(void* const local_context) {
+ LocalContext* const context = reinterpret_cast<LocalContext*>(local_context);
IncrementData(context, (InterContextData*)context->GetInterContextData());
context->Close();
}
-void RunBadContext(LocalContext* const context) {
+void RunBadContext(void* const local_context) {
+ LocalContext* const context = reinterpret_cast<LocalContext*>(local_context);
context->Close();
context->Yield(); // Nothing should be called after Close().
context->Close();