LLVM-3.8.0 libcxx in-tree build fails with cmath error ::signbit has not been declared

Greetings!

I have been building llvm-3.6.x, 3.7.1 and 3.7.2 with (glibc-2.12.1, binutils-2.24, gcc-4.9.2) almost same set if CMake flags.
However while building LLVM-3.8.0 using same CMake flags I am observing projects/libcxx/include/cmath errors...
  ...'::signbit' has not been declared
  ...'::fpclassify' has not been declared
  ...'::isfinite' has not been declared
  ...

My environment is...
  Glibc-2.12.1
  Binutils-2.24
  Gcc-4.92.
  Llvm-3.8.0

Cmake flags...
        -DBUILD_SHARED_LIBS=ON \
        -DCMAKE_BUILD_TYPE="Release" \
        -DCMAKE_CXX_COMPILER=$GCC_ROOT/bin/g++ \
        -DCMAKE_CXX_FLAGS="$CXXFLAGS" \
        -DCMAKE_CXX_LINK_FLAGS="$LDFLAGS" \
        -DCMAKE_C_COMPILER=$GCC_ROOT/bin/gcc \
        -DCMAKE_C_FLAGS="$CFLAGS" \
       -DCMAKE_C_LINK_FLAGS="$LDFLAGS" \
        -DCMAKE_INSTALL_PREFIX=$PREFIX_DIR \
        -DCMAKE_LIBRARY_PATH=${BASE_DIR}/lib \
        -DCMAKE_SKIP_INSTALL_RPATH=OFF \
        -DCMAKE_SKIP_RPATH=OFF \
        -DCMAKE_SYSTEM_INCLUDE_PATH=$myincpath \
        -DCMAKE_SYSTEM_LIBRARY_PATH=$mylibpath \
        -DCMAKE_VERBOSE_MAKEFILE=ON \
        -DCURSES_NEED_NCURSES=TRUE \
        -DFFI_INCLUDE_DIR=$DESTROOT/lib/libffi-3.0.11/include \
        -DFFI_LIBRARY_DIR=$DESTROOT/lib \
        -DGCC_INSTALL_PREFIX=$GCC_ROOT \
        -DLLVM_BINUTILS_INCDIR=${DESTROOT}/include \
        -DLLVM_BUILD_32_BITS=OFF \
        -DLLVM_BUILD_EXAMPLES=ON \
        -DLLVM_ENABLE_CXX1Y=ON \
        -DLLVM_ENABLE_EH=ON \
        -DLLVM_ENABLE_FFI=ON \
        -DLLVM_ENABLE_LIBCXX=ON \
        -DLLVM_ENABLE_RTTI=ON \
        -DLLVM_ENABLE_THREADS=ON \
        -DLLVM_ENABLE_ZLIB=ON \
        -DLLVM_INCLUDE_EXAMPLES=ON \
        -DLLVM_INCLUDE_UTILS=ON \
        -DLLVM_OPTIMIZED_TABLEGEN=ON \
        -DLLVM_PARALLEL_COMPILE_JOBS=15 \
        -DLLVM_PARALLEL_LINK_JOBS=15 \
        -DLLVM_TARGETS_TO_BUILD="X86" \
        -DLLVM_TARGETS_WITH_JIT="X86"

Any suggestions?

Thank you in advance.
-H

Can you post the full error log please?

/Eric

cmake -E cmake_progress_report llvm-3.8.0.src_bld_x86_64-rhel6.4-linux-gnu/CMakeFiles

In file included from llvm-3.8.0.src/projects/libcxx/include/__hash_table:19:0,

from llvm-3.8.0.src/projects/libcxx/src/hash.cpp:10:

llvm-3.8.0.src/projects/libcxx/include/cmath:310:9: error: ‘::signbit’ has not been declared

using ::signbit;

^

llvm-3.8.0.src/projects/libcxx/include/cmath:311:9: error: ‘::fpclassify’ has not been declared

using ::fpclassify;

^

llvm-3.8.0.src/projects/libcxx/include/cmath:312:9: error: ‘::isfinite’ has not been declared

using ::isfinite;

^

llvm-3.8.0.src/projects/libcxx/include/cmath:315:9: error: ‘::isnormal’ has not been declared

using ::isnormal;

^

llvm-3.8.0.src/projects/libcxx/include/cmath:316:9: error: ‘::isgreater’ has not been declared

using ::isgreater;

^

llvm-3.8.0.src/projects/libcxx/include/cmath:317:9: error: ‘::isgreaterequal’ has not been declared

using ::isgreaterequal;

^

llvm-3.8.0.src/projects/libcxx/include/cmath:318:9: error: ‘::isless’ has not been declared

using ::isless;

^

llvm-3.8.0.src/projects/libcxx/include/cmath:319:9: error: ‘::islessequal’ has not been declared

using ::islessequal;

^

llvm-3.8.0.src/projects/libcxx/include/cmath:320:9: error: ‘::islessgreater’ has not been declared

using ::islessgreater;

^

llvm-3.8.0.src/projects/libcxx/include/cmath:321:9: error: ‘::isunordered’ has not been declared

using ::isunordered;

^

llvm-3.8.0.src/projects/libcxx/include/cmath:322:9: error: ‘::isunordered’ has not been declared

using ::isunordered;

^

llvm-3.8.0.src/projects/libcxx/include/cmath:328:9: error: ‘::abs’ has not been declared

using ::abs;

^

In file included from llvm-3.8.0.src/projects/libcxx/include/functional:475:0,

from llvm-3.8.0.src/projects/libcxx/include/experimental/optional:144,

from llvm-3.8.0.src/projects/libcxx/src/optional.cpp:10:

llvm-3.8.0.src/projects/libcxx/include/typeinfo: In member function ‘size_t std::type_info::hash_code() const’:

llvm-3.8.0.src/projects/libcxx/include/typeinfo:116:62: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]

{return reinterpret_cast<const size_t>(&__type_name);}

^

cmake -E cmake_progress_report llvm-3.8.0.src_bld_x86_64-rhel6.4-linux-gnu/CMakeFiles

In file included from llvm-3.8.0.src/projects/libcxx/include/__hash_table:14:0,

from llvm-3.8.0.src/projects/libcxx/src/hash.cpp:10:

llvm-3.8.0.src/projects/libcxx/include/__config:448:50: warning: ‘unused’ attribute ignored [-Wattributes]

#define _LIBCPP_UNUSED attribute((unused))

^

Thank you.

-H

Well unfortunately that doesn’t help me either. Something really weird seems to be going on because libc++ provides the definition for these functions itself it libcxx/include/math.h. I suspect that maybe CMake is really messing up the compiler invocation but honestly I have no clue.

Could you provide the compiler invocation used for that file?

/Eric

Sorry Eric for late reply…

Could you provide the compiler invocation used for that file?

Probably attached build log may help…

Appreciate your help.

Thank you.

-Hiral

llvm-3.8.0_log.txt (2.05 MB)