FIX: Неправильний машинний код генерується для "перемикач" заяву в Visual C++ 2010 х 64 компілятор

Переклади статей Переклади статей
Номер статті: 2802711 - Показ продуктів, яких стосується ця стаття.
Розгорнути все | Згорнути все

На цій сторінці

Ознаки

Припустимо, скомпілювати C чи C++ вихідний код файлу для x64-двійковий файл за допомогою компілятора Visual C/c + + (Cl.exe) у Microsoft Visual Studio 2010. Вихідний код файл містить функцію, яка використовує перемикання заяву. У цій ситуації неправильні машинний код може створювати для перемикання заяву наступних умов.:
  • Увімкнено параметр компілятор /Ob1 (Only_inline).
  • /O1 (зменшити розмір), /O2 (максимальної швидкості), /Ox (повної оптимізації) або /Og (Глобальна оптимізацій) оптимізації компіляторів параметр увімкнуто.
  • /GL (вся програма оптимізації) компілятор опція відключена.

Розв'язанн

Відомості про виправлення

Виправлення доступне від Microsoft. Тим не менш, вона призначена лише для вирішення проблеми, описані. Застосовувати його лише до системний інтегратор, у яких виникає вказана проблема.

Щоб вирішити цю проблему, зверніться до представник служби підтримки клієнтів корпорації Майкрософт для отримання виправлення. Повний список номерів телефонів представник служби підтримки клієнтів користувачів Майкрософт і відомості про вартість обслуговування відвідайте веб-сайт корпорації Майкрософт:
http://support.Microsoft.com/contactus/?ws=support
Примітка. В окремих випадках оплату за представник служби підтримки клієнтів може бути скасовано якщо корпорації підтримки Майкрософт визначить, що телефонів служби. Витрати на звичайні підтримки буде застосовуватися до додаткові застосунок-служба технічної підтримки і питання, які не можуть претендувати на оновленням.

Необхідні умови

Щоб застосувати це виправлення, ви повинні мати Visual Studio 2010 інсталювати пакет оновлень 1 (SP1).

Необхідність перезавантаження

Вам не доведеться перезавантажити комп’ютер-зразок після інсталяції цього виправлення, якщо їх не використовуються. Рекомендовано закрити Visual Studio 2010 компонентів, перш ніж ви застосувати це виправлення.

Відомості про файли

Глобальна версія цього виправлення має атрибути файлу (або новіші атрибути файлів) подані в нижченаведеній таблиці. Значення дати й часу для цих файлів перераховані в всесвітній координований Вільний час (UTC). Під Вільний час перегляду відомостей про файл, перераховуються в місцевий Вільний час. Щоб визначити різницю між UTC і місцевим часом, використовувати в часовий пояс у вкладці на Дата і Вільний час елемент панелі керування.
Згорнути це зображенняРозгорнути це зображення
assets folding start collapsed
Згорнути цю таблицюРозгорнути цю таблицю
Ім'я файлуВерсія файлуРозмір файлуДатаВільний часПлатформаШлях
C2.dll16.0.40219.4442,606,71211 Березня 201319:24на базі x86-процесорівMicrosoft Visual Studio 10.0\VC\bin
C2.dll16.0.40219.4442,493,56012 Березня 201316:48на базі x86-процесорівMicrosoft Visual Studio 10.0\VC\bin\x86_amd64
C2.dll16.0.40219.4442,593,92812 Березня 201316:48на базі x86-процесорівMicrosoft Visual Studio 10.0\VC\bin\x86_ia64
C2.dll16.0.40219.4442,960,50412 Березня 201316:48x64Microsoft Visual Studio 10.0\VC\bin\amd64
Згорнути це зображенняРозгорнути це зображення
assets folding end collapsed

Додаткові відомості

Щоб відтворити цю проблему, створіть C чи C++ вихідний файл, який містить такий код:

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


Потім відкрити Visual Studio 64-розрядної хрест інструменти командний рядок або Win64 Visual Studio 64-розрядної командний рядок в Visual Studio 2010 і скомпілювати вихідний файл, використовуючи наступні команди:
cl /Ob1 /O2 'Шлях до файлу'

Очікуваний результат- 1. Однак, фактичний результат дорівнює 0.

Стан

корпорація Майкрософт підтвердила існування цієї неполадки у продуктах Майкрософт, перелічених у розділі "Застосовується до".

Посилання

Щоб отримати додаткові відомості про параметр компілятор /Ob перейдіть до наступного веб-сайт MSDN:
Загальні відомості про параметр компілятор /Ob
Щоб отримати додаткові відомості про параметр компілятор /GL перейдіть до наступного веб-сайт MSDN:
Загальні відомості про параметр компілятор /GL
Щоб отримати додаткові відомості про параметри оптимізації /O перейдіть до наступного веб-сайт MSDN:
Загальні відомості про параметри /O (оптимізації коду)

Властивості

Номер статті: 2802711 - Востаннє переглянуто: 29 березня 2013 р. - Редакція: 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 KbMtuk
Машинний переклад
УВАГА! Цю статтю переклала програма машинного перекладу Microsoft, а не людина. Корпорація Microsoft пропонує вам як машинні переклади, так і переклади фахівців, щоб Ви мали доступ до всіх статей бази знань рідною мовою. Проте стаття, яку переклав комп’ютер, не завжди бездоганна. Вона може містити лексичні, синтаксичні або граматичні помилки. Так само помиляється іноземець, спілкуючись вашою рідною мовою. Корпорація Microsoft не несе відповідальність за жодні неточності, помилки або шкоду, завдану неправильним перекладом змісту або його використанням з боку користувачів. Крім того, корпорація Microsoft часто оновлює програму машинного перекладу.
Клацніть тут, щоб переглянути цю статтю англійською мовою: 2802711

Надіслати відгук

 

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