[PATCH] D24289: Add warning when assigning enums to bitfields without an explicit unsigned underlying type
Nico Weber via cfe-commits
cfe-commits at lists.llvm.org
Thu Sep 15 11:17:37 PDT 2016
thakis added a comment.
Works for me if rnk likes it :-)
(We could bikeshed on if this should be one of the -Wmicrosoft warnings, but the warning can't be both in -Wall and -Wmicrosoft, so let's don't).
I do have a question about the test (the first commit below):
================
Comment at: test/SemaCXX/warn-msvc-enum-bitfield.cpp:12
@@ +11,3 @@
+
+ s.e2 = E2;
+ s.f2 = F2;
----------------
Shouldn't this be the version that warns? The assignment with E1 assigns 0 which is portable, but this assigns 1 which overflows, right?
================
Comment at: test/SemaCXX/warn-msvc-enum-bitfield.cpp:39
@@ +38,3 @@
+ s.e2 = E2;
+ s.f2 = F2;
+}
----------------
We have -Wconversion warnings for similar cases; maybe we should have this here too (but not in this change):
Nicos-MBP:llvm-build thakis$ cat test2.cc
enum E {e1, e2};
struct S {
E e1 : 1;
};
void f() {
short s1 = 65536;
short s2 = 32769;
S s;
s.e1 = e2;
}
Nicos-MBP:llvm-build thakis$ clang -Wconversion -c test2.cc
test2.cc:8:14: warning: implicit conversion changes signedness: 'int' to 'short' [-Wsign-conversion]
short s2 = 32769;
~~ ^~~~~
test2.cc:7:14: warning: implicit conversion from 'int' to 'short' changes value from 65536 to 0 [-Wconstant-conversion]
short s1 = 65536;
~~ ^~~~~
2 warnings generated.
https://reviews.llvm.org/D24289
More information about the cfe-commits
mailing list