[Live-devel] live streaming media server bug report

owen at metamachine.com owen at metamachine.com
Thu Sep 6 13:46:28 PDT 2012


Regarding casting between dissimilar types:

> c++ -c -Iinclude -I../UsageEnvironment/include -I../groupsock/include -I.
> -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
> -Wall -DBSD=1 MatroskaFileParser.cpp
> MatroskaFileParser.cpp: In member function ‘Boolean
> MatroskaFileParser::parseEBMLVal_float(EBMLDataSize&, float&)’:
> MatroskaFileParser.cpp:1138:26: warning: dereferencing type-punned pointer
> will break strict-aliasing rules [-Wstrict-aliasing]
> MatroskaFileParser.cpp:1145:34: warning: dereferencing type-punned pointer
> will break strict-aliasing rules [-Wstrict-aliasing]
>
> ...
> No, this compiler warning message does not indicate a bug in the code.
> "resultAsUnsigned"  is a 4-byte value that stores a 'float'; it is not an
> unsigned value that gets converted to a float.
>
> ...
>
> If you can suggest an alternative coding that eliminates your compiler
> warning, then that would be great.  But the code - as it stands - is not
> in error.

I've researched this, and it seems the right thing to do for this
'non-bug' is to add a compiler switch to tell it to be a little less
aggressive in it's optimization so it doesn't generate incorrect code. 
The compiler flag is -fno-strict-aliasing.

And yes, it will (not silently) generate incorrect code for certain uses
of the construct.

Here are a couple of cogent discussions on the issue:

Linus dissing gcc:
 https://lkml.org/lkml/2003/2/26/158

A very thorough analysis of the issue:
 http://cellperformance.beyond3d.com/articles/2006/06/understanding-strict-aliasing.html

A careful review of the above analysis:
 http://labs.qt.nokia.com/2011/06/10/type-punning-and-strict-aliasing/


  // Wally



More information about the live-devel mailing list