1 /* PR 34389 */
2 /* { dg-do compile } */
3 /* { dg-options "-Wconversion -Wsign-conversion" } */
4 /* { dg-require-effective-target int32plus } */
mask1(short x)5 short mask1(short x)
6 {
7 short y = 0x7fff;
8 return x & y; /* { dg-bogus "conversion" "bogus warning" } */
9 }
10
mask2(short ssx)11 short mask2(short ssx)
12 {
13 short ssy;
14 short ssz;
15
16 ssz = ((int)ssx) & 0x7fff;
17 ssy = ((int)ssx) | 0x7fff;
18 ssz = ((int)ssx) ^ 0x7fff;
19 return ssx & 0x7fff;
20 }
21
mask3(int si,unsigned int ui)22 short mask3(int si, unsigned int ui)
23 {
24 short ss;
25 unsigned short us;
26
27 ss = si & 0x7fff;
28 ss = si & 0xAAAA; /* { dg-warning "conversion" } */
29 ss = ui & 0x7fff;
30 ss = ui & 0xAAAA; /* { dg-warning "conversion" } */
31
32 us = si & 0x7fff;
33 us = si & 0xAAAA; /* { dg-warning "conversion" } */
34 us = ui & 0x7fff;
35 us = ui & 0xAAAA; /* 0xAAAA is zero-extended, thus it masks the
36 upper bits of 'ui' making it fit in 'us'. */
37
38 return ss;
39 }
40
mask4(int x,int y)41 short mask4(int x, int y)
42 {
43 return x & y; /* { dg-warning "conversion" } */
44 }
45
mask5(int x)46 short mask5(int x)
47 {
48 return x & -1; /* { dg-warning "conversion" } */
49 }
50
mask6(short x)51 short mask6(short x)
52 {
53 return x & -1;
54 }
55