Build gdb.opt/inline-*.exp tests at -O0, rely on __attribute__((always_inline))

A test recently added to gdb.opt/inline-cmds.exp fails for
arm-none-eabi targets because -O2 leads to instructions to be
reordered widely.

I guess it might have made sense years ago to enable optimization in
these tests, but I fail to see the need for that nowadays.

Using -O0 while relying on __attribute__((always_inline)), which is
already used in the tests [1] [2], avoids this sort of trouble, while
still exercising the inlining-related use cases that are the focus of
these tests.

I think that nowadays we can safely assume that all compilers we care
about support __attribute__((always_inline)) or similar.

[1] - Except one spot that missed it.

[2] - Note that the .exp files make sure the frames that should have
      been inlined are indeed inlined, with "info frame".

gdb/testsuite/ChangeLog:
2016-07-19  Pedro Alves  <palves@redhat.com>

	* gdb.opt/inline-break.exp: Remove optimize=-O2.
	* gdb.opt/inline-bt.exp: Likewise.
	* gdb.opt/inline-cmds.exp: Remove optimize=-O2 and add
	additional_flags=-Winline.
	* gdb.opt/inline-locals.exp: Likewise.
	* gdb.opt/inline-markers.c (ATTR): Define.
	(inlined_fn): Use it.
This commit is contained in:
Pedro Alves 2016-07-19 17:51:05 +01:00
parent a6ebf6169a
commit 1f960ced9a
6 changed files with 21 additions and 5 deletions

View File

@ -1,3 +1,13 @@
2016-07-19 Pedro Alves <palves@redhat.com>
* gdb.opt/inline-break.exp: Remove optimize=-O2.
* gdb.opt/inline-bt.exp: Likewise.
* gdb.opt/inline-cmds.exp: Remove optimize=-O2 and add
additional_flags=-Winline.
* gdb.opt/inline-locals.exp: Likewise.
* gdb.opt/inline-markers.c (ATTR): Define.
(inlined_fn): Use it.
2016-07-19 Yao Qi <yao.qi@linaro.org>
* gdb.gdb/selftest.exp: Remove checks on is_remote and isnative.

View File

@ -20,7 +20,7 @@
standard_testfile
if { [prepare_for_testing $testfile.exp $testfile $srcfile \
{debug optimize=-O2 additional_flags=-Winline}] } {
{debug additional_flags=-Winline}] } {
return -1
}

View File

@ -17,7 +17,7 @@ standard_testfile .c inline-markers.c
if {[prepare_for_testing $testfile.exp $testfile \
[list $srcfile $srcfile2] \
{debug optimize=-O2 additional_flags=-Winline}]} {
{debug additional_flags=-Winline}]} {
return -1
}

View File

@ -19,7 +19,7 @@ set MIFLAGS "-i=mi"
standard_testfile .c inline-markers.c
if {[prepare_for_testing $testfile.exp $testfile \
[list $srcfile $srcfile2] {debug optimize=-O2}]} {
[list $srcfile $srcfile2] {debug additional_flags=-Winline}]} {
return -1
}

View File

@ -16,7 +16,7 @@
standard_testfile .c inline-markers.c
if {[prepare_for_testing $testfile.exp $testfile \
[list $srcfile $srcfile2] {debug optimize=-O2}]} {
[list $srcfile $srcfile2] {debug additional_flags=-Winline}]} {
return -1
}

View File

@ -13,6 +13,12 @@
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 __GNUC__
# define ATTR __attribute__((always_inline))
#else
# define ATTR
#endif
extern int x, y;
extern volatile int z;
@ -26,7 +32,7 @@ void marker(void)
x += y - z; /* set breakpoint 2 here */
}
inline void inlined_fn(void)
inline ATTR void inlined_fn(void)
{
x += y + z;
}