On 17/10/2014 16:29, Joe Taylor wrote: Hi Joe, > I have spent 1.5 days trying to understand why kvasd[.exe], the > Koetter-Vardy algebraic soft-decision decoder, compiled correctly with > versions 4.6.1 and 4.6.3 of gcc and gfortran, but fails with versions > 4.8.1 and 4.8.2. > > With the code as it has been for some years, the build appears > successful but the program fails to execute correctly. > > After scratching my head with long gcc/gdb debugging sessions, I > discovered that the combination clang (v3.5) + gfortran 4.8.2 worked > perfectly. More importantly, clang identified the problem. > > Ralf Koetter's code used a number of constructions like the following: > > for (y = m2-1-x; y; ) d[y--] = p[y]; > > The clang compiler flagged these with warnings like this: > > warning: unsequenced modification and access to 'y' Yes, that is undefined behaviour. > > From context it's clear that the intended ordering is to decrement y > after the copy operation. An unambiguous way to write the statement is thus > > for (y = m2-1-x; y; y--) d[y] = p[y]; > > Somewhere between gcc 4.6.3 and gcc 4.8.1, the GNU folks did something > that changed the ordering of copy and decrement in the original statement. Probably more aggressive optimization, compilers are free to reorder expressions where the Standard doesn't define a strict sequencing. > > Anyway, the good news is that I fixed all the ambiguous "unsequenced > modifications", and the code now executes correctly with all the > compilers I've been testing. > > Three cheers for clang!!! > > -- Joe, K1JT 73 Bill G4WJS.
------------------------------------------------------------------------------ Comprehensive Server Monitoring with Site24x7. Monitor 10 servers for $9/Month. Get alerted through email, SMS, voice calls or mobile push notifications. Take corrective actions from your mobile device. http://p.sf.net/sfu/Zoho _______________________________________________ wsjt-devel mailing list wsjt-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wsjt-devel