[clang] 5bcf31e - [Clang] Loop over FieldDecls instead of all Decls (#89453)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Apr 19 14:38:21 PDT 2024
Author: Bill Wendling
Date: 2024-04-19T21:38:17Z
New Revision: 5bcf31ebfad8b32aed20dd47be6238cc19710e63
URL: https://github.com/llvm/llvm-project/commit/5bcf31ebfad8b32aed20dd47be6238cc19710e63
DIFF: https://github.com/llvm/llvm-project/commit/5bcf31ebfad8b32aed20dd47be6238cc19710e63.diff
LOG: [Clang] Loop over FieldDecls instead of all Decls (#89453)
Only FieldDecls are of importance here. A struct defined within another
struct has the same semantics as if it were defined outside of the
struct. So there's no need to look into RecordDecls that aren't a field.
Added:
Modified:
clang/lib/CodeGen/CGBuiltin.cpp
Removed:
################################################################################
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp
index 4319501035e257..4ab844d206e48a 100644
--- a/clang/lib/CodeGen/CGBuiltin.cpp
+++ b/clang/lib/CodeGen/CGBuiltin.cpp
@@ -861,14 +861,13 @@ const FieldDecl *CodeGenFunction::FindFlexibleArrayMemberField(
static unsigned CountCountedByAttrs(const RecordDecl *RD) {
unsigned Num = 0;
- for (const Decl *D : RD->decls()) {
- if (const auto *FD = dyn_cast<FieldDecl>(D);
- FD && FD->getType()->isCountAttributedType()) {
+ for (const FieldDecl *FD : RD->fields()) {
+ if (FD->getType()->isCountAttributedType())
return ++Num;
- }
- if (const auto *Rec = dyn_cast<RecordDecl>(D))
- Num += CountCountedByAttrs(Rec);
+ QualType Ty = FD->getType();
+ if (Ty->isRecordType())
+ Num += CountCountedByAttrs(Ty->getAsRecordDecl());
}
return Num;
More information about the cfe-commits
mailing list