--- /dev/null
+Index: opencv-0.9.7/cv/include/cvcompat.h
+===================================================================
+--- opencv-0.9.7.orig/cv/include/cvcompat.h 2005-05-27 13:49:53.000000000 +0200
++++ opencv-0.9.7/cv/include/cvcompat.h 2006-06-12 13:38:01.000000000 +0200
+@@ -164,12 +164,15 @@
+ CV_INLINE void cvFillImage( CvArr* mat, double color )\r
+ {\r
+ CvPoint left_top = { 0, 0 }, right_bottom = { 0, 0 };\r
++ union { CvPoint p; CvSize s; } tmp;\r
+ \r
+- cvGetRawData( mat, 0, 0, (CvSize*)&right_bottom );\r
+- right_bottom.x--;\r
++ tmp.p = right_bottom;\r
++\r
++ cvGetRawData( mat, 0, 0, &tmp.s );\r
++ tmp.p.x--;\r
+ right_bottom.y--;\r
+ \r
+- cvRectangle( mat, left_top, right_bottom,\r
++ cvRectangle( mat, left_top, tmp.p,\r
+ cvColorToScalar( color, cvGetElemType(mat)),\r
+ CV_FILLED, 8, 0 );\r
+ }\r
+@@ -429,8 +432,6 @@
+ vect1->y = pt[1].y - pt[0].y;\r
+ vect2->x = pt[3].x - pt[0].x;\r
+ vect2->y = pt[3].y - pt[0].y;\r
+-\r
+- CV_UNREFERENCED( (left, bottom, right, top) );\r
+ }\r
+ \r
+ typedef int CvDisType;\r
+@@ -777,29 +778,29 @@
+ const float* A, const float* k,\r
+ int CV_UNREFERENCED(interpolate) )\r
+ {\r
+- float* data;\r
++ union { float *f; uchar *u; } data;\r
+ CvSize sz;\r
+- cvGetRawData( undistortion_map, (uchar**)&data, 0, &sz );\r
++ cvGetRawData( undistortion_map, &data.u, 0, &sz );\r
+ assert( sz.width >= 8 );\r
+ /* just save the intrinsic parameters to the map */\r
+- data[0] = A[0]; data[1] = A[4];\r
+- data[2] = A[2]; data[3] = A[5];\r
+- data[4] = k[0]; data[5] = k[1];\r
+- data[6] = k[2]; data[7] = k[3];\r
++ data.f[0] = A[0]; data.f[1] = A[4];\r
++ data.f[2] = A[2]; data.f[3] = A[5];\r
++ data.f[4] = k[0]; data.f[5] = k[1];\r
++ data.f[6] = k[2]; data.f[7] = k[3];\r
+ }\r
+ \r
+ CV_INLINE void cvUnDistort( const CvArr* src, CvArr* dst,\r
+ const CvArr* undistortion_map,\r
+ int CV_UNREFERENCED(interpolate) )\r
+ {\r
+- float* data;\r
++ union { float *f; uchar *u; } data;\r
+ float a[] = {0,0,0,0,0,0,0,0,1};\r
+ CvSize sz;\r
+- cvGetRawData( undistortion_map, (uchar**)&data, 0, &sz );\r
++ cvGetRawData( undistortion_map, &data.u, 0, &sz );\r
+ assert( sz.width >= 8 );\r
+- a[0] = data[0]; a[4] = data[1];\r
+- a[2] = data[2]; a[5] = data[3];\r
+- cvUnDistortOnce( src, dst, a, data + 4, 1 ); \r
++ a[0] = data.f[0]; a[4] = data.f[1];\r
++ a[2] = data.f[2]; a[5] = data.f[3];\r
++ cvUnDistortOnce( src, dst, a, data.f + 4, 1 ); \r
+ }\r
+ \r
+ \r
+@@ -836,13 +837,15 @@
+ int mask CV_DEFAULT(CV_GRAPH_ALL_ITEMS))\r
+ {\r
+ CvGraphScanner* temp_scanner;\r
++ void *tmp;\r
+ \r
+ if( !scanner )\r
+ cvError( CV_StsNullPtr, "cvStartScanGraph", "Null scanner pointer", "cvcompat.h", 0 );\r
+ \r
+ temp_scanner = cvCreateGraphScanner( graph, vtx, mask );\r
+ *scanner = *temp_scanner;\r
+- cvFree( (void**)&temp_scanner );\r
++ tmp = (void *)temp_scanner;\r
++ cvFree( &tmp );\r
+ }\r
+ \r
+ \r
+Index: opencv-0.9.7/cxcore/include/cxcore.h
+===================================================================
+--- opencv-0.9.7.orig/cxcore/include/cxcore.h 2005-07-05 17:59:49.000000000 +0200
++++ opencv-0.9.7/cxcore/include/cxcore.h 2006-06-12 13:37:05.000000000 +0200
+@@ -153,7 +153,10 @@
+ CvMat* mat = (CvMat*)arr; /* the first few fields of CvMat and CvMatND are the same */\r
+ mat->data.ptr = NULL;\r
+ if( mat->refcount != NULL && --*mat->refcount == 0 )\r
+- cvFree( (void**)&mat->refcount );\r
++ {\r
++ void *tmp = (void *)mat->refcount;\r
++ cvFree( &tmp );\r
++ }\r
+ mat->refcount = NULL;\r
+ }\r
+ }\r
+Index: opencv-0.9.7/cxcore/include/cxtypes.h
+===================================================================
+--- opencv-0.9.7.orig/cxcore/include/cxtypes.h 2006-06-12 13:37:05.000000000 +0200
++++ opencv-0.9.7/cxcore/include/cxtypes.h 2006-06-12 13:37:05.000000000 +0200
+@@ -219,9 +219,10 @@
+ int i = _mm_cvtsd_si32(t);\r
+ return i - _mm_movemask_pd(_mm_cmplt_sd(t,_mm_cvtsi32_sd(t,i)));\r
+ #else\r
++ union { int i; float f; } tmp;\r
+ int temp = cvRound(value);\r
+- float diff = (float)(value - temp);\r
+- return temp - (*(int*)&diff < 0);\r
++ tmp.f = (float)(value - temp);\r
++ return temp - (tmp.i < 0);\r
+ #endif\r
+ }\r
+ \r
+@@ -233,9 +234,10 @@
+ int i = _mm_cvtsd_si32(t);\r
+ return i + _mm_movemask_pd(_mm_cmpgt_sd(t,_mm_cvtsi32_sd(t,i)));\r
+ #else\r
++ union { int i; float f; } tmp;\r
+ int temp = cvRound(value);\r
+- float diff = (float)(temp - value);\r
+- return temp + (*(int*)&diff < 0);\r
++ tmp.f = (float)(temp - value);\r
++ return temp + (tmp.i < 0);\r
+ #endif\r
+ }\r
+ \r
+@@ -249,8 +251,11 @@
+ #elif defined __GNUC__\r
+ return isnan(value);\r
+ #else*/\r
+- unsigned lo = (unsigned)*(uint64*)&value;\r
+- unsigned hi = (unsigned)(*(uint64*)&value >> 32);\r
++ union { uint64 i; double d; } tmp;\r
++ unsigned lo, hi;\r
++ tmp.d = value;\r
++ lo = (unsigned)tmp.i;\r
++ hi = (unsigned)(tmp.i >> 32);\r
+ return (hi & 0x7fffffff) + (lo != 0) > 0x7ff00000;\r
+ #endif\r
+ }\r
+@@ -263,8 +268,11 @@
+ #elif defined __GNUC__\r
+ return isinf(value);\r
+ #else*/\r
+- unsigned lo = (unsigned)*(uint64*)&value;\r
+- unsigned hi = (unsigned)(*(uint64*)&value >> 32);\r
++ union { uint64 i; double d; } tmp;\r
++ unsigned lo, hi;\r
++ tmp.d = value;\r
++ lo = (unsigned)tmp.i;\r
++ hi = (unsigned)(tmp.i >> 32);\r
+ return (hi & 0x7fffffff) == 0x7ff00000 && lo == 0;\r
+ #endif\r
+ }\r