[
https://issues.apache.org/activemq/browse/AMQCPP-41?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Timothy Bish reassigned AMQCPP-41:
----------------------------------
Assignee: Timothy Bish (was: Nathan Mittler)
> Byte swap on float and double truncates values
> ----------------------------------------------
>
> Key: AMQCPP-41
> URL: https://issues.apache.org/activemq/browse/AMQCPP-41
> Project: ActiveMQ C++ Client
> Issue Type: Bug
> Affects Versions: 1.1
> Reporter: Albert Strasheim
> Assigned To: Timothy Bish
> Priority: Critical
> Fix For: 1.1
>
> Attachments: doublefloat-truncate.diff
>
>
> activemq::util::Endian::byteSwap truncates float and double values due to the
> C-style cast it uses.
> Patch for BytesMessageCommandTest is attached that shows the problem. One
> might consider expanding this test to check that the minimum, maximum, -1, 0,
> 1 (and -inf and inf where appropriate) and a few other values can
> successfully be serialised and deserialised for each of the types.
> Also in the patch is our attempt at fixing byteSwap. You'll notice that we do
> something very strange: we take the argument of byteSwap and make a copy on
> the heap. The reason for this is that simply doing:
> {noformat}
> const uintxx_t swapped_val = byteSwap( *(uintxx_t*)(&value) );
> {noformat}
> i.e. taking the address of value instead of using the copy on the heap, fails
> with GCC 4.0.2 and GCC 4.0.3. I'm guessing GCC might be trying to inline the
> call to byteSwap and then something goes very wrong when taking the address
> of a variable on the stack. Hopefully someone has a better idea for a
> workaround.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://issues.apache.org/activemq/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira