Korriger: Feil maskin-kode genereres for en "switch"-setning i Visual C++-2010 x 64 kompilator

Artikkeloversettelser Artikkeloversettelser
Artikkel-ID: 2802711 - Vis produkter som denne artikkelen gjelder for.
Vis alt | Skjul alt

På denne siden

Symptom

Anta at du kompilere en C eller C++ kilde koden fil til en x 64-baserte binærfil ved hjelp av Visual C/C++ kompilatoren (Cl.exe) i Microsoft Visual Studio 2010. Kildekodefilen inneholder en funksjon som bruker en bytte setning. I så fall genereres feil maskin-kode for bytte -setningen hvis følgende betingelser er oppfylt:
  • Alternativet /Ob1 (Only_inline)-kompilator er aktivert.
  • Den /O1 (redusere størrelse), /O2 (Maksimer hastighet), /Ox (Full optimalisering) eller /Og (Global optimaliseringer) optimaliseringsalternativ kompilatoren er aktivert.
  • Alternativet for /GL (hele programmet optimalisering)-kompilatoren er deaktivert.

Løsning

Informasjon om hurtigreparasjon

En støttet hurtigreparasjon er nå tilgjengelig fra Microsoft. Det er imidlertid ment å løse problemet som beskrives i denne artikkelen. Bruk den bare på systemer som har dette bestemte problemet.

Hvis du vil løse dette problemet, kontakter du Microsoft kundestøtte for å få hurtigreparasjonen. For en fullstendig liste over telefonnumre for Microsofts kundestøttetjenester og informasjon om støttekostnader, kan du gå til følgende Microsoft-webområde:
http://support.Microsoft.com/contactus/?ws=support
Obs! I noen tilfeller kan avgifter som vanligvis påløper for oppringinger til kundestøtte avbrutt hvis en Microsoft-tekniker avgjør at en bestemt oppdatering løser problemet. Vanlige kundestøttekostnader gjelder for ytterligere kundestøttespørsmål og problemer som ikke dekkes av den gjeldende oppdateringen.

Forutsetninger

Hvis du vil bruke denne hurtigreparasjonen, må du ha Visual Studio 2010 Service Pack 1 (SP1) installert.

Krav om omstart

Du har ikke datamaskinen på nytt etter at du har installert denne hurtigreparasjonen hvis de berørte filene ikke er i bruk. Vi anbefaler at du lukker Visual Studio 2010-relaterte komponenter før du bruker denne hurtigreparasjonen.

Filinformasjon

Den globale versjonen av denne hurtigreparasjonen har filattributtene (eller senere filattributter) som er oppført i tabellen nedenfor. Datoene og klokkeslettene for disse filene er oppført i Coordinated Universal Time (UTC). Når du viser filinformasjonen, konverteres den til lokal tid. Hvis du vil finne forskjellen mellom UTC og lokal tid, bruker den Tidssone kategorien i den Dato og klokkeslett elementet i Kontrollpanel.
Skjul dette bildetVis dette bildet
assets folding start collapsed
Skjul denne tabellenVis denne tabellen
FilnavnFilversjonFilstørrelseDatoTidPlattformBane
C2.dll16.0.40219.4442,606,71211-Mar-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:48x 64Microsoft Visual Studio-10.0\VC\bin\amd64
Skjul dette bildetVis dette bildet
assets folding end collapsed

Mer informasjon

Hvis du vil gjenskape dette problemet, oppretter du en C eller C++ kilde-fil som inneholder følgende kode:

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


Deretter åpne ledetekst for Visual Studio x 64 på tvers av verktøy eller Visual Studio x 64 Win64 ledeteksten i Visual Studio 2010 og kompilere kildefilen ved hjelp av følgende kommando:
kl /Ob1 /O2 'Kilde-filbane'

Det forventede resultatet er 1. Men er faktisk resultatet 0.

Status

Microsoft har bekreftet at dette er et problem i Microsoft-produktene som er oppført i delen "Gjelder for".

Referanser

Hvis du vil ha mer informasjon om alternativet /Ob kompilatoren, kan du gå til følgende MSDN-webområde:
Generell informasjon om alternativet /Ob kompilator
Hvis du vil ha mer informasjon om alternativet /GL kompilatoren, kan du gå til følgende MSDN-webområde:
Generell informasjon om alternativet /GL kompilator
Hvis du vil ha mer informasjon om alternativer for optimalisering av /O , kan du gå til følgende MSDN-webområde:
Generell informasjon om alternativer for /O (optimalisere koden)

Egenskaper

Artikkel-ID: 2802711 - Forrige gjennomgang: 29. mars 2013 - Gjennomgang: 3.0
Informasjonen i denne artikkelen gjelder:
  • Microsoft Visual Studio 2010 Service Pack 1
  • Microsoft Visual Studio 2010 Ultimate
  • Microsoft Visual Studio 2010 Professional
  • Microsoft Visual Studio 2010 Premium with MSDN
Nøkkelord: 
kbqfe kbhotfixserver kbfix kbsurveynew kbexpertiseadvanced kbmt KB2802711 KbMtno
Maskinoversatt
Viktig: Denne artikkelen har blitt maskinoversatt, og dermed ikke oversatt av en person. For at alle artikler i vår database skal være oversatt til ditt språk, vil Microsoft benytte både personoversatte og maskinoversatte artikler. Det er viktig å merke seg at en maskinoversatt artikkel ikke alltid er perfekt. Det kan forekomme stave, strukturelle eller grammatiske feil. Microsoft er ikke ansvarlig for unøyaktigheter, feil eller skade ved bruk av innhold i artikkel som måtte forårsakes av feiloversettelse. Microsoft vil jevnlig oppdatere sitt maskinoversettelses programvare.
Den engelske versjonen av denne artikkelen er den følgende: 2802711

Gi tilbakemelding

 

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