1 1.6 rillig /* $NetBSD: msg_135.c,v 1.6 2021/04/17 16:52:09 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.6 rillig * See openssl/lhash.h. 32 1.6 rillig */ 33 1.6 rillig void 34 1.6 rillig pointer_to_structs(struct incomplete *incomplete) 35 1.6 rillig { 36 1.6 rillig struct complete *complete; 37 1.6 rillig 38 1.6 rillig complete = (struct complete *)incomplete; /* expect: 135 */ 39 1.6 rillig sink(complete); 40 1.6 rillig } 41