Workaround 'nonlocal var will use ptr to local var' cppcheck false positive
authorIvan Maidanski <ivmai@mail.ru>
Thu, 22 Nov 2018 11:34:03 +0000 (14:34 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Thu, 22 Nov 2018 11:34:03 +0000 (14:34 +0300)
* extra/msvc_dbg.c (sym_namebuf_u): New union type.
* extra/msvc_dbg.c (GetSymbolNameFromAddress): Use sym_namebuf_u
instead of anonymous union.
* os_dep.c [MPROTECT_VDB && DARWIN] (mp_reply_s, mp_msg_s): Move struct
type definition out of GC_mprotect_thread (adding mp_ prefix).

extra/msvc_dbg.c
os_dep.c

index 22865d5..7f6409d 100644 (file)
@@ -212,6 +212,11 @@ size_t GetModuleNameFromStack(size_t skip, char* moduleName, size_t size)
   return 0;
 }
 
+union sym_namebuf_u {
+  IMAGEHLP_SYMBOL sym;
+  char symNameBuffer[sizeof(IMAGEHLP_SYMBOL) + MAX_SYM_NAME];
+};
+
 size_t GetSymbolNameFromAddress(void* address, char* symbolName, size_t size,
                                 size_t* offsetBytes)
 {
@@ -219,10 +224,8 @@ size_t GetSymbolNameFromAddress(void* address, char* symbolName, size_t size,
   if (offsetBytes) *offsetBytes = 0;
   __try {
     ULONG_ADDR dwOffset = 0;
-    union {
-      IMAGEHLP_SYMBOL sym;
-      char symNameBuffer[sizeof(IMAGEHLP_SYMBOL) + MAX_SYM_NAME];
-    } u;
+    union sym_namebuf_u u;
+
     u.sym.SizeOfStruct  = sizeof(u.sym);
     u.sym.MaxNameLength = sizeof(u.symNameBuffer) - sizeof(u.sym);
 
index 026aaf6..85fa315 100644 (file)
--- a/os_dep.c
+++ b/os_dep.c
@@ -4022,21 +4022,25 @@ typedef enum {
 # define GC_mprotect_state GC_MP_NORMAL
 #endif /* !THREADS */
 
+struct mp_reply_s {
+  mach_msg_header_t head;
+  char data[256];
+};
+
+struct mp_msg_s {
+  mach_msg_header_t head;
+  mach_msg_body_t msgh_body;
+  char data[1024];
+};
+
 STATIC void *GC_mprotect_thread(void *arg)
 {
   mach_msg_return_t r;
   /* These two structures contain some private kernel data.  We don't   */
   /* need to access any of it so we don't bother defining a proper      */
   /* struct.  The correct definitions are in the xnu source code.       */
-  struct reply_s {
-    mach_msg_header_t head;
-    char data[256];
-  } reply;
-  struct msg_s {
-    mach_msg_header_t head;
-    mach_msg_body_t msgh_body;
-    char data[1024];
-  } msg;
+  struct mp_reply_s reply;
+  struct mp_msg_s msg;
   mach_msg_id_t id;
 
   if ((word)arg == GC_WORD_MAX) return 0; /* to prevent a compiler warning */