aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.pascal
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2007-10-08 12:41:25 +0000
committerDaniel Jacobowitz <drow@false.org>2007-10-08 12:41:25 +0000
commita912286e388254bfa8e1120e176ebab17c2a2fe8 (patch)
tree965127635491717dc05fc02a23b252d3cbf07ea8 /gdb/testsuite/gdb.pascal
parent4d439271949d14903407bc0cccf36a3c3d70c371 (diff)
downloadgdb-a912286e388254bfa8e1120e176ebab17c2a2fe8.zip
gdb-a912286e388254bfa8e1120e176ebab17c2a2fe8.tar.gz
gdb-a912286e388254bfa8e1120e176ebab17c2a2fe8.tar.bz2
2007-10-08 Pierre Muller <muller@ics.u-strasbg.fr>
Daniel Jacobowitz <dan@codesourcery.com> * Makefile.in (ALL_SUBDIRS): Add gdb.pascal. * configure.ac (AC_OUTPUT): Add gdb.pascal/Makefile. * configure: Regenerated. * gdb.pascal/Makefile.in, gdb.pascal/hello.exp, gdb.pascal/hello.pas, gdb.pascal/types.exp, lib/pascal.exp: New files.
Diffstat (limited to 'gdb/testsuite/gdb.pascal')
-rw-r--r--gdb/testsuite/gdb.pascal/Makefile.in24
-rw-r--r--gdb/testsuite/gdb.pascal/hello.exp75
-rw-r--r--gdb/testsuite/gdb.pascal/hello.pas15
-rw-r--r--gdb/testsuite/gdb.pascal/types.exp110
4 files changed, 224 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.pascal/Makefile.in b/gdb/testsuite/gdb.pascal/Makefile.in
new file mode 100644
index 0000000..431a4c7
--- /dev/null
+++ b/gdb/testsuite/gdb.pascal/Makefile.in
@@ -0,0 +1,24 @@
+VPATH = @srcdir@
+srcdir = @srcdir@
+
+EXECUTABLES = hello/hello
+
+MISCELLANEOUS =
+
+all info install-info dvi install uninstall installcheck check:
+ @echo "Nothing to be done for $@..."
+
+clean mostlyclean:
+ -find . -name '*.o' -print | xargs rm -f
+ -find . -name '*.ali' -print | xargs rm -f
+ -find . -name 'b~*.ad[sb]' -print | xargs rm -f
+ -rm -f *~ a.out xgdb *.x *.ci *.tmp
+ -rm -f *~ *.o a.out xgdb *.x *.ci *.tmp
+ -rm -f core core.coremaker coremaker.core corefile $(EXECUTABLES)
+ -rm -f $(MISCELLANEOUS) twice-tmp.c
+
+distclean maintainer-clean realclean: clean
+ -rm -f *~ core
+ -rm -f Makefile config.status config.log
+ -rm -f *-init.exp
+ -rm -fr *.log summary detail *.plog *.sum *.psum site.*
diff --git a/gdb/testsuite/gdb.pascal/hello.exp b/gdb/testsuite/gdb.pascal/hello.exp
new file mode 100644
index 0000000..3d0a986
--- /dev/null
+++ b/gdb/testsuite/gdb.pascal/hello.exp
@@ -0,0 +1,75 @@
+# Copyright 2007 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/>.
+
+if $tracelevel then {
+ strace $tracelevel
+}
+
+load_lib "pascal.exp"
+
+set testfile "hello"
+set srcfile ${testfile}.pas
+set binfile ${objdir}/${subdir}/${testfile}
+
+if {[gdb_compile_pascal "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug ]] != "" } {
+ return -1
+}
+
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+gdb_load ${binfile}
+set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
+set bp_location2 [gdb_get_line_number "set breakpoint 2 here"]
+
+if { [gdb_breakpoint ${srcfile}:${bp_location1}] } {
+ pass "setting breakpoint 1"
+}
+if { [gdb_breakpoint ${srcfile}:${bp_location2}] } {
+ pass "setting breakpoint 2"
+}
+
+# Verify that "start" lands inside the right procedure.
+if { [gdb_start_cmd] < 0 } {
+ untested start
+ return -1
+}
+
+# This test fails for gpc
+# because debug information for 'main'
+# is in some <implicit code>
+gdb_test "" \
+ ".* at .*hello.pas.*" \
+ "start"
+
+gdb_test "cont" \
+ "Breakpoint .*:${bp_location1}.*" \
+ "Going to first breakpoint"
+gdb_test "print st" \
+ ".* = ''.*" \
+ "Empty string check"
+
+# This test also fails for gpc because the program
+# stops after the string has been written
+# while it should stop before writing it
+if { $pascal_compiler_is_gpc } {
+ setup_xfail *-*-*
+}
+gdb_test "cont" \
+ "Breakpoint .*:${bp_location2}.*" \
+ "Going to second breakpoint"
+gdb_test "print st" \
+ ".* = 'Hello, world!'.*" \
+ "String after assignment check"
diff --git a/gdb/testsuite/gdb.pascal/hello.pas b/gdb/testsuite/gdb.pascal/hello.pas
new file mode 100644
index 0000000..e43a1a4
--- /dev/null
+++ b/gdb/testsuite/gdb.pascal/hello.pas
@@ -0,0 +1,15 @@
+program hello;
+
+var
+ st : string;
+
+procedure print_hello;
+begin
+ Writeln('Before assignment'); { set breakpoint 1 here }
+ st:='Hello, world!';
+ writeln(st); {set breakpoint 2 here }
+end;
+
+begin
+ print_hello;
+end.
diff --git a/gdb/testsuite/gdb.pascal/types.exp b/gdb/testsuite/gdb.pascal/types.exp
new file mode 100644
index 0000000..abf2aa1
--- /dev/null
+++ b/gdb/testsuite/gdb.pascal/types.exp
@@ -0,0 +1,110 @@
+# Copyright 1994, 1995, 1997, 1998, 2007 Free Software Foundation, Inc.
+# Copyright 2007 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/>.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-gdb@prep.ai.mit.edu
+
+# This file was adapted from old Chill tests by Stan Shebs
+# (shebs@cygnus.com).
+# Adapted to pascal by Pierre Muller
+
+if $tracelevel then {
+ strace $tracelevel
+}
+
+set prms_id 0
+set bug_id 0
+
+# Set the current language to pascal. This counts as a test. If it
+# fails, then we skip the other tests.
+
+proc set_lang_pascal {} {
+ global gdb_prompt
+
+ if [gdb_test "set language pascal" ""] {
+ return 0;
+ }
+
+ if ![gdb_test "show language" ".* source language is \"pascal\".*"] {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+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 = char"
+}
+
+proc test_string_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test various character values.
+
+ setup_kfail *-*-* gdb/2326
+ gdb_test "pt 'a simple string'" "type = string"
+}
+
+proc test_logical_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test the only possible values for a logical, TRUE and FALSE.
+
+ gdb_test "pt TRUE" "type = bool"
+ gdb_test "pt FALSE" "type = bool"
+}
+
+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 noone
+ # maintained it properly.
+
+ gdb_test "pt .44" "type = double"
+ gdb_test "pt 44.0" "type = double"
+ gdb_test "pt 10e20" "type = double"
+ gdb_test "pt 10E20" "type = double"
+}
+
+# Start with a fresh gdb.
+
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+
+if [set_lang_pascal] then {
+ test_integer_literal_types_accepted
+ test_logical_literal_types_accepted
+ test_character_literal_types_accepted
+ test_string_literal_types_accepted
+ test_float_literal_types_accepted
+} else {
+ warning "$test_name tests suppressed." 0
+}