<div dir="ltr">I think the build configuration is probably just busted somehow.<div><br></div><div>After doing the stage1 build into llvm_build0, it then tries to do an msan build, configured like this, which *does* find working atomics.</div><div><br></div><div>@@@BUILD_STEP build libcxx/msan@@@</div><div><div><div><br></div><div></div></div><div>+ cd libcxx_build_msan<br></div><div><div>+ cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_PARALLEL_LINK_JOBS=3 -DCMAKE_C_COMPILER=/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm_build0/bin/clang -DCMAKE_CXX_COMPILER=/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm_build0/bin/clang++ -DCMAKE_BUILD_TYPE=Release -DLLVM_USE_SANITIZER=Memory /mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm</div></div></div><div><br></div><div>Then it does another, configured like this, which doesn't find working atomics.</div><div><br></div><div>@@@BUILD_STEP build clang/msan@@@</div><div><br></div><div><div>+ cd llvm_build_msan</div><div>+ cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_PARALLEL_LINK_JOBS=3 -DCMAKE_C_COMPILER=/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm_build0/bin/clang -DCMAKE_CXX_COMPILER=/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm_build0/bin/clang++ -DCMAKE_BUILD_TYPE=Release -DLLVM_USE_SANITIZER=Memory -DLLVM_ENABLE_LIBCXX=ON '-DCMAKE_C_FLAGS=-I/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/libcxx_build_msan/include -I/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/libcxx_build_msan/include/c++/v1 -lc++abi -Wl,--rpath=/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/libcxx_build_msan/lib -L/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/libcxx_build_msan/lib -fsanitize=memory -w' '-DCMAKE_CXX_FLAGS=-I/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/libcxx_build_msan/include -I/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/libcxx_build_msan/include/c++/v1 -lc++abi -Wl,--rpath=/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/libcxx_build_msan/lib -L/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/libcxx_build_msan/lib -fsanitize=memory -w' '-DCMAKE_EXE_LINKER_FLAGS=-lc++abi -Wl,--rpath=/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/libcxx_build_msan/lib -L/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/libcxx_build_msan/lib' /mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm</div></div><div><br></div><div><br></div><div>However, not ONLY does it not think it has working atomics, it also says before that,</div><div><div>-- Performing Test HAVE_INT64_T - Failed</div></div><div><br></div><div>ISTM this likely indicates that the issue is that the compiler doesn't actually work at all when run with the flags configured by the cmake files, and nothing to do with atomics.<br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jul 7, 2015 at 2:12 PM, Rafael Espíndola <span dir="ltr"><<a href="mailto:rafael.espindola@gmail.com" target="_blank">rafael.espindola@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Looks like this check is failing in<br>
<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__lab.llvm.org-3A8011_builders_sanitizer-2Dx86-5F64-2Dlinux-2Dbootstrap_builds_7899_steps_annotate_logs_stdio&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=dODSCcePrPG-K8XzhmXMTvcOFqrcwdxZbacJuaAE-aw&s=ApjGO0H965fU1Zknzi4A4dXa5bTYUwoQ0n_axbiUHlA&e=" rel="noreferrer" target="_blank">http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-bootstrap/builds/7899/steps/annotate/logs/stdio</a><br>
<div class="HOEnZb"><div class="h5"><br>
On 16 June 2015 at 10:00, James Y Knight <<a href="mailto:jyknight@google.com">jyknight@google.com</a>> wrote:<br>
> Author: jyknight<br>
> Date: Tue Jun 16 09:00:01 2015<br>
> New Revision: 239819<br>
><br>
> URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D239819-26view-3Drev&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=dODSCcePrPG-K8XzhmXMTvcOFqrcwdxZbacJuaAE-aw&s=_MKfxHDX3Rmzp-AV9AGpAr2eXPbmcNOKV32Ih4pUmlg&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=239819&view=rev</a><br>
> Log:<br>
> Repair cmake libatomic check.<br>
><br>
> The cmake check for whether libatomic could be used had been<br>
> unconditionally setting the result to false. Which was somewhat<br>
> fortunate, because the prerequisite check for whether it was *needed*<br>
> was always claiming it was, even if it was not.<br>
><br>
> However, this made platforms where libatomic is actually necessary<br>
> fail to link.<br>
><br>
> Differential Revision: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__reviews.llvm.org_D10453&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=dODSCcePrPG-K8XzhmXMTvcOFqrcwdxZbacJuaAE-aw&s=tToD9eJHrKPCT3rkD8I-HdOKuZS43Ru9feVXN1wMicc&e=" rel="noreferrer" target="_blank">http://reviews.llvm.org/D10453</a><br>
><br>
> Modified:<br>
>     llvm/trunk/cmake/modules/CheckAtomic.cmake<br>
><br>
> Modified: llvm/trunk/cmake/modules/CheckAtomic.cmake<br>
> URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_cmake_modules_CheckAtomic.cmake-3Frev-3D239819-26r1-3D239818-26r2-3D239819-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=dODSCcePrPG-K8XzhmXMTvcOFqrcwdxZbacJuaAE-aw&s=LtDGXPbaMc2hD8ouuQxMb9wng15dKUmn0Qda6ecMVCU&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/CheckAtomic.cmake?rev=239819&r1=239818&r2=239819&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/cmake/modules/CheckAtomic.cmake (original)<br>
> +++ llvm/trunk/cmake/modules/CheckAtomic.cmake Tue Jun 16 09:00:01 2015<br>
> @@ -2,15 +2,45 @@<br>
><br>
>  INCLUDE(CheckCXXSourceCompiles)<br>
><br>
> -check_function_exists(__atomic_fetch_add_4 HAVE___ATOMIC_FETCH_ADD_4)<br>
> -if( NOT HAVE___ATOMIC_FETCH_ADD_4 )<br>
> -  check_library_exists(atomic __atomic_fetch_add_4 "" HAVE_LIBATOMIC)<br>
> -  set(HAVE_LIBATOMIC False)<br>
> -  if( HAVE_LIBATOMIC )<br>
> -    list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")<br>
> +# Sometimes linking against libatomic is required for atomic ops, if<br>
> +# the platform doesn't support lock-free atomics.<br>
> +<br>
> +function(check_working_cxx_atomics varname)<br>
> +  set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})<br>
> +  set(CMAKE_REQUIRED_FLAGS "-std=c++11")<br>
> +  CHECK_CXX_SOURCE_COMPILES("<br>
> +#include <atomic><br>
> +std::atomic<int> x;<br>
> +int main() {<br>
> +  return x;<br>
> +}<br>
> +" ${varname})<br>
> +  set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})<br>
> +endfunction(check_working_cxx_atomics)<br>
> +<br>
> +# This isn't necessary on MSVC, so avoid command-line switch annoyance<br>
> +# by only running on GCC-like hosts.<br>
> +if (LLVM_COMPILER_IS_GCC_COMPATIBLE)<br>
> +  # First check if atomics work without the library.<br>
> +  check_working_cxx_atomics(HAVE_CXX_ATOMICS_WITHOUT_LIB)<br>
> +  # If not, check if the library exists, and atomics work with it.<br>
> +  if(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB)<br>
> +    check_library_exists(atomic __atomic_fetch_add_4 "" HAVE_LIBATOMIC)<br>
> +    if( HAVE_LIBATOMIC )<br>
> +      list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")<br>
> +      check_working_cxx_atomics(HAVE_CXX_ATOMICS_WITH_LIB)<br>
> +      if (NOT HAVE_CXX_ATOMICS_WITH_LIB)<br>
> +       message(FATAL_ERROR "Host compiler must support std::atomic!")<br>
> +      endif()<br>
> +    else()<br>
> +      message(FATAL_ERROR "Host compiler appears to require libatomic, but cannot find it.")<br>
> +    endif()<br>
>    endif()<br>
>  endif()<br>
><br>
> +## TODO: This define is only used for the legacy atomic operations in<br>
> +## llvm's Atomic.h, which should be replaced.  Other code simply<br>
> +## assumes C++11 <atomic> works.<br>
>  CHECK_CXX_SOURCE_COMPILES("<br>
>  #ifdef _MSC_VER<br>
>  #include <Intrin.h> /* Workaround for PR19898. */<br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</div></div></blockquote></div><br></div>