[clang] [Clang][Sema] Allow counted_by on void* in GNU mode (PR #164737)
Kees Cook via cfe-commits
cfe-commits at lists.llvm.org
Fri Oct 31 22:16:12 PDT 2025
================
@@ -132,9 +132,20 @@ bool Sema::CheckCountedByAttrOnField(FieldDecl *FD, Expr *E, bool CountInBytes,
// `BoundsSafetyCheckUseOfCountAttrPtr`
//
// * When the pointee type is always an incomplete type (e.g.
- // `void`) the attribute is disallowed by this method because we know the
- // type can never be completed so there's no reason to allow it.
- InvalidTypeKind = CountedByInvalidPointeeTypeKind::INCOMPLETE;
+ // `void` in strict C mode) the attribute is disallowed by this method
+ // because we know the type can never be completed so there's no reason
+ // to allow it.
+ //
+ // Exception: In GNU mode, void has an implicit size of 1 byte for pointer
+ // arithmetic. Therefore, counted_by on void* is allowed as a GNU extension
+ // and behaves equivalently to sized_by (treating the count as bytes).
+ bool IsVoidPtrInGNUMode = PointeeTy->isVoidType() && getLangOpts().GNUMode;
----------------
kees wrote:
Detecting the -std was the intension here. I.e. that's what had been proposed for this feature. I'm open to alternatives, but this was what @rapidsna and I had discussed earlier.
https://github.com/llvm/llvm-project/pull/164737
More information about the cfe-commits
mailing list