Module Name:    src
Committed By:   rin
Date:           Fri Aug  4 03:31:13 UTC 2023

Modified Files:
        src/tests/lib/libc/gen: t_siginfo.c

Log Message:
t_siginfo:sigfpe_int: Adjust for GCC12

Do not use constant 1 as numerator to raise integer division by zero.
GCC >= 12 optimizes (1 / i) into (abs(i) == 1 ? i : 0), even for -O0.


To generate a diff of this commit:
cvs rdiff -u -r1.48 -r1.49 src/tests/lib/libc/gen/t_siginfo.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/lib/libc/gen/t_siginfo.c
diff -u src/tests/lib/libc/gen/t_siginfo.c:1.48 src/tests/lib/libc/gen/t_siginfo.c:1.49
--- src/tests/lib/libc/gen/t_siginfo.c:1.48	Sun May  7 12:41:49 2023
+++ src/tests/lib/libc/gen/t_siginfo.c	Fri Aug  4 03:31:13 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: t_siginfo.c,v 1.48 2023/05/07 12:41:49 skrll Exp $ */
+/* $NetBSD: t_siginfo.c,v 1.49 2023/08/04 03:31:13 rin Exp $ */
 
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -365,7 +365,6 @@ ATF_TC_HEAD(sigfpe_int, tc)
 ATF_TC_BODY(sigfpe_int, tc)
 {
 	struct sigaction sa;
-	long l = strtol("0", NULL, 10);
 
 #if defined(__aarch64__) || defined(__powerpc__) || defined(__sh3__)
 	atf_tc_skip("Integer division by zero doesn't trap");
@@ -380,7 +379,13 @@ ATF_TC_BODY(sigfpe_int, tc)
 #elif defined(_FLOAT_IEEE754)
 		fpsetmask(FP_X_INV|FP_X_DZ|FP_X_OFL|FP_X_UFL|FP_X_IMP);
 #endif
-		printf("%ld\n", 1 / l);
+		/*
+		 * Do not use constant 1 here. GCC >= 12 optimizes
+		 * (1 / i) to (abs(i) == 1 ? i : 0), even for -O0.
+		 */
+		long unity = strtol("1", NULL, 10),
+		     zero  = strtol("0", NULL, 10);
+		printf("%ld\n", unity / zero);
 	}
 	if (intdiv_signalled == 0)
 		atf_tc_fail("FPE signal handler was not invoked");

Reply via email to