annotate gcc/testsuite/gcc.dg/pr35635.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* PR 35635 */
kono
parents:
diff changeset
2 /* { dg-do compile } */
kono
parents:
diff changeset
3 /* { dg-options "-Wconversion -Wsign-conversion" } */
kono
parents:
diff changeset
4
kono
parents:
diff changeset
5 struct unsigned_bit {
kono
parents:
diff changeset
6 unsigned int x:1;
kono
parents:
diff changeset
7 } unsigned_bit;
kono
parents:
diff changeset
8 struct signed_bit {
kono
parents:
diff changeset
9 int x:1;
kono
parents:
diff changeset
10 } signed_bit;
kono
parents:
diff changeset
11 int bar;
kono
parents:
diff changeset
12 int bar2;
kono
parents:
diff changeset
13
kono
parents:
diff changeset
14 void func1()
kono
parents:
diff changeset
15 {
kono
parents:
diff changeset
16 /* The result of boolean operators fits in unsiged int:1, thus do
kono
parents:
diff changeset
17 not warn. */
kono
parents:
diff changeset
18 unsigned_bit.x = (bar != 0); /* { dg-bogus "conversion" } */
kono
parents:
diff changeset
19 unsigned_bit.x = (bar == 0); /* { dg-bogus "conversion" } */
kono
parents:
diff changeset
20 unsigned_bit.x = (bar <= 0); /* { dg-bogus "conversion" } */
kono
parents:
diff changeset
21 unsigned_bit.x = (bar >= 0); /* { dg-bogus "conversion" } */
kono
parents:
diff changeset
22 unsigned_bit.x = (bar < 0); /* { dg-bogus "conversion" } */
kono
parents:
diff changeset
23 unsigned_bit.x = (bar > 0); /* { dg-bogus "conversion" } */
kono
parents:
diff changeset
24 unsigned_bit.x = !bar; /* { dg-bogus "conversion" } */
kono
parents:
diff changeset
25 unsigned_bit.x = (bar || bar2); /* { dg-bogus "conversion" } */
kono
parents:
diff changeset
26 unsigned_bit.x = (bar && bar2); /* { dg-bogus "conversion" } */
kono
parents:
diff changeset
27
kono
parents:
diff changeset
28 /* Both branches of ? fit in the destination, thus do not warn. */
kono
parents:
diff changeset
29 unsigned_bit.x = bar != 0 ? 1 : 0; /* { dg-bogus "conversion" } */
kono
parents:
diff changeset
30 unsigned_bit.x = bar != 0 ? 1.0 : 0.0; /* { dg-bogus "conversion" } */
kono
parents:
diff changeset
31
kono
parents:
diff changeset
32 /* At least one branch of ? does not fit in the destination, thus
kono
parents:
diff changeset
33 warn. */
kono
parents:
diff changeset
34 unsigned_bit.x = bar != 0 ? 2 : 0; /* { dg-warning "conversion" } */
kono
parents:
diff changeset
35 unsigned_bit.x = bar != 0 ? 0 : -1; /* { dg-warning "-Wsign-conversion" } */
kono
parents:
diff changeset
36 }
kono
parents:
diff changeset
37
kono
parents:
diff changeset
38 void func2()
kono
parents:
diff changeset
39 {
kono
parents:
diff changeset
40 signed char schar_x;
kono
parents:
diff changeset
41
kono
parents:
diff changeset
42 /* Both branches of ? fit in the destination, thus do not warn. */
kono
parents:
diff changeset
43 schar_x = bar != 0 ? 1 : 0; /* { dg-bogus "conversion" } */
kono
parents:
diff changeset
44 schar_x = bar != 0 ? 2.0 : 10; /* { dg-bogus "conversion" } */
kono
parents:
diff changeset
45
kono
parents:
diff changeset
46 /* At least one branch of ? does not fit in the destination, thus
kono
parents:
diff changeset
47 warn. */
kono
parents:
diff changeset
48 schar_x = bar != 0 ? 2.1 : 10; /* { dg-warning "conversion" } */
kono
parents:
diff changeset
49 schar_x = bar != 0 ? (signed char) 1024: -1024; /* { dg-warning "conversion" } */
kono
parents:
diff changeset
50 }
kono
parents:
diff changeset
51
kono
parents:
diff changeset
52
kono
parents:
diff changeset
53
kono
parents:
diff changeset
54 void func3()
kono
parents:
diff changeset
55 {
kono
parents:
diff changeset
56 unsigned char uchar_x;
kono
parents:
diff changeset
57
kono
parents:
diff changeset
58 /* Both branches of ? fit in the destination, thus do not warn. */
kono
parents:
diff changeset
59 uchar_x = bar != 0 ? 1 : 0;
kono
parents:
diff changeset
60 uchar_x = bar != 0 ? 2.0 : 10;
kono
parents:
diff changeset
61
kono
parents:
diff changeset
62 /* At least one branch of ? does not fit in the destination, thus
kono
parents:
diff changeset
63 warn. */
kono
parents:
diff changeset
64 uchar_x = bar != 0 ? 2.1 : 10; /* { dg-warning "conversion" } */
kono
parents:
diff changeset
65 uchar_x = bar != 0 /* { dg-warning "-Wsign-conversion" } */
kono
parents:
diff changeset
66 ? (unsigned char) 1024
kono
parents:
diff changeset
67 : -1;
kono
parents:
diff changeset
68 }
kono
parents:
diff changeset
69
kono
parents:
diff changeset
70 void func4()
kono
parents:
diff changeset
71 {
kono
parents:
diff changeset
72 signed_bit.x = -1; /* { dg-bogus "conversion" } */
kono
parents:
diff changeset
73 signed_bit.x = bar != 0 ? -1.0 : 0.0; /* { dg-bogus "conversion" } */
kono
parents:
diff changeset
74 signed_bit.x = bar != 0 ? -1 : 0; /* { dg-bogus "conversion" } */
kono
parents:
diff changeset
75
kono
parents:
diff changeset
76
kono
parents:
diff changeset
77 signed_bit.x = 1; /* { dg-warning "conversion" } */
kono
parents:
diff changeset
78 signed_bit.x = (bar != 0); /* { dg-warning "conversion" } */
kono
parents:
diff changeset
79 signed_bit.x = (bar == 0); /* { dg-warning "conversion" } */
kono
parents:
diff changeset
80 signed_bit.x = (bar <= 0); /* { dg-warning "conversion" } */
kono
parents:
diff changeset
81 signed_bit.x = (bar >= 0); /* { dg-warning "conversion" } */
kono
parents:
diff changeset
82 signed_bit.x = (bar < 0); /* { dg-warning "conversion" } */
kono
parents:
diff changeset
83 signed_bit.x = (bar > 0); /* { dg-warning "conversion" } */
kono
parents:
diff changeset
84 signed_bit.x = !bar; /* { dg-warning "conversion" } */
kono
parents:
diff changeset
85 signed_bit.x = (bar || bar2); /* { dg-warning "conversion" } */
kono
parents:
diff changeset
86 signed_bit.x = (bar && bar2); /* { dg-warning "conversion" } */
kono
parents:
diff changeset
87 signed_bit.x = bar != 0 ? 1 : 0; /* { dg-warning "conversion" } */
kono
parents:
diff changeset
88 signed_bit.x = bar != 0 ? 2 : 0; /* { dg-warning "conversion" } */
kono
parents:
diff changeset
89 }
kono
parents:
diff changeset
90