<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJztGNty2rr2a8iLBo8t3-CBBzDQMjtABkjTc148si2Ddo3lseQQ9tfvJckQkiZt0zbnPOw9A16S1kVL66ZLwrPjYNSwImPlFhXF_b7reJZt2d06ddCByR2arz9F6MhokQkkdxTlvCj4QZHTuuZ1xx127HHHPn0Du_3pbqTQfiTqFL5KvLXnJa9pxaGfqHmtmhaUCNpxJyUr_ySI76tWlD9yOniKO_4YnVWMPn9GPPmTphJVNVdQgCRe0RLY_KhuSsn29DxlNCdf6JQVVFPtKytjNbS-7KuY5DkrmTxaaVVZINJMOh3Oridj0PpRPJ624vH0JB5PlXg8vRAPVK14PH1dfGuPm9Xyw2rYCSewuGg-G9m-Dx0HOth2-oZgOlm3Y58i-Gw4L9QilDsAOB7uKbSF-64yJSvh-5EL-RB40DLftLDoA0UIVCp5wbdctTY3qDuOo9UmXiwX6804AhiPJzerSTTcTF7A3Q1Xi9niw_qEWk-i29XkRa5H1CXTOrp-jekp6pIp1tNHSo3hYhPPh9FqeYGYLlfz4dfD17P57GIUXBJPPt8sVxvozb4bMEDzzYB9lYuVadFk9Hv8qg_gB6lfDWrm9MqfZ_7FyeWO1VlFanlUwqQsuWT5UQXW-G62cLFuxdAcL-_WSMfef1OYiZUFK-m5G8dpVTRC_c9jQtYslWv4lls9umRnXH1PioZGREg1lLAtpJRq3Xmoe8g8x3NaGGiIPTOOg9DAvsG7voGeH7QwbGGvhX0NfdvVMMBGToixkW_bBmLD5zu4pfcNvWO34waGNm718du-mdc9450WmvncXr-VY8Z7rVxsGz380Mxrt-vx-7iV12_lGOhqvR3PDhSeetjtKWt9OKjvfKONq121TIzHFuPJ6PYD-Ks7Rq-n8nPUZS6js9Pb9mJzarnY9Dvu2H6wfbVmQNyuV-Pra9QVMgMHQzkdwc_xtJ5r9Z18FKmCYscPMxO2OiygHv_e0q-FZr8gVAuAhafo55LquVI_sHn-uCzcgy0C99WediB1qXdRFRhqgJbNntZE8hqWEP4xv4k_3sW3iz8Wy7sFDCBWIgGngHSHeK6JFZmaYXeIpSYQCCoA2pEyK2j2i3pbO1A2sL1WWxBMFRSUooymBQFFGS-VKk-1-P-a63q43vxjbeXgf2PrPe31zw4uN3yTsebDz_Hidg6nRtieNv-5gRP0d0yXglqxPFb03YyInbcY8ak-v7uu-Sdd9M0NRdhxHd19qGoqhNImY5k2AVXnLSIpkhwRlPJSSFLKd1PoZJycsKKpKfhboJQ0gmYoOYICNSWZshRB96RmJCko4o0UDA6yTApUsJzqyd5bP-W8RpAtbd0GLhNNIqiMM1rJ3Tv4LHCf-sztwQh0SV2TI1KhovRgJZyL_dFzdfzxRVQT8PC2VLb73WnqOP_mqT3UzxeKU79rICF5VdFMi2qSlO_3oK0OcJpZLz6WmO9mR9XbA7hpr9YJ9y3x7TcWhJT3n7kewVkbxXGrrsF0O-5k-xiqPb3g0UnIqYwjUdGU5QxU90eXuxAE0yO1mhIWqF4VjnFB76l6nHgp_k4sL651DbdR-pXqp3g9l52LAtXBEWQ81IZSkSQqG6FGQLUgZZsSBS23cmchdTwHW9cCPCcpxFZTVbyW2qAtA30AxElq0kglGdy-F-bRiwlAhCpxUM7rLbtXkQ1RqiWkRFDrci0zlHFD_6XkB8RyQ8fMq1kHD2u23UG0QJFjDxcTZhxuNXu4Vmg6k-VbKLoHcvy23zOW56jb3YIM8q1HqucZi5K3UJu5WJnRBxQ6tJeEeebYNLGsNPMxCbJe1vMxgotx4HmGuNvtvk2jdnn6Agi_n1Gw49nwQ92-B2EdhWDv0blpUAnnhQ7yc9hKZV93mLNC0voxTUxmoE54DnbD2wjwv8l8mudCZ1hOCvV0-Uj5W1LxTbnY_ZlkBCO_wvVqxiOFGa7XkxUcSHtfr3GC7GerUAxTKPHD6KMSqQo9cLLWuE_WxtQjr7LTs2uCOwLS8RPragdodTWDsqLugeiWWW0rl6qc8-YqG7hZ3-2TK9LIHa8Hf-15RvdXTV0MdlJWutDiKfwgqXZNYkHVho5-tjOg2z4SQJcJ0eh3X98NQny1G0ACZHnPJm4aBK6f5nlgZ26a4zTseYFL_auCJGDjASwXVnv161OyAbYx_Ow-3Cr6OLBCO3WdvJ8GoZOnfceDsKd72HAsvR1CCbuqB1pk0mwFIAsmpHhEmgMCpScNJZMFHSwhEec3qE1DvYEJdSo0uxxsjHdQHPhBLQT9b0-jV9oeA22MvwEX0c4A>53672</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            OpenMP runtime fails to build on Windows: openmp\runtime\src\kmp_affinity.cpp(951): error C2131: expression did not evaluate to a constant
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          zmodem
      </td>
    </tr>
</table>

<pre>
    Building llvm-14.0.0-rc1 with MSVC yields the following error:

```
C:\src\llvm.monorepo\build.release>ninja omp
[1/2] Building CXX object projects\openmp\runtime\src\CMakeFiles\omp.dir\kmp_affinity.cpp.obj
FAILED: projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_affinity.cpp.obj
C:\PROGRA~2\MIB055~1\2019\PROFES~1\VC\Tools\MSVC\1428~1.293\bin\Hostx64\x64\cl.exe  /nologo /TP -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Domp_EXPORTS -Iprojects\openmp\runtime\src -IC:\src\llvm.monorepo\openmp\runtime\src -Iinclude -IC:\src\llvm.monorepo\llvm\include -IC:\src\llvm.monorepo\openmp\runtime\src\i18n -IC:\src\llvm.monorepo\openmp\runtime\src\include -IC:\src\llvm.monorepo\openmp\runtime\src\thirdparty\ittnotify /DWIN32 /D_WINDOWS   /Zc:inline /Zc:__cplusplus /Zc:strictStrings /Oi /Zc:rvalueCast /bigobj /W4 -wd4141 -wd4146 -wd4244 -wd4267 -wd4291 -wd4351 -wd4456 -wd4457 -wd4458 -wd4459 -wd4503 -wd4624 -wd4722 -wd4100 -wd4127 -wd4512 -wd4505 -wd4610 -wd4510 -wd4702 -wd4245 -wd4706 -wd4310 -wd4701 -wd4703 -wd4389 -wd4611 -wd4805 -wd4204 -wd4577 -wd4091 -wd4592 -wd4319 -wd4709 -wd4324 -w14062 -we4238 /Gw /MT /O2 /Ob2 /DNDEBUG   -D _CRT_SECURE_NO_WARNINGS -D _CRT_SECURE_NO_DEPRECATE -D _WINDOWS -D _WINNT -D _WIN32_WINNT=0x0501 -D _USRDLL -std:c++14 /GS /EHsc /showIncludes /Foprojects\openmp\runtime\src\CMakeFiles\omp.dir\kmp_affinity.cpp.obj /Fdprojects\openmp\runtime\src\CMakeFiles\omp.dir\ /FS -c C:\src\llvm.monorepo\openmp\runtime\src\kmp_affinity.cpp
C:\src\llvm.monorepo\openmp\runtime\src\kmp_affinity.cpp(93): warning C4062: enumerator 'KMP_HW_UNKNOWN' in switch of enum 'kmp_hw_t' is not handled
C:\src\llvm.monorepo\openmp\runtime\src\kmp.h(604): note: see declaration of 'kmp_hw_t'
C:\src\llvm.monorepo\openmp\runtime\src\kmp_affinity.cpp(93): warning C4062: enumerator 'KMP_HW_LAST' in switch of enum 'kmp_hw_t' is not handled
C:\src\llvm.monorepo\openmp\runtime\src\kmp.h(604): note: see declaration of 'kmp_hw_t'
C:\src\llvm.monorepo\openmp\runtime\src\kmp_affinity.cpp(123): warning C4062: enumerator 'KMP_HW_UNKNOWN' in switch of enum 'kmp_hw_t' is not handled
C:\src\llvm.monorepo\openmp\runtime\src\kmp.h(604): note: see declaration of 'kmp_hw_t'
C:\src\llvm.monorepo\openmp\runtime\src\kmp_affinity.cpp(123): warning C4062: enumerator 'KMP_HW_LAST' in switch of enum 'kmp_hw_t' is not handled
C:\src\llvm.monorepo\openmp\runtime\src\kmp.h(604): note: see declaration of 'kmp_hw_t'
C:\src\llvm.monorepo\openmp\runtime\src\kmp_affinity.cpp(137): warning C4062: enumerator 'KMP_HW_MAX_NUM_CORE_TYPES' in switch of enum 'kmp_hw_core_type_t' is not handled
C:\src\llvm.monorepo\openmp\runtime\src\kmp.h(621): note: see declaration of 'kmp_hw_core_type_t'
C:\src\llvm.monorepo\openmp\runtime\src\kmp_affinity.cpp(951): error C2131: expression did not evaluate to a constant
C:\src\llvm.monorepo\openmp\runtime\src\kmp_affinity.cpp(951): note: failure was caused by a read of a variable outside its lifetime
C:\src\llvm.monorepo\openmp\runtime\src\kmp_affinity.cpp(951): note: see usage of 'hw_subset_depth'
C:\src\llvm.monorepo\openmp\runtime\src\kmp_affinity.cpp(963): error C3863: array type 'int [hw_subset_depth]' is not assignable
C:\src\llvm.monorepo\openmp\runtime\src\kmp_affinity.cpp(1117): warning C4062: enumerator 'KMP_HW_MAX_NUM_CORE_TYPES' in switch of enum 'kmp_hw_core_type_t' is not handled
C:\src\llvm.monorepo\openmp\runtime\src\kmp.h(621): note: see declaration of 'kmp_hw_core_type_t'
ninja: build stopped: subcommand failed.
```

The problem is this:

```
  int hw_subset_depth = __kmp_hw_subset->get_depth();
  kmp_hw_t specified[KMP_HW_LAST];
  int topology_levels[hw_subset_depth];
```

Since hw_subset_depth is not a constant expression, it cannot be used as an array length. Compilers often support this as an extension, but it seems MSVC isn't as forgiving in this case.

I don't know if this is the *right* fix, but it does make the error go away:

```
diff --git a/openmp/runtime/src/kmp_affinity.cpp b/openmp/runtime/src/kmp_affinity.cpp
index 71e8b7fd10eb..cd52a6d8d852 100644
--- a/openmp/runtime/src/kmp_affinity.cpp
+++ b/openmp/runtime/src/kmp_affinity.cpp
@@ -948,7 +948,7 @@ bool kmp_topology_t::filter_hw_subset() {
   bool using_core_effs = false;
   int hw_subset_depth = __kmp_hw_subset->get_depth();
   kmp_hw_t specified[KMP_HW_LAST];
-  int topology_levels[hw_subset_depth];
+  int topology_levels[KMP_HW_LAST];
   KMP_ASSERT(hw_subset_depth > 0);
   KMP_FOREACH_HW_TYPE(i) { specified[i] = KMP_HW_UNKNOWN; }
   int core_level = get_level(KMP_HW_CORE);
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztGNty2jj0a8iLBo8t21weeAADKdMAGSBNdl88si2DWmN5LDmE_fo9kgwhaZI2abL70M6Aj6Rz0dG56RLxZN8bVCxLWL5GWXa7bTqeZVt2s4wdtGNyg6bLLwHaM5olAskNRSnPMr5T5LQsedlw-w172LAP35Zd_3Q3UGg_EGUMXyXe2vKcl7Tg0I_UvFZJM0oEbbijnOVfCeLbohblD5wGHuOGP0RHFYObG8SjrzSWqCi5ggIk8YLmwOYHZZVLtqXHKYMp-UbHLKOaaltYCSuh9W1bhCRNWc7k3oqLwgKRZtJxf3IxGoLW9-LxuBaPxwfxeKzE4_GJeKCqxePx8-Jre1wu5ueLfqM9gsUF08nA9n3oONDBttM1BOPRsh77EsBnxXmmFqHcAcDxcEehLdx1lSlZDt9PXMi7lgct840zi95RhEClnGd8zVVrdYmawzBYrMLZfLZcDQOA4XB0uRgF_dXoCdx1fzGbzM6XB9RyFFwtRk9y3aNOmZbBxXNMD1GnTKGePlBq9GercNoPFvMTxHi-mPa_H76YTCcno-CScHRzOV-soDf5YcAAzYsB-ywXy-OsSuiP-FUfwE9SPxvUzOnkb2f-xcnlhpVJQUq5V8KkzLlk6V4F1vB6MnOxboXQHM6vl0jH3t8xzMTyjOX02A3DuMgqof7HMSFLFsslfPO1Hp2zI668JVlFAyKkGorYGlJKta491NwlnuM5NWxpiD0zjlttA7sG7_oGen6rhu0admrY1dC3XQ1b2MhpY2zk27aB2PD5Dq7pfUPv2PW4gW0b1_r4dd_M6x7xTg3NfG6nW8sx451aLraNHn7bzGvX6_G7uJbXreUY6Gq9Hc9uKTz1sNtR1jrfqe90pY2rXTWPjMdmw9Hg6hz81Ryi51P5Meo0l9HR6XV7tjq0XGz6DXdo39m-WjMgrpaL4cUFagqZgIOhnA7g53haz6X6jj6JWEGx4buJCVsdFlCP37f0a6HJLwjVAmDhMXpbUj1W6ic2z5-XhTuwReCu2tN2pMz1LqoCQw3QvNrSkkhewhLan6eX4afr8Gr2eTa_nsEAYjkScAqIN4inmliRqRk2u1BqAoGgAqANyZOMJr-ot7UBZVu2V2sLgqmCglKU0DgjoCjjuVLloRb_r7ku-svVb2srB_-JrY-01-8dXG77Vcaa9m_C2dUUTo2wPa3-uoQT9A9MF4NaodwX9MOMiJ3XGPGhPu9d1_yDLvrmhgLsuI7u3hUlFUJpk7BEm4Cq8xaRFEmOCIp5LiTJ5YcpdDBOSlhWlRT8LVBMKkETFO1BgZKSRFmKoFtSMhJlFPFKCgYHWSYFylhK9WQfrZ9yXiXImtZuA5eJKhJUhgkt5OYDfNZyH_rM7cAIdElZkj1SoaL0YDmci_3BY3X84UlUE_DwOle2e-80dZw_eWr39fOF4tTvGkhIXhQ00aKqKObbLWirA5wm1pOPJea72lD19gBu2qp1wn1LvPzGgpDy_iPXIzhrozCs1TWYZsMdre9DtaMXPDgIOZRxJAoas5SB6v7gdBeCYLqnVlPCAtWrwj7M6C1VjxNPxd-B5cm1LuE2Sr9T_RCvx7JzUqAaOICMh9qQK5JIZSPUCKgWJK9TIqP5Wm4spI7nYOtSgOckhdiqioKXUhu0ZqB3gDhIjSqpJIPbt8I8ejEBiLZKHJTycs1uVWRDlGoJMRHUOl3LBCXc0H_L-Q6x1NAx82rWwP2SrTcQLVDk2N3JhAmHW80WrhWazmT5Gorujuxf9nvC0hQ1m2uQQV56pHqcsSh6DbWZi-UJvUNth3aidpo4No0sK058TFpJJ-n4GMHFuOV5hrjZbL5Oo3p5-gIIv7co2PBs-KFm14OwDtpg78GxaVAR55kO8mPYSmVft5-yTNLyPk1MZqBG-xjshrcS4H-T-TRNhc6wlGTq6fKe8l1S8VW52HxLMoKRn-F6NuORwvSXy9ECDqSd79c4QvajVSiGMZT4fvBJiVSFHjhZbdwHa2PqkVfZ6dE1wR0A6fCBdbUDtLqaQVlR90B0zay2lVNVjnlzlvTcpOt2yZlkMqO9OcTY9BLVEaZrs1AHHlPAoeZfQ9zznaq_6L89aJ1VZdbbSFno2o_H8IM831SRBRsJdPRLogHN-t0CukyISj9F-26rjc82vShySKcV464LmYpxTF2SuJ6XxMTpxB2KzzISgdt74AFwwBnrYRvDz-7CNaWLW1bbjl0n7cattpPGXceDPKJbsJKl91eoiWdlT-sQVWsByIwJKe6R5sRB6UE-qeSGl71_tjyh2zOtbU-r-i82urjT">