From 1201d59f0b5b8acc93f15904b745ec342548f9c1 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Tue, 10 Jan 2023 19:26:51 +0100 Subject: [PATCH] various: replace abort() with MP_ASSERT_UNREACHABLE() where appropriate In debug mode the macro causes an assertion failure. In release mode it works differently and tells the compiler that it can assume the codepath will never execute. For this reason I was conversative in replacing it, e.g. in mpv-internal code that exhausts all valid values of an enum or when a condition is clear from directly preceding code. --- audio/out/ao.c | 2 +- audio/out/ao_alsa.c | 2 +- audio/out/ao_pulse.c | 5 +++-- common/msg.c | 2 +- demux/demux.c | 2 +- demux/ebml.c | 4 ++-- input/input.c | 2 +- misc/node.c | 2 +- options/m_option.c | 2 +- player/client.c | 2 +- player/command.c | 2 +- player/playloop.c | 4 ++-- video/csputils.c | 6 +++--- video/out/d3d11/ra_d3d11.c | 2 +- video/out/gpu/osd.c | 2 +- video/out/gpu/shader_cache.c | 4 ++-- video/out/gpu/user_shaders.c | 4 ++-- video/out/gpu/video.c | 3 +-- video/out/opengl/ra_gl.c | 14 +++++++------- video/out/placebo/ra_pl.c | 2 +- video/out/vo_vdpau.c | 2 +- 21 files changed, 35 insertions(+), 35 deletions(-) diff --git a/audio/out/ao.c b/audio/out/ao.c index e797ad3f9c..768f98acb3 100644 --- a/audio/out/ao.c +++ b/audio/out/ao.c @@ -702,7 +702,7 @@ static void convert_plane(int type, void *data, int num_samples) break; } default: - abort(); + MP_ASSERT_UNREACHABLE(); } } diff --git a/audio/out/ao_alsa.c b/audio/out/ao_alsa.c index 762805541f..617209dd43 100644 --- a/audio/out/ao_alsa.c +++ b/audio/out/ao_alsa.c @@ -563,7 +563,7 @@ static char *append_params(void *ta_parent, const char *device, const char *p) /* a simple list of parameters: add it at the end of the list */ return talloc_asprintf(ta_parent, "%s,%s", device, p); } - abort(); + MP_ASSERT_UNREACHABLE(); } static int try_open_device(struct ao *ao, const char *device, int mode) diff --git a/audio/out/ao_pulse.c b/audio/out/ao_pulse.c index 6c536b095e..619824b954 100644 --- a/audio/out/ao_pulse.c +++ b/audio/out/ao_pulse.c @@ -729,8 +729,9 @@ static int control(struct ao *ao, enum aocontrol cmd, void *arg) GENERIC_ERR_MSG("pa_context_set_sink_input_mute() failed"); return CONTROL_ERROR; } - } else - abort(); + } else { + MP_ASSERT_UNREACHABLE(); + } return CONTROL_OK; } diff --git a/common/msg.c b/common/msg.c index 81c7f654f3..faf1059490 100644 --- a/common/msg.c +++ b/common/msg.c @@ -810,7 +810,7 @@ void mp_msg_log_buffer_destroy(struct mp_log_buffer *buffer) } } - abort(); + MP_ASSERT_UNREACHABLE(); found: diff --git a/demux/demux.c b/demux/demux.c index 15ed27af73..913fe96f95 100644 --- a/demux/demux.c +++ b/demux/demux.c @@ -2868,7 +2868,7 @@ static const char *d_level(enum demux_check level) case DEMUX_CHECK_REQUEST:return "request"; case DEMUX_CHECK_NORMAL: return "normal"; } - abort(); + MP_ASSERT_UNREACHABLE(); } static int decode_float(char *str, float *out) diff --git a/demux/ebml.c b/demux/ebml.c index 5bb8fd83d3..98f86ac742 100644 --- a/demux/ebml.c +++ b/demux/ebml.c @@ -429,7 +429,7 @@ static void ebml_parse_element(struct ebml_parse_ctx *ctx, void *target, uint32_t, num_elems[i]); break; default: - abort(); + MP_ASSERT_UNREACHABLE(); } } } @@ -582,7 +582,7 @@ static void ebml_parse_element(struct ebml_parse_ctx *ctx, void *target, MP_TRACE(ctx, "ebml_id %x\n", (unsigned)*idptr); break; default: - abort(); + MP_ASSERT_UNREACHABLE(); } *countptr += 1; error: diff --git a/input/input.c b/input/input.c index f69517f748..5b36deb87e 100644 --- a/input/input.c +++ b/input/input.c @@ -1608,7 +1608,7 @@ static void mp_input_src_kill(struct mp_input_src *src) return; } } - abort(); + MP_ASSERT_UNREACHABLE(); } void mp_input_src_init_done(struct mp_input_src *src) diff --git a/misc/node.c b/misc/node.c index 9b45291a5f..3b982ed24a 100644 --- a/misc/node.c +++ b/misc/node.c @@ -136,7 +136,7 @@ bool equal_mpv_value(const void *a, const void *b, mpv_format format) return true; } } - abort(); // supposed to be able to handle all defined types + MP_ASSERT_UNREACHABLE(); // supposed to be able to handle all defined types } // Remarks see equal_mpv_value(). diff --git a/options/m_option.c b/options/m_option.c index 898d0da4f6..eb5e34cac7 100644 --- a/options/m_option.c +++ b/options/m_option.c @@ -770,7 +770,7 @@ static const struct m_opt_choice_alternatives *get_choice(const m_option_t *opt, return NULL; } } - abort(); + MP_ASSERT_UNREACHABLE(); } static int choice_get(const m_option_t *opt, void *ta_parent, diff --git a/player/client.c b/player/client.c index dd81cdf973..8037d8858d 100644 --- a/player/client.c +++ b/player/client.c @@ -763,7 +763,7 @@ static void send_reply(struct mpv_handle *ctx, uint64_t userdata, assert(ctx->reserved_events > 0); ctx->reserved_events--; if (append_event(ctx, *event, false) < 0) - abort(); // not reached + MP_ASSERT_UNREACHABLE(); pthread_mutex_unlock(&ctx->lock); } diff --git a/player/command.c b/player/command.c index 28ca602ef8..9ade4c08df 100644 --- a/player/command.c +++ b/player/command.c @@ -409,7 +409,7 @@ static int mp_property_av_speed_correction(void *ctx, struct m_property *prop, switch (type[0]) { case 'a': val = mpctx->speed_factor_a; break; case 'v': val = mpctx->speed_factor_v; break; - default: abort(); + default: MP_ASSERT_UNREACHABLE(); } if (action == M_PROPERTY_PRINT) { diff --git a/player/playloop.c b/player/playloop.c index 8b0d017f9f..8236ec92ff 100644 --- a/player/playloop.c +++ b/player/playloop.c @@ -291,7 +291,7 @@ static void mp_seek(MPContext *mpctx, struct seek_params seek) if (len >= 0) seek_pts = seek.amount * len; break; - default: abort(); + default: MP_ASSERT_UNREACHABLE(); } double demux_pts = seek_pts; @@ -458,7 +458,7 @@ void queue_seek(struct MPContext *mpctx, enum seek_type type, double amount, *seek = (struct seek_params){ 0 }; return; } - abort(); + MP_ASSERT_UNREACHABLE(); } void execute_queued_seek(struct MPContext *mpctx) diff --git a/video/csputils.c b/video/csputils.c index 4df754a76d..29f0b37e80 100644 --- a/video/csputils.c +++ b/video/csputils.c @@ -785,7 +785,7 @@ void mp_get_csp_matrix(struct mp_csp_params *params, struct mp_cmat *m) break; } default: - abort(); + MP_ASSERT_UNREACHABLE(); }; if (params->is_float) @@ -822,7 +822,7 @@ void mp_get_csp_matrix(struct mp_csp_params *params, struct mp_cmat *m) case MP_CSP_LEVELS_PC: yuvlev = yuvfull; break; case -1: yuvlev = anyfull; break; default: - abort(); + MP_ASSERT_UNREACHABLE(); } int levels_out = params->levels_out; @@ -836,7 +836,7 @@ void mp_get_csp_matrix(struct mp_csp_params *params, struct mp_cmat *m) case MP_CSP_LEVELS_TV: rgblev = rgblim; break; case MP_CSP_LEVELS_PC: rgblev = rgbfull; break; default: - abort(); + MP_ASSERT_UNREACHABLE(); } double ymul = (rgblev.max - rgblev.min) / (yuvlev.ymax - yuvlev.ymin); diff --git a/video/out/d3d11/ra_d3d11.c b/video/out/d3d11/ra_d3d11.c index 62fcc1f47e..38624daeb2 100644 --- a/video/out/d3d11/ra_d3d11.c +++ b/video/out/d3d11/ra_d3d11.c @@ -510,7 +510,7 @@ static struct ra_tex *tex_create(struct ra *ra, tex_p->res = (ID3D11Resource *)tex_p->tex3d; break; default: - abort(); + MP_ASSERT_UNREACHABLE(); } tex_p->array_slice = -1; diff --git a/video/out/gpu/osd.c b/video/out/gpu/osd.c index 75538dbdf4..91505a987d 100644 --- a/video/out/gpu/osd.c +++ b/video/out/gpu/osd.c @@ -225,7 +225,7 @@ bool mpgl_osd_draw_prepare(struct mpgl_osd *ctx, int index, break; } default: - abort(); + MP_ASSERT_UNREACHABLE(); } return true; diff --git a/video/out/gpu/shader_cache.c b/video/out/gpu/shader_cache.c index 1d5e563cb8..302508b543 100644 --- a/video/out/gpu/shader_cache.c +++ b/video/out/gpu/shader_cache.c @@ -486,7 +486,7 @@ static const char *vao_glsl_type(const struct ra_renderpass_input *e) case 2: return "vec2"; case 3: return "vec3"; case 4: return "vec4"; - default: abort(); + default: MP_ASSERT_UNREACHABLE(); } } @@ -553,7 +553,7 @@ static void update_uniform(struct gl_shader_cache *sc, struct sc_entry *e, assert(e->pushc); update_pushc(sc->ra, e->pushc, u); break; - default: abort(); + default: MP_ASSERT_UNREACHABLE(); } } diff --git a/video/out/gpu/user_shaders.c b/video/out/gpu/user_shaders.c index f0c8a9d19a..708de87485 100644 --- a/video/out/gpu/user_shaders.c +++ b/video/out/gpu/user_shaders.c @@ -102,7 +102,7 @@ bool eval_szexpr(struct mp_log *log, void *priv, switch (expr[i].val.op) { case SZEXP_OP_NOT: stack[idx-1] = !stack[idx-1]; break; - default: abort(); + default: MP_ASSERT_UNREACHABLE(); } continue; @@ -125,7 +125,7 @@ bool eval_szexpr(struct mp_log *log, void *priv, case SZEXP_OP_GT: res = op1 > op2; break; case SZEXP_OP_LT: res = op1 < op2; break; case SZEXP_OP_EQ: res = op1 == op2; break; - default: abort(); + default: MP_ASSERT_UNREACHABLE(); } if (!isfinite(res)) { diff --git a/video/out/gpu/video.c b/video/out/gpu/video.c index abe5e9333c..c9ab48d170 100644 --- a/video/out/gpu/video.c +++ b/video/out/gpu/video.c @@ -1915,8 +1915,7 @@ static void pass_sample(struct gl_video *p, struct image img, } else if (scaler->kernel) { pass_sample_separated(p, img, scaler, w, h); } else { - // Should never happen - abort(); + MP_ASSERT_UNREACHABLE(); // should never happen } // Apply any required multipliers. Separated scaling already does this in diff --git a/video/out/opengl/ra_gl.c b/video/out/opengl/ra_gl.c index 8eddb5fabc..03207e1c4a 100644 --- a/video/out/opengl/ra_gl.c +++ b/video/out/opengl/ra_gl.c @@ -295,7 +295,7 @@ static struct ra_tex *gl_tex_create_blank(struct ra *ra, case 1: tex_gl->target = GL_TEXTURE_1D; break; case 2: tex_gl->target = GL_TEXTURE_2D; break; case 3: tex_gl->target = GL_TEXTURE_3D; break; - default: abort(); + default: MP_ASSERT_UNREACHABLE(); } if (params->non_normalized) { assert(params->dimensions == 2); @@ -631,7 +631,7 @@ static struct ra_buf *gl_buf_create(struct ra *ra, case RA_BUF_TYPE_TEX_UPLOAD: hint = GL_STREAM_DRAW; break; case RA_BUF_TYPE_SHADER_STORAGE: hint = GL_STREAM_COPY; break; case RA_BUF_TYPE_UNIFORM: hint = GL_STATIC_DRAW; break; - default: abort(); + default: MP_ASSERT_UNREACHABLE(); } gl->BufferData(buf_gl->target, params->size, params->initial_data, hint); @@ -738,7 +738,7 @@ static const char *shader_typestr(GLenum type) case GL_VERTEX_SHADER: return "vertex"; case GL_FRAGMENT_SHADER: return "fragment"; case GL_COMPUTE_SHADER: return "compute"; - default: abort(); + default: MP_ASSERT_UNREACHABLE(); } } @@ -964,14 +964,14 @@ static void update_uniform(struct ra *ra, struct ra_renderpass *pass, case 2: gl->Uniform2f(loc, f[0], f[1]); break; case 3: gl->Uniform3f(loc, f[0], f[1], f[2]); break; case 4: gl->Uniform4f(loc, f[0], f[1], f[2], f[3]); break; - default: abort(); + default: MP_ASSERT_UNREACHABLE(); } } else if (input->dim_v == 2 && input->dim_m == 2) { gl->UniformMatrix2fv(loc, 1, GL_FALSE, f); } else if (input->dim_v == 3 && input->dim_m == 3) { gl->UniformMatrix3fv(loc, 1, GL_FALSE, f); } else { - abort(); + MP_ASSERT_UNREACHABLE(); } break; } @@ -1002,7 +1002,7 @@ static void update_uniform(struct ra *ra, struct ra_renderpass *pass, break; } default: - abort(); + MP_ASSERT_UNREACHABLE(); } } @@ -1086,7 +1086,7 @@ static void gl_renderpass_run(struct ra *ra, gl->MemoryBarrier(GL_TEXTURE_FETCH_BARRIER_BIT); break; } - default: abort(); + default: MP_ASSERT_UNREACHABLE(); } for (int n = 0; n < params->num_values; n++) diff --git a/video/out/placebo/ra_pl.c b/video/out/placebo/ra_pl.c index d2590d35d3..dd24e1dadf 100644 --- a/video/out/placebo/ra_pl.c +++ b/video/out/placebo/ra_pl.c @@ -617,7 +617,7 @@ static void renderpass_run_pl(struct ra *ra, case RA_VARTYPE_BUF_RW: bind.object = (* (struct ra_buf **) val->data)->priv; break; - default: abort(); + default: MP_ASSERT_UNREACHABLE(); }; p->binds[p->inp_index[val->index]] = bind; diff --git a/video/out/vo_vdpau.c b/video/out/vo_vdpau.c index b08348987a..da14693092 100644 --- a/video/out/vo_vdpau.c +++ b/video/out/vo_vdpau.c @@ -600,7 +600,7 @@ static void generate_osd_part(struct vo *vo, struct sub_bitmaps *imgs) format = VDP_RGBA_FORMAT_B8G8R8A8; break; default: - abort(); + MP_ASSERT_UNREACHABLE(); }; assert(imgs->packed);