CORRECTIF : Lorsque vous exécutez une application qui est construite à l’aide de l’option de compilateur /Ot dans Microsoft Visual Studio 2005 Service Pack 1 (SP1), certaines instructions « if » peuvent s’exécuter incorrectement

Symptômes

Vous utilisez l’option de compilateur /Ot (favoriser la vitesse du Code) lorsque vous générez une application qui est configurée sur le x64 plate-forme dans Microsoft Visual Studio 2005 Service Pack 1 (SP1). Lorsque vous exécutez l’application, certaines instructions if peuvent s’exécuter incorrectement. Par conséquent, les résultats sont imprévisibles. Par exemple, les instructions if peuvent être ignorées dans le code généré de l’application.

Ce problème ne se produit que dans le scénario suivant.

  • Il existe certaines instructions MOV entre deux opérations de comparaison.

  • Ces comparent les opérations utiliser les mêmes opérandes.

  • Les valeurs des opérandes sont modifiées par les instructions MOV.

Dans ce scénario, les instructions if dans la deuxième opération de comparaison peuvent être ignorées.

Remarques

  • Ce problème peut également se produire lorsque vous utilisez l’option/O2 ou l’option /Ox pour générer l’application.

  • Ce problème ne se produit pas sur les x86 plate-forme.

Cause

Ce problème se produit car l’optimiseur de compilateur suppose à tort que l’indicateur est défini par l’opération XOR peut être utilisé sans y inclure une opération de comparaison.

Résolution

Informations sur le correctif

Un correctif pris en charge est disponible auprès de Microsoft. Toutefois, ce correctif vise à corriger uniquement le problème décrit dans cet article. Appliquez ce correctif uniquement aux systèmes qui rencontrent le problème décrit dans cet article. Ce correctif va peut-être subir des tests supplémentaires. Par conséquent, si vous n'êtes pas sérieusement concerné par ce problème, nous vous recommandons d'attendre la prochaine mise à jour logicielle qui contiendra ce correctif.

Si le correctif est disponible pour le téléchargement, il existe une section « Téléchargement de correctif logiciel disponible » au début de cet article de la Base de connaissances. Si cette section n'apparaît pas, contactez le Service clientèle et Support de Microsoft pour obtenir le correctif.

Remarque Si des problèmes supplémentaires se produisent ou si des procédures de dépannage sont nécessaires, vous devrez peut-être formuler une demande de service distincte. Les coûts habituels du support technique s'appliqueront aux questions et problèmes qui ne relèvent pas de ce correctif logiciel. Pour une liste complète des numéros de téléphone du Service clientèle et support technique de Microsoft ou pour créer une demande de service distincte, visitez le site Web de Microsoft à l'adresse suivante :

http://support.microsoft.com/contactus/?ws=supportRemarque Le formulaire « Téléchargement de correctif logiciel disponible » affiche les langues pour lesquelles le correctif est disponible. Si vous ne voyez pas votre langue, c'est parce qu'il n'y a pas de correctif disponible pour cette langue.

Conditions préalables

Vous devez disposer du Visual Studio 2005 Service Pack 1 pour appliquer ce correctif.

Nécessite un redémarrage

Vous n’êtes pas obligé de redémarrer l’ordinateur après avoir appliqué ce correctif.

Informations de remplacement du correctif

Ce correctif ne remplace aucun autre correctif.

Informations sur les fichiers

La version anglaise de ce correctif dispose des attributs de fichier (ou version ultérieure) répertoriés dans le tableau suivant. Les dates et heures de ces fichiers sont répertoriées en temps universel coordonné (UTC). Lorsque vous affichez les informations de fichier, elles sont converties en heure locale. Pour trouver la différence entre l’UTC et l’heure locale, utilisez l’onglet fuseau horaire dans l’élément de Date et heure dans le panneau de configuration.

Nom de fichier

Version de fichier

Taille du fichier

Date

Heure

Plateforme

C2.dll

14.0.50727.3080

2,273,280

19-Nov-2008

18:52

x86

C2.dll

14.0.50727.3080

7,192,576

19-Nov-2008

23:25

IA-64

C2.dll

14.0.50727.3080

2,490,368

19-Nov-2008

23:26

x86

C2.dll

14.0.50727.3080

3,600,384

19-Nov-2008

23:33

x64

C2.dll

14.0.50727.3080

2,203,648

19-Nov-2008

23:33

x86

Solution de contournement

Pour contourner ce problème, appliquez l’une des méthodes suivantes :

  • Utilisez le mot clé volatile lorsque vous déclarez les variables qui sont utilisées dans les instructions if .

  • Désactiver l’option d’optimisation de la vitesse. Par exemple, remplacez l’option /Ot avec l’option /Os (favoriser la taille du Code) . Ou bien, utilisez l’option/O1 au lieu de l’option/O2 ou l’option /Ox .

  • Ajouter une ligne de code avant que les instructions if dans la seconde opération de comparaison. Par exemple, ajoutez une instruction printf .

État

Microsoft a confirmé l'existence de ce problème dans les produits Microsoft répertoriés dans la section « S'applique à ».

Plus d'informations

Pour plus d’informations sur le code d’un ou de plusieurs instructions peuvent s’exécuter incorrectement lorsque vous utilisez la fonctionnalité d’optimisation de code dans Visual Studio 2005, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :

925792 une ou plusieurs instructions de code peuvent s’exécuter incorrectement lorsque vous utilisez la fonctionnalité d’optimisation de code dans Visual Studio 2005

Pour plus d'informations sur la terminologie de mise à jour logicielle, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :

Description 824684 terminologie standard utilisée pour décrire les mises à jour logicielles de Microsoft

Besoin d’aide ?

Développez vos compétences
Découvrez des formations
Accédez aux nouvelles fonctionnalités en avant-première
Rejoindre Microsoft Insider

Ces informations vous ont-elles été utiles ?

Nous vous remercions pour vos commentaires.

Merci pour vos commentaires. Il serait vraisemblablement utile pour vous de contacter l’un de nos agents du support Office.

×