Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

179
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda