REVISIÓN: Cuando ejecuta una aplicación creada utilizando la opción del compilador/ot en Microsoft Visual Studio 2005 Service Pack 1 (SP1), algunas instrucciones "if" pueden ejecutarse incorrectamente


Síntomas


Utilice la opción del compilador /Ot (favorecer código rápido) cuando se genera una aplicación que está configurada en el x64 plataforma en Microsoft Visual Studio 2005 Service Pack 1 (SP1). Cuando se ejecuta la aplicación, algunas instrucciones Si funcionen incorrectamente. Por lo tanto, los resultados son impredecibles. Por ejemplo, se pueden omitir las instrucciones if en el código generado de la aplicación.

Este problema sólo se produce en la situación siguiente.
  • Hay algunas instrucciones MOV entre dos operaciones de comparación.
  • Estos comparan operaciones uso los mismos operandos.
  • Los valores de los operandos se cambian por las instrucciones de MOV.
En este escenario, pueden omitirse las instrucciones if en la segunda operación de comparación.

Notas:
  • Este problema también puede producirse cuando utiliza la opción/O2 o /Ox para generar la aplicación.
  • Este problema no ocurre en el x86 plataforma.

Causa


Este problema se produce porque el optimizador de compilador incorrectamente se supone que el indicador establecido por la operación XOR puede utilizarse sin incluir una operación de comparación.

Solución


Información de la revisión

Existe un hotfix disponible desde Microsoft. Sin embargo, esta revisión se diseñó para corregir únicamente el problema que se describe en este artículo. Aplique esta revisión solamente a sistemas que experimenten el problema descripto en este artículo. Esta revisión podría ser sometida a comprobaciones adicionales. Por lo tanto, si no se ve muy afectado por este problema, recomendamos que espere a la próxima actualización de software que contenga este hotfix.

Si la revisión está disponible para su descarga, hay una sección de "Descarga de revisión disponible" en la parte superior de este artículo de Knowledge Base. Si esta sección no aparece, póngase en contacto con el servicio al cliente de Microsoft y soporte técnico para obtener la revisión.

Nota: Si se producen problemas adicionales o si se requiere cualquier otra solución, será necesario crear una solicitud de revisión independiente. Los costos habituales de soporte se aplicarán a las preguntas de soporte técnico adicionales y problemas que no califican para esta revisión específica. Para obtener una lista completa de los números de teléfono de servicio al cliente de Microsoft o para crear una solicitud de servicio independiente, visite el siguiente sitio Web de Microsoft:Nota: El formulario de "Descarga de Hotfix disponible" muestra los idiomas para los que el Hotfix está disponible. Si no ve su idioma, es porque no hay una revisión para ese idioma.

Requisitos previos

Debe tener el Visual Studio 2005 Service Pack 1 instalado para aplicar esta revisión.

Requisito de reinicio

No es necesario que reinicie el equipo después de aplicar este hotfix.

Información de reemplazo de revisión

Este hotfix no sustituye a otras revisiones.

Información de archivo

La versión en inglés de esta revisión tiene los atributos de archivo (o atributos del archivo más reciente) mostrados en la tabla siguiente. Las fechas y horas de estos archivos se muestran en la hora Universal coordinada (UTC). Al ver la información del archivo, se convierte en hora local. Para encontrar la diferencia entre la hora UTC y la hora local, utilice la ficha Zona horaria en el elemento de Fecha y hora del Panel de control.
Nombre del archivoVersión del archivoTamaño de archivoFechaHoraPlataforma
C2.dll14.0.50727.30802,273,28019 de noviembre de 200818:52x86
C2.dll14.0.50727.30807,192,57619 de noviembre de 200823:25IA-64
C2.dll14.0.50727.30802,490,36819 de noviembre de 200823:26x86
C2.dll14.0.50727.30803,600,38419 de noviembre de 200823:33x64
C2.dll14.0.50727.30802,203,64819 de noviembre de 200823:33x86

Solución alternativa


Para evitar este problema, utilice uno de los métodos siguientes:
  • Utilice la palabra clave volatile al declarar las variables que se utilizan en las instrucciones if .
  • Deshabilitar la opción de optimización de velocidad. Por ejemplo, puede reemplazar la opción /Ot con la opción /Os (favorecer código pequeño) . O bien, utilice la opción/O1 en lugar de la opción/O2 o /Ox .
  • Agregar una línea de código antes de las instrucciones if en la segunda operación de comparación. Por ejemplo, agregue una instrucción printf .

Estado


Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Aplicable a".

Más información


Para obtener más información sobre el código de una o más instrucciones pueden ejecutarse incorrectamente cuando usa la característica de optimización de código en Visual Studio 2005, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

925792 una o varias instrucciones de código pueden ejecutarse incorrectamente cuando usa la característica de optimización de código en Visual Studio 2005

Para obtener más información acerca de la terminología de la actualización de software, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
824684 descripción de la terminología estándar que se utiliza para describir las actualizaciones de software de Microsoft