Home | History | Annotate | Line # | Download | only in lint1
msg_302.c revision 1.5
      1  1.5  rillig /*	$NetBSD: msg_302.c,v 1.5 2023/04/15 10:53:59 rillig Exp $	*/
      2  1.1  rillig # 3 "msg_302.c"
      3  1.1  rillig 
      4  1.4  rillig // Test for message: '%s' returns pointer to automatic object [302]
      5  1.1  rillig 
      6  1.3  rillig void *
      7  1.3  rillig return_arg(int arg)
      8  1.3  rillig {
      9  1.4  rillig 	/* expect+1: warning: 'return_arg' returns pointer to automatic object [302] */
     10  1.3  rillig 	return &arg;
     11  1.3  rillig }
     12  1.3  rillig 
     13  1.3  rillig void *
     14  1.3  rillig return_local(void)
     15  1.3  rillig {
     16  1.3  rillig 	int local = 3;
     17  1.4  rillig 	/* expect+1: warning: 'return_local' returns pointer to automatic object [302] */
     18  1.3  rillig 	return &local;
     19  1.3  rillig }
     20  1.3  rillig 
     21  1.3  rillig void *
     22  1.5  rillig return_local_array(int x)
     23  1.3  rillig {
     24  1.5  rillig 	int local[5], *indirect = local;
     25  1.3  rillig 
     26  1.5  rillig 	switch (x) {
     27  1.5  rillig 	case 0:
     28  1.5  rillig 		/* expect+1: warning: 'return_local_array' returns pointer to automatic object [302] */
     29  1.5  rillig 		return local;
     30  1.5  rillig 	case 1:
     31  1.5  rillig 		/* expect+1: warning: 'return_local_array' returns pointer to automatic object [302] */
     32  1.5  rillig 		return &local[3];
     33  1.5  rillig 	case 2:
     34  1.5  rillig 		/* expect+1: warning: 'return_local_array' returns pointer to automatic object [302] */
     35  1.5  rillig 		return 5 + local;
     36  1.5  rillig 	case 3:
     37  1.5  rillig 		/* expect+1: warning: 'return_local_array' returns pointer to automatic object [302] */
     38  1.5  rillig 		return local + 5;
     39  1.5  rillig 	case 4:
     40  1.5  rillig 		/* XXX: lint only checks '+' but not '-'. */
     41  1.5  rillig 		return local - -3;
     42  1.5  rillig 	case 5:
     43  1.5  rillig 		/* XXX: lint doesn't track this indirection, but Clang-tidy does. */
     44  1.5  rillig 		return indirect;
     45  1.5  rillig 	default:
     46  1.5  rillig 		return "OK";
     47  1.5  rillig 	}
     48  1.3  rillig }
     49  1.3  rillig 
     50  1.3  rillig void *
     51  1.3  rillig return_static(void)
     52  1.3  rillig {
     53  1.3  rillig 	static int long_lived = 3;
     54  1.3  rillig 	return &long_lived;
     55  1.3  rillig }
     56