# This test code is part of GDB, the GNU debugger.

# Copyright 2010-2020 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 {gcc-4-[012]-*}]} {
	return "int4"
    } elseif {[test_compiler_info {gcc-*}]} {
	return "integer\\(kind=4\\)"
    } elseif {[test_compiler_info {icc-*}]} {
	return "INTEGER\\(4\\)"
    } else {
	return "unknown"
    }
}

proc fortran_int8 {} {
    if {[test_compiler_info {gcc-4-[012]-*}]} {
	return "int8"
    } elseif {[test_compiler_info {gcc-*}]} {
	return "integer\\(kind=8\\)"
    } elseif {[test_compiler_info {icc-*}]} {
	return "INTEGER\\(8\\)"
    } else {
	return "unknown"
    }
}

proc fortran_real4 {} {
    if {[test_compiler_info {gcc-4-[012]-*}]} {
	return "real4"
    } elseif {[test_compiler_info {gcc-*}]} {
	return "real\\(kind=4\\)"
    } elseif {[test_compiler_info {icc-*}]} {
	return "REAL\\(4\\)"
    } else {
	return "unknown"
    }
}

proc fortran_real8 {} {
    if {[test_compiler_info {gcc-4-[012]-*}]} {
	return "real8"
    } elseif {[test_compiler_info {gcc-*}]} {
	return "real\\(kind=8\\)"
    } elseif {[test_compiler_info {icc-*}]} {
	return "REAL\\(8\\)"
    } else {
	return "unknown"
    }
}

proc fortran_complex4 {} {
    if {[test_compiler_info {gcc-4-[012]-*}]} {
	return "complex4"
    } elseif {[test_compiler_info {gcc-*}]} {
	return "complex\\(kind=4\\)"
    } elseif {[test_compiler_info {icc-*}]} {
	return "COMPLEX\\(4\\)"
    } else {
	return "unknown"
    }
}

proc fortran_logical4 {} {
    if {[test_compiler_info {gcc-4-[012]-*}]} {
	return "logical4"
    } elseif {[test_compiler_info {gcc-*}]} {
	return "logical\\(kind=4\\)"
    } elseif {[test_compiler_info {icc-*}]} {
	return "LOGICAL\\(4\\)"
    } else {
	return "unknown"
    }
}

proc fortran_character1 {} {
    if {[test_compiler_info {gcc-4-[012]-*}]} {
	return "character1"
    } elseif {[test_compiler_info {gcc-*}]} {
	return "character\\(kind=1\\)"
    } elseif {[test_compiler_info {icc-*}]} {
	return "CHARACTER\\(1\\)"
    } else {
	return "unknown"
    }
}
