diff options
-rw-r--r-- | gdb/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/gnu_vector.exp | 66 |
2 files changed, 60 insertions, 13 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 515a669..6875627 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2015-08-24 Andreas Arnez <arnez@linux.vnet.ibm.com> + + * gdb.base/gnu_vector.exp: Try compilation with "-mcpu=native + -Wno-psabi" if "-mcpu=native" fails. For the tests with "finish" + and "return" use KFAIL when GDB can not read/write the vector + return value. + 2015-08-21 Gary Benson <gbenson@redhat.com> * gdb.trace/pending.exp: Cope with remote transfer warnings. diff --git a/gdb/testsuite/gdb.base/gnu_vector.exp b/gdb/testsuite/gdb.base/gnu_vector.exp index 173da4d..09593d2 100644 --- a/gdb/testsuite/gdb.base/gnu_vector.exp +++ b/gdb/testsuite/gdb.base/gnu_vector.exp @@ -25,11 +25,19 @@ standard_testfile .c # without a CPU option. If all variants fail, assume that the # compiler can not handle GNU vectors. -if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" ${binfile} executable {debug quiet additional_flags=-mcpu=native}] != "" - && [gdb_compile "${srcdir}/${subdir}/${srcfile}" ${binfile} executable {debug quiet additional_flags=-march=native}] != "" - && [gdb_compile "${srcdir}/${subdir}/${srcfile}" ${binfile} executable {debug quiet}] != ""} { - untested "compiler can't handle the vector_size attribute?" - return -1 +proc do_compile { {opts {}} } { + global srcdir subdir srcfile binfile + set ccopts {debug quiet} + foreach opt $opts {lappend ccopts "additional_flags=$opt"} + gdb_compile "${srcdir}/${subdir}/${srcfile}" "$binfile" executable $ccopts +} + +if { [do_compile {-mcpu=native}] != "" + && [do_compile {-mcpu=native -Wno-psabi}] != "" + && [do_compile {-march=native}] != "" + && [do_compile] != ""} { + untested "compiler can't handle vector_size attribute?" + return -1 } clean_restart ${binfile} @@ -195,14 +203,46 @@ gdb_test "print add_structvecs(i2, (struct just_int2)\{2*i2\}, (struct two_int2) gdb_test "print add_singlevecs((char1) \{6\}, (int1) \{12\}, (double1) \{24\})" "= \\{42\\}" \ "call add_singlevecs" -# Test vector return value handling with "finish" and "return". +# Test "finish" from vector-valued function. gdb_breakpoint "add_some_intvecs" gdb_continue "add_some_intvecs" -gdb_test "finish" "Value returned is .* = \\{10, 20, 48, 72\\}" \ - "finish shows vector return value" +set test "finish shows vector return value" +gdb_test_multiple "finish" $test { + -re "Value returned is .* = \\{10, 20, 48, 72\\}.*$gdb_prompt $" { + pass $test + } + -re "Value returned has type: .* Cannot determine contents.*$gdb_prompt $" { + kfail "gdb/8549" $test + } +} + +# Test "return" from vector-valued function. gdb_continue "add_some_intvecs" -gdb_test "return (int4) \{4, 2, 7, 6\}" \ - "#0 .* main .*" \ - "set vector return value" \ - "Make add_some_intvecs return now. .y or n.*" "y" -gdb_test "continue" "4 2 7 6\r\n.*" "verify vector return value" +set test "return from vector-valued function" +set should_kfail 0 +gdb_test_multiple "return (int4) \{4, 2, 7, 6\}" $test { + -re "#0 .* main .*$gdb_prompt $" { + pass $test + } + -re "The location .* is unknown.\r\n.* return value .* will be ignored.\r\n" { + set should_kfail 1 + exp_continue + } + -re "Make add_some_intvecs return now. .y or n. $" { + send_gdb "y\n" + exp_continue + } +} +set test "verify vector return value" +gdb_test_multiple "continue" $test { + -re "4 2 7 6\r\n.*$gdb_prompt $" { + pass $test + } + -re "10 20 48 72\r\n.*$gdb_prompt $" { + if { $should_kfail } { + kfail "gdb/8549" $test + } else { + fail $test + } + } +} |