public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [OB PATCH] Fix build errors in with clang in gdb.compile/compile-cplus.c
@ 2020-05-29 16:43 Gary Benson
  2020-05-29 21:12 ` Pedro Alves
  0 siblings, 1 reply; 6+ messages in thread
From: Gary Benson @ 2020-05-29 16:43 UTC (permalink / raw)
  To: gdb-patches

Clang fails to compile the file, with the following error:
  fatal error: 'iostream' file not found

This prevents the following testcase from executing:
  gdb.compile/compile-cplus.exp

The testcase sets additional_flags when building with GCC, which
this commit causes to also be set when building with clang.  This
makes the testcase fail to build with a different error:
  warning: treating 'c' input as 'c++' when in C++ mode, this behavior
  is deprecated [-Wdeprecated]
so this commit adds -Wno-deprecated in two places to sidestep this.
Note that, while allowing the testcase to build, this commit reveals
failures when the testsuite is built using clang.

gdb/testsuite/ChangeLog:

	* gdb.compile/compile-cplus.exp (additional_flags): Also
	set when building with clang.
	(additional_flags, srcfilesoptions): Pass -Wno-deprecated
	when building with clang.
---
 gdb/testsuite/ChangeLog                     |  7 +++++++
 gdb/testsuite/gdb.compile/compile-cplus.exp | 15 +++++++++++++--
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/gdb/testsuite/gdb.compile/compile-cplus.exp b/gdb/testsuite/gdb.compile/compile-cplus.exp
index cca5b20..85b2f20 100644
--- a/gdb/testsuite/gdb.compile/compile-cplus.exp
+++ b/gdb/testsuite/gdb.compile/compile-cplus.exp
@@ -19,11 +19,16 @@ standard_testfile .c compile-shlib.c compile-constvar.S compile-nodebug.c
 
 get_compiler_info
 set options {}
-if [test_compiler_info gcc*] {
+if { [test_compiler_info gcc*] || [test_compiler_info clang*] } {
     lappend options additional_flags=-g3
     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."
@@ -34,7 +39,13 @@ set srcfilesoptions [list ${srcfile} ${options}]
 if { $srcfile3 != "" } {
     lappend srcfilesoptions $srcfile3 ${options}
 }
-lappend srcfilesoptions $srcfile4 "nodebug c++"
+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
 }
-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [OB PATCH] Fix build errors in with clang in gdb.compile/compile-cplus.c
  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
  0 siblings, 1 reply; 6+ messages in thread
From: Pedro Alves @ 2020-05-29 21:12 UTC (permalink / raw)
  To: Gary Benson, gdb-patches

On 5/29/20 5:43 PM, Gary Benson via Gdb-patches wrote:
> Clang fails to compile the file, with the following error:
>   fatal error: 'iostream' file not found
> 
> This prevents the following testcase from executing:
>   gdb.compile/compile-cplus.exp
> 
> The testcase sets additional_flags when building with GCC, which
> this commit causes to also be set when building with clang.  This
> makes the testcase fail to build with a different error:
>   warning: treating 'c' input as 'c++' when in C++ mode, this behavior
>   is deprecated [-Wdeprecated]
> so this commit adds -Wno-deprecated in two places to sidestep this.
> Note that, while allowing the testcase to build, this commit reveals
> failures when the testsuite is built using clang.
> 
> gdb/testsuite/ChangeLog:
> 
> 	* gdb.compile/compile-cplus.exp (additional_flags): Also
> 	set when building with clang.
> 	(additional_flags, srcfilesoptions): Pass -Wno-deprecated
> 	when building with clang.
> ---
>  gdb/testsuite/ChangeLog                     |  7 +++++++
>  gdb/testsuite/gdb.compile/compile-cplus.exp | 15 +++++++++++++--
>  2 files changed, 20 insertions(+), 2 deletions(-)
> 
> diff --git a/gdb/testsuite/gdb.compile/compile-cplus.exp b/gdb/testsuite/gdb.compile/compile-cplus.exp
> index cca5b20..85b2f20 100644
> --- a/gdb/testsuite/gdb.compile/compile-cplus.exp
> +++ b/gdb/testsuite/gdb.compile/compile-cplus.exp
> @@ -19,11 +19,16 @@ standard_testfile .c compile-shlib.c compile-constvar.S compile-nodebug.c
>  
>  get_compiler_info
>  set options {}
> -if [test_compiler_info gcc*] {
> +if { [test_compiler_info gcc*] || [test_compiler_info clang*] } {
>      lappend options additional_flags=-g3
>      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
> +}

I think

 lappend options "additional_flags=-x c++"

in the previous "if" would be better.  Even better would be to tweak
gdb_compile or thereabouts to make the "c++" option automatically add
"-x c++" to the compiler options with clang.  That would handle
everywhere this could be an issue all at once.  WDYT?

BTW, it looks like a bug that appending the "c++" option is inside
the if, rather than outside.

Thanks,
Pedro Alves

>  
>  if { ![istarget x86_64-*-* ] || ![is_lp64_target] } {
>      verbose "Skipping x86_64 LOC_CONST test."
> @@ -34,7 +39,13 @@ set srcfilesoptions [list ${srcfile} ${options}]
>  if { $srcfile3 != "" } {
>      lappend srcfilesoptions $srcfile3 ${options}
>  }
> -lappend srcfilesoptions $srcfile4 "nodebug c++"
> +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
>  }
> 


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [OB PATCH] Fix build errors in with clang in gdb.compile/compile-cplus.c
  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
  0 siblings, 1 reply; 6+ messages in thread
From: Gary Benson @ 2020-06-19 13:49 UTC (permalink / raw)
  To: Pedro Alves; +Cc: gdb-patches

Pedro Alves wrote:
> On 5/29/20 5:43 PM, Gary Benson via Gdb-patches wrote:
> > Clang fails to compile the file, with the following error:
> >   fatal error: 'iostream' file not found
> > 
> > This prevents the following testcase from executing:
> >   gdb.compile/compile-cplus.exp
> > 
> > The testcase sets additional_flags when building with GCC, which
> > this commit causes to also be set when building with clang.  This
> > makes the testcase fail to build with a different error:
> >   warning: treating 'c' input as 'c++' when in C++ mode, this behavior
> >   is deprecated [-Wdeprecated]
> > so this commit adds -Wno-deprecated in two places to sidestep this.
> > Note that, while allowing the testcase to build, this commit reveals
> > failures when the testsuite is built using clang.
> > 
> > gdb/testsuite/ChangeLog:
> > 
> > 	* gdb.compile/compile-cplus.exp (additional_flags): Also
> > 	set when building with clang.
> > 	(additional_flags, srcfilesoptions): Pass -Wno-deprecated
> > 	when building with clang.
> > ---
> >  gdb/testsuite/ChangeLog                     |  7 +++++++
> >  gdb/testsuite/gdb.compile/compile-cplus.exp | 15 +++++++++++++--
> >  2 files changed, 20 insertions(+), 2 deletions(-)
> > 
> > diff --git a/gdb/testsuite/gdb.compile/compile-cplus.exp b/gdb/testsuite/gdb.compile/compile-cplus.exp
> > index cca5b20..85b2f20 100644
> > --- a/gdb/testsuite/gdb.compile/compile-cplus.exp
> > +++ b/gdb/testsuite/gdb.compile/compile-cplus.exp
> > @@ -19,11 +19,16 @@ standard_testfile .c compile-shlib.c compile-constvar.S compile-nodebug.c
> >  
> >  get_compiler_info
> >  set options {}
> > -if [test_compiler_info gcc*] {
> > +if { [test_compiler_info gcc*] || [test_compiler_info clang*] } {
> >      lappend options additional_flags=-g3
> >      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
> > +}
> 
> I think
> 
>  lappend options "additional_flags=-x c++"
> 
> in the previous "if" would be better.

[i'm replying to this out-of-order]

> Even better would be to tweak gdb_compile or thereabouts to make the
> "c++" option automatically add "-x c++" to the compiler options with
> clang.  That would handle everywhere this could be an issue all at
> once.  WDYT?

I disagree with adding global support for this, for these reasons:

1) It only affects this testcase.

2) This testcase is one big hack, afaict.  It's a copy of (one/some
   of?) the original C-language testcases, with some stuff at the
   start to force the C sources through the C++ compiler, and to force
   GDB to recognise the result as C++. Force force force.

3) Clang is warning that compiling C as C++ is deprecated.  Deprecated,
   as in, the support is there now, but don't count on it being there
   forever.  We should not add global support for testcases to do
   deprecated things.

In terms of fixing this locally:
> I think
> 
>  lappend options "additional_flags=-x c++"
> 
> in the previous "if" would be better.

It doesn't work, one of the sources is assembler.  I tried adding it
to the other sources individually, but I couldn't make that work
either,

a) There's some quoting issue, I had to do:
     lappend options "additional_flags=-x"
     lappend options "additional_flags=c++"
   (I'm assuming there's a better way, but I don't know it)

b) There's $srcfile3, $srcfile4, but I couldn't figure out how to
   apply the additional flags to the first srcfile.

> BTW, it looks like a bug that appending the "c++" option is inside
> the if, rather than outside.

Maybe. I don't know.  I doubt it's ever been run other than with GCC
as the testcase compiler, the testcase is testing GDB using GCC to
compile code for injection after all.

Let me know what to do with this testcase.  How important is it to
not have -Wno-deprecated in there?  I've probably spent close to
three hours on this issue now fwiw :(

Cheers,
Gary

-- 
Gary Benson - he / him / his
Principal Software Engineer, Red Hat


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH] W/ Clang, compile/link C++ test programs with "-x c++"
  2020-06-19 13:49   ` Gary Benson
@ 2020-06-19 15:42     ` Pedro Alves
  2020-06-24 22:30       ` Pedro Alves
  0 siblings, 1 reply; 6+ messages in thread
From: Pedro Alves @ 2020-06-19 15:42 UTC (permalink / raw)
  To: Gary Benson; +Cc: gdb-patches

On 6/19/20 2:49 PM, Gary Benson via Gdb-patches wrote:
> Pedro Alves wrote:
>> On 5/29/20 5:43 PM, Gary Benson via Gdb-patches wrote:
>>> Clang fails to compile the file, with the following error:
>>>   fatal error: 'iostream' file not found
>>>
>>> This prevents the following testcase from executing:
>>>   gdb.compile/compile-cplus.exp
>>>
>>> The testcase sets additional_flags when building with GCC, which
>>> this commit causes to also be set when building with clang.  This
>>> makes the testcase fail to build with a different error:
>>>   warning: treating 'c' input as 'c++' when in C++ mode, this behavior
>>>   is deprecated [-Wdeprecated]
>>> so this commit adds -Wno-deprecated in two places to sidestep this.
>>> Note that, while allowing the testcase to build, this commit reveals
>>> failures when the testsuite is built using clang.
>>>
>>> gdb/testsuite/ChangeLog:
>>>
>>> 	* gdb.compile/compile-cplus.exp (additional_flags): Also
>>> 	set when building with clang.
>>> 	(additional_flags, srcfilesoptions): Pass -Wno-deprecated
>>> 	when building with clang.
>>> ---
>>>  gdb/testsuite/ChangeLog                     |  7 +++++++
>>>  gdb/testsuite/gdb.compile/compile-cplus.exp | 15 +++++++++++++--
>>>  2 files changed, 20 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/gdb/testsuite/gdb.compile/compile-cplus.exp b/gdb/testsuite/gdb.compile/compile-cplus.exp
>>> index cca5b20..85b2f20 100644
>>> --- a/gdb/testsuite/gdb.compile/compile-cplus.exp
>>> +++ b/gdb/testsuite/gdb.compile/compile-cplus.exp
>>> @@ -19,11 +19,16 @@ standard_testfile .c compile-shlib.c compile-constvar.S compile-nodebug.c
>>>  
>>>  get_compiler_info
>>>  set options {}
>>> -if [test_compiler_info gcc*] {
>>> +if { [test_compiler_info gcc*] || [test_compiler_info clang*] } {
>>>      lappend options additional_flags=-g3
>>>      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
>>> +}
>>
>> I think
>>
>>  lappend options "additional_flags=-x c++"
>>
>> in the previous "if" would be better.
> 
> [i'm replying to this out-of-order]
> 
>> Even better would be to tweak gdb_compile or thereabouts to make the
>> "c++" option automatically add "-x c++" to the compiler options with
>> clang.  That would handle everywhere this could be an issue all at
>> once.  WDYT?
> 
> I disagree with adding global support for this, for these reasons:
> 
> 1) It only affects this testcase.

That's not true.  For example:

 $ grep -rn "foreach" |grep "c+"
 gdb.base/whatis-ptype-typedefs.exp:304:foreach_with_prefix lang {"c" "c++"} {
 gdb.cp/wide_char_types.exp:178:    foreach_with_prefix lang {"c" "c++03" "c++11"} {
 gdb.cp/local-static.exp:271:foreach lang {"c" "c++"} {

And running gdb.base/whatis-ptype-typedefs.exp shows:

 $ make check TESTS="gdb.base/whatis-ptype-typedefs.exp" RUNTESTFLAGS="CC_FOR_TARGET=clang CXX_FOR_TARGET=clang++" 
 ...
 Running /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.base/whatis-ptype-typedefs.exp ...
 gdb compile failed, clang-5.0: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated [-Wdeprecated]

                 === gdb Summary ===

 # of expected passes            2383
 # of untested testcases         1


> 
> 2) This testcase is one big hack, afaict.  It's a copy of (one/some
>    of?) the original C-language testcases, with some stuff at the
>    start to force the C sources through the C++ compiler, and to force
>    GDB to recognise the result as C++. Force force force.

Well, it's just a filename.  If it compiles with a C++ compiler, then
it's valid C++ input, regardless of the filename.

> 
> 3) Clang is warning that compiling C as C++ is deprecated.  Deprecated,
>    as in, the support is there now, but don't count on it being there
>    forever.  We should not add global support for testcases to do
>    deprecated things.

They probably want to get to a point where a single driver handles all
input sources, so if you compile with either:

  "clang++ foo.c"
  "random-driver-name foo.c"

the compiler treats the input a C.  Maybe they end up doing that,
but do you honestly see them removing support for the _explicit_
-x option?  That would be quite silly, IMNSHO.  It would
break the GDB build too, since we build GDB with that option, given
our sources are still named '.c'.

> 
> In terms of fixing this locally:
>> I think
>>
>>  lappend options "additional_flags=-x c++"
>>
>> in the previous "if" would be better.
> 
> It doesn't work, one of the sources is assembler.  I tried adding it
> to the other sources individually, but I couldn't make that work
> either,
> 

We just need to NOT pass "c++" and all the other related options when
building that file.

> a) There's some quoting issue, I had to do:
>      lappend options "additional_flags=-x"
>      lappend options "additional_flags=c++"
>    (I'm assuming there's a better way, but I don't know it)

I was surprised by this too.  Figured out that escaping the space works.

> 
> b) There's $srcfile3, $srcfile4, but I couldn't figure out how to
>    apply the additional flags to the first srcfile.

Not sure what you mean here -- the first srcfile is $srcfile, so its
options are in this line:

 set srcfilesoptions [list ${srcfile} ${options}]

The second source file is $srcfile2, and so on.

> 
>> BTW, it looks like a bug that appending the "c++" option is inside
>> the if, rather than outside.
> 
> Maybe. I don't know.  I doubt it's ever been run other than with GCC
> as the testcase compiler, the testcase is testing GDB using GCC to
> compile code for injection after all.
> 
> Let me know what to do with this testcase.  How important is it to
> not have -Wno-deprecated in there?  I've probably spent close to
> three hours on this issue now fwiw :(
It's not that -Wno-deprecated is very harmful (though it could hide
other deprecated things), it's that we've already told gdb_compile to
compile in C++ mode with the "c++" option, so it looks like a bug that
we need to pass more options to actually mean it.  There's a pattern
here that we can address in one single central place and forget about it.

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.

From 4f5629d25a305a93b26c3a7ecc001bf7c0fae9ae Mon Sep 17 00:00:00 2001
From: Pedro Alves <palves@redhat.com>
Date: Fri, 19 Jun 2020 15:43:53 +0100
Subject: [PATCH] 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.  For example, gdb.base/whatis-ptype-typedefs.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 is compiling an
assembly file with the "c++" option, which would now fail to compile,
with the C++ compiler not grokking the assemly, of course.  We just
need to not pass "c++" and all the other related C++ options when
building that assembly file.

gdb/testsuite/ChangeLog:
yyyy-mm-dd  Pedro Alves  <palves@redhat.com>

	* 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/gdb.compile/compile-cplus.exp | 12 +-----------
 gdb/testsuite/lib/gdb.exp                   |  8 ++++++++
 2 files changed, 9 insertions(+), 11 deletions(-)

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 480af7052f7..d1ad8ba6f3f 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -3859,6 +3859,14 @@ proc gdb_compile {source dest type options} {
 	lappend new_options "additional_flags=-J${mod_path}"
     }
 
+    if { [lsearch -exact $options getting_compiler_info] == -1
+	 && [lsearch -exact $options c++] != -1
+	 && [test_compiler_info clang*]} {
+	# Treating .c input files as C++ is deprecated in Clang, so
+	# explicitly force C++ language.
+	lappend new_options additional_flags=-x\ c++
+    }
+
     set shlib_found 0
     set shlib_load 0
     set getting_compiler_info 0

base-commit: a8a566853a0fc7f57159e55436ff6f395e499568
-- 
2.14.5


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] W/ Clang, compile/link C++ test programs with "-x c++"
  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
  2020-07-02  9:58         ` Gary Benson
  0 siblings, 1 reply; 6+ messages in thread
From: Pedro Alves @ 2020-06-24 22:30 UTC (permalink / raw)
  To: Gary Benson; +Cc: gdb-patches

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 \


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] W/ Clang, compile/link C++ test programs with "-x c++"
  2020-06-24 22:30       ` Pedro Alves
@ 2020-07-02  9:58         ` Gary Benson
  0 siblings, 0 replies; 6+ messages in thread
From: Gary Benson @ 2020-07-02  9:58 UTC (permalink / raw)
  To: Pedro Alves; +Cc: gdb-patches

Pedro Alves wrote:
> 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.

Thanks Pedro, I ran the full testsuite with this last week and it's
working well.

Cheers,
Gary

-- 
Gary Benson - he / him / his
Principal Software Engineer, Red Hat


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-07-02  9:58 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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
2020-07-02  9:58         ` Gary Benson

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).