dlls/oleaut32/variant.c has the following code
else if ((dwVtBits & REAL_VTBITS) == VTBIT_DECIMAL)
where REAL_VTBITS is defined as VTBIT_R4|VTBIT_R8|VTBIT_CY with VTBIT_R4 := 1 << VT_R4 and VT_R4 := 4 in wtypes.h, VTBIT_R8 := 1 << VT_R8 and VT_R8 := 5, VTBIT_CY := 1 << VT_CY and VT_CY := 6.
VTBIT_DECIMAL, on the other hand is 1 << VT_DECIMAL with VT_DECIMAL = 14.
Now perhaps I am missing something quite obvious, but isn't that condition always false since REAL_VTBITS are disjoint from VTBIT_DECIMAL and we are first masking bits 5, 6, and 7 and then comparing with bit 15?
(If you fix this, you may want to give credit to GCC 8 for pointing me towards that code.)
Gerald