summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTankut Baris Aktemur <tankut.baris.aktemur@intel.com>2020-01-29 09:05:20 +0100
committerTankut Baris Aktemur <tankut.baris.aktemur@intel.com>2020-01-29 09:10:56 +0100
commit5f440116e87a4613b888ab3f42c014468bd625d9 (patch)
tree05d141ca3ef1739738ca5e484f242ff4e2bab1f3
parentee2a6fc60413a2f5bc6641fd6d06f460c9deab3f (diff)
downloadbinutils-gdb-5f440116e87a4613b888ab3f42c014468bd625d9.tar.gz
testsuite, cp: add expected failures to pass-by-ref tests for certain compilers
There exist expected failures in the pass-by-ref.exp and pass-by-ref-2.exp tests based on the GCC and Clang version. * GCC version <= 6 and Clang do not emit DW_AT_deleted and DW_AT_defaulted. * Clang version >= 7 emits DW_AT_calling_convention, which helps the debugger make the right calling convention decision in some cases despite lacking the 'defaulted' and 'deleted' attributes. Mark the related tests as XFAIL based on the compiler version. Tested on X86_64 using GCC 5.5.0, 6.5.0, 7.4.0, 8.3.0, 9.2.1; and Clang 5.0.1, 6.0.0, 7.0.0, 8.0.0, 9.0.1, 10.0.0. gdb/testsuite/ChangeLog: 2020-01-29 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> * gdb.cp/pass-by-ref-2.exp: Mark some tests as XFAIL based on the GCC/Clang version. * gdb.cp/pass-by-ref.exp: Ditto. Change-Id: I1d8440aa438049f7c4da7f4f76f201c48550f1e4
-rw-r--r--gdb/testsuite/ChangeLog6
-rw-r--r--gdb/testsuite/gdb.cp/pass-by-ref-2.exp6
-rw-r--r--gdb/testsuite/gdb.cp/pass-by-ref.exp26
3 files changed, 38 insertions, 0 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 6559b7de0e6..dc938a2e738 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2020-01-29 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
+
+ * gdb.cp/pass-by-ref-2.exp: Mark some tests as XFAIL based on the
+ GCC/Clang version.
+ * gdb.cp/pass-by-ref.exp: Ditto.
+
2020-01-29 Tom de Vries <tdevries@suse.de>
* gdb.threads/watchpoint-fork-child.c: Guard prints with #if DEBUG.
diff --git a/gdb/testsuite/gdb.cp/pass-by-ref-2.exp b/gdb/testsuite/gdb.cp/pass-by-ref-2.exp
index a83ce8d5d7d..913f9af3ee7 100644
--- a/gdb/testsuite/gdb.cp/pass-by-ref-2.exp
+++ b/gdb/testsuite/gdb.cp/pass-by-ref-2.exp
@@ -42,6 +42,10 @@ if {![runto_main]} {
return -1
}
+# GCC version <= 6 and Clang do not emit DW_AT_defaulted and DW_AT_deleted.
+set is_gcc_6_or_older [test_compiler_info {gcc-[0-6]-*}]
+set is_clang [test_compiler_info {clang-*}]
+
set bp_location [gdb_get_line_number "stop here"]
gdb_breakpoint $bp_location
gdb_continue_to_breakpoint "end of main" ".*return .*;"
@@ -65,6 +69,7 @@ set sig "\"Inlined\:\:Inlined\\(.*Inlined const\&\\)\""
gdb_test "print cbvInlined (inlined)" \
"expression cannot be evaluated .* \\(maybe inlined\\?\\)"
+if {$is_gcc_6_or_older || $is_clang} {setup_xfail "*-*-*"}
gdb_test "print cbvDtorDel (*dtorDel)" \
".* cannot be evaluated .* 'DtorDel' is not destructible" \
"type not destructible"
@@ -94,6 +99,7 @@ gdb_test "print cbvTwoMCtor (twoMctor)" \
".* cannot be evaluated .* 'TwoMCtor' is not copy constructible" \
"copy ctor is implicitly deleted"
+if {$is_gcc_6_or_older || $is_clang} {setup_xfail "*-*-*"}
gdb_test "print cbvTwoMCtorAndCCtor (twoMctorAndCctor)" "12" \
"call cbvTwoMCtorAndCCtor"
gdb_test "print twoMctorAndCctor.x" "2" \
diff --git a/gdb/testsuite/gdb.cp/pass-by-ref.exp b/gdb/testsuite/gdb.cp/pass-by-ref.exp
index f500710fd43..06a36129e83 100644
--- a/gdb/testsuite/gdb.cp/pass-by-ref.exp
+++ b/gdb/testsuite/gdb.cp/pass-by-ref.exp
@@ -369,6 +369,12 @@ proc test_for_class { prefix states cbvfun data_field length} {
global ADDED
global TRACE
+ # GCC version <= 6 and Clang do not emit DW_AT_defaulted and DW_AT_deleted.
+ set is_gcc_6_or_older [test_compiler_info {gcc-[0-6]-*}]
+ set is_clang [test_compiler_info {clang-*}]
+ # But Clang version >= 7 emits DW_AT_calling_convention for types.
+ set is_clang_6_or_older [test_compiler_info {clang-[0-6]-*}]
+
with_test_prefix $name {
if {[is_copy_constructible $states]} {
set expected [expr {$ORIGINAL + $ADDED}]
@@ -378,6 +384,19 @@ proc test_for_class { prefix states cbvfun data_field length} {
if {$dtor == "explicit"} {
gdb_test "print tracer = 0" " = 0" "reset the tracer"
}
+
+ if {$cctor == "defaultedIn" || $dtor == "defaultedIn"} {
+ if {$is_gcc_6_or_older || $is_clang_6_or_older} {
+ setup_xfail "*-*-*"
+ } elseif {$is_clang} {
+ # If this is a pass-by-value case, Clang >= 7's
+ # DW_AT_calling_convention leads to the right decision.
+ # Otherwise, it is expected to fail.
+ if {"defaultedOut" in $states || "explicit" in $states} {
+ setup_xfail "*-*-*"
+ }
+ }
+ }
gdb_test "print ${cbvfun}<$name> (${name}_var)" " = $expected" \
"call '$cbvfun'"
gdb_test "print ${name}_var.${data_field}\[0\]" " = $ORIGINAL" \
@@ -389,10 +408,17 @@ proc test_for_class { prefix states cbvfun data_field length} {
"cbv argument should not change (item $last_index)"
}
if {$dtor == "explicit"} {
+ if {$cctor == "defaultedIn"
+ && ($is_gcc_6_or_older || $is_clang)} {
+ setup_xfail "*-*-*"
+ }
gdb_test "print tracer" " = $TRACE" \
"destructor should be called"
}
} else {
+ if {$cctor == "deleted" && ($is_gcc_6_or_older || $is_clang)} {
+ setup_xfail "*-*-*"
+ }
gdb_test "print ${cbvfun}<$name> (${name}_var)" \
".* cannot be evaluated .* '${name}' is not copy constructible" \
"calling '$cbvfun' should be refused"