From 95ba4780488b53104ea51cc0702f99a9a800984b Mon Sep 17 00:00:00 2001 From: Bernd Edlinger Date: Thu, 19 Dec 2019 23:41:37 +0100 Subject: [PATCH 2/2] Add a test case for step over inline functions --- gdb/testsuite/gdb.cp/next-inline.cc | 34 +++++++++++++++++++++++++++++++ gdb/testsuite/gdb.cp/next-inline.exp | 39 ++++++++++++++++++++++++++++++++++++ gdb/testsuite/gdb.cp/next-inline.h | 34 +++++++++++++++++++++++++++++++ 3 files changed, 107 insertions(+) create mode 100644 gdb/testsuite/gdb.cp/next-inline.cc create mode 100644 gdb/testsuite/gdb.cp/next-inline.exp create mode 100644 gdb/testsuite/gdb.cp/next-inline.h diff --git a/gdb/testsuite/gdb.cp/next-inline.cc b/gdb/testsuite/gdb.cp/next-inline.cc new file mode 100644 index 0000000..dcf5ab9 --- /dev/null +++ b/gdb/testsuite/gdb.cp/next-inline.cc @@ -0,0 +1,34 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2019 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 . */ + +#include "next-inline.h" + +int __attribute__((noinline, noclone)) +get_alias_set (tree *t) +{ if (t != NULL + && TREE_TYPE (t).z != 1 + && TREE_TYPE (t).z != 2 + && TREE_TYPE (t).z != 3) + return 0; + return 1; +} + +tree xx; +int main() +{ get_alias_set(&xx); + abort(); +} diff --git a/gdb/testsuite/gdb.cp/next-inline.exp b/gdb/testsuite/gdb.cp/next-inline.exp new file mode 100644 index 0000000..6badc8c --- /dev/null +++ b/gdb/testsuite/gdb.cp/next-inline.exp @@ -0,0 +1,39 @@ +# Copyright 2019 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 . + +standard_testfile + +if { [prepare_for_testing "failed to prepare" "next-inline" \ + {next-inline.cc} \ + {debug nowarnings optimize=-O2}] } { + return -1 +} + +if ![runto_main] { + fail "can't run to main" + return +} + +gdb_test "bt" "\\s*\\#0\\s+main.*" "in main" +gdb_test "step" ".*" "step into get_alias_set" +gdb_test "bt" "\\s*\\#0\\s+\[^\r\]*next-inline\\.cc:.*" "not in inline" +gdb_test "next" ".*" "next step 1" +gdb_test "bt" "\\s*\\#0\\s+\[^\r\]*next-inline\\.cc:.*" "not in inline 1" +gdb_test "next" ".*" "next step 2" +gdb_test "bt" "\\s*\\#0\\s+\[^\r\]*next-inline\\.cc:.*" "not in inline 2" +gdb_test "next" ".*" "next step 3" +gdb_test "bt" "\\s*\\#0\\s+\[^\r\]*next-inline\\.cc:.*" "not in inline 3" +gdb_test "next" ".*" "next step 4" +gdb_test "bt" "\\s*\\#0\\s+\[^\r\]*next-inline\\.cc:.*" "not in inline 4" diff --git a/gdb/testsuite/gdb.cp/next-inline.h b/gdb/testsuite/gdb.cp/next-inline.h new file mode 100644 index 0000000..99fb1b2 --- /dev/null +++ b/gdb/testsuite/gdb.cp/next-inline.h @@ -0,0 +1,34 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2019 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 . */ + +#include + +struct tree{ + volatile int x; + volatile int z; +}; + +#define TREE_TYPE(NODE) (*tree_check (NODE, 0)) + +inline tree * +tree_check (tree *t, int i) +{ + if (t->x != i) + abort(); + tree *x = t; + return x; +} -- 1.9.1