build: Add -Wnull-dereference

Sprinkle various g_assert() around the code where gcc cannot figure out
on its own that a variable is not NULL and too much refactoring would be
needed to make it do that.

Also fix usage of g_assert_nonnull(x) to use g_assert(x) because the
first is not marked as G_GNUC_NORETURN because of course GTester
supports not aborting on aborts.
This commit is contained in:
Benjamin Otte 2020-03-05 07:02:24 +01:00
parent 4be4799316
commit e356d59a92
18 changed files with 44 additions and 14 deletions

View File

@ -4118,6 +4118,7 @@ tablet_pad_handle_button (void *data,
wp_tablet_pad, button, state)); wp_tablet_pad, button, state));
group = tablet_pad_lookup_button_group (pad, button); group = tablet_pad_lookup_button_group (pad, button);
g_assert (group != NULL);
n_group = g_list_index (pad->mode_groups, group); n_group = g_list_index (pad->mode_groups, group);
event = gdk_event_pad_button_new (state == ZWP_TABLET_PAD_V2_BUTTON_STATE_PRESSED event = gdk_event_pad_button_new (state == ZWP_TABLET_PAD_V2_BUTTON_STATE_PRESSED

View File

@ -1505,15 +1505,19 @@ update_xft_settings (GdkDisplay *display)
TranslationEntry *entry; TranslationEntry *entry;
entry = find_translation_entry_by_schema ("org.gnome.settings-daemon.plugins.xsettings", "antialiasing"); entry = find_translation_entry_by_schema ("org.gnome.settings-daemon.plugins.xsettings", "antialiasing");
g_assert (entry);
antialiasing = entry->fallback.i; antialiasing = entry->fallback.i;
entry = find_translation_entry_by_schema ("org.gnome.settings-daemon.plugins.xsettings", "hinting"); entry = find_translation_entry_by_schema ("org.gnome.settings-daemon.plugins.xsettings", "hinting");
g_assert (entry);
hinting = entry->fallback.i; hinting = entry->fallback.i;
entry = find_translation_entry_by_schema ("org.gnome.settings-daemon.plugins.xsettings", "rgba-order"); entry = find_translation_entry_by_schema ("org.gnome.settings-daemon.plugins.xsettings", "rgba-order");
g_assert (entry);
order = entry->fallback.i; order = entry->fallback.i;
entry = find_translation_entry_by_schema ("org.gnome.desktop.interface", "text-scaling-factor"); entry = find_translation_entry_by_schema ("org.gnome.desktop.interface", "text-scaling-factor");
g_assert (entry);
dpi = 96.0 * entry->fallback.i / 65536.0 * 1024; /* Xft wants 1/1024th of an inch */ dpi = 96.0 * entry->fallback.i / 65536.0 * 1024; /* Xft wants 1/1024th of an inch */
} }
else else

View File

@ -2673,7 +2673,11 @@ gdk_x11_display_error_trap_pop_internal (GdkDisplay *display,
break; break;
} }
g_return_val_if_fail (trap != NULL, Success); if (trap == NULL)
{
g_critical ("gdk_x11_display_error_trap_pop() called without gdk_x11_display_error_trap_push()");
return Success;
}
g_assert (trap->end_sequence == 0); g_assert (trap->end_sequence == 0);
/* May need to sync to fill in trap->error_code if we care about /* May need to sync to fill in trap->error_code if we care about

View File

@ -129,7 +129,7 @@ _gdk_x11_surface_get_toplevel (GdkSurface *surface)
{ {
GdkX11Surface *impl; GdkX11Surface *impl;
g_return_val_if_fail (GDK_IS_SURFACE (surface), NULL); g_assert (GDK_IS_SURFACE (surface));
impl = GDK_X11_SURFACE (surface); impl = GDK_X11_SURFACE (surface);

View File

@ -658,7 +658,7 @@ gsk_gl_driver_mark_texture_permanent (GskGLDriver *self,
{ {
Texture *t = gsk_gl_driver_get_texture (self, texture_id); Texture *t = gsk_gl_driver_get_texture (self, texture_id);
g_assert_nonnull (t); g_assert (t != NULL);
t->permanent = TRUE; t->permanent = TRUE;
} }

View File

@ -332,6 +332,7 @@ internal_change_entry (const gchar *accel_path,
{ {
gtk_accel_map_add_entry (accel_path, 0, 0); gtk_accel_map_add_entry (accel_path, 0, 0);
entry = accel_path_lookup (accel_path); entry = accel_path_lookup (accel_path);
g_assert (entry);
entry->accel_key = accel_key; entry->accel_key = accel_key;
entry->accel_mods = accel_mods; entry->accel_mods = accel_mods;
entry->changed = TRUE; entry->changed = TRUE;

View File

@ -382,8 +382,7 @@ state_pop (ParserData *data)
{ {
gpointer old = NULL; gpointer old = NULL;
if (!data->stack) g_assert (data->stack);
return NULL;
old = data->stack->data; old = data->stack->data;
data->stack = g_slist_delete_link (data->stack, data->stack); data->stack = g_slist_delete_link (data->stack, data->stack);

View File

@ -4082,6 +4082,7 @@ gtk_icon_theme_lookup_by_gicon (GtkIconTheme *self,
/* We can't render emblemed icons atm, but at least render the base */ /* We can't render emblemed icons atm, but at least render the base */
while (G_IS_EMBLEMED_ICON (gicon)) while (G_IS_EMBLEMED_ICON (gicon))
gicon = g_emblemed_icon_get_icon (G_EMBLEMED_ICON (gicon)); gicon = g_emblemed_icon_get_icon (G_EMBLEMED_ICON (gicon));
g_assert (gicon); /* shut up gcc -Wnull-dereference */
if (GDK_IS_PIXBUF (gicon)) if (GDK_IS_PIXBUF (gicon))
{ {

View File

@ -234,6 +234,7 @@ gtk_menu_tracker_item_visibility_changed (GtkMenuTrackerItem *item,
/* remember: the item is our model */ /* remember: the item is our model */
section = gtk_menu_tracker_section_find_model (tracker->toplevel, item, &offset); section = gtk_menu_tracker_section_find_model (tracker->toplevel, item, &offset);
g_assert (section);
was_visible = section->items != NULL; was_visible = section->items != NULL;
@ -424,6 +425,7 @@ gtk_menu_tracker_model_changed (GMenuModel *model,
* position of that section within the overall menu. * position of that section within the overall menu.
*/ */
section = gtk_menu_tracker_section_find_model (tracker->toplevel, model, &offset); section = gtk_menu_tracker_section_find_model (tracker->toplevel, model, &offset);
g_assert (section);
/* Next, seek through that section to the change point. This gives us /* Next, seek through that section to the change point. This gives us
* the correct GSList** to make the change to and also finds the final * the correct GSList** to make the change to and also finds the final

View File

@ -690,6 +690,7 @@ gtk_path_bar_scroll_down (GtkPathBar *path_bar)
break; break;
} }
} }
g_assert (down_button);
gtk_widget_get_allocation (GTK_WIDGET (path_bar), &allocation); gtk_widget_get_allocation (GTK_WIDGET (path_bar), &allocation);
gtk_widget_get_allocation (BUTTON_DATA (down_button->data)->button, &button_allocation); gtk_widget_get_allocation (BUTTON_DATA (down_button->data)->button, &button_allocation);

View File

@ -441,6 +441,7 @@ gtk_rb_tree_remove_node_fixup (GtkRbTree *tree,
gtk_rb_node_rotate_left (tree, p); gtk_rb_node_rotate_left (tree, p);
w = p->right; w = p->right;
} }
g_assert (w);
if (is_black (w->left) && is_black (w->right)) if (is_black (w->left) && is_black (w->right))
{ {
set_red (w); set_red (w);
@ -472,6 +473,7 @@ gtk_rb_tree_remove_node_fixup (GtkRbTree *tree,
gtk_rb_node_rotate_right (tree, p); gtk_rb_node_rotate_right (tree, p);
w = p->left; w = p->left;
} }
g_assert (w);
if (is_black (w->right) && is_black (w->left)) if (is_black (w->right) && is_black (w->left))
{ {
set_red (w); set_red (w);

View File

@ -693,6 +693,7 @@ gtk_shortcuts_section_reflow_groups (GtkShortcutsSection *self)
n += height; n += height;
} }
g_assert (g);
for (g = g->next; g; g = g->next) for (g = g->next; g; g = g->next)
{ {
GtkShortcutsGroup *group = g->data; GtkShortcutsGroup *group = g->data;

View File

@ -2849,8 +2849,9 @@ _gtk_text_btree_set_mark (GtkTextBTree *tree,
seg = real_set_mark (tree, existing_mark, seg = real_set_mark (tree, existing_mark,
name, left_gravity, iter, should_exist, name, left_gravity, iter, should_exist,
TRUE); TRUE);
g_assert (seg);
return seg ? seg->body.mark.obj : NULL; return seg->body.mark.obj;
} }
gboolean gboolean
@ -3126,7 +3127,7 @@ _gtk_text_btree_last_could_contain_tag (GtkTextBTree *tree,
{ {
info = gtk_text_btree_get_existing_tag_info (tree, tag); info = gtk_text_btree_get_existing_tag_info (tree, tag);
if (info->tag_root == NULL) if (info == NULL || info->tag_root == NULL)
return NULL; return NULL;
node = info->tag_root; node = info->tag_root;
@ -3135,7 +3136,6 @@ _gtk_text_btree_last_could_contain_tag (GtkTextBTree *tree,
while (node->level > 0) while (node->level > 0)
{ {
g_assert (node != NULL); /* Failure probably means bad tag summaries. */
last_node = NULL; last_node = NULL;
node = node->children.node; node = node->children.node;
while (node != NULL) while (node != NULL)
@ -3146,6 +3146,7 @@ _gtk_text_btree_last_could_contain_tag (GtkTextBTree *tree,
} }
node = last_node; node = last_node;
g_assert (node != NULL); /* Failure probably means bad tag summaries. */
} }
g_assert (node != NULL); /* The tag summaries said some node had g_assert (node != NULL); /* The tag summaries said some node had
@ -3450,6 +3451,7 @@ ensure_end_iter_segment (GtkTextBTree *tree)
last_with_chars = seg; last_with_chars = seg;
seg = seg->next; seg = seg->next;
} }
g_assert (last_with_chars);
tree->end_iter_segment = last_with_chars; tree->end_iter_segment = last_with_chars;
@ -4455,10 +4457,6 @@ _gtk_text_line_next_could_contain_tag (GtkTextLine *line,
while (node->level > 0) while (node->level > 0)
{ {
g_assert (node != NULL); /* If this fails, it likely means an
incorrect tag summary led us on a
wild goose chase down this branch of
the tree. */
node = node->children.node; node = node->children.node;
while (node != NULL) while (node != NULL)
{ {
@ -4466,6 +4464,10 @@ _gtk_text_line_next_could_contain_tag (GtkTextLine *line,
break; break;
node = node->next; node = node->next;
} }
g_assert (node != NULL); /* If this fails, it likely means an
incorrect tag summary led us on a
wild goose chase down this branch of
the tree. */
} }
g_assert (node != NULL); g_assert (node != NULL);

View File

@ -209,6 +209,8 @@ gtk_text_iter_make_real (const GtkTextIter *_iter)
GtkTextRealIter *iter; GtkTextRealIter *iter;
iter = gtk_text_iter_make_surreal (_iter); iter = gtk_text_iter_make_surreal (_iter);
if (iter == NULL)
return NULL;
if (iter->segments_changed_stamp != if (iter->segments_changed_stamp !=
_gtk_text_btree_get_segments_changed_stamp (iter->tree)) _gtk_text_btree_get_segments_changed_stamp (iter->tree))
@ -242,8 +244,8 @@ iter_init_common (GtkTextIter *_iter,
{ {
GtkTextRealIter *iter = (GtkTextRealIter*)_iter; GtkTextRealIter *iter = (GtkTextRealIter*)_iter;
g_return_val_if_fail (iter != NULL, NULL); g_assert (iter != NULL);
g_return_val_if_fail (tree != NULL, NULL); g_assert (tree != NULL);
memset (iter, 0, sizeof (GtkTextRealIter)); memset (iter, 0, sizeof (GtkTextRealIter));

View File

@ -3002,6 +3002,7 @@ gtk_tree_model_filter_get_iter_full (GtkTreeModel *model,
} }
elt = GET_ELT (siter); elt = GET_ELT (siter);
g_assert (elt);
if (!elt->children) if (!elt->children)
gtk_tree_model_filter_build_level (filter, level, elt, FALSE); gtk_tree_model_filter_build_level (filter, level, elt, FALSE);
@ -3072,6 +3073,7 @@ gtk_tree_model_filter_get_iter (GtkTreeModel *model,
} }
elt = GET_ELT (siter); elt = GET_ELT (siter);
g_assert (elt);
if (!elt->children) if (!elt->children)
gtk_tree_model_filter_build_level (filter, level, elt, FALSE); gtk_tree_model_filter_build_level (filter, level, elt, FALSE);
level = elt->children; level = elt->children;
@ -4192,6 +4194,7 @@ gtk_tree_model_filter_convert_path_to_child_path (GtkTreeModelFilter *filter,
} }
elt = GET_ELT (siter); elt = GET_ELT (siter);
g_assert (elt);
if (elt->children == NULL) if (elt->children == NULL)
gtk_tree_model_filter_build_level (filter, level, elt, FALSE); gtk_tree_model_filter_build_level (filter, level, elt, FALSE);

View File

@ -1285,6 +1285,7 @@ gtk_tree_model_sort_get_iter (GtkTreeModel *tree_model,
} }
elt = GET_ELT (siter); elt = GET_ELT (siter);
g_assert (elt);
if (elt->children == NULL) if (elt->children == NULL)
gtk_tree_model_sort_build_level (tree_model_sort, level, elt); gtk_tree_model_sort_build_level (tree_model_sort, level, elt);
@ -2395,6 +2396,7 @@ gtk_tree_model_sort_convert_path_to_child_path (GtkTreeModelSort *tree_model_sor
} }
elt = GET_ELT (siter); elt = GET_ELT (siter);
g_assert (elt);
if (elt->children == NULL) if (elt->children == NULL)
gtk_tree_model_sort_build_level (tree_model_sort, level, elt); gtk_tree_model_sort_build_level (tree_model_sort, level, elt);

View File

@ -269,6 +269,7 @@ gtk_tree_rbtree_remove_node_fixup (GtkTreeRBTree *tree,
gtk_tree_rbnode_rotate_left (tree, parent); gtk_tree_rbnode_rotate_left (tree, parent);
w = parent->right; w = parent->right;
} }
g_assert (w);
if (GTK_TREE_RBNODE_GET_COLOR (w->left) == GTK_TREE_RBNODE_BLACK && GTK_TREE_RBNODE_GET_COLOR (w->right) == GTK_TREE_RBNODE_BLACK) if (GTK_TREE_RBNODE_GET_COLOR (w->left) == GTK_TREE_RBNODE_BLACK && GTK_TREE_RBNODE_GET_COLOR (w->right) == GTK_TREE_RBNODE_BLACK)
{ {
GTK_TREE_RBNODE_SET_COLOR (w, GTK_TREE_RBNODE_RED); GTK_TREE_RBNODE_SET_COLOR (w, GTK_TREE_RBNODE_RED);
@ -300,6 +301,7 @@ gtk_tree_rbtree_remove_node_fixup (GtkTreeRBTree *tree,
gtk_tree_rbnode_rotate_right (tree, parent); gtk_tree_rbnode_rotate_right (tree, parent);
w = parent->left; w = parent->left;
} }
g_assert (w);
if (GTK_TREE_RBNODE_GET_COLOR (w->right) == GTK_TREE_RBNODE_BLACK && GTK_TREE_RBNODE_GET_COLOR (w->left) == GTK_TREE_RBNODE_BLACK) if (GTK_TREE_RBNODE_GET_COLOR (w->right) == GTK_TREE_RBNODE_BLACK && GTK_TREE_RBNODE_GET_COLOR (w->left) == GTK_TREE_RBNODE_BLACK)
{ {
GTK_TREE_RBNODE_SET_COLOR (w, GTK_TREE_RBNODE_RED); GTK_TREE_RBNODE_SET_COLOR (w, GTK_TREE_RBNODE_RED);
@ -1595,6 +1597,8 @@ gtk_tree_rbtree_test_dirty (GtkTreeRBTree *tree,
GtkTreeRBNode *node, GtkTreeRBNode *node,
gint expected_dirtyness) gint expected_dirtyness)
{ {
g_assert (node);
if (expected_dirtyness) if (expected_dirtyness)
{ {
g_assert (GTK_TREE_RBNODE_FLAG_SET (node, GTK_TREE_RBNODE_COLUMN_INVALID) || g_assert (GTK_TREE_RBNODE_FLAG_SET (node, GTK_TREE_RBNODE_COLUMN_INVALID) ||

View File

@ -251,6 +251,7 @@ elif cc.get_id() == 'gcc' or cc.get_id() == 'clang'
'-Wmissing-include-dirs', '-Wmissing-include-dirs',
'-Wmissing-noreturn', '-Wmissing-noreturn',
'-Wnested-externs', '-Wnested-externs',
'-Wnull-dereference',
'-Wold-style-definition', '-Wold-style-definition',
'-Wpointer-arith', '-Wpointer-arith',
'-Wshadow', '-Wshadow',