Commit 9b00c160 authored by Marco Elver's avatar Marco Elver Committed by Peter Zijlstra
Browse files

compiler-context-analysis: Add test stub



Add a simple test stub where we will add common supported patterns that
should not generate false positives for each new supported context lock.

Signed-off-by: default avatarMarco Elver <elver@google.com>
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Link: https://patch.msgid.link/20251219154418.3592607-4-elver@google.com
parent 3269701c
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -2835,6 +2835,20 @@ config LINEAR_RANGES_TEST

	  If unsure, say N.

config CONTEXT_ANALYSIS_TEST
	bool "Compiler context-analysis warnings test"
	depends on EXPERT
	help
	  This builds the test for compiler-based context analysis. The test
	  does not add executable code to the kernel, but is meant to test that
	  common patterns supported by the analysis do not result in false
	  positive warnings.

	  When adding support for new context locks, it is strongly recommended
	  to add supported patterns to this test.

	  If unsure, say N.

config CMDLINE_KUNIT_TEST
	tristate "KUnit test for cmdline API" if !KUNIT_ALL_TESTS
	depends on KUNIT
+3 −0
Original line number Diff line number Diff line
@@ -331,4 +331,7 @@ obj-$(CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED) += devmem_is_allowed.o

obj-$(CONFIG_FIRMWARE_TABLE) += fw_table.o

CONTEXT_ANALYSIS_test_context-analysis.o := y
obj-$(CONFIG_CONTEXT_ANALYSIS_TEST) += test_context-analysis.o

subdir-$(CONFIG_FORTIFY_SOURCE) += test_fortify
+18 −0
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0-only
/*
 * Compile-only tests for common patterns that should not generate false
 * positive errors when compiled with Clang's context analysis.
 */

#include <linux/build_bug.h>

/*
 * Test that helper macros work as expected.
 */
static void __used test_common_helpers(void)
{
	BUILD_BUG_ON(context_unsafe(3) != 3); /* plain expression */
	BUILD_BUG_ON(context_unsafe((void)2; 3) != 3); /* does not swallow semi-colon */
	BUILD_BUG_ON(context_unsafe((void)2, 3) != 3); /* does not swallow commas */
	context_unsafe(do { } while (0)); /* works with void statements */
}