[Bug libfortran/54736] GFORTRAN_CONVERT_UNIT causes malloc error on several platforms
shart6 at utk dot edu
gcc-bugzilla@gcc.gnu.org
Sun Sep 30 20:57:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54736
--- Comment #5 from Shane Hart <shart6 at utk dot edu> 2012-09-30 20:56:39 UTC ---
(In reply to comment #4)
> Am 30.09.2012 21:12, schrieb shart6 at utk dot edu:
> > If n_elist = 1, then high = low = 0, and the funtion will always return 0, even
> > if the unit passed in to search for is in the exception list.
>
> If there are n_elist exceptions, then they can be found in
> elist[0], ..., elist[n_elist-1].
>
> If there is one exception, then it can be found at elist[0].
That is true, but the function will not return 1 (true, a match was found in
elist) when there is only one exception stored. It will skip over the while
loop, set *ip to 0, and return 0 (false, the exception was not found!).
This can be illustrated:
1) Call the program, setting only one exception (in this case unit 21):
[shane@shane-laptop ~/temp/testgfortran]$
GFORTRAN_CONVERT_UNIT='native;big_endian:21' gnu_wrap gdb ./test_read
2) Set a break point at where the library enquires as to the endianness of the
file to be opened:
Breakpoint 1, _gfortrani_get_unformatted_convert (unit=21) at
../../../libgfortran/runtime/environ.c:848
3) We will step into search_unit (with unit = 21). Everything is great.
however, since n_elist = 1, high = low = 0, and the while loop is skipped over:
(gdb) step
471 while (high - low > 1)
(gdb) step
485 if (unit > elist[high].unit)
4) And 0 is returned (unit exception not found!)
(gdb) step
490 return 0;
5) The library is told to open unit 21 (which is in the exception list at 0) as
default endianness:
_gfortrani_get_unformatted_convert (unit=21) at
../../../libgfortran/runtime/environ.c:856
856 return def;
More information about the Gcc-bugs
mailing list