r284761 - [c++1z] Fix assertion failure when using the wrong number of bindings for a
Richard Smith via cfe-commits
cfe-commits at lists.llvm.org
Thu Oct 20 11:29:25 PDT 2016
Author: rsmith
Date: Thu Oct 20 13:29:25 2016
New Revision: 284761
URL: http://llvm.org/viewvc/llvm-project?rev=284761&view=rev
Log:
[c++1z] Fix assertion failure when using the wrong number of bindings for a
struct with unnamed bitfields.
Modified:
cfe/trunk/lib/Sema/SemaDeclCXX.cpp
cfe/trunk/test/SemaCXX/cxx1z-decomposition.cpp
Modified: cfe/trunk/lib/Sema/SemaDeclCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclCXX.cpp?rev=284761&r1=284760&r2=284761&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDeclCXX.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclCXX.cpp Thu Oct 20 13:29:25 2016
@@ -1279,7 +1279,9 @@ static bool checkMemberDecomposition(Sem
DecompType.getQualifiers());
auto DiagnoseBadNumberOfBindings = [&]() -> bool {
- unsigned NumFields = std::distance(RD->field_begin(), RD->field_end());
+ unsigned NumFields =
+ std::count_if(RD->field_begin(), RD->field_end(),
+ [](FieldDecl *FD) { return !FD->isUnnamedBitfield(); });
assert(Bindings.size() != NumFields);
S.Diag(Src->getLocation(), diag::err_decomp_decl_wrong_number_bindings)
<< DecompType << (unsigned)Bindings.size() << NumFields
Modified: cfe/trunk/test/SemaCXX/cxx1z-decomposition.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/cxx1z-decomposition.cpp?rev=284761&r1=284760&r2=284761&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/cxx1z-decomposition.cpp (original)
+++ cfe/trunk/test/SemaCXX/cxx1z-decomposition.cpp Thu Oct 20 13:29:25 2016
@@ -47,4 +47,10 @@ void enclosing() {
(void) [n] {}; // expected-error {{'n' in capture list does not name a variable}}
}
+void bitfield() {
+ struct { int a : 3, : 4, b : 5; } a;
+ auto &[x, y] = a;
+ auto &[p, q, r] = a; // expected-error {{decomposes into 2 elements, but 3 names were provided}}
+}
+
// FIXME: by-value array copies
More information about the cfe-commits
mailing list