| /* Copyright (C) 2010-2015 Free Software Foundation, Inc. |
| |
| This file is part of GDB. |
| |
| 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/>. */ |
| |
| /* The original program corresponding to implptr.S. |
| This came from Jakub's gcc-patches email implementing |
| DW_OP_GNU_implicit_pointer. |
| Note that it is not ever compiled, implptr.S is used instead. |
| However, it is used to extract breakpoint line numbers. */ |
| |
| struct S |
| { |
| int *x, y; |
| }; |
| |
| int u[6]; |
| |
| static inline void |
| add (struct S *a, struct S *b, int c) |
| { |
| *a->x += *b->x; /* baz breakpoint */ |
| a->y += b->y; |
| u[c + 0]++; |
| a = (struct S *) 0; |
| u[c + 1]++; |
| a = b; |
| u[c + 2]++; |
| } |
| |
| int |
| foo (int i) |
| { |
| int j = i; |
| struct S p[2] = { {&i, i * 2}, {&j, j * 2} }; |
| add (&p[0], &p[1], 0); |
| p[0].x = &j; |
| p[1].x = &i; |
| add (&p[0], &p[1], 3); |
| return i + j; /* foo breakpoint */ |
| } |
| |
| typedef int *intp; |
| typedef intp *intpp; |
| typedef intpp *intppp; |
| |
| int __attribute__ ((noinline, used, noclone)) |
| bar (int i) |
| { |
| intp j = &i; |
| intpp k = &j; |
| intppp l = &k; |
| i++; /* bar breakpoint */ |
| return i; |
| } |
| |
| int main () |
| { |
| return bar(5) + foo (23); |
| } |