Browse Source

mhd_UNREACHABLE(): improved internal helper macro

Forced assert trigger if the macro is reached on debug builds.
Regardless of the macro content, it can be always safely used in
constructs like:

  if (something)
    do_something();
  else
    mhd_UNREACHABLE();
Evgeny Grin (Karlson2k) 1 năm trước cách đây
mục cha
commit
ca6f6d670d

+ 2 - 2
configure.ac

@@ -1278,9 +1278,9 @@ int main(void)
 )
 AS_IF([test "x${mhd_cv_cc_kwd_unreachable}" != "xnone"],
   [
-    AC_DEFINE_UNQUOTED([MHD_UNREACHABLE_],[$mhd_cv_cc_kwd_unreachable],[Define to keyword used to indicate unreachable code paths])
+    AC_DEFINE_UNQUOTED([MHD_UNREACHABLE_KEYWORD],[$mhd_cv_cc_kwd_unreachable],[Define to keyword supported to indicate unreachable code paths])
     AS_IF([test "x${mhd_cv_cc_kwd_unreachable}" = "xunreachable()" && test "x$ac_cv_header_stddef_h" = "xyes"],
-      AC_DEFINE([MHD_UNREACHABLE_NEEDS_STDDEF_H],[$mhd_cv_cc_kwd_unreachable],[Define to '1' if MHD_UNREACHABLE_() requires include of <stddef.h> header])
+      [AC_DEFINE([MHD_UNREACHABLE_NEEDS_STDDEF_H],[$mhd_cv_cc_kwd_unreachable],[Define to '1' if MHD_UNREACHABLE_KEYWORD requires include of <stddef.h> header])]
     )
   ]
 )

+ 1 - 1
src/mhd2/Makefile.am

@@ -32,7 +32,7 @@ libmicrohttpd2_la_SOURCES = \
   sys_sendfile.h \
   compat_calloc.h \
   sys_w32_ver.h \
-  mhd_assert.h \
+  mhd_assert.h              mhd_unreachable.h \
   mhd_cntnr_ptr.h           mhd_arr_num_elems.h \
   mhd_tristate.h            mhd_status_code_int.h \
   mhd_socket_type.h         mhd_sockets_macros.h \

+ 2 - 1
src/mhd2/conn_data_process.c

@@ -36,6 +36,7 @@
 #include "sys_base_types.h"
 
 #include "mhd_assert.h"
+#include "mhd_unreachable.h"
 
 #include "mhd_daemon.h"
 #include "mhd_connection.h"
@@ -70,7 +71,7 @@ mhd_conn_process_recv_send_data (struct MHD_Connection *restrict c)
       return false; /* Connection is broken */
     default:
       mhd_assert (0 && "Impossible value");
-      MHD_UNREACHABLE_;
+      mhd_UNREACHABLE ();
     }
   }
 #endif /* MHD_ENABLE_HTTPS */

+ 3 - 2
src/mhd2/conn_data_send.c

@@ -36,6 +36,7 @@
 #include "mhd_str_macros.h"
 
 #include "mhd_assert.h"
+#include "mhd_unreachable.h"
 
 #include "mhd_connection.h"
 #include "mhd_response.h"
@@ -324,12 +325,12 @@ mhd_conn_data_send (struct MHD_Connection *restrict c)
   case mhd_HTTP_STAGE_UPGRADED_CLEANING:
 #endif /* MHD_UPGRADE_SUPPORT */
     mhd_assert (0 && "Should be unreachable");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     res = mhd_SOCKET_ERR_INTERNAL;
     break;
   default:
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     res = mhd_SOCKET_ERR_INTERNAL;
     break;
   }

+ 2 - 1
src/mhd2/conn_tls_check.c

@@ -29,6 +29,7 @@
 #include "conn_tls_check.h"
 
 #include "mhd_assert.h"
+#include "mhd_unreachable.h"
 
 #include "mhd_daemon.h"
 #include "mhd_connection.h"
@@ -121,7 +122,7 @@ mhd_conn_tls_check (struct MHD_Connection *restrict c)
     break;
   default:
     mhd_assert (0 && "Should be unreachable");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     return mhd_CONN_TLS_CHECK_BROKEN;
   }
 

+ 14 - 12
src/mhd2/daemon_start.c

@@ -67,6 +67,8 @@
 #include "daemon_options.h"
 
 #include "mhd_assert.h"
+#include "mhd_unreachable.h"
+
 #include "mhd_sockets_funcs.h"
 
 #include "mhd_lib_init.h"
@@ -446,7 +448,7 @@ create_bind_listen_stream_socket (struct MHD_Daemon *restrict d,
       {
       case MHD_AF_NONE:
         mhd_assert (0);
-        MHD_UNREACHABLE_;
+        mhd_UNREACHABLE ();
         return MHD_SC_INTERNAL_ERROR;
       case MHD_AF_AUTO:
 #ifdef HAVE_INET6
@@ -593,7 +595,7 @@ create_bind_listen_stream_socket (struct MHD_Daemon *restrict d,
       case mhd_SKT_NO_SOCKET:
       default:
         mhd_assert (0);
-        MHD_UNREACHABLE_;
+        mhd_UNREACHABLE ();
         return MHD_SC_INTERNAL_ERROR;
       }
 
@@ -970,7 +972,7 @@ create_bind_listen_stream_socket (struct MHD_Daemon *restrict d,
     case mhd_SKT_NO_SOCKET:
     default:
       mhd_assert (0 && "Impossible value");
-      MHD_UNREACHABLE_;
+      mhd_UNREACHABLE ();
       return MHD_SC_INTERNAL_ERROR;
     }
     d->net.listen.non_block = is_non_block;
@@ -1312,7 +1314,7 @@ daemon_choose_and_preinit_events (struct MHD_Daemon *restrict d,
   case mhd_POLL_TYPE_NOT_SET_YET:
   default:
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     return MHD_SC_INTERNAL_ERROR;
     break;
   }
@@ -1726,7 +1728,7 @@ allocate_events (struct MHD_Daemon *restrict d)
   default:
     mhd_assert (0 && "Impossible value");
   }
-  MHD_UNREACHABLE_;
+  mhd_UNREACHABLE ();
   return MHD_SC_INTERNAL_ERROR;
 }
 
@@ -1745,7 +1747,7 @@ deallocate_events (struct MHD_Daemon *restrict d)
   if (mhd_POLL_TYPE_NOT_SET_YET == d->events.poll_type)
   {
     mhd_assert (0 && "Wrong workflow");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     return;
   }
 #ifdef MHD_USE_SELECT
@@ -1961,7 +1963,7 @@ add_itc_and_listen_to_monitoring (struct MHD_Daemon *restrict d)
   default:
     mhd_assert (0 && "Impossible value");
   }
-  MHD_UNREACHABLE_;
+  mhd_UNREACHABLE ();
   return MHD_SC_INTERNAL_ERROR;
 }
 
@@ -2339,7 +2341,7 @@ set_d_threading_type (struct MHD_Daemon *restrict d)
   default:
     mhd_assert (0 && "Impossible value");
   }
-  MHD_UNREACHABLE_;
+  mhd_UNREACHABLE ();
   return MHD_SC_INTERNAL_ERROR;
 }
 
@@ -2617,7 +2619,7 @@ daemon_deinit_threading_and_conn (struct MHD_Daemon *restrict d)
     deinit_workers_pool (d, d->threading.hier.pool.num);
 #else  /* ! MHD_USE_THREADS */
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     (void) 0;
 #endif /* ! MHD_USE_THREADS */
   }
@@ -2687,7 +2689,7 @@ start_individual_daemon_thread (struct MHD_Daemon *restrict d)
   else
   {
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     return MHD_SC_INTERNAL_ERROR;
   }
   mhd_assert (mhd_thread_handle_ID_is_valid_handle (d->threading.tid));
@@ -2847,7 +2849,7 @@ daemon_start_threads (struct MHD_Daemon *restrict d)
     }
 #else  /* ! MHD_USE_THREADS */
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     return MHD_SC_INTERNAL_ERROR;
 #endif /* ! MHD_USE_THREADS */
   }
@@ -2886,7 +2888,7 @@ daemon_stop_threads (struct MHD_Daemon *restrict d)
     }
 #else  /* ! MHD_USE_THREADS */
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     return MHD_SC_INTERNAL_ERROR;
 #endif /* ! MHD_USE_THREADS */
   }

+ 5 - 2
src/mhd2/events_process.c

@@ -27,6 +27,9 @@
 #include "mhd_sys_options.h"
 #include "events_process.h"
 
+#include "mhd_assert.h"
+#include "mhd_unreachable.h"
+
 #include "mhd_locks.h"
 
 #include "mhd_socket_type.h"
@@ -1097,7 +1100,7 @@ process_all_events_and_data (struct MHD_Daemon *restrict d)
   case mhd_POLL_TYPE_NOT_SET_YET:
   default:
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     MHD_PANIC ("Daemon data integrity broken");
   }
   if (d->events.act_req.accept)
@@ -1173,7 +1176,7 @@ process_listening_and_itc_only (struct MHD_Daemon *restrict d)
   else
   {
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     MHD_PANIC ("Daemon data integrity broken");
   }
   // TODO: Accept connections

+ 0 - 7
src/mhd2/mhd_assert.h

@@ -78,11 +78,4 @@
 #  endif /* ! HAVE_ASSERT */
 #endif /* NDEBUG */
 
-#ifdef _DEBUG
-#  ifdef MHD_UNREACHABLE_
-#    undef MHD_UNREACHABLE_
-#  endif
-#  define MHD_UNREACHABLE_ (mhd_assert (0 && "Should not be reachable"))
-#endif
-
 #endif /* ! MHD_ASSERT_H */

+ 2 - 1
src/mhd2/mhd_mono_clock.c

@@ -71,6 +71,7 @@
 #endif /* _WIN32 */
 
 #include "mhd_assert.h"
+#include "mhd_unreachable.h"
 
 
 #ifdef HAVE_CLOCK_GETTIME
@@ -705,7 +706,7 @@ mhd_monotonic_msec_counter (void)
 #endif /* _WIN32 */
   default:
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     break;
   }
 

+ 55 - 0
src/mhd2/mhd_unreachable.h

@@ -0,0 +1,55 @@
+/*
+  This file is part of GNU libmicrohttpd
+  Copyright (C) 2024 Evgeny Grin (Karlson2k)
+
+  GNU libmicrohttpd is free software; you can redistribute it and/or
+  modify it under the terms of the GNU Lesser General Public
+  License as published by the Free Software Foundation; either
+  version 2.1 of the License, or (at your option) any later version.
+
+  GNU libmicrohttpd is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public
+  License along with this library; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+*/
+
+/**
+ * @file src/mhd2/mhd_unreachable.h
+ * @brief  The definition of the mhd_UNREACHABLE() macro
+ * @author Karlson2k (Evgeny Grin)
+ */
+
+#ifndef MHD_UNREACHABLE_H
+#define MHD_UNREACHABLE_H 1
+
+#include "mhd_sys_options.h"
+
+#if !defined(NDEBUG)
+#  include "mhd_assert.h"
+#elif defined (MHD_UNREACHABLE_NEEDS_STDDEF_H)
+#  include <stddef.h>
+#endif
+
+/**
+ * mhd_UNREACHABLE() should be used in locations where it is known in advance
+ * that the code must be not reachable.
+ * It should give compiler a hint to exclude some code paths from the final
+ * binary.
+ */
+#ifdef NDEBUG
+#  ifdef MHD_UNREACHABLE_KEYWORD
+#    define mhd_UNREACHABLE()   MHD_UNREACHABLE_KEYWORD
+#  else
+#    define mhd_UNREACHABLE()   ((void) 0)
+#  endif
+#else
+#  define mhd_UNREACHABLE()     \
+          mhd_assert (0 && "This code should be unreachable")
+#endif
+
+#endif /* ! MHD_UNREACHABLE_H */

+ 17 - 14
src/mhd2/post_parser_funcs.c

@@ -29,6 +29,9 @@
 
 #include "post_parser_funcs.h"
 
+#include "mhd_assert.h"
+#include "mhd_unreachable.h"
+
 #include "mhd_post_parser.h"
 
 #include <string.h>
@@ -399,7 +402,7 @@ init_post_parse_data (struct MHD_Connection *restrict c)
   case MHD_HTTP_POST_ENCODING_OTHER:
   default:
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
   }
 }
 
@@ -1324,11 +1327,11 @@ parse_post_urlenc (struct MHD_Connection *restrict c,
       continue; /* Process the next char */
     default:
       mhd_assert (0 && "Impossible value");
-      MHD_UNREACHABLE_;
+      mhd_UNREACHABLE ();
       break;
     }
     mhd_assert (0 && "Should be unreachable");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     break;
   }
 
@@ -1761,7 +1764,7 @@ parse_post_mpart (struct MHD_Connection *restrict c,
                       mhd_assert (0 && "broken quoting must be detected " \
                                   "earlier by " \
                                   "mhd_str_starts_with_token_req_param()");
-                      MHD_UNREACHABLE_;
+                      mhd_UNREACHABLE ();
                       mf->st = mhd_POST_MPART_ST_FORMAT_ERROR;
                       continue;
                     }
@@ -1783,7 +1786,7 @@ parse_post_mpart (struct MHD_Connection *restrict c,
                 mhd_assert (mhd_STR_STARTS_W_TOKEN_NO_TOKEN == res);
                 mhd_assert (0 && "The presence of the token was "
                             "checked earlier");
-                MHD_UNREACHABLE_;
+                mhd_UNREACHABLE ();
               }
 
               if (hdr_has_name)
@@ -1798,7 +1801,7 @@ parse_post_mpart (struct MHD_Connection *restrict c,
                     mhd_assert (0 && "broken quoting must be detected " \
                                 "earlier by " \
                                 "mhd_str_starts_with_token_req_param()");
-                    MHD_UNREACHABLE_;
+                    mhd_UNREACHABLE ();
                     mf->st = mhd_POST_MPART_ST_FORMAT_ERROR;
                     continue;
                   }
@@ -2067,11 +2070,11 @@ parse_post_mpart (struct MHD_Connection *restrict c,
       return true;
     default:
       mhd_assert (0 && "Impossible value");
-      MHD_UNREACHABLE_;
+      mhd_UNREACHABLE ();
       break;
     }
     mhd_assert (0 && "Should be unreachable");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     break;
   }
 
@@ -2289,7 +2292,7 @@ parse_post_text (struct MHD_Connection *restrict c,
       continue; /* Process the next char */
     default:
       mhd_assert (0 && "Impossible value");
-      MHD_UNREACHABLE_;
+      mhd_UNREACHABLE ();
       enc_broken = true;
       break;
     }
@@ -2423,7 +2426,7 @@ mhd_stream_post_parse (struct MHD_Connection *restrict c,
     case MHD_HTTP_POST_ENCODING_OTHER:
     default:
       mhd_assert (0 && "Impossible value");
-      MHD_UNREACHABLE_;
+      mhd_UNREACHABLE ();
       p_data->parse_result =
         MHD_POST_PARSE_RES_PARTIAL_INVALID_POST_FORMAT;
       c->stage = mhd_HTTP_STAGE_FULL_REQ_RECEIVED;
@@ -2568,7 +2571,7 @@ check_post_leftovers_urlenc (struct MHD_Connection *restrict c,
   case mhd_POST_UENC_ST_AT_AMPRSND:
   default:
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     p_data->parse_result = MHD_POST_PARSE_RES_FAILED_INVALID_POST_FORMAT;
     return false;
   }
@@ -2705,7 +2708,7 @@ check_post_leftovers_mpart (struct MHD_Connection *restrict c,
   case mhd_POST_MPART_ST_VALUE_END_FOUND_FINAL:
   default:
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     p_data->parse_result = MHD_POST_PARSE_RES_FAILED_INVALID_POST_FORMAT;
     return false;
   }
@@ -2837,7 +2840,7 @@ check_post_leftovers_text (struct MHD_Connection *restrict c,
   case mhd_POST_TEXT_ST_AT_CR:
   default:
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     p_data->parse_result = MHD_POST_PARSE_RES_FAILED_INVALID_POST_FORMAT;
     return false;
   }
@@ -2905,7 +2908,7 @@ check_post_leftovers (struct MHD_Connection *restrict c)
   case MHD_HTTP_POST_ENCODING_OTHER:
   default:
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     p_data->parse_result =
       MHD_POST_PARSE_RES_PARTIAL_INVALID_POST_FORMAT;
     c->stage = mhd_HTTP_STAGE_FULL_REQ_RECEIVED;

+ 5 - 3
src/mhd2/stream_funcs.c

@@ -28,6 +28,9 @@
 
 #include "stream_funcs.h"
 
+#include "mhd_assert.h"
+#include "mhd_unreachable.h"
+
 #include <string.h>
 #ifdef MHD_USE_EPOLL
 #  include <sys/epoll.h>
@@ -37,7 +40,6 @@
 #include "mhd_daemon.h"
 #include "mhd_connection.h"
 #include "mhd_response.h"
-#include "mhd_assert.h"
 #include "mhd_mempool.h"
 #include "mhd_str.h"
 #include "mhd_str_macros.h"
@@ -777,7 +779,7 @@ mhd_conn_start_closing (struct MHD_Connection *restrict c,
     case mhd_SOCKET_ERR_INTR:
     default:
       mhd_assert (0 && "Impossible value");
-      MHD_UNREACHABLE_;
+      mhd_UNREACHABLE ();
     }
     break;
   case mhd_CONN_CLOSE_DAEMON_SHUTDOWN:
@@ -815,7 +817,7 @@ mhd_conn_start_closing (struct MHD_Connection *restrict c,
 
   default:
     mhd_assert (0 && "Unreachable code");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     end_code = MHD_REQUEST_ENDED_COMPLETED_OK;
     close_hard = false;
   }

+ 8 - 6
src/mhd2/stream_process_reply.c

@@ -34,6 +34,9 @@
 #include "sys_bool_type.h"
 #include "sys_base_types.h"
 
+#include "mhd_assert.h"
+#include "mhd_unreachable.h"
+
 #include <string.h>
 #ifdef HAVE_TIME_H
 #  include <time.h>
@@ -45,7 +48,6 @@
 #include "mhd_connection.h"
 
 #include "daemon_logger.h"
-#include "mhd_assert.h"
 
 #include "mhd_str.h"
 #include "http_status_str.h"
@@ -324,7 +326,7 @@ setup_reply_properties (struct MHD_Connection *restrict c)
     case mhd_RESPONSE_CONTENT_DATA_INVALID:
     default:
       mhd_assert (0 && "Impossible value");
-      MHD_UNREACHABLE_;
+      mhd_UNREACHABLE ();
       c->rp.cntn_loc = mhd_REPLY_CNTN_LOC_NOWHERE;
       break;
     }
@@ -958,7 +960,7 @@ preprocess_dcc_action (struct MHD_Connection *restrict c,
     break;
   }
   mhd_assert (0 && "Impossible value");
-  MHD_UNREACHABLE_;
+  mhd_UNREACHABLE ();
   mhd_STREAM_ABORT (c,
                     mhd_CONN_CLOSE_INT_ERROR,
                     "Impossible code path");
@@ -1017,7 +1019,7 @@ read_response_file (struct MHD_Connection *restrict c,
     return false;
   default:
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     c->rp.cntn_loc = mhd_REPLY_CNTN_LOC_NOWHERE;
     return false;
   }
@@ -1131,7 +1133,7 @@ mhd_stream_prep_unchunked_body (struct MHD_Connection *restrict c)
     else
     {
       mhd_assert (0 && "Impossible value");
-      MHD_UNREACHABLE_;
+      mhd_UNREACHABLE ();
       c->rp.cntn_loc = mhd_REPLY_CNTN_LOC_NOWHERE;
       c->rp.rsp_cntn_read_pos = r->cntn_size;
     }
@@ -1169,7 +1171,7 @@ mhd_stream_prep_unchunked_body (struct MHD_Connection *restrict c)
   else
   {
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     c->rp.cntn_loc = mhd_REPLY_CNTN_LOC_NOWHERE;
     c->rp.rsp_cntn_read_pos = r->cntn_size;
   }

+ 7 - 5
src/mhd2/stream_process_request.c

@@ -35,6 +35,9 @@
 #include "sys_bool_type.h"
 #include "sys_base_types.h"
 
+#include "mhd_assert.h"
+#include "mhd_unreachable.h"
+
 #include "sys_malloc.h"
 
 #include "mhd_str_types.h"
@@ -47,7 +50,6 @@
 #include "mhd_connection.h"
 
 #include "daemon_logger.h"
-#include "mhd_assert.h"
 #include "mhd_panic.h"
 
 #include "mhd_mempool.h"
@@ -2536,7 +2538,7 @@ parse_cookie_header (struct MHD_Connection *restrict connection,
     break;
   default:
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     break;
   }
 
@@ -3013,7 +3015,7 @@ mhd_stream_call_app_request_cb (struct MHD_Connection *restrict c)
     mhd_assert (0 && "Impossible value");
     break;
   }
-  MHD_UNREACHABLE_;
+  mhd_UNREACHABLE ();
   return false;
 }
 
@@ -3076,7 +3078,7 @@ mhd_stream_process_upload_action (struct MHD_Connection *restrict c,
     mhd_assert (0 && "Impossible value");
     break;
   }
-  MHD_UNREACHABLE_;
+  mhd_UNREACHABLE ();
   return false;
 }
 
@@ -3943,7 +3945,7 @@ mhd_stream_check_and_grow_read_buffer_space (struct MHD_Connection *restrict c)
 #endif /* MHD_UPGRADE_SUPPORT */
     default:
       mhd_assert (0);
-      MHD_UNREACHABLE_;
+      mhd_UNREACHABLE ();
       stage = MHD_PROC_RECV_BODY_NORMAL;
     }
 

+ 19 - 16
src/mhd2/stream_process_states.c

@@ -34,6 +34,9 @@
 #include "sys_bool_type.h"
 #include "sys_base_types.h"
 
+#include "mhd_assert.h"
+#include "mhd_unreachable.h"
+
 #include "mhd_str_macros.h"
 #include "mhd_socket_error_funcs.h"
 
@@ -70,7 +73,7 @@ mhd_conn_event_loop_state_update (struct MHD_Connection *restrict c)
     break;
   case mhd_HTTP_STAGE_REQ_LINE_RECEIVED:
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     break;
   case mhd_HTTP_STAGE_REQ_HEADERS_RECEIVING:
     c->event_loop_info = MHD_EVENT_LOOP_INFO_RECV;
@@ -78,7 +81,7 @@ mhd_conn_event_loop_state_update (struct MHD_Connection *restrict c)
   case mhd_HTTP_STAGE_HEADERS_RECEIVED:
   case mhd_HTTP_STAGE_HEADERS_PROCESSED:
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     break;
   case mhd_HTTP_STAGE_CONTINUE_SENDING:
     c->event_loop_info = MHD_EVENT_LOOP_INFO_SEND;
@@ -88,14 +91,14 @@ mhd_conn_event_loop_state_update (struct MHD_Connection *restrict c)
     break;
   case mhd_HTTP_STAGE_BODY_RECEIVED:
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     break;
   case mhd_HTTP_STAGE_FOOTERS_RECEIVING:
     c->event_loop_info = MHD_EVENT_LOOP_INFO_RECV;
     break;
   case mhd_HTTP_STAGE_FOOTERS_RECEIVED:
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     break;
   case mhd_HTTP_STAGE_FULL_REQ_RECEIVED:
     mhd_assert (0 && "Should not be possible");
@@ -103,11 +106,11 @@ mhd_conn_event_loop_state_update (struct MHD_Connection *restrict c)
     break;
   case mhd_HTTP_STAGE_REQ_RECV_FINISHED:
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     break;
   case mhd_HTTP_STAGE_START_REPLY:
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     break;
   case mhd_HTTP_STAGE_HEADERS_SENDING:
     /* headers in buffer, keep writing */
@@ -115,7 +118,7 @@ mhd_conn_event_loop_state_update (struct MHD_Connection *restrict c)
     break;
   case mhd_HTTP_STAGE_HEADERS_SENT:
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     break;
 #ifdef MHD_UPGRADE_SUPPORT
   case mhd_HTTP_STAGE_UPGRADE_HEADERS_SENDING:
@@ -138,19 +141,19 @@ mhd_conn_event_loop_state_update (struct MHD_Connection *restrict c)
     break;
   case mhd_HTTP_STAGE_CHUNKED_BODY_SENT:
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     break;
   case mhd_HTTP_STAGE_FOOTERS_SENDING:
     c->event_loop_info = MHD_EVENT_LOOP_INFO_SEND;
     break;
   case mhd_HTTP_STAGE_FULL_REPLY_SENT:
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     break;
 #ifdef MHD_UPGRADE_SUPPORT
   case mhd_HTTP_STAGE_UPGRADING:
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     break;
   case mhd_HTTP_STAGE_UPGRADED:
     mhd_assert (0 && "Should not be possible");
@@ -171,7 +174,7 @@ mhd_conn_event_loop_state_update (struct MHD_Connection *restrict c)
     break;
   default:
     mhd_assert (0 && "Impossible value");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
   }
 }
 
@@ -474,22 +477,22 @@ mhd_conn_process_data (struct MHD_Connection *restrict c)
       continue;
     case mhd_HTTP_STAGE_UPGRADED:
       mhd_assert (0 && "Should be unreachable");
-      MHD_UNREACHABLE_;
+      mhd_UNREACHABLE ();
       break;
     case mhd_HTTP_STAGE_UPGRADED_CLEANING:
       mhd_assert (0 && "Should be unreachable");
-      MHD_UNREACHABLE_;
+      mhd_UNREACHABLE ();
       break;
 #endif /* MHD_UPGRADE_SUPPORT */
     case mhd_HTTP_STAGE_PRE_CLOSING:
       return false;
     case mhd_HTTP_STAGE_CLOSED:
       mhd_assert (0 && "Should be unreachable");
-      MHD_UNREACHABLE_;
+      mhd_UNREACHABLE ();
       break;
     default:
       mhd_assert (0 && "Impossible value");
-      MHD_UNREACHABLE_;
+      mhd_UNREACHABLE ();
       break;
     }
     break;
@@ -500,7 +503,7 @@ mhd_conn_process_data (struct MHD_Connection *restrict c)
   if (mhd_HTTP_STAGE_PRE_CLOSING == c->stage)
   {
     mhd_assert (0 && "Pre-closing should be already caught in the loop");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     return false;
   }
 

+ 14 - 12
src/mhd2/tls_multi_funcs.c

@@ -28,9 +28,11 @@
 
 #include "sys_bool_type.h"
 
+#include "mhd_assert.h"
+#include "mhd_unreachable.h"
+
 #include "compat_calloc.h"
 #include "sys_malloc.h"
-#include "mhd_assert.h"
 
 #include "mhd_arr_num_elems.h"
 
@@ -168,7 +170,7 @@ tls_daemon_init_try (enum mhd_TlsMultiRoute route,
   default:
   }
   mhd_assert (0 && "Impossible value");
-  MHD_UNREACHABLE_;
+  mhd_UNREACHABLE ();
   return MHD_SC_INTERNAL_ERROR;
 }
 
@@ -243,7 +245,7 @@ mhd_tls_multi_daemon_init (struct MHD_Daemon *restrict d,
   default:
     break;
     mhd_assert (0 && "Should not be reachable");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     return MHD_SC_TLS_BACKEND_UNSUPPORTED;
   }
   mhd_assert (NULL != d_tls);
@@ -281,7 +283,7 @@ mhd_tls_multi_daemon_deinit (struct mhd_TlsMultiDaemonData *restrict d_tls)
 #endif /* ! MHD_USE_OPENSSL */
   case mhd_TLS_MULTI_ROUTE_NONE:
   default:
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
   }
   free (d_tls);
 }
@@ -315,7 +317,7 @@ mhd_tls_multi_conn_get_tls_size (struct mhd_TlsMultiDaemonData *restrict d_tls)
 #endif /* ! MHD_USE_OPENSSL */
   case mhd_TLS_MULTI_ROUTE_NONE:
   default:
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
   }
 
   return data_size;
@@ -355,7 +357,7 @@ mhd_tls_multi_conn_init (const struct mhd_TlsMultiDaemonData *restrict d_tls,
 #endif /* ! MHD_USE_OPENSSL */
   case mhd_TLS_MULTI_ROUTE_NONE:
   default:
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
   }
 
   return false;
@@ -390,7 +392,7 @@ mhd_tls_multi_conn_deinit (struct mhd_TlsMultiConnData *restrict c_tls)
 #endif /* ! MHD_USE_OPENSSL */
   case mhd_TLS_MULTI_ROUTE_NONE:
   default:
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
   }
 }
 
@@ -419,7 +421,7 @@ mhd_tls_multi_conn_handshake (struct mhd_TlsMultiConnData *restrict c_tls)
 #endif /* ! MHD_USE_OPENSSL */
   case mhd_TLS_MULTI_ROUTE_NONE:
   default:
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
   }
   return mhd_TLS_PROCED_FAILED;
 }
@@ -447,7 +449,7 @@ mhd_tls_multi_conn_shutdown (struct mhd_TlsMultiConnData *restrict c_tls)
 #endif /* ! MHD_USE_OPENSSL */
   case mhd_TLS_MULTI_ROUTE_NONE:
   default:
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
   }
   return mhd_TLS_PROCED_FAILED;
 }
@@ -487,7 +489,7 @@ mhd_tls_multi_conn_recv (struct mhd_TlsMultiConnData *restrict c_tls,
 #endif /* ! MHD_USE_OPENSSL */
   case mhd_TLS_MULTI_ROUTE_NONE:
   default:
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
   }
   return mhd_SOCKET_ERR_INTERNAL;
 }
@@ -514,7 +516,7 @@ mhd_tls_multi_conn_has_data_in (struct mhd_TlsMultiConnData *restrict c_tls)
 #endif /* ! MHD_USE_OPENSSL */
   case mhd_TLS_MULTI_ROUTE_NONE:
   default:
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
   }
   return false;
 }
@@ -552,7 +554,7 @@ mhd_tls_multi_conn_send (struct mhd_TlsMultiConnData *restrict c_tls,
 #endif /* ! MHD_USE_OPENSSL */
   case mhd_TLS_MULTI_ROUTE_NONE:
   default:
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
   }
   return mhd_SOCKET_ERR_INTERNAL;
 }

+ 4 - 2
src/mhd2/tls_open_funcs.c

@@ -29,11 +29,13 @@
 #include "sys_bool_type.h"
 #include "sys_base_types.h"
 
+#include "mhd_assert.h"
+#include "mhd_unreachable.h"
+
 #include <string.h>
 
 #include "compat_calloc.h"
 #include "sys_malloc.h"
-#include "mhd_assert.h"
 
 #include "mhd_conn_socket.h"
 
@@ -901,7 +903,7 @@ mhd_tls_open_conn_handshake (struct mhd_TlsOpenConnData *restrict c_tls)
     return mhd_TLS_PROCED_RECV_MORE_NEEDED;
   case SSL_ERROR_NONE:
     mhd_assert (0 && "This should not be possible");
-    MHD_UNREACHABLE_;
+    mhd_UNREACHABLE ();
     break;
   default: /* Handled with all other errors below */
     break;