msg_222.c revision 1.8 1 /* $NetBSD: msg_222.c,v 1.8 2024/12/15 07:43:53 rillig Exp $ */
2 # 3 "msg_222.c"
3
4 // Test for message: conversion of negative constant %lld to unsigned type '%s' [222]
5 //
6 // See also:
7 // msg_162.c: comparison of unsigned type with negative constant
8 // msg_164.c: assignment of negative constant to unsigned type
9 // msg_221.c: initialization of unsigned type with negative constant
10 // msg_296.c: conversion of negative constant to unsigned type in call
11
12 /* lint1-extra-flags: -X 351 */
13
14 unsigned int u32;
15 signed char sc;
16 unsigned char uc;
17 _Bool b;
18
19
20 void
21 convert_negative_constant(void)
22 {
23 u32 = !-8;
24 u32 = ~-8;
25 /* expect+1: warning: assignment of negative constant -8 to unsigned type 'unsigned int' [164] */
26 u32 = +-8;
27 u32 = - -8;
28
29 /* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
30 u32 = u32 * -8;
31 /* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
32 u32 = -8 * u32;
33 /* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
34 u32 = u32 / -8;
35 /* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
36 u32 = -8 / u32;
37 /* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
38 u32 = u32 % -8;
39 /* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
40 u32 = -8 / u32;
41 /* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
42 u32 = u32 + -8;
43 /* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
44 u32 = -8 + u32;
45 /* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
46 u32 = u32 - -8;
47 /* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
48 u32 = -8 - u32;
49 /* expect+1: warning: negative shift [121] */
50 u32 = u32 << -8;
51 u32 = -8 << u32;
52 /* expect+1: warning: negative shift [121] */
53 u32 = u32 >> -8;
54 u32 = -8 >> u32;
55
56 /* expect+1: warning: operator '<' compares 'unsigned int' with 'negative constant' [162] */
57 b = u32 < -8;
58 /* expect+1: warning: operator '<=' compares 'unsigned int' with 'negative constant' [162] */
59 b = u32 <= -8;
60 /* expect+1: warning: operator '>' compares 'unsigned int' with 'negative constant' [162] */
61 b = u32 > -8;
62 /* expect+1: warning: operator '>=' compares 'unsigned int' with 'negative constant' [162] */
63 b = u32 >= -8;
64 /* expect+1: warning: operator '==' compares 'unsigned int' with 'negative constant' [162] */
65 b = u32 == -8;
66 /* expect+1: warning: operator '!=' compares 'unsigned int' with 'negative constant' [162] */
67 b = u32 != -8;
68
69 u32 = u32 & -8;
70 u32 = u32 ^ -8;
71 u32 = u32 | -8;
72 b = u32 && -8;
73 b = u32 || -8;
74
75 /* expect+1: warning: assignment of negative constant -8 to unsigned type 'unsigned int' [164] */
76 u32 = -8;
77 /* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
78 u32 *= -8;
79 /* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
80 u32 /= -8;
81 /* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
82 u32 %= -8;
83 /* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
84 u32 += -8;
85 /* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
86 u32 -= -8;
87 // XXX: missing 'negative shift' warning
88 u32 <<= -8;
89 // XXX: missing 'negative shift' warning
90 u32 >>= -8;
91 u32 &= -8;
92 /* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
93 u32 ^= -8;
94 u32 |= -8;
95
96 sc += 'A' - 'a';
97 sc -= 'A' - 'a';
98
99 // XXX: It's perfectly fine to effectively subtract a constant from
100 // XXX: an unsigned type.
101 /* expect+1: warning: conversion of negative constant -32 to unsigned type 'unsigned char' [222] */
102 uc += 'A' - 'a';
103 /* expect+1: warning: conversion of negative constant -32 to unsigned type 'unsigned char' [222] */
104 uc -= 'A' - 'a';
105 }
106