FIX: Kode mesin yang salah yang dihasilkan untuk pernyataan "beralih" dalam Visual C++ 2010 x 64 kompiler

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 2802711 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

Gejala

Asumsikan bahwa Anda mengkompilasi C atau C++ file kode sumber ke file biner yang berbasis x 64 dengan menggunakan Visual C/c ++ compiler (Cl.exe) di Microsoft Visual Studio 2010. File kode sumber berisi fungsi yang menggunakan pernyataan beralih . Dalam situasi ini, kode mesin salah mungkin dihasilkan untuk beralih pernyataan jika kondisi berikut ini benar:
  • /Ob1 (Only_inline) kompiler pilihan diaktifkan.
  • /O1 (mengurangi ukuran), /O2 (memaksimalkan kecepatan), /Ox (optimasi penuh), atau /Og (Global optimasi) optimasi compiler pilihan diaktifkan.
  • /GL (seluruh Program Optimization) kompiler opsi ini dinonaktifkan.

Pemecahan masalah

Informasi hotfix

Sekarang tersedia hotfix yang didukung dari Microsoft. Namun, hal ini dimaksudkan untuk memperbaiki hanya masalah dijelaskan artikel ini. Gunakan hanya pada sistem yang mengalami masalah khusus ini.

Untuk mengatasi masalah ini, hubungi layanan dukungan pelanggan Microsoft untuk mendapatkan perbaikan terbaru. Untuk daftar lengkap nomor telepon layanan dukungan pelanggan Microsoft dan informasi mengenai biaya dukungan, kunjungi website Microsoft berikut:
http://support.Microsoft.com/contactus/?WS=support
Catatan Dalam kasus tertentu, biaya yang biasanya diadakan untuk panggilan dukungan mungkin dibatalkan apabila teknisi dukungan Microsoft menentukan bahwa pembaruan khusus akan memecahkan masalah Anda. Biaya dukungan biasa akan berlaku untuk pertanyaan dan masalah yang tidak termasuk pada pembaruan tertentu yang dimaksud dukungan tambahan.

Prasyarat

Untuk menerapkan perbaikan terbaru ini, Anda harus memiliki Visual Studio 2010 Service Pack 1 (SP1) diinstal.

Kebutuhan restart

Anda tidak harus me-restart komputer setelah Anda menerapkan perbaikan terbaru ini jika file yang terkena tidak digunakan. Kami merekomendasikan bahwa Anda menutup komponen Visual Studio 2010-terkait sebelum Anda menerapkan perbaikan terbaru ini.

Informasi file

Versi global dari hotfix ini memiliki atribut berkas (atau atribut berkas yang lebih baru) yang didaftar di dalam Daftar Tabel berikut. Tanggal dan waktu untuk berkas-berkas ini tercantum dalam Coordinated Universal Time (UTC). Ketika Anda melihat informasi berkas, waktunya akan diubah ke waktu lokal. Untuk menemukan perbedaan waktu UTC dan waktu lokal, gunakan zona waktu tab di Tanggal dan waktu item dalam Control Panel.
Perkecil gambar iniPerbesar gambar ini
assets folding start collapsed
Perkecil tabel iniPerbesar tabel ini
Nama fileVersi fileUkuran fileTanggalWaktuPlatformJalan
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
Perkecil gambar iniPerbesar gambar ini
assets folding end collapsed

Informasi lebih lanjut

Untuk mereproduksi masalah ini, buat C atau C++ sumber file yang berisi kode berikut:

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


Kemudian, buka Prompt Perintah Visual Studio x 64 Win64 atau x 64 menyeberang alat Prompt Perintah Visual Studio di Visual Studio 2010, dan mengkompilasi berkas sumber dengan menggunakan perintah berikut:
cl /Ob1 /O2 'Path berkas sumber'

Hasil yang diharapkan adalah 1. Namun, hasil yang sebenarnya adalah 0.

Status

Microsoft telah mengkonfirmasi bahwa ini merupakan masalah di dalam produk Microsoft sebagaimana didaftar di dalam bagian "Applies to".

Referensi

Untuk informasi lebih lanjut tentang opsi compiler /Ob , kunjungi website MSDN berikut:
Informasi umum tentang opsi kompiler /Ob
Untuk informasi lebih lanjut tentang opsi compiler /GL , kunjungi website MSDN berikut:
Informasi umum tentang opsi kompiler /GL
Untuk informasi lebih lanjut tentang opsi optimasi /O , kunjungi website MSDN berikut:
Informasi umum tentang pilihan /O (mengoptimalkan kode)

Properti

ID Artikel: 2802711 - Kajian Terakhir: 29 Maret 2013 - Revisi: 3.0
Berlaku bagi:
  • Microsoft Visual Studio 2010 Service Pack 1
  • Microsoft Visual Studio 2010 Ultimate
  • Microsoft Visual Studio 2010 Professional
  • Microsoft Visual Studio 2010 Premium
Kata kunci: 
kbqfe kbhotfixserver kbfix kbsurveynew kbexpertiseadvanced kbmt KB2802711 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini: 2802711

Berikan Masukan

 

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