1// RUN: %clang_cc1 -emit-llvm %s -o - -triple i386-apple-macosx10.7.2
2// PR1084
3
4extern "C"
5{
6  typedef unsigned char PRUint8;
7  typedef unsigned int PRUint32;
8}
9typedef PRUint32 nsresult;
10struct nsID
11{
12};
13typedef nsID nsIID;
14class nsISupports
15{
16};
17extern "C++"
18{
19  template < class T > struct nsCOMTypeInfo
20  {
21    static const nsIID & GetIID ()
22    {
23    }
24  };
25}
26
27class nsIDOMEvent:public nsISupports
28{
29};
30class nsIDOMEventListener:public nsISupports
31{
32public:static const nsIID & GetIID ()
33  {
34  }
35  virtual nsresult
36    __attribute__ ((regparm (0), cdecl)) HandleEvent (nsIDOMEvent * event) =
37    0;
38};
39class nsIDOMMouseListener:public nsIDOMEventListener
40{
41public:static const nsIID & GetIID ()
42  {
43    static const nsIID iid = {
44    };
45  }
46  virtual nsresult
47    __attribute__ ((regparm (0),
48		    cdecl)) MouseDown (nsIDOMEvent * aMouseEvent) = 0;
49};
50typedef
51typeof (&nsIDOMEventListener::HandleEvent)
52  GenericHandler;
53     struct EventDispatchData
54     {
55       PRUint32 message;
56       GenericHandler method;
57       PRUint8 bits;
58     };
59     struct EventTypeData
60     {
61       const EventDispatchData *events;
62       int numEvents;
63       const nsIID *iid;
64     };
65     static const EventDispatchData sMouseEvents[] = {
66       {
67	(300 + 2),
68	reinterpret_cast < GenericHandler > (&nsIDOMMouseListener::MouseDown),
69	0x01}
70     };
71static const EventTypeData sEventTypes[] = {
72  {
73   sMouseEvents, (sizeof (sMouseEvents) / sizeof (sMouseEvents[0])),
74   &nsCOMTypeInfo < nsIDOMMouseListener >::GetIID ()}
75};
76