<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Possible bug when function used to fill an array in Intel® Fortran Compiler</title>
    <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Possible-bug-when-function-used-to-fill-an-array/m-p/760213#M15700</link>
    <description>&lt;DIV&gt;&lt;SPAN style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;Hi,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;We recently noticed a difference of comportement between gfortran and ifort with function filling an array.&lt;/DIV&gt;&lt;DIV&gt;Ifort crashes with segmentation fault with big arrays whereas gfortran just work.&lt;/DIV&gt;&lt;DIV&gt;I updated to last ifort version :&lt;/DIV&gt;&lt;DIV&gt;ifort (IFORT) 12.1.0 20111011&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Here is an example reproducing the problem :&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&lt;DIV id="_mcePaste"&gt;program toto&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;implicit none&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;real, allocatable :: tata(:)&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;integer(kind=8) :: length, max&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length = 2**10&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;max = 2**(30)&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;do while (length .lt. max)&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;  print *, "length", length&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;  allocate(tata(length))&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;  tata = titi(length)&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;  deallocate(tata)&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;  print *, "length", length&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;  length = length * 2&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;end do&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;contains&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;function titi(length)&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt; integer(kind=8) :: length&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt; real, dimension(length) :: titi&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt; titi = 1.0&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;end function titi&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt; &lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;end program toto&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;GFortran output :&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;DIV id="_mcePaste"&gt;length         1024&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length         1024&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length         2048&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length         2048&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length         4096&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length         4096&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length         8192&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length         8192&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length        16384&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length        16384&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length        32768&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length        32768&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length        65536&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length        65536&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length        131072&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length        131072&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length        262144&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length        262144&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length        524288&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length        524288&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       1048576&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       1048576&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       2097152&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       2097152&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       4194304&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       4194304&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       8388608&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       8388608&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       16777216&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       16777216&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       33554432&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       33554432&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       67108864&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       67108864&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length      134217728&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length      134217728&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length      268435456&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length      268435456&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length      536870912&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length      536870912&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;ifort output :&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;length         1024      1073741824&lt;/DIV&gt;&lt;DIV&gt;length         1024&lt;/DIV&gt;&lt;DIV&gt;length         1024&lt;/DIV&gt;&lt;DIV&gt;length         2048&lt;/DIV&gt;&lt;DIV&gt;length         2048&lt;/DIV&gt;&lt;DIV&gt;length         4096&lt;/DIV&gt;&lt;DIV&gt;length         4096&lt;/DIV&gt;&lt;DIV&gt;length         8192&lt;/DIV&gt;&lt;DIV&gt;length         8192&lt;/DIV&gt;&lt;DIV&gt;length         16384&lt;/DIV&gt;&lt;DIV&gt;length         16384&lt;/DIV&gt;&lt;DIV&gt;length         32768&lt;/DIV&gt;&lt;DIV&gt;length         32768&lt;/DIV&gt;&lt;DIV&gt;length         65536&lt;/DIV&gt;&lt;DIV&gt;length         65536&lt;/DIV&gt;&lt;DIV&gt;length        131072&lt;/DIV&gt;&lt;DIV&gt;length        131072&lt;/DIV&gt;&lt;DIV&gt;length        262144&lt;/DIV&gt;&lt;DIV&gt;length        262144&lt;/DIV&gt;&lt;DIV&gt;length        524288&lt;/DIV&gt;&lt;DIV&gt;length        524288&lt;/DIV&gt;&lt;DIV&gt;length        1048576&lt;/DIV&gt;&lt;DIV&gt;length        1048576&lt;/DIV&gt;&lt;DIV&gt;length        2097152&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;zsh: segmentation fault ./a.out&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;The machine is a Bi quad coreIntel Xeon CPU E5410 @ 2.33GHz running debian squeeze 6.0.3 with kernel2.6.32-5-amd64&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Thanks,&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;XL.&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
    <pubDate>Tue, 13 Dec 2011 15:03:27 GMT</pubDate>
    <dc:creator>_xl_</dc:creator>
    <dc:date>2011-12-13T15:03:27Z</dc:date>
    <item>
      <title>Possible bug when function used to fill an array</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Possible-bug-when-function-used-to-fill-an-array/m-p/760213#M15700</link>
      <description>&lt;DIV&gt;&lt;SPAN style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;Hi,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;We recently noticed a difference of comportement between gfortran and ifort with function filling an array.&lt;/DIV&gt;&lt;DIV&gt;Ifort crashes with segmentation fault with big arrays whereas gfortran just work.&lt;/DIV&gt;&lt;DIV&gt;I updated to last ifort version :&lt;/DIV&gt;&lt;DIV&gt;ifort (IFORT) 12.1.0 20111011&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Here is an example reproducing the problem :&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&lt;DIV id="_mcePaste"&gt;program toto&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;implicit none&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;real, allocatable :: tata(:)&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;integer(kind=8) :: length, max&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length = 2**10&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;max = 2**(30)&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;do while (length .lt. max)&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;  print *, "length", length&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;  allocate(tata(length))&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;  tata = titi(length)&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;  deallocate(tata)&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;  print *, "length", length&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;  length = length * 2&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;end do&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;contains&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;function titi(length)&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt; integer(kind=8) :: length&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt; real, dimension(length) :: titi&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt; titi = 1.0&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;end function titi&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt; &lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;end program toto&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;GFortran output :&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;DIV id="_mcePaste"&gt;length         1024&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length         1024&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length         2048&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length         2048&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length         4096&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length         4096&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length         8192&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length         8192&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length        16384&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length        16384&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length        32768&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length        32768&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length        65536&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length        65536&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length        131072&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length        131072&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length        262144&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length        262144&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length        524288&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length        524288&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       1048576&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       1048576&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       2097152&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       2097152&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       4194304&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       4194304&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       8388608&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       8388608&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       16777216&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       16777216&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       33554432&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       33554432&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       67108864&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length       67108864&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length      134217728&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length      134217728&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length      268435456&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length      268435456&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length      536870912&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length      536870912&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;ifort output :&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;length         1024      1073741824&lt;/DIV&gt;&lt;DIV&gt;length         1024&lt;/DIV&gt;&lt;DIV&gt;length         1024&lt;/DIV&gt;&lt;DIV&gt;length         2048&lt;/DIV&gt;&lt;DIV&gt;length         2048&lt;/DIV&gt;&lt;DIV&gt;length         4096&lt;/DIV&gt;&lt;DIV&gt;length         4096&lt;/DIV&gt;&lt;DIV&gt;length         8192&lt;/DIV&gt;&lt;DIV&gt;length         8192&lt;/DIV&gt;&lt;DIV&gt;length         16384&lt;/DIV&gt;&lt;DIV&gt;length         16384&lt;/DIV&gt;&lt;DIV&gt;length         32768&lt;/DIV&gt;&lt;DIV&gt;length         32768&lt;/DIV&gt;&lt;DIV&gt;length         65536&lt;/DIV&gt;&lt;DIV&gt;length         65536&lt;/DIV&gt;&lt;DIV&gt;length        131072&lt;/DIV&gt;&lt;DIV&gt;length        131072&lt;/DIV&gt;&lt;DIV&gt;length        262144&lt;/DIV&gt;&lt;DIV&gt;length        262144&lt;/DIV&gt;&lt;DIV&gt;length        524288&lt;/DIV&gt;&lt;DIV&gt;length        524288&lt;/DIV&gt;&lt;DIV&gt;length        1048576&lt;/DIV&gt;&lt;DIV&gt;length        1048576&lt;/DIV&gt;&lt;DIV&gt;length        2097152&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;zsh: segmentation fault ./a.out&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;The machine is a Bi quad coreIntel Xeon CPU E5410 @ 2.33GHz running debian squeeze 6.0.3 with kernel2.6.32-5-amd64&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Thanks,&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;XL.&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Tue, 13 Dec 2011 15:03:27 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Possible-bug-when-function-used-to-fill-an-array/m-p/760213#M15700</guid>
      <dc:creator>_xl_</dc:creator>
      <dc:date>2011-12-13T15:03:27Z</dc:date>
    </item>
    <item>
      <title>Possible bug when function used to fill an array</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Possible-bug-when-function-used-to-fill-an-array/m-p/760214#M15701</link>
      <description>"Useful Links" at the top of this forum has common mistakes/problems such as this:&lt;BR /&gt;&lt;BR /&gt;&lt;A href="http://software.intel.com/en-us/articles/determining-root-cause-of-sigsegv-or-sigbus-errors/"&gt;http://software.intel.com/en-us/articles/determining-root-cause-of-sigsegv-or-sigbus-errors/&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;ron</description>
      <pubDate>Tue, 13 Dec 2011 15:41:07 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Possible-bug-when-function-used-to-fill-an-array/m-p/760214#M15701</guid>
      <dc:creator>Ron_Green</dc:creator>
      <dc:date>2011-12-13T15:41:07Z</dc:date>
    </item>
    <item>
      <title>Possible bug when function used to fill an array</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Possible-bug-when-function-used-to-fill-an-array/m-p/760215#M15702</link>
      <description>Ok, thanks,&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Does that mean that in my case ifort creates a temporary array to store values inside titi function and then copy it to tata array whereas gfortran directly works into tata array ?&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;So is it better to use a subroutine with tata in INTENT(OUT) if we want to work directly on tata array ?&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Thanks,&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;XL.&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;EDIT : OK I found the answer in the attached PDF to your link, i have to use au subroutine.&lt;/DIV&gt;</description>
      <pubDate>Wed, 14 Dec 2011 07:50:42 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Possible-bug-when-function-used-to-fill-an-array/m-p/760215#M15702</guid>
      <dc:creator>_xl_</dc:creator>
      <dc:date>2011-12-14T07:50:42Z</dc:date>
    </item>
  </channel>
</rss>

