From 1f960ced9a3e4aa0823dcc234d9de49aebaee055 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Tue, 19 Jul 2016 17:51:05 +0100 Subject: [PATCH] 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 * 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. --- gdb/testsuite/ChangeLog | 10 ++++++++++ gdb/testsuite/gdb.opt/inline-break.exp | 2 +- gdb/testsuite/gdb.opt/inline-bt.exp | 2 +- gdb/testsuite/gdb.opt/inline-cmds.exp | 2 +- gdb/testsuite/gdb.opt/inline-locals.exp | 2 +- gdb/testsuite/gdb.opt/inline-markers.c | 8 +++++++- 6 files changed, 21 insertions(+), 5 deletions(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index c92264f..fb1f3b1 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2016-07-19 Pedro Alves + + * 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 * gdb.gdb/selftest.exp: Remove checks on is_remote and isnative. diff --git a/gdb/testsuite/gdb.opt/inline-break.exp b/gdb/testsuite/gdb.opt/inline-break.exp index b2aa22e..ac56b04 100644 --- a/gdb/testsuite/gdb.opt/inline-break.exp +++ b/gdb/testsuite/gdb.opt/inline-break.exp @@ -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 } diff --git a/gdb/testsuite/gdb.opt/inline-bt.exp b/gdb/testsuite/gdb.opt/inline-bt.exp index 63d76e2..13c6993 100644 --- a/gdb/testsuite/gdb.opt/inline-bt.exp +++ b/gdb/testsuite/gdb.opt/inline-bt.exp @@ -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 } diff --git a/gdb/testsuite/gdb.opt/inline-cmds.exp b/gdb/testsuite/gdb.opt/inline-cmds.exp index 684f4dd..6c84848 100644 --- a/gdb/testsuite/gdb.opt/inline-cmds.exp +++ b/gdb/testsuite/gdb.opt/inline-cmds.exp @@ -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 } diff --git a/gdb/testsuite/gdb.opt/inline-locals.exp b/gdb/testsuite/gdb.opt/inline-locals.exp index df2253a..36f7ed2 100644 --- a/gdb/testsuite/gdb.opt/inline-locals.exp +++ b/gdb/testsuite/gdb.opt/inline-locals.exp @@ -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 } diff --git a/gdb/testsuite/gdb.opt/inline-markers.c b/gdb/testsuite/gdb.opt/inline-markers.c index cf92e79..41f8a38 100644 --- a/gdb/testsuite/gdb.opt/inline-markers.c +++ b/gdb/testsuite/gdb.opt/inline-markers.c @@ -13,6 +13,12 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +#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; } -- 2.7.4