[Issue 8216] New: CTFE should allow 'pointer is inside range' comparisons

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sat Jun 9 23:11:00 PDT 2012


http://d.puremagic.com/issues/show_bug.cgi?id=8216

           Summary: CTFE should allow 'pointer is inside range'
                    comparisons
           Product: D
           Version: D1 & D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: DMD
        AssignedTo: nobody at puremagic.com
        ReportedBy: clugdbug at yahoo.com.au


--- Comment #0 from Don <clugdbug at yahoo.com.au> 2012-06-09 23:13:06 PDT ---
Currently all < and > comparisons of pointers do not compile in CTFE if the
pointers are non-null and point to unrelated memory blocks, because the
relative ordering of the memory blocks is undefined.
But this gives not way to check if a pointer lies within a range, even though
that operation doesn't actually depend on the ordering of the memory blocks.

My patch implements *all* cases where the memory block ordering is checked in
*both* directions within a single && or || expression. 

That is, expressions of the form:
( p1 > q1 && p2 <= q2 )
( p1 < q1 || p2 > q2  )
where p1, p2, q1, q2 are arbitrary expressions of type pointer.
p1 and p2 must point to memory block P, q1 and q2 must point to memory block Q.
Each operators can be >, <, >=, or <=, and ! can be added anywhere, provided
that eventual effect of the comparison is a check that P is inside Q, or P is
outside Q.

I believe this satisfies the primary requests made on the newsgroup:
* It provides a way to check if a pointer lies inside a particular memory
block;
* It is @safe and pure - it never involves undefined or compiler-specific
behaviour
* The situations where it is valid are broad and yet clearly defined --
_anything_ within a && or || will work.
* Most code which wasn't written with CTFE in mind, will work in CTFE without
modification.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list