Eric Blake <ebl...@redhat.com> writes: > On 06/22/2015 01:26 PM, Markus Armbruster wrote: >> qga_vss_fsfreeze() casts error_set_win32() from >> >> void (*)(Error **, int, ErrorClass, const char *, ...) >> >> to >> >> void (*)(void **, int, int, const char *, ...) >> >> The result is later called. Since the two types are not compatible, >> the call is undefined behavior. It works in practice anyway. > > Better than some other horrid casts we do, like monitor.c playing fast > and loose with 'Monitor *' vs. 'FILE *' in hmp_info_mtree() and friends. > But that's a cleanup for another series.
I wonder why we don't have a warning to flag casts of a function where calling the result would be undefined behavior. >> However, there's no real need for trickery here. Clean it up as >> follows: >> >> * Declare struct Error, and fix the first parameter. >> >> * Switch to error_setg_win32(). This gets rid of the troublesome >> ErrorClass parameter. Requires converting error_setg_win32() from >> macro to function, but that's trivially easy, because this is the >> only user of error_set_win32(). >> >> Signed-off-by: Markus Armbruster <arm...@redhat.com> >> --- > > Reviewed-by: Eric Blake <ebl...@redhat.com> Thanks!