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