Over the last few years, some of us in the WG14 Memory Object Model study group have explored a range of issues in the C memory object model, focussing especially on pointer provenance semantics. We now have concrete proposals (especially the "PNVI-ae-udi" and "PNVI-plain" alternatives) that seem to handle many subtle cases in reasonable ways, including casts between pointers and integers, and representation-byte accesses to pointer bytes. Much of this is not specific to C; it really relates to the behaviour of compiler alias analysis, and should be largely harmonised between C and C++. It would therefore be very useful to discuss it in detail with the appropriate parts of WG21.

Below are the relevant papers from a recent WG14 meeting, and an additional collection of effective-type and subobject examples (they are phrased w.r.t. C, but the issues about the underlying semantics should be similar for C++).


Effective types and subobjects

Pointer lifetime-end zap

Related, Paul McKenney, Maged Michael, and others have recently observed that the ISO C specification that ``all pointers to an object become indeterminate values at the end of its lifetime'' is incompatible with idioms in widely used concurrent algorithms. Paul is working on an updated paper for WG21 Cologne.