Index: libcxx/trunk/src/CMakeLists.txt =================================================================== --- libcxx/trunk/src/CMakeLists.txt +++ libcxx/trunk/src/CMakeLists.txt @@ -349,7 +349,12 @@ if (LIBCXX_HERMETIC_STATIC_LIBRARY) append_flags_if_supported(CXX_STATIC_LIBRARY_FLAGS -fvisibility=hidden) - append_flags_if_supported(CXX_STATIC_LIBRARY_FLAGS -fvisibility-global-new-delete-hidden) + # If the hermetic library doesn't define the operator new/delete functions + # then its code shouldn't declare them with hidden visibility. They might + # actually be provided by a shared library at link time. + if (LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS) + append_flags_if_supported(CXX_STATIC_LIBRARY_FLAGS -fvisibility-global-new-delete-hidden) + endif() target_compile_options(cxx_static PRIVATE ${CXX_STATIC_LIBRARY_FLAGS}) target_compile_definitions(cxx_static PRIVATE _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS) endif() Index: llvm/trunk/utils/gn/secondary/libcxx/src/BUILD.gn =================================================================== --- llvm/trunk/utils/gn/secondary/libcxx/src/BUILD.gn +++ llvm/trunk/utils/gn/secondary/libcxx/src/BUILD.gn @@ -84,6 +84,9 @@ "_CRT_STDIO_ISO_WIDE_SPECIFIERS", ] } + if (!libcxx_enable_new_delete_definitions) { + defines += [ "_LIBCPP_DISABLE_NEW_DELETE_DEFINITIONS" ] + } if (libcxx_enable_exceptions) { if (current_os == "win") { cflags_cc += [ "/EHsc" ] @@ -97,7 +100,7 @@ } else { cflags_cc += [ "-fno-exceptions" ] } - defines += [ "-D_LIBCPP_NO_EXCEPTIONS" ] + defines += [ "_LIBCPP_NO_EXCEPTIONS" ] } if (!libcxx_enable_rtti) { if (current_os == "win") { @@ -105,7 +108,7 @@ } else { cflags_cc += [ "-fno-rtti" ] } - defines += [ "-D_LIBCPP_NO_RTTI" ] + defines += [ "_LIBCPP_NO_RTTI" ] } } @@ -251,7 +254,9 @@ sources = cxx_sources if (libcxx_hermetic_static_library) { cflags = [ "-fvisibility=hidden" ] - cflags_cc = [ "-fvisibility-global-new-delete-hidden" ] + if (libcxx_enable_new_delete_definitions) { + cflags_cc = [ "-fvisibility-global-new-delete-hidden" ] + } defines = [ "_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS" ] } deps = [