// RUN: %clang_cc1 -emit-llvm %s -o -
// 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 ()}
};
