]> granicus.if.org Git - postgresql/commitdiff
Add last-ditch defense against attempts to compile datetime code with
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 21 Sep 2002 19:52:41 +0000 (19:52 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 21 Sep 2002 19:52:41 +0000 (19:52 +0000)
-ffast-math.

src/backend/utils/adt/date.c
src/backend/utils/adt/timestamp.c

index 733b8fb304bb5aca25d4331e5f98a4e6a2cd9f9a..6c35f3ae00965b317a33dbef00bda2d302d2a35e 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.72 2002/09/04 20:31:27 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.73 2002/09/21 19:52:41 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
 #include "utils/nabstime.h"
 #include "utils/timestamp.h"
 
+/*
+ * gcc's -ffast-math switch breaks routines that expect exact results from
+ * expressions like timeval / 3600, where timeval is double.
+ */
+#ifdef __FAST_MATH__
+#error -ffast-math is known to break this code
+#endif
+
 
-int                    time2tm(TimeADT time, struct tm * tm, fsec_t *fsec);
-int                    timetz2tm(TimeTzADT *time, struct tm * tm, fsec_t *fsec, int *tzp);
-int                    tm2time(struct tm * tm, fsec_t fsec, TimeADT *result);
-int                    tm2timetz(struct tm * tm, fsec_t fsec, int tz, TimeTzADT *result);
+static int     time2tm(TimeADT time, struct tm * tm, fsec_t *fsec);
+static int     timetz2tm(TimeTzADT *time, struct tm * tm, fsec_t *fsec, int *tzp);
+static int     tm2time(struct tm * tm, fsec_t fsec, TimeADT *result);
+static int     tm2timetz(struct tm * tm, fsec_t fsec, int tz, TimeTzADT *result);
 static void AdjustTimeForTypmod(TimeADT *time, int32 typmod);
 
 /*****************************************************************************
@@ -525,7 +533,7 @@ time_in(PG_FUNCTION_ARGS)
 /* tm2time()
  * Convert a tm structure to a time data type.
  */
-int
+static int
 tm2time(struct tm * tm, fsec_t fsec, TimeADT *result)
 {
 #ifdef HAVE_INT64_TIMESTAMP
@@ -542,7 +550,7 @@ tm2time(struct tm * tm, fsec_t fsec, TimeADT *result)
  * For dates within the system-supported time_t range, convert to the
  *     local time zone. If out of this range, leave as GMT. - tgl 97/05/27
  */
-int
+static int
 time2tm(TimeADT time, struct tm * tm, fsec_t *fsec)
 {
 #ifdef HAVE_INT64_TIMESTAMP
@@ -1285,7 +1293,7 @@ time_part(PG_FUNCTION_ARGS)
 /* tm2timetz()
  * Convert a tm structure to a time data type.
  */
-int
+static int
 tm2timetz(struct tm * tm, fsec_t fsec, int tz, TimeTzADT *result)
 {
 #ifdef HAVE_INT64_TIMESTAMP
@@ -1357,7 +1365,7 @@ timetz_out(PG_FUNCTION_ARGS)
  * For dates within the system-supported time_t range, convert to the
  *     local time zone. If out of this range, leave as GMT. - tgl 97/05/27
  */
-int
+static int
 timetz2tm(TimeTzADT *time, struct tm * tm, fsec_t *fsec, int *tzp)
 {
 #ifdef HAVE_INT64_TIMESTAMP
index bfdb7d06efcc8ca3733ae3f5d2342870a1394bbd..2c8f882e3849c4458db2dddba9471f2adc9a9d5d 100644 (file)
@@ -1,14 +1,14 @@
 /*-------------------------------------------------------------------------
  *
  * timestamp.c
- *       Functions for the built-in SQL92 type "timestamp" and "interval".
+ *       Functions for the built-in SQL92 types "timestamp" and "interval".
  *
  * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v 1.73 2002/09/04 20:31:29 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v 1.74 2002/09/21 19:52:41 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
 #include "utils/array.h"
 #include "utils/builtins.h"
 
+/*
+ * gcc's -ffast-math switch breaks routines that expect exact results from
+ * expressions like timeval / 3600, where timeval is double.
+ */
+#ifdef __FAST_MATH__
+#error -ffast-math is known to break this code
+#endif
+
 
 #ifdef HAVE_INT64_TIMESTAMP
 static int64 time2t(const int hour, const int min, const int sec, const fsec_t fsec);