Logical const

Andrej Mitrovic andrej.mitrovich at gmail.com
Mon Nov 29 18:29:51 PST 2010


No no I need more sleep, I forgot about the first assert. Sorry about that..

On 11/30/10, Andrej Mitrovic <andrej.mitrovich at gmail.com> wrote:
> 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.mitrovich at gmail.com> wrote:
>> On 11/30/10, Simen kjaeraas <simen.kjaras at gmail.com> wrote:
>>> Simen kjaeraas <simen.kjaras at 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 );
>> }
>>
>


More information about the Digitalmars-d mailing list