<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/63557>63557</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Possible libc++ issue in 16.0.6 static build, MacOS Monterey
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    MacOS Monterey 12.6, Xcode 14.0.1, LLVM 16.0.6 (desired build: all libs static, and everything universal x86_64 + arm64)

First of all, I'd like to know if you believe the build I got is good for production use, or if the errors that appeared suggest to rebuild again.

After many tries adjusting settings as trial and error until I got the least errors I could with `make check-all`, I've finally built LLVM 16.0.6 with all the libs static, as universal x86_64 + arm64, in several steps:

In the first build, the executables still depended on the dynamic libc++ provided by Apple, and I got just two failures from `make check-all`, which made feel very optimistic:

```
Failed Tests (2):
  libomp :: barrier/omp_barrier.c
  llvm-libc++-static.cfg.in :: std/input.output/iostream.objects/init.pass.cpp


Testing Time: 4470.88s
  Skipped          :    47
  Unsupported      : 20114
 Passed           : 80255
  Expectedly Failed:   176
  Failed :     2
```

Then I performed a second build, with exactly the same settings, but using the compilers from the previous step. This time the resulting compilers had libc++ statically linked, and they no longer depended on the Apple libc++:

```
otool -L clang-16
clang-16:
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1311.100.3)
        /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.11)
        /usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)

file clang-16 
clang-16: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64Mach-O 64-bit executable x86_64] [arm64]
clang-16 (for architecture x86_64):     Mach-O 64-bit executable x86_64
clang-16 (for architecture arm64):      Mach-O 64-bit executable arm64
```

But unfortunately, I got errors that didn't appear in the first step (the two errors from step 1 also happened again):

```
Failed Tests (15):
 ThreadSanitizer-x86_64 :: Darwin/libcxx-call-once.mm
 ThreadSanitizer-x86_64 :: cxa_guard_acquire.cpp
  ThreadSanitizer-x86_64 :: static_init2.cpp
  ThreadSanitizer-x86_64 :: static_init4.cpp
 UBSan-AddressSanitizer-x86_64 :: TestCases/TypeCheck/vptr-non-unique-typeinfo.cpp
 UBSan-AddressSanitizer-x86_64 :: TestCases/TypeCheck/vptr-virtual-base-construction.cpp
 UBSan-AddressSanitizer-x86_64 :: TestCases/TypeCheck/vptr.cpp
 UBSan-Standalone-x86_64 :: TestCases/TypeCheck/vptr-non-unique-typeinfo.cpp
  UBSan-Standalone-x86_64 :: TestCases/TypeCheck/vptr-virtual-base-construction.cpp
 UBSan-Standalone-x86_64 :: TestCases/TypeCheck/vptr.cpp
 UBSan-ThreadSanitizer-x86_64 :: TestCases/TypeCheck/vptr-non-unique-typeinfo.cpp
 UBSan-ThreadSanitizer-x86_64 :: TestCases/TypeCheck/vptr-virtual-base-construction.cpp
 UBSan-ThreadSanitizer-x86_64 :: TestCases/TypeCheck/vptr.cpp
  libomp :: barrier/omp_barrier.c
  llvm-libc++-static.cfg.in :: std/input.output/iostream.objects/init.pass.cpp


Testing Time: 3642.22s
  Skipped          :    47
  Unsupported      : 18923
 Passed           : 78461
  Expectedly Failed:   151
  Failed :    15
```

Given that the only difference between the used clang in the step 1 and in the step 2 is that the former one was built with Xcode and was linked to the Apple libc++, while the later was built with Clang 16.0.6 with the LLVM 16.0.6 libc++ statically linked on them, I'm suspecting that perhaps that error related to libc++ (`std/input.output/iostream.objects/init.pass.cpp`)might be an issue. Its log is:

```
# command stderr:
Assertion failed: (std::memcmp(check.cerr_mem_dump, (char const*)&std::cerr, sizeof(std::cerr)) == 0), function main, file init.pass.cpp, line 88.

error: command failed with exit status: 250
```

While the log for the OpenMP error (`barrier/omp_barrier.c`) is:

```
# command stderr:
OMP: Error #111: Memory allocation failed.

error: command failed with exit status: -6
```

I can provide the full and detailed build log if necessary, as well as the log for the new errors that appeared in step 2.

The settings I used for the build are as follows (same settings for both steps):

`cmake -G "Unix Makefiles" -DSANITIZER_MIN_OSX_VERSION=12.0 -DCMAKE_OSX_DEPLOYMENT_TARGET=12.0 -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DRUNTIMES_CMAKE_ARGS="-DSANITIZER_MIN_OSX_VERSION=12.0;-DCMAKE_OSX_DEPLOYMENT_TARGET=12.0;-DCMAKE_OSX_ARCHITECTURES=arm64|x86_64;-DCMAKE_VERBOSE_MAKEFILE=ON" -DCMAKE_BUILD_TYPE=Release -DLIBCXX_ENABLE_SHARED=OFF -DLIBCXX_ENABLE_STATIC=ON -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON -DLIBCXXABI_ENABLE_STATIC_UNWINDER=ON -DLIBCXXABI_ENABLE_SHARED=OFF -DLIBUNWIND_ENABLE_SHARED=OFF -DLIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY=ON -DLIBCXXABI_STATICALLY_LINK_UNWINDER_IN_STATIC_LIBRARY=ON -DLIBOMP_ENABLE_SHARED=FALSE -DCMAKE_INSTALL_PREFIX=$MY_INSTALL_PATH -DCMAKE_VERBOSE_MAKEFILE=ON -DBUILD_SHARED_LIBS=OFF -DLIBCLANG_BUILD_STATIC=ON -DLLVM_ENABLE_ZSTD=OFF -DLLVM_TARGETS_TO_BUILD="AArch64;ARM;X86" -DLLVM_ENABLE_PROJECTS="clang;compiler-rt;openmp" -DLLVM_ENABLE_RUNTIMES=all ../src/llvm-project-16.0.6.src/llvm
`

And yes, the `SANITIZER_MIN_OSX_VERSION` option is necessary, together with a previous `export MACOSX_DEPLOYMENT_TARGET=12.0`, because if you don't do both of them, then the cmake log has a warning in the lines of "12.6 too new, using 10.10 deployment target instead" (I type from memory, not copy-paste), which seems inoffensive but however triggers a lot of sanitizer `make check-all` errors later because of mismatched linked objects.

If you think the settings can be improved tell me, but keep in mind that wish a static build and universal x86_64 + arm64.

Also, if you feel my build is "good enough" for production use, I'd be happy to know about it too.


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUWUtz27ru_zTKBmONJT_iLLKQH-nx_9pJxnbPbe_GQ0uwxRuK1CGpJD6f_j8gJT_ycDvt2dxOx61NAAQBEPgBZMbwnUS8DXrDoDe-YpXNlb5NNyK92qhsfztn6cMS5kpa1LiHKA77QTyCb6nKEKJu2A4j-j6b_TmHqB-2wz4E8SBDwzVmsKm4yIJOAkwIEHxjwFhmeUosTGaAz6j3NudyB5Xkz6gNE_A66K_7XQjiITBd9LtBfBO0x0E78Z93XBsLaksySc40iK8zEPwJwSp4kuoF-Bb2qoINCo7PCDZHrwlMYacscAM7pTLYKg2lVlmVWq4kVAZJntLETzyotdIGbM4ssLJERkcy1W6HxtJeGr1UtmNchqc6JluLGgom92A1RwMs-29lLJ3ToKV_DTBDa0x4Q9BWUEnLRa0kKSCQGduoMYVUVSKDF25zCPrtgj0hpDmmTy2yRL_dGOMZYcslE2LvTm3PnOO4yRtO_huPmIteGAGXYMhlTICxWJqgk5yeeiqd1K1zkHd9PPKWfMW0smwjkPbjQkCGJcoMM1CeKdtLVvCUVEqDeEjbllo9cyLZ7CEpS4FN1HgDkUHBvijYMi4qjQa2WhWfWuYl52kOBcsQtogCKPJAlZYX3ND5z49CTP6vjznGBWawQmMNxXdMMdlwACmtihLol04CG6Y1Rx3Ed6oo1_W3MD0Qi-eidTxmy9s_TLe7kMtGhrFZEN9xWVY2VJUtK0tflbEaWRGqzX8xtcZRcBuWzJgwLcuzA7hPUpiCbsULJLHd7nU7HAxMo8vyiZclZnD4Q0QA0L1uKL5KU5Wl0rahIoq4HUXdmuKRGXMqwREM2nGv14iYvJaYWszEHrwd_SbRdb-hqM1bbw7xhz6oT5SjhCmUqLdKF5gBA4Opktkx4FyI4ytLrdi72DKswMO9I4pNZaEyZBhaTlVRcoG6DiD6qdT4zFVlXJiHsMq5AcsLn0o0mko4sx45c5adhq73qbuCgssnzJrQtTnuQSoQSu5Qv7sFLsxPBF2OSmWVEtCaQSqY3LWi2p6Hb0fmmyC-qwyFpOAb_7ncG4tFOAyzveAbCmo6DbN8wwW3e7ofhrJiFLZDd4HSSmuU9rjQiaIwarfDzkmC_mCjv8Po1_cI4zCKLsuXaaUNmrAXdn-0D5F8uE-9cFZntlzgwbLwzrQwZ2neejjJmBsumd778IuB6TTnFlNLqYnog97Q59Sgk9S8_W5rw-1Jdqyz7g-Wg96YpPm03Bufq0anp8J2un_DVyetmx_J_7HAQ2G-LM-TfX6bh3QR5VZpW0lmUexdDXPp_bT4ZjyTQXzdVGGqQ8dCQ1eUdKRfqBzUjO4uu7UImDAKcmKWWJfr0wT-Uyk_6p3l_FWukWVLJrnlf6NuNeXSp-8x0y-0B8Vn-vraolTQUjLFsCh-SkD6yta7iulszdK_Kq7xmN_hB6w-96ypMsS_xNU94fo6XDLZSrJMozGf8ZKNRswgFaTVvsQRld4gvnsurW5JJVuV5H9V2LL7Erncqn9U_jPXtmKitWEGW6mSxmqP5_7JXd7JWlomMyaUxH_OFr8l-ufN8Evy30m5HE2_HRG_If7nLfHrm5x67X8G_HX63TiM498Ff9HgJu5cAn_Xg24_-hH460Ufg7-od6FcfOHPKH1JoGyvpNhDxrdb1ChThA3aF0RfGyrSy5Wwplo0tUBmZ7_E1A4eRDpQqUFJhBdm6v7JVXTf8RI3LXhUR03gh7DN9xvC40XBqBl8I27kVDttyoj0tFO7BCdrvFg0LV8BpjJkaI9pmSWAnLOyPpnvLjWSJk7pE9lBPAj67V8LOeqsbgq-yy1syDbAjakwhKk1INQO-NsO8a1X4w5h6IKsamyGWh_oE2NQu7Z8ewibIB6Qnu6SFFikRUlIj65lmKLW6wKLdVbRryOHAXOmwSWAIE6oeMf9AzvRE5nhf6Pangr2KzdBfANBZxx0xuCAYTyCbSX9oKBw-GEEDiGeWyQekYcQBoOzeYBzgKvr9Wn9oZpWhVvn4srhxLjXvnAF_n0MK7VzEwz6_0OJcv5Y-9l79LNE5Hz2O555mD-SmpN6r04URQ4OY6H0HpgQKmUnjvtlO7T6F8wwhZTJZkLgb24l_CglQ-uF-uGMi8MtSEzRGKb39aDjBYncvLOkxJeP5z5c1vkifNOOHic6U591GlH1cIjQsoGtEkK9OCR51o466o2yeT1R-QiWpm6g0foCQRx_lfwV5uwJKfhMEMfQGi-T--lq-p_JYj2f3q8flt_Wf04Wy-nDfdAZR3HYhtZ4NE_-NXFL48nj7OH7fHK_Wq-SxZfJ6iOiZDH6Y7qajFZfF5MlXYM4bnqXuu1wGy--3q-m88ly7TmTxZea-Mc6BZ3hz2j1huytXl6X69FBuYb4z8li-LCcrOnL3XQ2CTrjh3uvtCcYfp3OxuvV90daWqBAZhBa49l0OPr2bT25T4azyXr5R7KYUA54uLt7v7hKVtORE_zJ2joZTtez6XCRLL6f09HCOenX-39P78eTxed073TxLJd19dKT2ez7eja9_5fTaHrfbPqpbm_ZGu0u8j7MH98pc5fMlpOD0af3y1Uym60fF5O76TcXKt359-PPyeoPuOhBaI294_wGpMTy7Miz5P5L7ds3_pn9OW-0-89ydWIoWvAxt1yvHjyzj-Ik0WnuwipZzIPO8Nug70PoVNjj4uH_JqNVHfgOcQSdYTMZamkbdIaqREll6S1vc38okoWAMAziO6NT6hsJJ5ZaUd1teUAQHleOifF05iwz2KNpRq5Bv_35Hey33ehTUcU-T41W7dDmhFfcoPg4CQv6bXwlLAjzZHTxyvp56wZTVhlsZvGZ8h18pny2U9sDgLF5jdl8nqNsnDMDDF6YlvwI4KiwGmIM4jiKwz5YpShfkww_zYvaYdSGDEuh9gVKC5bpHVrg0lhkGTkgiAdToLbDDwgKV7VIglQWUlXuWyUzFuuS74fGBrEwwKXablEa_oxugJirF3xGDVbz3Q41KSyUe5gwTUfx4TC6KS8eFjZmUlsouCmYTXPMDijP466zijP19rQ5l08exTaVhCriBoEXVBYJ51GJK7AZeD4hlmTKgrs5JCMgasjFHl025UpmFx4Bzh85hFHuVcBr5Kbqxb6Ww6nUxe6ZBaWqdjkZ_-MHF_-As0E3odkfHnHYRlUWuCU3n-17ld12spvODbvC26g_uB4Mup1e9yq_7bYHaXrTTzv9QTtK0_R60G5321nvutONuv1eesVv43bcaffj66jf7fW6IfYHnbTf61zHN8ii9DrotrFgXIR0y0Kld1cO0d72O73e9ZVgGxTGPZXFMQEFtxjEcdAbX-lbd2c31c4E3bbgxpqjFMutwNtHZQzfnHUKXgS5pUb9p84g45y_v11VWtzm1vqnl_guiO923ObVJkxV0SSH8-xBoJ32IPTujvH_AQAA__83l7sD">