Bug 20041 – CTFE incorrect result with __vector

Status
RESOLVED
Resolution
FIXED
Severity
critical
Priority
P1
Component
dmd
Product
D
Version
D2
Platform
x86_64
OS
Linux
Creation time
2019-07-10T19:48:55Z
Last change time
2020-12-28T17:57:18Z
Keywords
CTFE, pull, SIMD
Assigned to
No Owner
Creator
thomas.bockman

Comments

Comment #0 by thomas.bockman — 2019-07-10T19:48:55Z
import std.stdio; struct Vec3Fast { __vector(float[4]) raw; this(const(float[3]) value...) inout pure @safe nothrow @nogc { __vector(float[4]) raw; raw[0 .. 3] = value[]; raw[3] = 0.0f; this.raw = raw; } } void main() { static immutable Vec3Fast v = Vec3Fast( 1.0f, 2.0f, 3.0f ); static foreach(d; 0 .. 4) write(v.raw[d], " "); } With CTFE, the above prints "nan nan nan nan ", which is wrong. If I remove the `static immutable`, it prints "1 2 3 0" as it should.
Comment #1 by bugzilla — 2020-12-24T10:32:46Z
A simpler example: import core.stdc.stdio; import core.simd; immutable(float4) foo() { float4 raw; raw[0] = 1; return cast(immutable)raw; } void main() { static immutable float4 v = foo(); foreach(d; 0 .. 4) printf("%g ", v[d]); printf("\n"); }
Comment #2 by dlang-bot — 2020-12-27T09:11:54Z
@WalterBright created dlang/dmd pull request #12057 "fix Issue 20041 - CTFE incorrect result with __vector" fixing this issue: - fix Issue 20041 - CTFE incorrect result with __vector https://github.com/dlang/dmd/pull/12057
Comment #3 by dlang-bot — 2020-12-28T17:57:18Z
dlang/dmd pull request #12057 "fix Issue 20041 - CTFE incorrect result with __vector" was merged into master: - 716b3e0df17f568f31ffb264390d96ee28485db9 by Walter Bright: fix Issue 20041 - CTFE incorrect result with __vector https://github.com/dlang/dmd/pull/12057