binutils-gdb/gdb/testsuite/gdb.python/py-symbol.c
Gary Benson 71e1b6b0ac Fix testcases with required but unreferenced functions and variables
A number of testcases define variables and/or functions which are
referenced by GDB during the test, but which are not referenced from
within the test executable.  Clang correctly recognizes that these
variables and functions are unused, and optimizes them out, causing
the testcases in question to fail.  This commit adds __attribute__
((used)) in various places to prevent this.

gdb/testsuite/ChangeLog:

	* gdb.base/msym-bp.c (foo): Add __attribute__ ((used)).
	* gdb.base/msym-bp-2.c (foo): Likewise.
	* gdb.base/msym-lang.c (foo): Likewise.
	* gdb.base/msym-lang-main.c (foo): Likewise.
	* gdb.base/symtab-search-order-1.c (static_global): Likewise.
	* gdb.guile/scm-pretty-print.c (eval_func): Likewise.
	* gdb.mi/mi-sym-info-1.c (global_f1): Likewise.
	* gdb.mi/mi-sym-info-2.c (global_f1, var1, var2): Likewise.
	* gdb.multi/watchpoint-multi-exit.c (globalvar): Likewise.
	* gdb.python/py-as-string.c (enum_valid, enum_invalid): Likewise.
	* gdb.python/py-objfile.c (static_var): Likewise.
	* gdb.python/py-symbol.c (rr): Likewise.
	* gdb.python/py-symbol-2.c (anon, rr): Likewise.
	* gdb.mi/mi-sym-info.exp (lineno1, lineno2): Updated.
2020-10-12 10:35:23 +01:00

83 lines
1.6 KiB
C

/* This testcase is part of GDB, the GNU debugger.
Copyright 2010-2020 Free Software Foundation, Inc.
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/>. */
#ifdef __cplusplus
class SimpleClass
{
private:
int i;
public:
void seti (int arg)
{
i = arg;
}
int valueofi (void)
{
return i; /* Break in class. */
}
};
namespace {
int __attribute__ ((used)) anon = 10;
};
#endif
#ifdef USE_TWO_FILES
extern void function_in_other_file (void);
#endif
int qq = 72; /* line of qq */
static int __attribute__ ((used)) rr = 42; /* line of rr */
int func (int arg)
{
int i = 2;
i = i * arg; /* Block break here. */
return arg;
}
struct simple_struct
{
int a;
};
int main (int argc, char *argv[])
{
#ifdef __cplusplus
SimpleClass sclass;
#endif
int a = 0;
int result;
struct simple_struct ss = { 10 };
enum tag {one, two, three};
enum tag t = one;
result = func (42);
#ifdef __cplusplus
sclass.seti (42);
sclass.valueofi ();
#endif
#ifdef USE_TWO_FILES
function_in_other_file ();
#endif
return 0; /* Break at end. */
}