Bug in dlls/oleaut32/tests/vartype.c?
Gerald Pfeifer
gerald at pfeifer.com
Mon Oct 29 17:41:43 CDT 2007
On Mon, 15 Oct 2007, Gerald Pfeifer wrote:
> dlls/oleaut32/tests/vartype.c has the following snippet of code:
>
> + f = -1e-400; /* deliberately cause underflow */
> + hres = pVarBstrFromR4(f, lcid, 0, &bstr);
> + ok(hres == S_OK, "got hres 0x%08lx\n", hres);
> + if (bstr)
> + {
> + todo_wine ok(memcmp(bstr, szZero, sizeof(szZero)) == 0, "negative zero (got %s)\n", wtoascii(bstr));
> + }
>
> which was added in
>
> revision 1.27
> Alex Villacís Lasso <a_villacis at palosanto.com>
> Test for behavior of negative underflow formatting.
>
> This doesn't seem to work as intended, because it is a floating point
> *constant* which current versions of GCC simply truncate to 0.0.
The following patch tries to address this.
Gerald
ChangeLog:
Avoid truncation of floating point calculation at compile-time.
Index: dlls/oleaut32/tests/vartype.c
===================================================================
RCS file: /home/wine/wine/dlls/oleaut32/tests/vartype.c,v
retrieving revision 1.51
diff -u -3 -p -r1.51 vartype.c
--- dlls/oleaut32/tests/vartype.c 20 Aug 2007 12:43:49 -0000 1.51
+++ dlls/oleaut32/tests/vartype.c 29 Oct 2007 22:40:24 -0000
@@ -4727,6 +4727,7 @@ static void test_VarBstrFromR4(void)
HRESULT hres;
BSTR bstr = NULL;
+ const float flarge=1e20;
float f;
CHECKPTR(VarBstrFromR4);
@@ -4747,7 +4748,7 @@ static void test_VarBstrFromR4(void)
}
}
- f = -1e-400; /* deliberately cause underflow */
+ f = (-1 / flarge ) / flarge; /* deliberately cause underflow */
hres = pVarBstrFromR4(f, lcid, 0, &bstr);
ok(hres == S_OK, "got hres 0x%08x\n", hres);
if (bstr)
More information about the wine-patches
mailing list