1 // RUN: %clang_cc1 -emit-llvm %s -o - -triple i386-apple-macosx10.7.2
2 // PR1084
3 
4 extern "C"
5 {
6   typedef unsigned char PRUint8;
7   typedef unsigned int PRUint32;
8 }
9 typedef PRUint32 nsresult;
10 struct nsID
11 {
12 };
13 typedef nsID nsIID;
14 class nsISupports
15 {
16 };
17 extern "C++"
18 {
19   template < class T > struct nsCOMTypeInfo
20   {
GetIIDnsCOMTypeInfo21     static const nsIID & GetIID ()
22     {
23     }
24   };
25 }
26 
27 class nsIDOMEvent:public nsISupports
28 {
29 };
30 class nsIDOMEventListener:public nsISupports
31 {
GetIID()32 public:static const nsIID & GetIID ()
33   {
34   }
35   virtual nsresult
36     __attribute__ ((regparm (0), cdecl)) HandleEvent (nsIDOMEvent * event) =
37     0;
38 };
39 class nsIDOMMouseListener:public nsIDOMEventListener
40 {
GetIID()41 public: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 };
50 typedef
51 typeof (&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      };
71 static const EventTypeData sEventTypes[] = {
72   {
73    sMouseEvents, (sizeof (sMouseEvents) / sizeof (sMouseEvents[0])),
74    &nsCOMTypeInfo < nsIDOMMouseListener >::GetIID ()}
75 };
76