[clang] 1a09cfb - [Clang] counted_by attr can apply only to C99 flexible array members (#72347)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Nov 15 08:27:09 PST 2023
Author: Bill Wendling
Date: 2023-11-15T08:27:06-08:00
New Revision: 1a09cfb2f35ddcb5d4ebe63be8eca74ea6ff4a0b
URL: https://github.com/llvm/llvm-project/commit/1a09cfb2f35ddcb5d4ebe63be8eca74ea6ff4a0b
DIFF: https://github.com/llvm/llvm-project/commit/1a09cfb2f35ddcb5d4ebe63be8eca74ea6ff4a0b.diff
LOG: [Clang] counted_by attr can apply only to C99 flexible array members (#72347)
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 */
};
Authored-by: Bill Wendling <isanbard at gmail.com>
Added:
Modified:
clang/include/clang/Basic/DiagnosticSemaKinds.td
clang/lib/AST/DeclBase.cpp
clang/lib/Sema/SemaDeclAttr.cpp
clang/test/Sema/attr-counted-by.c
Removed:
################################################################################
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 {
More information about the cfe-commits
mailing list