Oh this one is even more spectacular: void bar( ref int n ) { n++; }
void main( string[] args ) { immutable int n = args.length * 0; assert( is( typeof( n ) == const(int) ) ); bar( n ); // Uhm... assert( n == 1 ); } K:\code>dmd bug.d -release -O -inline K:\code>bug object.Error: assert(0) or HLT instruction I'll update the bugzilla entry. On 11/30/10, Andrej Mitrovic <andrej.mitrov...@gmail.com> wrote: > On 11/30/10, Simen kjaeraas <simen.kja...@gmail.com> wrote: >> Simen kjaeraas <simen.kja...@gmail.com> wrote: >> >>> It works in many cases, but not for function calls >> >> Some more testing brought this bug to my attention: >> >> void bar( ref int n ) { >> n++; >> } >> >> void main( string[] args ) { >> const int n = args.length * 0; >> assert( is( typeof( n ) == const(int) ) ); >> bar( n ); // Uhm... >> assert( n == 1 ); // WTF?!? >> } >> >> >> I would say this is seriously bad. >> http://d.puremagic.com/issues/show_bug.cgi?id=5291 >> >> >> -- >> Simen >> > > It seems this is a problem with ref. If you use "in" the compiler gets > some of its senses back: > > void bar( in int n ) > { > n++; > } > > void main( string[] args ) > { > const int n = args.length * 0; > assert( is( typeof( n ) == const(int) ) ); > bar( n ); // compile error > assert( n == 1 ); > } >