Thread (32 messages) flat view 32 messages, 7 authors, 2021-10-12

Re: [RFC][PATCH] rcu: Use typeof(p) instead of typeof(*p) *

From: Steven Rostedt <rostedt@goodmis.org>
Date: 2021-10-05 18:40:09
Also in: lkml, netfilter-devel, rcu

On Tue, 5 Oct 2021 20:28:54 +0200 (CEST)
Jan Engelhardt [off-list ref] wrote:
On Tuesday 2021-10-05 20:06, Mathieu Desnoyers wrote:
quoted
quoted
instead of just "typeof(p)", to force the decay to a pointer.  
If the type of @p is an integer, (p) + 0 is still valid, so it will not
prevent users from passing an integer type as argument, which is what
the current implementation prevents.

Also, AFAIU, the compiler wants to know the sizeof(p) in order to evaluate
(p + 0). Steven's goal is to hide the structure declaration, so that would
not work either.  
quoted
quoted
quoted
quoted
typeof(*p) *________p1 = (typeof(*p) *__force)READ_ONCE(p);  

#define static_cast(type, expr) ((struct { type x; }){(expr)}.x)
typeof(p) p1 = (typeof(p) __force)static_cast(void *, READ_ONCE(p));

Let the name not fool you; it's absolutely _not_ the same as C++'s 
static_cast, but still: it does emit a warning when you do pass an 
integer, which is better than no warning at all in that case.

 *flies away*
Are you suggesting I should continue this exercise ;-)

-- Steve
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help