1 /* Copyright (C) 2008-2023 Free Software Foundation, Inc. 2 3 This program is free software; you can redistribute it and/or modify 4 it under the terms of the GNU General Public License as published by 5 the Free Software Foundation; either version 3 of the License, or 6 (at your option) any later version. 7 8 This program is distributed in the hope that it will be useful, 9 but WITHOUT ANY WARRANTY; without even the implied warranty of 10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 GNU General Public License for more details. 12 13 You should have received a copy of the GNU General Public License 14 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 15 16 /* This is only ever run if it is compiled with a new-enough GCC, but 17 we don't want the compilation to fail if compiled by some other 18 compiler. */ 19 #ifdef __GNUC__ 20 #define ATTR __attribute__((always_inline)) 21 #else 22 #define ATTR 23 #endif 24 25 int x, y; 26 volatile int z = 0; 27 volatile int result; 28 29 void bar(void); 30 void marker(void); 31 void noinline(void); 32 33 inline ATTR int func1(void) 34 { 35 bar (); 36 return x * y; 37 } 38 39 inline ATTR int func2(void) 40 { 41 return x * func1 (); 42 } 43 44 inline ATTR void func3(void) 45 { 46 bar (); 47 } 48 49 inline ATTR void outer_inline1(void) 50 { 51 noinline (); 52 } 53 54 inline ATTR void outer_inline2(void) 55 { 56 outer_inline1 (); 57 } 58 59 int main (void) 60 { /* start of main */ 61 int val; 62 63 x = 7; 64 y = 8; /* set mi break here */ 65 66 result = func1 (); 67 result = func2 (); 68 marker (); 69 70 result = 0; 71 result = 0; /* set breakpoint 3 here */ 72 73 func1 (); /* first call */ 74 func1 (); /* second call */ 75 marker (); 76 77 result = 0; 78 result = 0; /* set breakpoint 4 here */ 79 80 func1 (); 81 func3 (); 82 marker (); 83 84 result = 0; 85 result = 0; /* set breakpoint 5 here */ 86 87 marker (); 88 func1 (); 89 func3 (); 90 marker (); /* set breakpoint 6 here */ 91 92 outer_inline2 (); 93 94 return 0; 95 } 96