Неправильный exe для .net 4
От: Mumitroller Беларусь  
Дата: 28.07.11 09:00
Оценка:
Вот такой код компилируется в exe, который нормально выполняется на win64 и падает на win32.
using System;
module Program
{
  Main() : void
  {
      mutable arg;
      Test(out arg);
  }
  
  Test(arg : out Struct1) : void
  {
    arg.Field1 = if (true) "1"; else "2";
  }
  
  public struct Struct1
  {
    public mutable Field1 : string;
  }
}

Падает с внутренней ошибкой .net — что-то там про внутренние ограничения JIT, сейчас нет возможности привести точный текст.

А в Windows Events Log появляются вот такие записи:

Application: ConsoleApplication1.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an internal error in the .NET Runtime at IP 6D683A86 (6D680000) with exit code 80131506.


Faulting application name: ConsoleApplication1.exe, version: 0.0.0.0, time stamp: 0x4e3116ba
Faulting module name: clr.dll, version: 4.0.30319.1, time stamp: 0x4ba1d9ef
Exception code: 0xc0000005
Fault offset: 0x00003a86
Faulting process id: 0xd4
Faulting application start time: 0x01cc4d0009c1d15c
Faulting application path: Z:\Shared Folders\ConsoleApplication1.exe
Faulting module path: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll


Но, если заменить тип поля Struct1.Field1 на int, то полученный exe выполняется без ошибок на win32, а на win64 падает с NullReferenceException на строке присвоения в Test.

using System;
module Program
{
  Main() : void
  {
      mutable arg;
      Test(out arg);
  }
  
  Test(arg : out Struct1) : void
  {
    arg.Field1 = if (true) 1; else 2; // здесь NRE на win64
  }
  
  public struct Struct1
  {
    public mutable Field1 : int;
  }
}


Nemerle 1.0.0.9832 for .net 4.0
Windows 7 64 bit
Windows 7 32 bit

Mumitroller
... << RSDN@Home 1.2.0 alpha 4 rev. 0>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.