Re: Неправильный exe для .net 4
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.07.11 15:42
Оценка:
Здравствуйте, Mumitroller, Вы писали:

M>Вот такой код компилируется в exe, который нормально выполняется на win64 и падает на win32.

M>
using System;
M>module Program
M>{
M>  Main() : void
M>  {
M>      mutable arg;
M>      Test(out arg);
M>  }
  
M>  Test(arg : out Struct1) : void
M>  {
M>    arg.Field1 = if (true) "1"; else "2";
M>  }
  
M>  public struct Struct1
M>  {
M>    public mutable Field1 : string;
M>  }
M>}
M>

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

Баг в генерируемом MSIL.
Независимо от платформы PEVerify выдает следующее:

E:\MyProjects\Tests\ConsoleApplication355\ConsoleApplication355\bin\Debug>"E:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\PEVerify.
exe" ConsoleApplication355.exe

Microsoft (R) .NET Framework PE Verifier. Version 4.0.30319.1
Copyright (c) Microsoft Corporation. All rights reserved.

[IL]: Error: [E:\MyProjects\Tests\ConsoleApplication355\ConsoleApplication355\bin\Debug\ConsoleApplication355.exe : Program::Test][offset 0x00000003][found
address of value 'Program+Struct1'][expected value 'Program+Struct1'] Unexpected type on the stack.
[IL]: Error: [E:\MyProjects\Tests\ConsoleApplication355\ConsoleApplication355\bin\Debug\ConsoleApplication355.exe : Program::Test][offset 0x00000021][found
value 'Program+Struct1'][expected readonly address of value 'Program+Struct1'] Unexpected type on the stack.
2 Error(s) Verifying ConsoleApplication355.exe

Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.