Since sys-devel/clang-4.0.0 the build doesn't define NDEBUG anymore. Despite -DCMAKE_BUILD_TYPE=RelWithDebInfo is set, clang is build with assertions. This breaks the cpp-parser from kdevelop: https://bugs.kde.org/show_bug.cgi?id=376149 Not tested, but sys-devel/llvm could be affected too.
See-Also: https://bugs.kde.org/show_bug.cgi?id=376149 See-Also: https://bugs.llvm.org//show_bug.cgi?id=21905 Maybe related: See-Also: https://bugs.llvm.org//show_bug.cgi?id=22938
I'll need to check whether LLVM_ENABLE_ASSERTIONS is propagated correctly.
$ grep LLVM_ENABLE_ASSERT CMakeCache.txt LLVM_ENABLE_ASSERTIONS:BOOL=ON So I suppose it doesn't get the value from LLVMConfig. I'm going to check 5 as well, and commit a fix in a few minutes.
commit 9e3db5e62f63c3c169e9c60f5ac5acc43ae87160 Author: Michał Górny <mgorny@gentoo.org> AuthorDate: Fri Apr 14 16:31:14 2017 Commit: Michał Górny <mgorny@gentoo.org> CommitDate: Fri Apr 14 16:51:21 2017 sys-devel/clang: Fix respecting USE=debug for asserts, #614844
Actually, the issue seems to be deeper: $ llvm-config --assertion-mode ON It seems that the logic is based on state of NDEBUG in llvm-config, which makes me worry the cflag magic around cmake and llvm fails at some point.
$ llvm-config --assertion-mode OFF but when building llvm or clang, NDEBUG is not set: [1/1599] /usr/lib64/distcc/bin/x86_64-pc-linux-gnu-g++ -m32 -DLLVM_BUILD_GLOBAL_ISEL -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Iutils/TableGen -I/var/tmp/portage/sys-devel/llvm-9999/work/llvm-9999/utils/TableGen -Iinclude -I/var/tmp/portage/sys-devel/llvm-9999/work/llvm-9999/include -O2 -march=bdver4 -mmmx -mno-3dnow -msse -msse2 -msse3 -mssse3 -msse4a -mcx16 -msahf -mmovbe -maes -mno-sha -mpclmul -mpopcnt -mabm -mlwp -mfma -mfma4 -mxop -mbmi -mbmi2 -mtbm -mavx -mavx2 -msse4.2 -msse4.1 -mlzcnt -mno-rtm -mno-hle -mrdrnd -mf16c -mfsgsbase -mno-rdseed -mprfchw -mno-adx -mfxsr -mxsave -mxsaveopt -mno-avx512f -mno-avx512er -mno-avx512cd -mno-avx512pf -mno-prefetchwt1 -mno-clflushopt -mno-xsavec -mno-xsaves -mno-avx512dq -mno-avx512bw -mno-avx512vl -mno-avx512ifma -mno-avx512vbmi -mno-clwb -mmwaitx -mno-clzero -mno-pku --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=1024 -mtune=bdver4 -ftree-vectorize -fvect-cost-model -pipe -fPIC -fvisibility-inlines-hidden -Werror=date-time -std=c++11 -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wno-maybe-uninitialized -Wdelete-non-virtual-dtor -Wno-comment -ffunction-sections -fdata-sections -MD -MT utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/AsmWriterInst.cpp.o -MF utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/AsmWriterInst.cpp.o.d -o utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/AsmWriterInst.cpp.o -c /var/tmp/portage/sys-devel/llvm-9999/work/llvm-9999/utils/TableGen/AsmWriterInst.cpp [1/858] /usr/lib64/distcc/bin/x86_64-pc-linux-gnu-g++ -m32 -DCLANG_ENABLE_ARCMT -DCLANG_ENABLE_OBJC_REWRITER -DCLANG_ENABLE_STATIC_ANALYZER -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Iutils/TableGen -I/var/tmp/portage/sys-devel/clang-9999/work/x/y/clang-9999/utils/TableGen -I/var/tmp/portage/sys-devel/clang-9999/work/x/y/clang-9999/include -Iinclude -I/usr/lib64/llvm/5/include -O2 -march=bdver4 -mmmx -mno-3dnow -msse -msse2 -msse3 -mssse3 -msse4a -mcx16 -msahf -mmovbe -maes -mno-sha -mpclmul -mpopcnt -mabm -mlwp -mfma -mfma4 -mxop -mbmi -mbmi2 -mtbm -mavx -mavx2 -msse4.2 -msse4.1 -mlzcnt -mno-rtm -mno-hle -mrdrnd -mf16c -mfsgsbase -mno-rdseed -mprfchw -mno-adx -mfxsr -mxsave -mxsaveopt -mno-avx512f -mno-avx512er -mno-avx512cd -mno-avx512pf -mno-prefetchwt1 -mno-clflushopt -mno-xsavec -mno-xsaves -mno-avx512dq -mno-avx512bw -mno-avx512vl -mno-avx512ifma -mno-avx512vbmi -mno-clwb -mmwaitx -mno-clzero -mno-pku --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=1024 -mtune=bdver4 -ftree-vectorize -fvect-cost-model -pipe -fPIC -fvisibility-inlines-hidden -Werror=date-time -std=c++11 -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -Wdelete-non-virtual-dtor -Wno-comment -ffunction-sections -fdata-sections -fno-common -Woverloaded-virtual -fno-strict-aliasing -pedantic -Wno-long-long -MD -MT utils/TableGen/CMakeFiles/obj.clang-tblgen.dir/ClangCommentHTMLNamedCharacterReferenceEmitter.cpp.o -MF utils/TableGen/CMakeFiles/obj.clang-tblgen.dir/ClangCommentHTMLNamedCharacterReferenceEmitter.cpp.o.d -o utils/TableGen/CMakeFiles/obj.clang-tblgen.dir/ClangCommentHTMLNamedCharacterReferenceEmitter.cpp.o -c /var/tmp/portage/sys-devel/clang-9999/work/x/y/clang-9999/utils/TableGen/ClangCommentHTMLNamedCharacterReferenceEmitter.cpp building llvm-3.9.1-r1, NDEBUG is set by the build-system: [1/3151] /usr/lib64/distcc/bin/x86_64-pc-linux-gnu-g++ -m32 -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Ilib/Support -I/var/tmp/portage/sys-devel/llvm-3.9.1/work/llvm-3.9.1.src/lib/Support -Iinclude -I/var/tmp/portage/sys-devel/llvm-3.9.1/work/llvm-3.9.1.src/include -DNDEBUG -O2 -march=bdver4 -mmmx -mno-3dnow -msse -msse2 -msse3 -mssse3 -msse4a -mcx16 -msahf -mmovbe -maes -mno-sha -mpclmul -mpopcnt -mabm -mlwp -mfma -mfma4 -mxop -mbmi -mbmi2 -mtbm -mavx -mavx2 -msse4.2 -msse4.1 -mlzcnt -mno-rtm -mno-hle -mrdrnd -mf16c -mfsgsbase -mno-rdseed -mprfchw -mno-adx -mfxsr -mxsave -mxsaveopt -mno-avx512f -mno-avx512er -mno-avx512cd -mno-avx512pf -mno-prefetchwt1 -mno-clflushopt -mno-xsavec -mno-xsaves -mno-avx512dq -mno-avx512bw -mno-avx512vl -mno-avx512ifma -mno-avx512vbmi -mno-clwb -mmwaitx -mno-clzero -mno-pku --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=1024 -mtune=bdver4 -ftree-vectorize -fvect-cost-model -pipe -fPIC -fvisibility-inlines-hidden -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wno-maybe-uninitialized -Wdelete-non-virtual-dtor -Wno-comment -Werror=date-time -std=c++11 -ffunction-sections -fdata-sections -fPIC -MD -MT lib/Support/CMakeFiles/LLVMSupport.dir/ARMBuildAttrs.cpp.o -MF lib/Support/CMakeFiles/LLVMSupport.dir/ARMBuildAttrs.cpp.o.d -o lib/Support/CMakeFiles/LLVMSupport.dir/ARMBuildAttrs.cpp.o -c /var/tmp/portage/sys-devel/llvm-3.9.1/work/llvm-3.9.1.src/lib/Support/ARMBuildAttrs.cpp
These two should be more correct. commit 98f46d0de5bc6d9d608e3453c8e435d2e49e1a65 Author: Michał Górny <mgorny@gentoo.org> AuthorDate: Sat Apr 15 00:36:37 2017 Commit: Michał Górny <mgorny@gentoo.org> CommitDate: Sat Apr 15 00:38:54 2017 sys-devel/clang: Fix passing -DNDEBUG to build, #614844 commit 4a072e71088b37888ae219b3aa0ae490938b9a5d Author: Michał Górny <mgorny@gentoo.org> AuthorDate: Sat Apr 15 00:34:11 2017 Commit: Michał Górny <mgorny@gentoo.org> CommitDate: Sat Apr 15 00:38:53 2017 sys-devel/llvm: Fix passing -DNDEBUG to build, #614844
works now, but I think the real root cause is in cmake-utils.eclass: # Wipe the default optimization flags out of CMake if [[ ${CMAKE_BUILD_TYPE} != Gentoo ]] && ! has "${EAPI}" 2 3 4 5; then cat >> ${common_config} <<- _EOF_ || die SET (CMAKE_ASM_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "") SET (CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "") SET (CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "") SET (CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "") SET (CMAKE_EXE_LINKER_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "") SET (CMAKE_MODULE_LINKER_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "") SET (CMAKE_SHARED_LINKER_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "") SET (CMAKE_STATIC_LINKER_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "") _EOF_ fi llvm/clang-ebuilds earlier than 4.0.0 are setting BUILD_TYPE to Gentoo, so the initial cache is not modified here. With version 4.0.0, BUILD_TYPE is set to RelWithDebInfo. This way, portage is modifying the defaults from llvm/clang with initial_cache settings: initial cache for llvm-3.9.1-r1 SET (CMAKE_GENTOO_BUILD ON CACHE BOOL "Indicate Gentoo package build") SET (LIB_SUFFIX 64 CACHE STRING "library path suffix" FORCE) SET (CMAKE_INSTALL_LIBDIR lib64 CACHE PATH "Output directory for libraries") initial cache for llvm-9999 SET (CMAKE_GENTOO_BUILD ON CACHE BOOL "Indicate Gentoo package build") SET (LIB_SUFFIX 64 CACHE STRING "library path suffix" FORCE) SET (CMAKE_INSTALL_LIBDIR lib64 CACHE PATH "Output directory for libraries") SET (CMAKE_ASM_FLAGS_RELWITHDEBINFO "" CACHE STRING "") SET (CMAKE_C_FLAGS_RELWITHDEBINFO "" CACHE STRING "") SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "" CACHE STRING "") SET (CMAKE_Fortran_FLAGS_RELWITHDEBINFO "" CACHE STRING "") SET (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "" CACHE STRING "") SET (CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO "" CACHE STRING "") SET (CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "" CACHE STRING "") SET (CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO "" CACHE STRING "") I don't know if EAPI 6 is omitted intentionally in the check above. If not, it should just added there, and the llvm-/clang-ebuilds should be fine without further modifications.