File 0716-tools-Silence-CodeChecker-in-erl_memory.c.patch of Package erlang

From efca2761acb6f33f0ec0a3429424380234af0879 Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Thu, 25 Feb 2021 12:43:59 +0100
Subject: [PATCH 1/2] tools: Silence CodeChecker in erl_memory.c

---
 lib/tools/c_src/erl_memory.c | 31 ++++++++++++++++++++++++++-----
 1 file changed, 26 insertions(+), 5 deletions(-)

diff --git a/lib/tools/c_src/erl_memory.c b/lib/tools/c_src/erl_memory.c
index 9570cbd0e5..b5e45e3702 100644
--- a/lib/tools/c_src/erl_memory.c
+++ b/lib/tools/c_src/erl_memory.c
@@ -94,11 +94,32 @@ typedef int socklen_t;
 
 #define PRINT_OPERATIONS 0
 
+/* In VC++, noreturn is a declspec that has to be before the types,
+ * but in GNUC it is an attribute to be placed between return type
+ * and function name, hence __decl_noreturn <types> __noreturn <function name>
+ *
+ * at some platforms (e.g. Android) __noreturn is defined at sys/cdef.h
+ */
+#if __GNUC__
+#  define __decl_noreturn
+#  ifndef __noreturn
+#     define __noreturn __attribute__((noreturn))
+#  endif
+#else
+#  if defined(__WIN32__) && defined(_MSC_VER)
+#    define __noreturn
+#    define __decl_noreturn __declspec(noreturn)
+#  else
+#    define __noreturn
+#    define __decl_noreturn
+#  endif
+#endif
+
 /* Our own assert() ... */
 #ifdef DEBUG
 #define ASSERT(A) ((void) ((A) ? 1 : assert_failed(__FILE__, __LINE__, #A)))
 #include <stdio.h>
-static int assert_failed(char *f, int l, char *a)
+__decl_noreturn static int __noreturn assert_failed(char *f, int l, char *a)
 {
     fprintf(stderr, "%s:%d: Assertion failed: %s\n", f, l, a);
     abort();
@@ -131,8 +152,8 @@ static int assert_failed(char *f, int l, char *a)
 #define EM_MIN_TRACE_READ_SIZE (EM_DEFAULT_BUF_SZ/20)
 #define EM_TIME_FIELD_WIDTH 11
 
-static void error(int res);
-static void error_msg(int res, char *msg);
+__decl_noreturn static void __noreturn error(int res);
+__decl_noreturn static void __noreturn error_msg(int res, char *msg);
 
 typedef struct {
     usgnd_int_max size;
@@ -1887,13 +1908,13 @@ error_string(int error)
     return error_str;
 }
 
-static void
+__decl_noreturn static void __noreturn
 error(int res)
 {
     error_msg(res, NULL);
 }
 
-static void
+__decl_noreturn static void __noreturn
 error_msg(int res, char *msg)
 {
     fprintf(stderr,
-- 
2.26.2

openSUSE Build Service is sponsored by