Apply project best practices to switches over enum values.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 27 Jan 2020 23:46:30 +0000 (18:46 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 27 Jan 2020 23:46:30 +0000 (18:46 -0500)
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

index 1ac3b7beda87a36eac0ec09ea5bf5b1dd4c4d25f..230a55b101312aa2e2086f3bd19ae6b8af1cc60e 100644 (file)
@@ -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 */
 }
 
 /*