Masuk dengan Microsoft
Masuk atau buat akun.
Halo,
Pilih akun lain.
Anda memiliki beberapa akun
Pilih akun yang ingin Anda gunakan untuk masuk.

Artikel ini menjelaskan tentang paket perbaikan terbaru untuk Microsoft Visual Studio 2015 pemutakhiran 3. Hotfix ini berisi beberapa perbaikan untuk Visual C++ Pengoptimal dan kode generator (c2.dll). Untuk informasi selengkapnya, lihat bagian "masalah yang diperbaiki dalam hotfix ini".

Pemecahan masalah

Cara mendapatkan perbaikan terbaru ini

Berkas berikut tersedia untuk diunduh dari Pusat Unduhan Microsoft:

Download Download paket hotfix sekarang.

Untuk informasi selengkapnya tentang cara mengunduh file dukungan Microsoft, klik nomor artikel berikut ini untuk melihat artikel di Pangkalan Pengetahuan Microsoft:

119591 cara mendapatkan berkas dukungan Microsoft dari layanan daringMicrosoft telah memindai file ini dari virus. Microsoft menggunakan perangkat lunak pendeteksi virus terbaru telah tersedia pada tanggal berkas diposting. File tersebut disimpan di server aman yang membantu mencegah segala perubahan tidak sah terhadap file.

Prasyarat

Untuk menerapkan hotfix ini, Anda harus memiliki Visual Studio 2015 pemutakhiran 3 yang diinstal.

Persyaratan menghidupkan ulang

Anda mungkin harus memulai ulang komputer setelah menerapkan hotfix ini jika tidak ada item dari Visual Studio sedang digunakan.

Informasi penggantian hotfix

Hotfix ini tidak menggantikan hotfix lainnya.

Masalah yang diperbaiki dalam hotfix ini

Hotfix ini berisi perbaikan untuk masalah berikut ini:

  • Memperbaiki bug di Pengoptimal ketika angkat penyimpanan bersyarat loop-varian luar loop: #include <cstdlib> #include <cassert> struct Foo { int a; int b; }; int main() { Foo foo; foo.b = rand(); int a = rand(); int b = foo.b; for (int i = 0; i < 10; ++i) { int inner_b = b; int inner_a = a; if (inner_b < 0) // This gets incorrect hoisted outside the loop. // A workaround is /d2SSAOptimizer- { inner_a = 0; inner_b = 0; } if (inner_b >= 0) assert(inner_a == a); a += b; } return 0; }

     

  • Untuk memperbaiki bilangan bulat bagi bug di web: #include <stdio.h> volatile int z = 0; int main() { unsigned a, b; __int64 c; a = z; c = a; c = (c == 0) ? 1LL : c; b = (unsigned)((__int64)a * 100 / c); // Division was made unconditional // incorrectly creating a divide by zero. // A workaround is /d2SSAOptimizer- printf("%u\n", b); return 0; }

     

  • Untuk memperbaiki bilangan bulat bagi bug di web: int checkchecksum(int suly, int ell, int utkodert) { int x; ell -= utkodert; ell %= 103; if (suly - 1) utkodert /= (suly - 1); // Division was made unconditional, // incorrectly creating a potential divide by zero // A workaround is /d2SSAOptimizer- return utkodert; }

     

  • Untuk memperbaiki bilangan bulat bagi bug di web: typedef int unsigned uint; volatile uint out_index = 0; bool data[1] = {true}; bool __declspec(noinline) BugSSA(uint index) { uint group = index / 3; if (group == 0) // The division result being compared to zero is replaced // with a range check. We then incorrectly move the division { // to the next use of "group", without accounting for the fact // that "index" has changed. A workaround is /d2SSAOptimizer- return false; } index -= 3; group--; bool ret = data[group]; // crash here out_index = index; out_index = index; return ret; } int main() { volatile uint i = 3; return BugSSA(i); }

     

  • Memperbaiki kerusakan di Pengoptimal untuk pembagian MIN_INT oleh -1: int test_div(bool flag, int dummy) { int result = std::numeric_limits<int>::min(); int other; if (flag) other = -1; else other = dummy - 1 - dummy; result /= other; // We would push the division up into both arms of the // if-then-else. One of those divisions would cause the // optimizer to evaluate MIN_INT/-1.This is a crash, similar // to dividing by zero. A workaround is /d2SSAOptimizer- return result; }

     

  • Memperbaiki overflow memori di web: #include <stdio.h> // This example produced a stack overflow in the optimizer, which was // caused by mutually-recursive analysis functions not properly tracking // the number of times they were invocated. // A workaround is /d2SSAOptimizer- typedef unsigned char byte; typedef unsigned long long int uint64; int main() { const uint64 *sieveData = new uint64[1024]; uint64 bitIndexShift = 0; uint64 curSieveChunk = 0xfafd7bbef7ffffffULL & ~uint64(3); const unsigned int *NumbersCoprimeToModulo = new unsigned int[16]; const unsigned int *PossiblePrimesForModuloPtr = NumbersCoprimeToModulo; while (!curSieveChunk) { curSieveChunk = *(sieveData++); const uint64 NewValues = (16 << 8) | (32 << 24); bitIndexShift = (NewValues >> (bitIndexShift + 8)) & 255; PossiblePrimesForModuloPtr = NumbersCoprimeToModulo + bitIndexShift; } if (PossiblePrimesForModuloPtr - NumbersCoprimeToModulo != 0) { printf("fail"); return 1; } printf("pass"); return 0; }

     

  • Perbaiki untuk pembuatan kode salah ketika menghapus terapung berlebihan titik konversi melibatkan mengubah parameter int32 f64: #include <string> __declspec(noinline) void test(int Val) { double Val2 = Val; std::string Str; printf("%lld\n", __int64(Val2)); // We incorrectly try to read 64 bits of // floating point from the parameter area, // instead of reading 32 bits of integer // and converting it. A workaround is // to throw /d2SSAOptimizer- } int main() { test(6); test(7); return 0; }

     

  • Memperbaiki kerusakan di Pengoptimal ketika membelah aliran grafik node dalam asali pernyataan blok switch, untuk rincian selengkapnya, lihat https://bugs.chromium.org/p/chromium/issues/detail?id=627216#c15.

  • Memperbaiki bug di Pengoptimal loop mana kami melakukan salah kekuatan pengurangan variabel tidak ditandatangani induksi sekunder yang kelipatan variabel induksi utama: #include <assert.h> #include <malloc.h> #include <stdio.h> typedef unsigned int uint; typedef unsigned char byte; /* There is a corner case in the compiler's loop optimizer. The corner case arose if an induction variable (IV) is a multiple of the loop index, and there's a comparison of the IV to an integer that is less than this multiplication factor. A workaround is to use #pragma optimize("", off) / #pragma optimize("", on) around the affected function. */ int main(int argc, char *argv[]) { const uint w = 256; const uint h = 64; const uint w_new = w >> 1; const uint h_new = h >> 1; const byte *const src = (byte *)malloc(w * h); byte *it_out = (byte *)malloc(w_new * h_new); int fail = 0; for (uint y_new = 0; y_new < h_new; ++y_new) { for (uint x_new = 0; x_new < w_new; ++x_new, ++it_out) { uint x = x_new * 2; uint y = y_new * 2; if (x < 1 || y < 1) { *it_out = 0; continue; } if (x != 0) { } else { fail = 1; } *it_out = 4 * src[y * w + x]; } } if (fail) { printf("fail\n"); return (1); } printf("pass\n"); return (0); }

     

  • Menyediakan penyelesaian untuk C4883 ": ukuran fungsi mengontrol optimalisasi". Ketika Pengoptimal melihat fungsi yang besar, hal itu akan skala kembali optimalisasi yang akan menjalankan. Ini akan menerbitkan peringatan C4883 ketika hal ini, jika Anda telah mengaktifkan peringatan melalui /we4883. Jika Anda ingin menimpa keputusan ini untuk menekan optimalisasi, membuang /d2OptimizeHugeFunctions switch.

  • Memperbaiki compiler lumpuh di c2! PpCanPropagateForward ketika Anda melakukan optimalisasi pada x64.

  • Perbaikan untuk loop Pengoptimal bug yang melibatkan pengurangan variabel kekuatan induksi salah.

  • Memperbaiki penataan kembali salah ekspresi yang melibatkan membaca & menulis ke memori karena salah alias pemeriksaan.

  • Memperbaiki alokator Daftar bug yang melibatkan compiler yang dihasilkan sementara yang ada di beberapa pengecualian penanganan wilayah.

Status

Microsoft telah memastikan bahwa ini merupakan masalah di dalam produk Microsoft sebagaimana tercantum di bagian "Berlaku untuk".

Perlu bantuan lainnya?

Ingin opsi lainnya?

Jelajahi manfaat langganan, telusuri kursus pelatihan, pelajari cara mengamankan perangkat Anda, dan banyak lagi.

Komunitas membantu Anda bertanya dan menjawab pertanyaan, memberikan umpan balik, dan mendengar dari para ahli yang memiliki pengetahuan yang luas.

Apakah informasi ini berguna?

Seberapa puaskah Anda dengan kualitas bahasanya?
Apa yang memengaruhi pengalaman Anda?
Dengan menekan kirim, umpan balik Anda akan digunakan untuk meningkatkan produk dan layanan Microsoft. Admin TI Anda akan dapat mengumpulkan data ini. Pernyataan Privasi.

Terima kasih atas umpan balik Anda!

×