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'

 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.

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

------------------------------------------------------------------------------
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

Reply via email to