> Hi. > > I downloaded live.2012.08.29.tar.gz a few minutes ago, and built in on my > linux box*. > > I saw several warnings issued by the compiler. > > I've been looking closely at each, and I think there's an actual problem > with one of them. > ---- > 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] > 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 EBMLNumber.cpp > ---- > > complains about the following statement: > ---- > result = *(float*)&resultAsUnsigned; > > ---- > result is a float passed in by reference, and resultAsUnsigned is an > unsigned int. > > This little snippet, and it's compiled output, illustrate the problem: > ---- > #include <iostream> > > using namespace std; > > void func(float &f) > { > unsigned val = 3; > unsigned *vptr = &val; > f = *(float*)vptr; > } > > int main(int ac, char **av) > { > float f; > > func(f); > > cout << "f == " << f << endl; > > return 0; > } > -- > owen@owen ~/src/tests $ ./test_unsigned_float > f == 4.2039e-45 > owen@owen ~/src/tests $ > -- > ---- > Note that the output should have been 3.0, but to get that, the code would > have to be changed to: > ---- > f = (float)*vptr; > ---- > > > // Wally > > > * Linux Mint 13 32-bit; gcc 4.6; c++ lib 4.6.3 >
_______________________________________________ live-devel mailing list live-devel@lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel