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


Reply via email to