diff mbox

[ovs-dev] Fix some -Wimplicit-fallthrough warnings building with GCC 7

Message ID fe8284630005efca25e248ffeb7cb2f977d6a0ba.1498234320.git.tredaelli@redhat.com
State Accepted
Headers show

Commit Message

Timothy Redaelli June 23, 2017, 4:12 p.m. UTC
-Wimplicit-fallthrough warns when a switch case falls through and since this
warning is enabled by -Wextra it breaks building with --enable-Werror.

Added "/* fall through */" comment when needed in order to avoid the warning.

Signed-off-by: Timothy Redaelli <tredaelli@redhat.com>
---

From GCC 7 Release Note:                                                        
-Wimplicit-fallthrough warns when a switch case falls through.                  
This warning has five different levels.                                         
The compiler is able to parse a wide range of fallthrough comments,             
depending on the level.                                                         
It also handles control-flow statements, such as ifs.                           
It's possible to suppress the warning by either adding a fallthrough comment,   
or by using a null statement: __attribute__ ((fallthrough));                    
(C, C++), or [[fallthrough]]; (C++17), or [[gnu::fallthrough]]; (C++11/C++14).  
This warning is enabled by -Wextra.

 lib/fat-rwlock.c          |   1 +
 lib/flow.c                |   2 +-
 lib/hash.c                |  15 ++++++-
 lib/ofp-util.c            |   1 +
 lib/rstp-state-machines.c | 102 +++++++++++++++++++++++-----------------------
 ofproto/bond.c            |   1 +
 ovn/lib/lex.c             |   3 +-
 ovn/utilities/ovn-nbctl.c |   2 +
 ovn/utilities/ovn-sbctl.c |   2 +
 tests/test-ovn.c          |   1 +
 utilities/ovs-vsctl.c     |   2 +
 11 files changed, 78 insertions(+), 54 deletions(-)

Comments

Ben Pfaff July 11, 2017, 8:07 p.m. UTC | #1
On Fri, Jun 23, 2017 at 06:12:49PM +0200, Timothy Redaelli wrote:
> -Wimplicit-fallthrough warns when a switch case falls through and since this
> warning is enabled by -Wextra it breaks building with --enable-Werror.
> 
> Added "/* fall through */" comment when needed in order to avoid the warning.
> 
> Signed-off-by: Timothy Redaelli <tredaelli@redhat.com>
> ---
> 
> From GCC 7 Release Note:                                                        
> -Wimplicit-fallthrough warns when a switch case falls through.                  
> This warning has five different levels.                                         
> The compiler is able to parse a wide range of fallthrough comments,             
> depending on the level.                                                         
> It also handles control-flow statements, such as ifs.                           
> It's possible to suppress the warning by either adding a fallthrough comment,   
> or by using a null statement: __attribute__ ((fallthrough));                    
> (C, C++), or [[fallthrough]]; (C++17), or [[gnu::fallthrough]]; (C++11/C++14).  
> This warning is enabled by -Wextra.

Thanks!

I guess that since -Wextra enables this, we don't need to add any new
options ourselves?

I applied this to master.
diff mbox

Patch

diff --git a/lib/fat-rwlock.c b/lib/fat-rwlock.c
index 19b714907..d913b2088 100644
--- a/lib/fat-rwlock.c
+++ b/lib/fat-rwlock.c
@@ -270,6 +270,7 @@  fat_rwlock_unlock(const struct fat_rwlock *rwlock_)
 
     case 1:
         ovs_mutex_unlock(&this->mutex);
+        /* fall through */
     default:
         this->depth--;
         break;
diff --git a/lib/flow.c b/lib/flow.c
index d73e796a2..75c124051 100644
--- a/lib/flow.c
+++ b/lib/flow.c
@@ -2032,7 +2032,7 @@  flow_mask_hash_fields(const struct flow *flow, struct flow_wildcards *wc,
             memset(&wc->masks.tp_src, 0xff, sizeof wc->masks.tp_src);
             memset(&wc->masks.tp_dst, 0xff, sizeof wc->masks.tp_dst);
         }
-        /* no break */
+        /* fall through */
     case NX_HASH_FIELDS_SYMMETRIC_L3L4:
         if (flow->dl_type == htons(ETH_TYPE_IP)) {
             memset(&wc->masks.nw_src, 0xff, sizeof wc->masks.nw_src);
diff --git a/lib/hash.c b/lib/hash.c
index aa898a3b8..321f9d927 100644
--- a/lib/hash.c
+++ b/lib/hash.c
@@ -282,37 +282,50 @@  hash_bytes128(const void *p_, size_t len, uint32_t basis, ovs_u128 *out)
     switch (len & 15) {
     case 15:
         k2 ^= ((uint64_t) tail[14]) << 48;
+        /* fall through */
     case 14:
         k2 ^= ((uint64_t) tail[13]) << 40;
+        /* fall through */
     case 13:
         k2 ^= ((uint64_t) tail[12]) << 32;
+        /* fall through */
     case 12:
         k2 ^= ((uint64_t) tail[11]) << 24;
+        /* fall through */
     case 11:
         k2 ^= ((uint64_t) tail[10]) << 16;
+        /* fall through */
     case 10:
         k2 ^= ((uint64_t) tail[9]) << 8;
+        /* fall through */
     case 9:
         k2 ^= ((uint64_t) tail[8]) << 0;
         k2 *= c2;
         k2 = hash_rot64(k2, 33);
         k2 *= c1;
         h2 ^= k2;
-
+        /* fall through */
     case 8:
         k1 ^= ((uint64_t) tail[7]) << 56;
+        /* fall through */
     case 7:
         k1 ^= ((uint64_t) tail[6]) << 48;
+        /* fall through */
     case 6:
         k1 ^= ((uint64_t) tail[5]) << 40;
+        /* fall through */
     case 5:
         k1 ^= ((uint64_t) tail[4]) << 32;
+        /* fall through */
     case 4:
         k1 ^= ((uint64_t) tail[3]) << 24;
+        /* fall through */
     case 3:
         k1 ^= ((uint64_t) tail[2]) << 16;
+        /* fall through */
     case 2:
         k1 ^= ((uint64_t) tail[1]) << 8;
+        /* fall through */
     case 1:
         k1 ^= ((uint64_t) tail[0]) << 0;
         k1 *= c1;
diff --git a/lib/ofp-util.c b/lib/ofp-util.c
index da171cdf6..f5fcb3232 100644
--- a/lib/ofp-util.c
+++ b/lib/ofp-util.c
@@ -9740,6 +9740,7 @@  ofputil_encode_group_mod(enum ofp_version ofp_version,
     switch (ofp_version) {
     case OFP10_VERSION:
         bad_group_cmd(gm->command);
+        /* fall through */
 
     case OFP11_VERSION:
     case OFP12_VERSION:
diff --git a/lib/rstp-state-machines.c b/lib/rstp-state-machines.c
index 5643c1028..8fdaec953 100644
--- a/lib/rstp-state-machines.c
+++ b/lib/rstp-state-machines.c
@@ -401,7 +401,7 @@  updt_roles_tree__(struct rstp *r)
             break;
         default:
             OVS_NOT_REACHED();
-            /* no break */
+            /* fall through */
         }
     }
     seq_change(connectivity_seq_get());
@@ -442,7 +442,7 @@  port_role_selection_sm(struct rstp *r)
     case PORT_ROLE_SELECTION_SM_INIT_BRIDGE_EXEC:
         updt_role_disabled_tree(r);
         r->port_role_selection_sm_state = PORT_ROLE_SELECTION_SM_INIT_BRIDGE;
-        /* no break */
+        /* fall through */
     case PORT_ROLE_SELECTION_SM_INIT_BRIDGE:
         r->port_role_selection_sm_state =
             PORT_ROLE_SELECTION_SM_ROLE_SELECTION_EXEC;
@@ -453,7 +453,7 @@  port_role_selection_sm(struct rstp *r)
         set_selected_tree(r);
         r->port_role_selection_sm_state =
             PORT_ROLE_SELECTION_SM_ROLE_SELECTION;
-        /* no break */
+        /* fall through */
     case PORT_ROLE_SELECTION_SM_ROLE_SELECTION:
         HMAP_FOR_EACH (p, node, &r->ports) {
             if (p->reselect) {
@@ -465,7 +465,7 @@  port_role_selection_sm(struct rstp *r)
         break;
     default:
         OVS_NOT_REACHED();
-        /* no break */
+        /* fall through */
     }
     if (old_state != r->port_role_selection_sm_state) {
         r->changes = true;
@@ -495,7 +495,7 @@  updt_bpdu_version(struct rstp_port *p)  /* [17.21.22] */
         break;
     default:
         OVS_NOT_REACHED();
-        /* no break */
+        /* fall through */
     }
 }
 
@@ -521,7 +521,7 @@  port_receive_sm(struct rstp_port *p)
         p->rcvd_msg = false;
         p->edge_delay_while = r->migrate_time;
         p->port_receive_sm_state = PORT_RECEIVE_SM_DISCARD;
-        /* no break */
+        /* fall through */
     case PORT_RECEIVE_SM_DISCARD:
         if ((p->rcvd_bpdu || (p->edge_delay_while != r->migrate_time))
             && !p->port_enabled) {
@@ -537,7 +537,7 @@  port_receive_sm(struct rstp_port *p)
         p->rcvd_msg = true;
         p->edge_delay_while = r->migrate_time;
         p->port_receive_sm_state = PORT_RECEIVE_SM_RECEIVE;
-        /* no break */
+        /* fall through */
     case PORT_RECEIVE_SM_RECEIVE:
         if ((p->rcvd_bpdu || (p->edge_delay_while != r->migrate_time))
             && !p->port_enabled) {
@@ -549,7 +549,7 @@  port_receive_sm(struct rstp_port *p)
         break;
     default:
         OVS_NOT_REACHED();
-        /* no break */
+        /* fall through */
     }
     if (old_state != p->port_receive_sm_state) {
         r->changes = true;
@@ -574,14 +574,14 @@  port_protocol_migration_sm(struct rstp_port *p)
     case PORT_PROTOCOL_MIGRATION_SM_INIT:
         p->port_protocol_migration_sm_state =
             PORT_PROTOCOL_MIGRATION_SM_CHECKING_RSTP_EXEC;
-        /* no break */
+        /* fall through */
     case PORT_PROTOCOL_MIGRATION_SM_CHECKING_RSTP_EXEC:
         p->mcheck = false;
         p->send_rstp = r->rstp_version;
         p->mdelay_while = r->migrate_time;
         p->port_protocol_migration_sm_state =
             PORT_PROTOCOL_MIGRATION_SM_CHECKING_RSTP;
-        /* no break */
+        /* fall through */
     case PORT_PROTOCOL_MIGRATION_SM_CHECKING_RSTP:
         if (p->mdelay_while == 0) {
             p->port_protocol_migration_sm_state =
@@ -596,7 +596,7 @@  port_protocol_migration_sm(struct rstp_port *p)
         p->mdelay_while = r->migrate_time;
         p->port_protocol_migration_sm_state =
             PORT_PROTOCOL_MIGRATION_SM_SELECTING_STP;
-        /* no break */
+        /* fall through */
     case PORT_PROTOCOL_MIGRATION_SM_SELECTING_STP:
         if ((p->mdelay_while == 0) || (!p->port_enabled) || p->mcheck) {
             p->port_protocol_migration_sm_state =
@@ -608,7 +608,7 @@  port_protocol_migration_sm(struct rstp_port *p)
         p->rcvd_stp = false;
         p->port_protocol_migration_sm_state =
             PORT_PROTOCOL_MIGRATION_SM_SENSING;
-        /* no break */
+        /* fall through */
     case PORT_PROTOCOL_MIGRATION_SM_SENSING:
         if (!p->port_enabled || p->mcheck || ((r->rstp_version) &&
                                               !p->send_rstp && p->rcvd_rstp)) {
@@ -621,7 +621,7 @@  port_protocol_migration_sm(struct rstp_port *p)
         break;
     default:
         OVS_NOT_REACHED();
-        /* no break */
+        /* fall through */
     }
     if (old_state != p->port_protocol_migration_sm_state) {
         r->changes = true;
@@ -655,7 +655,7 @@  bridge_detection_sm(struct rstp_port *p)
     case BRIDGE_DETECTION_SM_EDGE_EXEC:
         p->oper_edge = true;
         p->bridge_detection_sm_state = BRIDGE_DETECTION_SM_EDGE;
-        /* no break */
+        /* fall through */
     case BRIDGE_DETECTION_SM_EDGE:
         if ((!p->port_enabled && !p->admin_edge) || !p->oper_edge) {
             p->bridge_detection_sm_state = BRIDGE_DETECTION_SM_NOT_EDGE_EXEC;
@@ -664,7 +664,7 @@  bridge_detection_sm(struct rstp_port *p)
     case BRIDGE_DETECTION_SM_NOT_EDGE_EXEC:
         p->oper_edge = false;
         p->bridge_detection_sm_state = BRIDGE_DETECTION_SM_NOT_EDGE;
-        /* no break */
+        /* fall through */
     case BRIDGE_DETECTION_SM_NOT_EDGE:
         if ((!p->port_enabled && p->admin_edge)
             || ((p->edge_delay_while == 0) && p->auto_edge && p->send_rstp
@@ -674,7 +674,7 @@  bridge_detection_sm(struct rstp_port *p)
         break;
     default:
         OVS_NOT_REACHED();
-        /* no break */
+        /* fall through */
     }
     if (old_state != p->bridge_detection_sm_state) {
         r->changes = true;
@@ -954,7 +954,7 @@  port_transmit_sm(struct rstp_port *p)
         p->new_info = true;
         p->tx_count = 0;
         p->port_transmit_sm_state = PORT_TRANSMIT_SM_TRANSMIT_INIT;
-        /* no break */
+        /* fall through */
     case PORT_TRANSMIT_SM_TRANSMIT_INIT:
         p->port_transmit_sm_state = PORT_TRANSMIT_SM_IDLE_EXEC;
         break;
@@ -962,14 +962,14 @@  port_transmit_sm(struct rstp_port *p)
         p->new_info = p->new_info || (p->role == ROLE_DESIGNATED ||
                       (p->role == ROLE_ROOT && p->tc_while != 0));
         p->port_transmit_sm_state = PORT_TRANSMIT_SM_TRANSMIT_PERIODIC;
-        /* no break */
+        /* fall through */
     case PORT_TRANSMIT_SM_TRANSMIT_PERIODIC:
         p->port_transmit_sm_state = PORT_TRANSMIT_SM_IDLE_EXEC;
         break;
     case PORT_TRANSMIT_SM_IDLE_EXEC:
         p->hello_when = r->bridge_hello_time;
         p->port_transmit_sm_state = PORT_TRANSMIT_SM_IDLE;
-        /* no break */
+        /* fall through */
     case PORT_TRANSMIT_SM_IDLE:
         if (p->role == ROLE_DISABLED) {
             VLOG_DBG("%s, port %u: port_transmit_sm ROLE == DISABLED.",
@@ -998,7 +998,7 @@  port_transmit_sm(struct rstp_port *p)
         p->tx_count += 1;
         p->tc_ack = false;
         p->port_transmit_sm_state = PORT_TRANSMIT_SM_TRANSMIT_CONFIG;
-        /* no break */
+        /* fall through */
     case PORT_TRANSMIT_SM_TRANSMIT_CONFIG:
         p->port_transmit_sm_state = PORT_TRANSMIT_SM_IDLE_EXEC;
         break;
@@ -1007,7 +1007,7 @@  port_transmit_sm(struct rstp_port *p)
         tx_tcn(p);
         p->tx_count += 1;
         p->port_transmit_sm_state = PORT_TRANSMIT_SM_TRANSMIT_TCN;
-        /* no break */
+        /* fall through */
     case PORT_TRANSMIT_SM_TRANSMIT_TCN:
         p->port_transmit_sm_state = PORT_TRANSMIT_SM_IDLE_EXEC;
         break;
@@ -1017,13 +1017,13 @@  port_transmit_sm(struct rstp_port *p)
         p->tx_count += 1;
         p->tc_ack = false;
         p->port_transmit_sm_state = PORT_TRANSMIT_SM_TRANSMIT_RSTP;
-        /* no break */
+        /* fall through */
     case PORT_TRANSMIT_SM_TRANSMIT_RSTP:
         p->port_transmit_sm_state = PORT_TRANSMIT_SM_IDLE_EXEC;
         break;
     default:
         OVS_NOT_REACHED();
-        /* no break */
+        /* fall through */
     }
     if (old_state != p->port_transmit_sm_state) {
         r->changes = true;
@@ -1159,7 +1159,7 @@  port_information_sm(struct rstp_port *p)
         p->reselect = true;
         p->selected = false;
         p->port_information_sm_state = PORT_INFORMATION_SM_DISABLED;
-        /* no break */
+        /* fall through */
     case PORT_INFORMATION_SM_DISABLED:
         if (!p->port_enabled && p->info_is != INFO_IS_DISABLED) {
             /* Global transition. */
@@ -1175,7 +1175,7 @@  port_information_sm(struct rstp_port *p)
         p->reselect = true;
         p->selected = false;
         p->port_information_sm_state = PORT_INFORMATION_SM_AGED;
-        /* no break */
+        /* fall through */
     case PORT_INFORMATION_SM_AGED:
         if (!p->port_enabled && p->info_is != INFO_IS_DISABLED) {
             /* Global transition. */
@@ -1202,7 +1202,7 @@  port_information_sm(struct rstp_port *p)
         p->info_is = INFO_IS_MINE;
         p->new_info = true;
         p->port_information_sm_state = PORT_INFORMATION_SM_UPDATE;
-        /* no break */
+        /* fall through */
     case PORT_INFORMATION_SM_UPDATE:
         if (!p->port_enabled && p->info_is != INFO_IS_DISABLED) {
             /* Global transition. */
@@ -1213,7 +1213,7 @@  port_information_sm(struct rstp_port *p)
         break;
     case PORT_INFORMATION_SM_CURRENT_EXEC:
         p->port_information_sm_state = PORT_INFORMATION_SM_CURRENT;
-        /* no break */
+        /* fall through */
     case PORT_INFORMATION_SM_CURRENT:
         if (!p->port_enabled && p->info_is != INFO_IS_DISABLED) {
             /* Global transition. */
@@ -1231,7 +1231,7 @@  port_information_sm(struct rstp_port *p)
     case PORT_INFORMATION_SM_RECEIVE_EXEC:
         p->rcvd_info = rcv_info(p);
         p->port_information_sm_state = PORT_INFORMATION_SM_RECEIVE;
-        /* no break */
+        /* fall through */
     case PORT_INFORMATION_SM_RECEIVE:
         if (!p->port_enabled && p->info_is != INFO_IS_DISABLED) {
             /* Global transition. */
@@ -1272,14 +1272,14 @@  port_information_sm(struct rstp_port *p)
                 break;
             default:
                 OVS_NOT_REACHED();
-                /* no break */
+                /* fall through */
             }
         }
         break;
     case PORT_INFORMATION_SM_OTHER_EXEC:
         p->rcvd_msg = false;
         p->port_information_sm_state = PORT_INFORMATION_SM_OTHER;
-        /* no break */
+        /* fall through */
     case PORT_INFORMATION_SM_OTHER:
         if (!p->port_enabled && p->info_is != INFO_IS_DISABLED) {
             /* Global transition. */
@@ -1293,7 +1293,7 @@  port_information_sm(struct rstp_port *p)
         set_tc_flags(p);
         p->rcvd_msg = false;
         p->port_information_sm_state = PORT_INFORMATION_SM_NOT_DESIGNATED;
-        /* no break */
+        /* fall through */
     case PORT_INFORMATION_SM_NOT_DESIGNATED:
         if (!p->port_enabled && p->info_is != INFO_IS_DISABLED) {
             /* Global transition. */
@@ -1306,7 +1306,7 @@  port_information_sm(struct rstp_port *p)
         record_dispute(p);
         p->rcvd_msg = false;
         p->port_information_sm_state = PORT_INFORMATION_SM_INFERIOR_DESIGNATED;
-        /* no break */
+        /* fall through */
     case PORT_INFORMATION_SM_INFERIOR_DESIGNATED:
         if (!p->port_enabled && p->info_is != INFO_IS_DISABLED) {
             /* Global transition. */
@@ -1324,7 +1324,7 @@  port_information_sm(struct rstp_port *p)
         updt_rcvd_info_while(p);
         p->rcvd_msg = false;
         p->port_information_sm_state = PORT_INFORMATION_SM_REPEATED_DESIGNATED;
-        /* no break */
+        /* fall through */
     case PORT_INFORMATION_SM_REPEATED_DESIGNATED:
         if (!p->port_enabled && p->info_is != INFO_IS_DISABLED) {
             /* Global transition. */
@@ -1351,7 +1351,7 @@  port_information_sm(struct rstp_port *p)
         p->selected = false;
         p->rcvd_msg = false;
         p->port_information_sm_state = PORT_INFORMATION_SM_SUPERIOR_DESIGNATED;
-        /* no break */
+        /* fall through */
     case PORT_INFORMATION_SM_SUPERIOR_DESIGNATED:
         if (!p->port_enabled && p->info_is != INFO_IS_DISABLED) {
             /* Global transition. */
@@ -1362,7 +1362,7 @@  port_information_sm(struct rstp_port *p)
         break;
     default:
         OVS_NOT_REACHED();
-        /* no break */
+        /* fall through */
     }
     if (old_state != p->port_information_sm_state) {
         r->changes = true;
@@ -1541,7 +1541,7 @@  port_role_transition_sm(struct rstp_port *p)
         p->learn = p->forward = false;
         p->port_role_transition_sm_state =
             PORT_ROLE_TRANSITION_SM_DISABLE_PORT;
-        /* no break */
+        /* fall through */
     case PORT_ROLE_TRANSITION_SM_DISABLE_PORT:
         if (check_selected_role_change(p, ROLE_DISABLED)) {
             /* Global transition. */
@@ -1558,7 +1558,7 @@  port_role_transition_sm(struct rstp_port *p)
         p->sync = p->re_root = false;
         p->port_role_transition_sm_state =
             PORT_ROLE_TRANSITION_SM_DISABLED_PORT;
-        /* no break */
+        /* fall through */
     case PORT_ROLE_TRANSITION_SM_DISABLED_PORT:
         if (check_selected_role_change(p, ROLE_DISABLED)) {
             /* Global transition. */
@@ -1573,7 +1573,7 @@  port_role_transition_sm(struct rstp_port *p)
         p->role = ROLE_ROOT;
         p->rr_while = p->designated_times.forward_delay;
         p->port_role_transition_sm_state = PORT_ROLE_TRANSITION_SM_ROOT_PORT;
-        /* no break */
+        /* fall through */
     case PORT_ROLE_TRANSITION_SM_ROOT_PORT:
         if (check_selected_role_change(p, ROLE_ROOT)) {
             /* Global transition. */
@@ -1676,7 +1676,7 @@  port_role_transition_sm(struct rstp_port *p)
         p->role = ROLE_DESIGNATED;
         p->port_role_transition_sm_state =
             PORT_ROLE_TRANSITION_SM_DESIGNATED_PORT;
-        /* no break */
+        /* fall through */
     case PORT_ROLE_TRANSITION_SM_DESIGNATED_PORT:
         if (check_selected_role_change(p, ROLE_DESIGNATED)) {
             /* Global transition. */
@@ -1781,7 +1781,7 @@  port_role_transition_sm(struct rstp_port *p)
         p->sync = p->re_root = false;
         p->port_role_transition_sm_state =
             PORT_ROLE_TRANSITION_SM_ALTERNATE_PORT;
-        /* no break */
+        /* fall through */
     case PORT_ROLE_TRANSITION_SM_ALTERNATE_PORT:
         if (check_selected_role_change(p, ROLE_ALTERNATE)) {
             /* Global transition. */
@@ -1829,7 +1829,7 @@  port_role_transition_sm(struct rstp_port *p)
         p->role = p->selected_role;
         p->learn = p->forward = false;
         p->port_role_transition_sm_state = PORT_ROLE_TRANSITION_SM_BLOCK_PORT;
-        /* no break */
+        /* fall through */
     case PORT_ROLE_TRANSITION_SM_BLOCK_PORT:
         if (check_selected_role_change(p, ROLE_ALTERNATE)) {
             /* Global transition. */
@@ -1850,7 +1850,7 @@  port_role_transition_sm(struct rstp_port *p)
         break;
     default:
         OVS_NOT_REACHED();
-        /* no break */
+        /* fall through */
     }
     if (old_state != p->port_role_transition_sm_state) {
         r->changes = true;
@@ -1940,7 +1940,7 @@  port_state_transition_sm(struct rstp_port *p)
         p->forwarding = false;
         p->port_state_transition_sm_state =
             PORT_STATE_TRANSITION_SM_DISCARDING;
-        /* no break */
+        /* fall through */
     case PORT_STATE_TRANSITION_SM_DISCARDING:
         if (p->learn) {
             p->port_state_transition_sm_state =
@@ -1951,7 +1951,7 @@  port_state_transition_sm(struct rstp_port *p)
         enable_learning(p);
         p->learning = true;
         p->port_state_transition_sm_state = PORT_STATE_TRANSITION_SM_LEARNING;
-        /* no break */
+        /* fall through */
     case PORT_STATE_TRANSITION_SM_LEARNING:
         if (!p->learn) {
             p->port_state_transition_sm_state =
@@ -1966,7 +1966,7 @@  port_state_transition_sm(struct rstp_port *p)
         p->forwarding = true;
         p->port_state_transition_sm_state =
             PORT_STATE_TRANSITION_SM_FORWARDING;
-        /* no break */
+        /* fall through */
     case PORT_STATE_TRANSITION_SM_FORWARDING:
         if (!p->forward) {
             p->port_state_transition_sm_state =
@@ -1975,7 +1975,7 @@  port_state_transition_sm(struct rstp_port *p)
         break;
     default:
         OVS_NOT_REACHED();
-        /* no break */
+        /* fall through */
     }
     if (old_state != p->port_state_transition_sm_state) {
         r->changes = true;
@@ -2051,7 +2051,7 @@  topology_change_sm(struct rstp_port *p)
         p->tc_while = 0;
         p->tc_ack = false;
         p->topology_change_sm_state = TOPOLOGY_CHANGE_SM_INACTIVE;
-        /* no break */
+        /* fall through */
     case TOPOLOGY_CHANGE_SM_INACTIVE:
         if (p->learn && !p->fdb_flush) {
             p->topology_change_sm_state = TOPOLOGY_CHANGE_SM_LEARNING_EXEC;
@@ -2061,7 +2061,7 @@  topology_change_sm(struct rstp_port *p)
         p->rcvd_tc = p->rcvd_tcn = p->rcvd_tc_ack = false;
         p->tc_prop = p->rcvd_tc_ack = false;
         p->topology_change_sm_state = TOPOLOGY_CHANGE_SM_LEARNING;
-        /* no break */
+        /* fall through */
     case TOPOLOGY_CHANGE_SM_LEARNING:
         if (p->role != ROLE_ROOT && p->role != ROLE_DESIGNATED &&
             !(p->learn || p->learning) && !(p->rcvd_tc || p->rcvd_tcn ||
@@ -2079,10 +2079,10 @@  topology_change_sm(struct rstp_port *p)
         set_tc_prop_tree(p);
         p->new_info = true;
         p->topology_change_sm_state = TOPOLOGY_CHANGE_SM_ACTIVE_EXEC;
-        /* no break */
+        /* fall through */
     case TOPOLOGY_CHANGE_SM_ACTIVE_EXEC:
         p->topology_change_sm_state = TOPOLOGY_CHANGE_SM_ACTIVE;
-        /* no break */
+        /* fall through */
     case TOPOLOGY_CHANGE_SM_ACTIVE:
         if ((p->role != ROLE_ROOT && p->role != ROLE_DESIGNATED)
             || p->oper_edge) {
@@ -2122,7 +2122,7 @@  topology_change_sm(struct rstp_port *p)
         break;
     default:
         OVS_NOT_REACHED();
-        /* no break */
+        /* fall through */
     }
     if (old_state != p->topology_change_sm_state) {
         r->changes = true;
diff --git a/ofproto/bond.c b/ofproto/bond.c
index 21370b5f9..cb25a1df7 100644
--- a/ofproto/bond.c
+++ b/ofproto/bond.c
@@ -827,6 +827,7 @@  bond_check_admissibility(struct bond *bond, const void *slave_,
         if (!bond->lacp_fallback_ab) {
             goto out;
         }
+        /* fall through */
 
     case BM_AB:
         /* Drop all packets which arrive on backup slaves.  This is similar to
diff --git a/ovn/lib/lex.c b/ovn/lib/lex.c
index 4b504cba9..6f2b570f5 100644
--- a/ovn/lib/lex.c
+++ b/ovn/lib/lex.c
@@ -753,7 +753,8 @@  next:
             p++;
             break;
         }
-        /* IPv6 address beginning with "::".  Fall through. */
+        /* IPv6 address beginning with "::". */
+        /* fall through */
     case '0': case '1': case '2': case '3': case '4':
     case '5': case '6': case '7': case '8': case '9':
         p = lex_parse_integer(p, token);
diff --git a/ovn/utilities/ovn-nbctl.c b/ovn/utilities/ovn-nbctl.c
index bea010ab1..0488318c4 100644
--- a/ovn/utilities/ovn-nbctl.c
+++ b/ovn/utilities/ovn-nbctl.c
@@ -268,9 +268,11 @@  parse_options(int argc, char *argv[], struct shash *local_options)
 
         case OPT_COMMANDS:
             ctl_print_commands();
+            /* fall through */
 
         case OPT_OPTIONS:
             ctl_print_options(global_long_options);
+            /* fall through */
 
         case 'V':
             ovs_print_version(0, 0);
diff --git a/ovn/utilities/ovn-sbctl.c b/ovn/utilities/ovn-sbctl.c
index fc9f8e5fd..5c3403266 100644
--- a/ovn/utilities/ovn-sbctl.c
+++ b/ovn/utilities/ovn-sbctl.c
@@ -246,9 +246,11 @@  parse_options(int argc, char *argv[], struct shash *local_options)
 
         case OPT_COMMANDS:
             ctl_print_commands();
+            /* fall through */
 
         case OPT_OPTIONS:
             ctl_print_options(global_long_options);
+            /* fall through */
 
         case 'V':
             ovs_print_version(0, 0);
diff --git a/tests/test-ovn.c b/tests/test-ovn.c
index e2c61d2b2..ca27a0f5a 100644
--- a/tests/test-ovn.c
+++ b/tests/test-ovn.c
@@ -1489,6 +1489,7 @@  test_ovn_main(int argc, char *argv[])
 
         case 'h':
             usage();
+            /* fall through */
 
         case '?':
             exit(1);
diff --git a/utilities/ovs-vsctl.c b/utilities/ovs-vsctl.c
index 28c1c4457..992c0dd13 100644
--- a/utilities/ovs-vsctl.c
+++ b/utilities/ovs-vsctl.c
@@ -295,9 +295,11 @@  parse_options(int argc, char *argv[], struct shash *local_options)
 
         case OPT_COMMANDS:
             ctl_print_commands();
+            /* fall through */
 
         case OPT_OPTIONS:
             ctl_print_options(global_long_options);
+            /* fall through */
 
         case 'V':
             ovs_print_version(0, 0);