[Issue 24554] New: Clarrification for bad codegen on postfix operators
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Fri May 17 14:59:01 UTC 2024
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 at puremagic.com
Reporter: alphaglosined at 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
--
More information about the Digitalmars-d-bugs
mailing list