Home | History | Annotate | Line # | Download | only in lint1
      1  1.8  rillig /*	$NetBSD: msg_302.c,v 1.8 2023/07/07 19:45:22 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.8  rillig /* lint1-extra-flags: -X 351 */
      7  1.8  rillig 
      8  1.3  rillig void *
      9  1.3  rillig return_arg(int arg)
     10  1.3  rillig {
     11  1.4  rillig 	/* expect+1: warning: 'return_arg' returns pointer to automatic object [302] */
     12  1.3  rillig 	return &arg;
     13  1.3  rillig }
     14  1.3  rillig 
     15  1.3  rillig void *
     16  1.3  rillig return_local(void)
     17  1.3  rillig {
     18  1.3  rillig 	int local = 3;
     19  1.4  rillig 	/* expect+1: warning: 'return_local' returns pointer to automatic object [302] */
     20  1.3  rillig 	return &local;
     21  1.3  rillig }
     22  1.3  rillig 
     23  1.3  rillig void *
     24  1.5  rillig return_local_array(int x)
     25  1.3  rillig {
     26  1.5  rillig 	int local[5], *indirect = local;
     27  1.3  rillig 
     28  1.5  rillig 	switch (x) {
     29  1.5  rillig 	case 0:
     30  1.5  rillig 		/* expect+1: warning: 'return_local_array' returns pointer to automatic object [302] */
     31  1.5  rillig 		return local;
     32  1.5  rillig 	case 1:
     33  1.5  rillig 		/* expect+1: warning: 'return_local_array' returns pointer to automatic object [302] */
     34  1.5  rillig 		return &local[3];
     35  1.5  rillig 	case 2:
     36  1.5  rillig 		/* expect+1: warning: 'return_local_array' returns pointer to automatic object [302] */
     37  1.5  rillig 		return 5 + local;
     38  1.5  rillig 	case 3:
     39  1.5  rillig 		/* expect+1: warning: 'return_local_array' returns pointer to automatic object [302] */
     40  1.5  rillig 		return local + 5;
     41  1.5  rillig 	case 4:
     42  1.5  rillig 		/* XXX: lint only checks '+' but not '-'. */
     43  1.5  rillig 		return local - -3;
     44  1.5  rillig 	case 5:
     45  1.5  rillig 		/* XXX: lint doesn't track this indirection, but Clang-tidy does. */
     46  1.5  rillig 		return indirect;
     47  1.6  rillig 	case 6:
     48  1.6  rillig 		/* expect+1: warning: 'return_local_array' returns pointer to automatic object [302] */
     49  1.6  rillig 		return (local);
     50  1.6  rillig 	case 7:
     51  1.6  rillig 		/* C99 6.5.2.5p6 */
     52  1.6  rillig 		/* expect+1: warning: 'return_local_array' returns pointer to automatic object [302] */
     53  1.6  rillig 		return (char[]){"local string"};
     54  1.5  rillig 	default:
     55  1.5  rillig 		return "OK";
     56  1.5  rillig 	}
     57  1.3  rillig }
     58  1.3  rillig 
     59  1.3  rillig void *
     60  1.3  rillig return_static(void)
     61  1.3  rillig {
     62  1.3  rillig 	static int long_lived = 3;
     63  1.3  rillig 	return &long_lived;
     64  1.3  rillig }
     65