bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: posixtm: doesn't like -1 for 32-bit time_t's?


From: Paul Eggert
Subject: Re: posixtm: doesn't like -1 for 32-bit time_t's?
Date: Thu, 21 Jun 2012 02:17:06 -0700
User-agent: Mozilla/5.0 (X11; Linux i686; rv:12.0) Gecko/20120430 Thunderbird/12.0.1

On 06/20/2012 07:54 PM, Simon Josefsson wrote:
> Changing the line into
> 
>     { "190112132045.51", 13, 1,  -2147483649LL}, /* Fri Dec 13 20:45:51 1901 
> */
> 
> makes the self-test work.

Thanks, I pushed the following, which I hope fixes the problem in
a slightly more-general way.

---
 ChangeLog             |   11 +++++++++++
 modules/posixtm-tests |    1 +
 tests/test-posixtm.c  |   26 +++++++++++++++++---------
 3 files changed, 29 insertions(+), 9 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 1661a62..b3110ba 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
 2012-06-21  Paul Eggert  <address@hidden>
 
+       posixtm-tests: port to buggy compiler
+       Problem reported by Simon Josefsson in
+       <http://lists.gnu.org/archive/html/bug-gnulib/2012-06/msg00246.html>.
+       * modules/posixtm-tests (Depends-on): Add stdint.
+       * tests/test-posixtm.c (struct posixtm_test.t_expected):
+       Now of type int_least64_t, not int64_t, both because that's
+       what INT64_C returns and because int_least64_t works even
+       on 72-bit hosts.
+       (T): Use INT64_C on constants outside the traditional int range,
+       to work around compiler bug noted by Simon.
+
        mktime: fix integer overflow in 'configure'-time test
        * m4/mktime.m4 (gl_FUNC_MKTIME): Do not rely on undefined behavior
        after integer overflow.  Problem reported by Rich Felker in
diff --git a/modules/posixtm-tests b/modules/posixtm-tests
index 216d602..7f5ada5 100644
--- a/modules/posixtm-tests
+++ b/modules/posixtm-tests
@@ -5,6 +5,7 @@ tests/macros.h
 Depends-on:
 intprops
 setenv
+stdint
 strftime
 
 configure.ac:
diff --git a/tests/test-posixtm.c b/tests/test-posixtm.c
index 8400c39..1ea68c2 100644
--- a/tests/test-posixtm.c
+++ b/tests/test-posixtm.c
@@ -34,7 +34,7 @@ struct posixtm_test
   char const *in;
   unsigned int syntax_bits;
   bool valid;
-  int64_t t_expected;
+  int_least64_t t_expected;
 };
 
 /* Test mainly with syntax_bits == 13
@@ -49,12 +49,17 @@ static struct posixtm_test const T[] =
     /* These two tests fail on 64-bit Solaris up through at least
        Solaris 10, which is off by one day for time stamps before
        0001-01-01 00:00:00 UTC.  */
-    { "000001010000.00", 13, 1, -62167219200}, /* Sat Jan  1 00:00:00 0    */
-    { "000012312359.59", 13, 1, -62135596801}, /* Fri Dec 31 23:59:59 0    */
-
-    { "000101010000.00", 13, 1, -62135596800}, /* Sat Jan  1 00:00:00 1    */
-    { "190112132045.51", 13, 1,  -2147483649}, /* Fri Dec 13 20:45:51 1901 */
-    { "190112132045.52", 13, 1,  -2147483648}, /* Fri Dec 13 20:45:52 1901 */
+    { "000001010000.00", 13, 1,
+                      - INT64_C (62167219200)},/* Sat Jan  1 00:00:00 0    */
+    { "000012312359.59", 13, 1,
+                      - INT64_C (62135596801)},/* Fri Dec 31 23:59:59 0    */
+
+    { "000101010000.00", 13, 1,
+                      - INT64_C (62135596800)},/* Sat Jan  1 00:00:00 1    */
+    { "190112132045.51", 13, 1,
+                       - INT64_C (2147483649)},/* Fri Dec 13 20:45:51 1901 */
+    { "190112132045.52", 13, 1,
+                       - INT64_C (2147483648)},/* Fri Dec 13 20:45:52 1901 */
     { "190112132045.53", 13, 1,  -2147483647}, /* Fri Dec 13 20:45:53 1901 */
     { "190112132046.52", 13, 1,  -2147483588}, /* Fri Dec 13 20:46:52 1901 */
     { "190112132145.52", 13, 1,  -2147480048}, /* Fri Dec 13 21:45:52 1901 */
@@ -77,15 +82,18 @@ static struct posixtm_test const T[] =
     { "197013010000.00", 13, 0,            0}, /* -- */
     { "203801190314.06", 13, 1,   2147483646}, /* Tue Jan 19 03:14:06 2038 */
     { "203801190314.07", 13, 1,   2147483647}, /* Tue Jan 19 03:14:07 2038 */
-    { "203801190314.08", 13, 1,   2147483648}, /* Tue Jan 19 03:14:08 2038 */
-    { "999912312359.59", 13, 1, 253402300799}, /* Fri Dec 31 23:59:59 9999 */
+    { "203801190314.08", 13, 1,
+                       INT64_C (  2147483648)},/* Tue Jan 19 03:14:08 2038 */
+    { "999912312359.59", 13, 1,
+                       INT64_C (253402300799)},/* Fri Dec 31 23:59:59 9999 */
     { "1112131415",      13, 1,   1323785700}, /* Tue Dec 13 14:15:00 2011 */
     { "1112131415.16",   13, 1,   1323785716}, /* Tue Dec 13 14:15:16 2011 */
     { "201112131415.16", 13, 1,   1323785716}, /* Tue Dec 13 14:15:16 2011 */
     { "191112131415.16", 13, 1,  -1831974284}, /* Wed Dec 13 14:15:16 1911 */
     { "203712131415.16", 13, 1,   2144326516}, /* Sun Dec 13 14:15:16 2037 */
     { "3712131415.16",   13, 1,   2144326516}, /* Sun Dec 13 14:15:16 2037 */
-    { "6812131415.16",   13, 1,   3122633716}, /* Thu Dec 13 14:15:16 2068 */
+    { "6812131415.16",   13, 1,
+                       INT64_C (  3122633716)},/* Thu Dec 13 14:15:16 2068 */
     { "6912131415.16",   13, 1,     -1590284}, /* Sat Dec 13 14:15:16 1969 */
     { "7012131415.16",   13, 1,     29945716}, /* Sun Dec 13 14:15:16 1970 */
     { "1213141599",       2, 1,    945094500}, /* Mon Dec 13 14:15:00 1999 */
-- 
1.7.6.5




reply via email to

[Prev in Thread] Current Thread [Next in Thread]