digitalmars.D - -inline compiler bug
- nail (125/125) Feb 06 2005 Hi all.
- zwang (4/8) Feb 06 2005 I'm pretty sure Walter is actively fighting with compiler bugs.
- nail (4/12) Feb 06 2005 Maybe mine are simply forgotten?
- =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= (5/7) Feb 06 2005 The code compiles OK with the GDC compiler.
- nail (5/12) Feb 06 2005 Hm... But what is the difference between unittests present or not? There...
- =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= (4/7) Feb 06 2005 I meant that it compiled without warnings, even when using -inline,
- Thomas Kuehne (162/162) Feb 07 2005 -----BEGIN PGP SIGNED MESSAGE-----
Hi all. I found one more bug. Sorry for the big snipet, I simplified it as I could: module test; import std.math; struct Vector3 { align(1) { float x = 0; float y = 0; float z = 0; } static Vector3 opCall(float x, float y, float z) { Vector3 v; v.set(x, y, z); return v; } void set(float x, float y, float z) { this.x = x; this.y = y; this.z = z; } } struct Matrix33 { private: align (1) union { struct { float m00, m01, m02; float m10, m11, m12; float m20, m21, m22; } float m[3][3]; Vector3 v[3]; } public: Matrix33 opCall(float m00, float m01, float m02, float m10, float m11, float m12, float m20, float m21, float m22) { Matrix33 mat; mat.m00 = m00; mat.m01 = m01; mat.m02 = m02; mat.m10 = m10; mat.m11 = m11; mat.m12 = m12; mat.m20 = m20; mat.m21 = m21; mat.m22 = m22; return mat; } static Matrix33 rotationX(float radians) { Matrix33 mat; float c = cos(radians); float s = sin(radians); with (mat) { v[0] = Vector3(1, 0, 0); v[1] = Vector3(0, c, s); v[2] = Vector3(0,-s, c); } return mat; } static Matrix33 rotationY(float radians) { Matrix33 mat; float c = cos(radians); float s = sin(radians); with (mat) { v[0] = Vector3(c, 0,-s); v[1] = Vector3(0, 1, 0); v[2] = Vector3(s, 0, c); } return mat; } static Matrix33 rotationZ(float radians) { Matrix33 mat; float c = cos(radians); float s = sin(radians); with (mat) { v[0] = Vector3( c, s, 0); v[1] = Vector3(-s, c, 0); v[2] = Vector3( 0, 0, 1); } return mat; } static Matrix33 rotation(float yaw, float pitch, float roll) { return Matrix33.rotationZ(roll) * Matrix33.rotationX(pitch) * Matrix33.rotationY(yaw); } Matrix33 opMul(Matrix33 mat) { return Matrix33(m00 * mat.m00 + m01 * mat.m10 + m02 * mat.m20, m00 * mat.m01 + m01 * mat.m11 + m02 * mat.m21, m00 * mat.m02 + m01 * mat.m12 + m02 * mat.m22, m10 * mat.m00 + m11 * mat.m10 + m12 * mat.m20, m10 * mat.m01 + m11 * mat.m11 + m12 * mat.m21, m10 * mat.m02 + m11 * mat.m12 + m12 * mat.m22, m20 * mat.m00 + m21 * mat.m10 + m22 * mat.m20, m20 * mat.m01 + m21 * mat.m11 + m22 * mat.m21, m20 * mat.m02 + m21 * mat.m12 + m22 * mat.m22 ); } } int main ( char [] [] args ) { return 0; } This code does not compile with -inline compiler flag: C:/dmd/bin/dmd -Isrc -O -inline -release -c -ofbuild\examples\test-win32-release\test.obj examples\src\test\test.d examples\src\test\test.d(149): rotationZ(roll) is not an lvalue And does without it. The hotspot is in construction with (mat) { v[0] = Vector3( c, s, 0); v[1] = Vector3(-s, c, 0); v[2] = Vector3( 0, 0, 1); } Once I comment it out all compiles fine. PS: One more question - I already found at least 3 compiler bugs, no one was fixed. Does they considered at all? Or only phobos bugs corrected, Walter?
Feb 06 2005
I'm pretty sure Walter is actively fighting with compiler bugs. I just got an email from him today that a crashing bug reported last week has been fixed. nail wrote:PS: One more question - I already found at least 3 compiler bugs, no one was fixed. Does they considered at all? Or only phobos bugs corrected, Walter?
Feb 06 2005
In article <cu5ieo$1e6f$1 digitaldaemon.com>, zwang says...I'm pretty sure Walter is actively fighting with compiler bugs. I just got an email from him today that a crashing bug reported last week has been fixed. nail wrote:Maybe mine are simply forgotten? This bug, bug with nested class private members are not accessible from one module, and static TypeInfo[] in template class isn't linkablePS: One more question - I already found at least 3 compiler bugs, no one was fixed. Does they considered at all? Or only phobos bugs corrected, Walter?
Feb 06 2005
nail wrote:I found one more bug. Sorry for the big snipet, I simplified it as I could:This code does not compile with -inline compiler flag:The code compiles OK with the GDC compiler. (Didn't test if it actually worked, though, since there was no unittest present for it) --anders
Feb 06 2005
In article <cu5oea$1iu2$2 digitaldaemon.com>, =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= says...nail wrote:Hm... But what is the difference between unittests present or not? There are no unittests in the example and even option that enables it, i.e. code compiled under win32 with -inline -release and -O optionsI found one more bug. Sorry for the big snipet, I simplified it as I could:This code does not compile with -inline compiler flag:The code compiles OK with the GDC compiler. (Didn't test if it actually worked, though, since there was no unittest present for it) --anders
Feb 06 2005
nail wrote:Hm... But what is the difference between unittests present or not? There are no unittests in the example and even option that enables it, i.e. code compiled under win32 with -inline -release and -O optionsI meant that it compiled without warnings, even when using -inline, but I didn't run it to verify that it actually worked or anything :-) --anders
Feb 06 2005
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 nail wrote: | Hi all. | | I found one more bug. Sorry for the big snipet, I simplified it as I could: | | module test; | import std.math; | | struct Vector3 | { | align(1) | { | float x = 0; | float y = 0; | float z = 0; | } | | | static Vector3 opCall(float x, float y, float z) | { | Vector3 v; | v.set(x, y, z); | return v; | } | | void set(float x, float y, float z) | { | this.x = x; | this.y = y; | this.z = z; | } | } | | struct Matrix33 | { | private: | align (1) union | { | struct | { | float m00, m01, m02; | float m10, m11, m12; | float m20, m21, m22; | } | | float m[3][3]; | Vector3 v[3]; | } | | public: | Matrix33 opCall(float m00, float m01, float m02, | float m10, float m11, float m12, | float m20, float m21, float m22) | { | Matrix33 mat; | mat.m00 = m00; mat.m01 = m01; mat.m02 = m02; | mat.m10 = m10; mat.m11 = m11; mat.m12 = m12; | mat.m20 = m20; mat.m21 = m21; mat.m22 = m22; | return mat; | } | | static Matrix33 rotationX(float radians) | { | Matrix33 mat; | float c = cos(radians); | float s = sin(radians); | with (mat) | { | v[0] = Vector3(1, 0, 0); | v[1] = Vector3(0, c, s); | v[2] = Vector3(0,-s, c); | } | | return mat; | } | | static Matrix33 rotationY(float radians) | { | Matrix33 mat; | float c = cos(radians); | float s = sin(radians); | with (mat) | { | v[0] = Vector3(c, 0,-s); | v[1] = Vector3(0, 1, 0); | v[2] = Vector3(s, 0, c); | } | | return mat; | } | | static Matrix33 rotationZ(float radians) | { | Matrix33 mat; | float c = cos(radians); | float s = sin(radians); | with (mat) | { | v[0] = Vector3( c, s, 0); | v[1] = Vector3(-s, c, 0); | v[2] = Vector3( 0, 0, 1); | } | | return mat; | } | | static Matrix33 rotation(float yaw, float pitch, float roll) | { | return Matrix33.rotationZ(roll) * Matrix33.rotationX(pitch) * | Matrix33.rotationY(yaw); | } | | Matrix33 opMul(Matrix33 mat) | { | return Matrix33(m00 * mat.m00 + m01 * mat.m10 + m02 * mat.m20, | m00 * mat.m01 + m01 * mat.m11 + m02 * mat.m21, | m00 * mat.m02 + m01 * mat.m12 + m02 * mat.m22, | m10 * mat.m00 + m11 * mat.m10 + m12 * mat.m20, | m10 * mat.m01 + m11 * mat.m11 + m12 * mat.m21, | m10 * mat.m02 + m11 * mat.m12 + m12 * mat.m22, | m20 * mat.m00 + m21 * mat.m10 + m22 * mat.m20, | m20 * mat.m01 + m21 * mat.m11 + m22 * mat.m21, | m20 * mat.m02 + m21 * mat.m12 + m22 * mat.m22 ); | } | } | | int main ( char [] [] args ) | { | return 0; | } | | This code does not compile with -inline compiler flag: | C:/dmd/bin/dmd -Isrc -O -inline -release -c | -ofbuild\examples\test-win32-release\test.obj examples\src\test\test.d | examples\src\test\test.d(149): rotationZ(roll) is not an lvalue | | And does without it. The hotspot is in construction | with (mat) | { | v[0] = Vector3( c, s, 0); | v[1] = Vector3(-s, c, 0); | v[2] = Vector3( 0, 0, 1); | } | | Once I comment it out all compiles fine. Next time please cut it down properly and post it to the bugs newsgroup (digitalmars.D.bugs). Otherwise I am going to charge for cuting the sample code - or will simply ignore it. Added to DStress as: http://dstress.kuehne.cn/compile/inline_02.d http://dstress.kuehne.cn/compile/inline_03.d Note: this seems to be a DMD-only bug Thomas -----BEGIN PGP SIGNATURE----- iD8DBQFCB3E83w+/yD4P9tIRAmvPAJ9X46PMSgklLIiogy3dkR9x45PNVACfYekc q/Er4g1UZIFRK0+j8eusbf4= =gK4L -----END PGP SIGNATURE-----
Feb 07 2005