File: types.exp

package info (click to toggle)
gdb-doc 16.3-1
  • links: PTS, VCS
  • area: non-free
  • in suites: forky, sid, trixie
  • size: 244,264 kB
  • sloc: ansic: 2,134,731; asm: 375,582; exp: 206,875; cpp: 73,639; makefile: 70,232; sh: 26,038; python: 13,697; yacc: 11,341; ada: 7,358; xml: 6,098; perl: 5,077; pascal: 3,389; tcl: 2,986; f90: 2,764; lisp: 1,984; cs: 879; lex: 738; sed: 228; awk: 181; objc: 137; fortran: 57
file content (131 lines) | stat: -rw-r--r-- 3,951 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# Copyright 1994-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 <http://www.gnu.org/licenses/>.

# This file was adapted from old Chill tests by Stan Shebs
# (shebs@cygnus.com).

load_lib "fortran.exp"

require allow_fortran_tests

proc test_integer_literal_types_accepted {} {
    global gdb_prompt

    # Test various decimal values.
    # Should be integer*4 probably.
    gdb_test "pt 123" "type = int" 
}

proc test_character_literal_types_accepted {} {
    global gdb_prompt

    # Test various character values.

    gdb_test "pt 'a'" "type = character\\*1"
}

proc test_integer_literal_types_rejected {} {
    global gdb_prompt

    test_print_reject "pt _"
}

proc test_logical_literal_types_accepted {} {
    global gdb_prompt

    # Test the only possible values for a logical, TRUE and FALSE (and
    # also true and false).

    gdb_test "pt .TRUE." "type = logical\\*4"
    gdb_test "pt .FALSE." "type = logical\\*4"
    gdb_test "pt .true." "type = logical\\*4"
    gdb_test "pt .false." "type = logical\\*4"
}

proc test_float_literal_types_accepted {} {
    global gdb_prompt

    # Test various floating point formats

    # this used to guess whether to look for "real*4" or
    # "real*8" based on a target config variable, but no one
    # maintained it properly.

    gdb_test "pt .44" "type = real\\*\[0-9\]+"
    gdb_test "pt 44.0" "type = real\\*\[0-9\]+"
    gdb_test "pt 10D20" "type = real\\*\[0-9\]+"
    gdb_test "pt 10d20" "type = real\\*\[0-9\]+"
    gdb_test "pt 10E20" "type = real\\*\[0-9\]+"
    gdb_test "pt 10e20" "type = real\\*\[0-9\]+"
}

# Test the default primitive Fortran types.
proc test_default_types {} {
    gdb_test "ptype integer" "type = integer\\*4"
    gdb_test "ptype logical" "type = logical\\*4"
    gdb_test "ptype real" "type = real\\*4"
    gdb_test "ptype complex" "type = complex\\*4"
}

# Test the the primitive Fortran types, those that GDB should always
# know, even if the program does not define them, are in fact, known.
proc test_primitive_types_known {} {
    foreach type {void character \
		     integer*1 integer*2 integer*4 integer*8 \
		     integer_1 integer_2 integer_4 integer_8 \
		     logical*1 logical*2 logical*4 logical*8 \
		     logical_1 logical_2 logical_4 logical_8 \
		     real*4 real*8 real*16 real_4 real_8 real_16 \
		     complex*4 complex*8 complex*16 \
		     complex_4 complex_8 complex_16} {

	# While TYPE_KIND is allowed as input, GDB will always return the
	# Fortran notation TYPE*KIND
	regsub -all "_" $type "\*" type_res
	set re [string_to_regexp "type = $type_res"]
	switch $type {
	    real*16 - complex*16 {
		regexp {^[^*_]*} $type base
		set re_unsupported \
		    [string_to_regexp \
			 "unsupported kind 16 for type $base*4"]
		set re ($re|$re_unsupported)
	    }
	    real_16 - complex_16 {
		set re_unsupported \
		    [string_to_regexp \
			 "unsupported type $type_res"]
		set re ($re|$re_unsupported)
	    }
	}

	gdb_test "ptype $type" $re
    }
}

clean_restart
gdb_test "set print sevenbit-strings" ""

if {[set_lang_fortran]} {
    test_primitive_types_known
    test_default_types
    test_integer_literal_types_accepted
    test_integer_literal_types_rejected
    test_logical_literal_types_accepted
    test_character_literal_types_accepted
    test_float_literal_types_accepted
} else {
    warning "$test_name tests suppressed." 0
}