Skip to content

Instantly share code, notes, and snippets.

@prenaux
Last active July 28, 2022 15:56
Show Gist options
  • Select an option

  • Save prenaux/0fd3157abbf15e4cad6db733d0516bac to your computer and use it in GitHub Desktop.

Select an option

Save prenaux/0fd3157abbf15e4cad6db733d0516bac to your computer and use it in GitHub Desktop.
MSVC v19 optimiser freezes when compiling GetTrianglesIndices_MSVC19_Deadlock
//
// The MSVC 19 optimizer deadlocks when compiling GetTrianglesIndices_MSVC19_Deadlock.
// Tested on cl.exe v19.27.29112 & v19.29.30142.1
//
// See: https://godbolt.org/z/o8rWsWsbb
//
//! Get triangles indices.
//! \remark The array needs to have room for 36 elements.
static void GetTrianglesIndices_MSVC19_NoCrash(int* pIndices, bool bCW) {
if (bCW) {
pIndices[0] = 5; pIndices[1] = 6; pIndices[2] = 1;
pIndices[3] = 6; pIndices[4] = 2; pIndices[5] = 1;
pIndices[6] = 7; pIndices[7] = 4; pIndices[8] = 3;
pIndices[9] = 3; pIndices[10] = 4; pIndices[11] = 0;
pIndices[12] = 7; pIndices[13] = 6; pIndices[14] = 4;
pIndices[15] = 6; pIndices[16] = 5; pIndices[17] = 4;
pIndices[18] = 0; pIndices[19] = 1; pIndices[20] = 3;
pIndices[21] = 1; pIndices[22] = 2; pIndices[23] = 3;
pIndices[24] = 6; pIndices[25] = 7; pIndices[26] = 2;
pIndices[27] = 7; pIndices[28] = 3; pIndices[29] = 2;
pIndices[30] = 4; pIndices[31] = 5; pIndices[32] = 0;
pIndices[33] = 5; pIndices[34] = 1; pIndices[35] = 0;
}
else {
pIndices[0] = 5; pIndices[1] = 1; pIndices[2] = 6;
pIndices[3] = 6; pIndices[4] = 1; pIndices[5] = 2;
pIndices[6] = 7; pIndices[7] = 3; pIndices[8] = 4;
pIndices[9] = 3; pIndices[10] = 0; pIndices[11] = 4;
pIndices[12] = 7; pIndices[13] = 4; pIndices[14] = 6;
pIndices[15] = 6; pIndices[16] = 4; pIndices[17] = 5;
pIndices[18] = 0; pIndices[19] = 3; pIndices[20] = 1;
pIndices[21] = 1; pIndices[22] = 3; pIndices[23] = 2;
pIndices[24] = 6; pIndices[25] = 2; pIndices[26] = 7;
pIndices[27] = 7; pIndices[28] = 2; pIndices[29] = 3;
pIndices[30] = 4; pIndices[31] = 0; pIndices[32] = 5;
pIndices[33] = 5; pIndices[34] = 0; pIndices[35] = 1;
}
}
//! Get triangles indices.
//! \remark The array needs to have room for 36 elements.
static void GetTrianglesIndices_MSVC19_Deadlock(int* pIndices, bool bCW) {
if (bCW) {
*pIndices++ = 5; *pIndices++ = 6; *pIndices++ = 1;
*pIndices++ = 6; *pIndices++ = 2; *pIndices++ = 1;
*pIndices++ = 7; *pIndices++ = 4; *pIndices++ = 3;
*pIndices++ = 3; *pIndices++ = 4; *pIndices++ = 0;
*pIndices++ = 7; *pIndices++ = 6; *pIndices++ = 4;
*pIndices++ = 6; *pIndices++ = 5; *pIndices++ = 4;
*pIndices++ = 0; *pIndices++ = 1; *pIndices++ = 3;
*pIndices++ = 1; *pIndices++ = 2; *pIndices++ = 3;
*pIndices++ = 6; *pIndices++ = 7; *pIndices++ = 2;
*pIndices++ = 7; *pIndices++ = 3; *pIndices++ = 2;
*pIndices++ = 4; *pIndices++ = 5; *pIndices++ = 0;
*pIndices++ = 5; *pIndices++ = 1; *pIndices++ = 0;
}
else {
*pIndices++ = 5; *pIndices++ = 1; *pIndices++ = 6;
*pIndices++ = 6; *pIndices++ = 1; *pIndices++ = 2;
*pIndices++ = 7; *pIndices++ = 3; *pIndices++ = 4;
*pIndices++ = 3; *pIndices++ = 0; *pIndices++ = 4;
*pIndices++ = 7; *pIndices++ = 4; *pIndices++ = 6;
*pIndices++ = 6; *pIndices++ = 4; *pIndices++ = 5;
*pIndices++ = 0; *pIndices++ = 3; *pIndices++ = 1;
*pIndices++ = 1; *pIndices++ = 3; *pIndices++ = 2;
*pIndices++ = 6; *pIndices++ = 2; *pIndices++ = 7;
*pIndices++ = 7; *pIndices++ = 2; *pIndices++ = 3;
*pIndices++ = 4; *pIndices++ = 0; *pIndices++ = 5;
*pIndices++ = 5; *pIndices++ = 0; *pIndices++ = 1;
}
}
// Type your code here, or load an example.
int square(int num) {
int indices[32] = {};
//GetTrianglesIndices_MSVC19_NoCrash(indices,true);
GetTrianglesIndices_MSVC19_Deadlock(indices,true);
return 123;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment