gnome-control-center/panels/privacy
Philip Withnall ea014f24eb general: Fix various strict-aliasing warnings with g_clear_pointer()
This is just unfortunate. It’s an aliasing violation to cast a pointer
to a pointer (and there’s no way round that), although in practice it
will not cause a problem. People do quite often compile with
`-Werror=strict-aliasing`, though, so fixing the warnings is helpful.

Warnings are of the form:
```
../../source/gnome-control-center/panels/keyboard/cc-keyboard-shortcut-dialog.c: In function ‘cc_keyboard_shortcut_dialog_finalize’:
../../source/gnome-control-center/panels/keyboard/cc-keyboard-shortcut-dialog.c:518:20: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
  518 |   g_clear_pointer ((GtkWindow**)&self->shortcut_editor, gtk_window_destroy);
/opt/gnome/install/include/glib-2.0/glib/gmacros.h:871:47: note: in definition of macro ‘G_STATIC_ASSERT’
  871 | #define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
      |                                               ^~~~
../../source/gnome-control-center/panels/keyboard/cc-keyboard-shortcut-dialog.c:518:3: note: in expansion of macro ‘g_clear_pointer’
  518 |   g_clear_pointer ((GtkWindow**)&self->shortcut_editor, gtk_window_destroy);
      |   ^~~~~~~~~~~~~~~
In file included from /opt/gnome/install/include/glib-2.0/glib/gatomic.h:30,
                 from /opt/gnome/install/include/glib-2.0/glib/gthread.h:34,
                 from /opt/gnome/install/include/glib-2.0/glib/gasyncqueue.h:34,
                 from /opt/gnome/install/include/glib-2.0/glib.h:34:
../../source/gnome-control-center/panels/keyboard/cc-keyboard-shortcut-dialog.c:518:20: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
  518 |   g_clear_pointer ((GtkWindow**)&self->shortcut_editor, gtk_window_destroy);
/opt/gnome/install/include/glib-2.0/glib/glib-typeof.h:39:36: note: in definition of macro ‘glib_typeof’
   39 | #define glib_typeof(t) __typeof__ (t)
      |                                    ^
../../source/gnome-control-center/panels/keyboard/cc-keyboard-shortcut-dialog.c:518:3: note: in expansion of macro ‘g_clear_pointer’
  518 |   g_clear_pointer ((GtkWindow**)&self->shortcut_editor, gtk_window_destroy);
      |   ^~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
```

I believe it’s better to fix these by expanding out the
`g_clear_pointer()` call, than by changing the types of variables — the
latter approach means everything becomes a `GtkWidget` or a `GtkWindow`,
which loses type specificity. So this approach is in contrast to that
taken in commit 1bafd46ea3, for example.

Alternative approaches would be:
 1. Add internal `cc_clear_window()` and `cc_clear_widget()` helpers
    which do this in a single line without aliasing violations.
 2. Enforce compiling with `-Wno-strict-aliasing` if strict aliasing is
    not something that g-c-c maintainers want to care about (which would
    be fine, aliasing checks probably won’t catch any bugs in this kind
    of code).

Signed-off-by: Philip Withnall <pwithnall@gnome.org>

Fixes: #2563
2024-05-16 14:01:02 +00:00
..
bolt general: Fix various strict-aliasing warnings with g_clear_pointer() 2024-05-16 14:01:02 +00:00
camera privacy: Remove rows that had their perms reset 2024-04-18 13:36:26 +00:00
diagnostics general: Use em dash in some places 2024-04-18 08:42:50 +00:00
firmware-security general: Fix several uninitialised-autoptr variables 2024-05-16 14:01:02 +00:00
icons Unify elements in the icon assets to shrink their file size 2024-04-29 11:01:18 -02:30
location privacy: Remove rows that had their perms reset 2024-04-18 13:36:26 +00:00
screen privacy,screen: Port delay lists to CcNumberList 2024-05-14 21:29:02 +02:00
usage cc-usage-page: Fixed typo in Trash & Temporary Files preferences 2024-05-02 09:25:53 +00:00
cc-privacy-panel.c build, privacy: Make Location settings build conditional 2024-04-04 13:52:10 +02:00
cc-privacy-panel.h panels: Add empty Privacy panel with navigation 2023-08-03 08:42:10 +00:00
cc-privacy-panel.ui privacy: Use org.gnome.Settings namespace for symbolic icons 2024-04-29 11:01:18 -02:30
gnome-privacy-panel.desktop.in privacy: Hide non-functional microphone panel 2024-01-22 09:20:41 +00:00
meson.build privacy: Add subfolders to include paths 2024-05-16 14:01:02 +00:00
privacy.gresource.xml privacy: Use org.gnome.Settings namespace for symbolic icons 2024-04-29 11:01:18 -02:30
update-from-bolt.sh privacy: Add thunderbolt page 2023-08-03 08:42:10 +00:00