Detect and report incompatible gdb_compile options

In commits 221db974e653659edb280787af1b3efdd1615083 and
68d654afdfcff840ebb3ae432ed72dca0521d670, these patches:

    2020-06-24  Pedro Alves  <palves@redhat.com>

	* lib/gdb.exp (gdb_compile): Pass "-x c++" explicitly when
	compiling C++ programs.

    2020-09-25  Gary Benson <gbenson@redhat.com>

	* lib/gdb.exp (gdb_compile): Pass "-x c++" earlier, and only
	for .c files.

attempted to fix problems with testcases that compile .c files
using the C++ compiler.  These patches cause gdb_compile to add
"-x c++" to the compiler options when using Clang.  This fix does
not work for gdb.base/print-file-var.exp, however, which attempts
to compile a .c input file to an executable linked with shared
libraries: the resulting command caused the compiler to attempt
to parse the .so files as C++.  This commit causes gdb_compile
to reject this combination of options.

gdb/testsuite/ChangeLog:

	* lib/gdb.exp (gdb_compile): Inhibit passing "-x c++"
	for .c files compiled as C++ with Clang if any shared
	libraries are specified.
This commit is contained in:
Gary Benson
2020-11-02 14:19:29 +00:00
parent 7ea44a51fa
commit 6539a36d0e
2 changed files with 20 additions and 3 deletions

View File

@ -1,3 +1,9 @@
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> 2020-11-02 Gary Benson <gbenson@redhat.com>
* lib/attributes.h: New header. * lib/attributes.h: New header.

View File

@ -3960,9 +3960,20 @@ proc gdb_compile {source dest type options} {
# explicitly force C++ language. # explicitly force C++ language.
if { [lsearch -exact $options getting_compiler_info] == -1 if { [lsearch -exact $options getting_compiler_info] == -1
&& [lsearch -exact $options c++] != -1 && [lsearch -exact $options c++] != -1
&& [string match *.c $source] != 0 && [string match *.c $source] != 0 } {
&& [test_compiler_info "clang-*"] } {
lappend new_options early_flags=-x\ c++ # 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 # Place (and look for) Fortran `.mod` files in the output