mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-26 05:47:26 +08:00
Fix compilation of .c files as C++ when using Clang
In commit 221db974e653659edb280787af1b3efdd1615083, this patch: 2020-06-24 Pedro Alves <palves@redhat.com> * lib/gdb.exp (gdb_compile): Pass "-x c++" explicitly when compiling C++ programs. attempted to fix problems with testcases that compile .c files with the C++ compiler. They pass the "c++" option to gdb_compile, resulting in the following error when using Clang: gdb compile failed, clang-10: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated [-Wdeprecated] This fix did not work for gdb.base/infcall-nested-structs-c++.exp, however: the "-x c++" appeared in the compiler's commandline after the .c file, so the option was not enabled for that file. The previous files fixed all used build_executable_from_specs, which compiles and links in separate steps, using gdb_compile: the compile step passes $type=object to gdb_compile, while the link step passes $type=executable. gdb.base/infcall-nested-structs-c++.exp uses gdb_compile directly instead, and it passes $type=executable to compile and link all in one step. Pedro found that DejaGnu's default_target_compile adds the sources at the end when $type=object, but at the beginning when $type=executable: # This is obscure: we put SOURCES at the end when building an # object, because otherwise, in some situations, libtool will # become confused about the name of the actual source file. if {$type == "object"} { set opts "$add_flags $sources" } else { set opts "$sources $add_flags" } This commit moves the "-x c++" earlier in the compiler's commandline. Unfortunately this then broke the testcase that required the original fix, gdb.compile/compile-cplus.exp: the "-x c++" was being parsed for the linker pass, causing the compiler to attempt to parse the .o files as C++. This commit makes passing "-x c++" conditional on the source being a .c file. gdb/testsuite/ChangeLog: * lib/gdb.exp (gdb_compile): Pass "-x c++" earlier, and only for .c files.
This commit is contained in:
@ -1,3 +1,8 @@
|
||||
2020-09-25 Gary Benson <gbenson@redhat.com>
|
||||
|
||||
* lib/gdb.exp (gdb_compile): Pass "-x c++" earlier, and only
|
||||
for .c files.
|
||||
|
||||
2020-09-24 Tom Tromey <tromey@adacore.com>
|
||||
|
||||
PR tui/26638:
|
||||
|
@ -3944,8 +3944,9 @@ proc gdb_compile {source dest type options} {
|
||||
# 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++
|
||||
&& [string match *.c $source] != 0
|
||||
&& [test_compiler_info "clang-*"] } {
|
||||
lappend new_options early_flags=-x\ c++
|
||||
}
|
||||
|
||||
# Place (and look for) Fortran `.mod` files in the output
|
||||
|
Reference in New Issue
Block a user