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:
parent
a6ebf6169a
commit
1f960ced9a
|
@ -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>
|
2016-07-19 Yao Qi <yao.qi@linaro.org>
|
||||||
|
|
||||||
* gdb.gdb/selftest.exp: Remove checks on is_remote and isnative.
|
* gdb.gdb/selftest.exp: Remove checks on is_remote and isnative.
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
standard_testfile
|
standard_testfile
|
||||||
|
|
||||||
if { [prepare_for_testing $testfile.exp $testfile $srcfile \
|
if { [prepare_for_testing $testfile.exp $testfile $srcfile \
|
||||||
{debug optimize=-O2 additional_flags=-Winline}] } {
|
{debug additional_flags=-Winline}] } {
|
||||||
return -1
|
return -1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ standard_testfile .c inline-markers.c
|
||||||
|
|
||||||
if {[prepare_for_testing $testfile.exp $testfile \
|
if {[prepare_for_testing $testfile.exp $testfile \
|
||||||
[list $srcfile $srcfile2] \
|
[list $srcfile $srcfile2] \
|
||||||
{debug optimize=-O2 additional_flags=-Winline}]} {
|
{debug additional_flags=-Winline}]} {
|
||||||
return -1
|
return -1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ set MIFLAGS "-i=mi"
|
||||||
standard_testfile .c inline-markers.c
|
standard_testfile .c inline-markers.c
|
||||||
|
|
||||||
if {[prepare_for_testing $testfile.exp $testfile \
|
if {[prepare_for_testing $testfile.exp $testfile \
|
||||||
[list $srcfile $srcfile2] {debug optimize=-O2}]} {
|
[list $srcfile $srcfile2] {debug additional_flags=-Winline}]} {
|
||||||
return -1
|
return -1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
standard_testfile .c inline-markers.c
|
standard_testfile .c inline-markers.c
|
||||||
|
|
||||||
if {[prepare_for_testing $testfile.exp $testfile \
|
if {[prepare_for_testing $testfile.exp $testfile \
|
||||||
[list $srcfile $srcfile2] {debug optimize=-O2}]} {
|
[list $srcfile $srcfile2] {debug additional_flags=-Winline}]} {
|
||||||
return -1
|
return -1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,12 @@
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
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 int x, y;
|
||||||
extern volatile int z;
|
extern volatile int z;
|
||||||
|
|
||||||
|
@ -26,7 +32,7 @@ void marker(void)
|
||||||
x += y - z; /* set breakpoint 2 here */
|
x += y - z; /* set breakpoint 2 here */
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void inlined_fn(void)
|
inline ATTR void inlined_fn(void)
|
||||||
{
|
{
|
||||||
x += y + z;
|
x += y + z;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue