Thread overview
if(0) / goto / return
Dec 09, 2004
Thomas Kuehne
Dec 09, 2004
Simon Buchan
Dec 09, 2004
Thomas Kuehne
Dec 14, 2004
Thomas Kuehne
December 09, 2004
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

goto_09.d
# int main(){
#       if(0){
# label:
#                return 0;
#        }else{
#                goto label;
#        }
#        assert(0);
# }

> function main function expected to return a value of type int

test cases:
http://svn.kuehne.cn/dstress/run/goto_08.d
http://svn.kuehne.cn/dstress/run/goto_09.d

Thomas

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.9.13 (GNU/Linux)

iD8DBQFBt/an3w+/yD4P9tIRAu0SAJ91qG6O+c6FVWyEXEEQpRf2oce4LgCghAuA
1TxdeyrCvMRSPuigMfCnbeo=
=ANlH
-----END PGP SIGNATURE-----
December 09, 2004
On Thu, 9 Dec 2004 07:54:32 +0100, Thomas Kuehne <thomas-dloop@kuehne.thisisspam.cn> wrote:

>
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> goto_09.d
> # int main(){
> #       if(0){
> # label:
> #                return 0;
> #        }else{
> #                goto label;
> #        }
> #        assert(0);
> # }
>
>> function main function expected to return a value of type int
>
> test cases:
> http://svn.kuehne.cn/dstress/run/goto_08.d
> http://svn.kuehne.cn/dstress/run/goto_09.d
>
> Thomas
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.9.13 (GNU/Linux)
>
> iD8DBQFBt/an3w+/yD4P9tIRAu0SAJ91qG6O+c6FVWyEXEEQpRf2oce4LgCghAuA
> 1TxdeyrCvMRSPuigMfCnbeo=
> =ANlH
> -----END PGP SIGNATURE-----

Im not sure this counts as a bug... putting a return somewhere around that assert
should workaround it if you manage to find a case where this matters. (Cases like
this where the compiler is expected to reduce the code for you would only introduce
bugs, IMHO, something dmd has WELL underhand (;) Walter))

-- 
"Unhappy Microsoft customers have a funny way of becoming Linux,
Salesforce.com and Oracle customers." - www.microsoft-watch.com:
"The Year in Review: Microsoft Opens Up"
--
"I plan on at least one critical patch every month, and I haven't been disappointed."
- Adam Hansen, manager of security at Sonnenschein Nath & Rosenthal LLP
(Quote from http://www.eweek.com/article2/0,1759,1736104,00.asp)
--
"It's been a challenge to "reteach or retrain" Web users to pay for content, said Pizey"
-Wired website: "The Incredible Shrinking Comic"
December 09, 2004
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Simon Buchan schrieb am Fri, 10 Dec 2004 03:14:55 +1300:
> On Thu, 9 Dec 2004 07:54:32 +0100, Thomas Kuehne
><thomas-dloop@kuehne.thisisspam.cn> wrote:
>
>> goto_09.d
>> # int main(){
>> #       if(0){
>> # label:
>> #                return 0;
>> #        }else{
>> #                goto label;
>> #        }
>> #        assert(0);
>> # }
>>
>>> function main function expected to return a value of type int
>>
>> test cases:
>> http://svn.kuehne.cn/dstress/run/goto_08.d
>> http://svn.kuehne.cn/dstress/run/goto_09.d
>>
>
> Im not sure this counts as a bug... putting a return somewhere around that assert should workaround it if you manage to find a case where this matters. (Cases like this where the compiler is expected to reduce the code for you would only introduce bugs, IMHO, something dmd has WELL underhand (;) Walter))

Actually it seems to be exactly a bug where the compiler _did_ reduce
the code.
Compare with the goto_08 test - it's the same, only that the if
condition isn't static. goto_08 compiles and executes without a glitch.

Thomas

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.9.13 (GNU/Linux)

iD8DBQFBuF+V3w+/yD4P9tIRAoj+AJ9Ja2eS+fjBkxa0ev9q3k/SjK4JRQCgqA+1
5/CZDQiQ2DHYZzucR+jOHtg=
=GUQX
-----END PGP SIGNATURE-----
December 14, 2004
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1


> Simon Buchan schrieb am Fri, 10 Dec 2004 03:14:55 +1300:
>> On Thu, 9 Dec 2004 07:54:32 +0100, Thomas Kuehne
>><thomas-dloop@kuehne.thisisspam.cn> wrote:
>>
>>> goto_09.d
>>> # int main(){
>>> #       if(0){
>>> # label:
>>> #                return 0;
>>> #        }else{
>>> #                goto label;
>>> #        }
>>> #        assert(0);
>>> # }
>>>
>>>> function main function expected to return a value of type int
>>>
>>> test cases:
>>> http://svn.kuehne.cn/dstress/run/goto_08.d
>>> http://svn.kuehne.cn/dstress/run/goto_09.d
>>>
>>
>> Im not sure this counts as a bug... putting a return somewhere around that assert should workaround it if you manage to find a case where this matters. (Cases like this where the compiler is expected to reduce the code for you would only introduce bugs, IMHO, something dmd has WELL underhand (;) Walter))
>
> Actually it seems to be exactly a bug where the compiler _did_ reduce the code.

The culprit is statement.c -> *IfStatement::semantic.

Either the short-circuit evaluation has to be disable (that's what I am currently doing) or the short-circuit evaluation has to look for labels referenced from outside.

Thomas


-----BEGIN PGP SIGNATURE-----

iD8DBQFBvrkD3w+/yD4P9tIRApYNAKC0cYktRoxZ8SyG2T9cg1HS9nHpvACgoXod
9kVZKNqsZ7YWuL1PU1O1Low=
=ufPR
-----END PGP SIGNATURE-----