// RUN: %clang_cc1 -emit-llvm %s -o - -triple i386-apple-macosx10.7.2
// PR1084

extern "C"
{
  typedef unsigned char PRUint8;
  typedef unsigned int PRUint32;
}
typedef PRUint32 nsresult;
struct nsID
{
};
typedef nsID nsIID;
class nsISupports
{
};
extern "C++"
{
  template < class T > struct nsCOMTypeInfo
  {
    static const nsIID & GetIID ()
    {
    }
  };
}

class nsIDOMEvent:public nsISupports
{
};
class nsIDOMEventListener:public nsISupports
{
public:static const nsIID & GetIID ()
  {
  }
  virtual nsresult
    __attribute__ ((regparm (0), cdecl)) HandleEvent (nsIDOMEvent * event) =
    0;
};
class nsIDOMMouseListener:public nsIDOMEventListener
{
public:static const nsIID & GetIID ()
  {
    static const nsIID iid = {
    };
  }
  virtual nsresult
    __attribute__ ((regparm (0),
		    cdecl)) MouseDown (nsIDOMEvent * aMouseEvent) = 0;
};
typedef
typeof (&nsIDOMEventListener::HandleEvent)
  GenericHandler;
     struct EventDispatchData
     {
       PRUint32 message;
       GenericHandler method;
       PRUint8 bits;
     };
     struct EventTypeData
     {
       const EventDispatchData *events;
       int numEvents;
       const nsIID *iid;
     };
     static const EventDispatchData sMouseEvents[] = {
       {
	(300 + 2),
	reinterpret_cast < GenericHandler > (&nsIDOMMouseListener::MouseDown),
	0x01}
     };
static const EventTypeData sEventTypes[] = {
  {
   sMouseEvents, (sizeof (sMouseEvents) / sizeof (sMouseEvents[0])),
   &nsCOMTypeInfo < nsIDOMMouseListener >::GetIID ()}
};
