diff --git a/openmp/runtime/src/kmp_affinity.cpp b/openmp/runtime/src/kmp_affinity.cpp index 31e9a19c47fcd..eead5bdfb9e4f 100644 --- a/openmp/runtime/src/kmp_affinity.cpp +++ b/openmp/runtime/src/kmp_affinity.cpp @@ -2509,6 +2509,10 @@ __kmp_x2apicid_get_levels(int leaf, level++; } while (level_type != INTEL_LEVEL_TYPE_INVALID); + // Ensure the INTEL_LEVEL_TYPE_INVALID (Socket) layer isn't first + if (levels_index == 0 || levels[0].level_type == INTEL_LEVEL_TYPE_INVALID) + return 0; + // Set the masks to & with apicid for (unsigned i = 0; i < levels_index; ++i) { if (levels[i].level_type != INTEL_LEVEL_TYPE_INVALID) { @@ -2517,7 +2521,7 @@ __kmp_x2apicid_get_levels(int leaf, for (unsigned j = 0; j < i; ++j) levels[i].mask ^= levels[j].mask; } else { - KMP_DEBUG_ASSERT(levels_index > 0); + KMP_DEBUG_ASSERT(i > 0); levels[i].mask = (-1) << levels[i - 1].mask_width; levels[i].cache_mask = 0; }