return false;
// Special-case bitfields of width 1: booleans are naturally 0/1, and
- // therefore don't strictly fit into a bitfield of width 1.
- if (FieldWidth == 1 && Value.getBoolValue() == TruncatedValue.getBoolValue())
+ // therefore don't strictly fit into a signed bitfield of width 1.
+ if (FieldWidth == 1 && Value == 1)
return false;
std::string PrettyValue = Value.toString(10);
f.twoBits1 &= ~1; // no-warning
f.twoBits2 &= ~2; // no-warning
}
+
+void test8() {
+ enum E { A, B, C };
+ struct { enum E x : 1; } f;
+ f.x = C; // expected-warning {{implicit truncation from 'int' to bitfield changes value from 2 to 0}}
+}