1 /* This testcase is part of GDB, the GNU debugger. 2 3 Copyright 2013-2015 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 dummy (); 58 asm (".global foo_end_lbl\nfoo_end_lbl:"); 59 return 0; 60 } 61 62 int 63 bar (struct t x, struct t y, struct t z) 64 { 65 dummy (); 66 asm (".global bar_end_lbl\nbar_end_lbl:"); 67 return 0; 68 } 69 70 int 71 main (void) 72 { 73 struct s v = { 0, 1, 2 }; 74 struct t w = { 5, 0, 1, 0, 1, 0, 1, 0, 1, 7 }; 75 int ans; 76 77 ans = foo (v, v, v); 78 79 end (); 80 81 ans = bar (w, w, w); 82 83 end (); 84 85 return ans; 86 } 87