diff --git a/Makefile.include b/Makefile.include
index 137ad480bc897b827f81e58d3bc97dc55be6e634..35edb0c0e96689ef53b598852ef5364d6bc5ce79 100644
--- a/Makefile.include
+++ b/Makefile.include
@@ -141,10 +141,6 @@ ifeq ($(WPEDANTIC),1)
   CFLAGS += -Wpedantic
 endif
 
-# remove this once codebase is adapted
-CFLAGS += -Wno-implicit-fallthrough
-CXXFLAGS += -Wno-implicit-fallthrough
-
 ifneq (10,$(if $(RIOT_VERSION),1,0)$(if $(__RIOTBUILD_FLAG),1,0))
 
 # Provide a shallow sanity check. You cannot call `make` in a module directory.
@@ -248,6 +244,16 @@ include $(RIOTCPU)/$(CPU)/Makefile.include
 # Import all toolchain settings
 include $(RIOTMAKE)/toolchain/$(TOOLCHAIN).inc.mk
 
+# Tell ccache to pass the original file to the compiler, instead of passing the
+# preprocessed code. Without this setting, the compilation will fail with
+# -Wimplicit-fallthrough warnings even when the fall through case is properly
+# commented because the preprocessor has stripped the comments from the code.
+# This also fixes some other false warnings when compiling with LLVM/Clang.
+# The environment variable only affects builds with ccache (e.g. on CI/Murdock).
+# Non cached builds are not affected in any way.
+# For more information, see http://petereisentraut.blogspot.com/2011/09/ccache-and-clang-part-2.html
+export CCACHE_CPP2=yes
+
 # get number of interfaces straight before resolving dependencies
 GNRC_NETIF_NUMOF ?= 1
 
diff --git a/drivers/sht1x/sht1x_saul.c b/drivers/sht1x/sht1x_saul.c
index 7c0abd92551c7178b4da06e173c908aafe42b785..50c52eea90ac93b79eed1f151688f7a755f4dfe5 100644
--- a/drivers/sht1x/sht1x_saul.c
+++ b/drivers/sht1x/sht1x_saul.c
@@ -41,6 +41,7 @@ static int read(const sht1x_dev_t *dev, int16_t *temp, int16_t *hum)
                 continue;
             case -ECANCELED:
                 puts("[sht1x] Measurement times out");
+                /* falls through */
             default:
                 /* Other failure, cannot recover so giving up */
                 return -1;