Poprawka: Niepoprawny kod maszynowy jest generowany dla instrukcji "switch" w Visual C++ 2010 x 64 kompilator

Tłumaczenia artykułów Tłumaczenia artykułów
Numer ID artykułu: 2802711 - Zobacz jakich produktów dotyczą zawarte w tym artykule porady.
Rozwiń wszystko | Zwiń wszystko

Na tej stronie

Symptomy

Załóżmy, skompiluj plik kodu źródłowego C lub C++ do pliku binarnego z procesorami x 64 za pomocą kompilatora Visual C/C++ (Cl.exe) w programie Microsoft Visual Studio 2010. Plik kodu źródłowego zawiera funkcję, która korzysta z instrukcji przełączyć . W tej sytuacji niepoprawny kod maszynowy mogą być generowane instrukcja Przełączanie , jeśli są spełnione następujące warunki:
  • Włączono opcję kompilatora /Ob1 (Only_inline).
  • /O1 (zminimalizować rozmiar), /O2 (zmaksymalizować szybkość), /Ox (Pełna optymalizacja) lub opcję kompilatora optymalizacji /Og (globalnego optymalizacje) jest włączone.
  • Opcja kompilatora /GL (cały Program Optimization) jest wyłączona.

Rozwiązanie

Informacje o poprawce

Obsługiwana poprawka jest teraz udostępniana przez firmę Microsoft. Jednak jest przeznaczona do usunięcia tylko problemu w tym artykule. Zastosować go tylko w systemach, w których występuje ten problem.

Aby rozwiązać ten problem, skontaktuj się z biurem obsługi klienta Microsoft w celu uzyskania poprawki. Aby uzyskać pełną listę numerów telefonów pomocy technicznej firmy Microsoft oraz informacje o kosztach odwiedź następujące witryny firmy Microsoft:
http://support.microsoft.com/contactus/?ws=support
Uwaga W wyjątkowych przypadkach opłaty, które są zwykle naliczane za telefoniczną pomoc techniczną mogą zostać anulowane, jeśli pracownik profesjonalnego wsparcia firmy Microsoft stwierdzi, że określona aktualizacja może rozwiązać problem. Koszty obsługi zwykłe zastosuje się do dodatkowych pytań i problemów, które nie kwalifikują się do określonej aktualizacji.

Wymagania wstępne

Aby zastosować tę poprawkę, musisz mieć zainstalowany program Visual Studio 2010 z dodatkiem Service Pack 1 (SP1).

Wymaganie dotyczące ponownego uruchomienia

Nie masz ponowne uruchomienie komputera po zastosowaniu tej poprawki, jeśli nie są używane pliki podlegające usterce. Zaleca się zamknięcie składniki związane z programu Visual Studio 2010, przed zastosowaniem tej poprawki.

Informacje dotyczące plików poprawki

Wersja globalna tej poprawki ma atrybuty plików (lub nowsze) wymieniono w poniższej tabeli. Daty i godziny odpowiadające tym plikom są wymienione w formacie uniwersalnego czasu koordynowanego (UTC, Coordinated Universal Time). Podczas przeglądania informacji o pliku, jest konwertowany na czas lokalny. Aby zobaczyć różnicę między czasem UTC i czasem lokalnym, należy użyć Strefa czasowa Karta w Data i godzina element w Panelu sterowania.
Zwiń ten obrazekRozwiń ten obrazek
assets folding start collapsed
Zwiń tę tabelęRozwiń tę tabelę
Nazwa plikuWersja plikuRozmiar plikuDataGodzinaPlatformaŚcieżka
C2.dll16.0.40219.4442,606,71211-Mar-201319:24x86Microsoft Visual Studio 10.0\VC\bin
C2.dll16.0.40219.4442,493,56012-Mar-201316:48x86Microsoft Visual Studio 10.0\VC\bin\x86_amd64
C2.dll16.0.40219.4442,593,92812-Mar-201316:48x86Microsoft 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
Zwiń ten obrazekRozwiń ten obrazek
assets folding end collapsed

Więcej informacji

Aby odtworzyć ten problem, należy utworzyć plik źródłowy C lub C++, która zawiera poniższy kod:

#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);
}


Następnie otwórz wiersz polecenia narzędzi Visual Studio x 64 granic lub wiersza polecenia Win64 Visual Studio x 64 w Visual Studio 2010 i skompilować plik źródłowy za pomocą następującego polecenia:
cl /Ob1 /O2 'Ścieżka pliku źródłowego'

Oczekiwany wynik wynosi 1. Jednakże rzeczywisty wynik jest równy 0.

Stan

Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft, które są wymienione w sekcji "Informacje zawarte w tym artykule dotyczą".

Materiały referencyjne

Aby uzyskać więcej informacji dotyczących opcji kompilatora /Ob przejdź do następującej witryny sieci Web MSDN:
Ogólne informacje dotyczące opcji kompilatora /Ob
Aby uzyskać więcej informacji dotyczących opcji kompilatora /GL przejdź do następującej witryny sieci Web MSDN:
Ogólne informacje dotyczące opcji kompilatora /GL
Aby uzyskać więcej informacji o opcjach optymalizacji /O przejdź do następującej witryny sieci Web MSDN:
Ogólne informacje o opcjach /O (Optymalizacja kodu)

Właściwości

Numer ID artykułu: 2802711 - Ostatnia weryfikacja: 29 marca 2013 - Weryfikacja: 3.0
Informacje zawarte w tym artykule dotyczą:
  • Microsoft Visual Studio 2010 Service Pack 1
  • Microsoft Visual Studio 2010 Ultimate
  • Microsoft Visual Studio 2010 Professional
  • Microsoft Visual Studio 2010 Premium with MSDN
Słowa kluczowe: 
kbqfe kbhotfixserver kbfix kbsurveynew kbexpertiseadvanced kbmt KB2802711 KbMtpl
Przetłumaczone maszynowo
WAŻNE: Ten artykuł nie został przetłumaczony przez człowieka, tylko przez oprogramowanie do tłumaczenia maszynowego firmy Microsoft. Firma Microsoft oferuje zarówno artykuły tłumaczone przez ludzi, jak i artykuły tłumaczone maszynowo, dzięki czemu każdy użytkownik może uzyskać dostęp do całej zawartości bazy wiedzy Knowledge Base we własnym języku. Prosimy jednak pamiętać, że artykuły przetłumaczone maszynowo nie zawsze są doskonałe. Mogą zawierać błędy słownictwa, składni i gramatyki, przypominające błędy robione przez osoby, dla których język użytkownika nie jest językiem ojczystym. Firma Microsoft nie odpowiada za wszelkie nieścisłości, błędy lub szkody spowodowane nieprawidłowym tłumaczeniem zawartości oraz za wykorzystanie tej zawartości przez klientów. Oprogramowanie do tłumaczenia maszynowego jest często aktualizowane przez firmę Microsoft.
Anglojęzyczna wersja tego artykułu to: 2802711

Przekaż opinię

 

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