bearophile Wrote: > I have compiled this little D2 program: > > > int[] foo() { > return []; > } > int[] bar() { > return null; > } > void main() {} > > > > Using DMD 2.052, dmd -O -release -inline test2.d > > This is the asm of the two functions: > > _D5test23fooFZAi comdat > L0: push EAX > mov EAX,offset FLAT:_D11TypeInfo_Ai6__initZ > push 0 > push EAX > call near ptr __d_arrayliteralT > mov EDX,EAX > add ESP,8 > pop ECX > xor EAX,EAX > ret > > _D5test23barFZAi comdat > xor EAX,EAX > xor EDX,EDX > ret > > Is this expected and desired? Isn't it better to compile the foo() as bar()? > > Bye, > bearophile
[] is not null, it's an array of 0 elements, what is done exactly. edx points to the allocated array.