Home | History | Annotate | Line # | Download | only in lint1
msg_135.c revision 1.8
      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