Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 11 Oct 2012 16:11:18 +0300
From:      Andriy Gapon <avg@FreeBSD.org>
To:        Erik Cederstrand <erik@cederstrand.dk>
Cc:        FreeBSD Hackers <hackers@FreeBSD.org>
Subject:   Re: curcpu false positive?
Message-ID:  <5076C576.3020306@FreeBSD.org>
In-Reply-To: <3A22DF7A-00BB-408C-8F76-C1E119E0E48C@cederstrand.dk>
References:  <3A22DF7A-00BB-408C-8F76-C1E119E0E48C@cederstrand.dk>

next in thread | previous in thread | raw e-mail | index | archive | help
on 11/10/2012 16:06 Erik Cederstrand said the following:
> Hello,
> 
> I'm looking at some Clang Static Analyzer reports in the kernel, and a lot of them point back to a null pointer dereference in __pcpu_type (sys/amd64/include/pcpu.h:102) which is defined as:
> 
> 102	 /*
> 103	 * Evaluates to the type of the per-cpu variable name.
> 104	 */
> 105	#define __pcpu_type(name)                                               \
> 106	        __typeof(((struct pcpu *)0)->name)
> 
> 
> Which indeed looks like a NULL pointer dereference. Looking at the latest commit message there, I'm sure the code is correct, but I'm unsure why the null pointer is OK. I'd appreciate an explanation :-)

Read about __typeof [1].
It's evaluated at compile time, so actual value of an expression does not matter
at all.

[1] http://gcc.gnu.org/onlinedocs/gcc/Typeof.html
-- 
Andriy Gapon



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5076C576.3020306>