|  | # This test code is part of GDB, the GNU debugger. | 
|  |  | 
|  | # Copyright 2010-2023 Free Software Foundation, Inc. | 
|  | # | 
|  | # This program is free software; you can redistribute it and/or modify | 
|  | # it under the terms of the GNU General Public License as published by | 
|  | # the Free Software Foundation; either version 3 of the License, or | 
|  | # (at your option) any later version. | 
|  | # | 
|  | # This program is distributed in the hope that it will be useful, | 
|  | # but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|  | # GNU General Public License for more details. | 
|  | # | 
|  | # You should have received a copy of the GNU General Public License | 
|  | # along with this program.  If not, see <http://www.gnu.org/licenses/>. | 
|  |  | 
|  | # Auxiliary function to set the language to fortran. | 
|  | # The result is 1 (true) for success, 0 (false) for failure. | 
|  |  | 
|  | proc set_lang_fortran {} { | 
|  | if [gdb_test_no_output "set language fortran"] { | 
|  | return 0 | 
|  | } | 
|  | if [gdb_test "show language" ".* source language is \"fortran\"." \ | 
|  | "set language to \"fortran\""] { | 
|  | return 0 | 
|  | } | 
|  | return 1 | 
|  | } | 
|  |  | 
|  | proc fortran_int4 {} { | 
|  | if {[test_compiler_info {gfortran-4-[012]-*} f90]} { | 
|  | return "int4" | 
|  | } elseif {[test_compiler_info {gfortran-*} f90]} { | 
|  | return "integer\\(kind=4\\)" | 
|  | } elseif {[test_compiler_info {flang-*} f90]} { | 
|  | return "integer" | 
|  | } elseif {[test_compiler_info {ifort-*} f90]} { | 
|  | return "INTEGER\\(4\\)" | 
|  | } elseif {[test_compiler_info {ifx-*} f90]} { | 
|  | return "INTEGER\\*4" | 
|  | } else { | 
|  | return "unknown" | 
|  | } | 
|  | } | 
|  |  | 
|  | proc fortran_int8 {} { | 
|  | if {[test_compiler_info {gfortran-4-[012]-*} f90]} { | 
|  | return "int8" | 
|  | } elseif {[test_compiler_info {gfortran-*} f90]} { | 
|  | return "integer\\(kind=8\\)" | 
|  | } elseif {[test_compiler_info {flang-*} f90]} { | 
|  | return "integer\\*8" | 
|  | } elseif {[test_compiler_info {ifort-*} f90]} { | 
|  | return "INTEGER\\(8\\)" | 
|  | } elseif {[test_compiler_info {ifx-*} f90]} { | 
|  | return "INTEGER\\*8" | 
|  | } else { | 
|  | return "unknown" | 
|  | } | 
|  | } | 
|  |  | 
|  | proc fortran_real4 {} { | 
|  | if {[test_compiler_info {gfortran-4-[012]-*} f90]} { | 
|  | return "real4" | 
|  | } elseif {[test_compiler_info {gfortran-*} f90]} { | 
|  | return "real\\(kind=4\\)" | 
|  | } elseif {[test_compiler_info {flang-*} f90]} { | 
|  | return "real" | 
|  | } elseif {[test_compiler_info {ifort-*} f90]} { | 
|  | return "REAL\\(4\\)" | 
|  | } elseif {[test_compiler_info {ifx-*} f90]} { | 
|  | return "REAL\\*4" | 
|  | } else { | 
|  | return "unknown" | 
|  | } | 
|  | } | 
|  |  | 
|  | proc fortran_real8 {} { | 
|  | if {[test_compiler_info {gfortran-4-[012]-*} f90]} { | 
|  | return "real8" | 
|  | } elseif {[test_compiler_info {gfortran-*} f90]} { | 
|  | return "real\\(kind=8\\)" | 
|  | } elseif {[test_compiler_info {flang-*} f90]} { | 
|  | return "double precision" | 
|  | } elseif {[test_compiler_info {ifort-*} f90]} { | 
|  | return "REAL\\(8\\)" | 
|  | } elseif {[test_compiler_info {ifx-*} f90]} { | 
|  | return "REAL\\*8" | 
|  | } else { | 
|  | return "unknown" | 
|  | } | 
|  | } | 
|  |  | 
|  | proc fortran_complex4 {} { | 
|  | if {[test_compiler_info {gfortran-4-[012]-*} f90]} { | 
|  | return "complex4" | 
|  | } elseif {[test_compiler_info {gfortran-*} f90]} { | 
|  | return "complex\\(kind=4\\)" | 
|  | } elseif {[test_compiler_info {flang-*} f90]} { | 
|  | return "complex" | 
|  | } elseif {[test_compiler_info {ifort-*} f90]} { | 
|  | return "COMPLEX\\(4\\)" | 
|  | } elseif {[test_compiler_info {ifx-*} f90]} { | 
|  | return "COMPLEX\\*8" | 
|  | } else { | 
|  | return "unknown" | 
|  | } | 
|  | } | 
|  |  | 
|  | proc fortran_complex8 {} { | 
|  | if {[test_compiler_info {gfortran-4-[012]-*} f90]} { | 
|  | return "complex8" | 
|  | } elseif {[test_compiler_info {gfortran-*} f90]} { | 
|  | return "complex\\(kind=8\\)" | 
|  | } elseif {[test_compiler_info {flang-*} f90]} { | 
|  | return "double complex" | 
|  | } elseif {[test_compiler_info {ifort-*} f90]} { | 
|  | return "COMPLEX\\(8\\)" | 
|  | } elseif {[test_compiler_info {ifx-*} f90]} { | 
|  | return "COMPLEX\\*16" | 
|  | } else { | 
|  | return "unknown" | 
|  | } | 
|  | } | 
|  |  | 
|  | proc fortran_complex16 {} { | 
|  | if {[test_compiler_info {gfortran-4-[012]-*} f90]} { | 
|  | return "complex16" | 
|  | } elseif {[test_compiler_info {gfortran-*} f90]} { | 
|  | return "complex\\(kind=16\\)" | 
|  | } elseif {[test_compiler_info {flang-*} f90]} { | 
|  | return "quad complex" | 
|  | } elseif {[test_compiler_info {ifort-*} f90]} { | 
|  | return "COMPLEX\\(16\\)" | 
|  | } elseif {[test_compiler_info {ifx-*} f90]} { | 
|  | return "COMPLEX\\*32" | 
|  | } else { | 
|  | return "unknown" | 
|  | } | 
|  | } | 
|  |  | 
|  | proc fortran_logical4 {} { | 
|  | if {[test_compiler_info {gfortran-4-[012]-*} f90]} { | 
|  | return "logical4" | 
|  | } elseif {[test_compiler_info {gfortran-*} f90]} { | 
|  | return "logical\\(kind=4\\)" | 
|  | } elseif {[test_compiler_info {flang-*} f90]} { | 
|  | return "logical" | 
|  | } elseif {[test_compiler_info {ifort-*} f90]} { | 
|  | return "LOGICAL\\(4\\)" | 
|  | } elseif {[test_compiler_info {ifx-*} f90]} { | 
|  | return "LOGICAL\\*4" | 
|  | } else { | 
|  | return "unknown" | 
|  | } | 
|  | } | 
|  |  | 
|  | proc fortran_character1 {} { | 
|  | if {[test_compiler_info {gfortran-4-[012]-*} f90]} { | 
|  | return "character1" | 
|  | } elseif {[test_compiler_info {gfortran-*} f90]} { | 
|  | return "character\\(kind=1\\)" | 
|  | } elseif {[test_compiler_info {flang-*} f90]} { | 
|  | return "character" | 
|  | } elseif {[test_compiler_info {ifort-*} f90]} { | 
|  | return "CHARACTER\\(1\\)" | 
|  | } elseif {[test_compiler_info {ifx-*} f90]} { | 
|  | return "CHARACTER\\*1" | 
|  | } else { | 
|  | return "unknown" | 
|  | } | 
|  | } | 
|  |  | 
|  | # Return name of the main procedure based on the compiler version. | 
|  |  | 
|  | proc fortran_main {} { | 
|  | if {[test_compiler_info {gfortran-*} f90] | 
|  | || [test_compiler_info {ifort-*} f90] | 
|  | || [test_compiler_info {ifx-*} f90] | 
|  | || [test_compiler_info {flang-llvm-*} f90]} { | 
|  | return "MAIN__" | 
|  | } elseif {[test_compiler_info {flang-classic-*} f90]} { | 
|  | return "MAIN_" | 
|  | } else { | 
|  | return "unknown" | 
|  | } | 
|  | } | 
|  |  | 
|  | # Fortran version of runto_main. | 
|  |  | 
|  | proc fortran_runto_main { } { | 
|  | return [runto [fortran_main]] | 
|  | } |