diff options
author | Andrew Burgess <andrew.burgess@embecosm.com> | 2019-01-17 16:30:35 +0000 |
---|---|---|
committer | Andrew Burgess <andrew.burgess@embecosm.com> | 2019-03-06 18:11:31 +0000 |
commit | 3be47f7aa99dc90190e642a4e191c9f049e0a934 (patch) | |
tree | 2b8b91477c7ad5b4bdeb68080f9f82df2180a2cc /gdb/testsuite/gdb.fortran | |
parent | 4d00f5d8f6c4a1c9f334b1abb45b9ce05fb45b0a (diff) | |
download | gdb-3be47f7aa99dc90190e642a4e191c9f049e0a934.zip gdb-3be47f7aa99dc90190e642a4e191c9f049e0a934.tar.gz gdb-3be47f7aa99dc90190e642a4e191c9f049e0a934.tar.bz2 |
gdb/fortran: Expand the set of types that support (kind=N)
Expand the number of types that can be adjusted with a (kind=N) type
extension.
gdb/ChangeLog:
* f-exp.y (convert_to_kind_type): Handle more type kinds.
gdb/testsuite/ChangeLog:
* gdb.fortran/type-kinds.exp (test_cast_1_to_type_kind): New
function.
(test_basic_parsing_of_type_kinds): Expand types tested.
(test_parsing_invalid_type_kinds): New function.
Diffstat (limited to 'gdb/testsuite/gdb.fortran')
-rw-r--r-- | gdb/testsuite/gdb.fortran/type-kinds.exp | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/gdb/testsuite/gdb.fortran/type-kinds.exp b/gdb/testsuite/gdb.fortran/type-kinds.exp index b60b804..c679bc5 100644 --- a/gdb/testsuite/gdb.fortran/type-kinds.exp +++ b/gdb/testsuite/gdb.fortran/type-kinds.exp @@ -21,15 +21,54 @@ load_lib "fortran.exp" if { [skip_fortran_tests] } { continue } +# Cast the value 1 to the type 'BASE_TYPE (kind=TYPE_KIND)'. The +# expected result of the cast is CAST_RESULT, and the size of the +# value returned by the cast should be SIZE_RESULT. +proc test_cast_1_to_type_kind {base_type type_kind cast_result size_result} { + set type_string "$base_type (kind=$type_kind)" + gdb_test "p (($type_string) 1)" " = $cast_result" + + if {($base_type == "real" || $base_type == "complex") + && $type_kind == 16} { + setup_kfail gdb/18644 "*-*-*" + } + + gdb_test "p sizeof (($type_string) 1)" " = $size_result" +} + # Test parsing of `(kind=N)` type modifiers. proc test_basic_parsing_of_type_kinds {} { - gdb_test "p ((character (kind=1)) 1)" " = 1" + test_cast_1_to_type_kind "character" "1" "1" "1" + + test_cast_1_to_type_kind "complex" "4" "\\(1,0\\)" "8" + test_cast_1_to_type_kind "complex" "8" "\\(1,0\\)" "16" + test_cast_1_to_type_kind "complex" "16" "\\(1,0\\)" "32" + + test_cast_1_to_type_kind "real" "4" "1" "4" + test_cast_1_to_type_kind "real" "8" "1" "8" + test_cast_1_to_type_kind "real" "16" "1" "16" + + test_cast_1_to_type_kind "logical" "1" "\\.TRUE\\." "1" + test_cast_1_to_type_kind "logical" "4" "\\.TRUE\\." "4" + test_cast_1_to_type_kind "logical" "8" "\\.TRUE\\." "8" + + test_cast_1_to_type_kind "integer" "2" "1" "2" + test_cast_1_to_type_kind "integer" "4" "1" "4" +} + +proc test_parsing_invalid_type_kinds {} { + foreach typename {complex real logical integer} { + foreach typesize {3 5 7 9} { + gdb_test "p (($typename (kind=$typesize)) 1)" "unsupported kind $typesize for type $typename.*" + } + } } clean_restart if [set_lang_fortran] then { test_basic_parsing_of_type_kinds + test_parsing_invalid_type_kinds } else { warning "$test_name tests suppressed." 0 } |