diff --git a/asn1c/asn1c.c b/asn1c/asn1c.c
index aecf111..b3fc220 100644
--- a/asn1c/asn1c.c
+++ b/asn1c/asn1c.c
@@ -328,10 +328,13 @@
     ret = asn1f_process(asn, asn1_fixer_flags,
                         NULL /* default fprintf(stderr) */);
     switch(ret) {
-    case 1:
-        if(!warnings_as_errors) /* Fall through */
-        case 0:
+    case 0:
         break; /* All clear */
+    case 1:
+        if(!warnings_as_errors) {
+            break;
+        }
+        /* Fall through */
     case -1:
         exit_code = EX_DATAERR; /* Fatal failure */
         goto cleanup;
@@ -467,7 +470,7 @@
 /*
  * Print the usage screen and exit(EX_USAGE).
  */
-static void
+static void __attribute__((noreturn))
 usage(const char *av0) {
     /* clang-format off */
 	fprintf(stderr,
diff --git a/asn1c/enber.c b/asn1c/enber.c
index ec06b5c..3aeab6c 100644
--- a/asn1c/enber.c
+++ b/asn1c/enber.c
@@ -173,7 +173,6 @@
     ber_tlv_len_t tlv_len;
     ber_tlv_len_t opt_tl_len; /* optional TL length */
     ssize_t ret;
-    (void)fname;
 
     /* Skip the whitespace */
     for(; *line == ' ' || *line == '\t'; line++)
@@ -184,11 +183,15 @@
     switch(*op) {
     case '<': /* That's what we want! A tag opening */
         break;
-    case '-': /* This is a comment (dash-dash) */
-        if(op[1] == *op) case '\r':
+    case '\r':
     case '\n':
     case '#': /* This is a comment */
         return 0;
+    case '-': /* This is a comment (dash-dash) */
+        if(op[1] == '-') {
+            return 0;
+        }
+        /* Fall through */
     default:
         fprintf(stderr, "%s: Missing '<' after whitespace at line %d\n", fname,
                 lineno);
diff --git a/libasn1compiler/asn1c_C.c b/libasn1compiler/asn1c_C.c
index be04e9f..bebd413 100644
--- a/libasn1compiler/asn1c_C.c
+++ b/libasn1compiler/asn1c_C.c
@@ -2333,6 +2333,7 @@
 	switch(etype) {
 	case ASN_BASIC_BOOLEAN:
 		fits_long = 1;
+        /* Fall through */
 	case ASN_BASIC_INTEGER:
 	case ASN_BASIC_ENUMERATED:
 		if(expr->marker.default_value == NULL
@@ -3439,13 +3440,15 @@
                                  &atag, AFT_IMAGINARY_ANY | AFT_CANON_CHOICE)))
         return 1;
 
-    if(WITH_MODULE_NAMESPACE(b->expr->module, expr_ns,
-                             asn1f_fetch_outmost_tag(
-                                 arg->asn, expr_ns, b->expr->module, b->expr,
-                                 &btag, AFT_IMAGINARY_ANY | AFT_CANON_CHOICE)))
+    if(WITH_MODULE_NAMESPACE(
+           b->expr->module, expr_ns,
+           asn1f_fetch_outmost_tag(arg->asn, expr_ns, b->expr->module, b->expr,
+                                   &btag,
+                                   AFT_IMAGINARY_ANY | AFT_CANON_CHOICE))) {
         return -1;
+    }
 
-	if(atag.tag_class < btag.tag_class)
+    if(atag.tag_class < btag.tag_class)
 		return -1;
 	if(atag.tag_class > btag.tag_class)
 		return 1;
diff --git a/libasn1compiler/asn1c_misc.c b/libasn1compiler/asn1c_misc.c
index c36f96f..8cfafc0 100644
--- a/libasn1compiler/asn1c_misc.c
+++ b/libasn1compiler/asn1c_misc.c
@@ -463,9 +463,11 @@
 
 	/* Special case for unsigned */
     if(!(arg->flags & A1C_USE_WIDE_TYPES) && left.type == ARE_VALUE
-       && left.value >= 0 && left.value <= 2147483647 && right.type == ARE_MAX)
+       && left.value >= 0 && left.value <= 2147483647
+       && right.type == ARE_MAX) {
         return FL_FITS_UNSIGN;
-	if(left.type == ARE_VALUE
+    }
+    if(left.type == ARE_VALUE
 		&& left.value >= 0
 	&& right.type == ARE_VALUE
 		&& right.value > 2147483647
diff --git a/libasn1compiler/asn1c_save.c b/libasn1compiler/asn1c_save.c
index 4bb192e..5fe1b37 100644
--- a/libasn1compiler/asn1c_save.c
+++ b/libasn1compiler/asn1c_save.c
@@ -711,8 +711,9 @@
 		return 0;
 
     /* Parameterized types can't serve as PDU's without instantiation. */
-    if(arg->expr->lhs_params)
+    if(arg->expr->lhs_params) {
         return 0;
+    }
 
 	if((arg->flags & A1C_PDU_ALL)
 	|| ((arg->flags & A1C_PDU_AUTO) && !arg->expr->_type_referenced)
diff --git a/libasn1fix/asn1fix_bitstring.c b/libasn1fix/asn1fix_bitstring.c
index 007c6a5..e5f80cd 100644
--- a/libasn1fix/asn1fix_bitstring.c
+++ b/libasn1fix/asn1fix_bitstring.c
@@ -112,6 +112,7 @@
 			break;
 		}
 		/* Fall through: remove trailing zero bits */
+        /* Fall through */
 	case ATV_BITVECTOR:
 		asn1f_BS_remove_trailing_zero_bits(expr->value);
 		break;
diff --git a/libasn1fix/asn1fix_constr.c b/libasn1fix/asn1fix_constr.c
index 19e8bad..8f4331c 100644
--- a/libasn1fix/asn1fix_constr.c
+++ b/libasn1fix/asn1fix_constr.c
@@ -135,6 +135,7 @@
 			case 3:
 				FATAL("Third extension marker "
 				"is not allowed at line %d", v->_lineno);
+                /* Fall through */
 			default:
 				r_value = -1;
 			}
diff --git a/libasn1fix/asn1fix_crange.c b/libasn1fix/asn1fix_crange.c
index b983e49..4c9345d 100644
--- a/libasn1fix/asn1fix_crange.c
+++ b/libasn1fix/asn1fix_crange.c
@@ -1040,8 +1040,9 @@
 		range->not_OER_visible = 1;
 
     if(!ct
-       || (range->not_OER_visible && (cpr_flags & CPR_strict_OER_visibility)))
+       || (range->not_OER_visible && (cpr_flags & CPR_strict_OER_visibility))) {
         return range;
+    }
 
 	switch(ct->type) {
 	case ACT_EL_VALUE:
diff --git a/libasn1fix/asn1fix_cws.c b/libasn1fix/asn1fix_cws.c
index 035ccf7..d2be70d 100644
--- a/libasn1fix/asn1fix_cws.c
+++ b/libasn1fix/asn1fix_cws.c
@@ -125,10 +125,9 @@
     ret = _asn1f_parse_class_object_data(arg, eclass, row, eclass->with_syntax,
                                          buf, buf + size, 0, 0, key->sequence);
     if(ret) {
-		LOG((int)(ret < 0),
-			"Cannot parse %s of CLASS %s found at line %d",
-			expr->Identifier, eclass->Identifier, expr->_lineno);
-		asn1p_ioc_row_delete(row);
+        LOG(ret, "Cannot parse %s of CLASS %s found at line %d",
+            expr->Identifier, eclass->Identifier, expr->_lineno);
+        asn1p_ioc_row_delete(row);
 		return ret;
 	}
 
diff --git a/libasn1fix/asn1fix_internal.h b/libasn1fix/asn1fix_internal.h
index 4e13293..5fd7e76 100644
--- a/libasn1fix/asn1fix_internal.h
+++ b/libasn1fix/asn1fix_internal.h
@@ -83,17 +83,23 @@
  * Merge the return value of the called function with the already
  * partially computed return value of the current function.
  */
-#define	RET2RVAL(ret,rv) do {					\
-		int __ret = ret;				\
-		switch(__ret) {					\
-		case  0: break;					\
-		case  1: if(rv) break;				\
-		case -1: rv = __ret; break;			\
-		default:					\
-			assert(__ret >= -1 && __ret <= 1);	\
-			rv = -1;				\
-		}						\
-	} while(0)
+#define RET2RVAL(ret, rv)                      \
+    do {                                       \
+        int __ret = ret;                       \
+        switch(__ret) {                        \
+        case 0:                                \
+            break;                             \
+        case 1:                                \
+            if(rv) break;                      \
+            /* Fall through */                 \
+        case -1:                               \
+            rv = __ret;                        \
+            break;                             \
+        default:                               \
+            assert(__ret >= -1 && __ret <= 1); \
+            rv = -1;                           \
+        }                                      \
+    } while(0)
 
 /*
  * Temporary substitute module for the purposes of evaluating expression.
diff --git a/libasn1parser/asn1p_value.c b/libasn1parser/asn1p_value.c
index 9bd7563..957b9e4 100644
--- a/libasn1parser/asn1p_value.c
+++ b/libasn1parser/asn1p_value.c
@@ -66,6 +66,7 @@
                   != 0) {
             return -1;
         }
+        return 0;
     case ATV_VALUESET:
         return asn1p_constraint_compare(a->value.constraint,
                                         b->value.constraint);
diff --git a/libasn1print/asn1print.c b/libasn1print/asn1print.c
index e1e3e48..61b9528 100644
--- a/libasn1print/asn1print.c
+++ b/libasn1print/asn1print.c
@@ -417,11 +417,11 @@
 		safe_printf("PATTERN ");
 		asn1print_value(ct->value, flags);
 		break;
-	case ACT_CA_SET: symno++;
-	case ACT_CA_CRC: symno++;
-	case ACT_CA_CSV: symno++;
-	case ACT_CA_UNI: symno++;
-	case ACT_CA_INT: symno++;
+	case ACT_CA_SET: symno++;   /* Fall through */
+	case ACT_CA_CRC: symno++;   /* Fall through */
+	case ACT_CA_CSV: symno++;   /* Fall through */
+	case ACT_CA_UNI: symno++;   /* Fall through */
+	case ACT_CA_INT: symno++;   /* Fall through */
 	case ACT_CA_EXC:
 		{
 			char *symtable[] = { " EXCEPT ", " ^ ", " | ", ",",
diff --git a/skeletons/INTEGER.c b/skeletons/INTEGER.c
index 165f440..6a914ea 100644
--- a/skeletons/INTEGER.c
+++ b/skeletons/INTEGER.c
@@ -497,21 +497,21 @@
 		/* FALL THROUGH */
 	case ST_DIGITS_TRAILSPACE:
 		/* The last symbol encountered was a digit. */
-		switch(asn_strtoimax_lim(dec_value_start, &dec_value_end, &dec_value)) {
-		case ASN_STRTOX_OK:
-                        if(dec_value >= LONG_MIN && dec_value <= LONG_MAX) {
-			        break;
-                        } else {
-                                /*
-                                 * We model INTEGER on long for XER,
-                                 * to avoid rewriting all the tests at once.
-                                 */
-                                ASN_DEBUG("INTEGER exceeds long range");
-                                /* Fall through */
-                        }
-		case ASN_STRTOX_ERROR_RANGE:
-                        ASN_DEBUG("INTEGER decode %s hit range limit", td->name);
-			return XPBD_DECODER_LIMIT;
+        switch(asn_strtoimax_lim(dec_value_start, &dec_value_end, &dec_value)) {
+        case ASN_STRTOX_OK:
+            if(dec_value >= LONG_MIN && dec_value <= LONG_MAX) {
+                break;
+            } else {
+                /*
+                 * We model INTEGER on long for XER,
+                 * to avoid rewriting all the tests at once.
+                 */
+                ASN_DEBUG("INTEGER exceeds long range");
+            }
+            /* Fall through */
+        case ASN_STRTOX_ERROR_RANGE:
+            ASN_DEBUG("INTEGER decode %s hit range limit", td->name);
+            return XPBD_DECODER_LIMIT;
 		case ASN_STRTOX_ERROR_INVAL:
 		case ASN_STRTOX_EXPECT_MORE:
 		case ASN_STRTOX_EXTRA_DATA:
diff --git a/skeletons/constr_SEQUENCE.c b/skeletons/constr_SEQUENCE.c
index fb4d1ba..85df7a6 100644
--- a/skeletons/constr_SEQUENCE.c
+++ b/skeletons/constr_SEQUENCE.c
@@ -443,6 +443,7 @@
 
 	phase3:
 		ctx->phase = 3;
+        /* Fall through */
 	case 3:	/* 00 and other tags expected */
 	case 4:	/* only 00's expected */
 
diff --git a/skeletons/constr_SET.c b/skeletons/constr_SET.c
index 4f0230c..994abb7 100644
--- a/skeletons/constr_SET.c
+++ b/skeletons/constr_SET.c
@@ -310,7 +310,7 @@
 				ADVANCE(rval.consumed);
 				RETURN(RC_WMORE);
 			}
-			/* Fail through */
+			/* Fall through */
 		case RC_FAIL: /* Fatal error */
 			RETURN(RC_FAIL);
 		} /* switch(rval) */
@@ -381,6 +381,7 @@
 		}
 
 		ctx->phase = 5;
+        /* Fall through */
 	case 5:
 		/* Check that all mandatory elements are present. */
 		if(!_SET_is_populated(td, st))
diff --git a/tests/tests-skeletons/check-REAL.c b/tests/tests-skeletons/check-REAL.c
index 2e78063..e98684e 100644
--- a/tests/tests-skeletons/check-REAL.c
+++ b/tests/tests-skeletons/check-REAL.c
@@ -320,13 +320,13 @@
 	*b |= ((explen - 1) & 0x03);	/* 8.5.7.4 */
 	b++;
 	switch(explen) {
-	case 2: *b++ = (int8_t)(exponent >> 8);
-	case 1: *b++ = (int8_t)exponent;
+	case 2: *b++ = (int8_t)(exponent >> 8); /* Fall through */
+	case 1: *b++ = (int8_t)exponent;    /* Fall through */
 	}
 	switch(mantlen) {
-	case 3: *b++ = (mantissa >> 16) & 0xff;
-	case 2: *b++ = (mantissa >> 8) & 0xff;
-	case 1: *b++ = (mantissa & 0xff);
+	case 3: *b++ = (mantissa >> 16) & 0xff; /* Fall through */
+	case 2: *b++ = (mantissa >> 8) & 0xff;  /* Fall through */
+	case 1: *b++ = (mantissa & 0xff);   /* Fall through */
 	}
 
 	verify = (sign ? -1.0 : 1.0) * ldexp(mantissa, exponent * baseF + scaling_factor);
