]> granicus.if.org Git - gc/commitdiff
Fix invalid initializer of CLOCK_TYPE variables if BSD_TIME
authorIvan Maidanski <ivmai@mail.ru>
Sat, 5 Jan 2019 08:52:53 +0000 (11:52 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Tue, 29 Jan 2019 08:42:48 +0000 (11:42 +0300)
(a cherry-pick of commit 0e12ebaf from 'release-7_4')

* alloc.c [!SMALL_CONFIG] (GC_start_time): Initialize to
CLOCK_TYPE_INITIALIZER (instead of 0).
* alloc.c [!SMALL_CONFIG] (GC_try_to_collect_inner, GC_stopped_mark,
GC_finish_collection): Initialize local variable of CLOCK_TYPE type to
CLOCK_TYPE_INITIALIZER (instead of 0); remove comment (duplicating that
in gc_priv.h).
* reclaim.c [!SMALL_CONFIG] (GC_reclaim_all): Likewise.
* include/private/gc_priv.h (CLOCK_TYPE_INITIALIZER):
Define macro.

alloc.c
include/private/gc_priv.h
reclaim.c

diff --git a/alloc.c b/alloc.c
index f674919b9e5bc9efcee3176dabd8951a192aa96d..7bc5f404b3d8f5bf9645159529d20042edf07275 100644 (file)
--- a/alloc.c
+++ b/alloc.c
@@ -135,7 +135,7 @@ GC_INNER int GC_CALLBACK GC_never_stop_func(void)
 unsigned long GC_time_limit = GC_TIME_LIMIT;
 
 #ifndef NO_CLOCK
-  STATIC CLOCK_TYPE GC_start_time = 0;
+  STATIC CLOCK_TYPE GC_start_time = CLOCK_TYPE_INITIALIZER;
                                 /* Time at which we stopped world.      */
                                 /* used only in GC_timeout_stop_func.   */
 #endif
@@ -411,7 +411,7 @@ STATIC void GC_maybe_gc(void)
 GC_INNER GC_bool GC_try_to_collect_inner(GC_stop_func stop_func)
 {
 #   ifndef SMALL_CONFIG
-      CLOCK_TYPE start_time = 0; /* initialized to prevent warning. */
+      CLOCK_TYPE start_time = CLOCK_TYPE_INITIALIZER;
       CLOCK_TYPE current_time;
 #   endif
     ASSERT_CANCEL_DISABLED();
@@ -581,7 +581,7 @@ STATIC GC_bool GC_stopped_mark(GC_stop_func stop_func)
 {
     unsigned i;
 #   ifndef SMALL_CONFIG
-      CLOCK_TYPE start_time = 0; /* initialized to prevent warning. */
+      CLOCK_TYPE start_time = CLOCK_TYPE_INITIALIZER;
       CLOCK_TYPE current_time;
 #   endif
 
@@ -813,8 +813,8 @@ STATIC void GC_clear_fl_marks(ptr_t q)
 STATIC void GC_finish_collection(void)
 {
 #   ifndef SMALL_CONFIG
-      CLOCK_TYPE start_time = 0; /* initialized to prevent warning. */
-      CLOCK_TYPE finalize_time = 0;
+      CLOCK_TYPE start_time = CLOCK_TYPE_INITIALIZER;
+      CLOCK_TYPE finalize_time = CLOCK_TYPE_INITIALIZER;
       CLOCK_TYPE done_time;
 #   endif
 
index 4195e4ab2118cc4a95955eefc7e22cb6e8a4bcef..17ad8cde57c5a1c431968e804ab02bd2f711078d 100644 (file)
@@ -330,6 +330,7 @@ typedef char * ptr_t;   /* A generic pointer to which we can add        */
 # undef GET_TIME
 # undef MS_TIME_DIFF
 # define CLOCK_TYPE struct timeval
+# define CLOCK_TYPE_INITIALIZER { 0, 0 }
 # define GET_TIME(x) { struct rusage rusage; \
                        getrusage (RUSAGE_SELF,  &rusage); \
                        x = rusage.ru_utime; }
@@ -375,6 +376,12 @@ typedef char * ptr_t;   /* A generic pointer to which we can add        */
   /* require -lm option for double-to-long conversion.                  */
 #endif /* !BSD_TIME && !MSWIN32 */
 
+# ifndef CLOCK_TYPE_INITIALIZER
+    /* This is used to initialize CLOCK_TYPE variables (to some value)  */
+    /* to avoid "variable might be uninitialized" compiler warnings.    */
+#   define CLOCK_TYPE_INITIALIZER 0
+# endif
+
 /* We use bzero and bcopy internally.  They may not be available.       */
 # if defined(SPARC) && defined(SUNOS4)
 #   define BCOPY_EXISTS
index b12b6c268c629e6e423b77f9c4e3186fd1699251..f24c2f4fd63aac2e783f772a6bd7f25230d6de15 100644 (file)
--- a/reclaim.c
+++ b/reclaim.c
@@ -594,7 +594,7 @@ GC_INNER GC_bool GC_reclaim_all(GC_stop_func stop_func, GC_bool ignore_old)
     struct hblk ** rlp;
     struct hblk ** rlh;
 #   ifndef SMALL_CONFIG
-      CLOCK_TYPE start_time = 0; /* initialized to prevent warning. */
+      CLOCK_TYPE start_time = CLOCK_TYPE_INITIALIZER;
       CLOCK_TYPE done_time;
 
       if (GC_print_stats == VERBOSE)