[cfe-dev] Warning when comparing address of function or variable with constant?

Ed Schouten ed at 80386.nl
Tue Jan 3 06:14:10 PST 2012


Hello all,

This morning I fixed a small bug at FreeBSD that involved the following
code:

	void
	func(struct foo *idx)
	{

		if (index == NULL)
			return;
		...
	}

The bug in this code is that we should have compared against idx -- not
index. This works by accident, as index() is a function provided by our
C library (BSD's strchr()).

I think it is hardly ever possible that a function or variable ever
resides at address 0, except in kernelspace or when using a hacked
run-time linker. Does Clang have a warning for this? If not, would it be
nice to gain such a feature?

GCC (4.2) seems to support something like this, but doesn't do it
properly. The following code triggers a warning:

	if (index != 0)
		puts("Hi");

While this code does not:

	if (index != NULL)
		puts("Hi");

Essentially the compiler would be free to emit a warning for comparing
an address of a function or variable with any constant expression. As
things like address space randomisation become more prevalent, a fixed
address means nothing.

-- 
 Ed Schouten <ed at 80386.nl>
 WWW: http://80386.nl/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 834 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20120103/5f0ed408/attachment.sig>


More information about the cfe-dev mailing list