[Issue 8478] New: Turn some undefined pointer comparisons into compile-time errors
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Mon Jul 30 16:26:31 PDT 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8478
Summary: Turn some undefined pointer comparisons into
compile-time errors
Product: D
Version: D2
Platform: All
OS/Version: All
Status: NEW
Keywords: accepts-invalid, diagnostic
Severity: enhancement
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: bearophile_hugs at eml.cc
--- Comment #0 from bearophile_hugs at eml.cc 2012-07-30 16:26:30 PDT ---
Often the D language shares the semantic of C language. This D program compiles
with no errors or warnings:
struct Foo { int a, b; }
void main() {
Foo f;
if (&f.a < &f.b) {} // first comparison
int a, b;
if (&a < &b) {} // second comparison
}
The first comparison is correct, the addresses of a and b are guaranteed to be
in order by the C standard, see §6.5.8:5 (ISO/IEC JTC 1, SC 22, WG 14. ISO/IEC
9899:201x: Programming languages—C. Technical Report n1570, Intl. Organization
for Standardization, August 2011).
The second comparison is undefined in C according to the C standard §6.5.8:5.
Because semantics is given to relational pointer comparisons only where the two
addresses share a common base.
I think a compiler is free to reorder the position of the variables a and b on
the stack.
So on that D program I suggest the D compiler to give error similar to:
Line 6: Error: cannot apply '<' to different base objects.
See:
http://c-semantics.googlecode.com/files/2012-C-Semantics-Ellison-Rosu-POPL.pdf
--
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