Oprava: Nesprávné strojový kód je generován pro příkaz "switch" ve Visual C++ 2010 x 64 kompilátoru

Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.

Projděte si také anglickou verzi článku: 2802711
Příznaky
Předpokládejme kompilaci C nebo C++ soubor zdrojového kódu pro procesory x 64 binárních souborů pomocí kompilátoru Visual C/C++ (Cl.exe) v aplikaci Microsoft Visual Studio 2010. Soubor zdrojového kódu obsahuje funkci, která používá příkaz Přepnout . V takovém případě mohou být generovány nesprávného strojového kódu pro příkaz Přepnout v případě, že jsou splněny následující podmínky:
  • Je povolena možnost kompilátoru /Ob1 (Only_inline).
  • /O1 (minimalizovat velikost), /O2 (maximalizovat rychlost), /Ox (úplnou optimalizaci) nebo možnost kompilátoru optimalizace /Og (globální optimalizace) je povolena.
  • Možnost kompilátoru /GL (optimalizace celého programu) je zakázána.
Řešení

Informace o opravě hotfix

K dispozici je nyní podporovaná oprava hotfix od společnosti Microsoft. Je však určena opravit pouze problému popsaného v tomto článku. Použijte ji pouze u systémů, ve kterých dochází k tomuto konkrétnímu problému.

Chcete-li vyřešit tento problém, obraťte se na technickou podporu společnosti Microsoft získat opravu hotfix. Úplný seznam telefonních čísel služeb technické podpory společnosti Microsoft a informace o cenách technické podpory naleznete na následujícím webu společnosti Microsoft:Poznámka: Ve zvláštních případech mohou být účtované poplatky podpory stornovány, pokud pracovník technické podpory společnosti Microsoft určí, že váš problém vyřeší konkrétní aktualizace. Obvyklé náklady na podporu použije dalších otázek a problémů, které nejsou vyřešeny v dané konkrétní aktualizaci.

Požadavky

Chcete-li nainstalovat tuto opravu hotfix, musíte mít Visual Studio 2010 Service Pack 1 (SP1) nainstalován.

Požadavek na restartování

Nemáte k restartování počítače po instalaci této opravy hotfix Pokud zasažené soubory nejsou používány. Doporučujeme uzavřít součásti týkající se aplikace Visual Studio 2010, před instalací této opravy hotfix.

Informace o souboru

Globální verze této opravy hotfix má atributy souborů (nebo novější) uvedené v následující tabulce. Kalendářní data a časy jednotlivých souborů jsou uvedeny koordinovaný světový čas (UTC). Při zobrazení informací o souboru je převést na místní čas. Rozdíl mezi místním ČASEM a časem UTC, Časové pásmo karty v Datum a čas Chcete-li zobrazit položky v Ovládacích panelech.
Název souboruVerze souboruVelikost souboruDatumČasPlatformaCesta
C2.dll16.0.40219.4442,606,71211. Března 201319:24x86Microsoft Visual Studio 10.0\VC\bin
C2.dll16.0.40219.4442,493,56012. Března 201316:48x86Microsoft Visual Studio 10.0\VC\bin\x86_amd64
C2.dll16.0.40219.4442,593,92812. Března 201316:48x86Microsoft Visual Studio 10.0\VC\bin\x86_ia64
C2.dll16.0.40219.4442,960,50412. Března 201316:48x64Microsoft Visual Studio 10.0\VC\bin\amd64

Další informace
Pro reprodukci tohoto problému, vytvořte C nebo C++ zdrojový soubor, který obsahuje následující kód:
#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);}


Potom otevřete Visual Studio x 64 křížový nástroje příkazového řádku nebo Visual Studio x 64 Win64 příkazového řádku v aplikaci Visual Studio 2010 a kompilovat zdrojový soubor pomocí následující příkaz:
cl /Ob1 /O2 'Cesta k souboru zdroje'

Očekávaný výsledek je 1. Nicméně skutečný výsledek je 0.
Prohlášení
Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části "Platí pro".
Odkazy
Další informace o možnosti kompilátoru /Ob naleznete na následujícím webu MSDN: Další informace o možnosti kompilátoru /GL naleznete na následujícím webu MSDN: Další informace o možnostech optimalizace /O naleznete na následujícím webu MSDN:

Upozornění: Tento článek je přeložený automaticky

Vlastnosti

ID článku: 2802711 - Poslední kontrola: 03/29/2013 08:47:00 - Revize: 3.0

Microsoft Visual Studio 2010 Service Pack 1, Microsoft Visual Studio 2010 Ultimate, Microsoft Visual Studio 2010 Professional, Microsoft Visual Studio 2010 Premium with MSDN

  • kbqfe kbHotfixServer kbfix kbsurveynew kbexpertiseadvanced kbmt KB2802711 KbMtcs
Váš názor