* [PATCH] Fix -Wstring-compare testcase build failure
@ 2020-06-23 14:57 Gary Benson
2020-06-23 15:57 ` Pedro Alves
0 siblings, 1 reply; 5+ messages in thread
From: Gary Benson @ 2020-06-23 14:57 UTC (permalink / raw)
To: gdb-patches
Hi all,
Clang fails to compile the file gdb/testsuite/gdb.cp/try_catch.cc
with the following error:
warning: result of comparison against a string literal is
unspecified (use strncmp instead) [-Wstring-compare]
This patch replaces the string literal with a pointer, to avoid
the error.
Is it ok to commit?
Cheers,
Gary
--
gdb/testsuite/ChangeLog:
* gdb.cp/try_catch.cc: Replace string literal with a
pointer to avoid build failure with -Wstring-compare.
---
gdb/testsuite/ChangeLog | 5 +++++
gdb/testsuite/gdb.cp/try_catch.cc | 5 +++--
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/gdb/testsuite/gdb.cp/try_catch.cc b/gdb/testsuite/gdb.cp/try_catch.cc
index 4c4add2..b0c01ba 100644
--- a/gdb/testsuite/gdb.cp/try_catch.cc
+++ b/gdb/testsuite/gdb.cp/try_catch.cc
@@ -122,14 +122,15 @@ int main()
// 3 use standard library
using namespace std;
+ const char *throwme = "gdb.1";
try
{
if (j < 100)
- throw invalid_argument("gdb.1"); // marker 3-throw
+ throw invalid_argument(throwme); // marker 3-throw
}
catch (exception& obj)
{
- if (obj.what() != "gdb.1") // marker 3-catch
+ if (obj.what() != throwme) // marker 3-catch
test &= false;
}
return 0;
--
1.8.3.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Fix -Wstring-compare testcase build failure
2020-06-23 14:57 [PATCH] Fix -Wstring-compare testcase build failure Gary Benson
@ 2020-06-23 15:57 ` Pedro Alves
2020-06-26 13:05 ` [PATCH v2] " Gary Benson
0 siblings, 1 reply; 5+ messages in thread
From: Pedro Alves @ 2020-06-23 15:57 UTC (permalink / raw)
To: Gary Benson, gdb-patches
On 6/23/20 3:57 PM, Gary Benson via Gdb-patches wrote:
> Hi all,
>
> Clang fails to compile the file gdb/testsuite/gdb.cp/try_catch.cc
> with the following error:
> warning: result of comparison against a string literal is
> unspecified (use strncmp instead) [-Wstring-compare]
>
> This patch replaces the string literal with a pointer, to avoid
> the error.
>
> Is it ok to commit?
Hmm, no, I don't think so.
>
> // 3 use standard library
> using namespace std;
> + const char *throwme = "gdb.1";
> try
> {
> if (j < 100)
> - throw invalid_argument("gdb.1"); // marker 3-throw
> + throw invalid_argument(throwme); // marker 3-throw
> }
> catch (exception& obj)
> {
> - if (obj.what() != "gdb.1") // marker 3-catch
> + if (obj.what() != throwme) // marker 3-catch
> test &= false;
> }
> return 0;
invalid_argument stores a copy of the string, so with or
without your patch, that (obj.what() != "gdb.1") comparison
is returning false. Thus the "test &= false;" statement is
executing.
IOW, that Clang warning found a bug in the test program...
The fix should be to use strcmp instead.
And also, please add a market at the "return 0;" line,
let the program run to it, and then add a gdb_test checking
that "test" is still true at that point.
Thanks,
Pedro Alves
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2] Fix -Wstring-compare testcase build failure
2020-06-23 15:57 ` Pedro Alves
@ 2020-06-26 13:05 ` Gary Benson
2020-06-26 13:19 ` Pedro Alves
0 siblings, 1 reply; 5+ messages in thread
From: Gary Benson @ 2020-06-26 13:05 UTC (permalink / raw)
To: gdb-patches; +Cc: Pedro Alves
Pedro Alves wrote:
> On 6/23/20 3:57 PM, Gary Benson via Gdb-patches wrote:
> > Hi all,
> >
> > Clang fails to compile the file gdb/testsuite/gdb.cp/try_catch.cc
> > with the following error:
> > warning: result of comparison against a string literal is
> > unspecified (use strncmp instead) [-Wstring-compare]
> >
> > This patch replaces the string literal with a pointer, to avoid
> > the error.
> >
> > Is it ok to commit?
>
> Hmm, no, I don't think so.
[snip]
> invalid_argument stores a copy of the string, so with or
> without your patch, that (obj.what() != "gdb.1") comparison
> is returning false. Thus the "test &= false;" statement is
> executing.
Ah, I had not realized the string was copied, I think I thought
the compiler was complaining about something else.
> IOW, that Clang warning found a bug in the test program...
>
> The fix should be to use strcmp instead.
>
> And also, please add a market at the "return 0;" line,
> let the program run to it, and then add a gdb_test checking
> that "test" is still true at that point.
Ok. How about this?
--
Clang fails to compile the file gdb/testsuite/gdb.cp/try_catch.cc
with the following error:
warning: result of comparison against a string literal is
unspecified (use strncmp instead) [-Wstring-compare]
This commit fixes the error, replacing the pointer comparison with
a call to strcmp. This commit also adds a final check: the test
program is run to the final return statement, and the value of
"test" is checked to ensure it is still "true" at that point.
gdb/testsuite/ChangeLog:
* gdb.cp/try_catch.cc: Include string.h.
(main): Replace comparison against string literal with
strcmp, avoiding build failure with -Wstring-compare.
Add "marker test-complete".
* gdb.cp/try_catch.exp: Run the test to the above marker,
then verify that the value of "test" is still true.
---
gdb/testsuite/ChangeLog | 9 +++++++++
gdb/testsuite/gdb.cp/try_catch.cc | 5 +++--
gdb/testsuite/gdb.cp/try_catch.exp | 3 +++
3 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/gdb/testsuite/gdb.cp/try_catch.cc b/gdb/testsuite/gdb.cp/try_catch.cc
index 4c4add2..5f454f4 100644
--- a/gdb/testsuite/gdb.cp/try_catch.cc
+++ b/gdb/testsuite/gdb.cp/try_catch.cc
@@ -18,6 +18,7 @@
#include <exception>
#include <stdexcept>
#include <string>
+#include <string.h>
enum region { oriental, egyptian, greek, etruscan, roman };
@@ -129,8 +130,8 @@ int main()
}
catch (exception& obj)
{
- if (obj.what() != "gdb.1") // marker 3-catch
+ if (strcmp (obj.what(), "gdb.1") != 0) // marker 3-catch
test &= false;
}
- return 0;
+ return 0; // marker test-complete
}
diff --git a/gdb/testsuite/gdb.cp/try_catch.exp b/gdb/testsuite/gdb.cp/try_catch.exp
index fb53294..e4da885 100644
--- a/gdb/testsuite/gdb.cp/try_catch.exp
+++ b/gdb/testsuite/gdb.cp/try_catch.exp
@@ -63,5 +63,8 @@ gdb_continue_to_breakpoint "marker 3-throw"
gdb_breakpoint [gdb_get_line_number "marker 3-catch"]
gdb_continue_to_breakpoint "marker 3-catch"
+gdb_breakpoint [gdb_get_line_number "marker test-complete"]
+gdb_test "p test" "= true"
+
gdb_exit
return 0
--
1.8.3.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] Fix -Wstring-compare testcase build failure
2020-06-26 13:05 ` [PATCH v2] " Gary Benson
@ 2020-06-26 13:19 ` Pedro Alves
2020-06-26 13:54 ` Gary Benson
0 siblings, 1 reply; 5+ messages in thread
From: Pedro Alves @ 2020-06-26 13:19 UTC (permalink / raw)
To: Gary Benson, gdb-patches
On 6/26/20 2:05 PM, Gary Benson wrote:
> diff --git a/gdb/testsuite/gdb.cp/try_catch.exp b/gdb/testsuite/gdb.cp/try_catch.exp
> index fb53294..e4da885 100644
> --- a/gdb/testsuite/gdb.cp/try_catch.exp
> +++ b/gdb/testsuite/gdb.cp/try_catch.exp
> @@ -63,5 +63,8 @@ gdb_continue_to_breakpoint "marker 3-throw"
> gdb_breakpoint [gdb_get_line_number "marker 3-catch"]
> gdb_continue_to_breakpoint "marker 3-catch"
>
> +gdb_breakpoint [gdb_get_line_number "marker test-complete"]
> +gdb_test "p test" "= true"
> +
You need to continue the program to the breakpoint too.
I.e., you're missing a
gdb_continue_to_breakpoint "marker test-complete"
line.
OK with that change.
Thanks,
Pedro Alves
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] Fix -Wstring-compare testcase build failure
2020-06-26 13:19 ` Pedro Alves
@ 2020-06-26 13:54 ` Gary Benson
0 siblings, 0 replies; 5+ messages in thread
From: Gary Benson @ 2020-06-26 13:54 UTC (permalink / raw)
To: Pedro Alves; +Cc: gdb-patches
Pedro Alves wrote:
> On 6/26/20 2:05 PM, Gary Benson wrote:
>
> > diff --git a/gdb/testsuite/gdb.cp/try_catch.exp b/gdb/testsuite/gdb.cp/try_catch.exp
> > index fb53294..e4da885 100644
> > --- a/gdb/testsuite/gdb.cp/try_catch.exp
> > +++ b/gdb/testsuite/gdb.cp/try_catch.exp
> > @@ -63,5 +63,8 @@ gdb_continue_to_breakpoint "marker 3-throw"
> > gdb_breakpoint [gdb_get_line_number "marker 3-catch"]
> > gdb_continue_to_breakpoint "marker 3-catch"
> >
> > +gdb_breakpoint [gdb_get_line_number "marker test-complete"]
> > +gdb_test "p test" "= true"
> > +
>
> You need to continue the program to the breakpoint too.
> I.e., you're missing a
>
> gdb_continue_to_breakpoint "marker test-complete"
>
> line.
>
> OK with that change.
Fixed and pushed, thanks Pedro.
Cheers,
Gary
--
Gary Benson - he / him / his
Principal Software Engineer, Red Hat
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2020-06-26 13:54 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-23 14:57 [PATCH] Fix -Wstring-compare testcase build failure Gary Benson
2020-06-23 15:57 ` Pedro Alves
2020-06-26 13:05 ` [PATCH v2] " Gary Benson
2020-06-26 13:19 ` Pedro Alves
2020-06-26 13:54 ` 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).