Home | History | Annotate | Line # | Download | only in gdb.opt
      1 /* Copyright (C) 2008-2024 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 volatile int *array_p;
     29 
     30 void bar(void);
     31 
     32 void
     33 init_array (int *array, int n)
     34 {
     35   int i;
     36   for (i = 0; i < n; ++i)
     37     array[i] = 0;
     38 }
     39 
     40 inline ATTR int func1(int arg1)
     41 {
     42   int array[64];
     43   init_array (array, 64);
     44   array_p = array;
     45   array[0] = result;
     46   array[1] = arg1;
     47   bar ();
     48   return x * y + array_p[0] * arg1;
     49 }
     50 
     51 inline ATTR int func2(int arg2)
     52 {
     53   return x * func1 (arg2);
     54 }
     55 
     56 inline ATTR
     57 void
     58 scoped (int s)
     59 {
     60   int loc1 = 10;
     61   if (s > 0)
     62     {
     63       int loc2 = 20;
     64       s++; /* bp for locals 1 */
     65       if (s > 1)
     66 	{
     67 	  int loc3 = 30;
     68 	  s++; /* bp for locals 2 */
     69 	}
     70     }
     71   s++; /* bp for locals 3 */
     72 }
     73 
     74 int main (void)
     75 {
     76   int val;
     77 
     78   x = 7;
     79   y = 8;
     80   bar ();
     81 
     82   val = func1 (result);
     83   result = val;
     84 
     85   val = func2 (result);
     86   result = val;
     87 
     88   scoped (40);
     89 
     90   return 0;
     91 }
     92