~ubuntu-branches/ubuntu/hardy/mysql-dfsg-5.0/hardy-proposed

« back to all changes in this revision

Viewing changes to debian/patches/91_bug29389.dpatch

  • Committer: Bazaar Package Importer
  • Author(s): Jamie Strandboge
  • Date: 2007-10-02 19:28:58 UTC
  • Revision ID: james.westby@ubuntu.com-20071002192858-vnuqfmelykkscmai
Tags: 5.0.45-1ubuntu3
fix for mysql bug 27383 which causes mysql-test 'mysql_client_test' 
to fail due to gcc 4.x optimizations

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#! /bin/sh /usr/share/dpatch/dpatch-run
 
2
## 91_bug29389.dpatch by Jamie Strandboge <jamie@ubuntu.com>
 
3
##
 
4
## All lines beginning with `## DP:' are a description of the patch.
 
5
## DP: fix for bug29389
 
6
 
 
7
@DPATCH@
 
8
 
 
9
diff -Nru mysql-dfsg-5.0-5.0.45.orig/libmysql/libmysql.c mysql-dfsg-5.0-5.0.45/libmysql/libmysql.c
 
10
--- mysql-dfsg-5.0-5.0.45.orig/libmysql/libmysql.c      2007-07-04 13:05:53.000000000 +0000
 
11
+++ mysql-dfsg-5.0-5.0.45/libmysql/libmysql.c   2007-10-02 19:28:49.000000000 +0000
 
12
@@ -3678,33 +3678,38 @@
 
13
   case MYSQL_TYPE_FLOAT:
 
14
   {
 
15
     /*
 
16
-      We need to store data in the buffer before the truncation check to
 
17
+      We need to mark the local variable volatile to
 
18
       workaround Intel FPU executive precision feature.
 
19
       (See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=323 for details)
 
20
-      AFAIU it does not guarantee to work.
 
21
     */
 
22
-    float data;
 
23
+    volatile float data;
 
24
     if (is_unsigned)
 
25
+    {
 
26
       data= (float) ulonglong2double(value);
 
27
+      *param->error= ((ulonglong) value) != ((ulonglong) data);
 
28
+    }
 
29
     else
 
30
-      data= (float) value;
 
31
+    {
 
32
+      data= (float)value;
 
33
+      *param->error= value != ((longlong) data);
 
34
+    }
 
35
     floatstore(buffer, data);
 
36
-    *param->error= is_unsigned ?
 
37
-                   ((ulonglong) value) != ((ulonglong) (*(float*) buffer)) :
 
38
-                   ((longlong) value) != ((longlong) (*(float*) buffer));
 
39
     break;
 
40
   }
 
41
   case MYSQL_TYPE_DOUBLE:
 
42
   {
 
43
-    double data;
 
44
+    volatile double data;
 
45
     if (is_unsigned)
 
46
+    {
 
47
       data= ulonglong2double(value);
 
48
+      *param->error= ((ulonglong) value) != ((ulonglong) data);
 
49
+    }
 
50
     else
 
51
+    {
 
52
       data= (double)value;
 
53
+      *param->error= value != ((longlong) data);
 
54
+    }
 
55
     doublestore(buffer, data);
 
56
-    *param->error= is_unsigned ?
 
57
-                   ((ulonglong) value) != ((ulonglong) (*(double*) buffer)) :
 
58
-                   ((longlong) value) != ((longlong) (*(double*) buffer));
 
59
     break;
 
60
   }
 
61
   case MYSQL_TYPE_TIME: