From 221db974e653659edb280787af1b3efdd1615083 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Wed, 24 Jun 2020 23:18:19 +0100 Subject: W/ Clang, compile/link C++ test programs with "-x c++" Some testcases want to compile .c files with a C++ compiler. So they pass the "c++" option to gdb_compile. That works fine with GCC, but with Clang, it results in: gdb compile failed, clang-5.0: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated [-Wdeprecated] and the testcase is skipped with UNTESTED. A previous patch fixed a case like that in gdb.compile/compile-cplus.exp, by adding -Wno-deprecated to the build options. However, there are other testcases that use the same pattern, and all fail for the same reason. For example: gdb.base/info-types-c++.exp gdb.base/max-depth-c++.exp gdb.base/msym-lang.exp gdb.base/whatis-ptype-typedefs.exp gdb.btrace/rn-dl-bind.exp Fix this in a central place, within gdb_compile, by passing "-x c++" to the compiler driver when we're compiling/linking C++. This revealed that gdb.compile/compile-cplus.exp and gdb.arch/amd64-entry-value-paramref.exp tests are compiling an assembly file with the "c++" option, which would now fail to compile, with the C++ compiler not grokking the assembly, of course. We just need to not pass "c++" and all the other related C++ options when compiling an assembly file. gdb/testsuite/ChangeLog: 2020-06-24 Pedro Alves * gdb.arch/amd64-entry-value-paramref.exp: Use prepare_for_testing_full and don't pass "c++" for the .S file build spec. * gdb.compile/compile-cplus.exp: Don't compile $srcfile3 with $options, since it's an assembly file. Remove -Wno-deprecated. * lib/gdb.exp (gdb_compile): Pass "-x c++" explicitly when compiling C++ programs. --- gdb/testsuite/lib/gdb.exp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'gdb/testsuite/lib/gdb.exp') diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index 6b4f71b..8dbfa7e 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -3868,6 +3868,14 @@ proc gdb_compile {source dest type options} { lappend new_options "additional_flags=-Wno-unknown-warning-option" } + # Treating .c input files as C++ is deprecated in Clang, so + # explicitly force C++ language. + if { [lsearch -exact $options getting_compiler_info] == -1 + && [lsearch -exact $options c++] != -1 + && [test_compiler_info "clang-*"]} { + lappend new_options additional_flags=-x\ c++ + } + # Place (and look for) Fortran `.mod` files in the output # directory for this specific test. if {[lsearch -exact $options f77] != -1 \ -- cgit v1.1