This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/22485] New: pointer +- integer is never NULL
- From: "mattias at virtutech dot se" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 14 Jul 2005 13:10:32 -0000
- Subject: [Bug c/22485] New: pointer +- integer is never NULL
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
The code
void stuff(void);
void f(int *p, int x)
{
int *q = p + x;
if (!q)
stuff();
}
should never call stuff() - the test is unnecessary since pointer +/- integer is
undefined when the pointer does not point to an object or just past the end of
one (6.5.6 paragraph 8). This is important in cases such as:
static inline struct foo *lookup(struct foo *table, int x)
{
if (match(table, x))
return table + x;
else
return NULL;
}
...
struct foo *e = lookup(tbl, x);
if (e) ...
The code that calls the above function ends up checking for NULL twice: once
inside the (inlined) function, and one after the call. Were Q = P +- I
recognised as implying that P != NULL, Q != NULL (as we are allowed to do
according to the Standard), then the extraneous NULL test could be eliminated.
--
Summary: pointer +- integer is never NULL
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: enhancement
Priority: P2
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: mattias at virtutech dot se
CC: gcc-bugs at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22485