http://d.puremagic.com/issues/show_bug.cgi?id=4397
Summary: D1 const does not work Product: D Version: D1 & D2 Platform: Other OS/Version: All Status: NEW Keywords: wrong-code Severity: regression Priority: P1 Component: DMD AssignedTo: nob...@puremagic.com ReportedBy: nfx...@gmail.com --- Comment #0 from nfx...@gmail.com 2010-06-27 10:30:32 PDT --- In the following example, foo() will create an array literal on each call, instead of returning a statically shared / compile time value. On D2, the same may happen when using enum instead of const (I didn't test it). In many cases, this codegen bug may go unnoticed, which makes it just worse. $ cat rtz.d struct X { int[] a; } const cX = X([1,2]); X foo() { return cX; } $ dmd -c rtz.d $ objdump -d -Mintel rtz.o -r ... 00000000 <_D3rtz3fooFZS3rtz1X>: 0: 55 push ebp 1: 8b ec mov ebp,esp 3: 83 ec 08 sub esp,0x8 6: 53 push ebx 7: 6a 02 push 0x2 9: 6a 01 push 0x1 b: 6a 02 push 0x2 d: b8 00 00 00 00 mov eax,0x0 e: R_386_32 _D11TypeInfo_Ai6__initZ 12: 50 push eax 13: e8 fc ff ff ff call 14 <_D3rtz3fooFZS3rtz1X+0x14> 14: R_386_PC32 _d_arrayliteralT 18: 89 c1 mov ecx,eax 1a: bb 02 00 00 00 mov ebx,0x2 1f: 89 5d f8 mov DWORD PTR [ebp-0x8],ebx 22: 89 4d fc mov DWORD PTR [ebp-0x4],ecx 25: 8b 55 fc mov edx,DWORD PTR [ebp-0x4] 28: 8b 45 f8 mov eax,DWORD PTR [ebp-0x8] 2b: 83 c4 10 add esp,0x10 2e: 5b pop ebx 2f: c9 leave 30: c3 ret -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------