From: Pedro Alves <palves@redhat.com>
To: Gary Benson <gbenson@redhat.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH] W/ Clang, compile/link C++ test programs with "-x c++"
Date: Wed, 24 Jun 2020 23:30:55 +0100 [thread overview]
Message-ID: <e0f35a9f-496e-e5c7-9cc5-88423366d88f@redhat.com> (raw)
In-Reply-To: <50b54268-e8aa-9ad6-1812-ec4647c1e3f3@redhat.com>
On 6/19/20 4:42 PM, Pedro Alves via Gdb-patches wrote:
> The patch below works for me with gdb.compile/compile-cplus.exp, and
> also fixes gdb.base/whatis-ptype-typedefs.exp too at least. I've not run
> the whole testsuite.
I've run the whole testsuite now, and only gdb.arch/amd64-entry-value-paramref.exp
had a similar issue with compiling an .S file as C++. Fixed in the version
below, which I've now pushed.
This makes these testcases compile and start running, at least:
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
From: Pedro Alves <palves@redhat.com>
Date: 2020-06-24 23:18:19 +0100
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 <palves@redhat.com>
* 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/ChangeLog | 10 ++++++++++
.../gdb.arch/amd64-entry-value-paramref.exp | 3 ++-
gdb/testsuite/gdb.compile/compile-cplus.exp | 12 +-----------
gdb/testsuite/lib/gdb.exp | 8 ++++++++
4 files changed, 21 insertions(+), 12 deletions(-)
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 6f4d99d3902..1b77459bce3 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,13 @@
+2020-06-24 Pedro Alves <palves@redhat.com>
+
+ * 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.
+
2020-06-24 Pedro Alves <palves@redhat.com>
* lib/gdb.exp (gdb_compile): Update intro comment. If C/C++ with
diff --git a/gdb/testsuite/gdb.arch/amd64-entry-value-paramref.exp b/gdb/testsuite/gdb.arch/amd64-entry-value-paramref.exp
index be60e2554d7..cbb69f46b81 100644
--- a/gdb/testsuite/gdb.arch/amd64-entry-value-paramref.exp
+++ b/gdb/testsuite/gdb.arch/amd64-entry-value-paramref.exp
@@ -20,7 +20,8 @@ if { ![istarget x86_64-*-* ] || ![is_lp64_target] } {
return
}
-if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} "c++"] } {
+if { [prepare_for_testing_full "failed to prepare" \
+ [list $testfile "c++" $srcfile {}]] } {
return -1
}
diff --git a/gdb/testsuite/gdb.compile/compile-cplus.exp b/gdb/testsuite/gdb.compile/compile-cplus.exp
index 85b2f20a8fa..f794e5a1439 100644
--- a/gdb/testsuite/gdb.compile/compile-cplus.exp
+++ b/gdb/testsuite/gdb.compile/compile-cplus.exp
@@ -24,11 +24,6 @@ if { [test_compiler_info gcc*] || [test_compiler_info clang*] } {
lappend options additional_flags=-std=gnu++11
lappend options c++
}
-if [test_compiler_info clang*] {
- # Treating C input as C++ is deprecated in Clang, so
- # the build will fail without disabling -Wdeprecated.
- lappend options additional_flags=-Wno-deprecated
-}
if { ![istarget x86_64-*-* ] || ![is_lp64_target] } {
verbose "Skipping x86_64 LOC_CONST test."
@@ -37,14 +32,9 @@ if { ![istarget x86_64-*-* ] || ![is_lp64_target] } {
set srcfilesoptions [list ${srcfile} ${options}]
if { $srcfile3 != "" } {
- lappend srcfilesoptions $srcfile3 ${options}
+ lappend srcfilesoptions $srcfile3 {}
}
set srcfile4options "nodebug c++"
-if [test_compiler_info clang*] {
- # Treating C input as C++ is deprecated in Clang, so
- # the build will fail without disabling -Wdeprecated.
- set srcfile4options "$srcfile4options additional_flags=-Wno-deprecated"
-}
lappend srcfilesoptions $srcfile4 $srcfile4options
if { [eval build_executable_from_specs ${testfile}.exp $testfile {$options} ${srcfilesoptions}] } {
return -1
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 6b4f71be588..8dbfa7e7a94 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 \
next prev parent reply other threads:[~2020-06-24 22:31 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-29 16:43 [OB PATCH] Fix build errors in with clang in gdb.compile/compile-cplus.c Gary Benson
2020-05-29 21:12 ` Pedro Alves
2020-06-19 13:49 ` Gary Benson
2020-06-19 15:42 ` [PATCH] W/ Clang, compile/link C++ test programs with "-x c++" Pedro Alves
2020-06-24 22:30 ` Pedro Alves [this message]
2020-07-02 9:58 ` Gary Benson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e0f35a9f-496e-e5c7-9cc5-88423366d88f@redhat.com \
--to=palves@redhat.com \
--cc=gbenson@redhat.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).