summaryrefslogtreecommitdiff
path: root/py
diff options
context:
space:
mode:
authorEmil Renner Berthing <esmil@mailme.dk>2019-11-28 12:47:21 +0100
committerEmil Renner Berthing <esmil@mailme.dk>2020-10-22 11:53:16 +0200
commitccd92335a11f03597f94da2ac937811ff3fa50cf (patch)
tree2a31448c25724edf2ff5213b1cc1b52dd5ff0f82 /py
parentdde3db21fcd8d810bb59e0c56dfa5fd9208e1544 (diff)
py, extmod: Introduce and use MP_FALLTHROUGH macro.
Newer GCC versions are able to warn about switch cases that fall through. This is usually a sign of a forgotten break statement, but in the few cases where a fall through is intended we annotate it with this macro to avoid the warning.
Diffstat (limited to 'py')
-rw-r--r--py/gc.c3
-rw-r--r--py/lexer.c3
-rw-r--r--py/mpconfig.h7
-rw-r--r--py/objset.c1
4 files changed, 12 insertions, 2 deletions
diff --git a/py/gc.c b/py/gc.c
index 9c6336852..767f1b81c 100644
--- a/py/gc.c
+++ b/py/gc.c
@@ -298,7 +298,8 @@ STATIC void gc_sweep(void) {
#if MICROPY_PY_GC_COLLECT_RETVAL
MP_STATE_MEM(gc_collected)++;
#endif
- // fall through to free the head
+ // fall through to free the head
+ MP_FALLTHROUGH
case AT_TAIL:
if (free_tail) {
diff --git a/py/lexer.c b/py/lexer.c
index 7d2a251d4..07ea2b96a 100644
--- a/py/lexer.c
+++ b/py/lexer.c
@@ -346,7 +346,8 @@ STATIC void parse_string_literal(mp_lexer_t *lex, bool is_raw) {
vstr_add_char(&lex->vstr, '\\');
break;
}
- // Otherwise fall through.
+ // Otherwise fall through.
+ MP_FALLTHROUGH
case 'x': {
mp_uint_t num = 0;
if (!get_hex(lex, (c == 'x' ? 2 : c == 'u' ? 4 : 8), &num)) {
diff --git a/py/mpconfig.h b/py/mpconfig.h
index cc83f3850..854188b66 100644
--- a/py/mpconfig.h
+++ b/py/mpconfig.h
@@ -1643,6 +1643,13 @@ typedef double mp_float_t;
#endif
#endif
+// Explicitly annotate switch case fall throughs
+#if defined(__GNUC__) && __GNUC__ >= 7
+#define MP_FALLTHROUGH __attribute__((fallthrough));
+#else
+#define MP_FALLTHROUGH
+#endif
+
#ifndef MP_HTOBE16
#if MP_ENDIANNESS_LITTLE
#define MP_HTOBE16(x) ((uint16_t)((((x) & 0xff) << 8) | (((x) >> 8) & 0xff)))
diff --git a/py/objset.c b/py/objset.c
index f31a901a7..dac9b1138 100644
--- a/py/objset.c
+++ b/py/objset.c
@@ -445,6 +445,7 @@ STATIC mp_obj_t set_unary_op(mp_unary_op_t op, mp_obj_t self_in) {
}
return MP_OBJ_NEW_SMALL_INT(hash);
}
+ MP_FALLTHROUGH
#endif
default:
return MP_OBJ_NULL; // op not supported