The method SetFragmentShader() inside SoShadowGroup.cpp defines a global variable int i for all the subsequent for cycles.
Unfortunately one of those cycles redefines such variable, making an error arise in newest compilers (this is not solvable with any "permissive" flag or such).
Please remove that definition and use the global variable.
This is the result of compiling Coin 3.1.3 on Mac OS X with llvm-gcc-4.2, -fpermissive:
:info:build SoShadowGroup.cpp: In member function ‘void SoShadowGroupP::setFragmentShader(SoState*)’: :info:build SoShadowGroup.cpp:1699: error: redeclaration of ‘int i’ :info:build SoShadowGroup.cpp:1443: error: ‘int i’ previously declared here