From 4589c6a2a30faba53d0655a8e3a29b54d28bb6f6 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 27 Jan 2020 18:46:30 -0500 Subject: [PATCH] Apply project best practices to switches over enum values. In the wake of 1f3a02173, assorted buildfarm members were warning about "control reaches end of non-void function" or the like. Do what we've done elsewhere: in place of a "default" switch case that will prevent the compiler from warning about unhandled enum values, put a catchall elog() after the switch. And return a dummy value to satisfy compilers that don't know elog() doesn't return. --- src/backend/utils/adt/jsonapi.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/backend/utils/adt/jsonapi.c b/src/backend/utils/adt/jsonapi.c index 1ac3b7beda..230a55b101 100644 --- a/src/backend/utils/adt/jsonapi.c +++ b/src/backend/utils/adt/jsonapi.c @@ -1003,9 +1003,15 @@ report_parse_error(JsonParseContext ctx, JsonLexContext *lex) return JSON_EXPECTED_OBJECT_NEXT; case JSON_PARSE_OBJECT_COMMA: return JSON_EXPECTED_STRING; - default: - elog(ERROR, "unexpected json parse state: %d", ctx); } + + /* + * We don't use a default: case, so that the compiler will warn about + * unhandled enum values. But this needs to be here anyway to cover the + * possibility of an incorrect input. + */ + elog(ERROR, "unexpected json parse state: %d", (int) ctx); + return JSON_SUCCESS; /* silence stupider compilers */ } /* @@ -1017,7 +1023,7 @@ json_errdetail(JsonParseErrorType error, JsonLexContext *lex) switch (error) { case JSON_SUCCESS: - elog(ERROR, "internal error in json parser"); + /* fall through to the error code after switch */ break; case JSON_ESCAPING_INVALID: return psprintf(_("Escape sequence \"\\%s\" is invalid."), @@ -1065,6 +1071,14 @@ json_errdetail(JsonParseErrorType error, JsonLexContext *lex) case JSON_UNICODE_LOW_SURROGATE: return _("Unicode low surrogate must follow a high surrogate."); } + + /* + * We don't use a default: case, so that the compiler will warn about + * unhandled enum values. But this needs to be here anyway to cover the + * possibility of an incorrect input. + */ + elog(ERROR, "unexpected json parse error type: %d", (int) error); + return NULL; /* silence stupider compilers */ } /*