Index: cmake/modules/HandleLLVMOptions.cmake =================================================================== --- cmake/modules/HandleLLVMOptions.cmake +++ cmake/modules/HandleLLVMOptions.cmake @@ -229,6 +229,9 @@ # MinGW warns if -fvisibility-inlines-hidden is used. check_cxx_compiler_flag("-fvisibility-inlines-hidden" SUPPORTS_FVISIBILITY_INLINES_HIDDEN_FLAG) append_if(SUPPORTS_FVISIBILITY_INLINES_HIDDEN_FLAG "-fvisibility-inlines-hidden" CMAKE_CXX_FLAGS) + + check_cxx_compiler_flag("-fvisibility=protected" SUPPORTS_FVISIBILITY_PROTECTED_FLAG) + append_if(SUPPORTS_FVISIBILITY_INLINES_HIDDEN_FLAG "-fvisibility=protected" CMAKE_CXX_FLAGS) endif() if( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT WIN32 ) Index: include/llvm/Support/Compiler.h =================================================================== --- include/llvm/Support/Compiler.h +++ include/llvm/Support/Compiler.h @@ -101,8 +101,10 @@ #if (__has_attribute(visibility) || LLVM_GNUC_PREREQ(4, 0, 0)) && \ !defined(__MINGW32__) && !defined(__CYGWIN__) && !defined(LLVM_ON_WIN32) #define LLVM_LIBRARY_VISIBILITY __attribute__ ((visibility("hidden"))) +#define LLVM_PREEMPTIBLE_VISIBILITY __attribute__ ((visibility("default"))) #else #define LLVM_LIBRARY_VISIBILITY +#define LLVM_PREEMPTIBLE_VISIBILITY #endif #if defined(__GNUC__) Index: utils/unittest/UnitTestMain/TestMain.cpp =================================================================== --- utils/unittest/UnitTestMain/TestMain.cpp +++ utils/unittest/UnitTestMain/TestMain.cpp @@ -21,7 +21,7 @@ const char *TestMainArgv0; -int main(int argc, char **argv) { +LLVM_PREEMPTIBLE_VISIBILITY int main(int argc, char **argv) { llvm::sys::PrintStackTraceOnErrorSignal(argv[0], true /* Disable crash reporting */);