1 1.8 rillig /* $NetBSD: msg_135.c,v 1.8 2021/07/15 21:12:46 rillig Exp $ */ 2 1.1 rillig # 3 "msg_135.c" 3 1.1 rillig 4 1.4 rillig // Test for message: converting '%s' to '%s' may cause alignment problem [135] 5 1.1 rillig 6 1.3 rillig /* lint1-extra-flags: -h */ 7 1.3 rillig 8 1.6 rillig void sink(const void *); 9 1.6 rillig 10 1.3 rillig unsigned 11 1.3 rillig read_uint(const unsigned char **pp) 12 1.3 rillig { 13 1.3 rillig unsigned val; 14 1.3 rillig 15 1.5 rillig val = *(const unsigned *)(*pp); /* expect: 135 */ 16 1.3 rillig pp += sizeof(unsigned); 17 1.3 rillig return val; 18 1.3 rillig } 19 1.6 rillig 20 1.6 rillig struct incomplete; /* expect: never defined */ 21 1.6 rillig 22 1.6 rillig struct complete { 23 1.6 rillig int member; 24 1.6 rillig }; 25 1.6 rillig 26 1.6 rillig /* 27 1.6 rillig * These types of conversions are typically seen in OpenSSL, when converting 28 1.6 rillig * from the publicly visible, incomplete 'struct lhash_st' to a private 29 1.6 rillig * implementation type such as 'struct lhash_st_OPENSSL_STRING'. 30 1.6 rillig * 31 1.7 rillig * Before tree.c 1.277 from 2021-04-17, lint warned about this, even though 32 1.7 rillig * there was not enough evidence that there really was an alignment problem, 33 1.7 rillig * resulting in many false positives. 34 1.7 rillig * 35 1.6 rillig * See openssl/lhash.h. 36 1.6 rillig */ 37 1.6 rillig void 38 1.6 rillig pointer_to_structs(struct incomplete *incomplete) 39 1.6 rillig { 40 1.6 rillig struct complete *complete; 41 1.6 rillig 42 1.7 rillig complete = (struct complete *)incomplete; 43 1.6 rillig sink(complete); 44 1.6 rillig } 45 1.8 rillig 46 1.8 rillig void 47 1.8 rillig unsigned_char_to_unsigned_type(unsigned char *ucp) 48 1.8 rillig { 49 1.8 rillig unsigned short *usp; 50 1.8 rillig 51 1.8 rillig /* FIXME */ 52 1.8 rillig /* expect+1: warning: converting 'pointer to unsigned char' to 'pointer to unsigned short' may cause alignment problem [135] */ 53 1.8 rillig usp = (unsigned short *)ucp; 54 1.8 rillig sink(usp); 55 1.8 rillig } 56 1.8 rillig 57 1.8 rillig void 58 1.8 rillig plain_char_to_unsigned_type(char *cp) 59 1.8 rillig { 60 1.8 rillig unsigned short *usp; 61 1.8 rillig 62 1.8 rillig /* FIXME */ 63 1.8 rillig /* expect+1: warning: converting 'pointer to char' to 'pointer to unsigned short' may cause alignment problem [135] */ 64 1.8 rillig usp = (unsigned short *)cp; 65 1.8 rillig sink(usp); 66 1.8 rillig } 67