[nem-bug] [Nemerle 0000828]: Mono doesn't implement conv.ovf.u4.un; Nemerle generates it

feedback at nemerle.org feedback at nemerle.org
Fri Jan 19 17:57:38 CET 2007


A NOTE has been added to this issue.
======================================================================
<http://nemerle.org/bugs/view.php?id=828> 
======================================================================
Reported By:                Evin Robertson
Assigned To:                
======================================================================
Project:                    Nemerle
Issue ID:                   828
Category:                   Compiler
Reproducibility:            always
Severity:                   minor
Priority:                   normal
Status:                     new
======================================================================
Date Submitted:             01-19-2007 02:45 CET
Last Modified:              01-19-2007 17:57 CET
======================================================================
Summary:                    Mono doesn't implement conv.ovf.u4.un; Nemerle
generates it
Description: 
Mono doesn't implement conv.ovf.u4.un.  See
http://bugzilla.ximian.com/show_bug.cgi?id=70355 where this is marked
WONTFIX.

Nemerle generates this opcode on code like the following:

def x = '\n' :> uint
def y = (0 : ushort) :> uint

These casts could never fail, so they don't need to be checked for
overflow.  Attached is a patch to generate the unchecked opcode instead.

======================================================================

----------------------------------------------------------------------
 nazgul - 01-19-07 17:57 
----------------------------------------------------------------------
I checked with mono (Mono JIT compiler version 1.2.2) and it generates the
same opcode, which works very well:

[nazgul at lilith ~]$ mono --version
Mono JIT compiler version 1.2.2, (C) 2002-2006 Novell, Inc and
Contributors. www.mono-project.com
        TLS:           normal
        GC:            Included Boehm (with typed GC)
        SIGSEGV:       normal
        Disabled:      none
[nazgul at lilith ~]$ cat t.cs 
class A {
static void Main () {
ulong x = ulong.MaxValue;
uint y = 33;
y = (uint) x;
}
}
[nazgul at lilith ~]$ mcs t.cs /checked
t.cs(4,6): warning CS0219: The variable `y' is assigned but its value is
never used
Compilation succeeded - 1 warning(s)
[nazgul at lilith ~]$ ./t.exe 

Unhandled Exception: System.OverflowException: Number overflow.
  at A.Main () [0x00000] 
[nazgul at lilith ~]$ monodis t.exe | grep conv.ovf.u4.un
        IL_0007:  conv.ovf.u4.un 


Note that ncc runs in /checked mode by default. 

The bugreport you refer to looks quite old, probably they changed their
mind and implemented the opcode, since it is needed (e.g. in above
program)

Issue History
Date Modified  Username       Field                    Change              
======================================================================
01-19-07 02:45 Evin Robertson New Issue                                    
01-19-07 02:45 Evin Robertson File Added: conv_u4.patch                    
01-19-07 17:57 nazgul         Note Added: 0001610                          
======================================================================




More information about the bugs mailing list