Anda sedang offline saat ini, menunggu internet Anda untuk menyambung kembali

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

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
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: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.
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

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: Untuk informasi lebih lanjut tentang opsi compiler /GL , kunjungi website MSDN berikut: Untuk informasi lebih lanjut tentang opsi optimasi /O , kunjungi website MSDN berikut:

Peringatan: Artikel ini telah diterjemahkan secara otomatis

Properti

ID Artikel: 2802711 - Tinjauan Terakhir: 03/29/2013 08:50:00 - Revisi: 3.0

Microsoft Visual Studio 2010 Service Pack 1, Microsoft Visual Studio 2010 Ultimate, Microsoft Visual Studio 2010 Professional, Microsoft Visual Studio 2010 Premium

  • kbqfe kbhotfixserver kbfix kbsurveynew kbexpertiseadvanced kbmt KB2802711 KbMtid
Tanggapan