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 { 21 static const nsIID & GetIID () 22 { 23 } 24 }; 25 } 26 27 class nsIDOMEvent:public nsISupports 28 { 29 }; 30 class nsIDOMEventListener:public nsISupports 31 { 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 { 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