diff --git a/gdb/testsuite/gdb.base/ptype-offsets.cc b/gdb/testsuite/gdb.base/ptype-offsets.cc index dc21e34752f..7678fc6a666 100644 --- a/gdb/testsuite/gdb.base/ptype-offsets.cc +++ b/gdb/testsuite/gdb.base/ptype-offsets.cc @@ -185,6 +185,9 @@ struct static_member int abc; }; +/* Work around PR gcc/101452. */ +static_member static_member::Empty; + struct empty_member { struct { } empty; diff --git a/gdb/testsuite/gdb.cp/m-static.exp b/gdb/testsuite/gdb.cp/m-static.exp index 8260ca377f5..15932038487 100644 --- a/gdb/testsuite/gdb.cp/m-static.exp +++ b/gdb/testsuite/gdb.cp/m-static.exp @@ -31,8 +31,14 @@ if [get_compiler_info] { return -1 } +set flags [list debug c++] +if { [test_compiler_info gcc-*] && [gcc_major_version] >= 10 } { + # Work around PR gcc/101452. + lappend flags additional_flags=-fno-eliminate-unused-debug-types +} + if {[prepare_for_testing "failed to prepare" $testfile \ - [list $srcfile $srcfile2] {debug c++}]} { + [list $srcfile $srcfile2] $flags]} { return -1 } diff --git a/gdb/testsuite/gdb.cp/pr-574.exp b/gdb/testsuite/gdb.cp/pr-574.exp index dab52fd428c..da596f120f6 100644 --- a/gdb/testsuite/gdb.cp/pr-574.exp +++ b/gdb/testsuite/gdb.cp/pr-574.exp @@ -32,7 +32,13 @@ if [get_compiler_info "c++"] { return -1 } -if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} { +set flags [list debug c++] +if { [test_compiler_info gcc-*] && [gcc_major_version] >= 10 } { + # Work around PR gcc/101452. + lappend flags additional_flags=-fno-eliminate-unused-debug-types +} + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile $flags]} { return -1 } diff --git a/gdb/testsuite/gdb.cp/pr9167.exp b/gdb/testsuite/gdb.cp/pr9167.exp index 34508f70e6c..d88c75d8a12 100644 --- a/gdb/testsuite/gdb.cp/pr9167.exp +++ b/gdb/testsuite/gdb.cp/pr9167.exp @@ -15,7 +15,13 @@ standard_testfile .cc -if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} { +set flags [list debug c++] +if { [test_compiler_info gcc-*] && [gcc_major_version] >= 10 } { + # Work around PR gcc/101452. + lappend flags additional_flags=-fno-eliminate-unused-debug-types +} + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile $flags]} { return -1 } diff --git a/gdb/testsuite/gdb.cp/templates.exp b/gdb/testsuite/gdb.cp/templates.exp index 4d589426c28..8b905e4254f 100644 --- a/gdb/testsuite/gdb.cp/templates.exp +++ b/gdb/testsuite/gdb.cp/templates.exp @@ -27,7 +27,13 @@ if [get_compiler_info "c++"] { return -1 } -if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} { +set flags [list debug c++] +if { [test_compiler_info gcc-*] && [gcc_major_version] >= 10 } { + # Work around PR gcc/101452. + lappend flags additional_flags=-DGCC_BUG +} + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile $flags]} { return -1 } diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index e79e0622f9d..16c46647101 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -3998,6 +3998,27 @@ proc test_compiler_info { {compiler ""} } { return [string match $compiler $compiler_info] } +# Return the gcc major version, or -1. +# For gcc 4.8.5, the major version is 4.8. +# For gcc 7.5.0, the major version 7. + +proc gcc_major_version { } { + global compiler_info + global decimal + if { ![test_compiler_info "gcc-*"] } { + return -1 + } + set res [regexp gcc-($decimal)-($decimal)- $compiler_info \ + dummy_var major minor] + if { $res != 1 } { + return -1 + } + if { $major >= 5} { + return $major + } + return $major.$minor +} + proc current_target_name { } { global target_info if [info exists target_info(target,name)] {