REVISIÓN: Se genera el código de equipo incorrecto para una instrucción de "switch" en el Visual C++ 2010 x 64 compilador

Seleccione idioma Seleccione idioma
Id. de artículo: 2802711 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Síntomas

Se supone que compilar un archivo de código fuente de C o C++ en un archivo binario basado en x 64 con el compilador de Visual C o C++ (Cl.exe) en Microsoft Visual Studio 2010. El archivo de código fuente contiene una función que utiliza una instrucción switch . En esta situación, se puede generar código de equipo incorrecto para la instrucción switch si se cumplen las condiciones siguientes:
  • Está habilitada la opción del compilador /Ob1 (Only_inline).
  • o1/O1 (Minimizar tamaño), /o2/O2 (maximizar velocidad), /Ox (Full Optimization), opción del compilador de optimización de /Og (Global Optimizations) está habilitada la o.
  • Está deshabilitada la opción del compilador /GL (Whole Program Optimization).

Solución

Información de la revisión

Ahora hay un hotfix compatible de Microsoft. Sin embargo, se pretende corregir el problema descrito en este artículo. Aplíquela sólo a sistemas que experimenten este problema específico.

Para resolver este problema, póngase en contacto con servicios de soporte técnico de Microsoft para obtener la revisión. Para obtener una lista completa de números de teléfono de servicios de soporte al cliente de Microsoft y obtener información acerca de los costos de soporte, visite el siguiente sitio Web de Microsoft:
http://support.Microsoft.com/contactus/?ws=support
Nota En casos especiales, los costos derivados normalmente de llamadas al soporte técnico pueden cancelarse si un profesional de soporte técnico de Microsoft determina que una actualización específica resolverá el problema. Se aplicarán los costos de soporte técnico usuales a las cuestiones y problemas que no guarden relación con la actualización en cuestión.

Requisitos previos

Para aplicar esta revisión, debe tener Visual Studio 2010 Service Pack 1 (SP1) instalado.

Requisito de reinicio

No es necesario que reinicie el equipo después de aplicar esta revisión si no se utilizan los archivos afectados. Le recomendamos que cierre los componentes relacionados con Visual Studio 2010 de antes de aplicar esta revisión.

Información de archivo

La versión global de esta revisión tiene los atributos de archivo (u otros posteriores) que se enumeran en la tabla siguiente. Las fechas y horas de estos archivos se muestran en hora Universal coordinada (UTC). Cuando vea la información de archivo, se convierte en hora local. Para averiguar la diferencia entre la hora UTC y la hora local, utilice el Zona horaria ficha en la Fecha y hora elemento en el Panel de Control.
Contraer esta imagenAmpliar esta imagen
assets folding start collapsed
Contraer esta tablaAmpliar esta tabla
Nombre de archivoVersión del archivoTamaño de archivoFechaHoraPlataformaRuta de acceso
C2.dll16.0.40219.4442,606,71211-Mar-201319:24x 86Microsoft Visual Studio 10.0\VC\bin
C2.dll16.0.40219.4442,493,56012-Mar-201316:48x 86Microsoft Visual Studio 10.0\VC\bin\x86_amd64
C2.dll16.0.40219.4442,593,92812-Mar-201316:48x 86Microsoft Visual Studio 10.0\VC\bin\x86_ia64
C2.dll16.0.40219.4442,960,50412-Mar-201316:48x 64Microsoft Visual Studio 10.0\VC\bin\amd64
Contraer esta imagenAmpliar esta imagen
assets folding end collapsed

Más información

Para reproducir este problema, cree un archivo de código fuente de C o C++ que contiene el código siguiente:

#include <stdio.h>

int test(int bps, int sflags)
{
    if (sflags & (1 << bps))
    {
        switch (bps)
        {
        case 1:  return 1;
        case 2:  return 3;
        default: return 0;
        }
    }
    else
    {
        switch (bps)
        {
        case 1:  return 2;
        default: return 0;
        }
    }
}
 
void main()
{
    int res = test(1, -1);
    printf("%d\n", res);
}


A continuación, abra Visual Studio x 64 entre herramientas de símbolo del sistema o línea de comandos de Visual Studio x 64 Win64 en Visual Studio 2010 de y compilar el archivo de origen mediante el comando siguiente:
/O2/Ob1 de cl 'Ruta de acceso de archivo de origen'

El resultado esperado es 1. Sin embargo, el resultado real es 0.

Estado

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

Referencias

Para obtener más información acerca de la opción del compilador /Ob , consulte el siguiente sitio Web MSDN:
Información general acerca de la opción del compilador /Ob
Para obtener más información acerca de la opción de compilador , consulte el siguiente sitio Web MSDN:
Información general acerca de la opción de compilador
Para obtener más información acerca de las opciones de optimización / o , visite el siguiente sitio Web de MSDN:
Información general acerca de las opciones / o) (optimizar código)

Propiedades

Id. de artículo: 2802711 - Última revisión: viernes, 29 de marzo de 2013 - Versión: 3.0
La información de este artículo se refiere a:
  • Microsoft Visual Studio 2010 Service Pack 1
  • Microsoft Visual Studio 2010 Ultimate
  • Microsoft Visual Studio 2010 Professional
  • Microsoft Visual Studio 2010 Premium with MSDN
Palabras clave: 
kbqfe kbHotfixServer kbfix kbsurveynew kbexpertiseadvanced kbmt KB2802711 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 2802711

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com