Patch 7.4.2358
Problem:    Compiler warnings with Solaris Studio when using GTK3.
Solution:   Define FUNC2GENERIC depending on the system. (Kazunobu Kuriyama)
Files:      src/gui.h, src/gui_beval.c, src/gui_gtk_f.c


*** ../vim-7.4.2357/src/gui.h   2016-08-29 22:48:12.133106320 +0200
--- src/gui.h   2016-09-09 22:00:25.423601792 +0200
***************
*** 541,543 ****
--- 541,569 ----
  # define CONVERT_FROM_UTF8(String) (String)
  # define CONVERT_FROM_UTF8_FREE(String) ((String) = (char_u *)NULL)
  #endif /* FEAT_GUI_GTK */
+ 
+ #ifdef FEAT_GUI_GTK
+ /*
+  * The second parameter of g_signal_handlers_disconnect_by_func() is supposed
+  * to be a function pointer which was passed to g_signal_connect_*() somewhere
+  * previously, and hence it must be of type GCallback, i.e., void (*)(void).
+  *
+  * Meanwhile, g_signal_handlers_disconnect_by_func() is a macro calling
+  * g_signal_handlers_disconnect_matched(), and the second parameter of the
+  * former is to be passed to the sixth parameter of the latter the type of
+  * which, however, is declared as void * in the function signature.
+  *
+  * While the ISO C Standard does not require that function pointers be
+  * interconvertible to void *, widely-used compilers such as gcc and clang
+  * do such conversion implicitly and automatically on some platforms without
+  * issuing any warning.
+  *
+  * For Solaris Studio, that is not the case.  An explicit type cast is needed
+  * to suppress warnings on that particular conversion.
+  */
+ # if defined(__SUNPRO_C) && defined(USE_GTK3)
+ #  define FUNC2GENERIC(func) (void *)(func)
+ # else
+ #  define FUNC2GENERIC(func) G_CALLBACK(func)
+ # endif
+ #endif /* FEAT_GUI_GTK */
*** ../vim-7.4.2357/src/gui_beval.c     2016-08-29 22:48:12.137106286 +0200
--- src/gui_beval.c     2016-09-09 22:00:25.427601739 +0200
***************
*** 508,514 ****
      /* LINTED: avoid warning: dubious operation on enum */
  # if GTK_CHECK_VERSION(3,0,0)
      g_signal_handlers_disconnect_by_func(G_OBJECT(beval->target),
!                                        G_CALLBACK(target_event_cb),
                                         beval);
  # else
      gtk_signal_disconnect_by_func((GtkObject*)(beval->target),
--- 508,514 ----
      /* LINTED: avoid warning: dubious operation on enum */
  # if GTK_CHECK_VERSION(3,0,0)
      g_signal_handlers_disconnect_by_func(G_OBJECT(beval->target),
!                                        FUNC2GENERIC(target_event_cb),
                                         beval);
  # else
      gtk_signal_disconnect_by_func((GtkObject*)(beval->target),
***************
*** 522,528 ****
        /* LINTED: avoid warning: dubious operation on enum */
  # if GTK_CHECK_VERSION(3,0,0)
        g_signal_handlers_disconnect_by_func(G_OBJECT(gui.mainwin),
!                                            G_CALLBACK(mainwin_event_cb),
                                             beval);
  # else
        gtk_signal_disconnect_by_func((GtkObject*)(gui.mainwin),
--- 522,528 ----
        /* LINTED: avoid warning: dubious operation on enum */
  # if GTK_CHECK_VERSION(3,0,0)
        g_signal_handlers_disconnect_by_func(G_OBJECT(gui.mainwin),
!                                            FUNC2GENERIC(mainwin_event_cb),
                                             beval);
  # else
        gtk_signal_disconnect_by_func((GtkObject*)(gui.mainwin),
*** ../vim-7.4.2357/src/gui_gtk_f.c     2016-08-29 22:48:12.137106286 +0200
--- src/gui_gtk_f.c     2016-09-09 22:00:25.427601739 +0200
***************
*** 505,522 ****
        {
  #if GTK_CHECK_VERSION(3,0,0)
            g_signal_handlers_disconnect_by_func(G_OBJECT(child->widget),
!                   G_CALLBACK(gtk_form_child_map),
                    child);
            g_signal_handlers_disconnect_by_func(G_OBJECT(child->widget),
!                   G_CALLBACK(gtk_form_child_unmap),
                    child);
  #else
            gtk_signal_disconnect_by_func(GTK_OBJECT(child->widget),
!                                         GTK_SIGNAL_FUNC(gtk_form_child_map),
!                                         child);
            gtk_signal_disconnect_by_func(GTK_OBJECT(child->widget),
!                                         GTK_SIGNAL_FUNC(gtk_form_child_unmap),
!                                         child);
  #endif
  
            gdk_window_set_user_data(child->window, NULL);
--- 505,522 ----
        {
  #if GTK_CHECK_VERSION(3,0,0)
            g_signal_handlers_disconnect_by_func(G_OBJECT(child->widget),
!                   FUNC2GENERIC(gtk_form_child_map),
                    child);
            g_signal_handlers_disconnect_by_func(G_OBJECT(child->widget),
!                   FUNC2GENERIC(gtk_form_child_unmap),
                    child);
  #else
            gtk_signal_disconnect_by_func(GTK_OBJECT(child->widget),
!                   GTK_SIGNAL_FUNC(gtk_form_child_map),
!                   child);
            gtk_signal_disconnect_by_func(GTK_OBJECT(child->widget),
!                   GTK_SIGNAL_FUNC(gtk_form_child_unmap),
!                   child);
  #endif
  
            gdk_window_set_user_data(child->window, NULL);
***************
*** 793,806 ****
        {
  #if GTK_CHECK_VERSION(3,0,0)
            g_signal_handlers_disconnect_by_func(G_OBJECT(child->widget),
!                                         G_CALLBACK(&gtk_form_child_map), 
child);
            g_signal_handlers_disconnect_by_func(G_OBJECT(child->widget),
!                                         G_CALLBACK(&gtk_form_child_unmap), 
child);
  #else
            gtk_signal_disconnect_by_func(GTK_OBJECT(child->widget),
!                                         GTK_SIGNAL_FUNC(&gtk_form_child_map), 
child);
            gtk_signal_disconnect_by_func(GTK_OBJECT(child->widget),
!                                         
GTK_SIGNAL_FUNC(&gtk_form_child_unmap), child);
  #endif
  
            /* FIXME: This will cause problems for reparenting NO_WINDOW
--- 793,806 ----
        {
  #if GTK_CHECK_VERSION(3,0,0)
            g_signal_handlers_disconnect_by_func(G_OBJECT(child->widget),
!                   FUNC2GENERIC(&gtk_form_child_map), child);
            g_signal_handlers_disconnect_by_func(G_OBJECT(child->widget),
!                   FUNC2GENERIC(&gtk_form_child_unmap), child);
  #else
            gtk_signal_disconnect_by_func(GTK_OBJECT(child->widget),
!                   GTK_SIGNAL_FUNC(&gtk_form_child_map), child);
            gtk_signal_disconnect_by_func(GTK_OBJECT(child->widget),
!                   GTK_SIGNAL_FUNC(&gtk_form_child_unmap), child);
  #endif
  
            /* FIXME: This will cause problems for reparenting NO_WINDOW
*** ../vim-7.4.2357/src/version.c       2016-09-09 21:42:32.214073404 +0200
--- src/version.c       2016-09-09 22:01:45.438522663 +0200
***************
*** 765,766 ****
--- 765,768 ----
  {   /* Add new patch number below this line */
+ /**/
+     2358,
  /**/



-- 
How do I set the laser printer to stun? 

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui