Am Dienstag, dem 22.10.2024 um 16:15 +0000 schrieb Qing Zhao: > > > On Oct 21, 2024, at 17:29, Martin Uecker <uec...@tugraz.at> wrote: > > > > Am Montag, dem 21.10.2024 um 21:09 +0000 schrieb Joseph Myers: > > > On Sat, 19 Oct 2024, Martin Uecker wrote: > > > > > > > Hi Quin and Joseph,
(thanks for sending the links, I totally forgot about the discussion). > > > > > > > > I saw that there is now new code in tu_tagged_types_compatible > > > > which makes structure type incompatible depending on whether > > > > there is ac counted_by attribute. Is this what we want? I think a > > > > warning might make more sense as this types are fundamentally > > > > still compatible. > > > > > > If the types were compatible you'd need a composite type. If the > > > composite type has the flexible array counted by both the integer > > > elements > > > named with counted_by attributes (one in one of the types and one in the > > > other), that really doesn't make sense to me. > > > > I doesn't really make sense when they are inconsistent. > > Still, we could just warn and pick one of the attributes > > when forming the composite type. > > If both are defined locally, such inconsistencies should be very easily fixed > in the source code level. > And I think that such inconsistencies should be fixed in the source code. > Therefore, reporting error > makes more sense to me. I agree, and error makes sense. What worries me a little bit is tying this to a semantic change in type compatibility. typedef struct foo { int n; int m; [[gnu::counted_by(n)]] char buf[]; } aaa_t; void foo() { struct foo { int n; int m; [[gnu::counted_by(m)]] char buf[]; } *b; ... = _Generic(b, aaa_t*: 1, default: 0); } would go into the default branch for compilers supporting the attribute but go into the first branch for others. Also it affects ailasing rules. But maybe this is not a problem. > > > > But I was thinking about the case where you have a type with > > a counted_by attribute and one without. Using them together > > seems useful, e.g. to add a counted_by in your local version > > of a type which needs to be compatible to some API. > > For API compatibility purpose, yes, I agree here. > A stupid question here: if one is defined locally, the other one > is NOT defined locally, can such inconsistency be caught by the > same compilation (is this the LTO compilation?) If there is separate compilation this is not catched. LTO has a much coarser notion of types and would not notice either (I believe). > Suppose we can catch such inconsistency in the same compilation, > which version we should keep? I guess that we should keep the > version without the counted_by attribute? > I would keep the one with the attribute, because this is the one which has more information. Martin