forked from Imagelibrary/binutils-gdb
The test gdb.base/bp-cond-failure is implicitly expecting that the function foo will be inlined twice and gdb will be able to find 2 locations to place a breakpoint. When clang is used, gdb only finds one location which causes the test to fail. Since the test is not worried about handling breakpoints on inlined functions, but rather on the format of the message on a breakpoint condition fail, this seems like a false fail report. This commit reworks the test to be in c++, and uses function overloading to ensure that 2 locations will always be found. Empirical testing showed that, for clang, we will land on location 2 with the currest exp commands, no matter the order of the functions declared, whereas for gcc it depends on the order that functions were declared, so they are ordered to always land on the second location, this way we are able to hardcode it and check for it. Reviewed-by: Keith Seitz <keiths@redhat.com> Approved-By: Tom Tromey <tom@tromey.com>
47 lines
1.0 KiB
C
47 lines
1.0 KiB
C
/* Copyright 2022-2024 Free Software Foundation, Inc.
|
|
|
|
This file is part of GDB.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
static int
|
|
foo (int x)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int
|
|
foo (char c)
|
|
{
|
|
return 0; /* Multi-location breakpoint here. */
|
|
}
|
|
|
|
static int __attribute__((noinline))
|
|
bar ()
|
|
{
|
|
int res = foo ('1'); /* Single-location breakpoint here. */
|
|
|
|
return res;
|
|
}
|
|
|
|
int
|
|
main ()
|
|
{
|
|
int res = bar ();
|
|
|
|
res = foo (1);
|
|
|
|
return res;
|
|
}
|