9 Replies Latest reply on Aug 27, 2012 1:44 AM by santosh.zanjurne

    Illegal instruction with 4.5.2


      When testing our code with 4.5.2 the program compiles no problem, but on execution it exits with 'Illegal instruction' error message. The same code works fine with 4.5.1 compiler on the same machine. Here is a cut down of the (Fortran) code (test.f90):


      MODULE test_mod

      INTEGER, PARAMETER :: i=20

      END MODULE test_mod


      PROGRAM test_prog

      USE test_mod





      compiled with simply:


      openf90 test.f90


      The program built with 4.5.1 gives the expected '20' when run, whereas with 4.5.2 'Illegal instruction' is given. Writing a hard-coded character string works, so I think the issue is referencing the variable from the module.


      The compilers are both the SLES 11 rpm versions, i.e.:





      and both are installed on a 64-bit machine running openSUSE 12.1 (actually I've reproduced this on more than 1 machine). Any advice about how to fix this would be greatly appreciated.

        • Re: Illegal instruction with 4.5.2

          Could you please check the thread


          and search for "Illegal instruction"? Maybe you have a non-Bulldozer system? Then you should check if the SLES 10 package works for you.

            • Re: Illegal instruction with 4.5.2

              Thanks very much, this was the case and installing the SLES 10 package did fix the problem.


              I'm inclined to agree with the (currently) last comment in that thread:




              We have a variety of AMD and Intel, new and old hardware, which are used for regression testing. Previously, the SLES 11 rpm's have worked flawlessly on the latest version of openSUSE, regardless of processor. It seems quite a big jump for a minor version number of the compiler suite to change the processor requirements. I'm not sure the logic is now correct in the downloads since SLES 11 and Bulldozer are different things. Would it be possible to have a non-Bulldozer SLES 11 set of binaries, or just go back to building the binaries on a non-Bulldozer machine?

                • Re: Illegal instruction with 4.5.2

                  I haven't had a chance to update the thread I started, but I wanted to let you know I was able to solve my problems with the new compiler version. I initially downloaded the .tar.bz2 version of the compiler and just extracted the contents to the /opt directory and doing that gave me all the problems I reported in the other thread. I then tried instead to install the compiler using the rpm package. Well after that, it worked. I was able to setup openmpi to use open64 4.5.2. Again, I wanted to mention that our cluster is bulldozer based, but the head node where we compile all the software is and Intel machine. So it is still possible to install the RHEL6 version of the compiler on non bulldozer machine, but it appears there is a difference between the tarball version and the RPM.


                  I will go ahead and update the other thread with this info. Hope this helps you!



                    • Re: Illegal instruction with 4.5.2

                      Thanks for the reply. I've only been using the rpm versions and for me the RHEL6/SLES11 rpm generated executables with the run-time problem I reported above.


                      For now the work around of using SLES10 binaries is okay. I'm not certain of the intention for support in the future is though, it seems as though you need to have a bulldozer based machine for SLES11 support. I can't really understand why this needs to be the case, or perhaps it was simply an oversight when changing the build machine for the compiler suite. I would certainly vote for a more portable binary for SLES11 (just like we had with 4.5.1).

                    • Re: Illegal instruction with 4.5.2

                      I am working on removing any ambiguity in our Download page.  But do you see any issue in using SLES10/RHEL5 binaries for your purposes currently?