[Bug libfortran/47757] Unintentionally? not exported _gfortran_* symbols in libgfortran.so.3
burnus at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Feb 15 21:59:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47757
Tobias Burnus <burnus at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |burnus at gcc dot gnu.org
--- Comment #1 from Tobias Burnus <burnus at gcc dot gnu.org> 2011-02-15 21:58:33 UTC ---
The {m,s}i{all,any,parity}_i{1,2,4,8,16} is seemingly an my omission; they were
added as part of PR 38282. They are called via gcc/fortran/iresolve.c. For
instance: gfc_resolve_iall calls
resolve_transformational ("iall", f, array, dim, mask);
which in turn adds an "m" or a "s" as prefix if the intrinsic is called with a
's'calar or array 'm'ask -- without a mask, the pure "_i*" symbol is used. (And
without "dim=" everything is handled in the front end.)
A failing example is, e.g.,
INTEGER(1) :: a(2,2)
logical :: mask(2,2)
mask = reshape([.true.,.true.,.false.,.true.],[2,2])
PRINT *, IANY(a, dim=1,mask=mask)
test.f90:(.text+0x1a6): undefined reference to `_gfortran_miany_i1'
* * *
Regarding _gfortran_cshift0_16_char4 and friends: Those are used for wide-char
operations, where the shifts are given by large-sized integers; example:
character(kind=4):: str(3,3)
str(1,:) = [4_'A', 4_'b', 4_'C']
str(2,:) = [4_'A', 4_'b', 4_'C']
str(3,:) = [4_'A', 4_'b', 4_'C']
print *, cshift(str, shift=2_16, dim=1_16)
end
which fails with undefined reference to `_gfortran_cshift0_16_char4'.
Ignoring issues like whether one should not cast the "2_16" to an integer(8) in
the front end, which should be also sufficient giving 64bit address space, one
should also export those symbols.
More information about the Gcc-bugs
mailing list