On Fri, 25 May 2012 02:50:21 -0400, Don Clugston <[email protected]> wrote:
The current implementation of CTFE strictly enforces C pointer
semantics. One of the restrictions is that you cannot perform ordering
comparisons between unrelated pointers.
This is important for repeatability: if it was permitted, the results
would be arbitrary and might vary unpredictably with subtle changes in
the code, or change between compiler releases.
But, there's an interesting case from bug 7898: the 'inside' operation.
If p and q are pointers to the same array, then (r >= p && r <= q) is
true if r points inside that array, and false if it does not.
This seems to be a perfectly reasonable operation: it is completely
repeatable and safe, regardless of what r points to. But there doesn't
seem to be any way to rewrite it to avoid the disallowed comparisons.
I could write code to allow this special case in CTFE. There's a bit of
work to make sure that all the valid cases are detected, because there
are quite a lot of ways to rewrite it, but it's not too terrible.
But I dunno, I don't like this sort of thing much. Feels a bit clunky.
OTOH it seems like necessary functionality, and I can't see any other
way of doing it.
Opinions?
Remove the restriction. The code is unpredictable, but not invalid. It
just means you need to take more care when writing such code.
-Steve