llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Bill Wendling (bwendling) <details> <summary>Changes</summary> Ensure that we're dealing only with C99 flexible array members. I.e. ones with incomplete types: struct s { int count; char array[]; /* note: no size specified */ }; --- Full diff: https://github.com/llvm/llvm-project/pull/72347.diff 4 Files Affected: - (modified) clang/include/clang/Basic/DiagnosticSemaKinds.td (+1-1) - (modified) clang/lib/AST/DeclBase.cpp (-3) - (modified) clang/lib/Sema/SemaDeclAttr.cpp (+1-1) - (modified) clang/test/Sema/attr-counted-by.c (+7-2) ``````````diff diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index 4614324babb1c91..f9dec60cf990784 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -6412,7 +6412,7 @@ def warn_superclass_variable_sized_type_not_at_end : Warning< " in superclass %3">, InGroup<ObjCFlexibleArray>; def err_counted_by_attr_not_on_flexible_array_member : Error< - "'counted_by' only applies to flexible array members">; + "'counted_by' only applies to C99 flexible array members">; def err_counted_by_attr_refers_to_flexible_array : Error< "'counted_by' cannot refer to the flexible array %0">; def err_counted_by_must_be_in_structure : Error< diff --git a/clang/lib/AST/DeclBase.cpp b/clang/lib/AST/DeclBase.cpp index 4fcc2e7302c034c..e4d7169752bc857 100644 --- a/clang/lib/AST/DeclBase.cpp +++ b/clang/lib/AST/DeclBase.cpp @@ -421,9 +421,6 @@ bool Decl::isFlexibleArrayMemberLike( using FAMKind = LangOptions::StrictFlexArraysLevelKind; llvm::APInt Size = CAT->getSize(); - FAMKind StrictFlexArraysLevel = - Ctx.getLangOpts().getStrictFlexArraysLevel(); - if (StrictFlexArraysLevel == FAMKind::IncompleteOnly) return false; diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index cdb769a883550d0..fd778793346f502 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -8430,7 +8430,7 @@ bool Sema::CheckCountedByAttr(Scope *S, const FieldDecl *FD) { } LangOptions::StrictFlexArraysLevelKind StrictFlexArraysLevel = - Context.getLangOpts().getStrictFlexArraysLevel(); + LangOptions::StrictFlexArraysLevelKind::IncompleteOnly; if (!Decl::isFlexibleArrayMemberLike(Context, FD, FD->getType(), StrictFlexArraysLevel, true)) { diff --git a/clang/test/Sema/attr-counted-by.c b/clang/test/Sema/attr-counted-by.c index 654ddb7f1b42b1a..ab3b6e6d710b503 100644 --- a/clang/test/Sema/attr-counted-by.c +++ b/clang/test/Sema/attr-counted-by.c @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -fstrict-flex-arrays=3 -fsyntax-only -verify %s +// RUN: %clang_cc1 -fsyntax-only -verify %s #define __counted_by(f) __attribute__((counted_by(f))) @@ -38,7 +38,12 @@ struct array_of_ints_count { struct not_a_fam { int count; - struct bar *non_fam __counted_by(count); // expected-error {{'counted_by' only applies to flexible array members}} + struct bar *non_fam __counted_by(count); // expected-error {{'counted_by' only applies to C99 flexible array members}} +}; + +struct not_a_c99_fam { + int count; + struct bar *non_c99_fam[0] __counted_by(count); // expected-error {{'counted_by' only applies to C99 flexible array members}} }; struct annotated_with_anon_struct { `````````` </details> https://github.com/llvm/llvm-project/pull/72347 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits