11f5207b7SJohn Levon #include "check_debug.h"
21f5207b7SJohn Levon 
frob(void)31f5207b7SJohn Levon void frob(void){}
41f5207b7SJohn Levon 
51f5207b7SJohn Levon int x[10];
61f5207b7SJohn Levon int offset;
func(int * y)71f5207b7SJohn Levon void func(int *y)
81f5207b7SJohn Levon {
91f5207b7SJohn Levon 	if (({int test2 = !!(!y || !*y); frob(); frob(); frob(); test2;}))
101f5207b7SJohn Levon 		__smatch_value("y");
111f5207b7SJohn Levon 	else
121f5207b7SJohn Levon 		__smatch_value("y");
131f5207b7SJohn Levon 
14*efe51d0cSJohn Levon 	if (({int test2 = !!(offset >= 10u || x[offset] == 1); frob(); frob(); frob(); test2;}))
151f5207b7SJohn Levon 		__smatch_value("offset");
161f5207b7SJohn Levon 	else
171f5207b7SJohn Levon 		__smatch_value("offset");
181f5207b7SJohn Levon 
191f5207b7SJohn Levon }
201f5207b7SJohn Levon /*
211f5207b7SJohn Levon  * check-name: smatch implied #10
221f5207b7SJohn Levon  * check-command: smatch -I.. -m64 sm_implied10.c
231f5207b7SJohn Levon  *
241f5207b7SJohn Levon  * check-output-start
25*efe51d0cSJohn Levon sm_implied10.c:10 func() y = 0,4096-ptr_max
26*efe51d0cSJohn Levon sm_implied10.c:12 func() y = 4096-ptr_max
27*efe51d0cSJohn Levon sm_implied10.c:15 func() offset = s32min-s32max
281f5207b7SJohn Levon sm_implied10.c:17 func() offset = 0-9
291f5207b7SJohn Levon  * check-output-end
301f5207b7SJohn Levon  */
31