xref: /netbsd-src/tests/usr.bin/xlint/lint1/gcc_builtin_overflow.c (revision e6298b924c5ba98f3a22919b56dab04a87cdbb1c)
1*e6298b92Srillig /*	$NetBSD: gcc_builtin_overflow.c,v 1.3 2023/07/07 19:45:22 rillig Exp $	*/
29665ac6aSrillig # 3 "gcc_builtin_overflow.c"
39665ac6aSrillig 
49665ac6aSrillig /*
59665ac6aSrillig  * Some GCC builtin functions return bool, and in lint's strict bool mode,
69665ac6aSrillig  * that makes a difference.
79665ac6aSrillig  *
89665ac6aSrillig  * https://gcc.gnu.org/onlinedocs/gcc/Integer-Overflow-Builtins.html
99665ac6aSrillig  */
109665ac6aSrillig 
11*e6298b92Srillig /* lint1-extra-flags: -T -X 351 */
129665ac6aSrillig 
139665ac6aSrillig void
is_overflow(void)149665ac6aSrillig is_overflow(void)
159665ac6aSrillig {
169665ac6aSrillig 	int sum;
179665ac6aSrillig 
189665ac6aSrillig 	if (__builtin_add_overflow(1, 2, &sum))
199665ac6aSrillig 		return;
209665ac6aSrillig 
219665ac6aSrillig 	if (__builtin_add_overflow_p(1, 2, 12345))
229665ac6aSrillig 		return;
23a388352dSrillig 
24a388352dSrillig 	/* expect+1: error: controlling expression must be bool, not 'int' [333] */
25a388352dSrillig 	if (__builtin_other(1, 2, 12345))
26a388352dSrillig 		return;
279665ac6aSrillig }
28