Hi John, the relevant warning without the change is here:
../pspp/src/ui/gui/psppire-acr.c: In function ‘on_change_button_clicked’: ../pspp/src/ui/gui/psppire-acr.c:186:22: warning: cast between incompatible function types from ‘void (*)(GtkTreePath *)’ {aka ‘void (*)(struct _GtkTreePath *)’} to ‘void (*)(void *, void *)’ [-Wcast-function-type] g_list_foreach (l, (GFunc) gtk_tree_path_free, NULL); You can see the full build log here: http://caeis.etech.fh-augsburg.de:8010/#/builders/4/builds/26 On debian-buster the compiler is gcc8 while on sid the compiler is gcc10. GFunc is defined with two parameters: https://developer.gnome.org/glib/stable/glib-Doubly-Linked-Lists.html#GFunc while gtk_tree_path_free has only one: https://developer.gnome.org/gtk3/stable/GtkTreeModel.html#gtk-tree-path-free I guess it is the same behaviour that resulted in this macro https://developer.gnome.org/glib/stable/glib-The-Main-Event-Loop.html#G-SOURCE-FUNC:CAPS A discussion about this check is here: https://gitlab.gnome.org/GNOME/gnome-terminal/-/issues/96 resulting in this cast. Root cause seems to be that the behaviour for different number of arguments is undefined. http://c0x.coding-guidelines.com/6.5.2.2.html The clang compiler version 9 does not issue this warning. Fritz > Am 25.08.2020 um 07:00 schrieb John Darrington <j...@darrington.wattle.id.au>: > > I don't understand this commit, and I think it just makes the code > harder to read: > > > commit ceaed4a17cb3b0a14c89f10b72a636f94af97e7a > Author: Friedrich Beckmann <friedrich.beckm...@gmx.de> > Date: Mon Aug 24 11:19:33 2020 +0200 > > Warnings: function type cast for g_list_foreach > > I added a cast for the functions used in g_list_foreach. Without > the cast, the warning > warning: cast between incompatible function types > is reported. > > diff --git a/src/ui/gui/dialog-common.c b/src/ui/gui/dialog-common.c > index f167034b1..1b29c4a3b 100644 > --- a/src/ui/gui/dialog-common.c > +++ b/src/ui/gui/dialog-common.c > @@ -112,7 +112,7 @@ homogeneous_types (GtkWidget *source, GtkWidget *dest) > have_type = true; > } > > - g_list_foreach (list, (GFunc) gtk_tree_path_free, NULL); > + g_list_foreach (list, (GFunc) (void (*)(void)) gtk_tree_path_free, > NULL); > > > gtk_tree_path_free is already cast to GFunc, so what good does it do to first > cast it to something else, and _then_ to GFunc without using it? You say > that > something is reporting this as a "cast between incompatible types" - That is > what casts are for - to make incompatible types compatible. > > Before, we had: > > (void (*) (GtkTreePath *) -> (void (*) (void *, void *)) > > Now we have: > > (void (*) (GtkTreePath *) -> (void (*) (void)) -> (void (*) (void *, void > *)) > > What good does the intermediate cast do? Which tool is issuing a warning? > > J' > >