1 /* This testcase is part of GDB, the GNU debugger. 2 3 Copyright 2013-2023 Free Software Foundation, Inc. 4 5 This program is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 3 of the License, or 8 (at your option) any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 17 18 struct s 19 { 20 unsigned char a; 21 unsigned char b; 22 unsigned char c; 23 }; 24 25 struct t 26 { 27 /* First, a complete byte. */ 28 unsigned char a; 29 /* Next, 8 single bits. */ 30 unsigned char b : 1; 31 unsigned char c : 1; 32 unsigned char d : 1; 33 unsigned char e : 1; 34 unsigned char f : 1; 35 unsigned char g : 1; 36 unsigned char h : 1; 37 unsigned char i : 1; 38 /* Now another byte. */ 39 unsigned char j; 40 }; 41 42 void 43 end (void) 44 { 45 /* Nothing. */ 46 } 47 48 void 49 dummy (void) 50 { 51 /* Nothing. */ 52 } 53 54 int 55 foo (struct s x, struct s y, struct s z) 56 { 57 asm (".global foo_start_lbl\nfoo_start_lbl:"); 58 dummy (); 59 asm (".global foo_end_lbl\nfoo_end_lbl:"); 60 return 0; 61 } 62 63 int 64 bar (struct t x, struct t y, struct t z) 65 { 66 asm (".global bar_start_lbl\nbar_start_lbl:"); 67 dummy (); 68 asm (".global bar_end_lbl\nbar_end_lbl:"); 69 return 0; 70 } 71 72 int 73 main (void) 74 { 75 struct s v = { 0, 1, 2 }; 76 struct t w = { 5, 0, 1, 0, 1, 0, 1, 0, 1, 7 }; 77 int ans; 78 79 ans = foo (v, v, v); 80 81 end (); 82 83 ans = bar (w, w, w); 84 85 end (); 86 87 return ans; 88 } 89