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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits