diff options
-rw-r--r-- | gdb/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/testsuite/lib/gdb.exp | 17 |
2 files changed, 20 insertions, 3 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index be14e5a..330a5eb 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,11 @@ 2020-11-02 Gary Benson <gbenson@redhat.com> + * lib/gdb.exp (gdb_compile): Inhibit passing "-x c++" + for .c files compiled as C++ with Clang if any shared + libraries are specified. + +2020-11-02 Gary Benson <gbenson@redhat.com> + * lib/attributes.h: New header. * gdb.base/backtrace.c: Include the above. Replace __attribute__(noclone)) with ATTRIBUTE_NOCLONE. diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index 003bd30..6c98ae0 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -3960,9 +3960,20 @@ proc gdb_compile {source dest type options} { # explicitly force C++ language. if { [lsearch -exact $options getting_compiler_info] == -1 && [lsearch -exact $options c++] != -1 - && [string match *.c $source] != 0 - && [test_compiler_info "clang-*"] } { - lappend new_options early_flags=-x\ c++ + && [string match *.c $source] != 0 } { + + # gdb_compile cannot handle this combination of options, the + # result is a command like "clang -x c++ foo.c bar.so -o baz" + # which tells Clang to treat bar.so as C++. The solution is + # to call gdb_compile twice--once to compile, once to link-- + # either directly, or via build_executable_from_specs. + if { [lsearch $options shlib=*] != -1 } { + error "incompatible gdb_compile options" + } + + if {[test_compiler_info "clang-*"]} { + lappend new_options early_flags=-x\ c++ + } } # Place (and look for) Fortran `.mod` files in the output |