diff --git a/CppCoreGuidelines.md b/CppCoreGuidelines.md
index 372a512..914a656 100644
--- a/CppCoreGuidelines.md
+++ b/CppCoreGuidelines.md
@@ -9890,7 +9890,7 @@ Statement rules:
* [ES.75: Avoid `do`-statements](#Res-do)
* [ES.76: Avoid `goto`](#Res-goto)
* [ES.77: Minimize the use of `break` and `continue` in loops](#Res-continue)
-* [ES.78: Always end a non-empty `case` with a `break`](#Res-break)
+* [ES.78: Don't rely on implicit fallthrough in `switch` statements](#Res-break)
* [ES.79: Use `default` to handle common cases (only)](#Res-default)
* [ES.84: Don't try to declare a local variable with no name](#Res-noname)
* [ES.85: Make empty statements visible](#Res-empty)
@@ -12663,11 +12663,11 @@ If you really need to break out a loop, a `break` is typically better than alter
???
-### ES.78: Always end a non-empty `case` with a `break`
+### ES.78: Don't rely on implicit fallthrough in `switch` statements
##### Reason
-Accidentally leaving out a `break` is a fairly common bug.
+Always end a non-empty `case` with a `break`. Accidentally leaving out a `break` is a fairly common bug.
A deliberate fallthrough can be a maintenance hazard and should be rare and explicit.
##### Example
@@ -12694,6 +12694,16 @@ Multiple case labels of a single statement is OK:
break;
}
+Return statements in a case label are also OK:
+ switch (x) {
+ case 'a':
+ return 1;
+ case 'b':
+ return 2;
+ case 'c':
+ return 3;
+ }
+
##### Exceptions
In rare cases if fallthrough is deemed appropriate, be explicit and use the `[[fallthrough]]` annotation: