Thread overview | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
February 06, 2005 -inline compiler bug | ||||
---|---|---|---|---|
| ||||
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? |
February 06, 2005 Re: -inline compiler bug | ||||
---|---|---|---|---|
| ||||
Posted in reply to nail | 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?
>
>
|
February 06, 2005 Re: -inline compiler bug | ||||
---|---|---|---|---|
| ||||
Posted in reply to zwang | 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: >> 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? >> >> 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 linkable |
February 06, 2005 Re: -inline compiler bug | ||||
---|---|---|---|---|
| ||||
Posted in reply to nail | 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 |
February 06, 2005 Re: -inline compiler bug | ||||
---|---|---|---|---|
| ||||
Posted in reply to Anders F Björklund | In article <cu5oea$1iu2$2@digitaldaemon.com>, =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= says... > >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 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 options |
February 06, 2005 Re: -inline compiler bug | ||||
---|---|---|---|---|
| ||||
Posted in reply to nail | 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 options
I 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
|
February 07, 2005 Re: -inline compiler bug | ||||
---|---|---|---|---|
| ||||
Posted in reply to nail Attachments: | 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 |
Copyright © 1999-2021 by the D Language Foundation