# This test code is part of GDB, the GNU debugger. # Copyright 2010-2024 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 . # 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] || [test_compiler_info {nvfortran-*} 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] || [test_compiler_info {nvfortran-*} 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] || [test_compiler_info {nvfortran-*} 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] || [test_compiler_info {nvfortran-*} 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] || [test_compiler_info {nvfortran-*} 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] || [test_compiler_info {nvfortran-*} 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] || [test_compiler_info {nvfortran-*} 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 {nvfortran-*} f90]} { return "character\\*1" } 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] || [test_compiler_info {nvfortran-*} f90]} { return "MAIN_" } else { return "unknown" } } # Fortran version of runto_main. proc fortran_runto_main { } { return [runto [fortran_main]] }