On Fri, Jul 03, 2020 at 03:25:23PM +0200, Peter Zijlstra wrote: > On Fri, Jul 03, 2020 at 03:13:30PM +0200, Peter Zijlstra wrote: > > > The prototype for GCC is here: https://github.com/AKG001/gcc/ > > > > Thanks! Those test cases are somewhat over qualified though: > > > > static volatile _Atomic (TYPE) * _Dependent_ptr a; \ > > One question though; since its a qualifier, and we've recently spend a > whole lot of effort to strip qualifiers in say READ_ONCE(), how does, > and how do we want, this qualifier to behave. Dereferencing a _Dependent_ptr pointer gives you something that is not _Dependent_ptr, unless the declaration was like this: _Dependent_ptr _Atomic (TYPE) * _Dependent_ptr a; And if I recall correctly, the current state is that assigning a _Dependent_ptr variable to a non-_Dependent_ptr variable strips this marking (though the thought was to be able to ask for a warning). So, yes, it would be nice to be able to explicitly strip the _Dependent_ptr, perhaps the kill_dependency() macro, which is already in the C standard. > C++ has very convenient means of manipulating qualifiers, so it's not > much of a problem there, but for C it is, as we've found, really quite > cumbersome. Even with _Generic() we can't manipulate individual > qualifiers afaict. Fair point, and in C++ this is a templated class, at least in the same sense that std::atomic<> is a templated class. But in this case, would kill_dependency do what you want? Thanx, Paul