Skip to content
This repository has been archived by the owner on Jan 23, 2023. It is now read-only.

Commit

Permalink
Browse files Browse the repository at this point in the history
Fix build on clang 5 (#27178)
This contains two fixes, both related to new warnings introduced with
clang 5:
http://releases.llvm.org/5.0.0/tools/clang/docs/ReleaseNotes.html

1. clang 5 introduces a -Wzero-as-null-pointer-constant warning, which
becomes an error with Werror. This warning is not known by older
versions of clang and affects a lot of C/C++ code, such as:

    static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;

It also affects code we pick up from our dependency libraries. Lets
check if the compiler knows about this warning and disable it if so.

2. clang 5 introduces checks for casts. The library expects a `char *`,
so lets cast our pointer to the expected type so it will continue
working.
  • Loading branch information
omajid authored and stephentoub committed Feb 16, 2018
1 parent af8e08a commit a9f4a46
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 1 deletion.
3 changes: 3 additions & 0 deletions src/Native/Unix/CMakeLists.txt
Expand Up @@ -259,6 +259,9 @@ add_subdirectory(System.IO.Compression.Native)

add_compile_options(-Weverything)
add_compile_options(-Wno-c++98-compat-pedantic)
if (HAVE_ZERO_AS_NULL_POINTER_CONSTANT_FLAG)
add_compile_options(-Wno-zero-as-null-pointer-constant)
endif()

add_subdirectory(System.Native)
add_subdirectory(System.Net.Http.Native)
Expand Down
Expand Up @@ -609,6 +609,6 @@ extern "C" void CryptoNative_SslGet0AlpnSelected(SSL* ssl, const uint8_t** proto

extern "C" int32_t CryptoNative_SslSetTlsExtHostName(SSL* ssl, const uint8_t* name)
{
return static_cast<int32_t>(SSL_set_tlsext_host_name(ssl, name));
return static_cast<int32_t>(SSL_set_tlsext_host_name(ssl, const_cast<unsigned char*>(name)));
}

8 changes: 8 additions & 0 deletions src/Native/Unix/configure.cmake
@@ -1,3 +1,4 @@
include(CheckCXXCompilerFlag)
include(CheckCXXSourceCompiles)
include(CheckCXXSourceRuns)
include(CheckCSourceCompiles)
Expand Down Expand Up @@ -29,6 +30,13 @@ endif ()
# We compile with -Werror, so we need to make sure these code fragments compile without warnings.
set(CMAKE_REQUIRED_FLAGS -Werror)

# This compiler warning will fail code as innocuous as:
# static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
# Check if the compiler knows about this warning so we can disable it
check_cxx_compiler_flag(
-Wzero-as-null-pointer-constant
HAVE_ZERO_AS_NULL_POINTER_CONSTANT_FLAG)

# in_pktinfo: Find whether this struct exists
check_include_files(
"sys/socket.h;linux/in.h"
Expand Down

0 comments on commit a9f4a46

Please sign in to comment.