This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug fortran/60110] internal compiler error
- From: "kargl at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 07 Feb 2014 21:51:17 +0000
- Subject: [Bug fortran/60110] internal compiler error
- Auto-submitted: auto-generated
- References: <bug-60110-4 at http dot gcc dot gnu dot org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60110
kargl at gcc dot gnu.org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |kargl at gcc dot gnu.org
--- Comment #2 from kargl at gcc dot gnu.org ---
(In reply to Walt Brainerd from comment #0)
> Created attachment 32079 [details]
> source file gfortran_bug.f90
>
> Sorry, I am not sure where to begin to cut this down.
> I hope you can figure it out from the error msg.
>
> This also fails the same way on the TDM build.
>
> $ gfortran -c gfortran_bug.f90
> gfortran_bug.f90: In function 'r701t735_array':
> gfortran_bug.f90:2282:0: internal compiler error: in gfc_get_symbol_decl, at
The line number 2282 points to a problem with the character type. Here's
a reduced test case from your code:
module check_sem
implicit none
type check_logical
logical ok
end type
interface operator( .and. )
module procedure logical_and_check_logical
end interface
interface operator( .not. )
module procedure not_check_logical
end interface
interface assignment( = )
module procedure check_logical_to_logical, logical_to_check_logical
end interface
interface check
module procedure check_character1_rank1
end interface
contains
subroutine check_logical_to_logical( l, r )
logical, intent(out) :: l
type( check_logical ), intent(in) :: r
l = r % ok
end subroutine check_logical_to_logical
subroutine logical_to_check_logical( l, r )
type( check_logical ), intent(out) :: l
logical, intent(in) :: r
l % ok = r
end subroutine logical_to_check_logical
logical function logical_and_check_logical( l, r )
logical, intent(in) :: l
type( check_logical ), intent(in) :: r
logical_and_check_logical = l .and. r % ok
end function logical_and_check_logical
logical function not_check_logical( r )
type( check_logical ), intent(in) :: r
not_check_logical = .not. r % ok
end function not_check_logical
function check_character1_rank1 (expected, computed, location)
character(*), intent(in), optional :: location
character(*,1), dimension(:), intent(in) :: expected, computed
type (check_logical) :: check_character1_rank1
intrinsic all, present
check_character1_rank1 = all(computed == expected)
end function check_character1_rank1
end module check_sem
module overloads
interface operator( ** )
function character_power_sc(l, r)
character(*), intent(in) :: l, r
intrinsic len
character(len(l)) :: character_power_sc
end function character_power_sc
function character_power_array(l, r)
character(*), intent(in), dimension(3) :: l, r
intrinsic len
character(len(l)), dimension(3) :: character_power_array
end function character_power_array
end interface
end module overloads
program foo
use check_sem
use overloads
implicit none
logical :: ok = .true.
character, parameter, dimension(3) :: ch_c = (/ 'a', 'b', 'c' /)
character chv(3), cho1(3), cho2(3)
cho1 = (ch_c)
chv = cho1 ** ch_c
ok = ok .and. check(chv, &
(/ cho1(1)**ch_c(1), cho1(2)**ch_c(2), cho1(3)**ch_c(3) /), &
'mult-operand-16')
end program foo