Index: uspace/app/tester/fault/fault1.c
===================================================================
--- uspace/app/tester/fault/fault1.c	(revision 71b4444cd56da7664761b6fd0997b0d3b2cbd9db)
+++ uspace/app/tester/fault/fault1.c	(revision dd7df1cd6dbadcfeee4d7063c1dff2bcf88c8521)
@@ -30,4 +30,6 @@
 #include "../tester.h"
 
+#pragma GCC diagnostic ignored "-Warray-bounds"
+
 const char *test_fault1(void)
 {
Index: uspace/app/tester/print/print5.c
===================================================================
--- uspace/app/tester/print/print5.c	(revision 71b4444cd56da7664761b6fd0997b0d3b2cbd9db)
+++ uspace/app/tester/print/print5.c	(revision dd7df1cd6dbadcfeee4d7063c1dff2bcf88c8521)
@@ -38,4 +38,5 @@
  */
 #pragma GCC diagnostic ignored "-Wformat"
+#pragma GCC diagnostic ignored "-Wformat-overflow"
 
 #include <stdio.h>
Index: uspace/lib/c/generic/rtld/symbol.c
===================================================================
--- uspace/lib/c/generic/rtld/symbol.c	(revision 71b4444cd56da7664761b6fd0997b0d3b2cbd9db)
+++ uspace/lib/c/generic/rtld/symbol.c	(revision dd7df1cd6dbadcfeee4d7063c1dff2bcf88c8521)
@@ -135,8 +135,21 @@
 	modules_untag(start->rtld);
 
-	/* Insert root (the program) into the queue and tag it */
+	/*
+	 * Insert root (the program) into the queue and tag it.
+	 *
+	 * We disable the dangling-pointer warning because the compiler incorrectly
+	 * assumes that we leak local address (queue) to a parent scope (to start
+	 * argument). However, we always empty the list so the pointer cannot
+	 * actually escape. Probably the compiler can never statically analyze that
+	 * correctly.
+	 */
 	list_initialize(&queue);
 	start->bfs_tag = true;
+#pragma GCC diagnostic push
+#if defined(__GNUC__) && (__GNUC__ >= 12)
+#pragma GCC diagnostic ignored "-Wdangling-pointer"
+#endif
 	list_append(&start->queue_link, &queue);
+#pragma GCC diagnostic pop
 
 	/* If the symbol is found, it will be stored in 'sym' */
Index: uspace/lib/c/test/string.c
===================================================================
--- uspace/lib/c/test/string.c	(revision 71b4444cd56da7664761b6fd0997b0d3b2cbd9db)
+++ uspace/lib/c/test/string.c	(revision dd7df1cd6dbadcfeee4d7063c1dff2bcf88c8521)
@@ -799,5 +799,11 @@
 PCUT_TEST(strndup_nonempty_short)
 {
+#pragma GCC diagnostic push
+	// Intentionally checking it works with _longer_ size than actual
+#if defined(__GNUC__) && (__GNUC__ >= 11)
+#pragma GCC diagnostic ignored "-Wstringop-overread"
+#endif
 	char *d = strndup("abc", 5);
+#pragma GCC diagnostic pop
 	PCUT_ASSERT_NOT_NULL(d);
 	PCUT_ASSERT_TRUE(d[0] == 'a');
Index: uspace/srv/hid/display/test/window.c
===================================================================
--- uspace/srv/hid/display/test/window.c	(revision 71b4444cd56da7664761b6fd0997b0d3b2cbd9db)
+++ uspace/srv/hid/display/test/window.c	(revision dd7df1cd6dbadcfeee4d7063c1dff2bcf88c8521)
@@ -1109,4 +1109,10 @@
 	PCUT_ASSERT_EQUALS(wnd->display->cursor[dcurs_arrow], wnd->cursor);
 
+	// Check that invalid cursors cannot be set: ignore enum conversions
+	// as we are out-of-bounds
+#pragma GCC diagnostic push
+#if defined(__GNUC__) && (__GNUC__ >= 10)
+#pragma GCC diagnostic ignored "-Wenum-conversion"
+#endif
 	rc = ds_window_set_cursor(wnd, dcurs_limit);
 	PCUT_ASSERT_ERRNO_VAL(EINVAL, rc);
@@ -1116,4 +1122,5 @@
 	PCUT_ASSERT_ERRNO_VAL(EINVAL, rc);
 	PCUT_ASSERT_EQUALS(wnd->display->cursor[dcurs_arrow], wnd->cursor);
+#pragma GCC diagnostic pop
 
 	rc = ds_window_set_cursor(wnd, dcurs_size_lr);
