13883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher// RUN: %clang_cc1 %s -emit-llvm -o -
23883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher
33883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher#pragma pack(push, 2)
43883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherstruct H {
53883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned long f1;
63883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned long f2;
73883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  union {
83883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher    struct opaque1 *f3;
93883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher    struct opaque2 *f4;
103883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher    struct {
113883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher      struct opaque3 *f5;
123883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher      unsigned short  f6;
133883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher    } f7;
143883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  } f8;
153883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher};
163883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher#pragma pack(pop)
173883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher
183883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherstruct E {
193883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned long f1;
203883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned long f2;
213883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher};
223883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher
233883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christophertypedef long (*FuncPtr) ();
243883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher
253883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherextern long bork(FuncPtr handler, const struct E *list);
263883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher
273883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherstatic long hndlr()
283883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher{
293883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  struct H cmd = { 4, 412 };
302d6a5670465cb3f1d811695a9f23e372508240d2Richard Smith  struct H cmd2 = { 4, 412, 0 };
313883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  return 0;
323883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher}
333883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christophervoid foo(void *inWindow) {
343883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  static const struct E events[] = {
353883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher    { 123124, 1 }
363883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  };
373883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  bork(hndlr, events);
383883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher}
39