-# Copyright 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-# 2004, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+# Copyright 1992-2013 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
# This file was written by Fred Fish. (fnf@cygnus.com)
# and modified by Bob Manson. (manson@cygnus.com)
-if $tracelevel then {
- strace $tracelevel
-}
-
set testfile "callfuncs"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
+set compile_flags {debug}
+if [support_complex_tests] {
+ lappend compile_flags "additional_flags=-DTEST_COMPLEX"
+}
+
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable $compile_flags] != "" } {
untested callfuncs.exp
return -1
}
# Create and source the file that provides information about the compiler
# used to compile the test case.
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
return -1;
}
# We need to up this because this can be really slow on some boards.
set timeout 60;
+ # If any of these calls segv we don't want to affect subsequent tests.
+ # E.g., we want to ensure register values are restored.
+ gdb_test_no_output "set unwindonsignal on"
+
gdb_test "p t_char_values(0,0)" " = 0"
gdb_test "p t_char_values('a','b')" " = 1"
gdb_test "p t_char_values(char_val1,char_val2)" " = 1"
gdb_test "p t_int_double(99, 99.0)" " = 1"
}
+ if [support_complex_tests] {
+ gdb_test "p t_float_complex_values(fc1, fc2)" " = 1"
+ gdb_test "p t_float_complex_values(fc3, fc4)" " = 0"
+
+ gdb_test "p t_float_complex_many_args(fc1, fc2, fc3, fc4, fc1, fc2, fc3, fc4, fc1, fc2, fc3, fc4, fc1, fc2, fc3, fc4)" " = 1"
+ gdb_test "p t_float_complex_many_args(fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1)" " = 0"
+
+ gdb_test "p t_double_complex_values(dc1, dc2)" " = 1"
+ gdb_test "p t_double_complex_values(dc3, dc4)" " = 0"
+
+ gdb_test "p t_double_complex_many_args(dc1, dc2, dc3, dc4, dc1, dc2, dc3, dc4, dc1, dc2, dc3, dc4, dc1, dc2, dc3, dc4)" " = 1"
+ gdb_test "p t_double_complex_many_args(dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1)" " = 0"
+
+ gdb_test "p t_long_double_complex_values(ldc1, ldc2)" " = 1"
+ gdb_test "p t_long_double_complex_values(ldc3, ldc4)" " = 0"
+ gdb_test "p t_long_double_complex_many_args(ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4)" " = 1"
+ gdb_test "p t_long_double_complex_many_args(ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1,ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1)" " = 0"
+ }
+
gdb_test "p t_string_values(string_val2,string_val1)" " = 0"
gdb_test "p t_string_values(string_val1,string_val2)" " = 1"
gdb_test "p t_string_values(\"string 1\",\"string 2\")" " = 1"
"call inferior func with struct - returns double"
}
- gdb_test "p t_structs_a(struct_val1)" "= (.unsigned char .. )?\"foo\"" \
+ if [support_complex_tests] {
+
+ gdb_test "p t_structs_fc(struct_val1)" ".*= 3 \\+ 3 \\* I" \
+ "call inferior func with struct - returns float _Complex"
+
+ gdb_test "p t_structs_dc(struct_val1)" ".*= 4 \\+ 4 \\* I" \
+ "call inferior func with struct - returns double _Complex"
+
+ gdb_test "p t_structs_ldc(struct_val1)" "= 5 \\+ 5 \\* I" \
+ "call inferior func with struct - returns long double _Complex"
+ }
+
+ gdb_test "p t_structs_a(struct_val1)" "= (.unsigned char .. )?<buf.*> \"foo\"" \
"call inferior func with struct - returns char *"
+
+ # Restore default value.
+ gdb_test_no_output "set unwindonsignal off"
}
# Procedure to get current content of all registers.
}
exp_continue
}
+ -re "^last_break\[ \t\]+\[^\r\n\]+\r\n" {
+ if [istarget "s390*-*-*"] {
+ # Filter out last_break which is read-only,
+ # giving spurious differences.
+ } else {
+ lappend all_registers_lines $expect_out(0,string)
+ }
+ exp_continue
+ }
-re "^\[^ \t\]+\[ \t\]+\[^\r\n\]+\r\n" {
lappend all_registers_lines $expect_out(0,string)
exp_continue
gdb_test_no_output "set overload-resolution 0"
} else {
- gdb_test_no_output "set language c"
if { ![runto_main] } {
gdb_suppress_tests;
}
+ gdb_test_no_output "set language c"
}
get_debug_format
# handling vs. local labels `.L'... as `Lcallfunc' starts with `L'.
gdb_test "print callfunc (Lcallfunc, 5)" " = 12"
+
+# Regression test for function pointer cast.
+gdb_test "print *((int *(*) (void)) voidfunc)()" " = 23"