[prev in list] [next in list] [prev in thread] [next in thread]
List: gcc-bugs
Subject: [Bug libfortran/54736] GFORTRAN_CONVERT_UNIT causes malloc error on several platforms
From: "shart6 at utk dot edu" <gcc-bugzilla () gcc ! gnu ! org>
Date: 2012-09-30 20:56:39
Message-ID: bug-54736-4-VVkaj6WYRK () http ! gcc ! gnu ! org/bugzilla/
[Download RAW message or body]
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;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic