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 :Remarque 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 fichierVersion de fichierTaille du fichierDateHeurePlateforme
C2.dll14.0.50727.30802,273,28019-Nov-200818:52x86
C2.dll14.0.50727.30807,192,57619-Nov-200823:25IA-64
C2.dll14.0.50727.30802,490,36819-Nov-200823:26x86
C2.dll14.0.50727.30803,600,38419-Nov-200823:33x64
C2.dll14.0.50727.30802,203,64819-Nov-200823:33x86

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