You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stdcxx.apache.org by vi...@apache.org on 2008/06/07 01:06:19 UTC

svn commit: r664184 - in /stdcxx/branches/4.3.x: bin/duration bin/genxviews bin/xbuildgen bin/xcomp.awk etc/config/src/INFINITY.cpp include/ansi/cwchar src/num_put.cpp util/exec.cpp

Author: vitek
Date: Fri Jun  6 16:06:18 2008
New Revision: 664184

URL: http://svn.apache.org/viewvc?rev=664184&view=rev
Log:
2008-06-06  Travis Vitek  <vi...@roguewave.com>

	Merged revisions 660486, 660489, 660492, 661050, 661053, 661075, 
	and 661152 from branches/4.2.x


	2008-05-27  Farid Zaripov  <fa...@epam.com>

	* etc/config/src/INFINITY.cpp (flt_qnan): Clear sign bit to obtain
	value of positive qnan.
	(dbl_qnan): Ditto.
	(ldbl_qnan): Ditto.

	2008-05-27  Farid Zaripov  <fa...@epam.com>

	* include/ansi/cwchar (wcsrchr): Removed const modifier since
	function returns non-const wchar_t*.

	2008-05-27  Farid Zaripov  <fa...@epam.com>

	STDCXX-51
	* src/num_put.cpp (__rw_fmat_infinite): Enabled processing the
	sign of the NaN's. Put 'q' or 's' prefix at the beginning of
	the "{q|s}nan" word.

	2008-05-28  Martin Sebor  <se...@roguewave.com>

	STDCXX-946
	* util/exec.cpp (rw_charcasecmp): Folded into...
	(rw_strcasecmp): ...here. Rewrote a for loop as a do/while loop
	to silence HP aCC 6 remark #4315-D: for loop without body, did
	you insert an extra ';'?
	(get_signo): Corrected the interpretation of exit status of 126
	and 127 used to indicate a "cannot execute" and "executable does
	not exist" errors, respectively.
	(exec_file): Exit with status of 126 on execv() failure.

	* util/exec.cpp (calculate_usage, exec_file): Cast literal to
	the correct type to silence HP aCC 6 warning #2068-D: integer
	conversion resulted in a change of sign.

	2008-05-28  Martin Sebor  <se...@roguewave.com>

	* util/exec.cpp (ENOENT): Defined macro if not defined in <errno.h>.
	(exec_file): Exited with status of 127 on ENOENT and 126 otherwise,
	as per POISIX. Removed unnecessary diagnostic output (handled by
	the parent instance of the same program).

	2008-05-28  Martin Sebor  <se...@roguewave.com>

	* bin/genxviews (tmpout): New name of a temporary file to replace
	the final output file with at the end of execution.
	(output): Used tmpout instead of outfile.
	Replaced the final output file only at the end of execution of
	the script.

	2008-05-28  Martin Sebor  <se...@roguewave.com>

	* bin/genxviews (date): Defined at the top of the script to make
	it accessible throughout.
	(process_results): Computed and formatted the age of each batch
	of log files in addition to the timestamp of the oldest one.
	* bin/xbuildgen (myrev, myurl, myname): Computed constants from
	the $HeadURL$ Subversion keyword same as in genxviews.
	(print_help): Added -V option.
	(resultstyle.css): Added EXEC entry.
	Passed the version argument to xcomp.awk.
	* bin/duration (convert_windows_date): New function to convert
	date in Windows "Day MM/DD/YYYY" format to the POSIX %c format.
	(convert_ls_date): New function to convert ls-style timestamps
	to the POSIX %c format.
	(seconds_from_epoch): Called convert_windows_date or
	convert_ls_date to convert Windows or ls-style timestamps to
	the expected POSIX %c format.
	* bin/xcomp.awk (version): Added a new variable to make it
	possible to select branches in addition to trunk.


Modified:
    stdcxx/branches/4.3.x/bin/duration
    stdcxx/branches/4.3.x/bin/genxviews
    stdcxx/branches/4.3.x/bin/xbuildgen
    stdcxx/branches/4.3.x/bin/xcomp.awk
    stdcxx/branches/4.3.x/etc/config/src/INFINITY.cpp
    stdcxx/branches/4.3.x/include/ansi/cwchar
    stdcxx/branches/4.3.x/src/num_put.cpp
    stdcxx/branches/4.3.x/util/exec.cpp

Modified: stdcxx/branches/4.3.x/bin/duration
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.3.x/bin/duration?rev=664184&r1=664183&r2=664184&view=diff
==============================================================================
--- stdcxx/branches/4.3.x/bin/duration (original)
+++ stdcxx/branches/4.3.x/bin/duration Fri Jun  6 16:06:18 2008
@@ -194,11 +194,84 @@
 }
 
 
+# converts date in the Windows "Day MM/DD/YYYY" format
+# to POSIX %c
+convert_windows_date()
+{
+    date=$1
+
+    wday=${date%% *}
+    date=${date#* }
+
+    mon=${date%%/*}
+    date=${date#*/}
+
+    mday=${date%%/*}
+    year=${date#*/}
+
+    case $mon in
+        01) mon="Jan";;
+        02) mon="Feb";;
+        03) mon="Mar";;
+        04) mon="Apr";;
+        05) mon="May";;
+        06) mon="Jun";;
+        07) mon="Jul";;
+        08) mon="Aug";;
+        09) mon="Sep";;
+        10) mon="Oct";;
+        11) mon="Nov";;
+        12) mon="Dec";;
+    esac
+
+    func_return_value="$wday $mon $mday 00:00:00 UTC $year"
+}
+
+
+# converts date in the ls -l format to POSIX %c
+convert_ls_date()
+{
+    date=$1
+
+    mon=${date%% *}
+    date=${date#* }
+
+    mday=${date%% *}
+    time=${date#* }
+
+    if [ ${#time} -eq 4 ]; then
+        year=$time
+        time="00:00:00"
+    else
+        year=`date "+%Y"`
+        time="$time:00"
+    fi
+
+    func_return_value="Mon $mon $mday $time UTC $year"
+}
+
+
 # computes the number of seconds from the Epoch (1/1/1970)
 seconds_from_epoch()
 {
     date=$1
 
+    # remove all leading and trailing whitespace
+    date=${date## }
+    date=${date%% }
+
+    datelen=${#date}
+
+    # check the length to see if the date is in the POSIX %c format
+    if [ $datelen -eq 11 -o $datelen -eq 12 ]; then
+        # assume ls -l format (i.e., "+%b %e %H:%M" or "+%b %e %Y"
+        # POSIX date format)
+        convert_ls_date "$date"; date=$func_return_value
+    elif [ $datelen -eq 14 ]; then
+        # assume Day MM/DD/YYYY
+        convert_windows_date "$date"; date=$func_return_value
+    fi
+
     # extract the year, the 1-based month and day of month, hours,
     # minutes, and seconds (normalized to the GMT time zone) from
     # the date

Modified: stdcxx/branches/4.3.x/bin/genxviews
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.3.x/bin/genxviews?rev=664184&r1=664183&r2=664184&view=diff
==============================================================================
--- stdcxx/branches/4.3.x/bin/genxviews (original)
+++ stdcxx/branches/4.3.x/bin/genxviews Fri Jun  6 16:06:18 2008
@@ -32,6 +32,9 @@
 
 readonly www_stdcxx_dir="/www/stdcxx.apache.org/builds"
 
+# current date and time to compute log ages
+readonly now=`date`
+
 XBUILDGEN=`which xbuildgen 2>/dev/null`
 
 if [ "$XBUILDGEN" = "" ]; then
@@ -73,6 +76,9 @@
 
         o)  # argument is the name of output file (stdout by default)
             outfile=$OPTARG
+
+            # temporary output file (will replace outfile when done)
+            tmpout=$outfile.$$
             ;;
 
         V)  # specify stdcxx branch/version to generate cross-build
@@ -152,16 +158,16 @@
 output ()
 {
     if [ $# -eq 0 ]; then
-        # no arguments provided, copy its own stdin to outfile
-        if [ -z $outfile ]; then
+        # no arguments provided, copy its own stdin to tmpout
+        if [ -z $tmpout ]; then
             cat
         else
-            cat >>$outfile
+            cat >>$tmpout
         fi
-    elif [ -z $outfile ]; then
+    elif [ -z $tmpout ]; then
         echo "$*"
     else
-        echo "$*" >>$outfile
+        echo "$*" >>$tmpout
     fi
 }
 
@@ -249,7 +255,8 @@
     suffixes="a A d D s S"
 
     unset buildlogs
-    unset oldest
+    unset oldest_age
+    unset oldest_time
 
     count=0
 
@@ -289,8 +296,8 @@
     else
         output "          <td><a href=\"$xfile\">$xfile</a></td>"
 
-        oldest=`  cd $logdir && ls -lrt $buildlogs | head -n 1 \
-                | awk '{ print $6 " " $7 " " $8 }'`
+        oldest_time=`  cd $logdir && LANG=C ls -lrt $buildlogs | head -n 1 \
+                    | awk '{ print $6 " " $7 " " $8 }'`
 
         if [ $newlogs -gt 0 ]; then
 
@@ -316,12 +323,18 @@
         end=`expr $end + 60`
     fi
 
+    # compute the amount of time it took to process this batch
     duration=`expr $end - $duration`
 
+    # compute the age of the oldest log
+    if [ "$oldest_time" != "" ]; then
+        oldest_age=`duration "$oldest_time" "$now"`
+    fi
+
     cat<<EOF | output
           <td>$count</td>
           <td>$newlogs</td>
-          <td>$oldest</td>
+          <td title="$oldest_time">$oldest_age</td>
           <td>$duration</td>
         </tr>
 EOF
@@ -634,7 +647,6 @@
 
 
 # compute the number of seconds it took to process all logs
-readonly now=`date`
 processing_time=`duration "$start_time" "$now"`
 
 cat<<EOF | output
@@ -644,3 +656,9 @@
   </body>
 </html>
 EOF
+
+# rerame the temporary output file to $outfile, possibly replacing
+# the original $outfile if it exists
+if [ -f "$tmpout" ]; then
+    mv $tmpout $outfile
+fi

Modified: stdcxx/branches/4.3.x/bin/xbuildgen
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.3.x/bin/xbuildgen?rev=664184&r1=664183&r2=664184&view=diff
==============================================================================
--- stdcxx/branches/4.3.x/bin/xbuildgen (original)
+++ stdcxx/branches/4.3.x/bin/xbuildgen Fri Jun  6 16:06:18 2008
@@ -83,9 +83,6 @@
 ######################################################################
 # global constants
 
-# set program name (used in diagnostic messages)
-readonly myname=`basename $0`
-
 # the directory where the script is located to get a hold of other
 # files at locations relative to this one (assumes the script resides
 # within the stdcxx source tree)
@@ -121,14 +118,24 @@
 # default page title (unless overridden on the command line)
 title="Multi-platform Test Result View"
 
-# script's revision number
+# extract the script's revision number
 myrev='$Revision$'
-myrev=${myrev#'$Revision: '}
-myrev=${myrev%' $'}
+myrev=${myrev#'$Revision: '}   # strip leading text
+myrev=${myrev%' $'}            # strip trailing text
+
+# form the URL to this version of the script in the repository
+myurl='$HeadURL$'
+myurl=${myurl#'$HeadURL: '}   # strip leading text
+myurl=${myurl##*asf/}         # strip svn prefix
+myurl=${myurl%' $'}           # strip trailing text
 
-# URL to this version of the script in the repository
-readonly myurl="$svnpath/bin/xbuildgen?view=markup&rev=$myrev"
+# prepend ViewVC prefix
+myurl="http://svn.apache.org/viewvc/$myurl"
 
+# extract program name from the url (used in diagnostic messages)
+readonly myname=${myurl##*/}
+
+myurl="$myurl?view=markup&rev=$myrev"
 
 ######################################################################
 
@@ -175,6 +182,10 @@
     echo "     -t <list-of-tests>"
     echo "          Generate a report for the specified list of tests with"
     echo "          tests listed in columns and builds in rows."
+    echo
+    echo "     -V <version>"
+    echo "          Stdcxx version (branch) to generate results for."
+    echo "          When omitted, trunk is assumed."
 }
 
 ######################################################################
@@ -839,6 +850,12 @@
     font-weight:bold;
     text-align:center;
 }
+td.EXEC {
+    color:white;
+    background:mediumslateblue;
+    font-weight:bold;
+    text-align:center;
+}
 td.xdep {
     color:yellow;
     background:gray;
@@ -947,7 +964,7 @@
     xfails=""
 fi
 
-$xcomp bodyonly=1 logdir=$logdir $xfails $textlogs | output
+$xcomp bodyonly=1 logdir=$logdir version=$version $xfails $textlogs | output
 
 ######################################################################
 # output the rest of the HTML file
@@ -1040,6 +1057,15 @@
           </td>
         </tr>
         <tr>
+          <td class="EXEC">EXEC</td>
+          <td class="na">Failure</td>
+          <td colspan=2 class="na"><center>Not Applicable</center></td>
+          <td class="na">
+             Component compiled and linked successfully but failed
+             to execute (possibly due to a linker error).
+          </td>
+        </tr>
+        <tr>
           <td class="WARN">WARN</td>
           <td class="na">Success</td>
           <td class="XWARN">XWARN</td>

Modified: stdcxx/branches/4.3.x/bin/xcomp.awk
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.3.x/bin/xcomp.awk?rev=664184&r1=664183&r2=664184&view=diff
==============================================================================
--- stdcxx/branches/4.3.x/bin/xcomp.awk (original)
+++ stdcxx/branches/4.3.x/bin/xcomp.awk Fri Jun  6 16:06:18 2008
@@ -23,10 +23,12 @@
 ########################################################################
 #
 # SYNOPSIS
-#     myname [bodyonly=0|1 logdir=<logdir>] logs...
+#     myname [bodyonly=0|1 logdir=<logdir> version=<version>] logs...
 #
 # VARIABLES:
 #   bodyonly     when non-zero, suppresses the <html> tags
+#   logdir
+#   version      stdcxx version (branch) to generate results for.
 #
 ########################################################################
 
@@ -132,8 +134,6 @@
     buildmodes ["15s"] = "archive, debug, reentrant"
     buildmodes ["15S"] = "archive, debug, reentrant, wide"
 
-    svnpath="http://svn.apache.org/viewvc/stdcxx/trunk"
-
     # regular expression to match a name (e.g., compiler or OS)
     re_name    = "[A-Za-z][A-Za-z_0-9]*"
 
@@ -165,6 +165,18 @@
 
 # detect the type of file
 1 == FNR {
+
+    if (svnpath == "") {
+
+        # initialize svnpath using version (assume trunk by default)
+        svnpath = "http://svn.apache.org/viewvc/stdcxx"
+
+        if (version == "" || version == "trunk")
+            svnpath = svnpath "/trunk"
+        else
+            svnpath = svnpath "/branches/" version
+    }
+
     section = 0
 
     if (0 == match(FILENAME, re_logname)) {

Modified: stdcxx/branches/4.3.x/etc/config/src/INFINITY.cpp
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.3.x/etc/config/src/INFINITY.cpp?rev=664184&r1=664183&r2=664184&view=diff
==============================================================================
--- stdcxx/branches/4.3.x/etc/config/src/INFINITY.cpp (original)
+++ stdcxx/branches/4.3.x/etc/config/src/INFINITY.cpp Fri Jun  6 16:06:18 2008
@@ -165,6 +165,15 @@
 
     val.val /= flt_zero ();
 
+    // val.val can be +qnan or -qnan
+    // clear sign bit
+    if (e == big_endian) {
+        val.bits [0] &= '\x7f';
+    }
+    else {
+        val.bits [sizeof (val.val) - 1] &= '\x7f';
+    }
+
 #else   // if !defined (_RWSTD_NO_DBL_TRAPS)
 
     // floating point arithmetic traps
@@ -172,7 +181,7 @@
     // assume IEEE 754 floating point format
 
     if (e == big_endian) {
-        val.bits [0] = '\xff';
+        val.bits [0] = '\x7f';
         val.bits [1] = '\xc0';
         val.bits [2] = '\0';
         val.bits [3] = '\0';
@@ -181,7 +190,7 @@
         val.bits [0] = '\0';
         val.bits [1] = '\0';
         val.bits [2] = '\xc0';
-        val.bits [3] = '\xff';
+        val.bits [3] = '\x7f';
     }
 
 #endif   // _RWSTD_NO_DBL_TRAPS
@@ -355,6 +364,15 @@
 
     val.val /= dbl_zero ();
 
+    // val.val can be +qnan or -qnan
+    // clear sign bit
+    if (e == big_endian) {
+        val.bits [0] &= '\x7f';
+    }
+    else {
+        val.bits [sizeof (val.val) - 1] &= '\x7f';
+    }
+
 #else   // if !defined (_RWSTD_NO_DBL_TRAPS)
 
     // floating point arithmetic traps
@@ -362,7 +380,7 @@
     // assume IEEE 754 floating point format
 
     if (e == big_endian) {
-        val.bits [0] = '\xff';
+        val.bits [0] = '\x7f';
         val.bits [1] = '\xf8';
         val.bits [2] = '\0';
         val.bits [3] = '\0';
@@ -379,7 +397,7 @@
         val.bits [4] = '\0';
         val.bits [5] = '\0';
         val.bits [6] = '\xf8';
-        val.bits [7] = '\xff';
+        val.bits [7] = '\x7f';
     }
 
 #endif   // _RWSTD_NO_DBL_TRAPS
@@ -587,6 +605,18 @@
 
     val.val /= ldbl_zero ();
 
+    // val.val can be +qnan or -qnan
+    // clear sign bit
+    if (e == big_endian) {
+        val.bits [0] &= '\x7f';
+    }
+    else {
+        unsigned inx = sizeof (val.val) - 1;
+        // skip the trailing zero's
+        while (!val.bits [inx]) --inx;
+        val.bits [inx] &= '\x7f';
+    }
+
 #else   // if !defined (_RWSTD_NO_DBL_TRAPS)
 
     // floating point arithmetic traps
@@ -594,7 +624,7 @@
     // assume IEEE 754 floating point format
 
     if (e == big_endian) {
-        val.bits [ 0] = '\xff';
+        val.bits [ 0] = '\x7f';
         val.bits [ 1] = '\xff';
         val.bits [ 2] = '\x80';
         val.bits [ 3] = '\0';
@@ -627,7 +657,7 @@
         val.bits [12] = '\0';
         val.bits [13] = '\x80';
         val.bits [14] = '\xff';
-        val.bits [15] = '\xff';
+        val.bits [15] = '\x7f';
     }
 
 #endif   // _RWSTD_NO_DBL_TRAPS

Modified: stdcxx/branches/4.3.x/include/ansi/cwchar
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.3.x/include/ansi/cwchar?rev=664184&r1=664183&r2=664184&view=diff
==============================================================================
--- stdcxx/branches/4.3.x/include/ansi/cwchar (original)
+++ stdcxx/branches/4.3.x/include/ansi/cwchar Fri Jun  6 16:06:18 2008
@@ -722,7 +722,7 @@
 
 namespace std {
 
-using wcscspn;
+using ::wcscspn;
 
 #  undef _RWSTD_NO_WCSCSPN
 #endif   // _RWSTD_NO_WCSCSPN
@@ -940,7 +940,7 @@
 
 inline wchar_t* wcsrchr (wchar_t *__s, wchar_t __c)
 {
-    const wchar_t *__ss = __s;
+    wchar_t *__ss = __s;
     while (*__ss++);
     while (--__ss != __s && *__ss != __c);
     return *__ss == __c ? __ss : 0;

Modified: stdcxx/branches/4.3.x/src/num_put.cpp
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.3.x/src/num_put.cpp?rev=664184&r1=664183&r2=664184&view=diff
==============================================================================
--- stdcxx/branches/4.3.x/src/num_put.cpp (original)
+++ stdcxx/branches/4.3.x/src/num_put.cpp Fri Jun  6 16:06:18 2008
@@ -100,28 +100,24 @@
     }
     else {
         _RWSTD_ASSERT (__rw_isnan (val));
-#if 0
-        // disabled since not all platforms correctly handling sign of NaN's
+
         if (__rw_signbit (val)) {
             *end++ = '-';
         }
         else if (flags & _RWSTD_IOS_SHOWPOS) {
             *end++ = '+';
         }
-#endif
 
         const char str [] = "nNaAqQsS";
-        *end++ = str [cap + 0];
-        *end++ = str [cap + 2];
-        *end++ = str [cap + 0];
-#if 0
-        // disabled since not all platforms supporting 
-        // the quiet and signaling NaN's
+
         if (__rw_isqnan (val))
             *end++ = str [cap + 4];
         else if (__rw_issnan (val))
             *end++ = str [cap + 6];
-#endif
+
+        *end++ = str [cap + 0];
+        *end++ = str [cap + 2];
+        *end++ = str [cap + 0];
     }
 
     return int (end - buf);

Modified: stdcxx/branches/4.3.x/util/exec.cpp
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.3.x/util/exec.cpp?rev=664184&r1=664183&r2=664184&view=diff
==============================================================================
--- stdcxx/branches/4.3.x/util/exec.cpp (original)
+++ stdcxx/branches/4.3.x/util/exec.cpp Fri Jun  6 16:06:18 2008
@@ -89,6 +89,9 @@
 #endif
 
 
+#ifndef ENOENT
+#  define ENOENT     1   /* Linux value */
+#endif
 #ifndef ESRCH
 #  define ESRCH      3   /* Linux value */
 #endif
@@ -329,22 +332,6 @@
 };
 
 /**
-   Compare two characters in a case-insensitive manner
-
-   @param c1 first character to compare
-   @param c2 second character to compare
-   @return an integer less than, equal to, or greater than 0, coresponding
-   to whether c1 is less than, equal to, or greater than c2 when compared
-   in a case insensitive manner.
-*/
-static int
-rw_charcasecmp (char c1, char c2)
-{
-    typedef unsigned char UChar; 
-    return tolower ((UChar)c1) - tolower ((UChar)c2);
-}
-
-/**
    Reimplementation of the POSIX strcasecmp function.
 
    This is a simplistic (re)implementation of the strcasecmp function
@@ -361,15 +348,19 @@
 {
     int delta;
 
+    typedef unsigned char UChar;
+
     assert (0 != s1);
     assert (0 != s2);
 
-    for (delta = rw_charcasecmp (*s1, *s2); 
-         *s1 && *s2 && 0 == delta; 
-         delta = rw_charcasecmp (*(++s1), *(++s2)));
+    do {
+        delta = tolower ((UChar)*s1) - tolower ((UChar)*s2);
+    } while (*s1++ && *s2++ && 0 == delta);
+
     return delta;
 }
 
+
 int
 get_signo (const char* signame)
 {
@@ -529,12 +520,21 @@
         if (child_pid == wait_pid) {
             if (WIFEXITED (status)) {
                 result->exit = WEXITSTATUS (status);
+
+                /* from POSIX, 2.8.2 Exit Status for Commands:
+                 *
+                 * If a command is not found, the exit status shall be 127.
+                 * If the command name is found, but it is not an executable
+                 * utility, the exit status shall be 126. Applications that
+                 * invoke utilities without using the shell should use these
+                 * exit status values to report similar errors.
+                 */
                 switch (result->exit) {
                 case 126:
-                    result->status = ST_EXIST;
+                    result->status = ST_EXECUTE;
                     break;
                 case 127:
-                    result->status = ST_EXECUTE;
+                    result->status = ST_EXIST;
                     break;
                 }
                 break; /*we've got an exit state, so let's bail*/
@@ -791,7 +791,7 @@
 
     c_clk = times (&c_tms);
 
-    if (-1 == c_clk) {
+    if ((clock_t)-1 == c_clk) {
         warn ("Failed to retrieve ending times: %s", strerror (errno));
         return;
     }
@@ -869,10 +869,13 @@
 
         execv (options->argv [0], options->argv);
 
-        fprintf (error_file, "%s (%s): execv (\"%s\", ...) error: %s\n",
-                 exe_name, target_name, options->argv [0], strerror (errno));
+        /* POSIX specifies status of 127 when the executable doesn't
+         * exist and 126 for all other exec failures
+         */
+        if (ENOENT == errno)
+            exit (127);
 
-        exit (1);
+        exit (126);
     }
 
     if (-1 == child_pid) {
@@ -885,7 +888,7 @@
         struct tms h_tms;
         clock_t h_clk = times (&h_tms);
         wait_for_child (child_pid, options->timeout, result);
-        if (-1 != h_clk)
+        if ((clock_t)-1 != h_clk)
             calculate_usage (result, h_clk, &h_tms);
         else
             warn ("Failed to retrieve start times: %s", strerror (errno));