FIX: Onjuiste machine-code wordt gegenereerd voor een instructie 'switch' in de Visual C++ 2010 x 64-compiler

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 2802711 - Bekijk de producten waarop dit artikel van toepassing is.
Alles uitklappen | Alles samenvouwen

Op deze pagina

Symptomen

Stel dat u een C- of C++-code bronbestand naar een 64-bits binaire bestand compileren met behulp van de Visual C/C++ compiler (Cl.exe) in Microsoft Visual Studio 2010. Het bestand met broncode bevat een functie die gebruikmaakt van een instructie overschakelen . In dit geval onjuiste machine-code, worden gegenereerd voor de instructie overschakelen als aan de volgende voorwaarden wordt voldaan:
  • De compileroptie /Ob1 (Only_inline) is ingeschakeld.
  • De /O1 (minimaliseren grootte), /O2 (maximale snelheid), /Ox (volledige Optimization) of /Og (globale optimalisatie) optimalisatie compileroptie is ingeschakeld.
  • De compileroptie- /GL (hele programma Optimization) is uitgeschakeld.

Oplossing

Informatie over hotfixes

Een ondersteunde hotfix is nu beschikbaar bij Microsoft. Het is echter bedoeld om alleen het probleem dat in dit artikel wordt beschreven. Pas deze alleen toe op systemen waarop dit specifieke probleem zich voordoet.

U kunt dit probleem oplossen door contact op te nemen met Microsoft Customer Support Services om de hotfix te verkrijgen. Een volledige lijst met telefoonnummers van Microsoft Customer Support Services en informatie over kosten van ondersteuning vindt u op de volgende Microsoft-website:
http://support.Microsoft.com/contactus/?ws=support
Opmerking In speciale gevallen kunnen kosten die normaal aan ondersteuningsoproepen verbonden zijn, worden geannuleerd als een medewerker van Microsoft productondersteuning van mening is dat een specifieke update de oplossing van uw probleem is. De normale ondersteuningskosten blijven gelden voor extra ondersteuningsvragen die niet in aanmerking voor de specifieke update in kwestie komen.

Vereisten

Deze hotfix moet u Visual Studio 2010 Service Pack 1 (SP1) geïnstalleerd hebben.

Opnieuw opstarten

U beschikt niet over de computer opnieuw opstarten nadat u deze hotfix hebt toegepast, als de bestanden niet worden gebruikt. Wij raden aan onderdelen van Visual Studio 2010 te sluiten voordat u deze hotfix toepast.

Informatie over bestanden

De algemene versie van deze hotfix heeft de bestandskenmerken (of recentere bestandskenmerken) die in de volgende tabel worden weergegeven. De datums en tijden voor deze bestanden worden weergegeven in Coordinated Universal Time (UTC). Wanneer u de bestandsinformatie weergeeft, wordt deze naar lokale tijd geconverteerd. Gebruiken om het verschil tussen UTC en lokale tijd, de Tijdzone tabblad de Datum en tijd een item in het Configuratiescherm.
Deze afbeelding samenvouwenDeze afbeelding uitklappen
assets folding start collapsed
Deze tabel samenvouwenDeze tabel uitklappen
BestandsnaamBestandsversieBestandsgrootteDatumTijdPlatformPad
C2.dll16.0.40219.4442,606,71211-Mrt-201319:24x 86Microsoft Visual Studio 10.0\VC\bin
C2.dll16.0.40219.4442,493,56012-Mrt-201316:48x 86Microsoft Visual Studio 10.0\VC\bin\x86_amd64
C2.dll16.0.40219.4442,593,92812-Mrt-201316:48x 86Microsoft Visual Studio 10.0\VC\bin\x86_ia64
C2.dll16.0.40219.4442,960,50412-Mrt-201316:48x64Microsoft Visual Studio 10.0\VC\bin\amd64
Deze afbeelding samenvouwenDeze afbeelding uitklappen
assets folding end collapsed

Meer informatie

Om dit probleem, maakt u een bronbestand C of C++ met de volgende 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);
}


Vervolgens opdrachtprompt Visual Studio x 64 Cross-hulpprogramma's of Visual Studio x 64 Win64-opdrachtprompt openen in Visual Studio 2010 en compileert het bronbestand met de volgende opdracht:
cl /Ob1 /O2 'Source File Path'

Het verwachte resultaat is 1. Maar is het werkelijke resultaat 0.

Status

Microsoft heeft bevestigd dat dit een probleem is in de Microsoft-producten die worden vermeld in de sectie 'Van toepassing op'.

Referenties

Ga naar de volgende MSDN-website voor meer informatie over de compileroptie /Ob :
Algemene informatie over de compileroptie /Ob
Ga naar de volgende MSDN-website voor meer informatie over de compileroptie /GL :
Algemene informatie over de compileroptie /GL
Ga naar de volgende MSDN-website voor meer informatie over de optimalisatie /O opties:
Algemene informatie over /O opties (code optimaliseren)

Eigenschappen

Artikel ID: 2802711 - Laatste beoordeling: vrijdag 29 maart 2013 - Wijziging: 3.0
De informatie in dit artikel is van toepassing op:
  • Microsoft Visual Studio 2010 Service Pack 1
  • Microsoft Visual Studio 2010 Ultimate
  • Microsoft Visual Studio 2010 Professional
  • Microsoft Visual Studio 2010 Premium with MSDN
Trefwoorden: 
kbqfe kbhotfixserver kbfix kbsurveynew kbexpertiseadvanced kbmt KB2802711 KbMtnl
Automatisch vertaald artikel
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende: 2802711

Geef ons feedback

 

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