1 1.7 rillig /* $NetBSD: msg_135.c,v 1.7 2021/04/17 16:58:04 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