Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

181
Views
RyuJit produciendo resultados incorrectos

Después de actualizar recientemente a .net 4.6, descubrimos un error en el que RyuJit produce resultados incorrectos. Por ahora, pudimos solucionar el problema agregando useLegacyJit enable="true" a app.config.

¿Cómo puedo depurar el código de máquina generado por lo siguiente?

Creé un nuevo proyecto de consola en VS 2015 RTM, configurado en Lanzamiento, Cualquier CPU, sin marcar Preferir 32 bits, ejecutar con y sin depurador adjunto produce el mismo resultado.

 using System; using System.Runtime.CompilerServices; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { Console.WriteLine(Calculate()); Console.WriteLine(Calculate()); Console.ReadLine(); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Value Calculate() { bool? _0 = (bool?)null; bool? _1 = (bool?)true; if (!Value.IsPresent<bool>(_1)) { return default(Value); } bool? result = null; result = (_1.Value ? new bool?(false) : result); if (_0.HasValue && _0.Value) { } return new Value(result); } public struct Value { bool? _value; public Value(bool? value) { _value = value; } public static bool IsPresent<T>(bool? _) { return _.HasValue; } public override string ToString() { return _value.ToString(); } } } }

Debería producir: Falso Falso

pero en cambio produce: Verdadero Falso

La parte clave del ejemplo es

 result = true ? false : result;

Que siempre debería devolver falso, pero como puede ver en la salida, devuelve Verdadero la primera vez que se ejecuta el método y una respuesta diferente la segunda vez que se ejecuta el método. Eliminar algunas líneas más del método Calculate() hará que siempre devuelva True, pero el ejemplo dado es lo más cercano que pude reproducir a nuestro escenario de producción real.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Gracias por el programa de reproducción aislado y puedo confirmar que, de hecho, se trata de un error de RyuJIT en el optimizador que quedó expuesto debido a la inserción. Hice una corrección en el compilador y calculé los detalles de implementación. No para convertir SO en un rastreador de errores y para una respuesta más rápida: ryujit@microsoft.com.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!