Je bent nu offline; er wordt gewacht tot er weer een internetverbinding is

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

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
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: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.
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

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 : Ga naar de volgende MSDN-website voor meer informatie over de compileroptie /GL : Ga naar de volgende MSDN-website voor meer informatie over de optimalisatie /O opties:

Waarschuwing: dit artikel is automatisch vertaald

Eigenschappen

Artikel-id: 2802711 - Laatst bijgewerkt: 03/29/2013 08:53:00 - Revisie: 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 KbMtnl
Feedback