Author: majnemer Date: Sun Jul 3 19:24:59 2016 New Revision: 274477 URL: http://llvm.org/viewvc/llvm-project?rev=274477&view=rev Log: [Sema] A flexible array member must not be the only named member
We didn't correctly detect situations where a flexible array member was the only named member in a record. This fixes PR28407. Modified: cfe/trunk/lib/Sema/SemaDecl.cpp cfe/trunk/test/Sema/MicrosoftExtensions.c Modified: cfe/trunk/lib/Sema/SemaDecl.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=274477&r1=274476&r2=274477&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaDecl.cpp (original) +++ cfe/trunk/lib/Sema/SemaDecl.cpp Sun Jul 3 19:24:59 2016 @@ -13952,14 +13952,12 @@ void Sema::ActOnFields(Scope *S, SourceL : getLangOpts().CPlusPlus ? diag::ext_flexible_array_union_gnu : diag::err_flexible_array_union; - else if (Fields.size() == 1) + else if (NumNamedMembers < 1) DiagID = getLangOpts().MicrosoftExt ? diag::ext_flexible_array_empty_aggregate_ms : getLangOpts().CPlusPlus ? diag::ext_flexible_array_empty_aggregate_gnu - : NumNamedMembers < 1 - ? diag::err_flexible_array_empty_aggregate - : 0; + : diag::err_flexible_array_empty_aggregate; if (DiagID) Diag(FD->getLocation(), DiagID) << FD->getDeclName() Modified: cfe/trunk/test/Sema/MicrosoftExtensions.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/MicrosoftExtensions.c?rev=274477&r1=274476&r2=274477&view=diff ============================================================================== --- cfe/trunk/test/Sema/MicrosoftExtensions.c (original) +++ cfe/trunk/test/Sema/MicrosoftExtensions.c Sun Jul 3 19:24:59 2016 @@ -6,6 +6,12 @@ struct A int a[]; /* expected-warning {{flexible array member 'a' in otherwise empty struct is a Microsoft extension}} */ }; +struct PR28407 +{ + int : 1; + int a[]; /* expected-warning {{flexible array member 'a' in otherwise empty struct is a Microsoft extension}} */ +}; + struct C { int l; union { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits