www.digitalmars.com         C & C++   DMDScript  

D - [BUG] bogus codegen with -inline (access violation)

reply "Kris" <someidiot earthlink.dot.dot.dot.net> writes:
Here's a binary-chop with an interesting codegen issue. It operates fine
with any compiler flags other than -inline which, when applied, will cause
an access violation.

Compiler flags for the code listing are -g -O -release -inline

Will post the standalone module if Walter needs it.

- Kris


156:          static int bsearch (short[] array, short size, short match)
0042DCB8   push        eax
0042DCB9   push        ebx
0042DCBA   mov         ebx,0FFFFFFFFh
161:                  u = size;
0042DCBF   push        ebp
0042DCC0   push        esi
0042DCC1   mov         si,word ptr [esp+14h]
162:                  while (l+1 != u)
0042DCC6   push        edi
0042DCC7   mov         edi,eax
157:          {
158:                  short l, u, m;
159:
160:                  l = -1;
0042DCC9   cmp         word ptr [esp+18h],0
0042DCCF   je          _D3dsc5cache6Primes6Primes7bsearchFAsssZi+5Bh
(0042dd13)
0042DCD1   mov         word ptr [esp+10h],bx
165:                        if (array[m] < match)
0042DCD6   mov         edx,dword ptr [esp+20h]
0042DCDA   mov         ebx,dword ptr [esp+1Ch]
0042DCDE   mov         ebp,edx
0042DCE0   mov         bx,word ptr [esp+10h]
163:                        {
164:                        m = (l + u) / 2;
0042DCE5   movsx       ecx,bx
0042DCE8   movsx       eax,si
0042DCEB   add         ecx,eax
0042DCED   test        ecx,ecx
0042DCEF   jns         _D3dsc5cache6Primes6Primes7bsearchFAsssZi+3Ah
(0042dcf2)
0042DCF1   inc         ecx
0042DCF2   sar         ecx,1
0042DCF4   mov         edx,ecx
0042DCF6   movsx       ecx,cx
0042DCF9   cmp         word ptr l[ecx*2],di
0042DCFE   jge         _D3dsc5cache6Primes6Primes7bsearchFAsssZi+57h
(0042dd0f)
166:                            l = m;
0042DD00   mov         ebx,edx
0042DD02   movsx       edx,bx
0042DD05   inc         edx
0042DD06   movsx       ecx,si
0042DD09   cmp         edx,ecx
0042DD0B   jne         _D3dsc5cache6Primes6Primes7bsearchFAsssZi+2Dh
(0042dce5)
0042DD0D   jmp         _D3dsc5cache6Primes6Primes7bsearchFAsssZi+5Bh
(0042dd13)
167:                        else
168:                           u = m;
0042DD0F   mov         esi,edx
0042DD11   jmp         _D3dsc5cache6Primes6Primes7bsearchFAsssZi+4Ah
(0042dd02)
169:                        }
170:
171:                 if (u >= size || array[u] != match)
0042DD13   cmp         si,word ptr [esp+18h]
0042DD18   jge         _D3dsc5cache6Primes6Primes7bsearchFAsssZi+73h
(0042dd2b)
0042DD1A   movsx       edx,si
0042DD1D   mov         ecx,dword ptr [esp+20h]
0042DD21   mov         eax,dword ptr [esp+1Ch]
0042DD25   cmp         word ptr [ecx+edx*2],di
0042DD29   je          _D3dsc5cache6Primes6Primes7bsearchFAsssZi+80h
(0042dd38)
172:                     return -u;
0042DD2B   pop         edi
0042DD2C   mov         eax,esi
0042DD2E   neg         eax
0042DD30   pop         esi
0042DD31   cwde
0042DD32   pop         ebp
0042DD33   pop         ebx
0042DD34   pop         ecx
0042DD35   ret         0Ch
173:                 return u;
0042DD38   movsx       eax,si
174:          }
0042DD3B   pop         edi
0042DD3C   pop         esi
0042DD3D   pop         ebp
0042DD3E   pop         ebx
0042DD3F   pop         ecx
0042DD40   ret         0Ch
Apr 20 2004
parent "Kris" <someidiot earthlink.dot.dot.dot.net> writes:
Wanted to bring this one up again, since -inline apparently causes static
array addresses to be passed incorrectly. Attached is the standalone example
(sans main)


begin 666 Primes.d
M+RHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BH-" T*("  ("  

M("  ("!4:&ES('-O9G1W87)E(&ES('!R;W9I9&5D("=A<RUI<R<L('=I=&AO
M=70 86YY(&5X<')E<W, ;W( :6UP;&EE9 T*("  ("  ("!W87)R86YT>2X 
M26X ;F\ 979E;G0 =VEL;"!T:&4 875T:&]R<R!B92!H96QD(&QI86)L92!F
M;W( 9&%M86=E<PT*("  ("  ("!O9B!A;GD :VEN9"!A<FES:6YG(&9R;VT 
M=&AE('5S92!O9B!T:&ES('-O9G1W87)E+ T*("  ("  (" -"B  ("  ("  
M4&5R;6ES<VEO;B!I<R!H97)E8GD 9W)A;G1E9"!T;R!A;GEO;F4 =&\ =7-E
M('1H:7, <V]F='=A<F4 9F]R(&%N>2 -"B  ("  ("  <'5R<&]S92P :6YC
M;'5D:6YG(&-O;6UE<F-I86P 87!P;&EC871I;VYS+"!A;F0 =&\ 86QT97( 
M:70 86YD+V]R( T*("  ("  ("!R961I<W1R:6)U=&4 :70 9G)E96QY+"!S
M=6)J96-T('1O('1H92!F;VQL;W=I;F< <F5S=')I8W1I;VYS. T*("  ("  
M(" -"B  ("  ("  ,2X 5&AE(&]R:6=I;B!O9B!T:&ES('-O9G1W87)E(&UU
M<W0 ;F]T(&)E(&UI<W)E<')E<V5N=&5D.R!Y;W4 ;75S=" -"B  ("  ("  
M("  ;F]T(&-L86EM('1H870 >6]U('=R;W1E('1H92!O<FEG:6YA;"!S;V9T
M=V%R92X 268 >6]U('5S92!T:&ES( T*("  ("  ("  ("!S;V9T=V%R92!I
M;B!A('!R;V1U8W0L(&%N(&%C:VYO=VQE9&=M96YT('=I=&AI;B!D;V-U;65N
M=&%T:6]N(&]F( T*("  ("  ("  ("!S86ED('!R;V1U8W0 =V]U;&0 8F4 
M87!P<F5C:6%T960 8G5T(&ES(&YO="!R97%U:7)E9"X-" T*("  ("  (" R
M+B!!;'1E<F5D('-O=7)C92!V97)S:6]N<R!M=7-T(&)E('!L86EN;'D ;6%R
M:V5D(&%S('-U8V L(&%N9"!M=7-T( T*("  ("  ("  ("!N;W0 8F4 ;6ES
M<F5P<F5S96YT960 87, 8F5I;F< =&AE(&]R:6=I;F%L('-O9G1W87)E+ T*

M<B!A;'1E<F5D(&9R;VT 86YY(&1I<W1R:6)U=&EO; T*("  ("  ("  ("!O






M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ


M=F%T92!S=&%T:6, 8V]N<W0 <VAO<G0 <')I;65S6UT /0T*("  ("  ("!;





M,S$L(" Q,S<L(" Q,SDL(" Q-#DL(" Q-3$L(" Q-3<L(" Q-C,L(" Q-C<L
















M,C,L(" X,C<L(" X,CDL(" X,SDL(" X-3,L(" X-3<L(" X-3DL(" X-C,L




M-#DL




M.#DL






M,#DL



























M-#DL
M,#DL





M-#DL




























M,#DL




M,#DL


































M,#DL





M-#DL




M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ

M>2UC:&]P('-E87)C:"!O;B!S;W)T960 9&%T82X-" T*("  ("  (" J*BHJ
M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ

M:6, :6YT(&)S96%R8V  *'-H;W)T6UT 87)R87DL('-H;W)T(&UA=&-H*0T*



M("  ("!W:&EL92 H;"LQ("$]('4I( T*("  ("  ("  ("  ("  ("  ("  
M('L-"B  ("  ("  ("  ("  ("  ("  ("!P<FEN=&8 *"(E9"P )60L("5D
M7&XB+"!L+"!U+"!M*3L-"B  ("  ("  ("  ("  ("  ("  ("!M(#T *&P 

M(#P
M("  ("  ("  ("  ("  ("  ("  (&5L<V4-"B  ("  ("  ("  ("  ("  
M("  ("  ("!U(#T
M("  ("  ("  ("  (&EF("AU(#X](&%R<F%Y+FQE;F=T:"!\?"!A<G)A>5MU


M("\J*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ

M("!R971U<FX 82!P<FEM92!N=6UB97( 8F5T=V5E;B R(&%N9" W.3$Y("AI
M;F-L=7-I=F4I('1H870-"B  ("  ("  ("  ("  ("!I<R!E<75A;"!T;R!O
M<B!L87)G97( =&AA;B!T:&4 9VEV96X )W1A<F=E="< ;G5M8F5R+B -" T*
M("  ("  (" J*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ


M"B  ("  ("  ("  ("  ("!S:&]R="!I;F1E>" ](&)S96%R8V  *'!R:6UE
M<RP =&%R9V5T*3L-"B  ("  ("  ("  ("  ("!I9B H:6YD97  /" P*0T*
M("  ("  ("  ("  ("  ("  ("!I;F1E>" ]("UI;F1E>#L-" T*("  ("  
M("  ("  ("  (&EF("AI;F1E>" ^/2!P<FEM97,N;&5N9W1H*0T*("  ("  


'('T-"GT-" ``
`
end
Apr 23 2004