From 1342c8f18e48afd1577cfdc319c254ce7c42637e Mon Sep 17 00:00:00 2001 From: eldritch horrors Date: Thu, 7 Mar 2024 07:12:20 +0100 Subject: [PATCH] Merge pull request #10074 from lf-/jade/ban-implicit-fallthrough Warn on implicit switch case fallthrough (cherry picked from commit 21282c3c204597641402c6bcff8fc9ee7bc31fa1) Change-Id: I5ebbdfb6c037d2c55254f37dd391c07c2ce7443e --- Makefile | 2 +- src/libexpr/lexer.l | 6 ++++++ tests/unit/libstore-support/tests/path.cc | 2 ++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 1d3d9df5d..313f02ede 100644 --- a/Makefile +++ b/Makefile @@ -68,4 +68,4 @@ endif include mk/lib.mk -GLOBAL_CXXFLAGS += -g -Wall -include $(buildprefix)config.h -std=c++2a -I src +GLOBAL_CXXFLAGS += -g -Wall -Wimplicit-fallthrough -include $(buildprefix)config.h -std=c++2a -I src diff --git a/src/libexpr/lexer.l b/src/libexpr/lexer.l index df2cbd06f..ced1c4c39 100644 --- a/src/libexpr/lexer.l +++ b/src/libexpr/lexer.l @@ -20,6 +20,12 @@ #pragma clang diagnostic ignored "-Wunneeded-internal-declaration" #endif +// yacc generates code that uses unannotated fallthrough. +#pragma GCC diagnostic ignored "-Wimplicit-fallthrough" +#ifdef __clang__ +#pragma clang diagnostic ignored "-Wimplicit-fallthrough" +#endif + #include #include "nixexpr.hh" diff --git a/tests/unit/libstore-support/tests/path.cc b/tests/unit/libstore-support/tests/path.cc index e5f169e94..8bf501ab6 100644 --- a/tests/unit/libstore-support/tests/path.cc +++ b/tests/unit/libstore-support/tests/path.cc @@ -33,6 +33,7 @@ Gen Arbitrary::arbitrary() switch (auto i = *gen::inRange(0, 10 + 2 * 26 + 6)) { case 0 ... 9: pre += '0' + i; + break; case 10 ... 35: pre += 'A' + (i - 10); break; @@ -52,6 +53,7 @@ Gen Arbitrary::arbitrary() pre += '.'; break; } + [[fallthrough]]; case 65: pre += '_'; break;