xref: /netbsd-src/tests/usr.bin/xlint/lint1/msg_108.c (revision e6298b924c5ba98f3a22919b56dab04a87cdbb1c)
1*e6298b92Srillig /*	$NetBSD: msg_108.c,v 1.9 2023/07/07 19:45:22 rillig Exp $	*/
2a0a15c14Srillig # 3 "msg_108.c"
3a0a15c14Srillig 
46d672396Srillig // Test for message: operand of '%s' has invalid type '%s' [108]
5a0a15c14Srillig 
6*e6298b92Srillig /* lint1-extra-flags: -X 351 */
7*e6298b92Srillig 
81043e742Srillig /*
91043e742Srillig  * Before tree.c 1.137 from 2021-01-19, taking the complement of a struct
101043e742Srillig  * (an absurd idea, by the way), resulted in an internal error because the
11f14ab694Srillig  * message 108 took two type operands, the second of which was not available
12f14ab694Srillig  * for unary operators.
131043e742Srillig  *
146d672396Srillig  * Since an error "invalid type 'none'" doesn't make sense, lint rather chose
156d672396Srillig  * to crash than to generate such an error.
161043e742Srillig  */
171043e742Srillig void
complement_of_a_struct(void)181043e742Srillig complement_of_a_struct(void)
191043e742Srillig {
20fe02f4b2Srillig 	struct s {
21fe02f4b2Srillig 		int member;
221043e742Srillig 	} s = {
231043e742Srillig 	    0
24fe02f4b2Srillig 	};
25fe02f4b2Srillig 
266d672396Srillig 	/* expect+1: error: operand of '~' has invalid type 'struct s' [108] */
2765e5c21bSrillig 	s = ~s;
28fe02f4b2Srillig }
29