May 17 [Issue 24554] New: Clarrification for bad codegen on postfix operators | ||||
---|---|---|---|---|
| ||||
https://issues.dlang.org/show_bug.cgi?id=24554 Issue ID: 24554 Summary: Clarrification for bad codegen on postfix operators Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: normal Priority: P1 Component: dlang.org Assignee: nobody@puremagic.com Reporter: alphaglosined@gmail.com Johan Engelen asked me on the ldc bug ticket to create a ticket to find out what the specification means. All three compilers have differing behavior. DMD: https://github.com/ldc-developers/ldc/issues/4651 GDC: https://forum.dlang.org/post/zybltjuxkbvtvirzwcwm@forum.dlang.org ldc fe 2.107 as per run.dlang.org ```d void main() { int d = 42; bool o = d > d++; } ``` ``` define i32 @_Dmain({ i64, ptr } %unnamed) #0 { %d = alloca i32, align 4 ; [#uses = 4, size/byte = 4] %o = alloca i8, align 1 ; [#uses = 1, size/byte = 1] store i32 42, ptr %d, align 4 %1 = load i32, ptr %d, align 4 ; [#uses = 2] %2 = add i32 %1, 1 ; [#uses = 1] store i32 %2, ptr %d, align 4 %3 = load i32, ptr %d, align 4 ; [#uses = 1] %4 = icmp sgt i32 %3, %1 ; [#uses = 1] %5 = zext i1 %4 to i8 ; [#uses = 1] store i8 %5, ptr %o, align 1 ret i32 0 } ``` Note; the icmp is after the add, which it shouldn't be. Source: https://twitter.com/marcos_don/status/1787629240550150361 -- |
Copyright © 1999-2021 by the D Language Foundation