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

    <tr>
        <th>Summary</th>
        <td>
            problem using clang/llvm libraries on Mac OS X with a built libc++
        </td>
    </tr>

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

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

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

<pre>
    I'm running into problems when using `clang` as a library on Mac OS X when linking with the LLVM project `libc++` rather than the system one.

Unfortunately I do not know the nature of this problem. Some possibilities that I am aware of:
 * a problem in LLVM code
 * a problem in clang
 * a problem in libc++
 * the reproducer doing something intentionally not supported

I do have a reproducer that reliable reproduces the problem on my own system (Mac OS X Monterey 12.3). This reproducer works by building {LLVM,clang,libc++} twice in order to arrange for the second build of clang/llvm to use a libc++ from the first build. This is by no means the smallest reproducer possible.

Previous versions of this issue on other projects:
 * https://github.com/chapel-lang/chapel/issues/19217
 * https://github.com/Homebrew/homebrew-core/issues/96915
 
Reproducer files are included in the details section below. I will also attach a .zip to make getting all of these more convenient.

Thanks very much for any help with this issue.

<details>


runtest.sh
```
#!/bin/bash

# assumes ../llvm-project is checked out
#  bug report uses 75e33f71c2dae584b13a7d1186ae0a038ba98838 llvmorg-13.0.1
#
# will make ../llvm-build1 and ../llvm-build2
# will install to /tmp/llvm1 and /tmp/llvm2
./cmake1.sh
./build1.sh
./cmake2.sh
./build2.sh
./repro.sh
```

cmake1.sh
```
#!/bin/bash

mkdir -p ../llvm-build1
cd ../llvm-build1

cmake ../llvm-project/llvm \
    -DCMAKE_INSTALL_PREFIX=/tmp/llvm1 \
    -DCMAKE_BUILD_TYPE=RelWithDebInfo \
    -DCMAKE_OSX_SYSROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk \
    -DLLVM_ENABLE_PROJECTS=clang \
    -DLLVM_ENABLE_RUNTIMES="compiler-rt;libcxx;libcxxabi" \
    -DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON \
    -DLLVM_LINK_LLVM_DYLIB=ON \
    -DLLVM_ENABLE_EH=ON \
    -DLLVM_ENABLE_FFI=ON \
    -DLLVM_ENABLE_RTTI=ON \
    -DLLVM_INCLUDE_DOCS=OFF \
    -DLLVM_INCLUDE_TESTS=OFF \
    -DLLVM_ENABLE_Z3_SOLVER=OFF \
    -DLLVM_OPTIMIZED_TABLEGEN=ON \
    -DLLVM_TARGETS_TO_BUILD=Native \
    -DCLANG_PYTHON_BINDINGS_VERSIONS="3.10;3.9;3.8" \
    -DFFI_INCLUDE_DIR=/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk/usr/include/ffi \
    -DFFI_LIBRARY_DIR=/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk/usr/lib \
    -DLLVM_BUILD_LLVM_C_DYLIB=ON \
    -DLLVM_ENABLE_LIBCXX=ON \
    -DDEFAULT_SYSROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk \

```

build1.sh
```
#!/bin/bash

export CMAKE_BUILD_PARALLEL_LEVEL=5
cd ../llvm-build1
cmake --build . $CMAKE_PARBUILD --target install-llvm-headers
cmake --build . $CMAKE_PARBUILD --target install-cmake-exports
cmake --build . $CMAKE_PARBUILD --target LLVMSupport
cmake --build . $CMAKE_PARBUILD --target install-LLVMSupport
cmake --build . $CMAKE_PARBUILD --target llvm-config
#cmake --build . --target install-llvm-config
#cmake --build . --target clang
#cmake --build . --target install-clang
cmake --build . $CMAKE_PARBUILD --target install
```

cmake2.sh
```
#!/bin/bash

mkdir -p ../llvm-build2
cd ../llvm-build2

# carlocab's reproducer

cmake ../llvm-project/llvm \
    -DCMAKE_INSTALL_PREFIX=/tmp/llvm2 \
    -DCMAKE_BUILD_TYPE=RelWithDebInfo \
    -DCMAKE_OSX_SYSROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk \
    -DLLVM_ENABLE_PROJECTS=clang \
    -DLLVM_ENABLE_RUNTIMES="compiler-rt;libcxx;libcxxabi" \
    -DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON \
    -DLLVM_LINK_LLVM_DYLIB=ON \
    -DLLVM_ENABLE_EH=ON \
    -DLLVM_ENABLE_FFI=ON \
    -DLLVM_ENABLE_RTTI=ON \
    -DLLVM_INCLUDE_DOCS=OFF \
    -DLLVM_INCLUDE_TESTS=OFF \
    -DLLVM_ENABLE_Z3_SOLVER=OFF \
    -DLLVM_OPTIMIZED_TABLEGEN=ON \
    -DLLVM_TARGETS_TO_BUILD=Native \
    -DCLANG_PYTHON_BINDINGS_VERSIONS="3.10;3.9;3.8" \
    -DFFI_INCLUDE_DIR=/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk/usr/include/ffi \
    -DFFI_LIBRARY_DIR=/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk/usr/lib \
    -DLLVM_BUILD_LLVM_C_DYLIB=ON \
    -DLLVM_ENABLE_LIBCXX=ON \
    -DRUNTIMES_CMAKE_ARGS=-DCMAKE_INSTALL_RPATH="@loader_path/../lib;/tmp/llvm1/lib" \
    -DDEFAULT_SYSROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk \
    -DCMAKE_C_COMPILER=/tmp/llvm1/bin/clang \
    -DCMAKE_CXX_COMPILER=/tmp/llvm1/bin/clang++ \
    -DCMAKE_PREFIX_PATH=/tmp/llvm1 \
    -DCMAKE_INSTALL_RPATH="@loader_path/../lib;/tmp/llvm1/lib"

exit 0
```

build2.sh
```
#!/bin/bash

export CMAKE_BUILD_PARALLEL_LEVEL=5
cd ../llvm-build2
cmake --build . $CMAKE_PARBUILD --target install-llvm-headers
cmake --build . $CMAKE_PARBUILD --target install-cmake-exports
cmake --build . $CMAKE_PARBUILD --target LLVMSupport
cmake --build . $CMAKE_PARBUILD --target install-LLVMSupport
cmake --build . $CMAKE_PARBUILD --target llvm-config
#cmake --build . --target install-llvm-config
#cmake --build . --target clang
#cmake --build . --target install-clang
cmake --build . $CMAKE_PARBUILD --target install
```

repro.sh
```
#!/bin/bash

/tmp/llvm2/bin/clang++ -c repro.cpp -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk -c -fno-rtti -I/tmp/llvm2/include -std=c++14 -stdlib=libc++ -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/usr/local/include

/tmp/llvm2/bin/clang++ repro.o -o a.out -lclangFrontend -lclangSerialization -lclangDriver -lclangCodeGen -lclangParse -lclangSema -lclangAnalysis -lclangEdit -lclangASTMatchers -lclangAST -lclangLex -lclangBasic -Wl,-rpath,/tmp/llvm2/lib -L/tmp/llvm2/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -L/usr/local/lib

./a.out

# This adjustment to the link line allows the test to pass,
# for some reason.
#/tmp/llvm2/bin/clang++ repro.o -o a.out -L/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk/usr/lib -lclangFrontend -lclangSerialization -lclangDriver -lclangCodeGen -lclangParse -lclangSema -lclangAnalysis -lclangEdit -lclangASTMatchers -lclangAST -lclangLex -lclangBasic -Wl,-rpath,/tmp/llvm2/lib -L/tmp/llvm2/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -L/usr/local/lib
```

repro.cpp
```
#include "llvm/Support/Errc.h"
#include "clang/Basic/FileManager.h"

#include <iostream>

int main() {
  clang::FileManager fileMgr((clang::FileSystemOptions()));

  auto file = fileMgr.getFileRef("./nonexistant.h", /*OpenFile=*/true);

  std::error_code EC = llvm::errorToErrorCode(file.takeError());

  std::cout << "EC.message is " << EC.message() << "\n";

  bool not_no_such = (EC != llvm::errc::no_such_file_or_directory);
  bool is_no_such = !not_no_such;

  std::cout << "EC == no_such_file_or_directory is " << is_no_such << "\n";

  if (!is_no_such) {
    std::cout << "FAIL\n";
  }

  return 0;
}
```

</details>

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztGktz4jjz15CLChe2SSCHHAiYGb41kALPbGYvLmEL0Ma2KEmEyf76r1uyeZNM5nFLigJZ6ne3Wm11ZiJ9uRvUvFZO5LooeLEgvNCCrKSYZSxXZLNkBVkrXKjdNJKMFgv4JVQRSjI-k1S-EFGQIU3IeEoeLXzGiyfE2HC9JHrJSBh-HSLNf1mikQ5gJjXvHj9ATFKAkQBICwOtXpRmOZBlTq3RqzU69vtLMRdSrwuqWfZCBiQVpBCaPBViY9BgYS0ZEXN44qpSwSFTkTOyEkrxGc-45kwhKw0UaE7ohhqcml9yITWvA7qV2GANK3wiUnYJwFrlwuKeqjsIFFcygErXCWieCrSWAjlBcusCVmguCpqBpqikWq9WoDxL9w1iTLCkzww47lEzykmWcQoy7BaU4VpJBj7LwXOborJ2zWtvnTgUIIBkL8T1HL_m3TokQovu8dgI-aTI7IXM1jxLTXS07tFQNa9rzeF19zRv9Yje8IShQYRMUUhBqJQAyAh41bqdJaJILUX0Ykmnn2XPOcKvFbNBV1IlcylygznnUmmLWIrKjXCFIDmjhdVc5WBNpvS-GjYqssM4e5DsmYu1Is9MKnCC2oYUV2rN0HTCBGwZ0OowdpZar8yU14fPArbAeuYkIoeHZElXLKuXetknGBiyCgburee2fozUZwiWmWQbGC7LYT0Rku2Tu725da8rcuZnslN9zsEYBIOfF0m2TlmKzkFDpUxTnin0B8YgmbFMbBzYLhueZYRmClynNU2W4A3nP75C3-T0iZEF0xpDAexsTcbAYzkIBbuneGYFh6A-sHQEO_7J2PmF5GsgiKFAixeyZNmqyh6V3Q8wa363FLPmBwcL5htymQZXO2pZzt40yo999CCqXbDQjBf4Tbdw1TIkOLXOwUCOU0ZgvUpfIE-yZMkTGEys9Q4D4m-BsQXbFENVkdY18_15y028lLLrdnPm-rSVum77hrIGbfjtGb1tt_02QfJCLuqu7zQcdyfilrQxvDHxThwT7S5YKz2e9I4QeaE0ugTcBHA6X5XQFvlgqkRFegnyc7cWxCnL8mDKQHmnUIdTZsdddIb5PmL3PoflTymXpL46MU9J-8RE7gnrU0dXmad23S33EPzVe91h568gHoymUScM44dJ0B881vzekWXPIt1_GYS9OPr2EADChGV_Q4D32GwA59p5hPH0MZ5-m07G48iyCO2JC6Mee4ZtuWISxl2R5-DKkBcsEiLDrT_t_YU_kNGBBmRxlT4ds8BsHQejzn0YgBrj_wXdaApcTNZ9DXbyZRQNhsHUSORBNlpBJpF1qWv-PSbn79-3AzrjAHKWmLVF8BgFk1EnjLvj4cMgDCbxBDUdj87ihIPRX7EZ9b6Fg_vLgKWkwec3Qfr9wZswkyh6BWgw6oZfekHcG3fRJON-_1WwKJhGr8GVPP_x4-k4_BpMXgEdP4AfBv8EEFKI8ykYXZYy6kw-BdE0jsbW8gA5oppD6XAceGFn9Cl--BZ9Ho_i-8GoNxh9msYgyHQwHpU-9x23AT72nVvz3T7jY7DrzjKDya9HLzyuFYKXpxWM5nN-ji1ExqQz-fab2UJAvxLHZtj9wbAEmO7j41mwXtDvfAmjP7HpX8m9R3n9fbmXfTcn3n6Ge-hMIDcGYRwGX4MQlLh-Iw_bDFy3c8SBM6lp6QElQxLWNJVQX1SHWd3QWDIKtaT6aSIGpW41eD8V9OnU1uU_LcGv0DAmgMpqzhdbTx2jn7fbjyLtvdj8CO098Peb4q3awPvNtYF3KSa9g_0CRVRCZSYSOoO35P13oD9bQpxk1I8S4qOE-CghPkqIt0qIam_Fdv-D09Dkx0ln8tCJPltX1JqNTOA5Gq-oXoKcNo3xGXjm8K2mnD511R8sW_ZzWXe7x09euLbp_2zuKdEfH3-UQHnBdJaMzdfx1oBvv_f9HqMfFl1ck-r8u1jS_eyR-UslXXWufpR0HyXd5fh8_Uboreu5gxurcxu3nthCzUlWK1Ln6kVJITT51awEZOvzQkChojmpD04EKQ8WUlc6xTrISuM2zYTZ3L296-t6L46nUQ-zGiaIURQPO93JeLpb6I8nw87pdAhn9m52sDtgoErN9s6399nMGkyQuiDUEWtN6plZ7kvsBhRp9TxlktOM_0fN5XA52ZNQCMjqqStS9oltFx-oVGyHntNq3Clo9qK4qp6DlG_ZdqbRkOpkCclgb6oahux7NbynioNf_gbNu3Vp02n3RF88fOvh-WmLqhiVydLkYxXbjkK5YnPSiqZxTr_HZXDHBcX74Xpm2kOG9KEX0N97HsAsaex6_Hph-hU0_XetdM4Kjde0eAuPPTT8YnidLja2h4GX2giwokqhllsieHGO_SPwIlWicPY20k84PvydJc9HGP2mMLqcRyHLXUqkVUqCAgKFRX-VZ5PXD6RMnOWutDiArrpvxi7w24dXtCEt6ILJfZwTTL_LhdIQhvlRZ4ZDbOcUow-q_VvsF1aVkmXld-Czx8V0qIYLaeDbRzBT07QcrzB4lKVYfvz7faaE0DXsFyQFovUqmg6cUkhmwuYG2cPdWYgC6irwSqGthl4XT4ya1xmvWIHgpnYzuVSu2TlmJu-jjExKIWNsGpOgazgb6-_WIhHgD4Y4SIBiORrOVzO50-ci_QT3KdgaPuisoOtAFCkwG7anTIVu13YLldm3OFCqFvhzzGMG-xp7znEhYoVNOZQesFEPOJWPVUnsqASOUZMYVE-5ZIkWmEB2apTEuTqi7e6xe4fOiI0ELvI-MsYB37fMwOfEmMzdYR2F7WXR-p1BeEyXAGrvkIVkei0L0tjx3kKc2-tI3-sftz2v0js_vfVv6ZXmOmN3VYPf_s_GQQ_d_r8G_v_DwX9sYJuVmu653uuuX61ldvdKA7rMJkfXXdve83Wz6bevlnc3rXm71WokzVvX85tea05bN7dpI01mTbc5m3lXGZ2xTN3VroGpV7CNbfYax_Su-J3X8LyG77Zd3_N9z0mT5txPmXs9a3tuM6HwHgUHAc8clMMRcnEl78p3kYXClyzYz2q3CMcmXxSMGXZAH5LDUsi7fLWaXxm-d0bu_wPhk2nk">