Avoid -Werror,-Wcast-function-type-mismatch

...as seen when building LOWA (i.e., --disable-dynloading) with a recent Clang
with
<999d4f8407>
"Split -Wcast-function-type into a separate group (#86131)", where
-Wcast-function-type-mismatch generally warns about casts between incompatible
function types...

> cppuhelper/source/shlib.cxx:294:23: error: cast from 'void *(*)(void *, void *)' to 'ImplementationConstructorFn *' (aka 'css::uno::XInterface *(*)(css::uno::XComponentContext *, const css::uno::Sequence<css::uno::Any> &)') converts to incompatible function type [-Werror,-Wcast-function-type-mismatch]
>   294 |                     = reinterpret_cast<ImplementationConstructorFn *>(
>       |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   295 |                         map[i].constructor_function);
>       |                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~

...but not for the special case of casting from/to void(*)(void).

(Using the correct function type

> css::uno::XInterface * (*)(css::uno::XComponentContext *, css::uno::Sequence<css::uno::Any> const &)

throughout would be even better, but doesn't easily fit into this C code that is
included in low-level places that don't know those UNO types and is shared
between LOWA and Android etc.)

Change-Id: Ic4dbabbff0f772b34cf692db968c3ad257c37cb2
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173463
Reviewed-by: Stephan Bergmann <stephan.bergmann@allotropia.de>
Tested-by: Jenkins
This commit is contained in:
Stephan Bergmann 2024-09-16 17:52:53 +02:00
parent 45ffeed667
commit 4bbe329ef0
2 changed files with 2 additions and 2 deletions

View file

@ -31,7 +31,7 @@ typedef struct {
typedef struct {
const char *name;
void * (*constructor_function)(void *, void *);
void (*constructor_function)(void);
} lib_to_constructor_mapping;
const lib_to_factory_mapping *lo_get_factory_map(void);

View file

@ -879,7 +879,7 @@ for constructor in sorted(full_constructor_map.keys()):
constructor_guard = get_constructor_guard(constructor)
if constructor_guard:
print (constructor_guard)
print ('void * '+constructor+'( void *, void * );')
print ('void '+constructor+'( void );')
if constructor_guard:
print ('#endif')