forked from Imagelibrary/binutils-gdb
2016-05-25 Bernhard Heckel <bernhard.heckel@intel.com> gdb/testsuite/Changelog: * pointers.f90: Add cylic pointers. * pointers.exp: Add print of cyclic pointers. Change-Id: Ic3b6187c5980fd6c37e2e94787f8321e5b7f2d75
144 lines
6.0 KiB
Plaintext
144 lines
6.0 KiB
Plaintext
# Copyright 2016 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/>.
|
|
|
|
standard_testfile "pointers.f90"
|
|
load_lib fortran.exp
|
|
|
|
if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
|
|
{debug f90 quiet}] } {
|
|
return -1
|
|
}
|
|
|
|
if ![runto_main] {
|
|
untested "could not run to main"
|
|
return -1
|
|
}
|
|
|
|
# Depending on the compiler being used, the type names can be printed differently.
|
|
set logical [fortran_logical4]
|
|
set real [fortran_real4]
|
|
set int [fortran_int4]
|
|
set complex [fortran_complex4]
|
|
|
|
|
|
gdb_breakpoint [gdb_get_line_number "Before pointer assignment"]
|
|
gdb_continue_to_breakpoint "Before pointer assignment"
|
|
gdb_test "print logp" "= \\(PTR TO -> \\( $logical \\)\\) 0x0" "print logp, not associated"
|
|
gdb_test "print *logp" "Cannot access memory at address 0x0" "print *logp, not associated"
|
|
gdb_test "print comp" "= \\(PTR TO -> \\( $complex \\)\\) 0x0" "print comp, not associated"
|
|
gdb_test "print *comp" "Cannot access memory at address 0x0" "print *comp, not associated"
|
|
gdb_test "print charp" "= \\(PTR TO -> \\( character\\*1 \\)\\) 0x0" "print charp, not associated"
|
|
gdb_test "print *charp" "Cannot access memory at address 0x0" "print *charp, not associated"
|
|
gdb_test "print charap" "= \\(PTR TO -> \\( character\\*3 \\)\\) 0x0" "print charap, not associated"
|
|
gdb_test "print *charap" "Cannot access memory at address 0x0" "print *charap, not associated"
|
|
gdb_test "print intp" "= \\(PTR TO -> \\( $int \\)\\) 0x0" "print intp, not associated"
|
|
gdb_test "print *intp" "Cannot access memory at address 0x0" "print *intp, not associated"
|
|
set test "print intap, not associated"
|
|
gdb_test_multiple "print intap" $test {
|
|
-re " = \\(PTR TO -> \\( $int \\(:,:\\)\\)\\) <not associated>\r\n$gdb_prompt $" {
|
|
pass $test
|
|
}
|
|
-re " = <not associated>\r\n$gdb_prompt $" {
|
|
pass $test
|
|
}
|
|
}
|
|
gdb_test "print realp" "= \\(PTR TO -> \\( $real \\)\\) 0x0" "print realp, not associated"
|
|
gdb_test "print *realp" "Cannot access memory at address 0x0" "print *realp, not associated"
|
|
gdb_test "print \$my_var = intp" "= \\(PTR TO -> \\( $int \\)\\) 0x0"
|
|
set test "print cyclicp1, not associated"
|
|
gdb_test_multiple "print cyclicp1" $test {
|
|
-re "= \\( i = -?\\d+, p = 0x0 \\)\r\n$gdb_prompt $" {
|
|
pass $test
|
|
}
|
|
-re "= \\( i = -?\\d+, p = <not associated> \\)\r\n$gdb_prompt $" {
|
|
pass $test
|
|
}
|
|
}
|
|
set test "print cyclicp1%p, not associated"
|
|
gdb_test_multiple "print cyclicp1%p" $test {
|
|
-re "= \\(PTR TO -> \\( Type typewithpointer \\)\\) 0x0\r\n$gdb_prompt $" {
|
|
pass $test
|
|
}
|
|
-re "= \\(PTR TO -> \\( Type typewithpointer \\)\\) <not associated>\r\n$gdb_prompt $" {
|
|
pass $test
|
|
}
|
|
}
|
|
|
|
|
|
gdb_breakpoint [gdb_get_line_number "Before value assignment"]
|
|
gdb_continue_to_breakpoint "Before value assignment"
|
|
gdb_test "print *(twop)%ivla2" "= <not allocated>"
|
|
|
|
|
|
gdb_breakpoint [gdb_get_line_number "After value assignment"]
|
|
gdb_continue_to_breakpoint "After value assignment"
|
|
gdb_test "print logp" "= \\(PTR TO -> \\( $logical \\)\\) $hex\( <.*>\)?"
|
|
gdb_test "print *logp" "= \\.TRUE\\."
|
|
gdb_test "print comp" "= \\(PTR TO -> \\( $complex \\)\\) $hex\( <.*>\)?"
|
|
gdb_test "print *comp" "= \\(1,2\\)"
|
|
gdb_test "print charp" "= \\(PTR TO -> \\( character\\*1 \\)\\) $hex\( <.*>\)?"
|
|
gdb_test "print *charp" "= 'a'"
|
|
gdb_test "print charap" "= \\(PTR TO -> \\( character\\*3 \\)\\) $hex\( <.*>\)?"
|
|
gdb_test "print *charap" "= 'abc'"
|
|
gdb_test "print intp" "= \\(PTR TO -> \\( $int \\)\\) $hex\( <.*>\)?"
|
|
gdb_test "print *intp" "= 10"
|
|
set test_name "print intap, associated"
|
|
gdb_test_multiple "print intap" $test_name {
|
|
-re "= \\(\\( 1, 1, 3(, 1){7}\\) \\( 1(, 1){9}\\) \\)\r\n$gdb_prompt $" {
|
|
pass $test_name
|
|
}
|
|
-re "= \\(PTR TO -> \\( $int \\(10,2\\)\\)\\) $hex\( <.*>\)?\r\n$gdb_prompt $" {
|
|
gdb_test "print *intap" "= \\(\\( 1, 1, 3(, 1){7}\\) \\( 1(, 1){9}\\) \\)"
|
|
pass $test_name
|
|
}
|
|
}
|
|
set test_name "print intvlap, associated"
|
|
gdb_test_multiple "print intvlap" $test_name {
|
|
-re "= \\(2, 2, 2, 4(, 2){6}\\)\r\n$gdb_prompt $" {
|
|
pass $test_name
|
|
}
|
|
-re "= \\(PTR TO -> \\( $int \\(10\\)\\)\\) $hex\( <.*>\)?\r\n$gdb_prompt $" {
|
|
gdb_test "print *intvlap" "= \\(2, 2, 2, 4(, 2){6}\\)"
|
|
pass $test_name
|
|
}
|
|
}
|
|
gdb_test "print realp" "= \\(PTR TO -> \\( $real \\)\\) $hex\( <.*>\)?"
|
|
gdb_test "print *realp" "= 3\\.14000\\d+"
|
|
gdb_test "print arrayOfPtr(2)%p" "= \\(PTR TO -> \\( Type two \\)\\) $hex\( <.*>\)?"
|
|
gdb_test "print *(arrayOfPtr(2)%p)" "= \\( ivla1 = \\(11, 12, 13\\), ivla2 = \\(\\( 211, 221\\) \\( 212, 222\\) \\) \\)"
|
|
set test_name "print arrayOfPtr(3)%p"
|
|
gdb_test_multiple $test_name $test_name {
|
|
-re "= \\(PTR TO -> \\( Type two \\)\\) <not associated>\r\n$gdb_prompt $" {
|
|
pass $test_name
|
|
}
|
|
-re "= \\(PTR TO -> \\( Type two \\)\\) 0x0\r\n$gdb_prompt $" {
|
|
pass $test_name
|
|
}
|
|
}
|
|
set test_name "print *(arrayOfPtr(3)%p), associated"
|
|
gdb_test_multiple "print *(arrayOfPtr(3)%p)" $test_name {
|
|
-re "Cannot access memory at address 0x0\r\n$gdb_prompt $" {
|
|
pass $test_name
|
|
}
|
|
-re "Attempt to take contents of a not associated pointer.\r\n$gdb_prompt $" {
|
|
pass $test_name
|
|
}
|
|
}
|
|
gdb_test "print cyclicp1" "= \\( i = 1, p = $hex\( <.*>\)? \\)"
|
|
gdb_test "print cyclicp1%p" "= \\(PTR TO -> \\( Type typewithpointer \\)\\) $hex\( <.*>\)?"
|
|
gdb_test "print *((integer*) &inta + 2)" "= 3" "print temporary pointer, array"
|
|
gdb_test "print *((integer*) &intvla + 3)" "= 4" "print temporary pointer, allocated vla"
|
|
gdb_test "print \$pc" "= \\(PTR TO -> \\( void \\(\\)\\(\\)\\)\\) $hex <pointers\\+\\d+>" "Print program counter"
|