From: Daniel Arndt <daniel.arndt@iwr.uni-heidelberg.de>
Date: Sun, 22 Oct 2017 13:12:30 +0000 (+0200)
Subject: Detect unused variables and unused functions with clang
X-Git-Tag: v9.0.0-rc1~903^2~1
X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d1ac4adf46f2a8c5be6b7fe46de70b0c29feed0d;p=dealii.git

Detect unused variables and unused functions with clang
---

diff --git a/cmake/setup_compiler_flags_gnu.cmake b/cmake/setup_compiler_flags_gnu.cmake
index 04a3761c22..53f2290872 100644
--- a/cmake/setup_compiler_flags_gnu.cmake
+++ b/cmake/setup_compiler_flags_gnu.cmake
@@ -94,7 +94,6 @@ IF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
   ENABLE_IF_SUPPORTED(DEAL_II_CXX_FLAGS "-Wno-unsupported-friend")
 
   ENABLE_IF_SUPPORTED(DEAL_II_CXX_FLAGS "-Wno-unused-parameter")
-  ENABLE_IF_SUPPORTED(DEAL_II_CXX_FLAGS "-Wno-unused-variable")
 
   #
   # Disable a diagnostic that warns about potentially uninstantiated static
@@ -106,12 +105,18 @@ IF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
   # Clang versions prior to 3.6 emit a lot of false positives wrt
   # "-Wunused-function". Also suppress warnings for Xcode older than 6.3
   # (which is equivalent to clang < 3.6).
-  #
-  # FIXME: I wait for the day with a clang version "4.0"... and I will
-  # curse the person that thought it is a _great_ idea to come up with
-  # independent version numbers for clang on Mac...
-  #
-  IF( CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.6" OR
+  # Policy CMP0025 allows to differentiate between Clang and AppleClang
+  # which admits a more fine-grained control. Otherwise, we are left
+  # with just disabling this feature for all versions between 4.0 and 6.3.
+  #
+  IF (POLICY CMP0025)
+    IF( (CMAKE_CXX_COMPILER_ID STREQUAL "Clang"
+         AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.6")
+        OR (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang"
+         AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6.3"))
+      ENABLE_IF_SUPPORTED(DEAL_II_CXX_FLAGS "-Wno-unused-function")
+    ENDIF()
+  ELSEIF(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.6" OR
       ( NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.0" AND
         CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6.3") )
     ENABLE_IF_SUPPORTED(DEAL_II_CXX_FLAGS "-Wno-unused-function")
diff --git a/source/dummy.cc b/source/dummy.cc
index 37ebf06eb0..19ae7b02a4 100644
--- a/source/dummy.cc
+++ b/source/dummy.cc
@@ -21,4 +21,7 @@
  */
 
 const int global_symbol_42 = 42;
-
+void use_global_symbol_42()
+{
+  (void) global_symbol_42;
+}