2013-09-20 Chung-Lin Tang <cltang@codesourcery.com>
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.base / callfuncs.exp
index d7f175c1b2bc7cde88a7612b178d77392f7a5ed6..e3f49f98b1752a2dcab103d5cd7a097aaf873014 100644 (file)
@@ -1,5 +1,4 @@
-# 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}
+standard_testfile
 
 set compile_flags {debug}
 if [support_complex_tests] {
@@ -38,8 +31,8 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable $com
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
 
-if [get_compiler_info ${binfile}] {
-    return -1;
+if [get_compiler_info] {
+    return -1
 }
 
 if {$hp_aCC_compiler} {
@@ -68,7 +61,11 @@ proc do_function_calls {} {
     global gdb_prompt
 
     # We need to up this because this can be really slow on some boards.
-    set timeout 60;
+    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"
@@ -150,19 +147,15 @@ proc do_function_calls {} {
     }
 
     if [support_complex_tests] {
-       setup_kfail_for_target gdb/12798 "x86_64-*-*"
        gdb_test "p t_float_complex_values(fc1, fc2)" " = 1"
        gdb_test "p t_float_complex_values(fc3, fc4)" " = 0"
 
-       setup_kfail_for_target gdb/12800 "x86_64-*-*"
        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"
 
-       setup_kfail_for_target gdb/12798 "x86_64-*-*"
        gdb_test "p t_double_complex_values(dc1, dc2)" " = 1"
        gdb_test "p t_double_complex_values(dc3, dc4)" " = 0"
 
-       setup_kfail_for_target gdb/12800 "x86_64-*-*"
        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"
 
@@ -247,23 +240,21 @@ proc do_function_calls {} {
 
     if [support_complex_tests] {
 
-       setup_kfail_for_target gdb/12796 "x86_64-*-*"
        gdb_test "p t_structs_fc(struct_val1)" ".*= 3 \\+ 3 \\* I" \
            "call inferior func with struct - returns float _Complex"
 
-       setup_kfail_for_target gdb/12783 "i?86-*-*"
-       setup_kfail_for_target gdb/12796 "x86_64-*-*"
        gdb_test "p t_structs_dc(struct_val1)" ".*= 4 \\+ 4 \\* I" \
            "call inferior func with struct - returns double _Complex"
 
-       setup_kfail_for_target gdb/12783 "i?86-*-*"
-       setup_kfail_for_target gdb/12796 "x86_64-*-*"
        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 .. )?\"foo\"" \
+    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.
@@ -336,7 +327,7 @@ proc rerun_and_prepare {} {
        # the language be set to the default.
 
        if { ![runto_main] } {
-           gdb_suppress_tests;
+           gdb_suppress_tests
        }
 
        # However, turn off overload-resolution for aCC.  Having it on causes
@@ -345,7 +336,7 @@ proc rerun_and_prepare {} {
        gdb_test_no_output "set overload-resolution 0"
     } else {
        if { ![runto_main] } {
-           gdb_suppress_tests;
+           gdb_suppress_tests
        }
        gdb_test_no_output "set language c"
     }
@@ -544,3 +535,6 @@ if {![target_info exists gdb,nosignals] && ![istarget "*-*-uclinux*"]} {
 # 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"
This page took 0.026423 seconds and 4 git commands to generate.