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

Překlady článku Překlady článku
ID článku: 2802711 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

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:
http://support.microsoft.com/contactus/?ws=support
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.
Zmenšit tento obrázekZvětšit tento obrázek
assets folding start collapsed
Zmenšit tuto tabulkuRozšířit tuto tabulku
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
Zmenšit tento obrázekZvětšit tento obrázek
assets folding end collapsed

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:
Obecné informace o možnosti kompilátoru /Ob
Další informace o možnosti kompilátoru /GL naleznete na následujícím webu MSDN:
Obecné informace o možnosti kompilátoru /GL
Další informace o možnostech optimalizace /O naleznete na následujícím webu MSDN:
Obecné informace o možnostech /O (Optimalizace kódu)

Vlastnosti

ID článku: 2802711 - Poslední aktualizace: 29. března 2013 - Revize: 3.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Visual Studio 2010 Service Pack 1
  • Microsoft Visual Studio 2010 Ultimate
  • Microsoft Visual Studio 2010 Professional
  • Microsoft Visual Studio 2010 Premium with MSDN
Klíčová slova: 
kbqfe kbHotfixServer kbfix kbsurveynew kbexpertiseadvanced kbmt KB2802711 KbMtcs
Strojově přeložený článek
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

Dejte nám zpětnou vazbu

 

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