rjmccall added a comment.

> I disagree with the assessment that _Atomic behaves exactly like a qualifier. 
> It *should* (IMHO), but it doesn't. C allows the size and alignment of an 
> atomic type be *different* from its unqualified version, to allow for 
> embedded locks and such. Because the size and alignment can be different, to 
> my mind, _Atomic int and int are different types in the same way as _Complex 
> float and float -- the object representations can (must, in the case of 
> _Complex) be different, so they're different types. The same is not true for 
> const, volatile, or restrict qualifiers -- those are required to have the 
> same size and alignment as the unqualified type.

I think our apparent disagreement here is rooted in something quite simple: you 
seem to be assuming that a qualified type by definition cannot have a different 
size and alignment from the unqualified type, and I think that's a property 
that's *guaranteed* for the CVR qualifiers and merely *happens to be true* for 
our current set of extended qualifiers, and only really because we don't 
represent `_Atomic` as a qualifier.

Many of our extended qualifiers completely change the ABI of the type they 
qualify, and they can change the basic semantic properties of types they're 
nested within.  I don't see why we'd draw a line here about what counts as a 
qualifier and what doesn't.  ObjC ARC happens to implement `__weak` references 
without using extra inline storage, but it would certainly be a reasonable ABI 
choice to make them larger than just a pointer — Swift does with its native 
weak references, for example.  That ABI choice wouldn't make `__weak` suddenly 
not a qualifier.

> I saw some talk in WG14 of separating _Atomic(T) and _Atomic T so that 
> _Atomic T would be a qualifier that doesn't affect size or alignment, only 
> what code is generated to access the value, and _Atomic(T) would be a 
> distinct type with potentially a different representation in order to support 
> lock-free atomic access. Did that go anywhere? (I'd assume not, it seems to 
> be at least a decade too late for such an idea.)

That seems like a terrible idea.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D125919/new/

https://reviews.llvm.org/D125919

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to