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