Update: Falsche Maschinencode wird für eine "Switch"-Anweisung in Visual C++ 2010 x 64-Compiler generiert.

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 2802711 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Genommen Sie an, eine C- oder C++ Quellcodedatei in einer X 64-basierten Binärdatei mithilfe von Visual C/C++-Compiler (Cl.exe) in Microsoft Visual Studio 2010 kompilieren. Die Quellcodedatei enthält eine Funktion, die eine switch -Anweisung verwendet. In diesem Fall möglicherweise falsche Computercode für die switch -Anweisung generiert werden, wenn folgenden Bedingungen erfüllt sind:
  • Die Inlinefunktionserweiterung1 (Only_inline)-Compiler aktiviert ist.
  • Die o1/O1 (Größe minimieren), /o2/O2 (Geschwindigkeit maximieren), ox/Ox (Full Optimization) oder og/Og (globale Optimierungen) Optimierung (Compileroption) aktiviert ist.
  • Die Compileroption gl/GL (Whole Program Optimization) ist deaktiviert.

Lösung

Hotfix-Informationen

Ein unterstützter Hotfix ist jetzt von Microsoft erhältlich. Es soll jedoch nur das Problem zu beheben, das in diesem Artikel beschrieben. Wenden Sie es nur auf Systemen, bei die dieses spezielle Problem auftritt.

Um dieses Problem zu beheben, wenden Sie sich an Microsoft Support Services, um den Hotfix zu erhalten. Eine vollständige Liste der Microsoft Product Support Services Telefonnummern und Informationen über Supportkosten finden Sie auf die folgende Microsoft-Website:
http://support.Microsoft.com/contactus/?WS=Support
Hinweis In besonderen Fällen können Gebühren, die normalerweise für Support-Anrufe anfallen abgebrochen werden, wenn ein Microsoft-Supportmitarbeiter feststellt, dass ein bestimmtes Update Ihr Problem beheben kann. Die normalen Supportkosten gelten für zusätzliche Supportfragen und Probleme, die für das betreffende Update nicht qualifizieren.

Erforderliche Komponenten

Um diesen Hotfix anwenden zu können, müssen Sie Visual Studio 2010 Service Pack 1 (SP1) installiert haben.

Ist ein Neustart erforderlich?

Sie müssen keinen Neustart des Computers, nachdem Sie diesen Hotfix anwenden, wenn die betroffenen Dateien nicht verwendet werden. Es wird empfohlen, dass Sie Visual Studio 2010-bezogene Komponenten schließen, bevor Sie diesen Hotfix anwenden.

Dateiinformationen

Die internationale Version dieses Hotfix besitzt die Dateiattribute (oder höher), die in der folgenden Tabelle aufgelistet sind. Die Datums- und Uhrzeitangaben für diese Dateien werden in Coordinated Universal Time (UTC) aufgeführt. Wenn Sie die Dateiinformationen anzeigen, wird es in die lokale Ortszeit konvertiert. Den Unterschied zwischen UTC- und Ortszeit verwenden, um die Zeitzone Registerkarte der Datum und Uhrzeit Element in der Systemsteuerung.
Bild minimierenBild vergrößern
assets folding start collapsed
Tabelle minimierenTabelle vergrößern
DateinameDateiversionDateigrößeDatumUhrzeitPlattformPfad
C2.dll16.0.40219.4442,606,71211-Mär-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:48x64Microsoft Visual Studio 10.0\VC\bin\amd64
Bild minimierenBild vergrößern
assets folding end collapsed

Weitere Informationen

Um dieses Problem zu reproduzieren, erstellen Sie eine C- oder C++-Quelldatei mit den folgenden Code:

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


Öffnen Sie dann Visual Studio X 64 Cross Tools-Eingabeaufforderung oder Visual Studio X 64 Win64-Eingabeaufforderung in Visual Studio 2010, und kompilieren Sie die Quelldatei mithilfe des folgenden Befehls:
cl/Ob1/O2 'Source File Path'

Das erwartete Ergebnis ist 1. Das tatsächliche Ergebnis ist jedoch 0.

Status

Microsoft hat bestätigt, dass dieses Problem auf die im Abschnitt "Gilt für" aufgeführten Microsoft-Produkten zutrifft.

Informationsquellen

Weitere Informationen über die Compileroption Inlinefunktionserweiterung finden Sie auf der folgenden MSDN-Website:
Allgemeine Informationen über die Inlinefunktionserweiterung (Compileroption)
Weitere Informationen über die Compileroption/GL finden Sie auf der folgenden MSDN-Website:
Allgemeine Informationen über die Compileroption/GL
Weitere Informationen über die Optionen für die/o -Optimierung finden Sie auf der folgenden MSDN-Website:
Allgemeine Informationen zu/o-Optionen (Code optimieren)

Eigenschaften

Artikel-ID: 2802711 - Geändert am: Freitag, 29. März 2013 - Version: 3.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual Studio 2010 Service Pack 1
  • Microsoft Visual Studio 2010 Ultimate
  • Microsoft Visual Studio 2010 Professional
  • Microsoft Visual Studio 2010 Premium with MSDN
Keywords: 
kbqfe kbHotfixServer kbfix kbsurveynew kbexpertiseadvanced kbmt KB2802711 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 2802711
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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