On 3/17/26 6:17 AM, Thomas Berger wrote:
Am Dienstag, 17. März 2026, 00:26:14 Mitteleuropäische Normalzeit schrieb
David Malcolm:
diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-
model.cc
index 4a6f5b4800c..1935b3a45fa 100644
--- a/gcc/analyzer/region-model.cc
+++ b/gcc/analyzer/region-model.cc
@@ -4116,6 +4116,11 @@ static bool

   struct_or_union_with_inheritance_p (tree struc)
   {
[...]
+  while (iter && TREE_CODE (iter) == TYPE_DECL)

Let's make this != FIELD_DECL, since that's what the function is
looking
for.  Does that sound right to you, David?

I think this is missing an update to the existing "while" loop in
struct_or_union_with_inheritance_p.  If there are non-field decls
appearing after a trailing array, that could cause false negatives.
If I'm understanding the rest of the patch correctly, I think we want
to update the assignment to last_field in the existing while loop so
that it's only set when iter is a FIELD_DECL.

I am not sure if this should be addressed by this patch.
As the only thing changes is, that now TYPE_DECLs could appear in
"random" places within the list, while they were all confined to the end of
the list before, the relative order of the non-TYPE_DECLS to each
other did not change.

Therefore, if this code would deliver false positives if
- the first non-TYPE_DECL member is not a FIELD_DECL
- TYPE_FIELDS has TYPE_DECLS after data members

then the code failed before, and this may introduce a change
in behaviour i am not confident to deal with.

I may be wrong though, and if the consens is, that this should
be part of this series, I'll include the proposed changes.

I agree that this would have failed before for C++, but it seems like a straightforward fix to make while we're touching this code.

Jason

Reply via email to